` tags. [#2281](https://github.com/gocodebox/lifterlms/issues/2281)
-+ When an order post is restored from the trash its post status will now be "llms-pending" in favor of the default "draft" status.
-
-##### Bug Fixes
-
-+ Fixed unclosed checkout div wrapper on empty cart. [#2277](https://github.com/gocodebox/lifterlms/issues/2277)
-+ Don't attempt to lookup the default payment gateway from user meta data.
-+ Fixed required fields duplication when the form is a child of a `.wp-block-column` element. [#2134](https://github.com/gocodebox/lifterlms/issues/2134)
-+ Fixed an issue that prevented disabling the access plan’s option, Override Membership Redirects, once enabled. [#2234](https://github.com/gocodebox/lifterlms/issues/2234)
-+ Disabled `scroll-behavior: smooth` on checkout screen to address form element validity checking issues on Chromium-based browsers. [#2206](https://github.com/gocodebox/lifterlms/issues/2206)
-
-##### Deprecations
-
-+ Deprecated `LLMS_Controller_Orders::switch_payment_source()` in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Deprecated the `lifterlms_update_option_{$type}` action in favor of the `llms_update_option_{$type}` filter.
-+ Method `LLMS_Controller_Orders::confirm_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::confirm_pending_order()`.
-+ Method `LLMS_Controller_Orders::create_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::create_pending_order()`.
-+ Method `LLMS_Controller_Orders::switch_payment_source()` is deprecated in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Passing jQuery selections into the `window.LLMS.Spinner` functions is deprecated. Use JS `Elements` or selection strings parseable by `document.querySelector()` instead.
-+ Deprecated hook `llms_{$method}_title` in favor of `llms_{$method}_refund_title`.
-
-##### Developer Notes
-
-+ Added admin settings helper function, `llms_get_dashicon_link()`, intended to enable the addition of external resource helper links to settings field descriptions.
-+ The `LLMS_Student` object can be instantiated as an empty object and bypass current user autoloading. In the future this may affect integrations using the `lifterlms_new_pending_order` action hook which will receive an "empty" student object during order setup by gateways utilizing new AJAX-powered checkout endpoints.
-+ Added a filter, `llms_gateway_{$this->id}_logging_enabled`, which will allow force enabling/disabling of gateway logging functions.
-+ Improved payment gateway secure string logging by adding a method, `add_secure_string()` allowing developers to add secure strings during runtime without the necessity of registering the strings using filters.
-+ Introduces new function `llms_is_option_secure()` for determining if an "secured" option is defined in a "secure" manner.
-+ Implemented new gateway feature: `modify_recurring_payments`. [#2176](https://github.com/gocodebox/lifterlms/issues/2176)
-+ Added two new parameters to LLMS_Access_Plan::get_redirection_url() - `$encode` to optionally get a raw (not encoded) URL. - `$querystring_only` to optionally get only the redirect URL if set via NPUT_GET variable.
-+ Added new parameter `$querystring_only` to the filter hook `llms_plan_get_checkout_redirection`.
-+ Admin settings fields now display `after_html` for additional field types which support `desc`.
-+ The CSS for `.llms-spinning` and `.llms-spinner` elements is no longer loaded as part of the `lifterlms.css` and `admin.css` files, instead it is loaded dynamically when `window.LLMS.Spinner` functions are called. In some cases CSS overrides to these elements which relied on CSS rule load order may no longer successfully override the default CSS rules. These overrides may need to be updated to have more specific selectors in order to ensure the overrides are retained.
-+ The Javascript object, `window.LLMS.Spinner`, has been converted to a module accessible from the same variable.
-+ The `window.LLMS.Spinner` methods now accept JS Elements and selector strings parseable by `document.querySelector()` in addition to jQuery selections.
-+ Added new filter `llms_transaction_can_be_refunded` enabling custom refund restrictions to be applied to a transaction.
-
-##### Updated Templates
-
-+ [templates/block-templates/archive-course.html](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/block-templates/archive-course.html)
-+ [templates/block-templates/archive-llms_membership.html](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/block-templates/archive-llms_membership.html)
-+ [templates/block-templates/single-no-access.html](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/block-templates/single-no-access.html)
-+ [templates/block-templates/taxonomy-course_cat.html](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/block-templates/taxonomy-course_cat.html)
-+ [templates/block-templates/taxonomy-course_difficulty.html](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/block-templates/taxonomy-course_difficulty.html)
-+ [templates/block-templates/taxonomy-course_tag.html](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/block-templates/taxonomy-course_tag.html)
-+ [templates/block-templates/taxonomy-course_track.html](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/block-templates/taxonomy-course_track.html)
-+ [templates/block-templates/taxonomy-membership_cat.html](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/block-templates/taxonomy-membership_cat.html)
-+ [templates/block-templates/taxonomy-membership_tag.html](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/block-templates/taxonomy-membership_tag.html)
-+ [templates/checkout/form-gateways.php](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/checkout/form-gateways.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/checkout/form-switch-source.php)
-+ [templates/myaccount/view-order-actions.php](https://github.com/gocodebox/lifterlms/blob/7.0.0/templates/myaccount/view-order-actions.php)
-
-
-v6.11.0 - 2022-09-22
---------------------
-
-##### Updates and Enhancements
-
-+ Since version 6.0.0, the Certificate Title Block provided the option to use four Google-hosted fonts. These fonts will now be served from the site's server in favor of serving them from the Google Fonts CDN. For more information about this change, please refer to https://make.wordpress.org/themes/2022/06/18/complying-with-gdpr-when-using-google-fonts/. If you wish to continue loading fonts from Google's CDN, add the following code to your functions.php file: `add_filter( 'llms_use_google_webfonts', '__return_true' );`. [#2189](https://github.com/gocodebox/lifterlms/issues/2189)
-+ Upgraded included library, `@woocommerce/action-scheduler`, to version [3.5.2](https://github.com/woocommerce/action-scheduler/releases/tag/3.5.2).
-
-##### Bug Fixes
-
-+ Fixed a division by zero error encountered on quiz reporting screens for quizzes with 0 total available points. [#2270](https://github.com/gocodebox/lifterlms/issues/2270)
-
-
-v7.0.0-rc.1 - 2022-09-14
-------------------------
-
-##### New Features
-
-+ Added handling for admin settings options that store their option values in a nested array.
-+ Added new AJAX checkout and payment source switching endpoints for payment gateways to utilize instead of the preexisting synchronous form submission methods.
-+ On purchase completed retrieve the redirection URL from the INPUT_POST 'redirect' variable, if no 'redirect' variable is passed via INPUT_GET. The INPUT_POST 'redirect' variable comes from the new checkout form's hidden field 'redirect' populated with LLMS_Access_Plan::get_redirection_url(). [#2229](https://github.com/gocodebox/lifterlms/issues/2229)
-
-##### Updates and Enhancements
-
-+ When an order post is restored from the trash its post status will now be "llms-pending" in favor of the default "draft" status.
-
-##### Bug Fixes
-
-+ Don't attempt to lookup the default payment gateway from user meta data.
-+ Fixed an issue that prevented disabling the access plan’s option, Override Membership Redirects, once enabled. [#2234](https://github.com/gocodebox/lifterlms/issues/2234)
-+ Disabled `scroll-behavior: smooth` on checkout screen to address form element validity checking issues on Chromium-based browsers. [#2206](https://github.com/gocodebox/lifterlms/issues/2206)
-
-##### Deprecations
-
-+ Deprecated `LLMS_Controller_Orders::switch_payment_source()` in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Deprecated the `lifterlms_update_option_{$type}` action in favor of the `llms_update_option_{$type}` filter.
-+ Method `LLMS_Controller_Orders::confirm_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::confirm_pending_order()`.
-+ Method `LLMS_Controller_Orders::create_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::create_pending_order()`.
-+ Method `LLMS_Controller_Orders::switch_payment_source()` is deprecated in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Passing jQuery selections into the `window.LLMS.Spinner` functions is deprecated. Use JS `Elements` or selection strings parseable by `document.querySelector()` instead.
-+ Deprecated hook `llms_{$method}_title` in favor of `llms_{$method}_refund_title`.
-
-##### Developer Notes
-
-+ Added admin settings helper function, `llms_get_dashicon_link()`, intended to enable the addition of external resource helper links to settings field descriptions.
-+ The `LLMS_Student` object can be instantiated as an empty object and bypass current user autoloading. In the future this may affect integrations using the `lifterlms_new_pending_order` action hook which will receive an "empty" student object during order setup by gateways utilizing new AJAX-powered checkout endpoints.
-+ Added a filter, `llms_gateway_{$this->id}_logging_enabled`, which will allow force enabling/disabling of gateway logging functions.
-+ Improved payment gateway secure string logging by adding a method, `add_secure_string()` allowing developers to add secure strings during runtime without the necessity of registering the strings using filters.
-+ Introduces new function `llms_is_option_secure()` for determining if an "secured" option is defined in a "secure" manner.
-+ Implemented new gateway feature: `modify_recurring_payments`. [#2176](https://github.com/gocodebox/lifterlms/issues/2176)
-+ Added two new parameters to LLMS_Access_Plan::get_redirection_url() - `$encode` to optionally get a raw (not encoded) URL. - `$querystring_only` to optionally get only the redirect URL if set via NPUT_GET variable.
-+ Added new parameter `$querystring_only` to the filter hook `llms_plan_get_checkout_redirection`.
-+ Admin settings fields now display `after_html` for additional field types which support `desc`.
-+ The CSS for `.llms-spinning` and `.llms-spinner` elements is no longer loaded as part of the `lifterlms.css` and `admin.css` files, instead it is loaded dynamically when `window.LLMS.Spinner` functions are called. In some cases CSS overrides to these elements which relied on CSS rule load order may no longer successfully override the default CSS rules. These overrides may need to be updated to have more specific selectors in order to ensure the overrides are retained.
-+ The Javascript object, `window.LLMS.Spinner`, has been converted to a module accessible from the same variable.
-+ The `window.LLMS.Spinner` methods now accept JS Elements and selector strings parseable by `document.querySelector()` in addition to jQuery selections.
-+ Added new filter `llms_transaction_can_be_refunded` enabling custom refund restrictions to be applied to a transaction.
-
-##### Updated Templates
-
-+ [templates/checkout/form-gateways.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-rc.1/templates/checkout/form-gateways.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-rc.1/templates/checkout/form-switch-source.php)
-+ [templates/myaccount/view-order-actions.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-rc.1/templates/myaccount/view-order-actions.php)
-
-
-v6.10.2 - 2022-09-14
---------------------
-
-##### Updates and Enhancements
-
-+ Updated `woocommerce/action-scheduler` to version [3.5.1](https://github.com/woocommerce/action-scheduler/releases/tag/3.5.1).
-
-##### Security Fixes
-
-+ Fixed a data sanitization issue related to achievement permalinks.
-
-
-v6.10.1 - 2022-09-07
---------------------
-
-##### Bug Fixes
-
-+ Fixed a PHP warning raised when logging errors during email notification dispatch. [#2250](https://github.com/gocodebox/lifterlms/issues/2250)
-+ Fixed issue preventing one-time orders for being included in membership revenue reporting widgets. [#2254](https://github.com/gocodebox/lifterlms/issues/2254)
-
-
-v7.0.0-beta.1 - 2022-08-29
---------------------------
-
-##### New Features
-
-+ Added handling for admin settings options that store their option values in a nested array.
-+ Added new AJAX checkout and payment source switching endpoints for payment gateways to utilize instead of the preexisting synchronous form submission methods.
-+ On purchase completed retrieve the redirection URL from the INPUT_POST 'redirect' variable, if no 'redirect' variable is passed via INPUT_GET. The INPUT_POST 'redirect' variable comes from the new checkout form's hidden field 'redirect' populated with LLMS_Access_Plan::get_redirection_url(). [#2229](https://github.com/gocodebox/lifterlms/issues/2229)
-
-##### Updates and Enhancements
-
-+ When an order post is restored from the trash its post status will now be "llms-pending" in favor of the default "draft" status.
-
-##### Bug Fixes
-
-+ Don't attempt to lookup the default payment gateway from user meta data.
-+ Fixed an issue that prevented disabling the access plan’s option, Override Membership Redirects, once enabled. [#2234](https://github.com/gocodebox/lifterlms/issues/2234)
-+ Disabled `scroll-behavior: smooth` on checkout screen to address form element validity checking issues on Chromium-based browsers. [#2206](https://github.com/gocodebox/lifterlms/issues/2206)
-
-##### Deprecations
-
-+ Deprecated `LLMS_Controller_Orders::switch_payment_source()` in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Deprecated the `lifterlms_update_option_{$type}` action in favor of the `llms_update_option_{$type}` filter.
-+ Method `LLMS_Controller_Orders::confirm_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::confirm_pending_order()`.
-+ Method `LLMS_Controller_Orders::create_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::create_pending_order()`.
-+ Method `LLMS_Controller_Orders::switch_payment_source()` is deprecated in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Passing jQuery selections into the `window.LLMS.Spinner` functions is deprecated. Use JS `Elements` or selection strings parseable by `document.querySelector()` instead.
-+ Deprecated hook `llms_{$method}_title` in favor of `llms_{$method}_refund_title`.
-
-##### Developer Notes
-
-+ Added admin settings helper function, `llms_get_dashicon_link()`, intended to enable the addition of external resource helper links to settings field descriptions.
-+ The `LLMS_Student` object can be instantiated as an empty object and bypass current user autoloading. In the future this may affect integrations using the `lifterlms_new_pending_order` action hook which will receive an "empty" student object during order setup by gateways utilizing new AJAX-powered checkout endpoints.
-+ Added a filter, `llms_gateway_{$this->id}_logging_enabled`, which will allow force enabling/disabling of gateway logging functions.
-+ Improved payment gateway secure string logging by adding a method, `add_secure_string()` allowing developers to add secure strings during runtime without the necessity of registering the strings using filters.
-+ Introduces new function `llms_is_option_secure()` for determining if an "secured" option is defined in a "secure" manner.
-+ Implemented new gateway feature: `modify_recurring_payments`. [#2176](https://github.com/gocodebox/lifterlms/issues/2176)
-+ Added two new parameters to LLMS_Access_Plan::get_redirection_url() - `$encode` to optionally get a raw (not encoded) URL. - `$querystring_only` to optionally get only the redirect URL if set via NPUT_GET variable.
-+ Added new parameter `$querystring_only` to the filter hook `llms_plan_get_checkout_redirection`.
-+ Admin settings fields now display `after_html` for additional field types which support `desc`.
-+ The CSS for `.llms-spinning` and `.llms-spinner` elements is no longer loaded as part of the `lifterlms.css` and `admin.css` files, instead it is loaded dynamically when `window.LLMS.Spinner` functions are called. In some cases CSS overrides to these elements which relied on CSS rule load order may no longer successfully override the default CSS rules. These overrides may need to be updated to have more specific selectors in order to ensure the overrides are retained.
-+ The Javascript object, `window.LLMS.Spinner`, has been converted to a module accessible from the same variable.
-+ The `window.LLMS.Spinner` methods now accept JS Elements and selector strings parseable by `document.querySelector()` in addition to jQuery selections.
-+ Added new filter `llms_transaction_can_be_refunded` enabling custom refund restrictions to be applied to a transaction.
-
-##### Updated Templates
-
-+ [templates/checkout/form-gateways.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-beta.1/templates/checkout/form-gateways.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-beta.1/templates/checkout/form-switch-source.php)
-+ [templates/myaccount/view-order-actions.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-beta.1/templates/myaccount/view-order-actions.php)
-
-
-v6.10.0 - 2022-08-29
---------------------
-
-##### Updates and Enhancements
-
-+ Updtaed woocommerce/action-scheduler to version [3.5.0](https://github.com/woocommerce/action-scheduler/releases/tag/3.5.0).
-+ Upgrades the bundled `quill-wordcount` module to version 2.0, addressing an issue encountered when counting words with non-Latin character languages.
-
-##### Bug Fixes
-
-+ Make `
` elements in quiz attempt results scrollable.
-+ Make sure the current user can edit the lesson, when changing its completion status from the admin reporting.
-+ Added missing textodmain for the string 'Move {post_title} to the Trash'. [#2224](https://github.com/gocodebox/lifterlms/issues/2224)
-+ Fixed PHP fatal error when quick editing an award. [#2231](https://github.com/gocodebox/lifterlms/issues/2231)
-+ Updated Spain's provinces list. [#2243](https://github.com/gocodebox/lifterlms/issues/2243)
-
-##### Deprecations
-
-+ The files `assets/vendor/quill/quill.module.wordcount.js` and `assets/vendor/quill/quill.module.wordcount.min.js` are to be removed in the next major release. Instead of loading these files directly, use `wp_enqueue_script( 'llms-quill-wordcount' )`.
-
-
-v6.9.0 - 2022-07-28
--------------------
-
-##### Updates and Enhancements
-
-+ Removed site-wide font-weight styles targeting `` through `` elements. [#2217](https://github.com/gocodebox/lifterlms/issues/2217)
-
-##### Bug Fixes
-
-+ Fixed issue preventing decimals from being used for coupon discount amounts. [#2149](https://github.com/gocodebox/lifterlms/issues/2149)
-+ Added AR (Arezzo) to Italy's states list. [#2214](https://github.com/gocodebox/lifterlms/issues/2214)
-
-
-v7.0.0-alpha.4 - 2022-07-18
----------------------------
-
-+ Fixed error causing recurring payment reschedules to fail with a fatal error.
-
-
-v7.0.0-alpha.3 - 2022-07-16
----------------------------
-
-+ Add max-length sanitization to admin settings which specify a max length.
-+ Fixed invalid user links on admin order screens when viewing incomplete orders missing a registered user.
-+ Added new function `llms_is_secure()`.
-+ Added `lifterlms-` and `llms-` as automatically stripped prefixed when using `llms_strip_prefixes()`.
-+ Added new temporary metadata, `temp_gateway_ids` to orders for use by gateways when switching payment methods.
-+ Moved `LLMS.Spinner` Javascript into an `@lifterlms/components` module and removed its reliance on jQuery.
-+ Disabled `scroll-behavior: scroll` on checkout screens to address a validity reporting issue on Chromium-based browsers.
-
-
-v6.8.0 - 2022-07-12
--------------------
-
-##### Bug Fixes
-
-+ Fixed Hello Theme's word-break and spacing for quiz answer options. [#2132](https://github.com/gocodebox/lifterlms/issues/2132)
-+ Fixed text/label alignment in Twenty-Twenty-Two theme.
-+ Fixed regression introduced in version 6.3.0 which prevented the Courses nav item from being customized in the BuddyPress profile nav menu. [#2142](https://github.com/gocodebox/lifterlms/issues/2142)
-
-##### Developer Notes
-
-+ Added new filter `llms_product_get_restrictions` hook to filter the list of restrictions placed on a given product. [#2201](https://github.com/gocodebox/lifterlms/issues/2201)
-
-
-v7.0.0-alpha.2 - 2022-06-23
----------------------------
-
-##### New Features
-
-+ Added handling for admin settings options that store their option values in a nested array.
-+ Added new AJAX checkout and payment source switching endpoints for payment gateways to utilize instead of the preexisting synchronous form submission methods.
-
-##### Bug Fixes
-
-+ Don't attempt to lookup the default payment gateway from user meta data.
-+ Fixes Hello Theme's word-break and spacing for quiz answer options. Also fixes text/label alignment in Twenty-Twenty-Two Theme. [#2132](https://github.com/gocodebox/lifterlms/issues/2132)
-
-##### Deprecations
-
-+ Deprecated `LLMS_Controller_Orders::switch_payment_source()` in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Deprecated the `lifterlms_update_option_{$type}` action in favor of the `llms_update_option_{$type}` filter.
-+ Method `LLMS_Controller_Orders::confirm_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::confirm_pending_order()`.
-+ Method `LLMS_Controller_Orders::create_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::create_pending_order()`.
-+ Method `LLMS_Controller_Orders::switch_payment_source()` is deprecated in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Deprecated hook `llms_{$method}_title` in favor of `llms_{$method}_refund_title`.
-
-##### Developer Notes
-
-+ Added admin settings helper function, `llms_get_dashicon_link()`, intended to enable the addition of external resource helper links to settings field descriptions.
-+ The `LLMS_Student` object can be instantiated as an empty object and bypass current user autoloading. In the future this may affect integrations using the `lifterlms_new_pending_order` action hook which will receive an "empty" student object during order setup by gateways utilizing new AJAX-powered checkout endpoints.
-+ Added a filter, `llms_gateway_{$this->id}_logging_enabled`, which will allow force enabling/disabling of gateway logging functions.
-+ Improved payment gateway secure string logging by adding a method, `add_secure_string()` allowing developers to add secure strings during runtime without the necessity of registering the strings using filters.
-+ Implemented new gateway feature: `modify_recurring_payments`. [#2176](https://github.com/gocodebox/lifterlms/issues/2176)
-+ Admin settings fields now display `after_html` for additional field types which support `desc`.
-+ Added new filter `llms_transaction_can_be_refunded` enabling custom refund restrictions to be applied to a transaction.
-
-##### Updated Templates
-
-+ [templates/checkout/form-gateways.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-alpha.2/templates/checkout/form-gateways.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-alpha.2/templates/checkout/form-switch-source.php)
-+ [templates/myaccount/view-order-actions.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-alpha.2/templates/myaccount/view-order-actions.php)
-
-
-v7.0.0-alpha.1 - 2022-06-15
----------------------------
-
-##### New Features
-
-+ Added new AJAX checkout and payment source switching endpoints for payment gateways to utilize instead of the preexisting synchronous form submission methods.
-
-##### Bug Fixes
-
-+ Don't attempt to lookup the default payment gateway from user meta data.
-
-##### Deprecations
-
-+ Deprecated `LLMS_Controller_Orders::switch_payment_source()` in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Method `LLMS_Controller_Orders::confirm_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::confirm_pending_order()`.
-+ Method `LLMS_Controller_Orders::create_pending_order()` is deprecated in favor of `LLMS_Controller_Checkout::create_pending_order()`.
-+ Method `LLMS_Controller_Orders::switch_payment_source()` is deprecated in favor of `LLMS_Controller_Checkout::switch_payment_source()`.
-+ Deprecated hook `llms_{$method}_title` in favor of `llms_{$method}_refund_title`.
-
-##### Developer Notes
-
-+ The `LLMS_Student` object can be instantiated as an empty object and bypass current user autoloading. In the future this may affect integrations using the `lifterlms_new_pending_order` action hook which will receive an "empty" student object during order setup by gateways utilizing new AJAX-powered checkout endpoints.
-+ Improved payment gateway secure string logging by adding a method, `add_secure_string()` allowing developers to add secure strings during runtime without the necessity of registering the strings using filters.
-+ Implemented new gateway feature: `modify_recurring_payments`. [#2176](https://github.com/gocodebox/lifterlms/issues/2176)
-+ Added new filter `llms_transaction_can_be_refunded` enabling custom refund restrictions to be applied to a transaction.
-
-##### Updated Templates
-
-+ [templates/checkout/form-gateways.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-alpha.1/templates/checkout/form-gateways.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-alpha.1/templates/checkout/form-switch-source.php)
-+ [templates/myaccount/view-order-actions.php](https://github.com/gocodebox/lifterlms/blob/7.0.0-alpha.1/templates/myaccount/view-order-actions.php)
-
-
-v6.7.0 - 2022-06-09
--------------------
-
-##### Updates and Enhancements
-
-+ Update LifterLMS Blocks to [v2.4.3](https://make.lifterlms.com/2022/06/09/lifterlms-blocks-version-2-4-3/).
-+ Upgraded Action Scheduler to [v3.4.1](https://github.com/woocommerce/action-scheduler/releases/tag/3.4.1).
-+ Upgraded Action Scheduler to [v3.4.2](https://github.com/woocommerce/action-scheduler/releases/tag/3.4.2).
-
-##### Bug Fixes
-
-+ Fixed a fatal error on PHP 8+ when restoring a post type from revision. [#2164](https://github.com/gocodebox/lifterlms/issues/2164)
-
-
-v6.6.0 - 2022-05-23
--------------------
-
-##### PHP Minimum Required Version Change
-
-+ **Raised the minimum supported PHP version to 7.4.**
-
-##### WordPress Minimum Required Version Change
-
-+ **Raised the minimum supported WordPress core version to 5.6.**
-
-##### New Features
-
-+ Added support for WordPress 6.0.
-
-##### Bug Fixes
-
-+ Fixed the ability for 3rd party plugins to use the `lifterlms_external_engagement_handler_arguments` and `lifterlms_external_engagement_query_arguments` filters.
-+ Added automatic exclusion of "no cache" pages from the WP Engine server-side cache when using "pretty" permalinks. [#1717](https://github.com/gocodebox/lifterlms/issues/1717)
-+ Stop subtracting LifterLMS order note comments from global comment counts via the `wp_count_comments` filter on WordPress 6.0 and later. See related WordPress Trac ticket [#19901](https://core.trac.wordpress.org/ticket/19901)
-
-
-v6.5.0 - 2022-05-11
--------------------
-
-##### Upcoming PHP Version Requirement Change
-
-**This will be the last version of LifterLMS to support PHP 7.3. The next version of LifterLMS, expected before the end of May 2022, will raise the minimum supported PHP version to 7.4. PHP 7.3 reached its official [end of life](https://www.php.net/eol.php) on December 6, 2021. If you are still using PHP 7.3 please upgrade to PHP 7.4 or later as soon as possible.**
-
-##### Updates and Enhancements
-
-+ Updates LifterLMS Rest to [v1.0.0-beta.25](https://make.lifterlms.com/2022/05/11/lifterlms-rest-api-version-1-0-0-beta-25/).
-
-##### Bug Fixes
-
-+ Students who have already completed a lesson will now automatically bypass the lesson's drip restrictions. [#1835](https://github.com/gocodebox/lifterlms/issues/1835)
-+ Properly encode certificate JS localization data. [#2140](https://github.com/gocodebox/lifterlms/issues/2140)
-
-##### Developer Notes
-
-+ Added a new filter, `llms_lesson_drip_bypass_if_completed`, which controls the automatic bypass of drip restrictions for completed lessons. [#1835](https://github.com/gocodebox/lifterlms/issues/1835)
-+ Allow avoiding error return when updating an `LLMS_Post_Model` post meta with the same value as the one stored in the database. [#909](https://github.com/gocodebox/lifterlms/issues/909)
-
-
-v6.4.0 - 2022-04-19
--------------------
-
-##### Upcoming PHP Version Requirement Change
-
-**LifterLMS will drop support for PHP 7.3 by May, 2022. This will raise the minimum supported PHP version to 7.4. PHP 7.3 reached its official [end of life](https://www.php.net/eol.php) on December 6, 2021. If you are still using PHP 7.3 please upgrade to PHP 7.4 or later as soon as possible.**
-
-##### New Features
-
-+ Any "secure" payment gateway options will be automatically masked when written to debug log files.
-
-##### Updates and Enhancements
-
-+ When building notification content, only parse merge codes used in the notification. [#1465](https://github.com/gocodebox/lifterlms/issues/1465)
-+ Improved checks related to the number of quiz attempts allowed for each student.
-+ Prevent browser page caching on quizzes. [#2092](https://github.com/gocodebox/lifterlms/issues/2092)
-
-##### Bug Fixes
-
-+ Allowed classes extended from the manual payment gateway class to display payment instructions.
-+ Allowed the `LLMS_Shortcode_User_Info` class to be filtered by the `llms_load_shortcodes` and `llms_load_shortcode_path` hooks.
-+ Stop using the deprecated `FILTER_SANITIZE_STRING` constant.
-+ Fixed an issue that caused shortcodes to not be replaced in some engagement emails. [#2070](https://github.com/gocodebox/lifterlms/issues/2070)
-+ Improve core forms detection so to exclude duplicates. [#2052](https://github.com/gocodebox/lifterlms/issues/2052)
-+ Added Aosta (AO) to the list of Italian provinces. [#2098](https://github.com/gocodebox/lifterlms/issues/2098)
-+ Fixed a compatibility issue with the Elementor Pro Theme Builder encountered on course and membership catalogs. [#2111](https://github.com/gocodebox/lifterlms/issues/2111)
-+ Fixed an issue where merge codes in reusable blocks on certificate templates were not replaced when the template was displayed or when the certificate was awarded and published. [#2058](https://github.com/gocodebox/lifterlms/issues/2058)
-+ Fixed an issue with OceanWP and Twenty Twenty themes where the Terms and Conditions checkbox was displayed incorrectly. [#1938](https://github.com/gocodebox/lifterlms/issues/1938)
-
-##### Developer Notes
-
-+ Added a new filter, `llms_secure_strings` allowing developers to register strings that should be automatically masked when written to log files.
-+ Added new filter `llms_no_cache` to control whether or not LifterLMS will send nocache headers. [#2092](https://github.com/gocodebox/lifterlms/issues/2092)
-+ Added new filter `llms_template_loader_restricted_priority` to control the priority of the `template_include` hook callback used to load restricted content single templates.
-
-
-v6.3.0 - 2022-04-07
--------------------
-
-##### Upcoming PHP Version Requirement Change
-
-**LifterLMS will drop support for PHP 7.3 by May, 2022. This will raise the minimum supported PHP version to 7.4. PHP 7.3 reached its official [end of life](https://www.php.net/eol.php) on December 6, 2021. If you are still using PHP 7.3 please upgrade to PHP 7.4 or later as soon as possible.**
-
-##### New Features
-
-+ Automatically add student's dashboard endpoints to the BuddyPress profile nav. [#627](https://github.com/gocodebox/lifterlms/issues/627)
-
-##### Updates and Enhancements
-
-+ Upgraded LifterLMS Blocks to [v2.4.2](https://make.lifterlms.com/2022/04/07/lifterlms-blocks-version-2-4-2/).
-+ Updated LifterLMS Helper to [v3.4.2](https://make.lifterlms.com/2022/04/01/lifterlms-helper-version-3-4-2/).
-
-##### Bug Fixes
-
-+ Fixed paged queries in student dashboard not working when using plain permalinks.
-+ Fixed an issue that prevented searching students in some admin areas when WordPress was installed in a subdirectory. [#2096](https://github.com/gocodebox/lifterlms/issues/2096)
-+ Fixed lesson's comments status not reflecting default global setting when created with the course builder. [#2099](https://github.com/gocodebox/lifterlms/issues/2099)
-
-##### Deprecations
-
-+ Deprecated `LLMS_Integration_Buddypress::achievements_screen()` method with no replacement.
-+ Deprecated `LLMS_Integration_Buddypress::certificates_screen()` method with no replacement.
-+ Deprecated `LLMS_Integration_Buddypress::courses_screen()` method with no replacement.
-+ Deprecated `LLMS_Integration_Buddypress::memberships_screen()` method with no replacement.
-+ Deprecated `LLMS_Integration_Buddypress::remove_courses_paginate_links_filter()` method with no replacement.
-+ Deprecated `LLMS_Integration_Buddypress::modify_courses_paginate_links()` method with no replacement.
-
-##### Developer Notes
-
-+ Added `llms_get_paged_query_var()` function that returns the page number query var for the current request.
-+ Added new filter `llms_buddypress_profile_endpoints` to control the LifterLMS endpoints to be added to the BuddyPress profile.
-+ Added new filter `llms_buddypress_min_nav_item_slug` to control the LifterLMS main BuddyPress' nav item slug.
-+ Added new filter `llms_buddypress_min_nav_item_label` to control the LifterLMS main BuddyPress' nav item label.
-+ Added new filter `llms_buddypress_min_nav_item_position` to control the LifterLMS main BuddyPress' nav item position.
-
-
-v6.2.0 - 2022-03-30
--------------------
-
-##### Updates and Enhancements
-
-+ Changed the `llmsStudentsSelect2()` JavaScript function to use the LifterLMS REST API "list students" endpoint instead of the `LLMS_AJAX_Handler::query_students()` PHP function.
-+ Upgraded LifterLMS Blocks to [v2.4.1](https://make.lifterlms.com/2022/03/30/lifterlms-blocks-version-2-4-1/).
-
-##### Bug Fixes
-
-+ Fixed issue with hidden checkboxes on LifterLMS forms.
-+ Fixed a compatiblity issue with the Divi Theme Builder ignoring access restrictions when using template with custom body. [#2063](https://github.com/gocodebox/lifterlms/issues/2063)
-+ Fixed an error encountered on the Engagements > Certificates screen when using the BuddyBoss theme. [#2080](https://github.com/gocodebox/lifterlms/issues/2080)
-
-##### Deprecations
-
-+ Deprecated `LLMS_AJAX_Handler::query_students()`. Use the [REST API list students](https://developer.lifterlms.com/rest-api/#tag/Students/paths/~1students/get) endpoint instead.
-
-##### Developer Notes
-
-+ Added new filter `llms_template_loader_priority` to control the priority of the `template_include` hook callback used to load restricted content templates.
-
-
-v6.1.0 - 2022-03-23
--------------------
-
-##### Upcoming PHP Version Requirement Change
-
-**LifterLMS will drop support for PHP 7.3 by May, 2022. This will raise the minimum supported PHP version to 7.4. PHP 7.3 reached its official [end of life](https://www.php.net/eol.php) on December 6, 2021. If you are still using PHP 7.3 please upgrade to PHP 7.4 or later as soon as possible.**
-
-##### New Features
-
-+ Added the `{earned_date}` certificate merge code.
-
-##### Updates and Enhancements
-
-+ Changed the label for the `{current_date}` certificate merge code from 'Earned Date' to 'Current Date'.
-+ Updates LifterLMS REST to [v1.0.0-beta.24](https://make.lifterlms.com/2022/03/17/lifterlms-rest-api-version-1-0-0-beta-24/).
-
-##### Bug Fixes
-
-+ Fixed an issue encountered when editing an order with a completed payment plan. [#2067](https://github.com/gocodebox/lifterlms/issues/2067)
-+ Fixed access of protected LLMS_Abstract_Query properties.
-
-
-v6.0.0 - 2022-03-08
--------------------
-
-**This major release of LifterLMS focuses on improving the experience of creating, designing, and managing achievements and certificates: use the block editor to design certificates, sync awards with their templates, award achievements and certificates on demand without requiring an engagement trigger, and [much more](https://lifterlms.com/docs/getting-started-with-lifterlms-6-0/). In addition, this release removes a significant number of previously deprecated classes, methods, and functions. Please read the full Breaking Changes sections for more information on removed code.**
-
-##### New Features
-
-+ The block editor is now enabled by default for certificates when using WordPress versions 5.8 and later.
- + Existing certificates are marked as "legacy" and will continue to use the classic editor until migrated.
- + To migrate a certificate, click the "Migrate Certificate" button. This will force the certificate's content into blocks.
-+ A number of new settings are available to certificates when using the block editor:
- + Set the certificate's display (and print) size using common paper sizes such as US Letter, US Legal, A3, A4, and more.
- + Set the certificate's display orientation: portrait of landscape.
- + Set the certificate's inner margins.
- + Set the certificate's background color.
-+ A new block, the Certificate Title Block, has been made available to certificates.
- + The block works like a WordPress core Heading Block with added options for selecting from a few display fonts (provided by Google Web Fonts).
- + The block controls the title of awarded certificates.
-+ Added the ability for administrators and LMS managers to edit earned certificates/achievements from the students reporting screen, as well as award new certificates/achievements to students.
-+ Added the ability to sync awarded certificates with the template used to generate them. [#1078](https://github.com/gocodebox/lifterlms/issues/1078)
-+ The `post_name` of earned certificate posts will be generated with a randomized 3+ character string in favor of relying on sequential numbers.
-+ Added certificate global options for the default size of new certificates and certificate templates.
-+ Certificate and email template merge code buttons now include [llms-user] information shortcodes.
-+ Added certificate sequential ID functionality merge code.
-+ Added a link to return to the student dashboard when viewing an awarded certificate. [#1959](https://github.com/gocodebox/lifterlms/issues/1959)
-+ Provide additional information to hooks on the student single course reporting screen.
-
-##### Updates and Enhancements
-
-+ Added new default images for use with achievements and certificates.
- + The site-wide default images can be customized on the admin panel under Settings -> Engagements.
- + The old default images will automatically be used for legacy certificates and can be forced by filtering `llms_use_legacy_engagement_images`. [#1081](https://github.com/gocodebox/lifterlms/issues/1081)
-+ Certificates no longer use the `header.php` and `footer.php` files from the site's theme, instead custom templates (`templates/certificates/header.php` and `templates/certificates/footer.php`) are used instead. These templates are minimal and exclude theme wrappers which reduces the visual conflicts encountered from theme wrappers, backgrounds, and more, especially when printing certificates. [#463](https://github.com/gocodebox/lifterlms/issues/463)
-+ The achievements and certificates dashboard endpoints are now paginated. [#669](https://github.com/gocodebox/lifterlms/issues/669)
-+ Added pagination to achievement and certificate reporting pages.
-+ The URL of earned user certificates has been changed from "my_certificate" to "certificate". Requests to the old url are automatically redirected to the new url, including instances where the URL slug has been translated.
-+ The URL of certificate template previews has been changed from "certificate" to "certificate-template".
-+ The certificate merge code, `{first_name}`, now outputs an empty string in favor of falling back to the user's nickname when there is no first name for the user. [#1640](https://github.com/gocodebox/lifterlms/issues/1640)
-+ The look and behavior of the certificate {{MINI_CERTIFICATE}} pop-over notification merge code now displays a placeholder preview of the certificate in favor of attempting to render a tiny version of the actual certificate. [#1950](https://github.com/gocodebox/lifterlms/issues/1950)
-+ The coupon code in the student's order details table is now wrapped in a `` tag instead of an `` tag. [#2033](https://github.com/gocodebox/lifterlms/issues/2033)
-+ Updates LifterLMS REST to [v1.0.0-beta.23](https://make.lifterlms.com/2022/02/23/lifterlms-rest-api-version-1-0-0-beta-23/).
-+ Updated LifterLMS Blocks to [version 2.4.0](https://make.lifterlms.com/2022/02/25/lifterlms-blocks-version-2-4-0/).
-
-##### Bug Fixes
-
-+ Delayed engagements are automatically unscheduled when the related post is deleted.
-+ A disabled student dashboard endpoint will no longer display the endpoint's summary on the main dashboard page. [#535](https://github.com/gocodebox/lifterlms/issues/535)
-+ Prior to sending a delayed engagement the recipient's enrollment in the related post is verified resulting the engagement not being triggered if the recipient's enrollment has been terminated. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ Post search filter boxes on various post tables will now longer display a link to the selected post.
-+ Basic notification code is no longer loaded on the admin panel.
-+ Fixed the label hover on picture type quizzes in some themes. [#2015](https://github.com/gocodebox/lifterlms/issues/2015)
-
-##### Database Migration
-
-+ A database migration is required when upgrading from versions earlier than 6.0.0. A description of the required updates can be found at [https://lifterlms.com/docs/lifterlms-database-updates/#600](https://lifterlms.com/docs/lifterlms-database-updates/#600).
-
-##### Deprecations
-
-+ Public access to properties of the abstract `LLMS_Database_Query` has been deprecated.
- + Public access to class property `LLMS_Database_Query::$found_results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_found_results()`.
- + Public access to class property `LLMS_Database_Query::$max_pages`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_max_pages()`.
- + Public access to class property `LLMS_Database_Query::$number_results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_number_results()`.
- + Public access to class property `LLMS_Database_Query::$results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_results()`.
- + Public access to class property `LLMS_Database_Query::$query_vars`. The variable as a whole cannot be publicly accessed, instead use `LLMS_Database_Query::get()` and `LLMS_Database_Query::set()` to read and write to the array.
- + The above changes were made to the abstract class `LLMS_Database_Query` but the following concrete classes that utilize the abstract are also affected by this change: `LLMS_Query_User_Postmeta`, `LLMS_Student_Query`, `LLMS_Query_Quiz_Attempt`, `LLMS_Events_Query`, and `LLMS_Notifications_Query`.
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Achievement::format_string()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_title()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Achievement::create()` is deprecated with no replacement.
-+ Method `LLMS_Achievements::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement()`.
-+ Class `LLMS_Certificate` is deprecated with no direct replacement.
- + Method `LLMS_Certificate::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Certificate::format_string()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
-+ Method `LLMS_Certificates::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate()`.
-+ Method `LLMS_Engagements::init()` is deprecated with no replacement.
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Method `LLMS_Database_Query::set_found_results()` is deprecated.
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement_User::has_user_earned()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::init()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::get_content_html()` is deprecated with no replacement.
-+ Class `LLMS_Certificate_User` is deprecated with no direct replacement.
- + Method `LLMS_Certificate_User::init()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::set_shortcode_user()` is deprecated with no replacement.
-+ Engagement debug logging is removed. Use `llms_log()` directly instead.
-+ Filter `llms_db_query_get_default_args` is deprecated in favor of `llms_{$this->id}_query_get_default_args`.
-+ Filter `llms_certificate_has_user_earned` is deprecated in favor of `llms_earned_certificate_dupcheck`.
-+ Unused public class property `LLMS_Achievements::$content` is deprecated with no replacement.
-+ Method `LLMS_Admin_Post_Types::meta_metabox_init()` is deprecated with no replacement.
-+ The site options `lifterlms_certificate_bg_img_width`, `lifterlms_certificate_bg_img_height`, and `lifterlms_certificate_legacy_image_size` are now used only for certificates and certificate templates created using the classic editor.
- + The settings, found on the Engagements Settings screen, are hidden by default.
- + During the database upgrade from versions earlier than 6.x, an site option, `llms_has_legacy_certificates` is added when at least one certificate is found. This option will display the settings so they can continue to be used for legacy certificates.
- + After migrating all certificates on a site, the settings will still display. In order to remove them from the screen a developer can either delete the option `llms_has_legacy_certificates` or return `false` from the filter `llms_has_legacy_certificates`.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ The constant `LLMS_ENGAGEMENT_DEBUG` is deprecated with no replacement.
-+ Engagement debugging via `LLMS_Engagements::log` is deprecated. Use `llms_log()` instead.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Filter `lifterlms_register_post_type_llms_my_certificate` is deprecated in favor of `lifterlms_register_post_type_my_certificate`.
-+ Deprecated the misspelled protected method `LLMS_Database_Query::preprare_query()` and replaced with `LLMS_Database_Query::prepare_query()`.
- + Class method `LLMS_Events_Query::preprare_query` replaced with `LLMS_Events_Query::prepare_query()`.
- + Class method `LLMS_Query_Quiz_Attempt::preprare_query` replaced with `LLMS_Query_Quiz_Attempt::prepare_query()`.
- + Class method `LLMS_Query_User_Postmeta::preprare_query` replaced with `LLMS_Query_User_Postmeta::prepare_query()`.
- + Class method `LLMS_Student_Query::preprare_query` replaced with `LLMS_Student_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`. [#859](https://github.com/gocodebox/lifterlms/issues/859)
-
-##### Breaking Changes
-
-+ Removed FSE template: `templates/block-templates/single-certificate.html`.
-+ Removed the deprecated `LLMS()` function in favor of the `llms()` function.
-+ Removed the deprecated the `LLMS_SendWP::do_remote_install()` method in favor of the `LLMS_Abstract_Email_Provider::do_remote_install()` method.
-+ Removed the deprecated `LLMS_Abstract_Email_Provider::output_css()` method.
-+ Removed the deprecated `LLMS_Abstract_Generator_Posts::increment()` method.
-+ Removed the deprecated `LLMS_Admin_Users_Table::load_dependencies()` method.
-+ Removed the deprecated `LLMS_Admin_Import::localize_stat()` method.
-+ Removed the deprecated `LLMS_Admin_Notices_Core::check_staging()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::generator_course_status()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::output_step_html()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::scripts()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::watch_course_generation()` method.
-+ Removed the deprecated `llms_format_decimal()` function.
-+ Removed the deprecated `llms_set_person_auth_cookie()` function.
-+ Removed the deprecated `LLMS_Course::sections` property.
-+ Removed the deprecated `LLMS_Course::sku` property.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_pw_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::is_inline_script_enqueued()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::format_date()` method.
-+ Removed the deprecated `LLMS_Generator::get_author_id_from_raw()` method.
-+ Removed the deprecated `LLMS_Generator::get_default_post_status()` method.
-+ Removed the deprecated `LLMS_Generator::get_generated_posts()` method.
-+ Removed the deprecated `LLMS_Generator::increment()` method.
-+ Removed the deprecated `llms__created` action hook from the `LLMS_Abstract_Database_Store::create()` method.
-+ Removed the deprecated `llms__deleted` action hook from the `LLMS_Abstract_Database_Store::delete()` method.
-+ Removed the deprecated `llms__updated` action hook from the `LLMS_Abstract_Database_Store::update()` method.
-+ Removed the deprecated `llms_user_removed_from_membership_level` action hook from the `LLMS_Student::unenroll()` method.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `lifterlms_template_pricing_table()` function.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `templates/product/pricing-table.php` file.
-+ Removed the deprecated `LLMS_Frontend_Password` class.
-+ Removed the deprecated `LLMS_Install::db_updates()` method.
-+ Removed the deprecated `LLMS_Install::update_notice()` method.
-+ Removed the deprecated `LLMS_Notifications::dispatch_processors()` method.
-+ Removed the deprecated `llms_processors_async_dispatching` filter hook from the `LLMS_Notifications::__construct()` method.
-+ Removed the deprecated `LLMS_Notifications::$_instance` property.
-+ Removed the deprecated `LLMS_Person_Handler::register()` method.
-+ Removed the deprecated `LLMS_Person_Handler::sanitize_field()` method.
-+ Removed the deprecated `LLMS_Person_Handler::update()` method.
-+ Removed the deprecated `LLMS_Person_Handler::validate_fields()` method.
-+ Removed the deprecated `LLMS_Person_Handler::voucher_toggle_script()` method.
-+ Removed the deprecated `templates/admin/notices/db-update.php` file.
-+ Removed the deprecated `templates/admin/notices/db-updating.php` file.
-+ Removed the deprecated `llms_usernames_blacklist` filter hook in the `llms_get_usernames_blocklist()` function.
-+ Removed the deprecated `includes/libraries/wp-background-processing/index.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-async-request.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-background-process.php` file.
-+ Removed the deprecated `LLMS_Section::get_next_available_lesson_order()` method.
-+ Removed the deprecated `LLMS_Section::get_order()` method.
-+ Removed the deprecated `LLMS_Section::get_parent_course()` method.
-+ Removed the deprecated `LLMS_Section::set_parent_course()` method.
-+ Removed the deprecated `LLMS_AJAX::check_voucher_duplicate()` method.
-+ Removed the deprecated `LLMS_AJAX::get_ajax_data()` method.
-+ Removed the deprecated `LLMS_AJAX::register_script()` method.
-+ Removed the deprecated `LLMS_Interface_Post_Audio` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Sales_Page` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Video` interface.
-+ Removed the deprecated `LLMS_Achievements::$_instance` property.
-+ Removed the deprecated `LLMS_Certificates::$_instance` property.
-+ Removed the deprecated `LLMS_Emails::$_instance` property.
-+ Removed the deprecated `LLMS_Engagements::$_instance` property.
-+ Removed the deprecated `LLMS_Events::$_instance` property.
-+ Removed the deprecated `LLMS_Grades::$_instance` property.
-+ Removed the deprecated `LLMS_Integrations::$_instance` property.
-+ Removed the deprecated `LLMS_Payment_Gateways::$_instance` property.
-+ Removed the deprecated `LLMS_Processors::$_instance` property.
-+ Removed the deprecated `LLMS_Sessions::$_instance` property.
-
-##### Developer Notes
-
-+ Added `LLMS_Awards_Query`, used for querying data about awarded certificates and achievements.
- + The method signature `LLMS_Student::get_achievements()` and `LLMS_Student::get_certificates()` now use this class under tho hood.
- + The previous method signature, which passed data into a direct SQL query, is now deprecated.
-+ Achievement and certificate data storage locations have been modified, primarily to reduce reliance on the `wp_postmeta` table which will result in a site-wide performance improvement, especially on large sites.
- + Meta properties `_llms_achievement_content` and `_llms_certificate_content` have been removed in favor of `WP_Post::$post_content`.
- + Meta properties `_llms_achievement_title` and `_llms_certificate_title` have been removed in favor of `WP_Post::$post_title`.
- + Meta properties `_llms_achievement_template` and `_llms_certificate_template` have been removed in favor of `WP_Post::$post_parent`.
- + Meta properties `_llms_achievement_image` and `_llms_certificate_image` have been moved the meta property `_thumbnail_id` in order to utilize the WordPress core's featured image functionality and internal APIs.
-+ Reliance on `lifterlms_user_postmeta` for achievement and certificate data will be removed in a future release.
- + User postmeta properties `_achievement_earned` and `_certificate_earned` will continue to be recorded but are no longer being used internally.
- + The `updated_date` is now accessible via `WP_Post::$post_date`.
- + The `user_id` is now accessible via `WP_Post::$post_author`.
-+ Added new Javascript UI components library, modeled after `@wordpress/components`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/components).
-+ Added a new SVG icon library, modeled after `@wordpress/icons`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/icons).
-+ The merge code button seen on certificate and email template editors is now an SVG image instead of a PNG.
-+ Added utility function for escaping and quoting strings. [#1027](https://github.com/gocodebox/lifterlms/issues/1027)
-+ Added the ability to force an admin metabox field value through the new `meta` arg. [#2016](https://github.com/gocodebox/lifterlms/issues/2016)
-+ Added new utility function for stripping prefixes from strings.
-
-##### Performance Improvements
-
-+ Increased the number of files that are autoloaded instead of manually loaded.
-
-##### Updated Templates
-
-+ [templates/achievements/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/achievements/loop.php)
-+ [templates/achievements/template.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/achievements/template.php)
-+ [templates/admin/notices/db-update.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/admin/notices/db-update.php)
-+ [templates/admin/notices/db-updating.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/admin/notices/db-updating.php)
-+ [templates/admin/reporting/reporting.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/admin/reporting/reporting.php)
-+ [templates/admin/reporting/tabs/students/courses-course.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/admin/reporting/tabs/students/courses-course.php)
-+ [templates/admin/reporting/tabs/students/information.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/admin/reporting/tabs/students/information.php)
-+ [templates/block-templates/single-certificate.html](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/block-templates/single-certificate.html)
-+ [templates/certificates/actions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/certificates/actions.php)
-+ [templates/certificates/content-legacy.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/certificates/content-legacy.php)
-+ [templates/certificates/content.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/certificates/content.php)
-+ [templates/certificates/dynamic-styles.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/certificates/dynamic-styles.php)
-+ [templates/certificates/footer.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/certificates/footer.php)
-+ [templates/certificates/header.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/certificates/header.php)
-+ [templates/certificates/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/certificates/loop.php)
-+ [templates/certificates/preview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/certificates/preview.php)
-+ [templates/certificates/template.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/certificates/template.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/checkout/form-switch-source.php)
-+ [templates/content-certificate.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/content-certificate.php)
-+ [templates/emails/footer.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/emails/footer.php)
-+ [templates/emails/header.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/emails/header.php)
-+ [templates/myaccount/my-grades-single-table.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/myaccount/my-grades-single-table.php)
-+ [templates/myaccount/view-order-actions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/myaccount/view-order-actions.php)
-+ [templates/myaccount/view-order-information.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/myaccount/view-order-information.php)
-+ [templates/myaccount/view-order-transactions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/myaccount/view-order-transactions.php)
-+ [templates/myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/myaccount/view-order.php)
-+ [templates/product/pricing-table.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/product/pricing-table.php)
-+ [templates/single-certificate.php](https://github.com/gocodebox/lifterlms/blob/6.0.0/templates/single-certificate.php)
-
-
-v6.0.0-rc.1 - 2022-03-03
-------------------------
-
-##### New Features
-
-+ Added a link to return to the student dashboard when viewing an awarded certificate. [#1959](https://github.com/gocodebox/lifterlms/issues/1959)
-+ The block editor is now enabled by default for certificates when using WordPress versions 5.8 and later.
- + Existing certificates are marked as "legacy" and will continue to use the classic editor until migrated.
- + To migrate a certificate, click the "Migrate Certificate" button. This will force the certificate's content into blocks.
-+ A number of new settings are available to certificates when using the block editor:
- + Set the certificate's display (and print) size using common paper sizes such as US Letter, US Legal, A3, A4, and more.
- + Set the certificate's display orientation: portrait of landscape.
- + Set the certificate's inner margins.
- + Set the certificate's background color.
-+ A new block, the Certificate Title Block, has been made available to certificates.
- + The block works like a WordPress core Heading Block with added options for selecting from a few display fonts (provided by Google Web Fonts).
- + The block controls the title of awarded certificates.
-+ + Added the ability to sync awarded certificates with the template used to generate them. [#1078](https://github.com/gocodebox/lifterlms/issues/1078)
-+ The `post_name` of earned certificate posts will be generated with a randomized 3+ character string in favor of relying on sequential numbers.
-+ Added the ability for administrators and LMS managers to edit earned certificates/achievements from the students reporting screen, as well as award new certificates/achievements to students.
-+ + Added certificate global options for the default size of new certificates and certificate templates.
-+ Certificate and email template merge code buttons now include [llms-user] information shortcodes.
-+ Added certificate sequential ID functionality merge code. [Read more](@TODO).
-+ Provide additional information to hooks on the student single course reporting screen.
-
-##### Updates and Enhancements
-
-+ Added pagination to achievement and certificate reporting pages.
-+ Certificates no longer use the `header.php` and `footer.php` files from the site's theme, instead custom templates (`templates/certificates/header.php` and `templates/certificates/footer.php`) are used instead. These templates are minimal and exclude theme wrappers which reduces the visual conflicts encountered from theme wrappers, backgrounds, and more, especially when printing certificates. [#463](https://github.com/gocodebox/lifterlms/issues/463)
-+ The achievements and certificates dashboard endpoints are now paginated. [#669](https://github.com/gocodebox/lifterlms/issues/669)
-+ Added new default images for use with achievements and certificates.
- + The site-wide default images can be customized on the admin panel under Settings -> Engagements.
- + The old default images can be used by filtering `llms_use_legacy_engagement_images`. [#1081](https://github.com/gocodebox/lifterlms/issues/1081)
-+ The URL of earned user certificates has been changed from "my_certificate" to "certificate". Requests to the old url are automatically redirected to the new url, including instances where the URL slug has been translated.
-+ The URL of certificate template previews has been changed from "certificate" to "certificate-template".
-+ The certificate merge code, `{first_name}`, now outputs an empty string in favor of falling back to the user's nickname when there is no first name for the user. [#1640](https://github.com/gocodebox/lifterlms/issues/1640)
-+ Updates LifterLMS REST to [v1.0.0-beta.23](https://make.lifterlms.com/2022/02/23/lifterlms-rest-api-version-1-0-0-beta-23/).
-+ Updated LifterLMS Blocks to [version 2.4.0](https://make.lifterlms.com/2022/02/25/lifterlms-blocks-version-2-4-0/).
-+ The look and behavior of the certificate {{MINI_CERTIFICATE}} pop-over notification merge code now displays a placeholder preview of the certificate in favor of attempting to render a tiny version of the actual certificate. [#1950](https://github.com/gocodebox/lifterlms/issues/1950)
-
-##### Bug Fixes
-
-+ + Fixed how the protected `LLMS_Notifications_Query::$found_results` property is accessed in `LLMS_Abstract_Notification_Controller::has_subscriber_received()`. + Fixed how the protected `LLMS_Notifications_Query::$max_pages` property is accessed in `lifterlms_template_student_dashboard_my_notifications()`.
-+ Delayed engagements are automatically unscheduled when the related post is deleted.
-+ Prior to sending a delayed engagement the recipient's enrollment in the related post is verified resulting the engagement not being triggered if the recipient's enrollment has been terminated. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ A disabled student dashboard endpoint will no longer display the endpoint's summary on the main dashboard page. [#535](https://github.com/gocodebox/lifterlms/issues/535)
-+ Post search filter boxes on various post tables will now longer display a link to the selected post.
-+ Basic notification code is no longer loaded on the admin panel.
-
-##### Deprecations
-
-+ Public access to properties of the abstract `LLMS_Database_Query` has been deprecated.
- + Public access to class property `LLMS_Database_Query::$found_results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_found_results()`.
- + Public access to class property `LLMS_Database_Query::$max_pages`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_max_pages()`.
- + Public access to class property `LLMS_Database_Query::$number_results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_number_results()`.
- + Public access to class property `LLMS_Database_Query::$results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_results()`.
- + Public access to class property `LLMS_Database_Query::$query_vars`. The variable as a whole cannot be publicly accessed, instead use `LLMS_Database_Query::get()` and `LLMS_Database_Query::set()` to read and write to the array.
- + The above changes were made to the abstract class `LLMS_Database_Query` but the following concrete classes that utilize the abstract are also affected by this change: `LLMS_Query_User_Postmeta`, `LLMS_Student_Query`, `LLMS_Query_Quiz_Attempt`, `LLMS_Events_Query`, and `LLMS_Notifications_Query`.
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Achievement::format_string()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_title()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Achievement::create()` is deprecated with no replacement.
-+ Method `LLMS_Achievements::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement()`.
-+ Class `LLMS_Certificate` is deprecated with no direct replacement.
- + Method `LLMS_Certificate::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Certificate::format_string()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
-+ Method `LLMS_Certificates::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate()`.
-+ Method `LLMS_Engagements::init()` is deprecated with no replacement.
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Method `LLMS_Database_Query::set_found_results()` is deprecated.
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement_User::has_user_earned()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::init()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::get_content_html()` is deprecated with no replacement.
-+ Class `LLMS_Certificate_User` is deprecated with no direct replacement.
- + Method `LLMS_Certificate_User::init()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::set_shortcode_user()` is deprecated with no replacement.
-+ Engagement debug logging is removed. Use `llms_log()` directly instead.
-+ Filter `llms_db_query_get_default_args` is deprecated in favor of `llms_{$this->id}_query_get_default_args`.
-+ Filter `llms_certificate_has_user_earned` is deprecated in favor of `llms_earned_certificate_dupcheck`.
-+ Unused public class property `LLMS_Achievements::$content` is deprecated with no replacement.
-+ Method `LLMS_Admin_Post_Types::meta_metabox_init()` is deprecated with no replacement.
-+ The site options `lifterlms_certificate_bg_img_width`, `lifterlms_certificate_bg_img_height`, and `lifterlms_certificate_legacy_image_size` are now used only for certificates and certificate templates created using the classic editor.
- + The settings, found on the Engagements Settings screen, are hidden by default.
- + During the database upgrade from versions earlier than 6.x, an site option, `llms_has_legacy_certificates` is added when at least one certificate is found. This option will display the settings so they can continue to be used for legacy certificates.
- + After migrating all certificates on a site, the settings will still display. In order to remove them from the screen a developer can either delete the option `llms_has_legacy_certificates` or return `false` from the filter `llms_has_legacy_certificates`.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ The constant `LLMS_ENGAGEMENT_DEBUG` is deprecated with no replacement.
-+ Engagement debugging via `LLMS_Engagements::log` is deprecated. Use `llms_log()` instead.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Filter `lifterlms_register_post_type_llms_my_certificate` is deprecated in favor of `lifterlms_register_post_type_my_certificate`.
-+ Deprecated the misspelled protected method `LLMS_Database_Query::preprare_query()` and replaced with `LLMS_Database_Query::prepare_query()`.
- + Class method `LLMS_Events_Query::preprare_query` replaced with `LLMS_Events_Query::prepare_query()`.
- + Class method `LLMS_Query_Quiz_Attempt::preprare_query` replaced with `LLMS_Query_Quiz_Attempt::prepare_query()`.
- + Class method `LLMS_Query_User_Postmeta::preprare_query` replaced with `LLMS_Query_User_Postmeta::prepare_query()`.
- + Class method `LLMS_Student_Query::preprare_query` replaced with `LLMS_Student_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`. [#859](https://github.com/gocodebox/lifterlms/issues/859)
-
-##### Breaking Changes
-
-+ Removed FSE template: `templates/block-templates/single-certificate.html`.
-+ Removed the deprecated `LLMS()` function in favor of the `llms()` function.
-+ Removed the deprecated the `LLMS_SendWP::do_remote_install()` method in favor of the `LLMS_Abstract_Email_Provider::do_remote_install()` method.
-+ Removed the deprecated `LLMS_Abstract_Email_Provider::output_css()` method.
-+ Removed the deprecated `LLMS_Abstract_Generator_Posts::increment()` method.
-+ Removed the deprecated `LLMS_Admin_Users_Table::load_dependencies()` method.
-+ Removed the deprecated `LLMS_Admin_Import::localize_stat()` method.
-+ Removed the deprecated `LLMS_Admin_Notices_Core::check_staging()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::generator_course_status()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::output_step_html()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::scripts()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::watch_course_generation()` method.
-+ Removed the deprecated `llms_format_decimal()` function.
-+ Removed the deprecated `llms_set_person_auth_cookie()` function.
-+ Removed the deprecated `LLMS_Course::sections` property.
-+ Removed the deprecated `LLMS_Course::sku` property.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_pw_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::is_inline_script_enqueued()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::format_date()` method.
-+ Removed the deprecated `LLMS_Generator::get_author_id_from_raw()` method.
-+ Removed the deprecated `LLMS_Generator::get_default_post_status()` method.
-+ Removed the deprecated `LLMS_Generator::get_generated_posts()` method.
-+ Removed the deprecated `LLMS_Generator::increment()` method.
-+ Removed the deprecated `llms__created` action hook from the `LLMS_Abstract_Database_Store::create()` method.
-+ Removed the deprecated `llms__deleted` action hook from the `LLMS_Abstract_Database_Store::delete()` method.
-+ Removed the deprecated `llms__updated` action hook from the `LLMS_Abstract_Database_Store::update()` method.
-+ Removed the deprecated `llms_user_removed_from_membership_level` action hook from the `LLMS_Student::unenroll()` method.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `lifterlms_template_pricing_table()` function.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `templates/product/pricing-table.php` file.
-+ Removed the deprecated `LLMS_Frontend_Password` class.
-+ Removed the deprecated `LLMS_Install::db_updates()` method.
-+ Removed the deprecated `LLMS_Install::update_notice()` method.
-+ Removed the deprecated `LLMS_Notifications::dispatch_processors()` method.
-+ Removed the deprecated `llms_processors_async_dispatching` filter hook from the `LLMS_Notifications::__construct()` method.
-+ Removed the deprecated `LLMS_Notifications::$_instance` property.
-+ Removed the deprecated `LLMS_Person_Handler::register()` method.
-+ Removed the deprecated `LLMS_Person_Handler::sanitize_field()` method.
-+ Removed the deprecated `LLMS_Person_Handler::update()` method.
-+ Removed the deprecated `LLMS_Person_Handler::validate_fields()` method.
-+ Removed the deprecated `LLMS_Person_Handler::voucher_toggle_script()` method.
-+ Removed the deprecated `templates/admin/notices/db-update.php` file.
-+ Removed the deprecated `templates/admin/notices/db-updating.php` file.
-+ Removed the deprecated `llms_usernames_blacklist` filter hook in the `llms_get_usernames_blocklist()` function.
-+ Removed the deprecated `includes/libraries/wp-background-processing/index.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-async-request.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-background-process.php` file.
-+ Removed the deprecated `LLMS_Section::get_next_available_lesson_order()` method.
-+ Removed the deprecated `LLMS_Section::get_order()` method.
-+ Removed the deprecated `LLMS_Section::get_parent_course()` method.
-+ Removed the deprecated `LLMS_Section::set_parent_course()` method.
-+ Removed the deprecated `LLMS_AJAX::check_voucher_duplicate()` method.
-+ Removed the deprecated `LLMS_AJAX::get_ajax_data()` method.
-+ Removed the deprecated `LLMS_AJAX::register_script()` method.
-+ Removed the deprecated `LLMS_Interface_Post_Audio` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Sales_Page` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Video` interface.
-+ Removed the deprecated `LLMS_Achievements::$_instance` property.
-+ Removed the deprecated `LLMS_Certificates::$_instance` property.
-+ Removed the deprecated `LLMS_Emails::$_instance` property.
-+ Removed the deprecated `LLMS_Engagements::$_instance` property.
-+ Removed the deprecated `LLMS_Events::$_instance` property.
-+ Removed the deprecated `LLMS_Grades::$_instance` property.
-+ Removed the deprecated `LLMS_Integrations::$_instance` property.
-+ Removed the deprecated `LLMS_Payment_Gateways::$_instance` property.
-+ Removed the deprecated `LLMS_Processors::$_instance` property.
-+ Removed the deprecated `LLMS_Sessions::$_instance` property.
-
-##### Developer Notes
-
-+ Added `LLMS_Awards_Query`, used for querying data about awarded certificates and achievements.
- + The method signature `LLMS_Student::get_achievements()` and `LLMS_Student::get_certificates()` now use this class under tho hood.
- + The previous method signature, which passed data into a direct SQL query, is now deprecated.
-+ Achievement and certificate data storage locations have been modified, primarily to reduce reliance on the `wp_postmeta` table which will result in a site-wide performance improvement, especially on large sites.
- + Meta properties `_llms_achievement_content` and `_llms_certificate_content` have been removed in favor of `WP_Post::$post_content`.
- + Meta properties `_llms_achievement_title` and `_llms_certificate_title` have been removed in favor of `WP_Post::$post_title`.
- + Meta properties `_llms_achievement_template` and `_llms_certificate_template` have been removed in favor of `WP_Post::$post_parent`.
- + Meta properties `_llms_achievement_image` and `_llms_certificate_image` have been moved the meta property `_thumbnail_id` in order to utilize the WordPress core's featured image functionality and internal APIs.
-+ Reliance on `lifterlms_user_postmeta` for achievement and certificate data will be removed in a future release.
- + User postmeta properties `_achievement_earned` and `_certificate_earned` will continue to be recorded but are no longer being used internally.
- + The `updated_date` is now accessible via `WP_Post::$post_date`.
- + The `user_id` is now accessible via `WP_Post::$post_author`.
-+ Added new Javascript UI components library, modeled after `@wordpress/components`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/components).
-+ Added a new SVG icon library, modeled after `@wordpress/icons`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/icons).
-+ The merge code button seen on certificate and email template editors is now an SVG image instead of a PNG.
-+ Added utility function for escaping and quoting strings. [#1027](https://github.com/gocodebox/lifterlms/issues/1027)
-+ Added the ability to force an admin metabox field value through the new `meta` arg. [#2016](https://github.com/gocodebox/lifterlms/issues/2016)
-+ Added new utility function for stripping prefixes from strings.
-
-##### Performance Improvements
-
-+ Increased the number of files that are autoloaded instead of manually loaded.
-
-##### Updated Templates
-
-+ [templates/achievements/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/achievements/loop.php)
-+ [templates/achievements/template.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/achievements/template.php)
-+ [templates/admin/notices/db-update.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/admin/notices/db-update.php)
-+ [templates/admin/notices/db-updating.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/admin/notices/db-updating.php)
-+ [templates/admin/reporting/reporting.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/admin/reporting/reporting.php)
-+ [templates/admin/reporting/tabs/students/courses-course.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/admin/reporting/tabs/students/courses-course.php)
-+ [templates/admin/reporting/tabs/students/information.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/admin/reporting/tabs/students/information.php)
-+ [templates/block-templates/single-certificate.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/block-templates/single-certificate.html)
-+ [templates/certificates/actions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/certificates/actions.php)
-+ [templates/certificates/content-legacy.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/certificates/content-legacy.php)
-+ [templates/certificates/content.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/certificates/content.php)
-+ [templates/certificates/dynamic-styles.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/certificates/dynamic-styles.php)
-+ [templates/certificates/footer.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/certificates/footer.php)
-+ [templates/certificates/header.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/certificates/header.php)
-+ [templates/certificates/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/certificates/loop.php)
-+ [templates/certificates/preview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/certificates/preview.php)
-+ [templates/certificates/template.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/certificates/template.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/checkout/form-switch-source.php)
-+ [templates/content-certificate.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/content-certificate.php)
-+ [templates/emails/footer.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/emails/footer.php)
-+ [templates/emails/header.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/emails/header.php)
-+ [templates/myaccount/my-grades-single-table.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/myaccount/my-grades-single-table.php)
-+ [templates/myaccount/view-order-actions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/myaccount/view-order-actions.php)
-+ [templates/myaccount/view-order-information.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/myaccount/view-order-information.php)
-+ [templates/myaccount/view-order-transactions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/myaccount/view-order-transactions.php)
-+ [templates/myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/myaccount/view-order.php)
-+ [templates/product/pricing-table.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/product/pricing-table.php)
-+ [templates/single-certificate.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-rc.1/templates/single-certificate.php)
-
-
-v6.0.0-beta.2 - 2022-02-22
---------------------------
-
-##### New Features
-
-+ Added a link to return to the student dashboard when viewing an awarded certificate. [#1959](https://github.com/gocodebox/lifterlms/issues/1959)
-+ The block editor is now enabled by default for certificates when using WordPress versions 5.8 and later.
- + Existing certificates are marked as "legacy" and will continue to use the classic editor until migrated.
- + To migrate a certificate, click the "Migrate Certificate" button. This will force the certificate's content into blocks.
-+ A number of new settings are available to certificates when using the block editor:
- + Set the certificate's display (and print) size using common paper sizes such as US Letter, US Legal, A3, A4, and more.
- + Set the certificate's display orientation: portrait of landscape.
- + Set the certificate's inner margins.
- + Set the certificate's background color.
-+ A new block, the Certificate Title Block, has been made available to certificates.
- + The block works like a WordPress core Heading Block with added options for selecting from a few display fonts (provided by Google Web Fonts).
- + The block controls the title of awarded certificates.
-+ + Added the ability to sync awarded certificates with the template used to generate them. [#1078](https://github.com/gocodebox/lifterlms/issues/1078)
-+ The `post_name` of earned certificate posts will be generated with a randomized 3+ character string in favor of relying on sequential numbers.
-+ Added the ability for administrators and LMS managers to edit earned certificates/achievements from the students reporting screen, as well as award new certificates/achievements to students.
-+ + Added certificate global options for the default size of new certificates and certificate templates.
-+ Certificate and email template merge code buttons now include [llms-user] information shortcodes.
-+ Added certificate sequential ID functionality merge code. [Read more](@TODO).
-
-##### Updates and Enhancements
-
-+ Added pagination to achievement and certificate reporting pages.
-+ Certificates no longer use the `header.php` and `footer.php` files from the site's theme, instead custom templates (`templates/certificates/header.php` and `templates/certificates/footer.php`) are used instead. These templates are minimal and exclude theme wrappers which reduces the visual conflicts encountered from theme wrappers, backgrounds, and more, especially when printing certificates. [#463](https://github.com/gocodebox/lifterlms/issues/463)
-+ The achievements and certificates dashboard endpoints are now paginated. [#669](https://github.com/gocodebox/lifterlms/issues/669)
-+ Added new default images for use with achievements and certificates.
- + The site-wide default images can be customized on the admin panel under Settings -> Engagements.
- + The old default images can be used by filtering `llms_use_legacy_engagement_images`. [#1081](https://github.com/gocodebox/lifterlms/issues/1081)
-+ The URL of earned user certificates has been changed from "my_certificate" to "certificate". Requests to the old url are automatically redirected to the new url, including instances where the URL slug has been translated.
-+ The URL of certificate template previews has been changed from "certificate" to "certificate-template".
-+ The certificate merge code, `{first_name}`, now outputs an empty string in favor of falling back to the user's nickname when there is no first name for the user. [#1640](https://github.com/gocodebox/lifterlms/issues/1640)
-+ Updates LifterLMS REST to [v1.0.0-beta.22](https://make.lifterlms.com/2021/12/15/lifterlms-rest-api-version-1-0-0-beta-22/).
-+ The look and behavior of the certificate {{MINI_CERTIFICATE}} pop-over notification merge code now displays a placeholder preview of the certificate in favor of attempting to render a tiny version of the actual certificate. [#1950](https://github.com/gocodebox/lifterlms/issues/1950)
-
-##### Bug Fixes
-
-+ + Fixed how the protected `LLMS_Notifications_Query::$found_results` property is accessed in `LLMS_Abstract_Notification_Controller::has_subscriber_received()`. + Fixed how the protected `LLMS_Notifications_Query::$max_pages` property is accessed in `lifterlms_template_student_dashboard_my_notifications()`.
-+ Delayed engagements are automatically unscheduled when the related post is deleted.
-+ Prior to sending a delayed engagement the recipient's enrollment in the related post is verified resulting the engagement not being triggered if the recipient's enrollment has been terminated. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ A disabled student dashboard endpoint will no longer display the endpoint's summary on the main dashboard page. [#535](https://github.com/gocodebox/lifterlms/issues/535)
-+ Post search filter boxes on various post tables will now longer display a link to the selected post.
-+ Basic notification code is no longer loaded on the admin panel.
-
-##### Deprecations
-
-+ Public access to properties of the abstract `LLMS_Database_Query` has been deprecated.
- + Public access to class property `LLMS_Database_Query::$found_results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_found_results()`.
- + Public access to class property `LLMS_Database_Query::$max_pages`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_max_pages()`.
- + Public access to class property `LLMS_Database_Query::$number_results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_number_results()`.
- + Public access to class property `LLMS_Database_Query::$results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_results()`.
- + Public access to class property `LLMS_Database_Query::$query_vars`. The variable as a whole cannot be publicly accessed, instead use `LLMS_Database_Query::get()` and `LLMS_Database_Query::set()` to read and write to the array.
- + The above changes were made to the abstract class `LLMS_Database_Query` but the following concrete classes that utilize the abstract are also affected by this change: `LLMS_Query_User_Postmeta`, `LLMS_Student_Query`, `LLMS_Query_Quiz_Attempt`, `LLMS_Events_Query`, and `LLMS_Notifications_Query`.
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Achievement::format_string()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_title()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Achievement::create()` is deprecated with no replacement.
-+ Method `LLMS_Achievements::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement()`.
-+ Class `LLMS_Certificate` is deprecated with no direct replacement.
- + Method `LLMS_Certificate::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Certificate::format_string()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
-+ Method `LLMS_Certificates::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate()`.
-+ Method `LLMS_Engagements::init()` is deprecated with no replacement.
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Method `LLMS_Database_Query::set_found_results()` is deprecated.
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement_User::has_user_earned()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::init()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::get_content_html()` is deprecated with no replacement.
-+ Class `LLMS_Certificate_User` is deprecated with no direct replacement.
- + Method `LLMS_Certificate_User::init()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::set_shortcode_user()` is deprecated with no replacement.
-+ Engagement debug logging is removed. Use `llms_log()` directly instead.
-+ Filter `llms_db_query_get_default_args` is deprecated in favor of `llms_{$this->id}_query_get_default_args`.
-+ Filter `llms_certificate_has_user_earned` is deprecated in favor of `llms_earned_certificate_dupcheck`.
-+ Unused public class property `LLMS_Achievements::$content` is deprecated with no replacement.
-+ Method `LLMS_Admin_Post_Types::meta_metabox_init()` is deprecated with no replacement.
-+ The site options `lifterlms_certificate_bg_img_width`, `lifterlms_certificate_bg_img_height`, and `lifterlms_certificate_legacy_image_size` are now used only for certificates and certificate templates created using the classic editor.
- + The settings, found on the Engagements Settings screen, are hidden by default.
- + During the database upgrade from versions earlier than 6.x, an site option, `llms_has_legacy_certificates` is added when at least one certificate is found. This option will display the settings so they can continue to be used for legacy certificates.
- + After migrating all certificates on a site, the settings will still display. In order to remove them from the screen a developer can either delete the option `llms_has_legacy_certificates` or return `false` from the filter `llms_has_legacy_certificates`.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ The constant `LLMS_ENGAGEMENT_DEBUG` is deprecated with no replacement.
-+ Engagement debugging via `LLMS_Engagements::log` is deprecated. Use `llms_log()` instead.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Filter `lifterlms_register_post_type_llms_my_certificate` is deprecated in favor of `lifterlms_register_post_type_my_certificate`.
-+ Deprecated the misspelled protected method `LLMS_Database_Query::preprare_query()` and replaced with `LLMS_Database_Query::prepare_query()`.
- + Class method `LLMS_Events_Query::preprare_query` replaced with `LLMS_Events_Query::prepare_query()`.
- + Class method `LLMS_Query_Quiz_Attempt::preprare_query` replaced with `LLMS_Query_Quiz_Attempt::prepare_query()`.
- + Class method `LLMS_Query_User_Postmeta::preprare_query` replaced with `LLMS_Query_User_Postmeta::prepare_query()`.
- + Class method `LLMS_Student_Query::preprare_query` replaced with `LLMS_Student_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`. [#859](https://github.com/gocodebox/lifterlms/issues/859)
-
-##### Breaking Changes
-
-+ Removed FSE template: `templates/block-templates/single-certificate.html`.
-+ Removed the deprecated `LLMS()` function in favor of the `llms()` function.
-+ Removed the deprecated the `LLMS_SendWP::do_remote_install()` method in favor of the `LLMS_Abstract_Email_Provider::do_remote_install()` method.
-+ Removed the deprecated `LLMS_Abstract_Email_Provider::output_css()` method.
-+ Removed the deprecated `LLMS_Abstract_Generator_Posts::increment()` method.
-+ Removed the deprecated `LLMS_Admin_Users_Table::load_dependencies()` method.
-+ Removed the deprecated `LLMS_Admin_Import::localize_stat()` method.
-+ Removed the deprecated `LLMS_Admin_Notices_Core::check_staging()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::generator_course_status()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::output_step_html()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::scripts()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::watch_course_generation()` method.
-+ Removed the deprecated `llms_format_decimal()` function.
-+ Removed the deprecated `llms_set_person_auth_cookie()` function.
-+ Removed the deprecated `LLMS_Course::sections` property.
-+ Removed the deprecated `LLMS_Course::sku` property.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_pw_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::is_inline_script_enqueued()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::format_date()` method.
-+ Removed the deprecated `LLMS_Generator::get_author_id_from_raw()` method.
-+ Removed the deprecated `LLMS_Generator::get_default_post_status()` method.
-+ Removed the deprecated `LLMS_Generator::get_generated_posts()` method.
-+ Removed the deprecated `LLMS_Generator::increment()` method.
-+ Removed the deprecated `llms__created` action hook from the `LLMS_Abstract_Database_Store::create()` method.
-+ Removed the deprecated `llms__deleted` action hook from the `LLMS_Abstract_Database_Store::delete()` method.
-+ Removed the deprecated `llms__updated` action hook from the `LLMS_Abstract_Database_Store::update()` method.
-+ Removed the deprecated `llms_user_removed_from_membership_level` action hook from the `LLMS_Student::unenroll()` method.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `lifterlms_template_pricing_table()` function.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `templates/product/pricing-table.php` file.
-+ Removed the deprecated `LLMS_Frontend_Password` class.
-+ Removed the deprecated `LLMS_Install::db_updates()` method.
-+ Removed the deprecated `LLMS_Install::update_notice()` method.
-+ Removed the deprecated `LLMS_Notifications::dispatch_processors()` method.
-+ Removed the deprecated `llms_processors_async_dispatching` filter hook from the `LLMS_Notifications::__construct()` method.
-+ Removed the deprecated `LLMS_Notifications::$_instance` property.
-+ Removed the deprecated `LLMS_Person_Handler::register()` method.
-+ Removed the deprecated `LLMS_Person_Handler::sanitize_field()` method.
-+ Removed the deprecated `LLMS_Person_Handler::update()` method.
-+ Removed the deprecated `LLMS_Person_Handler::validate_fields()` method.
-+ Removed the deprecated `LLMS_Person_Handler::voucher_toggle_script()` method.
-+ Removed the deprecated `templates/admin/notices/db-update.php` file.
-+ Removed the deprecated `templates/admin/notices/db-updating.php` file.
-+ Removed the deprecated `llms_usernames_blacklist` filter hook in the `llms_get_usernames_blocklist()` function.
-+ Removed the deprecated `includes/libraries/wp-background-processing/index.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-async-request.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-background-process.php` file.
-+ Removed the deprecated `LLMS_Section::get_next_available_lesson_order()` method.
-+ Removed the deprecated `LLMS_Section::get_order()` method.
-+ Removed the deprecated `LLMS_Section::get_parent_course()` method.
-+ Removed the deprecated `LLMS_Section::set_parent_course()` method.
-+ Removed the deprecated `LLMS_AJAX::check_voucher_duplicate()` method.
-+ Removed the deprecated `LLMS_AJAX::get_ajax_data()` method.
-+ Removed the deprecated `LLMS_AJAX::register_script()` method.
-+ Removed the deprecated `LLMS_Interface_Post_Audio` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Sales_Page` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Video` interface.
-+ Removed the deprecated `LLMS_Achievements::$_instance` property.
-+ Removed the deprecated `LLMS_Certificates::$_instance` property.
-+ Removed the deprecated `LLMS_Emails::$_instance` property.
-+ Removed the deprecated `LLMS_Engagements::$_instance` property.
-+ Removed the deprecated `LLMS_Events::$_instance` property.
-+ Removed the deprecated `LLMS_Grades::$_instance` property.
-+ Removed the deprecated `LLMS_Integrations::$_instance` property.
-+ Removed the deprecated `LLMS_Payment_Gateways::$_instance` property.
-+ Removed the deprecated `LLMS_Processors::$_instance` property.
-+ Removed the deprecated `LLMS_Sessions::$_instance` property.
-
-##### Developer Notes
-
-+ Added `LLMS_Awards_Query`, used for querying data about awarded certificates and achievements.
- + The method signature `LLMS_Student::get_achievements()` and `LLMS_Student::get_certificates()` now use this class under tho hood.
- + The previous method signature, which passed data into a direct SQL query, is now deprecated.
-+ Achievement and certificate data storage locations have been modified, primarily to reduce reliance on the `wp_postmeta` table which will result in a site-wide performance improvement, especially on large sites.
- + Meta properties `_llms_achievement_content` and `_llms_certificate_content` have been removed in favor of `WP_Post::$post_content`.
- + Meta properties `_llms_achievement_title` and `_llms_certificate_title` have been removed in favor of `WP_Post::$post_title`.
- + Meta properties `_llms_achievement_template` and `_llms_certificate_template` have been removed in favor of `WP_Post::$post_parent`.
- + Meta properties `_llms_achievement_image` and `_llms_certificate_image` have been moved the meta property `_thumbnail_id` in order to utilize the WordPress core's featured image functionality and internal APIs.
-+ Reliance on `lifterlms_user_postmeta` for achievement and certificate data will be removed in a future release.
- + User postmeta properties `_achievement_earned` and `_certificate_earned` will continue to be recorded but are no longer being used internally.
- + The `updated_date` is now accessible via `WP_Post::$post_date`.
- + The `user_id` is now accessible via `WP_Post::$post_author`.
-+ Added new Javascript UI components library, modeled after `@wordpress/components`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/components).
-+ Added a new SVG icon library, modeled after `@wordpress/icons`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/icons).
-+ The merge code button seen on certificate and email template editors is now an SVG image instead of a PNG.
-+ Added utility function for escaping and quoting strings. [#1027](https://github.com/gocodebox/lifterlms/issues/1027)
-+ Added new utility function for stripping prefixes from strings.
-
-##### Performance Improvements
-
-+ Increased the number of files that are autoloaded instead of manually loaded.
-
-##### Updated Templates
-
-+ [templates/achievements/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/achievements/loop.php)
-+ [templates/achievements/template.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/achievements/template.php)
-+ [templates/admin/notices/db-update.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/admin/notices/db-update.php)
-+ [templates/admin/notices/db-updating.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/admin/notices/db-updating.php)
-+ [templates/admin/reporting/reporting.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/admin/reporting/reporting.php)
-+ [templates/admin/reporting/tabs/courses/overview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/admin/reporting/tabs/courses/overview.php)
-+ [templates/admin/reporting/tabs/memberships/overview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/admin/reporting/tabs/memberships/overview.php)
-+ [templates/admin/reporting/tabs/quizzes/overview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/admin/reporting/tabs/quizzes/overview.php)
-+ [templates/admin/reporting/tabs/students/information.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/admin/reporting/tabs/students/information.php)
-+ [templates/block-templates/archive-course.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/block-templates/archive-course.html)
-+ [templates/block-templates/archive-llms_membership.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/block-templates/archive-llms_membership.html)
-+ [templates/block-templates/single-no-access.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/block-templates/single-no-access.html)
-+ [templates/block-templates/taxonomy-course_cat.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/block-templates/taxonomy-course_cat.html)
-+ [templates/block-templates/taxonomy-course_difficulty.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/block-templates/taxonomy-course_difficulty.html)
-+ [templates/block-templates/taxonomy-course_tag.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/block-templates/taxonomy-course_tag.html)
-+ [templates/block-templates/taxonomy-course_track.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/block-templates/taxonomy-course_track.html)
-+ [templates/block-templates/taxonomy-membership_cat.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/block-templates/taxonomy-membership_cat.html)
-+ [templates/block-templates/taxonomy-membership_tag.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/block-templates/taxonomy-membership_tag.html)
-+ [templates/certificates/actions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/certificates/actions.php)
-+ [templates/certificates/content-legacy.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/certificates/content-legacy.php)
-+ [templates/certificates/content.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/certificates/content.php)
-+ [templates/certificates/dynamic-styles.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/certificates/dynamic-styles.php)
-+ [templates/certificates/footer.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/certificates/footer.php)
-+ [templates/certificates/header.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/certificates/header.php)
-+ [templates/certificates/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/certificates/loop.php)
-+ [templates/certificates/preview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/certificates/preview.php)
-+ [templates/certificates/template.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/certificates/template.php)
-+ [templates/checkout/form-confirm-payment.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/checkout/form-confirm-payment.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/checkout/form-switch-source.php)
-+ [templates/content-certificate.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/content-certificate.php)
-+ [templates/course/lesson-navigation.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/course/lesson-navigation.php)
-+ [templates/course/lesson-preview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/course/lesson-preview.php)
-+ [templates/course/parent-course.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/course/parent-course.php)
-+ [templates/emails/footer.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/emails/footer.php)
-+ [templates/emails/header.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/emails/header.php)
-+ [templates/loop-main.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/loop-main.php)
-+ [templates/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/loop.php)
-+ [templates/myaccount/my-grades-single-table.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/myaccount/my-grades-single-table.php)
-+ [templates/myaccount/view-order-actions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/myaccount/view-order-actions.php)
-+ [templates/myaccount/view-order-information.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/myaccount/view-order-information.php)
-+ [templates/myaccount/view-order-transactions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/myaccount/view-order-transactions.php)
-+ [templates/myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/myaccount/view-order.php)
-+ [templates/product/pricing-table.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/product/pricing-table.php)
-+ [templates/quiz/questions/content-picture_choice.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/quiz/questions/content-picture_choice.php)
-+ [templates/quiz/results.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/quiz/results.php)
-+ [templates/single-certificate.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.2/templates/single-certificate.php)
-
-
-v5.10.0 - 2022-02-22
---------------------
-
-##### Updates and Enhancements
-
-+ Added an option to specify a custom checkout form title for free access plans. [#1774](https://github.com/gocodebox/lifterlms/issues/1774)
-+ Updated LifterLMS Blocks to [v2.3.2](https://make.lifterlms.com/2022/02/22/lifterlms-blocks-version-2-3-2/). [#1774](https://github.com/gocodebox/lifterlms/issues/1774)
-
-##### Bug Fixes
-
-+ Fixed ability to sort course students table by completed date. [#1969](https://github.com/gocodebox/lifterlms/issues/1969)
-+ Fixed reporting issue encountered when a course has no lessons. [#2012](https://github.com/gocodebox/lifterlms/issues/2012)
-+ Fixed broken checkout on Twenty Twenty-Two Theme when using the password strength meter. [#1997](https://github.com/gocodebox/lifterlms/issues/1997)
-+ Fixed block template slug generation from path in Windows environments. [#2001](https://github.com/gocodebox/lifterlms/issues/2001)
-+ Fixed an issue encountered when using the search box on the voucher admin posts list screen. [#2005](https://github.com/gocodebox/lifterlms/issues/2005)
-
-##### Updated Templates
-
-+ [templates/admin/reporting/tabs/courses/overview.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/admin/reporting/tabs/courses/overview.php)
-+ [templates/admin/reporting/tabs/memberships/overview.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/admin/reporting/tabs/memberships/overview.php)
-+ [templates/admin/reporting/tabs/quizzes/overview.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/admin/reporting/tabs/quizzes/overview.php)
-+ [templates/block-templates/archive-course.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/archive-course.html)
-+ [templates/block-templates/archive-llms_membership.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/archive-llms_membership.html)
-+ [templates/block-templates/single-certificate.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/single-certificate.html)
-+ [templates/block-templates/single-no-access.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/single-no-access.html)
-+ [templates/block-templates/taxonomy-course_cat.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/taxonomy-course_cat.html)
-+ [templates/block-templates/taxonomy-course_difficulty.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/taxonomy-course_difficulty.html)
-+ [templates/block-templates/taxonomy-course_tag.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/taxonomy-course_tag.html)
-+ [templates/block-templates/taxonomy-course_track.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/taxonomy-course_track.html)
-+ [templates/block-templates/taxonomy-membership_cat.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/taxonomy-membership_cat.html)
-+ [templates/block-templates/taxonomy-membership_tag.html](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/block-templates/taxonomy-membership_tag.html)
-+ [templates/checkout/form-confirm-payment.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/checkout/form-confirm-payment.php)
-+ [templates/course/lesson-navigation.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/course/lesson-navigation.php)
-+ [templates/course/lesson-preview.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/course/lesson-preview.php)
-+ [templates/course/parent-course.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/course/parent-course.php)
-+ [templates/loop-main.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/loop-main.php)
-+ [templates/loop.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/loop.php)
-+ [templates/myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/myaccount/view-order.php)
-+ [templates/quiz/questions/content-picture_choice.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/quiz/questions/content-picture_choice.php)
-+ [templates/quiz/results.php](https://github.com/gocodebox/lifterlms/blob/5.10.0/templates/quiz/results.php)
-
-
-v6.0.0-beta.1 - 2022-02-16
---------------------------
-
-##### New Features
-
-+ Added a link to return to the student dashboard when viewing an awarded certificate. [#1959](https://github.com/gocodebox/lifterlms/issues/1959)
-+ The block editor is now enabled by default for certificates when using WordPress versions 5.8 and later.
- + Existing certificates are marked as "legacy" and will continue to use the classic editor until migrated.
- + To migrate a certificate, click the "Migrate Certificate" button. This will force the certificate's content into blocks.
-+ A number of new settings are available to certificates when using the block editor:
- + Set the certificate's display (and print) size using common paper sizes such as US Letter, US Legal, A3, A4, and more.
- + Set the certificate's display orientation: portrait of landscape.
- + Set the certificate's inner margins.
- + Set the certificate's background color.
-+ A new block, the Certificate Title Block, has been made available to certificates.
- + The block works like a WordPress core Heading Block with added options for selecting from a few display fonts (provided by Google Web Fonts).
- + The block controls the title of awarded certificates.
-+ + Added the ability to sync awarded certificates with the template used to generate them. [#1078](https://github.com/gocodebox/lifterlms/issues/1078)
-+ The `post_name` of earned certificate posts will be generated with a randomized 3+ character string in favor of relying on sequential numbers.
-+ Added the ability for administrators and LMS managers to edit earned certificates/achievements from the students reporting screen, as well as award new certificates/achievements to students.
-+ + Added certificate global options for the default size of new certificates and certificate templates.
-+ Certificate and email template merge code buttons now include `[llms-user]` information shortcodes.
-+ Added certificate sequential ID functionality merge code.
-
-##### Updates and Enhancements
-
-+ Added pagination to achievement and certificate reporting pages.
-+ Certificates no longer use the `header.php` and `footer.php` files from the site's theme, instead custom templates (`templates/certificates/header.php` and `templates/certificates/footer.php`) are used instead. These templates are minimal and exclude theme wrappers which reduces the visual conflicts encountered from theme wrappers, backgrounds, and more, especially when printing certificates. [#463](https://github.com/gocodebox/lifterlms/issues/463)
-+ The achievements and certificates dashboard endpoints are now paginated. [#669](https://github.com/gocodebox/lifterlms/issues/669)
-+ Added new default images for use with achievements and certificates.
- + The site-wide default images can be customized on the admin panel under Settings -> Engagements.
- + The old default images can be used by filtering `llms_use_legacy_engagement_images`. [#1081](https://github.com/gocodebox/lifterlms/issues/1081)
-+ The URL of earned user certificates has been changed from "my_certificate" to "certificate". Requests to the old url are automatically redirected to the new url, including instances where the URL slug has been translated.
-+ The URL of certificate template previews has been changed from "certificate" to "certificate-template".
-+ The certificate merge code, `{first_name}`, now outputs an empty string in favor of falling back to the user's nickname when there is no first name for the user. [#1640](https://github.com/gocodebox/lifterlms/issues/1640)
-+ Updates LifterLMS REST to [v1.0.0-beta.22](https://make.lifterlms.com/2021/12/15/lifterlms-rest-api-version-1-0-0-beta-22/).
-+ The look and behavior of the certificate {{MINI_CERTIFICATE}} pop-over notification merge code now displays a placeholder preview of the certificate in favor of attempting to render a tiny version of the actual certificate. [#1950](https://github.com/gocodebox/lifterlms/issues/1950)
-
-##### Bug Fixes
-
-+ + Fixed how the protected `LLMS_Notifications_Query::$found_results` property is accessed in `LLMS_Abstract_Notification_Controller::has_subscriber_received()`. + Fixed how the protected `LLMS_Notifications_Query::$max_pages` property is accessed in `lifterlms_template_student_dashboard_my_notifications()`.
-+ Delayed engagements are automatically unscheduled when the related post is deleted.
-+ Prior to sending a delayed engagement the recipient's enrollment in the related post is verified resulting the engagement not being triggered if the recipient's enrollment has been terminated. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ A disabled student dashboard endpoint will no longer display the endpoint's summary on the main dashboard page. [#535](https://github.com/gocodebox/lifterlms/issues/535)
-+ Post search filter boxes on various post tables will now longer display a link to the selected post.
-+ Basic notification code is no longer loaded on the admin panel.
-
-##### Deprecations
-
-+ Public access to properties of the abstract `LLMS_Database_Query` has been deprecated.
- + Public access to class property `LLMS_Database_Query::$found_results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_found_results()`.
- + Public access to class property `LLMS_Database_Query::$max_pages`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_max_pages()`.
- + Public access to class property `LLMS_Database_Query::$number_results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_number_results()`.
- + Public access to class property `LLMS_Database_Query::$results`. The property is no longer publicly writable but can be read via `LLMS_Database_Query::get_results()`.
- + Public access to class property `LLMS_Database_Query::$query_vars`. The variable as a whole cannot be publicly accessed, instead use `LLMS_Database_Query::get()` and `LLMS_Database_Query::set()` to read and write to the array.
- + The above changes were made to the abstract class `LLMS_Database_Query` but the following concrete classes that utilize the abstract are also affected by this change: `LLMS_Query_User_Postmeta`, `LLMS_Student_Query`, `LLMS_Query_Quiz_Attempt`, `LLMS_Events_Query`, and `LLMS_Notifications_Query`.
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Achievement::format_string()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_title()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Achievement::create()` is deprecated with no replacement.
-+ Method `LLMS_Achievements::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement()`.
-+ Class `LLMS_Certificate` is deprecated with no direct replacement.
- + Method `LLMS_Certificate::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Certificate::format_string()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
-+ Method `LLMS_Certificates::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate()`.
-+ Method `LLMS_Engagements::init()` is deprecated with no replacement.
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Method `LLMS_Database_Query::set_found_results()` is deprecated.
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement_User::has_user_earned()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::init()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::get_content_html()` is deprecated with no replacement.
-+ Class `LLMS_Certificate_User` is deprecated with no direct replacement.
- + Method `LLMS_Certificate_User::init()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::set_shortcode_user()` is deprecated with no replacement.
-+ Engagement debug logging is removed. Use `llms_log()` directly instead.
-+ Filter `llms_db_query_get_default_args` is deprecated in favor of `llms_{$this->id}_query_get_default_args`.
-+ Filter `llms_certificate_has_user_earned` is deprecated in favor of `llms_earned_certificate_dupcheck`.
-+ Unused public class property `LLMS_Achievements::$content` is deprecated with no replacement.
-+ Method `LLMS_Admin_Post_Types::meta_metabox_init()` is deprecated with no replacement.
-+ The site options `lifterlms_certificate_bg_img_width`, `lifterlms_certificate_bg_img_height`, and `lifterlms_certificate_legacy_image_size` are now used only for certificates and certificate templates created using the classic editor.
- + The settings, found on the Engagements Settings screen, are hidden by default.
- + During the database upgrade from versions earlier than 6.x, an site option, `llms_has_legacy_certificates` is added when at least one certificate is found. This option will display the settings so they can continue to be used for legacy certificates.
- + After migrating all certificates on a site, the settings will still display. In order to remove them from the screen a developer can either delete the option `llms_has_legacy_certificates` or return `false` from the filter `llms_has_legacy_certificates`.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`. [#290](https://github.com/gocodebox/lifterlms/issues/290)
-+ The constant `LLMS_ENGAGEMENT_DEBUG` is deprecated with no replacement.
-+ Engagement debugging via `LLMS_Engagements::log` is deprecated. Use `llms_log()` instead.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Filter `lifterlms_register_post_type_llms_my_certificate` is deprecated in favor of `lifterlms_register_post_type_my_certificate`.
-+ Deprecated the misspelled protected method `LLMS_Database_Query::preprare_query()` and replaced with `LLMS_Database_Query::prepare_query()`.
- + Class method `LLMS_Events_Query::preprare_query` replaced with `LLMS_Events_Query::prepare_query()`.
- + Class method `LLMS_Query_Quiz_Attempt::preprare_query` replaced with `LLMS_Query_Quiz_Attempt::prepare_query()`.
- + Class method `LLMS_Query_User_Postmeta::preprare_query` replaced with `LLMS_Query_User_Postmeta::prepare_query()`.
- + Class method `LLMS_Student_Query::preprare_query` replaced with `LLMS_Student_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`. [#859](https://github.com/gocodebox/lifterlms/issues/859)
-
-##### Breaking Changes
-
-+ Removed FSE template: `templates/block-templates/single-certificate.html`.
-+ Removed the deprecated `LLMS()` function in favor of the `llms()` function.
-+ Removed the deprecated the `LLMS_SendWP::do_remote_install()` method in favor of the `LLMS_Abstract_Email_Provider::do_remote_install()` method.
-+ Removed the deprecated `LLMS_Abstract_Email_Provider::output_css()` method.
-+ Removed the deprecated `LLMS_Abstract_Generator_Posts::increment()` method.
-+ Removed the deprecated `LLMS_Admin_Users_Table::load_dependencies()` method.
-+ Removed the deprecated `LLMS_Admin_Import::localize_stat()` method.
-+ Removed the deprecated `LLMS_Admin_Notices_Core::check_staging()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::generator_course_status()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::output_step_html()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::scripts()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::watch_course_generation()` method.
-+ Removed the deprecated `llms_format_decimal()` function.
-+ Removed the deprecated `llms_set_person_auth_cookie()` function.
-+ Removed the deprecated `LLMS_Course::sections` property.
-+ Removed the deprecated `LLMS_Course::sku` property.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_pw_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::is_inline_script_enqueued()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::format_date()` method.
-+ Removed the deprecated `LLMS_Generator::get_author_id_from_raw()` method.
-+ Removed the deprecated `LLMS_Generator::get_default_post_status()` method.
-+ Removed the deprecated `LLMS_Generator::get_generated_posts()` method.
-+ Removed the deprecated `LLMS_Generator::increment()` method.
-+ Removed the deprecated `llms__created` action hook from the `LLMS_Abstract_Database_Store::create()` method.
-+ Removed the deprecated `llms__deleted` action hook from the `LLMS_Abstract_Database_Store::delete()` method.
-+ Removed the deprecated `llms__updated` action hook from the `LLMS_Abstract_Database_Store::update()` method.
-+ Removed the deprecated `llms_user_removed_from_membership_level` action hook from the `LLMS_Student::unenroll()` method.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `lifterlms_template_pricing_table()` function.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `templates/product/pricing-table.php` file.
-+ Removed the deprecated `LLMS_Frontend_Password` class.
-+ Removed the deprecated `LLMS_Install::db_updates()` method.
-+ Removed the deprecated `LLMS_Install::update_notice()` method.
-+ Removed the deprecated `LLMS_Notifications::dispatch_processors()` method.
-+ Removed the deprecated `llms_processors_async_dispatching` filter hook from the `LLMS_Notifications::__construct()` method.
-+ Removed the deprecated `LLMS_Notifications::$_instance` property.
-+ Removed the deprecated `LLMS_Person_Handler::register()` method.
-+ Removed the deprecated `LLMS_Person_Handler::sanitize_field()` method.
-+ Removed the deprecated `LLMS_Person_Handler::update()` method.
-+ Removed the deprecated `LLMS_Person_Handler::validate_fields()` method.
-+ Removed the deprecated `LLMS_Person_Handler::voucher_toggle_script()` method.
-+ Removed the deprecated `templates/admin/notices/db-update.php` file.
-+ Removed the deprecated `templates/admin/notices/db-updating.php` file.
-+ Removed the deprecated `llms_usernames_blacklist` filter hook in the `llms_get_usernames_blocklist()` function.
-+ Removed the deprecated `includes/libraries/wp-background-processing/index.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-async-request.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-background-process.php` file.
-+ Removed the deprecated `LLMS_Section::get_next_available_lesson_order()` method.
-+ Removed the deprecated `LLMS_Section::get_order()` method.
-+ Removed the deprecated `LLMS_Section::get_parent_course()` method.
-+ Removed the deprecated `LLMS_Section::set_parent_course()` method.
-+ Removed the deprecated `LLMS_AJAX::check_voucher_duplicate()` method.
-+ Removed the deprecated `LLMS_AJAX::get_ajax_data()` method.
-+ Removed the deprecated `LLMS_AJAX::register_script()` method.
-+ Removed the deprecated `LLMS_Interface_Post_Audio` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Sales_Page` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Video` interface.
-+ Removed the deprecated `LLMS_Achievements::$_instance` property.
-+ Removed the deprecated `LLMS_Certificates::$_instance` property.
-+ Removed the deprecated `LLMS_Emails::$_instance` property.
-+ Removed the deprecated `LLMS_Engagements::$_instance` property.
-+ Removed the deprecated `LLMS_Events::$_instance` property.
-+ Removed the deprecated `LLMS_Grades::$_instance` property.
-+ Removed the deprecated `LLMS_Integrations::$_instance` property.
-+ Removed the deprecated `LLMS_Payment_Gateways::$_instance` property.
-+ Removed the deprecated `LLMS_Processors::$_instance` property.
-+ Removed the deprecated `LLMS_Sessions::$_instance` property.
-
-##### Developer Notes
-
-+ Added `LLMS_Awards_Query`, used for querying data about awarded certificates and achievements.
- + The method signature `LLMS_Student::get_achievements()` and `LLMS_Student::get_certificates()` now use this class under tho hood.
- + The previous method signature, which passed data into a direct SQL query, is now deprecated.
-+ Achievement and certificate data storage locations have been modified, primarily to reduce reliance on the `wp_postmeta` table which will result in a site-wide performance improvement, especially on large sites.
- + Meta properties `_llms_achievement_content` and `_llms_certificate_content` have been removed in favor of `WP_Post::$post_content`.
- + Meta properties `_llms_achievement_title` and `_llms_certificate_title` have been removed in favor of `WP_Post::$post_title`.
- + Meta properties `_llms_achievement_template` and `_llms_certificate_template` have been removed in favor of `WP_Post::$post_parent`.
- + Meta properties `_llms_achievement_image` and `_llms_certificate_image` have been moved the meta property `_thumbnail_id` in order to utilize the WordPress core's featured image functionality and internal APIs.
-+ Reliance on `lifterlms_user_postmeta` for achievement and certificate data will be removed in a future release.
- + User postmeta properties `_achievement_earned` and `_certificate_earned` will continue to be recorded but are no longer being used internally.
- + The `updated_date` is now accessible via `WP_Post::$post_date`.
- + The `user_id` is now accessible via `WP_Post::$post_author`.
-+ Added new Javascript UI components library, modeled after `@wordpress/components`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/components).
-+ Added a new SVG icon library, modeled after `@wordpress/icons`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/icons).
-+ The merge code button seen on certificate and email template editors is now an SVG image instead of a PNG.
-+ Added utility function for escaping and quoting strings. [#1027](https://github.com/gocodebox/lifterlms/issues/1027)
-+ Added new utility function for stripping prefixes from strings.
-
-##### Performance Improvements
-
-+ Increased the number of files that are autoloaded instead of manually loaded.
-
-##### Updated Templates
-
-+ [templates/achievements/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/achievements/loop.php)
-+ [templates/achievements/template.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/achievements/template.php)
-+ [templates/admin/notices/db-update.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/admin/notices/db-update.php)
-+ [templates/admin/notices/db-updating.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/admin/notices/db-updating.php)
-+ [templates/admin/reporting/reporting.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/admin/reporting/reporting.php)
-+ [templates/admin/reporting/tabs/courses/overview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/admin/reporting/tabs/courses/overview.php)
-+ [templates/admin/reporting/tabs/memberships/overview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/admin/reporting/tabs/memberships/overview.php)
-+ [templates/admin/reporting/tabs/quizzes/overview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/admin/reporting/tabs/quizzes/overview.php)
-+ [templates/admin/reporting/tabs/students/information.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/admin/reporting/tabs/students/information.php)
-+ [templates/block-templates/archive-course.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/block-templates/archive-course.html)
-+ [templates/block-templates/archive-llms_membership.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/block-templates/archive-llms_membership.html)
-+ [templates/block-templates/single-no-access.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/block-templates/single-no-access.html)
-+ [templates/block-templates/taxonomy-course_cat.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/block-templates/taxonomy-course_cat.html)
-+ [templates/block-templates/taxonomy-course_difficulty.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/block-templates/taxonomy-course_difficulty.html)
-+ [templates/block-templates/taxonomy-course_tag.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/block-templates/taxonomy-course_tag.html)
-+ [templates/block-templates/taxonomy-course_track.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/block-templates/taxonomy-course_track.html)
-+ [templates/block-templates/taxonomy-membership_cat.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/block-templates/taxonomy-membership_cat.html)
-+ [templates/block-templates/taxonomy-membership_tag.html](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/block-templates/taxonomy-membership_tag.html)
-+ [templates/certificates/actions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/certificates/actions.php)
-+ [templates/certificates/content-legacy.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/certificates/content-legacy.php)
-+ [templates/certificates/content.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/certificates/content.php)
-+ [templates/certificates/dynamic-styles.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/certificates/dynamic-styles.php)
-+ [templates/certificates/footer.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/certificates/footer.php)
-+ [templates/certificates/header.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/certificates/header.php)
-+ [templates/certificates/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/certificates/loop.php)
-+ [templates/certificates/preview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/certificates/preview.php)
-+ [templates/certificates/template.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/certificates/template.php)
-+ [templates/checkout/form-confirm-payment.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/checkout/form-confirm-payment.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/checkout/form-switch-source.php)
-+ [templates/content-certificate.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/content-certificate.php)
-+ [templates/course/lesson-navigation.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/course/lesson-navigation.php)
-+ [templates/course/lesson-preview.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/course/lesson-preview.php)
-+ [templates/course/parent-course.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/course/parent-course.php)
-+ [templates/emails/footer.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/emails/footer.php)
-+ [templates/emails/header.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/emails/header.php)
-+ [templates/loop-main.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/loop-main.php)
-+ [templates/loop.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/loop.php)
-+ [templates/myaccount/my-grades-single-table.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/myaccount/my-grades-single-table.php)
-+ [templates/myaccount/view-order-actions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/myaccount/view-order-actions.php)
-+ [templates/myaccount/view-order-information.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/myaccount/view-order-information.php)
-+ [templates/myaccount/view-order-transactions.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/myaccount/view-order-transactions.php)
-+ [templates/myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/myaccount/view-order.php)
-+ [templates/product/pricing-table.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/product/pricing-table.php)
-+ [templates/quiz/questions/content-picture_choice.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/quiz/questions/content-picture_choice.php)
-+ [templates/quiz/results.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/quiz/results.php)
-+ [templates/single-certificate.php](https://github.com/gocodebox/lifterlms/blob/6.0.0-beta.1/templates/single-certificate.php)
-
-
-v5.9.0 - 2022-02-15
--------------------
-
-##### Updates and Enhancements
-
-+ Picture choice questions are now organized using flexbox in favor of a float-powered column layout.
-+ Resolved PHP 8.1 deprecation warnings. [#1859](https://github.com/gocodebox/lifterlms/issues/1859)
-
-##### Bug Fixes
-
-+ Updated `llms_get_endpoint_url()` to better adhere to a site's permalink structure with regards to the presence of a trailing slash in the generated url. [#1983](https://github.com/gocodebox/lifterlms/issues/1983)
-+ Only allow users with `edit_post` capabilities to bypass content restrictions.
-+ Fixed stretched images in quiz description/questions when using the Twenty Twenty-Two theme. [#1976](https://github.com/gocodebox/lifterlms/issues/1976)
-
-##### Deprecations
-
-+ Method `LLMS_AJAX::check_voucher_duplicate()` is deprecated in favor of `LLMS_AJAX_HANDLER::check_voucher_duplicate()`.
-
-##### Updated Templates
-
-+ [templates/admin/reporting/tabs/courses/overview.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/admin/reporting/tabs/courses/overview.php)
-+ [templates/admin/reporting/tabs/memberships/overview.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/admin/reporting/tabs/memberships/overview.php)
-+ [templates/admin/reporting/tabs/quizzes/overview.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/admin/reporting/tabs/quizzes/overview.php)
-+ [templates/block-templates/archive-course.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/archive-course.html)
-+ [templates/block-templates/archive-llms_membership.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/archive-llms_membership.html)
-+ [templates/block-templates/single-certificate.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/single-certificate.html)
-+ [templates/block-templates/single-no-access.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/single-no-access.html)
-+ [templates/block-templates/taxonomy-course_cat.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/taxonomy-course_cat.html)
-+ [templates/block-templates/taxonomy-course_difficulty.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/taxonomy-course_difficulty.html)
-+ [templates/block-templates/taxonomy-course_tag.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/taxonomy-course_tag.html)
-+ [templates/block-templates/taxonomy-course_track.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/taxonomy-course_track.html)
-+ [templates/block-templates/taxonomy-membership_cat.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/taxonomy-membership_cat.html)
-+ [templates/block-templates/taxonomy-membership_tag.html](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/block-templates/taxonomy-membership_tag.html)
-+ [templates/checkout/form-confirm-payment.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/checkout/form-confirm-payment.php)
-+ [templates/course/lesson-navigation.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/course/lesson-navigation.php)
-+ [templates/course/lesson-preview.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/course/lesson-preview.php)
-+ [templates/course/parent-course.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/course/parent-course.php)
-+ [templates/loop-main.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/loop-main.php)
-+ [templates/loop.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/loop.php)
-+ [templates/myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/myaccount/view-order.php)
-+ [templates/quiz/questions/content-picture_choice.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/quiz/questions/content-picture_choice.php)
-+ [templates/quiz/results.php](https://github.com/gocodebox/lifterlms/blob/5.9.0/templates/quiz/results.php)
-
-
-v6.0.0-alpha.4 - 2022-02-11
----------------------------
-
-##### Updates and Enhancements
-
-+ Removed usage of PHP features deprecated in PHP 8.1.
-+ Added a link to return to the student dashboard when viewing an awarded certificate.
-+ Allow block templates to be overridden from themes or plugins.
-+ Added a "Reset Certificate" button to restore certificates to the default template.
-+ Added links from achievement and certificate templates to view all awards generated from the template.
-+ Added the ability to sync achievements (sync all awards to the parent template and sync one award to it's parent).
-+ Improved class autoloading.
-
-##### Bug Fixes
-
-+ Fixed certificate print compatibility issues with the OceanWP and Genesis themes.
-+ Fixed custom font usage in the Certificate Title block to utilize WP Core functionality introduced in version 5.9.
-+ Fixed access to protected properties in the `LLMS_Notifications_Query` class.
-
-##### Breaking Changes
-
-+ Removed the Single Certificate block template.
-
-
-v5.8.0 - 2022-01-26
--------------------
-
-##### New Features
-
-+ Add theme support for the Twenty Twenty-Two theme. [#1824](https://github.com/gocodebox/lifterlms/issues/1824)
-+ Added WordPress Full Site Editing compatibility for various LifterLMS-powered templates.
-
-##### Updates and Enhancements
-
-+ The minimum required WordPress core version is now version 5.5.
-+ Tested against WordPress version 5.9.
-+ Updated LifterLMS Blocks: [v2.3.0](https://make.lifterlms.com/2022/01/25/lifterlms-blocks-version-2-3-0/), [v2.3.1](https://make.lifterlms.com/2022/01/26/lifterlms-blocks-version-2-3-1/).
-+ Remove the "description" registered with LifterLMS custom post types. [#710](https://github.com/gocodebox/lifterlms/issues/710)
-
-##### Updated Templates
-
-+ [templates/block-templates/archive-course.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/archive-course.html)
-+ [templates/block-templates/archive-llms_membership.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/archive-llms_membership.html)
-+ [templates/block-templates/single-certificate.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/single-certificate.html)
-+ [templates/block-templates/single-no-access.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/single-no-access.html)
-+ [templates/block-templates/taxonomy-course_cat.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/taxonomy-course_cat.html)
-+ [templates/block-templates/taxonomy-course_difficulty.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/taxonomy-course_difficulty.html)
-+ [templates/block-templates/taxonomy-course_tag.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/taxonomy-course_tag.html)
-+ [templates/block-templates/taxonomy-course_track.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/taxonomy-course_track.html)
-+ [templates/block-templates/taxonomy-membership_cat.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/taxonomy-membership_cat.html)
-+ [templates/block-templates/taxonomy-membership_tag.html](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/block-templates/taxonomy-membership_tag.html)
-+ [templates/course/lesson-navigation.php](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/course/lesson-navigation.php)
-+ [templates/course/lesson-preview.php](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/course/lesson-preview.php)
-+ [templates/course/parent-course.php](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/course/parent-course.php)
-+ [templates/loop-main.php](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/loop-main.php)
-+ [templates/loop.php](https://github.com/gocodebox/lifterlms/blob/5.8.0/templates/loop.php)
-
-
-v6.0.0-alpha.3 - 2022-01-14
----------------------------
-
-##### Updates and Enhancements
-
-+ Automatically dequeue print-only stylesheets to reduce theme and plugin conflicts when printing certificates.
-+ Only enable the Certificate Title block font-family selector for WordPress 5.9 and later.
-+ Only enable the Block Editor for certificates on WordPress 5.8 and later.
-+ Replaced welcome message placeholder text with a real welcome message.
-
-##### Bug Fixes
-
-+ Explicitly define a default font-family ("default") for the Certificate Title block.
-+ Fixed visual issues encountered on certificates when resizing the browser window.
-+ Fixed issue with the certificate block template on WordPress 5.8 (divider blocks aren't centered by default).
-
-##### Breaking Changes
-
-+ Removed the deprecated `LLMS()` function in favor of the `llms()` function.
-+ Removed the deprecated `LLMS_SendWP::do_remote_install()` method in favor of the `LLMS_Abstract_Email_Provider::do_remote_install()` method.
-+ Removed the deprecated `LLMS_Abstract_Email_Provider::output_css()` method.
-+ Removed the deprecated `LLMS_Abstract_Generator_Posts::increment()` method.
-+ Removed the deprecated `LLMS_Admin_Users_Table::load_dependencies()` method.
-+ Removed the deprecated `LLMS_Admin_Import::localize_stat()` method.
-+ Removed the deprecated `LLMS_Admin_Notices_Core::check_staging()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::generator_course_status()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::output_step_html()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::scripts()` method.
-+ Removed the deprecated `LLMS_Admin_Setup_Wizard::watch_course_generation()` method.
-+ Removed the deprecated `llms_format_decimal()` function.
-+ Removed the deprecated `llms_set_person_auth_cookie()` function.
-+ Removed the deprecated `LLMS_Course::sections` property.
-+ Removed the deprecated `LLMS_Course::sku` property.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_pw_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::enqueue_inline_script()` method.
-+ Removed the deprecated `LLMS_Frontend_Assets::is_inline_script_enqueued()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::add_custom_values()` method.
-+ Removed the deprecated `LLMS_Generator::format_date()` method.
-+ Removed the deprecated `LLMS_Generator::get_author_id_from_raw()` method.
-+ Removed the deprecated `LLMS_Generator::get_default_post_status()` method.
-+ Removed the deprecated `LLMS_Generator::get_generated_posts()` method.
-+ Removed the deprecated `LLMS_Generator::increment()` method.
-+ Removed the deprecated `llms__created` action hook from the `LLMS_Abstract_Database_Store::create()` method.
-+ Removed the deprecated `llms__deleted` action hook from the `LLMS_Abstract_Database_Store::delete()` method.
-+ Removed the deprecated `llms__updated` action hook from the `LLMS_Abstract_Database_Store::update()` method.
-+ Removed the deprecated `llms_user_removed_from_membership_level` action hook from the `LLMS_Student::unenroll()` method.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `lifterlms_template_pricing_table()` function.
-+ Removed the deprecated and misspelled `$purchaseable` global variable in the `templates/product/pricing-table.php` file.
-+ Removed the deprecated `LLMS_Frontend_Password` class.
-+ Removed the deprecated `LLMS_Install::db_updates()` method.
-+ Removed the deprecated `LLMS_Install::update_notice()` method.
-+ Removed the deprecated `LLMS_Notifications::dispatch_processors()` method.
-+ Removed the deprecated `llms_processors_async_dispatching` filter hook from the `LLMS_Notifications::__construct()` method.
-+ Removed the deprecated `LLMS_Notifications::$_instance` property.
-+ Removed the deprecated `LLMS_Person_Handler::register()` method.
-+ Removed the deprecated `LLMS_Person_Handler::sanitize_field()` method.
-+ Removed the deprecated `LLMS_Person_Handler::update()` method.
-+ Removed the deprecated `LLMS_Person_Handler::validate_fields()` method.
-+ Removed the deprecated `LLMS_Person_Handler::voucher_toggle_script()` method.
-+ Removed the deprecated `templates/admin/notices/db-update.php` file.
-+ Removed the deprecated `templates/admin/notices/db-updating.php` file.
-+ Removed the deprecated `llms_usernames_blacklist` filter hook in the `llms_get_usernames_blocklist()` function.
-+ Removed the deprecated `includes/libraries/wp-background-processing/index.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-async-request.php` file.
-+ Removed the deprecated `includes/libraries/wp-background-processing/wp-background-process.php` file.
-+ Removed the deprecated `LLMS_Section::get_next_available_lesson_order()` method.
-+ Removed the deprecated `LLMS_Section::get_order()` method.
-+ Removed the deprecated `LLMS_Section::get_parent_course()` method.
-+ Removed the deprecated `LLMS_Section::set_parent_course()` method.
-+ Removed the deprecated `LLMS_AJAX::get_ajax_data()` method.
-+ Removed the deprecated `LLMS_AJAX::register_script()` method.
-+ Removed the deprecated `LLMS_Interface_Post_Audio` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Sales_Page` interface.
-+ Removed the deprecated `LLMS_Interface_Post_Video` interface.
-+ Removed the deprecated `LLMS_Achievements::$_instance` property.
-+ Removed the deprecated `LLMS_Certificates::$_instance` property.
-+ Removed the deprecated `LLMS_Emails::$_instance` property.
-+ Removed the deprecated `LLMS_Engagements::$_instance` property.
-+ Removed the deprecated `LLMS_Events::$_instance` property.
-+ Removed the deprecated `LLMS_Grades::$_instance` property.
-+ Removed the deprecated `LLMS_Integrations::$_instance` property.
-+ Removed the deprecated `LLMS_Payment_Gateways::$_instance` property.
-+ Removed the deprecated `LLMS_Processors::$_instance` property.
-+ Removed the deprecated `LLMS_Sessions::$_instance` property.
-
-
-v5.7.0 - 2022-01-11
--------------------
-
-##### Updates and Enhancements
-
-+ Informed developers about the deprecated `LLMS_Section::get_next_available_lesson_order()` method.
-+ Informed developers about the deprecated `LLMS_Section::get_order()` method.
-+ Informed developers about the deprecated `LLMS_Section::get_parent_course()` method.
-+ Informed developers about the deprecated `LLMS_Section::set_parent_course()` method.
-
-##### Deprecations
-
-+ Deprecated `LLMS_Frontend_Assets::enqueue_inline_pw_script()` with no replacement.
-+ Deprecated the `LLMS_Lesson::get_order()` method in favor of the `LLMS_Lesson::get( 'order' )` method.
-+ Deprecated the `LLMS_Lesson::get_parent_course()` method in favor of the `LLMS_Lesson::get( 'parent_course' )` method.
-+ Deprecated the `LLMS_Lesson::set_parent_course()` method in favor of the `LLMS_Lesson::set( 'parent_course', $course_id )` method.
-+ Deprecated the `LLMS_AJAX_Handler::add_lesson_to_course()` method with no replacement.
-+ Deprecated the `LLMS_AJAX_Handler::create_lesson()` method with no replacement.
-+ Deprecated the `LLMS_AJAX_Handler::create_section()` method with no replacement.
-+ Deprecated the `LLMS_Lesson_Handler::assign_to_course()` method with no replacement.
-+ Deprecated the `LLMS_Post_Handler::create_section()` method with no replacement.
-
-##### Updated Templates
-
-+ [templates/course/lesson-navigation.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/course/lesson-navigation.php)
-+ [templates/course/lesson-preview.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/course/lesson-preview.php)
-+ [templates/course/parent-course.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/course/parent-course.php)
-
-
-v6.0.0-alpha.2 - 2022-01-04
----------------------------
-
-##### New Features
-
-+ Added certificate global options for the default size of new certificates and certificate templates.
-
-##### Updates and enhancements
-
-+ The site options `lifterlms_certificate_bg_img_width`,
-`lifterlms_certificate_bg_img_height`, and
-`lifterlms_certificate_legacy_image_size` are now used only for certificates
-and certificate templates created using the classic editor.
- + The settings, found on the Engagements Settings screen, are hidden by default.
- + During the database upgrade from versions earlier than 6.x, an site option, `llms_has_legacy_certificates` is added when at least one certificate is found. This option will display the settings so they can continue to be used for legacy certificates.
- + After migrating all certificates on a site, the settings will still display. In order to remove them from the screen a developer can either delete the option `llms_has_legacy_certificates` or return `false` from the filter `llms_has_legacy_certificates`.
-+ Restore certificate save hooks after executing callback updates to facilitate scenarios where more than one certificate is updated in a single request.
-
-##### Bug Fixes
-
-+ Only register the Certificate Title block for use on certificate post types.
-
-##### Updated Templates
-
-+ [templates/certificates/content-legacy.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/content-legacy.php)
-
-
-v6.0.0-alpha.1 - 2021-12-28
----------------------------
-
-**This version is an unstable pre-release! We strongly advise against installing this in a production environment.**
-
-##### New Features
-
-+ The block editor is now enabled by default for certificates.
- + Existing certificates are marked as "legacy" and will continue to use the classic editor until migrated.
- + To migrate a certificate, click the "Migrate Certificate" button. This will force the certificate's content into blocks.
-+ A number of new settings are available to certificates when using the block editor:
- + Set the certificate's display (and print) size using common paper sizes such as US Letter, US Legal, A3, A4, and more.
- + Set the certificate's display orientation: portrait of landscape.
- + Set the certificate's inner margins.
- + Set the certificate's background color.
-+ A new block, the Certificate Title Block, has been made available to certificates.
- + The block works like a WordPress core Heading Block with added options for selecting from a few display fonts (provided by Google Web Fonts).
- + The block controls the title of awarded certificates.
-+ + Added the ability to sync awarded certificates with the template used to generate them. [#1078](https://github.com/gocodebox/lifterlms#1078)
-+ The `post_name` of earned certificate posts will be generated with a randomized 3+ character string in favor of relying on sequential numbers.
-+ Added the ability for administrators and LMS managers to edit earned certificates/achievements from the students reporting screen, as well as award new certificates/achievements to students.
-+ Certificate and email template merge code buttons now include [llms-user] information shortcodes.
-+ Added certificate sequential ID functionality merge code. [Read more](@TODO).
-
-##### Updates and Enhancements
-
-+ Added pagination to achievement and certificate reporting pages.
-+ Certificates no longer use the `header.php` and `footer.php` files from the site's theme, instead custom templates (`templates/certificates/header.php` and `templates/certificates/footer.php`) are used instead. These templates are minimal and exclude theme wrappers which reduces the visual conflicts encountered from theme wrappers, backgrounds, and more, especially when printing certificates. [#463](https://github.com/gocodebox/lifterlms#463)
-+ The achievements and certificates dashboard endpoints are now paginated. [#669](https://github.com/gocodebox/lifterlms#669)
-+ Added new default images for use with achievements and certificates.
- + The site-wide default images can be customized on the admin panel under Settings -> Engagements.
- + The old default images can be used by filtering `llms_use_legacy_engagement_images`. [#1081](https://github.com/gocodebox/lifterlms#1081)
-+ The URL of earned user certificates has been changed from "my_certificate" to "certificate". Requests to the old url are automatically redirected to the new url, including instances where the URL slug has been translated.
-+ The URL of certificate template previews has been changed from "certificate" to "certificate-template".
-+ The certificate merge code, `{first_name}`, now outputs an empty string in favor of falling back to the user's nickname when there is no first name for the user. [#1640](https://github.com/gocodebox/lifterlms#1640)
-+ Updates LifterLMS REST to [v1.0.0-beta.22](https://make.lifterlms.com/2021/12/15/lifterlms-rest-api-version-1-0-0-beta-22/).
-
-##### Bug Fixes
-
-+ Delayed engagements are automatically unscheduled when the related post is deleted.
-+ Prior to sending a delayed engagement the recipient's enrollment in the related post is verified resulting the engagement not being triggered if the recipient's enrollment has been terminated. [#290](https://github.com/gocodebox/lifterlms#290)
-+ A disabled student dashboard endpoint will no longer display the endpoint's summary on the main dashboard page. [#535](https://github.com/gocodebox/lifterlms#535)
-+ Post search filter boxes on various post tables will now longer display a link to the selected post.
-+ Basic notification code is no longer loaded on the admin panel.
-
-##### Deprecations
-
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Achievement::format_string()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_title()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content()` is deprecated with no replacement.
- + Method `LLMS_Achievement::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Achievement::create()` is deprecated with no replacement.
-+ Method `LLMS_Achievments::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement()`.
-+ Class `LLMS_Certificate` is deprecated with no direct replacement.
- + Method `LLMS_Certificate::is_enabled()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_blogname()` is deprecated with no replacement.
- + Method `LLMS_Certificate::format_string()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate::get_title()` is deprecated with no replacement.
-+ Method `LLMS_Certificates::trigger_engagement()` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate()`.
-+ Method `LLMS_Engagements::init()` is deprecated with no replacement.
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Method `LLMS_Database_Query::set_found_results()` is deprecated.
-+ Class `LLMS_Achievement_User` is deprecated with no direct replacement.
- + Method `LLMS_Achievement_User::has_user_earned()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::init()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Achievement_User::get_content_html()` is deprecated with no replacement.
-+ Class `LLMS_Certificate_User` is deprecated with no direct replacement.
- + Method `LLMS_Certificate_User::init()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::trigger()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::get_content_html()` is deprecated with no replacement.
- + Method `LLMS_Certificate_User::set_shortcode_user()` is deprecated with no replacement.
-+ Engagement debug logging is removed. Use `llms_log()` directly instead.
-+ Filter `llms_db_query_get_default_args` is deprecated in favor of `llms_{$this->id}_query_get_default_args`.
-+ Filter `llms_certificate_has_user_earned` is deprecated in favor of `llms_earned_certificate_dupcheck`.
-+ Unused public class property `LLMS_Achievements::$content` is deprecated with no replacement.
-+ Method `LLMS_Engagements::handle_certificate` is deprecated in favor of `LLMS_Engagement_Handler::handle_certificate`. [#290](https://github.com/gocodebox/lifterlms#290)
-+ Method `LLMS_Engagements::handle_achievement` is deprecated in favor of `LLMS_Engagement_Handler::handle_achievement`. [#290](https://github.com/gocodebox/lifterlms#290)
-+ The constant `LLMS_ENGAGEMENT_DEBUG` is deprecated with no replacement.
-+ Engagement debugging via `LLMS_Engagements::log` is deprecated. Use `llms_log()` instead.
-+ Method `LLMS_Engagements::handle_email` is deprecated in favor of `LLMS_Engagement_Handler::handle_email`.
-+ Filter `lifterlms_register_post_type_llms_my_certificate` is deprecated in favor of `lifterlms_register_post_type_my_certificate`.
-+ Deprecated the misspelled protected method `LLMS_Database_Query::preprare_query()` and replaced with `LLMS_Database_Query::prepare_query()`.
- + Class method `LLMS_Events_Query::preprare_query` replaced with `LLMS_Events_Query::prepare_query()`.
- + Class method `LLMS_Query_Quiz_Attempt::preprare_query` replaced with `LLMS_Query_Quiz_Attempt::prepare_query()`.
- + Class method `LLMS_Query_User_Postmeta::preprare_query` replaced with `LLMS_Query_User_Postmeta::prepare_query()`.
- + Class method `LLMS_Student_Query::preprare_query` replaced with `LLMS_Student_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`.
- + Class method `LLMS_Notifications_Query::preprare_query` replaced with `LLMS_Notifications_Query::prepare_query()`. [#859](https://github.com/gocodebox/lifterlms#859)
-
-##### Developer Notes
-
-+ Added `LLMS_Awards_Query`, used for querying data about awarded certificates and achievements.
- + The method signature `LLMS_Student::get_achievements()` and `LLMS_Student::get_certificates()` now use this class under tho hood.
- + The previous method signature, which passed data into a direct SQL query, is now deprecated.
-+ Achievement and certificate data storage locations have been modified, primarily to reduce reliance on the `wp_postmeta` table which will result in a site-wide performance improvement, especially on large sites.
- + Meta properties `_llms_achievement_content` and `_llms_certificate_content` have been removed in favor of `WP_Post::$post_content`.
- + Meta properties `_llms_achievement_title` and `_llms_certificate_title` have been removed in favor of `WP_Post::$post_title`.
- + Meta properties `_llms_achievement_template` and `_llms_certificate_template` have been removed in favor of `WP_Post::$post_parent`.
- + Meta properties `_llms_achievement_image` and `_llms_certificate_image` have been moved the meta property `_thumbnail_id` in order to utilize the WordPress core's featured image functionality and internal APIs.
-+ Reliance on `lifterlms_user_postmeta` for achievement and certificate data will be removed in a future release.
- + User postmeta properties `_achievement_earned` and `_certificate_earned` will continue to be recorded but are no longer being used internally.
- + The `updated_date` is now accessible via `WP_Post::$post_date`.
- + The `user_id` is now accessible via `WP_Post::$post_author`.
-+ Added new Javascript UI components library, modeled after `@wordpress/components`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/components).
-+ Added a new SVG icon library, modeled after `@wordpress/icons`. [Read more](https://github.com/gocodebox/lifterlms/tree/dev-600/packages/icons).
-+ The merge code button seen on certificate and email template editors is now an SVG image instead of a PNG.
-+ Added utility function for escaping and quoting strings. [#1027](https://github.com/gocodebox/lifterlms#1027)
-+ Added new utility function for stripping prefixes from strings.
-
-##### Updated Templates
-
-+ [templates/achievements/loop.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/achievements/loop.php)
-+ [templates/achievements/template.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/achievements/template.php)
-+ [templates/admin/reporting/tabs/students/information.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/admin/reporting/tabs/students/information.php)
-+ [templates/certificates/actions.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/actions.php)
-+ [templates/certificates/content-legacy.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/content-legacy.php)
-+ [templates/certificates/content.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/content.php)
-+ [templates/certificates/dynamic-styles.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/dynamic-styles.php)
-+ [templates/certificates/footer.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/footer.php)
-+ [templates/certificates/header.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/header.php)
-+ [templates/certificates/loop.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/loop.php)
-+ [templates/certificates/preview.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/preview.php)
-+ [templates/certificates/template.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/certificates/template.php)
-+ [templates/content-certificate.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/content-certificate.php)
-+ [templates/single-certificate.php](https://github.com/gocodebox/lifterlms/blob/trunk/templates/single-certificate.php)
-
-
-v5.6.0 - 2021-12-07
--------------------
-
-##### New Features
-
-+ Added an option to prevent users (by role) from copying site content and saving local copies of images.
-+ Added new site setting to disallow concurrent user sessions for specified user roles.
-
-##### Updates and Enhancements
-
-+ Updates LifterLMS REST to [v1.0.0-beta.21](https://make.lifterlms.com/2021/12/07/lifterlms-rest-api-version-1-0-0-beta-21/).
-
-##### Developer Notes
-
-+ Database migration functions can now be namespaced, eliminating the need to prefix update function names with a version number.
-
-
-v5.5.0 - 2021-11-05
--------------------
-
-##### New Features
-
-+ Includes the LLMS-CLI beta, a set of WP-CLI commands for LifterLMS and LifterLMS add-ons, as part of the core plugin:
- + To get started, run `wp llms --help` in your terminal or read the [online command documentation](https://developer.lifterlms.com/cli/commands/llms/).
- + Please note that the LLMS-CLI is included as a public beta feature. The command API is in a pre-release state and, as such, is subject to change without warning.
- + If you encounter any issues or wish to provide feedback on the LLMS-CLI please get in touch at [https://github.com/gocodebox/lifterlms-cli](https://github.com/gocodebox/lifterlms-cli).
-
-##### Bug Fixes
-
-+ Fix AJAX post search when using search queries containing quotes.
-
-##### Deprecations
-
-+ The `lifterlms_register_post_type_llms_engagement` is deprecated in favor of `lifterlms_register_post_type_engagement`.
-+ The `lifterlms_register_post_type_llms_achievement` is deprecated in favor of `lifterlms_register_post_type_achievement`.
-+ The `lifterlms_register_post_type_llms_certificate` is deprecated in favor of `lifterlms_register_post_type_certificate`.
-+ The `lifterlms_register_post_type_llms_my_certificate` is deprecated in favor of `lifterlms_register_post_type_my_certificate`.
-+ The `lifterlms_register_post_type_llms_email` is deprecated in favor of `lifterlms_register_post_type_email`.
-+ The `lifterlms_register_post_type_llms_coupon` is deprecated in favor of `lifterlms_register_post_type_coupon`.
-+ The `lifterlms_register_post_type_llms_voucher` is deprecated in favor of `lifterlms_register_post_type_voucher`.
-
-##### Developer Notes
-
-+ The `llms-addons` style asset no longer ships an unminified version.
-+ The `llms-admin-add-ons` style asset no longer ships an unminified version and the filename of the distributed file has changed.
-+ All the LifterLMS post types are now registered using the static method `LLMS_Post_Types::register_post_type()`.
-+ Upgraded woocommerce/action-scheduler to [v3.4.0](https://github.com/woocommerce/action-scheduler/releases/tag/3.4.0).
-
-
-v5.4.1 - 2021-10-26
--------------------
-
-##### Bug fixes
-
-+ Exclude internal-use-only properties (related to reporting caches and student counts) when exporting or cloning courses. [#1532](https://github.com/gocodebox/lifterlms/issues/1532)
-+ Don't sanitize input from user forms until validation has succeeded. [#1829](https://github.com/gocodebox/lifterlms/issues/1829.)
-+ Fixed an issue encountered when fields are removed from reusable blocks, causing some user forms from functioning as expected. [#1832](https://github.com/gocodebox/lifterlms/issues/1832)
-
-
-v5.4.0 - 2021-10-14
--------------------
-
-##### Updates
-
-+ Added logic to prevent the permanent deletion of courses or memberships with active subscriptions.
-+ When a subscription attempts to charge a recurring payment against a deleted course or membership the transaction will be cancelled and the order marked as failed.
-+ Updates LifterLMS Blocks to [v2.2.1](https://make.lifterlms.com/2021/09/29/lifterlms-blocks-version-2-2-1/).
-+ Updates LifterLMS REST to [v1.0.0-beta.20](https://make.lifterlms.com/2021/10/11/lifterlms-rest-api-version-1-0-0-beta-20/).
-
-##### Bug fixes
-
-+ Fixed issue encountered when cloning lessons with attached assignments.
-+ Fixed an error encountered when viewing an order for a deleted course or membership on the student dashboard.
-
-##### Templates Updated
-
-+ templates/myaccount/view-order.php
-
-
-v5.3.3 - 2021-10-05
--------------------
-
-##### Updates
-
-+ Update woocommerce/actions-scheduler to version 3.3.0.
-
-##### Bug fixes
-
-+ Fixed an issue causing the latest earned achievement to not display on the "My Grades" tab in certain scenarios.
-+ Fix issue causing a `waiting...` message to display on the JS dev console.
-+ Fix improper usage of `apply_filters_deprecated()` encountered when using deprecated theme settings filters in the course builder.
-+ Fixed missing text domain, thanks [chetansatasiya](https://github.com/chetansatasiya)!
-
-##### Developer notes
-
-+ Improved the `LLMS.waitFor()` runtime JS dependency loader to output improved debugging information.
-
-
-v5.3.2 - 2021-09-21
--------------------
-
-##### Updates
-
-+ Updated the SendWP integration account management URL.
-
-##### Bug fixes
-
-+ Fixed issue encountered with TinyMCE editor instances in repeater metabox groups.
-+ Fixed issue causing the latest achievement to not display when reviewing grades on the student dashboard.
-
-
-v5.3.1 - 2021-09-13
--------------------
-
-##### Bug fixes
-
-+ Fixed quote slashing for non-admin roles when editing content in the course builder.
-+ The LifterLMS admin icon now uses an encoded SVG to improve admin color scheme compatibility.
-+ Fixed an issue with empty admin notices.
-
-##### Dev updates
-
-+ The creation date of `llms_orders` is now determined by `llms_current_time()`.
-
-
-v5.3.0 - 2021-08-31
--------------------
-
-##### Updates
-
-+ Improved logic used to determine when a limited length subscription has completed its payment schedule.
-+ Improved accessibility of various icon buttons on the admin orders view/edit screen.
-+ Improved display of quiz attempts containing questions which have been deleted from the database.
-+ POT files from included library plugins (like LifterLMS REST) are now excluded from LifterLMS distributions.
-
-##### Development updates
-
-+ Introduced `LLMS_Trait_Singleton` to replace redundant singleton pattern definitions across classes in the codebase.
-+ Moved the loading of the autoloader to the main `lifterlms.php` file.
-+ Updated the `LLMS_Payment_Gateway` abstract class to utilize `LLMS_Abstract_Options_Data` for accessing gateway options.
-+ Audio and video embed methods shared by `LLMS_Course` and `LLMS_Membership` have been relocated to `LLMS_Trait_Audio_Video_Embed`.
-+ Sales page methods shared by `LLMS_Course` and `LLMS_Membership` have been relocated to `LLMS_Trait_Sales_Page`.
-
-##### Bug Fixes
-
-+ Fixed a visual issue encountered on the payment confirmation screen on small screens / mobile devices.
-+ Fix untranslatable time period strings (day, week, month, and year) found on the admin orders view/edit screen.
-+ Fixed an error encountered when attempting to grade a quiz attempt containing deleted questions.
-
-##### Deprecations
-
-+ Removed usage and references to the `LLMS_Order` post meta property `date_billing_end`. To determine if a subscription has ended, use `LLMS_Order::get_remaining_payments()` instead.
-+ Removed private method `LLMS_Order::calculate_billing_end_date()`.
-+ Deprecated the class property `$_instance` from the following classes, use the public method `instance()` instead:
- + `LLMS_Achievements`
- + `LLMS_Certificates`
- + `LLMS_Emails`
- + `LLMS_Engagements`
- + `LLMS_Events`
- + `LLMS_Grades`
- + `LLMS_Integrations`
- + `LLMS_Notifications`
- + `LLMS_Payment_Gateways`
- + `LLMS_Processors`
- + `LLMS_Sessions`
-
-##### Templates Updated
-
-+ templates/checkout/form-confirm-payment.php
-+ templates/admin/reporting/tabs/quizzes/attempt.php
-+ templates/quiz/results-attempt-questions-list.php
-
-
-v5.2.1 - 2021-08-17
--------------------
-
-##### Updates
-
-+ [LifterLMS Helper Version 3.4.1](https://make.lifterlms.com/2021/08/17/lifterlms-helper-version-3-4-1/).
-+ Made minor development-related changes to the `LLMS_Order` class.
-
-##### Bug Fixes
-
-+ Fixed an issue encountered when a course or membership sales page redirect is enabled but no URL is saved.
-
-
-v5.2.0 - 2021-08-10
--------------------
-
-##### Upcoming Payment Reminder Notification
-
-+ A new notification, the "Upcoming Payment Reminder" notification has been added. This notification sends a reminder to students a configurable number of days before a payment is do for a recurring subscription.
-+ When upgrading to version 5.2.0, this notification will be automatically *disabled*, visit LifterLMS -> Settings -> Notifications and select the new notification to enable it after upgrading.
-+ Props to [@niluzok](https://github.com/niluzok) for doing the initial work required to build this notification!
-
-##### Updates
-
-+ Reworked the database upgrader script to allow for minor upgrades which don't require significant data migration to upgrade silently without requiring user consent to initiate.
-+ Improved internal methods used to generate tables in the body of email notifications.
-
-##### Bug Fixes
-
-+ Student registration date is now displayed in the site's timezone in favor of UTC time.
-+ Properly pass options `template_path` and `default_path` to the template handler when creating an admin notice using a template.
-+ Removed translation (and incorrect text domain) from a logging function encountered when a recurring payment errors as a result of the payment gateway having been deactivated.
-
-##### Deprecations
-
-+ `LLMS_Install::db_updates()` is deprecated, use ``LLMS_DB_Upgrader::enqueue_updates()` instead.
-+ `LLMS_Install::update_notice()` is deprecated with no replacement.
-+ Template `admin/notices/db-update.php` is deprecated in favor of `includes/admin/views/db-update.php`.
-+ Template `admin/notices/db-updating.php` is deprecated with no replacement.
-
-
-v5.1.3 - 2021-08-04
--------------------
-
-+ Bugfix: Fixed an issue where a white box would be output over the certificate background image.
-+ Bugfix: Fixed an issue in the course builder causing lessons to be orphaned from a course when moved into an unsaved section.
-+ [LifterLMS Helper Version 3.4.0](https://make.lifterlms.com/2021/08/04/lifterlms-helper-version-3-4-0/)
-
-
-v5.1.2 - 2021-07-28
--------------------
-
-+ Bugfix: Pass second parameter to the `get_the_excerpt` filter.
-+ Fix: Corrected typos in error messages encountered during password reset.
-
-
-v5.1.1 - 2021-07-26
--------------------
-
-+ Bugfix: Fixed a bug causing malformed character codes to be rendered in forms when installing forms with translated labels.
-+ [LifterLMS Helper version 3.3.1](https://make.lifterlms.com/2021/07/26/lifterlms-helper-version-3-3-1/)
-
-
-v5.1.0 - 2021-07-19
--------------------
-
-##### Updates
-
-+ **Raised the minimum required WordPress core version to 5.8!**
-+ Adds WordPress core 5.8 compatibility.
-+ Improved user information forms required field validation.
-+ Added functionality to ensure that user email and password fields are *always* displayed to logged out users on checkout and registration forms.
-+ Added functionality to ensure that user email and password fields are *always* displayed on the account edit form.
-+ [LifterLMS Blocks version 2.2.0](https://make.lifterlms.com/2021/07/19/lifterlms-blocks-version-2-2-0/)
-
-##### Bug fixes
-
-+ Fixed an issue preventing certain orphaned quizzes from being deleted.
-+ Prevent users from submitting a password change without submitting their current password.
-+ Allow logged in users to checkout when no form fields are set to display.
-
-
-v5.0.2 - 2021-07-08
--------------------
-
-##### LifterLMS Blocks
-
-+ Upgraded to [version 2.1.1](https://make.lifterlms.com/2021/07/08/lifterlms-blocks-version-2-1-1/).
-
-##### Bug Fixes
-
-+ Fixed issue with non-Latin characters in dashboard endpoint URL slugs.
-+ Fixed issue preventing address localization when using the [lifterlms_registration] shortcode.
-
-
-v5.0.1 - 2021-06-28
--------------------
-
-##### Updates
-
-+ Update to [LifterLMS Blocks v2.1.0](https://make.lifterlms.com/2021/06/28/lifterlms-blocks-version-2-1-0/).
-+ Added a new filter to allow programmatically alter required field validation results.
-
-##### Bugfixes
-
-+ Fixed an issue causing preventing form layout options from working when passed into shortcodes.
-+ Fixed an issue preventing custom radio, select, and dropdown fields from working during checkout.
-+ Fixed an accessibility issue encountered during password strength validation.
-
-
-v5.0.0 - 2021-06-22
--------------------
-
-##### User Information Form Builder
-
-+ Customize all user information collection forms using the block editor for drag and drop and WYSIWYG form building.
-+ Customize field labels, placeholders, descriptions and more with an easy point and click interface.
-+ Determine if fields are required or optional with a simple toggle switch.
-+ Update the form layout with the block editor. Reorder fields, add columns, and more with a simple drag and drop interface.
-+ Remove unwanted fields with the click of a button.
-
-##### User Location Information Form Fields
-
-+ During user account creation and updates the user location fields are now locale aware ensuring that the proper terminology is used and only locale-required fields are displayed for the selected locale.
-+ The "Country" field has been updated to be automatically populated with a list of countries. View the full list in the file at `languages/countries.php` and the filter `lifterlms_countries` can be used to modify the default list at runtime.
-+ The "State" field on user forms has been updated to be automatically populated with a list of states (provinces or regions) for the selected country. This list of states can be found in the file at `languages/states.php` and the filter `lifterlms_states` can be used to modify the default list at runtime.
-+ Both "Country" and "State" fields are now searchable dropdowns elements.
-+ The lists of countries and states will be automatically updated during future releases based on information provided by [GeoNames](https://www.geonames.org/) APIs.
-
-##### Mergecodes everywhere via new `[llms-user]` shortcode
-
-+ Allows merging most user information field data into any post or page, email, or notification (as well as widgets and more).
-
-##### Updates
-
-+ Email and password confirmation fields may now be made optional.
-+ "User Information Options" have been largely removed in favor of determining which fields are displayed via the forms UI
-+ The former "User Information Options" settings area has been renamed to "User Privacy Options".
-+ Removed email lookup logic since `wp_authenticate()` supports email addresses as `user_login` since WP 4.5.
-+ Custom user fields added via filters are now displayed on the admin panel at priority 11 instead of 10.
-+ Added shortcode processing in LifterLMS-generated emails.
-+ If a symbol cannot be found for the supplied currency code, return the code instead of an empty string.
-
-##### Bug Fixes
-
-+ Changed the filter on return of `LLMS_Person_Handler::get_password_reset_fields()` from `lifterlms_lost_password_fields` to `llms_password_reset_fields`.
-+ Fixed duplicate references to the `llms-select2` script.
-
-##### Development changes
-
-+ Added before and after actions hooks for admin tools.
-+ The filter `lifterlms_before_user_${action}` is now triggered by `do_action_ref_array()` instead of `do_action()` allowing modification of `$posted_data` and `$fields` via hooks.
-+ A number of action and filter hooks have been moved to new locations within the codebase. They will continue to function as expected (with some minor exceptions).
-+ Enqueue select2 on account and checkout pages for searchable dropdowns for country & state.
-+ Stop loading removed processor "table_to_csv".
-
-##### Library & Vendor Updates
-
-+ Updates LifterLMS Blocks to version 2.0.1.
-+ Updates woocommerce/actions-scheduler to version 3.2.1.
-+ Load core libraries from new location and load WP Background Processing lib.
-+ The vendor script dependency `topModal.js` has been removed.
-
-##### Templates Updated
-
-+ templates/checkout/form-checkout.php
-+ templates/checkout/form-confirm-payment.php
-+ templates/checkout/form-gateways.php
-+ templates/global/form-login.php
-+ templates/global/form-registration.php
-+ templates/myaccount/form-edit-account.php
-+ templates/product/free-enroll-form.php
-
-##### Deprecations
-
-The following have been deprecated and will be removed from LifterLMS in a major update following version 5.0.0.
-
-+ Class Method: `LLMS_Person_Handler::get_available_fields()` is deprecated in favor of `LLMS_Forms::get_form_fields()`.
-+ Class Method: `LLMS_Person_Handler::register()` is deprecated, in favor of `llms_register_user()`.
-+ Class Method: `LLMS_Person_Handler::sanitize_field()` (private method) is deprecated with no replacement.
-+ Class Method: `LLMS_Person_Handler::update()` is deprecated, in favor of `llms_update_user()`.
-+ Class Method: `LLMS_Person_Handler::validate_fields()` is deprecated with no replacement.
-+ Class Method: `LLMS_Person_Handler::voucher_toggle_script()` is deprecated with no replacement.
-+ Filter: `llms_usernames_blacklist` is deprecated, use `llms_usernames_blocklist` instead.
-+ Filter: `lifterlms_get_user_custom_fields` is deprecated with no replacement.
-+ Function: `llms_get_minimum_password_strength()` is deprecated with no replacement.
-+ Option: `lifterlms_registration_generate_username` is deprecated in favor of the new method `LLMS_Forms::are_usernames_enabled()`.
-
-##### Removed Items
-
-+ Private method `LLMS_Processors::includes()` has been removed.
-+ Private methods `LLMS_Person_Handler::fill_fields()` and `LLMS_Person_Handler::insert_data()` were removed.
-+ Previously deprecated class method `LLMS_Quiz::get_lessons()` has been removed.
-+ Previously deprecated class method `LLMS_Controller_Quizzes::take_quiz()` has been removed.
-+ Previously deprecated class `LLMS_Processor_Table_To_Csv` has been removed.
-
-
-v5.0.0-rc.2 - 2021-06-18
-------------------------
-
-+ Remove password description merge codes from reusable block schema.
-+ Explicitly define required field attributes on reusable block schema.
-+ Requires WP 5.7 or later to edit forms & show an upgrade nudge when requirements are not met.
-+ Add a link from the (now) legacy account settings area to help experienced users find the new form building area
-+ Add a (subtle) custom fields add-on upgrade nudge when viewing the forms list on the admin panel
-+ Update LifterLMS Blocks to 2.0.0-rc.2
-
-
-v5.0.0-rc.1 - 2021-06-15
-------------------------
-
-+ Updates Action Scheduler library to version 3.2.0
-+ Remove the {min_strength} and {min_length} merge codes from the User Password block description.
-+ Don't load removed files during OptimizePress compatibility.
-+ Add a 5.0.0 DB upgrade routine and welcome notice
-+ Add the LifterLMS Helper as an included library
-+ Add WordPress 5.8 compatibility on the Widgets and Customizer screens.
-+ Move form location definitions into a schema file
-+ Require WordPress 5.7+ to manage forms via the block editor
-+ Upgrades LifterLMS Blocks to 2.0.0-rc.1
-
-
-v5.0.0-beta.2 - 2021-06-01
----------------------------
-
-+ Updates LifterLMS Blocks to 2.0.0-beta.6.
-+ (Re-)introduces the user information shortcode as `[llms-user]`.
-+ Add Admins status tool to reinstall core forms & reusable blocks.
-+ Fixed issue causing data from conditionally disabled fields (like state) from being cleared during form submission
-+ Updated form post type labels and added missing labels
-+ Removed the previously deprecated class `LLMS_Frontend_Forms` and it's deprecated class methods `reset_password()` and `voucher_check()`.
-+ Removed the previously deprecated class `LLMS_Frontend_Password` and it's deprecated class methods: `retrieve_password()`, `check_password()`, and `reset_password()`.
-+ Updated country and state localization lists.
-
-
-v5.0.0-beta.1 - 2021-05-19
----------------------------
-
-+ LifterLMS Blocks 2.0.0-beta.5
-+ Added site-wide field name validation
-+ Reworked the output of user information fields on the admin panel to share a handler and APIs with frontend fields.
-+ Deprecated filter: `lifterlms_get_user_custom_fields` in favor of `llms_admin_profile_fields`
-+ Improved previewing of form posts using WP Core block editor UI elements
-+ Open Registration form can now always be previewed regardless of the open registration site setting
-
-
-v5.0.0-alpha.6 - 2021-05-07
----------------------------
-
-+ LifterLMS Blocks 2.0.0-beta.4
-+ Fix default reusable password field type from plain text to password
-+ Change the default reusable block post titles to reduce confusion when searching for blocks in the editor
-
-
-v5.0.0-alpha.5 - 2021-05-03
----------------------------
-
-+ Reorganized new files into subdirectories.
-+ Added serverside password minimum length validation.
-+ Fix duplicate password strength meter output.
-+ Fix the user password field type from text to password
-+ Fix the phone number field type from text to tel
-+ Fix user state select field
-+ Don't autoload field values from specified datastore when a "value" is explicitly passed to the field.
-+ Only load published reusable blocks on the frontend of the website
-+ Improved the UX for editing a users account by automatically "hiding" password and email fields and only requiring them to be submitted when users explicit request an update via the field's "change" toggle button.
-
-
-v5.0.0-alpha.4 - 2021-04-26
----------------------------
-
-+ Default form templates now use reusable blocks.
-+ Improved the user experience surrounding fields with a confirmation field (email address and password).
-+ Added the ability to define a field's column width instead of requiring the usage of WP column blocks.
-+ Added support for reusable blocks on form posts
-+ Upgraded LifterLMS Blocks to 2.0.0-beta.3.
-
-
-v5.0.0-alpha.3 - 2021-03-23
----------------------------
-
-+ Fixed issue preventing users from editing their email address and password on the dashboard account edit screens.
-+ Fixed issues with country names with the article "the" in their name, for example "The Netherlands" instead of "Netherlands The".
-+ Upgraded LifterLMS Blocks to version 2.0.0-beta.2.
-
-
-v5.0.0-alpha.2 - 2021-03-22
----------------------------
-
-##### Updates
-
-+ Updates LifterLMS Blocks to version 2.0.0-beta.1
-+ Adds functionality to force usage of the Block Editor for editing LifterLMS forms
-+ Updates localization functionality and methods to have more accurate information.
-+ Added a function for determining if open registration is enabled.
-+ Added a WP Admin Bar link below the "Edit Page" link to enable editing the form (if a form exists on the page).
-
-##### Bug Fixes
-
-+ Fixed an issue encountered when custom HTML fields exist on a form (backwards compatibility for pre 5.x fields API).
-
-
-v5.0.0-alpha.1 - 2021-01-07
----------------------------
-
-##### User Information Form Builder
-
-+ Customize all user information collection forms using the block editor for drag and drop and WYSIWYG form building.
-+ Customize field labels, placeholders, descriptions and more with an easy point and click interface.
-+ Determine if fields are required or optional with a simple toggle switch.
-+ Update the form layout with the block editor. Reorder fields, add columns, and more with a simple drag and drop interface.
-+ Remove unwanted fields with the click of a button.
-
-##### User Location Information Form Fields
-
-+ During user account creation and updates the user location fields are now locale aware ensuring that the proper terminology is used and only locale-required fields are displayed for the selected locale.
-+ The "Country" field has been updated to be automatically populated with a list of countries. View the full list in the file at `languages/countries.php` and the filter `lifterlms_countries` can be used to modify the default list at runtime.
-+ The "State" field on user forms has been updated to be automatically populated with a list of states (provinces or regions) for the selected country. This list of states can be found in the file at `languages/states.php` and the filter `lifterlms_states` can be used to modify the default list at runtime.
-+ Both "Country" and "State" fields are now searchable dropdowns elements.
-+ The lists of countries and states will be automatically updated during future releases based on information provided by [GeoNames](https://www.geonames.org/) APIs.
-
-##### Mergecodes everywhere via new `[user]` shortcode
-
-+ TODO.
-
-##### Updates
-
-+ Email and password confirmation fields may now be made optional.
-+ "User Information Options" have been largely removed in favor of determining which fields are displayed via the forms UI
-+ The former "User Information Options" settings area has been renamed to "User Privacy Options".
-
-##### Bug Fixes
-
-+ Changed the filter on return of `LLMS_Person_Handler::get_password_reset_fields()` from `lifterlms_lost_password_fields` to `llms_password_reset_fields`.
-
-##### Development changes
-
-+ The filter `lifterlms_before_user_${action}` is now triggered by `do_action_ref_array()` instead of `do_action()` allowing modification of `$posted_data` and `$fields` via hooks.
-+ A number of action and filter hooks have been moved to new locations within the codebase. They will continue to function as expected (with some minor exceptions).
-+ Enqueue select2 on account and checkout pages for searchable dropdowns for country & state.
-
-##### Library & Vendor Updates
-
-+ Load core libraries from new location and load WP Background Processing lib.
-+ The vendor script dependency `topModal.js` has been removed.
-
-##### Templates Updated
-
-+ templates/global/form-login.php
-+ templates/global/form-registration.php
-+ templates/product/free-enroll-form.php
-
-##### Deprecations
-
-The following have been deprecated and will be removed from LifterLMS in a major update following version 5.0.0.
-
-+ Class Method: `LLMS_Person_Handler::get_available_fields()` is deprecated in favor of `LLMS_Forms::get_form_fields()`.
-+ Class Method: `LLMS_Person_Handler::register()` is deprecated, in favor of `llms_register_user()`.
-+ Class Method: `LLMS_Person_Handler::sanitize_field()` (private method) is deprecated with no replacement.
-+ Class Method: `LLMS_Person_Handler::update()` is deprecated, in favor of `llms_update_user()`.
-+ Class Method: `LLMS_Person_Handler::validate_fields()` is deprecated with no replacement.
-+ Class Method: `LLMS_Person_Handler::voucher_toggle_script()` is deprecated with no replacement.
-+ Filter: `llms_usernames_blacklist` is deprecated, use `llms_usernames_blocklist` instead.
-+ Function: `llms_get_minimum_password_strength()` is deprecated with no replacement.
-+ Option: `lifterlms_registration_generate_username` is deprecated in favor of the new method `LLMS_Forms::are_usernames_enabled()`.
-
-##### Removed Items
-
-+ Private method `LLMS_Processors::includes()` has been removed.
-+ Private methods `LLMS_Person_Handler::fill_fields()` and `LLMS_Person_Handler::insert_data()` were removed.
-+ Previously deprecated class method `LLMS_Quiz::get_lessons()` has been removed.
-+ Previously deprecated class method `LLMS_Controller_Quizzes::take_quiz()` has been removed.
-+ Previously deprecated class `LLMS_Processor_Table_To_Csv` has been removed.
-
-
-v4.21.3 - 2021-05-31
---------------------
-
-##### Updates
-
-+ Increase 3rd party support for WP core hook `lostpassword_post` hook.
-
-##### Bug fixes
-
-+ Props to [Hemant Patidar](https://www.linkedin.com/in/hemantsolo/) for discovering an issue preventing rate limiting in various security plugins from working on the LifterLMS password recovery form.
-+ Fixed an issue encountered when updating LifterLMS premium add-ons via the LifterLMS Helper encountered when API errors are occur.
-+ Updated the failure error code from 'activation' to 'deactivation' in the `LLMS_Add_On` class.
-+ Updated the API connection error message returned when using the `LLMS_Abstract_API_Handler` class.
-
-##### Deprecations
-
-+ Class `LLMS_Frontend_Password` is deprecated, see deprecated methods and their replacements below:
-
- + `LLMS_Frontend_Password::retrieve_password()` is deprecated in favor of `LLMS_Controller_Account::lost_password()`.
- + `LLMS_Frontend_Password::check_password_reset_key()` is deprecated in favor of `check_password_reset_key()`.
- + `LLMS_Frontend_Password::reset_password()` is deprecated in favor of `reset_password()`.
-
-
-v4.21.2 - 2021-05-17
---------------------
-
-##### Security Update
-
-This releases fixes a security issue affecting LifterLMS versions 4.21.1 and earlier:
-
-+ Thank you to [Amirmohammad vakili](https://www.linkedin.com/in/amirmuhammad-vakili-65a7a11b3/) for reporting an insecure direct object reference issue.
-
-##### Updates
-
-+ Added the `view_grades` capability which is used to determine whether or not a user has the ability to view another user's grades on the website's frontend.
-
-##### Bug fixes
-
-+ Fixed an issue causing PHP errors when attempting to access a quiz attempt that doesn't exist.
-+ Fixed a localization issue encountered when entering transaction amounts on the admin panel.
-
-
-v4.21.1 - 2021-04-29
---------------------
-
-##### Security Update
-
-This releases fixes two security issues affecting LifterLMS versions 4.21.0 and earlier:
-
-+ Thank you to [Amirmohammad vakili](https://www.linkedin.com/in/amirmuhammad-vakili-65a7a11b3/) for reporting a way to store XSS.
-+ Thank you to Ashish Jha from [Bluefire Redteam](https://www.bluefire-redteam.com/) for reporting a reflected XSS issue on checkout screens.
-
-
-v4.21.0 - 2021-04-19
---------------------
-
-##### Updates
-
-+ Certificate exports will now automatically include (most) externally hosted images and stylesheets.
-+ Opt-in forward compatibility changes have been made to the `LLMS_Abstract_Options_Data` class.
-
-##### Bugfixes
-
-+ Fixed an issue causing one-time payment orders from being included in totals on some reporting screens.
-+ Fixed an issue causing student enrollment counts to be incorrect under some circumstances.
-+ Fixed issues resulting in unnecessary duplicated instances of course background data processing.
-+ Fixed an error encountered when a course is deleted prior to its background data being processed.
-+ Fixed an escaping issue causing passwords with a backslash character from being usable following a password reset.
-
-
-v4.20.0 - 2021-03-16
---------------------
-
-##### Bugfixes
-
-+ Fixed an issue causing a fatal error when attempting to access reports for deleted students. Thanks Thanks [@pondermatic](https://github.com/pondermatic)!
-+ Fixed an issue encountered on the builder causing the last section to be returned when retrieving the previous section for the first section.
-
-
-v4.19.0 - 2021-03-11
---------------------
-
-##### Supported Version Requirement Updates
-
-+ **The minimum supported PHP version has been raised to PHP 7.3. Please upgrade to a [supported PHP version](https://www.php.net/supported-versions).**
-+ **The minimum supported WordPress core version has been raised to version 5.3.**
-
-##### Bug fixes
-
-+ Fixed an issue causing TinyMCE editor instances to be unusable within metaboxes when using the block editor.
-
-
-v4.18.0 - 2021-03-04
---------------------
-
-**This is the last release of LifterLMS that will declare support for PHP 7.2. PHP 7.2 reached its official [end of life](https://www.php.net/eol.php) on November 30, 2020. With the next release of LifterLMS the minimum supported PHP version will be raised to 7.3. If you're currently using PHP 7.2 please contact your host and request an upgrade to a [supported PHP version](https://www.php.net/supported-versions) as soon as possible!**
-
-##### Updates
-
-+ Tested up to WordPress core version 5.7
-+ Updated several occurrences of `json_encode()` with preferred `wp_json_encode()`.
-
-##### Bug fixes
-
-+ Added a tie-breaker when there are multiple enrollment statuses with the same date & time. Thanks [@pondermatic](https://github.com/pondermatic)!
-+ On admin order pages and tables don't print links for deleted students.
-+ Fixed an issue on admin order pages when viewing an order for a deleted student.
-
-
-v4.17.0 - 2021-02-22
---------------------
-
-##### Updates
-
-+ The post type feature "llms-sales-page" has been added to course and membership post types, signifying they support custom sales pages.
-
-##### Bug fixes
-
-+ Fixed compatibility issues with Yoast SEO 15.8.
-+ Fixed duplicate action hook in `content-no-access-after.php` template.
-+ Added early returns to several templates to prevent undefined variables errors.
-+ Fixed an undefined variable encountered in course builder JS debug logging.
-
-##### Templates Updated
-
-+ content-no-access-after.php
-+ quiz/meta-information.php
-+ quiz/results.php
-+ quiz/start-button.php
-
-
-v4.16.0 - 2021-02-18
---------------------
-
-##### Updates
-
-+ Added preview management to the student dashboard to allow previewing of the dashboard as a site visitor.
-+ Added a new filter to allow customization of courses output by the [lifterlms_courses] shortcode. Thanks [@reedhewitt](https://github.com/reedhewitt)!
-+ Added compatibility code to reduce plugin conflicts encountered in the course builder. Resolves a conflict encountered when building quizzes with Yoast SEO installed.
-
-##### Bug fixes
-
-+ Fixed undefined variable error encountered when creating custom notification types. Thanks [@pondermatic](https://github.com/pondermatic)!
-+ Fixed incorrect variables passed to `sprintf()` in logging functions used by the course data background processor. Thanks [@pondermatic](https://github.com/pondermatic)!
-
-
-v4.15.0 - 2021-02-09
---------------------
-
-##### Updates
-
-+ Database migration: remove any "orphaned" access plans which were not properly cleaned up during deletion of parent course or membership.
-+ Improved performance of membership post association query methods.
-
-##### Bug fixes
-
-+ Access plans will now be automatically deleted when their parent course or membership is deleted.
-+ Fix an issue with donut charts/graphs on RTL sites.
-+ Fix an issue causing unpublished (draft/private) courses from being returned during queries for membership post associations.
-
-##### LifterLMS REST 1.0.0-beta.15
-
-###### Updates
-
-+ Added Access Plan resource and endpoint.
-+ Provide a more significant error message when trying to delete an item without permissions.
-+ Use `WP_Http` constants in favor of integers when referencing HTTP status codes.
-
-###### Bug fixes
-
-+ Fixes localization issues where a singular name was used in favor of the expected plural form.
-+ Fixed issues where an error object was not properly returned when expected
-+ Fixed call to undefined function `llms_bad_request_error()`, must be `llms_rest_bad_request_error()`.
-+ Fixed access plans resource link.
-+ Fixed wrong trigger retrieved when multiple trigger were present for the same user/post pair on Student Enrollment resources.
-
-
-v4.14.0 - 2021-02-04
---------------------
-
-##### Updates
-
-+ Added a user preference option allowing users to opt-out of the course builder's autosave functionality. [More information](https://lifterlms.com/docs/using-course-builder/#manual-saving).
-+ 5-star review request displayed at 30 enrollments instead of 50.
-
-##### Bug fixes
-
-+ Fixed an issue encountered when using shortcodes in the description of an access plan.
-+ Fixed an issue encountered when editing auto-draft courses on the course builder.
-
-##### Deprecations
-
-+ `LLMS_Controller_Quizzes::take_quiz()` is deprecated in favor of `LLMS_AJAX_Handler::quiz_start()`.
-+ Method `LLMS_Quiz::get_lessons()` is deprecated with no replacement.
-
-
-v4.13.0 - 2021-01-26
---------------------
-
-##### Updates
-
-+ **The minimum supported WordPress core version has been raised to 5.2.** For more information, please review the [LifterLMS Minimum System Requirements](https://lifterlms.com/docs/minimum-system-requirements-lifterlms/).
-+ When cloning courses and lessons the cloned post will be created as a draft.
-+ When cloning courses the suffix "(Clone)" will be appended to the title of the course to unify cloning behavior with lessons.
-+ Added information about LifterLMS specific constant values to the LifterLMS system report.
-+ Added a new constant `LLMS_IS_SITE_CLONE` which can be used to force the site's clone status.
-
-##### Bug fixes
-
-+ Reverts site clone detection check changes implemented in 4.12.0 to restore pre 4.12.0 functionality which only runs checks on the admin panel for logged in users with the `manage_lifterlms` capability.
-+ Restore reliance on `mb_convert_encoding()` when passing html strings into `DOMDocument` and use the alternate method introduced in version 4.8.0 as a fallback.
-+ Fixed an issue encountered when unexpected or malformed data is stored in the LifterLMS admin notices option.
-
-
-v4.12.0 - 2021-01-20
---------------------
-
-##### Updates
-
-+ Automatic site clone detection checks have been adjusted to always run in favor of only running on the admin panel.
-+ LifterLMS Site Features (like recurring payment status) can now be configured via constant values.
-+ Added `llms_load_admin_tools` action to allow 3rd parties to easily hook into our admin tools system.
-+ Made numerous performance improvements on the course data background processor.
-+ Course data background processing will now be automatically throttled for courses with 500 students or more as opposed to the old value of 2,500 or more.
-
-##### Bug fixes
-
-+ Fixed an incorrect HTML `for` attribute and added an `id` to the related input element on the student dashboard voucher redemption endpoint.
-+ Fixed a pagination error encountered when using course or membership list shortcodes on the static front page.
-+ Make sure `is_lifterlms()` exists before calling it in navigation menu-related classes.
-
-##### Deprecations
-
-+ `LLMS_Admin_Notices_Core::check_staging()` is deprecated in favor of `LLMS_Staging::notice()`.
-+ Unused property `LLMS_Course::$sections` is replaced by `LLMS_Course::get_sections()`.
-+ Unused property `LLMS_Course::$sku` is deprecated with no replacement.
-+ `LLMS_Frontend_Forms` is deprecated, functionality is available via `LLMS_Controller_Account`.
-+ `LLMS_Frontend_Forms::reset_password()` is deprecated in favor of `LLMS_Controller_Account::reset_password()`.
-
-##### Templates Updated
-
-+ templates/myaccount/form-redeem-voucher.php
-
-
-v4.11.0 - 2021-01-07
---------------------
-
-##### Updates
-
-+ Adds the ability to use the Instructors blocks on the membership post type. Thanks [@alaa-alshamy](https://github.com/alaa-alshamy)!
-+ Updated LifterLMS Blocks to [Version 1.11.1](https://make.lifterlms.com/2020/12/29/lifterlms-blocks-version-1-11-1/).
-
-##### Bug fixes
-
-+ Fixed a PHP Notice encountered when trying to retrieve next lesson from an empty section.
-
-##### Templates updated
-
-+ templates/course/author.php
-
-
-v4.10.2 - 2021-01-04
---------------------
-
-##### Updates
-
-+ Improved performance of `llms_get_enrolled_students()`.
-+ Refactored lesson navigation query functions.
-
-##### Bug fixes
-
-+ Fixed sorting error when sorting student reports by name.
-
-
-v4.10.1 - 2020-12-10
---------------------
-
-##### Bug fixes
-
-+ Fixed visual issues encountered on the admin Add-Ons screen.
-+ Use `hr.wp-header-end` in favor of a second (hidden) to "catch" admin notices on the Add-Ons screen.
-+ Replace incorrect usage of invalid ID `llms_shop` with `courses` during catalog template loader checks.
-+ Function `llms_get_post()` will now only allow instantiation of LifterLMS classes.
-+ Remove unneeded require autoloaded file `includes/class.llms.quiz.data.php`.
-
-
-v4.10.0 - 2020-12-01
---------------------
-
-##### Updates
-
-+ Adds native theme support for the WordPress default theme Twenty Twenty-One.
-+ Improved the `llms_archive_description()` function and related filter.
-
-##### Bug fixes
-
-+ Fix issue encountered when using multiple role plugins to add the Instructor role to an Administrator user account. Thanks [@daniel-shuy](https://github.com/daniel-shuy)!
-+ Fixed an issue encountered when using non-latin characters in a course post URL slug. Thanks [@alaa-alshamy](https://github.com/alaa-alshamy)!
-
-##### Templates Updated
-
-+ templates/loop/pagination.php
-
-
-v4.9.0 - 2020-11-24
--------------------
-
-+ Tested up to WordPress core 5.6 (RC.1).
-+ Raised the minimum required WordPress core version to 5.1.
-+ Add new localization utilities for developers.
-+ Fixed various issues found on PHP 8.
-+ Added script localization for block editor scripts.
-+ Updated LifterLMS Rest to [Version 1.0.0-beta.17](https://make.lifterlms.com/2020/11/24/lifterlms-rest-api-version-1-0-0-beta-17/).
-+ Updated LifterLMS Blocks to [Version 1.10.0](https://make.lifterlms.com/2020/11/24/lifterlms-blocks-version-1-10-0/).
-
-
-v4.8.0 - 2020-11-16
--------------------
-
-##### Updates
-
-+ Added additional course imports and templates at the end of the setup wizard
-+ Added a cloud importer enabling 1-click importing of courses and course templates via the importer at LifterLMS -> Import
-+ Added strict comparisons in several places.
-+ Course "extra" data is only added to course arrays during exports to improve performance on the course builder.
-+ Improved template override loading performance on sites with no child theme.
-
-##### Bug fixes
-
-+ Fixed issues related to reliance on methods provided by the `mb_string` PHP module.
-
-##### Deprecations
-
-+ `LLMS_Admin_Setup_Wizard::generator_course_status()` is deprecated with no replacement.
-+ `LLMS_Admin_Setup_Wizard::watch_course_generation()` is deprecated with no replacement.
-
-
-v4.7.1 - 2020-11-05
--------------------
-
-##### Bug fixes
-
-+ During import generation set the post excerpt during the initial post insert instead of during metadata updates after creation.
-
-##### LifterLMS REST API 1.0.0-beta.16
-
-+ Improved performance of various database queries.
-
-
-v4.7.0 - 2020-11-02
--------------------
-
-##### Updates
-
-+ Major refactor of the `LLMS_Generator` class.
-+ Course export structure improved to include images and reusable blocks found in post content.
-+ When importing courses images will be automatically sideloaded into the media library as new attachment posts
-+ When importing courses reusable blocks will be imported
-+ Improved the success message displayed following a course import
-+ The class `LLMS_Admin_Reporting` is now always loaded on the admin panel.
-+ Performance improvements have been made to the `LLMS_Events_Query` to support using the `no_found_rows` query argument.
-+ When an order's billing plan "completes", a new meta property will be added to the order, `plan_ended`, which can be used to query orders with completed plans.
-+ Made improvements to the admin payment rescheduler tool to have more accurate reporting information.
-
-##### Bug fixes
-
-+ Replaced an instance of the LifterLMS (old) 1.0 rocket logo with the current rocket logo. Thanks [@imknight](https://github.com/imknight)!
-+ Ensure builder `switch-number` fields are set with the `number` type attribute. Thanks [@imknight](https://github.com/imknight)!
-+ Don't display a "View Post" link when updating post types that aren't publicly queryable. Thanks [@imknight](https://github.com/imknight)!
-+ Fixed the incorrect output of an achievement's title in a popover notification when using the {{ACHIEVEMENT_TITLE}} merge code. Thanks [@CadenG150](https://github.com/@CadenG150)!
-+ Fixed an error encountered when plugins utilize the `WP_Users_List_Table` class outside of the `users.php` screen.
-
-##### Deprecations
-
-+ `LLMS_Admin_Import::localize_stat()` is deprecated with no replacement.
-+ `LLMS_Admin_Users_Table::load_dependencies()` is deprecated with no replacement. The included class, `LLMS_Admin_Reporting` is now always loaded.
-+ `LLMS_Generator::add_custom_values()` is deprecated in favor of `LLMS_Generator_Courses::add_custom_values`.
-+ `LLMS_Generator::get_author_id_from_raw()` is deprecated in favor of `LLMS_Generator_Courses::get_author_id_from_raw()`.
-+ `LLMS_Generator::get_default_post_status()` is deprecated in favor of `LLMS_Generator_Courses::get_default_post_status()`.
-+ `LLMS_Generator::get_generated_posts()` is deprecated in favor of `LLMS_Generator::get_generated_content()`.
-+ `LLMS_Generator::format_date()` is deprecated in favor of `LLMS_Generator_Courses::format_date()`.
-+ `LLMS_Generator::increment()` is deprecated with no replacement.
-
-
-v4.6.0 - 2020-10-19
--------------------
-
-+ Added an admin tool to help automatically identify and schedule missed recurring payments
-+ Use `llms_deprecated_function()` in favor of `llms_log()`.
-+ Removed logging and use `apply_filters_deprecated()` in favor of `apply_filters()`.
-
-
-v4.5.1 - 2020-10-14
--------------------
-
-##### Updates
-
-+ Added logic in `LLMS_Database_Query` to reduce unnecessary DB reads when total results are not required.
-
-##### Bug fixes
-
-+ Removed the course "Excerpt" area in favor of utilization of the course sales page content.
-+ Show sales reporting currency symbol based on LifterLMS site options in favor of the browser's locale settings.
-+ Fixed an issue causing achievement-related JS DOM events to be bound unnecessarily. Thanks to [@imknight](https://github.com/imknight)!
-+ Fixed an issue causing site administrator capabilities to be removed during LifterLMS data removal.
-+ Fixed an issue causing an instructors course post count to display 0 on the admin panel courses post table. Thanks to [nhandl3](https://github.com/nhandl3)!
-+ Only display the admin bar "View Manager" to users who can bypass content restrictions.
-+ Updated jQuery code to stop using deprecated events and methods in preparation for jQuery upgrades in the WordPress core.
-+ Fixed PHP notice encountered on the admin panel when using Yoast SEO.
-
-
-v4.5.0 - 2020-10-06
--------------------
-
-##### Updates
-
-+ Students can now choose to make their certificates publicly accessible. Huge thanks to [@alaa-alshamy](https://github.com/alaa-alshamy) for contributing this awesome new feature!
-+ When accessing a certificate that does not have sharing enabled, a 404 will be served in favor of an error message.
-+ Admin payment gateway notices will no longer redisplay a week after being dismissed.
-+ Log files will be automatically split when a file is 5MB or larger, ensuring that log files never grow too large.
-+ During student registration, `wp_signon()` is used to login the newly created user.
-+ Improved slow background process database queries run during the automatic "closing" of idle user sessions.
-
-##### Bug fixes
-
-+ `LLMS_User_Certificate::get_related_post_id()` and `LLMS_User_Certificate::get_user_id()` will now always return an integer.
-+ Fixes issues related to account sign on/out and session start/end events being recorded incorrectly.
-
-##### Deprecations
-
-+ `llms_set_person_auth_cookie()` is deprecated in favor of WP core methods such as `wp_signon()`, `wp_set_current_user()`, and/or `wp_set_auth_cookie()`.
-
-
-v4.4.4 - 2020-09-21
--------------------
-
-##### Bug fixes
-
-+ Don't pass unsupported parameter `$use_cache` to the `calculate_grade()` method, thanks [@pondermatic](https://github.com/pondermatic)!
-+ Add an HTML title attribute to the admin setup wizard page.
-+ Fix issue causing notices to be logged during quiz attempt deletion on the admin panel.
-
-##### Deprecations
-
-+ Method `LLMS_Admin_Setup_Wizard::scripts()` & `LLMS_Admin_Setup_Wizard::output_step_html()` are deprecated with no replacements.
-
-##### LifterLMS REST API version 1.0.0-beta.15
-
-+ Bugfix: Created lessons will now have the derivative `course_id` property set according to the ID of the lesson's parent section.
-+ Bugfix: The `course_id` property of lessons is now properly marked as read-only.
-
-
-v4.4.3 - 2020-09-16
--------------------
-
-+ Bugfix: Fix engagement email duplicate check issue.
-+ Bugfix: Fix transposition issue found in engagement email dupcheck debug log message.
-
-
-v4.4.2 - 2020-09-08
--------------------
-
-+ Bugfix: Fix lesson navigation regression introduced in 4.4.0.
-
-
-v4.4.1 - 2020-09-04
--------------------
-
-+ Bugfix: Delayed engagement emails will not be sent to students who's enrollment is not active in the related course or membership which triggered the email.
-+ Bugfix: Fixed regression introduced in 4.4.0 preventing the `certificates.css` stylesheet from loading on certificate screens.
-+ Update: Engagement email related logs will be logged to a separate logfile, `engagement-emails` in favor of the main `llms` log.
-
-
-v4.4.0 - 2020-09-02
--------------------
-
-##### Updates
-
-+ Improved LifterLMS static asset registration, queuing, definitions, and management.
-+ Added strict comparators in various areas of the codebase.
-
-##### Changes to deprecated function logs and warnings
-
-+ The `llms_deprecated_function()` method now uses `_deprecated_function()` (from the WP core) under the hood.
-+ LifterLMS deprecation warnings are logged to the WP core `debug.log` file in favor of the LifterLMS log file.
-+ LifterLMS deprecation warnings will now trigger a `E_USER_DEPRECATED` error when `WP_DEBUG` is enabled.
-
-##### Bugfixes
-
-+ Fixed a lesson navigation issue encountered when sections contain unpublished lessons.
-+ Fixed an undefined variable notice encountered on the student dashboard.
-+ Fixed an issue encountered when the `wp_login_url()` function returns an empty string.
-+ Fixed a double slash found in an asset URI.
-
-##### Deprecations
-
-+ `LLMS_Frontend_Assets::is_inline_script_enqueued()` is deprecated in favor of `LLMS_Frontend_Assets::is_inline_enqueued()`.
-+ `LLMS_Ajax::register_script()` is deprecated with no replacement.
-+ `LLMS_Ajax::get_ajax_data()` is deprecated with no replacement.
-+ Javascript AJAX nonce variable is moved from `wp_ajax_data.nonce` to `window.llms.ajax-nonce`.
-
-##### Templates Updated
-
-+ templates/checkout/form-gateways.php
-+ templates/course/lesson-preview.php
-+ templates/course/syllabus.php
-
-
-v4.3.3 - 2020-08-17
--------------------
-
-+ Fixed an issue causing legends of reporting charts to be truncated and only readable after a mouse hover.
-+ Fixed an issue caused by passing `null` values to `wp_insert_post()`.
-+ Fixed a javascript error encountered on LifterLMS settings screens.
-
-
-v4.3.2 - 2020-08-10
--------------------
-
-+ WP 5.5 compatibility: Automatically deregister "protected" post types from wp-sitemap.xml.
-
-
-v4.3.1 - 2020-08-06
--------------------
-
-+ When resetting tracking data cookies, set a "secure" cookie where possible.
-+ Catch an unhandled error encountered when generating certificate exports.
-+ When an error is encountered during certificate export generation, display an error notice instead of a general notice.
-
-
-v4.3.0 - 2020-07-28
--------------------
-
-##### Security Fix
-
-+ Fixed an XSS issue on account edit and registration forms. Thanks to [Morningstar](https://twitter.com/0xMstar) for reporting this issue!
-
-##### Bug fixes
-
-+ Fixed an error encountered during customizer live theme preview encountered when Twenty-twenty is the current theme.
-+ The `$type` property of the `LLMS_Abstract_Database_Store` is now set to a default placeholder value (`_db_record_`) in favor of an empty string.
-+ Set the `$type` property of the `LLMS_Event` class to `event`.
-+ Set the `$type` property of the `LLMS_Quiz_Attempt` class to `quiz_attempt`.
-+ Set the `$type` property of the `LLMS_User_Post_Meta` class to `user_postmeta`.
-
-##### Updates
-
-+ Added a filter `llms_form_field_args` to allow extending form fields prior to HTML rendering.
-
-##### Deprecations
-
-The following filter hooks have been deprecated. These hooks were being called as the result of a bug (noted above) and should no longer be used. They will be removed in the next *major* version of LifterLMS.
-
-+ `llms__created` has been deprecated, use `llms_{$type}_created` where `{$type}` is the database record type defined by the class property.
-+ `llms__deleted` has been deprecated, use `llms_{$type}_deleted` where `{$type}` is the database record type defined by the class property.
-+ `llms__updated` has been deprecated, use `llms_{$type}_updated` where `{$type}` is the database record type defined by the class property.
-
-
-v4.2.0 - 2020-07-21
--------------------
-
-##### Updates
-
-+ Admins can now preview the checkout screen as visitors or students using the "View As" function from the WP Admin bar
-+ Javascript cookies now set cookies with `sameSite` set to `strict` as recommended by Firefox/Mozilla.
-+ Added filters to allow 3rd parties to use LifterLMS completion tracking APIs to "complete" external or non-LMS content.
-+ Added "deep" orphan checks when checking the relationship between a quiz and a lesson.
-+ Normalized the return structure in `LLMS_Post_Instructors::get_instructors()` when no instructor set, thanks [@nicolas-jaussaud](https://github.com/nicolas-jaussaud)!
-+ Update LifterLMS rocket icon used in the WP Admin Bar in the "View As" area.
-
-##### Bug fixes
-
-+ When deleting a quiz attempt the related lesson will now be automatically marked as "Incomplete" when appropriate.
-+ `LLMS_Abstract_User_Data::get_id()` now always returns an integer.
-+ Fixed a 404 error resulting from settings tooltips referencing a missing icon asset.
-+ Added logic to set the order status to 'cancelled' when an enrollment linked to an order is deleted.
-
-
-
-v4.1.0 - 2020-07-06
--------------------
-
-##### LifterLMS REST 1.0.0-beta.14
-
-+ **Breaking**: `LLMS_REST_Controller::prepare_links()` now requires a second parameter, the `WP_REST_Request` for the current request. Any classes extending and overwriting this method must adjust their method signature to accommodate this change.
-+ Bugfix: Fixed issue causing response objects to unintentionally include keys of remapped fields. This error occurs only when extending core controllers and attempting to exclude core fields.
-
-
-v4.0.0 - 2020-06-25
--------------------
-
-This is a *major* release. Many backwards incompatible changes have been made that may affect your site if you have custom code which rely on previously deprecated functions or methods. If you're not sure about your custom code, test the upgrade in a [staging site](https://lifterlms.com/docs/staging/).
-
-##### Bug Fixes
-
-+ Fixed an issue encountered during quiz grading.
-+ Add RTL language support for popover interfaces found throughout the course builder.
-+ Fixed issue encountered in MySQL 8.0 when using the bbPress integration.
-
-##### LifterLMS REST API 1.0.0-beta.13
-
-+ Bugfix: Fixed error response messages on the instructors endpoint.
-+ Bugfix: Fixed student progress deletion endpoint issues preventing progress from being fully removed.
-
-##### Action Scheduler Library
-
-Switches from prospress/action-scheduler to woocommerce/action-scheduler. The repository has been moved but it's the same library & upgrades to latest version (3.1.6).
-
-While this is a semantically major upgrade of the library there are no backwards incompatible changes to the public API.
-
-There have been several deprecated functions/classes. The LifterLMS core does not directly use any of these deprecated functions but 3rd parties might and should review the changelog of the library to see if they are affected by any deprecations: https://github.com/woocommerce/action-scheduler/releases.
-
-##### Deprecations
-
-+ Function `LLMS()` is deprecated in favor of `llms()`.
-
-##### Templates Modified
-
-+ templates/global/form-login.php
-+ templates/global/form-registration.php
-
-##### Miscellaneous Breaking Changes
-
-**WP Session Manager Library**
-
-Removes the bundled WP Session Manager plugin dependency, all public methods included with this plugin have been removed without direct replacements.
-
-**Removed JS dependencies**
-
-Removes bundled JS bootstrap 3 dependencies: "collapse" and "transition"
-
-**Removed CSS Classes**
-
-Removes classnames from student dashboard login and registration form wrapper elements which conflict with bootstrap causing visual issues.
-
-These classes are not used by the LifterLMS core or add-ons and are a legacy class that hasn't been removed for fear of creating backwards compatibility issues with any custom css, 3rd party themes, etc...
-
-+ templates/global/form-login.php: Removes `col-1` class from the `div.llms-person-login-form-wrapper` element.
-+ templates/global/form-registration.php: : Removes `col-2` class from the `div.llms-new-person-form-wrapper` element.
-
-**Removed SVG assets and functionality**
-
-+ LifterLMS no longer utilizes SVGs powered by the `LLMS_Svg` class. The class has been deprecated and removed (see below).
-+ The `assets/svg` directory (and all SVG assets contained within) has been removed.
-+ The constant `LLMS_SVG_DIR` has been removed.
-
-##### Previously deprecated classes (and files) that have been removed
-
-+ `LLMS_Admin_Analytics`: `includes/admin/class.llms.admin.analytics.php`
-+ `LLMS_Analytics`: `includes/class.llms.analytics.php`
-+ `LLMS_Analytics_Courses`: `includes/admin/analytics/class.llms.analytics.courses.php`
-+ `LLMS_Analytics_Memberships`: `includes/admin/analytics/class.llms.analytics.memberships.php`
-+ `LLMS_Analytics_Page`: `includes/admin/analytics/class.llms.analytics.page.php`
-+ `LLMS_Analytics_Sales`: `includes/admin/analytics/class.llms.analytics.sales.php`
-+ `LLMS_Course_Basic`: `includes/class.llms.course.basic.php`
-+ `LLMS_Course_Handler`: `includes/class.llms.course.handler.php`
-+ `LLMS_Course_Factory`: `includes/class.llms.course.factory.php`
-+ `LLMS_Lesson_Basic`: `includes/class.llms.lesson.basic.php`
-+ `LLMS_Meta_Box_Expiration`: `includes/admin/post-types/meta-boxes/class.llms.meta.box.expiration.php`
-+ `LLMS_Meta_Box_Video`: `includes/admin/post-types/meta-boxes/class.llms.meta.box.video.php`
-+ `LLMS_Number`: `includes/class.llms.number.php`
-+ `LLMS_Person`: `includes/class.llms.person.php`
-+ `LLMS_Quiz_Legacy`: `includes/class.llms.quiz.legacy.php`
-+ `LLMS_Svg`: `includes/class.llms.svg.php`
-+ `LLMS_Table_Questions`: `includes/admin/reporting/tables/llms.table.questions.php`
-+ `LLMS\Users\User`: `includes/Users/User.php`
-
-##### Previously deprecated class properties that have been removed
-
-+ `LifterLMS->person` (generally accessed via `LLMS()->person`).
-+ `LLMS_Analytics_Widget->date_end`
-+ `LLMS_Analytics_Widget->date_start`
-+ `LLMS_Analytics_Widget->output`
-+ `LLMS_Certificate->enabled`
-+ `LLMS_Course_Data->$course`
-+ `LLMS_Course_Data->$course_id`
-
-##### Previously deprecated class methods that have been removed:
-
-+ `LLMS_Admin_Table::queue_export()`
-+ `LLMS_AJAX::get_achievements()`
-+ `LLMS_AJAX::get_all_posts()`
-+ `LLMS_AJAX::get_associated_lessons()`
-+ `LLMS_AJAX::get_certificates()`
-+ `LLMS_AJAX::get_courses()`
-+ `LLMS_AJAX::get_course_tracks()`
-+ `LLMS_AJAX::get_emails()`
-+ `LLMS_AJAX::get_enrolled_students()`
-+ `LLMS_AJAX::get_enrolled_students_ids()`
-+ `LLMS_AJAX::get_lesson()`
-+ `LLMS_AJAX::get_lessons()`
-+ `LLMS_AJAX::get_lessons_alt()`
-+ `LLMS_AJAX::get_memberships()`
-+ `LLMS_AJAX::get_question()`
-+ `LLMS_AJAX::get_sections()`
-+ `LLMS_AJAX::get_sections_alt()`
-+ `LLMS_AJAX::get_students()`
-+ `LLMS_AJAX::update_syllabus()`
-+ `LLMS_Course::get_children_sections()`
-+ `LLMS_Course::get_children_lessons()`
-+ `LLMS_Course::get_author()`
-+ `LLMS_Course::get_author_id()`
-+ `LLMS_Course::get_author_name()`
-+ `LLMS_Course::get_sku()`
-+ `LLMS_Course::get_id()`
-+ `LLMS_Course::get_title()`
-+ `LLMS_Course::get_permalink()`
-+ `LLMS_Course::get_user_postmeta_data()`
-+ `LLMS_Course::get_user_postmetas_by_key()`
-+ `LLMS_Course::get_checkout_url()`
-+ `LLMS_Course::get_start_date()`
-+ `LLMS_Course::get_end_date()`
-+ `LLMS_Course::get_next_uncompleted_lesson()`
-+ `LLMS_Course::get_lesson_ids()`
-+ `LLMS_Course::get_syllabus_sections()`
-+ `LLMS_Course::get_short_description()`
-+ `LLMS_Course::get_syllabus()`
-+ `LLMS_Course::get_user_enroll_date()`
-+ `LLMS_Course::get_user_post_data()`
-+ `LLMS_Course::check_enrollment()`
-+ `LLMS_Course::is_user_enrolled()`
-+ `LLMS_Course::get_student_progress()`
-+ `LLMS_Course::get_membership_link()`
-+ `LLMS_Lesson::get_assigned_quiz()`
-+ `LLMS_Lesson::get_drip_days()`
-+ `LLMS_Lesson::mark_complete()`
-+ `LLMS_PlayNice::divi_fb_wc_product_tabs_after()`
-+ `LLMS_PlayNice::divi_fb_wc_product_tabs_before()`
-+ `LLMS_PlayNice::wc_is_account_page()`
-+ `LLMS_Post_Instructors::get_defaults()`
-+ `LLMS_Query::set_dashboard_pagination()`
-+ `LLMS_Query::add_query_vars()`
-+ `LLMS_Question::get_correct_option()`
-+ `LLMS_Question::get_correct_option_key()`
-+ `LLMS_Question::get_options()`
-+ `LLMS_Quiz::get_assoc_lesson()`
-+ `LLMS_Quiz::get_passing_percent()`
-+ `LLMS_Quiz::get_remaining_attempts_by_user()`
-+ `LLMS_Quiz::get_time_limit()`
-+ `LLMS_Quiz::get_total_allowed_attempts()`
-+ `LLMS_Quiz::get_total_attempts_by_user()`
-+ `LLMS_Quiz_Attempt::get_status()`
-+ `LLMS_Shortcode_My_Account::lost_password()`
-+ `LLMS_Section::count_children_lessons()`
-+ `LLMS_Section::delete()`
-+ `LLMS_Section::get_children_lessons()`
-+ `LLMS_Section::remove_all_child_lessons()`
-+ `LLMS_Section::remove_child_lesson()`
-+ `LLMS_Section::set_order()`
-+ `LLMS_Section::set_title()`
-+ `LLMS_Section::update()`
-+ `LLMS_Session::init()`
-+ `LLMS_Session::maybe_start_session()`
-+ `LLMS_Session::set_expiration_variant_time()`
-+ `LLMS_Session::set_expiration_time()`
-+ `LLMS_Session::use_php_sessions()`
-+ `LLMS_Student::delete_quiz_attempt()`
-+ `LLMS_Student::get_best_quiz_attempt()`
-+ `LLMS_Student::get_quiz_data()`
-+ `LLMS_Student::has_access()`
-+ `LLMS_Student_Dashboard::output_courses_content()`
-+ `LLMS_Student_Dashboard::output_dashboard_content()`
-+ `LLMS_Student_Dashboard::output_notifications_content()`
-+ `LLMS_Widget_Course_Progress::widget_contents()`
-
-##### Previously deprecated functions that have been removed
-
-+ `is_filtered()`
-+ `lifterlms_template_loop_view_link()`
-+ `llms_add_user_table_columns()`
-+ `llms_add_user_table_rows()`
-+ `llms_create_new_person()`
-+ `llms_get_question()`
-+ `llms_get_quiz()`
-+ `llms_set_user_password_rest_key()`
-+ `llms_setup_product_data()`
-+ `llms_setup_question_data()`
-+ `llms_verify_password_reset_key()`
-
-##### Previously deprecated hooks that have been removed
-
-+ Action: `lifterlms_before_memberships_loop_item_title`
-+ Action: `lifterlms_after_memberships_loop_item_title`
-+ Action: `lifterlms_after_memberships_loop_item_title`
-+ Filter: `lifterlms_completed_transaction_message`
-+ Filter: `lifterlms_is_filtered`
-+ Filter: `lifterlms_get_analytics_pages`
-+ Filter: `lifterlms_analytics_tabs_array`
-
-##### Previously deprecated shortcodes that have been removed
-
-+ `[courses]`
-+ `[lifterlms_user_statistics]`
-
-##### Previously deprecated templates that have been removed
-
-+ `templates/loop/view-link.php`
-
-##### Previously deprecated global variables that have been removed
-
-+ `$product`
-+ `$question`
-
-
-v3.41.1 - 2020-06-23
---------------------
-
-+ Apply restrictions to post content and excerpts during WP REST requests.
-
-
-v4.0.0-rc.1 - 2020-06-18
-------------------------
-
-View release notes at [https://make.lifterlms.com/2020/06/18/lifterlms-version-4-0-0-rc-1/](https://make.lifterlms.com/2020/06/18/lifterlms-version-4-0-0-rc-1/).
-
-
-v3.41.0 - 2020-06-12
---------------------
-
-##### Bug Fixes
-
-+ Fix issues encountered when a user role with the `edit_users` capability has multiple LifterLMS roles (like Student).
-
-##### LifterLMS 4.0.0 Release Preparation
-
-LifterLMS 4.0.0, our first major release in several years, is nearing the end of it's beta testing cycle. Many unused legacy functions, classes, and files are being removed in version 4.0.0 and well as many functions, classes, and files that were previously deprecated.
-
-The following is a list of items that have not been previously deprecated but will be removed from LifterLMS 4.0.0.
-
-For full details on the release, information on beta testing, and more, see our [blog post on the release](https://make.lifterlms.com/2020/06/01/preparing-for-lifterlms-4-0-0/).
-
-##### Deprecations
-
-The WP Session Manager plugin / library that is bundled into the LifterLMS core code base is deprecated from our code base and is being fully removed in favor of an internal session manager.
-
-The bundled Javascript Boostrap 3 modules, "collapse" and "transition" are deprecated from our codebase and are being removed.
-
-The following CSS classes are deprecated and will be removed:
-
-+ `templates/global/form-login.php`: The `col-1` class from the `div.llms-person-login-form-wrapper` element will be removed.
-+ `templates/global/form-registration.php`: : The `col-2` class from the `div.llms-new-person-form-wrapper` element will be removed.
-
-The following classes are deprecated:
-
-+ `LLMS_Number`: `includes/class.llms.number.php`
-+ `LLMS_Person`: `includes/class.llms.person.php`
-+ `LLMS_Table_Questions`: `includes/admin/reporting/tables/llms.table.questions.php`
-
-The following class methods are deprecated:
-
-+ `LLMS_PlayNice::divi_fb_wc_product_tabs_after()`
-+ `LLMS_PlayNice::divi_fb_wc_product_tabs_before()`
-+ `LLMS_Question::get_correct_option()`
-+ `LLMS_Question::get_correct_option_key()`
-+ `LLMS_Quiz::get_passing_percent()`, use `LLMS_Quiz::get( 'passing_percent' )` instead.
-+ `LLMS_Quiz::get_assoc_lesson()`, use `LLMS_Quiz::get( 'lesson_id' )` instead.
-+ `LLMS_Session::init()`
-+ `LLMS_Session::maybe_start_session()`
-+ `LLMS_Session::set_expiration_variant_time()`
-+ `LLMS_Session::set_expiration_time()`
-+ `LLMS_Session::use_php_sessions()`
-
-The following class properties are deprecated:
-
-+ `LifterLMS->person` (generally accessed via `LLMS()->person`).
-
-The following functions are deprecated:
-
-+ `lifterlms_template_loop_view_link()`
-+ `llms_add_user_table_columns()`
-+ `llms_add_user_table_rows()`
-+ `llms_get_question()`
-+ `llms_get_quiz()`
-+ `llms_setup_product_data()`
-+ `llms_setup_question_data()`
-
-The following global variables are deprecated:
-
-+ `$product`
-+ `$question`
-
-The following action hooks are deprecated:
-
-+ `lifterlms_before_memberships_loop_item_title`
-+ `lifterlms_after_memberships_loop_item_title`
-+ `lifterlms_after_memberships_loop_item_title`
-
-The following template file is deprecated:
-
-+ `templates/loop/view-link.php`
-
-
-v4.0.0-beta.3 - 2020-06-10
---------------------------
-
-View beta release notes at [https://make.lifterlms.com/2020/06/10/lifterlms-version-4-0-0-beta-3/](https://make.lifterlms.com/2020/06/10/lifterlms-version-4-0-0-beta-3/).
-
-
-v3.40.0 - 2020-06-09
---------------------
-
-##### Updates
-
-+ Adds a 1-click installation connector for the MailHawk email delivery plugin.
-
-##### Bugfixes
-
-+ Fixed an issue encountered during checkout when using a coupon against an access plan with a free trial.
-
-##### Deprecations
-
-+ `LLMS_SendWP::do_remote_install()` will be converted to a protected method and should no longer be called directly.
-+ `LLMS_Abstract_Email_Provider::output_css()`
-
-##### Templates updated
-
-+ templates/checkout/form-gateways.php
-
-
-v4.0.0-beta.2 - 2020-06-04
---------------------------
-
-View beta release notes at [https://make.lifterlms.com/2020/06/04/lifterlms-version-4-0-0-beta-2/](https://make.lifterlms.com/2020/06/04/lifterlms-version-4-0-0-beta-2/).
-
-
-v4.0.0-beta.1 - 2020-06-01
---------------------------
-
-View beta release notes at [https://make.lifterlms.com/2020/06/01/lifterlms-version-4-0-0-beta-1/](https://make.lifterlms.com/2020/06/01/lifterlms-version-4-0-0-beta-1/).
-
-
-v3.39.0 - 2020-05-28
---------------------
-
-+ Student Welcome notifications and user registered engagements now fire when users are created via the REST POST requests to the `/students` endpoint.
-+ Bugfix: Error encountered when printing full-page certificates on certain themes.
-
-##### LifterLMS REST 1.0.0-beta.12
-
-+ Feature: Added the ability to filter student and instructor collection list requests by various user information fields.
-+ Fix: Prevent infinite loops encountered when invalid API keys are utilized.
-+ Fix: Add an action used to fire LifterLMS core engagement and notification emails
-
-
-v3.38.2 - 2020-05-19
---------------------
-
-+ Added a default question type ("choice") to prevent malformed questions from being inadvertently stored in the database.
-+ When retrieving question data from the database, automatically fall back to the default question type value if no question type is saved.
-
-
-v3.38.1 - 2020-05-11
---------------------
-
-+ Update: Added methods for retrieving a list of posts associated with a membership.
-+ Bug fix: Fixed an issue causing certificate backgrounds to be cropped or cut in certain circumstances.
-+ Bug fix: Fixed an issue generating certificate downloads on servers where `mime_content_type()` does not exist.
-+ Bug fix: Fixed an issue which caused bbPress course forum restrictions to stop working.
-
-
-v3.38.0 - 2020-04-29
---------------------
-
-##### Updates
-
-+ The output of course restriction errors which may prevent enrollment is now displayed in it's own template in favor of the logic being included in the `product/pricing-table.php` template.
-+ The course progress bar shortcode will now only display the progress bar to enrolled users. An additional option has been added to the shortcode to allow showing a 0% progress bar to non-enrolled users. [Read more](https://lifterlms.com/docs/shortcodes/#lifterlms_course_progress).
-+ The "Course Progress" widget now has an option to optionally display the progress bar to non-enrolled users. By default it will display only to enrolled students.
-+ Updates LifterLMS Blocks to version 1.9.0
-
-##### Bug fixes
-
-+ Fixed an issue causing free access plans to bypass course enrollment restrictions like capacity and enrollment time periods.
-+ Fixed an issue causing custom checkout success redirects to fail when using gateways that require a payment confirmation step. This fixes an issue in the LifterLMS PayPal payment gateway.
-+ Fixed an issue causing deprecation theme-compatibility related deprecation notices to be incorrectly thrown.
-+ Fixed spelling error in variable passed to the `product/pricing-table.php` template. The misspelled variable is still being passed to the variable for backwards compatibility.
-+ Updated the way notification background processors are dispatched. This fixes an issue in the LifterLMS Twilio add-on.
-
-##### Deprecations
-
-+ `LLMS_Notifications::dispatch_processors()` is deprecated in favor of async dispatching via `LLMS_Notifications::schedule_processors_dispatch()`.
-
-##### Templates Updated
-
-+ templates/product/pricing-table.php
-
-##### LifterLMS Blocks
-
-+ Update: Improved script dependencies definitions.
-+ Update: Updated asset paths for consistency with other LifterLMS projects.
-+ Update: Updated various WP Core references that have been deprecated (maintains backwards compatibility).
-+ Update: The Lesson Progression block is no longer rendered server-side in the block editor (minor performance improvement).
-+ Update: Converted the course progress block into a dynamic block. Fixes an issue allowing the progress block to be visible to non-enrolled students.
-+ Update: Added a filter on the output of the Pricing Table block: `llms_blocks_render_pricing_table_block`.
-+ Bug fix: Fixed an issue encountered when using the WP Core "Table" block.
-+ Bug fix: Fixed a few areas where `class` was being used instead of `className` to define CSS classes on elements in the block editor.
-+ Bug fix: Fixed a user-experience issues encountered on the Course Information block when all possible information is disabled.
-+ Bug fix: Fixed an issue causing visibility attributes to render on blocks that don't support them.
-+ Bug fix: Fixed an issue preventing 3rd party blocks from modifying default block visibility settings.
-+ Bug fix: Fixed a spelling error visible inside the block editor.
-+ Bug fix: Fixed an issue causing the "Course Progress" block to be shown to non-enrolled students and visitors.
-+ Bug fix: Removed redundant CSS from frontend.
-+ Bug fix: Stop outputting editor CSS on the frontend.
-+ Bug fix: Dynamic blocks with no content to render will now only output their empty render messages inside the block editor, not on the frontend.
-+ Changes to the Classic Editor Block:
- + The classic editor block will no longer show block visibility settings because it is impossible to use those settings to filter the block on the frontend.
- + In order to apply visibility settings to the classic editor block, place the Classic Editor within a "Group" block and apply visibility settings to the Group.
-
-
-v3.37.19 - 2020-04-20
----------------------
-
-##### Updates
-
-+ Added a new debugging tool to clear pending batches created by background processors.
-+ Added a new method `LLMS_Abstract_Notification_View::get_object()` which can be used by notification views to override the loading of the post (or object) which triggered the notification.
-
-##### Bug Fixes
-
-+ Added localization to strings on the coupon admin screen. Thanks [parfilov](https://github.com/parfilov)!
-+ Fixed issue encountered in metaboxes when the `$post` global variable is not set.
-
-
-v3.37.18 - 2020-04-14
----------------------
-
-+ Fix regression introduced in version 3.34.0 which prevented checkout success redirection to external domains.
-+ Resolved a conflict with LifterLMS, Divi, and WooCommerce encountered when using the Divi frontend pagebuilder on courses and memberships.
-+ Fixed issue causing localization issues when creating access plans, thanks [@mcguffin](https://github.com/mcguffin)!
-
-
-v3.37.17 - 2020-04-10
----------------------
-
-##### Updates
-
-+ Updated the lost password and password reset form handlers for improved error handling and extendability by other plugins.
-
-##### Bug Fixes
-
-+ Fixed a conflict with WooCommerce resulting in password reset issues on the WooCommerce account dashboard.
-+ Fixed an issue allowing voucher codes from deleted vouchers to still be redeemed.
-+ Fixed an issue with pagination on the courses tab of a users BuddyPress profile.
-+ Fixed a typo in the `post_status` query arg when retrieving access plans for a course or membership.
-
-##### Deprecations
-
-+ `LLMS_PlayNice::wc_is_account_page()` is no longer required and is deprecated with no replacement
-+ WP core `get_password_reset_key()` should be used in favor of `llms_set_user_password_rest_key()`.
-+ WP core `check_password_reset_key()` should be used in favor of `llms_verify_password_reset_key()`.
-
-
-v3.37.16 - 2020-03-31
----------------------
-
-+ Bugfix: Fix issue causing student dashboard notification view to work incorrectly.
-
-
-v3.37.15 - 2020-03-27
----------------------
-
-##### Security Notice
-
-**This releases fixes a security issue. Please upgrade immediately!**
-
-Props to [Omri Herscovici and Sagi Tzadik from Check Point Research](https://www.checkpoint.com/) who found and disclosed the vulnerability resolved in this release.
-
-##### Updates & Bug Fixes
-
-+ Excluded `page.*` events in order to keep the events table small.
-+ Fixed error encountered when errors encountered validating custom fields. Thanks to [@wenchen](https://github.com/wenchen)!
-+ Fixed issue causing course pagination issues in certain scenarios.
-
-##### LifterLMS REST API Version 1.0.0-beta.11
-
-+ Bugfix: Correctly store user `billing_postcode` meta data.
-+ Bugfix: Fixed issue preventing course.created (and other post.created) webhooks from firing.
-
-
-v3.37.14 - 2020-03-25
----------------------
-
-+ Update: Added the ability to view the PHP error log file (as defined by `ini_get( 'error_log' )` ) on the LifterLMS -> Status -> Logs page.
-+ Update: Added strict comparisons for various condition checks.
-+ Bugfix: Fixed an issue where users might be redirected to the wrong course following a course import at the conclusion of the setup wizard.
-+ Bugfix: Fixed issue with tracking event data being lost due to cookie size limitations.
-+ Bugfix: Fixed issue potentially encountered when checking user capabilities for certificates and achievements.
-+ Bugfix: Fixed an issue preventing additional instances of the JS `LLMS.Storage` class from being instantiated.
-
-
-v3.37.13 - 2020-03-10
----------------------
-
-+ Remove usage of internal functions marked as deprecated.
-
-
-v3.37.12 - 2020-03-10
----------------------
-
-##### Updates
-
-+ Tested up to WordPress Core version 5.4.
-+ Added support for post revisions for course, lesson, and membership post types.
-
-##### Developer updates
-
-+ Added strict comparisons for various condition checks.
-+ Added a new filter, `llms_builder_{$post_type}_force_delete` which allows control over whether a post is moved to the trash or immediately deleted when trashed via the course builder.
-
-##### Bugfixes
-
-+ Fixed the name of the "actions" column on the quiz reporting screen.
-+ Fixed PHP warnings resulting from functions used to exclude order notes from comment counts.
-+ Fixed issue causing order notes to be included in the count displayed on the admin comments list despite their exclusion from the table itself.
-+ Fixed PHP notice thrown on the WordPress menu editor interface encountered when student dashboard endpoints have been deleted or removed.
-+ Fixed issue causing quotes to be encoded in various email, achievement, and certificate fields.
-
-##### Deprecations
-
-The following have been deprecated with no replacements and will be removed in the next major update:
-
-+ `LLMS_Course_Factory::get_course()`
-+ `LLMS_Course_Factory::get_lesson()`
-+ `LLMS_Course_Factory::get_product()`
-+ `LLMS_Course_Factory::get_quiz()`
-+ `LLMS_Course_Factory::get_question()`
-+ `LLMS_Course_Handler::get_users_not_enrolled()`
-
-
-v3.37.11 - 2020-03-03
----------------------
-
-##### Updates
-
-+ Resolved a conflict with the "Starter Templates" plugin which made it impossible to edit quizzes while the plugin was enabled.
-
-##### Bugfixes
-
-+ Fixed an issue causing lesson post authors to be "lost" when adding an existing lesson to a course.
-+ Fixed an issue causing php notices to be generated during existing lesson addition on the course builder.
-+ Fixed an issue causing course bbPress forums to be lost when editing that course using the "Quick Edit" function from the courses table.
-
-##### LifterLMS REST v1.0.0-beta.10
-
-+ Added text domain to i18n functions that were missing the domain.
-+ Added a "trigger" parameter to enrollment-related endpoints.
-+ Added `llms_rest_enrollments_item_schema`, `llms_rest_prepare_enrollment_object_response`, `llms_rest_enrollment_links` filter hooks.
-+ Fixed setting roles instead of appending them when updating user, thanks [@pondermatic](https://github.com/pondermatic)!
-+ Fixed return when the enrollment to be deleted doesn't exist, returns `204` instead of `404`.
-+ Fixed 'context' query parameter schema, thanks [@pondermatic](https://github.com/pondermatic)!
-
-
-v3.37.10 - 2020-02-19
----------------------
-
-+ Update: Exclude the privacy policy page from the sitewide restriction.
-+ Update: Added filter `llms_enable_open_registration`.
-+ Fix: Notices are printed on pages configured as a membership restriction redirect page.
-+ Fix: Do not apply membership restrictions on the page set as membership's restriction redirect page.
-+ Fix: Added flag to print notices when landing on the redirected page.
-
-
-v3.37.9 - 2020-02-11
---------------------
-
-+ Updated CSS classes used in privacy policy text suggestions per changes in WordPress core 5.3. Thanks [@garretthyder](https://github.com/garretthyder)!
-+ Added privacy exported group descriptions. Thanks [@garretthyder](https://github.com/garretthyder)!
-+ Added filters `llms_user_enrollment_allowed_post_types` & `llms_user_enrollment_status_allowed_post_types` which allow 3rd parties to enroll users into additional post types via core enrollment methods.
-+ Added option for admin settings fields to show an asterisk for required fields.
-+ Added option for integration plugins can now add automatically generated "Settings" link to the plugins screen.
-+ Bugfix: Fixed an IE compatibility issue related to usage of `Object.assign()`.
-
-
-v3.37.8 - 2020-01-21
---------------------
-
-+ Fix: Student quiz attempts are now automatically deleted when a quiz is deleted.
-+ Fix: "Orphaned" quizzes (those with no parent course and/or lesson) can be deleted from the Quiz reporting table.
-+ Fix: Quiz IDs on the quiz reporting screen now link to the quiz within the course builder. If the quiz is an "orphan" there will be no link.
-
-
-v3.38.0-beta.2 - 2019-12-19
----------------------------
-
-+ Update LifterLMS Blocks to v1.7.3.
-
-
-v3.38.0-beta.1 - 2019-12-13
----------------------------
-
-##### Form Management Improvements
-
-+ Forms (registration, checkout, account) are now managed via a block editor interface.
-+ Customize field labels, description, and placeholders in a simple WYSIWYG interface.
-+ Mark fields as required with a toggle.
-+ Reorder fields with drag and drop.
-+ Customize layout using block editor columns.
-+ Use LifterLMS block-level visibility to conditionally display fields based on enrollment or logged in status.
-
-##### Form Localization
-
-+ Added default country and state/region lists (see the "languages" directory).
-+ Country and state forms are now searchable dropdowns that adjusted based on the currently selected country.
-+ Each country's locale information (such as what a "post code" is called and whether or not the country has states or post codes) will update automatically based on the selected country.
-+ Enqueue select2 on account and checkout pages for searchable dropdowns for country & state.
-
-##### Updates
-
-+ New shortcode `[user]` which is used to output user information in a merge code interface.
-+ Improved form field generation via `LLMS_Form_Field` class.
-+ LifterLMS Settings: renamed "User Information Options" to "User Privacy Options".
-+ Reorganized open registration setting.
-+ Use `LLMS.wait_for()` for dependency waiting.
-+ Moved checkout template variable declarations to the checkout shortcode controller.
-+ Removed field display settings in favor of form customization using the form editors.
-+ Organized function files. Some functions have been moved.
-+ Function `llms_get_minimum_password_strength_name()` now accepts a parameter to retrieve strength name by key.
-+ Use `LLMS.wait_for()` for dependency waiting.
-
-##### LifterLMS Blocks v1.6.0
-
-+ Feature: Added form field blocks for use on the Forms manager.
-+ Feature: Add logic for `logged_in` and `logged_out` block visibility options.
-+ Update: Added isDisabled property to Search component.
-+ Update: Adjusted priority of `render_block` filter to 20.
-+ Bug fix: Import `InspectorControls` from `wp.blockEditor` in favor of deprecated `wp.editor`
-+ Bug fix: Automatically store course/membership instructor with `post_author` data when the post is created.
-+ Bug fix: Pass style rules as camelCase.
-
-##### Removed unused Javascript assets
-
-+ Remove unused bootstrap transition and collapse scripts.
-+ Remove topModal vendor dependency.
-+ Remove password strength inline enqueues.
-
-##### Bug fixes
-
-+ Only attempt to add a nonce to the datastore when a nonce exists in the settings object.
-
-##### Deprecations
-
-+ Deprecated `LLMS_Person_Handler::register()` method, use `llms_register_user()` instead.
-+ Deprecated `llms_get_minimum_password_strength()` with no replacement.
-
-##### Template Updates
-
-+ templates/checkout/form-checkout.php
-+ templates/checkout/form-gateways.php
-+ templates/global/form-registration.php
-
-v3.37.7 - 2020-01-08
---------------------
-
-+ Fix error resulting from undefined default value.
-+ Fix PHP 7.4 deprecation notice.
-
-
-v3.37.6 - 2019-12-12
---------------------
-
-+ New transaction creation date is now specified using `llms_current_time()`.
-+ Use the last successful transaction time to calculate from when the previously stored next payment date is in the future.
-+ Fixed an issue causing transaction post titles to be recorded with missing data due to invalid `strftime()` placeholders.
-
-
-v3.37.5 - 2019-12-09
---------------------
-
-+ Update LifterLMS Blocks to v1.7.2: fixes a bug causing the block editor to encounter a fatal error when accessing custom post types that don't support custom fields.
-
-
-v3.37.4 - 2019-12-06
---------------------
-
-##### Bug Fixes
-
-+ Fixed a bug causing certificate _template_ exports to export the site's homepage instead of the certificate preview.
-+ When exporting a certificate template, use the `post_author` to determine what user to use for merge code data.
-+ Revert Accounts settings tab page id to "account".
-
-##### LifterLMS Blocks v1.7.1
-
-+ Feature: Add logic for `logged_in` and `logged_out` block visibility options.
-+ Update: Added `isDisabled` property to Search component.
-+ Update: Adjusted priority of `render_block` filter to 20.
-+ Update: Added filter, `llms_block_supports_visibility` to allow modification of the return of the check.
-+ Update: Disabled block visibility on registration & account forms to prevent a potentially confusing form creation experience.
-+ Update: Added block editor rendering for password type fields.
-+ Update: Perform post migrations on `current_screen` instead of `admin_enqueue_scripts`.
-+ Update: Update various dependencies to use updated gutenberg packages.
-+ Bug fix: Fixed a WordPress 5.3 issues with JSON data affecting the ability to save course/membership instructors.
-+ Bug fix: Import `InspectorControls` from `wp.blockEditor` in favor of deprecated `wp.editor`
-+ Bug fix: Automatically store course/membership instructor with `post_author` data when the post is created.
-+ Bug fix: Pass style rules as camelCase.
-+ Bug fix: Fixed an issue causing "No HTML Returned" to be displayed in place of the Lesson Progression block on free lessons when viewed by a logged-out user.
-
-
-v3.37.3 - 2019-12-03
---------------------
-
-+ Added an action `llms_certificate_generate_export` to allow modification of certificate exports before being stored on the server.
-+ Don't unslash uploaded file `tmp_name`, thanks [@pondermatic](https://github.com/pondermatic)!
-+ TwentyTwenty Theme Support: Hide site header and footer, and set a white body background in single certificates.
-+ Renamed setting field IDs to be unique for open/close wrapper fields on the engagements and account settings pages.
-+ Removed redundant functions defined in the `LLMS_Settings_Page` class to reduce code redundancy in account and engagement setting page classes.
-+ The `LLMS_Settings_Page` base class now automatically defines actions to save and output settings content.
-
-
-v3.37.2 - 2019-11-22
---------------------
-
-+ LifterLMS notices will now be displayed on pages defined as a Course or Membership sales page.
-+ TwentyTwenty Theme: Updated to use `background-color` property instead of `background` shorthand when adding custom elements to style.
-+ Added filter `llms_sessions_end_idle_cron_recurrence` to allow customization of the recurrence of the idle session cleanup cronjob.
-+ Added filter `llms_quiz_is_open` to allow customization of whether or not a quiz is available to a student.
-+ When adding an client-side tracking events to the always make sure the server-side verification nonce is always set on the storage object.
-+ The Course/Membership filter on the main students reporting screen now correctly limits post results based on instructor access.
-
-
-v3.37.1 - 2019-11-13
---------------------
-
-+ TwentyTwenty Theme: Fixed course information block misalignment.
-+ Fixed conflict with WooCommerce resulting from the movement of the deprecated LifterLMS function `is_filtered()`.
-
-
-v3.37.0 - 2019-11-11
---------------------
-
-##### Updates
-
-+ Tested and compatible with WordPress core 5.3.
-+ Add theme support for the TwentyTwenty core default theme.
-+ Improved security and data sanitization in with regards to the SendWP integration connector.
-
-##### LifterLMS Rest API 1.0.0-beta.8
-
-+ Added memberships controller, huge thanks to [@pondermatic](https://github.com/pondermatic)!
-+ Added new filters:
-
- + `llms_rest_lesson_filters_removed_for_response`
- + `llms_rest_course_item_schema`
- + `llms_rest_pre_insert_course`
- + `llms_rest_prepare_course_object_response`
- + `llms_rest_course_links`
-
-+ Improved validation when defining instructors for courses.
-+ Improved performance on post collection listing functions.
-+ Ensure that a course instructor is always set for courses.
-+ Fixed `sales_page_url` not returned in `edit` context.
-+ In `update_additional_object_fields()` method, use `WP_Error::$errors` in place of `WP_Error::has_errors()` to support WordPress version prior to 5.1.
-
-
-v3.36.5 - 2019-11-05
---------------------
-
-+ Add filter: `llms_user_caps_edit_others_posts_post_types` to allow 3rd parties to utilize core methods for determining if a user can manage another users LMS content on the admin panel.
-
-
-v3.36.4 - 2019-11-01
---------------------
-
-+ Fixes a conflict with CartFlows introduced by a Divi theme compatibility fix added in 3.36.3. Is WordPress complicated or what?
-
-
-v3.36.3 - 2019-10-24
---------------------
-
-##### Updates
-
-+ Added new `LLMS_Membership` class methods: `get_categories()`, `get_tags()` and `toArrayAfter()` methods. Thanks [@pondermatic](https://github.com/pondermatic)!
-
-##### Compatibility
-
-+ Fixed access plan description conflicts with the Classic Editor block. This also resolves compatibility issues with Elementor which uses a hidden TinyMCE instance.
-+ Changed `pre_get_posts` callback from `10` (default) to `15`. Fixes conflict with Divi (and possibly other themes) which prevented LifterLMS catalog settings from functioning properly.
-
-##### Bugfixes
-
-+ Added translation to error message encountered when non-members attempt to purchase a members-only access plan. Thanks [@mrosati84](https://github.com/mrosati84)!
-+ Fix return of `LLMS_Generator::set_generator()`.
-+ Fixed a typo causing invalid imports from returning the expected error. Thanks [@pondermatic](https://github.com/pondermatic)!
-+ Fixed issue preventing membership post type settings from saving properly due to incorrect sanitization filters.
-+ Fixed issue where `wp_list_pluck()` would run on non arrays.
-
-
-v3.36.2 - 2019-10-01
---------------------
-
-##### Updates
-
-+ Tested to WordPress 5.3.0-beta.2
-+ Upgrade UI on student course reporting screens.
-+ Added logic to physically remove from the membership level and remove enrollments data on related products, when deleting a membership enrollment.
-+ Lesson metabox "start" drip method made available only if the parent course has a start date set.
-
-##### Bugfixes
-
-+ Fixed JS error when client-side event tracking settings aren't loaded, thanks [@wenchen](https://github.com/wenchen)!
-+ Fixed PHP warning resulting from drip the "Course Start" lesson drip settings when no course start date exists.
-+ Fixed fatal error encountered when reviewing an order placed with a payment gateway that's been deactivated.
-
-##### Files Updated
-
-+ assets/js/app/llms-tracking.js
-+ includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php
-+ includes/models/model.llms.lesson.php
-+ includes/models/model.llms.student.php
-+ lifterlms.php
-
-##### Templates Updated
-
-+ templates/admin/post-types/order-details.php
-+ templates/admin/reporting/tabs/students/courses-course.php
-
-
-v3.36.1 - 2019-09-24
---------------------
-
-##### Updates
-
-+ Include SendWP Connector in LifterLMS Engagement Settings.
-+ Removed usage of `WP_Error::has_errors()` to support WordPress version prior to 5.1.
-+ Improve performances when checking if an event is valid in `LLMS_Events->is_event_valid()`.
-+ Remove redundant check on `is_singular()` and `is_post_type_archive()` in `LLMS_Events->should_track_client_events()`.
-
-##### Bugfixes
-
-+ Fixed a compatibility issue with FitVids.js causing excess white space displayed around videos when using the library, WP plugin, or themes that utilize the library.
-+ Fixed an issue allowing recurring charges to continue processing after the order or customer had been deleted from the site.
-+ Fixed issue causing Membership Restriction settings from properly saving.
-+ Fixed issue that allowed instructors to see all quizzes on a site when the instructor had either no courses or only empty courses (courses with no lessons).
-+ Fixed "Last Seen" column displaying wrong date when the student last login date was saved as timestamp.
-+ Fixed an issue causing popover notifications to be skipped (never displayed) as a result of redirects.
-
-
-v3.36.0 - 2019-09-16
---------------------
-
-##### User Interaction event and session Tracking
-
-+ Added user interaction tracking for the following events:
-
- + User sign in and out.
- + Page load and exit (for LMS content)
- + Page focus and blur (for LMS content)
- + And more to come
-
-+ Interaction events are grouped into sessions automatically. A session is "closed" after 30 minutes of inactivity or a log-out event.
-+ Added "Last Seen" student reporting column which reports the last recorded activity for the student.
-
-##### Enhancements
-
-+ Automatically hydrate when calling LLMS_Abstract_Database_Store::to_array().
-+ Added CSS to make course and lesson video embeds automatically responsive.
-
-##### Bug Fixes
-
-+ Correctly pass the `$remember` variable when using `llms_set_person_auth_cookie()`.
-+ Fixed undefined index error when retrieving an unset value from an unsaved database model.
-+ Fix issue causing quotes to be encoded in shortcodes used in course and membership restriction message settings fields.
-+ Fix issue preventing manual updates of order dates (next payment, trial expiration, and access expiration) from being saved properly.
-
-
-v3.35.2 - 2019-09-06
---------------------
-
-+ When sanitizing settings, don't strip tags on editor and textarea fields that allow HTML.
-+ Added JS filter `llms_lesson_rerender_change_events` to lesson editor view re-render change events.
-
-
-v3.35.1 - 2019-09-04
---------------------
-
-+ Fix instances of improper input sanitization and handling.
-+ Include scripts, styles, and images for reporting charts and datepickers
-
-
-v3.35.0 - 2019-09-04
---------------------
-
-##### Security Notice
-
-+ Fixed a security vulnerability disclosed by the WordPress plugin review team. Please upgrade immediately!
-
-##### Updates
-
-+ Explicitly setting css and js file versions for various static assets..
-+ Added data sanitization methods in various form handlers.
-+ Added nonce verification to various form handlers.
-
-##### Bug fixes
-
-+ Fixed some translation strings that had literal variables instead of placeholders.
-+ Fixed undefined index error encountered when attempting to email a voucher export.
-+ Fixed undefined index error when PHP file upload errors are encountered during a course import.
-
-##### Deprecations
-
-The following unused classes have been marked as deprecated and will be removed from LifterLMS in the next major release.
-
-+ LLMS_Analytics_Memberships
-+ LLMS_Analytics_Courses
-+ LLMS_Analytics_Sales
-+ LLMS_Meta_Box_Expiration
-+ LLMS_Meta_Box_Video
-
-##### Template Updates
-
-+ [admin/reporting/tabs/courses/overview.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/courses/overview.php)
-+ [admin/reporting/tabs/memberships/overview.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/memberships/overview.php)
-+ [admin/reporting/tabs/quizzes/attempts.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/quizzes/attempts.php)
-+ [admin/reporting/tabs/quizzes/overview.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/quizzes/overview.php)
-+ [admin/reporting/tabs/students/courses-course.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/students/courses-course.php)
-+ [admin/reporting/tabs/students/courses.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/students/courses.php)
-+ [loop/featured-image.php](https://github.com/gocodebox/lifterlms/blob/master/templates/loop/featured-image.php)
-+ [myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/view-order.php)
-+ [quiz/results.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/results.php)
-+ [single-certificate.php](https://github.com/gocodebox/lifterlms/blob/master/templates/single-certificate.php)
-+ [single-no-access.php](https://github.com/gocodebox/lifterlms/blob/master/templates/single-no-access.php)
-+ [taxonomy-course_cat.php](https://github.com/gocodebox/lifterlms/blob/master/templates/taxonomy-course_cat.php)
-+ [taxonomy-course_difficulty.php](https://github.com/gocodebox/lifterlms/blob/master/templates/taxonomy-course_difficulty.php)
-+ [taxonomy-course_tag.php](https://github.com/gocodebox/lifterlms/blob/master/templates/taxonomy-course_tag.php)
-+ [taxonomy-course_track.php](https://github.com/gocodebox/lifterlms/blob/master/templates/taxonomy-course_track.php)
-+ [taxonomy-membership_cat.php](https://github.com/gocodebox/lifterlms/blob/master/templates/taxonomy-membership_cat.php)
-+ [taxonomy-membership_tag.php](https://github.com/gocodebox/lifterlms/blob/master/templates/taxonomy-membership_tag.php)
-
-
-v3.34.5 - 2019-08-29
---------------------
-
-+ Fixed logic issues preventing pending orders from being completed.
-
-##### Templates Changed
-
-+ [checkout/form-confirm-payment.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-confirm-payment.php)
-
-v3.34.4 - 2019-08-27
---------------------
-
-+ Add a new admin settings field type, "keyval", used for displaying custom html alongside a setting.
-+ Added filter `llms_order_can_be_confirmed`.
-+ Always bind JS for the login form handler on checkout and registration screens.
-
-##### Templates Changed
-
-+ [checkout/form-confirm-payment.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-confirm-payment.php)
-
-##### LifterLMS REST API v1.0.0-beta.6
-
-+ Fix issue causing certain webhooks to not trigger as a result of action load order.
-+ Change "access_plans" to "Access Plans" for better human reading.
-
-
-v3.34.3 - 2019-08-22
---------------------
-
-+ During payment gateway order completion, use `llms_redirect_and_exit()` instead of `wp_redirect()` and `exit()`.
-
-##### LifterLMS REST API v1.0.0-beta.5
-
-+ Load all required files and functions when authentication is triggered.
-+ Access `$_SERVER` variables via `filter_var` instead of `llms_filter_input` to work around PHP bug https://bugs.php.net/bug.php?id=49184.
-
-
-v3.34.2 - 2019-08-21
---------------------
-
-##### LifterLMS REST API v1.0.0-beta.4
-
-+ Load authentication handlers as early as possible. Fixes conflicts with numerous plugins which load user information earlier than expected by the WordPress core.
-+ Harden permissions associated with viewing student enrollment information.
-+ Returns a 400 Bad Request when invalid dates are supplied.
-+ Student Enrollment objects return student and post id's as integers instead of strings.
-+ Fixed references to an undefined function.
-
-
-v3.34.1 - 2019-08-19
---------------------
-
-+ Update LifterLMS REST to v1.0.0-beta.3
-
-##### Interface and Experience improvements during API Key creation
-
-+ Better expose that API Keys are never shown again after the initial creation.
-+ Allow downloading of API Credentials as a `.txt` file.
-+ Add `required` properties to required fields.
-
-##### Updates
-
-+ Added the ability to CRUD webhooks via the REST API.
-+ Conditionally throw `_doing_it_wrong` on server controller stubs.
-+ Improve performance by returning early when errors are encountered for various methods.
-+ Utilizes a new custom property `show_in_llms_rest` to determine if taxonomies should be displayed in the LifterLMS REST API.
-+ On the webhooks table the "Delivery URL" is trimmed to 40 characters to improve table readability.
-
-##### Bug fixes
-
-+ Fixed a formatting error when creating webhooks with the default auto-generated webhook name.
-+ On the webhooks table a translatable string is output for the status instead of the database value.
-+ Fix an issue causing the "Last" page pagination link to display for lists with 0 possible results.
-+ Don't output the "Last" page pagination link on the last page.
-
-
-
-v3.34.0 - 2019-08-15
---------------------
-
-##### LifterLMS REST API v1.0.0-beta.1
-
-+ A robust REST API is now included in the LifterLMS core.
-+ Create API Keys to consume and manage LifterLMS resources and students from external applications.
-+ Create webhooks to pass LifterLMS resource data to external applications (like Zapier!).
-+ The full API specification can be found at [https://gocodebox.github.io/lifterlms-rest/](https://gocodebox.github.io/lifterlms-rest/).
-
-##### Student management capabilities
-
-+ Explicit capabilities have been added to determine which users can create, view, update, and delete students.
-+ Admins and LMS Managers have all student management capabilities.
-+ Instructors and instructors assistants are granted limited view capabilities allowing them to only view students enrolled in their own courses/memberships.
-+ Added the `list_users` capability to the "Instructor" role, allowing instructor's to better view and manage their assistant instructors.
-+ The new capabilities are: `create_students`, `view_students`, `view_others_students`, `edit_students`, `edit_others_students`, `delete_students`, & `delete_others_students`.
-
-##### Updates
-
-+ Added new actions to help differentiate enrollment creation and update events.
-+ Added methods and logic for managing user management of other users.
-+ Added a filter `llms_table_get_table_classes` to LifterLMS admin tables which allows customization of the CSS classes applied to the ` ` elements. Thanks [@pondermatic](https://github.com/pondermatic)!
-+ Added a filter `llms_install_get_schema` to the database schema to allow 3rd parties to run table installations alongside the core.
-+ Added the ability to pull "raw" (unfiltered) data from the database via classes extending the `LLMS_Post_Model` abstract.
-+ Added a `bulk_set()` method to the `LLMS_Post_Model` abstract allowing the updating of multiple properties in one command.
-+ Added `comment_status`, `ping_status`, `date_gmt`, `modified_gmt`, `menu_order`, `post_password` as gettable\settable post properties via the `LLMS_Post_Model` abstract.
-+ Links on reporting tables are now the proper color.
-+ The `editable_roles` filter which determines which roles can manage which other roles is now always loaded (instead of being loaded only on the admin panel).
-+ Updated LifterLMS Blocks to 1.5.2
-
-##### Bug Fixes
-
-+ Fixed an issue preventing the `user_url` property from being retrieved by the `get()` method of the `LLMS_Abstract_User_Data` class.
-+ Fixed an issue causing the `LLMS_Instructors::get_assistants()` method to return assistants for the currently logged in user instead of the instructor of the instantiated object.
-+ Fixed an issue which would allow LMS Managers to edit and delete site administrators.
-
-##### Deprecations
-
-**The following functions and methods have been marked as deprecated and will be removed from LifterLMS with the next major release.**
-
-+ LLMS_Course::get_children_sections() use LLMS_Course::get_sections( 'posts' )" instead
-+ LLMS_Course::get_children_lessons() use LLMS_Course::get_lessons( 'posts' )" instead
-+ LLMS_Course::get_author()
-+ LLMS_Course::get_author_id() use LLMS_Course::get( "author" ) instead
-+ LLMS_Course::get_author_name()
-+ LLMS_Course::get_sku() use LLMS_Course::get( "sku" ) instead
-+ LLMS_Course::get_id() use LLMS_Course::get( "id" ) instead
-+ LLMS_Course::get_title() use get_the_title() instead
-+ LLMS_Course::get_permalink() use get_permalink() instead
-+ LLMS_Course::get_user_postmeta_data()
-+ LLMS_Course::get_user_postmetas_by_key()
-+ LLMS_Course::get_checkout_url()
-+ LLMS_Course::get_start_date() use LLMS_Course::get_date( "start_date" ) instead
-+ LLMS_Course::get_end_date() use LLMS_Course::get_date( "end_date" ) instead
-+ LLMS_Course::get_next_uncompleted_lesson()
-+ LLMS_Course::get_lesson_ids() use LLMS_Course::get_lessons( "ids" ) instead
-+ LLMS_Course::get_syllabus_sections() use LLMS_Course::get_sections() instead
-+ LLMS_Course::get_short_description() use LLMS_Course::get( "excerpt" ) instead
-+ LLMS_Course::get_syllabus() use LLMS_Course::get_sections() instead
-+ LLMS_Course::get_user_enroll_date()
-+ LLMS_Course::get_user_post_data()
-+ LLMS_Course::check_enrollment()
-+ LLMS_Course::is_user_enrolled() use llms_is_user_enrolled() instead
-+ LLMS_Course::get_student_progress() use LLMS_Student::get_progress() instead
-+ LLMS_Course::get_membership_link()
-
-
-v3.33.2 - 2019-06-26
---------------------
-
-+ It is now possible to send test copies of the "Student Welcome" email to yourself.
-+ Improved information logged when an error is encountered during an email send.
-+ Add backwards compatibility for legacy add-on integrations priority loading method.
-+ Fixed undefined index notice when viewing log files on the admin status screen.
-
-
-v3.33.1 - 2019-06-25
---------------------
-
-##### Updates
-
-+ Added method to retrieve the load priority of integrations.
-+ The capabilities used to determine if uses can clone and export courses now check `edit_course` instead of `edit_post`.
-
-##### Bug Fixes
-
-+ Fixed an issue which would cause the "Net Sales" line to sometimes display as a bar on the sales revenue reporting chart.
-+ Fixed an issue causing a PHP notice to be logged when viewing the sales reporting screen.
-+ Fixed an issue causing backslashes to be added before quotation marks in access plan descriptions.
-+ Integration classes are now loaded in the order defined by the integration class.
-+ Fixed an issue causing a PHP error when viewing the admin logs screen when no logs exist.
-
-
-v3.33.0 - 2019-05-21
---------------------
-
-##### Updates
-
-+ Added the ability for site administrators to delete (completely remove) enrollment records from the database.
-+ Catalogs sorted by Order (`menu_order`) now have an additional sort (by post title) to improve ordering consistency for items with the same order, thanks [@pondermatic](https://github.com/pondermatic)!
-+ Hooks in the dashboard order review template now pass the `LLMS_Order`.
-
-##### LifterLMS Blocks
-
-+ Updated to version 1.5.1
-+ All blocks are now registered only for post types where they can actually be used.
-+ Only register block visibility settings on static blocks. Fixes an issue causing core (or 3rd party) dynamic blocks from being managed within the block editor.
-
-##### Bug Fixes
-
-+ If an enrolled student accesses checkout for a course/membership they're already enrolled in they will be shown a message stating as much.
-+ Removed a redundant check for the existence of an order on the dashboard order review template.
-+ When an order is deleted, student enrollment records for that order will be removed. This fixes an issue causing admins to not be able to manage the enrollment status of a student enrolled via a deleted order.
-+ Fix issue causing errors when using the `[lifterlms_lesson_mark_complete]` shortcode on course post types.
-+ Fixed an issue causing quiz questions to generate publicly accessible permalinks which could be indexed by search engines.
-
-##### Templates Changed
-
-+ [course/complete-lesson-link.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/complete-lesson-link.php)
-+ [templates/myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/master/templates/templates/myaccount/view-order.php)
-
-
-v3.32.0 - 2019-05-13
---------------------
-
-##### Updates
-
-+ Added Membership reporting
-+ Added the ability to restrict coupons to courses and memberships which are in draft or scheduled status.
-+ When recurring payments are disabled, output a "Staging" bubble on the "Orders" menu item.
-+ Recurring recharges now add order notes and trigger actions when gateway or recurring payment status errors are encountered.
-+ When managing recurring payment status through the warning notice, stay on the same page and clear nonces instead of redirecting to the LifterLMS Settings screen.
-+ Updated the Action Scheduler library to the latest version (2.2.5)
-+ Exposed the Action Scheduler's scheduled actions interface as a tab on the LifterLMS Status page.
-
-##### LifterLMS Blocks
-
-+ Updated to version 1.4.1.
-+ Fixed issue causing asset paths to have invalid double slashes.
-+ Fixed issue causing frontend css assets to look for an unresolvable dependency.
-
-##### Bug Fixes
-
-+ Fixed an issue allowing instructors to view a list of students from courses and memberships they don't have access to.
-+ WooCommerce compatibility filters added in 3.31.0 are now scheduled at `init` instead of `plugins_loaded`, resolves conflicts with several WooCommerce add-ons which utilize core WC functions before LifterLMS functions are loaded.
-
-
-v3.31.0 - 2019-05-06
---------------------
-
-##### Updates
-
-+ Tested to WordPress 5.2
-+ Adds explicit support for the twentynineteen default theme.
-+ The main students reporting table can now be filtered to show only students enrolled in a specific course or membership.
-+ Resolve conflict with WooCommerce (3.6 and later) resulting in 404s on the dashboard endpoints "lost password", "order history", and "edit account".
-+ Adds a dynamic filter (`llms_notification_view{$trigger_id}_basic_options`) to basic (pop-over) notifications to allow configuration of their settings.
-+ The filter `llms_plan_get_checkout_url` now passes a 3rd parameter: `$check_availability`
-+ Improves `LLMS_Course_Data` and `LLMS_Quiz_Data` classes by adding shared functionality to a shared abstract, `LLMS_Abstract_Post_Data`
-+ Changed access on class methods in `LLMS_Shortcode_Courses` from private to protected, thanks [@andrewvaughan](https://github.com/andrewvaughan)!
-
-##### Bug fixes
-
-+ Treats `post_excerpt` data as HTML instead of plain text. Fixes an issue resulting in HTML tags being stripped from lesson excerpts when duplicating a lesson in the course builder or importing lessons via the course importer.
-+ Fix an issue allowing access plan sales prices to be set as negative values.
-
-##### LifterLMS Blocks
-
-+ Updated to LifterLMS Blocks 1.4.0.
-+ Adds an "unmigration" utility to LifterLMS -> Status -> Tools & Utilities which can be used to remove LifterLMS blocks from courses and lessons which were migrated to the block editor structure.
-+ This tool is only available when the Classic Editor plugin is installed and enabled and it will remove blocks from ALL courses and lessons regardless of whether or not the block editor is being utilized on that post.
-
-##### Deprecations
-
-+ `LLMS_Query::add_query_vars()` use `LLMS_Query::set_query_vars()` instead.
-
-
-v3.30.3 - 2019-04-22
---------------------
-
-##### Updates
-
-+ Fixed typos and spelling errors in various strings.
-+ Corrected a typo in the `content-disposition` header used when exporting voucher CSVs, thanks [@pondermatic](https://github.com/pondermatic)!
-+ Improved the quiz attempt grading experience by automatically focusing the remarks field and only toggling the first answer if it's not visible, thanks [@eri-trabiccolo](https://github.com/eri-trabiccolo)!
-+ Removed commented out code on the Student Dashboard Notifications Tab template, thanks [@tnorthcutt](https://github.com/tnorthcutt)!
-
-##### Bug Fixes
-
-+ Renamed "descrpition" key to "description" found in the return of `LLMS_Instructor()->toArray()`.
-+ Fixed an issue causing slashes to be stripped from course content when cloning a course.
-+ Fixed an issue causing JS warnings to be thrown in the Javascript console on Course and Membership edit pages on the admin panel due to variables being defined too late, thanks [@eri-trabiccolo](https://github.com/eri-trabiccolo)!
-+ Fixed an undefined variable notice encountered when filtering quiz attempts on the quiz attempts reporting screen, thanks [@eri-trabiccolo](https://github.com/eri-trabiccolo)!
-+ Fixed an issue causing slashes to appear before quotation marks when saving remarks on a quiz attempt, thanks [@eri-trabiccolo](https://github.com/eri-trabiccolo)!
-+ [@pondermatic](https://github.com/pondermatic) fixed typos and misspellings in comment and docs in over 200 files and while that doesn't concern most users it's worthy of a mention.
-
-##### Deprecations
-
-The following unused classes have been marked as deprecated and will be removed from LifterLMS in the next major release.
-
-+ `LLMS\Users\User`
-+ `LLMS_Analytics_Page`
-+ `LLMS_Course_Basic`
-+ `LLMS_Lesson_Basic`
-+ `LLMS_Quiz_Legacy`
-
-##### Template Updates
-
-+ [templates/myaccount/my-notifications.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/my-notifications.php)
-
-
-v3.30.2 - 2019-04-09
---------------------
-
-+ Added new filter to allow 3rd parties to determine if a `LLMS_Post_Model` field should be added to the `custom` array when converting the post to an array.
-+ Added hooks and filters to the `LLMS_Generator` class to allow 3rd parties to easily generate content during course clone and import operations.
-+ Fixed an issue causing all available courses to display when the [lifterlms_courses] shortcode is used with the "mine" parameter and the current user viewing the shortcode is not enrolled in any courses.
-+ Fixed a PHP undefined variable warning present on the payment confirmation screen.
-
-##### Template Updates
-
-+ [templates/checkout/form-confirm-payment.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-confirm-payment.php)
-
-
-v3.30.1 - 2019-04-04
---------------------
-
-##### Updates
-
-+ Added handler to automatically resume pending (incomplete or abandoned) orders.
-+ Classes extending the `LLMS_Abstract_API_Handler` can now prevent a request body from being sent.
-+ Added dynamic filter `'llms_' . $action . '_more'` to allow customization of the "More" button text and url for student dashboard sections. Thanks @[pondermatic](https://github.com/pondermatic).
-+ Remove unused CSS code on the admin panel.
-
-##### Bug Fixes
-
-+ Fixed a bug preventing course imports as a result of action priority ordering issues.
-+ Function `llms_get_order_by_key()` correctly returns `null` instead of false when no order is found and will return an `int` instead of a numeric string when an order is found.
-+ Changed the method used to sort question choices to accommodate numeric choice markers. This fixes an issue in the Advanced Quizzes add-on causing reorder questions with 10+ choices to sort display in the incorrect order.
-+ Increased the specificity of LifterLMS element tooltip hovers. Resolves a conflict causing issues on the WooCommerce tax rate management screen.
-+ Fixed an issue causing certain fields in the Customizer from displaying a blue background as a result of very unspecific CSS rules, thanks [@Swapnildhanrale](https://github.com/Swapnildhanrale)!
-+ Fixed builder deep links to quizzes freezing due to dependencies not being available during initialization.
-+ Fixed builder issue causing duplicate copies of questions to be added when adding existing questions multiple times.
-
-##### Template Updates
-
-+ [templates/myaccount/dashboard-section.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/dashboard-section.php)
-
-
-v3.30.0 - 2019-03-21
---------------------
-
-##### Updates
-
-+ **Create custom thank you pages with new access plan checkout redirect options.**
-+ Added the ability to sort items on the membership auto enrollment table (drag and drop to sort and reorder).
-+ Improved the interface and interactions with the membership auto enrollment table settings.
-
-##### LifterLMS Blocks
-
-+ Updated LifterLMS Blocks to 1.3.8.
-+ Fixed an issue causing some installations to be unable to use certain blocks due to jQuery dependencies being declared improperly.
-
-##### Bug Fixes
-
-+ Fixed issue preventing courses with the same title from properly displayed on the membership automatic enrollment courses table on the admin panel.
-+ Fixed an issue preventing builder custom fields from being able to specify a custom sanitization callback.
-+ Fixed an issue preventing builder custom fields from being able to properly save and render multi-select data.
-
-##### Template Updates
-
-+ [templates/product/access-plan-restrictions.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/access-plan-restrictions.php)
-+ [templates/product/free-enroll-form.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/free-enroll-form.php)
-
-
-v3.29.4 - 2019-03-08
---------------------
-
-+ Fixed an issue preventing users with email addresses containing an apostrophe from being able to login.
-
-
-v3.29.3 - 2019-03-01
---------------------
-
-##### Bug Fixes
-
-+ Removed attempts to validate & save access plan data when the Classic Editor "post" form is submitted.
-+ Fix issue causing 1-click free-enrollment for logged in users to refresh the screen without actually performing an enrollment.
-
-##### Template Updates
-
-+ [product/free-enroll-form.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/free-enroll-form.php)
-
-
-v3.29.2 - 2019-02-28
---------------------
-
-+ Fix issue causing blank "period" values on access plans from being updated.
-+ Fix an issue preventing paid access plans from being switched to "Free".
-
-
-v3.29.1 - 2019-02-27
---------------------
-
-+ Automatically reorder access plans when a plan is deleted.
-+ Skip (don't create) empty plans passed to the access plan save method as a result of deleted access plans.
-
-
-v3.29.0 - 2019-02-27
---------------------
-
-##### Improved Access Plan Management
-
-+ Added a set of methods for creating access plans programmatically.
-+ Updated the Access Plan metabox on courses and lessons with improved data validation.
-+ When using the block editor, the "Pricing Table" block will automatically update when access plan changes are saved to the database (from LifterLMS Blocks 1.3.5).
-+ Access plans are now created and updated via AJAX requests, resolves a 5.0 editor issue causing duplicated access plans to be created.
-
-##### Student Management Improvements
-
-+ Added the ability for instructors and admins to mark lessons complete and incomplete for students via the student course reporting table.
-
-##### Admin Panel Settings and Reporting Design Changes
-
-+ Replaced LifterLMS logos and icons on the admin panel with our new logo LifterLMS Logo and Icons.
-+ Revamped the design and layout of settings and reporting screens.
-
-##### Checkout Improvements
-
-+ Updated checkout javascript to expose an error addition functions
-+ Abstracted the checkout form submission functionality into a callable function not directly tied to `$_POST` data
-+ Removed display order field from payment gateway settings in favor of using the gateway table sortable list
-
-##### Other Updates
-
-+ Removed code related to an incompatibility between Yoast SEO Premium and LifterLMS resulting from former access plan save methods.
-+ Reduced application logic in the `course/complete-lesson-link.php` template file by refactoring button display filters into functions.
-+ Added function for checking if request is a REST request
-+ Updated LifterLMS Blocks to version 1.3.7
-
-##### Bug Fixes
-
-+ Fixed an issue preventing "Pricing Table" blocks from displaying on the admin panel when the current user was enrolled in the course or no payment gateways were enabled on the site.
-+ Fixed the checkout nonce to have a unique ID & name
-+ Fixed an issue with deleted quizzes causing quiz notification's to throw fatal errors.
-+ Fixed an issue preventing notification timestamps from displaying on the notifications dashboard page.
-+ Fix an issue causing `GET` requests with no query string variables from causing issues via incorrect JSON encoding via the API Handler abstract.
-+ Fix an issue causing access plan sale end dates from using the default WordPress date format settings.
-+ `LLMS_Lesson::has_quiz()` will now properly return a boolean instead of the ID of the associated quiz (or 0 when none found)
-
-##### Template Updates
-
-+ [checkout/form-checkout.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-checkout.php)
-+ [course/complete-lesson-link.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/complete-lesson-link.php)
-+ [product/access-plan-pricing.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/access-plan-pricing.php)
-+ [notifications/basic.php](https://github.com/gocodebox/lifterlms/blob/master/templates/notifications/basic.php)
-
-##### Templates Removed
-
-Admin panel templates replaced with view files which cannot be overridden from a theme or custom plugin.
-
-+ `admin/post-types/product-access-plan.php`
-+ `admin/post-types/product.php`
-
-
-v3.28.3 - 2019-02-14
---------------------
-
-+ ❤❤❤ Happy Valentines Day or whatever ❤❤❤
-+ Tested to WordPress 5.1
-+ Fixed an issue causing JSON data saved by 3rd party plugins in course or lesson postmeta fields to be not duplicate properly during course duplications and imports.
-
-
-v3.28.2 - 2019-02-11
---------------------
-
-##### Updates
-
-+ Updated default country list to remove non-existent countries and resolve capitalization issues, thanks [nrherron92](https://github.com/nrherron92)!
-
-##### Bug fixes
-
-+ Fixed an issue causing the email notification content getter to use the same filter as popover notifications.
-+ Fixed an issue preventing default blog date & time settings from being used when displaying an access plan's access expiration date on course and membership pricing tables.
-+ Fixed an issue causing 404s on paginated dashboard endpoints when the permalink structure is set to anything other than `%postname%`.
-
-##### Deprecations
-
-+ `LLMS_Query->set_dashboard_pagination()`
-
-
-v3.28.1 - 2019-02-01
---------------------
-
-+ Fixed an issues preventing exports to be accessible on Apache servers.
-+ Fixed an issue causing servers with certain nginx rules to open CSV exports directly instead of downloading them.
-
-
-v3.28.0 - 2019-01-29
---------------------
-
-##### Updates
-
-+ Updated reporting table export functions to provide immediate download prompts of the files. Exports are generated in real time and you *must* remain on the page while it generates. The good news is if your site had issues with email or cronjobs it'll no longer be an issue for you.
-+ Updated lesson metabox to use icons for attached quizzes
-+ Added an orange highlight to the admin "Add-Ons & More" menu item
-+ Removed unused cron event.
-
-##### LifterLMS Blocks
-
-+ Updated LifterLMS Blocks to 1.3.4
-+ Adds support for handling courses & lessons in "Classic Editor" mode as defined by the Divi page builder
-+ Skips course and lesson migration when "Classic" mode is enabled.
-+ Adds conditions to identify "Classic" mode when the Classic Editor plugin settings are configured to enforce classic (or block) mode for *all* posts.
-
-##### Database Updates
-
-+ Unschedules the aforementioned unused cron event.
-
-##### Bug fixes
-
-+ Fixed an issue preventing the temp directory old file cleanup cron from firing on schedule.
-+ During plugin uninstallation the tmp cleanup cron will now be properly unscheduled.
-+ Fixed an issue causing notifications on the student dashboard to appear on top of static headers or the WP Admin Bar when scrolling.
-+ Fixed an issue preventing manual updating of customer and source information on orders resulting from unfocusable hidden form fields.
-+ Fixed mismatched HTML tags on the Admin Add-Ons screen
-
-##### Deprecations
-
-+ Class method: `LLMS_Admin_Table::queue_export()`
-+ Class: `LLMS_Processor_Table_To_Csv`
-
-
-v3.27.0 - 2019-01-22
---------------------
-
-###### Updates
-
-+ Added the ability to add existing questions to a quiz in the course builder. This allows cloning of existing questions as well as attaching "orphaned" questions currently attached to no quizzes.
-+ Added the ability to detach questions from quizzes. Coupled with adding existing questions, questions can now be easily moved between quizzes.
-+ Added permalink capabilities to the builder to allow linking to specific items within the builder (a lesson, quiz, etc...).
-+ Quizzes with 0 possible points will no longer show a Pass/Fail chart with a 0% (failing) grade on quiz results screens.
-+ Replaced option `lifterlms_lock_down` which cannot be set via any setting with a filter to reduce database calls. This will have no effect on anyone unless you manually set this option to "no" via a database query. Having done this would allow the admin bar to be shown to students.
-
-##### Bug Fixes
-
-+ Fixed an issue causing the default "Redeem Voucher" and "My Orders" student dashboard endpoint slugs from not having the correct default values. Thanks [@tnorthcutt](https://github.com/tnorthcutt)!
-+ Fixed an issue causing quotation marks in quiz question answers to show escaping slashes on results screens.
-+ Fixed a bug preventing viewing quiz results for quizzes with questions that have been deleted.
-+ Fixed a bug causing a PHP Notice to be output when registering a new user with a valid voucher.
-
-##### Templates Changed
-
-+ [quiz/results-attempt.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/results-attempt.php)
-
-
-v3.26.4 - 2019-01-16
---------------------
-
-+ Update to [LifterLMS Blocks 1.3.2](https://make.lifterlms.com/2019/01/15/lifterlms-blocks-version-1-3-1/), fixing an issue preventing template actions from being removed from migrated courses & lessons.
-
-
-v3.26.3 - 2019-01-15
---------------------
-
-##### Updates
-
-+ Fix issue preventing course difficulty and course length from being edited when using the classic editor plugin.
-+ Improved pagination methods on Student Dashboard Endpoints
-+ "My Notifications" dashboard tab now consistently paginated like other dashboard endpoints
-+ Update to [LifterLMS Blocks 1.3.1](https://make.lifterlms.com/2019/01/15/lifterlms-blocks-version-1-3-1/).
-
-##### Bug Fixes
-
-+ Fixed an issue preventing course difficulty and course length from being edited when using various page builders.
-+ Fixed issues causing errors on quiz reporting screens for quiz attempts made by deleted users.
-
-##### Deprecated Functions
-
-+ `LLMS_Student_Dashboard::output_notifications_content()` replaced with `lifterlms_template_student_dashboard_my_notifications()`
-
-##### Templates Changed
-
-+ [myaccount/my-notifications.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/my-notifications.php)
-+ [admin/reporting/tabs/quizzes/attempt.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/quizzes/attempt.php)
-
-
-v3.26.2 - 2019-01-09
---------------------
-
-+ Fast follow to fix incorrect version number pushed to the readme files for 3.26.1 which prevents upgrading to 3.26.1
-
-
-v3.26.1 - 2019-01-09
---------------------
-
-##### Updates
-
-+ Tested to WordPress 5.0.3
-+ Student CSV reports will now bypass cached data during report generation.
-+ Add course and membership catalog visibility settings into the block editor.
-+ Includes LifterLMS Blocks 1.3.0.
-
-##### Bug Fixes
-
-+ Fixed issue preventing the course instructors metabox from displaying when using the classic editor plugin.
-+ Fixed an issue causing membership background enrollment from processing when the course background processor is disabled via filters.
-+ Fixed an issue causing errors when reviewing orders on the admin panel which were placed via a payment gateway which is no longer active.
-+ Fixed an issue preventing course difficulty and course length from being edited when using the classic editor plugin.
-+ Fixed a very convoluted conflict between LifterLMS, WooCommerce, and Elementor explained at https://github.com/gocodebox/lifterlms/issues/730.
-
-
-v3.26.0 - 2018-12-27
---------------------
-
-+ Adds conditional support for page builders: Beaver Builder, Divi Builder, and Elementor.
-+ Fixed issue causing LifterLMS core sales pages from outputting automatic content (like pricing tables) on migrated posts.
-+ Student unenrollment calls always bypass cache during enrollment precheck.
-+ Membership post type "name" label is now plural (as it is supposed to be).
-
-
-v3.25.4 - 2018-12-17
---------------------
-
-+ Adds a filter (`llms_blocks_is_post_migrated`) to allow determining if a course or lesson has been migrated to the WP 5.0 block editor.
-+ Added a filter (`llms_dashboard_courses_wp_query_args`) to the WP_Query used to display courses on the student dashboard.
-+ Fixed issue on course builder causing prerequisites to not be saved when the first lesson in a course was selected as the prereq.
-+ Fixed issue on course builder causing lesson settings to be inaccessible without first saving the lesson to the database.
-
-
-v3.25.3 - 2018-12-14
---------------------
-
-+ Fixed compatibility issue with the Classic Editor plugin when it was added after a post was migrated to the new editor structure.
-
-
-v3.25.2 - 2018-12-13
---------------------
-
-+ Added new filters to the `LLMS_Product` model.
-+ Fix issue with student dashboard login redirect causing a white screen on initial login.
-
-
-v3.25.1 - 2018-12-12
---------------------
-
-##### Updates
-
-+ Editor blocks now display a lock icon when hovering/selecting a block which corresponds to the enrollment visibility settings of the block.
-+ Removal of core actions is now handled by a general migrator function instead of by individual blocks.
-
-##### Bug fixes
-
-+ Fixed issue preventing strings from the lifterlms-blocks package from being translatable.
-+ Fix issue causing block visibility options to not be properly set when enrollment visibility is first enabled for a block.
-+ Fixed compatibility issue with Yoast SEO Premium redirect manager settings, thanks [@moorscode](https://github.com/moorscode)!
-+ Fixed typo preventing tag size options (or filters) of course information block from functioning properly. Thanks [@tnorthcutt](https://github.com/tnorthcutt)!
-
-##### Templates Changed
-
-+ [templates/course/meta-wrapper-start.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/meta-wrapper-start.php)
-
-
-v3.25.0 - 2018-12-05
---------------------
-
-##### WordPress 5.0 Ready!
-
-+ **Tested with WordPress core 5.0 (Gutenberg)!**
-+ Editor Blocks: Course and Lesson layouts are now (preferably) powered by various editor blocks.
-+ When a block is added to a course or lesson, the template hook that automatically outputs that element is removed automatically (preventing duplicates).
-+ If you use the LifterLMS Labs: Action Manager you may no longer need it!
-+ Course & Membership instructors are now managed through an editor "plugin". Check out the rocket icon near the "Publish/Update" button.
-+ Instructor metabox will load conditionally based on presence of the block editor
-+ New courses and lessons will automatically have a preloaded block editor template
-+ Courses and lessons will automatically be "migrated" to these templates when edited on the admin panel
-+ Various course settings conditionally load based on the presence of the block editor
-+ Added filter to the headline size in the `course/meta-wrapper-start.php` template. Allows customization of headline via the "Course Information" block settings.
-+ If you're not ready for WordPress 5.0 you can still upgrade LifterLMS. This release is fully functional without the block editor.
-
-##### Bug Fixes
-
-+ Fixed typo in `quiz/start-button.php` template.
-+ Fixed error occurring during activation of LaunchPad via the Add-Ons & More screen.
-+ Fixed issue causing quiz reporting screens to be blank for users without `view_others_lifterlms_reports` capabilities.
-
-##### Templates Changed
-
-+ [templates/course/author.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/author.php)
-+ [course/meta-wrapper-start.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/meta-wrapper-start.php)
-+ [quiz/start-button.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/start-button.php)
-
-
-v3.24.3 - 2018-11-13
---------------------
-
-##### Updates
-
-+ Added user email, login, url, nicename, display name, first name, and last name as fields searched when searching orders. Thanks Thanks [@yojance](https://github.com/yojance)!
-
-##### Bug Fixes
-
-+ Fixed issue causing fatal errors encountered during certificate downloading caused by CSS ` ` tags existing outside of the `` element.
-+ Certificates downloaded by users who can see the WP Admin Bar will no longer show the admin bar on the downloaded certificate
-+ Fixed issue on iOS Safari causing multiple choice quiz questions to require a "long press" to be properly selected
-+ Fixed issue causing access plan sales to end 36m and 1s prior to end of the day on the desired sale end date. Thanks [@eri-trabiccolo](https://github.com/eri-trabiccolo)!
-+ Ensure that fallback url slugs for course & membership archives are translatable.
-
-
-v3.24.2 - 2018-10-30
---------------------
-
-+ Fix issue causing newline characters to be malformed on course builder description fields, resulting in `n` characters being output in strange places.
-
-
-v3.24.1 - 2018-10-29
---------------------
-
-##### Updates
-
-+ The shortcode `[lifterlms_hide_content]` now accepts multiple IDs and can specify whether the user must belong to either *all* or *any one* of the specified memberships. Thanks [@yojance](https://github.com/yojance)!
-+ The action `llms_voucher_used`, called when a voucher code is used, will now pass the voucher code as a 3rd parameter. Thanks [@yojance](https://github.com/yojance)!
-
-##### Bug Fixes
-
-+ Fixed a typo in engagement drop creation dropdown. Thanks [README1ST](https://github.com/README1ST)!
-+ Fixed issue causing backslash characters (`\`) to be removed from course elements (sections, lessons, quizzes, and assignments) constructed in the course builder.
-+ Fixed an issue in the 3.16.0 database migration script that would cause migrations to get stuck as a result of malformed data saved in an invalid format.
-+ Added processing handlers to payment confirmation form. Fixes an issue which would allow multiple payment confirmation requests to be made (if the form was submitted multiple times before the page reloaded) resulting in duplicate charges.
-
-##### Templates Changed
-
-+ templates/checkout/form-confirm-payment.php
-
-
-v3.24.0 - 2018-10-23
---------------------
-
-##### "My Grades" Student Dashboard Endpoint
-
-+ A new student dashboard endpoint, "My Grades", has been added
-+ The main screen displays a paginated and sortable list of all courses a student is enrolled in and outputs their progress and grade in the courses
-+ Students can drill into individual reporting screens for each course where specific details for each course are available for review
-
-##### Grading Enhancements
-
-+ Each lesson can now be assigned an individual "points" value
-+ When a course is graded the points assigned to each lesson will be used to calculate the value of the lesson's grade within the overall course grade
-+ Lessons can also be assigned a value of "0" to allow a lesson to not count towards the overall grade of the course.
-+ Email notifications are now sent to a student when an instructor reviews, grades, or leaves remarks on a quiz attempt.
-
-##### Test Email Notifications
-
-+ An interface and API for sending test email notifications has been added, the following notifications can now be tested:
-
- + Purchase Receipt
- + Quizzes: Failed (Thanks [@philwp](https://github.com/philwp)!)
- + Quizzes: Graded
- + Quizzes: Passed (Thanks [@philwp](https://github.com/philwp)!)
-
-##### Updates and Enhancements
-
-+ Quiz Passed & Quiz Failed notifications have new names on the admin panel ("Quizzes: Quiz Passed" & "Quizzes: Quiz Failed")
-+ The default content for Quiz Passed and Quiz Failed notifications have been enhanced. If you've modified these you can delete your modified content to have your notifications "restored" to the improved defaults.
-+ Change the page title of the Student Dashboard page installed via the Setup Wizard to be "Dashboard" instead of "My Courses." Thanks [@philwp](https://github.com/philwp)!
-+ In the course builder when a lesson is duplicated, the attached quiz will be duplicated as well
-+ Minor increase to performance in the `LLMS_Course->get_lessons()` method
-+ Added `student_id` as a parameter passed to the `llms_student_get_progress` filter
-+ Updated all access plan templates added in 3.23.0 to ensure `ABSPATH` is defined to prevent direct template access
-+ Remove use of deprecated `LLMS_Lesson->get_children_lessons()` in the `LLMS_Course` and `LLMS_Lesson` models as well as in the `course/syllabus.php` template
-+ Refactored the `LLMS_Section->get_percent_complete()` method to utilize methods from the `LLMS_Student` model
-+ Added the ability for admin table classes to define `` element CSS classes
-+ Admin settings pages with no settings to save (like the Notifications list) no longer display a "Save" button
-+ Added actions when creating, updating, and deleting records managed by `LLMS_Abstract_Database_Store` classes
-+ Updated system report to include URLs to settings with URLs, adds a small speed boost to support request turn around time.
-
-##### Please Rate & Review LifterLMS on WordPress.org
-
-+ Added a WordPress.org review request link to the footer of LifterLMS admin pages.
-+ Added a WordPress.org review request notice which displays a week after installation if the site has 50+ active students.
-
-##### Bug fixes
-
-+ Fixed issue causing HTML entity codes to display in email subject lines. Thanks [@philwp](https://github.com/philwp)!
-+ Fixed issue causing post cleanup functions to run queries against unsupported post types.
-+ Fixed typos in a handful of i18n functions so that the proper textdomain is now being used
-+ Removed `get_option()` call to unused option `lifterlms_logout_endpoint` which ran on WordPress initialization unnecessarily.
-+ Removed 3.21.0 fixes for iOS touch issues that are now causing iOS touch issues on quizzes.
-+ When an order is deleted, all order transactions will also be deleted. This does not happen until the order is deleted (transactions will remain while the order is in the trash)
-+ Fixed an issue causing duplicated quizzes to initially show images for question images & image choices (reorder pictures & picture choice) but the image data would not be properly saved so when returning to the builder or viewing a quiz on the frontend the images would be lost
-
-##### Deprecated Functions & Methods
-
-+ Deprecated `LLMS_Section->get_children_lessons()`, use `LLMS_Section->get_lessons( 'posts' )` instead
-
-##### Template Updates
-
-+ [course/syllabus.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/syllabus.php)
-+ [product/access-plan-button.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/access-plan-button.php)
-+ [product/access-plan-description.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/access-plan-description.php)
-+ [product/access-plan-feature.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/access-plan-feature.php)
-+ [product/access-plan-pricing.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/access-plan-pricing.php)
-+ [product/access-plan-restrictions.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/access-plan-restrictions.php)
-+ [product/access-plan-title.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/access-plan-title.php)
-+ [product/access-plan-trial.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/access-plan-trial.php)
-+ [product/free-enroll-form.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/free-enroll-form.php)
-
-
-v3.23.0 - 2018-08-27
---------------------
-
-##### Access Plan & Pricing Table Template Improvements
-
-+ The pricing table template has been split into multiple templates which are now rendered via action hooks. No visual changes have been made but if you've customized the template using a template override you'll want to review the template changes before updating!
-+ New action hooks are available to modify the rendering of access plans in course / membership pricing tables.
-
- + `llms_access_plan`: Main hook for outputting an entire access plan within the pricing table
- + `llms_before_access_plan`: Called before main content of access plan. Outputs the "Featured" area of plans
- + `llms_acces_plan_content`: Main access plan content. Outputs title, pricing info, restrictions, and description
- + `llms_acces_plan_footer`: Called after main content. Outputs trial info and the checkout / enrollment button
-
-+ Added filters to the returns of many of the functions in the `LLMS_Acces_Plan` model.
-+ Minor improvements made to `LLMS_Access_Plan` model
-
-##### Updates and Enhancements
-
-+ Improved handling of empty blank / empty data when adding instructors to courses and memberships
-+ Added filters to the "Sales Page Content" type options & functions for courses and memberships to allow 3rd parties to define their own type of sales page functionality
-+ Added filters to the saving of access plan data
-+ Improved the HTML and added CSS classes to the access plan admin panel html view
-
-##### Bug Fixes
-
-+ Fixes issue causing the "Preview Changes" button on courses to lock the "Update" publishing button which prevents changes from being properly saved.gi
-+ Fixed issue causing PHP errors when viewing courses / memberships on the admin panel when an instructor user was deleted
-+ Fixed issue causing PHP notices when viewing course / membership post lists on the admin panel when an instructor user was deleted
-+ Fixed issue causing PHP warnings to be generated when viewing the user add / edit screen on the admin panel
-+ Fixed an issue which would cause access plans to never be available to users. *This bug didn't affect any existing installations except if you wrote custom code that called the `LLMS_Access_Plan::is_available_to_user()` method.*
-
-##### Template Updates
-
-+ [templates/admin/post-types/product-access-plan.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/post-types/product-access-plan.php)
-+ [templates/product/pricing-table.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/pricing-table.php)
-
-
-v3.22.2 - 2018-08-13
---------------------
-
-+ Fixed issue causing banners on general settings screen to cause a fatal error when api connection errors occurred
-+ Improved CSS on setup wizard
-
-
-v3.22.1 - 2018-08-06
---------------------
-
-+ Fix issue causing themes to appear as requiring updates when using the LifterLMS Helper
-
-
-v3.22.0 - 2018-07-31
---------------------
-
-+ Frontend notifications are no longer powered by AJAX requests. This change will significantly reduce the number of requests made but will remove the ability for students to receive asynchronous notifications. This means that notifications will only be displayed on page load as notification polling will no longer occur while a student is on a page (while reading the content a lesson, for example).
-+ Course and membership catalogs items in navigation menus will now have expected CSS classes to identify current item and current item parents
-+ The admin panel add-ons screen has been reworked to be powered by the lifterlms.com REST api
-+ Some visual changes have been made to the add-ons screen
-+ The colors on the voucher screen on the admin panel have been updated to match the rest of the interfaces in LifterLMS
-
-
-v3.21.1 - 2018-07-24
---------------------
-
-+ Fixed issue causing visual issues on checkout summary when using coupons which apply discounts to a plan trial
-+ Fixed issue causing `.mo` files stored in the `languages/lifterlms` safe directory from being loaded before files stored in the default location `languages/plugins`
-+ Added methods to integration abstract to allow integration developers to automatically describe missing integration dependencies
-+ Tested to WordPress 4.9.8
-
-##### Template Updates
-
-+ [templates/checkout/form-summary.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-summary.php)
-
-
-v3.21.0 - 2018-07-18
---------------------
-
-##### Updates and Enhancements
-
-+ Added new actions before and after global login form HTML: `llms_before_person_login_form` & `llms_after_person_login_form`
-+ Settings API can now create disabled fields
-+ Added new actions to the checkout form: `lifterlms_pre_checkout_form` && `lifterlms_post_checkout_form`
-+ Added CRUD functions for interacting with data located in the `wp_lifterlms_user_postmeta` table
-+ Replaced various database queries for CRUD user postmeta data with new CRUD functions
-+ Added new utility function to allow splicing data into associative arrays
-
-##### Bug Fixes
-
-+ If all user information fields are disabled, the "Student Information" are will now be hidden during checkout for logged in users instead of displaying an empty information box
-+ Fixed plugin compatibility issue with Advanced Custom Fields
-+ Fixed issue causing multiple choice quiz questions to require a double tap on some iOS devices
-+ Fixed incorrectly named filter causing section titles to not display on student course reporting screens
-+ We do not advocate using PHP 5.5 or lower but if you were using 5.5 or lower and encountered an error during bulk enrollment we've fixed that for. Please upgrade to 7.2 though. We all want faster more secure websites.
-
-##### Template Updates
-
-+ [templates/checkout/form-checkout.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-checkout.php)
-+ [templates/global/form-login.php](https://github.com/gocodebox/lifterlms/blob/master/templates/global/form-login.php)
-
-
-v3.20.0 - 2018-07-12
---------------------
-
-+ Updated user interfaces on admin panel for courses and memberships with relation to "Enrolled" and "Non-Enrolled" student descriptions
-+ "Enrolled Student Description" is now the default WordPress editor
-+ "Non-Enrolled Student Description" is now the "Sales Page"
-+ Additional options for sales pages (the content displayed to visitors and non-enrolled students) have been added:
- + Do nothing (show course description)
- + Show custom content (use a WYSIWYG editor to define content)
- + Redirect to a WordPress page (use custom templates and enhance page builder compatibility and capabilities)
- + Redirect to a custom URL (use a sales page hosted on another domain!)
-+ Tested to WordPress 4.9.7
-
-v3.19.6 - 2018-07-06
---------------------
-
-+ Fix file load paths in OptimizePress plugin compatibility function
-
-
-v3.19.5 - 2018-07-05
---------------------
-
-+ Fixed bug causing `select2` multi-selects from functioning as multi-selects
-+ Fixed visual issue with `select2` elements being set without a width causing them to be both too small and too large in various scenarios.
-+ Fixed duplicate action on dashboard section template
-
-##### Template Updates
-
-+ [templates/myaccount/dashboard-section.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/dashboard-section.php)
-
-
-v3.19.4 - 2018-07-02
---------------------
-
-##### Updates and enhancements
-
-+ Bulk enroll multiple users into a course or membership from the Users table on your admin panel. See how at [https://lifterlms.com/docs/student-bulk-enrollment/](https://lifterlms.com/docs/student-bulk-enrollment/)
-+ Added event on builder to allow integrations to run trigger events when course elements are saved
-+ Added general redirect method `llms_redirect_and_exit()` which is a wrapper for `wp_redirect()` and `wp_safe_redirect()` which can be plugged (and tested via phpunit)
-+ Added new action called before validation occurs for a user account update form submission: `llms_before_user_account_update_submit`
-+ Removed placeholders from form fields. Fixes a UX issue causing registration forms to appear cluttered due to having both placeholders and labels.
-
-##### Bug fixes
-
-+ Fixed issue allowing nonce checks to be bypassed on login and registration forms
-+ Fixed issue causing a PHP notice if the registration form is submitted without an email address and automatic username generation is enabled
-+ Fixed issue preventing email addresses with the "'" character from being able to register, login, or update account information
-+ Fixed typo in automatic username generation filter `lifterlms_generated_username` (previously was `lifterlms_gnerated_username`)
-+ Fixed issue causing admin panel static assets to have a double slash (//) in the asset URI path
-+ Fixed issue allowing users with `view_lifterlms_reports` capability (Instructors) to access sales & enrollment reporting screens. The `view_others_lifterlms_reports` capability (Admins & LMS Managers) is now required to view these reporting tabs.
-+ Updated IDs of login and registration nonces to be unique. Fixes an issue causing Chrome to throw non-unique ID warnings in the developer console. Also, IDs are supposed to be unique _anyway_ but thanks for helping us out Google.
-
-
-v3.19.3 - 2018-06-14
---------------------
-
-+ Fix issue causing new quizzes to be unable to load questions list without reloading the builder
-
-
-v3.19.2 - 2018-06-14
---------------------
-
-##### Updates and enhancements
-
-+ The course builder will now load quiz question data when the quiz is opened instead of loading all quizzes on builder page load. Improves builder load times and addresses an issue which could cause timeouts in certain environments when attempting to edit very large courses.
-+ The currently viewed lesson will now be bold in the lesson outline widget.
-+ Added a CSS class `.llms-widget-syllabus .llms-lesson.current-lesson` which can be used to customize the display of the current lesson in the widget.
-+ Added the ability to filter quiz attempt reports by quiz status
-+ Updated language for access plans on with a limited number of payments to reflect the total number of payments due as opposed to the length (for example in years) that the plan will run.
-
-##### Bug fixes
-
-+ Fixed issue preventing oEmbed media from being used in quiz question descriptions
-+ Fixed issue preventing `` from being used in quiz question descriptions
-+ Quiz results will now exclude questions with 0 points value when displaying the number of questions in the quiz.
-+ Fixed error occurring when sorting was applied to quiz attempt reports which would cause quiz attempts from other quizzes to be included in the new sorted report
-+ Fixed filter `lifterlms_reviews_section_title` which was unusable due to the incorrect usage of `_e()` within the filter. Now using `__()` as expected.
-+ Fixed issue causing course featured image to display in place of lesson feature images
-
-##### Template Updates
-
-+ [templates/course/lesson-preview.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/lesson-preview.php)
-+ [templates/course/outline-list-small.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/outline-list-small.php)
-+ [templates/quiz/results-attempt.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/results-attempt.php)
-
-
-v3.19.1 - 2018-06-07
---------------------
-
-+ Fixed CSS specificity issue on admin panel causing white text on white background on system status pages
-
-
-v3.19.0 - 2018-06-07
---------------------
-
-##### Updates and enhancements
-
-+ Added a "My Memberships" tab to the student dashboard
-+ "My Memberships" preview area
-+ Updated admin panel order status badges to match frontend order status badges
-+ Added a new recurring order status "Pending Cancel." Orders in this state will allow students to access course / membership content until the next payment is due, on this date, instead of a recurring charge being made the order will move to "Cancelled" and the student's enrollment status will change to "Cancelled" removing their access to the course or membership.
-+ When a student cancels an active recurring order from the student dashboard, the order will move to "Pending Cancellation" instead of "Cancelled"
-+ Students can re-activate an order that's Pending Cancellation moving the expiration date to the next payment due date
-+ Added the ability to edit the access expiration date for orders with limited access settings and for orders in the "pending-cancel" state
-+ Added a filter to allow customization of the URL used to generate certificate downloads from
-+ When viewing taxonomy archives for any course or membership taxonomy (categories, tags, and tracks), if a term description exists, it will be used instead of the default catalog description content defined on the catalog page.
-+ Added a filter (`llms_archive_description`) to allow filtering of the archive description
-+ When `WP_DEBUG` is disabled the scheduled-actions posttype interface is now available via direct link. Useful for debugging but don't want to expose a menu-item link to clients. Access via wp-admin/edit.php?post_type=scheduled-action. Be warned: you shouldn't be modifying scheduled actions manually and that's why we're not exposing this directly, this should be used for debugging only!
-+ Updated the function used to check if lessons have featured images to improve performance and resolve an incompatibility issue with WP Overlays plugin.
-
-##### Bug fixes
-
-+ Fixed issue causing "My Courses" title to be duplicated on the student dashboard when viewing the endpoint
-+ Fixed issue causing the trial price to be displayed with a strike-through during a sale
-+ Fixed coupon issue causing coupons to expire at the beginning of the day on the expiration date instead of at the end of the day
-+ Fixed issue causing CSS rules to lose their declared order during exports causing export rendering issues with certain themes and plugin combinations
-
-##### Template Updates
-
-+ [templates/checkout/form-summary.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-summary.php)
-+ [templates/checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-switch-source.php)
-+ [templates/course/lesson-preview.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/lesson-preview.php)
-+ [templates/myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/view-order.php)
-
-
-v3.18.2 - 2018-05-24
---------------------
-
-+ Improved integrations settings screen to allow each integration to have it's own settings tab (page) with only its own settings
-+ Allow programmatic access to notification content when notification views are accessed via filters
-+ Fixed issue causing subscription cancellation notifications to be sent to admins when new orders were created
-+ Fixed warning message displayed prior to membership bulk enrollment
-+ Fixed multibyte character encoding issue encountered during certificate exports
-
-
-v3.18.1 - 2018-05-18
---------------------
-
-+ Attached `llms_privacy_policy_form_field()` and `llms_agree_to_terms_form_field()` to an action hook `llms_registration_privacy`
-+ Define minimum WordPress version requirement as 4.8.
-
-##### Template Updates
-
-+ [templates/checkout/form-checkout.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-checkout.php)
-+ [templates/global/form-registration.php](https://github.com/gocodebox/lifterlms/blob/master/templates/global/form-registration.php)
-
-
-v3.18.0 - 2018-05-16
---------------------
-
-##### Privacy & GDPR Compliance Tools
-
-+ Added privacy policy notice on checkout, enrollment, and registration that integrates with the WP Core 4.9.6 Privacy Policy Page setting
-+ Added settings to allow customization of the privacy policy and terms & conditions notices during checkout, enrollment, and registration
-+ Added suggested Privacy Policy language outlining information gathered by a default LifterLMS site
-
-+ During a WordPress Personal Data Export request the following LifterLMS information will be added to the export
-
- + All personal information gathered from registration, checkout, and enrollment forms
- + Course and membership enrollments, progress, and grades
- + Earned achievements and certificates
- + All order data
-
-+ During a WordPress Personal Data Erasure request the following LifterLMS information will be erased
-
- + All personal information gathered from registration, checkout, and enrollment forms
- + Earned achievements and certificates
- + All notifications for or about the user
- + If the "Remove Order Data" setting is enabled, the order will be anonymized by removing student personal information from the order and, if the order is a recurring order, it will be cancelled.
- + If the "Remove Student LMS Data" setting is enabled, all student data related to course and membership activity will be removed
-
-+ All of the above relies on features available in WordPress core 4.9.6
-
-##### Updates and Enhancements
-
-+ Tested up to WordPress 4.9.6
-+ Improved pricing table UX for members-only access plans. An access plan button for a plan belonging to only one membership will click directly to the membership as opposed to opening a popover. Plan's with access via multiple memberships will continue to open a popover listing all availability options.
-+ Added a "My Certificates" tab to the Student Dashboard
-+ Certificates can be downloaded as HTML files (available when viewing a certificate or from the certificate reporting screen on the admin panel)
-+ Admins can now delete certificates and achievements from reporting screens on the admin panel
-+ Added additional information to certificate and achievement reporting tables
-+ Expanded widths of admin settings page setting names to be a bit wider and more readable
-+ Now conditionally hiding some settings when they are no longer relevant
-+ Added daily cron automatically remove files from the `LLMS_TMP_DIR` which are more that 24 hours old
-+ Removed unused template `content-llms_membership.php`
-+ Added initialization actions for use by integration classes
-
-##### Bug Fixes
-
-+ Fixed issue causing coupon reports to always display "1" regardless of actual number of coupons used
-+ Fixed issue causing new posts created via the Course Builder to always be created for user_id #1
-+ Fixed issue causing "My Achievements" to display twice on the My Achievements student dashboard tab
-+ Fixed issue preventing lessons from being completed when a quiz in draft mode was attached to the lesson
-+ Fixed issue causing minified RTL stylesheets to 404
-
-##### Template Updates
-
-+ [templates/admin/post-types/order-details.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/post-types/order-details.php)
-+ [templates/checkout/form-checkout.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-checkout.php)
-+ [templates/content-certificate.php](https://github.com/gocodebox/lifterlms/blob/master/templates/content-certificate.php)
-+ [templates/global/form-registration.php](https://github.com/gocodebox/lifterlms/blob/master/templates/global/form-registration.php)
-+ [templates/myaccount/dashboard-section.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/dashboard-section.php)
-
-
-v3.17.8 - 2018-05-04
---------------------
-
-##### Updates and Enhancements
-
-+ Added admin email notification when student cancels a subscription
-+ Quiz results will now display the question's description when reviewing results as a student and on the admin panel during grading
-+ Add action hook fired when a student cancels a subscription (`llms_subscription_cancelled_by_student`)
-+ Reduce unnecessary DB queries for integrations by checking for dependencies and then calling querying the options table to see if the integration has been enabled.
-+ Updated the notifications settings table to be more friendly to the human eye
-
-##### Bug Fixes
-
-+ Fix admin scripts enqueue order. Fixes issue preventing manual student enrollment selection from functioning properly in certain scenarios.
-+ Shift + Enter when in a question choice field now adds a return as expected instead of exiting the field
-+ When pasting into question choice fields HTML from RTF documents will be automatically stripped
-+ Ensure certificates print with a white background regardless of theme CSS
-+ Fix issue causing themes with `overflow:hidden` on divs from cutting certificate background images
-+ Upon export completion unlock tables regardless of mail success / failure
-+ Resolve issue causing incorrect number of access plans to be returned on systems that have custom defaults set for `WP_Query` `post_per_page` parameter
-+ Fix error occurring when all 3rd party integrations are disabled by filter, credit to [@Mte90](https://github.com/Mte90)!
-+ Ensure `LLMS()->integrations()->integrations()` returns all integrations regardless of availability.
-+ Updated `LLMS_Abstract_Options_Data` to have an option set method
-
-##### Template Updates
-
-+ [templates/quiz/results-attempt-questions-list.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/results-attempt-questions-list.php)
-
-
-v3.17.7 - 2018-04-27
---------------------
-
-+ Fix issue preventing assignments passing grade requirement from saving properly
-+ Fix issue preventing builder toggle switches from properly saving some switch field data
-+ Fix with "Launch Builder" button causing it to extend outside the bounds of its container
-+ Fix issue with builder radio select fields during view rerenders
-+ Course Outline shortcode (and widget) now retrieve parent course of the current page more consistently with other shortcodes
-+ Added ability to filter which custom post types which can be children of a course (allows course shortcodes & widgets to be used in assignment sidebars of custom content areas)
-
-
-v3.17.6 - 2018-04-26
---------------------
-
-+ Updated language on recurring orders with no expiration settings. Orders no longer say "Lifetime Access" and instead output no expiration information
-+ Quiz editor on builder updated to be consistent visually and functionally to the lesson settings editor
-+ Improved the builder field API to allow for radio element fields
-+ Fix issue causing JS error on admin settings pages
-+ Updated CSS for Certificates to be more generally compatible with theme styles when printed
-+ Allow system print settings to control print layout for certificates by removing explicit landscape declarations
-+ Now passing additional data to filters used to create custom columns on reporting screens
-+ Remove unused JS files & Chosen JS library
-+ Added filter to allow opting into alternate student dashboard order layout. Use `add_filter( 'llms_sd_stacked_order_layout', '__return_true' )` to stack the payment update sidebar below the main order information. This is disabled by default.
-+ Achievement and Certificate basic notifications now auto-dismiss after 10 seconds like all other basic notifications
-+ Deprecated Filter `llms_get_quiz_theme_settings` and added backwards compatible methods to transition themes using this filter to the new custom field api. For more information see new methods at https://lifterlms.com/docs/course-builder-custom-fields-for-developers/
-+ Increased default z-index on notifications to prevent notifications from being hidden behind floating / static navigation menus
-
-
-##### Template Updates
-
-+ [templates/myaccount/my-orders.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/my-orders.php)
-+ [templates/myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/view-order.php)
-
-
-v3.17.5 - 2018-04-23
---------------------
-
-##### Admin Settings Interface Improvements
-
-+ Improved admin settings page interface to allow for section navigation
-+ Updated checkout setting pages to utilize a separate section (page) for each available payment gateway
-+ Added a table of payment gateways to see at a glance which gateways are enabled and allows drag and drop reordering of gateway display order
-+ Moved dashboard endpoints to a separate section on the accounts settings area
-+ Updated CSS on settings page to have more regular spacing between subtitles and settings fields
-+ Added a "View" button next to any admin setting post/page selection field to allow quick viewing of the selected post
-+ Purchase page setting field is now ajax powered like all other page selection settings
-+ Renamed dashboard settings section titles to be more consistent with language in other areas of LifterLMS
-+ All dashboard endpoints now automatically sanitized to be URL safe
-
-##### Updates and Enhancements
-
-+ Dashboard endpoints can now be deregistered by setting the endpoint slug to be blank on account settings
-
-##### Bug Fixes
-
-+ Fix issue causing 404s for various script files when SCRIPT_DEBUG is enabled
-+ Fix issue with audio & video embeds to prevent fallback to default post attachments
-+ Fix issue causing student selection boxes to malfunction due to missing dependencies when loaded over slow connections
-
-##### Template Updates
-
-+ [templates/myaccount/navigation.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/navigation.php)
-
-
-v3.17.4 - 2018-04-17
---------------------
-
-+ Added core RTL language support
-+ Fixed fatal error on student management tables resulting from deleted admin users who manually enrolled students
-+ Added filter to allow 3rd parties to disable achievement dupchecking (`llms_achievement_has_user_earned`)
-+ Added {student_id} merge code which can be utilized on certificates
-+ Added merge code insert button to certificates editor
-+ Added filter to allow 3rd parties to disable certificate dupchecking (`llms_certificate_has_user_earned`)
-+ Added filter to allow 3rd parties to add custom merge codes to certificates (`llms_certificate_merge_codes`)
-+ Fix restriction check issue for lessons with drip or prerequisites on course outline widget / shortcode
-+ Bumped WP tested to version to 4.9.5
-
-##### Template Updates
-
-+ [templates/course/complete-lesson-link.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/complete-lesson-link.php)
-+ [templates/course/outline-list-small.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/outline-list-small.php)
-
-
-v3.17.3 - 2018-04-11
---------------------
-
-+ Course and Membership instructor metabox search field now correctly states "Select an Instructor" instead of previous "Select a Student"
-+ Added missing translation for "Select a Student" on admin panel student selection search fields
-+ Fix issue causing reporting export CSVs to throw a SYLK interpretation error when opened in Excel
-+ Fix issue causing drafted courses and memberships to be published when the "Update" button is clicked to save changes
-+ Remove use of PHP 7.2 deprecated `create_function`
-+ Fix errors resulting from quiz questions which have been deleted
-+ Fix issue causing current date / time to display as the End Date for incomplete quiz attempts on quiz reporting screens
-
-##### Template Updates
-
-+ [templates/admin/reporting/tabs/quizzes/attempt.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/quizzes/attempt.php)
-+ [templates/quiz/results-attempt-questions-list.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/results-attempt-questions-list.php)
-
-
-v3.17.2 - 2018-04-09
---------------------
-
-+ Fixed issue preventing lesson video and audio embeds from being *removed* when using the course builder settings editor
-+ Fixed issue causing question images to lose the image source
-+ Updated student management table for courses and memberships to show the name (and a link to the user profile) of the site user who manually enrolled the student.
-+ Add "All Time" reporting to various reporting filters
-+ Added API for builder fields to enable multiple select fields
-+ Fix memory leak related to assignments rendering on course builder
-+ Fix issue causing course progress and enrollment checks to incorrectly display progress data cached for other users
-+ Lesson progression actions (Mark Complete & Take Quiz buttons) will now always display to users with edit capabilities regardless of enrollment status
-
-##### Template Updates
-
-+ [templates/course/complete-lesson-link.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/complete-lesson-link.php)
-+ [templates/course/outline-list-small.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/outline-list-small.php)
-
-
-v3.17.1 - 2018-03-30
---------------------
-
-+ Refactored lesson completion methods to allow 3rd party customization of lesson completion behavior via filters and hooks.
-+ Remove duplicate lesson completion notice implemented. Only popover notifications will display now instead of popovers and inline messages.
-+ Object completion will now automatically prevent multiple records of completion from being recorded for a single object.
-+ Lesson Mark Complete button and lessons completed by quiz now utilizes a generic trigger to mark lessons as complete: `llms_trigger_lesson_completion`.
-+ Removed several unused functions from frontend forms class
-+ Moved lesson completion form controllers to their own class
-
-##### Templates updates
-
-+ [templates/course/complete-lesson-link.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/complete-lesson-link.php)
-
-
-v3.17.0 - 2018-03-27
---------------------
-
-##### Builder Updates
-
-+ Moved action buttons for each lesson (for opening quiz and lesson editor) to be static below the lesson title as opposed to only being visible on hover
-+ Added new audio and video status indicator icons for each lesson
-+ Various status indicator icons will now have different icons in addition to different colors depending on their state
-+ Replaced "pencil" icons that open the WordPress post editor with a small "WP" icon
-+ Added several actions and filters to backend functions so that 3rd parties can hook into builder saves
-+ Added lesson settings editing to the builder. Lesson settings can now be updated from settings metaboxes on the lesson post edit screen AND on the builder.
-+ Added prerequisite validation for lessons to prevent accidental impossible prerequisite creating (eg: Lesson 5 can never be a prerequisite for Lesson 4)
-+ Added functions and filters to allow 3rd parties to add custom fields to the builder. For more details see [an example](https://lifterlms.com/docs/course-builder-custom-fields-for-developers/).
-+ Fixed issue causing changes made in "Text" mode on content editors wouldn't trigger save events
-+ Fixed issue causing lesson prerequisites to not properly display on the course builder
-+ Fixed CSS z-index issues related to builder field tooltip displays
-+ Removed unused Javascript dependencies
-
-##### Bug Fixes
-
-+ Fixed typo on filter on quiz question image getter function
-
-##### Updates
-
-+ Performance improvements made to database queries and functions related to student enrollment status and student course progress queries. Thanks to [@mte90](https://github.com/Mte90) for raising issues and testing solutions related to these updates and changes!
-+ Added PHP Requires plugin header (5.6 minimum)
-+ Added HTTP User Agent data to the system report
-+ [LifterLMS Assignments Beta](https://lifterlms.com/product/lifterlms-assignments?utm_source=LifterLMS%20Plugin&utm_medium=CHANGELOG&utm_campaign=assignments%20preorder) is imminent and this release adds functionality to the Builder which will be extended by Assignments upon when availability
-
-
-v3.16.16 - 2018-03-19
----------------------
-
-+ Fixed builder issue causing multiple question choices to be incorrectly selected
-+ Fixed builder issue with media library uploads causing an error message to prevent new uploads before the quiz or question has been persisted to the database
-+ Fixed builder issue preventing quizzes from being deleted before they were persisted to the database
-+ Fixed builder issue causing autosaves to interrupt typing and reset lesson and section titles
-+ Fixed JS console error related to LifterLMS JS dependency checks
-
-
-v3.16.15 - 2018-03-13
----------------------
-
-##### Quiz Results Improvements and fixes
-
-+ Improved quiz result user and correct answer handling functions for more consistent HTML output
-+ Result answers (correct and user) will display as lists
-+ image question types will display without bullets and will "float" next to each other
-+ Fixed issue causing quiz results with multiple answers from outputting all HTMLS with no spaces between them
-
-##### Quiz Grading
-
-+ Fixed issue causing advanced reorder and reorder question types from being graded incorrectly in some scenarios
-+ Advanced fill in the blank questions are now case insensitive. Case sensitivity can be enabled with a filter: `add_filter( 'llms_quiz_grading_case_sensitive', '__return_true' )`
-
-##### Fixes
-
-+ Updated spacing and returns found in the email header and footer templates to prevent line breaks from occurring in undesirable places on previews of HTML emails in mobile email clients
-+ Added options for themes to add layout support to quizzes where the custom field utilizes an underscore at the beginning of the field key
-+ Fixed CSS issue causing blanks of fill in the blanks to not be visible on the course builder when using Chrome on Windows
-+ Removed unnecessary `get_option()` call to unused option `lifterlms_permalinks`
-+ Updated permissions required to see various LifterLMS post types to rely on `manage_lifterlms` capabilities as opposed to `manage_options`
- + This will only affect the LMS Manager core role or any custom role which was provided with the `manage_options` capability. Manages will now be able to access all LMS content and custom roles would now not be able to access LMS content
- + Affected content types are: Orders, Coupons, Vouchers, Engagements, Achievements, Certificates, and Emails
-+ Several references to an option removed in LifterLMS 3.0 still existed in the codebase and have now been removed.
- + Option `lifterlms_course_display_banner` is no longer called or referenced
- + Template function `lifterlms_template_single_featured_image()` has been removed
- + Actions referencing `lifterlms_template_single_featured_image()` have been removed
- + Template function `lifterlms_get_featured_image_banner()` has been removed
- + Template `templates/course/featured-image.php` has been removed
-
-##### Templates updates
-
-+ [quiz/results-attempt-questions-list.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/results-attempt-questions-list.php)
-
-
-v3.16.14 - 2018-03-07
----------------------
-
-+ Courses reporting table now includes courses with the "Private" status
-+ Fixed issue causing some achievement notifications to be blank
-+ Added tooltips to question choice add / delete icon buttons
-+ Quiz results meta information elements now have unique CSS classes
-+ Removed reliance PHP 7.2 deprecated function `create_function()`
-+ Fixed invalid PHP 7.2 syntax creating a warning found on the setup wizard
-+ Fixed undefined index error related to admin notices
-+ Fixed untranslatable string on Users table ("No Memberships")
-+ Fixed discrepancy between membership restrictions as presented to logged out users and logged in users who cannot access membership
-+ Fixed FireFox and Edge issue causing changes to number inputs made via HTML5 input arrows from properly triggering save events
-
-
-v3.16.13 - 2018-02-28
----------------------
-
-+ Hotfix: Only create quizzes on the builder if quizzes exist on the lesson
-
-
-v3.16.12 - 2018-02-27
----------------------
-
-+ Quizzes can now be detached (removed from a lesson) or deleted (deleted from the lesson and the database) via the Course Builder
-+ Improved question choice randomization to ensure randomized choices never display in their original order.
-+ When a lesson is deleted, any quiz attached to the lesson will become an orphan
-+ When a lesson is deleted, any lesson with this lesson as a prerequisite will have it's prerequisite data removed
-+ When a quiz is deleted, all questions attached to the quiz will also be deleted
-+ When a quiz is deleted, the lesson associated with the quiz will have those associations removed
-+ Fixed grammar issue on restricted lesson tooltips when no custom message is stored on the course.
-+ Updated functions causing issues in PHP 5.4 to work on PHP 5.4. This has been done to reduce frustration for users still using PHP 5.4 and lower; [This does not mean we advocate using software past the end of its life or that we support PHP 5.4 and lower](https://lifterlms.com/docs/minimum-system-requirements-lifterlms/).
-
-
-v3.16.11 - 2018-02-22
----------------------
-
-+ Course import/exports and lesson duplication now carry custom meta data from 3rd party plugins and themes
-+ Added course completion date column to Course reporting students list
-+ Restriction checks made against a quiz will now properly cascade to the quiz's parent lesson
-+ Fixed issue preventing featured images from being exported with courses and lessons
-+ Fixed duplicate lesson issue causing quizzes to be double assigned to the old and new lesson
-+ Fixed issue allowing blog archive to be viewed by non-members when sitewide membership is enabled
-+ Fixed builder issue causing data to be lost during autosaves if data was edited during an autosave
-+ Fixed builder issue preventing lessons from moving between sections when clicking the "Prev" and "Next" section buttons
-+ Added actions to `LLMS_Generator` to allow 3rd parties to extend core generator functionality
-
-
-v3.16.10 - 2018-02-19
----------------------
-
-+ Content added to the editor of course & membership catalog pages will now be output *above* the catalog loop
-+ Fix issue preventing iframes and some shortcodes from working when added to a Quiz question description
-+ Added new columns to the Quizzes reporting table to display Course and Lesson relationships
-+ Improved the task handler of background updater to ensure upgrade functions that need to run multiple times can do so
-+ Fixed JS Backup confirmation dialog on the background updater.
-+ Add support for 32-bit systems in the `LLMS_Hasher` class
-+ Fix issue causing HTML template content to be added to lessons when duplicating an existing lesson within the course builder
-
-##### 3.16.0 migration improvements
-
-+ Accommodates questions imported by 3rd party Excel to LifterLMS Quiz plugin. Fixes an issue where choices would have no correct answer designated after migration.
-+ All migration functions now run on a loop. This improves progress reporting of the migration and prevents timeouts on mature databases with lots of quizzes, questions, and/or attempts.
-+ Fix an issue that caused duplicate quizzes or questions to be created when the "Taking too long?" link was clicked
-
-
-v3.16.9 - 2018-02-15
---------------------
-
-+ Fix issue causing error on student dashboard when reviewing an order with an access plan that was deleted.
-+ Fixed spelling error on course metabox
-+ Fixed spelling error on frontend quiz interface
-+ Fixed issues with 0 point questions:
- + Will no longer prevent quizzes from being automatically graded when a 0 point question is in an otherwise automatically gradable quiz
- + Point value not editable during review
- + Visual display on results displays with grey background not as an orange "pending" question
-+ Table schema uses default database charset. Fixes an issue with databases that don't support `utf8mb4` charsets.
-+ Updated `LLMS_Hasher` class for better compatibility with older versions of PHP
-
-
-v3.16.8 - 2018-02-13
---------------------
-
-##### Updates
-
-+ Added theme compatibility API so theme developers can add layout options to the quiz settings on the course builder. For details on adding theme compatibility see: [https://lifterlms.com/docs/quiz-theme-compatibility-developers/](https://lifterlms.com/docs/quiz-theme-compatibility-developers/).
-+ Quiz results "donut" chart had alternate styles for quizzes pending review (Dark grey text rather than red). You can target with the `.llms-donut.pending` CSS class to customize appearance.
-+ Allow filtering when retrieving student answer for a quiz attempt question via `llms_quiz_attempt_question_get_answer` filter
-
-##### Bug Fixes
-
-+ Fix issues causing conditionally gradable question types (fill in the blank and scale) from displaying without a status icon or possible points when awaiting admin review / grading.
-+ Fix issue preventing conditionally gradable question types (fill in the blank and scale) from being reviewable on the admin panel when the question is configured as requiring manual grading.
-+ Fix analytics widget undefined index warning during admin-ajax calls. Thanks [@Mte90](https://github.com/Mte90)!
-+ Fix issue causing `is_search()` to be called incorrectly. Thanks [@Mte90](https://github.com/Mte90)!
-+ Fix issue preventing text / html formatting from saving properly for access plan description fields
-+ Fix html character encoding issue on reporting widgets causing currency symbols to display as a character code instead of the symbol glyph.
-
-##### Templates changed
-
-+ templates/quiz/results-attempt-questions-list.php
-+ templates/quiz/results-attempt.php
-
-
-v3.16.7 - 2018-02-08
---------------------
-
-+ Added manual saving methods for the course builder that passes data via standard ajax calls. Allows users (hosts) to disable the Heartbeat API but still save builder data.
-+ Added an "Exit" button to the builder sidebar to allow exiting the builder back to the WP Edit Post screen for the current course
-+ Added dashboard links to the WP Admin Bar to allow existing the course builder to various areas of the dashboard
-+ Added data attribute to progress bars so JS (or CSS) can read the progress of a progress bar. Thanks [@dineshchouhan](https://github.com/dineshchouhan)!
-+ Fixed issue causing newly created lessons to lose their assigned quiz
-+ Fixed php `max_input_vars` issue causing a 400 Bad Request error when trying to save large courses in the course builder
-+ Removed reliance on PHP bcmath functions
-
-
-v3.16.6 - 2018-02-07
---------------------
-
-+ Removed reliance on PHP Hashids Library in favor of a simpler solution with no PHP module dependencies
-+ Added interfaces to allow customization of quiz url / slug
-+ Fixed [audio] shortcodes added to quiz question descriptions
-+ Fixed untranslatable strings on frontend of quizzes
-+ Fix issue causing certificate notifications to display as empty
-+ Fix issue preventing quiz pass/fail notifications from triggering properly for manually graded quizzes
-+ Fix undefined index warning on quiz pass/fail notifications
-
-
-v3.16.5 - 2018-02-06
---------------------
-
-+ Fix issue preventing manually graded quiz review points from saving properly
-+ Improved background updater to ensure scripts don't timeout during upgrades
-+ Admin builder JS now minified for increased performance
-+ Made frontend quiz and quiz-builder strings output via Javascript translatable
-
-
-v3.16.4 - 2018-02-05
---------------------
-
-+ Fix issue causing newly created quizzes to not be properly related to their parent lesson
-+ Fix issue preventing quiz time limits from starting unless an attempt limit is also set
-+ Fixes a WP Engine issue that prevented the builder from loading due to a blocked dependency
-
-
-v3.16.3 - 2018-02-02
---------------------
-
-+ When switching a quiz to "Published" it will now update the parent lesson to ensure it's recorded as having an enabled quiz.
-+ Declared the WordPress heartbeat API script as a dependency for the Course Builder JS. It seems that some servers and hosts dequeue the heartbeat when not explicitly required. This resolves a saving issue on those hosts.
-+ Added a Quiz Description content editor under quiz settings. This is the "Editor" from pre 3.16.0 quizzes and any content saved in these fields is now available in this description field
-+ Fixed issue causing points percentage calculation tooltip on quiz builder to show the incorrect percentage value
-+ Fix issue preventing lessons with no drip settings from being updated on the WP post editor
-+ Fix issue causing 500 error on lesson settings metabox for lessons not attached to sections
-+ Add a "Quiz Description" field to allow quiz post content to be edited on the quiz builder
-+ Added a database migration script to ensure quizzes migrated from 3.16 and lower that had quiz post content to automatically have the optional quiz description to be enabled
-
-
-v3.16.2 - 2018-02-02
---------------------
-
-+ Add an update notice to 3.16.0 migration scripts to provide more information about the major update.
-+ Removed quiz assignment fields on the lesson metabox to reduce confusion as quizzes are now managed exclusively on the quiz builder.
-+ Ensure questions migrated during 3.16 updates retain their initial points value from the quiz.
-
-
-v3.16.1 - 2018-02-01
---------------------
-
-+ Ensure quizzes in draft mode are only accessible by those with edit access (instructors, admins, etc...)
-+ Restore pre 3.16 actions and filters related to quiz start buttons
-+ Remove legacy error message for quiz accessibility issues by site admins
-+ Students who cannot access a quiz are redirected to the parent lesson if they attempt to access a quiz directly
-+ Fix undefined index warning on wp-login.php related to LifterLMS js assets. Thanks [Mte90](https://github.com/Mte90)!
-+ Update checkout error message to provide user with direction when they already have access to a course. Thanks [@andreasblumberg](https://github.com/andreasblumberg)!
-
-
-v3.16.0 - 2018-02-01
---------------------
-
-##### Quizzes
-
-+ New question types: True/False, Picture Choice, and Non-question content
-+ Picture & Multiple choice have options for multiple correct answers (checkbox-like questions)
-+ You can now create questions with NO POINTS (maybe for surveys?)
-+ Upgraded student quiz review interface
-+ Upgraded instructor quiz attempt review interface
-+ Admins may now leave remarks on questions directly
-+ Improved data available related to quizzes and quiz attempts on reporting screens
-+ Improved quiz user interface
-+ Added a progress bar to the quiz interface
-+ Shrunk the quiz timer
-+ Added a question # counter on the quiz interface
-+ Fixed issue causing randomized questions to get "lost" when navigating back through a quiz attempt
-+ Improved error handling on quizzes
-+ Overhauled quiz data structure for improved performance and scalability
-+ Requires database migration and update: [3.16.0](https://lifterlms.com/docs/lifterlms-database-updates/#3160)
-
-##### Course Builder Improvements
-
-+ Quiz-building is now available on the course builder
-+ Quiz and Question WordPress editors no longer available. Quizzes and Questions HAVE NOT DISAPPEARED, they've been improved and relocated
-+ All hooks & filters attached to `the_content` and `the_title` are now being removed when loading the course builder. This should prevent infinite spinners on builder loading and builder AJAX calls due to third-parties accidentally outputting html during these events.
-
-##### Updates
-
-+ Added space between arrows and "Next" and "Previous" text on pagination lists. Thanks [sujaypawar](https://github.com/sujaypawar)!
-+ Updated Quiz post type slug from "llms_quiz" to "quiz".
-+ Updated default return of `llms_get_post()` to be `false` rather than a `WP_Post` object when a LifterLMS post cannot be located
-
-##### Bug Fixes
-
-+ Fixed a potential database read error related to database store abstract
-+ Now passing Post ID as second parameter to the `the_title` filter called on post model getters
-
-
-##### Removed templates
-
-The following quiz templates have been removed. Customization of these templates causes quiz application functionality to break and they should not have been available for customization but were due to oversights. This has been corrected.
-
-+ templates/content-single-question-after.php
-+ templates/content-single-question-before.php
-+ templates/quiz/next-question.php
-+ templates/quiz/previous-question.php
-+ templates/quiz/question-count.php
-+ templates/quiz/quiz-question.php
-+ templates/quiz/single-choice.php
-+ templates/quiz/single-choice_ajax.php
-+ templates/quiz/summary.php
-+ templates/quiz/timer.php
-+ templates/quiz/wrapper-end.php
-+ templates/quiz/wrapper-start.php
-
-##### Removed Functions
-
-Various template functions related to quizzes were removed due to the deprecation of their related templates
-
-+ `lifterlms_template_quiz_timer()`
-+ `lifterlms_template_single_next_question()`
-+ `lifterlms_template_single_prev_question()`
-+ `lifterlms_template_single_single_choice()`
-+ `lifterlms_template_single_single_choice_ajax()`
-+ `lifterlms_template_single_question_count()`
-
-
-v3.15.1 - 2017-12-05
---------------------
-
-+ Ensure course & membership titles with HTML characters are decoded during reporting exports
-+ Fix issue causing some courses to display in membership columns on reporting exports
-
-
-v3.15.0 - 2017-12-04
---------------------
-
-##### Reporting Updates (and CSV exports!)
-
-+ Added course-level reporting table (see "Courses" tab of Reporting screen)
-+ Updated the interface on reporting screen when reviewing a single student
-+ Added reporting exports: students list, courses list, and list of students per course
-
-##### Bug fixes
-
-+ Fix error when `[lifterlms_course_continue_button]` shortcode is displayed to logged out or students not enrolled in the chosen course
-
-##### Minor updates
-
-+ Tested up to WordPress 4.9.1
-+ Added background data processors to ensure reporting data stays up to date in close to real time
-+ Add nocache constants and headers on student dashboard & checkout page to increase compatibility with caching plugins
-+ Added filter to student dashboard courses query
-
-
-v3.14.9 - 2017-11-27
---------------------
-
-+ Tested up to WordPress 4.9
-+ Fix error during uninstall related to missing file
-+ Fix issue with rewinding quiz using "Previous Question" button
-+ On final question of a quiz the "Next Lesson" button now says "Complete Quiz"
-+ When completing a quiz, the loading message will now say "Grading Quiz" the entire time instead of "Loading Question" and then "Grading Quiz"
-+ Fix issue causing the `` element on course builder pages from being partially empty
-
-
-v3.14.8 - 2017-11-06
---------------------
-
-+ Lessons can be cloned via the "Clone" action from the lessons post table
-
-##### Builder Improvements & Fixes
-
-+ Add "Existing Lesson" functionality can now clone and attach the clone (when adding a lesson currently attached to a course) OR attach orphans
-+ Lessons created via Course builder will have their slugs renamed the first time the lesson title is updated via the builder
-+ No longer display notices on the course builder
-+ Add extra space to the scrollable area on course builder
-+ Removed logging and debugging functions from admin builder class
-+ JS-generated error messages on the course builder are now translatable
-
-##### Bug Fixes
-
-+ Fix: Show all memberships on dashboard
-
-
-v3.14.7 - 2017-10-25
---------------------
-
-##### Navigation Menu Items
-
-+ Add LifterLMS endpoints to your nav menu
-+ Add Sign In and Sign Out links which display conditionally based on whether or not the visitor is logged in
-+ Checkout the docs at [https://lifterlms.com/docs/lifterlms-navigation-menu-items/](https://lifterlms.com/docs/lifterlms-navigation-menu-items/)
-
-##### Bug Fixes
-
-+ Fix SQL query issue with orphaned lesson query on course builder
-+ Fix undefined index warning occurring during theme switches
-+ Fix issue causing duplicate error messages to display on certain servers
-
-
-v3.14.6 - 2017-10-21
---------------------
-
-+ Fix: `` are no longer stripped when exporting or duplicating courses (this applies to lessons within the courses as well)
-+ Fix: Achievements on student dashboard now output the correct achievement title
-+ Fix: Courses on student dashboard ordered by Order attributes will obey settings correctly
-
-
-v3.14.5 - 2017-10-14
---------------------
-
-+ Course builder will persist open/collapsed state of sections when they are re-ordered
-+ Course builder lessons in a section are draggable after reordering a section
-
-
-v3.14.4 - 2017-10-13
---------------------
-
-+ You were right and we were wrong & we are sorry. This update returns the ability to add existing lessons to a course via the course builder.
-+ Lessons added to a section will no longer visually disappear when editing a section title on the course builder
-+ BuddyPress integration BP template fixes
-
-
-v3.14.3 - 2017-10-12
---------------------
-
-+ Fix [lifterlms_my_account] shortcode issue affecting Divi theme users
-
-
-v3.14.2 - 2017-10-11
---------------------
-
-+ Instructor query utilizes correct `$wpdb->prefix` for filtering by role instead of `wp_` which will not work when the `$table_prefix` in wp-config.php is customized
-+ include the admin notices class when running database update functions
-
-
-v3.14.1 - 2017-10-10
---------------------
-
-+ Fix `[lifterlms_my_achievements]` shortcode
-+ Fix reference to deprecated core function related to checking the permissions of content restricted to a membership
-+ Builder titles will be saved on all field focusout/blur events, not just tab & enter key presses
-+ LifterLMS custom meta save metaboxes will not trigger actions during ajax requests
-+ Fix issue displaying certificates on admin panel reporting screens
-
-
-v3.14.0 - 2017-10-10
---------------------
-
-+ Updated JS for 3.13 course builder to address issues on PHP 5.6 servers with asp_tags enabled
-+ Normalized date returns with various dates related to enrollments, achievements, and certificates. These dates now utilize the WP Core `date_format` option.
-+ Fixed strict comparison issue related to database query abstract (affected checks for last page & first page on admin reporting screens)
-+ Added a new capability `llms_instructor` for admins, lms managers, instructors, and instructor's assistant to easily differentiate "instructors" from "students"
-+ Fix `$wpdb->prepare` issue related to notification queries. Fixes WP 4.9-beta issue.
-
-##### Student Dashboard Updates
-
-+ Achievements on student dashboard now viewable in popover modal.
-+ Achievements tab added to student dashboard
-+ Courses, Memberships, Achievements, and Certificates have been updated to have a unified style
-+ Courses & Memberships extend the default catalog tiles
-+ Courses shortcode has new parameters useful for displaying a list of a specific users courses only. [More info](https://lifterlms.com/docs/shortcodes/#lifterlms_courses)
-
-##### Deprecated functions
-
-+ `LLMS_Student_Dashboard::output_courses_content()` replaced with `lifterlms_template_student_dashboard_my_courses( false )`
-+ `LLMS_Student_Dashboard::output_dashboard_content` replaced with `lifterlms_template_student_dashboard_home()`
-
-##### Template Updates
-
-+ [achievements/loop.php](https://github.com/gocodebox/lifterlms/blob/master/templates/achievements/loop.php)
-+ [achievements/template.php](https://github.com/gocodebox/lifterlms/blob/master/templates/achievements/template.php)
-+ [certificates/loop.php](https://github.com/gocodebox/lifterlms/blob/master/templates/certificates/loop.php)
-+ [certificates/preview.php](https://github.com/gocodebox/lifterlms/blob/master/templates/certificates/preview.php)
-+ [loop.php](https://github.com/gocodebox/lifterlms/blob/master/templates/loop.php)
-+ [loop/content.php](https://github.com/gocodebox/lifterlms/blob/master/templates/loop/content.php)
-+ [loop/enroll-date.php](https://github.com/gocodebox/lifterlms/blob/master/templates/loop/enroll-date.php)
-+ [loop/enroll-status.php](https://github.com/gocodebox/lifterlms/blob/master/templates/loop/enroll-status.php)
-+ [loop/pagination.php](https://github.com/gocodebox/lifterlms/blob/master/templates/loop/pagination.php)
-+ [myaccount/dashboard-section.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/dashboard-section.php)
-+ [myaccount/dashboard.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/dashboard.php)
-+ [myaccount/header.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/header.php)
-
-##### Deleted Templates
-
-+ /myaccount/my-achievements.php
-+ /myaccount/my-courses.php
-+ /myaccount/my-memberships.php
-
-
-v3.13.1 - 2017-10-04
---------------------
-
-+ Fix caching issue preventing quiz pass & fail engagements from triggering.
-+ Fix issue causing the "Builder" link to display on the lesson post table screen.
-+ Fix issue preventing new courses & memberships from being moved from draft -> published.
-+ Fix `wpdb->prepare()` empty placeholder issue related to engagement queries. Fixes warning added in WP 4.9.
-+ Add better version numbering to static assets to prevent caching issues during plugin updates
-
-
-v3.13.0 - 2017-10-02
---------------------
-
-##### An All New Course Builder
-
-+ The "Course Outline" metabox found on the admin panel when editing any LifterLMS course has been savagely beaten. We stole its lunch money and we put it towards the construction of an all interface
-+ Asynchronous loading: fixes issues where very large courses would drastically slow and possibly even time out the loading of the course edit screen
-+ Course outline is now collapsible and expandable. This Fixes issues where it was very hard to move lessons and sections around on very large courses
-+ In addition to the familiar (and now improved) drag and drop functionality, you may now also move sections and lessons up and down with button clicks. You can also move lessons between sections with button clicks
-+ Add new lessons and sections with a click or drag a new lesson or section into the existing course
-+ Edit section and lesson titles faster with inline title editing. No more modals with a potentially slow ajax load to update a title. Click the title, change it, and exit the field to automatically save!
-+ Delete sections and lessons with the click of a button
-+ Quick links to view (frontend) and edit (backend) lessons
-+ Completely internationalized. Thanks for you patience translators!
-+ Want to know more? Check out the [docs](https://lifterlms.com/docs/using-course-builder/).
-
-##### New User Roles
-
-+ Added new roles to enable you to provide access to LifterLMS (settings, courses building, etc...) without having to make an admin or mess with complicated code snippets.
-+ New Roles:
-
- + LMS Manager: Do everything in LifterLMS and nothing with plugins, themes, core settings, and so on
- + Instructor: Create, update, and delete courses and memberships
- + Instructor's Assistant: Edit courses and memberships
-
-+ More details and a full list of new LifterLMS capabilities are available [here](https://lifterlms.com/docs/roles-and-capabilities/).
-
-##### Updates & Fixes
-
-+ Tested up to WordPress 4.8.2
-+ The "Lesson Tree" metabox has been replaced with a simplified version of the lesson tree and a link to the launch the Course Builder.
-+ Course and membership categories and tags will now display on their respective post tables for sorting and filtering. They can be disabled on a per-user basis via the screen options.
-+ Removed `var_dump()` from bbPress integration restriction check
-
-##### Uninstall Script
-
-+ Uninstall script now removes all the things LifterLMS creates in your database if a constant is defined. Read more [here](https://lifterlms.com/docs/remove-lifterlms-data-plugin-uninstallation/).
-
-##### Database Update
-
-+ Adds default Instructor data for all LifterLMS Courses & Memberships based off of the post author of the course or membership
-+ [More information](https://lifterlms.com/docs/lifterlms-database-updates/#3130)
-
-##### Template Updates
-
-+ [admin/post-types/students.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/post-types/students.php)
-+ [admin/reporting/tabs/students/courses.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/students/courses.php)
-
-##### Deprecated Functions
-
-+ The following AJAX functions are no longer utilized by LifterLMS core. If you are utilizing them find alternatives (they all exist). These will be remove in the next **major** release:
-
- + `LLMS_AJAX::get_achievements()`
- + `LLMS_AJAX::get_all_posts()`
- + `LLMS_AJAX::get_associated_lessons()`
- + `LLMS_AJAX::get_certificates()`
- + `LLMS_AJAX::get_courses()`
- + `LLMS_AJAX::get_course_tracks()`
- + `LLMS_AJAX::get_emails()`
- + `LLMS_AJAX::get_enrolled_students()`
- + `LLMS_AJAX::get_enrolled_students_ids()`
- + `LLMS_AJAX::get_lesson()`
- + `LLMS_AJAX::get_lessons()`
- + `LLMS_AJAX::get_lessons_alt()`
- + `LLMS_AJAX::get_memberships()`
- + `LLMS_AJAX::get_question()`
- + `LLMS_AJAX::get_sections()`
- + `LLMS_AJAX::get_sections_alt()`
- + `LLMS_AJAX::get_students()`
- + `LLMS_AJAX::update_syllabus()`
-
-##### Removed Filters
-
-+ The following filters have been removed and are no longer in use.
-
- + `lifterlms_admin_courses_access`: replaced with user capability `edit_courses`
- + `lifterlms_admin_membership_access`: replaced with user capability `edit_memberships`
- + `lifterlms_admin_reporting_access`: replaced with user capability `manage_lifterlms`
- + `lifterlms_admin_settings_access`: replaced with user capability `manage_lifterlms`
- + `lifterlms_admin_import_access`: replaced with user capability `manage_lifterlms`
- + `lifterlms_admin_system_report_access`: replaced with user capability `manage_lifterlms`
-
-
-v3.12.2 - 2017-09-18
---------------------
-
-##### Bug fixes
-
-+ Fix issue with LifterLMS bbPress integration preventing course-restricted topics from being accessible by enrolled students
-+ Fix an issue preventing students expired from courses via access expiration settings from being manually re-enrolled by admins
-
-##### Deprecations
-
-+ `LLMS_Student` class function `has_access` is scheduled for deprecation in next major release. Developers should switch to `LLMS_Student->is_enrolled()`
-
-
-v3.12.1 - 2017-08-25
---------------------
-
-+ Prevent duplicate loading of repeater metabox fields
-+ Fix undefined warning related to quiz completion
-+ Ensure that the bbPress course forums shortcode & widget properly cascade up when used on a lesson or quiz
-
-
-v3.12.0 - 2017-08-17
---------------------
-
-+ New quiz feature: randomize the order of quiz questions each attempt! Props to [Larry Groebe](https://github.com/larrygroebe)
-+ Fixed logic error related to access checks when bubbling from quiz->lesson->course
-+ Fixed JS loader check for tinyMCE editors in repeater fields
-+ Fixed CSS issue related to tinyMCE editors in repeater fields
-+ Fixed issue causing tinyMCE editors in repeater fields to stop working after reordering rows
-+ LifterLMS alert box notices are now cleared during shutdown instead of immediately after rendering. Fixes some plugin compatibility issues.
-+ Fix reference to invalid meta key on order notes admin screen.
-+ Record order note when orders with a defined length complete
-+ When a payment is scheduled for an order with a defined length, calculate end date if no end date is saved
-+ Minor updates to the `LLMS_Abstract_Integration` class
-+ Fix undefined reference error on 404 pages resulting from the preview manager.
-
-##### bbPress Integration Updates
-
-+ Add "Private" Course Forums which allows forums to be made available only to students enrolled in the associated course
-+ Adds a shortcode and widget for outputting a list of forums associated with a course
-+ Adds the ability to restrict the page set as the bbPress forum index (via bbPress settings) to be restricted to LifterLMS memberships
-+ Adds engagement triggers to allow engagements to be fired when a student posts a reply or creates a new topic
-+ Improves integration membership restriction check performance
-+ Migrated to the `LLMS_Abstract_Integration` class. Visually changes the settings display but has no other impact
-+ [More information](https://lifterlms.com/docs/lifterlms-and-bbpress/)
-
-##### BuddyPress Integration Updates
-
-+ Add the ability to restrict activity, group, and member directory pages to LifterLMS memberships.
-+ Migrated to the `LLMS_Abstract_Integration` class. Visually changes the settings display but has no other impact
-+ [More information](https://lifterlms.com/docs/lifterlms-and-bbpress/)
-
-##### Database update
-
-+ calculate and store end dates for orders created prior to version 3.11.0 which have a defined length and do not have a stored end date.
-+ migrate bbPress and BuddyPress options to `LLMS_Abstract_Integration` naming convention
-+ [More information](https://lifterlms.com/docs/lifterlms-database-updates/#3120)
-
-##### Admin Post Table Upgrades
-
-+ Lessons
- + Fix section titles which formerly were a dead link. Now they're just text
- + Add filtering the table by associated course
-+ Quizzes
- + Display associated course and lesson columns with links
- + Add filtering by associated course and/or lesson
-+ Quiz Questions
- + Display associated Quizzes with links
- + Add filtering by associated quiz
-
-##### Template Updates
-
-+ [admin/post-types/order-details.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/post-types/order-details.php)
-
-
-v3.11.2 - 2017-08-14
---------------------
-
-+ Tested up to WP Core 3.8.1
-
-##### System Status and Reporting updates
-
-+ System Report renamed to "Status"
-+ Added information of template overrides to the system report
-+ Added "Get Help" button linking to LifterLMS Ticketing submission page
-+ Added "Logs" tab which allows for easy viewing & management of LifterLMS logs
-+ Added "Tools and Utilities" tab and moved tools from the General Settings screen to this tab
-+ Improved Session Reset tool
-
-
-v3.11.1 - 2017-08-03
---------------------
-
-+ New shortcode: `[lifterlms_course_continue_button]`. See [shortcode docs](https://lifterlms.com/docs/shortcodes/#lifterlms_course_continue_button) for more information.
-+ New shortcode: `[lifterlms_lesson_mark_complete]`. See [shortcode docs](https://lifterlms.com/docs/shortcodes/#lifterlms_lesson_mark_complete) for more information.
-+ Added filter `llms_product_pricing_table_enrollment_status` to allow forceful display of course/membership pricing tables regardless of user enrollment status.
-+ Fix course author shortcode to allow usage outside of a course via the `course_id` parameter.
-
-##### Template Updates
-
-+ [product/pricing-table.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/pricing-table.php)
-+ [product/course/progress.php](https://github.com/gocodebox/lifterlms/blob/master/templates/product/course/progress.php)
-
-
-v3.11.0 - 2017-07-31
---------------------
-
-+ New engagement trigger "Student purchases access plan" allows engagements to be triggered from a specific access plan!
-+ Minor performance improvements to notification-related database queries
-+ Fix issue causing payment gateways to always use test mode links from Orders on the admin panel
-+ Added default email notification merge code for outputting an HTML divider
-+ Added new actions to Dashboard template to allow adding custom content to course tiles on the dashboard
-
-##### Template Updates
-
-+ [myaccount/my-courses.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/my-courses.php)
-
-
-v3.10.2 - 2017-07-14
---------------------
-
-+ Fix fatal error related to purchase receipts for trashed or deleted orders
-+ l10n "Reviews" tab title on course settings
-+ Remove commented out sample preheader text from email header template which was displaying in some email clients.
-
-##### Template Updates
-
-+ [emails/header.php](https://github.com/gocodebox/lifterlms/blob/master/templates/emails/header.php)
-
-
-v3.10.1 - 2017-07-12
---------------------
-
-##### Bugfixes
-
-+ Prevent errors related to attempting to display notification data related to deleted students
-+ Fix errors related to displaying notifications for deleted post (courses, sections, lessons, quizzes, etc...)
-+ Fix error causing email notifications being sent after related user has been deleted
-+ Fix typo preventing `llms_form_field()` from outputting textareas
-
-##### Updates
-
-+ Add new filter `llms_allow_subscription_cancellation` useful for preventing students from self-cancelling their subscriptions on the student dashboard. [More info](https://lifterlms.com/docs/lifterlms-filters/#llms_allow_subscription_cancellation).
-+ Add new API for querying students via AJAX select2 elements
-+ Select2 Post Query elements can now query multiple post types simultaneously
-+ Select2 Post Query elements can now support ``
-
-###### i18n
-
-+ Course option metabox for reviews is not translatable
-
-
-v3.10.0 - 2017-07-05
---------------------
-
-##### Recurring Order Management (for Admins)
-
-+ Admins can now edit various pieces of data related to a recurring order from the order screen on the admin panel
- + Allow editing of the Next Payment Date
- + Allow editing of the Trial End Date (when a trial is active for the order)
- + Edit Payment Gateway and related gateway fields (Customer ID, Source ID, and Subscription ID)
-+ If you're using LifterLMS Stripe or LifterLMS PayPal please update to the latest version of these add-ons to take advantage of these new features!
-
-##### Recurring Order Management (for Students)
-
-+ Students can now switch the payment method (source) for their recurring subscriptions from the student dashboard
-+ Students can now cancel their recurring orders to prevent future payments on recurring orders
-+ If you're using LifterLMS Stripe or LifterLMS PayPal please update to the latest version of these add-ons to take advantage of these new features!
-
-##### Automatic Payment Retries (for supporting gateways)
-
-+ LifterLMS Stripe and LifterLMS PayPal can now automatically retry failed payments to help recover lost revenue as a result of temporary declines to payment sources. Please see our documentation on this new feature [here](https://lifterlms.com/docs/automatic-retry-failed-payments/).
-+ If you're using LifterLMS Stripe or LifterLMS PayPal please update to the latest version of these add-ons to take advantage of these new features!
-
-##### Manual Payment Gateway Enhancements
-
-+ The Manual Payment Gateway (bundled with LifterLMS Core) can now handle recurring payments. For more information on utilizing recurring payments with the Manual Gateway please see the [gateway documentation](https://lifterlms.com/docs/using-lifterlms-manual-payment-gateway/).
-
-##### Updates and Fixes
-
-+ Force SSL setting now applies to Student Dashboard screens. This is useful as Google now recommends any page where a password is submitted should be encrypted and allows gateway communication from student dashboard screen with APIs that require an SSL connection.
-+ Fixed spelling error related to quizzes
-
-##### Templates changed
-
-**NEW**
-
-+ [checkout/form-switch-source.php](https://github.com/gocodebox/lifterlms/blob/master/templates/checkout/form-switch-source.php)
-+ [myaccount/view-order-transactions.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/view-order-transactions.php)
-
-**UPDATED**
-
-+ [admin/post-types/order-details.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/post-types/order-details.php)
-+ [myaccount/my-orders.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/my-orders.php)
-+ [myaccount/navigation.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/navigation.php)
-+ [myaccount/view-order.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/view-order.php)
-+ [quiz/summary.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/summary.php)
-
-
-v3.9.5 - 2017-06-13
--------------------
-
-+ Increased css z-index of basic notifications to prevent issues with themes that have high z-index on menus and other elements
-+ Increased the frequency of basic notification heartbeat check from 10 to 20 seconds
-+ Added filter to allow for customization of the notifications heartbeat interval, example [here](https://lifterlms.com/docs/lifterlms-filters/#llms_notifications_settings).
-+ Fixed error related to password reset when the "Disable Usernames" account setting is disabled
-
-
-v3.9.4 - 2017-06-12
--------------------
-
-+ Fix hardcoded db reference to `wp_posts` table
-
-
-v3.9.3 - 2017-06-09
--------------------
-
-+ Fix typo in notifications query
-
-
-v3.9.2 - 2017-06-07
--------------------
-
-+ Tested up to WordPress 4.8
-+ Fixed issue with merge codes on WP Editors for notifications, emails, etc...
-+ Update notifications query to only return results related to posts which actually exist. Prevents errors occurring when reviewing achievements on the student dashboard for courses, lessons, etc which have been deleted/trashed.
-+ Only display quiz time limit meta information when a time limit exists
-+ Fix display of quiz question order (question x of x)
-+ Improved logic powering quiz attempt grading for increased consistency, especially with regards to floats and rounding
-
-##### Templates Changed
-
-+ [quiz/meta-information.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/meta-information.php)
-+ [quiz/question-count.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/question-count.php)
-
-
-v3.9.1 - 2017-06-02
--------------------
-
-+ Fix engagement triggers with relation to quizzes to properly receive 3.9 api updates
-+ Fix quiz attempt counting issue resulting in the total attempts by a student always being one more than the actual value
-+ Fix membership access plan restrictions tooltip
-
-
-v3.9.0 - 2017-06-02
--------------------
-
-##### Quizzes
-
-+ All new quiz results interface for students
- + Donut charts are now animated
- + Donuts will be green for passing attempt and red for failing
- + Students can now review previous quiz attempts and summaries
- + Removed the juxtaposition of the current and best attempts to reduce confusion on the interface
- + Improved the consistency of the quiz meta information markup
- + Adjusted various pieces of language for an improved student experience
-+ Improvements to the quiz taking experience
- + Added the LLMS_Spinner (seen on checkout screens and various places on the admin panel) and various loading messages when starting quiz, transitioning between questions, and completing a quiz
- + Better error handling and management should issues arise during a quiz
- + Better unload & beforeunload JS management to warn students when they attempt to leave a quiz in progress
-+ Improved quiz data handling and management
- + Improved API calls and handlers related to taking quizzes for increased performance and consistency
- + quiz data can now be programmatically queried via consistent apis and data classes, see `LLMS_Student->quizzes()` and `LLMS_Quiz_Attempt`
-+ Quizzes no longer rely on session and cookie data. All quiz data will always be saved directly to the database and related to the student. Fixes an issue on certain servers preventing student from starting quizzes.
-+ Deprecated `LLMS_Quiz::start_quiz()`, `LLMS_Quiz::answer_question()`, and, `LLMS_Quiz::complete_quiz()`
- + Ajax handler functions of the same names should be used instead.
- + To programmatically "take" quizzes use related functions of similar names from the `LLMS_Quiz_Attempt` class
-
-##### Templates changed
-
-+ New
- + [quiz/meta-information.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/meta-information.php)
-
-+ Updated
- + [admin/reporting/tabs/students/courses.php](https://github.com/gocodebox/lifterlms/blob/master/templates/admin/reporting/tabs/students/courses.php)
- + [content-certificate.php](https://github.com/gocodebox/lifterlms/blob/master/templates/content-certificate.php)
- + [course/complete-lesson-link.php](https://github.com/gocodebox/lifterlms/blob/master/templates/course/complete-lesson-link.php)
- + [myaccount/my-notifications.php](https://github.com/gocodebox/lifterlms/blob/master/templates/myaccount/my-notifications.php)
- + [quiz/next-question.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/next-question.php)
- + [quiz/previous-question.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/previous-question.php)
- + [quiz/question-count.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/question-count.php)
- + [quiz/quiz-question.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/quiz-question.php)
- + [quiz/quiz-wrapper-end.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/quiz-wrapper-end.php)
- + [quiz/quiz-wrapper-start.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/quiz-wrapper-start.php)
- + [quiz/results.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/results.php)
- + [quiz/return-to-lesson.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/return-to-lesson.php)
- + [quiz/single-choice_ajax.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/single-choice_ajax.php)
- + [quiz/start-button.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/start-button.php)
- + [quiz/summary.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/summary.php)
-
-+ Removed
- + quiz/attempts.php - replaced by [quiz/meta-information.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/meta-information.php)
- + quiz/passing-percent.php - replaced by [quiz/meta-information.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/meta-information.php)
- + quiz/time-limit.php - replaced by [quiz/meta-information.php](https://github.com/gocodebox/lifterlms/blob/master/templates/quiz/meta-information.php)
-
-##### Fixes
-
-+ Student Dashboard notifications page will not display pagination links unless there's results to page through
-+ Student Dashboard notifications page will now display a message when no notifications are found
-+ Certificate previewing now takes into consideration the preview setting roles to allow admins (or other roles) to preview certificates
-+ Made student name self fallback (you) i18n friendly
-
-
-v3.8.1 - 2017-05-21
--------------------
-
-+ Fix merge code issue related to course title on quiz notifications
-
-
-v3.8.0 - 2017-05-20
--------------------
-
-+ Automatic email and basic (on-screen) notifications for various events within LifterLMS
- + All notifications can be customized
- + Email notifications can be optionally sent to custom email address, course authors, and more
-+ Students will automatically receive email receipts when making purchases and when recurring access plans rebill
-+ Hidden Access Plans
-+ Add a "Purchase Link" view button to access plans so admins can quickly grab the direct URL to an access plan
-+ Notifications history screen on Student Dashboard to review past notifications that have been received
-+ Updated LLMS_Email class and functionality
-+ Email templates have been completely rewritten and styled
-+ Updated and rewritten password reset flow
-+ Earned certificates are only accessible by the student who earned the certificate
-+ Added the functionality for image upload via options & settings api
-+ Removed a handful of unused templates related to LifterLMS certificates that were replaced a long time ago but still existed in the codebase for unknown reasons.
-+ Fixed filter on engagements settings page
-+ Minor adjustments to language and settings order on Engagements settings screen for email settings
-+ Email Header Image field is now an upload field as opposed to a "paste a url here" setting
-+ Phone number recorded to order and displayed on order for admin panel during purchases
-+ Order details now display full country name as opposed to the country code
-+ Fix installation script to ensure admin can preview by default
-
-
-v3.7.7 - 2017-05-16
--------------------
-
-+ Updated a few strings on the admin panel to be translatable
-+ Fix PHP warning output during plugin activation
-+ Fix reporting issue related to outputting quiz question answers where the correct answer is the first available answer
-+ Fix PHP 7.1 issue on the checkout screen
-+ Removed some unnecessary files from vendor libraries
-
-
-v3.7.6 - 2017-05-05
--------------------
-
-+ New translations for new categories on Add-ons screen
-+ Update to general settings which utilizes featured items from the general settings screen
-+ Update readme & related meta files
-+ Removed advert image files
-
-
-v3.7.5 - 2017-05-02
--------------------
-
-+ Upgrade WP Session Manager to latest version
-+ Code style updates across most files in codebase to bring to most recent styling guidelines put forth by [WP Coding Standards](https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards)
-
-
-v3.7.4 - 2017-04-26
--------------------
-
-+ When cloned site detected automatically disable recurring_payments feature & trigger an action 3rd parties can hook into for custom 3rd party features
-+ Add better JS dependency management to prevent issues where assets loaded in the wrong order
-+ Fix issue where dismiss icon on LifterLMS admin notices was positioned poorly on non-LifterLMS admin screens
-+ Fix issue preventing edit account form submission on student dashboard when password strength meter is disabled
-
-
-v3.7.3 - 2017-04-21
--------------------
-
-+ Fixed issues where Course Track checks were not functioning properly with relation to prerequisite associations
-+ `LLMS_Generator` can now be used to generate course(s) from a raw array of course data using the SingleCourseGenerator and BulkCourseGenerator
-+ `LLMS_Generator` default post status can be set at runtime using `set_default_post_status()`
-+ Fixed an issue causing JS errors on the `wp-login.php` screen
-+ Tested up to WordPress 4.7.4
-
-### Template Updates
-
-+ `course/prerequisites.php` - Prerequisite checks check for 'course_track' rather than 'track'
-
-
-v3.7.2 - 2017-04-17
--------------------
-
-+ Resolved a JS errors on admin panel resulting from overly strict asset loading added in 3.7.0
-
-
-v3.7.1 - 2017-04-14
--------------------
-
-+ Fix php notice when no roles are selected for preview management feature
-
-
-v3.7.0 - 2017-04-13
--------------------
-
-**Preview Management**
-
-+ All new view management for users to make editing content easier for course builders
-+ Admins may customize the roles of users who can access view management
-+ Qualifying users can view content as an enrolled student or a non-enrolled visitor
-+ Default view allows users to bypass all restrictions (drip, membership, enrollment, and so on) for easy course navigation and management
-+ Thanks to [@fabianmarz](https://github.com/fabianmarz) and the team at and the team at [netzstrategen](https://github.com/netzstrategen) for their assistance with this feature!
-
-**Improvements**
-
-+ Edit Account Screen now utilizes updated APIs for better customization management
-+ Improve intelligence of enqueued admin js & css files
-
-**Fixes**
-
-+ Fixed coupon calculation issue related to currencies using commas as the decimal separator
-+ Properly display track related information when reviewing engagements on the admin panel
-+ fixed issue preventing course tracks from being recorded as completed
-
-
-v3.6.2 - 2017-04-10
--------------------
-
-+ Fix issue preventing export of vouchers via email
-+ added action `after_llms_mark_complete` to allow custom actions to happen after a course, lesson, etc... is marked complete
-
-
-v3.6.1 - 2017-03-28
--------------------
-
-+ Fix issue related to taking a quiz for the first time when no quiz data is available for a user
-+ Fix issue when course outline shortcode is displayed on non LifterLMS post types
-
-
-v3.6.0 - 2017-03-27
--------------------
-
-+ Courses and Memberships now have settings to control their visibility in catalogs and search results. For more information visit the [knowledge base](https://lifterlms.com/docs/course-membership-visibility-settings/).
-+ Courses are now a searchable post type. All existing courses will automatically remain excluded from search via new catalog visibility settings. New courses added after this date will be searchable unless the visibility is updated prior to publishing the course.
-+ Added options (and filters) to allow customization of the order of courses displayed on the Student Dashboard
- + Existing behavior (ordered by enrollment date, most recent to least recent) will be preserved
- + New installations will default (by popular demand) to Order (Low to High) which will obey the "Order" settings of courses
- + Customize or update the order for your site by visiting LifterLMS -> Settings -> Accounts and changing the setting for "Courses Sorting" under "Account Dashboard"
-+ New Shortcodes:
- + `[lifterlms_course_author]` - Display the Course Author's name, avatar, and (optionally) biography. [Info & Usage](https://lifterlms.com/docs/shortcodes/#lifterlms_course_author)
- + `[lifterlms_course_continue]` - Display a progress bar and continue button for enrolled students only. [Info & Usage](https://lifterlms.com/docs/shortcodes/#lifterlms_course_continue)
- + `[lifterlms_course_meta_info]` - Display all meta information for a course. [Info & Usage](https://lifterlms.com/docs/shortcodes/#lifterlms_course_meta_info)
- + `[lifterlms_course_prerequisites]` - Display a notice describing unfulfilled prerequisites for a course. [Info & Usage](https://lifterlms.com/docs/shortcodes/#lifterlms_course_prerequisites)
- + `[lifterlms_course_reviews]` - Display reviews and review form for a LifterLMS Course. [Info & Usage](https://lifterlms.com/docs/shortcodes/#lifterlms_course_reviews)
- + `[lifterlms_course_syllabus]` - Display the course syllabus. [Info & Usage](https://lifterlms.com/docs/shortcodes/#lifterlms_course_syllabus)
-+ "Back" & "Next" pagination links on Student Dashboard View Courses are now buttons instead of text links
-+ Fixed an issue preventing pagination links from displaying on the "View Courses" page of the student dashboard when the endpoint slug was customized
-+ Course and Membership taxonomy archive pages will now properly match the heights of tiles
-+ Fixed typo in `lifterlms_get_enrollment_status_name` filter
-+ Fixed typo in `lifterlms_get_order_status_name` filter
-+ Reduced complexity and redundancy of `llms_get_enrolled_students()`
-
-
-v3.5.3 - 2017-03-21
--------------------
-
-+ Ensure that access plan subscription schedule details are fully translatable
-+ Ensure "Services" title on admin add-ons screen can be translated
-+ Fix "View All My Courses" link on Student Dashboard to obey endpoint slug customizations
-+ Membership restriction checks only run on singular posts (not on archives)
-+ Ensure `[lifterlms_course_outline]` and Course Syllabus widget can be used on Quizzes.
-+ Fix reporting widgets for course & lesson completions to report the correct completion types only
-
-
-v3.5.2 - 2017-03-16
--------------------
-
-+ Fix course outline shortcode when used on a lesson
-+ Fix custom html form fields produced by `llms_form_field()`
-
-
-v3.5.1 - 2017-03-15
--------------------
-
-+ Lessons marked as incomplete will now display as incomplete in the course outline generated by the above Course Syllabus Widget and the course outline shortcode
-+ Updated course outline shortcode / course syllabus widget to utilize new APIs
-+ The template at `templates/course/outline-list-small.php` updated to reflect above changes. If you're overriding this template please review the changes and update accordingly
-+ Fix issue preventing course auto advance on lesson completion
-+ Shortcodes added within `[lifterlms_hide_content]` will now be processed
-
-
-v3.5.0 - 2017-03-13
--------------------
-
-+ New course setting **Retake Lessons** allows students to mark lessons as "incomplete" after completing lessons. Admins may enable this site-wide setting under Settings -> Courses.
-+ Course and Membership catalog per page settings will now only accept numbers
-+ "Catalogs" settings tab has been split into "Course" and "Membership" settings
-+ Settings added via filter `lifterlms_catalogs_settings` will be added to the "Course" settings tab and deprecated in the next major release
-+ Default course and membership catalog courses per page changed to 9. Previous default was 10 which results in a 4th row on catalogs with only one item.
-+ Tweaked size of LifterLMS admin tab menu items
-+ Pass API Mode Context to links generated by LifterLMS payment gateways
-+ Fixed typo on general settings screen
-+ Moved LifterLMS Add-on Banners from General Settings to an Add-Ons menu
-+ If required fields exist on checkout and are empty during free quick enrollment users will be redirected to the normal checkout page where they can enter required fields
-+ Updated action scheduler lib to latest version. Minor changes, fixes compatibility with WooMemberships.
-+ Recent activity stats widgets on general settings screen updated to be more reliable and accurate (and performant!)
-+ Added 3 new widgets to enrollments reporting tab: courses completed, lessons completed, and user registrations
-
-
-v3.4.8 - 2017-03-07
--------------------
-
-+ Tested to WordPress Version 4.7.3
-+ Fixed undefined index notice on admin panel
-+ Added a real description to new `_nx()` functions
-+ Access plan trial periods now allow proper translations
-
-
-v3.4.7 - 2017-03-03
--------------------
-
-+ Ensure run when the `lifterlms_db_version` option doesn't exist in the database
-
-
-v3.4.6 - 2017-03-03
--------------------
-
-+ Fixed a text domain typo preventing translation of "Correct Answer" on quiz results screen
-+ Ensure access plan "periods" are translatable
-+ Now using `date_i18n()` for certificate dates so that dates are properly localized
-+ Load plugin textdomain during `init` rather than `plugins_loaded`
-
-
-v3.4.5 - 2017-02-23
--------------------
-
-+ Ensure free access plans are available to logged out users
-
-
-v3.4.4 - 2017-02-22
--------------------
-
-+ Added a popup to warn students when leaving a quiz they've already started
-+ Enable removal of student quiz attempts by admins from student reporting screens
-+ Fix an undefined error on quiz reporting screens for incomplete quizzes
-+ Display incomplete (abandoned) quizzes as incomplete (instead of as still running) on the quiz reporting screen
-+ Prevent logged in users from bypassing membership restrictions for free members-only access plans
-
-
-v3.4.3 - 2017-02-20
--------------------
-
-+ Fix issue with bbPress integration so that forums restricted to multiple memberships allow users of at least one membership that the forum is restricted to access topics within that forum
-+ Ensure that the correct ajax url is used for quizzes, resolves issue for sites utilizing `FORCE_SSL_ADMIN`
-+ Refactored database background update scripts for increased reliability & performance
-+ Database update 3.3.0 moved to 3.4.3 in order to accommodate users who were unable to run the 3.3.0 update, please read the [3.4.3 database update notes](https://lifterlms.com/docs/lifterlms-database-updates/#343) for more information.
-+ WIP: refactoring shortcodes to a more sane set of functions and classes
-
-
-v3.4.2 - 2017-02-14
--------------------
-
-+ Backwards compatible css for tooltips
-
-
-v3.4.1 - 2017-02-14
--------------------
-
-+ Password strength meter now functions correctly when using the [lifterlms_registration] shortcode
-+ Ensure open registration with required voucher prevents registration with invalid vouchers
-+ Lesson completion via quiz completion only recorded the first time the quiz is completed
-+ Fix issue preventing membership catalog from obeying the catalog's ordering settings
-+ Prevent duplicate engagements from being triggered
-+ Admin tables can display percentages as a progress bar!
-+ Students reporting table displays overall progress as a progress bar
-+ Refactored frontend assets class to allow better management of inline scripts
-
-
-v3.4.0 - 2017-02-10
--------------------
-
-+ Enrollment for free access plans has improved based on your feedback. For more information see [https://lifterlms.com/docs/checkout-free-access-plans/](https://lifterlms.com/docs/checkout-free-access-plans/)
-+ Upgraded Student Management Table for courses and memberships:
- + Allow searching students by name / email
- + Allow filtering of students by current status
- + Allow sorting of students by name, user id, status, and enrollment updated date
- + Added student's grade to the table (courses only)
- + Table pagination allows skipping to the first and last pages
- + Student names link to full student reporting screen
- + Student IDs added to the table. ID links to the WP User Edit screen which was previously accessible by clicking the student's name
- + Utilizing improved database queries for displaying data on the table
-+ One-click bulk enrollment of all current members of a membership into an auto-enrollment course. More info [here](https://lifterlms.com/docs/membership-auto-enrollment/#bulk-enrollment)
-+ Students reporting table pagination can now jump to first and last page
-+ Students reporting table pagination now displays current page and total number of pages
-+ Added new class `LLMS_Student_Query` which is modeled, loosely, off of the `WP_User_Query` and allows for querying student data in relation to courses
-+ `LLMS_Admin_Table` abstract now supports filtering and jump to first and last page pagination options
-+ `llms_get_enrolled_students` now utilizes `LLMS_Student_Query` and resolves a bug where some users returned by this query would be returned with the incorrect status.
-+ Ensure `LLMS_Course::has_prerequisite( 'course' )` & `LLMS_Course::has_prerequisite( 'track' )` always return booleans
-+ Made a small performance tweak for courses without audio / video embeds
-+ Fix coupon expiration dates check to be more i18n friendly
-+ Update `LLMS_Coupon` class to utilize 3.3.0 class property enhancements
-+ added `llms_current_time`, a pluggable wrapper for `current_time()` to enable easier unit testing of date-related functions
-+ Shortcodes within course restriction messages are now handled properly to output their intend content rather than the raw shortcode
-+ Ensure the Page Attributes area is available on lessons so WordPress 4.7 custom post type page templates can be utilized
-
-
-v3.3.1 - 2017-01-31
--------------------
-
-+ Tested up to WordPress core 4.7.2
-+ Added new engagement triggers for Quiz completion, quiz failure, and quiz passed.
-+ Refactored Lesson Completion for sanity
-+ Added function `llms_mark_complete()` for simple programmatic completion of courses, sections, lessons, and tracks. See [usage docs](https://github.com/gocodebox/lifterlms/blob/master/includes/functions/llms.functions.person.php#L146-L162) for more information.
-+ Class function `LLMS_Lesson::mark_complete()` has been staged for deprecation. It will still function but developers should update code to use above function.
-+ LifterLMS background updaters will now display a progress report on the admin panel to add some transparency to how the update is doing.
-+ Added `author` support to `llms_membership` post type
-+ Added a way to remove all LifterLMS-generated data during plugin uninstallation.
-+ `llms_get_post()` will now work with any LifterLMS Post Model post types
-+ Removed references to `LLMS_Activate` class which was removed back in 2.0.
-+ Changed include method to session related classes for better handling via phpunit
-+ Refactored some of the `LLMS_Install` class for reliability and test coverage
- + Changed order of table and option creation during installation. Prevents a database warning from being thrown during installation.
- + Added function for retrieving default difficulty categories added during installation
- + Added function for removing default categories added during installation
-+ `llms_are_terms_and_conditions_required()` ensure the page id used in this function is an absint
-+ Removed redundant function `LLMS_Lesson::single_mark_complete_text()`
-+ Add css classes for buttons to be auto-width rather than the width of their containers
-+ Fix ID of engagement email class. Allows some filters and actions to actually be used.
-+ Properly display quiz failures as failures on the quiz results screen
-+ `loop/feature-image.php` now works for unsupported PHP 5.5 and down
-+ Fix issue with modifying section titles from within the course builder
-+ Fix undefined warning resulting from admin notice "flash" being undefined on pre-existing saved notices
-+ Updated template at `templates/course/complete-lesson-link.php` to include a few new CSS classes and utilize `llms_form_field()` to standardize buttons
-
-
-v3.3.0 - 2017-01-23
--------------------
-
-+ New course option allows displaying the video embed in place of the featured image on course tiles displayed on the course catalog screen
-+ Courses can now be exported individually or in bulk. Export of a course includes all course content, sections, lessons, and quizzes.
-+ Courses can now be duplicated. Duplication duplicates all course content, sections, lessons, and quizzes.
-+ Upon completion of the Setup Wizard a sample course can be automatically installed.
-+ Postmeta keys for Lessons and Sections which denote their relationship to their parents have been renamed for consistency, database upgrade 330 included in this release will rename the keys automatically. [Read more here](https://lifterlms.com/docs/lifterlms-database-updates/#330)
-+ Update to `LLMS_Post_Model` to allow easier programmatic definition and handling of extending class properties
-+ classes extending `LLMS_Post_Model` can now be serialized to json and converted to arrays programmatically
-+ new function `llms_get_post()` allows easier instantiation of an `LLMS_Post_Model` instance
-+ Added LifterLMS Database Version to the system report
-
-
-v3.2.7 - 2017-01-16
--------------------
-
-+ Fix float conversion of large numbers with relation to coupon price adjustments
-
-
-v3.2.6 - 2017-01-16
--------------------
-
-+ Tested up to WordPress Core 4.7.1
-+ Fix the display of track-related engagements on the engagement admin screen
-+ Fix float conversion of large numbers with relation to prices
-
-
-v3.2.5 - 2017-01-10
--------------------
-
-+ New shortcode: `[lifterlms_pricing_table]` allows pricing table display outside of a course or membership. See [https://lifterlms.com/docs/shortcodes/#lifterlms_pricing_table](https://lifterlms.com/docs/shortcodes/#lifterlms_pricing_table) for usage information.
-+ New shortcode: `[lifterlms_access_plan_button]` allows custom buttons for individual access plans to be created outside of a pricing table. See [https://lifterlms.com/docs/shortcodes/#lifterlms_access_plan_button](https://lifterlms.com/docs/shortcodes/#lifterlms_access_plan_button) for usage information.
-+ ensure every return from `llms_page_restricted` is filtered. Thanks to @matthalliday
-+ Ensure purchase page can only load for valid access plans
-+ Course / Membership taxonomy archives now obey orders defined by their respective catalog settings
-+ Fix language of automatic validation error message for numeric field types
-+ Fix translation function error causing course syllabus to display incorrect "x of x" text
-+ Added correct text domain to an i18n string displayed on the checkout confirmation screen, thanks @ymashev
-+ Ensure search result pages are viewable by members and non members regardless of result membership restrictions (unless site is restricted to sitewide membership)
-
-
-v3.2.4 - 2017-01-03
--------------------
-
-+ Fixed tooltips on lesson preview tiles (in course syllabus and on next/prev tiles inside lessons) to show the actual reason the lesson is inaccessible rather than always showing a generic enrollment message
-+ Removed the language "You must enroll in this course to unlock this lesson" in favor of "You do not have permission to access to this content" as a restriction message fallback when no better message is available
-+ "Quiz Results" title is now translatable
-+ Removed deprecated JS file "llms-metabox-data.js" which controlled UI/X for 2.x subscription data on courses and memberships
-+ Non LMS Content (pages, posts, forums, etc...) restricted to multiple memberships will now correctly allow users access to the content as long as they have access to at least one of the memberships
-+ Fixed a redirect loop encountered if direct access to a lesson with an incomplete prerequisite was attempted
-
-
-v3.2.3 - 2016-12-29
--------------------
-
-+ Progress and Grade are now sortable columns on the student reporting table
-+ Make enrollment statuses translatable for courses and memberships on the Student Dashboard
-+ "Sign Out" text on student dashboard is now translatable, thanks @yumashev
-+ Fixed prerequisite lesson display on lesson post tables
-+ Ensure post archive (blog) is visible regardless of post membership restrictions
-+ Moved lesson post table management functions to their own class
-+ Unused section post table management functions removed
-
-
-v3.2.2 - 2016-12-21
--------------------
-
-+ Adds filter `llms_student_dashboard_login_redirect` allowing customization of the redirect upon login via the Student Dashboard
-+ Adds a shortcode parameter, `login_redirect` to `[lifterlms_my_account]` allowing customization of the redirect upon login via the Student Dashboard
-+ Adds a new tool under "Tools and Utilities" on the LifterLMS Settings screen which allows users to clear the cached student overall progress and overall grade data
-+ Fixes a compatibility issue with the OptimizePress live editor
-+ Adds a text domain to a translation function where none was present, rendering the string untranslatable
-
-
-v3.2.1 - 2016-12-14
--------------------
-
-+ Fix operator position on `is_complete` check
-
-
-v3.2.0 - 2016-12-13
--------------------
-
-##### LifterLMS Reporting Beta
-
-+ Students overview displays broad information about your students in a searchable and sortable table
-+ Review data about individual students including:
- + Membership enrollments and statuses
- + Course enrollments, status, and progress
- + Quiz attempts and and their submitted answers
- + Earned achievements and certificates
-+ Sales and Enrollments analytics are now found under the "Reporting" screen
-+ Feedback on the beta? Let us know at [https://lifterlms.com/docs/lifterlms-reporting-beta/](https://lifterlms.com/docs/lifterlms-reporting-beta/)
-
-##### Other Updates & Fixes
-
-+ Lesson completion checks now look for at least one record of the completed lesson as opposed to looking for exactly one
-+ Fix positioning of teacher avatar on course/membership tiles
-+ Remove explicit color definition from Student Dashboard navigation links for greater theme compatibility
-
-
-v3.1.7 - 2016-12-06
--------------------
-
-+ Added support for WordPress Twenty Seventeen theme
-+ Improved the messaging and functions related to LifterLMS Sidebar support
-+ Add alternate language for a quiz requiring 100% grade to pass
-+ Added CSS class `.llms-button-primaray` to lesson "Mark as Complete" buttons
-+ Add box-sizing css rule to LifterLMS form field elements. Fixes layout issues on themes that don't border-box everything.
-+ Fix an issue that prevented the admin notice to enable/disable recurring payments from clearing when a button was pressed from screens other than the LLMS Settings screen
-+ Fix next payment date error when viewing a cancelled recurring order on the student dashboard
-+ Recurring payments now scheduled based on UTC time in accordance with the action scheduler which executes based on UTC rather than site timezone
-+ Add existing lesson to course modal now relies on async search. Improves performance and prevents timeouts on sites with a 500+ lessons
-+ Removed 2.x -> 3.x update notification message
-+ Fix an issue with comment counting on PHP7
-+ Updated action scheduler library to latest version
-
-
-v3.1.6 - 2016-11-11
--------------------
-
-+ Handle empty responses on analytics more responsibly
-+ Fix typo preventing completed orders from displaying in analytics when using course / membership filters
-+ Quiz builder now leverages llmsSelect2 rather than select2 directly. Resolves a number of theme and plugin compatibility issues.
-+ Prevent bullets and weird margins on LifterLMS notices with slightly more specific CSS
-+ Login error messages will now display regardless of whether or not open registration is enabled
-+ Attempts to access quizzes are redirected or error messages are output when student is not enrolled.
-
-
-v3.1.5 - 2016-11-10
--------------------
-
-+ Fix Month display on Analytics Screen
-
-
-v3.1.4 - 2016-11-10
--------------------
-
-+ Progress bars are slightly more intelligent to prevent a widowed "%" on themes with larger base font sizes
-+ LifterLMS Merge code button only displays where it's supposed to now
-+ Fix issue where users removed from a membership were not properly removed from courses they were auto-enrolled into because of that membership
-+ Fix analytics screen JS parsing error
-
-
-v3.1.3 - 2016-11-04
--------------------
-
-+ Added new action hooks to the course syllabus widget/shortcode template
-+ Added a small text link on the student dashboard which links to the full courses list of the dashboard
-+ Display order revenue for legacy orders instead of 0
-+ Make the Order History table on the Student Dashboard responsive
-+ Only display _published_ courses on the student dashboard
-+ Fixes a conflict with WP Seo Premium's redirect manager which was creating access plan redirects
-+ Reenable course review options on the admin panel
-+ Updates review output method so reviews are now output via a removeable action
-
-
-v3.1.2 - 2016-10-31
--------------------
-
-+ Update all course and lesson templates to rely only on `global $post` rather than on `$course` and `$lesson` globals which are working inconsistently across environments
-+ Fix typo related to the line-height of LifterLMS order notes on the admin panel. Thanks [@edent](https://github.com/edent)!
-
-
-v3.1.1 - 2016-10-28
--------------------
-
-+ Shortcode `[lifterlms_hide_content]` has some new functionality. See [documentation](https://lifterlms.com/docs/shortcodes/#lifterlms_hide_content) for usage and more information!
-+ Fix logic when determining if terms and condition checkboxes should be displayed on checkout & open registration.
-+ Define a placeholder on the Terms & Conditions page selection so it can be removed
-+ Explicitly declare `LLMS_Lesson` on lesson audio/video embed templates instead of relying the global `$lesson`. Some environments appear to be losing the global.
-+ Removed unused lesson template "full-description"
-
-
-v3.1.0 - 2016-10-27
--------------------
-
-+ New engagement triggers available to allow engagements to be fired when a student enrolls into a course or membership!
-+ Add custom email addresses for to, cc, and bcc when sending email engagements
-+ New Merge Code button for easy merging of custom merge codes when creating emails
-+ Added post table data for LifterLMS Engagements
-+ Added new filter `llms_email_engagement_date_format` which allows customization of the format of the `{current_date}` merge code available in LifterLMS Emails
-+ Added explicit max width declaration to images within LLMS Catalogs to prevent image overflow. Fixes some theme compatibility issues.
-+ Optimize course and lesson audio video templates for faster loads
-+ Fix course & lesson video to load videos instead of duplicating audio embeds
-+ Fix coupon usage query so that coupons cannot be used more than the maximum number of times. Also now displays the correct number of coupons used on the coupons post table.
-+ Fix LLMS Engagement Email merge codes to work in subject line
-
-
-v3.0.4 - 2016-10-20
--------------------
-
-+ Added shortcode `[lifterlms_login]` so the login form can be displayed. Information usage at [https://lifterlms.com/docs/shortcodes/#lifterlms_login](https://lifterlms.com/docs/shortcodes/#lifterlms_login)
-+ Added internal function `LLMS_Student->get_name()`
-+ Three basic course difficulties will be automatically created on installation and upgrades
-+ Updated course difficulty save methods to rely only on the taxonomy rather than the taxonomy and postmeta table
-+ Updated admin settings screens to only flush rewrite rules on screens where it is necessary to update rewrites
-+ Fix issue with customization of LifterLMS account endpoint URLs
-+ Fix a conflict with [Redirection](https://wordpress.org/plugins/redirection/) url monitoring that was causing redirects to be created from Courses and Memberships to the site home page automatically whenever updating the post
-+ Fix an undefined index warning on courses / memberships when updating post data
-+ Remove confusing and invalid warning message from Membership post screen on admin panel
-
-
-v3.0.3 - 2016-10-17
--------------------
-
-+ Added filter `llms_show_preview_excerpt` which can be used to hide the excerpt on course syllabus or next/back preview tiles in lesson navigation
-+ Fix logic so that only free lessons are marked as free lessons post 3.0 upgrade
-+ Fix incorrect display of the "restricted" and "non-restricted" content areas for memberships
-+ Fix undefined index warning output by membership metaboxes
-+ Fix dead like under "Force SSL" checkout setting
-+ Course & Membership tiles output by course or membership shortcodes now automatically match column heights like the default catalogs do.
-+ Correctly register students as the "Student" Role
-+ Database Upgrade script converts users with the role "studnet" to "student"
-
-
-v3.0.2 - 2016-10-14
--------------------
-
-+ Added action `lifterlms_before_student_dashboard_tab`
-+ Added action `lifterlms_after_student_dashboard_greeting`
-+ Added action `lifterlms_after_student_dashboard_tab`
-+ Added action `lifterlms_sd_before_membership`
-+ Added action `lifterlms_sd_after_membership`
-+ Fix membership shortcode
-+ Fix issue that prevented "Student Dashboard" from rendering if the page was set as the child of another page
-+ Fix undefined function error in admin notices
-+ Fix nonce errors resulting from admin notice html being served from the database rather than being dynamically generated
-+ Fix db upgrade script which was enabling course time period for restrictions for all courses regardless of their pre 3.0 restriction settings
-+ Fix db upgrade script that was causing empty sale dates to show start of unix epoch b/c they were empty strings
-+ Fix Javascript parse error preventing section & lesson editing from within the course outline on the admin panel
-+ Fix lesson icons from highlighting lesson settings like drip delay & quiz association
-+ Updated course outline color scheme to match the 3.0 admin color scheme overhaul
-+ `LLMS_Lesson::get_assigned_quiz()` will output deprecation warnings for those using debug mode. LLMS core no longer uses this function and will be deprecated in the next major release.
-+ Handle enrollment status of legacy orders based on enrollment rather than enrollment AND order status
-
-
-v3.0.1 - 2016-10-13
--------------------
-
-+ Properly prefix `llms_is_ajax()` to prevent 500 errors when leaving HTTPS forced checkout screen
-+ Fix student unenrollment from memberships which was leaving a trace of enrollment in the user_meta table
-+ Update student dashboard nav list items to have more specific no styles to prevent "double discs" on various themes
-+ Return course progress bar and "continue" button which was accidentally removed
-+ Added core support for "Divi" theme sidebars
-
-
-v3.0.0 - 2016-10-10
--------------------
-
-**This is a massive update which _breaks_ backwards compatibility for many LifterLMS features. A database migration is also necessary for upgrading users to reformat certain pieces of information which are being accessed differently in 3.0.0**
-
-**We strongly recommend that you backup your website before upgrading and, if possible, test LifterLMS 3.0.0 in a non-public-facing testing environment to ensure compatibility with your theme and other plugins and to ensure that 3.0.0 changes do not adversely affect your existing website.**
-
-**Please thoroughly read the following changelog and, if necessary, submit support tickets or post in the forums with any questions _prior_ to upgrading. LifterLMS Support _cannot_ and _will not_ manually resolve migration issues which may arise from upgrading to 3.0.0.**
-
-+ New shortcodes to be documented later, checkout "includes/class.llms.shortcodes.php" if you're feeling anxious
-+ All kinds of CSS changes to make LifterLMS, in general, be a little less old looking
-+ Added a number of CSS classes to various areas in the Checkout template at "templates/checkout/form-checkout.php"
-+ Added a "Cancel" button that allows you to hide the coupon form if the user decides not to add a coupon
-+ Removed jQuery animations from the coupon form toggle in favor of a CSS class toggle. If you decide you want some animations on the form add some CSS transitions to the `.llms-coupon-entry` element (and children) to change when the class `.active` is added or removed from the element.
-+ Refactored JavaScript related to LifterLMS Checkout. Improvements are minimal (if any) but the file is now smaller and more readable! Yay code stuff.
-+ Fixed some redundant text on single payment confirmation screen. ("Single payment of single payment of")
-+ Added a link to memberships listed under "My Memberships" on the LifterLMS Account Screen
-+ LifterLMS Order posts have been renamed in the database from "order" to "llms_order" to prevent any potential conflicts with other plugins. Automated database migration will handle the renaming of old orders.
-+ Fixed undefined variable notice generated by Sections without any lessons inside of them
-+ renamed function `add_query_var_product_id()` to `llms_add_query_var_product_id()`
-+ added a class for interacting with a course TRACK, instantiated by a track term or term_id (`LLMS_Track`)
-+ password strength meter and related settings / options via utilizing WordPress password strength functions available
-+ cleaned up the lesson locked tooltips to be a bit more sane and also utilized in course navigation on individual lessons.
-+ Updated admin menus for LifterLMS content to be more sane and organized and intuitive and so on and so forth
-
-##### Payment Gateways
-
-**NOTE: at this release, LifterLMS PayPal is the only payment gateway that will work with this release. We haven't started working on Stripe 4.0.0 which will work with LifterLMS 3.0.0**
-
-+ Payment gateways powered by a new abstract gateway class
-+ PayPal has been removed from LifterLMS and is available as premium extension
-
-##### Frontend Notices
-
-+ LifterLMS "Notices" have been rewritten, slightly.
-+ Most templates have been updated
-+ associated CSS has been updated
-+ Some sanity has been added to the related functions
-
-##### Post "Model" Concept / Overhaul
-
-Updated classes for programmatically accessing all sorts of data related to custom post types registered by LifterLMS.
-
-These post types currently include:
-
-+ Access Plans -- a non-public post type associated with courses and memberships which store payment related information
-+ Coupons (replaces includes/class.llms.coupon.php)
-+ Courses (replaces includes/class.llms.course.php)
-+ Lessons (replaces includes/class.llms.lesson.php)
-+ Memberships
-+ Orders (replaces includes/class.llms.order.php
-+ Products -- can be instantiated from courses or memberships (replaces includes/class.llms.product.php)
-+ Transaction -- a non-public post type associated with orders which store completed/attempted transaction data
-
-##### Improved admin metabox methods (and related)
-
-+ Updated custom LifterLMS Admin Metaboxes to have a more sane programmatic interface. This affects nearly all admin metabox classes in the plugin.
-+ A set of methods and classes have been added to improve the programmatic interface around custom post type post tables. These can be found in "includes/admin/post-types/post-tables"
-
-##### Coupons
-
-+ New class `LLMS_Coupon` allows for easy getting & setting of coupon data.
-+ Updated coupon post table to include relevant coupon information for all coupons at a glance
-+ Refactored admin panel coupon metabox generation to utilize new model for saving data
-+ Added translation functions to all strings in coupon settings screen
-+ Added new coupon settings
- + _Expiration Date_ -- coupons cannot be applied to a purchase after the expiration date
- + _Payment Type_ -- coupons can only be applied to either single or recurring payment plans. Existing coupons will be treated as single payment coupons until updated by the Admin.
- + _First Payment Discount_ -- Applies only to recurring payment coupons. Determines the discount applied to the first payment of a recurring payment transaction.
- + _Recurring Payments Discount_ -- Applies only to recurring payment coupons. Determines the discount applied all payments (other than the first) of a recurring payment transaction.
- + _Description_ -- Record internal notes for a coupon visible only by admins on the admin panel
-+ The "Coupon Code" field has been removed in favor of the WordPress Coupon Post Title being utilized as the code. After upgrading, an automated database migration will move all coupon code fields to the title. The title previously functioned as the coupon description. During the migration the existing title will be moved to the new description field.
-
-##### Orders
-
-+ Added Order Statuses
- + Completed - Single payment only. Denotes a successful transaction
- + Active - Recurring only. Denotes the subscription is active with no issues
- + Expired - Recurring only. Denotes the subscription has ended and is no longer active
- + Refunded - Denotes the order has been refunded.
- + Cancelled - Denotes the order has been cancelled manually by an admin.
- + Failed - Denotes payment has failed. For subscriptions a failed payment will switch from "active" to "failed"
- + Pending - Denotes that the order has been created but payment has not been completed yet
-+ Admin panel order table new features:
- + The following columns are now sortable in ascending and descending orders: Order, Product, and Date
- + Added totals based on order type (single or recurring) to the "Total" column
- + Added an order status column for quick status review
-+ Order notes available for internal and system notes. powered by WP comments. lots of inspiration (and code) from WooCommerce, thank you <3
-+ Added a bunch of currency settings (as well as right-side currency and decimal-less currency support!)
-
-##### New Templates
-
-+ __Pricing Table__ at "templates/product/pricing-table.php" utilized by courses and memberships for displaying access plan information. Replaces "templates/membership/purchase-link.php" and "templates/course/purchase-link.php"
-+ __Course Taxonomy Templates__ at "templates/course/categories.php", "templates/course/tags.php", and "templates/course/tracks.php" display comma separated lists for course custom taxonomy terms
-+ __Course Prerequisite Template__ at "templates/course/prerequisites.php" displays prerequisite information (course and tracks) for a given course.
-+ __Meta Wrapper__ templates at "templates/course/meta-wrapper-end.php" and "templates/course/meta-wrapper-start.php" wrap some HTML around various meta data output about a course
-+ Significantly updated checkout process with all kinds of new templates including:
- + templates/checkout/form-gateways.php
- + templates/checkout/form-summary.php
-+ __Unified "Lesson Preview"__ at "templates/course/lesson-preview.php" displays "buttons" in course syllabus (on course page) and in course navigation (on lesson pages)
-+ Various template hook priority changes in order to make adding content between default LifterLMS areas easier
-
-##### Deleted Templates
-
-+ templates/checkout/form-checkout-cc.php
-+ templates/checkout/form-pricing.php
-
-##### New & Updated Admin Interfaces & Templates
-
-+ Significantly improved, changed, or brand new templates for metaboxes for various post types:
- + templates/admin/post-types/order-details.php
- + templates/admin/post-types/order-transactions.php
- + templates/admin/post-types/product-access-plan.php
- + templates/admin/post-types/product.php
-
-##### New Functions
-
-+ `llms_confirm_payment_url()` - Retrieve the URL used for confirming LifterLMS Payments
-+ `llms_cancel_payment_url()` - Retrieve the URL users are directed to when cancelling a payment
-
-##### Install Script
-
-+ Removed some legacy default options that were being created and are no longer required for new installations.
-+ Removed unused `update_courses_archive()` function & related hook
-
-##### Select2
-
-Now utilizing a forked version of Select2 to prevent 3.5.x conflicts we've been plagued with
-
-##### Deprecated
-
-+ Removed filter `lifterlms_get_price_html`, use `lifterlms_get_single_price_html` instead
-+ Removed unused `LLMS_Product->get_price_suffix_html()` function
-+ Removed `LLMS_Product->set_price_html_as_value()` because we didn't like it anymore, don't use anything instead.
-+ Removed `add_query_var_course_id()` function
-+ Removed `displaying_sidebar_in_post_types()` function with the `LLMS_Sidebars::replace_default_sidebars()` function
-+ Filter `lifterlms_order_process_pending_redirect` has been replaced with `lifterlms_order_process_payment_redirect`
-+ Action `lifterlms_order_process_begin` has been deprecated
-+ Removed `lifterlms_order_process_complete` action
-+ Replaced `LLMS_Course::check_enrollment()` with various new utilities. See `llms_is_user_enrolled()` for fastest use.
-+ Officially removed the `LLMS_Language` class
-+ Officially removed the `PluginUpdateChecker` class stubs we created to prevent updating issues with LifterLMS extensions during our transition to 2.0.0. This library has caused nothing but pain for everyone on our team and many of our users. It's gone now, forever.
-+ Removed function `lifterlms_template_single_price()` and replaced with `lifterlms_template_pricing_table()`
-+ Removed templates at "includes/course/price.php" and "includes/membership/price.php" in favor of "includes/product/pricing-table.php"
-+ Removed `LLMS_Person::create_new_person()` in favor of `LLMS_Person_Handler::register()` or `llms_create_new_person()`
-+ Removed `LLMS_Person->set_user_login_timestamp_on_register()` and are simply adding the metadata during registration
-+ Removed `lifterlms_register_post` action hook which fired after new user registration validation, this has been replaced with `lifterlms_user_registration_after_validation`
-+ Removed `lifterlms_new_person_data` and `lifterlms_new_person_address` filters, replaced with `lifterlms_user_registration_data`
-+ Removed `LLMS_Person::login_user()` in favor of `LLMS_Person_Handler::login()`
-+ background updater
-+ system report facelift + inclusion of all new settings via `LLMS_Data` class
-+ Fix setup wizard styles to follow update admin panel styles
-+ add links to last step of setup wizard for documentation and demo
-+ removed a bunch of deprecated coupon-related functions
-+ added a "force ssl" option to ensure checkout is secured
-+ added settings and options around recurring payments and staging sites to prevent duplicate charges when testing on a cloned site
-+ Check course restrictions automatically when checking lesson
-+ Added user_id to all access function checks to allow for checks for non current user
-+ course restriction messages display regardless of enrollment status
-+ check memberships and lock purchase of members only access plans
-+ Fixed titles of course closed and open messages on the course restrictions options
-+ record a start date for access plans based off when order moves to complete or active for the first time
-+ automatically expire limited access plans
-+ gave a quick facelift & unification to a lot of admin panel elements
-+ Color consistency updated according to LLMS brand guide
-+ Unified front and backend button classes
-+ Updated all frontend buttons to have consistent classes
-+ Removed the "FREE" lesson SVG in favor of simple text which allows translating
-+ Install & activation overhauls. Resolves [#179](https://github.com/gocodebox/lifterlms/issues/179)
-+ jQuery MatchHeight lib unignored
-+ A bunch of settings pages updated and a bunch of settings deprecated
-+ Gateways setting page removed
-+ Memberships & Courses page combined into "Catalogs" settings
-+ Added a data getting class used by the tracker class
-+ added a new page creation function with better intelligence that (hopefully) prevents duplicate pages from being created during core page installation
-+ new default country setting
-+ all order status changes recorded as order notes
-+ pending orders can be completed after failed payments
-+ better handling for gateways with fields
-+ JS spinners support multiples via start & stop!
-+ Updated (and semi-finished) analytics
-+ achievement metabox converted
-+ minor updates to voucher class
-+ Added a "post state" visible on the Pages posts table identifying if the page is saved as a LifterLMS page (EG: Checkout Page)
-+ Fixed copy/paste error of duplicate enrollment closed message on course restrictions tab
-+ Removed WC integration in favor of WC
-+ Upgrade "back to course" template to new lesson API
-+ Renamed `course/parent_course.php` to `course/parent-course.php` for template naming consistency
-+ use `strict` when auto generating usernames when creating from email addresses, resolves [#182](https://github.com/gocodebox/lifterlms/issues/182)
-
-##### 3.0.0 Auto Upgrader
-
-+ lots of postmeta data rekeyed
-+ intelligently generated defaults for various pieces of new meta data on courses, lessons, and memberships
-+ automatically generate access plans from existing course and membership data
-+ update existing orders to pull semi-accurate data into analytics based on new database structure
-+ cleans database of a ton of deprecated options and postmeta data
-
-##### Deprecated
-
-+ function `llms_is_user_member()`, use `llms_is_user_enrolled()` instead
-+ function `llms_check_course_date_restrictions()`
-+ function `quiz_restricted()`
-+ function `membership_page_restricted()`
-+ function `is_topic_restricted()`
-+ function `llms_get_post_memberships()`
-+ function `llms_get_parent_post_memberships()`
-+ function `parent_page_restricted_by_membership()`
-+ function `outstanding_prerequisite_exists()`
-+ function `find_prerequisite()`
-+ function `llms_get_course_enrolled_date()`
-+ function `llms_get_lesson_start_date()`
-+ function `lesson_start_date_in_future()`
-+ function `page_restricted_by_membership_alert()`
-+ function `llms_does_user_memberships_contain_course()`
-+ class `LLMS_Checkout`
-+ function `LLMS()->checkout()`
-
-##### Auto Enrollment
-
-+ Course auto enrollment for Memberships has been restored
-+ Works exactly the same as previously except auto-enrollment is not dependent on a course "belonging to" the membership via membership restrictions. This is because membership restrictions no longer apply to courses
-
-##### Analytics
-
-+ Charts! I'm really excited about this. I know we still need more data but please say nice things to me, I worked really hard on these little charts.
-+ Updated styles & interface
-
-##### bbPress
-
-+ Restrict individual forums (and their topics) to LifterLMS Membership levels
-
-##### BuddyPress
-
-+ Fixes broken course display on bp profile
-+ Adds memberships subpage to bp profile
-
-##### notices
-
-+ Admin notices class for managing admin notices, it's pretty neat!
-
-##### Student Management on Courses and Memberships
-
-+ All new and improved student management interface for managing student enrollments from courses and memberships
-
-##### Deprecated
-
-+ filter: `llms_meta_fields_course_main`, replace with `llms_metabox_fields_lifterlms_course_options`
-
-##### Manual Payments
-
-+ Manual Payment Gateway can now be enabled on the frontend!
-+ When a manual payment is recorded the user will be redirected to a view order page where they will be prompted to make a manual payment
-+ Define the payment instructions on the admin panel "Checkout Settings"
-+ Once you verify payment, head to the pending order and hit the "Record a Manual Payment" button to record the transaction
-+ Upon recording the order status will be upgraded to "Complete" and the user will be enrolled automatically
-
-##### Student Dashboard Upgrades
-
-+ More sane template hooks and functions
-+ Pagination on Courses endpoint (view only a preview on the main dashboard)
-+ Orders history & view orders screens!
-
-Deprecated options (and related functions where applicable) for the following course & membership options:
-
- + `lifterlms_button_purchase_membership_custom_text`
- + `lifterlms_course_display_outline_lesson_thumbnails`
- + `lifterlms_course_display_author`
- + `lifterlms_course_display_banner`
- + `lifterlms_course_display_difficulty`
- + `lifterlms_course_display_length`
- + `lifterlms_course_display_categories`
- + `lifterlms_course_display_tags`
- + `lifterlms_course_display_tracks`
- + `lifterlms_lesson_nav_display_excerpt`
- + `lifterlms_course_display_outline`
- + `lifterlms_course_display_outline_titles`
- + `lifterlms_course_display_outline_lesson_thumbnails`
- + `lifterlms_display_lesson_complete_placeholders`
- + `redirect_to_checkout`
-
-In all scenarios either a `add_filter` (returning false) or a `remove_action()` can be used to replicate the option.
-
-
-v3.0.0-beta.4 - 2016-09-01
---------------------------
-
-+ fix issue with course prereq checks
-+ next payment due date visible on order admin view
-+ trial end date visible on order admin view
-
-##### Free Access Plans
-
-+ "Free" access plans now defined as such based on a checkbox rather than by entering 0 into the price
-+ Only single payment access plans can be free (a free recurring payment makes no sense but we can certainly discuss this if you disagree with me)
-+ trials are disabled with free plans (because trials only apply to recurring plans)
-+ sales are disabled for free access plans
-
-##### Checkout Form JS API
-
-+ unified JS checkout handler
-+ allows extensions to enqueue validation or pre-submission JS functions that should run prior to checkout form submission
-
-##### Manual Payment Gateway
-
-+ handles purchase of access plans marked ar FREE & orders that are discounted to 100% via coupons
-
-##### Open Enrollment
-
-+ Open Enrollment allows users to register on the account dashboard without purchasing a course
-+ Voucher settings are available to customize whether vouchers should be optional or required during open registration
-+ Better error reporting around voucher usage during enrollment
-
-##### Deprecated Functions
-
-+ `llms_get_coupon()`
-+ `get_section_id()`
-+ `check_course_capacity()`
-
-##### Quizzes
-
-+ Updated admin metaboxes to use new metabox abstract class
-+ display 0 instead of negative attempts on quiz summary
-+ updated logic in start button template
-
-##### Emails (for engagements)
-
-+ Admin metabox updated to new API
-+ Postmeta data migration:
- + `_email_subject` renamed to `_llms_email_subject`
- + `_email_heading` renamed to `_llms_email_heading`
-
-
-v2.7.12 - 2016-09-22
---------------------
-
-+ Added a new filter on content returned after port permission checks
-+ Added additional information to plugin update message in preparation for major 3.0 release
-+ Updated plugin contributor metadata
-
-
-v2.7.11 - 2016-07-22
---------------------
-
-+ Removed a duplicate action hook on course archive loop.
-+ Switched registration template include to use a more sane function
-+ Added updated banner adds with prettier ones. Wooooooo.
-
-
-v2.7.10 - 2016-07-19
---------------------
-
-+ Fix undefined noticed related to LifterLMS custom post type archive filtering
-+ Fix filter which was supposed to allow custom engagement types to be queried & triggered by engagements automatically but was passing data incorrectly
-
-
-v2.7.9 - 2016-07-11
--------------------
-
-+ We are now properly storing delayed engagement trigger data.
-+ Fixed an issue with our engagement query functions that caused, in very rare circumstances, the extra engagements to be triggered during an engagement trigger due to a lack of specificity in our query
-+ Fixed an undefined property notice related to email engagements when the email had no subject or header
-+ Fixed a typo in the description of a translation function.
-+ Added an engagement debug logging function. You can log all sorts of data related to engagements by adding `define( 'LLMS_ENGAGEMENT_DEBUG', true );` to your `wp-config.php` file.
-+ Allow course title shortcode to be used on course pages (and quizzes too). Documentation incorrectly said it was available on courses so we've fixed the function to allow for use on courses.
-
-
-v2.7.8 - 2016-07-05
--------------------
-
-+ Bugfix: Restore access to quiz results on quiz completion
-
-
-v2.7.7 - 2016-07-01
--------------------
-
-##### Russian
-
-+ LifterLMS is now 100% Translated into Russian thanks to our new Russian Translation Editor [@kellerpt](https://profiles.wordpress.org/kellerpt/)
-
-##### l18n
-
-+ All transition messages between questions during a Quiz are now translatable.
-+ LifterLMS subpages below the LifterLMS icon on the admin panel will now always display regardless of how you've chosen to translate the menu items. Hopefully puts to rest a long-standing i18n issue.
-
-###### Bug fixes
-
-+ Attempting to access a quiz when not enrolled in the associated course and having not properly started the quiz now results in a useful error message rather than a PHP warning.
-+ We've adjusted the way we're adding a admin panel "separator" to reduce conflicts with other plugins that have menu items with the same position as our separator (51).
-+ Added new logic to display an error message (instead of nothing) if there's an error during question loading.
-+ Resolve issue with course progress bar when added to a quiz sidebar (assuming your theme has sidebar support on your quizzes).
-+ Updated version number in the changelog for last version (it was supposed to be 2.7.6)
-
-
-v2.7.6 - 2016-06-28
--------------------
-
-+ Students manually removed by Memberships by using the "Students" tab of a LifterLMS Membership will now be fully removed from the membership.
-+ Updated a few time-related strings to be l18n friendly. These items were all around Quiz time reporting and quiz time limits.
-+ Updated testing information, tested up to WP 4.5.3
-+ Fixed date of last release on changelog. It had the wrong date. Does that really matter?
-+ Updated readme.txt description area, we have a new youtube video! Yassss.
-
-
-v2.7.5 - 2016-06-13
--------------------
-
-##### New features
-+ Added an "id" parameter to both LifterLMS Courses and LifterLMS Memberships shortcodes
-
-##### i18n
-+ Allow date translation on quiz results screen by using `date_i18n()` instead of `date()`
-+ Allow date translation on my courses screen by using `date_i18n()` instead of `date()`
-+ Ensure course status "Enrolled" is translatable on my courses screen
-
-##### Fixes
-+ Thanks to [@kjohnson](https://github.com/kjohnson) who fixed undefined index warnings & errors which occurred when viewing the last lesson in a section when the next section contained no lessons.
-+ Resolved an issue where formatting for "Restricted Access Description" course content would not display proper formatting.
-+ Fixed an issue with the "FREE" stamp for a free lesson caused layout issues.
-+ Removed the "is-complete" css class from incorrectly being added to lesson preview tiles for free lessons
-+ Fix an escaping issue when rendering Course titles inside LifterLMS notices. Prevents "\'s" from displaying when "'s" should be displaying (and similar issues).
-
-
-v2.7.4 - 2016-05-26
--------------------
-
-+ Fixed a bug with the new localization methods from 2.7.3
-+ Removed bundled it_IT translation files in favor of official language pack available at [https://translate.wordpress.org/projects/wp-plugins/lifterlms/language-packs](https://translate.wordpress.org/projects/wp-plugins/lifterlms/language-packs).
-+ Removed bundled en_US translation files because LifterLMS is in English so the files are unnecessary.
-+ Fixed a few mis-labeled filters applied when registering LifterLMS Custom Post Types
-+ Adjusted the default supported features of LifterLMS Quizzes and Questions
- + Quizzes now support custom fields as per user request
- + Commenting, thumbnails, and excerpts are no longer "supported" as they were never intended to be and were never correctly implemented.
- + If you are relying on any of these features for your quizzes or questions please use the following filters to re-implement these features: `lifterlms_register_post_type_quiz` or `lifterlms_register_post_type_question`. These will allow you filter the default arguments LifterLMS passes to the WordPress function `register_post_type()`
-
-
-v2.7.3 - 2016-05-23
--------------------
-
-+ Added a separate filter for login redirects `lifterlms_login_redirect` and added the user_id as a second parameter available to the filter.
-+ Added second parameter to `lifterlms_registration_redirect` to allow access to the registered user's user_id.
-+ Fixed a timestamp conversion issue on Course sale price checks that caused indefinite sales (those with no date restrictions) to appear not on sale during certain periods of time. The period would differ depending on the server's timezone settings and the time of visit.
-+ Added a "Pointer" when hovering quiz summary accordion to allow for a slightly more obvious user experience that the elements are expandable.
-+ Added some new localization methods to ensure strings that only appear in Javascript files will be translator friendly. This initially fixes a few issues on the Quiz Summary page and during quiz taking where strings only appeared in Javascript and were, therefore, completely inaccessible to translators.
-
-
-v2.7.2 - 2016-05-19
--------------------
-
-+ In course syllabus widget & shortcodes free lessons will now be clickable links.
-+ Record `llms_last_login` timestamp in usermeta when a user registers.
-
-
-v2.7.1 - 2016-05-09
--------------------
-
-##### Enrollment & Voucher Checks
-
-+ Enrollment functions will now automatically check to ensure that users are not already enrolled in a course or membership before enrolling. This addresses an issue which would create double enrollment for user redeeming a voucher for a product they were already enrolled in.
-+ Vouchers will now automatically check to see if the user has already redeemed this voucher before allowing the user to redeem it. This would have caused multiple enrollments and would allow one user to eat up an entire voucher by using it over and over again for funsies. A voucher can now *only* be redeemed once by a user as intended.
-+ `llms_is_user_enrolled()` now allows developers to check membership enrollment. Previously this function would only check enrollment of Courses despite what the documentation stated.
-
-##### Translation
-
-+ 3 strings have had translation functions added to them. This makes LifterLMS voucher redemptions translatable!
-
-##### Bugs & Fixes
-
-+ Fix javascript dependency & enqueueing issue on admin panel which prevented LifterLMS settings from saving correctly in various places
-+ Removed inline CSS from "next lesson button" on quiz completion / summary screen. This was overriding some default styles and making the button very thin and gross.
-
-
-v2.7.0 - 2016-05-05
--------------------
-
-##### LifterLMS Custom User Fields Exposed
-
-+ Custom fields added during registration via LifterLMS account settings are now exposed on the admin panel via the student's WordPress user profile
-+ All custom fields that are available (billing and phone) are editable on the WordPress user profile by anyone with profile edit access regardless of LifterLMS settings. If the settings are disabled (eg not required for registration) you can still add this information manually to a user's profile. This is useful if you require the information and then disable it later, you would still be able to access the information on the admin panel but would no longer be required for user's during registration.
-+ A few new filters added to help developers customize the experience here. Check out the documentation at [https://lifterlms.com/docs/lifterlms-filters/#admin-user-custom-fields](https://lifterlms.com/docs/lifterlms-filters/#admin-user-custom-fields)
-
-##### Membership Manual Add & Remove Student Functions
-
-+ Duplicated "Students" tab from the Course admin screen to Memberships
- + Students can be manually added to a membership by an admin
- + Students can be removed manually from a membership by an admin
-
-##### Updates
-
-+ Added the ability for students to edit their phone number via their account settings page if the phone number registration option is enabled on the site.
-
-##### Fixes
-
-+ Fixed a few spelling errors on LifterLMS admin panel order screens
-+ Fixed a typo on meta data for LifterLMS admin created (manual) orders
-
-
-v2.6.3 - 2016-05-02
--------------------
-
-+ Removed redirecting action from WooCommerce integration that was causing issues on multiple product purchase checkouts with larger databases.
-+ Added a new payment action `lifterlms_order_complete` which runs at the same time as some previous actions during payment processing but servers a different purpose. This is mostly in preparation for a forthcoming AffiliateWP integration.
-+ Fixed an issue with LifterLMS certificate background image that caused the wrong dimensions to be returned when outputting a LifterLMS certificate background image
-
-
-v2.6.2 - 2016-04-27
--------------------
-
-+ Fix class conflict in collapsible course outline widget template which caused some UX issues.
-+ Added new filters run during course & lesson sidebar registration to allow customization of LifterLMS sidebars
- + `lifterlms_register_course_sidebar`
- + `lifterlms_register_lesson_sidebar`
-+ Removed a stray logging function.
-+ Cleaned up some undefined variable warnings & notices on the quiz summary template
-+ Fixed an issue appearing when registering users did not submit the optional phone number which caused a PHP notice
-+ LifterLMS Orders generated by WooCommerce will now have a payment method of "WooCommerce". This also addresses an undefined notice produced during WooCommerce order completion because a LifterLMS Payment Method wasn't being defined.
-
-
-v2.6.1 - 2016-04-26
--------------------
-
-+ Fix class conflict in collapsible course outline widget template which caused some UX issues.
-
-
-v2.6.0 - 2016-04-25
--------------------
-
-##### Collapsible Course Outline Widget
-
-+ By request we've added an option to make your course outline widgets collapsible!
-+ View feature [Documentation](https://lifterlms.com/docs/course-syllabus-widget/)
-+ New translations available related to feature. I think it's 4 strings.
-
-##### Bug Fixes
-
-+ Removed an unused CSS selector that caused some issues on the admin panel. This resolves an issue identified with the Page Builder by SiteOrigin plugin. The selector was very generic (`.title`) and may have caused issues with other themes or plugins using that class.
-+ Resolved an issue that prevented post update, save, and publishing messages for core post types (posts, pages) from displaying properly.
-
-
-v2.5.1 - 2016-04-22
--------------------
-
-+ Fixed session handler initialization as it was being initialized prior to user data availability.
-+ Staged `LLMS_Language` class for deprecation in favor of WordPress translation functions `__()`, `_e()`, etc... **If you're a developer you'll start seeing warning's on screen or in your logs if you're using this function, it will be completely removed in the next MAJOR release (3.0.0)**
-+ Added a new function to handle the deprecation warning above (`llms_deprecated_function`) and now that we have this function we'll start deprecating all the things. Just kidding, or am I?
-+ This gives translators access to 69 new strings that were previously untranslatable! However, this number might be inaccurate +/- 5 strings. I only counted it once and I don't feel like the exact number is important enough for a recount to ensure accuracy. /shrug
-
-
-v2.5.0 - 2016-04-15
--------------------
-
-**Admin Panel Order Table Updates**
-
-+ Several visual improvements to the table
-+ Exposed the following fields on the table
- + Order number
- + Customer name (with a link to their WP profile)
- + Customer email (mailto link)
- + Payment gateway used (this is filterable per gateway as well so gateways can improve the functionality here in the future)
-+ Added a link to the product edit page from the product column
-+ Free orders will now display as "Free" as opposed to {currency}0.00
-+ Removed the not-so-useful "Order" column which was a long ugly string of data that was displayed in other columns already
-+ Removed the "Password Protected" flag since *all* orders are always automatically password protected for added security. This flag distracts from the interface so we've removed it. Orders _are_ still password protected though.
-+ Numerous strings that were previously not translatable have been made translatable on this screen
-+ A few new strings that previously didn't exist are now available for translation
-
-**Fixes and other small changes**
-
-+ Fixed a translation issue on the LifterLMS menu that we thought we fixed in the last release but have now really fixed (probably).
-+ Fixed a few small issues with engagements as they related to external engagements triggered by other plugins and LifterLMS extensions.
-+ Tired of seeing a banner for a plugin you've already installed? We have your back! The general settings area will now only display banners for plugins that aren't installed.
-+ Fixed various javascript issues, mostly removed `console.log()` statements.
-+ Fixed a spelling error on the membership admin panel settings screen
-
-
-v2.4.1 - 2016-04-07
--------------------
-
-+ Tested and compatible with WordPress 4.5 Release Candidate.
-+ Fixed a pagination issue related to updates to the quiz builder from 2.4.0 which would cause results to return incorrect results on the last page of paginated results in the "Add Question" dropdown.
-+ Added translation functions to LifterLMS Menu Items. Resolves an issue where translated LifterLMS installations might not see all the menu items under the LifterLMS Icon.
-+ Italian translation updates courtesy of [@AndreaBarghigiani](https://github.com/AndreaBarghigiani)
-+ On some themes the "Next Lesson" button was displayed while quizzes were being taken. We now *always* hide the next lesson button when a quiz is being taken.
-+ Adjusted some static functions to be non static in `class.llms.post-types.php`
-+ Added a function to ensure support for post thumbnails on LifterLMS custom post types
-+ If a user views a course that is available to them because it belongs to a membership level they are a member of, course pricing information will no longer be visible. This addresses a confusing user experience issue. Previously it _appeared_ like payment for a course was still required even though it really wasn't.
-+ Fixed undefined variable warning on quiz summary screen
-+ Resolve an issue with quiz timer that caused issues on time display if the time limit was set to a fraction of a minute (eg 1.5 minutes)
-+ resolved an undefined variable warning resulting from courses still holding a reference to a membership after the membership has been deleted or trashed
-
-
-v2.4.0 - 2016-03-29
--------------------
-
-##### Performance Improvements on the LifterLMS Quiz Builder
-
-+ Completely rewrote Javascript associated with building a LifterLMS Quiz. Our users have been identifying some performance issues and slowness when working with larger databases. We've refactored the Javascript and our related database queries to allow faster quiz building and fewer timeouts when working in the quiz builder.
-+ Fixed a bunch of undefined variables that would produce PHP warnings in various quiz templates
-+ Added validation to quiz questions on the admin panel to prevent the same question from being added to a quiz multiple times.
-+ Fixed an issue that prevented quizzes from correctly marking the lesson as completed when the quiz was passed.
-+ Added three new actions now available for developers to hook into.
- + `lifterlms_quiz_completed` called upon completion of a quiz (regardless of grade)
- + `lifterlms_quiz_passed` called when a quiz is completed with a passing grade
- + `lifterlms_quiz_failed` called when a quiz is completed with a failing grade
-+ Course Progress and Course Syllabus shortcodes (and widgets) now work on Quiz pages
-+ Completed Metabox refactor for the LifterLMS Quiz post type and removed `LLMS_Meta_Box_Quiz_General` class. All functions now exist in `LLMS_Meta_Box_Quiz`
-+ Added validation to the Quiz general settings
- + Cannot only enter numbers in attempts, percentage, and time limit fields
- + Cannot enter a negative number or a number greater than 100 in the percentage field
-+ Removed the membership restriction metabox from quiz admin and question admin screens
-
-##### Other fixes
-
-+ Fixed an issue that caused multiple certificates awarded for the same Course or Lesson to not properly display on the My Account page.
-+ Removed an event bound to the publishing of a LifterLMS Question that called a function that didn't exist and caused a Javascript error on the console (but didn't actually cause any problems)
-+ Removed a warning message that would display on sidebars when a shortcode was being displayed in a place that it couldn't function. We now simply don't display any content if the shortcode can't function.
-+ Resolved an issue that prevent users from "purchasing" products when using a 100% coupon and the Stripe payment gateway. Users experiencing this issue should also update to Stripe 3.0.1.
-+ Fixed an AJAX related issue that was incompatible with PHP7
-+ Added the ability to have a "max" value on LifterLMS Admin Metabox number fields
-
-
-v2.3.0 - 2016-03-24
--------------------
-
-##### Engagements Refactoring (lots of bugfixes, performance improvements, more hook & filter friendly)
-
-+ We've completely rewritten the LifterLMS Engagement Handler methods (`class LLMS_Engagements`) and added some new engagement actions.
-+ The rewrite unifies engagement handling into one function that can be easily hooked into by plugin and theme developers.
-+ We've moved any engagement related data out of the main `LifterLMS` class
-+ Fixed the broken engagement delay functionality which now runs of `wp_schedule_single_event`. This makes the function more reliable and also keeps it within the traditional WordPress architecture.
-+ Added an additional check before sending emails or triggering any engagements that will prevent the achievement from being awarded or the email from being sent if the post is in not published. This fixes an issue that caused emails in the trash from still being emailed.
-+ Removed the unused `LLMS_Engagements` class and file
-+ Added two new engagement trigger events "Membership Purchased" and "Course Purchased"
-+ Deprecated actions -- Removes some redundancy because the triggering actions (`lifterlms_course_completed` triggered the notification action, instead `lifterlms_course_completed` simply triggers the engagement now).
- + `lifterlms_lesson_completed_notification`
- + `lifterlms_section_completed_notification`
- + `lifterlms_course_completed_notification`
- + `lifterlms_course_track_completed_notification`
- + `lifterlms_course_completed_notification`
- + `lifterlms_user_purchased_product_notification`
- + `lifterlms_created_person_notification`
-
-##### Bug and Issue fixes
-
-+ Adjusted the size of the LifterLMS Admin Menu Icon. It was super big because of, perhaps, some overcompensation. It caused an issue on Gravity Forms admin pages for some reason (we didn't ever determine why) but we've resolved it by using an appropriately sized icon.
-+ Fixed a CSS issue that caused some weirdness on the course archive page on mobile devices
-+ Fixed an issue with automated membership expirations
-+ Fixed a function that should have been called statically in `LLMS_Ajax` class
-+ Fixed a ton of issues related to the triggering of engagements and cleaned up a lot of classes and functions associated with them.
-+ Properly instantiate `LifterLMS` singleton via LLMS() function and prevent direct instantiation of the class via `new LifterLMS()`.
-+ Removed the deprecated 'class.llms.email.person.new.php' file as it was rendered useless a long time ago and caused some duplicate emails.
-
-
-v2.2.3 - 2016-03-15
--------------------
-
-##### Translations
-
-+ Added translation functions around quite a few untranslated strings. Thanks to the team at [Netzstrategen](http://netzstrategen.com)
-+ Added German translation .mo and .po files again thanks to the team at [Netzstrategen](http://netzstrategen.com)
-
-##### Student Enrollment Functions
-
-We've refactored a bit of our code related to how to programmatically enroll a student in a course or membership during registration and purchase.
-
-A new class `LLMS_Student` makes working with a LifterLMS student (user) a bit easier. We'll begin exposing user meta data through this class as we continue to improve the usability of the codebase for other developers.
-
-We've also created a simple enrollment function `llms_enroll_student()` which enables programmatic enrollment to LifterLMS courses or memberships. This was previously handled in a pretty schizophrenic manner and this unifies various ways of enrollment into one clean function. All enrollment moving forward will use this functions.
-
-The enrollment function calls a new action as well as calling existing enrollment-related actions:
-
-+ `before_llms_user_enrollment` - called immediately prior to beginning the user enrollment function
-+ `llms_user_enrolled_in_course` (previously existing)
-+ `llms_user_added_to_membership_level` (previously existing)
-
-This also addresses an issue that prevented the `llms_user_enrolled_in_course` action from being called when a user was auto-enrolled in a course because they joined a membership level that included auto-enrollment in one or more courses.
-
-##### Bug and Issue fixes
-
-+ Fixed an inconsistency in the way membership IDs were being saved to the postmeta table that would cause courses to not *appear* restricted on the Membership Enrollment tab, even though they were actually restricted and functioning correctly.
-+ New lines are now preserved in the quiz question clarification text areas, thanks to @atimmer
-+ Escape HTML in the quiz question description fields on the admin panel to allow outputting html without rendering it, thanks @atimmer
-+ Fixed an issue related to the outputting of restricted course and membership content which caused errors on certain themes
-+ added a clearfix to the `.llms-lesson-preview` element on the course syllabus template
-+ Removed the `class.llms.person.handler.php` file as it wasn't actually being used by anything anywhere and contained no functions
-+ Removed some unused and deprecated class functions from the LLMS Student Metabox class
-+ Fixed an undefined javascript error resulting from code cleanup in 2.2.2. This issue prevented Vouchers from being published. The code has been further cleaned.
-
-
-v2.2.2 - 2016-03-15
--------------------
-
-##### One step closer to a public GitHub repository
-
-We've made a massive syntactical update to almost every file in the codebase for a (finally) unified and clearly defined coding standard. This puts us one step closer to beginning to open our GitHub repo publicly and accepting pull requests and contributions from developers everywhere.
-
-Okay, we haven't exactly _clearly_ defined it yet. We're working off a modified version of the [WordPress Coding Standards](https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/).
-
-Notable exceptions are related to file names because Thomas Levy didn't have the energy to rename a bunch of files as well as ignoring the Yoda Conditions standards. We'll be fixing these deviations in the future.
-
-##### Quizzes
-
-+ Created new time calculation and humanizing functions related to the display of quiz time on quiz results pages
-+ Quizzes will now display hours, minutes, and seconds depending on the time it took to take the quiz
-+ Timing calculations are more accurate and quizzes that are completed in less than 60 seconds will not bug out and display incredibly long lengths
-+ Resolved an issue that occasionally prevented quiz data from saving during the last question causing the quiz to hang in an uncompletable state
-+ Quiz questions now have a default point value of 1, thanks @atimmer
-+ Quiz question answers now accept valid HTML as per `wp_kses_post`, thanks again to @atimmer
-
-##### Translations
-
-+ Thanks to @AndreaBarghigiani and the team at [codeat](http://codeat.co/) LifterLMS now ships with Italian language files!
-
-##### Issue and bug resolutions
-
-+ Fixed a restriction issue that would happen when individual lessons were restricted to a membership level
-+ Fixed an issue with the `[lifterlms_my_account]` shortcode that was preventing the shortcode from working on the Divi theme.
-+ Engagements will now only be triggered if they are "Published". Resolves an issue where draft or trashed engagements were still firing.
-+ Fixed CSS overflow on LifterLMS Meta boxes. Fixes an issue where select boxes would be hidden inside a metabox.
-+ Changed the ConvertKit extension banner image on the LifterLMS general settings page and replaced added a link to the extension now that it's available.
-+ Added a link to the new ConvertKit extension to the .org readme
-+ When restricting an entire site to a membership level the page selected as the "Terms and Conditions" page in LifterLMS settings will automatically bypass Membership restriction settings. This will allow your unregistered users to actually read the T&C that they're confirming during registration.
-+ CSS fix for `has-icon` class on course syllabus
-+ Fixed a PHP warning that displayed when purchasing a membership with no auto-enrollment courses
-+ Fixed an undefined variable warning in the WooCommerce integration class
-+ Fixed a few templating issues related to certificates
-+ Added a few new CSS rules that should make certificates more compatible across various themes
-+ Added a css class to LifterLMS Next Lesson buttons, `llms-next-lesson`
-+ Updated the scheduled event name for cleaning up LifterLMS session data from the WP database. It had a conflicting name with the scheduled event for expiring LifterLMS memberships.
-
-
-v2.2.1 - 2016-03-07
--------------------
-
-+ Added a few actions to the `class.llms.voucher.php` class.
-
-
-v2.2.0 - 2016-03-04
--------------------
-
-##### Translations
-
-+ We've updated our .pot file for the first time in quite a while. We're really sorry for de-emphasizing translation. An updated .pot file will now accompany each version of LifterLMS whenever a translatable string is adjusted or when a new string is added.
-+ We've also made it easier to include custom translations. Read our [Translation Guide](https://lifterlms.readme.io/docs/getting-started-with-translation).
-
-##### Certificate Background Images
-
-_We've completely rewritten the certificates template (but it's all backwards compatible)._
-
-+ New filters are available to make customizing the certificate template easier for developers. All new filters are documented at [https://lifterlms.readme.io/docs/functions-certificates](https://lifterlms.readme.io/docs/functions-certificates).
-+ A new WordPress Image Size is now available and will be used for generating the image used by default when uploading certificates to the media library. Fore more information on these new settings visit [https://lifterlms.com/docs/certificate-background-image-sizes/](https://lifterlms.com/docs/certificate-background-image-sizes/).
-
-##### Course and Membership Pricing & Sales
-
-+ Sale price start and end date are now completely optional.
- + Provide neither a start date nor an end date to have a sale run indefinitely
- + Provide a start date with no end date to have a sale start at a pre-determined time with no pre-determined ending
- + Provide an end date with no start date to have a sale end a a pre-determined date but start immediately
- + Provide a start date and an end date to have a sale run for a pre-determined period of time
-+ Optimized the `LLMS_Product` class to provide more reliable and extendable use of the class
-+ The templates related to pricing functions have been refactored. Affected templates include: "templates/course/price.php", "templates/loop/price.php", "templates/membership/price.php"
-+ Many people complained about the size of the `.llms-price` element on course and membership tiles on loop pages. We removed the inflated size and will now default to your theme for sizing. You selector remains the same if you wish to customize the size of the price text.
-
-##### Coupon Updates
-
-+ Coupons can (finally) be removed after being applied!
-+ Coupons can now be restricted to specific courses and/or memberships
-+ Percentage based coupons can no longer be created with a value larger than 100%
-+ Added numeric restrictions to usage and coupon amount fields on the admin panel
-+ Fixed a programmatic error that prevented product restrictions from being entirely removed
-+ Fixed a few instances where hardcoded a US Dollar symbol ($) where a dynamic currency symbol should have been displayed.
-
-##### Wow Bad Syntax, Very Typo, Such Grammar, So Undefined
-
-+ Fixed a typo in filter associated with modifying the registration of the lesson post type (`lifterlms_register_post_type_lesson`)
-+ Fixed a grammatical error in a Membership restriction message
-+ Fixed a syntax error in "/templates/course/outline-list-small.php" that prevented the `done` CSS class from being properly applied to completed lessons
-+ Fixed a few typos and grammatical errors on the Course and Membership settings metaboxes
-+ Fixed an undefined variable in "templates/course/syllabus.php"
-+ Fixed an issue on the system report that prevented the "Courses Page" from being reported properly
-+ Fixed an issue that caused PHP warnings on the admin panel for students or WP users with no LifterLMS menu permissions
-+ Fixed an installation warning caused by a reference to an undefined class variable
-+ Fixed an HTML character encoding issue that caused `–` to display on the admin panel when viewing LifterLMS Orders
-+ Fixed an undefined variable found during engagement triggering for non-email engagements.
-
-##### Additional, less exciting updates
-
-+ Added input type restrictions to course & membership price fields.
-+ The "Emails" LifterLMS Settings Tab has been renamed "Engagements." All Email settings are found under this tab as well as some new settings related to other kinds of LifterLMS engagements.
-+ Added `the_content` filter to the content of emails sent by LifterLMS
-+ Fixed some CSS issues on Voucher screens
-+ Updated Courses settings retrieval function to retrieve the correct "shop" page id
-+ Added translation functions to voucher export meta box class
-+ Vouchers Export metabox will only allow export after a voucher has been published. This prevents an issue caused by attempting to export voucher codes before they were saved in the database via the publish / save action.
-+ Vouchers can no longer be saved with a use of "0"
-+ added a CSS class for various syllabus outputs that notes that the lesson has an icon. Previously CSS relied on "is-complete" to output styles for having an icon but with the addition of placeholders the "is-complete" is used only to note that the lesson is completed and "has-icon" is a more semantic class that applies to both complete and incomplete lessons with an icon.
-+ Removed the membership restriction metabox from some post types where it shouldn't have been displaying.
-+ admin select fields now have an option `allow_null` (default to "true") which can be set to `false` in order to prevent the output of the default "None" option
-
-
-v2.1.1 - 2016-02-15
--------------------
-
-##### System Report
-
-+ A new LifterLMS Admin Page is available which reports information about various server, WordPress, and LifterLMS settings that will help expedite support requests.
-+ More information about the system report is available at [https://lifterlms.com/docs/how-to-use-the-lifterlms-system-report/](https://lifterlms.com/docs/how-to-use-the-lifterlms-system-report/)
-
-##### Additional Updates
-
-+ Fixed a javascript issue which prevented users from saving vouchers
-+ Cleaned up formatting in a large number of included PHP files
-
-
-v2.0.5 - 2016-02-15
--------------------
-
-+ PayPal requests now using HTTP Version 1.1 in preparation for June 2016 [TLS 1.2 and HTTP/1.1 Updates](https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1914&viewlocale=en_US). This resolves user's inability to begin PayPal checkout when using Sandbox mode.
-+ Updated deprecated function opt out to run off a constant that can be defined in `wp-config.php` instead of using a filter that is hard to use in the way that it is intended.
-
-
-v2.0.4 - 2016-02-15
--------------------
-
-+ Fixed a typo on the `class_exists` check in the deprecated functions file
-+ added a filter so that progressive users can opt out of loading the deprecated functions file
-
-
-v2.0.3 - 2016-02-12
--------------------
-
-+ Removed an unused quiz stub
-
-
-v2.0.2 - 2016-02-11
--------------------
-
-+ Bugfix: removed a progressive syntax array that caused fatal errors on older versions of PHP
-
-
-v2.0.1 - 2016-02-11
--------------------
-
-##### Updated General Settings Screen
-
-+ Improved the general settings interface to be more visually appealing and to provide some ad space to alert customers to other LifterLMS products and information.
-+ Moved Currency options to the Checkout settings screen
-
-##### Bug Fixes
-
-+ Properly initialized jQuery on the vouchers metabox admin scripts
-+ removed some php shortcut echos (`= $var; ?>`)
-+ Resolve issue where courses that are available with a membership or on it's own outside of the membership would prevent users from accessing content if they were not a member.
-+ Fixed a few files where undefined variables were being referenced and generating php notices
-+ removed an call to a WordPress core function that has never existed. Not sure what we were thinking there...
-
-###### Enhancements
-
-+ Updated CSS to provide better course syllabus layout on smaller screens
-+ Added validation to prevent against duplicate voucher code creation
-
-
-v2.0.0 - 2016-02-04
--------------------
-
-##### Auto-advancing lessons
-
-+ We've heard your feedback and added a new global course option which will auto-advance a student to the next lesson upon lesson completion.
-
-##### Bug Fixes
-
-+ Added spaces between numbers and "of" on the counter for course syllabus templates
-+ Removed a template hook that was creating duplicate lesson thumbnails on quite a few themes
-
-##### Membership Admin Improvements
-
-Visit the "Enrollment" tab on any membership to see some new additions to make managing your memberships easier.
-
-+ You can now add courses to and remove courses from a Membership from the Membership itself
-+ You can now opt to automatically enroll students in a course (or multiple courses) when they sign up for a membership by checking "Auto Enroll" next to the course on the Membership enrollment tab
-
-##### Student Enrollment & Removal on Courses Admin Screen
-
-We've updated the Students tab interface for performance and usability!
-
-+ AJAX enabled searching by student name and or email
-+ Increased performance for course page load by only calling student information when needed. This resolves a bug identified by users with large user databases and/or low-powered servers.
-+ Allow for addition or removal of several students at a time.
-
-##### Syllabus Template
-
-+ Added a Course setting to optionally enable Lesson Thumbnails on the Course Syllabus
-+ Added a Course setting Display greyed out lesson completion checkmark icons on lessons not competed in the course syllabus
-+ Reworded CSS on the course syllabus to rely on floats rather than absolute positioning, should allow for more robust customization with less frustration
-+ Refactored the syllabus template at "templates/course/syllabus.php" for better performance and readability
-
-##### Updates and enhancements
-
-+ User email is now displayed on the "Students" table on student analytics screens
-+ Membership now has it's own admin menu
-+ Reordered the LifterLMS admin menu and submenu items
-+ Removed membership specific taxonomies from courses
-+ Removed course specific taxonomies from memberships
-+ Coupon code is now a required field when creating a coupon
-+ "Humbled" the metabox on all post types that restricts the post to a membership. The metabox would previously gain priority over the WordPress publishing actions metabox. The priority has been reduced to "default" and will to fall into line with all other metaboxes on the screen and appear based on registration priority. If you can't find the metabox, SCROLL DOWN! If you want to put it back up on the top, you can simply drag it up there and WordPress will save your preference.
-
-##### Deprecated Classes
-
-We've added a "deprecated" file which holds a few stubs for classes and functions deprecated below as to prevent fatal errors. The functions and classes in the deprecated class are classes which we know are being utilized by approved LifterLMS extensions and will allow users to upgrade LifterLMS without upgrade extensions without breaking their websites!
-
-+ `LLMS_Activate` which as previously used to activate the plugin for updates via the LifterLMS Update Server and is no longer required.
-+ PUC (plugin update checker) Library has been completely removed as it is no longer required for plugin updates.
-+ `LLMS_Analytics_Dashboard` was removed as it was a stub that was never used and shouldn't have ever been released as a part of the LifterLMS codebase. I can't believe no one reported this bug!
-
-##### Deprecated Functions
-
-+ `lifterlms_template_section_syllabus()`
-
-**The following are officially deprecated and removed to prevent WooCommerce compatibility conflicts**
-
-+ `is_shop()` replaced by `is_llms_shop()`
-+ `is_account_page()` replaced by `is_llms_account_page()`
-+ `is_checkout()` replaced by `is_llms_checkot()`
-
-##### Deprecated Templates
-
-+ templates/course/section_syllabus.php
-
-##### New Account Dashboard Filters
-
-*[View documentation for more information](https://lifterlms.readme.io/docs/filters-account)*
-
-+ `lifterlms_account_greeting`
-+ `lifterlms_my_courses_title`
-+ `lifterlms_my_courses_enrollment_status_html`
-+ `lifterlms_my_courses_start_date_html`
-+ `lifterlms_my_courses_course_button_text`
-+ `lifterlms_my_certificates_title`
-
-##### New Checkout Page Filters:
-
-*[View documentation for more information](https://lifterlms.readme.io/docs/filters-checkout)*
-
-+ `lifterlms_checkout_user_logged_in_output`
-+ `lifterlms_checkout_user_not_logged_in_output`
-
-##### New Course Filters:
-
-*[View documentation for more information](https://lifterlms.readme.io/docs/filters-course)*
-
-+ `lifterlms_product_purchase_account_redirect`
-+ `lifterlms_product_purchase_redirect_membership_required`
-+ `lifterlms_product_purchase_checkout_redirect`
-+ `lifterlms_product_purchase_membership_redirect`
-+ `lifterlms_lesson_complete_icon`
-
-
-v1.5.0 - 2016-01-22
--------------------
-
-##### WooCommerce Integration Enhancements
-
-__NOTE: The following enhancements only apply when the WooCommerce Integration is enabled__
-
-**Always redirect to the WooCommerce Cart when a SKU Matched Product can be found**
-
-+ LifterLMS Products (courses and memberships) which are SKU matched to a WooCommerce product will now automatically add the related WooCommerce product to the WooCommerce shopping cart and then automatically redirect the visitor to the WooCommerce cart when the visitor attempts to enroll in a course or membership from the LifterLMS course or membership page.
-+ If no WooCommerce product is found via a SKU match, the user will proceed to the LifterLMS checkout.
-+ This will enable you to determine which Cart you want a user to use on a product by product basis. You may sell certain courses via WooCommerce and others via LifterLMS (should you choose to do so).
-
-**Multiple Item Checkout**
-
-+ When a WooCommerce order is complete user's will now be automatically enrolled in **all** courses and/or memberships in the WooCommerce order. This improves upon a previously limitation that would only allow WooCommerce checkout with one LifterLMS product at a time.
-+ The products in the order will be intelligently SKU matched to LifterLMS Courses or Memberships.
-+ You may also mix and match between WooCommerce products matched to LifterLMS products and those which are not matched to LifterLMS products. For example, your customers may now buy a Course via SKU matching as well as a T-Shirt that is not matched to a LifterLMS course via a SKU.
-
-##### Other Fixes and improvements
-
-+ Fixed a bug that caused quiz results to display for users who had never taken the quiz.
-+ Added Wistia as an oEmbed provider to fix an issue related to default oembed handling in WordPress 4.4.
-+ added a `.cc_cvv` class that mimics the existing `#cc_cvv` styles to allow gateway extensions to change the ID of the field in their credit card forms
-+ Added support for new 1.4.5 capability fixes to be also be reflected under the "+New" menu item in the WP Admin Bar. There are no changes to the filters, the capability filters will simply also remove restricted post types from the admin bar now (as they should).
-+ Tested and compatible up to WordPress 4.4.1
-
-##### Deprecations
-
-**The following functions have been staged for deprecation in LifterLMS 2.0!**
-
-+ Setup the `is_account_page()` function to be replaced by `is_llms_account_page()` function. The original causes conflicts when WooCommerce is installed as WooCommerce includes a core function by the same name. All references to `is_account_page()` in LifterLMS have been removed and the original has been left to prevent issues with developers currently relying on the LifterLMS version of the function.
-+ Setup the `is_checkout()` function to be replaced by `is_llms_checkout()` function. The original causes conflicts when WooCommerce is installed as WooCommerce includes a core function by the same name. All references to `is_checkout()` in LifterLMS have been removed and the original has been left to prevent issues with developers currently relying on the LifterLMS version of the function.
-
-
-v1.4.5 - 2016-01-13
--------------------
-
-+ Significant improvements to LifterLMS admin permissions as well as a hardening of permissions. Previously LifterLMS admin screens and menus were available to any users with `edit_posts` capabilities. This has been changed to `manage_options`. Filters for all screens and menus have been added with this release. If you're site currently relies on users with `edit_posts` to be able to access LifterLMS settings and analytics screens you must utilize these new filters in order to maintain their access. Please see full documentation on the new filters at [https://lifterlms.readme.io/docs/filters-admin-menu-and-screen-permissions](https://lifterlms.readme.io/docs/filters-admin-menu-and-screen-permissions). **Please consider testing your changes outside of production before updating to LifterLMS 1.4.5 in production.**
-+ Allow "Payment Method" to be translated on the "Confirm Payment" screen
-+ Allow the name of the payment gateway to be filtered on the "Confirm Payment" screen
-+ Added pagination support to lifterlms membership archive pages
-+ Fixed a bug related to some required global variables for quizzes and lessons being incorrectly set on certain hosts
-+ updated readme file to remove incomplete documentation
-+ Added Chosen multi-select options to admin panel metaboxes (settings and posts)
-+ Added two new actions that developers can hook into:
- + `llms_user_enrolled_in_course`, called when users are enrolled in a course. Usage details available [here](https://lifterlms.readme.io/docs/actions-user#llms_user_enrolled_in_course).
- + `llms_user_added_to_membership_level`, called when users are added to a membership level. Usage details available [here](https://lifterlms.readme.io/docs/actions-user#llms_user_added_to_membership_level).
-
-
-v1.4.4 - 2015-12-21
--------------------
-
-##### Updates
-
-+ My account page can now (optionally) display a list of memberships a student is currently enrolled in
-+ Student analytics on the admin panel display student's Memberships
-+ Student analytics on the admin panel will now display student's progress through courses in addition to their current enrollment status.
-+ Custom taxonomy archive templates for Course tags, categories, tracks, and difficulties now exist and properly function.
-+ Custom taxonomy archive templates for Membership categories and tags now exist and properly function.
-+ Added the `[lifterlms_memberships]` shortcode which was documented but never implemented. Details on usage available at [https://lifterlms.readme.io/docs/short-codes#memberships-lifterlms_memberships](https://lifterlms.readme.io/docs/short-codes#memberships-lifterlms_memberships)
-+ Added basic styles to LifterLMS pagination HTML elements (elements with class `.llms-pagination`) which formerly had no associated CSS.
-
-##### Deprecations
-
-+ Setup the `is_shop()` function to be replaced by `is_llms_shop()` function. The original causes conflicts when WooCommerce is installed as WooCommerce includes a core function by the same name. All references to `is_shop()` in LifterLMS have been removed and the original has been left to prevent issues with developers currently relying on the LifterLMS version of the function. It *will* be removed in the next major update (2.0) and will be noted as an officially deprecated feature at that time.
-
-##### Bug fixes
-
-+ Fixed pagination issues when using the `[lifterlms_courses]` shortcode
-+ Fixed an issue with the `is_shop()` function that prevented courses per page option from functioning properly on the default course archive page
-+ Student analytics profile on admin panel will display the correct number of memberships the student is enrolled in.
-+ Fixed a small CSS issue that caused extra white space to be displayed above Course or Membership tiles on archive pages when using the WordPress Twentyfifteen default theme
-
-##### Miscellaneous
-
-+ Account settings screen displays the correct title ("Account Settings" it previously said "Archive Settings")
-+ Made language changes to the LifterLMS settings intro screen copy
-+ Added link to CourseClinic on settings intro screen
-+ Added link to LifterLMS documentation on the settings intro screen
-
-
-v1.4.3 - 2015-12-11
--------------------
-
-+ Fixed an issue that could prevent some older servers from being able to run LifterLMS
-
-
-v1.4.2 - 2015-12-10
--------------------
-
-+ Tested and compatible with WordPress version 4.4
-+ BugFixes: fixed issue in `llms_featured_img()` that was preventing the `$size` variable from being passed to the WP core function being utilized.
-+ BugFixes: correctly handling conflicts with Plugin Update library
-
-
-v1.4.1 - 2015-12-02
--------------------
-+ Feature: Custom single price text - Display custom text for the single price on the courses and course page. Custom field does not require a single payment price be set. IE: Free!
-+ Feature: Custom Purchase Course Button Text Option. Change the text of the Take This Course button in Settings->Courses.
-+ Feature: New Become A Member button on courses that are restricted to memberships.
-+ Feature: Custom Become A Member Text Option. Change the text of the become a member button in Settings->Courses.
-+ Feature: Paypal Debug Mode. Enable debug mode in Settings->Gateways to view responses from Paypal API when errors occur.
-+ Updates: Updated support links in Settings->General.
-+ Updates: added minor styling to course page to increase margin and padding for some themes.
-+ Updates: Achievement content now available to pull into custom templates. The Achievement content is not by default displayed but can now be used in custom templates.
-+ BugFixes: Resolved issue with no default price selected at checkout when only recurring option existed.
-+ BugFixes: Lesson prerequisite now alert the user and provide a link to redirect the user to the next required lesson in the course.
-+ BugFixes: Paypal errors now return error message instead of white screen when Paypal API fails.
-+ BugFixes: Corrected JavaScript error with modals on course edit page in Internet Explorer 11.
-
-
-v1.4.0 - 2015-10-29
--------------------
-+ Feature: Free lessons - demo lessons that can be taken at any time by any user
-+ Feature: Guest lessons - demo lessons that can be taken by a non-logged in user
-+ Feature: Random quiz question - quiz questions can now be set to be in user set order or random order
-+ Updates: Automatically registers appropriate sidebars for Genesis theme
-+ Updates: Backend file cleanup
-+ Updates: Text cleanup
-+ Updates: Adds greater localization support (more strings to translate! yay!)
-+ Updates: Cleans up some unnecessary console.log() calls
-+ Updates: Removes mass of commented out code (cleaner reading)
-+ Updates: 'Next Lesson' button added after successful completion of quiz
-+ Updates: 'Next Lesson' button at bottom of lesson properly gets starting lesson of next section at the end of the previous section
-+ Updates: 'Previous Lesson' button at bottom of lesson will now properly get last lesson of previous section (if applicable)
-+ Updates: Move Registration Form to global templates to allow users to disable registration on login page but use registration form on custom page.
-+ BugFixes: WordPress pages are now properly restricted by memberships
-+ BugFixes: Fixes bug that caused order screen to act up if user was deleted
-+ BugFixes: Resolves nasty little bug that caused syllabus numbers to be out of whack
-+ BugFixes: Resolved error with WooCommerce integration where courses would not always register the user
-+ BugFixes: Corrected CSS conflict with Bridge theme settings page
-
-
-v1.3.10 - 2015-10-15
---------------------
-+ Updates: Clarifies some prerequisite text
-+ Updates: Quiz questions are now randomized!
-+ Updates: Fixes small CSS issue
-+ BugFixes: Resolves fatal errors with a small subset of premium themes
-
-
-v1.3.9 - 2015-10-5
-------------------
-+ BugFixes: Removes conflict with Yoast SEO
-+ BugFixes: Fixes CSS issues with box-sizing takeover
-+ Feature: New Settings Tile: Session Management. Found at LifterLMS->Settings->General.
-+ Feature: Clear User Session Tool. You can now clear all LifterLMS user session data from your site in LifterLMS->Settings->General
-+ Updates: Backend code cleanup
-
-
-v1.3.8 - 2015-10-02
--------------------
-+ BugFixes: Fixes Random error notices
-+ Updates: Updates email template handler
-
-
-v1.3.7 - 2015-09-25
--------------------
-+ Updates: Adds Spanish translation
-+ Updates: Adds new filter 'lifterlms_single_payment_text' to customize single payment string on checkout
-+ Updates: Student analytics now indicate which courses a student has completed
-+ BugFixes: Resolved security issue with WordPress searches and lessons
-+ BugFixes: Fixes analytics bug that potentially arises after a course is deleted
-
-
-v1.3.6 - 2015-09-18
--------------------
-+ BugFixes: Fixes pesky Zend Error that plagued some unfortunate victims
-+ BugFixes: Students can now be properly deleted from the course
-+ BugFixes: Fixes random class redeclaration error messages
-+ Updates: Adds new filter 'lifterlms_quiz_passed' to customize 'Passed' text after quiz
-+ Updates: Adds new filter 'lifterlms_quiz_failed' to customize 'Failed' text after quiz
-
-
-v1.3.5 - 2015-09-11
--------------------
-+ Revisions: Fixes typos
-+ Updates: Adds sidebar functionality to various themes
-
-
-v1.3.4 - 2015-09-04
--------------------
-+ BugFixes: Fixes bug with featured image on course page
-+ BugFixes: Fixes issue with lesson completed percentage on analytics page
-
-
-v1.3.3 - 2015-09-01
--------------------
-+ Updates: Removes deprecated plugin updater
-+ Updates: Adds Course Track prerequisite
-+ Updates: Various text fixes
-+ BugFixes: Fixes lesson name on prerequisite notification
-+ BugFixes: Fixes critical error with WordPress customizer
-
-
-v1.3.2 - 2015-08-30
--------------------
-+ Hotfix: resolves issues with sidebar shortcodes
-+ Updates: Text clarifications
-
-
-v1.3.1 - 2015-08-28
--------------------
-+ Hotfix: resolves issue with ajax url
-
-
-v1.3.0 - 2015-08-28
--------------------
-+ Improved popover behavior in course creation.
-+ BugFixing. Prevent multiple lesson and section form submission
-+ Fixed typos at backend quiz page
-+ Fixed check for update bug when plugin isn't properly activated.
-+ BugFixing, quiz post type should show author metabox
-+ Added course category filter to lifter_lms shortcode
-+ BugFixing, typo in [lifterlms_course_progress shortcode]
-+ BugFixing, Analytics shouldn't fetch students meta info from users were deleted.
-+ Adds in basic review functionality
-+ Updates plugin-updater to remedy PHP conflicts
-+ Fixes date bug in Analytics
-+ Cleans up jQuery console messages
-+ Adds in course tracks
-
-
-v1.2.8 - 2015-07-17
--------------------
-+ Updated Portuguese translation file
-+ Fixed issue where quiz score could not be equal to required grade.
-+ New Feature: Quiz Results Summary. Display the quiz results to the user on quiz completion.
-+ New feature: Clarification. Display information about correct and incorrect answers to users
-+ New Feature: Display correct answers to user on quiz completion
-+ Removed ability to add negative time limit to quiz
-+ New Membership feature: Make membership archive links go directly to checkout. Setting allows you to skip membership sales page and send users directly to registration and checkout.
-+ Sidebar support for prototype theme
-+ Sidebar support for X theme
-+ Sidebar support for WooCanvas
-+ New Shortcode: [lifterlms_hide_content]: Use to restrict content on a page, course or lesson to a specific membership. Pass the post id of the membership you want to restrict the content to. Example: [lifterlms_hide_content membership="5"]
-+ New updates to gulp build process
-+ Class autoloading and LLMS namespace introduced for more efficient coding.
-
-
-v1.2.7 - 2015-06-05
--------------------
-+ Minor bug fix with lesson redirect to quiz
-+ Minor change to global Course object instantiation.
-+ Bug Fix: Remove student from course
-+ Bug Fix: Appearance Menus missing select field (THANKS ANDREA!)
-+ New Course Setting: Hide Course Outline on course page
-+ New Shortcode: [lifterlms_course_outline] - displays course outline with settings (see documentation)
-+ Membership metabox design update
-+ Certificate metabox design update
-+ Achievement metabox design update
-+ Lesson metabox design update
-+ Emails metabox design update
-+ Coupons metabox design update
-+ Update to certificate design (better alignment and theme functionality)
-+ Better theme sidebar support
-+ More awesome control for developers building new settings for LifterLMS
-+ Advanced filter system for metabox fields with finite control for 3rd party developers.
-+ Woocommerce conflict correction to archive templates
-+ Style updates to allow themes better control on design
-
-
-v1.2.6 - 2015-04-28
--------------------
-+ Corrected issue with lesson re-order on save
-+ corrected html formatting issue on purchase page
-+ corrected html formatting issue on course page
-
-
-v1.2.5 - 2015-04-23
--------------------
-+ Corrected excerpt to not pull in lesson navigation
-+ Modified metabox api for better extension integration
-+ Corrected issue with order not displaying all information if coupon was not applied to order
-
-
-v1.2.4 - 2015-04-22
--------------------
-+ Moved All Course metaboxes to global Course Options Metabox
-+ Move Enrolled and Non-Enrolled user wysiwyg post editors to Options Metabox
-+ Removed Course Syllabus metabox, Added Course Outline Metabox
-+ Set priority of Course Outline and Course Options Metabox to top
-+ Added ability to Create new section to Course Outline
-+ Added ability to Create new lesson to Course Outline
-+ Added ability to add existing Lesson to Course Outline
-+ Added Lesson duplicate functionality when adding lesson previously assigned to another course.
-+ Added ability to drag lessons between sections in Course Outline
-+ Added ability to edit Section Title in Course Outline
-+ Added ability to edit lesson title and excerpt in Course Outline
-+ Added New Style and Design for better usability to Course Outline
-+ Added Lesson Icon with tooltip to Course Outline: Prerequisite - shows if prerequisite exists and displays name of prerequisite
-+ Added Lesson Icon with tooltip to Course Outline: Quiz - shows if quiz is assigned to course and displays name of quiz
-+ Added Lesson Icon with tooltip to Course Outline: Drip Content - shows if drip days are set and # of days
-+ Added Lesson Icon with tooltip to Course Outline: Content - displays if lesson has content added.
-+ Added Course Outline Metabox to Lesson Post Editor: Allows you to assign lesson to section and view entire course tree. Links to Course and all other lessons in course.
-+ Style Update: backgrounds on frontend. Removed all references to white background on front end elements
-+ Corrected Restriction for course in past. Updated course in past message to display as Course ended instead of Course not available until.
-+ Added restriction message when user attempts to visit a restricted lesson.
-+ Updated course syllabus sidebar widget to not display lessons as links if user is not enrolled in course.
-+ Added ability to use Attribute Order for sorting Courses and Memberships on Archive pages.
-+ Added support for selling memberships with Woocommerce. LifterLMS now checks memberships for SKU matches in addition to Courses when products are purchased using WooCommerce.
-+ Added gulp for scss, js and svg management
-+ Added svg sprite and svg class for managing svg elements on front and backend.
-+ Added better language translation support for strings
-+ Refactored Ajax Classes for cleaner, faster development
-+ Refactored metabox build class for cleaner, faster development
-+ Refactored Course syllabus to reduce query size for larger, complex courses
-+ Added Handler classes for Lessons, Sections, Courses and Posts
-+ Refactored Course get / set methods to reduce database queries
-
-
-v1.2.3 - 2015-03-12
--------------------
-+ Achievement design and functionality updates
-+ Achievement shortcode added
-+ Better searching added to engagement screen
-+ Achievement bug fixes
-+ On screen error reporting added to activation for trouble shooting
-+ Custom engagement methods added to certificate, achievement and sections
-+ Corrected new user registration engagement bug
-+ LifterLMS access reduced from manage_options to edit_posts
-+ Filters added to analytics to allow custom development
-+ Engagement bug fix: Section and Lesson bug select
-+ Syllabus bug corrected: No longer displays lessons in section box if no sections exist.
-+ Removed depreciated achievement template
-+ Membership Bug fix: Membership restriction will now only display on single posts.
-
-
-v1.2.2 - 2015-02-23
--------------------
-+ Corrected drip content bug
-+ Added Ajax functionality to quiz
-+ rounded quiz grades
-+ Added quiz time limit setting to Quiz
-+ Added quiz timer to quiz, front end
-+ Quiz allowed attempts field now allows unlimited attempts
-+ Set Ajax lesson delete method to not return empty lesson value
-+ Set next and previous questions to display below quiz question
-+ Decoupled Single option select question type from quiz to allow for more question types
-+ Added Quiz time limit to display on Quiz page
-+ Added functionality to automatically complete quiz when quiz timer reaches 0
-+ Moved Quiz functionality methods from front end forms class to Quiz class
-
-v1.2.1 - 2015-02-19
--------------------
-+ Updated settings page theming
-+ Added Set up Quick Start Guide
-+ Added Plugin Deactivation Option
-+ Updated language POT file
-+ Added Portuguese language support. Thank you Fernando Cassino for the translation :)
-
-
-v1.2.0 - 2015-02-17
--------------------
-+ Admin Course Analytics Dashboard Page. View at LifterLMS->Analytics->Course
-+ Admin Sales Analytics Dashboard Page. View at LifterLMS->Analytics->Sales
-+ Admin Memberships Analytics Dashboard Page. View at LifterLMS->Analytics->Memberships
-+ Admin Students Search Page. View at LifterLMS->Students
-+ Admin Student Profile Page ( View user information related to courses and memberships )
-+ Lesson and Course Sidebar Widgets ( Syllabus, Course Progress )
-+ Course Syllabus: Lesson blocks greyed out. Clicking lesson displays message to take course.
-+ Misc. Front end bug fixes
-+ Misc. Admin bug fixes
-+ Course and Lesson prerequisites: Can no longer select a prerequisite without marking "Has Prerequisite"
-+ Admin CSS updates
-+ Better Session Management
-+ Number and Date formatting handled by separate classes to provide consistent date formats across system
-+ Zero dollar coupon management: Coupons that set total to 0 will bypass payment gateway, generate order and enroll users.
-+ Better coupon verification.
-+ Better third party payment gateway support. Third party gateway plugins are now easier to develop and integrate.
-+ User Registration: Phone Number Registration field option now available in Accounts settings page.
-
-
-v1.1.2 - 2014-12-18
--------------------
-+ Moved Sidebar registration from plugin install to init
-
-
-v1.1.1 - 2014-12-16
--------------------
-+ Added user registration settings to require users to agree to Terms and Conditions on user registration
-+ Added comments to all classes methods and functions
-+ Removed unused and depreciated methods
-+ Added Lesson and Course Sidebar Widget Areas
-+ Fixed bug with course capacity option
-+ Fixed bug with endpoint rewrite
-+ Added localization POT file and us_EN.po translation file
-
-
-v1.1.0 - 2014-12-08
--------------------
-+ Updated HTML / CSS on Registration form
-+ Added Coupon Creation
-+ Added Coupon support for checkout processing
-+ Added Credit Card Support processing support
-+ Added Form filters for external integration
-+ Added Form templates for external integration
-+ Added Account Setting: Require First and Last Name on registration
-+ Added Account Setting: Require Billing Address on registration
-+ Added Account Setting: Require users to validate email address (double entry)
-+ Added password validation (double entry) on user registration / account creation
-+ Added Quiz Question post type and associated metaboxes
-+ Added Quiz post type and associated metaboxes
-+ Added ability to assign a quiz to a lesson
-+ Added front end quiz functionality
-+ Added Course capacity (limit # of students)
-
-### User Admin Table
-+ Added Membership Custom Column that displays user's membership information
-+ Added "Last Login" custom column that displays user's last login date/time
-
-### User Roles
-+ Updated user role from "person" to "student"
-+ Added temporary migration function to transition any register users with "person" role to "student" role
-+ Added "Student" role install function
-
-
-### BUDDYPRESS
-+ BuddyPress Screen Permission Fix
-+ Added two additional screens to BuddyPress: Certificates and Achievements
-
-### MISC
-+ Added llms options for course archive pagination and added course archive page pagination template
-+ Added user statistics shortcode
-
-
-v1.0.5 - 2014-11-12
--------------------
-
-+ Fixed a mis-placed parenthesis in templates/course/lesson-navigation.php related to outputting excerpt in navigation option
-+ Changed theme override template directory from /llms to /lifterlms
-+ Update the position & name of the "My Courses" Menu in BuddyPress Compatibility file
-+ New meta_key _parent_section added for easier connection and quicker queries.
-+ Section sorting on course syllabus
-+ Edit links added to course syllabus
-+ Assign section to course and view associated lessons metabox added to sections
-+ Assign lesson to section and view associated lessons metabox added to lessons
-+ Assigned Course, Assigned Section, Prerequisite and Membership Required added to lesson edit grid
-+ Assigned Course added to section edit grid'
-+ New membership setting: Restrict Entire Site by Membership Level (allows site restriction to everything but membership purchase and account).
-+ Updated template overriding to check child & parent themes
-+ Updated template overriding to apply filters to directories to check for overrides to allow themes and plugins to add their own directories
-
-
-v1.0.4 - 2014-11-04
--------------------
-
-+ Templating bug fix
-+ Added shortcode and autop support to course and lesson content / excerpt
-
-
-v1.0.3 - 2014-11-04
--------------------
-
-+ Major Templating Update!
-+ Removed Course, Lesson and Membership single lesson templates.
-+ Course and Section content templates now filter through WP content
-
-
-v1.0.2 - 2014-10-31
--------------------
-
-+ Added lesson short description to previous lesson preview links -- it was rendering on "Next" but not "Previous"
-+ Added a class to course shop links wrapper to signify the course has been completed
-+ Removed an unnecessary CSS rule related to the progress bar
-
-
-v1.0.2 - 2014-10-30
--------------------
-
-+ Fixed SSL certificate issues when retrieving data from https://lifterlms.com
-+ Added rocket settings icon back into repo
-
-
-v1.0.1 - 2014-10-30
--------------------
-
-+ Updated activation endpoint url to point towards live server rather than dev
-
-
-v1.0.0 - 2014-10-30
--------------------
-
-+ Initial public release.
diff --git a/README.md b/README.md
deleted file mode 100644
index 819dce1f71..0000000000
--- a/README.md
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-
-
-LifterLMS is a powerful WordPress learning management system plugin that makes it easy to create, sell, and protect engaging online courses and training based membership websites.
-
-
-
-
-
-[![WordPress Plugin Version][img-wp-plugin]][link-wp-repo]
-[![WordPress Plugin Tested WP Version][img-wp-tested]][link-wp-repo]
-[![PHP Supported Version][img-php]][link-php]
-
-[![WordPress Plugin Rating][img-wp-rating]][link-wp-reviews]
-[![WordPress Plugin Downloads][img-wp-downloads]][link-wp-advanced]
-[![WordPress Plugin Active Installs][img-wp-installs]][link-wp-advanced]
-
-[![PHPUnit Tests][img-phpunit-tests]][link-phpunit-tests]
-[![PHPCS Coding Standards][img-phpcs-checks]][link-phpcs-checks]
-[![Code Climate maintainability][img-cc-maintainability]][link-cc]
-[![Code Climate test coverage][img-cc-coverage]][link-cc-coverage]
-
-[![Contributions Welcome][img-contributions-welcome]](.github/CONTRIBUTING.md)
-[![Contributors][img-contributors]](#contributors)
-[![Slack community][img-slack]][link-slack]
-
-
-
-
-
-Welcome to the LifterLMS GitHub repository. This repository serves as the core project's central location for issue tracking and feature development.
-
-If you're not a developer or contributor, please use [LifterLMS plugin page][link-wp-repo] at WordPress.org.
-
-
-### Getting Help and Support
-
-GitHub is for bug reports and contributions only! If you have a support question or a request for a customization this is not the right place to post it. Please refer to [LifterLMS Support][link-support] or the [community forums][link-support-forums]. If you're looking for help customizing LifterLMS, please consider hiring a [LifterLMS Expert][link-experts].
-
-
-### Resources and Documentation
-
-+ [Changelog](./CHANGELOG.md)
-+ User documentation and knowledge base: https://lifterlms.com/docs/
-+ Contributor's blog: https://make.lifterlms.com/
-+ Developer portal: https://developer.lifterlms.com/
-
-
-### Included Core Packages
-
-The LifterLMS core includes several additional packages which are included in releases through composer. These core projects are installable as standalone plugins for development and testing purposes. The stable versions are automatically included in LifterLMS core releases.
-
-These packages have their own GitHub repositories:
-
-+ [LifterLMS Blocks](https://github.com/gocodebox/lifterlms-blocks)
-+ [LifterLMS REST API](https://github.com/gocodebox/lifterlms-rest)
-
-
-### Reporting a Bug
-
-Bugs can be reported at https://github.com/gocodebox/lifterlms/issues/new.
-
-Before reporting a bug, [search existing issues](https://github.com/gocodebox/lifterlms/issues) and ensure you're not creating a duplicate. If the issue already exists you can add your information to the existing report.
-
-Also check our [known issues and conflicts](https://lifterlms.com/doc-category/lifterlms/known-conflicts/) for possible resolutions.
-
-
-### Reporting a Security Vulnerability
-
-Security issues and vulnerabilities should be responsibly disclosed directly to the LifterLMS core developers via email. Please see our [Security Policy](.github/SECURITY.md) for details on disclosing a security vulnerability.
-
-
-### Installing
-
-If you clone or download this repo directly it will not run as a plugin inside WordPress!
-
-Installable production releases are available in on the [Releases tab](https://github.com/gocodebox/lifterlms/releases). You can get the latest stable release from [WordPress.org](https://downloads.wordpress.org/plugin/lifterlms.zip)
-
-If you're interested in installing development versions, see [Installing for Development](docs/installing.md)
-
-
-### Contributing
-
-[![Contributions Welcome][img-contributions-welcome]](.github/CONTRIBUTING.md)
-
-Interested in contributing to LifterLMS? We'd love to have your contributions. Read our contributor's guidelines [here](.github/CONTRIBUTING.md).
-
-
-### Contributors
-
-[![Contributors][img-contributors]](#contributors)
-
-Endless thanks to all our incredible contributors!
-
-[//]: contributor-faces
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-[//]: contributor-faces
-
-
-### Partners and Sponsors
-
-[ ](https://www.browserstack.com/)
-
-[BrowserStack](https://www.browserstack.com/) helps us ensure LifterLMS looks great and works on every imaginable browser and device.
-
-
-[link-cc]: https://codeclimate.com/github/gocodebox/lifterlms "LifterLMS on Code Climate"
-[link-cc-coverage]: https://codeclimate.com/github/gocodebox/lifterlms/coverage "Code coverage reports on Code Climate"
-[link-experts]: https://lifterlms.com/docs/do-you-have-any-recommended-developers-who-can-modifycustomize-lifterlms/ "Hire a LifterLMS Expert"
-[link-php]: https://www.php.net/supported-versions "PHP Support Versions"
-[link-phpunit-tests]: https://github.com/gocodebox/lifterlms/actions/workflows/test-phpunit.yml "PHPUnit Tests Status"
-[link-phpcs-checks]: https://github.com/gocodebox/lifterlms/actions/workflows/coding-standards.yml "PHPCS Coding Standards Checks"
-[link-slack]: https://lifterlms.com/slack "Chat with the community on Slack"
-[link-support]: https://lifterlms.com/my-account/my-tickets "LifterLMS customer support"
-[link-support-forums]: https://wordpress.org/support/plugin/lifterlms "LifterLMS user support forums"
-[link-wp-advanced]:https://wordpress.org/plugins/lifterlms/advanced/ "Advanced plugin details on the WordPress plugin repository"
-[link-wp-repo]:https://wordpress.org/plugins/lifterlms/ "LifterLMS on the WordPress plugin repository"
-[link-wp-reviews]:https://wordpress.org/support/plugin/lifterlms/reviews/ "Leave a review on the WordPress plugin repository"
-
-[img-cc-coverage]:https://img.shields.io/codeclimate/coverage/gocodebox/lifterlms?style=for-the-badge&logo=code-climate
-[img-cc-maintainability]:https://img.shields.io/codeclimate/maintainability/gocodebox/lifterlms?logo=code-climate&style=for-the-badge
-[img-contributors]: https://img.shields.io/github/contributors/gocodebox/lifterlms?color=blue&style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJzdmcyIiB3aWR0aD0iNjQ1IiBoZWlnaHQ9IjU4NSIgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPiA8ZyBpZD0ibGF5ZXIxIj4gIDxwYXRoIGlkPSJwYXRoMjQxNyIgZD0ibTI5Ny4zIDU1MC44N2MtMTMuNzc1LTE1LjQzNi00OC4xNzEtNDUuNTMtNzYuNDM1LTY2Ljg3NC04My43NDQtNjMuMjQyLTk1LjE0Mi03Mi4zOTQtMTI5LjE0LTEwMy43LTYyLjY4NS01Ny43Mi04OS4zMDYtMTE1LjcxLTg5LjIxNC0xOTQuMzQgMC4wNDQ1MTItMzguMzg0IDIuNjYwOC01My4xNzIgMTMuNDEtNzUuNzk3IDE4LjIzNy0zOC4zODYgNDUuMS02Ni45MDkgNzkuNDQ1LTg0LjM1NSAyNC4zMjUtMTIuMzU2IDM2LjMyMy0xNy44NDUgNzYuOTQ0LTE4LjA3IDQyLjQ5My0wLjIzNDgzIDUxLjQzOSA0LjcxOTcgNzYuNDM1IDE4LjQ1MiAzMC40MjUgMTYuNzE0IDYxLjc0IDUyLjQzNiA2OC4yMTMgNzcuODExbDMuOTk4MSAxNS42NzIgOS44NTk2LTIxLjU4NWM1NS43MTYtMTIxLjk3IDIzMy42LTEyMC4xNSAyOTUuNSAzLjAzMTYgMTkuNjM4IDM5LjA3NiAyMS43OTQgMTIyLjUxIDQuMzgwMSAxNjkuNTEtMjIuNzE1IDYxLjMwOS02NS4zOCAxMDguMDUtMTY0LjAxIDE3OS42OC02NC42ODEgNDYuOTc0LTEzNy44OCAxMTguMDUtMTQyLjk4IDEyOC4wMy01LjkxNTUgMTEuNTg4LTAuMjgyMTYgMS44MTU5LTI2LjQwOC0yNy40NjF6IiBmaWxsPSIjZGQ1MDRmIi8%2BIDwvZz48L3N2Zz4%3D
-[img-contributions-welcome]: https://img.shields.io/badge/contributions-welcome-blue.svg?style=for-the-badge&logo=data:image/svg%2bxml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik02NzIgMTQ3MnEwLTQwLTI4LTY4dC02OC0yOC02OCAyOC0yOCA2OCAyOCA2OCA2OCAyOCA2OC0yOCAyOC02OHptMC0xMTUycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em02NDAgMTI4cTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em05NiAwcTAgNTItMjYgOTYuNXQtNzAgNjkuNXEtMiAyODctMjI2IDQxNC02NyAzOC0yMDMgODEtMTI4IDQwLTE2OS41IDcxdC00MS41IDEwMHYyNnE0NCAyNSA3MCA2OS41dDI2IDk2LjVxMCA4MC01NiAxMzZ0LTEzNiA1Ni0xMzYtNTYtNTYtMTM2cTAtNTIgMjYtOTYuNXQ3MC02OS41di04MjBxLTQ0LTI1LTcwLTY5LjV0LTI2LTk2LjVxMC04MCA1Ni0xMzZ0MTM2LTU2IDEzNiA1NiA1NiAxMzZxMCA1Mi0yNiA5Ni41dC03MCA2OS41djQ5N3E1NC0yNiAxNTQtNTcgNTUtMTcgODcuNS0yOS41dDcwLjUtMzEgNTktMzkuNSA0MC41LTUxIDI4LTY5LjUgOC41LTkxLjVxLTQ0LTI1LTcwLTY5LjV0LTI2LTk2LjVxMC04MCA1Ni0xMzZ0MTM2LTU2IDEzNiA1NiA1NiAxMzZ6IiBmaWxsPSIjZmZmIi8+PC9zdmc+
-[img-php]: https://img.shields.io/badge/PHP-7.2%2B-brightgreen?style=for-the-badge&logoColor=white&logo=php
-[img-phpunit-tests]: https://img.shields.io/github/workflow/status/gocodebox/lifterlms/Test%20PHPUnit?label=PHPUnit&logo=github&style=for-the-badge
-[img-phpcs-checks]: https://img.shields.io/github/workflow/status/gocodebox/lifterlms/Coding%20Standards?label=PHPCS&logo=github&style=for-the-badge
-[img-slack]: https://img.shields.io/badge/chat-on%20slack-blueviolet?style=for-the-badge&logo=slack
-[img-wp-downloads]: https://img.shields.io/wordpress/plugin/dt/lifterlms.svg?style=for-the-badge&logo=wordpress
-[img-wp-installs]: https://img.shields.io/wordpress/plugin/installs/lifterlms.svg?style=for-the-badge&logo=wordpress
-[img-wp-plugin]:https://img.shields.io/wordpress/plugin/v/lifterlms.svg?style=for-the-badge&logo=wordpress
-[img-wp-rating]:https://img.shields.io/wordpress/plugin/r/lifterlms.svg?style=for-the-badge&logo=wordpress
-[img-wp-tested]:https://img.shields.io/wordpress/v/lifterlms.svg?style=for-the-badge&logo=wordpress
diff --git a/_private/svg/llms-icon-calendar.svg b/_private/svg/llms-icon-calendar.svg
deleted file mode 100644
index 4e02ca4d61..0000000000
--- a/_private/svg/llms-icon-calendar.svg
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-checkmark.svg b/_private/svg/llms-icon-checkmark.svg
deleted file mode 100644
index c8bdd2eb0c..0000000000
--- a/_private/svg/llms-icon-checkmark.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-circle-empty.svg b/_private/svg/llms-icon-circle-empty.svg
deleted file mode 100644
index cff0485a3a..0000000000
--- a/_private/svg/llms-icon-circle-empty.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-circle.svg b/_private/svg/llms-icon-circle.svg
deleted file mode 100644
index 37eafb0f77..0000000000
--- a/_private/svg/llms-icon-circle.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-close.svg b/_private/svg/llms-icon-close.svg
deleted file mode 100644
index 08ede2e8ea..0000000000
--- a/_private/svg/llms-icon-close.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-course-section.svg b/_private/svg/llms-icon-course-section.svg
deleted file mode 100644
index c4fa2f9590..0000000000
--- a/_private/svg/llms-icon-course-section.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/_private/svg/llms-icon-existing-lesson.svg b/_private/svg/llms-icon-existing-lesson.svg
deleted file mode 100644
index c81a2e1444..0000000000
--- a/_private/svg/llms-icon-existing-lesson.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-facebook.svg b/_private/svg/llms-icon-facebook.svg
deleted file mode 100644
index 052d7607ae..0000000000
--- a/_private/svg/llms-icon-facebook.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-folder.svg b/_private/svg/llms-icon-folder.svg
deleted file mode 100644
index 78a73d7c3a..0000000000
--- a/_private/svg/llms-icon-folder.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-free.svg b/_private/svg/llms-icon-free.svg
deleted file mode 100644
index 97f8e04613..0000000000
--- a/_private/svg/llms-icon-free.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-gear.svg b/_private/svg/llms-icon-gear.svg
deleted file mode 100644
index f5e213cc24..0000000000
--- a/_private/svg/llms-icon-gear.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-google.svg b/_private/svg/llms-icon-google.svg
deleted file mode 100644
index e5ae714900..0000000000
--- a/_private/svg/llms-icon-google.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-graph.svg b/_private/svg/llms-icon-graph.svg
deleted file mode 100644
index d44b4b3562..0000000000
--- a/_private/svg/llms-icon-graph.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-instagram.svg b/_private/svg/llms-icon-instagram.svg
deleted file mode 100644
index 2ded6d4aca..0000000000
--- a/_private/svg/llms-icon-instagram.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-lightbulb.svg b/_private/svg/llms-icon-lightbulb.svg
deleted file mode 100644
index ac4d827f84..0000000000
--- a/_private/svg/llms-icon-lightbulb.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-linkedin.svg b/_private/svg/llms-icon-linkedin.svg
deleted file mode 100644
index eb2b4d370a..0000000000
--- a/_private/svg/llms-icon-linkedin.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-lock.svg b/_private/svg/llms-icon-lock.svg
deleted file mode 100644
index 0e6e321254..0000000000
--- a/_private/svg/llms-icon-lock.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-media.svg b/_private/svg/llms-icon-media.svg
deleted file mode 100644
index 8642eaecbb..0000000000
--- a/_private/svg/llms-icon-media.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-member.svg b/_private/svg/llms-icon-member.svg
deleted file mode 100644
index 29296c5204..0000000000
--- a/_private/svg/llms-icon-member.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-new-lesson.svg b/_private/svg/llms-icon-new-lesson.svg
deleted file mode 100644
index 5c77d519fd..0000000000
--- a/_private/svg/llms-icon-new-lesson.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-paper.svg b/_private/svg/llms-icon-paper.svg
deleted file mode 100644
index 33d0ee01d8..0000000000
--- a/_private/svg/llms-icon-paper.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-papers.svg b/_private/svg/llms-icon-papers.svg
deleted file mode 100644
index 971fbb8a3f..0000000000
--- a/_private/svg/llms-icon-papers.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-play.svg b/_private/svg/llms-icon-play.svg
deleted file mode 100644
index 84f24e06af..0000000000
--- a/_private/svg/llms-icon-play.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-plus.svg b/_private/svg/llms-icon-plus.svg
deleted file mode 100644
index 68e72da1aa..0000000000
--- a/_private/svg/llms-icon-plus.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-question.svg b/_private/svg/llms-icon-question.svg
deleted file mode 100644
index 96a968e830..0000000000
--- a/_private/svg/llms-icon-question.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-rightarrow.svg b/_private/svg/llms-icon-rightarrow.svg
deleted file mode 100644
index b41f94050f..0000000000
--- a/_private/svg/llms-icon-rightarrow.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-search.svg b/_private/svg/llms-icon-search.svg
deleted file mode 100644
index b6c659b26a..0000000000
--- a/_private/svg/llms-icon-search.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-target.svg b/_private/svg/llms-icon-target.svg
deleted file mode 100644
index 0df9f3ea7c..0000000000
--- a/_private/svg/llms-icon-target.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-twitter.svg b/_private/svg/llms-icon-twitter.svg
deleted file mode 100644
index c1d3cebb54..0000000000
--- a/_private/svg/llms-icon-twitter.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-users.svg b/_private/svg/llms-icon-users.svg
deleted file mode 100644
index e7abbd1aa6..0000000000
--- a/_private/svg/llms-icon-users.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-view.svg b/_private/svg/llms-icon-view.svg
deleted file mode 100644
index 730ef22729..0000000000
--- a/_private/svg/llms-icon-view.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/_private/svg/llms-icon-youtube.svg b/_private/svg/llms-icon-youtube.svg
deleted file mode 100644
index 543bc31e90..0000000000
--- a/_private/svg/llms-icon-youtube.svg
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/assets/css/admin-importer-rtl.css b/assets/css/admin-importer-rtl.css
new file mode 100644
index 0000000000..e146a4810c
--- /dev/null
+++ b/assets/css/admin-importer-rtl.css
@@ -0,0 +1,112 @@
+.llms-import-file-wrap {
+ background: #fafafa;
+ border: 1px solid #ccd0d4;
+ padding: 10px;
+ margin: 20px auto;
+ display: -webkit-inline-box;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.llms-cloud-import-help.button-link {
+ color: inherit;
+ vertical-align: top;
+ text-decoration: none;
+}
+
+.wrap.llms-import-export ul.llms-importable-courses {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ gap: 20px;
+}
+@media only screen and (min-width: 680px) {
+ .wrap.llms-import-export ul.llms-importable-courses {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ }
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course {
+ background-color: #FFF;
+ border: 1px solid #dedede;
+ border-radius: 12px;
+ -webkit-box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ list-style: none;
+ margin: 20px 0;
+ overflow: hidden;
+}
+@media only screen and (min-width: 680px) {
+ .wrap.llms-import-export ul.llms-importable-courses .llms-importable-course {
+ -webkit-box-flex: 0;
+ -ms-flex-positive: 0;
+ flex-grow: 0;
+ -ms-flex-negative: 1;
+ flex-shrink: 1;
+ -ms-flex-preferred-size: 31%;
+ flex-basis: 31%;
+ }
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course img {
+ display: block;
+ max-width: 100%;
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course h3 {
+ color: #1d2327;
+ font-size: 20px;
+ line-height: 1.5;
+ margin: 30px 20px 15px;
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course p {
+ font-size: 15px;
+ line-height: 1.5;
+ margin: 0 20px 15px;
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button {
+ padding-bottom: 10px;
+ position: relative;
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button .button {
+ bottom: 20px;
+ left: 20px;
+ position: absolute;
+}
+@media only screen and (min-width: 600px) {
+ .wrap.llms-import-export ul.llms-importable-courses {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ }
+}
+@media only screen and (min-width: 600px) and (max-width: 767px) {
+ .wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 calc(50% - 20px);
+ flex: 1 0 calc(50% - 20px);
+ max-width: calc(50% - 20px);
+ }
+}
+@media only screen and (min-width: 768px) {
+ .wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 calc(33% - 20px);
+ flex: 1 0 calc(33% - 20px);
+ max-width: calc(33% - 20px);
+ }
+}
diff --git a/assets/css/admin-importer-rtl.min.css b/assets/css/admin-importer-rtl.min.css
new file mode 100644
index 0000000000..7d0a7db2be
--- /dev/null
+++ b/assets/css/admin-importer-rtl.min.css
@@ -0,0 +1 @@
+.llms-import-file-wrap{background:#fafafa;border:1px solid #ccd0d4;padding:10px;margin:20px auto;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.llms-cloud-import-help.button-link{color:inherit;vertical-align:top;text-decoration:none}.wrap.llms-import-export ul.llms-importable-courses{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:20px}@media only screen and (min-width: 680px){.wrap.llms-import-export ul.llms-importable-courses{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course{background-color:#fff;border:1px solid #dedede;border-radius:12px;-webkit-box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);list-style:none;margin:20px 0;overflow:hidden}@media only screen and (min-width: 680px){.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:1;flex-shrink:1;-ms-flex-preferred-size:31%;flex-basis:31%}}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course img{display:block;max-width:100%}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course h3{color:#1d2327;font-size:20px;line-height:1.5;margin:30px 20px 15px}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course p{font-size:15px;line-height:1.5;margin:0 20px 15px}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button{padding-bottom:10px;position:relative}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button .button{bottom:20px;left:20px;position:absolute}@media only screen and (min-width: 600px){.wrap.llms-import-export ul.llms-importable-courses{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}@media only screen and (min-width: 600px)and (max-width: 767px){.wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course{-webkit-box-flex:1;-ms-flex:1 0 calc(50% - 20px);flex:1 0 calc(50% - 20px);max-width:calc(50% - 20px)}}@media only screen and (min-width: 768px){.wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course{-webkit-box-flex:1;-ms-flex:1 0 calc(33% - 20px);flex:1 0 calc(33% - 20px);max-width:calc(33% - 20px)}}
diff --git a/assets/css/admin-importer.css b/assets/css/admin-importer.css
new file mode 100644
index 0000000000..fc4b724e8b
--- /dev/null
+++ b/assets/css/admin-importer.css
@@ -0,0 +1,113 @@
+.llms-import-file-wrap {
+ background: #fafafa;
+ border: 1px solid #ccd0d4;
+ padding: 10px;
+ margin: 20px auto;
+ display: -webkit-inline-box;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.llms-cloud-import-help.button-link {
+ color: inherit;
+ vertical-align: top;
+ text-decoration: none;
+}
+
+.wrap.llms-import-export ul.llms-importable-courses {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ gap: 20px;
+}
+@media only screen and (min-width: 680px) {
+ .wrap.llms-import-export ul.llms-importable-courses {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ }
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course {
+ background-color: #FFF;
+ border: 1px solid #dedede;
+ border-radius: 12px;
+ -webkit-box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ list-style: none;
+ margin: 20px 0;
+ overflow: hidden;
+}
+@media only screen and (min-width: 680px) {
+ .wrap.llms-import-export ul.llms-importable-courses .llms-importable-course {
+ -webkit-box-flex: 0;
+ -ms-flex-positive: 0;
+ flex-grow: 0;
+ -ms-flex-negative: 1;
+ flex-shrink: 1;
+ -ms-flex-preferred-size: 31%;
+ flex-basis: 31%;
+ }
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course img {
+ display: block;
+ max-width: 100%;
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course h3 {
+ color: #1d2327;
+ font-size: 20px;
+ line-height: 1.5;
+ margin: 30px 20px 15px;
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course p {
+ font-size: 15px;
+ line-height: 1.5;
+ margin: 0 20px 15px;
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button {
+ padding-bottom: 10px;
+ position: relative;
+}
+.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button .button {
+ bottom: 20px;
+ right: 20px;
+ position: absolute;
+}
+@media only screen and (min-width: 600px) {
+ .wrap.llms-import-export ul.llms-importable-courses {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ }
+}
+@media only screen and (min-width: 600px) and (max-width: 767px) {
+ .wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 calc(50% - 20px);
+ flex: 1 0 calc(50% - 20px);
+ max-width: calc(50% - 20px);
+ }
+}
+@media only screen and (min-width: 768px) {
+ .wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 calc(33% - 20px);
+ flex: 1 0 calc(33% - 20px);
+ max-width: calc(33% - 20px);
+ }
+}
+/*# sourceMappingURL=../maps/css/admin-importer.css.map */
diff --git a/assets/css/admin-importer.min.css b/assets/css/admin-importer.min.css
new file mode 100644
index 0000000000..cb5d70981f
--- /dev/null
+++ b/assets/css/admin-importer.min.css
@@ -0,0 +1,2 @@
+.llms-import-file-wrap{background:#fafafa;border:1px solid #ccd0d4;padding:10px;margin:20px auto;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.llms-cloud-import-help.button-link{color:inherit;vertical-align:top;text-decoration:none}.wrap.llms-import-export ul.llms-importable-courses{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:20px}@media only screen and (min-width: 680px){.wrap.llms-import-export ul.llms-importable-courses{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course{background-color:#fff;border:1px solid #dedede;border-radius:12px;-webkit-box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);list-style:none;margin:20px 0;overflow:hidden}@media only screen and (min-width: 680px){.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:1;flex-shrink:1;-ms-flex-preferred-size:31%;flex-basis:31%}}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course img{display:block;max-width:100%}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course h3{color:#1d2327;font-size:20px;line-height:1.5;margin:30px 20px 15px}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course p{font-size:15px;line-height:1.5;margin:0 20px 15px}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button{padding-bottom:10px;position:relative}.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button .button{bottom:20px;right:20px;position:absolute}@media only screen and (min-width: 600px){.wrap.llms-import-export ul.llms-importable-courses{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}@media only screen and (min-width: 600px)and (max-width: 767px){.wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course{-webkit-box-flex:1;-ms-flex:1 0 calc(50% - 20px);flex:1 0 calc(50% - 20px);max-width:calc(50% - 20px)}}@media only screen and (min-width: 768px){.wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course{-webkit-box-flex:1;-ms-flex:1 0 calc(33% - 20px);flex:1 0 calc(33% - 20px);max-width:calc(33% - 20px)}}
+/*# sourceMappingURL=../maps/css/admin-importer.min.css.map */
diff --git a/assets/css/admin-rtl.css b/assets/css/admin-rtl.css
new file mode 100644
index 0000000000..036cccfe22
--- /dev/null
+++ b/assets/css/admin-rtl.css
@@ -0,0 +1,7684 @@
+@charset "UTF-8";
+#poststuff .llms-metabox:before, #poststuff .llms-metabox:after,
+.llms-form-fields:before,
+.llms-metabox .llms-access-plans:before,
+.llms-collapsible .llms-collapsible-body:before,
+.llms-collapsible .llms-collapsible-header:before,
+.llms-collapsible:before,
+.llms-form-fields:after,
+.llms-metabox .llms-access-plans:after,
+.llms-collapsible .llms-collapsible-body:after,
+.llms-collapsible .llms-collapsible-header:after,
+.llms-collapsible:after {
+ content: " ";
+ display: table;
+}
+#poststuff .llms-metabox:after,
+.llms-form-fields:after,
+.llms-metabox .llms-access-plans:after,
+.llms-collapsible .llms-collapsible-body:after,
+.llms-collapsible .llms-collapsible-header:after,
+.llms-collapsible:after {
+ clear: both;
+}
+
+.llms-button-action,
+.llms-button-danger,
+.llms-button-primary,
+.llms-button-secondary {
+ border: none;
+ border-radius: 8px;
+ color: #fefefe;
+ cursor: pointer;
+ display: inline-block;
+ font-size: 18px;
+ font-weight: 700;
+ text-decoration: none;
+ text-shadow: none;
+ line-height: 1;
+ margin: 0;
+ max-width: 100%;
+ padding: 12px 24px;
+ position: relative;
+ -webkit-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+}
+.llms-button-action:disabled,
+.llms-button-danger:disabled,
+.llms-button-primary:disabled,
+.llms-button-secondary:disabled {
+ opacity: 0.5;
+}
+.llms-button-action:hover, .llms-button-action:active,
+.llms-button-danger:hover,
+.llms-button-danger:active,
+.llms-button-primary:hover,
+.llms-button-primary:active,
+.llms-button-secondary:hover,
+.llms-button-secondary:active {
+ color: #fefefe;
+}
+.llms-button-action:focus,
+.llms-button-danger:focus,
+.llms-button-primary:focus,
+.llms-button-secondary:focus {
+ color: #fefefe;
+}
+.llms-button-action.auto,
+.llms-button-danger.auto,
+.llms-button-primary.auto,
+.llms-button-secondary.auto {
+ width: auto;
+}
+.llms-button-action.full,
+.llms-button-danger.full,
+.llms-button-primary.full,
+.llms-button-secondary.full {
+ display: block;
+ text-align: center;
+ width: 100%;
+}
+.llms-button-action.square,
+.llms-button-danger.square,
+.llms-button-primary.square,
+.llms-button-secondary.square {
+ padding: 12px;
+}
+.llms-button-action.small,
+.llms-button-danger.small,
+.llms-button-primary.small,
+.llms-button-secondary.small {
+ font-size: 13px;
+ padding: 8px 14px;
+}
+.llms-button-action.small.square,
+.llms-button-danger.small.square,
+.llms-button-primary.small.square,
+.llms-button-secondary.small.square {
+ padding: 8px;
+}
+.llms-button-action.large,
+.llms-button-danger.large,
+.llms-button-primary.large,
+.llms-button-secondary.large {
+ font-size: 18px;
+ line-height: 1.2;
+ padding: 16px 32px;
+}
+.llms-button-action.large.square,
+.llms-button-danger.large.square,
+.llms-button-primary.large.square,
+.llms-button-secondary.large.square {
+ padding: 16px;
+}
+.llms-button-action.large .fa,
+.llms-button-danger.large .fa,
+.llms-button-primary.large .fa,
+.llms-button-secondary.large .fa {
+ right: -7px;
+ position: relative;
+}
+
+/* Fix for cases where link color overrides the button color */
+a.llms-button-action,
+a.llms-button-danger,
+a.llms-button-primary {
+ color: #fefefe;
+}
+
+.llms-button-primary {
+ background: #466dd8;
+}
+.llms-button-primary:hover, .llms-button-primary.clicked {
+ background: #2b55cb;
+}
+.llms-button-primary:focus, .llms-button-primary:active {
+ background: #6888df;
+}
+
+.llms-button-secondary {
+ background: #e1e1e1;
+ color: #444;
+}
+.llms-button-secondary:hover {
+ color: #414141;
+ background: #cdcdcd;
+}
+.llms-button-secondary:focus, .llms-button-secondary:active {
+ color: #414141;
+ background: #ebebeb;
+}
+
+/* Fix for cases where link color overrides the button color */
+a.llms-button-secondary {
+ color: #444;
+}
+
+.llms-button-action {
+ background: #c05621;
+}
+.llms-button-action:hover, .llms-button-action.clicked {
+ background: #f67d28;
+}
+.llms-button-action:focus, .llms-button-action:active {
+ background: #faad76;
+}
+
+.llms-button-danger {
+ background: #bb231c;
+}
+.llms-button-danger:hover {
+ background: #981c17;
+}
+.llms-button-danger:focus, .llms-button-danger:active {
+ background: #cd261f;
+}
+
+.llms-button-outline {
+ background: transparent;
+ border: 3px solid #1D2327;
+ border-radius: 8px;
+ color: #1D2327;
+ cursor: pointer;
+ font-size: 16px;
+ font-weight: 700;
+ text-decoration: none;
+ text-shadow: none;
+ line-height: 1;
+ margin: 0;
+ max-width: 100%;
+ padding: 12px 24px;
+ position: relative;
+ -webkit-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+}
+.llms-button-outline:disabled {
+ opacity: 0.5;
+}
+.llms-button-outline:hover, .llms-button-outline:active {
+ color: #1D2327;
+}
+.llms-button-outline:focus {
+ color: #1D2327;
+}
+.llms-button-outline.auto {
+ width: auto;
+}
+.llms-button-outline.full {
+ display: block;
+ text-align: center;
+ width: 100%;
+}
+.llms-button-outline.square {
+ padding: 12px;
+}
+
+.llms-course-continue-button {
+ display: inline-block;
+}
+
+.lifterlms [data-tip],
+.lifterlms [data-title-default],
+.lifterlms [data-title-active],
+.llms-metabox [data-tip],
+.llms-metabox [data-title-default],
+.llms-metabox [data-title-active],
+.llms-mb-container [data-tip],
+.llms-mb-container [data-title-default],
+.llms-mb-container [data-title-active],
+.llms-quiz-wrapper [data-tip],
+.llms-quiz-wrapper [data-title-default],
+.llms-quiz-wrapper [data-title-active] {
+ position: relative;
+}
+.lifterlms [data-tip].tip--top-right:before,
+.lifterlms [data-title-default].tip--top-right:before,
+.lifterlms [data-title-active].tip--top-right:before,
+.llms-metabox [data-tip].tip--top-right:before,
+.llms-metabox [data-title-default].tip--top-right:before,
+.llms-metabox [data-title-active].tip--top-right:before,
+.llms-mb-container [data-tip].tip--top-right:before,
+.llms-mb-container [data-title-default].tip--top-right:before,
+.llms-mb-container [data-title-active].tip--top-right:before,
+.llms-quiz-wrapper [data-tip].tip--top-right:before,
+.llms-quiz-wrapper [data-title-default].tip--top-right:before,
+.llms-quiz-wrapper [data-title-active].tip--top-right:before {
+ bottom: 100%;
+ right: -10px;
+}
+.lifterlms [data-tip].tip--top-right:hover:before,
+.lifterlms [data-title-default].tip--top-right:hover:before,
+.lifterlms [data-title-active].tip--top-right:hover:before,
+.llms-metabox [data-tip].tip--top-right:hover:before,
+.llms-metabox [data-title-default].tip--top-right:hover:before,
+.llms-metabox [data-title-active].tip--top-right:hover:before,
+.llms-mb-container [data-tip].tip--top-right:hover:before,
+.llms-mb-container [data-title-default].tip--top-right:hover:before,
+.llms-mb-container [data-title-active].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before {
+ bottom: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--top-right:after,
+.lifterlms [data-title-default].tip--top-right:after,
+.lifterlms [data-title-active].tip--top-right:after,
+.llms-metabox [data-tip].tip--top-right:after,
+.llms-metabox [data-title-default].tip--top-right:after,
+.llms-metabox [data-title-active].tip--top-right:after,
+.llms-mb-container [data-tip].tip--top-right:after,
+.llms-mb-container [data-title-default].tip--top-right:after,
+.llms-mb-container [data-title-active].tip--top-right:after,
+.llms-quiz-wrapper [data-tip].tip--top-right:after,
+.llms-quiz-wrapper [data-title-default].tip--top-right:after,
+.llms-quiz-wrapper [data-title-active].tip--top-right:after {
+ border-top-color: #444;
+ right: 6px;
+ top: 0;
+}
+.lifterlms [data-tip].tip--top-right:hover:after,
+.lifterlms [data-title-default].tip--top-right:hover:after,
+.lifterlms [data-title-active].tip--top-right:hover:after,
+.llms-metabox [data-tip].tip--top-right:hover:after,
+.llms-metabox [data-title-default].tip--top-right:hover:after,
+.llms-metabox [data-title-active].tip--top-right:hover:after,
+.llms-mb-container [data-tip].tip--top-right:hover:after,
+.llms-mb-container [data-title-default].tip--top-right:hover:after,
+.llms-mb-container [data-title-active].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after {
+ top: -6px;
+}
+.lifterlms [data-tip].tip--top-left:before,
+.lifterlms [data-title-default].tip--top-left:before,
+.lifterlms [data-title-active].tip--top-left:before,
+.llms-metabox [data-tip].tip--top-left:before,
+.llms-metabox [data-title-default].tip--top-left:before,
+.llms-metabox [data-title-active].tip--top-left:before,
+.llms-mb-container [data-tip].tip--top-left:before,
+.llms-mb-container [data-title-default].tip--top-left:before,
+.llms-mb-container [data-title-active].tip--top-left:before,
+.llms-quiz-wrapper [data-tip].tip--top-left:before,
+.llms-quiz-wrapper [data-title-default].tip--top-left:before,
+.llms-quiz-wrapper [data-title-active].tip--top-left:before {
+ bottom: 100%;
+ left: -10px;
+}
+.lifterlms [data-tip].tip--top-left:hover:before,
+.lifterlms [data-title-default].tip--top-left:hover:before,
+.lifterlms [data-title-active].tip--top-left:hover:before,
+.llms-metabox [data-tip].tip--top-left:hover:before,
+.llms-metabox [data-title-default].tip--top-left:hover:before,
+.llms-metabox [data-title-active].tip--top-left:hover:before,
+.llms-mb-container [data-tip].tip--top-left:hover:before,
+.llms-mb-container [data-title-default].tip--top-left:hover:before,
+.llms-mb-container [data-title-active].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before {
+ bottom: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--top-left:after,
+.lifterlms [data-title-default].tip--top-left:after,
+.lifterlms [data-title-active].tip--top-left:after,
+.llms-metabox [data-tip].tip--top-left:after,
+.llms-metabox [data-title-default].tip--top-left:after,
+.llms-metabox [data-title-active].tip--top-left:after,
+.llms-mb-container [data-tip].tip--top-left:after,
+.llms-mb-container [data-title-default].tip--top-left:after,
+.llms-mb-container [data-title-active].tip--top-left:after,
+.llms-quiz-wrapper [data-tip].tip--top-left:after,
+.llms-quiz-wrapper [data-title-default].tip--top-left:after,
+.llms-quiz-wrapper [data-title-active].tip--top-left:after {
+ border-top-color: #444;
+ left: 6px;
+ top: 0;
+}
+.lifterlms [data-tip].tip--top-left:hover:after,
+.lifterlms [data-title-default].tip--top-left:hover:after,
+.lifterlms [data-title-active].tip--top-left:hover:after,
+.llms-metabox [data-tip].tip--top-left:hover:after,
+.llms-metabox [data-title-default].tip--top-left:hover:after,
+.llms-metabox [data-title-active].tip--top-left:hover:after,
+.llms-mb-container [data-tip].tip--top-left:hover:after,
+.llms-mb-container [data-title-default].tip--top-left:hover:after,
+.llms-mb-container [data-title-active].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after {
+ top: -6px;
+}
+.lifterlms [data-tip].tip--bottom-left:before,
+.lifterlms [data-title-default].tip--bottom-left:before,
+.lifterlms [data-title-active].tip--bottom-left:before,
+.llms-metabox [data-tip].tip--bottom-left:before,
+.llms-metabox [data-title-default].tip--bottom-left:before,
+.llms-metabox [data-title-active].tip--bottom-left:before,
+.llms-mb-container [data-tip].tip--bottom-left:before,
+.llms-mb-container [data-title-default].tip--bottom-left:before,
+.llms-mb-container [data-title-active].tip--bottom-left:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:before {
+ top: 100%;
+ left: -10px;
+}
+.lifterlms [data-tip].tip--bottom-left:hover:before,
+.lifterlms [data-title-default].tip--bottom-left:hover:before,
+.lifterlms [data-title-active].tip--bottom-left:hover:before,
+.llms-metabox [data-tip].tip--bottom-left:hover:before,
+.llms-metabox [data-title-default].tip--bottom-left:hover:before,
+.llms-metabox [data-title-active].tip--bottom-left:hover:before,
+.llms-mb-container [data-tip].tip--bottom-left:hover:before,
+.llms-mb-container [data-title-default].tip--bottom-left:hover:before,
+.llms-mb-container [data-title-active].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before {
+ top: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--bottom-left:after,
+.lifterlms [data-title-default].tip--bottom-left:after,
+.lifterlms [data-title-active].tip--bottom-left:after,
+.llms-metabox [data-tip].tip--bottom-left:after,
+.llms-metabox [data-title-default].tip--bottom-left:after,
+.llms-metabox [data-title-active].tip--bottom-left:after,
+.llms-mb-container [data-tip].tip--bottom-left:after,
+.llms-mb-container [data-title-default].tip--bottom-left:after,
+.llms-mb-container [data-title-active].tip--bottom-left:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:after {
+ border-bottom-color: #444;
+ left: 6px;
+ bottom: 0;
+}
+.lifterlms [data-tip].tip--bottom-left:hover:after,
+.lifterlms [data-title-default].tip--bottom-left:hover:after,
+.lifterlms [data-title-active].tip--bottom-left:hover:after,
+.llms-metabox [data-tip].tip--bottom-left:hover:after,
+.llms-metabox [data-title-default].tip--bottom-left:hover:after,
+.llms-metabox [data-title-active].tip--bottom-left:hover:after,
+.llms-mb-container [data-tip].tip--bottom-left:hover:after,
+.llms-mb-container [data-title-default].tip--bottom-left:hover:after,
+.llms-mb-container [data-title-active].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after {
+ bottom: -6px;
+}
+.lifterlms [data-tip].tip--bottom-right:before,
+.lifterlms [data-title-default].tip--bottom-right:before,
+.lifterlms [data-title-active].tip--bottom-right:before,
+.llms-metabox [data-tip].tip--bottom-right:before,
+.llms-metabox [data-title-default].tip--bottom-right:before,
+.llms-metabox [data-title-active].tip--bottom-right:before,
+.llms-mb-container [data-tip].tip--bottom-right:before,
+.llms-mb-container [data-title-default].tip--bottom-right:before,
+.llms-mb-container [data-title-active].tip--bottom-right:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:before {
+ top: 100%;
+ right: -10px;
+}
+.lifterlms [data-tip].tip--bottom-right:hover:before,
+.lifterlms [data-title-default].tip--bottom-right:hover:before,
+.lifterlms [data-title-active].tip--bottom-right:hover:before,
+.llms-metabox [data-tip].tip--bottom-right:hover:before,
+.llms-metabox [data-title-default].tip--bottom-right:hover:before,
+.llms-metabox [data-title-active].tip--bottom-right:hover:before,
+.llms-mb-container [data-tip].tip--bottom-right:hover:before,
+.llms-mb-container [data-title-default].tip--bottom-right:hover:before,
+.llms-mb-container [data-title-active].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before {
+ top: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--bottom-right:after,
+.lifterlms [data-title-default].tip--bottom-right:after,
+.lifterlms [data-title-active].tip--bottom-right:after,
+.llms-metabox [data-tip].tip--bottom-right:after,
+.llms-metabox [data-title-default].tip--bottom-right:after,
+.llms-metabox [data-title-active].tip--bottom-right:after,
+.llms-mb-container [data-tip].tip--bottom-right:after,
+.llms-mb-container [data-title-default].tip--bottom-right:after,
+.llms-mb-container [data-title-active].tip--bottom-right:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:after {
+ border-bottom-color: #444;
+ right: 6px;
+ bottom: 0;
+}
+.lifterlms [data-tip].tip--bottom-right:hover:after,
+.lifterlms [data-title-default].tip--bottom-right:hover:after,
+.lifterlms [data-title-active].tip--bottom-right:hover:after,
+.llms-metabox [data-tip].tip--bottom-right:hover:after,
+.llms-metabox [data-title-default].tip--bottom-right:hover:after,
+.llms-metabox [data-title-active].tip--bottom-right:hover:after,
+.llms-mb-container [data-tip].tip--bottom-right:hover:after,
+.llms-mb-container [data-title-default].tip--bottom-right:hover:after,
+.llms-mb-container [data-title-active].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after {
+ bottom: -6px;
+}
+.lifterlms [data-tip]:before,
+.lifterlms [data-title-default]:before,
+.lifterlms [data-title-active]:before,
+.llms-metabox [data-tip]:before,
+.llms-metabox [data-title-default]:before,
+.llms-metabox [data-title-active]:before,
+.llms-mb-container [data-tip]:before,
+.llms-mb-container [data-title-default]:before,
+.llms-mb-container [data-title-active]:before,
+.llms-quiz-wrapper [data-tip]:before,
+.llms-quiz-wrapper [data-title-default]:before,
+.llms-quiz-wrapper [data-title-active]:before {
+ background: #444;
+ border-radius: 4px;
+ color: #fff;
+ font-size: 13px;
+ line-height: 1.2;
+ padding: 8px;
+ max-width: 300px;
+ width: -webkit-max-content;
+ width: -moz-max-content;
+ width: max-content;
+}
+.lifterlms [data-tip]:after,
+.lifterlms [data-title-default]:after,
+.lifterlms [data-title-active]:after,
+.llms-metabox [data-tip]:after,
+.llms-metabox [data-title-default]:after,
+.llms-metabox [data-title-active]:after,
+.llms-mb-container [data-tip]:after,
+.llms-mb-container [data-title-default]:after,
+.llms-mb-container [data-title-active]:after,
+.llms-quiz-wrapper [data-tip]:after,
+.llms-quiz-wrapper [data-title-default]:after,
+.llms-quiz-wrapper [data-title-active]:after {
+ content: "";
+ border: 6px solid transparent;
+ height: 0;
+ width: 0;
+}
+.lifterlms [data-tip]:before, .lifterlms [data-tip]:after,
+.lifterlms [data-title-default]:before,
+.lifterlms [data-title-default]:after,
+.lifterlms [data-title-active]:before,
+.lifterlms [data-title-active]:after,
+.llms-metabox [data-tip]:before,
+.llms-metabox [data-tip]:after,
+.llms-metabox [data-title-default]:before,
+.llms-metabox [data-title-default]:after,
+.llms-metabox [data-title-active]:before,
+.llms-metabox [data-title-active]:after,
+.llms-mb-container [data-tip]:before,
+.llms-mb-container [data-tip]:after,
+.llms-mb-container [data-title-default]:before,
+.llms-mb-container [data-title-default]:after,
+.llms-mb-container [data-title-active]:before,
+.llms-mb-container [data-title-active]:after,
+.llms-quiz-wrapper [data-tip]:before,
+.llms-quiz-wrapper [data-tip]:after,
+.llms-quiz-wrapper [data-title-default]:before,
+.llms-quiz-wrapper [data-title-default]:after,
+.llms-quiz-wrapper [data-title-active]:before,
+.llms-quiz-wrapper [data-title-active]:after {
+ opacity: 0;
+ -webkit-transition: all 0.2s 0.1s ease;
+ transition: all 0.2s 0.1s ease;
+ position: absolute;
+ pointer-events: none;
+ visibility: hidden;
+}
+.lifterlms [data-tip]:hover:before, .lifterlms [data-tip]:hover:after,
+.lifterlms [data-title-default]:hover:before,
+.lifterlms [data-title-default]:hover:after,
+.lifterlms [data-title-active]:hover:before,
+.lifterlms [data-title-active]:hover:after,
+.llms-metabox [data-tip]:hover:before,
+.llms-metabox [data-tip]:hover:after,
+.llms-metabox [data-title-default]:hover:before,
+.llms-metabox [data-title-default]:hover:after,
+.llms-metabox [data-title-active]:hover:before,
+.llms-metabox [data-title-active]:hover:after,
+.llms-mb-container [data-tip]:hover:before,
+.llms-mb-container [data-tip]:hover:after,
+.llms-mb-container [data-title-default]:hover:before,
+.llms-mb-container [data-title-default]:hover:after,
+.llms-mb-container [data-title-active]:hover:before,
+.llms-mb-container [data-title-active]:hover:after,
+.llms-quiz-wrapper [data-tip]:hover:before,
+.llms-quiz-wrapper [data-tip]:hover:after,
+.llms-quiz-wrapper [data-title-default]:hover:before,
+.llms-quiz-wrapper [data-title-default]:hover:after,
+.llms-quiz-wrapper [data-title-active]:hover:before,
+.llms-quiz-wrapper [data-title-active]:hover:after {
+ opacity: 1;
+ -webkit-transition: all 0 0.1s ease;
+ transition: all 0 0.1s ease;
+ visibility: visible;
+ z-index: 99999999;
+}
+.lifterlms [data-tip]:before,
+.llms-metabox [data-tip]:before,
+.llms-mb-container [data-tip]:before,
+.llms-quiz-wrapper [data-tip]:before {
+ content: attr(data-tip);
+}
+.lifterlms [data-tip].active:before,
+.llms-metabox [data-tip].active:before,
+.llms-mb-container [data-tip].active:before,
+.llms-quiz-wrapper [data-tip].active:before {
+ content: attr(data-tip-active);
+}
+
+#adminmenu .toplevel_page_lifterlms .wp-menu-image img {
+ padding-top: 6px;
+ width: 20px;
+}
+#adminmenu .toplevel_page_lifterlms a[href*="page=llms-add-ons"],
+#adminmenu .opensub .wp-submenu li.current a[href*="page=llms-add-ons"],
+#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],
+#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],
+#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],
+#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a[href*="page=llms-add-ons"] {
+ color: #f8954f;
+}
+
+/******************************************************************
+
+Grids for Breakpoints
+
+******************************************************************/
+.last-col {
+ float: left;
+ padding-left: 0 !important;
+}
+
+.last-col:after {
+ clear: both;
+}
+
+/*
+Mobile Grid Styles
+These are the widths for the mobile grid.
+There are four types, but you can add or customize
+them however you see fit.
+*/
+@media (max-width: 767px) {
+ .m-all {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ padding-left: 0;
+ }
+ .m-1of2 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 50%;
+ }
+ .m-1of3 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 33.33%;
+ }
+ .m-2of3 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 66.66%;
+ }
+ .m-1of4 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 25%;
+ }
+ .m-3of4 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 75%;
+ }
+ .m-right {
+ text-align: center;
+ }
+ .m-center {
+ text-align: center;
+ }
+ .m-left {
+ text-align: center;
+ }
+ .d-right {
+ text-align: left;
+ }
+ .d-center {
+ text-align: center;
+ }
+ .d-left {
+ text-align: right;
+ }
+}
+/* Portrait tablet to landscape */
+@media (min-width: 768px) and (max-width: 1029px) {
+ .t-all {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ padding-left: 0;
+ }
+ .t-1of2 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 50%;
+ }
+ .t-1of3 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 33.33%;
+ }
+ .t-2of3 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 66.66%;
+ }
+ .t-1of4 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 25%;
+ }
+ .t-3of4 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 75%;
+ }
+ .t-1of5 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 20%;
+ }
+ .t-2of5 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 40%;
+ }
+ .t-3of5 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 60%;
+ }
+ .t-4of5 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 80%;
+ }
+ .d-right {
+ text-align: left;
+ }
+ .d-center {
+ text-align: center;
+ }
+ .d-left {
+ text-align: right;
+ }
+}
+/* Landscape to small desktop */
+@media (min-width: 1030px) {
+ .d-all {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ padding-left: 0;
+ }
+ .d-1of2 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 50%;
+ }
+ .d-1of3 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 33.33%;
+ }
+ .d-2of3 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 66.66%;
+ }
+ .d-1of4 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 25%;
+ }
+ .d-3of4 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 75%;
+ }
+ .d-1of5 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 20%;
+ }
+ .d-2of5 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 40%;
+ }
+ .d-3of5 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 60%;
+ }
+ .d-4of5 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 80%;
+ }
+ .d-1of6 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 16.6666666667%;
+ }
+ .d-1of7 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 14.2857142857%;
+ }
+ .d-2of7 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 28.5714286%;
+ }
+ .d-3of7 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 42.8571429%;
+ }
+ .d-4of7 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 57.1428572%;
+ }
+ .d-5of7 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 71.4285715%;
+ }
+ .d-6of7 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 85.7142857%;
+ }
+ .d-1of8 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 12.5%;
+ }
+ .d-1of9 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 11.1111111111%;
+ }
+ .d-1of10 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 10%;
+ }
+ .d-1of11 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 9.0909090909%;
+ }
+ .d-1of12 {
+ float: right;
+ padding-left: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 8.33%;
+ }
+ .d-right {
+ text-align: left;
+ }
+ .d-center {
+ text-align: center;
+ }
+ .d-left {
+ text-align: right;
+ }
+}
+/******************************************************************
+
+Form Styles
+
+******************************************************************/
+#llms-form-wrapper .llms-search-form-wrapper {
+ border-bottom: 1px solid #999;
+ margin: 20px 0;
+}
+#llms-form-wrapper #llms_analytics_search {
+ border: none !important;
+ text-shadow: none !important;
+ border: none !important;
+ outline: none !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ margin: 0 !important;
+ color: #fefefe !important;
+ background: #466dd8 !important;
+ border-radius: 0;
+ -webkit-transition: 0.5s;
+ transition: 0.5s;
+}
+#llms-form-wrapper #llms_analytics_search:hover {
+ background: #0185a3 !important;
+}
+#llms-form-wrapper #llms_analytics_search:active {
+ background: #33b1cb !important;
+}
+
+#llms-skip-setup-form .llms-admin-link {
+ background: none !important;
+ border: none;
+ padding: 0 !important;
+ color: #0074a2;
+ cursor: pointer;
+}
+#llms-skip-setup-form .llms-admin-link:hover {
+ color: #2ea2cc;
+}
+#llms-skip-setup-form .llms-admin-link:focus {
+ color: #124964;
+}
+
+/**
+ * Toggle Switch ( replaces checkbox on admin panels )
+ */
+.llms-switch {
+ position: relative;
+}
+.llms-switch .llms-toggle {
+ position: absolute;
+ margin-right: -9999px;
+ visibility: hidden;
+}
+.llms-switch .llms-toggle + label {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: block;
+ position: relative;
+ cursor: pointer;
+ outline: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.llms-switch input.llms-toggle-round + label {
+ border: 2px solid #6c7781;
+ border-radius: 10px;
+ height: 20px;
+ width: 36px;
+}
+.llms-switch input.llms-toggle-round + label:before,
+.llms-switch input.llms-toggle-round + label:after {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ content: "";
+ display: block;
+ position: absolute;
+ -webkit-transition: background 0.4s;
+ transition: background 0.4s;
+}
+.llms-switch input.llms-toggle-round:checked + label {
+ border-color: #11a0d2;
+ background-color: #11a0d2;
+}
+.llms-switch input.llms-toggle-round + label:after {
+ height: 12px;
+ right: 2px;
+ top: 2px;
+ background-color: #6c7781;
+ border-radius: 50%;
+ -webkit-transition: margin 0.4s;
+ transition: margin 0.4s;
+ width: 12px;
+ z-index: 3;
+}
+.llms-switch input.llms-toggle-round:checked + label:after {
+ background-color: #fefefe;
+ margin-right: 16px;
+}
+.llms-switch input.llms-toggle-round + label:before {
+ height: 8px;
+ top: 4px;
+ border: 1px solid #6c7781;
+ border-radius: 50%;
+ left: 4px;
+ width: 8px;
+ z-index: 2;
+}
+.llms-switch input.llms-toggle-round:checked + label:before {
+ border-color: #fefefe;
+ border-radius: 0;
+ right: 6px;
+ left: auto;
+ width: 2px;
+}
+
+#llms-profile-fields {
+ margin: 50px 0;
+}
+#llms-profile-fields .llms-form-field {
+ padding-right: 0;
+}
+#llms-profile-fields label {
+ display: block;
+ font-weight: bold;
+ padding: 8px 0 2px;
+}
+#llms-profile-fields .type-checkbox .type-checkbox label {
+ display: initial;
+ font-weight: initial;
+ padding: 0;
+}
+#llms-profile-fields .type-checkbox .type-checkbox input {
+ display: inline-block;
+ margin-bottom: 0;
+ width: 1rem;
+}
+#llms-profile-fields select {
+ max-width: 100%;
+}
+
+a.llms-voucher-delete {
+ background: #bb231c;
+ color: #fefefe;
+ display: block;
+ padding: 4px 2px;
+ text-decoration: none;
+ -webkit-transition: ease 0.3s all;
+ transition: ease 0.3s all;
+}
+a.llms-voucher-delete:hover {
+ background: #af3a26;
+}
+
+.llms-voucher-codes-wrapper table,
+.llms-voucher-redemption-wrapper table {
+ width: 100%;
+ border-collapse: collapse;
+}
+.llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td,
+.llms-voucher-redemption-wrapper table th,
+.llms-voucher-redemption-wrapper table td {
+ border: none;
+}
+.llms-voucher-codes-wrapper table thead,
+.llms-voucher-redemption-wrapper table thead {
+ background-color: #466dd8;
+ color: #fff;
+}
+.llms-voucher-codes-wrapper table thead th,
+.llms-voucher-redemption-wrapper table thead th {
+ padding: 10px 10px;
+}
+.llms-voucher-codes-wrapper table tr,
+.llms-voucher-redemption-wrapper table tr {
+ counter-increment: row-counter;
+}
+.llms-voucher-codes-wrapper table tr:nth-child(even),
+.llms-voucher-redemption-wrapper table tr:nth-child(even) {
+ background-color: #F1F1F1;
+}
+.llms-voucher-codes-wrapper table tr td,
+.llms-voucher-redemption-wrapper table tr td {
+ padding: 5px;
+}
+.llms-voucher-codes-wrapper table tr td:first-child:before,
+.llms-voucher-redemption-wrapper table tr td:first-child:before {
+ content: counter(row-counter);
+}
+
+.llms-voucher-codes-wrapper table {
+ width: 100%;
+ border-collapse: collapse;
+}
+.llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td {
+ border: none;
+}
+.llms-voucher-codes-wrapper table thead {
+ background-color: #466dd8;
+ color: #fff;
+}
+.llms-voucher-codes-wrapper table tr:nth-child(even) {
+ background-color: #F1F1F1;
+}
+.llms-voucher-codes-wrapper table tr td span {
+ display: inline-block;
+ min-width: 30px;
+}
+.llms-voucher-codes-wrapper button {
+ cursor: pointer;
+}
+.llms-voucher-codes-wrapper .llms-voucher-delete {
+ float: left;
+ margin-left: 15px;
+}
+.llms-voucher-codes-wrapper .llms-voucher-uses {
+ width: 50px;
+}
+.llms-voucher-codes-wrapper .llms-voucher-add-codes {
+ float: left;
+}
+.llms-voucher-codes-wrapper .llms-voucher-add-codes input[type=text] {
+ width: 30px;
+}
+
+.llms-voucher-export-wrapper .llms-voucher-export-type {
+ width: 100%;
+}
+.llms-voucher-export-wrapper .llms-voucher-export-type p {
+ margin: 0 15px 0 0;
+}
+.llms-voucher-export-wrapper .llms-voucher-email-wrapper {
+ width: 100%;
+ margin: 25px 0;
+}
+.llms-voucher-export-wrapper .llms-voucher-email-wrapper input[type=text] {
+ width: 100%;
+}
+.llms-voucher-export-wrapper .llms-voucher-email-wrapper p {
+ margin: 0;
+}
+.llms-voucher-export-wrapper > button {
+ float: left;
+}
+
+.postbox .inside {
+ overflow: auto;
+}
+
+.llms-widget {
+ background-color: #FFF;
+ border: 1px solid #dedede;
+ border-radius: 12px;
+ -webkit-box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ margin-bottom: 20px;
+ padding: 20px;
+ position: relative;
+ width: 100%;
+}
+.llms-widget.alt {
+ border: 1px solid #ccc;
+ background-color: #efefef;
+ margin-bottom: 10px;
+}
+.llms-widget.alt .llms-label {
+ color: #777;
+ font-size: 14px;
+ margin-bottom: 10px;
+ padding-bottom: 5px;
+}
+.llms-widget.alt h2 {
+ color: #444;
+ font-weight: 300;
+}
+.llms-widget a {
+ border-bottom: 1px dotted #466dd8;
+ display: inline-block;
+ text-decoration: none;
+}
+.llms-widget a:hover {
+ border-bottom: 1px dotted #2b55cb;
+}
+.llms-widget .llms-widget-content {
+ margin: 0.67em 0;
+ color: #466dd8;
+ font-size: 2.4em;
+ font-weight: 700;
+ line-height: 1;
+ word-break: break-all;
+}
+.llms-widget h2 {
+ font-size: 1.8em;
+}
+.llms-widget .llms-label {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 18px;
+ font-weight: 400;
+ margin: 0 0 10px 0;
+ text-align: center;
+}
+.llms-widget .llms-chart {
+ width: 100%;
+ padding: 10px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-widget mark.yes {
+ background-color: #7ad03a;
+}
+.llms-widget .llms-subtitle {
+ margin-bottom: 0;
+}
+.llms-widget .spinner {
+ float: none;
+ right: 50%;
+ margin: -10px -10px 0 0;
+ position: absolute;
+ top: 50%;
+ z-index: 2;
+}
+.llms-widget.is-loading:before {
+ background: #fefefe;
+ bottom: 0;
+ content: "";
+ right: 0;
+ opacity: 0.9;
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 1;
+}
+.llms-widget.is-loading .spinner {
+ visibility: visible;
+}
+.llms-widget td[colspan="2"] {
+ padding-right: 0;
+}
+.llms-widget tr.llms-disabled-field {
+ opacity: 0.5;
+ pointer-events: none;
+}
+
+.llms-widget-1-3,
+.llms-widget-1-4,
+.llms-widget-1-5 {
+ text-align: center;
+}
+
+.llms-widget .llms-widget-info-toggle {
+ color: #AAA;
+ cursor: pointer;
+ font-size: 16px;
+ position: absolute;
+ left: 20px;
+ top: 20px;
+}
+.llms-widget.info-showing .llms-widget-info {
+ display: block;
+}
+
+.llms-widget-info {
+ background: #444;
+ color: #fefefe;
+ bottom: -50px;
+ display: none;
+ padding: 15px;
+ position: absolute;
+ text-align: center;
+ right: 10px;
+ left: 15px;
+ z-index: 3;
+}
+.llms-widget-info:before {
+ content: "";
+ border: 12px solid transparent;
+ border-bottom-color: #444;
+ right: 50%;
+ margin-right: -12px;
+ position: absolute;
+ top: -24px;
+}
+.llms-widget-info p {
+ margin: 0;
+}
+
+.llms-widget-row:before, .llms-widget-row:after {
+ content: " ";
+ display: table;
+}
+.llms-widget-row:after {
+ clear: both;
+}
+
+.llms-widget-row .no-padding {
+ padding: 0 !important;
+}
+
+/******************************************************************
+
+SVG Styles
+
+******************************************************************/
+svg.icon {
+ height: 24px;
+ width: 24px;
+ display: inline-block;
+ fill: currentColor;
+ vertical-align: baseline;
+}
+button svg.icon {
+ height: 18px;
+ width: 18px;
+ margin: 4px 4px 0 -4px;
+ -webkit-filter: drop-shadow(0 1px #eee);
+ filter: drop-shadow(0 1px #eee);
+ float: left;
+}
+svg.icon.menu-icon {
+ height: 20px;
+ width: 20px;
+ display: inline-block;
+ fill: currentColor;
+ vertical-align: text-bottom;
+ margin-left: 10px;
+}
+svg.icon.tree-icon {
+ height: 13px;
+ width: 13px;
+ vertical-align: middle;
+}
+svg.icon.section-icon {
+ height: 16px;
+ width: 16px;
+ vertical-align: text-bottom;
+}
+svg.icon.button-icon {
+ height: 16px;
+ width: 16px;
+ vertical-align: text-bottom;
+}
+svg.icon.button-icon-attr {
+ height: 10px;
+ width: 10px;
+ vertical-align: middle;
+}
+svg.icon.list-icon {
+ height: 12px;
+ width: 12px;
+ vertical-align: middle;
+}
+svg.icon.list-icon.on {
+ color: #466dd8;
+}
+svg.icon.list-icon.off {
+ color: #444;
+}
+svg.icon.detail-icon {
+ height: 16px;
+ width: 16px;
+ vertical-align: text-bottom;
+ cursor: default;
+}
+svg.icon.detail-icon.on {
+ color: #466dd8;
+}
+svg.icon.detail-icon.off {
+ color: #ccc;
+}
+svg.icon-ion-arrow-up {
+ -webkit-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+}
+svg use {
+ pointer-events: none;
+}
+
+/******************************************************************
+
+Metabox Tabs
+
+******************************************************************/
+#side-sortables .tab-content {
+ padding: 0;
+}
+
+.llms-mb-container .tab-content {
+ display: none;
+ background-color: #FFF;
+ padding: 0 20px;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) {
+ margin: 0 0 15px 0;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li {
+ padding: 20px 0;
+ margin: 0;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.select:not([class*=d-]) {
+ width: 100%;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li:last-child {
+ border: 0;
+ padding-bottom: 0;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.top {
+ border-bottom: 0;
+ padding-bottom: 0;
+}
+.llms-mb-container .tab-content .full-width {
+ width: 100%;
+}
+.llms-mb-container .tab-content #wp-content-editor-tools {
+ background: none;
+}
+
+.llms-mb-container .tab-content.llms-active {
+ display: inherit;
+}
+
+.llms-mb-container .tab-content .no-border {
+ border-bottom: 0px;
+}
+
+/******************************************************************
+
+Styles for topModal modal
+
+******************************************************************/
+/**
+ * Base modal styles
+ */
+.topModal {
+ display: none;
+ position: relative;
+ border: 4px solid #808080;
+ background: #fff;
+ z-index: 1000001;
+ padding: 2px;
+ max-width: 500px;
+ margin: 34px auto 0;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+ background-color: #ffffff;
+ border-radius: 2px;
+ border: 1px solid #dddddd;
+}
+
+.topModalClose {
+ float: left;
+ cursor: pointer;
+ margin-left: 10px;
+ margin-top: 10px;
+}
+
+.topModalContainer {
+ display: none;
+ overflow: auto;
+ overflow-y: hidden;
+ position: fixed;
+ top: 0 !important;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ -webkit-overflow-scrolling: touch;
+ width: auto !important;
+ margin-right: 0 !important;
+ background-color: transparent !important;
+ z-index: 100002 !important;
+}
+
+.topModalBackground {
+ display: none;
+ background: #000;
+ position: fixed;
+ height: 100%;
+ width: 100%;
+ top: 0 !important;
+ right: 0;
+ margin-right: 0 !important;
+ z-index: 100002 !important;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: auto;
+ overflow-y: hidden;
+}
+
+body.modal-open {
+ overflow: hidden;
+}
+
+.llms-modal-header {
+ border-top-left-radius: 1px;
+ border-top-right-radius: 1px;
+ background: #466dd8;
+ color: #eeeeee;
+ padding: 10px 15px;
+ font-size: 18px;
+}
+
+#llms-icon-modal-close {
+ width: 16px;
+ height: 16px;
+ fill: #fefefe;
+}
+
+.llms-modal-content {
+ padding: 20px;
+}
+.llms-modal-content h3 {
+ margin-top: 0;
+}
+
+/**
+ * Custom Modal Styles for LifterLMS
+ */
+.llms-modal-form h1 {
+ margin-top: 0;
+}
+.llms-modal-form input[type=text] {
+ width: 100%;
+}
+.llms-modal-form textarea,
+.llms-modal-form input[type=text],
+.llms-modal-form input[type=password],
+.llms-modal-form input[type=file],
+.llms-modal-form input[type=datetime],
+.llms-modal-form input[type=datetime-local],
+.llms-modal-form input[type=date],
+.llms-modal-form input[type=month],
+.llms-modal-form input[type=time],
+.llms-modal-form input[type=week],
+.llms-modal-form input[type=number],
+.llms-modal-form input[type=email],
+.llms-modal-form input[type=url],
+.llms-modal-form input[type=search],
+.llms-modal-form input[type=tel],
+.llms-modal-form input[type=color] {
+ padding: 0 0.4em 0 0.4em;
+ margin-bottom: 2em;
+ vertical-align: middle;
+ border-radius: 3px;
+ min-width: 50px;
+ max-width: 635px;
+ width: 100%;
+ min-height: 32px;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ margin: 0 0 24px 0;
+ outline: none;
+ -webkit-transition: border 0.3s ease-in-out 0s;
+ transition: border 0.3s ease-in-out 0s;
+}
+.llms-modal-form textarea:focus,
+.llms-modal-form input[type=text]:focus,
+.llms-modal-form input[type=password]:focus,
+.llms-modal-form input[type=file]:focus,
+.llms-modal-form input[type=datetime]:focus,
+.llms-modal-form input[type=datetime-local]:focus,
+.llms-modal-form input[type=date]:focus,
+.llms-modal-form input[type=month]:focus,
+.llms-modal-form input[type=time]:focus,
+.llms-modal-form input[type=week]:focus,
+.llms-modal-form input[type=number]:focus,
+.llms-modal-form input[type=email]:focus,
+.llms-modal-form input[type=url]:focus,
+.llms-modal-form input[type=search]:focus,
+.llms-modal-form input[type=tel]:focus,
+.llms-modal-form input[type=color]:focus {
+ background: #fefefe;
+ border: 1px solid #466dd8;
+}
+.llms-modal-form textarea {
+ padding: 0.4em !important;
+ height: 100px !important;
+ border-radius: 3px;
+ vertical-align: middle;
+ min-height: 32px;
+ outline: none;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-modal-form textarea:focus {
+ background: #fefefe;
+ border: 1px solid #466dd8;
+}
+.llms-modal-form .chosen-container-single .chosen-single {
+ border-radius: 3px;
+ vertical-align: middle;
+ min-height: 32px;
+ border: 1px solid #ccc;
+ width: 100%;
+ background: #fefefe !important;
+ outline: none;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: 0 0 0 #fff;
+ box-shadow: 0 0 0 #fff;
+ line-height: 32px;
+ margin: 0 0 24px 0;
+}
+.llms-modal-form .chosen-container-single .chosen-single:focus {
+ background: #fefefe;
+ border: 1px solid #466dd8;
+}
+.llms-modal-form .chosen-container-single .chosen-single div b {
+ margin-top: 4px;
+}
+.llms-modal-form .chosen-search input[type=text] {
+ border: 1px solid #ccc;
+}
+.llms-modal-form .chosen-search input[type=text]:focus {
+ background-color: #fefefe;
+ border: 1px solid #466dd8;
+}
+.llms-modal-form .chosen-container-single .chosen-drop {
+ margin-top: -28px;
+}
+.llms-modal-form .llms-button-primary, .llms-modal-form .llms-button-secondary {
+ padding: 10px 10px;
+ border-radius: 0;
+ -webkit-transition: 0.5s;
+ transition: 0.5s;
+ -webkit-box-shadow: 0 1px 1px #ccc;
+ box-shadow: 0 1px 1px #ccc;
+}
+.llms-modal-form .llms-button-primary.full, .llms-modal-form .llms-button-secondary.full {
+ width: 100%;
+}
+
+.modal-open .select2-dropdown {
+ z-index: 1000005;
+}
+
+.button.llms-merge-code-button {
+ vertical-align: middle;
+}
+.button.llms-merge-code-button svg {
+ margin-left: 2px;
+ position: relative;
+ top: 4px;
+ width: 16px;
+}
+.button.llms-merge-code-button svg g {
+ fill: currentColor;
+}
+
+.llms-mb-container .llms-merge-code-wrapper {
+ float: left;
+ top: -5px;
+}
+
+.llms-merge-code-wrapper {
+ display: inline;
+ position: relative;
+}
+
+.llms-merge-codes {
+ background: #f7f7f7;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 1px 0 #ccc;
+ box-shadow: 0 1px 0 #ccc;
+ color: #555;
+ display: none;
+ right: 1px;
+ overflow: hidden;
+ position: absolute;
+ top: 30px;
+ width: 200px;
+}
+.llms-merge-codes ul {
+ margin: 0;
+ padding: 0;
+}
+.llms-merge-codes li {
+ cursor: pointer;
+ margin: 0;
+ padding: 4px 8px !important;
+ border-bottom: 1px solid #ccc;
+}
+.llms-merge-codes li:hover {
+ color: #23282d;
+ background: #fefefe;
+}
+.llms-merge-codes.active {
+ display: block;
+ z-index: 777;
+}
+
+/******************************************************************
+
+Base Mobile
+
+******************************************************************/
+.llms-nav-tab,
+.llms-nav-tab-filters {
+ display: block;
+ width: 100%;
+}
+
+form.llms-nav-tab-filters.full-width {
+ width: 100%;
+}
+form.llms-nav-tab-filters.full-width label {
+ display: inline-block;
+ width: 10%;
+ text-align: right;
+}
+form.llms-nav-tab-filters.full-width .select2-container {
+ width: 85% !important;
+}
+
+.llms-nav-tab-settings {
+ display: block;
+ width: 100%;
+}
+
+#llms-form-wrapper .llms-select {
+ width: 100%;
+ margin-bottom: 20px;
+}
+#llms-form-wrapper .llms-checkbox {
+ display: inline-block;
+ width: 100%;
+ text-align: right;
+}
+#llms-form-wrapper .llms-filter-options {
+ width: 100%;
+}
+#llms-form-wrapper .llms-date-select {
+ width: 100%;
+ display: inline-block;
+ margin-bottom: 20px;
+}
+#llms-form-wrapper .llms-date-select input[type=text] {
+ width: 100%;
+}
+ul.tabs li {
+ display: block;
+}
+
+@media only screen and (min-width: 481px) {
+ /******************************************************************
+
+ Larger Phones
+
+ ******************************************************************/
+ #llms-form-wrapper .llms-checkbox {
+ width: 33%;
+ }
+}
+@media only screen and (min-width: 768px) {
+ /******************************************************************
+
+ Tablets and small computers
+
+ ******************************************************************/
+ ul.tabs li {
+ display: inline-block;
+ }
+ .llms-nav-tab {
+ display: inline-block;
+ width: 33%;
+ }
+ .llms-nav-tab-settings {
+ display: inline-block;
+ width: 25%;
+ }
+ #llms-form-wrapper .llms-select {
+ width: 50%;
+ max-width: 500px;
+ }
+ #llms-form-wrapper .llms-filter-options {
+ width: 50%;
+ max-width: 500px;
+ }
+ #llms-form-wrapper .llms-date-select {
+ width: 47.5%;
+ }
+ #llms-form-wrapper .llms-date-select:first-child {
+ margin-left: 5%;
+ }
+ .llms-widget input[type=text],
+.llms-widget input[type=password],
+.llms-widget input[type=datetime],
+.llms-widget input[type=datetime-local],
+.llms-widget input[type=date],
+.llms-widget input[type=month],
+.llms-widget input[type=time],
+.llms-widget input[type=week],
+.llms-widget input[type=number],
+.llms-widget input[type=email],
+.llms-widget input[type=url],
+.llms-widget input[type=search],
+.llms-widget input[type=tel],
+.llms-widget input[type=color],
+.llms-widget select,
+.llms-widget textarea {
+ width: 50%;
+ }
+ .llms-widget input[type=text].medium,
+.llms-widget input[type=password].medium,
+.llms-widget input[type=datetime].medium,
+.llms-widget input[type=datetime-local].medium,
+.llms-widget input[type=date].medium,
+.llms-widget input[type=month].medium,
+.llms-widget input[type=time].medium,
+.llms-widget input[type=week].medium,
+.llms-widget input[type=number].medium,
+.llms-widget input[type=email].medium,
+.llms-widget input[type=url].medium,
+.llms-widget input[type=search].medium,
+.llms-widget input[type=tel].medium,
+.llms-widget input[type=color].medium,
+.llms-widget select.medium,
+.llms-widget textarea.medium {
+ width: 30%;
+ }
+ .llms-widget input[type=text].small,
+.llms-widget input[type=password].small,
+.llms-widget input[type=datetime].small,
+.llms-widget input[type=datetime-local].small,
+.llms-widget input[type=date].small,
+.llms-widget input[type=month].small,
+.llms-widget input[type=time].small,
+.llms-widget input[type=week].small,
+.llms-widget input[type=number].small,
+.llms-widget input[type=email].small,
+.llms-widget input[type=url].small,
+.llms-widget input[type=search].small,
+.llms-widget input[type=tel].small,
+.llms-widget input[type=color].small,
+.llms-widget select.small,
+.llms-widget textarea.small {
+ width: 20%;
+ }
+ .llms-widget input[type=text].tiny,
+.llms-widget input[type=password].tiny,
+.llms-widget input[type=datetime].tiny,
+.llms-widget input[type=datetime-local].tiny,
+.llms-widget input[type=date].tiny,
+.llms-widget input[type=month].tiny,
+.llms-widget input[type=time].tiny,
+.llms-widget input[type=week].tiny,
+.llms-widget input[type=number].tiny,
+.llms-widget input[type=email].tiny,
+.llms-widget input[type=url].tiny,
+.llms-widget input[type=search].tiny,
+.llms-widget input[type=tel].tiny,
+.llms-widget input[type=color].tiny,
+.llms-widget select.tiny,
+.llms-widget textarea.tiny {
+ width: 10%;
+ }
+}
+@media only screen and (min-width: 1030px) {
+ /******************************************************************
+
+ Desktop Stylesheet
+
+ ******************************************************************/
+ .llms-nav-tab {
+ display: inline-block;
+ width: 33.333%;
+ }
+ .llms-nav-tab-settings {
+ display: inline-block;
+ width: 25%;
+ }
+ #llms-form-wrapper .llms-select {
+ display: inline-block;
+ width: 47.5%;
+ }
+ #llms-form-wrapper .llms-select:first-child {
+ margin-left: 5%;
+ }
+ #llms-form-wrapper .llms-filter-options {
+ display: inline-block;
+ width: 47.5%;
+ }
+ #llms-form-wrapper .llms-filter-options.date-filter {
+ margin-left: 5%;
+ }
+ #llms-form-wrapper .llms-filter-options .llms-date-select {
+ margin-bottom: 0;
+ }
+ #llms-form-wrapper .llms-date-select {
+ width: 47.5%;
+ }
+ #llms-form-wrapper .llms-date-select:first-child {
+ margin-left: 5%;
+ }
+ .llms-widget-row:before, .llms-widget-row:after {
+ content: " ";
+ display: table;
+ }
+ .llms-widget-row:after {
+ clear: both;
+ }
+ .llms-widget-row .llms-widget-1-5 {
+ vertical-align: top;
+ width: 20%;
+ float: right;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 5px;
+ }
+ .llms-widget-row .llms-widget-1-4 {
+ vertical-align: top;
+ width: 25%;
+ float: right;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 5px;
+ }
+ .llms-widget-row .llms-widget-1-3 {
+ width: 33.3%;
+ float: right;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 5px;
+ }
+ .llms-widget-row .llms-widget-1-2 {
+ width: 50%;
+ float: right;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 5px;
+ vertical-align: top;
+ }
+}
+@media only screen and (min-width: 1240px) {
+ /******************************************************************
+
+ large Monitor Stylesheet
+
+ ******************************************************************/
+ .llms-nav-tab-filters,
+.llms-nav-tab-settings {
+ float: right;
+ width: 12.5%;
+ }
+}
+.wrap.lifterlms {
+ margin-top: 0;
+}
+
+.llms-header {
+ background-color: #FFF;
+ margin: 0 -20px 0 0;
+ padding: 20px 10px;
+ position: relative;
+ z-index: 1;
+}
+.llms-header .llms-inside-wrap {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 0 10px;
+}
+.llms-header .lifterlms-logo {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 190px;
+ flex: 0 0 190px;
+ max-height: 52px;
+ margin-left: 10px;
+}
+.llms-header .llms-meta {
+ -ms-flex-item-align: center;
+ align-self: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ font-size: 16px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ line-height: 1.5;
+}
+.llms-header .llms-meta .llms-version {
+ background-color: #1d2327;
+ color: #FFF;
+ border-radius: 999px;
+ font-size: 13px;
+ font-weight: 700;
+ padding: 6px 12px;
+}
+.llms-header .llms-meta a {
+ display: inline-block;
+}
+.llms-header .llms-meta .llms-license {
+ border-left: 1px solid #CCC;
+ font-weight: 700;
+ margin-left: 12px;
+ padding-left: 12px;
+}
+.llms-header .llms-meta .llms-license a {
+ text-decoration: none;
+}
+.llms-header .llms-meta .llms-license a:before {
+ content: "\f534";
+ display: inline-block;
+ font: 400 16px/1 dashicons;
+ right: 0;
+ padding-left: 3px;
+ position: relative;
+ text-decoration: none;
+ vertical-align: text-bottom;
+}
+.llms-header .llms-meta .llms-license a.llms-license-none {
+ color: #888;
+}
+.llms-header .llms-meta .llms-license a.llms-license-none:before {
+ content: "\f335";
+}
+.llms-header .llms-meta .llms-license a.llms-license-active {
+ color: #008a20;
+}
+.llms-header .llms-meta .llms-license a.llms-license-active:before {
+ content: "\f112";
+}
+.llms-header .llms-meta .llms-support {
+ font-weight: 700;
+}
+.llms-header .llms-meta .llms-support a {
+ color: #1d2327;
+ text-decoration: none;
+}
+
+.llms-subheader {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ margin-right: -20px;
+ padding: 10px 20px;
+ width: 100%;
+ z-index: 1;
+}
+.llms-subheader h1 {
+ font-weight: 700;
+ padding: 0;
+}
+.llms-subheader h1 a {
+ color: inherit;
+ text-decoration: none;
+}
+
+#post_course_difficulty {
+ min-width: 200px;
+}
+
+#_video-embed, #_audio-embed {
+ width: 100%;
+}
+
+hr {
+ background-color: #CCC;
+ border: none;
+ height: 1px;
+ margin: 30px 0;
+ padding: 0;
+}
+
+.llms_certificate_default_image, .llms_certificate_image {
+ width: 300px;
+}
+
+.llms_achievement_default_image, .llms_achievement_image {
+ width: 120px;
+}
+
+div[id^=lifterlms-] .inside {
+ overflow: visible;
+}
+
+.notice.llms-admin-notice {
+ background-color: #FFF;
+ border: 1px solid #ccd0d4;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 0 !important;
+ position: relative;
+}
+.notice.llms-admin-notice .notice-dismiss {
+ text-decoration: none;
+}
+.notice.llms-admin-notice.notice-warning {
+ border-right: 4px solid #F8954F;
+}
+.notice.llms-admin-notice.notice-warning .llms-admin-notice-icon {
+ background-color: #FEF4ED;
+}
+.notice.llms-admin-notice.notice-info {
+ border-right: 4px solid #466DD8;
+}
+.notice.llms-admin-notice.notice-info h3 {
+ color: #466DD8;
+}
+.notice.llms-admin-notice.notice-info .llms-admin-notice-icon {
+ background-color: #EDF0FB;
+}
+.notice.llms-admin-notice.notice-success {
+ border-right: 4px solid #18A957;
+}
+.notice.llms-admin-notice.notice-success h3 {
+ color: #18A957;
+}
+.notice.llms-admin-notice.notice-success .llms-admin-notice-icon {
+ background-color: #E8F6EE;
+}
+.notice.llms-admin-notice.notice-error {
+ border-right: 4px solid #DF1642;
+}
+.notice.llms-admin-notice.notice-error h3 {
+ color: #9C0F2E;
+}
+.notice.llms-admin-notice.notice-error .llms-admin-notice-icon {
+ background-color: #FCE8EC;
+}
+.notice.llms-admin-notice .llms-admin-notice-icon {
+ background-image: url(../../assets/images/lifterlms-icon-color.png);
+ background-position: center center;
+ background-repeat: no-repeat;
+ background-size: 30px;
+ min-width: 70px;
+}
+.notice.llms-admin-notice .llms-admin-notice-content {
+ color: #111;
+ padding: 20px;
+}
+.notice.llms-admin-notice h3 {
+ font-size: 18px;
+ font-weight: 700;
+ line-height: 25px;
+ margin: 0 0 15px 0;
+}
+.notice.llms-admin-notice button,
+.notice.llms-admin-notice .llms-button-primary {
+ display: inline-block;
+}
+.notice.llms-admin-notice p {
+ font-size: 14px;
+ line-height: 22px;
+ margin: 0 0 15px 0;
+ max-width: 65em;
+ padding: 0;
+}
+.notice.llms-admin-notice p:last-of-type {
+ margin-bottom: 0;
+}
+
+.llms-button-action.small .dashicons,
+.llms-button-danger.small .dashicons,
+.llms-button-primary.small .dashicons,
+.llms-button-secondary.small .dashicons {
+ font-size: 13px;
+ height: 13px;
+ width: 13px;
+}
+.llms-button-action:hover,
+.llms-button-danger:hover,
+.llms-button-primary:hover,
+.llms-button-secondary:hover {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+a.llms-view-as {
+ line-height: 2;
+ margin-left: 8px;
+}
+
+.llms-image-field-preview {
+ max-height: 80px;
+ vertical-align: middle;
+ width: auto;
+}
+
+.llms-image-field-remove.hidden {
+ display: none;
+}
+
+.llms-log-viewer {
+ background: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+ margin: 20px 0;
+ padding: 25px;
+}
+.llms-log-viewer pre {
+ font-family: monospace;
+ margin: 0;
+ padding: 0;
+ white-space: pre-wrap;
+}
+
+.llms-status--tools .llms-table {
+ background: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+}
+.llms-status--tools .llms-table td, .llms-status--tools .llms-table th {
+ padding: 10px;
+ vertical-align: top;
+}
+.llms-status--tools .llms-table th {
+ width: 28%;
+}
+.llms-status--tools .llms-table p {
+ margin: 0 0 10px;
+}
+
+.llms-error {
+ color: #bb231c;
+ font-style: italic;
+}
+
+.llms-rating-stars {
+ color: #ffb900;
+ text-decoration: none;
+}
+
+@media screen and (max-width: 782px) {
+ .llms-header {
+ top: 46px;
+ }
+ .llms-header .llms-inside-wrap {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 20px;
+ }
+ .llms-header .llms-inside-wrap .lifterlms-logo {
+ -ms-flex-item-align: center;
+ align-self: center;
+ -webkit-box-flex: inherit;
+ -ms-flex: inherit;
+ flex: inherit;
+ max-height: initial;
+ max-width: 200px;
+ }
+ .llms-header .llms-inside-wrap .llms-meta {
+ -webkit-column-gap: 10px;
+ -moz-column-gap: 10px;
+ column-gap: 10px;
+ }
+}
+.llms-table-wrap {
+ position: relative;
+}
+
+.llms-table-header {
+ padding: 0;
+}
+.llms-table-header:before, .llms-table-header:after {
+ content: " ";
+ display: table;
+}
+.llms-table-header:after {
+ clear: both;
+}
+.llms-table-header h2 {
+ font-size: 20px;
+ padding: 0;
+ display: inline-block;
+ line-height: 1.5;
+ margin: 0 0 20px 0;
+ vertical-align: middle;
+}
+.llms-table-header .llms-table-search,
+.llms-table-header .llms-table-filters {
+ float: left;
+ padding-right: 10px;
+}
+.llms-table-header .llms-table-search input {
+ margin: 0;
+ padding: 0 8px;
+}
+
+.llms-table {
+ border: 1px solid #c3c4c7;
+ border-collapse: collapse;
+ width: 100%;
+}
+.llms-table a:not(.small) {
+ color: #466dd8;
+}
+.llms-table a:not(.small):hover {
+ color: #2b55cb;
+}
+.llms-table td, .llms-table th {
+ border-bottom: 1px solid #c3c4c7;
+ padding: 10px 12px;
+ text-align: center;
+}
+.llms-table td.expandable.closed, .llms-table th.expandable.closed {
+ display: none;
+}
+.llms-table td .llms-button-primary,
+.llms-table td .llms-button-secondary,
+.llms-table td .llms-button-action,
+.llms-table td .llms-button-danger, .llms-table th .llms-button-primary,
+.llms-table th .llms-button-secondary,
+.llms-table th .llms-button-action,
+.llms-table th .llms-button-danger {
+ display: inline-block;
+}
+.llms-table tr.llms-quiz-pending td {
+ font-weight: 700;
+}
+.llms-table thead th,
+.llms-table tfoot th {
+ background-color: #FFF;
+ font-weight: 700;
+}
+.llms-table thead th a.llms-sortable,
+.llms-table tfoot th a.llms-sortable {
+ padding-left: 16px;
+ position: relative;
+ text-decoration: none;
+ width: 100%;
+}
+.llms-table thead th a.llms-sortable.active[data-order=DESC] .asc,
+.llms-table tfoot th a.llms-sortable.active[data-order=DESC] .asc {
+ opacity: 1;
+}
+.llms-table thead th a.llms-sortable.active[data-order=ASC] .desc,
+.llms-table tfoot th a.llms-sortable.active[data-order=ASC] .desc {
+ opacity: 1;
+}
+.llms-table thead th a.llms-sortable:hover[data-order=DESC] .asc,
+.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .asc {
+ opacity: 0;
+}
+.llms-table thead th a.llms-sortable:hover[data-order=DESC] .desc,
+.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .desc {
+ opacity: 1;
+}
+.llms-table thead th a.llms-sortable:hover[data-order=ASC] .asc,
+.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .asc {
+ opacity: 1;
+}
+.llms-table thead th a.llms-sortable:hover[data-order=ASC] .desc,
+.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .desc {
+ opacity: 0;
+}
+.llms-table thead th a.llms-sortable .dashicons,
+.llms-table tfoot th a.llms-sortable .dashicons {
+ color: #444;
+ font-size: 16px;
+ height: 16px;
+ opacity: 0;
+ position: absolute;
+ width: 16px;
+}
+.llms-table tfoot th {
+ border-bottom: none;
+}
+.llms-table tfoot th .llms-table-export {
+ float: right;
+}
+.llms-table tfoot th .llms-table-export .llms-table-progress {
+ background: #efefef;
+ display: none;
+ margin-right: 8px;
+ vertical-align: middle;
+ width: 100px;
+}
+.llms-table tfoot th .llms-table-pagination {
+ float: left;
+}
+.llms-table.zebra tbody tr:nth-child(even) th, .llms-table.zebra tbody tr:nth-child(even) td {
+ background-color: #fff;
+}
+.llms-table.zebra tbody tr:nth-child(odd) th, .llms-table.zebra tbody tr:nth-child(odd) td {
+ background-color: #f6f7f7;
+}
+.llms-table.text-left td, .llms-table.text-left th {
+ text-align: right;
+}
+.llms-table.size-large td, .llms-table.size-large th {
+ font-size: 14px;
+ padding: 10px 12px;
+}
+.llms-table .llms-drag-handle {
+ color: #777;
+ cursor: pointer;
+ -webkit-transition: color 0.4s ease;
+ transition: color 0.4s ease;
+}
+.llms-table .llms-action-icon {
+ color: #777;
+ text-decoration: none;
+}
+.llms-table .llms-action-icon .tooltip {
+ cursor: pointer;
+}
+.llms-table .llms-action-icon:hover {
+ color: #466dd8;
+}
+.llms-table .llms-action-icon.danger:hover {
+ color: #bb231c;
+}
+.llms-table .llms-table-page-count {
+ font-size: 12px;
+ padding: 0 5px;
+}
+
+.llms-table-progress {
+ text-align: center;
+}
+.llms-table-progress .llms-table-progress-bar {
+ background: #eee;
+ border-radius: 10px;
+ height: 16px;
+ overflow: hidden;
+ position: relative;
+}
+.llms-table-progress .llms-table-progress-bar .llms-table-progress-inner {
+ background: #466dd8;
+ height: 100%;
+ -webkit-transition: width 0.2s ease;
+ transition: width 0.2s ease;
+}
+.llms-table-progress .llms-table-progress-text {
+ color: #466dd8;
+ font-size: 12px;
+ font-weight: 700;
+ line-height: 16px;
+}
+
+.llms-table.llms-gateway-table .status .fa,
+.llms-table.llms-integrations-table .status .fa {
+ color: #466dd8;
+ font-size: 22px;
+}
+.llms-table.llms-gateway-table .sort,
+.llms-table.llms-integrations-table .sort {
+ cursor: move;
+ text-align: center;
+ width: 10px;
+}
+
+.llms-gb-table-notifications th, .llms-gb-table-notifications td {
+ text-align: right;
+}
+
+.llms-order-note .llms-order-note-content {
+ background: #efefef;
+ margin-bottom: 10px;
+ padding: 10px;
+ position: relative;
+}
+.llms-order-note .llms-order-note-content:after {
+ border-style: solid;
+ border-color: #efefef transparent;
+ border-width: 10px 0 0 10px;
+ bottom: -10px;
+ content: "";
+ display: block;
+ height: 0;
+ right: 20px;
+ position: absolute;
+ width: 0;
+}
+.llms-order-note .llms-order-note-content p {
+ font-size: 13px;
+ margin: 0;
+ line-height: 1.5;
+}
+.llms-order-note .llms-order-note-meta {
+ color: #999;
+ font-size: 11px;
+ margin-right: 10px;
+}
+
+.llms-mb-list label {
+ font-size: 15px;
+ font-weight: 700;
+ line-height: 1.5;
+ display: block;
+ width: 100%;
+}
+.llms-mb-list .description {
+ margin-bottom: 8px;
+}
+.llms-mb-list .input-full {
+ width: 100%;
+}
+
+#poststuff .llms-metabox h2, #poststuff .llms-metabox h3, #poststuff .llms-metabox h6 {
+ margin: 0;
+ padding: 0;
+}
+#poststuff .llms-metabox h2 {
+ font-size: 18px;
+ font-weight: 700;
+}
+#poststuff .llms-metabox h3 {
+ color: #777;
+ font-size: 16px;
+}
+#poststuff .llms-metabox h4 {
+ border-bottom: 1px solid #e5e5e5;
+ padding: 0;
+ margin: 0;
+}
+#poststuff .llms-metabox .llms-transaction-test-mode {
+ background: #ffffd7;
+ font-style: italic;
+ right: 0;
+ padding: 2px;
+ position: absolute;
+ left: 0;
+ top: 0;
+ text-align: center;
+}
+#poststuff .llms-metabox a.llms-editable,
+#poststuff .llms-metabox .llms-metabox-icon,
+#poststuff .llms-metabox button.llms-editable {
+ color: #999;
+ text-decoration: none;
+}
+#poststuff .llms-metabox a.llms-editable:hover,
+#poststuff .llms-metabox .llms-metabox-icon:hover,
+#poststuff .llms-metabox button.llms-editable:hover {
+ color: #466dd8;
+}
+#poststuff .llms-metabox button.llms-editable {
+ border: none;
+ background: none;
+ cursor: pointer;
+ padding: 0;
+ vertical-align: top;
+}
+#poststuff .llms-metabox h4 button.llms-editable {
+ float: left;
+}
+#poststuff .llms-metabox .llms-table {
+ margin-top: 10px;
+}
+
+.llms-metabox-section {
+ background: #fff;
+ margin-top: 25px;
+ position: relative;
+}
+.llms-metabox-section.no-top-margin {
+ margin-top: 0;
+}
+.llms-metabox-section .llms-metabox-field {
+ margin: 15px 0;
+ position: relative;
+}
+.llms-metabox-section .llms-metabox-field label {
+ color: #777;
+ display: block;
+ margin-bottom: 5px;
+ font-weight: 500;
+ vertical-align: baseline;
+}
+.llms-metabox-section .llms-metabox-field select,
+.llms-metabox-section .llms-metabox-field textarea,
+.llms-metabox-section .llms-metabox-field input[type=text],
+.llms-metabox-section .llms-metabox-field input[type=number] {
+ width: 100%;
+}
+.llms-metabox-section .llms-metabox-field input.md-text {
+ width: 105px;
+}
+.llms-metabox-section .llms-metabox-field input.sm-text {
+ width: 45px;
+}
+.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-date-input {
+ width: 95px;
+}
+.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-time-input {
+ width: 45px;
+}
+.llms-metabox-section .llms-metabox-field .llms-datetime-field em {
+ font-style: normal;
+ padding: 0 3px;
+}
+
+.llms-collapsible {
+ border: 1px solid #e5e5e5;
+ position: relative;
+ margin-top: 0;
+ margin-bottom: -1px;
+}
+.llms-collapsible:last-child {
+ margin-bottom: 0;
+}
+.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-down {
+ display: none;
+}
+.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-up {
+ display: inline;
+}
+.llms-collapsible .llms-collapsible-header {
+ padding: 10px;
+}
+.llms-collapsible .llms-collapsible-header h3 {
+ color: #777;
+ margin: 0;
+ font-size: 16px;
+}
+.llms-collapsible .llms-collapsible-header .dashicons-arrow-up {
+ display: inline;
+}
+.llms-collapsible .llms-collapsible-header .dashicons-arrow-up {
+ display: none;
+}
+.llms-collapsible .llms-collapsible-header a {
+ text-decoration: none;
+}
+.llms-collapsible .llms-collapsible-header .dashicons {
+ color: #777;
+ cursor: pointer;
+ -webkit-transition: color 0.4s ease;
+ transition: color 0.4s ease;
+}
+.llms-collapsible .llms-collapsible-header .dashicons:hover {
+ color: #466dd8;
+}
+.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning:hover, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-trash:hover, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-no:hover {
+ color: #bb231c;
+}
+.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger:hover {
+ color: #c05621;
+}
+.llms-collapsible .llms-collapsible-body {
+ display: none;
+ padding: 10px;
+}
+
+._llms_instructors_data.repeater .llms-repeater-rows .llms-repeater-row:first-child .llms-repeater-remove {
+ display: none;
+}
+._llms_instructors_data.repeater .llms-mb-list {
+ padding: 0 5px !important;
+}
+
+.post-type-llms_order #post-body-content {
+ display: none;
+}
+
+#lifterlms-order-details .handlediv,
+#lifterlms-order-details .handlediv.button-link,
+#lifterlms-order-details .postbox-header {
+ display: none;
+}
+#lifterlms-order-details .inside {
+ padding: 20px;
+ margin-top: 0;
+}
+
+.llms-table tbody tr.llms-txn-failed td {
+ background-color: rgba(187, 35, 28, 0.5);
+ border-bottom-color: rgba(187, 35, 28, 0.5);
+}
+
+.llms-table tbody tr.llms-txn-refunded td {
+ background-color: rgba(255, 165, 0, 0.5);
+ border-bottom-color: rgba(255, 165, 0, 0.5);
+}
+
+.llms-txn-refund-form .llms-metabox-section,
+.llms-manual-txn-form .llms-metabox-section {
+ margin-top: 0;
+}
+.llms-txn-refund-form .llms-metabox-field,
+.llms-manual-txn-form .llms-metabox-field {
+ text-align: left;
+}
+.llms-txn-refund-form .llms-metabox-field input[type=number],
+.llms-manual-txn-form .llms-metabox-field input[type=number] {
+ max-width: 100px;
+}
+.llms-txn-refund-form .llms-metabox-field input[type=text],
+.llms-manual-txn-form .llms-metabox-field input[type=text] {
+ max-width: 340px;
+}
+
+.llms-manual-txn-form {
+ background-color: #eaeaea;
+}
+.llms-manual-txn-form .llms-metabox-section {
+ background-color: #eaeaea;
+}
+
+#llms-remaining-edit {
+ display: none;
+}
+
+.llms-remaining-edit--content label, .llms-remaining-edit--content span, .llms-remaining-edit--content textarea {
+ display: block;
+}
+.llms-remaining-edit--content label {
+ margin-bottom: 20px;
+}
+.llms-remaining-edit--content textarea, .llms-remaining-edit--content input {
+ width: 100%;
+}
+
+.submitbox .llms-mb-section,
+.llms-award-engagement-submitbox .llms-mb-list {
+ margin-bottom: 12px;
+}
+.submitbox .llms-mb-section:last-of-type,
+.llms-award-engagement-submitbox .llms-mb-list:last-of-type {
+ margin-bottom: 0;
+}
+.sync-action:before, .submitbox .llms-mb-section.student-info:before, .submitbox .llms-mb-section.post_author_override label:before,
+.llms-award-engagement-submitbox .llms-mb-list.student-info:before,
+.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {
+ font: normal 20px/1 dashicons;
+ speak: never;
+ display: inline-block;
+ margin-right: -1px;
+ padding-left: 3px;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ position: relative;
+ top: -1px;
+ color: #8c8f94;
+}
+body:not(.admin-color-fresh) .sync-action:before, body:not(.admin-color-fresh) .submitbox .llms-mb-section.student-info:before, body:not(.admin-color-fresh) .submitbox .llms-mb-section.post_author_override label:before,
+body:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.student-info:before,
+body:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {
+ color: currentColor;
+}
+
+.submitbox .llms-mb-section.student-info:before, .submitbox .llms-mb-section.post_author_override label:before,
+.llms-award-engagement-submitbox .llms-mb-list.student-info:before,
+.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {
+ content: "\f110";
+}
+.sync-action:before {
+ content: "\f113";
+ color: white;
+}
+
+.submitbox .llms-mb-section.post_author_override label,
+.llms-award-engagement-submitbox .llms-mb-list.post_author_override label {
+ display: inline-block;
+ width: auto;
+}
+
+.llms-metabox #llms-new-access-plan-model {
+ display: none;
+}
+.llms-metabox .llms-access-plans {
+ margin-top: 10px;
+}
+.llms-metabox .llms-access-plans > .llms-no-plans-msg {
+ display: none;
+}
+.llms-metabox .llms-access-plans > .llms-no-plans-msg:last-child {
+ -webkit-box-shadow: inset 0 0 0 1px #e5e5e5;
+ box-shadow: inset 0 0 0 1px #e5e5e5;
+ display: block;
+ text-align: center;
+ padding: 10px;
+}
+.llms-metabox .llms-access-plans.dragging {
+ background: #efefef;
+ -webkit-box-shadow: inset 0 0 0 1px #e5e5e5;
+ box-shadow: inset 0 0 0 1px #e5e5e5;
+}
+.llms-metabox .llms-access-plans .llms-spinning {
+ z-index: 1;
+}
+.llms-metabox .llms-access-plans .llms-invalid {
+ border-color: #bb231c;
+}
+.llms-metabox .llms-access-plans .llms-invalid .dashicons-warning {
+ display: inline;
+}
+.llms-metabox .llms-access-plans .llms-needs-attention .dashicons-warning.medium-danger {
+ display: inline;
+}
+.llms-metabox .llms-access-plans .dashicons-warning {
+ display: none;
+}
+.llms-metabox .llms-access-plan {
+ text-align: right;
+}
+.llms-metabox .llms-access-plan [data-tip]:before {
+ text-align: center;
+}
+.llms-metabox .llms-access-plan .llms-plan-link,
+.llms-metabox .llms-access-plan [data-controller] {
+ display: none;
+}
+.llms-metabox .llms-access-plan:hover .llms-plan-link, .llms-metabox .llms-access-plan.opened .llms-plan-link {
+ display: inline-block;
+}
+.llms-metabox .llms-access-plan .llms-metabox-field {
+ margin: 5px 0;
+}
+.llms-metabox .llms-access-plan .llms-required {
+ color: #bb231c;
+ margin-right: 3px;
+}
+.llms-metabox .llms-access-plan .notice {
+ margin-right: 0;
+}
+
+.llms-metabox-students .llms-table tr .name {
+ text-align: right;
+}
+.llms-metabox-students .llms-add-student:hover {
+ color: #4d8d3c;
+}
+.llms-metabox-students .llms-remove-student:hover {
+ color: #bb231c;
+}
+
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered).llms-mb-repeater-fields > li.llms-mb-list {
+ border-bottom: none;
+ padding: 0 0 10px;
+}
+
+.llms-mb-list.repeater .llms-repeater-rows {
+ position: relative;
+ margin-top: 10px;
+ min-height: 10px;
+}
+.llms-mb-list.repeater .llms-repeater-rows.dragging {
+ background: #efefef;
+ -webkit-box-shadow: inset 0 0 0 1px #e5e5e5;
+ box-shadow: inset 0 0 0 1px #e5e5e5;
+}
+.llms-mb-list.repeater .llms-repeater-row {
+ background: #fff;
+}
+.llms-mb-list.repeater .llms-mb-repeater-footer {
+ text-align: left;
+ margin-top: 20px;
+}
+.llms-mb-list.repeater .tmce-active .wp-editor-area {
+ color: #32373c;
+}
+
+.llms-builder-launcher p {
+ margin-top: 0;
+}
+.llms-builder-launcher ol {
+ margin-top: -6px;
+}
+.llms-builder-launcher .llms-button-primary {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.wp-list-table .llms-status {
+ border-radius: 6px;
+ display: inline-block;
+ font-size: 13px;
+ font-weight: 700;
+ line-height: 1.4;
+ padding: 2px 6px;
+ vertical-align: middle;
+}
+.wp-list-table .llms-status.llms-size--large {
+ font-size: 105%;
+ padding: 6px 12px;
+}
+.wp-list-table .llms-status.llms-active, .wp-list-table .llms-status.llms-completed, .wp-list-table .llms-status.llms-pass, .wp-list-table .llms-status.llms-txn-succeeded {
+ color: #4d8d3c;
+ background-color: rgba(77, 141, 60, 0.15);
+}
+.wp-list-table .llms-status.llms-fail, .wp-list-table .llms-status.llms-failed, .wp-list-table .llms-status.llms-expired, .wp-list-table .llms-status.llms-cancelled, .wp-list-table .llms-status.llms-txn-failed {
+ color: #bb231c;
+ background-color: rgba(187, 35, 28, 0.15);
+}
+.wp-list-table .llms-status.llms-incomplete, .wp-list-table .llms-status.llms-on-hold, .wp-list-table .llms-status.llms-pending, .wp-list-table .llms-status.llms-pending-cancel, .wp-list-table .llms-status.llms-refunded, .wp-list-table .llms-status.llms-txn-pending, .wp-list-table .llms-status.llms-txn-refunded {
+ color: #c05621;
+ background-color: rgba(192, 86, 33, 0.15);
+}
+
+#lifterlms-order-transactions .llms-table tfoot th {
+ text-align: left;
+}
+
+.llms-post-table-post-filter {
+ display: inline-block;
+ margin-left: 6px;
+ max-width: 100%;
+ width: 220px;
+}
+
+.llms-nav-tab-wrapper {
+ background: #466dd8;
+ margin: 20px 0;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary {
+ background: #e1e1e1;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item {
+ margin: 0;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover, .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {
+ background: #cdcdcd;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {
+ color: #414141;
+ font-size: 15px;
+ padding: 8px 14px;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link .dashicons {
+ font-size: 15px;
+ height: 15px;
+ width: 15px;
+}
+.llms-nav-tab-wrapper.llms-nav-text {
+ background: inherit;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-items {
+ padding-right: 0;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item {
+ background: inherit;
+ color: #646970;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:last-child:after {
+ display: none;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:after {
+ content: "|";
+ display: inline-block;
+ margin: 0 6px 0 8px;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link:hover {
+ background: inherit;
+ color: #466dd8;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item.llms-active .llms-nav-link {
+ background: inherit;
+ color: #000;
+ font-weight: 600;
+ text-decoration: none;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link {
+ color: #466dd8;
+ display: inline-block;
+ letter-spacing: 0;
+ margin: 0;
+ padding: 0;
+ text-decoration: underline;
+ text-transform: none;
+}
+.llms-nav-tab-wrapper.llms-nav-style-tabs {
+ background-color: #1c3987;
+ margin: 0;
+ padding-top: 8px;
+}
+.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item {
+ margin: 0 3px;
+}
+.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item .llms-nav-link {
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+}
+.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item.llms-active .llms-nav-link {
+ background-color: #FFF;
+ color: #466dd8;
+ font-weight: 700;
+}
+.llms-nav-tab-wrapper.llms-nav-style-filters {
+ background-color: #466dd8;
+ border-radius: 12px;
+ margin: 20px 0;
+ overflow: hidden;
+ padding: 0;
+}
+.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding-right: 0;
+}
+@media only screen and (min-width: 782px) {
+ .llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ }
+}
+.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item {
+ float: none;
+}
+.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item .llms-nav-link {
+ padding: 14px;
+}
+.llms-nav-tab-wrapper .llms-nav-items {
+ margin: 0;
+ padding-right: 10px;
+}
+.llms-nav-tab-wrapper .llms-nav-items:before, .llms-nav-tab-wrapper .llms-nav-items:after {
+ content: " ";
+ display: table;
+}
+.llms-nav-tab-wrapper .llms-nav-items:after {
+ clear: both;
+}
+.llms-nav-tab-wrapper .llms-nav-item {
+ margin: 0;
+}
+.llms-nav-tab-wrapper .llms-nav-item .llms-nav-link:hover {
+ background: #466dd8;
+}
+.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {
+ background: #1c3987;
+}
+.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {
+ font-weight: 400;
+}
+@media only screen and (min-width: 768px) {
+ .llms-nav-tab-wrapper .llms-nav-item {
+ float: right;
+ }
+ .llms-nav-tab-wrapper .llms-nav-item.llms-nav-item-right {
+ float: left;
+ }
+}
+.llms-nav-tab-wrapper .llms-nav-link {
+ color: #fff;
+ cursor: pointer;
+ display: block;
+ font-weight: 400;
+ font-size: 15px;
+ padding: 9px 18px;
+ text-align: center;
+ text-decoration: none;
+ -webkit-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+}
+
+#llms-options-page-contents h2 {
+ color: #999;
+ font-weight: 500;
+ letter-spacing: 2px;
+ border-bottom: 1px solid #999;
+}
+
+.llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ margin: 0;
+ padding: 0;
+}
+.llms-reporting.wrap .llms-stab-title {
+ color: #1c3987;
+ font-size: 36px;
+ font-weight: 300;
+ margin-bottom: 20px;
+}
+.llms-reporting.wrap td.id a {
+ text-decoration: none;
+}
+.llms-reporting.wrap th.id, .llms-reporting.wrap td.id,
+.llms-reporting.wrap th.name, .llms-reporting.wrap td.name,
+.llms-reporting.wrap th.registered, .llms-reporting.wrap td.registered,
+.llms-reporting.wrap th.last_seen, .llms-reporting.wrap td.last_seen,
+.llms-reporting.wrap th.overall_progress, .llms-reporting.wrap td.overall_progress,
+.llms-reporting.wrap th.title, .llms-reporting.wrap td.title,
+.llms-reporting.wrap th.course, .llms-reporting.wrap td.course,
+.llms-reporting.wrap th.lesson, .llms-reporting.wrap td.lesson {
+ text-align: right;
+}
+.llms-reporting.wrap td.section-title {
+ background: #eaeaea;
+ text-align: right;
+ font-weight: 700;
+ padding: 16px 4px;
+}
+.llms-reporting.wrap td.questions-table {
+ text-align: right;
+}
+.llms-reporting.wrap td.questions-table .correct,
+.llms-reporting.wrap td.questions-table .question,
+.llms-reporting.wrap td.questions-table .selected {
+ text-align: right;
+ max-width: 300px;
+}
+.llms-reporting.wrap td.questions-table .correct img,
+.llms-reporting.wrap td.questions-table .question img,
+.llms-reporting.wrap td.questions-table .selected img {
+ height: auto;
+ max-width: 64px;
+}
+.llms-reporting.wrap table.quiz-attempts {
+ margin-bottom: 40px;
+}
+.llms-reporting.wrap.tab--students .llms-options-page-contents #llms-award-certificate-wrapper .components-button.is-secondary {
+ background: #e1e1e1;
+ border-radius: 8px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: #414141;
+ font-size: 13px;
+ font-weight: 700;
+ height: auto;
+ padding: 8px 14px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-tab-wrapper.llms-nav-secondary, .llms-reporting.wrap.tab--sales .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin-bottom: 0;
+}
+.llms-reporting.wrap.tab--enrollments .llms-options-page-contents, .llms-reporting.wrap.tab--sales .llms-options-page-contents {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background: none;
+ margin-top: 20px;
+ padding: 0;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-item-align: center;
+ align-self: center;
+ color: #FFF;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 13px;
+ gap: 5px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form label, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form label {
+ font-weight: 700;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form input, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form input {
+ border: 0;
+ font-size: 13px;
+ margin: 0;
+ padding: 0 4px;
+ vertical-align: middle;
+ width: 110px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form .select2-container input, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form .select2-container input {
+ width: 100% !important;
+}
+.llms-reporting.wrap.tab--enrollments .button.small, .llms-reporting.wrap.tab--sales .button.small {
+ height: 23px;
+ line-height: 23px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters, .llms-reporting.wrap.tab--sales .llms-analytics-filters {
+ display: none;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-inside-wrap, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-inside-wrap {
+ background-color: #FFF;
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ margin: -20px 10px 20px 10px;
+ padding: 20px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 20px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ margin: 0;
+}
+@media only screen and (min-width: 782px) {
+ .llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ }
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item label, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item label {
+ display: block;
+ font-weight: 700;
+ margin: 0 0 5px 0;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item .select2-selection__rendered, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item .select2-selection__rendered {
+ word-wrap: break-word;
+ text-overflow: inherit;
+ white-space: normal;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p, .llms-reporting.wrap.tab--sales .llms-analytics-filters p {
+ margin: 0;
+ text-align: left;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p .llms-button-primary, .llms-reporting.wrap.tab--sales .llms-analytics-filters p .llms-button-primary {
+ display: inline-block;
+}
+.llms-reporting.wrap .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap {
+ width: 160px;
+}
+
+.llms-charts-wrapper {
+ background-color: #FFF;
+ border: 1px solid #dedede;
+ border-radius: 12px;
+ -webkit-box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ padding: 20px;
+}
+
+.llms-reporting-tab h1, .llms-reporting-tab h2, .llms-reporting-tab h3, .llms-reporting-tab h4, .llms-reporting-tab h5, .llms-reporting-tab h6 {
+ margin: 0;
+}
+.llms-reporting-tab h1 a, .llms-reporting-tab h2 a, .llms-reporting-tab h3 a, .llms-reporting-tab h4 a, .llms-reporting-tab h5 a, .llms-reporting-tab h6 a {
+ color: #466dd8;
+ text-decoration: none;
+}
+.llms-reporting-tab h1 a:hover, .llms-reporting-tab h2 a:hover, .llms-reporting-tab h3 a:hover, .llms-reporting-tab h4 a:hover, .llms-reporting-tab h5 a:hover, .llms-reporting-tab h6 a:hover {
+ color: #466dd8;
+}
+.llms-reporting-tab h2 {
+ font-size: 22px;
+ line-height: 1.5;
+}
+.llms-reporting-tab h2.llms-table-title {
+ margin-bottom: 20px;
+}
+.llms-reporting-tab h5 {
+ font-size: 15px;
+ line-height: 1.5;
+}
+.llms-reporting-tab .llms-reporting-body {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ margin: 20px auto;
+ padding: 0;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-stab {
+ padding: 30px;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-stab .llms-table-header {
+ margin: 0;
+}
+.llms-reporting-tab .llms-reporting-body .llms-gb-tab {
+ padding: 30px;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-header {
+ padding: 30px;
+ margin: 0;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img {
+ border-radius: 50%;
+ display: inline-block;
+ margin-left: 10px;
+ overflow: hidden;
+ vertical-align: middle;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img img {
+ display: block;
+ max-height: 64px;
+ width: auto;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-info {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.llms-reporting-breadcrumbs {
+ margin: 0;
+ padding: 0;
+}
+.llms-reporting-breadcrumbs a {
+ color: #466dd8;
+ font-size: 15px;
+ text-decoration: none;
+}
+.llms-reporting-breadcrumbs a:hover {
+ color: #2b55cb;
+}
+.llms-reporting-breadcrumbs a:after {
+ content: " > ";
+ color: #646970;
+}
+.llms-reporting-breadcrumbs a:last-child {
+ color: #000;
+ font-weight: 700;
+}
+.llms-reporting-breadcrumbs a:last-child:after {
+ display: none;
+}
+
+#llms-students-table .name {
+ text-align: right;
+}
+
+.llms-reporting-tab-content {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.llms-reporting-tab-content > header:before, .llms-reporting-tab-content > header:after {
+ content: " ";
+ display: table;
+}
+.llms-reporting-tab-content > header:after {
+ clear: both;
+}
+.llms-reporting-tab-content h3 {
+ margin-bottom: 20px;
+}
+.llms-reporting-tab-content .llms-reporting-tab-filter {
+ float: left;
+ position: relative;
+ margin-left: 0.75em;
+ width: 180px;
+ top: -3px;
+}
+.llms-reporting-tab-content .llms-reporting-tab-main {
+ -webkit-box-flex: 3;
+ -ms-flex: 3;
+ flex: 3;
+ max-width: 75%;
+}
+.llms-reporting-tab-content .llms-reporting-tab-side {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin-right: 20px;
+}
+.llms-reporting-tab-content > .llms-table-wrap {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+
+.llms-reporting-widgets:before, .llms-reporting-widgets:after {
+ content: " ";
+ display: table;
+}
+.llms-reporting-widgets:after {
+ clear: both;
+}
+
+.llms-reporting-widget {
+ border-top: 4px solid #466dd8;
+ background: #fafafa;
+ margin-bottom: 10px;
+ padding: 30px;
+}
+.llms-reporting-widget:before, .llms-reporting-widget:after {
+ content: " ";
+ display: table;
+}
+.llms-reporting-widget:after {
+ clear: both;
+}
+.llms-reporting-widget .fa {
+ color: #999;
+ float: right;
+ font-size: 32px;
+ margin-left: 10px;
+}
+.llms-reporting-widget strong {
+ color: #333;
+ font-size: 20px;
+ line-height: 1.2;
+}
+.llms-reporting-widget.llms-reporting-student-address strong {
+ line-height: 1.1;
+}
+.llms-reporting-widget sup,
+.llms-reporting-widget .llms-price-currency-symbol {
+ font-size: 75%;
+ position: relative;
+ top: -4px;
+ vertical-align: baseline;
+}
+.llms-reporting-widget small {
+ font-size: 13px;
+}
+.llms-reporting-widget small.compare {
+ margin-right: 5px;
+}
+.llms-reporting-widget small.compare.positive {
+ color: #4d8d3c;
+}
+.llms-reporting-widget small.compare.negative {
+ color: #bb231c;
+}
+
+.llms-reporting-event {
+ border-right: 4px solid #555;
+ background: #fafafa;
+ font-size: 11px;
+ line-height: 1.2;
+ margin-bottom: 0.75em;
+ padding: 10px;
+}
+.llms-reporting-event:before, .llms-reporting-event:after {
+ content: " ";
+ display: table;
+}
+.llms-reporting-event:after {
+ clear: both;
+}
+.llms-reporting-event.color--blue {
+ border-right-color: #466dd8;
+}
+.llms-reporting-event.color--green, .llms-reporting-event._enrollment_trigger, .llms-reporting-event._is_complete.yes {
+ border-right-color: #4d8d3c;
+}
+.llms-reporting-event.color--purple, .llms-reporting-event._status.enrolled {
+ border-right-color: #845ef7;
+}
+.llms-reporting-event.color--red, .llms-reporting-event._status.expired, .llms-reporting-event._status.cancelled {
+ border-right-color: #bb231c;
+}
+.llms-reporting-event.color--orange, .llms-reporting-event._achievement_earned, .llms-reporting-event._certificate_earned, .llms-reporting-event._email_sent {
+ border-right-color: #c05621;
+}
+.llms-reporting-event time {
+ color: #888;
+}
+.llms-reporting-event .llms-student-avatar {
+ margin-right: 10px;
+ float: left;
+}
+.llms-reporting-event a {
+ text-decoration: none;
+ color: inherit;
+}
+
+@media only screen and (min-width: 782px) {
+ .llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+.llms-quiz-attempt-results {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question {
+ background: #efefef;
+ border-radius: 6px;
+ margin: 0 0 15px;
+ position: relative;
+ list-style-type: none;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {
+ color: inherit;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 10px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 15px 15px 15px 35px;
+ text-decoration: none;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct, .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect {
+ background: rgba(192, 86, 33, 0.2);
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon, .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon {
+ background-color: #c05621;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {
+ background: rgba(77, 141, 60, 0.15);
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {
+ background-color: #4d8d3c;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {
+ background: rgba(187, 35, 28, 0.15);
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {
+ background-color: #bb231c;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question pre {
+ overflow: auto;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {
+ font-size: 22px;
+ margin: 0;
+ line-height: 1.4;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {
+ line-height: 1.4;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {
+ position: absolute;
+ left: -12px;
+ top: -2px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon {
+ color: rgba(255, 255, 255, 0.65);
+ border-radius: 50%;
+ font-size: 30px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ width: 40px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {
+ display: none;
+ padding: 0 15px 15px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {
+ font-weight: 700;
+ margin: 0 0 10px;
+ padding: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers {
+ margin: 0;
+ padding: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {
+ padding: 0;
+ margin: 0 30px 0 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child {
+ list-style-type: none;
+ margin-right: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {
+ height: auto;
+ max-width: 200px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section {
+ border-top: 2px solid rgba(255, 255, 255, 0.5);
+ margin-top: 20px;
+ padding-top: 20px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child {
+ border-top: none;
+ margin-top: 0;
+ padding-top: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers, .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer, .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {
+ display: inline-block;
+ list-style-type: none;
+ margin: 0;
+ padding: 5px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {
+ opacity: 0.5;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {
+ font-style: italic;
+ font-weight: normal;
+}
+
+.wrap.llms-reporting .llms-inside-wrap,
+.wrap.lifterlms-settings .llms-inside-wrap,
+.wrap.llms-status .llms-inside-wrap {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ margin: 0 auto;
+}
+.wrap.llms-reporting .llms-inside-wrap .llms-nav-text,
+.wrap.lifterlms-settings .llms-inside-wrap .llms-nav-text,
+.wrap.llms-status .llms-inside-wrap .llms-nav-text {
+ margin: 0 auto;
+}
+.wrap.llms-reporting .llms-subheader .llms-save,
+.wrap.lifterlms-settings .llms-subheader .llms-save,
+.wrap.llms-status .llms-subheader .llms-save {
+ -webkit-box-flex: 1;
+ -ms-flex: auto;
+ flex: auto;
+ text-align: left;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ margin: 0 -10px 20px -20px;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {
+ padding-right: 0;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover {
+ background: #f0f0f1;
+ color: #222222;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {
+ background: #fafafa;
+ color: #466dd8;
+ border-top-color: #466dd8;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {
+ font-weight: 700;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {
+ border-top: 2px solid transparent;
+ padding: 14px;
+}
+.wrap.llms-reporting .llms-setting-group,
+.wrap.lifterlms-settings .llms-setting-group,
+.wrap.llms-status .llms-setting-group {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ margin: 20px auto;
+ padding: 20px;
+}
+.wrap.llms-reporting .llms-setting-group .llms-label,
+.wrap.lifterlms-settings .llms-setting-group .llms-label,
+.wrap.llms-status .llms-setting-group .llms-label {
+ border-bottom: 1px solid #efefef;
+ font-weight: 700;
+ font-size: 20px;
+ padding: 20px;
+ margin: -20px -20px 20px;
+}
+.wrap.llms-reporting .llms-setting-group .llms-label .llms-button-primary,
+.wrap.lifterlms-settings .llms-setting-group .llms-label .llms-button-primary,
+.wrap.llms-status .llms-setting-group .llms-label .llms-button-primary {
+ margin-right: 10px;
+}
+.wrap.llms-reporting .llms-setting-group .llms-help-tooltip .dashicons,
+.wrap.lifterlms-settings .llms-setting-group .llms-help-tooltip .dashicons,
+.wrap.llms-status .llms-setting-group .llms-help-tooltip .dashicons {
+ color: #444;
+ cursor: help;
+}
+.wrap.llms-reporting .llms-setting-group .form-table,
+.wrap.lifterlms-settings .llms-setting-group .form-table,
+.wrap.llms-status .llms-setting-group .form-table {
+ margin: 0;
+}
+.wrap.llms-reporting .llms-setting-group .form-table tr:first-child .llms-subtitle,
+.wrap.lifterlms-settings .llms-setting-group .form-table tr:first-child .llms-subtitle,
+.wrap.llms-status .llms-setting-group .form-table tr:first-child .llms-subtitle {
+ margin-top: 0;
+}
+.wrap.llms-reporting .llms-setting-group td[colspan="2"],
+.wrap.lifterlms-settings .llms-setting-group td[colspan="2"],
+.wrap.llms-status .llms-setting-group td[colspan="2"] {
+ padding-top: 0;
+ padding-right: 0;
+}
+.wrap.llms-reporting .llms-setting-group tr.llms-disabled-field,
+.wrap.lifterlms-settings .llms-setting-group tr.llms-disabled-field,
+.wrap.llms-status .llms-setting-group tr.llms-disabled-field {
+ opacity: 0.5;
+ pointer-events: none;
+}
+.wrap.llms-reporting .llms-setting-group p,
+.wrap.lifterlms-settings .llms-setting-group p,
+.wrap.llms-status .llms-setting-group p {
+ font-size: 14px;
+}
+.wrap.llms-reporting .llms-setting-group input[type=text],
+.wrap.llms-reporting .llms-setting-group input[type=password],
+.wrap.llms-reporting .llms-setting-group input[type=datetime],
+.wrap.llms-reporting .llms-setting-group input[type=datetime-local],
+.wrap.llms-reporting .llms-setting-group input[type=date],
+.wrap.llms-reporting .llms-setting-group input[type=month],
+.wrap.llms-reporting .llms-setting-group input[type=time],
+.wrap.llms-reporting .llms-setting-group input[type=week],
+.wrap.llms-reporting .llms-setting-group input[type=number],
+.wrap.llms-reporting .llms-setting-group input[type=email],
+.wrap.llms-reporting .llms-setting-group input[type=url],
+.wrap.llms-reporting .llms-setting-group input[type=search],
+.wrap.llms-reporting .llms-setting-group input[type=tel],
+.wrap.llms-reporting .llms-setting-group input[type=color],
+.wrap.llms-reporting .llms-setting-group select,
+.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area),
+.wrap.lifterlms-settings .llms-setting-group input[type=text],
+.wrap.lifterlms-settings .llms-setting-group input[type=password],
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime],
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local],
+.wrap.lifterlms-settings .llms-setting-group input[type=date],
+.wrap.lifterlms-settings .llms-setting-group input[type=month],
+.wrap.lifterlms-settings .llms-setting-group input[type=time],
+.wrap.lifterlms-settings .llms-setting-group input[type=week],
+.wrap.lifterlms-settings .llms-setting-group input[type=number],
+.wrap.lifterlms-settings .llms-setting-group input[type=email],
+.wrap.lifterlms-settings .llms-setting-group input[type=url],
+.wrap.lifterlms-settings .llms-setting-group input[type=search],
+.wrap.lifterlms-settings .llms-setting-group input[type=tel],
+.wrap.lifterlms-settings .llms-setting-group input[type=color],
+.wrap.lifterlms-settings .llms-setting-group select,
+.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area),
+.wrap.llms-status .llms-setting-group input[type=text],
+.wrap.llms-status .llms-setting-group input[type=password],
+.wrap.llms-status .llms-setting-group input[type=datetime],
+.wrap.llms-status .llms-setting-group input[type=datetime-local],
+.wrap.llms-status .llms-setting-group input[type=date],
+.wrap.llms-status .llms-setting-group input[type=month],
+.wrap.llms-status .llms-setting-group input[type=time],
+.wrap.llms-status .llms-setting-group input[type=week],
+.wrap.llms-status .llms-setting-group input[type=number],
+.wrap.llms-status .llms-setting-group input[type=email],
+.wrap.llms-status .llms-setting-group input[type=url],
+.wrap.llms-status .llms-setting-group input[type=search],
+.wrap.llms-status .llms-setting-group input[type=tel],
+.wrap.llms-status .llms-setting-group input[type=color],
+.wrap.llms-status .llms-setting-group select,
+.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area) {
+ width: 50%;
+}
+.wrap.llms-reporting .llms-setting-group input[type=text].medium,
+.wrap.llms-reporting .llms-setting-group input[type=password].medium,
+.wrap.llms-reporting .llms-setting-group input[type=datetime].medium,
+.wrap.llms-reporting .llms-setting-group input[type=datetime-local].medium,
+.wrap.llms-reporting .llms-setting-group input[type=date].medium,
+.wrap.llms-reporting .llms-setting-group input[type=month].medium,
+.wrap.llms-reporting .llms-setting-group input[type=time].medium,
+.wrap.llms-reporting .llms-setting-group input[type=week].medium,
+.wrap.llms-reporting .llms-setting-group input[type=number].medium,
+.wrap.llms-reporting .llms-setting-group input[type=email].medium,
+.wrap.llms-reporting .llms-setting-group input[type=url].medium,
+.wrap.llms-reporting .llms-setting-group input[type=search].medium,
+.wrap.llms-reporting .llms-setting-group input[type=tel].medium,
+.wrap.llms-reporting .llms-setting-group input[type=color].medium,
+.wrap.llms-reporting .llms-setting-group select.medium,
+.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=text].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=password].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=date].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=month].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=time].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=week].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=number].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=email].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=url].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=search].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=tel].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=color].medium,
+.wrap.lifterlms-settings .llms-setting-group select.medium,
+.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).medium,
+.wrap.llms-status .llms-setting-group input[type=text].medium,
+.wrap.llms-status .llms-setting-group input[type=password].medium,
+.wrap.llms-status .llms-setting-group input[type=datetime].medium,
+.wrap.llms-status .llms-setting-group input[type=datetime-local].medium,
+.wrap.llms-status .llms-setting-group input[type=date].medium,
+.wrap.llms-status .llms-setting-group input[type=month].medium,
+.wrap.llms-status .llms-setting-group input[type=time].medium,
+.wrap.llms-status .llms-setting-group input[type=week].medium,
+.wrap.llms-status .llms-setting-group input[type=number].medium,
+.wrap.llms-status .llms-setting-group input[type=email].medium,
+.wrap.llms-status .llms-setting-group input[type=url].medium,
+.wrap.llms-status .llms-setting-group input[type=search].medium,
+.wrap.llms-status .llms-setting-group input[type=tel].medium,
+.wrap.llms-status .llms-setting-group input[type=color].medium,
+.wrap.llms-status .llms-setting-group select.medium,
+.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).medium {
+ width: 30%;
+}
+.wrap.llms-reporting .llms-setting-group input[type=text].small,
+.wrap.llms-reporting .llms-setting-group input[type=password].small,
+.wrap.llms-reporting .llms-setting-group input[type=datetime].small,
+.wrap.llms-reporting .llms-setting-group input[type=datetime-local].small,
+.wrap.llms-reporting .llms-setting-group input[type=date].small,
+.wrap.llms-reporting .llms-setting-group input[type=month].small,
+.wrap.llms-reporting .llms-setting-group input[type=time].small,
+.wrap.llms-reporting .llms-setting-group input[type=week].small,
+.wrap.llms-reporting .llms-setting-group input[type=number].small,
+.wrap.llms-reporting .llms-setting-group input[type=email].small,
+.wrap.llms-reporting .llms-setting-group input[type=url].small,
+.wrap.llms-reporting .llms-setting-group input[type=search].small,
+.wrap.llms-reporting .llms-setting-group input[type=tel].small,
+.wrap.llms-reporting .llms-setting-group input[type=color].small,
+.wrap.llms-reporting .llms-setting-group select.small,
+.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).small,
+.wrap.lifterlms-settings .llms-setting-group input[type=text].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=password].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=date].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=month].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=time].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=week].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=number].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=email].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=url].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=search].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=tel].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=color].small,
+.wrap.lifterlms-settings .llms-setting-group select.small,
+.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).small,
+.wrap.llms-status .llms-setting-group input[type=text].small,
+.wrap.llms-status .llms-setting-group input[type=password].small,
+.wrap.llms-status .llms-setting-group input[type=datetime].small,
+.wrap.llms-status .llms-setting-group input[type=datetime-local].small,
+.wrap.llms-status .llms-setting-group input[type=date].small,
+.wrap.llms-status .llms-setting-group input[type=month].small,
+.wrap.llms-status .llms-setting-group input[type=time].small,
+.wrap.llms-status .llms-setting-group input[type=week].small,
+.wrap.llms-status .llms-setting-group input[type=number].small,
+.wrap.llms-status .llms-setting-group input[type=email].small,
+.wrap.llms-status .llms-setting-group input[type=url].small,
+.wrap.llms-status .llms-setting-group input[type=search].small,
+.wrap.llms-status .llms-setting-group input[type=tel].small,
+.wrap.llms-status .llms-setting-group input[type=color].small,
+.wrap.llms-status .llms-setting-group select.small,
+.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).small {
+ width: 20%;
+}
+.wrap.llms-reporting .llms-setting-group input[type=text].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=password].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=datetime].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=datetime-local].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=date].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=month].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=time].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=week].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=number].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=email].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=url].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=search].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=tel].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=color].tiny,
+.wrap.llms-reporting .llms-setting-group select.tiny,
+.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=text].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=password].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=date].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=month].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=time].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=week].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=number].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=email].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=url].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=search].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=tel].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=color].tiny,
+.wrap.lifterlms-settings .llms-setting-group select.tiny,
+.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).tiny,
+.wrap.llms-status .llms-setting-group input[type=text].tiny,
+.wrap.llms-status .llms-setting-group input[type=password].tiny,
+.wrap.llms-status .llms-setting-group input[type=datetime].tiny,
+.wrap.llms-status .llms-setting-group input[type=datetime-local].tiny,
+.wrap.llms-status .llms-setting-group input[type=date].tiny,
+.wrap.llms-status .llms-setting-group input[type=month].tiny,
+.wrap.llms-status .llms-setting-group input[type=time].tiny,
+.wrap.llms-status .llms-setting-group input[type=week].tiny,
+.wrap.llms-status .llms-setting-group input[type=number].tiny,
+.wrap.llms-status .llms-setting-group input[type=email].tiny,
+.wrap.llms-status .llms-setting-group input[type=url].tiny,
+.wrap.llms-status .llms-setting-group input[type=search].tiny,
+.wrap.llms-status .llms-setting-group input[type=tel].tiny,
+.wrap.llms-status .llms-setting-group input[type=color].tiny,
+.wrap.llms-status .llms-setting-group select.tiny,
+.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).tiny {
+ width: 10%;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {
+ background: #fff;
+ }
+}
+.wrap.llms-reporting #llms-mailhawk-connect,
+.wrap.lifterlms-settings #llms-mailhawk-connect,
+.wrap.llms-status #llms-mailhawk-connect {
+ height: auto;
+ margin: 0 0 6px;
+ position: relative;
+}
+.wrap.llms-reporting #llms-mailhawk-connect .dashicons,
+.wrap.lifterlms-settings #llms-mailhawk-connect .dashicons,
+.wrap.llms-status #llms-mailhawk-connect .dashicons {
+ margin: -4px 0 0 4px;
+ vertical-align: middle;
+}
+.wrap.llms-reporting #llms-sendwp-connect,
+.wrap.lifterlms-settings #llms-sendwp-connect,
+.wrap.llms-status #llms-sendwp-connect {
+ height: auto;
+ margin: 0 0 6px;
+ position: relative;
+}
+.wrap.llms-reporting #llms-sendwp-connect .fa,
+.wrap.lifterlms-settings #llms-sendwp-connect .fa,
+.wrap.llms-status #llms-sendwp-connect .fa {
+ margin-left: 4px;
+}
+
+@media only screen and (min-width: 782px) {
+ .wrap.lifterlms-settings .llms-subheader {
+ height: 40px;
+ position: sticky;
+ top: 32px;
+ }
+ .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin: 0 -22px 20px -20px;
+ }
+ .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {
+ padding-right: 10px;
+ }
+ .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin: 0 -22px 20px -20px;
+ }
+ .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {
+ padding-right: 10px;
+ }
+ .wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin: 0 -22px 20px -20px;
+ }
+ .wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {
+ padding-right: 10px;
+ }
+}
+.wrap.llms-dashboard .llms-inside-wrap {
+ padding-top: 30px;
+}
+.wrap.llms-dashboard #poststuff h2 {
+ padding: 12px 20px;
+}
+.wrap.llms-dashboard .llms-dashboard-activity h2 {
+ font-size: 20px;
+ font-weight: 700;
+ line-height: 1.5;
+ margin-top: 0;
+ text-align: center;
+}
+.wrap.llms-dashboard .postbox {
+ background-color: #FFF;
+ border: none;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+}
+.wrap.llms-dashboard .postbox .postbox-header {
+ border-bottom-color: #efefef;
+}
+.wrap.llms-dashboard .postbox .inside {
+ padding: 20px;
+}
+.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap {
+ margin-top: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item {
+ margin-top: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item p {
+ text-align: right;
+}
+.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item footer.llms-actions {
+ padding-top: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_addons p {
+ text-align: center;
+}
+.wrap.llms-dashboard #llms_dashboard_addons p .llms-button-primary {
+ display: inline-block;
+ margin-top: 15px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links ul {
+ list-style: disc;
+ margin: 5px 20px 0 0;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links ul li {
+ font-size: 15px;
+ line-height: 1.5;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links {
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-gap: 30px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links a {
+ display: inline-block;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list h3 {
+ margin: 0 0 10px 0;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul {
+ margin-bottom: 20px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul.llms-checklist {
+ list-style: none;
+ margin-right: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa {
+ text-align: center;
+ width: 16px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-check {
+ color: #008a20;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-times {
+ color: #d63638;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-primary,
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-secondary,
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-action {
+ display: block;
+ text-align: center;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 20px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 {
+ margin: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 .dashicons {
+ color: #AAA;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links {
+ grid-template-columns: 1fr 1fr 1fr 1fr;
+ }
+}
+.wrap.llms-dashboard #llms_dashboard_blog ul,
+.wrap.llms-dashboard #llms_dashboard_podcast ul {
+ margin: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_blog ul li,
+.wrap.llms-dashboard #llms_dashboard_podcast ul li {
+ margin: 0 0 15px 0;
+}
+.wrap.llms-dashboard #llms_dashboard_blog ul li a,
+.wrap.llms-dashboard #llms_dashboard_podcast ul li a {
+ display: block;
+}
+.wrap.llms-dashboard #llms_dashboard_blog p,
+.wrap.llms-dashboard #llms_dashboard_podcast p {
+ margin: 15px 0;
+ text-align: center;
+}
+.wrap.llms-dashboard #llms_dashboard_blog p a,
+.wrap.llms-dashboard #llms_dashboard_podcast p a {
+ display: inline-block;
+}
+
+#llms_dashboard_widget .inside {
+ margin: 0;
+ padding-bottom: 8px;
+}
+#llms_dashboard_widget .llms-dashboard-widget-wrap {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ padding-top: 12px;
+}
+#llms_dashboard_widget .activity-block {
+ padding-bottom: 8px;
+ border-color: #e8e8e8;
+}
+#llms_dashboard_widget h3 {
+ margin-bottom: 0;
+}
+#llms_dashboard_widget .llms-charts-wrapper {
+ display: none;
+}
+#llms_dashboard_widget .llms-widget-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ gap: 8px;
+ width: 100%;
+ -webkit-box-align: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ padding: 4px 0;
+}
+#llms_dashboard_widget .llms-widget-row:before, #llms_dashboard_widget .llms-widget-row:after {
+ display: none;
+}
+#llms_dashboard_widget .llms-widget-1-4 {
+ padding: 0;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+#llms_dashboard_widget .llms-widget {
+ padding: 8px 8px 12px;
+ margin: 0;
+ border-radius: 6px;
+ border: 1px solid #e8e8e8;
+ -webkit-box-shadow: 0px 2px 4px rgb(246, 247, 247);
+ box-shadow: 0px 2px 4px rgb(246, 247, 247);
+ height: 100%;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: end;
+ -ms-flex-align: end;
+ align-items: flex-end;
+}
+#llms_dashboard_widget .llms-label {
+ font-size: 14px;
+ width: 100%;
+ -ms-flex-item-align: start;
+ align-self: flex-start;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+#llms_dashboard_widget .llms-widget-content {
+ font-size: 20px;
+ margin: 0;
+}
+#llms_dashboard_widget .llms-widget-info-toggle {
+ display: none;
+}
+#llms_dashboard_widget a {
+ border: 0;
+}
+#llms_dashboard_widget .subsubsub {
+ color: #dcdcde;
+}
+
+.llms-dashboard-widget-feed {
+ margin: 0 -12px;
+ padding: 0;
+ background-color: #f6f7f7;
+}
+.llms-dashboard-widget-feed li {
+ margin: 0;
+ padding: 8px 12px;
+ border-bottom: 1px solid #e8e8e8;
+}
+.llms-dashboard-widget-feed span {
+ display: block;
+}
+
+.wrap.llms-resources .llms-inside-wrap {
+ padding-top: 30px;
+}
+.wrap.llms-resources #poststuff #post-body.columns-2 {
+ margin-left: 350px;
+}
+.wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables {
+ width: 330px;
+}
+@media only screen and (max-width: 850px) {
+ .wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables {
+ width: auto;
+ }
+}
+.wrap.llms-resources #poststuff #postbox-container-1 {
+ float: left;
+ margin-left: -350px;
+ width: 330px;
+}
+.wrap.llms-resources #poststuff h2 {
+ padding: 12px 20px;
+}
+.wrap.llms-resources #poststuff .postbox {
+ background-color: #FFF;
+ border: none;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+}
+.wrap.llms-resources #poststuff .postbox .postbox-header {
+ border-bottom-color: #efefef;
+}
+.wrap.llms-resources #poststuff .postbox .inside {
+ margin: 0;
+ padding: 20px;
+}
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video p {
+ font-size: 15px;
+ line-height: 1.5;
+ margin: 0 0 40px 0;
+}
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container {
+ height: 0;
+ overflow: hidden;
+ padding-top: 30px;
+ padding-bottom: 56.25%;
+ position: relative;
+}
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container iframe,
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container object,
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container embed {
+ right: 0;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.wrap.llms-resources #llms_dashboard_getting_started ul {
+ margin: 0 0 20px 0;
+}
+.wrap.llms-resources #llms_dashboard_getting_started ul li {
+ font-size: 15px;
+ line-height: 1.5;
+ margin-bottom: 15px;
+}
+.wrap.llms-resources #llms_dashboard_getting_started .llms-button-primary {
+ display: block;
+ margin-top: auto;
+ max-width: 300px;
+ text-align: center;
+}
+.wrap.llms-resources #llms_dashboard_resource_links ul {
+ list-style: disc;
+ margin: 5px 20px 0 0;
+}
+.wrap.llms-resources #llms_dashboard_resource_links ul li {
+ font-size: 15px;
+ line-height: 1.5;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links {
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-gap: 60px;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links a {
+ display: inline-block;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 {
+ margin: 0 0 10px 0;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 .dashicons {
+ color: #AAA;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list ul {
+ margin-bottom: 20px;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-primary,
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-secondary,
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-action {
+ display: block;
+ margin-top: auto;
+ max-width: 300px;
+ text-align: center;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+}
+
+.llms-remarks .llms-remarks-field {
+ height: 120px;
+ width: 100%;
+}
+.llms-remarks input[type=number] {
+ width: 60px;
+}
+
+button[name=llms_quiz_attempt_action] .save {
+ display: none;
+}
+button[name=llms_quiz_attempt_action].grading .default {
+ display: none;
+}
+button[name=llms_quiz_attempt_action].grading .save {
+ display: inline;
+}
+
+.llms-form-fields {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-form-fields * {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-form-fields.flush .llms-form-field {
+ padding: 0 0 20px;
+}
+.llms-form-fields label:not(.llms-field-html label) {
+ font-weight: 700;
+}
+.llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {
+ margin-bottom: 0;
+}
+
+.llms-form-heading {
+ padding: 0 10px 10px;
+}
+
+.llms-form-field {
+ float: right;
+ padding: 0 10px 20px;
+ position: relative;
+ width: 100%;
+}
+.llms-form-field label:empty:after {
+ content: " ";
+}
+.llms-form-field [type=text],
+.llms-form-field [type=password],
+.llms-form-field [type=email],
+.llms-form-field [type=url],
+.llms-form-field [type=tel],
+.llms-form-field [type=number] {
+ background-color: #fefefe;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 16px;
+ line-height: 1;
+ padding: 8px 12px;
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ width: 100%;
+}
+.llms-form-field input:focus,
+.llms-form-field input:focus-visible {
+ border-color: #6888df;
+ outline: thin solid;
+}
+.llms-form-field select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ appearance: none;
+ background-color: #fefefe;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ color: #010101;
+ padding: 8px 12px;
+ margin: 0;
+ width: 100%;
+ font-family: inherit;
+ font-size: 16px;
+ cursor: inherit;
+ line-height: 1.6;
+ z-index: 1;
+ outline: none;
+ background-repeat: no-repeat;
+ background-image: linear-gradient(-45deg, transparent 50%, currentcolor 50%), linear-gradient(-135deg, currentcolor 50%, transparent 50%);
+ background-position: left 15px top 1.3rem, left 10px top 1.3rem;
+ background-size: 5px 5px, 5px 5px;
+}
+.llms-form-field select::-ms-expand {
+ display: none;
+}
+.llms-form-field select:focus {
+ border: 1px solid #6888df;
+ outline: thin solid;
+}
+.llms-form-field.valid input[type=date], .llms-form-field.valid input[type=time], .llms-form-field.valid input[type=datetime-local], .llms-form-field.valid input[type=week], .llms-form-field.valid input[type=month], .llms-form-field.valid input[type=text], .llms-form-field.valid input[type=email], .llms-form-field.valid input[type=url], .llms-form-field.valid input[type=password], .llms-form-field.valid input[type=search], .llms-form-field.valid input[type=tel], .llms-form-field.valid input[type=number], .llms-form-field.valid textarea, .llms-form-field.valid select {
+ background: rgba(131, 195, 115, 0.3);
+ border-color: #83c373;
+}
+.llms-form-field.error input[type=date], .llms-form-field.error input[type=time], .llms-form-field.error input[type=datetime-local], .llms-form-field.error input[type=week], .llms-form-field.error input[type=month], .llms-form-field.error input[type=text], .llms-form-field.error input[type=email], .llms-form-field.error input[type=url], .llms-form-field.error input[type=password], .llms-form-field.error input[type=search], .llms-form-field.error input[type=tel], .llms-form-field.error input[type=number], .llms-form-field.error textarea, .llms-form-field.error select, .llms-form-field.invalid input[type=date], .llms-form-field.invalid input[type=time], .llms-form-field.invalid input[type=datetime-local], .llms-form-field.invalid input[type=week], .llms-form-field.invalid input[type=month], .llms-form-field.invalid input[type=text], .llms-form-field.invalid input[type=email], .llms-form-field.invalid input[type=url], .llms-form-field.invalid input[type=password], .llms-form-field.invalid input[type=search], .llms-form-field.invalid input[type=tel], .llms-form-field.invalid input[type=number], .llms-form-field.invalid textarea, .llms-form-field.invalid select {
+ background: rgba(187, 35, 28, 0.3);
+ border-color: #bb231c;
+}
+.llms-form-field.llms-visually-hidden-field {
+ display: none;
+}
+.llms-form-field.align-right {
+ text-align: left;
+}
+@media screen and (min-width: 600px) {
+ .llms-form-field.llms-cols-1 {
+ width: 8.3333333333%;
+ }
+ .llms-form-field.llms-cols-2 {
+ width: 16.6666666667%;
+ }
+ .llms-form-field.llms-cols-3 {
+ width: 25%;
+ }
+ .llms-form-field.llms-cols-4 {
+ width: 33.3333333333%;
+ }
+ .llms-form-field.llms-cols-5 {
+ width: 41.6666666667%;
+ }
+ .llms-form-field.llms-cols-6 {
+ width: 50%;
+ }
+ .llms-form-field.llms-cols-7 {
+ width: 58.3333333333%;
+ }
+ .llms-form-field.llms-cols-8 {
+ width: 66.6666666667%;
+ }
+ .llms-form-field.llms-cols-9 {
+ width: 75%;
+ }
+ .llms-form-field.llms-cols-10 {
+ width: 83.3333333333%;
+ }
+ .llms-form-field.llms-cols-11 {
+ width: 91.6666666667%;
+ }
+ .llms-form-field.llms-cols-12 {
+ width: 100%;
+ }
+}
+.llms-form-field.type-hidden {
+ padding: 0;
+}
+.llms-form-field.type-radio input,
+.llms-form-field.type-radio label, .llms-form-field.type-checkbox input,
+.llms-form-field.type-checkbox label {
+ display: inline-block;
+ width: auto;
+}
+.llms-form-field.type-radio input, .llms-form-field.type-checkbox input {
+ margin-left: 10px;
+}
+.llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {
+ display: block;
+}
+.llms-form-field.type-radio:not(.is-group) input[type=radio] {
+ position: absolute;
+ opacity: 0;
+ visibility: none;
+}
+.llms-form-field.type-radio:not(.is-group) label:before {
+ background: #fafafa;
+ background-position: -24px 0;
+ background-repeat: no-repeat;
+ border-radius: 50%;
+ -webkit-box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;
+ box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;
+ content: "";
+ cursor: pointer;
+ display: inline-block;
+ height: 22px;
+ margin-left: 5px;
+ position: relative;
+ -webkit-transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ top: -3px;
+ vertical-align: middle;
+ width: 22px;
+ z-index: 2;
+}
+.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked + label:before {
+ -webkit-transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ background-position: 100% 0;
+ background-image: radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%);
+}
+.llms-form-field .llms-input-group {
+ margin-top: 5px;
+}
+.llms-form-field .llms-input-group .llms-form-field {
+ padding: 0 5px 5px 0;
+}
+.llms-form-field.type-reset button:not(.auto), .llms-form-field.type-button button:not(.auto), .llms-form-field.type-submit button:not(.auto) {
+ width: 100%;
+}
+.llms-form-field .llms-description {
+ font-size: 14px;
+ font-style: italic;
+ line-height: 18px;
+}
+.llms-form-field .llms-required {
+ color: #bb231c;
+ margin-right: 4px;
+}
+.llms-form-field input, .llms-form-field textarea, .llms-form-field select {
+ width: 100%;
+ margin-bottom: 5px;
+}
+.llms-form-field .select2-container .select2-selection--single {
+ height: auto;
+ padding: 4px 6px;
+}
+.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {
+ height: 100%;
+}
+
+.llms-password-strength-meter {
+ border: 1px solid #dadada;
+ display: none;
+ font-size: 10px;
+ margin-top: -10px;
+ padding: 1px;
+ position: relative;
+ text-align: center;
+}
+.llms-password-strength-meter:before {
+ bottom: 0;
+ content: "";
+ right: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transition: width 0.4s ease;
+ transition: width 0.4s ease;
+}
+.llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {
+ border-color: #e35b5b;
+}
+.llms-password-strength-meter.mismatch:before, .llms-password-strength-meter.too-short:before, .llms-password-strength-meter.very-weak:before {
+ background: rgba(227, 91, 91, 0.25);
+ width: 25%;
+}
+.llms-password-strength-meter.too-short:before {
+ width: 0;
+}
+.llms-password-strength-meter.weak {
+ border-color: #f78b53;
+}
+.llms-password-strength-meter.weak:before {
+ background: rgba(247, 139, 83, 0.25);
+ width: 50%;
+}
+.llms-password-strength-meter.medium {
+ border-color: #ffc733;
+}
+.llms-password-strength-meter.medium:before {
+ background: rgba(255, 199, 51, 0.25);
+ width: 75%;
+}
+.llms-password-strength-meter.strong {
+ border-color: #83c373;
+}
+.llms-password-strength-meter.strong:before {
+ background: rgba(131, 195, 115, 0.25);
+ width: 100%;
+}
+.llms-password-strength-meter + .llms-description {
+ display: block;
+}
+
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: "FontAwesome";
+ src: url("../fonts/fontawesome-webfont.eot?v=4.7.0");
+ src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+
+.fa-2x {
+ font-size: 2em;
+}
+
+.fa-3x {
+ font-size: 3em;
+}
+
+.fa-4x {
+ font-size: 4em;
+}
+
+.fa-5x {
+ font-size: 5em;
+}
+
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+
+.fa-ul {
+ padding-right: 0;
+ margin-right: 2.14285714em;
+ list-style-type: none;
+}
+
+.fa-ul > li {
+ position: relative;
+}
+
+.fa-li {
+ position: absolute;
+ right: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+
+.fa-li.fa-lg {
+ right: -1.85714286em;
+}
+
+.fa-border {
+ padding: 0.2em 0.25em 0.15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: 0.1em;
+}
+
+.fa-pull-left {
+ float: right;
+}
+
+.fa-pull-right {
+ float: left;
+}
+
+.fa.fa-pull-left {
+ margin-left: 0.3em;
+}
+
+.fa.fa-pull-right {
+ margin-right: 0.3em;
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right {
+ float: left;
+}
+
+.pull-left {
+ float: right;
+}
+
+.fa.pull-left {
+ margin-left: 0.3em;
+}
+
+.fa.pull-right {
+ margin-right: 0.3em;
+}
+
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(-359deg);
+ transform: rotate(-359deg);
+ }
+}
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(-359deg);
+ transform: rotate(-359deg);
+ }
+}
+.fa-rotate-90 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+ -webkit-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+}
+
+.fa-rotate-180 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+ -webkit-transform: rotate(-180deg);
+ transform: rotate(-180deg);
+}
+
+.fa-rotate-270 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+ -webkit-transform: rotate(-270deg);
+ transform: rotate(-270deg);
+}
+
+.fa-flip-horizontal {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+ -webkit-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+
+.fa-flip-vertical {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+ -webkit-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ -webkit-filter: none;
+ filter: none;
+}
+
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+
+.fa-stack-1x,
+.fa-stack-2x {
+ position: absolute;
+ right: 0;
+ width: 100%;
+ text-align: center;
+}
+
+.fa-stack-1x {
+ line-height: inherit;
+}
+
+.fa-stack-2x {
+ font-size: 2em;
+}
+
+.fa-inverse {
+ color: #ffffff;
+}
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "\f000";
+}
+
+.fa-music:before {
+ content: "\f001";
+}
+
+.fa-search:before {
+ content: "\f002";
+}
+
+.fa-envelope-o:before {
+ content: "\f003";
+}
+
+.fa-heart:before {
+ content: "\f004";
+}
+
+.fa-star:before {
+ content: "\f005";
+}
+
+.fa-star-o:before {
+ content: "\f006";
+}
+
+.fa-user:before {
+ content: "\f007";
+}
+
+.fa-film:before {
+ content: "\f008";
+}
+
+.fa-th-large:before {
+ content: "\f009";
+}
+
+.fa-th:before {
+ content: "\f00a";
+}
+
+.fa-th-list:before {
+ content: "\f00b";
+}
+
+.fa-check:before {
+ content: "\f00c";
+}
+
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "\f00d";
+}
+
+.fa-search-plus:before {
+ content: "\f00e";
+}
+
+.fa-search-minus:before {
+ content: "\f010";
+}
+
+.fa-power-off:before {
+ content: "\f011";
+}
+
+.fa-signal:before {
+ content: "\f012";
+}
+
+.fa-gear:before,
+.fa-cog:before {
+ content: "\f013";
+}
+
+.fa-trash-o:before {
+ content: "\f014";
+}
+
+.fa-home:before {
+ content: "\f015";
+}
+
+.fa-file-o:before {
+ content: "\f016";
+}
+
+.fa-clock-o:before {
+ content: "\f017";
+}
+
+.fa-road:before {
+ content: "\f018";
+}
+
+.fa-download:before {
+ content: "\f019";
+}
+
+.fa-arrow-circle-o-down:before {
+ content: "\f01a";
+}
+
+.fa-arrow-circle-o-up:before {
+ content: "\f01b";
+}
+
+.fa-inbox:before {
+ content: "\f01c";
+}
+
+.fa-play-circle-o:before {
+ content: "\f01d";
+}
+
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "\f01e";
+}
+
+.fa-refresh:before {
+ content: "\f021";
+}
+
+.fa-list-alt:before {
+ content: "\f022";
+}
+
+.fa-lock:before {
+ content: "\f023";
+}
+
+.fa-flag:before {
+ content: "\f024";
+}
+
+.fa-headphones:before {
+ content: "\f025";
+}
+
+.fa-volume-off:before {
+ content: "\f026";
+}
+
+.fa-volume-down:before {
+ content: "\f027";
+}
+
+.fa-volume-up:before {
+ content: "\f028";
+}
+
+.fa-qrcode:before {
+ content: "\f029";
+}
+
+.fa-barcode:before {
+ content: "\f02a";
+}
+
+.fa-tag:before {
+ content: "\f02b";
+}
+
+.fa-tags:before {
+ content: "\f02c";
+}
+
+.fa-book:before {
+ content: "\f02d";
+}
+
+.fa-bookmark:before {
+ content: "\f02e";
+}
+
+.fa-print:before {
+ content: "\f02f";
+}
+
+.fa-camera:before {
+ content: "\f030";
+}
+
+.fa-font:before {
+ content: "\f031";
+}
+
+.fa-bold:before {
+ content: "\f032";
+}
+
+.fa-italic:before {
+ content: "\f033";
+}
+
+.fa-text-height:before {
+ content: "\f034";
+}
+
+.fa-text-width:before {
+ content: "\f035";
+}
+
+.fa-align-left:before {
+ content: "\f036";
+}
+
+.fa-align-center:before {
+ content: "\f037";
+}
+
+.fa-align-right:before {
+ content: "\f038";
+}
+
+.fa-align-justify:before {
+ content: "\f039";
+}
+
+.fa-list:before {
+ content: "\f03a";
+}
+
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "\f03b";
+}
+
+.fa-indent:before {
+ content: "\f03c";
+}
+
+.fa-video-camera:before {
+ content: "\f03d";
+}
+
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "\f03e";
+}
+
+.fa-pencil:before {
+ content: "\f040";
+}
+
+.fa-map-marker:before {
+ content: "\f041";
+}
+
+.fa-adjust:before {
+ content: "\f042";
+}
+
+.fa-tint:before {
+ content: "\f043";
+}
+
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "\f044";
+}
+
+.fa-share-square-o:before {
+ content: "\f045";
+}
+
+.fa-check-square-o:before {
+ content: "\f046";
+}
+
+.fa-arrows:before {
+ content: "\f047";
+}
+
+.fa-step-backward:before {
+ content: "\f048";
+}
+
+.fa-fast-backward:before {
+ content: "\f049";
+}
+
+.fa-backward:before {
+ content: "\f04a";
+}
+
+.fa-play:before {
+ content: "\f04b";
+}
+
+.fa-pause:before {
+ content: "\f04c";
+}
+
+.fa-stop:before {
+ content: "\f04d";
+}
+
+.fa-forward:before {
+ content: "\f04e";
+}
+
+.fa-fast-forward:before {
+ content: "\f050";
+}
+
+.fa-step-forward:before {
+ content: "\f051";
+}
+
+.fa-eject:before {
+ content: "\f052";
+}
+
+.fa-chevron-left:before {
+ content: "\f053";
+}
+
+.fa-chevron-right:before {
+ content: "\f054";
+}
+
+.fa-plus-circle:before {
+ content: "\f055";
+}
+
+.fa-minus-circle:before {
+ content: "\f056";
+}
+
+.fa-times-circle:before {
+ content: "\f057";
+}
+
+.fa-check-circle:before {
+ content: "\f058";
+}
+
+.fa-question-circle:before {
+ content: "\f059";
+}
+
+.fa-info-circle:before {
+ content: "\f05a";
+}
+
+.fa-crosshairs:before {
+ content: "\f05b";
+}
+
+.fa-times-circle-o:before {
+ content: "\f05c";
+}
+
+.fa-check-circle-o:before {
+ content: "\f05d";
+}
+
+.fa-ban:before {
+ content: "\f05e";
+}
+
+.fa-arrow-left:before {
+ content: "\f060";
+}
+
+.fa-arrow-right:before {
+ content: "\f061";
+}
+
+.fa-arrow-up:before {
+ content: "\f062";
+}
+
+.fa-arrow-down:before {
+ content: "\f063";
+}
+
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "\f064";
+}
+
+.fa-expand:before {
+ content: "\f065";
+}
+
+.fa-compress:before {
+ content: "\f066";
+}
+
+.fa-plus:before {
+ content: "\f067";
+}
+
+.fa-minus:before {
+ content: "\f068";
+}
+
+.fa-asterisk:before {
+ content: "\f069";
+}
+
+.fa-exclamation-circle:before {
+ content: "\f06a";
+}
+
+.fa-gift:before {
+ content: "\f06b";
+}
+
+.fa-leaf:before {
+ content: "\f06c";
+}
+
+.fa-fire:before {
+ content: "\f06d";
+}
+
+.fa-eye:before {
+ content: "\f06e";
+}
+
+.fa-eye-slash:before {
+ content: "\f070";
+}
+
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "\f071";
+}
+
+.fa-plane:before {
+ content: "\f072";
+}
+
+.fa-calendar:before {
+ content: "\f073";
+}
+
+.fa-random:before {
+ content: "\f074";
+}
+
+.fa-comment:before {
+ content: "\f075";
+}
+
+.fa-magnet:before {
+ content: "\f076";
+}
+
+.fa-chevron-up:before {
+ content: "\f077";
+}
+
+.fa-chevron-down:before {
+ content: "\f078";
+}
+
+.fa-retweet:before {
+ content: "\f079";
+}
+
+.fa-shopping-cart:before {
+ content: "\f07a";
+}
+
+.fa-folder:before {
+ content: "\f07b";
+}
+
+.fa-folder-open:before {
+ content: "\f07c";
+}
+
+.fa-arrows-v:before {
+ content: "\f07d";
+}
+
+.fa-arrows-h:before {
+ content: "\f07e";
+}
+
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "\f080";
+}
+
+.fa-twitter-square:before {
+ content: "\f081";
+}
+
+.fa-facebook-square:before {
+ content: "\f082";
+}
+
+.fa-camera-retro:before {
+ content: "\f083";
+}
+
+.fa-key:before {
+ content: "\f084";
+}
+
+.fa-gears:before,
+.fa-cogs:before {
+ content: "\f085";
+}
+
+.fa-comments:before {
+ content: "\f086";
+}
+
+.fa-thumbs-o-up:before {
+ content: "\f087";
+}
+
+.fa-thumbs-o-down:before {
+ content: "\f088";
+}
+
+.fa-star-half:before {
+ content: "\f089";
+}
+
+.fa-heart-o:before {
+ content: "\f08a";
+}
+
+.fa-sign-out:before {
+ content: "\f08b";
+}
+
+.fa-linkedin-square:before {
+ content: "\f08c";
+}
+
+.fa-thumb-tack:before {
+ content: "\f08d";
+}
+
+.fa-external-link:before {
+ content: "\f08e";
+}
+
+.fa-sign-in:before {
+ content: "\f090";
+}
+
+.fa-trophy:before {
+ content: "\f091";
+}
+
+.fa-github-square:before {
+ content: "\f092";
+}
+
+.fa-upload:before {
+ content: "\f093";
+}
+
+.fa-lemon-o:before {
+ content: "\f094";
+}
+
+.fa-phone:before {
+ content: "\f095";
+}
+
+.fa-square-o:before {
+ content: "\f096";
+}
+
+.fa-bookmark-o:before {
+ content: "\f097";
+}
+
+.fa-phone-square:before {
+ content: "\f098";
+}
+
+.fa-twitter:before {
+ content: "\f099";
+}
+
+.fa-facebook-f:before,
+.fa-facebook:before {
+ content: "\f09a";
+}
+
+.fa-github:before {
+ content: "\f09b";
+}
+
+.fa-unlock:before {
+ content: "\f09c";
+}
+
+.fa-credit-card:before {
+ content: "\f09d";
+}
+
+.fa-feed:before,
+.fa-rss:before {
+ content: "\f09e";
+}
+
+.fa-hdd-o:before {
+ content: "\f0a0";
+}
+
+.fa-bullhorn:before {
+ content: "\f0a1";
+}
+
+.fa-bell:before {
+ content: "\f0f3";
+}
+
+.fa-certificate:before {
+ content: "\f0a3";
+}
+
+.fa-hand-o-right:before {
+ content: "\f0a4";
+}
+
+.fa-hand-o-left:before {
+ content: "\f0a5";
+}
+
+.fa-hand-o-up:before {
+ content: "\f0a6";
+}
+
+.fa-hand-o-down:before {
+ content: "\f0a7";
+}
+
+.fa-arrow-circle-left:before {
+ content: "\f0a8";
+}
+
+.fa-arrow-circle-right:before {
+ content: "\f0a9";
+}
+
+.fa-arrow-circle-up:before {
+ content: "\f0aa";
+}
+
+.fa-arrow-circle-down:before {
+ content: "\f0ab";
+}
+
+.fa-globe:before {
+ content: "\f0ac";
+}
+
+.fa-wrench:before {
+ content: "\f0ad";
+}
+
+.fa-tasks:before {
+ content: "\f0ae";
+}
+
+.fa-filter:before {
+ content: "\f0b0";
+}
+
+.fa-briefcase:before {
+ content: "\f0b1";
+}
+
+.fa-arrows-alt:before {
+ content: "\f0b2";
+}
+
+.fa-group:before,
+.fa-users:before {
+ content: "\f0c0";
+}
+
+.fa-chain:before,
+.fa-link:before {
+ content: "\f0c1";
+}
+
+.fa-cloud:before {
+ content: "\f0c2";
+}
+
+.fa-flask:before {
+ content: "\f0c3";
+}
+
+.fa-cut:before,
+.fa-scissors:before {
+ content: "\f0c4";
+}
+
+.fa-copy:before,
+.fa-files-o:before {
+ content: "\f0c5";
+}
+
+.fa-paperclip:before {
+ content: "\f0c6";
+}
+
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "\f0c7";
+}
+
+.fa-square:before {
+ content: "\f0c8";
+}
+
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "\f0c9";
+}
+
+.fa-list-ul:before {
+ content: "\f0ca";
+}
+
+.fa-list-ol:before {
+ content: "\f0cb";
+}
+
+.fa-strikethrough:before {
+ content: "\f0cc";
+}
+
+.fa-underline:before {
+ content: "\f0cd";
+}
+
+.fa-table:before {
+ content: "\f0ce";
+}
+
+.fa-magic:before {
+ content: "\f0d0";
+}
+
+.fa-truck:before {
+ content: "\f0d1";
+}
+
+.fa-pinterest:before {
+ content: "\f0d2";
+}
+
+.fa-pinterest-square:before {
+ content: "\f0d3";
+}
+
+.fa-google-plus-square:before {
+ content: "\f0d4";
+}
+
+.fa-google-plus:before {
+ content: "\f0d5";
+}
+
+.fa-money:before {
+ content: "\f0d6";
+}
+
+.fa-caret-down:before {
+ content: "\f0d7";
+}
+
+.fa-caret-up:before {
+ content: "\f0d8";
+}
+
+.fa-caret-left:before {
+ content: "\f0d9";
+}
+
+.fa-caret-right:before {
+ content: "\f0da";
+}
+
+.fa-columns:before {
+ content: "\f0db";
+}
+
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "\f0dc";
+}
+
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "\f0dd";
+}
+
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "\f0de";
+}
+
+.fa-envelope:before {
+ content: "\f0e0";
+}
+
+.fa-linkedin:before {
+ content: "\f0e1";
+}
+
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "\f0e2";
+}
+
+.fa-legal:before,
+.fa-gavel:before {
+ content: "\f0e3";
+}
+
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "\f0e4";
+}
+
+.fa-comment-o:before {
+ content: "\f0e5";
+}
+
+.fa-comments-o:before {
+ content: "\f0e6";
+}
+
+.fa-flash:before,
+.fa-bolt:before {
+ content: "\f0e7";
+}
+
+.fa-sitemap:before {
+ content: "\f0e8";
+}
+
+.fa-umbrella:before {
+ content: "\f0e9";
+}
+
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "\f0ea";
+}
+
+.fa-lightbulb-o:before {
+ content: "\f0eb";
+}
+
+.fa-exchange:before {
+ content: "\f0ec";
+}
+
+.fa-cloud-download:before {
+ content: "\f0ed";
+}
+
+.fa-cloud-upload:before {
+ content: "\f0ee";
+}
+
+.fa-user-md:before {
+ content: "\f0f0";
+}
+
+.fa-stethoscope:before {
+ content: "\f0f1";
+}
+
+.fa-suitcase:before {
+ content: "\f0f2";
+}
+
+.fa-bell-o:before {
+ content: "\f0a2";
+}
+
+.fa-coffee:before {
+ content: "\f0f4";
+}
+
+.fa-cutlery:before {
+ content: "\f0f5";
+}
+
+.fa-file-text-o:before {
+ content: "\f0f6";
+}
+
+.fa-building-o:before {
+ content: "\f0f7";
+}
+
+.fa-hospital-o:before {
+ content: "\f0f8";
+}
+
+.fa-ambulance:before {
+ content: "\f0f9";
+}
+
+.fa-medkit:before {
+ content: "\f0fa";
+}
+
+.fa-fighter-jet:before {
+ content: "\f0fb";
+}
+
+.fa-beer:before {
+ content: "\f0fc";
+}
+
+.fa-h-square:before {
+ content: "\f0fd";
+}
+
+.fa-plus-square:before {
+ content: "\f0fe";
+}
+
+.fa-angle-double-left:before {
+ content: "\f100";
+}
+
+.fa-angle-double-right:before {
+ content: "\f101";
+}
+
+.fa-angle-double-up:before {
+ content: "\f102";
+}
+
+.fa-angle-double-down:before {
+ content: "\f103";
+}
+
+.fa-angle-left:before {
+ content: "\f104";
+}
+
+.fa-angle-right:before {
+ content: "\f105";
+}
+
+.fa-angle-up:before {
+ content: "\f106";
+}
+
+.fa-angle-down:before {
+ content: "\f107";
+}
+
+.fa-desktop:before {
+ content: "\f108";
+}
+
+.fa-laptop:before {
+ content: "\f109";
+}
+
+.fa-tablet:before {
+ content: "\f10a";
+}
+
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "\f10b";
+}
+
+.fa-circle-o:before {
+ content: "\f10c";
+}
+
+.fa-quote-left:before {
+ content: "\f10d";
+}
+
+.fa-quote-right:before {
+ content: "\f10e";
+}
+
+.fa-spinner:before {
+ content: "\f110";
+}
+
+.fa-circle:before {
+ content: "\f111";
+}
+
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "\f112";
+}
+
+.fa-github-alt:before {
+ content: "\f113";
+}
+
+.fa-folder-o:before {
+ content: "\f114";
+}
+
+.fa-folder-open-o:before {
+ content: "\f115";
+}
+
+.fa-smile-o:before {
+ content: "\f118";
+}
+
+.fa-frown-o:before {
+ content: "\f119";
+}
+
+.fa-meh-o:before {
+ content: "\f11a";
+}
+
+.fa-gamepad:before {
+ content: "\f11b";
+}
+
+.fa-keyboard-o:before {
+ content: "\f11c";
+}
+
+.fa-flag-o:before {
+ content: "\f11d";
+}
+
+.fa-flag-checkered:before {
+ content: "\f11e";
+}
+
+.fa-terminal:before {
+ content: "\f120";
+}
+
+.fa-code:before {
+ content: "\f121";
+}
+
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "\f122";
+}
+
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "\f123";
+}
+
+.fa-location-arrow:before {
+ content: "\f124";
+}
+
+.fa-crop:before {
+ content: "\f125";
+}
+
+.fa-code-fork:before {
+ content: "\f126";
+}
+
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "\f127";
+}
+
+.fa-question:before {
+ content: "\f128";
+}
+
+.fa-info:before {
+ content: "\f129";
+}
+
+.fa-exclamation:before {
+ content: "\f12a";
+}
+
+.fa-superscript:before {
+ content: "\f12b";
+}
+
+.fa-subscript:before {
+ content: "\f12c";
+}
+
+.fa-eraser:before {
+ content: "\f12d";
+}
+
+.fa-puzzle-piece:before {
+ content: "\f12e";
+}
+
+.fa-microphone:before {
+ content: "\f130";
+}
+
+.fa-microphone-slash:before {
+ content: "\f131";
+}
+
+.fa-shield:before {
+ content: "\f132";
+}
+
+.fa-calendar-o:before {
+ content: "\f133";
+}
+
+.fa-fire-extinguisher:before {
+ content: "\f134";
+}
+
+.fa-rocket:before {
+ content: "\f135";
+}
+
+.fa-maxcdn:before {
+ content: "\f136";
+}
+
+.fa-chevron-circle-left:before {
+ content: "\f137";
+}
+
+.fa-chevron-circle-right:before {
+ content: "\f138";
+}
+
+.fa-chevron-circle-up:before {
+ content: "\f139";
+}
+
+.fa-chevron-circle-down:before {
+ content: "\f13a";
+}
+
+.fa-html5:before {
+ content: "\f13b";
+}
+
+.fa-css3:before {
+ content: "\f13c";
+}
+
+.fa-anchor:before {
+ content: "\f13d";
+}
+
+.fa-unlock-alt:before {
+ content: "\f13e";
+}
+
+.fa-bullseye:before {
+ content: "\f140";
+}
+
+.fa-ellipsis-h:before {
+ content: "\f141";
+}
+
+.fa-ellipsis-v:before {
+ content: "\f142";
+}
+
+.fa-rss-square:before {
+ content: "\f143";
+}
+
+.fa-play-circle:before {
+ content: "\f144";
+}
+
+.fa-ticket:before {
+ content: "\f145";
+}
+
+.fa-minus-square:before {
+ content: "\f146";
+}
+
+.fa-minus-square-o:before {
+ content: "\f147";
+}
+
+.fa-level-up:before {
+ content: "\f148";
+}
+
+.fa-level-down:before {
+ content: "\f149";
+}
+
+.fa-check-square:before {
+ content: "\f14a";
+}
+
+.fa-pencil-square:before {
+ content: "\f14b";
+}
+
+.fa-external-link-square:before {
+ content: "\f14c";
+}
+
+.fa-share-square:before {
+ content: "\f14d";
+}
+
+.fa-compass:before {
+ content: "\f14e";
+}
+
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "\f150";
+}
+
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "\f151";
+}
+
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "\f152";
+}
+
+.fa-euro:before,
+.fa-eur:before {
+ content: "\f153";
+}
+
+.fa-gbp:before {
+ content: "\f154";
+}
+
+.fa-dollar:before,
+.fa-usd:before {
+ content: "\f155";
+}
+
+.fa-rupee:before,
+.fa-inr:before {
+ content: "\f156";
+}
+
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "\f157";
+}
+
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "\f158";
+}
+
+.fa-won:before,
+.fa-krw:before {
+ content: "\f159";
+}
+
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "\f15a";
+}
+
+.fa-file:before {
+ content: "\f15b";
+}
+
+.fa-file-text:before {
+ content: "\f15c";
+}
+
+.fa-sort-alpha-asc:before {
+ content: "\f15d";
+}
+
+.fa-sort-alpha-desc:before {
+ content: "\f15e";
+}
+
+.fa-sort-amount-asc:before {
+ content: "\f160";
+}
+
+.fa-sort-amount-desc:before {
+ content: "\f161";
+}
+
+.fa-sort-numeric-asc:before {
+ content: "\f162";
+}
+
+.fa-sort-numeric-desc:before {
+ content: "\f163";
+}
+
+.fa-thumbs-up:before {
+ content: "\f164";
+}
+
+.fa-thumbs-down:before {
+ content: "\f165";
+}
+
+.fa-youtube-square:before {
+ content: "\f166";
+}
+
+.fa-youtube:before {
+ content: "\f167";
+}
+
+.fa-xing:before {
+ content: "\f168";
+}
+
+.fa-xing-square:before {
+ content: "\f169";
+}
+
+.fa-youtube-play:before {
+ content: "\f16a";
+}
+
+.fa-dropbox:before {
+ content: "\f16b";
+}
+
+.fa-stack-overflow:before {
+ content: "\f16c";
+}
+
+.fa-instagram:before {
+ content: "\f16d";
+}
+
+.fa-flickr:before {
+ content: "\f16e";
+}
+
+.fa-adn:before {
+ content: "\f170";
+}
+
+.fa-bitbucket:before {
+ content: "\f171";
+}
+
+.fa-bitbucket-square:before {
+ content: "\f172";
+}
+
+.fa-tumblr:before {
+ content: "\f173";
+}
+
+.fa-tumblr-square:before {
+ content: "\f174";
+}
+
+.fa-long-arrow-down:before {
+ content: "\f175";
+}
+
+.fa-long-arrow-up:before {
+ content: "\f176";
+}
+
+.fa-long-arrow-left:before {
+ content: "\f177";
+}
+
+.fa-long-arrow-right:before {
+ content: "\f178";
+}
+
+.fa-apple:before {
+ content: "\f179";
+}
+
+.fa-windows:before {
+ content: "\f17a";
+}
+
+.fa-android:before {
+ content: "\f17b";
+}
+
+.fa-linux:before {
+ content: "\f17c";
+}
+
+.fa-dribbble:before {
+ content: "\f17d";
+}
+
+.fa-skype:before {
+ content: "\f17e";
+}
+
+.fa-foursquare:before {
+ content: "\f180";
+}
+
+.fa-trello:before {
+ content: "\f181";
+}
+
+.fa-female:before {
+ content: "\f182";
+}
+
+.fa-male:before {
+ content: "\f183";
+}
+
+.fa-gittip:before,
+.fa-gratipay:before {
+ content: "\f184";
+}
+
+.fa-sun-o:before {
+ content: "\f185";
+}
+
+.fa-moon-o:before {
+ content: "\f186";
+}
+
+.fa-archive:before {
+ content: "\f187";
+}
+
+.fa-bug:before {
+ content: "\f188";
+}
+
+.fa-vk:before {
+ content: "\f189";
+}
+
+.fa-weibo:before {
+ content: "\f18a";
+}
+
+.fa-renren:before {
+ content: "\f18b";
+}
+
+.fa-pagelines:before {
+ content: "\f18c";
+}
+
+.fa-stack-exchange:before {
+ content: "\f18d";
+}
+
+.fa-arrow-circle-o-right:before {
+ content: "\f18e";
+}
+
+.fa-arrow-circle-o-left:before {
+ content: "\f190";
+}
+
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "\f191";
+}
+
+.fa-dot-circle-o:before {
+ content: "\f192";
+}
+
+.fa-wheelchair:before {
+ content: "\f193";
+}
+
+.fa-vimeo-square:before {
+ content: "\f194";
+}
+
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "\f195";
+}
+
+.fa-plus-square-o:before {
+ content: "\f196";
+}
+
+.fa-space-shuttle:before {
+ content: "\f197";
+}
+
+.fa-slack:before {
+ content: "\f198";
+}
+
+.fa-envelope-square:before {
+ content: "\f199";
+}
+
+.fa-wordpress:before {
+ content: "\f19a";
+}
+
+.fa-openid:before {
+ content: "\f19b";
+}
+
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "\f19c";
+}
+
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "\f19d";
+}
+
+.fa-yahoo:before {
+ content: "\f19e";
+}
+
+.fa-google:before {
+ content: "\f1a0";
+}
+
+.fa-reddit:before {
+ content: "\f1a1";
+}
+
+.fa-reddit-square:before {
+ content: "\f1a2";
+}
+
+.fa-stumbleupon-circle:before {
+ content: "\f1a3";
+}
+
+.fa-stumbleupon:before {
+ content: "\f1a4";
+}
+
+.fa-delicious:before {
+ content: "\f1a5";
+}
+
+.fa-digg:before {
+ content: "\f1a6";
+}
+
+.fa-pied-piper-pp:before {
+ content: "\f1a7";
+}
+
+.fa-pied-piper-alt:before {
+ content: "\f1a8";
+}
+
+.fa-drupal:before {
+ content: "\f1a9";
+}
+
+.fa-joomla:before {
+ content: "\f1aa";
+}
+
+.fa-language:before {
+ content: "\f1ab";
+}
+
+.fa-fax:before {
+ content: "\f1ac";
+}
+
+.fa-building:before {
+ content: "\f1ad";
+}
+
+.fa-child:before {
+ content: "\f1ae";
+}
+
+.fa-paw:before {
+ content: "\f1b0";
+}
+
+.fa-spoon:before {
+ content: "\f1b1";
+}
+
+.fa-cube:before {
+ content: "\f1b2";
+}
+
+.fa-cubes:before {
+ content: "\f1b3";
+}
+
+.fa-behance:before {
+ content: "\f1b4";
+}
+
+.fa-behance-square:before {
+ content: "\f1b5";
+}
+
+.fa-steam:before {
+ content: "\f1b6";
+}
+
+.fa-steam-square:before {
+ content: "\f1b7";
+}
+
+.fa-recycle:before {
+ content: "\f1b8";
+}
+
+.fa-automobile:before,
+.fa-car:before {
+ content: "\f1b9";
+}
+
+.fa-cab:before,
+.fa-taxi:before {
+ content: "\f1ba";
+}
+
+.fa-tree:before {
+ content: "\f1bb";
+}
+
+.fa-spotify:before {
+ content: "\f1bc";
+}
+
+.fa-deviantart:before {
+ content: "\f1bd";
+}
+
+.fa-soundcloud:before {
+ content: "\f1be";
+}
+
+.fa-database:before {
+ content: "\f1c0";
+}
+
+.fa-file-pdf-o:before {
+ content: "\f1c1";
+}
+
+.fa-file-word-o:before {
+ content: "\f1c2";
+}
+
+.fa-file-excel-o:before {
+ content: "\f1c3";
+}
+
+.fa-file-powerpoint-o:before {
+ content: "\f1c4";
+}
+
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "\f1c5";
+}
+
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "\f1c6";
+}
+
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "\f1c7";
+}
+
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "\f1c8";
+}
+
+.fa-file-code-o:before {
+ content: "\f1c9";
+}
+
+.fa-vine:before {
+ content: "\f1ca";
+}
+
+.fa-codepen:before {
+ content: "\f1cb";
+}
+
+.fa-jsfiddle:before {
+ content: "\f1cc";
+}
+
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "\f1cd";
+}
+
+.fa-circle-o-notch:before {
+ content: "\f1ce";
+}
+
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+ content: "\f1d0";
+}
+
+.fa-ge:before,
+.fa-empire:before {
+ content: "\f1d1";
+}
+
+.fa-git-square:before {
+ content: "\f1d2";
+}
+
+.fa-git:before {
+ content: "\f1d3";
+}
+
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+ content: "\f1d4";
+}
+
+.fa-tencent-weibo:before {
+ content: "\f1d5";
+}
+
+.fa-qq:before {
+ content: "\f1d6";
+}
+
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "\f1d7";
+}
+
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "\f1d8";
+}
+
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "\f1d9";
+}
+
+.fa-history:before {
+ content: "\f1da";
+}
+
+.fa-circle-thin:before {
+ content: "\f1db";
+}
+
+.fa-header:before {
+ content: "\f1dc";
+}
+
+.fa-paragraph:before {
+ content: "\f1dd";
+}
+
+.fa-sliders:before {
+ content: "\f1de";
+}
+
+.fa-share-alt:before {
+ content: "\f1e0";
+}
+
+.fa-share-alt-square:before {
+ content: "\f1e1";
+}
+
+.fa-bomb:before {
+ content: "\f1e2";
+}
+
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "\f1e3";
+}
+
+.fa-tty:before {
+ content: "\f1e4";
+}
+
+.fa-binoculars:before {
+ content: "\f1e5";
+}
+
+.fa-plug:before {
+ content: "\f1e6";
+}
+
+.fa-slideshare:before {
+ content: "\f1e7";
+}
+
+.fa-twitch:before {
+ content: "\f1e8";
+}
+
+.fa-yelp:before {
+ content: "\f1e9";
+}
+
+.fa-newspaper-o:before {
+ content: "\f1ea";
+}
+
+.fa-wifi:before {
+ content: "\f1eb";
+}
+
+.fa-calculator:before {
+ content: "\f1ec";
+}
+
+.fa-paypal:before {
+ content: "\f1ed";
+}
+
+.fa-google-wallet:before {
+ content: "\f1ee";
+}
+
+.fa-cc-visa:before {
+ content: "\f1f0";
+}
+
+.fa-cc-mastercard:before {
+ content: "\f1f1";
+}
+
+.fa-cc-discover:before {
+ content: "\f1f2";
+}
+
+.fa-cc-amex:before {
+ content: "\f1f3";
+}
+
+.fa-cc-paypal:before {
+ content: "\f1f4";
+}
+
+.fa-cc-stripe:before {
+ content: "\f1f5";
+}
+
+.fa-bell-slash:before {
+ content: "\f1f6";
+}
+
+.fa-bell-slash-o:before {
+ content: "\f1f7";
+}
+
+.fa-trash:before {
+ content: "\f1f8";
+}
+
+.fa-copyright:before {
+ content: "\f1f9";
+}
+
+.fa-at:before {
+ content: "\f1fa";
+}
+
+.fa-eyedropper:before {
+ content: "\f1fb";
+}
+
+.fa-paint-brush:before {
+ content: "\f1fc";
+}
+
+.fa-birthday-cake:before {
+ content: "\f1fd";
+}
+
+.fa-area-chart:before {
+ content: "\f1fe";
+}
+
+.fa-pie-chart:before {
+ content: "\f200";
+}
+
+.fa-line-chart:before {
+ content: "\f201";
+}
+
+.fa-lastfm:before {
+ content: "\f202";
+}
+
+.fa-lastfm-square:before {
+ content: "\f203";
+}
+
+.fa-toggle-off:before {
+ content: "\f204";
+}
+
+.fa-toggle-on:before {
+ content: "\f205";
+}
+
+.fa-bicycle:before {
+ content: "\f206";
+}
+
+.fa-bus:before {
+ content: "\f207";
+}
+
+.fa-ioxhost:before {
+ content: "\f208";
+}
+
+.fa-angellist:before {
+ content: "\f209";
+}
+
+.fa-cc:before {
+ content: "\f20a";
+}
+
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "\f20b";
+}
+
+.fa-meanpath:before {
+ content: "\f20c";
+}
+
+.fa-buysellads:before {
+ content: "\f20d";
+}
+
+.fa-connectdevelop:before {
+ content: "\f20e";
+}
+
+.fa-dashcube:before {
+ content: "\f210";
+}
+
+.fa-forumbee:before {
+ content: "\f211";
+}
+
+.fa-leanpub:before {
+ content: "\f212";
+}
+
+.fa-sellsy:before {
+ content: "\f213";
+}
+
+.fa-shirtsinbulk:before {
+ content: "\f214";
+}
+
+.fa-simplybuilt:before {
+ content: "\f215";
+}
+
+.fa-skyatlas:before {
+ content: "\f216";
+}
+
+.fa-cart-plus:before {
+ content: "\f217";
+}
+
+.fa-cart-arrow-down:before {
+ content: "\f218";
+}
+
+.fa-diamond:before {
+ content: "\f219";
+}
+
+.fa-ship:before {
+ content: "\f21a";
+}
+
+.fa-user-secret:before {
+ content: "\f21b";
+}
+
+.fa-motorcycle:before {
+ content: "\f21c";
+}
+
+.fa-street-view:before {
+ content: "\f21d";
+}
+
+.fa-heartbeat:before {
+ content: "\f21e";
+}
+
+.fa-venus:before {
+ content: "\f221";
+}
+
+.fa-mars:before {
+ content: "\f222";
+}
+
+.fa-mercury:before {
+ content: "\f223";
+}
+
+.fa-intersex:before,
+.fa-transgender:before {
+ content: "\f224";
+}
+
+.fa-transgender-alt:before {
+ content: "\f225";
+}
+
+.fa-venus-double:before {
+ content: "\f226";
+}
+
+.fa-mars-double:before {
+ content: "\f227";
+}
+
+.fa-venus-mars:before {
+ content: "\f228";
+}
+
+.fa-mars-stroke:before {
+ content: "\f229";
+}
+
+.fa-mars-stroke-v:before {
+ content: "\f22a";
+}
+
+.fa-mars-stroke-h:before {
+ content: "\f22b";
+}
+
+.fa-neuter:before {
+ content: "\f22c";
+}
+
+.fa-genderless:before {
+ content: "\f22d";
+}
+
+.fa-facebook-official:before {
+ content: "\f230";
+}
+
+.fa-pinterest-p:before {
+ content: "\f231";
+}
+
+.fa-whatsapp:before {
+ content: "\f232";
+}
+
+.fa-server:before {
+ content: "\f233";
+}
+
+.fa-user-plus:before {
+ content: "\f234";
+}
+
+.fa-user-times:before {
+ content: "\f235";
+}
+
+.fa-hotel:before,
+.fa-bed:before {
+ content: "\f236";
+}
+
+.fa-viacoin:before {
+ content: "\f237";
+}
+
+.fa-train:before {
+ content: "\f238";
+}
+
+.fa-subway:before {
+ content: "\f239";
+}
+
+.fa-medium:before {
+ content: "\f23a";
+}
+
+.fa-yc:before,
+.fa-y-combinator:before {
+ content: "\f23b";
+}
+
+.fa-optin-monster:before {
+ content: "\f23c";
+}
+
+.fa-opencart:before {
+ content: "\f23d";
+}
+
+.fa-expeditedssl:before {
+ content: "\f23e";
+}
+
+.fa-battery-4:before,
+.fa-battery:before,
+.fa-battery-full:before {
+ content: "\f240";
+}
+
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+ content: "\f241";
+}
+
+.fa-battery-2:before,
+.fa-battery-half:before {
+ content: "\f242";
+}
+
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+ content: "\f243";
+}
+
+.fa-battery-0:before,
+.fa-battery-empty:before {
+ content: "\f244";
+}
+
+.fa-mouse-pointer:before {
+ content: "\f245";
+}
+
+.fa-i-cursor:before {
+ content: "\f246";
+}
+
+.fa-object-group:before {
+ content: "\f247";
+}
+
+.fa-object-ungroup:before {
+ content: "\f248";
+}
+
+.fa-sticky-note:before {
+ content: "\f249";
+}
+
+.fa-sticky-note-o:before {
+ content: "\f24a";
+}
+
+.fa-cc-jcb:before {
+ content: "\f24b";
+}
+
+.fa-cc-diners-club:before {
+ content: "\f24c";
+}
+
+.fa-clone:before {
+ content: "\f24d";
+}
+
+.fa-balance-scale:before {
+ content: "\f24e";
+}
+
+.fa-hourglass-o:before {
+ content: "\f250";
+}
+
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+ content: "\f251";
+}
+
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+ content: "\f252";
+}
+
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+ content: "\f253";
+}
+
+.fa-hourglass:before {
+ content: "\f254";
+}
+
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+ content: "\f255";
+}
+
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+ content: "\f256";
+}
+
+.fa-hand-scissors-o:before {
+ content: "\f257";
+}
+
+.fa-hand-lizard-o:before {
+ content: "\f258";
+}
+
+.fa-hand-spock-o:before {
+ content: "\f259";
+}
+
+.fa-hand-pointer-o:before {
+ content: "\f25a";
+}
+
+.fa-hand-peace-o:before {
+ content: "\f25b";
+}
+
+.fa-trademark:before {
+ content: "\f25c";
+}
+
+.fa-registered:before {
+ content: "\f25d";
+}
+
+.fa-creative-commons:before {
+ content: "\f25e";
+}
+
+.fa-gg:before {
+ content: "\f260";
+}
+
+.fa-gg-circle:before {
+ content: "\f261";
+}
+
+.fa-tripadvisor:before {
+ content: "\f262";
+}
+
+.fa-odnoklassniki:before {
+ content: "\f263";
+}
+
+.fa-odnoklassniki-square:before {
+ content: "\f264";
+}
+
+.fa-get-pocket:before {
+ content: "\f265";
+}
+
+.fa-wikipedia-w:before {
+ content: "\f266";
+}
+
+.fa-safari:before {
+ content: "\f267";
+}
+
+.fa-chrome:before {
+ content: "\f268";
+}
+
+.fa-firefox:before {
+ content: "\f269";
+}
+
+.fa-opera:before {
+ content: "\f26a";
+}
+
+.fa-internet-explorer:before {
+ content: "\f26b";
+}
+
+.fa-tv:before,
+.fa-television:before {
+ content: "\f26c";
+}
+
+.fa-contao:before {
+ content: "\f26d";
+}
+
+.fa-500px:before {
+ content: "\f26e";
+}
+
+.fa-amazon:before {
+ content: "\f270";
+}
+
+.fa-calendar-plus-o:before {
+ content: "\f271";
+}
+
+.fa-calendar-minus-o:before {
+ content: "\f272";
+}
+
+.fa-calendar-times-o:before {
+ content: "\f273";
+}
+
+.fa-calendar-check-o:before {
+ content: "\f274";
+}
+
+.fa-industry:before {
+ content: "\f275";
+}
+
+.fa-map-pin:before {
+ content: "\f276";
+}
+
+.fa-map-signs:before {
+ content: "\f277";
+}
+
+.fa-map-o:before {
+ content: "\f278";
+}
+
+.fa-map:before {
+ content: "\f279";
+}
+
+.fa-commenting:before {
+ content: "\f27a";
+}
+
+.fa-commenting-o:before {
+ content: "\f27b";
+}
+
+.fa-houzz:before {
+ content: "\f27c";
+}
+
+.fa-vimeo:before {
+ content: "\f27d";
+}
+
+.fa-black-tie:before {
+ content: "\f27e";
+}
+
+.fa-fonticons:before {
+ content: "\f280";
+}
+
+.fa-reddit-alien:before {
+ content: "\f281";
+}
+
+.fa-edge:before {
+ content: "\f282";
+}
+
+.fa-credit-card-alt:before {
+ content: "\f283";
+}
+
+.fa-codiepie:before {
+ content: "\f284";
+}
+
+.fa-modx:before {
+ content: "\f285";
+}
+
+.fa-fort-awesome:before {
+ content: "\f286";
+}
+
+.fa-usb:before {
+ content: "\f287";
+}
+
+.fa-product-hunt:before {
+ content: "\f288";
+}
+
+.fa-mixcloud:before {
+ content: "\f289";
+}
+
+.fa-scribd:before {
+ content: "\f28a";
+}
+
+.fa-pause-circle:before {
+ content: "\f28b";
+}
+
+.fa-pause-circle-o:before {
+ content: "\f28c";
+}
+
+.fa-stop-circle:before {
+ content: "\f28d";
+}
+
+.fa-stop-circle-o:before {
+ content: "\f28e";
+}
+
+.fa-shopping-bag:before {
+ content: "\f290";
+}
+
+.fa-shopping-basket:before {
+ content: "\f291";
+}
+
+.fa-hashtag:before {
+ content: "\f292";
+}
+
+.fa-bluetooth:before {
+ content: "\f293";
+}
+
+.fa-bluetooth-b:before {
+ content: "\f294";
+}
+
+.fa-percent:before {
+ content: "\f295";
+}
+
+.fa-gitlab:before {
+ content: "\f296";
+}
+
+.fa-wpbeginner:before {
+ content: "\f297";
+}
+
+.fa-wpforms:before {
+ content: "\f298";
+}
+
+.fa-envira:before {
+ content: "\f299";
+}
+
+.fa-universal-access:before {
+ content: "\f29a";
+}
+
+.fa-wheelchair-alt:before {
+ content: "\f29b";
+}
+
+.fa-question-circle-o:before {
+ content: "\f29c";
+}
+
+.fa-blind:before {
+ content: "\f29d";
+}
+
+.fa-audio-description:before {
+ content: "\f29e";
+}
+
+.fa-volume-control-phone:before {
+ content: "\f2a0";
+}
+
+.fa-braille:before {
+ content: "\f2a1";
+}
+
+.fa-assistive-listening-systems:before {
+ content: "\f2a2";
+}
+
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+ content: "\f2a3";
+}
+
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+ content: "\f2a4";
+}
+
+.fa-glide:before {
+ content: "\f2a5";
+}
+
+.fa-glide-g:before {
+ content: "\f2a6";
+}
+
+.fa-signing:before,
+.fa-sign-language:before {
+ content: "\f2a7";
+}
+
+.fa-low-vision:before {
+ content: "\f2a8";
+}
+
+.fa-viadeo:before {
+ content: "\f2a9";
+}
+
+.fa-viadeo-square:before {
+ content: "\f2aa";
+}
+
+.fa-snapchat:before {
+ content: "\f2ab";
+}
+
+.fa-snapchat-ghost:before {
+ content: "\f2ac";
+}
+
+.fa-snapchat-square:before {
+ content: "\f2ad";
+}
+
+.fa-pied-piper:before {
+ content: "\f2ae";
+}
+
+.fa-first-order:before {
+ content: "\f2b0";
+}
+
+.fa-yoast:before {
+ content: "\f2b1";
+}
+
+.fa-themeisle:before {
+ content: "\f2b2";
+}
+
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+ content: "\f2b3";
+}
+
+.fa-fa:before,
+.fa-font-awesome:before {
+ content: "\f2b4";
+}
+
+.fa-handshake-o:before {
+ content: "\f2b5";
+}
+
+.fa-envelope-open:before {
+ content: "\f2b6";
+}
+
+.fa-envelope-open-o:before {
+ content: "\f2b7";
+}
+
+.fa-linode:before {
+ content: "\f2b8";
+}
+
+.fa-address-book:before {
+ content: "\f2b9";
+}
+
+.fa-address-book-o:before {
+ content: "\f2ba";
+}
+
+.fa-vcard:before,
+.fa-address-card:before {
+ content: "\f2bb";
+}
+
+.fa-vcard-o:before,
+.fa-address-card-o:before {
+ content: "\f2bc";
+}
+
+.fa-user-circle:before {
+ content: "\f2bd";
+}
+
+.fa-user-circle-o:before {
+ content: "\f2be";
+}
+
+.fa-user-o:before {
+ content: "\f2c0";
+}
+
+.fa-id-badge:before {
+ content: "\f2c1";
+}
+
+.fa-drivers-license:before,
+.fa-id-card:before {
+ content: "\f2c2";
+}
+
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+ content: "\f2c3";
+}
+
+.fa-quora:before {
+ content: "\f2c4";
+}
+
+.fa-free-code-camp:before {
+ content: "\f2c5";
+}
+
+.fa-telegram:before {
+ content: "\f2c6";
+}
+
+.fa-thermometer-4:before,
+.fa-thermometer:before,
+.fa-thermometer-full:before {
+ content: "\f2c7";
+}
+
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+ content: "\f2c8";
+}
+
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+ content: "\f2c9";
+}
+
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+ content: "\f2ca";
+}
+
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+ content: "\f2cb";
+}
+
+.fa-shower:before {
+ content: "\f2cc";
+}
+
+.fa-bathtub:before,
+.fa-s15:before,
+.fa-bath:before {
+ content: "\f2cd";
+}
+
+.fa-podcast:before {
+ content: "\f2ce";
+}
+
+.fa-window-maximize:before {
+ content: "\f2d0";
+}
+
+.fa-window-minimize:before {
+ content: "\f2d1";
+}
+
+.fa-window-restore:before {
+ content: "\f2d2";
+}
+
+.fa-times-rectangle:before,
+.fa-window-close:before {
+ content: "\f2d3";
+}
+
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+ content: "\f2d4";
+}
+
+.fa-bandcamp:before {
+ content: "\f2d5";
+}
+
+.fa-grav:before {
+ content: "\f2d6";
+}
+
+.fa-etsy:before {
+ content: "\f2d7";
+}
+
+.fa-imdb:before {
+ content: "\f2d8";
+}
+
+.fa-ravelry:before {
+ content: "\f2d9";
+}
+
+.fa-eercast:before {
+ content: "\f2da";
+}
+
+.fa-microchip:before {
+ content: "\f2db";
+}
+
+.fa-snowflake-o:before {
+ content: "\f2dc";
+}
+
+.fa-superpowers:before {
+ content: "\f2dd";
+}
+
+.fa-wpexplorer:before {
+ content: "\f2de";
+}
+
+.fa-meetup:before {
+ content: "\f2e0";
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
diff --git a/assets/css/admin-rtl.min.css b/assets/css/admin-rtl.min.css
new file mode 100644
index 0000000000..74cc308a44
--- /dev/null
+++ b/assets/css/admin-rtl.min.css
@@ -0,0 +1,4 @@
+#poststuff .llms-metabox:before,#poststuff .llms-metabox:after,.llms-form-fields:before,.llms-metabox .llms-access-plans:before,.llms-collapsible .llms-collapsible-body:before,.llms-collapsible .llms-collapsible-header:before,.llms-collapsible:before,.llms-form-fields:after,.llms-metabox .llms-access-plans:after,.llms-collapsible .llms-collapsible-body:after,.llms-collapsible .llms-collapsible-header:after,.llms-collapsible:after{content:" ";display:table}#poststuff .llms-metabox:after,.llms-form-fields:after,.llms-metabox .llms-access-plans:after,.llms-collapsible .llms-collapsible-body:after,.llms-collapsible .llms-collapsible-header:after,.llms-collapsible:after{clear:both}.llms-button-action,.llms-button-danger,.llms-button-primary,.llms-button-secondary{border:none;border-radius:8px;color:#fefefe;cursor:pointer;display:inline-block;font-size:18px;font-weight:700;text-decoration:none;text-shadow:none;line-height:1;margin:0;max-width:100%;padding:12px 24px;position:relative;-webkit-transition:all .5s ease;transition:all .5s ease}.llms-button-action:disabled,.llms-button-danger:disabled,.llms-button-primary:disabled,.llms-button-secondary:disabled{opacity:.5}.llms-button-action:hover,.llms-button-action:active,.llms-button-danger:hover,.llms-button-danger:active,.llms-button-primary:hover,.llms-button-primary:active,.llms-button-secondary:hover,.llms-button-secondary:active{color:#fefefe}.llms-button-action:focus,.llms-button-danger:focus,.llms-button-primary:focus,.llms-button-secondary:focus{color:#fefefe}.llms-button-action.auto,.llms-button-danger.auto,.llms-button-primary.auto,.llms-button-secondary.auto{width:auto}.llms-button-action.full,.llms-button-danger.full,.llms-button-primary.full,.llms-button-secondary.full{display:block;text-align:center;width:100%}.llms-button-action.square,.llms-button-danger.square,.llms-button-primary.square,.llms-button-secondary.square{padding:12px}.llms-button-action.small,.llms-button-danger.small,.llms-button-primary.small,.llms-button-secondary.small{font-size:13px;padding:8px 14px}.llms-button-action.small.square,.llms-button-danger.small.square,.llms-button-primary.small.square,.llms-button-secondary.small.square{padding:8px}.llms-button-action.large,.llms-button-danger.large,.llms-button-primary.large,.llms-button-secondary.large{font-size:18px;line-height:1.2;padding:16px 32px}.llms-button-action.large.square,.llms-button-danger.large.square,.llms-button-primary.large.square,.llms-button-secondary.large.square{padding:16px}.llms-button-action.large .fa,.llms-button-danger.large .fa,.llms-button-primary.large .fa,.llms-button-secondary.large .fa{right:-7px;position:relative}a.llms-button-action,a.llms-button-danger,a.llms-button-primary{color:#fefefe}.llms-button-primary{background:#466dd8}.llms-button-primary:hover,.llms-button-primary.clicked{background:#2b55cb}.llms-button-primary:focus,.llms-button-primary:active{background:#6888df}.llms-button-secondary{background:#e1e1e1;color:#444}.llms-button-secondary:hover{color:#414141;background:#cdcdcd}.llms-button-secondary:focus,.llms-button-secondary:active{color:#414141;background:#ebebeb}a.llms-button-secondary{color:#444}.llms-button-action{background:#c05621}.llms-button-action:hover,.llms-button-action.clicked{background:#f67d28}.llms-button-action:focus,.llms-button-action:active{background:#faad76}.llms-button-danger{background:#bb231c}.llms-button-danger:hover{background:#981c17}.llms-button-danger:focus,.llms-button-danger:active{background:#cd261f}.llms-button-outline{background:rgba(0,0,0,0);border:3px solid #1d2327;border-radius:8px;color:#1d2327;cursor:pointer;font-size:16px;font-weight:700;text-decoration:none;text-shadow:none;line-height:1;margin:0;max-width:100%;padding:12px 24px;position:relative;-webkit-transition:all .5s ease;transition:all .5s ease}.llms-button-outline:disabled{opacity:.5}.llms-button-outline:hover,.llms-button-outline:active{color:#1d2327}.llms-button-outline:focus{color:#1d2327}.llms-button-outline.auto{width:auto}.llms-button-outline.full{display:block;text-align:center;width:100%}.llms-button-outline.square{padding:12px}.llms-course-continue-button{display:inline-block}.lifterlms [data-tip],.lifterlms [data-title-default],.lifterlms [data-title-active],.llms-metabox [data-tip],.llms-metabox [data-title-default],.llms-metabox [data-title-active],.llms-mb-container [data-tip],.llms-mb-container [data-title-default],.llms-mb-container [data-title-active],.llms-quiz-wrapper [data-tip],.llms-quiz-wrapper [data-title-default],.llms-quiz-wrapper [data-title-active]{position:relative}.lifterlms [data-tip].tip--top-right:before,.lifterlms [data-title-default].tip--top-right:before,.lifterlms [data-title-active].tip--top-right:before,.llms-metabox [data-tip].tip--top-right:before,.llms-metabox [data-title-default].tip--top-right:before,.llms-metabox [data-title-active].tip--top-right:before,.llms-mb-container [data-tip].tip--top-right:before,.llms-mb-container [data-title-default].tip--top-right:before,.llms-mb-container [data-title-active].tip--top-right:before,.llms-quiz-wrapper [data-tip].tip--top-right:before,.llms-quiz-wrapper [data-title-default].tip--top-right:before,.llms-quiz-wrapper [data-title-active].tip--top-right:before{bottom:100%;right:-10px}.lifterlms [data-tip].tip--top-right:hover:before,.lifterlms [data-title-default].tip--top-right:hover:before,.lifterlms [data-title-active].tip--top-right:hover:before,.llms-metabox [data-tip].tip--top-right:hover:before,.llms-metabox [data-title-default].tip--top-right:hover:before,.llms-metabox [data-title-active].tip--top-right:hover:before,.llms-mb-container [data-tip].tip--top-right:hover:before,.llms-mb-container [data-title-default].tip--top-right:hover:before,.llms-mb-container [data-title-active].tip--top-right:hover:before,.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before{bottom:calc(100% + 6px)}.lifterlms [data-tip].tip--top-right:after,.lifterlms [data-title-default].tip--top-right:after,.lifterlms [data-title-active].tip--top-right:after,.llms-metabox [data-tip].tip--top-right:after,.llms-metabox [data-title-default].tip--top-right:after,.llms-metabox [data-title-active].tip--top-right:after,.llms-mb-container [data-tip].tip--top-right:after,.llms-mb-container [data-title-default].tip--top-right:after,.llms-mb-container [data-title-active].tip--top-right:after,.llms-quiz-wrapper [data-tip].tip--top-right:after,.llms-quiz-wrapper [data-title-default].tip--top-right:after,.llms-quiz-wrapper [data-title-active].tip--top-right:after{border-top-color:#444;right:6px;top:0}.lifterlms [data-tip].tip--top-right:hover:after,.lifterlms [data-title-default].tip--top-right:hover:after,.lifterlms [data-title-active].tip--top-right:hover:after,.llms-metabox [data-tip].tip--top-right:hover:after,.llms-metabox [data-title-default].tip--top-right:hover:after,.llms-metabox [data-title-active].tip--top-right:hover:after,.llms-mb-container [data-tip].tip--top-right:hover:after,.llms-mb-container [data-title-default].tip--top-right:hover:after,.llms-mb-container [data-title-active].tip--top-right:hover:after,.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after{top:-6px}.lifterlms [data-tip].tip--top-left:before,.lifterlms [data-title-default].tip--top-left:before,.lifterlms [data-title-active].tip--top-left:before,.llms-metabox [data-tip].tip--top-left:before,.llms-metabox [data-title-default].tip--top-left:before,.llms-metabox [data-title-active].tip--top-left:before,.llms-mb-container [data-tip].tip--top-left:before,.llms-mb-container [data-title-default].tip--top-left:before,.llms-mb-container [data-title-active].tip--top-left:before,.llms-quiz-wrapper [data-tip].tip--top-left:before,.llms-quiz-wrapper [data-title-default].tip--top-left:before,.llms-quiz-wrapper [data-title-active].tip--top-left:before{bottom:100%;left:-10px}.lifterlms [data-tip].tip--top-left:hover:before,.lifterlms [data-title-default].tip--top-left:hover:before,.lifterlms [data-title-active].tip--top-left:hover:before,.llms-metabox [data-tip].tip--top-left:hover:before,.llms-metabox [data-title-default].tip--top-left:hover:before,.llms-metabox [data-title-active].tip--top-left:hover:before,.llms-mb-container [data-tip].tip--top-left:hover:before,.llms-mb-container [data-title-default].tip--top-left:hover:before,.llms-mb-container [data-title-active].tip--top-left:hover:before,.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before{bottom:calc(100% + 6px)}.lifterlms [data-tip].tip--top-left:after,.lifterlms [data-title-default].tip--top-left:after,.lifterlms [data-title-active].tip--top-left:after,.llms-metabox [data-tip].tip--top-left:after,.llms-metabox [data-title-default].tip--top-left:after,.llms-metabox [data-title-active].tip--top-left:after,.llms-mb-container [data-tip].tip--top-left:after,.llms-mb-container [data-title-default].tip--top-left:after,.llms-mb-container [data-title-active].tip--top-left:after,.llms-quiz-wrapper [data-tip].tip--top-left:after,.llms-quiz-wrapper [data-title-default].tip--top-left:after,.llms-quiz-wrapper [data-title-active].tip--top-left:after{border-top-color:#444;left:6px;top:0}.lifterlms [data-tip].tip--top-left:hover:after,.lifterlms [data-title-default].tip--top-left:hover:after,.lifterlms [data-title-active].tip--top-left:hover:after,.llms-metabox [data-tip].tip--top-left:hover:after,.llms-metabox [data-title-default].tip--top-left:hover:after,.llms-metabox [data-title-active].tip--top-left:hover:after,.llms-mb-container [data-tip].tip--top-left:hover:after,.llms-mb-container [data-title-default].tip--top-left:hover:after,.llms-mb-container [data-title-active].tip--top-left:hover:after,.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after{top:-6px}.lifterlms [data-tip].tip--bottom-left:before,.lifterlms [data-title-default].tip--bottom-left:before,.lifterlms [data-title-active].tip--bottom-left:before,.llms-metabox [data-tip].tip--bottom-left:before,.llms-metabox [data-title-default].tip--bottom-left:before,.llms-metabox [data-title-active].tip--bottom-left:before,.llms-mb-container [data-tip].tip--bottom-left:before,.llms-mb-container [data-title-default].tip--bottom-left:before,.llms-mb-container [data-title-active].tip--bottom-left:before,.llms-quiz-wrapper [data-tip].tip--bottom-left:before,.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,.llms-quiz-wrapper [data-title-active].tip--bottom-left:before{top:100%;left:-10px}.lifterlms [data-tip].tip--bottom-left:hover:before,.lifterlms [data-title-default].tip--bottom-left:hover:before,.lifterlms [data-title-active].tip--bottom-left:hover:before,.llms-metabox [data-tip].tip--bottom-left:hover:before,.llms-metabox [data-title-default].tip--bottom-left:hover:before,.llms-metabox [data-title-active].tip--bottom-left:hover:before,.llms-mb-container [data-tip].tip--bottom-left:hover:before,.llms-mb-container [data-title-default].tip--bottom-left:hover:before,.llms-mb-container [data-title-active].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before{top:calc(100% + 6px)}.lifterlms [data-tip].tip--bottom-left:after,.lifterlms [data-title-default].tip--bottom-left:after,.lifterlms [data-title-active].tip--bottom-left:after,.llms-metabox [data-tip].tip--bottom-left:after,.llms-metabox [data-title-default].tip--bottom-left:after,.llms-metabox [data-title-active].tip--bottom-left:after,.llms-mb-container [data-tip].tip--bottom-left:after,.llms-mb-container [data-title-default].tip--bottom-left:after,.llms-mb-container [data-title-active].tip--bottom-left:after,.llms-quiz-wrapper [data-tip].tip--bottom-left:after,.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,.llms-quiz-wrapper [data-title-active].tip--bottom-left:after{border-bottom-color:#444;left:6px;bottom:0}.lifterlms [data-tip].tip--bottom-left:hover:after,.lifterlms [data-title-default].tip--bottom-left:hover:after,.lifterlms [data-title-active].tip--bottom-left:hover:after,.llms-metabox [data-tip].tip--bottom-left:hover:after,.llms-metabox [data-title-default].tip--bottom-left:hover:after,.llms-metabox [data-title-active].tip--bottom-left:hover:after,.llms-mb-container [data-tip].tip--bottom-left:hover:after,.llms-mb-container [data-title-default].tip--bottom-left:hover:after,.llms-mb-container [data-title-active].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after{bottom:-6px}.lifterlms [data-tip].tip--bottom-right:before,.lifterlms [data-title-default].tip--bottom-right:before,.lifterlms [data-title-active].tip--bottom-right:before,.llms-metabox [data-tip].tip--bottom-right:before,.llms-metabox [data-title-default].tip--bottom-right:before,.llms-metabox [data-title-active].tip--bottom-right:before,.llms-mb-container [data-tip].tip--bottom-right:before,.llms-mb-container [data-title-default].tip--bottom-right:before,.llms-mb-container [data-title-active].tip--bottom-right:before,.llms-quiz-wrapper [data-tip].tip--bottom-right:before,.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,.llms-quiz-wrapper [data-title-active].tip--bottom-right:before{top:100%;right:-10px}.lifterlms [data-tip].tip--bottom-right:hover:before,.lifterlms [data-title-default].tip--bottom-right:hover:before,.lifterlms [data-title-active].tip--bottom-right:hover:before,.llms-metabox [data-tip].tip--bottom-right:hover:before,.llms-metabox [data-title-default].tip--bottom-right:hover:before,.llms-metabox [data-title-active].tip--bottom-right:hover:before,.llms-mb-container [data-tip].tip--bottom-right:hover:before,.llms-mb-container [data-title-default].tip--bottom-right:hover:before,.llms-mb-container [data-title-active].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before{top:calc(100% + 6px)}.lifterlms [data-tip].tip--bottom-right:after,.lifterlms [data-title-default].tip--bottom-right:after,.lifterlms [data-title-active].tip--bottom-right:after,.llms-metabox [data-tip].tip--bottom-right:after,.llms-metabox [data-title-default].tip--bottom-right:after,.llms-metabox [data-title-active].tip--bottom-right:after,.llms-mb-container [data-tip].tip--bottom-right:after,.llms-mb-container [data-title-default].tip--bottom-right:after,.llms-mb-container [data-title-active].tip--bottom-right:after,.llms-quiz-wrapper [data-tip].tip--bottom-right:after,.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,.llms-quiz-wrapper [data-title-active].tip--bottom-right:after{border-bottom-color:#444;right:6px;bottom:0}.lifterlms [data-tip].tip--bottom-right:hover:after,.lifterlms [data-title-default].tip--bottom-right:hover:after,.lifterlms [data-title-active].tip--bottom-right:hover:after,.llms-metabox [data-tip].tip--bottom-right:hover:after,.llms-metabox [data-title-default].tip--bottom-right:hover:after,.llms-metabox [data-title-active].tip--bottom-right:hover:after,.llms-mb-container [data-tip].tip--bottom-right:hover:after,.llms-mb-container [data-title-default].tip--bottom-right:hover:after,.llms-mb-container [data-title-active].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after{bottom:-6px}.lifterlms [data-tip]:before,.lifterlms [data-title-default]:before,.lifterlms [data-title-active]:before,.llms-metabox [data-tip]:before,.llms-metabox [data-title-default]:before,.llms-metabox [data-title-active]:before,.llms-mb-container [data-tip]:before,.llms-mb-container [data-title-default]:before,.llms-mb-container [data-title-active]:before,.llms-quiz-wrapper [data-tip]:before,.llms-quiz-wrapper [data-title-default]:before,.llms-quiz-wrapper [data-title-active]:before{background:#444;border-radius:4px;color:#fff;font-size:13px;line-height:1.2;padding:8px;max-width:300px;width:-webkit-max-content;width:-moz-max-content;width:max-content}.lifterlms [data-tip]:after,.lifterlms [data-title-default]:after,.lifterlms [data-title-active]:after,.llms-metabox [data-tip]:after,.llms-metabox [data-title-default]:after,.llms-metabox [data-title-active]:after,.llms-mb-container [data-tip]:after,.llms-mb-container [data-title-default]:after,.llms-mb-container [data-title-active]:after,.llms-quiz-wrapper [data-tip]:after,.llms-quiz-wrapper [data-title-default]:after,.llms-quiz-wrapper [data-title-active]:after{content:"";border:6px solid rgba(0,0,0,0);height:0;width:0}.lifterlms [data-tip]:before,.lifterlms [data-tip]:after,.lifterlms [data-title-default]:before,.lifterlms [data-title-default]:after,.lifterlms [data-title-active]:before,.lifterlms [data-title-active]:after,.llms-metabox [data-tip]:before,.llms-metabox [data-tip]:after,.llms-metabox [data-title-default]:before,.llms-metabox [data-title-default]:after,.llms-metabox [data-title-active]:before,.llms-metabox [data-title-active]:after,.llms-mb-container [data-tip]:before,.llms-mb-container [data-tip]:after,.llms-mb-container [data-title-default]:before,.llms-mb-container [data-title-default]:after,.llms-mb-container [data-title-active]:before,.llms-mb-container [data-title-active]:after,.llms-quiz-wrapper [data-tip]:before,.llms-quiz-wrapper [data-tip]:after,.llms-quiz-wrapper [data-title-default]:before,.llms-quiz-wrapper [data-title-default]:after,.llms-quiz-wrapper [data-title-active]:before,.llms-quiz-wrapper [data-title-active]:after{opacity:0;-webkit-transition:all .2s .1s ease;transition:all .2s .1s ease;position:absolute;pointer-events:none;visibility:hidden}.lifterlms [data-tip]:hover:before,.lifterlms [data-tip]:hover:after,.lifterlms [data-title-default]:hover:before,.lifterlms [data-title-default]:hover:after,.lifterlms [data-title-active]:hover:before,.lifterlms [data-title-active]:hover:after,.llms-metabox [data-tip]:hover:before,.llms-metabox [data-tip]:hover:after,.llms-metabox [data-title-default]:hover:before,.llms-metabox [data-title-default]:hover:after,.llms-metabox [data-title-active]:hover:before,.llms-metabox [data-title-active]:hover:after,.llms-mb-container [data-tip]:hover:before,.llms-mb-container [data-tip]:hover:after,.llms-mb-container [data-title-default]:hover:before,.llms-mb-container [data-title-default]:hover:after,.llms-mb-container [data-title-active]:hover:before,.llms-mb-container [data-title-active]:hover:after,.llms-quiz-wrapper [data-tip]:hover:before,.llms-quiz-wrapper [data-tip]:hover:after,.llms-quiz-wrapper [data-title-default]:hover:before,.llms-quiz-wrapper [data-title-default]:hover:after,.llms-quiz-wrapper [data-title-active]:hover:before,.llms-quiz-wrapper [data-title-active]:hover:after{opacity:1;-webkit-transition:all 0 .1s ease;transition:all 0 .1s ease;visibility:visible;z-index:99999999}.lifterlms [data-tip]:before,.llms-metabox [data-tip]:before,.llms-mb-container [data-tip]:before,.llms-quiz-wrapper [data-tip]:before{content:attr(data-tip)}.lifterlms [data-tip].active:before,.llms-metabox [data-tip].active:before,.llms-mb-container [data-tip].active:before,.llms-quiz-wrapper [data-tip].active:before{content:attr(data-tip-active)}#adminmenu .toplevel_page_lifterlms .wp-menu-image img{padding-top:6px;width:20px}#adminmenu .toplevel_page_lifterlms a[href*="page=llms-add-ons"],#adminmenu .opensub .wp-submenu li.current a[href*="page=llms-add-ons"],#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a[href*="page=llms-add-ons"]{color:#f8954f}.last-col{float:left;padding-left:0 !important}.last-col:after{clear:both}@media(max-width: 767px){.m-all{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding-left:0}.m-1of2{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.m-1of3{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33%}.m-2of3{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66%}.m-1of4{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.m-3of4{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.m-right{text-align:center}.m-center{text-align:center}.m-left{text-align:center}.d-right{text-align:left}.d-center{text-align:center}.d-left{text-align:right}}@media(min-width: 768px)and (max-width: 1029px){.t-all{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding-left:0}.t-1of2{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.t-1of3{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33%}.t-2of3{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66%}.t-1of4{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.t-3of4{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.t-1of5{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:20%}.t-2of5{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:40%}.t-3of5{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:60%}.t-4of5{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%}.d-right{text-align:left}.d-center{text-align:center}.d-left{text-align:right}}@media(min-width: 1030px){.d-all{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding-left:0}.d-1of2{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.d-1of3{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33%}.d-2of3{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66%}.d-1of4{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.d-3of4{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.d-1of5{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:20%}.d-2of5{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:40%}.d-3of5{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:60%}.d-4of5{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%}.d-1of6{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.6666666667%}.d-1of7{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:14.2857142857%}.d-2of7{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:28.5714286%}.d-3of7{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:42.8571429%}.d-4of7{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:57.1428572%}.d-5of7{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:71.4285715%}.d-6of7{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:85.7142857%}.d-1of8{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.d-1of9{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:11.1111111111%}.d-1of10{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:10%}.d-1of11{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:9.0909090909%}.d-1of12{float:right;padding-left:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33%}.d-right{text-align:left}.d-center{text-align:center}.d-left{text-align:right}}#llms-form-wrapper .llms-search-form-wrapper{border-bottom:1px solid #999;margin:20px 0}#llms-form-wrapper #llms_analytics_search{border:none !important;text-shadow:none !important;border:none !important;outline:none !important;-webkit-box-shadow:none !important;box-shadow:none !important;margin:0 !important;color:#fefefe !important;background:#466dd8 !important;border-radius:0;-webkit-transition:.5s;transition:.5s}#llms-form-wrapper #llms_analytics_search:hover{background:#0185a3 !important}#llms-form-wrapper #llms_analytics_search:active{background:#33b1cb !important}#llms-skip-setup-form .llms-admin-link{background:none !important;border:none;padding:0 !important;color:#0074a2;cursor:pointer}#llms-skip-setup-form .llms-admin-link:hover{color:#2ea2cc}#llms-skip-setup-form .llms-admin-link:focus{color:#124964}.llms-switch{position:relative}.llms-switch .llms-toggle{position:absolute;margin-right:-9999px;visibility:hidden}.llms-switch .llms-toggle+label{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;position:relative;cursor:pointer;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.llms-switch input.llms-toggle-round+label{border:2px solid #6c7781;border-radius:10px;height:20px;width:36px}.llms-switch input.llms-toggle-round+label:before,.llms-switch input.llms-toggle-round+label:after{-webkit-box-sizing:border-box;box-sizing:border-box;content:"";display:block;position:absolute;-webkit-transition:background .4s;transition:background .4s}.llms-switch input.llms-toggle-round:checked+label{border-color:#11a0d2;background-color:#11a0d2}.llms-switch input.llms-toggle-round+label:after{height:12px;right:2px;top:2px;background-color:#6c7781;border-radius:50%;-webkit-transition:margin .4s;transition:margin .4s;width:12px;z-index:3}.llms-switch input.llms-toggle-round:checked+label:after{background-color:#fefefe;margin-right:16px}.llms-switch input.llms-toggle-round+label:before{height:8px;top:4px;border:1px solid #6c7781;border-radius:50%;left:4px;width:8px;z-index:2}.llms-switch input.llms-toggle-round:checked+label:before{border-color:#fefefe;border-radius:0;right:6px;left:auto;width:2px}#llms-profile-fields{margin:50px 0}#llms-profile-fields .llms-form-field{padding-right:0}#llms-profile-fields label{display:block;font-weight:bold;padding:8px 0 2px}#llms-profile-fields .type-checkbox .type-checkbox label{display:initial;font-weight:initial;padding:0}#llms-profile-fields .type-checkbox .type-checkbox input{display:inline-block;margin-bottom:0;width:1rem}#llms-profile-fields select{max-width:100%}a.llms-voucher-delete{background:#bb231c;color:#fefefe;display:block;padding:4px 2px;text-decoration:none;-webkit-transition:ease .3s all;transition:ease .3s all}a.llms-voucher-delete:hover{background:#af3a26}.llms-voucher-codes-wrapper table,.llms-voucher-redemption-wrapper table{width:100%;border-collapse:collapse}.llms-voucher-codes-wrapper table th,.llms-voucher-codes-wrapper table td,.llms-voucher-redemption-wrapper table th,.llms-voucher-redemption-wrapper table td{border:none}.llms-voucher-codes-wrapper table thead,.llms-voucher-redemption-wrapper table thead{background-color:#466dd8;color:#fff}.llms-voucher-codes-wrapper table thead th,.llms-voucher-redemption-wrapper table thead th{padding:10px 10px}.llms-voucher-codes-wrapper table tr,.llms-voucher-redemption-wrapper table tr{counter-increment:row-counter}.llms-voucher-codes-wrapper table tr:nth-child(even),.llms-voucher-redemption-wrapper table tr:nth-child(even){background-color:#f1f1f1}.llms-voucher-codes-wrapper table tr td,.llms-voucher-redemption-wrapper table tr td{padding:5px}.llms-voucher-codes-wrapper table tr td:first-child:before,.llms-voucher-redemption-wrapper table tr td:first-child:before{content:counter(row-counter)}.llms-voucher-codes-wrapper table{width:100%;border-collapse:collapse}.llms-voucher-codes-wrapper table th,.llms-voucher-codes-wrapper table td{border:none}.llms-voucher-codes-wrapper table thead{background-color:#466dd8;color:#fff}.llms-voucher-codes-wrapper table tr:nth-child(even){background-color:#f1f1f1}.llms-voucher-codes-wrapper table tr td span{display:inline-block;min-width:30px}.llms-voucher-codes-wrapper button{cursor:pointer}.llms-voucher-codes-wrapper .llms-voucher-delete{float:left;margin-left:15px}.llms-voucher-codes-wrapper .llms-voucher-uses{width:50px}.llms-voucher-codes-wrapper .llms-voucher-add-codes{float:left}.llms-voucher-codes-wrapper .llms-voucher-add-codes input[type=text]{width:30px}.llms-voucher-export-wrapper .llms-voucher-export-type{width:100%}.llms-voucher-export-wrapper .llms-voucher-export-type p{margin:0 15px 0 0}.llms-voucher-export-wrapper .llms-voucher-email-wrapper{width:100%;margin:25px 0}.llms-voucher-export-wrapper .llms-voucher-email-wrapper input[type=text]{width:100%}.llms-voucher-export-wrapper .llms-voucher-email-wrapper p{margin:0}.llms-voucher-export-wrapper>button{float:left}.postbox .inside{overflow:auto}.llms-widget{background-color:#fff;border:1px solid #dedede;border-radius:12px;-webkit-box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:20px;padding:20px;position:relative;width:100%}.llms-widget.alt{border:1px solid #ccc;background-color:#efefef;margin-bottom:10px}.llms-widget.alt .llms-label{color:#777;font-size:14px;margin-bottom:10px;padding-bottom:5px}.llms-widget.alt h2{color:#444;font-weight:300}.llms-widget a{border-bottom:1px dotted #466dd8;display:inline-block;text-decoration:none}.llms-widget a:hover{border-bottom:1px dotted #2b55cb}.llms-widget .llms-widget-content{margin:.67em 0;color:#466dd8;font-size:2.4em;font-weight:700;line-height:1;word-break:break-all}.llms-widget h2{font-size:1.8em}.llms-widget .llms-label{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:18px;font-weight:400;margin:0 0 10px 0;text-align:center}.llms-widget .llms-chart{width:100%;padding:10px;-webkit-box-sizing:border-box;box-sizing:border-box}.llms-widget mark.yes{background-color:#7ad03a}.llms-widget .llms-subtitle{margin-bottom:0}.llms-widget .spinner{float:none;right:50%;margin:-10px -10px 0 0;position:absolute;top:50%;z-index:2}.llms-widget.is-loading:before{background:#fefefe;bottom:0;content:"";right:0;opacity:.9;position:absolute;left:0;top:0;z-index:1}.llms-widget.is-loading .spinner{visibility:visible}.llms-widget td[colspan="2"]{padding-right:0}.llms-widget tr.llms-disabled-field{opacity:.5;pointer-events:none}.llms-widget-1-3,.llms-widget-1-4,.llms-widget-1-5{text-align:center}.llms-widget .llms-widget-info-toggle{color:#aaa;cursor:pointer;font-size:16px;position:absolute;left:20px;top:20px}.llms-widget.info-showing .llms-widget-info{display:block}.llms-widget-info{background:#444;color:#fefefe;bottom:-50px;display:none;padding:15px;position:absolute;text-align:center;right:10px;left:15px;z-index:3}.llms-widget-info:before{content:"";border:12px solid rgba(0,0,0,0);border-bottom-color:#444;right:50%;margin-right:-12px;position:absolute;top:-24px}.llms-widget-info p{margin:0}.llms-widget-row:before,.llms-widget-row:after{content:" ";display:table}.llms-widget-row:after{clear:both}.llms-widget-row .no-padding{padding:0 !important}svg.icon{height:24px;width:24px;display:inline-block;fill:currentColor;vertical-align:baseline}button svg.icon{height:18px;width:18px;margin:4px 4px 0 -4px;-webkit-filter:drop-shadow(0 1px #eee);filter:drop-shadow(0 1px #eee);float:left}svg.icon.menu-icon{height:20px;width:20px;display:inline-block;fill:currentColor;vertical-align:text-bottom;margin-left:10px}svg.icon.tree-icon{height:13px;width:13px;vertical-align:middle}svg.icon.section-icon{height:16px;width:16px;vertical-align:text-bottom}svg.icon.button-icon{height:16px;width:16px;vertical-align:text-bottom}svg.icon.button-icon-attr{height:10px;width:10px;vertical-align:middle}svg.icon.list-icon{height:12px;width:12px;vertical-align:middle}svg.icon.list-icon.on{color:#466dd8}svg.icon.list-icon.off{color:#444}svg.icon.detail-icon{height:16px;width:16px;vertical-align:text-bottom;cursor:default}svg.icon.detail-icon.on{color:#466dd8}svg.icon.detail-icon.off{color:#ccc}svg.icon-ion-arrow-up{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}svg use{pointer-events:none}#side-sortables .tab-content{padding:0}.llms-mb-container .tab-content{display:none;background-color:#fff;padding:0 20px}.llms-mb-container .tab-content ul:not(.select2-selection__rendered){margin:0 0 15px 0}.llms-mb-container .tab-content ul:not(.select2-selection__rendered)>li{padding:20px 0;margin:0}.llms-mb-container .tab-content ul:not(.select2-selection__rendered)>li.select:not([class*=d-]){width:100%}.llms-mb-container .tab-content ul:not(.select2-selection__rendered)>li:last-child{border:0;padding-bottom:0}.llms-mb-container .tab-content ul:not(.select2-selection__rendered)>li.top{border-bottom:0;padding-bottom:0}.llms-mb-container .tab-content .full-width{width:100%}.llms-mb-container .tab-content #wp-content-editor-tools{background:none}.llms-mb-container .tab-content.llms-active{display:inherit}.llms-mb-container .tab-content .no-border{border-bottom:0px}.topModal{display:none;position:relative;border:4px solid gray;background:#fff;z-index:1000001;padding:2px;max-width:500px;margin:34px auto 0;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-color:#fff;border-radius:2px;border:1px solid #ddd}.topModalClose{float:left;cursor:pointer;margin-left:10px;margin-top:10px}.topModalContainer{display:none;overflow:auto;overflow-y:hidden;position:fixed;top:0 !important;left:0;bottom:0;right:0;-webkit-overflow-scrolling:touch;width:auto !important;margin-right:0 !important;background-color:rgba(0,0,0,0) !important;z-index:100002 !important}.topModalBackground{display:none;background:#000;position:fixed;height:100%;width:100%;top:0 !important;right:0;margin-right:0 !important;z-index:100002 !important;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto;overflow-y:hidden}body.modal-open{overflow:hidden}.llms-modal-header{border-top-left-radius:1px;border-top-right-radius:1px;background:#466dd8;color:#eee;padding:10px 15px;font-size:18px}#llms-icon-modal-close{width:16px;height:16px;fill:#fefefe}.llms-modal-content{padding:20px}.llms-modal-content h3{margin-top:0}.llms-modal-form h1{margin-top:0}.llms-modal-form input[type=text]{width:100%}.llms-modal-form textarea,.llms-modal-form input[type=text],.llms-modal-form input[type=password],.llms-modal-form input[type=file],.llms-modal-form input[type=datetime],.llms-modal-form input[type=datetime-local],.llms-modal-form input[type=date],.llms-modal-form input[type=month],.llms-modal-form input[type=time],.llms-modal-form input[type=week],.llms-modal-form input[type=number],.llms-modal-form input[type=email],.llms-modal-form input[type=url],.llms-modal-form input[type=search],.llms-modal-form input[type=tel],.llms-modal-form input[type=color]{padding:0 .4em 0 .4em;margin-bottom:2em;vertical-align:middle;border-radius:3px;min-width:50px;max-width:635px;width:100%;min-height:32px;background-color:#fff;border:1px solid #ccc;margin:0 0 24px 0;outline:none;-webkit-transition:border .3s ease-in-out 0s;transition:border .3s ease-in-out 0s}.llms-modal-form textarea:focus,.llms-modal-form input[type=text]:focus,.llms-modal-form input[type=password]:focus,.llms-modal-form input[type=file]:focus,.llms-modal-form input[type=datetime]:focus,.llms-modal-form input[type=datetime-local]:focus,.llms-modal-form input[type=date]:focus,.llms-modal-form input[type=month]:focus,.llms-modal-form input[type=time]:focus,.llms-modal-form input[type=week]:focus,.llms-modal-form input[type=number]:focus,.llms-modal-form input[type=email]:focus,.llms-modal-form input[type=url]:focus,.llms-modal-form input[type=search]:focus,.llms-modal-form input[type=tel]:focus,.llms-modal-form input[type=color]:focus{background:#fefefe;border:1px solid #466dd8}.llms-modal-form textarea{padding:.4em !important;height:100px !important;border-radius:3px;vertical-align:middle;min-height:32px;outline:none;-webkit-box-sizing:border-box;box-sizing:border-box}.llms-modal-form textarea:focus{background:#fefefe;border:1px solid #466dd8}.llms-modal-form .chosen-container-single .chosen-single{border-radius:3px;vertical-align:middle;min-height:32px;border:1px solid #ccc;width:100%;background:#fefefe !important;outline:none;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 0 0 #fff;box-shadow:0 0 0 #fff;line-height:32px;margin:0 0 24px 0}.llms-modal-form .chosen-container-single .chosen-single:focus{background:#fefefe;border:1px solid #466dd8}.llms-modal-form .chosen-container-single .chosen-single div b{margin-top:4px}.llms-modal-form .chosen-search input[type=text]{border:1px solid #ccc}.llms-modal-form .chosen-search input[type=text]:focus{background-color:#fefefe;border:1px solid #466dd8}.llms-modal-form .chosen-container-single .chosen-drop{margin-top:-28px}.llms-modal-form .llms-button-primary,.llms-modal-form .llms-button-secondary{padding:10px 10px;border-radius:0;-webkit-transition:.5s;transition:.5s;-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.llms-modal-form .llms-button-primary.full,.llms-modal-form .llms-button-secondary.full{width:100%}.modal-open .select2-dropdown{z-index:1000005}.button.llms-merge-code-button{vertical-align:middle}.button.llms-merge-code-button svg{margin-left:2px;position:relative;top:4px;width:16px}.button.llms-merge-code-button svg g{fill:currentColor}.llms-mb-container .llms-merge-code-wrapper{float:left;top:-5px}.llms-merge-code-wrapper{display:inline;position:relative}.llms-merge-codes{background:#f7f7f7;border:1px solid #ccc;border-radius:3px;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc;color:#555;display:none;right:1px;overflow:hidden;position:absolute;top:30px;width:200px}.llms-merge-codes ul{margin:0;padding:0}.llms-merge-codes li{cursor:pointer;margin:0;padding:4px 8px !important;border-bottom:1px solid #ccc}.llms-merge-codes li:hover{color:#23282d;background:#fefefe}.llms-merge-codes.active{display:block;z-index:777}.llms-nav-tab,.llms-nav-tab-filters{display:block;width:100%}form.llms-nav-tab-filters.full-width{width:100%}form.llms-nav-tab-filters.full-width label{display:inline-block;width:10%;text-align:right}form.llms-nav-tab-filters.full-width .select2-container{width:85% !important}.llms-nav-tab-settings{display:block;width:100%}#llms-form-wrapper .llms-select{width:100%;margin-bottom:20px}#llms-form-wrapper .llms-checkbox{display:inline-block;width:100%;text-align:right}#llms-form-wrapper .llms-filter-options{width:100%}#llms-form-wrapper .llms-date-select{width:100%;display:inline-block;margin-bottom:20px}#llms-form-wrapper .llms-date-select input[type=text]{width:100%}ul.tabs li{display:block}@media only screen and (min-width: 481px){#llms-form-wrapper .llms-checkbox{width:33%}}@media only screen and (min-width: 768px){ul.tabs li{display:inline-block}.llms-nav-tab{display:inline-block;width:33%}.llms-nav-tab-settings{display:inline-block;width:25%}#llms-form-wrapper .llms-select{width:50%;max-width:500px}#llms-form-wrapper .llms-filter-options{width:50%;max-width:500px}#llms-form-wrapper .llms-date-select{width:47.5%}#llms-form-wrapper .llms-date-select:first-child{margin-left:5%}.llms-widget input[type=text],.llms-widget input[type=password],.llms-widget input[type=datetime],.llms-widget input[type=datetime-local],.llms-widget input[type=date],.llms-widget input[type=month],.llms-widget input[type=time],.llms-widget input[type=week],.llms-widget input[type=number],.llms-widget input[type=email],.llms-widget input[type=url],.llms-widget input[type=search],.llms-widget input[type=tel],.llms-widget input[type=color],.llms-widget select,.llms-widget textarea{width:50%}.llms-widget input[type=text].medium,.llms-widget input[type=password].medium,.llms-widget input[type=datetime].medium,.llms-widget input[type=datetime-local].medium,.llms-widget input[type=date].medium,.llms-widget input[type=month].medium,.llms-widget input[type=time].medium,.llms-widget input[type=week].medium,.llms-widget input[type=number].medium,.llms-widget input[type=email].medium,.llms-widget input[type=url].medium,.llms-widget input[type=search].medium,.llms-widget input[type=tel].medium,.llms-widget input[type=color].medium,.llms-widget select.medium,.llms-widget textarea.medium{width:30%}.llms-widget input[type=text].small,.llms-widget input[type=password].small,.llms-widget input[type=datetime].small,.llms-widget input[type=datetime-local].small,.llms-widget input[type=date].small,.llms-widget input[type=month].small,.llms-widget input[type=time].small,.llms-widget input[type=week].small,.llms-widget input[type=number].small,.llms-widget input[type=email].small,.llms-widget input[type=url].small,.llms-widget input[type=search].small,.llms-widget input[type=tel].small,.llms-widget input[type=color].small,.llms-widget select.small,.llms-widget textarea.small{width:20%}.llms-widget input[type=text].tiny,.llms-widget input[type=password].tiny,.llms-widget input[type=datetime].tiny,.llms-widget input[type=datetime-local].tiny,.llms-widget input[type=date].tiny,.llms-widget input[type=month].tiny,.llms-widget input[type=time].tiny,.llms-widget input[type=week].tiny,.llms-widget input[type=number].tiny,.llms-widget input[type=email].tiny,.llms-widget input[type=url].tiny,.llms-widget input[type=search].tiny,.llms-widget input[type=tel].tiny,.llms-widget input[type=color].tiny,.llms-widget select.tiny,.llms-widget textarea.tiny{width:10%}}@media only screen and (min-width: 1030px){.llms-nav-tab{display:inline-block;width:33.333%}.llms-nav-tab-settings{display:inline-block;width:25%}#llms-form-wrapper .llms-select{display:inline-block;width:47.5%}#llms-form-wrapper .llms-select:first-child{margin-left:5%}#llms-form-wrapper .llms-filter-options{display:inline-block;width:47.5%}#llms-form-wrapper .llms-filter-options.date-filter{margin-left:5%}#llms-form-wrapper .llms-filter-options .llms-date-select{margin-bottom:0}#llms-form-wrapper .llms-date-select{width:47.5%}#llms-form-wrapper .llms-date-select:first-child{margin-left:5%}.llms-widget-row:before,.llms-widget-row:after{content:" ";display:table}.llms-widget-row:after{clear:both}.llms-widget-row .llms-widget-1-5{vertical-align:top;width:20%;float:right;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px}.llms-widget-row .llms-widget-1-4{vertical-align:top;width:25%;float:right;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px}.llms-widget-row .llms-widget-1-3{width:33.3%;float:right;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px}.llms-widget-row .llms-widget-1-2{width:50%;float:right;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px;vertical-align:top}}@media only screen and (min-width: 1240px){.llms-nav-tab-filters,.llms-nav-tab-settings{float:right;width:12.5%}}.wrap.lifterlms{margin-top:0}.llms-header{background-color:#fff;margin:0 -20px 0 0;padding:20px 10px;position:relative;z-index:1}.llms-header .llms-inside-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 10px}.llms-header .lifterlms-logo{-webkit-box-flex:0;-ms-flex:0 0 190px;flex:0 0 190px;max-height:52px;margin-left:10px}.llms-header .llms-meta{-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:16px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;line-height:1.5}.llms-header .llms-meta .llms-version{background-color:#1d2327;color:#fff;border-radius:999px;font-size:13px;font-weight:700;padding:6px 12px}.llms-header .llms-meta a{display:inline-block}.llms-header .llms-meta .llms-license{border-left:1px solid #ccc;font-weight:700;margin-left:12px;padding-left:12px}.llms-header .llms-meta .llms-license a{text-decoration:none}.llms-header .llms-meta .llms-license a:before{content:"";display:inline-block;font:400 16px/1 dashicons;right:0;padding-left:3px;position:relative;text-decoration:none;vertical-align:text-bottom}.llms-header .llms-meta .llms-license a.llms-license-none{color:#888}.llms-header .llms-meta .llms-license a.llms-license-none:before{content:""}.llms-header .llms-meta .llms-license a.llms-license-active{color:#008a20}.llms-header .llms-meta .llms-license a.llms-license-active:before{content:""}.llms-header .llms-meta .llms-support{font-weight:700}.llms-header .llms-meta .llms-support a{color:#1d2327;text-decoration:none}.llms-subheader{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin-right:-20px;padding:10px 20px;width:100%;z-index:1}.llms-subheader h1{font-weight:700;padding:0}.llms-subheader h1 a{color:inherit;text-decoration:none}#post_course_difficulty{min-width:200px}#_video-embed,#_audio-embed{width:100%}hr{background-color:#ccc;border:none;height:1px;margin:30px 0;padding:0}.llms_certificate_default_image,.llms_certificate_image{width:300px}.llms_achievement_default_image,.llms_achievement_image{width:120px}div[id^=lifterlms-] .inside{overflow:visible}.notice.llms-admin-notice{background-color:#fff;border:1px solid #ccd0d4;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.15);box-shadow:0 1px 4px rgba(0,0,0,.15);display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 !important;position:relative}.notice.llms-admin-notice .notice-dismiss{text-decoration:none}.notice.llms-admin-notice.notice-warning{border-right:4px solid #f8954f}.notice.llms-admin-notice.notice-warning .llms-admin-notice-icon{background-color:#fef4ed}.notice.llms-admin-notice.notice-info{border-right:4px solid #466dd8}.notice.llms-admin-notice.notice-info h3{color:#466dd8}.notice.llms-admin-notice.notice-info .llms-admin-notice-icon{background-color:#edf0fb}.notice.llms-admin-notice.notice-success{border-right:4px solid #18a957}.notice.llms-admin-notice.notice-success h3{color:#18a957}.notice.llms-admin-notice.notice-success .llms-admin-notice-icon{background-color:#e8f6ee}.notice.llms-admin-notice.notice-error{border-right:4px solid #df1642}.notice.llms-admin-notice.notice-error h3{color:#9c0f2e}.notice.llms-admin-notice.notice-error .llms-admin-notice-icon{background-color:#fce8ec}.notice.llms-admin-notice .llms-admin-notice-icon{background-image:url(../../assets/images/lifterlms-icon-color.png);background-position:center center;background-repeat:no-repeat;background-size:30px;min-width:70px}.notice.llms-admin-notice .llms-admin-notice-content{color:#111;padding:20px}.notice.llms-admin-notice h3{font-size:18px;font-weight:700;line-height:25px;margin:0 0 15px 0}.notice.llms-admin-notice button,.notice.llms-admin-notice .llms-button-primary{display:inline-block}.notice.llms-admin-notice p{font-size:14px;line-height:22px;margin:0 0 15px 0;max-width:65em;padding:0}.notice.llms-admin-notice p:last-of-type{margin-bottom:0}.llms-button-action.small .dashicons,.llms-button-danger.small .dashicons,.llms-button-primary.small .dashicons,.llms-button-secondary.small .dashicons{font-size:13px;height:13px;width:13px}.llms-button-action:hover,.llms-button-danger:hover,.llms-button-primary:hover,.llms-button-secondary:hover{-webkit-box-shadow:none;box-shadow:none}a.llms-view-as{line-height:2;margin-left:8px}.llms-image-field-preview{max-height:80px;vertical-align:middle;width:auto}.llms-image-field-remove.hidden{display:none}.llms-log-viewer{background:#fff;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);margin:20px 0;padding:25px}.llms-log-viewer pre{font-family:monospace;margin:0;padding:0;white-space:pre-wrap}.llms-status--tools .llms-table{background:#fff;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.llms-status--tools .llms-table td,.llms-status--tools .llms-table th{padding:10px;vertical-align:top}.llms-status--tools .llms-table th{width:28%}.llms-status--tools .llms-table p{margin:0 0 10px}.llms-error{color:#bb231c;font-style:italic}.llms-rating-stars{color:#ffb900;text-decoration:none}@media screen and (max-width: 782px){.llms-header{top:46px}.llms-header .llms-inside-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:20px}.llms-header .llms-inside-wrap .lifterlms-logo{-ms-flex-item-align:center;align-self:center;-webkit-box-flex:inherit;-ms-flex:inherit;flex:inherit;max-height:initial;max-width:200px}.llms-header .llms-inside-wrap .llms-meta{-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px}}.llms-table-wrap{position:relative}.llms-table-header{padding:0}.llms-table-header:before,.llms-table-header:after{content:" ";display:table}.llms-table-header:after{clear:both}.llms-table-header h2{font-size:20px;padding:0;display:inline-block;line-height:1.5;margin:0 0 20px 0;vertical-align:middle}.llms-table-header .llms-table-search,.llms-table-header .llms-table-filters{float:left;padding-right:10px}.llms-table-header .llms-table-search input{margin:0;padding:0 8px}.llms-table{border:1px solid #c3c4c7;border-collapse:collapse;width:100%}.llms-table a:not(.small){color:#466dd8}.llms-table a:not(.small):hover{color:#2b55cb}.llms-table td,.llms-table th{border-bottom:1px solid #c3c4c7;padding:10px 12px;text-align:center}.llms-table td.expandable.closed,.llms-table th.expandable.closed{display:none}.llms-table td .llms-button-primary,.llms-table td .llms-button-secondary,.llms-table td .llms-button-action,.llms-table td .llms-button-danger,.llms-table th .llms-button-primary,.llms-table th .llms-button-secondary,.llms-table th .llms-button-action,.llms-table th .llms-button-danger{display:inline-block}.llms-table tr.llms-quiz-pending td{font-weight:700}.llms-table thead th,.llms-table tfoot th{background-color:#fff;font-weight:700}.llms-table thead th a.llms-sortable,.llms-table tfoot th a.llms-sortable{padding-left:16px;position:relative;text-decoration:none;width:100%}.llms-table thead th a.llms-sortable.active[data-order=DESC] .asc,.llms-table tfoot th a.llms-sortable.active[data-order=DESC] .asc{opacity:1}.llms-table thead th a.llms-sortable.active[data-order=ASC] .desc,.llms-table tfoot th a.llms-sortable.active[data-order=ASC] .desc{opacity:1}.llms-table thead th a.llms-sortable:hover[data-order=DESC] .asc,.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .asc{opacity:0}.llms-table thead th a.llms-sortable:hover[data-order=DESC] .desc,.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .desc{opacity:1}.llms-table thead th a.llms-sortable:hover[data-order=ASC] .asc,.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .asc{opacity:1}.llms-table thead th a.llms-sortable:hover[data-order=ASC] .desc,.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .desc{opacity:0}.llms-table thead th a.llms-sortable .dashicons,.llms-table tfoot th a.llms-sortable .dashicons{color:#444;font-size:16px;height:16px;opacity:0;position:absolute;width:16px}.llms-table tfoot th{border-bottom:none}.llms-table tfoot th .llms-table-export{float:right}.llms-table tfoot th .llms-table-export .llms-table-progress{background:#efefef;display:none;margin-right:8px;vertical-align:middle;width:100px}.llms-table tfoot th .llms-table-pagination{float:left}.llms-table.zebra tbody tr:nth-child(even) th,.llms-table.zebra tbody tr:nth-child(even) td{background-color:#fff}.llms-table.zebra tbody tr:nth-child(odd) th,.llms-table.zebra tbody tr:nth-child(odd) td{background-color:#f6f7f7}.llms-table.text-left td,.llms-table.text-left th{text-align:right}.llms-table.size-large td,.llms-table.size-large th{font-size:14px;padding:10px 12px}.llms-table .llms-drag-handle{color:#777;cursor:pointer;-webkit-transition:color .4s ease;transition:color .4s ease}.llms-table .llms-action-icon{color:#777;text-decoration:none}.llms-table .llms-action-icon .tooltip{cursor:pointer}.llms-table .llms-action-icon:hover{color:#466dd8}.llms-table .llms-action-icon.danger:hover{color:#bb231c}.llms-table .llms-table-page-count{font-size:12px;padding:0 5px}.llms-table-progress{text-align:center}.llms-table-progress .llms-table-progress-bar{background:#eee;border-radius:10px;height:16px;overflow:hidden;position:relative}.llms-table-progress .llms-table-progress-bar .llms-table-progress-inner{background:#466dd8;height:100%;-webkit-transition:width .2s ease;transition:width .2s ease}.llms-table-progress .llms-table-progress-text{color:#466dd8;font-size:12px;font-weight:700;line-height:16px}.llms-table.llms-gateway-table .status .fa,.llms-table.llms-integrations-table .status .fa{color:#466dd8;font-size:22px}.llms-table.llms-gateway-table .sort,.llms-table.llms-integrations-table .sort{cursor:move;text-align:center;width:10px}.llms-gb-table-notifications th,.llms-gb-table-notifications td{text-align:right}.llms-order-note .llms-order-note-content{background:#efefef;margin-bottom:10px;padding:10px;position:relative}.llms-order-note .llms-order-note-content:after{border-style:solid;border-color:#efefef rgba(0,0,0,0);border-width:10px 0 0 10px;bottom:-10px;content:"";display:block;height:0;right:20px;position:absolute;width:0}.llms-order-note .llms-order-note-content p{font-size:13px;margin:0;line-height:1.5}.llms-order-note .llms-order-note-meta{color:#999;font-size:11px;margin-right:10px}.llms-mb-list label{font-size:15px;font-weight:700;line-height:1.5;display:block;width:100%}.llms-mb-list .description{margin-bottom:8px}.llms-mb-list .input-full{width:100%}#poststuff .llms-metabox h2,#poststuff .llms-metabox h3,#poststuff .llms-metabox h6{margin:0;padding:0}#poststuff .llms-metabox h2{font-size:18px;font-weight:700}#poststuff .llms-metabox h3{color:#777;font-size:16px}#poststuff .llms-metabox h4{border-bottom:1px solid #e5e5e5;padding:0;margin:0}#poststuff .llms-metabox .llms-transaction-test-mode{background:#ffffd7;font-style:italic;right:0;padding:2px;position:absolute;left:0;top:0;text-align:center}#poststuff .llms-metabox a.llms-editable,#poststuff .llms-metabox .llms-metabox-icon,#poststuff .llms-metabox button.llms-editable{color:#999;text-decoration:none}#poststuff .llms-metabox a.llms-editable:hover,#poststuff .llms-metabox .llms-metabox-icon:hover,#poststuff .llms-metabox button.llms-editable:hover{color:#466dd8}#poststuff .llms-metabox button.llms-editable{border:none;background:none;cursor:pointer;padding:0;vertical-align:top}#poststuff .llms-metabox h4 button.llms-editable{float:left}#poststuff .llms-metabox .llms-table{margin-top:10px}.llms-metabox-section{background:#fff;margin-top:25px;position:relative}.llms-metabox-section.no-top-margin{margin-top:0}.llms-metabox-section .llms-metabox-field{margin:15px 0;position:relative}.llms-metabox-section .llms-metabox-field label{color:#777;display:block;margin-bottom:5px;font-weight:500;vertical-align:baseline}.llms-metabox-section .llms-metabox-field select,.llms-metabox-section .llms-metabox-field textarea,.llms-metabox-section .llms-metabox-field input[type=text],.llms-metabox-section .llms-metabox-field input[type=number]{width:100%}.llms-metabox-section .llms-metabox-field input.md-text{width:105px}.llms-metabox-section .llms-metabox-field input.sm-text{width:45px}.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-date-input{width:95px}.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-time-input{width:45px}.llms-metabox-section .llms-metabox-field .llms-datetime-field em{font-style:normal;padding:0 3px}.llms-collapsible{border:1px solid #e5e5e5;position:relative;margin-top:0;margin-bottom:-1px}.llms-collapsible:last-child{margin-bottom:0}.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-down{display:none}.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-up{display:inline}.llms-collapsible .llms-collapsible-header{padding:10px}.llms-collapsible .llms-collapsible-header h3{color:#777;margin:0;font-size:16px}.llms-collapsible .llms-collapsible-header .dashicons-arrow-up{display:inline}.llms-collapsible .llms-collapsible-header .dashicons-arrow-up{display:none}.llms-collapsible .llms-collapsible-header a{text-decoration:none}.llms-collapsible .llms-collapsible-header .dashicons{color:#777;cursor:pointer;-webkit-transition:color .4s ease;transition:color .4s ease}.llms-collapsible .llms-collapsible-header .dashicons:hover{color:#466dd8}.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning,.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning:hover,.llms-collapsible .llms-collapsible-header .dashicons.dashicons-trash:hover,.llms-collapsible .llms-collapsible-header .dashicons.dashicons-no:hover{color:#bb231c}.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger,.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger:hover{color:#c05621}.llms-collapsible .llms-collapsible-body{display:none;padding:10px}._llms_instructors_data.repeater .llms-repeater-rows .llms-repeater-row:first-child .llms-repeater-remove{display:none}._llms_instructors_data.repeater .llms-mb-list{padding:0 5px !important}.post-type-llms_order #post-body-content{display:none}#lifterlms-order-details .handlediv,#lifterlms-order-details .handlediv.button-link,#lifterlms-order-details .postbox-header{display:none}#lifterlms-order-details .inside{padding:20px;margin-top:0}.llms-table tbody tr.llms-txn-failed td{background-color:rgba(187,35,28,.5);border-bottom-color:rgba(187,35,28,.5)}.llms-table tbody tr.llms-txn-refunded td{background-color:rgba(255,165,0,.5);border-bottom-color:rgba(255,165,0,.5)}.llms-txn-refund-form .llms-metabox-section,.llms-manual-txn-form .llms-metabox-section{margin-top:0}.llms-txn-refund-form .llms-metabox-field,.llms-manual-txn-form .llms-metabox-field{text-align:left}.llms-txn-refund-form .llms-metabox-field input[type=number],.llms-manual-txn-form .llms-metabox-field input[type=number]{max-width:100px}.llms-txn-refund-form .llms-metabox-field input[type=text],.llms-manual-txn-form .llms-metabox-field input[type=text]{max-width:340px}.llms-manual-txn-form{background-color:#eaeaea}.llms-manual-txn-form .llms-metabox-section{background-color:#eaeaea}#llms-remaining-edit{display:none}.llms-remaining-edit--content label,.llms-remaining-edit--content span,.llms-remaining-edit--content textarea{display:block}.llms-remaining-edit--content label{margin-bottom:20px}.llms-remaining-edit--content textarea,.llms-remaining-edit--content input{width:100%}.submitbox .llms-mb-section,.llms-award-engagement-submitbox .llms-mb-list{margin-bottom:12px}.submitbox .llms-mb-section:last-of-type,.llms-award-engagement-submitbox .llms-mb-list:last-of-type{margin-bottom:0}.sync-action:before,.submitbox .llms-mb-section.student-info:before,.submitbox .llms-mb-section.post_author_override label:before,.llms-award-engagement-submitbox .llms-mb-list.student-info:before,.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before{font:normal 20px/1 dashicons;speak:never;display:inline-block;margin-right:-1px;padding-left:3px;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:relative;top:-1px;color:#8c8f94}body:not(.admin-color-fresh) .sync-action:before,body:not(.admin-color-fresh) .submitbox .llms-mb-section.student-info:before,body:not(.admin-color-fresh) .submitbox .llms-mb-section.post_author_override label:before,body:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.student-info:before,body:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before{color:currentColor}.submitbox .llms-mb-section.student-info:before,.submitbox .llms-mb-section.post_author_override label:before,.llms-award-engagement-submitbox .llms-mb-list.student-info:before,.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before{content:""}.sync-action:before{content:"";color:#fff}.submitbox .llms-mb-section.post_author_override label,.llms-award-engagement-submitbox .llms-mb-list.post_author_override label{display:inline-block;width:auto}.llms-metabox #llms-new-access-plan-model{display:none}.llms-metabox .llms-access-plans{margin-top:10px}.llms-metabox .llms-access-plans>.llms-no-plans-msg{display:none}.llms-metabox .llms-access-plans>.llms-no-plans-msg:last-child{-webkit-box-shadow:inset 0 0 0 1px #e5e5e5;box-shadow:inset 0 0 0 1px #e5e5e5;display:block;text-align:center;padding:10px}.llms-metabox .llms-access-plans.dragging{background:#efefef;-webkit-box-shadow:inset 0 0 0 1px #e5e5e5;box-shadow:inset 0 0 0 1px #e5e5e5}.llms-metabox .llms-access-plans .llms-spinning{z-index:1}.llms-metabox .llms-access-plans .llms-invalid{border-color:#bb231c}.llms-metabox .llms-access-plans .llms-invalid .dashicons-warning{display:inline}.llms-metabox .llms-access-plans .llms-needs-attention .dashicons-warning.medium-danger{display:inline}.llms-metabox .llms-access-plans .dashicons-warning{display:none}.llms-metabox .llms-access-plan{text-align:right}.llms-metabox .llms-access-plan [data-tip]:before{text-align:center}.llms-metabox .llms-access-plan .llms-plan-link,.llms-metabox .llms-access-plan [data-controller]{display:none}.llms-metabox .llms-access-plan:hover .llms-plan-link,.llms-metabox .llms-access-plan.opened .llms-plan-link{display:inline-block}.llms-metabox .llms-access-plan .llms-metabox-field{margin:5px 0}.llms-metabox .llms-access-plan .llms-required{color:#bb231c;margin-right:3px}.llms-metabox .llms-access-plan .notice{margin-right:0}.llms-metabox-students .llms-table tr .name{text-align:right}.llms-metabox-students .llms-add-student:hover{color:#4d8d3c}.llms-metabox-students .llms-remove-student:hover{color:#bb231c}.llms-mb-container .tab-content ul:not(.select2-selection__rendered).llms-mb-repeater-fields>li.llms-mb-list{border-bottom:none;padding:0 0 10px}.llms-mb-list.repeater .llms-repeater-rows{position:relative;margin-top:10px;min-height:10px}.llms-mb-list.repeater .llms-repeater-rows.dragging{background:#efefef;-webkit-box-shadow:inset 0 0 0 1px #e5e5e5;box-shadow:inset 0 0 0 1px #e5e5e5}.llms-mb-list.repeater .llms-repeater-row{background:#fff}.llms-mb-list.repeater .llms-mb-repeater-footer{text-align:left;margin-top:20px}.llms-mb-list.repeater .tmce-active .wp-editor-area{color:#32373c}.llms-builder-launcher p{margin-top:0}.llms-builder-launcher ol{margin-top:-6px}.llms-builder-launcher .llms-button-primary{-webkit-box-sizing:border-box;box-sizing:border-box}.wp-list-table .llms-status{border-radius:6px;display:inline-block;font-size:13px;font-weight:700;line-height:1.4;padding:2px 6px;vertical-align:middle}.wp-list-table .llms-status.llms-size--large{font-size:105%;padding:6px 12px}.wp-list-table .llms-status.llms-active,.wp-list-table .llms-status.llms-completed,.wp-list-table .llms-status.llms-pass,.wp-list-table .llms-status.llms-txn-succeeded{color:#4d8d3c;background-color:rgba(77,141,60,.15)}.wp-list-table .llms-status.llms-fail,.wp-list-table .llms-status.llms-failed,.wp-list-table .llms-status.llms-expired,.wp-list-table .llms-status.llms-cancelled,.wp-list-table .llms-status.llms-txn-failed{color:#bb231c;background-color:rgba(187,35,28,.15)}.wp-list-table .llms-status.llms-incomplete,.wp-list-table .llms-status.llms-on-hold,.wp-list-table .llms-status.llms-pending,.wp-list-table .llms-status.llms-pending-cancel,.wp-list-table .llms-status.llms-refunded,.wp-list-table .llms-status.llms-txn-pending,.wp-list-table .llms-status.llms-txn-refunded{color:#c05621;background-color:rgba(192,86,33,.15)}#lifterlms-order-transactions .llms-table tfoot th{text-align:left}.llms-post-table-post-filter{display:inline-block;margin-left:6px;max-width:100%;width:220px}.llms-nav-tab-wrapper{background:#466dd8;margin:20px 0}.llms-nav-tab-wrapper.llms-nav-secondary{background:#e1e1e1}.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item{margin:0}.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link{background:#cdcdcd}.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link{color:#414141;font-size:15px;padding:8px 14px}.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link .dashicons{font-size:15px;height:15px;width:15px}.llms-nav-tab-wrapper.llms-nav-text{background:inherit}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-items{padding-right:0}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item{background:inherit;color:#646970}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:last-child:after{display:none}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:after{content:"|";display:inline-block;margin:0 6px 0 8px}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link:hover{background:inherit;color:#466dd8}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item.llms-active .llms-nav-link{background:inherit;color:#000;font-weight:600;text-decoration:none}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link{color:#466dd8;display:inline-block;letter-spacing:0;margin:0;padding:0;text-decoration:underline;text-transform:none}.llms-nav-tab-wrapper.llms-nav-style-tabs{background-color:#1c3987;margin:0;padding-top:8px}.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item{margin:0 3px}.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item .llms-nav-link{border-top-right-radius:4px;border-top-left-radius:4px}.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item.llms-active .llms-nav-link{background-color:#fff;color:#466dd8;font-weight:700}.llms-nav-tab-wrapper.llms-nav-style-filters{background-color:#466dd8;border-radius:12px;margin:20px 0;overflow:hidden;padding:0}.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-right:0}@media only screen and (min-width: 782px){.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item{float:none}.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item .llms-nav-link{padding:14px}.llms-nav-tab-wrapper .llms-nav-items{margin:0;padding-right:10px}.llms-nav-tab-wrapper .llms-nav-items:before,.llms-nav-tab-wrapper .llms-nav-items:after{content:" ";display:table}.llms-nav-tab-wrapper .llms-nav-items:after{clear:both}.llms-nav-tab-wrapper .llms-nav-item{margin:0}.llms-nav-tab-wrapper .llms-nav-item .llms-nav-link:hover{background:#466dd8}.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link{background:#1c3987}.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link{font-weight:400}@media only screen and (min-width: 768px){.llms-nav-tab-wrapper .llms-nav-item{float:right}.llms-nav-tab-wrapper .llms-nav-item.llms-nav-item-right{float:left}}.llms-nav-tab-wrapper .llms-nav-link{color:#fff;cursor:pointer;display:block;font-weight:400;font-size:15px;padding:9px 18px;text-align:center;text-decoration:none;-webkit-transition:all .3s ease;transition:all .3s ease}#llms-options-page-contents h2{color:#999;font-weight:500;letter-spacing:2px;border-bottom:1px solid #999}.llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15);margin:0;padding:0}.llms-reporting.wrap .llms-stab-title{color:#1c3987;font-size:36px;font-weight:300;margin-bottom:20px}.llms-reporting.wrap td.id a{text-decoration:none}.llms-reporting.wrap th.id,.llms-reporting.wrap td.id,.llms-reporting.wrap th.name,.llms-reporting.wrap td.name,.llms-reporting.wrap th.registered,.llms-reporting.wrap td.registered,.llms-reporting.wrap th.last_seen,.llms-reporting.wrap td.last_seen,.llms-reporting.wrap th.overall_progress,.llms-reporting.wrap td.overall_progress,.llms-reporting.wrap th.title,.llms-reporting.wrap td.title,.llms-reporting.wrap th.course,.llms-reporting.wrap td.course,.llms-reporting.wrap th.lesson,.llms-reporting.wrap td.lesson{text-align:right}.llms-reporting.wrap td.section-title{background:#eaeaea;text-align:right;font-weight:700;padding:16px 4px}.llms-reporting.wrap td.questions-table{text-align:right}.llms-reporting.wrap td.questions-table .correct,.llms-reporting.wrap td.questions-table .question,.llms-reporting.wrap td.questions-table .selected{text-align:right;max-width:300px}.llms-reporting.wrap td.questions-table .correct img,.llms-reporting.wrap td.questions-table .question img,.llms-reporting.wrap td.questions-table .selected img{height:auto;max-width:64px}.llms-reporting.wrap table.quiz-attempts{margin-bottom:40px}.llms-reporting.wrap.tab--students .llms-options-page-contents #llms-award-certificate-wrapper .components-button.is-secondary{background:#e1e1e1;border-radius:8px;-webkit-box-shadow:none;box-shadow:none;color:#414141;font-size:13px;font-weight:700;height:auto;padding:8px 14px}.llms-reporting.wrap.tab--enrollments .llms-nav-tab-wrapper.llms-nav-secondary,.llms-reporting.wrap.tab--sales .llms-nav-tab-wrapper.llms-nav-secondary{margin-bottom:0}.llms-reporting.wrap.tab--enrollments .llms-options-page-contents,.llms-reporting.wrap.tab--sales .llms-options-page-contents{-webkit-box-shadow:none;box-shadow:none;background:none;margin-top:20px;padding:0}.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form,.llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:center;align-self:center;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:13px;gap:5px}.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form label,.llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form label{font-weight:700}.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form input,.llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form input{border:0;font-size:13px;margin:0;padding:0 4px;vertical-align:middle;width:110px}.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form .select2-container input,.llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form .select2-container input{width:100% !important}.llms-reporting.wrap.tab--enrollments .button.small,.llms-reporting.wrap.tab--sales .button.small{height:23px;line-height:23px}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters,.llms-reporting.wrap.tab--sales .llms-analytics-filters{display:none}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-inside-wrap,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-inside-wrap{background-color:#fff;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);margin:-20px 10px 20px 10px;padding:20px}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:0}@media only screen and (min-width: 782px){.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item label,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item label{display:block;font-weight:700;margin:0 0 5px 0}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item .select2-selection__rendered,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item .select2-selection__rendered{word-wrap:break-word;text-overflow:inherit;white-space:normal}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p,.llms-reporting.wrap.tab--sales .llms-analytics-filters p{margin:0;text-align:left}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p .llms-button-primary,.llms-reporting.wrap.tab--sales .llms-analytics-filters p .llms-button-primary{display:inline-block}.llms-reporting.wrap .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap{width:160px}.llms-charts-wrapper{background-color:#fff;border:1px solid #dedede;border-radius:12px;-webkit-box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);padding:20px}.llms-reporting-tab h1,.llms-reporting-tab h2,.llms-reporting-tab h3,.llms-reporting-tab h4,.llms-reporting-tab h5,.llms-reporting-tab h6{margin:0}.llms-reporting-tab h1 a,.llms-reporting-tab h2 a,.llms-reporting-tab h3 a,.llms-reporting-tab h4 a,.llms-reporting-tab h5 a,.llms-reporting-tab h6 a{color:#466dd8;text-decoration:none}.llms-reporting-tab h1 a:hover,.llms-reporting-tab h2 a:hover,.llms-reporting-tab h3 a:hover,.llms-reporting-tab h4 a:hover,.llms-reporting-tab h5 a:hover,.llms-reporting-tab h6 a:hover{color:#466dd8}.llms-reporting-tab h2{font-size:22px;line-height:1.5}.llms-reporting-tab h2.llms-table-title{margin-bottom:20px}.llms-reporting-tab h5{font-size:15px;line-height:1.5}.llms-reporting-tab .llms-reporting-body{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);margin:20px auto;padding:0}.llms-reporting-tab .llms-reporting-body .llms-reporting-stab{padding:30px}.llms-reporting-tab .llms-reporting-body .llms-reporting-stab .llms-table-header{margin:0}.llms-reporting-tab .llms-reporting-body .llms-gb-tab{padding:30px}.llms-reporting-tab .llms-reporting-body .llms-reporting-header{padding:30px;margin:0}.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img{border-radius:50%;display:inline-block;margin-left:10px;overflow:hidden;vertical-align:middle}.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img img{display:block;max-height:64px;width:auto}.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-info{display:inline-block;vertical-align:middle}.llms-reporting-breadcrumbs{margin:0;padding:0}.llms-reporting-breadcrumbs a{color:#466dd8;font-size:15px;text-decoration:none}.llms-reporting-breadcrumbs a:hover{color:#2b55cb}.llms-reporting-breadcrumbs a:after{content:" > ";color:#646970}.llms-reporting-breadcrumbs a:last-child{color:#000;font-weight:700}.llms-reporting-breadcrumbs a:last-child:after{display:none}#llms-students-table .name{text-align:right}.llms-reporting-tab-content{display:-webkit-box;display:-ms-flexbox;display:flex}.llms-reporting-tab-content>header:before,.llms-reporting-tab-content>header:after{content:" ";display:table}.llms-reporting-tab-content>header:after{clear:both}.llms-reporting-tab-content h3{margin-bottom:20px}.llms-reporting-tab-content .llms-reporting-tab-filter{float:left;position:relative;margin-left:.75em;width:180px;top:-3px}.llms-reporting-tab-content .llms-reporting-tab-main{-webkit-box-flex:3;-ms-flex:3;flex:3;max-width:75%}.llms-reporting-tab-content .llms-reporting-tab-side{-webkit-box-flex:1;-ms-flex:1;flex:1;margin-right:20px}.llms-reporting-tab-content>.llms-table-wrap{-webkit-box-flex:1;-ms-flex:1;flex:1}.llms-reporting-widgets:before,.llms-reporting-widgets:after{content:" ";display:table}.llms-reporting-widgets:after{clear:both}.llms-reporting-widget{border-top:4px solid #466dd8;background:#fafafa;margin-bottom:10px;padding:30px}.llms-reporting-widget:before,.llms-reporting-widget:after{content:" ";display:table}.llms-reporting-widget:after{clear:both}.llms-reporting-widget .fa{color:#999;float:right;font-size:32px;margin-left:10px}.llms-reporting-widget strong{color:#333;font-size:20px;line-height:1.2}.llms-reporting-widget.llms-reporting-student-address strong{line-height:1.1}.llms-reporting-widget sup,.llms-reporting-widget .llms-price-currency-symbol{font-size:75%;position:relative;top:-4px;vertical-align:baseline}.llms-reporting-widget small{font-size:13px}.llms-reporting-widget small.compare{margin-right:5px}.llms-reporting-widget small.compare.positive{color:#4d8d3c}.llms-reporting-widget small.compare.negative{color:#bb231c}.llms-reporting-event{border-right:4px solid #555;background:#fafafa;font-size:11px;line-height:1.2;margin-bottom:.75em;padding:10px}.llms-reporting-event:before,.llms-reporting-event:after{content:" ";display:table}.llms-reporting-event:after{clear:both}.llms-reporting-event.color--blue{border-right-color:#466dd8}.llms-reporting-event.color--green,.llms-reporting-event._enrollment_trigger,.llms-reporting-event._is_complete.yes{border-right-color:#4d8d3c}.llms-reporting-event.color--purple,.llms-reporting-event._status.enrolled{border-right-color:#845ef7}.llms-reporting-event.color--red,.llms-reporting-event._status.expired,.llms-reporting-event._status.cancelled{border-right-color:#bb231c}.llms-reporting-event.color--orange,.llms-reporting-event._achievement_earned,.llms-reporting-event._certificate_earned,.llms-reporting-event._email_sent{border-right-color:#c05621}.llms-reporting-event time{color:#888}.llms-reporting-event .llms-student-avatar{margin-right:10px;float:left}.llms-reporting-event a{text-decoration:none;color:inherit}@media only screen and (min-width: 782px){.llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary{margin-right:0;margin-left:0}}.llms-quiz-attempt-results{margin:0;padding:0;list-style-type:none}.llms-quiz-attempt-results .llms-quiz-attempt-question{background:#efefef;border-radius:6px;margin:0 0 15px;position:relative;list-style-type:none}.llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer{color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:15px 15px 15px 35px;text-decoration:none}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct,.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect{background:rgba(192,86,33,.2)}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon,.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon{background-color:#c05621}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct{background:rgba(77,141,60,.15)}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon{background-color:#4d8d3c}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect{background:rgba(187,35,28,.15)}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon{background-color:#bb231c}.llms-quiz-attempt-results .llms-quiz-attempt-question pre{overflow:auto}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title{font-size:22px;margin:0;line-height:1.4}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points{line-height:1.4}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip{position:absolute;left:-12px;top:-2px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon{color:rgba(255,255,255,.65);border-radius:50%;font-size:30px;height:40px;line-height:40px;text-align:center;width:40px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main{display:none;padding:0 15px 15px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label{font-weight:700;margin:0 0 10px;padding:0}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers{margin:0;padding:0}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer{padding:0;margin:0 30px 0 0}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child{list-style-type:none;margin-right:0}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img{height:auto;max-width:200px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section{border-top:2px solid rgba(255,255,255,.5);margin-top:20px;padding-top:20px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child{border-top:none;margin-top:0;padding-top:0}.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers,.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers{list-style-type:none;margin:0;padding:0}.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer,.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer{display:inline-block;list-style-type:none;margin:0;padding:5px}.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed{opacity:.5}.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title{font-style:italic;font-weight:normal}.wrap.llms-reporting .llms-inside-wrap,.wrap.lifterlms-settings .llms-inside-wrap,.wrap.llms-status .llms-inside-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 auto}.wrap.llms-reporting .llms-inside-wrap .llms-nav-text,.wrap.lifterlms-settings .llms-inside-wrap .llms-nav-text,.wrap.llms-status .llms-inside-wrap .llms-nav-text{margin:0 auto}.wrap.llms-reporting .llms-subheader .llms-save,.wrap.lifterlms-settings .llms-subheader .llms-save,.wrap.llms-status .llms-subheader .llms-save{-webkit-box-flex:1;-ms-flex:auto;flex:auto;text-align:left}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15);margin:0 -10px 20px -20px}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items{padding-right:0}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover{background:#f0f0f1;color:#222}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link{background:#fafafa;color:#466dd8;border-top-color:#466dd8}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link{font-weight:700}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link{border-top:2px solid rgba(0,0,0,0);padding:14px}.wrap.llms-reporting .llms-setting-group,.wrap.lifterlms-settings .llms-setting-group,.wrap.llms-status .llms-setting-group{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);margin:20px auto;padding:20px}.wrap.llms-reporting .llms-setting-group .llms-label,.wrap.lifterlms-settings .llms-setting-group .llms-label,.wrap.llms-status .llms-setting-group .llms-label{border-bottom:1px solid #efefef;font-weight:700;font-size:20px;padding:20px;margin:-20px -20px 20px}.wrap.llms-reporting .llms-setting-group .llms-label .llms-button-primary,.wrap.lifterlms-settings .llms-setting-group .llms-label .llms-button-primary,.wrap.llms-status .llms-setting-group .llms-label .llms-button-primary{margin-right:10px}.wrap.llms-reporting .llms-setting-group .llms-help-tooltip .dashicons,.wrap.lifterlms-settings .llms-setting-group .llms-help-tooltip .dashicons,.wrap.llms-status .llms-setting-group .llms-help-tooltip .dashicons{color:#444;cursor:help}.wrap.llms-reporting .llms-setting-group .form-table,.wrap.lifterlms-settings .llms-setting-group .form-table,.wrap.llms-status .llms-setting-group .form-table{margin:0}.wrap.llms-reporting .llms-setting-group .form-table tr:first-child .llms-subtitle,.wrap.lifterlms-settings .llms-setting-group .form-table tr:first-child .llms-subtitle,.wrap.llms-status .llms-setting-group .form-table tr:first-child .llms-subtitle{margin-top:0}.wrap.llms-reporting .llms-setting-group td[colspan="2"],.wrap.lifterlms-settings .llms-setting-group td[colspan="2"],.wrap.llms-status .llms-setting-group td[colspan="2"]{padding-top:0;padding-right:0}.wrap.llms-reporting .llms-setting-group tr.llms-disabled-field,.wrap.lifterlms-settings .llms-setting-group tr.llms-disabled-field,.wrap.llms-status .llms-setting-group tr.llms-disabled-field{opacity:.5;pointer-events:none}.wrap.llms-reporting .llms-setting-group p,.wrap.lifterlms-settings .llms-setting-group p,.wrap.llms-status .llms-setting-group p{font-size:14px}.wrap.llms-reporting .llms-setting-group input[type=text],.wrap.llms-reporting .llms-setting-group input[type=password],.wrap.llms-reporting .llms-setting-group input[type=datetime],.wrap.llms-reporting .llms-setting-group input[type=datetime-local],.wrap.llms-reporting .llms-setting-group input[type=date],.wrap.llms-reporting .llms-setting-group input[type=month],.wrap.llms-reporting .llms-setting-group input[type=time],.wrap.llms-reporting .llms-setting-group input[type=week],.wrap.llms-reporting .llms-setting-group input[type=number],.wrap.llms-reporting .llms-setting-group input[type=email],.wrap.llms-reporting .llms-setting-group input[type=url],.wrap.llms-reporting .llms-setting-group input[type=search],.wrap.llms-reporting .llms-setting-group input[type=tel],.wrap.llms-reporting .llms-setting-group input[type=color],.wrap.llms-reporting .llms-setting-group select,.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area),.wrap.lifterlms-settings .llms-setting-group input[type=text],.wrap.lifterlms-settings .llms-setting-group input[type=password],.wrap.lifterlms-settings .llms-setting-group input[type=datetime],.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local],.wrap.lifterlms-settings .llms-setting-group input[type=date],.wrap.lifterlms-settings .llms-setting-group input[type=month],.wrap.lifterlms-settings .llms-setting-group input[type=time],.wrap.lifterlms-settings .llms-setting-group input[type=week],.wrap.lifterlms-settings .llms-setting-group input[type=number],.wrap.lifterlms-settings .llms-setting-group input[type=email],.wrap.lifterlms-settings .llms-setting-group input[type=url],.wrap.lifterlms-settings .llms-setting-group input[type=search],.wrap.lifterlms-settings .llms-setting-group input[type=tel],.wrap.lifterlms-settings .llms-setting-group input[type=color],.wrap.lifterlms-settings .llms-setting-group select,.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area),.wrap.llms-status .llms-setting-group input[type=text],.wrap.llms-status .llms-setting-group input[type=password],.wrap.llms-status .llms-setting-group input[type=datetime],.wrap.llms-status .llms-setting-group input[type=datetime-local],.wrap.llms-status .llms-setting-group input[type=date],.wrap.llms-status .llms-setting-group input[type=month],.wrap.llms-status .llms-setting-group input[type=time],.wrap.llms-status .llms-setting-group input[type=week],.wrap.llms-status .llms-setting-group input[type=number],.wrap.llms-status .llms-setting-group input[type=email],.wrap.llms-status .llms-setting-group input[type=url],.wrap.llms-status .llms-setting-group input[type=search],.wrap.llms-status .llms-setting-group input[type=tel],.wrap.llms-status .llms-setting-group input[type=color],.wrap.llms-status .llms-setting-group select,.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area){width:50%}.wrap.llms-reporting .llms-setting-group input[type=text].medium,.wrap.llms-reporting .llms-setting-group input[type=password].medium,.wrap.llms-reporting .llms-setting-group input[type=datetime].medium,.wrap.llms-reporting .llms-setting-group input[type=datetime-local].medium,.wrap.llms-reporting .llms-setting-group input[type=date].medium,.wrap.llms-reporting .llms-setting-group input[type=month].medium,.wrap.llms-reporting .llms-setting-group input[type=time].medium,.wrap.llms-reporting .llms-setting-group input[type=week].medium,.wrap.llms-reporting .llms-setting-group input[type=number].medium,.wrap.llms-reporting .llms-setting-group input[type=email].medium,.wrap.llms-reporting .llms-setting-group input[type=url].medium,.wrap.llms-reporting .llms-setting-group input[type=search].medium,.wrap.llms-reporting .llms-setting-group input[type=tel].medium,.wrap.llms-reporting .llms-setting-group input[type=color].medium,.wrap.llms-reporting .llms-setting-group select.medium,.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).medium,.wrap.lifterlms-settings .llms-setting-group input[type=text].medium,.wrap.lifterlms-settings .llms-setting-group input[type=password].medium,.wrap.lifterlms-settings .llms-setting-group input[type=datetime].medium,.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].medium,.wrap.lifterlms-settings .llms-setting-group input[type=date].medium,.wrap.lifterlms-settings .llms-setting-group input[type=month].medium,.wrap.lifterlms-settings .llms-setting-group input[type=time].medium,.wrap.lifterlms-settings .llms-setting-group input[type=week].medium,.wrap.lifterlms-settings .llms-setting-group input[type=number].medium,.wrap.lifterlms-settings .llms-setting-group input[type=email].medium,.wrap.lifterlms-settings .llms-setting-group input[type=url].medium,.wrap.lifterlms-settings .llms-setting-group input[type=search].medium,.wrap.lifterlms-settings .llms-setting-group input[type=tel].medium,.wrap.lifterlms-settings .llms-setting-group input[type=color].medium,.wrap.lifterlms-settings .llms-setting-group select.medium,.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).medium,.wrap.llms-status .llms-setting-group input[type=text].medium,.wrap.llms-status .llms-setting-group input[type=password].medium,.wrap.llms-status .llms-setting-group input[type=datetime].medium,.wrap.llms-status .llms-setting-group input[type=datetime-local].medium,.wrap.llms-status .llms-setting-group input[type=date].medium,.wrap.llms-status .llms-setting-group input[type=month].medium,.wrap.llms-status .llms-setting-group input[type=time].medium,.wrap.llms-status .llms-setting-group input[type=week].medium,.wrap.llms-status .llms-setting-group input[type=number].medium,.wrap.llms-status .llms-setting-group input[type=email].medium,.wrap.llms-status .llms-setting-group input[type=url].medium,.wrap.llms-status .llms-setting-group input[type=search].medium,.wrap.llms-status .llms-setting-group input[type=tel].medium,.wrap.llms-status .llms-setting-group input[type=color].medium,.wrap.llms-status .llms-setting-group select.medium,.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).medium{width:30%}.wrap.llms-reporting .llms-setting-group input[type=text].small,.wrap.llms-reporting .llms-setting-group input[type=password].small,.wrap.llms-reporting .llms-setting-group input[type=datetime].small,.wrap.llms-reporting .llms-setting-group input[type=datetime-local].small,.wrap.llms-reporting .llms-setting-group input[type=date].small,.wrap.llms-reporting .llms-setting-group input[type=month].small,.wrap.llms-reporting .llms-setting-group input[type=time].small,.wrap.llms-reporting .llms-setting-group input[type=week].small,.wrap.llms-reporting .llms-setting-group input[type=number].small,.wrap.llms-reporting .llms-setting-group input[type=email].small,.wrap.llms-reporting .llms-setting-group input[type=url].small,.wrap.llms-reporting .llms-setting-group input[type=search].small,.wrap.llms-reporting .llms-setting-group input[type=tel].small,.wrap.llms-reporting .llms-setting-group input[type=color].small,.wrap.llms-reporting .llms-setting-group select.small,.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).small,.wrap.lifterlms-settings .llms-setting-group input[type=text].small,.wrap.lifterlms-settings .llms-setting-group input[type=password].small,.wrap.lifterlms-settings .llms-setting-group input[type=datetime].small,.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].small,.wrap.lifterlms-settings .llms-setting-group input[type=date].small,.wrap.lifterlms-settings .llms-setting-group input[type=month].small,.wrap.lifterlms-settings .llms-setting-group input[type=time].small,.wrap.lifterlms-settings .llms-setting-group input[type=week].small,.wrap.lifterlms-settings .llms-setting-group input[type=number].small,.wrap.lifterlms-settings .llms-setting-group input[type=email].small,.wrap.lifterlms-settings .llms-setting-group input[type=url].small,.wrap.lifterlms-settings .llms-setting-group input[type=search].small,.wrap.lifterlms-settings .llms-setting-group input[type=tel].small,.wrap.lifterlms-settings .llms-setting-group input[type=color].small,.wrap.lifterlms-settings .llms-setting-group select.small,.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).small,.wrap.llms-status .llms-setting-group input[type=text].small,.wrap.llms-status .llms-setting-group input[type=password].small,.wrap.llms-status .llms-setting-group input[type=datetime].small,.wrap.llms-status .llms-setting-group input[type=datetime-local].small,.wrap.llms-status .llms-setting-group input[type=date].small,.wrap.llms-status .llms-setting-group input[type=month].small,.wrap.llms-status .llms-setting-group input[type=time].small,.wrap.llms-status .llms-setting-group input[type=week].small,.wrap.llms-status .llms-setting-group input[type=number].small,.wrap.llms-status .llms-setting-group input[type=email].small,.wrap.llms-status .llms-setting-group input[type=url].small,.wrap.llms-status .llms-setting-group input[type=search].small,.wrap.llms-status .llms-setting-group input[type=tel].small,.wrap.llms-status .llms-setting-group input[type=color].small,.wrap.llms-status .llms-setting-group select.small,.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).small{width:20%}.wrap.llms-reporting .llms-setting-group input[type=text].tiny,.wrap.llms-reporting .llms-setting-group input[type=password].tiny,.wrap.llms-reporting .llms-setting-group input[type=datetime].tiny,.wrap.llms-reporting .llms-setting-group input[type=datetime-local].tiny,.wrap.llms-reporting .llms-setting-group input[type=date].tiny,.wrap.llms-reporting .llms-setting-group input[type=month].tiny,.wrap.llms-reporting .llms-setting-group input[type=time].tiny,.wrap.llms-reporting .llms-setting-group input[type=week].tiny,.wrap.llms-reporting .llms-setting-group input[type=number].tiny,.wrap.llms-reporting .llms-setting-group input[type=email].tiny,.wrap.llms-reporting .llms-setting-group input[type=url].tiny,.wrap.llms-reporting .llms-setting-group input[type=search].tiny,.wrap.llms-reporting .llms-setting-group input[type=tel].tiny,.wrap.llms-reporting .llms-setting-group input[type=color].tiny,.wrap.llms-reporting .llms-setting-group select.tiny,.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).tiny,.wrap.lifterlms-settings .llms-setting-group input[type=text].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=password].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=datetime].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=date].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=month].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=time].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=week].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=number].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=email].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=url].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=search].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=tel].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=color].tiny,.wrap.lifterlms-settings .llms-setting-group select.tiny,.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).tiny,.wrap.llms-status .llms-setting-group input[type=text].tiny,.wrap.llms-status .llms-setting-group input[type=password].tiny,.wrap.llms-status .llms-setting-group input[type=datetime].tiny,.wrap.llms-status .llms-setting-group input[type=datetime-local].tiny,.wrap.llms-status .llms-setting-group input[type=date].tiny,.wrap.llms-status .llms-setting-group input[type=month].tiny,.wrap.llms-status .llms-setting-group input[type=time].tiny,.wrap.llms-status .llms-setting-group input[type=week].tiny,.wrap.llms-status .llms-setting-group input[type=number].tiny,.wrap.llms-status .llms-setting-group input[type=email].tiny,.wrap.llms-status .llms-setting-group input[type=url].tiny,.wrap.llms-status .llms-setting-group input[type=search].tiny,.wrap.llms-status .llms-setting-group input[type=tel].tiny,.wrap.llms-status .llms-setting-group input[type=color].tiny,.wrap.llms-status .llms-setting-group select.tiny,.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).tiny{width:10%}@media only screen and (min-width: 782px){.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link{background:#fff}}.wrap.llms-reporting #llms-mailhawk-connect,.wrap.lifterlms-settings #llms-mailhawk-connect,.wrap.llms-status #llms-mailhawk-connect{height:auto;margin:0 0 6px;position:relative}.wrap.llms-reporting #llms-mailhawk-connect .dashicons,.wrap.lifterlms-settings #llms-mailhawk-connect .dashicons,.wrap.llms-status #llms-mailhawk-connect .dashicons{margin:-4px 0 0 4px;vertical-align:middle}.wrap.llms-reporting #llms-sendwp-connect,.wrap.lifterlms-settings #llms-sendwp-connect,.wrap.llms-status #llms-sendwp-connect{height:auto;margin:0 0 6px;position:relative}.wrap.llms-reporting #llms-sendwp-connect .fa,.wrap.lifterlms-settings #llms-sendwp-connect .fa,.wrap.llms-status #llms-sendwp-connect .fa{margin-left:4px}@media only screen and (min-width: 782px){.wrap.lifterlms-settings .llms-subheader{height:40px;position:sticky;top:32px}.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary{margin:0 -22px 20px -20px}.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items{padding-right:10px}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary{margin:0 -22px 20px -20px}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items{padding-right:10px}.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary{margin:0 -22px 20px -20px}.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items{padding-right:10px}}.wrap.llms-dashboard .llms-inside-wrap{padding-top:30px}.wrap.llms-dashboard #poststuff h2{padding:12px 20px}.wrap.llms-dashboard .llms-dashboard-activity h2{font-size:20px;font-weight:700;line-height:1.5;margin-top:0;text-align:center}.wrap.llms-dashboard .postbox{background-color:#fff;border:none;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.wrap.llms-dashboard .postbox .postbox-header{border-bottom-color:#efefef}.wrap.llms-dashboard .postbox .inside{padding:20px}.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap{margin-top:0}.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item{margin-top:0}.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item p{text-align:right}.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item footer.llms-actions{padding-top:0}.wrap.llms-dashboard #llms_dashboard_addons p{text-align:center}.wrap.llms-dashboard #llms_dashboard_addons p .llms-button-primary{display:inline-block;margin-top:15px}.wrap.llms-dashboard #llms_dashboard_quick_links ul{list-style:disc;margin:5px 20px 0 0}.wrap.llms-dashboard #llms_dashboard_quick_links ul li{font-size:15px;line-height:1.5}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links{display:grid;grid-template-columns:1fr;grid-gap:30px}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links a{display:inline-block}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list h3{margin:0 0 10px 0}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul{margin-bottom:20px}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul.llms-checklist{list-style:none;margin-right:0}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa{text-align:center;width:16px}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-check{color:#008a20}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-times{color:#d63638}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-primary,.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-secondary,.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-action{display:block;text-align:center}@media only screen and (min-width: 782px){.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links{grid-template-columns:1fr 1fr 1fr}}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links{display:grid;grid-template-columns:1fr 1fr;grid-gap:20px}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3{margin:0}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 .dashicons{color:#aaa}@media only screen and (min-width: 782px){.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links{grid-template-columns:1fr 1fr 1fr 1fr}}.wrap.llms-dashboard #llms_dashboard_blog ul,.wrap.llms-dashboard #llms_dashboard_podcast ul{margin:0}.wrap.llms-dashboard #llms_dashboard_blog ul li,.wrap.llms-dashboard #llms_dashboard_podcast ul li{margin:0 0 15px 0}.wrap.llms-dashboard #llms_dashboard_blog ul li a,.wrap.llms-dashboard #llms_dashboard_podcast ul li a{display:block}.wrap.llms-dashboard #llms_dashboard_blog p,.wrap.llms-dashboard #llms_dashboard_podcast p{margin:15px 0;text-align:center}.wrap.llms-dashboard #llms_dashboard_blog p a,.wrap.llms-dashboard #llms_dashboard_podcast p a{display:inline-block}#llms_dashboard_widget .inside{margin:0;padding-bottom:8px}#llms_dashboard_widget .llms-dashboard-widget-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-top:12px}#llms_dashboard_widget .activity-block{padding-bottom:8px;border-color:#e8e8e8}#llms_dashboard_widget h3{margin-bottom:0}#llms_dashboard_widget .llms-charts-wrapper{display:none}#llms_dashboard_widget .llms-widget-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:8px;width:100%;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:4px 0}#llms_dashboard_widget .llms-widget-row:before,#llms_dashboard_widget .llms-widget-row:after{display:none}#llms_dashboard_widget .llms-widget-1-4{padding:0;-webkit-box-flex:1;-ms-flex:1;flex:1}#llms_dashboard_widget .llms-widget{padding:8px 8px 12px;margin:0;border-radius:6px;border:1px solid #e8e8e8;-webkit-box-shadow:0px 2px 4px #f6f7f7;box-shadow:0px 2px 4px #f6f7f7;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}#llms_dashboard_widget .llms-label{font-size:14px;width:100%;-ms-flex-item-align:start;align-self:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#llms_dashboard_widget .llms-widget-content{font-size:20px;margin:0}#llms_dashboard_widget .llms-widget-info-toggle{display:none}#llms_dashboard_widget a{border:0}#llms_dashboard_widget .subsubsub{color:#dcdcde}.llms-dashboard-widget-feed{margin:0 -12px;padding:0;background-color:#f6f7f7}.llms-dashboard-widget-feed li{margin:0;padding:8px 12px;border-bottom:1px solid #e8e8e8}.llms-dashboard-widget-feed span{display:block}.wrap.llms-resources .llms-inside-wrap{padding-top:30px}.wrap.llms-resources #poststuff #post-body.columns-2{margin-left:350px}.wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables{width:330px}@media only screen and (max-width: 850px){.wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables{width:auto}}.wrap.llms-resources #poststuff #postbox-container-1{float:left;margin-left:-350px;width:330px}.wrap.llms-resources #poststuff h2{padding:12px 20px}.wrap.llms-resources #poststuff .postbox{background-color:#fff;border:none;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.wrap.llms-resources #poststuff .postbox .postbox-header{border-bottom-color:#efefef}.wrap.llms-resources #poststuff .postbox .inside{margin:0;padding:20px}.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video p{font-size:15px;line-height:1.5;margin:0 0 40px 0}.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container{height:0;overflow:hidden;padding-top:30px;padding-bottom:56.25%;position:relative}.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container iframe,.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container object,.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container embed{right:0;height:100%;position:absolute;top:0;width:100%}.wrap.llms-resources #llms_dashboard_getting_started ul{margin:0 0 20px 0}.wrap.llms-resources #llms_dashboard_getting_started ul li{font-size:15px;line-height:1.5;margin-bottom:15px}.wrap.llms-resources #llms_dashboard_getting_started .llms-button-primary{display:block;margin-top:auto;max-width:300px;text-align:center}.wrap.llms-resources #llms_dashboard_resource_links ul{list-style:disc;margin:5px 20px 0 0}.wrap.llms-resources #llms_dashboard_resource_links ul li{font-size:15px;line-height:1.5}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links{display:grid;grid-template-columns:1fr;grid-gap:60px}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links a{display:inline-block}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3{margin:0 0 10px 0}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 .dashicons{color:#aaa}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list ul{margin-bottom:20px}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-primary,.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-secondary,.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-action{display:block;margin-top:auto;max-width:300px;text-align:center}@media only screen and (min-width: 782px){.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links{grid-template-columns:1fr 1fr 1fr}}.llms-remarks .llms-remarks-field{height:120px;width:100%}.llms-remarks input[type=number]{width:60px}button[name=llms_quiz_attempt_action] .save{display:none}button[name=llms_quiz_attempt_action].grading .default{display:none}button[name=llms_quiz_attempt_action].grading .save{display:inline}.llms-form-fields{-webkit-box-sizing:border-box;box-sizing:border-box}.llms-form-fields *{-webkit-box-sizing:border-box;box-sizing:border-box}.llms-form-fields.flush .llms-form-field{padding:0 0 20px}.llms-form-fields label:not(.llms-field-html label){font-weight:700}.llms-form-fields .wp-block-columns,.llms-form-fields .wp-block-column{margin-bottom:0}.llms-form-heading{padding:0 10px 10px}.llms-form-field{float:right;padding:0 10px 20px;position:relative;width:100%}.llms-form-field label:empty:after{content:" "}.llms-form-field [type=text],.llms-form-field [type=password],.llms-form-field [type=email],.llms-form-field [type=url],.llms-form-field [type=tel],.llms-form-field [type=number]{background-color:#fefefe;background-clip:padding-box;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;line-height:1;padding:8px 12px;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;width:100%}.llms-form-field input:focus,.llms-form-field input:focus-visible{border-color:#6888df;outline:thin solid}.llms-form-field select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-color:#fefefe;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#010101;padding:8px 12px;margin:0;width:100%;font-family:inherit;font-size:16px;cursor:inherit;line-height:1.6;z-index:1;outline:none;background-repeat:no-repeat;background-image:linear-gradient(-45deg, transparent 50%, currentcolor 50%),linear-gradient(-135deg, currentcolor 50%, transparent 50%);background-position:left 15px top 1.3rem,left 10px top 1.3rem;background-size:5px 5px,5px 5px}.llms-form-field select::-ms-expand{display:none}.llms-form-field select:focus{border:1px solid #6888df;outline:thin solid}.llms-form-field.valid input[type=date],.llms-form-field.valid input[type=time],.llms-form-field.valid input[type=datetime-local],.llms-form-field.valid input[type=week],.llms-form-field.valid input[type=month],.llms-form-field.valid input[type=text],.llms-form-field.valid input[type=email],.llms-form-field.valid input[type=url],.llms-form-field.valid input[type=password],.llms-form-field.valid input[type=search],.llms-form-field.valid input[type=tel],.llms-form-field.valid input[type=number],.llms-form-field.valid textarea,.llms-form-field.valid select{background:rgba(131,195,115,.3);border-color:#83c373}.llms-form-field.error input[type=date],.llms-form-field.error input[type=time],.llms-form-field.error input[type=datetime-local],.llms-form-field.error input[type=week],.llms-form-field.error input[type=month],.llms-form-field.error input[type=text],.llms-form-field.error input[type=email],.llms-form-field.error input[type=url],.llms-form-field.error input[type=password],.llms-form-field.error input[type=search],.llms-form-field.error input[type=tel],.llms-form-field.error input[type=number],.llms-form-field.error textarea,.llms-form-field.error select,.llms-form-field.invalid input[type=date],.llms-form-field.invalid input[type=time],.llms-form-field.invalid input[type=datetime-local],.llms-form-field.invalid input[type=week],.llms-form-field.invalid input[type=month],.llms-form-field.invalid input[type=text],.llms-form-field.invalid input[type=email],.llms-form-field.invalid input[type=url],.llms-form-field.invalid input[type=password],.llms-form-field.invalid input[type=search],.llms-form-field.invalid input[type=tel],.llms-form-field.invalid input[type=number],.llms-form-field.invalid textarea,.llms-form-field.invalid select{background:rgba(187,35,28,.3);border-color:#bb231c}.llms-form-field.llms-visually-hidden-field{display:none}.llms-form-field.align-right{text-align:left}@media screen and (min-width: 600px){.llms-form-field.llms-cols-1{width:8.3333333333%}.llms-form-field.llms-cols-2{width:16.6666666667%}.llms-form-field.llms-cols-3{width:25%}.llms-form-field.llms-cols-4{width:33.3333333333%}.llms-form-field.llms-cols-5{width:41.6666666667%}.llms-form-field.llms-cols-6{width:50%}.llms-form-field.llms-cols-7{width:58.3333333333%}.llms-form-field.llms-cols-8{width:66.6666666667%}.llms-form-field.llms-cols-9{width:75%}.llms-form-field.llms-cols-10{width:83.3333333333%}.llms-form-field.llms-cols-11{width:91.6666666667%}.llms-form-field.llms-cols-12{width:100%}}.llms-form-field.type-hidden{padding:0}.llms-form-field.type-radio input,.llms-form-field.type-radio label,.llms-form-field.type-checkbox input,.llms-form-field.type-checkbox label{display:inline-block;width:auto}.llms-form-field.type-radio input,.llms-form-field.type-checkbox input{margin-left:10px}.llms-form-field.type-radio label+.llms-description,.llms-form-field.type-checkbox label+.llms-description{display:block}.llms-form-field.type-radio:not(.is-group) input[type=radio]{position:absolute;opacity:0;visibility:none}.llms-form-field.type-radio:not(.is-group) label:before{background:#fafafa;background-position:-24px 0;background-repeat:no-repeat;border-radius:50%;-webkit-box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.35) 0 0 0 1px;box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.35) 0 0 0 1px;content:"";cursor:pointer;display:inline-block;height:22px;margin-left:5px;position:relative;-webkit-transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);top:-3px;vertical-align:middle;width:22px;z-index:2}.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked+label:before{-webkit-transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);background-position:100% 0;background-image:radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%)}.llms-form-field .llms-input-group{margin-top:5px}.llms-form-field .llms-input-group .llms-form-field{padding:0 5px 5px 0}.llms-form-field.type-reset button:not(.auto),.llms-form-field.type-button button:not(.auto),.llms-form-field.type-submit button:not(.auto){width:100%}.llms-form-field .llms-description{font-size:14px;font-style:italic;line-height:18px}.llms-form-field .llms-required{color:#bb231c;margin-right:4px}.llms-form-field input,.llms-form-field textarea,.llms-form-field select{width:100%;margin-bottom:5px}.llms-form-field .select2-container .select2-selection--single{height:auto;padding:4px 6px}.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%}.llms-password-strength-meter{border:1px solid #dadada;display:none;font-size:10px;margin-top:-10px;padding:1px;position:relative;text-align:center}.llms-password-strength-meter:before{bottom:0;content:"";right:0;position:absolute;top:0;-webkit-transition:width .4s ease;transition:width .4s ease}.llms-password-strength-meter.mismatch,.llms-password-strength-meter.too-short,.llms-password-strength-meter.very-weak{border-color:#e35b5b}.llms-password-strength-meter.mismatch:before,.llms-password-strength-meter.too-short:before,.llms-password-strength-meter.very-weak:before{background:rgba(227,91,91,.25);width:25%}.llms-password-strength-meter.too-short:before{width:0}.llms-password-strength-meter.weak{border-color:#f78b53}.llms-password-strength-meter.weak:before{background:rgba(247,139,83,.25);width:50%}.llms-password-strength-meter.medium{border-color:#ffc733}.llms-password-strength-meter.medium:before{background:rgba(255,199,51,.25);width:75%}.llms-password-strength-meter.strong{border-color:#83c373}.llms-password-strength-meter.strong:before{background:rgba(131,195,115,.25);width:100%}.llms-password-strength-meter+.llms-description{display:block}/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:"FontAwesome";src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-right:0;margin-right:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;right:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{right:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:right}.fa-pull-right{float:left}.fa.fa-pull-left{margin-left:.3em}.fa.fa-pull-right{margin-right:.3em}.pull-right{float:left}.pull-left{float:right}.fa.pull-left{margin-left:.3em}.fa.pull-right{margin-right:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(-270deg);transform:rotate(-270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;right:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/assets/css/admin-wizard-rtl.css b/assets/css/admin-wizard-rtl.css
new file mode 100644
index 0000000000..45f47f12f1
--- /dev/null
+++ b/assets/css/admin-wizard-rtl.css
@@ -0,0 +1,295 @@
+#wpadminbar, #adminmenumain, #wpfooter {
+ display: none;
+}
+
+#llms-setup-wizard {
+ background-color: #F0F0F1;
+ height: 100%;
+ right: 0;
+ overflow: scroll;
+ position: fixed;
+ top: 0;
+ width: 100%;
+}
+
+.llms-setup-wrapper {
+ margin: 30px auto;
+ max-width: 640px;
+}
+
+#llms-logo {
+ text-align: center;
+}
+#llms-logo a {
+ display: inline-block;
+}
+#llms-logo img {
+ max-width: 200px;
+}
+
+.llms-setup-content {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ padding: 30px;
+}
+.llms-setup-content h1, .llms-setup-content h2, .llms-setup-content h3, .llms-setup-content h4, .llms-setup-content h5, .llms-setup-content h6 {
+ color: #3C434A;
+}
+.llms-setup-content a:not(.llms-button-primary):not(.llms-button-secondary) {
+ color: #466dd8;
+}
+.llms-setup-content p, .llms-setup-content li {
+ color: #3C434A;
+ font-size: 16px;
+}
+.llms-setup-content p.error {
+ color: #bb231c;
+ background: rgba(187, 35, 28, 0.1);
+ border: 1px solid currentColor;
+ padding: 1em;
+ border-radius: 4px;
+ margin: 1.5em 0 0;
+ font-size: 15px;
+ text-align: right;
+}
+.llms-setup-content label {
+ font-weight: 500;
+}
+.llms-setup-content table {
+ border-bottom: 1px solid #f1f1f1;
+ border-collapse: collapse;
+ width: 100%;
+}
+.llms-setup-content td {
+ border-top: 1px solid #f1f1f1;
+}
+.llms-setup-content td:first-child {
+ padding-left: 10px;
+ width: 33%;
+}
+.llms-setup-content td:first-child a {
+ font-size: 16px;
+ font-weight: 500;
+}
+.llms-setup-content td:first-child i {
+ display: block;
+ font-size: 13px;
+ margin-top: 10px;
+}
+.llms-setup-content td:first-child i a {
+ font-size: 13px;
+}
+.llms-setup-content small {
+ font-size: small;
+}
+.llms-setup-content .has-checkbox-field {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: reverse;
+ -ms-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-line-pack: center;
+ align-content: center;
+ gap: 0.5em;
+ font-weight: normal;
+ font-size: 16px;
+}
+.llms-setup-content .has-checkbox-field input {
+ margin: 0;
+}
+.llms-setup-content label {
+ font-size: 16px;
+ display: block;
+ margin-bottom: 0.5em;
+}
+.llms-setup-content small + label {
+ margin-top: 1em;
+}
+.llms-setup-content [type=text] {
+ width: 100%;
+ clear: both;
+ margin: 0;
+ padding: 0.3em 0.6em;
+}
+.llms-setup-content .has-date-field {
+ font-size: 16px;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin-bottom: 0.5em;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 0.5em;
+}
+.llms-setup-content [type=date] {
+ padding: 0.3em 0.6em;
+}
+.llms-setup-content .is-hidden {
+ display: none;
+}
+
+.llms-setup-date-fields {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ gap: 1em;
+ padding-top: 2em;
+}
+
+.llms-setup-date-field {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+
+.llms-setup-actions {
+ margin-top: 2em;
+ text-align: left;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ gap: 1em;
+}
+.llms-setup-actions .llms-button-primary {
+ display: inline-block;
+}
+.llms-setup-actions .llms-button-primary:after {
+ content: "\f054";
+ font-family: "FontAwesome";
+ font-weight: 900;
+ padding-right: 10px;
+}
+
+.llms-exit-setup {
+ color: inherit !important;
+ margin-left: 10px;
+}
+.llms-exit-setup + .llms-button-primary,
+.llms-exit-setup + .llms-button-secondary {
+ margin-right: auto;
+}
+
+.llms-importing-msgs a {
+ color: #466dd8;
+}
+.llms-importing-msgs .llms-importing-msg {
+ display: none;
+ font-size: 14px;
+ font-style: italic;
+ text-align: left;
+}
+
+ul.llms-importable-courses {
+ border-bottom: 1px solid #f1f1f1;
+ display: block;
+}
+ul.llms-importable-courses li.llms-importable-course {
+ border-top: 1px solid #f1f1f1;
+ display: block;
+ margin: 0;
+ max-width: 100%;
+ padding: 20px 0 20px 40px;
+}
+ul.llms-importable-courses li.llms-importable-course h3 {
+ margin: 0;
+}
+ul.llms-importable-courses li.llms-importable-course p {
+ margin: 10px 0 0 0;
+}
+ul.llms-importable-courses li.llms-importable-course label {
+ font-weight: 400;
+}
+ul.llms-importable-courses li.llms-importable-course img {
+ float: right;
+ margin-left: 15px;
+ width: 22%;
+}
+ul.llms-importable-courses li.llms-importable-course .llms-switch {
+ float: left;
+ left: -40px;
+}
+ul.llms-importable-courses li.llms-importable-course .llms-switch input.llms-toggle-round:checked + label {
+ border-color: #466dd8;
+ background-color: #466dd8;
+}
+
+.llms-setup-progress {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin: 20px 0;
+}
+.llms-setup-progress li {
+ border-bottom: 4px solid #466dd8;
+ display: inline-block;
+ font-size: 14px;
+ padding-bottom: 10px;
+ position: relative;
+ text-align: center;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.llms-setup-progress li a {
+ color: #466dd8;
+ text-decoration: none;
+}
+.llms-setup-progress li:after {
+ background: #466dd8;
+ bottom: 0;
+ content: "";
+ border: 4px solid #466dd8;
+ border-radius: 100%;
+ height: 4px;
+ position: absolute;
+ right: 50%;
+ margin-right: -6px;
+ margin-bottom: -8px;
+ width: 4px;
+}
+.llms-setup-progress li.current {
+ font-weight: 700;
+}
+.llms-setup-progress li.current:after {
+ background: #fff;
+}
+.llms-setup-progress li.current ~ li {
+ border-bottom-color: #ccc;
+}
+.llms-setup-progress li.current ~ li:after {
+ background: #ccc;
+ border-color: #ccc;
+}
+.llms-setup-progress li.current ~ li a {
+ color: #bbb;
+}
+
+.llms-setup-wrapper [type=text].llms-datepicker {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ccc'%3E%3Cpath d='M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H64C28.7 64 0 92.7 0 128v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64h-40V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152V24zM48 192h352v256c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z'/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-position: left 8px center;
+ background-size: 16px 16px;
+ padding-left: 40px;
+}
diff --git a/assets/css/admin-wizard-rtl.min.css b/assets/css/admin-wizard-rtl.min.css
new file mode 100644
index 0000000000..f60cea21b8
--- /dev/null
+++ b/assets/css/admin-wizard-rtl.min.css
@@ -0,0 +1 @@
+#wpadminbar,#adminmenumain,#wpfooter{display:none}#llms-setup-wizard{background-color:#f0f0f1;height:100%;right:0;overflow:scroll;position:fixed;top:0;width:100%}.llms-setup-wrapper{margin:30px auto;max-width:640px}#llms-logo{text-align:center}#llms-logo a{display:inline-block}#llms-logo img{max-width:200px}.llms-setup-content{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);padding:30px}.llms-setup-content h1,.llms-setup-content h2,.llms-setup-content h3,.llms-setup-content h4,.llms-setup-content h5,.llms-setup-content h6{color:#3c434a}.llms-setup-content a:not(.llms-button-primary):not(.llms-button-secondary){color:#466dd8}.llms-setup-content p,.llms-setup-content li{color:#3c434a;font-size:16px}.llms-setup-content p.error{color:#bb231c;background:rgba(187,35,28,.1);border:1px solid currentColor;padding:1em;border-radius:4px;margin:1.5em 0 0;font-size:15px;text-align:right}.llms-setup-content label{font-weight:500}.llms-setup-content table{border-bottom:1px solid #f1f1f1;border-collapse:collapse;width:100%}.llms-setup-content td{border-top:1px solid #f1f1f1}.llms-setup-content td:first-child{padding-left:10px;width:33%}.llms-setup-content td:first-child a{font-size:16px;font-weight:500}.llms-setup-content td:first-child i{display:block;font-size:13px;margin-top:10px}.llms-setup-content td:first-child i a{font-size:13px}.llms-setup-content small{font-size:small}.llms-setup-content .has-checkbox-field{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;gap:.5em;font-weight:normal;font-size:16px}.llms-setup-content .has-checkbox-field input{margin:0}.llms-setup-content label{font-size:16px;display:block;margin-bottom:.5em}.llms-setup-content small+label{margin-top:1em}.llms-setup-content [type=text]{width:100%;clear:both;margin:0;padding:.3em .6em}.llms-setup-content .has-date-field{font-size:16px;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:.5em;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.5em}.llms-setup-content [type=date]{padding:.3em .6em}.llms-setup-content .is-hidden{display:none}.llms-setup-date-fields{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:1em;padding-top:2em}.llms-setup-date-field{-webkit-box-flex:1;-ms-flex:1;flex:1}.llms-setup-actions{margin-top:2em;text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1em}.llms-setup-actions .llms-button-primary{display:inline-block}.llms-setup-actions .llms-button-primary:after{content:"";font-family:"FontAwesome";font-weight:900;padding-right:10px}.llms-exit-setup{color:inherit !important;margin-left:10px}.llms-exit-setup+.llms-button-primary,.llms-exit-setup+.llms-button-secondary{margin-right:auto}.llms-importing-msgs a{color:#466dd8}.llms-importing-msgs .llms-importing-msg{display:none;font-size:14px;font-style:italic;text-align:left}ul.llms-importable-courses{border-bottom:1px solid #f1f1f1;display:block}ul.llms-importable-courses li.llms-importable-course{border-top:1px solid #f1f1f1;display:block;margin:0;max-width:100%;padding:20px 0 20px 40px}ul.llms-importable-courses li.llms-importable-course h3{margin:0}ul.llms-importable-courses li.llms-importable-course p{margin:10px 0 0 0}ul.llms-importable-courses li.llms-importable-course label{font-weight:400}ul.llms-importable-courses li.llms-importable-course img{float:right;margin-left:15px;width:22%}ul.llms-importable-courses li.llms-importable-course .llms-switch{float:left;left:-40px}ul.llms-importable-courses li.llms-importable-course .llms-switch input.llms-toggle-round:checked+label{border-color:#466dd8;background-color:#466dd8}.llms-setup-progress{display:-webkit-box;display:-ms-flexbox;display:flex;margin:20px 0}.llms-setup-progress li{border-bottom:4px solid #466dd8;display:inline-block;font-size:14px;padding-bottom:10px;position:relative;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1}.llms-setup-progress li a{color:#466dd8;text-decoration:none}.llms-setup-progress li:after{background:#466dd8;bottom:0;content:"";border:4px solid #466dd8;border-radius:100%;height:4px;position:absolute;right:50%;margin-right:-6px;margin-bottom:-8px;width:4px}.llms-setup-progress li.current{font-weight:700}.llms-setup-progress li.current:after{background:#fff}.llms-setup-progress li.current~li{border-bottom-color:#ccc}.llms-setup-progress li.current~li:after{background:#ccc;border-color:#ccc}.llms-setup-progress li.current~li a{color:#bbb}.llms-setup-wrapper [type=text].llms-datepicker{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ccc'%3E%3Cpath d='M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H64C28.7 64 0 92.7 0 128v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64h-40V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152V24zM48 192h352v256c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:left 8px center;background-size:16px 16px;padding-left:40px}
diff --git a/assets/css/admin-wizard.css b/assets/css/admin-wizard.css
new file mode 100644
index 0000000000..fd8ce48f37
--- /dev/null
+++ b/assets/css/admin-wizard.css
@@ -0,0 +1,296 @@
+#wpadminbar, #adminmenumain, #wpfooter {
+ display: none;
+}
+
+#llms-setup-wizard {
+ background-color: #F0F0F1;
+ height: 100%;
+ left: 0;
+ overflow: scroll;
+ position: fixed;
+ top: 0;
+ width: 100%;
+}
+
+.llms-setup-wrapper {
+ margin: 30px auto;
+ max-width: 640px;
+}
+
+#llms-logo {
+ text-align: center;
+}
+#llms-logo a {
+ display: inline-block;
+}
+#llms-logo img {
+ max-width: 200px;
+}
+
+.llms-setup-content {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ padding: 30px;
+}
+.llms-setup-content h1, .llms-setup-content h2, .llms-setup-content h3, .llms-setup-content h4, .llms-setup-content h5, .llms-setup-content h6 {
+ color: #3C434A;
+}
+.llms-setup-content a:not(.llms-button-primary):not(.llms-button-secondary) {
+ color: #466dd8;
+}
+.llms-setup-content p, .llms-setup-content li {
+ color: #3C434A;
+ font-size: 16px;
+}
+.llms-setup-content p.error {
+ color: #bb231c;
+ background: rgba(187, 35, 28, 0.1);
+ border: 1px solid currentColor;
+ padding: 1em;
+ border-radius: 4px;
+ margin: 1.5em 0 0;
+ font-size: 15px;
+ text-align: left;
+}
+.llms-setup-content label {
+ font-weight: 500;
+}
+.llms-setup-content table {
+ border-bottom: 1px solid #f1f1f1;
+ border-collapse: collapse;
+ width: 100%;
+}
+.llms-setup-content td {
+ border-top: 1px solid #f1f1f1;
+}
+.llms-setup-content td:first-child {
+ padding-right: 10px;
+ width: 33%;
+}
+.llms-setup-content td:first-child a {
+ font-size: 16px;
+ font-weight: 500;
+}
+.llms-setup-content td:first-child i {
+ display: block;
+ font-size: 13px;
+ margin-top: 10px;
+}
+.llms-setup-content td:first-child i a {
+ font-size: 13px;
+}
+.llms-setup-content small {
+ font-size: small;
+}
+.llms-setup-content .has-checkbox-field {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: reverse;
+ -ms-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-line-pack: center;
+ align-content: center;
+ gap: 0.5em;
+ font-weight: normal;
+ font-size: 16px;
+}
+.llms-setup-content .has-checkbox-field input {
+ margin: 0;
+}
+.llms-setup-content label {
+ font-size: 16px;
+ display: block;
+ margin-bottom: 0.5em;
+}
+.llms-setup-content small + label {
+ margin-top: 1em;
+}
+.llms-setup-content [type=text] {
+ width: 100%;
+ clear: both;
+ margin: 0;
+ padding: 0.3em 0.6em;
+}
+.llms-setup-content .has-date-field {
+ font-size: 16px;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin-bottom: 0.5em;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 0.5em;
+}
+.llms-setup-content [type=date] {
+ padding: 0.3em 0.6em;
+}
+.llms-setup-content .is-hidden {
+ display: none;
+}
+
+.llms-setup-date-fields {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ gap: 1em;
+ padding-top: 2em;
+}
+
+.llms-setup-date-field {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+
+.llms-setup-actions {
+ margin-top: 2em;
+ text-align: right;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ gap: 1em;
+}
+.llms-setup-actions .llms-button-primary {
+ display: inline-block;
+}
+.llms-setup-actions .llms-button-primary:after {
+ content: "\f054";
+ font-family: "FontAwesome";
+ font-weight: 900;
+ padding-left: 10px;
+}
+
+.llms-exit-setup {
+ color: inherit !important;
+ margin-right: 10px;
+}
+.llms-exit-setup + .llms-button-primary,
+.llms-exit-setup + .llms-button-secondary {
+ margin-left: auto;
+}
+
+.llms-importing-msgs a {
+ color: #466dd8;
+}
+.llms-importing-msgs .llms-importing-msg {
+ display: none;
+ font-size: 14px;
+ font-style: italic;
+ text-align: right;
+}
+
+ul.llms-importable-courses {
+ border-bottom: 1px solid #f1f1f1;
+ display: block;
+}
+ul.llms-importable-courses li.llms-importable-course {
+ border-top: 1px solid #f1f1f1;
+ display: block;
+ margin: 0;
+ max-width: 100%;
+ padding: 20px 40px 20px 0;
+}
+ul.llms-importable-courses li.llms-importable-course h3 {
+ margin: 0;
+}
+ul.llms-importable-courses li.llms-importable-course p {
+ margin: 10px 0 0 0;
+}
+ul.llms-importable-courses li.llms-importable-course label {
+ font-weight: 400;
+}
+ul.llms-importable-courses li.llms-importable-course img {
+ float: left;
+ margin-right: 15px;
+ width: 22%;
+}
+ul.llms-importable-courses li.llms-importable-course .llms-switch {
+ float: right;
+ right: -40px;
+}
+ul.llms-importable-courses li.llms-importable-course .llms-switch input.llms-toggle-round:checked + label {
+ border-color: #466dd8;
+ background-color: #466dd8;
+}
+
+.llms-setup-progress {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin: 20px 0;
+}
+.llms-setup-progress li {
+ border-bottom: 4px solid #466dd8;
+ display: inline-block;
+ font-size: 14px;
+ padding-bottom: 10px;
+ position: relative;
+ text-align: center;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.llms-setup-progress li a {
+ color: #466dd8;
+ text-decoration: none;
+}
+.llms-setup-progress li:after {
+ background: #466dd8;
+ bottom: 0;
+ content: "";
+ border: 4px solid #466dd8;
+ border-radius: 100%;
+ height: 4px;
+ position: absolute;
+ left: 50%;
+ margin-left: -6px;
+ margin-bottom: -8px;
+ width: 4px;
+}
+.llms-setup-progress li.current {
+ font-weight: 700;
+}
+.llms-setup-progress li.current:after {
+ background: #fff;
+}
+.llms-setup-progress li.current ~ li {
+ border-bottom-color: #ccc;
+}
+.llms-setup-progress li.current ~ li:after {
+ background: #ccc;
+ border-color: #ccc;
+}
+.llms-setup-progress li.current ~ li a {
+ color: #bbb;
+}
+
+.llms-setup-wrapper [type=text].llms-datepicker {
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ccc'%3E%3Cpath d='M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H64C28.7 64 0 92.7 0 128v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64h-40V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152V24zM48 192h352v256c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z'/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-position: right 8px center;
+ background-size: 16px 16px;
+ padding-right: 40px;
+}
+/*# sourceMappingURL=../maps/css/admin-wizard.css.map */
diff --git a/assets/css/admin-wizard.min.css b/assets/css/admin-wizard.min.css
new file mode 100644
index 0000000000..55553400fb
--- /dev/null
+++ b/assets/css/admin-wizard.min.css
@@ -0,0 +1,2 @@
+#wpadminbar,#adminmenumain,#wpfooter{display:none}#llms-setup-wizard{background-color:#f0f0f1;height:100%;left:0;overflow:scroll;position:fixed;top:0;width:100%}.llms-setup-wrapper{margin:30px auto;max-width:640px}#llms-logo{text-align:center}#llms-logo a{display:inline-block}#llms-logo img{max-width:200px}.llms-setup-content{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);padding:30px}.llms-setup-content h1,.llms-setup-content h2,.llms-setup-content h3,.llms-setup-content h4,.llms-setup-content h5,.llms-setup-content h6{color:#3c434a}.llms-setup-content a:not(.llms-button-primary):not(.llms-button-secondary){color:#466dd8}.llms-setup-content p,.llms-setup-content li{color:#3c434a;font-size:16px}.llms-setup-content p.error{color:#bb231c;background:rgba(187,35,28,.1);border:1px solid currentColor;padding:1em;border-radius:4px;margin:1.5em 0 0;font-size:15px;text-align:left}.llms-setup-content label{font-weight:500}.llms-setup-content table{border-bottom:1px solid #f1f1f1;border-collapse:collapse;width:100%}.llms-setup-content td{border-top:1px solid #f1f1f1}.llms-setup-content td:first-child{padding-right:10px;width:33%}.llms-setup-content td:first-child a{font-size:16px;font-weight:500}.llms-setup-content td:first-child i{display:block;font-size:13px;margin-top:10px}.llms-setup-content td:first-child i a{font-size:13px}.llms-setup-content small{font-size:small}.llms-setup-content .has-checkbox-field{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;gap:.5em;font-weight:normal;font-size:16px}.llms-setup-content .has-checkbox-field input{margin:0}.llms-setup-content label{font-size:16px;display:block;margin-bottom:.5em}.llms-setup-content small+label{margin-top:1em}.llms-setup-content [type=text]{width:100%;clear:both;margin:0;padding:.3em .6em}.llms-setup-content .has-date-field{font-size:16px;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:.5em;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.5em}.llms-setup-content [type=date]{padding:.3em .6em}.llms-setup-content .is-hidden{display:none}.llms-setup-date-fields{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:1em;padding-top:2em}.llms-setup-date-field{-webkit-box-flex:1;-ms-flex:1;flex:1}.llms-setup-actions{margin-top:2em;text-align:right;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1em}.llms-setup-actions .llms-button-primary{display:inline-block}.llms-setup-actions .llms-button-primary:after{content:"";font-family:"FontAwesome";font-weight:900;padding-left:10px}.llms-exit-setup{color:inherit !important;margin-right:10px}.llms-exit-setup+.llms-button-primary,.llms-exit-setup+.llms-button-secondary{margin-left:auto}.llms-importing-msgs a{color:#466dd8}.llms-importing-msgs .llms-importing-msg{display:none;font-size:14px;font-style:italic;text-align:right}ul.llms-importable-courses{border-bottom:1px solid #f1f1f1;display:block}ul.llms-importable-courses li.llms-importable-course{border-top:1px solid #f1f1f1;display:block;margin:0;max-width:100%;padding:20px 40px 20px 0}ul.llms-importable-courses li.llms-importable-course h3{margin:0}ul.llms-importable-courses li.llms-importable-course p{margin:10px 0 0 0}ul.llms-importable-courses li.llms-importable-course label{font-weight:400}ul.llms-importable-courses li.llms-importable-course img{float:left;margin-right:15px;width:22%}ul.llms-importable-courses li.llms-importable-course .llms-switch{float:right;right:-40px}ul.llms-importable-courses li.llms-importable-course .llms-switch input.llms-toggle-round:checked+label{border-color:#466dd8;background-color:#466dd8}.llms-setup-progress{display:-webkit-box;display:-ms-flexbox;display:flex;margin:20px 0}.llms-setup-progress li{border-bottom:4px solid #466dd8;display:inline-block;font-size:14px;padding-bottom:10px;position:relative;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1}.llms-setup-progress li a{color:#466dd8;text-decoration:none}.llms-setup-progress li:after{background:#466dd8;bottom:0;content:"";border:4px solid #466dd8;border-radius:100%;height:4px;position:absolute;left:50%;margin-left:-6px;margin-bottom:-8px;width:4px}.llms-setup-progress li.current{font-weight:700}.llms-setup-progress li.current:after{background:#fff}.llms-setup-progress li.current~li{border-bottom-color:#ccc}.llms-setup-progress li.current~li:after{background:#ccc;border-color:#ccc}.llms-setup-progress li.current~li a{color:#bbb}.llms-setup-wrapper [type=text].llms-datepicker{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ccc'%3E%3Cpath d='M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H64C28.7 64 0 92.7 0 128v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64h-40V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152V24zM48 192h352v256c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;background-size:16px 16px;padding-right:40px}
+/*# sourceMappingURL=../maps/css/admin-wizard.min.css.map */
diff --git a/assets/css/admin.css b/assets/css/admin.css
new file mode 100644
index 0000000000..a710207982
--- /dev/null
+++ b/assets/css/admin.css
@@ -0,0 +1,7685 @@
+@charset "UTF-8";
+#poststuff .llms-metabox:before, #poststuff .llms-metabox:after,
+.llms-form-fields:before,
+.llms-metabox .llms-access-plans:before,
+.llms-collapsible .llms-collapsible-body:before,
+.llms-collapsible .llms-collapsible-header:before,
+.llms-collapsible:before,
+.llms-form-fields:after,
+.llms-metabox .llms-access-plans:after,
+.llms-collapsible .llms-collapsible-body:after,
+.llms-collapsible .llms-collapsible-header:after,
+.llms-collapsible:after {
+ content: " ";
+ display: table;
+}
+#poststuff .llms-metabox:after,
+.llms-form-fields:after,
+.llms-metabox .llms-access-plans:after,
+.llms-collapsible .llms-collapsible-body:after,
+.llms-collapsible .llms-collapsible-header:after,
+.llms-collapsible:after {
+ clear: both;
+}
+
+.llms-button-action,
+.llms-button-danger,
+.llms-button-primary,
+.llms-button-secondary {
+ border: none;
+ border-radius: 8px;
+ color: #fefefe;
+ cursor: pointer;
+ display: inline-block;
+ font-size: 18px;
+ font-weight: 700;
+ text-decoration: none;
+ text-shadow: none;
+ line-height: 1;
+ margin: 0;
+ max-width: 100%;
+ padding: 12px 24px;
+ position: relative;
+ -webkit-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+}
+.llms-button-action:disabled,
+.llms-button-danger:disabled,
+.llms-button-primary:disabled,
+.llms-button-secondary:disabled {
+ opacity: 0.5;
+}
+.llms-button-action:hover, .llms-button-action:active,
+.llms-button-danger:hover,
+.llms-button-danger:active,
+.llms-button-primary:hover,
+.llms-button-primary:active,
+.llms-button-secondary:hover,
+.llms-button-secondary:active {
+ color: #fefefe;
+}
+.llms-button-action:focus,
+.llms-button-danger:focus,
+.llms-button-primary:focus,
+.llms-button-secondary:focus {
+ color: #fefefe;
+}
+.llms-button-action.auto,
+.llms-button-danger.auto,
+.llms-button-primary.auto,
+.llms-button-secondary.auto {
+ width: auto;
+}
+.llms-button-action.full,
+.llms-button-danger.full,
+.llms-button-primary.full,
+.llms-button-secondary.full {
+ display: block;
+ text-align: center;
+ width: 100%;
+}
+.llms-button-action.square,
+.llms-button-danger.square,
+.llms-button-primary.square,
+.llms-button-secondary.square {
+ padding: 12px;
+}
+.llms-button-action.small,
+.llms-button-danger.small,
+.llms-button-primary.small,
+.llms-button-secondary.small {
+ font-size: 13px;
+ padding: 8px 14px;
+}
+.llms-button-action.small.square,
+.llms-button-danger.small.square,
+.llms-button-primary.small.square,
+.llms-button-secondary.small.square {
+ padding: 8px;
+}
+.llms-button-action.large,
+.llms-button-danger.large,
+.llms-button-primary.large,
+.llms-button-secondary.large {
+ font-size: 18px;
+ line-height: 1.2;
+ padding: 16px 32px;
+}
+.llms-button-action.large.square,
+.llms-button-danger.large.square,
+.llms-button-primary.large.square,
+.llms-button-secondary.large.square {
+ padding: 16px;
+}
+.llms-button-action.large .fa,
+.llms-button-danger.large .fa,
+.llms-button-primary.large .fa,
+.llms-button-secondary.large .fa {
+ left: -7px;
+ position: relative;
+}
+
+/* Fix for cases where link color overrides the button color */
+a.llms-button-action,
+a.llms-button-danger,
+a.llms-button-primary {
+ color: #fefefe;
+}
+
+.llms-button-primary {
+ background: #466dd8;
+}
+.llms-button-primary:hover, .llms-button-primary.clicked {
+ background: #2b55cb;
+}
+.llms-button-primary:focus, .llms-button-primary:active {
+ background: #6888df;
+}
+
+.llms-button-secondary {
+ background: #e1e1e1;
+ color: #444;
+}
+.llms-button-secondary:hover {
+ color: #414141;
+ background: #cdcdcd;
+}
+.llms-button-secondary:focus, .llms-button-secondary:active {
+ color: #414141;
+ background: #ebebeb;
+}
+
+/* Fix for cases where link color overrides the button color */
+a.llms-button-secondary {
+ color: #444;
+}
+
+.llms-button-action {
+ background: #c05621;
+}
+.llms-button-action:hover, .llms-button-action.clicked {
+ background: #f67d28;
+}
+.llms-button-action:focus, .llms-button-action:active {
+ background: #faad76;
+}
+
+.llms-button-danger {
+ background: #bb231c;
+}
+.llms-button-danger:hover {
+ background: #981c17;
+}
+.llms-button-danger:focus, .llms-button-danger:active {
+ background: #cd261f;
+}
+
+.llms-button-outline {
+ background: transparent;
+ border: 3px solid #1D2327;
+ border-radius: 8px;
+ color: #1D2327;
+ cursor: pointer;
+ font-size: 16px;
+ font-weight: 700;
+ text-decoration: none;
+ text-shadow: none;
+ line-height: 1;
+ margin: 0;
+ max-width: 100%;
+ padding: 12px 24px;
+ position: relative;
+ -webkit-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+}
+.llms-button-outline:disabled {
+ opacity: 0.5;
+}
+.llms-button-outline:hover, .llms-button-outline:active {
+ color: #1D2327;
+}
+.llms-button-outline:focus {
+ color: #1D2327;
+}
+.llms-button-outline.auto {
+ width: auto;
+}
+.llms-button-outline.full {
+ display: block;
+ text-align: center;
+ width: 100%;
+}
+.llms-button-outline.square {
+ padding: 12px;
+}
+
+.llms-course-continue-button {
+ display: inline-block;
+}
+
+.lifterlms [data-tip],
+.lifterlms [data-title-default],
+.lifterlms [data-title-active],
+.llms-metabox [data-tip],
+.llms-metabox [data-title-default],
+.llms-metabox [data-title-active],
+.llms-mb-container [data-tip],
+.llms-mb-container [data-title-default],
+.llms-mb-container [data-title-active],
+.llms-quiz-wrapper [data-tip],
+.llms-quiz-wrapper [data-title-default],
+.llms-quiz-wrapper [data-title-active] {
+ position: relative;
+}
+.lifterlms [data-tip].tip--top-right:before,
+.lifterlms [data-title-default].tip--top-right:before,
+.lifterlms [data-title-active].tip--top-right:before,
+.llms-metabox [data-tip].tip--top-right:before,
+.llms-metabox [data-title-default].tip--top-right:before,
+.llms-metabox [data-title-active].tip--top-right:before,
+.llms-mb-container [data-tip].tip--top-right:before,
+.llms-mb-container [data-title-default].tip--top-right:before,
+.llms-mb-container [data-title-active].tip--top-right:before,
+.llms-quiz-wrapper [data-tip].tip--top-right:before,
+.llms-quiz-wrapper [data-title-default].tip--top-right:before,
+.llms-quiz-wrapper [data-title-active].tip--top-right:before {
+ bottom: 100%;
+ left: -10px;
+}
+.lifterlms [data-tip].tip--top-right:hover:before,
+.lifterlms [data-title-default].tip--top-right:hover:before,
+.lifterlms [data-title-active].tip--top-right:hover:before,
+.llms-metabox [data-tip].tip--top-right:hover:before,
+.llms-metabox [data-title-default].tip--top-right:hover:before,
+.llms-metabox [data-title-active].tip--top-right:hover:before,
+.llms-mb-container [data-tip].tip--top-right:hover:before,
+.llms-mb-container [data-title-default].tip--top-right:hover:before,
+.llms-mb-container [data-title-active].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before {
+ bottom: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--top-right:after,
+.lifterlms [data-title-default].tip--top-right:after,
+.lifterlms [data-title-active].tip--top-right:after,
+.llms-metabox [data-tip].tip--top-right:after,
+.llms-metabox [data-title-default].tip--top-right:after,
+.llms-metabox [data-title-active].tip--top-right:after,
+.llms-mb-container [data-tip].tip--top-right:after,
+.llms-mb-container [data-title-default].tip--top-right:after,
+.llms-mb-container [data-title-active].tip--top-right:after,
+.llms-quiz-wrapper [data-tip].tip--top-right:after,
+.llms-quiz-wrapper [data-title-default].tip--top-right:after,
+.llms-quiz-wrapper [data-title-active].tip--top-right:after {
+ border-top-color: #444;
+ left: 6px;
+ top: 0;
+}
+.lifterlms [data-tip].tip--top-right:hover:after,
+.lifterlms [data-title-default].tip--top-right:hover:after,
+.lifterlms [data-title-active].tip--top-right:hover:after,
+.llms-metabox [data-tip].tip--top-right:hover:after,
+.llms-metabox [data-title-default].tip--top-right:hover:after,
+.llms-metabox [data-title-active].tip--top-right:hover:after,
+.llms-mb-container [data-tip].tip--top-right:hover:after,
+.llms-mb-container [data-title-default].tip--top-right:hover:after,
+.llms-mb-container [data-title-active].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after {
+ top: -6px;
+}
+.lifterlms [data-tip].tip--top-left:before,
+.lifterlms [data-title-default].tip--top-left:before,
+.lifterlms [data-title-active].tip--top-left:before,
+.llms-metabox [data-tip].tip--top-left:before,
+.llms-metabox [data-title-default].tip--top-left:before,
+.llms-metabox [data-title-active].tip--top-left:before,
+.llms-mb-container [data-tip].tip--top-left:before,
+.llms-mb-container [data-title-default].tip--top-left:before,
+.llms-mb-container [data-title-active].tip--top-left:before,
+.llms-quiz-wrapper [data-tip].tip--top-left:before,
+.llms-quiz-wrapper [data-title-default].tip--top-left:before,
+.llms-quiz-wrapper [data-title-active].tip--top-left:before {
+ bottom: 100%;
+ right: -10px;
+}
+.lifterlms [data-tip].tip--top-left:hover:before,
+.lifterlms [data-title-default].tip--top-left:hover:before,
+.lifterlms [data-title-active].tip--top-left:hover:before,
+.llms-metabox [data-tip].tip--top-left:hover:before,
+.llms-metabox [data-title-default].tip--top-left:hover:before,
+.llms-metabox [data-title-active].tip--top-left:hover:before,
+.llms-mb-container [data-tip].tip--top-left:hover:before,
+.llms-mb-container [data-title-default].tip--top-left:hover:before,
+.llms-mb-container [data-title-active].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before {
+ bottom: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--top-left:after,
+.lifterlms [data-title-default].tip--top-left:after,
+.lifterlms [data-title-active].tip--top-left:after,
+.llms-metabox [data-tip].tip--top-left:after,
+.llms-metabox [data-title-default].tip--top-left:after,
+.llms-metabox [data-title-active].tip--top-left:after,
+.llms-mb-container [data-tip].tip--top-left:after,
+.llms-mb-container [data-title-default].tip--top-left:after,
+.llms-mb-container [data-title-active].tip--top-left:after,
+.llms-quiz-wrapper [data-tip].tip--top-left:after,
+.llms-quiz-wrapper [data-title-default].tip--top-left:after,
+.llms-quiz-wrapper [data-title-active].tip--top-left:after {
+ border-top-color: #444;
+ right: 6px;
+ top: 0;
+}
+.lifterlms [data-tip].tip--top-left:hover:after,
+.lifterlms [data-title-default].tip--top-left:hover:after,
+.lifterlms [data-title-active].tip--top-left:hover:after,
+.llms-metabox [data-tip].tip--top-left:hover:after,
+.llms-metabox [data-title-default].tip--top-left:hover:after,
+.llms-metabox [data-title-active].tip--top-left:hover:after,
+.llms-mb-container [data-tip].tip--top-left:hover:after,
+.llms-mb-container [data-title-default].tip--top-left:hover:after,
+.llms-mb-container [data-title-active].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after {
+ top: -6px;
+}
+.lifterlms [data-tip].tip--bottom-left:before,
+.lifterlms [data-title-default].tip--bottom-left:before,
+.lifterlms [data-title-active].tip--bottom-left:before,
+.llms-metabox [data-tip].tip--bottom-left:before,
+.llms-metabox [data-title-default].tip--bottom-left:before,
+.llms-metabox [data-title-active].tip--bottom-left:before,
+.llms-mb-container [data-tip].tip--bottom-left:before,
+.llms-mb-container [data-title-default].tip--bottom-left:before,
+.llms-mb-container [data-title-active].tip--bottom-left:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:before {
+ top: 100%;
+ right: -10px;
+}
+.lifterlms [data-tip].tip--bottom-left:hover:before,
+.lifterlms [data-title-default].tip--bottom-left:hover:before,
+.lifterlms [data-title-active].tip--bottom-left:hover:before,
+.llms-metabox [data-tip].tip--bottom-left:hover:before,
+.llms-metabox [data-title-default].tip--bottom-left:hover:before,
+.llms-metabox [data-title-active].tip--bottom-left:hover:before,
+.llms-mb-container [data-tip].tip--bottom-left:hover:before,
+.llms-mb-container [data-title-default].tip--bottom-left:hover:before,
+.llms-mb-container [data-title-active].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before {
+ top: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--bottom-left:after,
+.lifterlms [data-title-default].tip--bottom-left:after,
+.lifterlms [data-title-active].tip--bottom-left:after,
+.llms-metabox [data-tip].tip--bottom-left:after,
+.llms-metabox [data-title-default].tip--bottom-left:after,
+.llms-metabox [data-title-active].tip--bottom-left:after,
+.llms-mb-container [data-tip].tip--bottom-left:after,
+.llms-mb-container [data-title-default].tip--bottom-left:after,
+.llms-mb-container [data-title-active].tip--bottom-left:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:after {
+ border-bottom-color: #444;
+ right: 6px;
+ bottom: 0;
+}
+.lifterlms [data-tip].tip--bottom-left:hover:after,
+.lifterlms [data-title-default].tip--bottom-left:hover:after,
+.lifterlms [data-title-active].tip--bottom-left:hover:after,
+.llms-metabox [data-tip].tip--bottom-left:hover:after,
+.llms-metabox [data-title-default].tip--bottom-left:hover:after,
+.llms-metabox [data-title-active].tip--bottom-left:hover:after,
+.llms-mb-container [data-tip].tip--bottom-left:hover:after,
+.llms-mb-container [data-title-default].tip--bottom-left:hover:after,
+.llms-mb-container [data-title-active].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after {
+ bottom: -6px;
+}
+.lifterlms [data-tip].tip--bottom-right:before,
+.lifterlms [data-title-default].tip--bottom-right:before,
+.lifterlms [data-title-active].tip--bottom-right:before,
+.llms-metabox [data-tip].tip--bottom-right:before,
+.llms-metabox [data-title-default].tip--bottom-right:before,
+.llms-metabox [data-title-active].tip--bottom-right:before,
+.llms-mb-container [data-tip].tip--bottom-right:before,
+.llms-mb-container [data-title-default].tip--bottom-right:before,
+.llms-mb-container [data-title-active].tip--bottom-right:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:before {
+ top: 100%;
+ left: -10px;
+}
+.lifterlms [data-tip].tip--bottom-right:hover:before,
+.lifterlms [data-title-default].tip--bottom-right:hover:before,
+.lifterlms [data-title-active].tip--bottom-right:hover:before,
+.llms-metabox [data-tip].tip--bottom-right:hover:before,
+.llms-metabox [data-title-default].tip--bottom-right:hover:before,
+.llms-metabox [data-title-active].tip--bottom-right:hover:before,
+.llms-mb-container [data-tip].tip--bottom-right:hover:before,
+.llms-mb-container [data-title-default].tip--bottom-right:hover:before,
+.llms-mb-container [data-title-active].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before {
+ top: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--bottom-right:after,
+.lifterlms [data-title-default].tip--bottom-right:after,
+.lifterlms [data-title-active].tip--bottom-right:after,
+.llms-metabox [data-tip].tip--bottom-right:after,
+.llms-metabox [data-title-default].tip--bottom-right:after,
+.llms-metabox [data-title-active].tip--bottom-right:after,
+.llms-mb-container [data-tip].tip--bottom-right:after,
+.llms-mb-container [data-title-default].tip--bottom-right:after,
+.llms-mb-container [data-title-active].tip--bottom-right:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:after {
+ border-bottom-color: #444;
+ left: 6px;
+ bottom: 0;
+}
+.lifterlms [data-tip].tip--bottom-right:hover:after,
+.lifterlms [data-title-default].tip--bottom-right:hover:after,
+.lifterlms [data-title-active].tip--bottom-right:hover:after,
+.llms-metabox [data-tip].tip--bottom-right:hover:after,
+.llms-metabox [data-title-default].tip--bottom-right:hover:after,
+.llms-metabox [data-title-active].tip--bottom-right:hover:after,
+.llms-mb-container [data-tip].tip--bottom-right:hover:after,
+.llms-mb-container [data-title-default].tip--bottom-right:hover:after,
+.llms-mb-container [data-title-active].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after {
+ bottom: -6px;
+}
+.lifterlms [data-tip]:before,
+.lifterlms [data-title-default]:before,
+.lifterlms [data-title-active]:before,
+.llms-metabox [data-tip]:before,
+.llms-metabox [data-title-default]:before,
+.llms-metabox [data-title-active]:before,
+.llms-mb-container [data-tip]:before,
+.llms-mb-container [data-title-default]:before,
+.llms-mb-container [data-title-active]:before,
+.llms-quiz-wrapper [data-tip]:before,
+.llms-quiz-wrapper [data-title-default]:before,
+.llms-quiz-wrapper [data-title-active]:before {
+ background: #444;
+ border-radius: 4px;
+ color: #fff;
+ font-size: 13px;
+ line-height: 1.2;
+ padding: 8px;
+ max-width: 300px;
+ width: -webkit-max-content;
+ width: -moz-max-content;
+ width: max-content;
+}
+.lifterlms [data-tip]:after,
+.lifterlms [data-title-default]:after,
+.lifterlms [data-title-active]:after,
+.llms-metabox [data-tip]:after,
+.llms-metabox [data-title-default]:after,
+.llms-metabox [data-title-active]:after,
+.llms-mb-container [data-tip]:after,
+.llms-mb-container [data-title-default]:after,
+.llms-mb-container [data-title-active]:after,
+.llms-quiz-wrapper [data-tip]:after,
+.llms-quiz-wrapper [data-title-default]:after,
+.llms-quiz-wrapper [data-title-active]:after {
+ content: "";
+ border: 6px solid transparent;
+ height: 0;
+ width: 0;
+}
+.lifterlms [data-tip]:before, .lifterlms [data-tip]:after,
+.lifterlms [data-title-default]:before,
+.lifterlms [data-title-default]:after,
+.lifterlms [data-title-active]:before,
+.lifterlms [data-title-active]:after,
+.llms-metabox [data-tip]:before,
+.llms-metabox [data-tip]:after,
+.llms-metabox [data-title-default]:before,
+.llms-metabox [data-title-default]:after,
+.llms-metabox [data-title-active]:before,
+.llms-metabox [data-title-active]:after,
+.llms-mb-container [data-tip]:before,
+.llms-mb-container [data-tip]:after,
+.llms-mb-container [data-title-default]:before,
+.llms-mb-container [data-title-default]:after,
+.llms-mb-container [data-title-active]:before,
+.llms-mb-container [data-title-active]:after,
+.llms-quiz-wrapper [data-tip]:before,
+.llms-quiz-wrapper [data-tip]:after,
+.llms-quiz-wrapper [data-title-default]:before,
+.llms-quiz-wrapper [data-title-default]:after,
+.llms-quiz-wrapper [data-title-active]:before,
+.llms-quiz-wrapper [data-title-active]:after {
+ opacity: 0;
+ -webkit-transition: all 0.2s 0.1s ease;
+ transition: all 0.2s 0.1s ease;
+ position: absolute;
+ pointer-events: none;
+ visibility: hidden;
+}
+.lifterlms [data-tip]:hover:before, .lifterlms [data-tip]:hover:after,
+.lifterlms [data-title-default]:hover:before,
+.lifterlms [data-title-default]:hover:after,
+.lifterlms [data-title-active]:hover:before,
+.lifterlms [data-title-active]:hover:after,
+.llms-metabox [data-tip]:hover:before,
+.llms-metabox [data-tip]:hover:after,
+.llms-metabox [data-title-default]:hover:before,
+.llms-metabox [data-title-default]:hover:after,
+.llms-metabox [data-title-active]:hover:before,
+.llms-metabox [data-title-active]:hover:after,
+.llms-mb-container [data-tip]:hover:before,
+.llms-mb-container [data-tip]:hover:after,
+.llms-mb-container [data-title-default]:hover:before,
+.llms-mb-container [data-title-default]:hover:after,
+.llms-mb-container [data-title-active]:hover:before,
+.llms-mb-container [data-title-active]:hover:after,
+.llms-quiz-wrapper [data-tip]:hover:before,
+.llms-quiz-wrapper [data-tip]:hover:after,
+.llms-quiz-wrapper [data-title-default]:hover:before,
+.llms-quiz-wrapper [data-title-default]:hover:after,
+.llms-quiz-wrapper [data-title-active]:hover:before,
+.llms-quiz-wrapper [data-title-active]:hover:after {
+ opacity: 1;
+ -webkit-transition: all 0 0.1s ease;
+ transition: all 0 0.1s ease;
+ visibility: visible;
+ z-index: 99999999;
+}
+.lifterlms [data-tip]:before,
+.llms-metabox [data-tip]:before,
+.llms-mb-container [data-tip]:before,
+.llms-quiz-wrapper [data-tip]:before {
+ content: attr(data-tip);
+}
+.lifterlms [data-tip].active:before,
+.llms-metabox [data-tip].active:before,
+.llms-mb-container [data-tip].active:before,
+.llms-quiz-wrapper [data-tip].active:before {
+ content: attr(data-tip-active);
+}
+
+#adminmenu .toplevel_page_lifterlms .wp-menu-image img {
+ padding-top: 6px;
+ width: 20px;
+}
+#adminmenu .toplevel_page_lifterlms a[href*="page=llms-add-ons"],
+#adminmenu .opensub .wp-submenu li.current a[href*="page=llms-add-ons"],
+#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],
+#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],
+#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],
+#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a[href*="page=llms-add-ons"] {
+ color: #f8954f;
+}
+
+/******************************************************************
+
+Grids for Breakpoints
+
+******************************************************************/
+.last-col {
+ float: right;
+ padding-right: 0 !important;
+}
+
+.last-col:after {
+ clear: both;
+}
+
+/*
+Mobile Grid Styles
+These are the widths for the mobile grid.
+There are four types, but you can add or customize
+them however you see fit.
+*/
+@media (max-width: 767px) {
+ .m-all {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ padding-right: 0;
+ }
+ .m-1of2 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 50%;
+ }
+ .m-1of3 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 33.33%;
+ }
+ .m-2of3 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 66.66%;
+ }
+ .m-1of4 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 25%;
+ }
+ .m-3of4 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 75%;
+ }
+ .m-right {
+ text-align: center;
+ }
+ .m-center {
+ text-align: center;
+ }
+ .m-left {
+ text-align: center;
+ }
+ .d-right {
+ text-align: right;
+ }
+ .d-center {
+ text-align: center;
+ }
+ .d-left {
+ text-align: left;
+ }
+}
+/* Portrait tablet to landscape */
+@media (min-width: 768px) and (max-width: 1029px) {
+ .t-all {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ padding-right: 0;
+ }
+ .t-1of2 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 50%;
+ }
+ .t-1of3 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 33.33%;
+ }
+ .t-2of3 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 66.66%;
+ }
+ .t-1of4 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 25%;
+ }
+ .t-3of4 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 75%;
+ }
+ .t-1of5 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 20%;
+ }
+ .t-2of5 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 40%;
+ }
+ .t-3of5 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 60%;
+ }
+ .t-4of5 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 80%;
+ }
+ .d-right {
+ text-align: right;
+ }
+ .d-center {
+ text-align: center;
+ }
+ .d-left {
+ text-align: left;
+ }
+}
+/* Landscape to small desktop */
+@media (min-width: 1030px) {
+ .d-all {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ padding-right: 0;
+ }
+ .d-1of2 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 50%;
+ }
+ .d-1of3 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 33.33%;
+ }
+ .d-2of3 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 66.66%;
+ }
+ .d-1of4 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 25%;
+ }
+ .d-3of4 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 75%;
+ }
+ .d-1of5 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 20%;
+ }
+ .d-2of5 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 40%;
+ }
+ .d-3of5 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 60%;
+ }
+ .d-4of5 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 80%;
+ }
+ .d-1of6 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 16.6666666667%;
+ }
+ .d-1of7 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 14.2857142857%;
+ }
+ .d-2of7 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 28.5714286%;
+ }
+ .d-3of7 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 42.8571429%;
+ }
+ .d-4of7 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 57.1428572%;
+ }
+ .d-5of7 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 71.4285715%;
+ }
+ .d-6of7 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 85.7142857%;
+ }
+ .d-1of8 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 12.5%;
+ }
+ .d-1of9 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 11.1111111111%;
+ }
+ .d-1of10 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 10%;
+ }
+ .d-1of11 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 9.0909090909%;
+ }
+ .d-1of12 {
+ float: left;
+ padding-right: 0.75em;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 8.33%;
+ }
+ .d-right {
+ text-align: right;
+ }
+ .d-center {
+ text-align: center;
+ }
+ .d-left {
+ text-align: left;
+ }
+}
+/******************************************************************
+
+Form Styles
+
+******************************************************************/
+#llms-form-wrapper .llms-search-form-wrapper {
+ border-bottom: 1px solid #999;
+ margin: 20px 0;
+}
+#llms-form-wrapper #llms_analytics_search {
+ border: none !important;
+ text-shadow: none !important;
+ border: none !important;
+ outline: none !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ margin: 0 !important;
+ color: #fefefe !important;
+ background: #466dd8 !important;
+ border-radius: 0;
+ -webkit-transition: 0.5s;
+ transition: 0.5s;
+}
+#llms-form-wrapper #llms_analytics_search:hover {
+ background: #0185a3 !important;
+}
+#llms-form-wrapper #llms_analytics_search:active {
+ background: #33b1cb !important;
+}
+
+#llms-skip-setup-form .llms-admin-link {
+ background: none !important;
+ border: none;
+ padding: 0 !important;
+ color: #0074a2;
+ cursor: pointer;
+}
+#llms-skip-setup-form .llms-admin-link:hover {
+ color: #2ea2cc;
+}
+#llms-skip-setup-form .llms-admin-link:focus {
+ color: #124964;
+}
+
+/**
+ * Toggle Switch ( replaces checkbox on admin panels )
+ */
+.llms-switch {
+ position: relative;
+}
+.llms-switch .llms-toggle {
+ position: absolute;
+ margin-left: -9999px;
+ visibility: hidden;
+}
+.llms-switch .llms-toggle + label {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: block;
+ position: relative;
+ cursor: pointer;
+ outline: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.llms-switch input.llms-toggle-round + label {
+ border: 2px solid #6c7781;
+ border-radius: 10px;
+ height: 20px;
+ width: 36px;
+}
+.llms-switch input.llms-toggle-round + label:before,
+.llms-switch input.llms-toggle-round + label:after {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ content: "";
+ display: block;
+ position: absolute;
+ -webkit-transition: background 0.4s;
+ transition: background 0.4s;
+}
+.llms-switch input.llms-toggle-round:checked + label {
+ border-color: #11a0d2;
+ background-color: #11a0d2;
+}
+.llms-switch input.llms-toggle-round + label:after {
+ height: 12px;
+ left: 2px;
+ top: 2px;
+ background-color: #6c7781;
+ border-radius: 50%;
+ -webkit-transition: margin 0.4s;
+ transition: margin 0.4s;
+ width: 12px;
+ z-index: 3;
+}
+.llms-switch input.llms-toggle-round:checked + label:after {
+ background-color: #fefefe;
+ margin-left: 16px;
+}
+.llms-switch input.llms-toggle-round + label:before {
+ height: 8px;
+ top: 4px;
+ border: 1px solid #6c7781;
+ border-radius: 50%;
+ right: 4px;
+ width: 8px;
+ z-index: 2;
+}
+.llms-switch input.llms-toggle-round:checked + label:before {
+ border-color: #fefefe;
+ border-radius: 0;
+ left: 6px;
+ right: auto;
+ width: 2px;
+}
+
+#llms-profile-fields {
+ margin: 50px 0;
+}
+#llms-profile-fields .llms-form-field {
+ padding-left: 0;
+}
+#llms-profile-fields label {
+ display: block;
+ font-weight: bold;
+ padding: 8px 0 2px;
+}
+#llms-profile-fields .type-checkbox .type-checkbox label {
+ display: initial;
+ font-weight: initial;
+ padding: 0;
+}
+#llms-profile-fields .type-checkbox .type-checkbox input {
+ display: inline-block;
+ margin-bottom: 0;
+ width: 1rem;
+}
+#llms-profile-fields select {
+ max-width: 100%;
+}
+
+a.llms-voucher-delete {
+ background: #bb231c;
+ color: #fefefe;
+ display: block;
+ padding: 4px 2px;
+ text-decoration: none;
+ -webkit-transition: ease 0.3s all;
+ transition: ease 0.3s all;
+}
+a.llms-voucher-delete:hover {
+ background: #af3a26;
+}
+
+.llms-voucher-codes-wrapper table,
+.llms-voucher-redemption-wrapper table {
+ width: 100%;
+ border-collapse: collapse;
+}
+.llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td,
+.llms-voucher-redemption-wrapper table th,
+.llms-voucher-redemption-wrapper table td {
+ border: none;
+}
+.llms-voucher-codes-wrapper table thead,
+.llms-voucher-redemption-wrapper table thead {
+ background-color: #466dd8;
+ color: #fff;
+}
+.llms-voucher-codes-wrapper table thead th,
+.llms-voucher-redemption-wrapper table thead th {
+ padding: 10px 10px;
+}
+.llms-voucher-codes-wrapper table tr,
+.llms-voucher-redemption-wrapper table tr {
+ counter-increment: row-counter;
+}
+.llms-voucher-codes-wrapper table tr:nth-child(even),
+.llms-voucher-redemption-wrapper table tr:nth-child(even) {
+ background-color: #F1F1F1;
+}
+.llms-voucher-codes-wrapper table tr td,
+.llms-voucher-redemption-wrapper table tr td {
+ padding: 5px;
+}
+.llms-voucher-codes-wrapper table tr td:first-child:before,
+.llms-voucher-redemption-wrapper table tr td:first-child:before {
+ content: counter(row-counter);
+}
+
+.llms-voucher-codes-wrapper table {
+ width: 100%;
+ border-collapse: collapse;
+}
+.llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td {
+ border: none;
+}
+.llms-voucher-codes-wrapper table thead {
+ background-color: #466dd8;
+ color: #fff;
+}
+.llms-voucher-codes-wrapper table tr:nth-child(even) {
+ background-color: #F1F1F1;
+}
+.llms-voucher-codes-wrapper table tr td span {
+ display: inline-block;
+ min-width: 30px;
+}
+.llms-voucher-codes-wrapper button {
+ cursor: pointer;
+}
+.llms-voucher-codes-wrapper .llms-voucher-delete {
+ float: right;
+ margin-right: 15px;
+}
+.llms-voucher-codes-wrapper .llms-voucher-uses {
+ width: 50px;
+}
+.llms-voucher-codes-wrapper .llms-voucher-add-codes {
+ float: right;
+}
+.llms-voucher-codes-wrapper .llms-voucher-add-codes input[type=text] {
+ width: 30px;
+}
+
+.llms-voucher-export-wrapper .llms-voucher-export-type {
+ width: 100%;
+}
+.llms-voucher-export-wrapper .llms-voucher-export-type p {
+ margin: 0 0 0 15px;
+}
+.llms-voucher-export-wrapper .llms-voucher-email-wrapper {
+ width: 100%;
+ margin: 25px 0;
+}
+.llms-voucher-export-wrapper .llms-voucher-email-wrapper input[type=text] {
+ width: 100%;
+}
+.llms-voucher-export-wrapper .llms-voucher-email-wrapper p {
+ margin: 0;
+}
+.llms-voucher-export-wrapper > button {
+ float: right;
+}
+
+.postbox .inside {
+ overflow: auto;
+}
+
+.llms-widget {
+ background-color: #FFF;
+ border: 1px solid #dedede;
+ border-radius: 12px;
+ -webkit-box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ margin-bottom: 20px;
+ padding: 20px;
+ position: relative;
+ width: 100%;
+}
+.llms-widget.alt {
+ border: 1px solid #ccc;
+ background-color: #efefef;
+ margin-bottom: 10px;
+}
+.llms-widget.alt .llms-label {
+ color: #777;
+ font-size: 14px;
+ margin-bottom: 10px;
+ padding-bottom: 5px;
+}
+.llms-widget.alt h2 {
+ color: #444;
+ font-weight: 300;
+}
+.llms-widget a {
+ border-bottom: 1px dotted #466dd8;
+ display: inline-block;
+ text-decoration: none;
+}
+.llms-widget a:hover {
+ border-bottom: 1px dotted #2b55cb;
+}
+.llms-widget .llms-widget-content {
+ margin: 0.67em 0;
+ color: #466dd8;
+ font-size: 2.4em;
+ font-weight: 700;
+ line-height: 1;
+ word-break: break-all;
+}
+.llms-widget h2 {
+ font-size: 1.8em;
+}
+.llms-widget .llms-label {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 18px;
+ font-weight: 400;
+ margin: 0 0 10px 0;
+ text-align: center;
+}
+.llms-widget .llms-chart {
+ width: 100%;
+ padding: 10px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-widget mark.yes {
+ background-color: #7ad03a;
+}
+.llms-widget .llms-subtitle {
+ margin-bottom: 0;
+}
+.llms-widget .spinner {
+ float: none;
+ left: 50%;
+ margin: -10px 0 0 -10px;
+ position: absolute;
+ top: 50%;
+ z-index: 2;
+}
+.llms-widget.is-loading:before {
+ background: #fefefe;
+ bottom: 0;
+ content: "";
+ left: 0;
+ opacity: 0.9;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 1;
+}
+.llms-widget.is-loading .spinner {
+ visibility: visible;
+}
+.llms-widget td[colspan="2"] {
+ padding-left: 0;
+}
+.llms-widget tr.llms-disabled-field {
+ opacity: 0.5;
+ pointer-events: none;
+}
+
+.llms-widget-1-3,
+.llms-widget-1-4,
+.llms-widget-1-5 {
+ text-align: center;
+}
+
+.llms-widget .llms-widget-info-toggle {
+ color: #AAA;
+ cursor: pointer;
+ font-size: 16px;
+ position: absolute;
+ right: 20px;
+ top: 20px;
+}
+.llms-widget.info-showing .llms-widget-info {
+ display: block;
+}
+
+.llms-widget-info {
+ background: #444;
+ color: #fefefe;
+ bottom: -50px;
+ display: none;
+ padding: 15px;
+ position: absolute;
+ text-align: center;
+ left: 10px;
+ right: 15px;
+ z-index: 3;
+}
+.llms-widget-info:before {
+ content: "";
+ border: 12px solid transparent;
+ border-bottom-color: #444;
+ left: 50%;
+ margin-left: -12px;
+ position: absolute;
+ top: -24px;
+}
+.llms-widget-info p {
+ margin: 0;
+}
+
+.llms-widget-row:before, .llms-widget-row:after {
+ content: " ";
+ display: table;
+}
+.llms-widget-row:after {
+ clear: both;
+}
+
+.llms-widget-row .no-padding {
+ padding: 0 !important;
+}
+
+/******************************************************************
+
+SVG Styles
+
+******************************************************************/
+svg.icon {
+ height: 24px;
+ width: 24px;
+ display: inline-block;
+ fill: currentColor;
+ vertical-align: baseline;
+}
+button svg.icon {
+ height: 18px;
+ width: 18px;
+ margin: 4px -4px 0 4px;
+ -webkit-filter: drop-shadow(0 1px #eee);
+ filter: drop-shadow(0 1px #eee);
+ float: right;
+}
+svg.icon.menu-icon {
+ height: 20px;
+ width: 20px;
+ display: inline-block;
+ fill: currentColor;
+ vertical-align: text-bottom;
+ margin-right: 10px;
+}
+svg.icon.tree-icon {
+ height: 13px;
+ width: 13px;
+ vertical-align: middle;
+}
+svg.icon.section-icon {
+ height: 16px;
+ width: 16px;
+ vertical-align: text-bottom;
+}
+svg.icon.button-icon {
+ height: 16px;
+ width: 16px;
+ vertical-align: text-bottom;
+}
+svg.icon.button-icon-attr {
+ height: 10px;
+ width: 10px;
+ vertical-align: middle;
+}
+svg.icon.list-icon {
+ height: 12px;
+ width: 12px;
+ vertical-align: middle;
+}
+svg.icon.list-icon.on {
+ color: #466dd8;
+}
+svg.icon.list-icon.off {
+ color: #444;
+}
+svg.icon.detail-icon {
+ height: 16px;
+ width: 16px;
+ vertical-align: text-bottom;
+ cursor: default;
+}
+svg.icon.detail-icon.on {
+ color: #466dd8;
+}
+svg.icon.detail-icon.off {
+ color: #ccc;
+}
+svg.icon-ion-arrow-up {
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+svg use {
+ pointer-events: none;
+}
+
+/******************************************************************
+
+Metabox Tabs
+
+******************************************************************/
+#side-sortables .tab-content {
+ padding: 0;
+}
+
+.llms-mb-container .tab-content {
+ display: none;
+ background-color: #FFF;
+ padding: 0 20px;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) {
+ margin: 0 0 15px 0;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li {
+ padding: 20px 0;
+ margin: 0;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.select:not([class*=d-]) {
+ width: 100%;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li:last-child {
+ border: 0;
+ padding-bottom: 0;
+}
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.top {
+ border-bottom: 0;
+ padding-bottom: 0;
+}
+.llms-mb-container .tab-content .full-width {
+ width: 100%;
+}
+.llms-mb-container .tab-content #wp-content-editor-tools {
+ background: none;
+}
+
+.llms-mb-container .tab-content.llms-active {
+ display: inherit;
+}
+
+.llms-mb-container .tab-content .no-border {
+ border-bottom: 0px;
+}
+
+/******************************************************************
+
+Styles for topModal modal
+
+******************************************************************/
+/**
+ * Base modal styles
+ */
+.topModal {
+ display: none;
+ position: relative;
+ border: 4px solid #808080;
+ background: #fff;
+ z-index: 1000001;
+ padding: 2px;
+ max-width: 500px;
+ margin: 34px auto 0;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+ background-color: #ffffff;
+ border-radius: 2px;
+ border: 1px solid #dddddd;
+}
+
+.topModalClose {
+ float: right;
+ cursor: pointer;
+ margin-right: 10px;
+ margin-top: 10px;
+}
+
+.topModalContainer {
+ display: none;
+ overflow: auto;
+ overflow-y: hidden;
+ position: fixed;
+ top: 0 !important;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ -webkit-overflow-scrolling: touch;
+ width: auto !important;
+ margin-left: 0 !important;
+ background-color: transparent !important;
+ z-index: 100002 !important;
+}
+
+.topModalBackground {
+ display: none;
+ background: #000;
+ position: fixed;
+ height: 100%;
+ width: 100%;
+ top: 0 !important;
+ left: 0;
+ margin-left: 0 !important;
+ z-index: 100002 !important;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: auto;
+ overflow-y: hidden;
+}
+
+body.modal-open {
+ overflow: hidden;
+}
+
+.llms-modal-header {
+ border-top-right-radius: 1px;
+ border-top-left-radius: 1px;
+ background: #466dd8;
+ color: #eeeeee;
+ padding: 10px 15px;
+ font-size: 18px;
+}
+
+#llms-icon-modal-close {
+ width: 16px;
+ height: 16px;
+ fill: #fefefe;
+}
+
+.llms-modal-content {
+ padding: 20px;
+}
+.llms-modal-content h3 {
+ margin-top: 0;
+}
+
+/**
+ * Custom Modal Styles for LifterLMS
+ */
+.llms-modal-form h1 {
+ margin-top: 0;
+}
+.llms-modal-form input[type=text] {
+ width: 100%;
+}
+.llms-modal-form textarea,
+.llms-modal-form input[type=text],
+.llms-modal-form input[type=password],
+.llms-modal-form input[type=file],
+.llms-modal-form input[type=datetime],
+.llms-modal-form input[type=datetime-local],
+.llms-modal-form input[type=date],
+.llms-modal-form input[type=month],
+.llms-modal-form input[type=time],
+.llms-modal-form input[type=week],
+.llms-modal-form input[type=number],
+.llms-modal-form input[type=email],
+.llms-modal-form input[type=url],
+.llms-modal-form input[type=search],
+.llms-modal-form input[type=tel],
+.llms-modal-form input[type=color] {
+ padding: 0 0.4em 0 0.4em;
+ margin-bottom: 2em;
+ vertical-align: middle;
+ border-radius: 3px;
+ min-width: 50px;
+ max-width: 635px;
+ width: 100%;
+ min-height: 32px;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ margin: 0 0 24px 0;
+ outline: none;
+ -webkit-transition: border 0.3s ease-in-out 0s;
+ transition: border 0.3s ease-in-out 0s;
+}
+.llms-modal-form textarea:focus,
+.llms-modal-form input[type=text]:focus,
+.llms-modal-form input[type=password]:focus,
+.llms-modal-form input[type=file]:focus,
+.llms-modal-form input[type=datetime]:focus,
+.llms-modal-form input[type=datetime-local]:focus,
+.llms-modal-form input[type=date]:focus,
+.llms-modal-form input[type=month]:focus,
+.llms-modal-form input[type=time]:focus,
+.llms-modal-form input[type=week]:focus,
+.llms-modal-form input[type=number]:focus,
+.llms-modal-form input[type=email]:focus,
+.llms-modal-form input[type=url]:focus,
+.llms-modal-form input[type=search]:focus,
+.llms-modal-form input[type=tel]:focus,
+.llms-modal-form input[type=color]:focus {
+ background: #fefefe;
+ border: 1px solid #466dd8;
+}
+.llms-modal-form textarea {
+ padding: 0.4em !important;
+ height: 100px !important;
+ border-radius: 3px;
+ vertical-align: middle;
+ min-height: 32px;
+ outline: none;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-modal-form textarea:focus {
+ background: #fefefe;
+ border: 1px solid #466dd8;
+}
+.llms-modal-form .chosen-container-single .chosen-single {
+ border-radius: 3px;
+ vertical-align: middle;
+ min-height: 32px;
+ border: 1px solid #ccc;
+ width: 100%;
+ background: #fefefe !important;
+ outline: none;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: 0 0 0 #fff;
+ box-shadow: 0 0 0 #fff;
+ line-height: 32px;
+ margin: 0 0 24px 0;
+}
+.llms-modal-form .chosen-container-single .chosen-single:focus {
+ background: #fefefe;
+ border: 1px solid #466dd8;
+}
+.llms-modal-form .chosen-container-single .chosen-single div b {
+ margin-top: 4px;
+}
+.llms-modal-form .chosen-search input[type=text] {
+ border: 1px solid #ccc;
+}
+.llms-modal-form .chosen-search input[type=text]:focus {
+ background-color: #fefefe;
+ border: 1px solid #466dd8;
+}
+.llms-modal-form .chosen-container-single .chosen-drop {
+ margin-top: -28px;
+}
+.llms-modal-form .llms-button-primary, .llms-modal-form .llms-button-secondary {
+ padding: 10px 10px;
+ border-radius: 0;
+ -webkit-transition: 0.5s;
+ transition: 0.5s;
+ -webkit-box-shadow: 0 1px 1px #ccc;
+ box-shadow: 0 1px 1px #ccc;
+}
+.llms-modal-form .llms-button-primary.full, .llms-modal-form .llms-button-secondary.full {
+ width: 100%;
+}
+
+.modal-open .select2-dropdown {
+ z-index: 1000005;
+}
+
+.button.llms-merge-code-button {
+ vertical-align: middle;
+}
+.button.llms-merge-code-button svg {
+ margin-right: 2px;
+ position: relative;
+ top: 4px;
+ width: 16px;
+}
+.button.llms-merge-code-button svg g {
+ fill: currentColor;
+}
+
+.llms-mb-container .llms-merge-code-wrapper {
+ float: right;
+ top: -5px;
+}
+
+.llms-merge-code-wrapper {
+ display: inline;
+ position: relative;
+}
+
+.llms-merge-codes {
+ background: #f7f7f7;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 1px 0 #ccc;
+ box-shadow: 0 1px 0 #ccc;
+ color: #555;
+ display: none;
+ left: 1px;
+ overflow: hidden;
+ position: absolute;
+ top: 30px;
+ width: 200px;
+}
+.llms-merge-codes ul {
+ margin: 0;
+ padding: 0;
+}
+.llms-merge-codes li {
+ cursor: pointer;
+ margin: 0;
+ padding: 4px 8px !important;
+ border-bottom: 1px solid #ccc;
+}
+.llms-merge-codes li:hover {
+ color: #23282d;
+ background: #fefefe;
+}
+.llms-merge-codes.active {
+ display: block;
+ z-index: 777;
+}
+
+/******************************************************************
+
+Base Mobile
+
+******************************************************************/
+.llms-nav-tab,
+.llms-nav-tab-filters {
+ display: block;
+ width: 100%;
+}
+
+form.llms-nav-tab-filters.full-width {
+ width: 100%;
+}
+form.llms-nav-tab-filters.full-width label {
+ display: inline-block;
+ width: 10%;
+ text-align: left;
+}
+form.llms-nav-tab-filters.full-width .select2-container {
+ width: 85% !important;
+}
+
+.llms-nav-tab-settings {
+ display: block;
+ width: 100%;
+}
+
+#llms-form-wrapper .llms-select {
+ width: 100%;
+ margin-bottom: 20px;
+}
+#llms-form-wrapper .llms-checkbox {
+ display: inline-block;
+ width: 100%;
+ text-align: left;
+}
+#llms-form-wrapper .llms-filter-options {
+ width: 100%;
+}
+#llms-form-wrapper .llms-date-select {
+ width: 100%;
+ display: inline-block;
+ margin-bottom: 20px;
+}
+#llms-form-wrapper .llms-date-select input[type=text] {
+ width: 100%;
+}
+ul.tabs li {
+ display: block;
+}
+
+@media only screen and (min-width: 481px) {
+ /******************************************************************
+
+ Larger Phones
+
+ ******************************************************************/
+ #llms-form-wrapper .llms-checkbox {
+ width: 33%;
+ }
+}
+@media only screen and (min-width: 768px) {
+ /******************************************************************
+
+ Tablets and small computers
+
+ ******************************************************************/
+ ul.tabs li {
+ display: inline-block;
+ }
+ .llms-nav-tab {
+ display: inline-block;
+ width: 33%;
+ }
+ .llms-nav-tab-settings {
+ display: inline-block;
+ width: 25%;
+ }
+ #llms-form-wrapper .llms-select {
+ width: 50%;
+ max-width: 500px;
+ }
+ #llms-form-wrapper .llms-filter-options {
+ width: 50%;
+ max-width: 500px;
+ }
+ #llms-form-wrapper .llms-date-select {
+ width: 47.5%;
+ }
+ #llms-form-wrapper .llms-date-select:first-child {
+ margin-right: 5%;
+ }
+ .llms-widget input[type=text],
+.llms-widget input[type=password],
+.llms-widget input[type=datetime],
+.llms-widget input[type=datetime-local],
+.llms-widget input[type=date],
+.llms-widget input[type=month],
+.llms-widget input[type=time],
+.llms-widget input[type=week],
+.llms-widget input[type=number],
+.llms-widget input[type=email],
+.llms-widget input[type=url],
+.llms-widget input[type=search],
+.llms-widget input[type=tel],
+.llms-widget input[type=color],
+.llms-widget select,
+.llms-widget textarea {
+ width: 50%;
+ }
+ .llms-widget input[type=text].medium,
+.llms-widget input[type=password].medium,
+.llms-widget input[type=datetime].medium,
+.llms-widget input[type=datetime-local].medium,
+.llms-widget input[type=date].medium,
+.llms-widget input[type=month].medium,
+.llms-widget input[type=time].medium,
+.llms-widget input[type=week].medium,
+.llms-widget input[type=number].medium,
+.llms-widget input[type=email].medium,
+.llms-widget input[type=url].medium,
+.llms-widget input[type=search].medium,
+.llms-widget input[type=tel].medium,
+.llms-widget input[type=color].medium,
+.llms-widget select.medium,
+.llms-widget textarea.medium {
+ width: 30%;
+ }
+ .llms-widget input[type=text].small,
+.llms-widget input[type=password].small,
+.llms-widget input[type=datetime].small,
+.llms-widget input[type=datetime-local].small,
+.llms-widget input[type=date].small,
+.llms-widget input[type=month].small,
+.llms-widget input[type=time].small,
+.llms-widget input[type=week].small,
+.llms-widget input[type=number].small,
+.llms-widget input[type=email].small,
+.llms-widget input[type=url].small,
+.llms-widget input[type=search].small,
+.llms-widget input[type=tel].small,
+.llms-widget input[type=color].small,
+.llms-widget select.small,
+.llms-widget textarea.small {
+ width: 20%;
+ }
+ .llms-widget input[type=text].tiny,
+.llms-widget input[type=password].tiny,
+.llms-widget input[type=datetime].tiny,
+.llms-widget input[type=datetime-local].tiny,
+.llms-widget input[type=date].tiny,
+.llms-widget input[type=month].tiny,
+.llms-widget input[type=time].tiny,
+.llms-widget input[type=week].tiny,
+.llms-widget input[type=number].tiny,
+.llms-widget input[type=email].tiny,
+.llms-widget input[type=url].tiny,
+.llms-widget input[type=search].tiny,
+.llms-widget input[type=tel].tiny,
+.llms-widget input[type=color].tiny,
+.llms-widget select.tiny,
+.llms-widget textarea.tiny {
+ width: 10%;
+ }
+}
+@media only screen and (min-width: 1030px) {
+ /******************************************************************
+
+ Desktop Stylesheet
+
+ ******************************************************************/
+ .llms-nav-tab {
+ display: inline-block;
+ width: 33.333%;
+ }
+ .llms-nav-tab-settings {
+ display: inline-block;
+ width: 25%;
+ }
+ #llms-form-wrapper .llms-select {
+ display: inline-block;
+ width: 47.5%;
+ }
+ #llms-form-wrapper .llms-select:first-child {
+ margin-right: 5%;
+ }
+ #llms-form-wrapper .llms-filter-options {
+ display: inline-block;
+ width: 47.5%;
+ }
+ #llms-form-wrapper .llms-filter-options.date-filter {
+ margin-right: 5%;
+ }
+ #llms-form-wrapper .llms-filter-options .llms-date-select {
+ margin-bottom: 0;
+ }
+ #llms-form-wrapper .llms-date-select {
+ width: 47.5%;
+ }
+ #llms-form-wrapper .llms-date-select:first-child {
+ margin-right: 5%;
+ }
+ .llms-widget-row:before, .llms-widget-row:after {
+ content: " ";
+ display: table;
+ }
+ .llms-widget-row:after {
+ clear: both;
+ }
+ .llms-widget-row .llms-widget-1-5 {
+ vertical-align: top;
+ width: 20%;
+ float: left;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 5px;
+ }
+ .llms-widget-row .llms-widget-1-4 {
+ vertical-align: top;
+ width: 25%;
+ float: left;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 5px;
+ }
+ .llms-widget-row .llms-widget-1-3 {
+ width: 33.3%;
+ float: left;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 5px;
+ }
+ .llms-widget-row .llms-widget-1-2 {
+ width: 50%;
+ float: left;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 5px;
+ vertical-align: top;
+ }
+}
+@media only screen and (min-width: 1240px) {
+ /******************************************************************
+
+ large Monitor Stylesheet
+
+ ******************************************************************/
+ .llms-nav-tab-filters,
+.llms-nav-tab-settings {
+ float: left;
+ width: 12.5%;
+ }
+}
+.wrap.lifterlms {
+ margin-top: 0;
+}
+
+.llms-header {
+ background-color: #FFF;
+ margin: 0 0 0 -20px;
+ padding: 20px 10px;
+ position: relative;
+ z-index: 1;
+}
+.llms-header .llms-inside-wrap {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 0 10px;
+}
+.llms-header .lifterlms-logo {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 190px;
+ flex: 0 0 190px;
+ max-height: 52px;
+ margin-right: 10px;
+}
+.llms-header .llms-meta {
+ -ms-flex-item-align: center;
+ align-self: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ font-size: 16px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ line-height: 1.5;
+}
+.llms-header .llms-meta .llms-version {
+ background-color: #1d2327;
+ color: #FFF;
+ border-radius: 999px;
+ font-size: 13px;
+ font-weight: 700;
+ padding: 6px 12px;
+}
+.llms-header .llms-meta a {
+ display: inline-block;
+}
+.llms-header .llms-meta .llms-license {
+ border-right: 1px solid #CCC;
+ font-weight: 700;
+ margin-right: 12px;
+ padding-right: 12px;
+}
+.llms-header .llms-meta .llms-license a {
+ text-decoration: none;
+}
+.llms-header .llms-meta .llms-license a:before {
+ content: "\f534";
+ display: inline-block;
+ font: 400 16px/1 dashicons;
+ left: 0;
+ padding-right: 3px;
+ position: relative;
+ text-decoration: none;
+ vertical-align: text-bottom;
+}
+.llms-header .llms-meta .llms-license a.llms-license-none {
+ color: #888;
+}
+.llms-header .llms-meta .llms-license a.llms-license-none:before {
+ content: "\f335";
+}
+.llms-header .llms-meta .llms-license a.llms-license-active {
+ color: #008a20;
+}
+.llms-header .llms-meta .llms-license a.llms-license-active:before {
+ content: "\f112";
+}
+.llms-header .llms-meta .llms-support {
+ font-weight: 700;
+}
+.llms-header .llms-meta .llms-support a {
+ color: #1d2327;
+ text-decoration: none;
+}
+
+.llms-subheader {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ margin-left: -20px;
+ padding: 10px 20px;
+ width: 100%;
+ z-index: 1;
+}
+.llms-subheader h1 {
+ font-weight: 700;
+ padding: 0;
+}
+.llms-subheader h1 a {
+ color: inherit;
+ text-decoration: none;
+}
+
+#post_course_difficulty {
+ min-width: 200px;
+}
+
+#_video-embed, #_audio-embed {
+ width: 100%;
+}
+
+hr {
+ background-color: #CCC;
+ border: none;
+ height: 1px;
+ margin: 30px 0;
+ padding: 0;
+}
+
+.llms_certificate_default_image, .llms_certificate_image {
+ width: 300px;
+}
+
+.llms_achievement_default_image, .llms_achievement_image {
+ width: 120px;
+}
+
+div[id^=lifterlms-] .inside {
+ overflow: visible;
+}
+
+.notice.llms-admin-notice {
+ background-color: #FFF;
+ border: 1px solid #ccd0d4;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 0 !important;
+ position: relative;
+}
+.notice.llms-admin-notice .notice-dismiss {
+ text-decoration: none;
+}
+.notice.llms-admin-notice.notice-warning {
+ border-left: 4px solid #F8954F;
+}
+.notice.llms-admin-notice.notice-warning .llms-admin-notice-icon {
+ background-color: #FEF4ED;
+}
+.notice.llms-admin-notice.notice-info {
+ border-left: 4px solid #466DD8;
+}
+.notice.llms-admin-notice.notice-info h3 {
+ color: #466DD8;
+}
+.notice.llms-admin-notice.notice-info .llms-admin-notice-icon {
+ background-color: #EDF0FB;
+}
+.notice.llms-admin-notice.notice-success {
+ border-left: 4px solid #18A957;
+}
+.notice.llms-admin-notice.notice-success h3 {
+ color: #18A957;
+}
+.notice.llms-admin-notice.notice-success .llms-admin-notice-icon {
+ background-color: #E8F6EE;
+}
+.notice.llms-admin-notice.notice-error {
+ border-left: 4px solid #DF1642;
+}
+.notice.llms-admin-notice.notice-error h3 {
+ color: #9C0F2E;
+}
+.notice.llms-admin-notice.notice-error .llms-admin-notice-icon {
+ background-color: #FCE8EC;
+}
+.notice.llms-admin-notice .llms-admin-notice-icon {
+ background-image: url(../../assets/images/lifterlms-icon-color.png);
+ background-position: center center;
+ background-repeat: no-repeat;
+ background-size: 30px;
+ min-width: 70px;
+}
+.notice.llms-admin-notice .llms-admin-notice-content {
+ color: #111;
+ padding: 20px;
+}
+.notice.llms-admin-notice h3 {
+ font-size: 18px;
+ font-weight: 700;
+ line-height: 25px;
+ margin: 0 0 15px 0;
+}
+.notice.llms-admin-notice button,
+.notice.llms-admin-notice .llms-button-primary {
+ display: inline-block;
+}
+.notice.llms-admin-notice p {
+ font-size: 14px;
+ line-height: 22px;
+ margin: 0 0 15px 0;
+ max-width: 65em;
+ padding: 0;
+}
+.notice.llms-admin-notice p:last-of-type {
+ margin-bottom: 0;
+}
+
+.llms-button-action.small .dashicons,
+.llms-button-danger.small .dashicons,
+.llms-button-primary.small .dashicons,
+.llms-button-secondary.small .dashicons {
+ font-size: 13px;
+ height: 13px;
+ width: 13px;
+}
+.llms-button-action:hover,
+.llms-button-danger:hover,
+.llms-button-primary:hover,
+.llms-button-secondary:hover {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+a.llms-view-as {
+ line-height: 2;
+ margin-right: 8px;
+}
+
+.llms-image-field-preview {
+ max-height: 80px;
+ vertical-align: middle;
+ width: auto;
+}
+
+.llms-image-field-remove.hidden {
+ display: none;
+}
+
+.llms-log-viewer {
+ background: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+ margin: 20px 0;
+ padding: 25px;
+}
+.llms-log-viewer pre {
+ font-family: monospace;
+ margin: 0;
+ padding: 0;
+ white-space: pre-wrap;
+}
+
+.llms-status--tools .llms-table {
+ background: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
+}
+.llms-status--tools .llms-table td, .llms-status--tools .llms-table th {
+ padding: 10px;
+ vertical-align: top;
+}
+.llms-status--tools .llms-table th {
+ width: 28%;
+}
+.llms-status--tools .llms-table p {
+ margin: 0 0 10px;
+}
+
+.llms-error {
+ color: #bb231c;
+ font-style: italic;
+}
+
+.llms-rating-stars {
+ color: #ffb900;
+ text-decoration: none;
+}
+
+@media screen and (max-width: 782px) {
+ .llms-header {
+ top: 46px;
+ }
+ .llms-header .llms-inside-wrap {
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 20px;
+ }
+ .llms-header .llms-inside-wrap .lifterlms-logo {
+ -ms-flex-item-align: center;
+ align-self: center;
+ -webkit-box-flex: inherit;
+ -ms-flex: inherit;
+ flex: inherit;
+ max-height: initial;
+ max-width: 200px;
+ }
+ .llms-header .llms-inside-wrap .llms-meta {
+ -webkit-column-gap: 10px;
+ -moz-column-gap: 10px;
+ column-gap: 10px;
+ }
+}
+.llms-table-wrap {
+ position: relative;
+}
+
+.llms-table-header {
+ padding: 0;
+}
+.llms-table-header:before, .llms-table-header:after {
+ content: " ";
+ display: table;
+}
+.llms-table-header:after {
+ clear: both;
+}
+.llms-table-header h2 {
+ font-size: 20px;
+ padding: 0;
+ display: inline-block;
+ line-height: 1.5;
+ margin: 0 0 20px 0;
+ vertical-align: middle;
+}
+.llms-table-header .llms-table-search,
+.llms-table-header .llms-table-filters {
+ float: right;
+ padding-left: 10px;
+}
+.llms-table-header .llms-table-search input {
+ margin: 0;
+ padding: 0 8px;
+}
+
+.llms-table {
+ border: 1px solid #c3c4c7;
+ border-collapse: collapse;
+ width: 100%;
+}
+.llms-table a:not(.small) {
+ color: #466dd8;
+}
+.llms-table a:not(.small):hover {
+ color: #2b55cb;
+}
+.llms-table td, .llms-table th {
+ border-bottom: 1px solid #c3c4c7;
+ padding: 10px 12px;
+ text-align: center;
+}
+.llms-table td.expandable.closed, .llms-table th.expandable.closed {
+ display: none;
+}
+.llms-table td .llms-button-primary,
+.llms-table td .llms-button-secondary,
+.llms-table td .llms-button-action,
+.llms-table td .llms-button-danger, .llms-table th .llms-button-primary,
+.llms-table th .llms-button-secondary,
+.llms-table th .llms-button-action,
+.llms-table th .llms-button-danger {
+ display: inline-block;
+}
+.llms-table tr.llms-quiz-pending td {
+ font-weight: 700;
+}
+.llms-table thead th,
+.llms-table tfoot th {
+ background-color: #FFF;
+ font-weight: 700;
+}
+.llms-table thead th a.llms-sortable,
+.llms-table tfoot th a.llms-sortable {
+ padding-right: 16px;
+ position: relative;
+ text-decoration: none;
+ width: 100%;
+}
+.llms-table thead th a.llms-sortable.active[data-order=DESC] .asc,
+.llms-table tfoot th a.llms-sortable.active[data-order=DESC] .asc {
+ opacity: 1;
+}
+.llms-table thead th a.llms-sortable.active[data-order=ASC] .desc,
+.llms-table tfoot th a.llms-sortable.active[data-order=ASC] .desc {
+ opacity: 1;
+}
+.llms-table thead th a.llms-sortable:hover[data-order=DESC] .asc,
+.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .asc {
+ opacity: 0;
+}
+.llms-table thead th a.llms-sortable:hover[data-order=DESC] .desc,
+.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .desc {
+ opacity: 1;
+}
+.llms-table thead th a.llms-sortable:hover[data-order=ASC] .asc,
+.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .asc {
+ opacity: 1;
+}
+.llms-table thead th a.llms-sortable:hover[data-order=ASC] .desc,
+.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .desc {
+ opacity: 0;
+}
+.llms-table thead th a.llms-sortable .dashicons,
+.llms-table tfoot th a.llms-sortable .dashicons {
+ color: #444;
+ font-size: 16px;
+ height: 16px;
+ opacity: 0;
+ position: absolute;
+ width: 16px;
+}
+.llms-table tfoot th {
+ border-bottom: none;
+}
+.llms-table tfoot th .llms-table-export {
+ float: left;
+}
+.llms-table tfoot th .llms-table-export .llms-table-progress {
+ background: #efefef;
+ display: none;
+ margin-left: 8px;
+ vertical-align: middle;
+ width: 100px;
+}
+.llms-table tfoot th .llms-table-pagination {
+ float: right;
+}
+.llms-table.zebra tbody tr:nth-child(even) th, .llms-table.zebra tbody tr:nth-child(even) td {
+ background-color: #fff;
+}
+.llms-table.zebra tbody tr:nth-child(odd) th, .llms-table.zebra tbody tr:nth-child(odd) td {
+ background-color: #f6f7f7;
+}
+.llms-table.text-left td, .llms-table.text-left th {
+ text-align: left;
+}
+.llms-table.size-large td, .llms-table.size-large th {
+ font-size: 14px;
+ padding: 10px 12px;
+}
+.llms-table .llms-drag-handle {
+ color: #777;
+ cursor: pointer;
+ -webkit-transition: color 0.4s ease;
+ transition: color 0.4s ease;
+}
+.llms-table .llms-action-icon {
+ color: #777;
+ text-decoration: none;
+}
+.llms-table .llms-action-icon .tooltip {
+ cursor: pointer;
+}
+.llms-table .llms-action-icon:hover {
+ color: #466dd8;
+}
+.llms-table .llms-action-icon.danger:hover {
+ color: #bb231c;
+}
+.llms-table .llms-table-page-count {
+ font-size: 12px;
+ padding: 0 5px;
+}
+
+.llms-table-progress {
+ text-align: center;
+}
+.llms-table-progress .llms-table-progress-bar {
+ background: #eee;
+ border-radius: 10px;
+ height: 16px;
+ overflow: hidden;
+ position: relative;
+}
+.llms-table-progress .llms-table-progress-bar .llms-table-progress-inner {
+ background: #466dd8;
+ height: 100%;
+ -webkit-transition: width 0.2s ease;
+ transition: width 0.2s ease;
+}
+.llms-table-progress .llms-table-progress-text {
+ color: #466dd8;
+ font-size: 12px;
+ font-weight: 700;
+ line-height: 16px;
+}
+
+.llms-table.llms-gateway-table .status .fa,
+.llms-table.llms-integrations-table .status .fa {
+ color: #466dd8;
+ font-size: 22px;
+}
+.llms-table.llms-gateway-table .sort,
+.llms-table.llms-integrations-table .sort {
+ cursor: move;
+ text-align: center;
+ width: 10px;
+}
+
+.llms-gb-table-notifications th, .llms-gb-table-notifications td {
+ text-align: left;
+}
+
+.llms-order-note .llms-order-note-content {
+ background: #efefef;
+ margin-bottom: 10px;
+ padding: 10px;
+ position: relative;
+}
+.llms-order-note .llms-order-note-content:after {
+ border-style: solid;
+ border-color: #efefef transparent;
+ border-width: 10px 10px 0 0;
+ bottom: -10px;
+ content: "";
+ display: block;
+ height: 0;
+ left: 20px;
+ position: absolute;
+ width: 0;
+}
+.llms-order-note .llms-order-note-content p {
+ font-size: 13px;
+ margin: 0;
+ line-height: 1.5;
+}
+.llms-order-note .llms-order-note-meta {
+ color: #999;
+ font-size: 11px;
+ margin-left: 10px;
+}
+
+.llms-mb-list label {
+ font-size: 15px;
+ font-weight: 700;
+ line-height: 1.5;
+ display: block;
+ width: 100%;
+}
+.llms-mb-list .description {
+ margin-bottom: 8px;
+}
+.llms-mb-list .input-full {
+ width: 100%;
+}
+
+#poststuff .llms-metabox h2, #poststuff .llms-metabox h3, #poststuff .llms-metabox h6 {
+ margin: 0;
+ padding: 0;
+}
+#poststuff .llms-metabox h2 {
+ font-size: 18px;
+ font-weight: 700;
+}
+#poststuff .llms-metabox h3 {
+ color: #777;
+ font-size: 16px;
+}
+#poststuff .llms-metabox h4 {
+ border-bottom: 1px solid #e5e5e5;
+ padding: 0;
+ margin: 0;
+}
+#poststuff .llms-metabox .llms-transaction-test-mode {
+ background: #ffffd7;
+ font-style: italic;
+ left: 0;
+ padding: 2px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ text-align: center;
+}
+#poststuff .llms-metabox a.llms-editable,
+#poststuff .llms-metabox .llms-metabox-icon,
+#poststuff .llms-metabox button.llms-editable {
+ color: #999;
+ text-decoration: none;
+}
+#poststuff .llms-metabox a.llms-editable:hover,
+#poststuff .llms-metabox .llms-metabox-icon:hover,
+#poststuff .llms-metabox button.llms-editable:hover {
+ color: #466dd8;
+}
+#poststuff .llms-metabox button.llms-editable {
+ border: none;
+ background: none;
+ cursor: pointer;
+ padding: 0;
+ vertical-align: top;
+}
+#poststuff .llms-metabox h4 button.llms-editable {
+ float: right;
+}
+#poststuff .llms-metabox .llms-table {
+ margin-top: 10px;
+}
+
+.llms-metabox-section {
+ background: #fff;
+ margin-top: 25px;
+ position: relative;
+}
+.llms-metabox-section.no-top-margin {
+ margin-top: 0;
+}
+.llms-metabox-section .llms-metabox-field {
+ margin: 15px 0;
+ position: relative;
+}
+.llms-metabox-section .llms-metabox-field label {
+ color: #777;
+ display: block;
+ margin-bottom: 5px;
+ font-weight: 500;
+ vertical-align: baseline;
+}
+.llms-metabox-section .llms-metabox-field select,
+.llms-metabox-section .llms-metabox-field textarea,
+.llms-metabox-section .llms-metabox-field input[type=text],
+.llms-metabox-section .llms-metabox-field input[type=number] {
+ width: 100%;
+}
+.llms-metabox-section .llms-metabox-field input.md-text {
+ width: 105px;
+}
+.llms-metabox-section .llms-metabox-field input.sm-text {
+ width: 45px;
+}
+.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-date-input {
+ width: 95px;
+}
+.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-time-input {
+ width: 45px;
+}
+.llms-metabox-section .llms-metabox-field .llms-datetime-field em {
+ font-style: normal;
+ padding: 0 3px;
+}
+
+.llms-collapsible {
+ border: 1px solid #e5e5e5;
+ position: relative;
+ margin-top: 0;
+ margin-bottom: -1px;
+}
+.llms-collapsible:last-child {
+ margin-bottom: 0;
+}
+.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-down {
+ display: none;
+}
+.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-up {
+ display: inline;
+}
+.llms-collapsible .llms-collapsible-header {
+ padding: 10px;
+}
+.llms-collapsible .llms-collapsible-header h3 {
+ color: #777;
+ margin: 0;
+ font-size: 16px;
+}
+.llms-collapsible .llms-collapsible-header .dashicons-arrow-up {
+ display: inline;
+}
+.llms-collapsible .llms-collapsible-header .dashicons-arrow-up {
+ display: none;
+}
+.llms-collapsible .llms-collapsible-header a {
+ text-decoration: none;
+}
+.llms-collapsible .llms-collapsible-header .dashicons {
+ color: #777;
+ cursor: pointer;
+ -webkit-transition: color 0.4s ease;
+ transition: color 0.4s ease;
+}
+.llms-collapsible .llms-collapsible-header .dashicons:hover {
+ color: #466dd8;
+}
+.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning:hover, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-trash:hover, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-no:hover {
+ color: #bb231c;
+}
+.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger:hover {
+ color: #c05621;
+}
+.llms-collapsible .llms-collapsible-body {
+ display: none;
+ padding: 10px;
+}
+
+._llms_instructors_data.repeater .llms-repeater-rows .llms-repeater-row:first-child .llms-repeater-remove {
+ display: none;
+}
+._llms_instructors_data.repeater .llms-mb-list {
+ padding: 0 5px !important;
+}
+
+.post-type-llms_order #post-body-content {
+ display: none;
+}
+
+#lifterlms-order-details .handlediv,
+#lifterlms-order-details .handlediv.button-link,
+#lifterlms-order-details .postbox-header {
+ display: none;
+}
+#lifterlms-order-details .inside {
+ padding: 20px;
+ margin-top: 0;
+}
+
+.llms-table tbody tr.llms-txn-failed td {
+ background-color: rgba(187, 35, 28, 0.5);
+ border-bottom-color: rgba(187, 35, 28, 0.5);
+}
+
+.llms-table tbody tr.llms-txn-refunded td {
+ background-color: rgba(255, 165, 0, 0.5);
+ border-bottom-color: rgba(255, 165, 0, 0.5);
+}
+
+.llms-txn-refund-form .llms-metabox-section,
+.llms-manual-txn-form .llms-metabox-section {
+ margin-top: 0;
+}
+.llms-txn-refund-form .llms-metabox-field,
+.llms-manual-txn-form .llms-metabox-field {
+ text-align: right;
+}
+.llms-txn-refund-form .llms-metabox-field input[type=number],
+.llms-manual-txn-form .llms-metabox-field input[type=number] {
+ max-width: 100px;
+}
+.llms-txn-refund-form .llms-metabox-field input[type=text],
+.llms-manual-txn-form .llms-metabox-field input[type=text] {
+ max-width: 340px;
+}
+
+.llms-manual-txn-form {
+ background-color: #eaeaea;
+}
+.llms-manual-txn-form .llms-metabox-section {
+ background-color: #eaeaea;
+}
+
+#llms-remaining-edit {
+ display: none;
+}
+
+.llms-remaining-edit--content label, .llms-remaining-edit--content span, .llms-remaining-edit--content textarea {
+ display: block;
+}
+.llms-remaining-edit--content label {
+ margin-bottom: 20px;
+}
+.llms-remaining-edit--content textarea, .llms-remaining-edit--content input {
+ width: 100%;
+}
+
+.submitbox .llms-mb-section,
+.llms-award-engagement-submitbox .llms-mb-list {
+ margin-bottom: 12px;
+}
+.submitbox .llms-mb-section:last-of-type,
+.llms-award-engagement-submitbox .llms-mb-list:last-of-type {
+ margin-bottom: 0;
+}
+.sync-action:before, .submitbox .llms-mb-section.student-info:before, .submitbox .llms-mb-section.post_author_override label:before,
+.llms-award-engagement-submitbox .llms-mb-list.student-info:before,
+.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {
+ font: normal 20px/1 dashicons;
+ speak: never;
+ display: inline-block;
+ margin-left: -1px;
+ padding-right: 3px;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ position: relative;
+ top: -1px;
+ color: #8c8f94;
+}
+body:not(.admin-color-fresh) .sync-action:before, body:not(.admin-color-fresh) .submitbox .llms-mb-section.student-info:before, body:not(.admin-color-fresh) .submitbox .llms-mb-section.post_author_override label:before,
+body:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.student-info:before,
+body:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {
+ color: currentColor;
+}
+
+.submitbox .llms-mb-section.student-info:before, .submitbox .llms-mb-section.post_author_override label:before,
+.llms-award-engagement-submitbox .llms-mb-list.student-info:before,
+.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {
+ content: "\f110";
+}
+.sync-action:before {
+ content: "\f113";
+ color: white;
+}
+
+.submitbox .llms-mb-section.post_author_override label,
+.llms-award-engagement-submitbox .llms-mb-list.post_author_override label {
+ display: inline-block;
+ width: auto;
+}
+
+.llms-metabox #llms-new-access-plan-model {
+ display: none;
+}
+.llms-metabox .llms-access-plans {
+ margin-top: 10px;
+}
+.llms-metabox .llms-access-plans > .llms-no-plans-msg {
+ display: none;
+}
+.llms-metabox .llms-access-plans > .llms-no-plans-msg:last-child {
+ -webkit-box-shadow: inset 0 0 0 1px #e5e5e5;
+ box-shadow: inset 0 0 0 1px #e5e5e5;
+ display: block;
+ text-align: center;
+ padding: 10px;
+}
+.llms-metabox .llms-access-plans.dragging {
+ background: #efefef;
+ -webkit-box-shadow: inset 0 0 0 1px #e5e5e5;
+ box-shadow: inset 0 0 0 1px #e5e5e5;
+}
+.llms-metabox .llms-access-plans .llms-spinning {
+ z-index: 1;
+}
+.llms-metabox .llms-access-plans .llms-invalid {
+ border-color: #bb231c;
+}
+.llms-metabox .llms-access-plans .llms-invalid .dashicons-warning {
+ display: inline;
+}
+.llms-metabox .llms-access-plans .llms-needs-attention .dashicons-warning.medium-danger {
+ display: inline;
+}
+.llms-metabox .llms-access-plans .dashicons-warning {
+ display: none;
+}
+.llms-metabox .llms-access-plan {
+ text-align: left;
+}
+.llms-metabox .llms-access-plan [data-tip]:before {
+ text-align: center;
+}
+.llms-metabox .llms-access-plan .llms-plan-link,
+.llms-metabox .llms-access-plan [data-controller] {
+ display: none;
+}
+.llms-metabox .llms-access-plan:hover .llms-plan-link, .llms-metabox .llms-access-plan.opened .llms-plan-link {
+ display: inline-block;
+}
+.llms-metabox .llms-access-plan .llms-metabox-field {
+ margin: 5px 0;
+}
+.llms-metabox .llms-access-plan .llms-required {
+ color: #bb231c;
+ margin-left: 3px;
+}
+.llms-metabox .llms-access-plan .notice {
+ margin-left: 0;
+}
+
+.llms-metabox-students .llms-table tr .name {
+ text-align: left;
+}
+.llms-metabox-students .llms-add-student:hover {
+ color: #4d8d3c;
+}
+.llms-metabox-students .llms-remove-student:hover {
+ color: #bb231c;
+}
+
+.llms-mb-container .tab-content ul:not(.select2-selection__rendered).llms-mb-repeater-fields > li.llms-mb-list {
+ border-bottom: none;
+ padding: 0 0 10px;
+}
+
+.llms-mb-list.repeater .llms-repeater-rows {
+ position: relative;
+ margin-top: 10px;
+ min-height: 10px;
+}
+.llms-mb-list.repeater .llms-repeater-rows.dragging {
+ background: #efefef;
+ -webkit-box-shadow: inset 0 0 0 1px #e5e5e5;
+ box-shadow: inset 0 0 0 1px #e5e5e5;
+}
+.llms-mb-list.repeater .llms-repeater-row {
+ background: #fff;
+}
+.llms-mb-list.repeater .llms-mb-repeater-footer {
+ text-align: right;
+ margin-top: 20px;
+}
+.llms-mb-list.repeater .tmce-active .wp-editor-area {
+ color: #32373c;
+}
+
+.llms-builder-launcher p {
+ margin-top: 0;
+}
+.llms-builder-launcher ol {
+ margin-top: -6px;
+}
+.llms-builder-launcher .llms-button-primary {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.wp-list-table .llms-status {
+ border-radius: 6px;
+ display: inline-block;
+ font-size: 13px;
+ font-weight: 700;
+ line-height: 1.4;
+ padding: 2px 6px;
+ vertical-align: middle;
+}
+.wp-list-table .llms-status.llms-size--large {
+ font-size: 105%;
+ padding: 6px 12px;
+}
+.wp-list-table .llms-status.llms-active, .wp-list-table .llms-status.llms-completed, .wp-list-table .llms-status.llms-pass, .wp-list-table .llms-status.llms-txn-succeeded {
+ color: #4d8d3c;
+ background-color: rgba(77, 141, 60, 0.15);
+}
+.wp-list-table .llms-status.llms-fail, .wp-list-table .llms-status.llms-failed, .wp-list-table .llms-status.llms-expired, .wp-list-table .llms-status.llms-cancelled, .wp-list-table .llms-status.llms-txn-failed {
+ color: #bb231c;
+ background-color: rgba(187, 35, 28, 0.15);
+}
+.wp-list-table .llms-status.llms-incomplete, .wp-list-table .llms-status.llms-on-hold, .wp-list-table .llms-status.llms-pending, .wp-list-table .llms-status.llms-pending-cancel, .wp-list-table .llms-status.llms-refunded, .wp-list-table .llms-status.llms-txn-pending, .wp-list-table .llms-status.llms-txn-refunded {
+ color: #c05621;
+ background-color: rgba(192, 86, 33, 0.15);
+}
+
+#lifterlms-order-transactions .llms-table tfoot th {
+ text-align: right;
+}
+
+.llms-post-table-post-filter {
+ display: inline-block;
+ margin-right: 6px;
+ max-width: 100%;
+ width: 220px;
+}
+
+.llms-nav-tab-wrapper {
+ background: #466dd8;
+ margin: 20px 0;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary {
+ background: #e1e1e1;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item {
+ margin: 0;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover, .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {
+ background: #cdcdcd;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {
+ color: #414141;
+ font-size: 15px;
+ padding: 8px 14px;
+}
+.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link .dashicons {
+ font-size: 15px;
+ height: 15px;
+ width: 15px;
+}
+.llms-nav-tab-wrapper.llms-nav-text {
+ background: inherit;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-items {
+ padding-left: 0;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item {
+ background: inherit;
+ color: #646970;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:last-child:after {
+ display: none;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:after {
+ content: "|";
+ display: inline-block;
+ margin: 0 8px 0 6px;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link:hover {
+ background: inherit;
+ color: #466dd8;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item.llms-active .llms-nav-link {
+ background: inherit;
+ color: #000;
+ font-weight: 600;
+ text-decoration: none;
+}
+.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link {
+ color: #466dd8;
+ display: inline-block;
+ letter-spacing: 0;
+ margin: 0;
+ padding: 0;
+ text-decoration: underline;
+ text-transform: none;
+}
+.llms-nav-tab-wrapper.llms-nav-style-tabs {
+ background-color: #1c3987;
+ margin: 0;
+ padding-top: 8px;
+}
+.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item {
+ margin: 0 3px;
+}
+.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item .llms-nav-link {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item.llms-active .llms-nav-link {
+ background-color: #FFF;
+ color: #466dd8;
+ font-weight: 700;
+}
+.llms-nav-tab-wrapper.llms-nav-style-filters {
+ background-color: #466dd8;
+ border-radius: 12px;
+ margin: 20px 0;
+ overflow: hidden;
+ padding: 0;
+}
+.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding-left: 0;
+}
+@media only screen and (min-width: 782px) {
+ .llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ }
+}
+.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item {
+ float: none;
+}
+.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item .llms-nav-link {
+ padding: 14px;
+}
+.llms-nav-tab-wrapper .llms-nav-items {
+ margin: 0;
+ padding-left: 10px;
+}
+.llms-nav-tab-wrapper .llms-nav-items:before, .llms-nav-tab-wrapper .llms-nav-items:after {
+ content: " ";
+ display: table;
+}
+.llms-nav-tab-wrapper .llms-nav-items:after {
+ clear: both;
+}
+.llms-nav-tab-wrapper .llms-nav-item {
+ margin: 0;
+}
+.llms-nav-tab-wrapper .llms-nav-item .llms-nav-link:hover {
+ background: #466dd8;
+}
+.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {
+ background: #1c3987;
+}
+.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {
+ font-weight: 400;
+}
+@media only screen and (min-width: 768px) {
+ .llms-nav-tab-wrapper .llms-nav-item {
+ float: left;
+ }
+ .llms-nav-tab-wrapper .llms-nav-item.llms-nav-item-right {
+ float: right;
+ }
+}
+.llms-nav-tab-wrapper .llms-nav-link {
+ color: #fff;
+ cursor: pointer;
+ display: block;
+ font-weight: 400;
+ font-size: 15px;
+ padding: 9px 18px;
+ text-align: center;
+ text-decoration: none;
+ -webkit-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+}
+
+#llms-options-page-contents h2 {
+ color: #999;
+ font-weight: 500;
+ letter-spacing: 2px;
+ border-bottom: 1px solid #999;
+}
+
+.llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ margin: 0;
+ padding: 0;
+}
+.llms-reporting.wrap .llms-stab-title {
+ color: #1c3987;
+ font-size: 36px;
+ font-weight: 300;
+ margin-bottom: 20px;
+}
+.llms-reporting.wrap td.id a {
+ text-decoration: none;
+}
+.llms-reporting.wrap th.id, .llms-reporting.wrap td.id,
+.llms-reporting.wrap th.name, .llms-reporting.wrap td.name,
+.llms-reporting.wrap th.registered, .llms-reporting.wrap td.registered,
+.llms-reporting.wrap th.last_seen, .llms-reporting.wrap td.last_seen,
+.llms-reporting.wrap th.overall_progress, .llms-reporting.wrap td.overall_progress,
+.llms-reporting.wrap th.title, .llms-reporting.wrap td.title,
+.llms-reporting.wrap th.course, .llms-reporting.wrap td.course,
+.llms-reporting.wrap th.lesson, .llms-reporting.wrap td.lesson {
+ text-align: left;
+}
+.llms-reporting.wrap td.section-title {
+ background: #eaeaea;
+ text-align: left;
+ font-weight: 700;
+ padding: 16px 4px;
+}
+.llms-reporting.wrap td.questions-table {
+ text-align: left;
+}
+.llms-reporting.wrap td.questions-table .correct,
+.llms-reporting.wrap td.questions-table .question,
+.llms-reporting.wrap td.questions-table .selected {
+ text-align: left;
+ max-width: 300px;
+}
+.llms-reporting.wrap td.questions-table .correct img,
+.llms-reporting.wrap td.questions-table .question img,
+.llms-reporting.wrap td.questions-table .selected img {
+ height: auto;
+ max-width: 64px;
+}
+.llms-reporting.wrap table.quiz-attempts {
+ margin-bottom: 40px;
+}
+.llms-reporting.wrap.tab--students .llms-options-page-contents #llms-award-certificate-wrapper .components-button.is-secondary {
+ background: #e1e1e1;
+ border-radius: 8px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: #414141;
+ font-size: 13px;
+ font-weight: 700;
+ height: auto;
+ padding: 8px 14px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-tab-wrapper.llms-nav-secondary, .llms-reporting.wrap.tab--sales .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin-bottom: 0;
+}
+.llms-reporting.wrap.tab--enrollments .llms-options-page-contents, .llms-reporting.wrap.tab--sales .llms-options-page-contents {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background: none;
+ margin-top: 20px;
+ padding: 0;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-item-align: center;
+ align-self: center;
+ color: #FFF;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 13px;
+ gap: 5px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form label, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form label {
+ font-weight: 700;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form input, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form input {
+ border: 0;
+ font-size: 13px;
+ margin: 0;
+ padding: 0 4px;
+ vertical-align: middle;
+ width: 110px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form .select2-container input, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form .select2-container input {
+ width: 100% !important;
+}
+.llms-reporting.wrap.tab--enrollments .button.small, .llms-reporting.wrap.tab--sales .button.small {
+ height: 23px;
+ line-height: 23px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters, .llms-reporting.wrap.tab--sales .llms-analytics-filters {
+ display: none;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-inside-wrap, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-inside-wrap {
+ background-color: #FFF;
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ margin: -20px 10px 20px 10px;
+ padding: 20px;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 20px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ margin: 0;
+}
+@media only screen and (min-width: 782px) {
+ .llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ }
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item label, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item label {
+ display: block;
+ font-weight: 700;
+ margin: 0 0 5px 0;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item .select2-selection__rendered, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item .select2-selection__rendered {
+ word-wrap: break-word;
+ text-overflow: inherit;
+ white-space: normal;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p, .llms-reporting.wrap.tab--sales .llms-analytics-filters p {
+ margin: 0;
+ text-align: right;
+}
+.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p .llms-button-primary, .llms-reporting.wrap.tab--sales .llms-analytics-filters p .llms-button-primary {
+ display: inline-block;
+}
+.llms-reporting.wrap .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap {
+ width: 160px;
+}
+
+.llms-charts-wrapper {
+ background-color: #FFF;
+ border: 1px solid #dedede;
+ border-radius: 12px;
+ -webkit-box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
+ padding: 20px;
+}
+
+.llms-reporting-tab h1, .llms-reporting-tab h2, .llms-reporting-tab h3, .llms-reporting-tab h4, .llms-reporting-tab h5, .llms-reporting-tab h6 {
+ margin: 0;
+}
+.llms-reporting-tab h1 a, .llms-reporting-tab h2 a, .llms-reporting-tab h3 a, .llms-reporting-tab h4 a, .llms-reporting-tab h5 a, .llms-reporting-tab h6 a {
+ color: #466dd8;
+ text-decoration: none;
+}
+.llms-reporting-tab h1 a:hover, .llms-reporting-tab h2 a:hover, .llms-reporting-tab h3 a:hover, .llms-reporting-tab h4 a:hover, .llms-reporting-tab h5 a:hover, .llms-reporting-tab h6 a:hover {
+ color: #466dd8;
+}
+.llms-reporting-tab h2 {
+ font-size: 22px;
+ line-height: 1.5;
+}
+.llms-reporting-tab h2.llms-table-title {
+ margin-bottom: 20px;
+}
+.llms-reporting-tab h5 {
+ font-size: 15px;
+ line-height: 1.5;
+}
+.llms-reporting-tab .llms-reporting-body {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ margin: 20px auto;
+ padding: 0;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-stab {
+ padding: 30px;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-stab .llms-table-header {
+ margin: 0;
+}
+.llms-reporting-tab .llms-reporting-body .llms-gb-tab {
+ padding: 30px;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-header {
+ padding: 30px;
+ margin: 0;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img {
+ border-radius: 50%;
+ display: inline-block;
+ margin-right: 10px;
+ overflow: hidden;
+ vertical-align: middle;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img img {
+ display: block;
+ max-height: 64px;
+ width: auto;
+}
+.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-info {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.llms-reporting-breadcrumbs {
+ margin: 0;
+ padding: 0;
+}
+.llms-reporting-breadcrumbs a {
+ color: #466dd8;
+ font-size: 15px;
+ text-decoration: none;
+}
+.llms-reporting-breadcrumbs a:hover {
+ color: #2b55cb;
+}
+.llms-reporting-breadcrumbs a:after {
+ content: " > ";
+ color: #646970;
+}
+.llms-reporting-breadcrumbs a:last-child {
+ color: #000;
+ font-weight: 700;
+}
+.llms-reporting-breadcrumbs a:last-child:after {
+ display: none;
+}
+
+#llms-students-table .name {
+ text-align: left;
+}
+
+.llms-reporting-tab-content {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.llms-reporting-tab-content > header:before, .llms-reporting-tab-content > header:after {
+ content: " ";
+ display: table;
+}
+.llms-reporting-tab-content > header:after {
+ clear: both;
+}
+.llms-reporting-tab-content h3 {
+ margin-bottom: 20px;
+}
+.llms-reporting-tab-content .llms-reporting-tab-filter {
+ float: right;
+ position: relative;
+ margin-right: 0.75em;
+ width: 180px;
+ top: -3px;
+}
+.llms-reporting-tab-content .llms-reporting-tab-main {
+ -webkit-box-flex: 3;
+ -ms-flex: 3;
+ flex: 3;
+ max-width: 75%;
+}
+.llms-reporting-tab-content .llms-reporting-tab-side {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin-left: 20px;
+}
+.llms-reporting-tab-content > .llms-table-wrap {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+
+.llms-reporting-widgets:before, .llms-reporting-widgets:after {
+ content: " ";
+ display: table;
+}
+.llms-reporting-widgets:after {
+ clear: both;
+}
+
+.llms-reporting-widget {
+ border-top: 4px solid #466dd8;
+ background: #fafafa;
+ margin-bottom: 10px;
+ padding: 30px;
+}
+.llms-reporting-widget:before, .llms-reporting-widget:after {
+ content: " ";
+ display: table;
+}
+.llms-reporting-widget:after {
+ clear: both;
+}
+.llms-reporting-widget .fa {
+ color: #999;
+ float: left;
+ font-size: 32px;
+ margin-right: 10px;
+}
+.llms-reporting-widget strong {
+ color: #333;
+ font-size: 20px;
+ line-height: 1.2;
+}
+.llms-reporting-widget.llms-reporting-student-address strong {
+ line-height: 1.1;
+}
+.llms-reporting-widget sup,
+.llms-reporting-widget .llms-price-currency-symbol {
+ font-size: 75%;
+ position: relative;
+ top: -4px;
+ vertical-align: baseline;
+}
+.llms-reporting-widget small {
+ font-size: 13px;
+}
+.llms-reporting-widget small.compare {
+ margin-left: 5px;
+}
+.llms-reporting-widget small.compare.positive {
+ color: #4d8d3c;
+}
+.llms-reporting-widget small.compare.negative {
+ color: #bb231c;
+}
+
+.llms-reporting-event {
+ border-left: 4px solid #555;
+ background: #fafafa;
+ font-size: 11px;
+ line-height: 1.2;
+ margin-bottom: 0.75em;
+ padding: 10px;
+}
+.llms-reporting-event:before, .llms-reporting-event:after {
+ content: " ";
+ display: table;
+}
+.llms-reporting-event:after {
+ clear: both;
+}
+.llms-reporting-event.color--blue {
+ border-left-color: #466dd8;
+}
+.llms-reporting-event.color--green, .llms-reporting-event._enrollment_trigger, .llms-reporting-event._is_complete.yes {
+ border-left-color: #4d8d3c;
+}
+.llms-reporting-event.color--purple, .llms-reporting-event._status.enrolled {
+ border-left-color: #845ef7;
+}
+.llms-reporting-event.color--red, .llms-reporting-event._status.expired, .llms-reporting-event._status.cancelled {
+ border-left-color: #bb231c;
+}
+.llms-reporting-event.color--orange, .llms-reporting-event._achievement_earned, .llms-reporting-event._certificate_earned, .llms-reporting-event._email_sent {
+ border-left-color: #c05621;
+}
+.llms-reporting-event time {
+ color: #888;
+}
+.llms-reporting-event .llms-student-avatar {
+ margin-left: 10px;
+ float: right;
+}
+.llms-reporting-event a {
+ text-decoration: none;
+ color: inherit;
+}
+
+@media only screen and (min-width: 782px) {
+ .llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin-left: 0;
+ margin-right: 0;
+ }
+}
+.llms-quiz-attempt-results {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question {
+ background: #efefef;
+ border-radius: 6px;
+ margin: 0 0 15px;
+ position: relative;
+ list-style-type: none;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {
+ color: inherit;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 10px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 15px 35px 15px 15px;
+ text-decoration: none;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct, .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect {
+ background: rgba(192, 86, 33, 0.2);
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon, .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon {
+ background-color: #c05621;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {
+ background: rgba(77, 141, 60, 0.15);
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {
+ background-color: #4d8d3c;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {
+ background: rgba(187, 35, 28, 0.15);
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {
+ background-color: #bb231c;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question pre {
+ overflow: auto;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {
+ font-size: 22px;
+ margin: 0;
+ line-height: 1.4;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {
+ line-height: 1.4;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {
+ position: absolute;
+ right: -12px;
+ top: -2px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon {
+ color: rgba(255, 255, 255, 0.65);
+ border-radius: 50%;
+ font-size: 30px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ width: 40px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {
+ display: none;
+ padding: 0 15px 15px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {
+ font-weight: 700;
+ margin: 0 0 10px;
+ padding: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers {
+ margin: 0;
+ padding: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {
+ padding: 0;
+ margin: 0 0 0 30px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child {
+ list-style-type: none;
+ margin-left: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {
+ height: auto;
+ max-width: 200px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section {
+ border-top: 2px solid rgba(255, 255, 255, 0.5);
+ margin-top: 20px;
+ padding-top: 20px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child {
+ border-top: none;
+ margin-top: 0;
+ padding-top: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers, .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer, .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {
+ display: inline-block;
+ list-style-type: none;
+ margin: 0;
+ padding: 5px;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {
+ opacity: 0.5;
+}
+.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {
+ font-style: italic;
+ font-weight: normal;
+}
+
+.wrap.llms-reporting .llms-inside-wrap,
+.wrap.lifterlms-settings .llms-inside-wrap,
+.wrap.llms-status .llms-inside-wrap {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ margin: 0 auto;
+}
+.wrap.llms-reporting .llms-inside-wrap .llms-nav-text,
+.wrap.lifterlms-settings .llms-inside-wrap .llms-nav-text,
+.wrap.llms-status .llms-inside-wrap .llms-nav-text {
+ margin: 0 auto;
+}
+.wrap.llms-reporting .llms-subheader .llms-save,
+.wrap.lifterlms-settings .llms-subheader .llms-save,
+.wrap.llms-status .llms-subheader .llms-save {
+ -webkit-box-flex: 1;
+ -ms-flex: auto;
+ flex: auto;
+ text-align: right;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ margin: 0 -20px 20px -10px;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {
+ padding-left: 0;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover {
+ background: #f0f0f1;
+ color: #222222;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {
+ background: #fafafa;
+ color: #466dd8;
+ border-top-color: #466dd8;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {
+ font-weight: 700;
+}
+.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {
+ border-top: 2px solid transparent;
+ padding: 14px;
+}
+.wrap.llms-reporting .llms-setting-group,
+.wrap.lifterlms-settings .llms-setting-group,
+.wrap.llms-status .llms-setting-group {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ margin: 20px auto;
+ padding: 20px;
+}
+.wrap.llms-reporting .llms-setting-group .llms-label,
+.wrap.lifterlms-settings .llms-setting-group .llms-label,
+.wrap.llms-status .llms-setting-group .llms-label {
+ border-bottom: 1px solid #efefef;
+ font-weight: 700;
+ font-size: 20px;
+ padding: 20px;
+ margin: -20px -20px 20px;
+}
+.wrap.llms-reporting .llms-setting-group .llms-label .llms-button-primary,
+.wrap.lifterlms-settings .llms-setting-group .llms-label .llms-button-primary,
+.wrap.llms-status .llms-setting-group .llms-label .llms-button-primary {
+ margin-left: 10px;
+}
+.wrap.llms-reporting .llms-setting-group .llms-help-tooltip .dashicons,
+.wrap.lifterlms-settings .llms-setting-group .llms-help-tooltip .dashicons,
+.wrap.llms-status .llms-setting-group .llms-help-tooltip .dashicons {
+ color: #444;
+ cursor: help;
+}
+.wrap.llms-reporting .llms-setting-group .form-table,
+.wrap.lifterlms-settings .llms-setting-group .form-table,
+.wrap.llms-status .llms-setting-group .form-table {
+ margin: 0;
+}
+.wrap.llms-reporting .llms-setting-group .form-table tr:first-child .llms-subtitle,
+.wrap.lifterlms-settings .llms-setting-group .form-table tr:first-child .llms-subtitle,
+.wrap.llms-status .llms-setting-group .form-table tr:first-child .llms-subtitle {
+ margin-top: 0;
+}
+.wrap.llms-reporting .llms-setting-group td[colspan="2"],
+.wrap.lifterlms-settings .llms-setting-group td[colspan="2"],
+.wrap.llms-status .llms-setting-group td[colspan="2"] {
+ padding-top: 0;
+ padding-left: 0;
+}
+.wrap.llms-reporting .llms-setting-group tr.llms-disabled-field,
+.wrap.lifterlms-settings .llms-setting-group tr.llms-disabled-field,
+.wrap.llms-status .llms-setting-group tr.llms-disabled-field {
+ opacity: 0.5;
+ pointer-events: none;
+}
+.wrap.llms-reporting .llms-setting-group p,
+.wrap.lifterlms-settings .llms-setting-group p,
+.wrap.llms-status .llms-setting-group p {
+ font-size: 14px;
+}
+.wrap.llms-reporting .llms-setting-group input[type=text],
+.wrap.llms-reporting .llms-setting-group input[type=password],
+.wrap.llms-reporting .llms-setting-group input[type=datetime],
+.wrap.llms-reporting .llms-setting-group input[type=datetime-local],
+.wrap.llms-reporting .llms-setting-group input[type=date],
+.wrap.llms-reporting .llms-setting-group input[type=month],
+.wrap.llms-reporting .llms-setting-group input[type=time],
+.wrap.llms-reporting .llms-setting-group input[type=week],
+.wrap.llms-reporting .llms-setting-group input[type=number],
+.wrap.llms-reporting .llms-setting-group input[type=email],
+.wrap.llms-reporting .llms-setting-group input[type=url],
+.wrap.llms-reporting .llms-setting-group input[type=search],
+.wrap.llms-reporting .llms-setting-group input[type=tel],
+.wrap.llms-reporting .llms-setting-group input[type=color],
+.wrap.llms-reporting .llms-setting-group select,
+.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area),
+.wrap.lifterlms-settings .llms-setting-group input[type=text],
+.wrap.lifterlms-settings .llms-setting-group input[type=password],
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime],
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local],
+.wrap.lifterlms-settings .llms-setting-group input[type=date],
+.wrap.lifterlms-settings .llms-setting-group input[type=month],
+.wrap.lifterlms-settings .llms-setting-group input[type=time],
+.wrap.lifterlms-settings .llms-setting-group input[type=week],
+.wrap.lifterlms-settings .llms-setting-group input[type=number],
+.wrap.lifterlms-settings .llms-setting-group input[type=email],
+.wrap.lifterlms-settings .llms-setting-group input[type=url],
+.wrap.lifterlms-settings .llms-setting-group input[type=search],
+.wrap.lifterlms-settings .llms-setting-group input[type=tel],
+.wrap.lifterlms-settings .llms-setting-group input[type=color],
+.wrap.lifterlms-settings .llms-setting-group select,
+.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area),
+.wrap.llms-status .llms-setting-group input[type=text],
+.wrap.llms-status .llms-setting-group input[type=password],
+.wrap.llms-status .llms-setting-group input[type=datetime],
+.wrap.llms-status .llms-setting-group input[type=datetime-local],
+.wrap.llms-status .llms-setting-group input[type=date],
+.wrap.llms-status .llms-setting-group input[type=month],
+.wrap.llms-status .llms-setting-group input[type=time],
+.wrap.llms-status .llms-setting-group input[type=week],
+.wrap.llms-status .llms-setting-group input[type=number],
+.wrap.llms-status .llms-setting-group input[type=email],
+.wrap.llms-status .llms-setting-group input[type=url],
+.wrap.llms-status .llms-setting-group input[type=search],
+.wrap.llms-status .llms-setting-group input[type=tel],
+.wrap.llms-status .llms-setting-group input[type=color],
+.wrap.llms-status .llms-setting-group select,
+.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area) {
+ width: 50%;
+}
+.wrap.llms-reporting .llms-setting-group input[type=text].medium,
+.wrap.llms-reporting .llms-setting-group input[type=password].medium,
+.wrap.llms-reporting .llms-setting-group input[type=datetime].medium,
+.wrap.llms-reporting .llms-setting-group input[type=datetime-local].medium,
+.wrap.llms-reporting .llms-setting-group input[type=date].medium,
+.wrap.llms-reporting .llms-setting-group input[type=month].medium,
+.wrap.llms-reporting .llms-setting-group input[type=time].medium,
+.wrap.llms-reporting .llms-setting-group input[type=week].medium,
+.wrap.llms-reporting .llms-setting-group input[type=number].medium,
+.wrap.llms-reporting .llms-setting-group input[type=email].medium,
+.wrap.llms-reporting .llms-setting-group input[type=url].medium,
+.wrap.llms-reporting .llms-setting-group input[type=search].medium,
+.wrap.llms-reporting .llms-setting-group input[type=tel].medium,
+.wrap.llms-reporting .llms-setting-group input[type=color].medium,
+.wrap.llms-reporting .llms-setting-group select.medium,
+.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=text].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=password].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=date].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=month].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=time].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=week].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=number].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=email].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=url].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=search].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=tel].medium,
+.wrap.lifterlms-settings .llms-setting-group input[type=color].medium,
+.wrap.lifterlms-settings .llms-setting-group select.medium,
+.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).medium,
+.wrap.llms-status .llms-setting-group input[type=text].medium,
+.wrap.llms-status .llms-setting-group input[type=password].medium,
+.wrap.llms-status .llms-setting-group input[type=datetime].medium,
+.wrap.llms-status .llms-setting-group input[type=datetime-local].medium,
+.wrap.llms-status .llms-setting-group input[type=date].medium,
+.wrap.llms-status .llms-setting-group input[type=month].medium,
+.wrap.llms-status .llms-setting-group input[type=time].medium,
+.wrap.llms-status .llms-setting-group input[type=week].medium,
+.wrap.llms-status .llms-setting-group input[type=number].medium,
+.wrap.llms-status .llms-setting-group input[type=email].medium,
+.wrap.llms-status .llms-setting-group input[type=url].medium,
+.wrap.llms-status .llms-setting-group input[type=search].medium,
+.wrap.llms-status .llms-setting-group input[type=tel].medium,
+.wrap.llms-status .llms-setting-group input[type=color].medium,
+.wrap.llms-status .llms-setting-group select.medium,
+.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).medium {
+ width: 30%;
+}
+.wrap.llms-reporting .llms-setting-group input[type=text].small,
+.wrap.llms-reporting .llms-setting-group input[type=password].small,
+.wrap.llms-reporting .llms-setting-group input[type=datetime].small,
+.wrap.llms-reporting .llms-setting-group input[type=datetime-local].small,
+.wrap.llms-reporting .llms-setting-group input[type=date].small,
+.wrap.llms-reporting .llms-setting-group input[type=month].small,
+.wrap.llms-reporting .llms-setting-group input[type=time].small,
+.wrap.llms-reporting .llms-setting-group input[type=week].small,
+.wrap.llms-reporting .llms-setting-group input[type=number].small,
+.wrap.llms-reporting .llms-setting-group input[type=email].small,
+.wrap.llms-reporting .llms-setting-group input[type=url].small,
+.wrap.llms-reporting .llms-setting-group input[type=search].small,
+.wrap.llms-reporting .llms-setting-group input[type=tel].small,
+.wrap.llms-reporting .llms-setting-group input[type=color].small,
+.wrap.llms-reporting .llms-setting-group select.small,
+.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).small,
+.wrap.lifterlms-settings .llms-setting-group input[type=text].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=password].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=date].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=month].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=time].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=week].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=number].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=email].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=url].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=search].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=tel].small,
+.wrap.lifterlms-settings .llms-setting-group input[type=color].small,
+.wrap.lifterlms-settings .llms-setting-group select.small,
+.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).small,
+.wrap.llms-status .llms-setting-group input[type=text].small,
+.wrap.llms-status .llms-setting-group input[type=password].small,
+.wrap.llms-status .llms-setting-group input[type=datetime].small,
+.wrap.llms-status .llms-setting-group input[type=datetime-local].small,
+.wrap.llms-status .llms-setting-group input[type=date].small,
+.wrap.llms-status .llms-setting-group input[type=month].small,
+.wrap.llms-status .llms-setting-group input[type=time].small,
+.wrap.llms-status .llms-setting-group input[type=week].small,
+.wrap.llms-status .llms-setting-group input[type=number].small,
+.wrap.llms-status .llms-setting-group input[type=email].small,
+.wrap.llms-status .llms-setting-group input[type=url].small,
+.wrap.llms-status .llms-setting-group input[type=search].small,
+.wrap.llms-status .llms-setting-group input[type=tel].small,
+.wrap.llms-status .llms-setting-group input[type=color].small,
+.wrap.llms-status .llms-setting-group select.small,
+.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).small {
+ width: 20%;
+}
+.wrap.llms-reporting .llms-setting-group input[type=text].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=password].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=datetime].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=datetime-local].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=date].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=month].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=time].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=week].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=number].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=email].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=url].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=search].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=tel].tiny,
+.wrap.llms-reporting .llms-setting-group input[type=color].tiny,
+.wrap.llms-reporting .llms-setting-group select.tiny,
+.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=text].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=password].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=date].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=month].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=time].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=week].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=number].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=email].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=url].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=search].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=tel].tiny,
+.wrap.lifterlms-settings .llms-setting-group input[type=color].tiny,
+.wrap.lifterlms-settings .llms-setting-group select.tiny,
+.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).tiny,
+.wrap.llms-status .llms-setting-group input[type=text].tiny,
+.wrap.llms-status .llms-setting-group input[type=password].tiny,
+.wrap.llms-status .llms-setting-group input[type=datetime].tiny,
+.wrap.llms-status .llms-setting-group input[type=datetime-local].tiny,
+.wrap.llms-status .llms-setting-group input[type=date].tiny,
+.wrap.llms-status .llms-setting-group input[type=month].tiny,
+.wrap.llms-status .llms-setting-group input[type=time].tiny,
+.wrap.llms-status .llms-setting-group input[type=week].tiny,
+.wrap.llms-status .llms-setting-group input[type=number].tiny,
+.wrap.llms-status .llms-setting-group input[type=email].tiny,
+.wrap.llms-status .llms-setting-group input[type=url].tiny,
+.wrap.llms-status .llms-setting-group input[type=search].tiny,
+.wrap.llms-status .llms-setting-group input[type=tel].tiny,
+.wrap.llms-status .llms-setting-group input[type=color].tiny,
+.wrap.llms-status .llms-setting-group select.tiny,
+.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).tiny {
+ width: 10%;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,
+.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {
+ background: #fff;
+ }
+}
+.wrap.llms-reporting #llms-mailhawk-connect,
+.wrap.lifterlms-settings #llms-mailhawk-connect,
+.wrap.llms-status #llms-mailhawk-connect {
+ height: auto;
+ margin: 0 0 6px;
+ position: relative;
+}
+.wrap.llms-reporting #llms-mailhawk-connect .dashicons,
+.wrap.lifterlms-settings #llms-mailhawk-connect .dashicons,
+.wrap.llms-status #llms-mailhawk-connect .dashicons {
+ margin: -4px 4px 0 0;
+ vertical-align: middle;
+}
+.wrap.llms-reporting #llms-sendwp-connect,
+.wrap.lifterlms-settings #llms-sendwp-connect,
+.wrap.llms-status #llms-sendwp-connect {
+ height: auto;
+ margin: 0 0 6px;
+ position: relative;
+}
+.wrap.llms-reporting #llms-sendwp-connect .fa,
+.wrap.lifterlms-settings #llms-sendwp-connect .fa,
+.wrap.llms-status #llms-sendwp-connect .fa {
+ margin-right: 4px;
+}
+
+@media only screen and (min-width: 782px) {
+ .wrap.lifterlms-settings .llms-subheader {
+ height: 40px;
+ position: sticky;
+ top: 32px;
+ }
+ .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin: 0 -20px 20px -22px;
+ }
+ .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {
+ padding-left: 10px;
+ }
+ .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin: 0 -20px 20px -22px;
+ }
+ .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {
+ padding-left: 10px;
+ }
+ .wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary {
+ margin: 0 -20px 20px -22px;
+ }
+ .wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {
+ padding-left: 10px;
+ }
+}
+.wrap.llms-dashboard .llms-inside-wrap {
+ padding-top: 30px;
+}
+.wrap.llms-dashboard #poststuff h2 {
+ padding: 12px 20px;
+}
+.wrap.llms-dashboard .llms-dashboard-activity h2 {
+ font-size: 20px;
+ font-weight: 700;
+ line-height: 1.5;
+ margin-top: 0;
+ text-align: center;
+}
+.wrap.llms-dashboard .postbox {
+ background-color: #FFF;
+ border: none;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+}
+.wrap.llms-dashboard .postbox .postbox-header {
+ border-bottom-color: #efefef;
+}
+.wrap.llms-dashboard .postbox .inside {
+ padding: 20px;
+}
+.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap {
+ margin-top: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item {
+ margin-top: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item p {
+ text-align: left;
+}
+.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item footer.llms-actions {
+ padding-top: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_addons p {
+ text-align: center;
+}
+.wrap.llms-dashboard #llms_dashboard_addons p .llms-button-primary {
+ display: inline-block;
+ margin-top: 15px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links ul {
+ list-style: disc;
+ margin: 5px 0 0 20px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links ul li {
+ font-size: 15px;
+ line-height: 1.5;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links {
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-gap: 30px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links a {
+ display: inline-block;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list h3 {
+ margin: 0 0 10px 0;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul {
+ margin-bottom: 20px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul.llms-checklist {
+ list-style: none;
+ margin-left: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa {
+ text-align: center;
+ width: 16px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-check {
+ color: #008a20;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-times {
+ color: #d63638;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-primary,
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-secondary,
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-action {
+ display: block;
+ text-align: center;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 20px;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 {
+ margin: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 .dashicons {
+ color: #AAA;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links {
+ grid-template-columns: 1fr 1fr 1fr 1fr;
+ }
+}
+.wrap.llms-dashboard #llms_dashboard_blog ul,
+.wrap.llms-dashboard #llms_dashboard_podcast ul {
+ margin: 0;
+}
+.wrap.llms-dashboard #llms_dashboard_blog ul li,
+.wrap.llms-dashboard #llms_dashboard_podcast ul li {
+ margin: 0 0 15px 0;
+}
+.wrap.llms-dashboard #llms_dashboard_blog ul li a,
+.wrap.llms-dashboard #llms_dashboard_podcast ul li a {
+ display: block;
+}
+.wrap.llms-dashboard #llms_dashboard_blog p,
+.wrap.llms-dashboard #llms_dashboard_podcast p {
+ margin: 15px 0;
+ text-align: center;
+}
+.wrap.llms-dashboard #llms_dashboard_blog p a,
+.wrap.llms-dashboard #llms_dashboard_podcast p a {
+ display: inline-block;
+}
+
+#llms_dashboard_widget .inside {
+ margin: 0;
+ padding-bottom: 8px;
+}
+#llms_dashboard_widget .llms-dashboard-widget-wrap {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ padding-top: 12px;
+}
+#llms_dashboard_widget .activity-block {
+ padding-bottom: 8px;
+ border-color: #e8e8e8;
+}
+#llms_dashboard_widget h3 {
+ margin-bottom: 0;
+}
+#llms_dashboard_widget .llms-charts-wrapper {
+ display: none;
+}
+#llms_dashboard_widget .llms-widget-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ gap: 8px;
+ width: 100%;
+ -webkit-box-align: stretch;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ padding: 4px 0;
+}
+#llms_dashboard_widget .llms-widget-row:before, #llms_dashboard_widget .llms-widget-row:after {
+ display: none;
+}
+#llms_dashboard_widget .llms-widget-1-4 {
+ padding: 0;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+#llms_dashboard_widget .llms-widget {
+ padding: 8px 8px 12px;
+ margin: 0;
+ border-radius: 6px;
+ border: 1px solid #e8e8e8;
+ -webkit-box-shadow: 0px 2px 4px rgb(246, 247, 247);
+ box-shadow: 0px 2px 4px rgb(246, 247, 247);
+ height: 100%;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: end;
+ -ms-flex-align: end;
+ align-items: flex-end;
+}
+#llms_dashboard_widget .llms-label {
+ font-size: 14px;
+ width: 100%;
+ -ms-flex-item-align: start;
+ align-self: flex-start;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+#llms_dashboard_widget .llms-widget-content {
+ font-size: 20px;
+ margin: 0;
+}
+#llms_dashboard_widget .llms-widget-info-toggle {
+ display: none;
+}
+#llms_dashboard_widget a {
+ border: 0;
+}
+#llms_dashboard_widget .subsubsub {
+ color: #dcdcde;
+}
+
+.llms-dashboard-widget-feed {
+ margin: 0 -12px;
+ padding: 0;
+ background-color: #f6f7f7;
+}
+.llms-dashboard-widget-feed li {
+ margin: 0;
+ padding: 8px 12px;
+ border-bottom: 1px solid #e8e8e8;
+}
+.llms-dashboard-widget-feed span {
+ display: block;
+}
+
+.wrap.llms-resources .llms-inside-wrap {
+ padding-top: 30px;
+}
+.wrap.llms-resources #poststuff #post-body.columns-2 {
+ margin-right: 350px;
+}
+.wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables {
+ width: 330px;
+}
+@media only screen and (max-width: 850px) {
+ .wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables {
+ width: auto;
+ }
+}
+.wrap.llms-resources #poststuff #postbox-container-1 {
+ float: right;
+ margin-right: -350px;
+ width: 330px;
+}
+.wrap.llms-resources #poststuff h2 {
+ padding: 12px 20px;
+}
+.wrap.llms-resources #poststuff .postbox {
+ background-color: #FFF;
+ border: none;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+}
+.wrap.llms-resources #poststuff .postbox .postbox-header {
+ border-bottom-color: #efefef;
+}
+.wrap.llms-resources #poststuff .postbox .inside {
+ margin: 0;
+ padding: 20px;
+}
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video p {
+ font-size: 15px;
+ line-height: 1.5;
+ margin: 0 0 40px 0;
+}
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container {
+ height: 0;
+ overflow: hidden;
+ padding-top: 30px;
+ padding-bottom: 56.25%;
+ position: relative;
+}
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container iframe,
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container object,
+.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container embed {
+ left: 0;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.wrap.llms-resources #llms_dashboard_getting_started ul {
+ margin: 0 0 20px 0;
+}
+.wrap.llms-resources #llms_dashboard_getting_started ul li {
+ font-size: 15px;
+ line-height: 1.5;
+ margin-bottom: 15px;
+}
+.wrap.llms-resources #llms_dashboard_getting_started .llms-button-primary {
+ display: block;
+ margin-top: auto;
+ max-width: 300px;
+ text-align: center;
+}
+.wrap.llms-resources #llms_dashboard_resource_links ul {
+ list-style: disc;
+ margin: 5px 0 0 20px;
+}
+.wrap.llms-resources #llms_dashboard_resource_links ul li {
+ font-size: 15px;
+ line-height: 1.5;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links {
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-gap: 60px;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links a {
+ display: inline-block;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 {
+ margin: 0 0 10px 0;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 .dashicons {
+ color: #AAA;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list ul {
+ margin-bottom: 20px;
+}
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-primary,
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-secondary,
+.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-action {
+ display: block;
+ margin-top: auto;
+ max-width: 300px;
+ text-align: center;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+}
+
+.llms-remarks .llms-remarks-field {
+ height: 120px;
+ width: 100%;
+}
+.llms-remarks input[type=number] {
+ width: 60px;
+}
+
+button[name=llms_quiz_attempt_action] .save {
+ display: none;
+}
+button[name=llms_quiz_attempt_action].grading .default {
+ display: none;
+}
+button[name=llms_quiz_attempt_action].grading .save {
+ display: inline;
+}
+
+.llms-form-fields {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-form-fields * {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-form-fields.flush .llms-form-field {
+ padding: 0 0 20px;
+}
+.llms-form-fields label:not(.llms-field-html label) {
+ font-weight: 700;
+}
+.llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {
+ margin-bottom: 0;
+}
+
+.llms-form-heading {
+ padding: 0 10px 10px;
+}
+
+.llms-form-field {
+ float: left;
+ padding: 0 10px 20px;
+ position: relative;
+ width: 100%;
+}
+.llms-form-field label:empty:after {
+ content: " ";
+}
+.llms-form-field [type=text],
+.llms-form-field [type=password],
+.llms-form-field [type=email],
+.llms-form-field [type=url],
+.llms-form-field [type=tel],
+.llms-form-field [type=number] {
+ background-color: #fefefe;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 16px;
+ line-height: 1;
+ padding: 8px 12px;
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ width: 100%;
+}
+.llms-form-field input:focus,
+.llms-form-field input:focus-visible {
+ border-color: #6888df;
+ outline: thin solid;
+}
+.llms-form-field select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ appearance: none;
+ background-color: #fefefe;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ color: #010101;
+ padding: 8px 12px;
+ margin: 0;
+ width: 100%;
+ font-family: inherit;
+ font-size: 16px;
+ cursor: inherit;
+ line-height: 1.6;
+ z-index: 1;
+ outline: none;
+ background-repeat: no-repeat;
+ background-image: linear-gradient(45deg, transparent 50%, currentcolor 50%), linear-gradient(135deg, currentcolor 50%, transparent 50%);
+ background-position: right 15px top 1.3rem, right 10px top 1.3rem;
+ background-size: 5px 5px, 5px 5px;
+}
+.llms-form-field select::-ms-expand {
+ display: none;
+}
+.llms-form-field select:focus {
+ border: 1px solid #6888df;
+ outline: thin solid;
+}
+.llms-form-field.valid input[type=date], .llms-form-field.valid input[type=time], .llms-form-field.valid input[type=datetime-local], .llms-form-field.valid input[type=week], .llms-form-field.valid input[type=month], .llms-form-field.valid input[type=text], .llms-form-field.valid input[type=email], .llms-form-field.valid input[type=url], .llms-form-field.valid input[type=password], .llms-form-field.valid input[type=search], .llms-form-field.valid input[type=tel], .llms-form-field.valid input[type=number], .llms-form-field.valid textarea, .llms-form-field.valid select {
+ background: rgba(131, 195, 115, 0.3);
+ border-color: #83c373;
+}
+.llms-form-field.error input[type=date], .llms-form-field.error input[type=time], .llms-form-field.error input[type=datetime-local], .llms-form-field.error input[type=week], .llms-form-field.error input[type=month], .llms-form-field.error input[type=text], .llms-form-field.error input[type=email], .llms-form-field.error input[type=url], .llms-form-field.error input[type=password], .llms-form-field.error input[type=search], .llms-form-field.error input[type=tel], .llms-form-field.error input[type=number], .llms-form-field.error textarea, .llms-form-field.error select, .llms-form-field.invalid input[type=date], .llms-form-field.invalid input[type=time], .llms-form-field.invalid input[type=datetime-local], .llms-form-field.invalid input[type=week], .llms-form-field.invalid input[type=month], .llms-form-field.invalid input[type=text], .llms-form-field.invalid input[type=email], .llms-form-field.invalid input[type=url], .llms-form-field.invalid input[type=password], .llms-form-field.invalid input[type=search], .llms-form-field.invalid input[type=tel], .llms-form-field.invalid input[type=number], .llms-form-field.invalid textarea, .llms-form-field.invalid select {
+ background: rgba(187, 35, 28, 0.3);
+ border-color: #bb231c;
+}
+.llms-form-field.llms-visually-hidden-field {
+ display: none;
+}
+.llms-form-field.align-right {
+ text-align: right;
+}
+@media screen and (min-width: 600px) {
+ .llms-form-field.llms-cols-1 {
+ width: 8.3333333333%;
+ }
+ .llms-form-field.llms-cols-2 {
+ width: 16.6666666667%;
+ }
+ .llms-form-field.llms-cols-3 {
+ width: 25%;
+ }
+ .llms-form-field.llms-cols-4 {
+ width: 33.3333333333%;
+ }
+ .llms-form-field.llms-cols-5 {
+ width: 41.6666666667%;
+ }
+ .llms-form-field.llms-cols-6 {
+ width: 50%;
+ }
+ .llms-form-field.llms-cols-7 {
+ width: 58.3333333333%;
+ }
+ .llms-form-field.llms-cols-8 {
+ width: 66.6666666667%;
+ }
+ .llms-form-field.llms-cols-9 {
+ width: 75%;
+ }
+ .llms-form-field.llms-cols-10 {
+ width: 83.3333333333%;
+ }
+ .llms-form-field.llms-cols-11 {
+ width: 91.6666666667%;
+ }
+ .llms-form-field.llms-cols-12 {
+ width: 100%;
+ }
+}
+.llms-form-field.type-hidden {
+ padding: 0;
+}
+.llms-form-field.type-radio input,
+.llms-form-field.type-radio label, .llms-form-field.type-checkbox input,
+.llms-form-field.type-checkbox label {
+ display: inline-block;
+ width: auto;
+}
+.llms-form-field.type-radio input, .llms-form-field.type-checkbox input {
+ margin-right: 10px;
+}
+.llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {
+ display: block;
+}
+.llms-form-field.type-radio:not(.is-group) input[type=radio] {
+ position: absolute;
+ opacity: 0;
+ visibility: none;
+}
+.llms-form-field.type-radio:not(.is-group) label:before {
+ background: #fafafa;
+ background-position: -24px 0;
+ background-repeat: no-repeat;
+ border-radius: 50%;
+ -webkit-box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;
+ box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;
+ content: "";
+ cursor: pointer;
+ display: inline-block;
+ height: 22px;
+ margin-right: 5px;
+ position: relative;
+ -webkit-transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ top: -3px;
+ vertical-align: middle;
+ width: 22px;
+ z-index: 2;
+}
+.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked + label:before {
+ -webkit-transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ background-position: 0 0;
+ background-image: radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%);
+}
+.llms-form-field .llms-input-group {
+ margin-top: 5px;
+}
+.llms-form-field .llms-input-group .llms-form-field {
+ padding: 0 0 5px 5px;
+}
+.llms-form-field.type-reset button:not(.auto), .llms-form-field.type-button button:not(.auto), .llms-form-field.type-submit button:not(.auto) {
+ width: 100%;
+}
+.llms-form-field .llms-description {
+ font-size: 14px;
+ font-style: italic;
+ line-height: 18px;
+}
+.llms-form-field .llms-required {
+ color: #bb231c;
+ margin-left: 4px;
+}
+.llms-form-field input, .llms-form-field textarea, .llms-form-field select {
+ width: 100%;
+ margin-bottom: 5px;
+}
+.llms-form-field .select2-container .select2-selection--single {
+ height: auto;
+ padding: 4px 6px;
+}
+.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {
+ height: 100%;
+}
+
+.llms-password-strength-meter {
+ border: 1px solid #dadada;
+ display: none;
+ font-size: 10px;
+ margin-top: -10px;
+ padding: 1px;
+ position: relative;
+ text-align: center;
+}
+.llms-password-strength-meter:before {
+ bottom: 0;
+ content: "";
+ left: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transition: width 0.4s ease;
+ transition: width 0.4s ease;
+}
+.llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {
+ border-color: #e35b5b;
+}
+.llms-password-strength-meter.mismatch:before, .llms-password-strength-meter.too-short:before, .llms-password-strength-meter.very-weak:before {
+ background: rgba(227, 91, 91, 0.25);
+ width: 25%;
+}
+.llms-password-strength-meter.too-short:before {
+ width: 0;
+}
+.llms-password-strength-meter.weak {
+ border-color: #f78b53;
+}
+.llms-password-strength-meter.weak:before {
+ background: rgba(247, 139, 83, 0.25);
+ width: 50%;
+}
+.llms-password-strength-meter.medium {
+ border-color: #ffc733;
+}
+.llms-password-strength-meter.medium:before {
+ background: rgba(255, 199, 51, 0.25);
+ width: 75%;
+}
+.llms-password-strength-meter.strong {
+ border-color: #83c373;
+}
+.llms-password-strength-meter.strong:before {
+ background: rgba(131, 195, 115, 0.25);
+ width: 100%;
+}
+.llms-password-strength-meter + .llms-description {
+ display: block;
+}
+
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: "FontAwesome";
+ src: url("../fonts/fontawesome-webfont.eot?v=4.7.0");
+ src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+
+.fa-2x {
+ font-size: 2em;
+}
+
+.fa-3x {
+ font-size: 3em;
+}
+
+.fa-4x {
+ font-size: 4em;
+}
+
+.fa-5x {
+ font-size: 5em;
+}
+
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+
+.fa-ul > li {
+ position: relative;
+}
+
+.fa-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+
+.fa-li.fa-lg {
+ left: -1.85714286em;
+}
+
+.fa-border {
+ padding: 0.2em 0.25em 0.15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: 0.1em;
+}
+
+.fa-pull-left {
+ float: left;
+}
+
+.fa-pull-right {
+ float: right;
+}
+
+.fa.fa-pull-left {
+ margin-right: 0.3em;
+}
+
+.fa.fa-pull-right {
+ margin-left: 0.3em;
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right {
+ float: right;
+}
+
+.pull-left {
+ float: left;
+}
+
+.fa.pull-left {
+ margin-right: 0.3em;
+}
+
+.fa.pull-right {
+ margin-left: 0.3em;
+}
+
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+.fa-rotate-90 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+.fa-rotate-180 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+ -webkit-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.fa-rotate-270 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+ -webkit-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+
+.fa-flip-horizontal {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+ -webkit-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+
+.fa-flip-vertical {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+ -webkit-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ -webkit-filter: none;
+ filter: none;
+}
+
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+
+.fa-stack-1x,
+.fa-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+
+.fa-stack-1x {
+ line-height: inherit;
+}
+
+.fa-stack-2x {
+ font-size: 2em;
+}
+
+.fa-inverse {
+ color: #ffffff;
+}
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "\f000";
+}
+
+.fa-music:before {
+ content: "\f001";
+}
+
+.fa-search:before {
+ content: "\f002";
+}
+
+.fa-envelope-o:before {
+ content: "\f003";
+}
+
+.fa-heart:before {
+ content: "\f004";
+}
+
+.fa-star:before {
+ content: "\f005";
+}
+
+.fa-star-o:before {
+ content: "\f006";
+}
+
+.fa-user:before {
+ content: "\f007";
+}
+
+.fa-film:before {
+ content: "\f008";
+}
+
+.fa-th-large:before {
+ content: "\f009";
+}
+
+.fa-th:before {
+ content: "\f00a";
+}
+
+.fa-th-list:before {
+ content: "\f00b";
+}
+
+.fa-check:before {
+ content: "\f00c";
+}
+
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "\f00d";
+}
+
+.fa-search-plus:before {
+ content: "\f00e";
+}
+
+.fa-search-minus:before {
+ content: "\f010";
+}
+
+.fa-power-off:before {
+ content: "\f011";
+}
+
+.fa-signal:before {
+ content: "\f012";
+}
+
+.fa-gear:before,
+.fa-cog:before {
+ content: "\f013";
+}
+
+.fa-trash-o:before {
+ content: "\f014";
+}
+
+.fa-home:before {
+ content: "\f015";
+}
+
+.fa-file-o:before {
+ content: "\f016";
+}
+
+.fa-clock-o:before {
+ content: "\f017";
+}
+
+.fa-road:before {
+ content: "\f018";
+}
+
+.fa-download:before {
+ content: "\f019";
+}
+
+.fa-arrow-circle-o-down:before {
+ content: "\f01a";
+}
+
+.fa-arrow-circle-o-up:before {
+ content: "\f01b";
+}
+
+.fa-inbox:before {
+ content: "\f01c";
+}
+
+.fa-play-circle-o:before {
+ content: "\f01d";
+}
+
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "\f01e";
+}
+
+.fa-refresh:before {
+ content: "\f021";
+}
+
+.fa-list-alt:before {
+ content: "\f022";
+}
+
+.fa-lock:before {
+ content: "\f023";
+}
+
+.fa-flag:before {
+ content: "\f024";
+}
+
+.fa-headphones:before {
+ content: "\f025";
+}
+
+.fa-volume-off:before {
+ content: "\f026";
+}
+
+.fa-volume-down:before {
+ content: "\f027";
+}
+
+.fa-volume-up:before {
+ content: "\f028";
+}
+
+.fa-qrcode:before {
+ content: "\f029";
+}
+
+.fa-barcode:before {
+ content: "\f02a";
+}
+
+.fa-tag:before {
+ content: "\f02b";
+}
+
+.fa-tags:before {
+ content: "\f02c";
+}
+
+.fa-book:before {
+ content: "\f02d";
+}
+
+.fa-bookmark:before {
+ content: "\f02e";
+}
+
+.fa-print:before {
+ content: "\f02f";
+}
+
+.fa-camera:before {
+ content: "\f030";
+}
+
+.fa-font:before {
+ content: "\f031";
+}
+
+.fa-bold:before {
+ content: "\f032";
+}
+
+.fa-italic:before {
+ content: "\f033";
+}
+
+.fa-text-height:before {
+ content: "\f034";
+}
+
+.fa-text-width:before {
+ content: "\f035";
+}
+
+.fa-align-left:before {
+ content: "\f036";
+}
+
+.fa-align-center:before {
+ content: "\f037";
+}
+
+.fa-align-right:before {
+ content: "\f038";
+}
+
+.fa-align-justify:before {
+ content: "\f039";
+}
+
+.fa-list:before {
+ content: "\f03a";
+}
+
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "\f03b";
+}
+
+.fa-indent:before {
+ content: "\f03c";
+}
+
+.fa-video-camera:before {
+ content: "\f03d";
+}
+
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "\f03e";
+}
+
+.fa-pencil:before {
+ content: "\f040";
+}
+
+.fa-map-marker:before {
+ content: "\f041";
+}
+
+.fa-adjust:before {
+ content: "\f042";
+}
+
+.fa-tint:before {
+ content: "\f043";
+}
+
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "\f044";
+}
+
+.fa-share-square-o:before {
+ content: "\f045";
+}
+
+.fa-check-square-o:before {
+ content: "\f046";
+}
+
+.fa-arrows:before {
+ content: "\f047";
+}
+
+.fa-step-backward:before {
+ content: "\f048";
+}
+
+.fa-fast-backward:before {
+ content: "\f049";
+}
+
+.fa-backward:before {
+ content: "\f04a";
+}
+
+.fa-play:before {
+ content: "\f04b";
+}
+
+.fa-pause:before {
+ content: "\f04c";
+}
+
+.fa-stop:before {
+ content: "\f04d";
+}
+
+.fa-forward:before {
+ content: "\f04e";
+}
+
+.fa-fast-forward:before {
+ content: "\f050";
+}
+
+.fa-step-forward:before {
+ content: "\f051";
+}
+
+.fa-eject:before {
+ content: "\f052";
+}
+
+.fa-chevron-left:before {
+ content: "\f053";
+}
+
+.fa-chevron-right:before {
+ content: "\f054";
+}
+
+.fa-plus-circle:before {
+ content: "\f055";
+}
+
+.fa-minus-circle:before {
+ content: "\f056";
+}
+
+.fa-times-circle:before {
+ content: "\f057";
+}
+
+.fa-check-circle:before {
+ content: "\f058";
+}
+
+.fa-question-circle:before {
+ content: "\f059";
+}
+
+.fa-info-circle:before {
+ content: "\f05a";
+}
+
+.fa-crosshairs:before {
+ content: "\f05b";
+}
+
+.fa-times-circle-o:before {
+ content: "\f05c";
+}
+
+.fa-check-circle-o:before {
+ content: "\f05d";
+}
+
+.fa-ban:before {
+ content: "\f05e";
+}
+
+.fa-arrow-left:before {
+ content: "\f060";
+}
+
+.fa-arrow-right:before {
+ content: "\f061";
+}
+
+.fa-arrow-up:before {
+ content: "\f062";
+}
+
+.fa-arrow-down:before {
+ content: "\f063";
+}
+
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "\f064";
+}
+
+.fa-expand:before {
+ content: "\f065";
+}
+
+.fa-compress:before {
+ content: "\f066";
+}
+
+.fa-plus:before {
+ content: "\f067";
+}
+
+.fa-minus:before {
+ content: "\f068";
+}
+
+.fa-asterisk:before {
+ content: "\f069";
+}
+
+.fa-exclamation-circle:before {
+ content: "\f06a";
+}
+
+.fa-gift:before {
+ content: "\f06b";
+}
+
+.fa-leaf:before {
+ content: "\f06c";
+}
+
+.fa-fire:before {
+ content: "\f06d";
+}
+
+.fa-eye:before {
+ content: "\f06e";
+}
+
+.fa-eye-slash:before {
+ content: "\f070";
+}
+
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "\f071";
+}
+
+.fa-plane:before {
+ content: "\f072";
+}
+
+.fa-calendar:before {
+ content: "\f073";
+}
+
+.fa-random:before {
+ content: "\f074";
+}
+
+.fa-comment:before {
+ content: "\f075";
+}
+
+.fa-magnet:before {
+ content: "\f076";
+}
+
+.fa-chevron-up:before {
+ content: "\f077";
+}
+
+.fa-chevron-down:before {
+ content: "\f078";
+}
+
+.fa-retweet:before {
+ content: "\f079";
+}
+
+.fa-shopping-cart:before {
+ content: "\f07a";
+}
+
+.fa-folder:before {
+ content: "\f07b";
+}
+
+.fa-folder-open:before {
+ content: "\f07c";
+}
+
+.fa-arrows-v:before {
+ content: "\f07d";
+}
+
+.fa-arrows-h:before {
+ content: "\f07e";
+}
+
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "\f080";
+}
+
+.fa-twitter-square:before {
+ content: "\f081";
+}
+
+.fa-facebook-square:before {
+ content: "\f082";
+}
+
+.fa-camera-retro:before {
+ content: "\f083";
+}
+
+.fa-key:before {
+ content: "\f084";
+}
+
+.fa-gears:before,
+.fa-cogs:before {
+ content: "\f085";
+}
+
+.fa-comments:before {
+ content: "\f086";
+}
+
+.fa-thumbs-o-up:before {
+ content: "\f087";
+}
+
+.fa-thumbs-o-down:before {
+ content: "\f088";
+}
+
+.fa-star-half:before {
+ content: "\f089";
+}
+
+.fa-heart-o:before {
+ content: "\f08a";
+}
+
+.fa-sign-out:before {
+ content: "\f08b";
+}
+
+.fa-linkedin-square:before {
+ content: "\f08c";
+}
+
+.fa-thumb-tack:before {
+ content: "\f08d";
+}
+
+.fa-external-link:before {
+ content: "\f08e";
+}
+
+.fa-sign-in:before {
+ content: "\f090";
+}
+
+.fa-trophy:before {
+ content: "\f091";
+}
+
+.fa-github-square:before {
+ content: "\f092";
+}
+
+.fa-upload:before {
+ content: "\f093";
+}
+
+.fa-lemon-o:before {
+ content: "\f094";
+}
+
+.fa-phone:before {
+ content: "\f095";
+}
+
+.fa-square-o:before {
+ content: "\f096";
+}
+
+.fa-bookmark-o:before {
+ content: "\f097";
+}
+
+.fa-phone-square:before {
+ content: "\f098";
+}
+
+.fa-twitter:before {
+ content: "\f099";
+}
+
+.fa-facebook-f:before,
+.fa-facebook:before {
+ content: "\f09a";
+}
+
+.fa-github:before {
+ content: "\f09b";
+}
+
+.fa-unlock:before {
+ content: "\f09c";
+}
+
+.fa-credit-card:before {
+ content: "\f09d";
+}
+
+.fa-feed:before,
+.fa-rss:before {
+ content: "\f09e";
+}
+
+.fa-hdd-o:before {
+ content: "\f0a0";
+}
+
+.fa-bullhorn:before {
+ content: "\f0a1";
+}
+
+.fa-bell:before {
+ content: "\f0f3";
+}
+
+.fa-certificate:before {
+ content: "\f0a3";
+}
+
+.fa-hand-o-right:before {
+ content: "\f0a4";
+}
+
+.fa-hand-o-left:before {
+ content: "\f0a5";
+}
+
+.fa-hand-o-up:before {
+ content: "\f0a6";
+}
+
+.fa-hand-o-down:before {
+ content: "\f0a7";
+}
+
+.fa-arrow-circle-left:before {
+ content: "\f0a8";
+}
+
+.fa-arrow-circle-right:before {
+ content: "\f0a9";
+}
+
+.fa-arrow-circle-up:before {
+ content: "\f0aa";
+}
+
+.fa-arrow-circle-down:before {
+ content: "\f0ab";
+}
+
+.fa-globe:before {
+ content: "\f0ac";
+}
+
+.fa-wrench:before {
+ content: "\f0ad";
+}
+
+.fa-tasks:before {
+ content: "\f0ae";
+}
+
+.fa-filter:before {
+ content: "\f0b0";
+}
+
+.fa-briefcase:before {
+ content: "\f0b1";
+}
+
+.fa-arrows-alt:before {
+ content: "\f0b2";
+}
+
+.fa-group:before,
+.fa-users:before {
+ content: "\f0c0";
+}
+
+.fa-chain:before,
+.fa-link:before {
+ content: "\f0c1";
+}
+
+.fa-cloud:before {
+ content: "\f0c2";
+}
+
+.fa-flask:before {
+ content: "\f0c3";
+}
+
+.fa-cut:before,
+.fa-scissors:before {
+ content: "\f0c4";
+}
+
+.fa-copy:before,
+.fa-files-o:before {
+ content: "\f0c5";
+}
+
+.fa-paperclip:before {
+ content: "\f0c6";
+}
+
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "\f0c7";
+}
+
+.fa-square:before {
+ content: "\f0c8";
+}
+
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "\f0c9";
+}
+
+.fa-list-ul:before {
+ content: "\f0ca";
+}
+
+.fa-list-ol:before {
+ content: "\f0cb";
+}
+
+.fa-strikethrough:before {
+ content: "\f0cc";
+}
+
+.fa-underline:before {
+ content: "\f0cd";
+}
+
+.fa-table:before {
+ content: "\f0ce";
+}
+
+.fa-magic:before {
+ content: "\f0d0";
+}
+
+.fa-truck:before {
+ content: "\f0d1";
+}
+
+.fa-pinterest:before {
+ content: "\f0d2";
+}
+
+.fa-pinterest-square:before {
+ content: "\f0d3";
+}
+
+.fa-google-plus-square:before {
+ content: "\f0d4";
+}
+
+.fa-google-plus:before {
+ content: "\f0d5";
+}
+
+.fa-money:before {
+ content: "\f0d6";
+}
+
+.fa-caret-down:before {
+ content: "\f0d7";
+}
+
+.fa-caret-up:before {
+ content: "\f0d8";
+}
+
+.fa-caret-left:before {
+ content: "\f0d9";
+}
+
+.fa-caret-right:before {
+ content: "\f0da";
+}
+
+.fa-columns:before {
+ content: "\f0db";
+}
+
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "\f0dc";
+}
+
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "\f0dd";
+}
+
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "\f0de";
+}
+
+.fa-envelope:before {
+ content: "\f0e0";
+}
+
+.fa-linkedin:before {
+ content: "\f0e1";
+}
+
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "\f0e2";
+}
+
+.fa-legal:before,
+.fa-gavel:before {
+ content: "\f0e3";
+}
+
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "\f0e4";
+}
+
+.fa-comment-o:before {
+ content: "\f0e5";
+}
+
+.fa-comments-o:before {
+ content: "\f0e6";
+}
+
+.fa-flash:before,
+.fa-bolt:before {
+ content: "\f0e7";
+}
+
+.fa-sitemap:before {
+ content: "\f0e8";
+}
+
+.fa-umbrella:before {
+ content: "\f0e9";
+}
+
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "\f0ea";
+}
+
+.fa-lightbulb-o:before {
+ content: "\f0eb";
+}
+
+.fa-exchange:before {
+ content: "\f0ec";
+}
+
+.fa-cloud-download:before {
+ content: "\f0ed";
+}
+
+.fa-cloud-upload:before {
+ content: "\f0ee";
+}
+
+.fa-user-md:before {
+ content: "\f0f0";
+}
+
+.fa-stethoscope:before {
+ content: "\f0f1";
+}
+
+.fa-suitcase:before {
+ content: "\f0f2";
+}
+
+.fa-bell-o:before {
+ content: "\f0a2";
+}
+
+.fa-coffee:before {
+ content: "\f0f4";
+}
+
+.fa-cutlery:before {
+ content: "\f0f5";
+}
+
+.fa-file-text-o:before {
+ content: "\f0f6";
+}
+
+.fa-building-o:before {
+ content: "\f0f7";
+}
+
+.fa-hospital-o:before {
+ content: "\f0f8";
+}
+
+.fa-ambulance:before {
+ content: "\f0f9";
+}
+
+.fa-medkit:before {
+ content: "\f0fa";
+}
+
+.fa-fighter-jet:before {
+ content: "\f0fb";
+}
+
+.fa-beer:before {
+ content: "\f0fc";
+}
+
+.fa-h-square:before {
+ content: "\f0fd";
+}
+
+.fa-plus-square:before {
+ content: "\f0fe";
+}
+
+.fa-angle-double-left:before {
+ content: "\f100";
+}
+
+.fa-angle-double-right:before {
+ content: "\f101";
+}
+
+.fa-angle-double-up:before {
+ content: "\f102";
+}
+
+.fa-angle-double-down:before {
+ content: "\f103";
+}
+
+.fa-angle-left:before {
+ content: "\f104";
+}
+
+.fa-angle-right:before {
+ content: "\f105";
+}
+
+.fa-angle-up:before {
+ content: "\f106";
+}
+
+.fa-angle-down:before {
+ content: "\f107";
+}
+
+.fa-desktop:before {
+ content: "\f108";
+}
+
+.fa-laptop:before {
+ content: "\f109";
+}
+
+.fa-tablet:before {
+ content: "\f10a";
+}
+
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "\f10b";
+}
+
+.fa-circle-o:before {
+ content: "\f10c";
+}
+
+.fa-quote-left:before {
+ content: "\f10d";
+}
+
+.fa-quote-right:before {
+ content: "\f10e";
+}
+
+.fa-spinner:before {
+ content: "\f110";
+}
+
+.fa-circle:before {
+ content: "\f111";
+}
+
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "\f112";
+}
+
+.fa-github-alt:before {
+ content: "\f113";
+}
+
+.fa-folder-o:before {
+ content: "\f114";
+}
+
+.fa-folder-open-o:before {
+ content: "\f115";
+}
+
+.fa-smile-o:before {
+ content: "\f118";
+}
+
+.fa-frown-o:before {
+ content: "\f119";
+}
+
+.fa-meh-o:before {
+ content: "\f11a";
+}
+
+.fa-gamepad:before {
+ content: "\f11b";
+}
+
+.fa-keyboard-o:before {
+ content: "\f11c";
+}
+
+.fa-flag-o:before {
+ content: "\f11d";
+}
+
+.fa-flag-checkered:before {
+ content: "\f11e";
+}
+
+.fa-terminal:before {
+ content: "\f120";
+}
+
+.fa-code:before {
+ content: "\f121";
+}
+
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "\f122";
+}
+
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "\f123";
+}
+
+.fa-location-arrow:before {
+ content: "\f124";
+}
+
+.fa-crop:before {
+ content: "\f125";
+}
+
+.fa-code-fork:before {
+ content: "\f126";
+}
+
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "\f127";
+}
+
+.fa-question:before {
+ content: "\f128";
+}
+
+.fa-info:before {
+ content: "\f129";
+}
+
+.fa-exclamation:before {
+ content: "\f12a";
+}
+
+.fa-superscript:before {
+ content: "\f12b";
+}
+
+.fa-subscript:before {
+ content: "\f12c";
+}
+
+.fa-eraser:before {
+ content: "\f12d";
+}
+
+.fa-puzzle-piece:before {
+ content: "\f12e";
+}
+
+.fa-microphone:before {
+ content: "\f130";
+}
+
+.fa-microphone-slash:before {
+ content: "\f131";
+}
+
+.fa-shield:before {
+ content: "\f132";
+}
+
+.fa-calendar-o:before {
+ content: "\f133";
+}
+
+.fa-fire-extinguisher:before {
+ content: "\f134";
+}
+
+.fa-rocket:before {
+ content: "\f135";
+}
+
+.fa-maxcdn:before {
+ content: "\f136";
+}
+
+.fa-chevron-circle-left:before {
+ content: "\f137";
+}
+
+.fa-chevron-circle-right:before {
+ content: "\f138";
+}
+
+.fa-chevron-circle-up:before {
+ content: "\f139";
+}
+
+.fa-chevron-circle-down:before {
+ content: "\f13a";
+}
+
+.fa-html5:before {
+ content: "\f13b";
+}
+
+.fa-css3:before {
+ content: "\f13c";
+}
+
+.fa-anchor:before {
+ content: "\f13d";
+}
+
+.fa-unlock-alt:before {
+ content: "\f13e";
+}
+
+.fa-bullseye:before {
+ content: "\f140";
+}
+
+.fa-ellipsis-h:before {
+ content: "\f141";
+}
+
+.fa-ellipsis-v:before {
+ content: "\f142";
+}
+
+.fa-rss-square:before {
+ content: "\f143";
+}
+
+.fa-play-circle:before {
+ content: "\f144";
+}
+
+.fa-ticket:before {
+ content: "\f145";
+}
+
+.fa-minus-square:before {
+ content: "\f146";
+}
+
+.fa-minus-square-o:before {
+ content: "\f147";
+}
+
+.fa-level-up:before {
+ content: "\f148";
+}
+
+.fa-level-down:before {
+ content: "\f149";
+}
+
+.fa-check-square:before {
+ content: "\f14a";
+}
+
+.fa-pencil-square:before {
+ content: "\f14b";
+}
+
+.fa-external-link-square:before {
+ content: "\f14c";
+}
+
+.fa-share-square:before {
+ content: "\f14d";
+}
+
+.fa-compass:before {
+ content: "\f14e";
+}
+
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "\f150";
+}
+
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "\f151";
+}
+
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "\f152";
+}
+
+.fa-euro:before,
+.fa-eur:before {
+ content: "\f153";
+}
+
+.fa-gbp:before {
+ content: "\f154";
+}
+
+.fa-dollar:before,
+.fa-usd:before {
+ content: "\f155";
+}
+
+.fa-rupee:before,
+.fa-inr:before {
+ content: "\f156";
+}
+
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "\f157";
+}
+
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "\f158";
+}
+
+.fa-won:before,
+.fa-krw:before {
+ content: "\f159";
+}
+
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "\f15a";
+}
+
+.fa-file:before {
+ content: "\f15b";
+}
+
+.fa-file-text:before {
+ content: "\f15c";
+}
+
+.fa-sort-alpha-asc:before {
+ content: "\f15d";
+}
+
+.fa-sort-alpha-desc:before {
+ content: "\f15e";
+}
+
+.fa-sort-amount-asc:before {
+ content: "\f160";
+}
+
+.fa-sort-amount-desc:before {
+ content: "\f161";
+}
+
+.fa-sort-numeric-asc:before {
+ content: "\f162";
+}
+
+.fa-sort-numeric-desc:before {
+ content: "\f163";
+}
+
+.fa-thumbs-up:before {
+ content: "\f164";
+}
+
+.fa-thumbs-down:before {
+ content: "\f165";
+}
+
+.fa-youtube-square:before {
+ content: "\f166";
+}
+
+.fa-youtube:before {
+ content: "\f167";
+}
+
+.fa-xing:before {
+ content: "\f168";
+}
+
+.fa-xing-square:before {
+ content: "\f169";
+}
+
+.fa-youtube-play:before {
+ content: "\f16a";
+}
+
+.fa-dropbox:before {
+ content: "\f16b";
+}
+
+.fa-stack-overflow:before {
+ content: "\f16c";
+}
+
+.fa-instagram:before {
+ content: "\f16d";
+}
+
+.fa-flickr:before {
+ content: "\f16e";
+}
+
+.fa-adn:before {
+ content: "\f170";
+}
+
+.fa-bitbucket:before {
+ content: "\f171";
+}
+
+.fa-bitbucket-square:before {
+ content: "\f172";
+}
+
+.fa-tumblr:before {
+ content: "\f173";
+}
+
+.fa-tumblr-square:before {
+ content: "\f174";
+}
+
+.fa-long-arrow-down:before {
+ content: "\f175";
+}
+
+.fa-long-arrow-up:before {
+ content: "\f176";
+}
+
+.fa-long-arrow-left:before {
+ content: "\f177";
+}
+
+.fa-long-arrow-right:before {
+ content: "\f178";
+}
+
+.fa-apple:before {
+ content: "\f179";
+}
+
+.fa-windows:before {
+ content: "\f17a";
+}
+
+.fa-android:before {
+ content: "\f17b";
+}
+
+.fa-linux:before {
+ content: "\f17c";
+}
+
+.fa-dribbble:before {
+ content: "\f17d";
+}
+
+.fa-skype:before {
+ content: "\f17e";
+}
+
+.fa-foursquare:before {
+ content: "\f180";
+}
+
+.fa-trello:before {
+ content: "\f181";
+}
+
+.fa-female:before {
+ content: "\f182";
+}
+
+.fa-male:before {
+ content: "\f183";
+}
+
+.fa-gittip:before,
+.fa-gratipay:before {
+ content: "\f184";
+}
+
+.fa-sun-o:before {
+ content: "\f185";
+}
+
+.fa-moon-o:before {
+ content: "\f186";
+}
+
+.fa-archive:before {
+ content: "\f187";
+}
+
+.fa-bug:before {
+ content: "\f188";
+}
+
+.fa-vk:before {
+ content: "\f189";
+}
+
+.fa-weibo:before {
+ content: "\f18a";
+}
+
+.fa-renren:before {
+ content: "\f18b";
+}
+
+.fa-pagelines:before {
+ content: "\f18c";
+}
+
+.fa-stack-exchange:before {
+ content: "\f18d";
+}
+
+.fa-arrow-circle-o-right:before {
+ content: "\f18e";
+}
+
+.fa-arrow-circle-o-left:before {
+ content: "\f190";
+}
+
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "\f191";
+}
+
+.fa-dot-circle-o:before {
+ content: "\f192";
+}
+
+.fa-wheelchair:before {
+ content: "\f193";
+}
+
+.fa-vimeo-square:before {
+ content: "\f194";
+}
+
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "\f195";
+}
+
+.fa-plus-square-o:before {
+ content: "\f196";
+}
+
+.fa-space-shuttle:before {
+ content: "\f197";
+}
+
+.fa-slack:before {
+ content: "\f198";
+}
+
+.fa-envelope-square:before {
+ content: "\f199";
+}
+
+.fa-wordpress:before {
+ content: "\f19a";
+}
+
+.fa-openid:before {
+ content: "\f19b";
+}
+
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "\f19c";
+}
+
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "\f19d";
+}
+
+.fa-yahoo:before {
+ content: "\f19e";
+}
+
+.fa-google:before {
+ content: "\f1a0";
+}
+
+.fa-reddit:before {
+ content: "\f1a1";
+}
+
+.fa-reddit-square:before {
+ content: "\f1a2";
+}
+
+.fa-stumbleupon-circle:before {
+ content: "\f1a3";
+}
+
+.fa-stumbleupon:before {
+ content: "\f1a4";
+}
+
+.fa-delicious:before {
+ content: "\f1a5";
+}
+
+.fa-digg:before {
+ content: "\f1a6";
+}
+
+.fa-pied-piper-pp:before {
+ content: "\f1a7";
+}
+
+.fa-pied-piper-alt:before {
+ content: "\f1a8";
+}
+
+.fa-drupal:before {
+ content: "\f1a9";
+}
+
+.fa-joomla:before {
+ content: "\f1aa";
+}
+
+.fa-language:before {
+ content: "\f1ab";
+}
+
+.fa-fax:before {
+ content: "\f1ac";
+}
+
+.fa-building:before {
+ content: "\f1ad";
+}
+
+.fa-child:before {
+ content: "\f1ae";
+}
+
+.fa-paw:before {
+ content: "\f1b0";
+}
+
+.fa-spoon:before {
+ content: "\f1b1";
+}
+
+.fa-cube:before {
+ content: "\f1b2";
+}
+
+.fa-cubes:before {
+ content: "\f1b3";
+}
+
+.fa-behance:before {
+ content: "\f1b4";
+}
+
+.fa-behance-square:before {
+ content: "\f1b5";
+}
+
+.fa-steam:before {
+ content: "\f1b6";
+}
+
+.fa-steam-square:before {
+ content: "\f1b7";
+}
+
+.fa-recycle:before {
+ content: "\f1b8";
+}
+
+.fa-automobile:before,
+.fa-car:before {
+ content: "\f1b9";
+}
+
+.fa-cab:before,
+.fa-taxi:before {
+ content: "\f1ba";
+}
+
+.fa-tree:before {
+ content: "\f1bb";
+}
+
+.fa-spotify:before {
+ content: "\f1bc";
+}
+
+.fa-deviantart:before {
+ content: "\f1bd";
+}
+
+.fa-soundcloud:before {
+ content: "\f1be";
+}
+
+.fa-database:before {
+ content: "\f1c0";
+}
+
+.fa-file-pdf-o:before {
+ content: "\f1c1";
+}
+
+.fa-file-word-o:before {
+ content: "\f1c2";
+}
+
+.fa-file-excel-o:before {
+ content: "\f1c3";
+}
+
+.fa-file-powerpoint-o:before {
+ content: "\f1c4";
+}
+
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "\f1c5";
+}
+
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "\f1c6";
+}
+
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "\f1c7";
+}
+
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "\f1c8";
+}
+
+.fa-file-code-o:before {
+ content: "\f1c9";
+}
+
+.fa-vine:before {
+ content: "\f1ca";
+}
+
+.fa-codepen:before {
+ content: "\f1cb";
+}
+
+.fa-jsfiddle:before {
+ content: "\f1cc";
+}
+
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "\f1cd";
+}
+
+.fa-circle-o-notch:before {
+ content: "\f1ce";
+}
+
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+ content: "\f1d0";
+}
+
+.fa-ge:before,
+.fa-empire:before {
+ content: "\f1d1";
+}
+
+.fa-git-square:before {
+ content: "\f1d2";
+}
+
+.fa-git:before {
+ content: "\f1d3";
+}
+
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+ content: "\f1d4";
+}
+
+.fa-tencent-weibo:before {
+ content: "\f1d5";
+}
+
+.fa-qq:before {
+ content: "\f1d6";
+}
+
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "\f1d7";
+}
+
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "\f1d8";
+}
+
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "\f1d9";
+}
+
+.fa-history:before {
+ content: "\f1da";
+}
+
+.fa-circle-thin:before {
+ content: "\f1db";
+}
+
+.fa-header:before {
+ content: "\f1dc";
+}
+
+.fa-paragraph:before {
+ content: "\f1dd";
+}
+
+.fa-sliders:before {
+ content: "\f1de";
+}
+
+.fa-share-alt:before {
+ content: "\f1e0";
+}
+
+.fa-share-alt-square:before {
+ content: "\f1e1";
+}
+
+.fa-bomb:before {
+ content: "\f1e2";
+}
+
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "\f1e3";
+}
+
+.fa-tty:before {
+ content: "\f1e4";
+}
+
+.fa-binoculars:before {
+ content: "\f1e5";
+}
+
+.fa-plug:before {
+ content: "\f1e6";
+}
+
+.fa-slideshare:before {
+ content: "\f1e7";
+}
+
+.fa-twitch:before {
+ content: "\f1e8";
+}
+
+.fa-yelp:before {
+ content: "\f1e9";
+}
+
+.fa-newspaper-o:before {
+ content: "\f1ea";
+}
+
+.fa-wifi:before {
+ content: "\f1eb";
+}
+
+.fa-calculator:before {
+ content: "\f1ec";
+}
+
+.fa-paypal:before {
+ content: "\f1ed";
+}
+
+.fa-google-wallet:before {
+ content: "\f1ee";
+}
+
+.fa-cc-visa:before {
+ content: "\f1f0";
+}
+
+.fa-cc-mastercard:before {
+ content: "\f1f1";
+}
+
+.fa-cc-discover:before {
+ content: "\f1f2";
+}
+
+.fa-cc-amex:before {
+ content: "\f1f3";
+}
+
+.fa-cc-paypal:before {
+ content: "\f1f4";
+}
+
+.fa-cc-stripe:before {
+ content: "\f1f5";
+}
+
+.fa-bell-slash:before {
+ content: "\f1f6";
+}
+
+.fa-bell-slash-o:before {
+ content: "\f1f7";
+}
+
+.fa-trash:before {
+ content: "\f1f8";
+}
+
+.fa-copyright:before {
+ content: "\f1f9";
+}
+
+.fa-at:before {
+ content: "\f1fa";
+}
+
+.fa-eyedropper:before {
+ content: "\f1fb";
+}
+
+.fa-paint-brush:before {
+ content: "\f1fc";
+}
+
+.fa-birthday-cake:before {
+ content: "\f1fd";
+}
+
+.fa-area-chart:before {
+ content: "\f1fe";
+}
+
+.fa-pie-chart:before {
+ content: "\f200";
+}
+
+.fa-line-chart:before {
+ content: "\f201";
+}
+
+.fa-lastfm:before {
+ content: "\f202";
+}
+
+.fa-lastfm-square:before {
+ content: "\f203";
+}
+
+.fa-toggle-off:before {
+ content: "\f204";
+}
+
+.fa-toggle-on:before {
+ content: "\f205";
+}
+
+.fa-bicycle:before {
+ content: "\f206";
+}
+
+.fa-bus:before {
+ content: "\f207";
+}
+
+.fa-ioxhost:before {
+ content: "\f208";
+}
+
+.fa-angellist:before {
+ content: "\f209";
+}
+
+.fa-cc:before {
+ content: "\f20a";
+}
+
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "\f20b";
+}
+
+.fa-meanpath:before {
+ content: "\f20c";
+}
+
+.fa-buysellads:before {
+ content: "\f20d";
+}
+
+.fa-connectdevelop:before {
+ content: "\f20e";
+}
+
+.fa-dashcube:before {
+ content: "\f210";
+}
+
+.fa-forumbee:before {
+ content: "\f211";
+}
+
+.fa-leanpub:before {
+ content: "\f212";
+}
+
+.fa-sellsy:before {
+ content: "\f213";
+}
+
+.fa-shirtsinbulk:before {
+ content: "\f214";
+}
+
+.fa-simplybuilt:before {
+ content: "\f215";
+}
+
+.fa-skyatlas:before {
+ content: "\f216";
+}
+
+.fa-cart-plus:before {
+ content: "\f217";
+}
+
+.fa-cart-arrow-down:before {
+ content: "\f218";
+}
+
+.fa-diamond:before {
+ content: "\f219";
+}
+
+.fa-ship:before {
+ content: "\f21a";
+}
+
+.fa-user-secret:before {
+ content: "\f21b";
+}
+
+.fa-motorcycle:before {
+ content: "\f21c";
+}
+
+.fa-street-view:before {
+ content: "\f21d";
+}
+
+.fa-heartbeat:before {
+ content: "\f21e";
+}
+
+.fa-venus:before {
+ content: "\f221";
+}
+
+.fa-mars:before {
+ content: "\f222";
+}
+
+.fa-mercury:before {
+ content: "\f223";
+}
+
+.fa-intersex:before,
+.fa-transgender:before {
+ content: "\f224";
+}
+
+.fa-transgender-alt:before {
+ content: "\f225";
+}
+
+.fa-venus-double:before {
+ content: "\f226";
+}
+
+.fa-mars-double:before {
+ content: "\f227";
+}
+
+.fa-venus-mars:before {
+ content: "\f228";
+}
+
+.fa-mars-stroke:before {
+ content: "\f229";
+}
+
+.fa-mars-stroke-v:before {
+ content: "\f22a";
+}
+
+.fa-mars-stroke-h:before {
+ content: "\f22b";
+}
+
+.fa-neuter:before {
+ content: "\f22c";
+}
+
+.fa-genderless:before {
+ content: "\f22d";
+}
+
+.fa-facebook-official:before {
+ content: "\f230";
+}
+
+.fa-pinterest-p:before {
+ content: "\f231";
+}
+
+.fa-whatsapp:before {
+ content: "\f232";
+}
+
+.fa-server:before {
+ content: "\f233";
+}
+
+.fa-user-plus:before {
+ content: "\f234";
+}
+
+.fa-user-times:before {
+ content: "\f235";
+}
+
+.fa-hotel:before,
+.fa-bed:before {
+ content: "\f236";
+}
+
+.fa-viacoin:before {
+ content: "\f237";
+}
+
+.fa-train:before {
+ content: "\f238";
+}
+
+.fa-subway:before {
+ content: "\f239";
+}
+
+.fa-medium:before {
+ content: "\f23a";
+}
+
+.fa-yc:before,
+.fa-y-combinator:before {
+ content: "\f23b";
+}
+
+.fa-optin-monster:before {
+ content: "\f23c";
+}
+
+.fa-opencart:before {
+ content: "\f23d";
+}
+
+.fa-expeditedssl:before {
+ content: "\f23e";
+}
+
+.fa-battery-4:before,
+.fa-battery:before,
+.fa-battery-full:before {
+ content: "\f240";
+}
+
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+ content: "\f241";
+}
+
+.fa-battery-2:before,
+.fa-battery-half:before {
+ content: "\f242";
+}
+
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+ content: "\f243";
+}
+
+.fa-battery-0:before,
+.fa-battery-empty:before {
+ content: "\f244";
+}
+
+.fa-mouse-pointer:before {
+ content: "\f245";
+}
+
+.fa-i-cursor:before {
+ content: "\f246";
+}
+
+.fa-object-group:before {
+ content: "\f247";
+}
+
+.fa-object-ungroup:before {
+ content: "\f248";
+}
+
+.fa-sticky-note:before {
+ content: "\f249";
+}
+
+.fa-sticky-note-o:before {
+ content: "\f24a";
+}
+
+.fa-cc-jcb:before {
+ content: "\f24b";
+}
+
+.fa-cc-diners-club:before {
+ content: "\f24c";
+}
+
+.fa-clone:before {
+ content: "\f24d";
+}
+
+.fa-balance-scale:before {
+ content: "\f24e";
+}
+
+.fa-hourglass-o:before {
+ content: "\f250";
+}
+
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+ content: "\f251";
+}
+
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+ content: "\f252";
+}
+
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+ content: "\f253";
+}
+
+.fa-hourglass:before {
+ content: "\f254";
+}
+
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+ content: "\f255";
+}
+
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+ content: "\f256";
+}
+
+.fa-hand-scissors-o:before {
+ content: "\f257";
+}
+
+.fa-hand-lizard-o:before {
+ content: "\f258";
+}
+
+.fa-hand-spock-o:before {
+ content: "\f259";
+}
+
+.fa-hand-pointer-o:before {
+ content: "\f25a";
+}
+
+.fa-hand-peace-o:before {
+ content: "\f25b";
+}
+
+.fa-trademark:before {
+ content: "\f25c";
+}
+
+.fa-registered:before {
+ content: "\f25d";
+}
+
+.fa-creative-commons:before {
+ content: "\f25e";
+}
+
+.fa-gg:before {
+ content: "\f260";
+}
+
+.fa-gg-circle:before {
+ content: "\f261";
+}
+
+.fa-tripadvisor:before {
+ content: "\f262";
+}
+
+.fa-odnoklassniki:before {
+ content: "\f263";
+}
+
+.fa-odnoklassniki-square:before {
+ content: "\f264";
+}
+
+.fa-get-pocket:before {
+ content: "\f265";
+}
+
+.fa-wikipedia-w:before {
+ content: "\f266";
+}
+
+.fa-safari:before {
+ content: "\f267";
+}
+
+.fa-chrome:before {
+ content: "\f268";
+}
+
+.fa-firefox:before {
+ content: "\f269";
+}
+
+.fa-opera:before {
+ content: "\f26a";
+}
+
+.fa-internet-explorer:before {
+ content: "\f26b";
+}
+
+.fa-tv:before,
+.fa-television:before {
+ content: "\f26c";
+}
+
+.fa-contao:before {
+ content: "\f26d";
+}
+
+.fa-500px:before {
+ content: "\f26e";
+}
+
+.fa-amazon:before {
+ content: "\f270";
+}
+
+.fa-calendar-plus-o:before {
+ content: "\f271";
+}
+
+.fa-calendar-minus-o:before {
+ content: "\f272";
+}
+
+.fa-calendar-times-o:before {
+ content: "\f273";
+}
+
+.fa-calendar-check-o:before {
+ content: "\f274";
+}
+
+.fa-industry:before {
+ content: "\f275";
+}
+
+.fa-map-pin:before {
+ content: "\f276";
+}
+
+.fa-map-signs:before {
+ content: "\f277";
+}
+
+.fa-map-o:before {
+ content: "\f278";
+}
+
+.fa-map:before {
+ content: "\f279";
+}
+
+.fa-commenting:before {
+ content: "\f27a";
+}
+
+.fa-commenting-o:before {
+ content: "\f27b";
+}
+
+.fa-houzz:before {
+ content: "\f27c";
+}
+
+.fa-vimeo:before {
+ content: "\f27d";
+}
+
+.fa-black-tie:before {
+ content: "\f27e";
+}
+
+.fa-fonticons:before {
+ content: "\f280";
+}
+
+.fa-reddit-alien:before {
+ content: "\f281";
+}
+
+.fa-edge:before {
+ content: "\f282";
+}
+
+.fa-credit-card-alt:before {
+ content: "\f283";
+}
+
+.fa-codiepie:before {
+ content: "\f284";
+}
+
+.fa-modx:before {
+ content: "\f285";
+}
+
+.fa-fort-awesome:before {
+ content: "\f286";
+}
+
+.fa-usb:before {
+ content: "\f287";
+}
+
+.fa-product-hunt:before {
+ content: "\f288";
+}
+
+.fa-mixcloud:before {
+ content: "\f289";
+}
+
+.fa-scribd:before {
+ content: "\f28a";
+}
+
+.fa-pause-circle:before {
+ content: "\f28b";
+}
+
+.fa-pause-circle-o:before {
+ content: "\f28c";
+}
+
+.fa-stop-circle:before {
+ content: "\f28d";
+}
+
+.fa-stop-circle-o:before {
+ content: "\f28e";
+}
+
+.fa-shopping-bag:before {
+ content: "\f290";
+}
+
+.fa-shopping-basket:before {
+ content: "\f291";
+}
+
+.fa-hashtag:before {
+ content: "\f292";
+}
+
+.fa-bluetooth:before {
+ content: "\f293";
+}
+
+.fa-bluetooth-b:before {
+ content: "\f294";
+}
+
+.fa-percent:before {
+ content: "\f295";
+}
+
+.fa-gitlab:before {
+ content: "\f296";
+}
+
+.fa-wpbeginner:before {
+ content: "\f297";
+}
+
+.fa-wpforms:before {
+ content: "\f298";
+}
+
+.fa-envira:before {
+ content: "\f299";
+}
+
+.fa-universal-access:before {
+ content: "\f29a";
+}
+
+.fa-wheelchair-alt:before {
+ content: "\f29b";
+}
+
+.fa-question-circle-o:before {
+ content: "\f29c";
+}
+
+.fa-blind:before {
+ content: "\f29d";
+}
+
+.fa-audio-description:before {
+ content: "\f29e";
+}
+
+.fa-volume-control-phone:before {
+ content: "\f2a0";
+}
+
+.fa-braille:before {
+ content: "\f2a1";
+}
+
+.fa-assistive-listening-systems:before {
+ content: "\f2a2";
+}
+
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+ content: "\f2a3";
+}
+
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+ content: "\f2a4";
+}
+
+.fa-glide:before {
+ content: "\f2a5";
+}
+
+.fa-glide-g:before {
+ content: "\f2a6";
+}
+
+.fa-signing:before,
+.fa-sign-language:before {
+ content: "\f2a7";
+}
+
+.fa-low-vision:before {
+ content: "\f2a8";
+}
+
+.fa-viadeo:before {
+ content: "\f2a9";
+}
+
+.fa-viadeo-square:before {
+ content: "\f2aa";
+}
+
+.fa-snapchat:before {
+ content: "\f2ab";
+}
+
+.fa-snapchat-ghost:before {
+ content: "\f2ac";
+}
+
+.fa-snapchat-square:before {
+ content: "\f2ad";
+}
+
+.fa-pied-piper:before {
+ content: "\f2ae";
+}
+
+.fa-first-order:before {
+ content: "\f2b0";
+}
+
+.fa-yoast:before {
+ content: "\f2b1";
+}
+
+.fa-themeisle:before {
+ content: "\f2b2";
+}
+
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+ content: "\f2b3";
+}
+
+.fa-fa:before,
+.fa-font-awesome:before {
+ content: "\f2b4";
+}
+
+.fa-handshake-o:before {
+ content: "\f2b5";
+}
+
+.fa-envelope-open:before {
+ content: "\f2b6";
+}
+
+.fa-envelope-open-o:before {
+ content: "\f2b7";
+}
+
+.fa-linode:before {
+ content: "\f2b8";
+}
+
+.fa-address-book:before {
+ content: "\f2b9";
+}
+
+.fa-address-book-o:before {
+ content: "\f2ba";
+}
+
+.fa-vcard:before,
+.fa-address-card:before {
+ content: "\f2bb";
+}
+
+.fa-vcard-o:before,
+.fa-address-card-o:before {
+ content: "\f2bc";
+}
+
+.fa-user-circle:before {
+ content: "\f2bd";
+}
+
+.fa-user-circle-o:before {
+ content: "\f2be";
+}
+
+.fa-user-o:before {
+ content: "\f2c0";
+}
+
+.fa-id-badge:before {
+ content: "\f2c1";
+}
+
+.fa-drivers-license:before,
+.fa-id-card:before {
+ content: "\f2c2";
+}
+
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+ content: "\f2c3";
+}
+
+.fa-quora:before {
+ content: "\f2c4";
+}
+
+.fa-free-code-camp:before {
+ content: "\f2c5";
+}
+
+.fa-telegram:before {
+ content: "\f2c6";
+}
+
+.fa-thermometer-4:before,
+.fa-thermometer:before,
+.fa-thermometer-full:before {
+ content: "\f2c7";
+}
+
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+ content: "\f2c8";
+}
+
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+ content: "\f2c9";
+}
+
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+ content: "\f2ca";
+}
+
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+ content: "\f2cb";
+}
+
+.fa-shower:before {
+ content: "\f2cc";
+}
+
+.fa-bathtub:before,
+.fa-s15:before,
+.fa-bath:before {
+ content: "\f2cd";
+}
+
+.fa-podcast:before {
+ content: "\f2ce";
+}
+
+.fa-window-maximize:before {
+ content: "\f2d0";
+}
+
+.fa-window-minimize:before {
+ content: "\f2d1";
+}
+
+.fa-window-restore:before {
+ content: "\f2d2";
+}
+
+.fa-times-rectangle:before,
+.fa-window-close:before {
+ content: "\f2d3";
+}
+
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+ content: "\f2d4";
+}
+
+.fa-bandcamp:before {
+ content: "\f2d5";
+}
+
+.fa-grav:before {
+ content: "\f2d6";
+}
+
+.fa-etsy:before {
+ content: "\f2d7";
+}
+
+.fa-imdb:before {
+ content: "\f2d8";
+}
+
+.fa-ravelry:before {
+ content: "\f2d9";
+}
+
+.fa-eercast:before {
+ content: "\f2da";
+}
+
+.fa-microchip:before {
+ content: "\f2db";
+}
+
+.fa-snowflake-o:before {
+ content: "\f2dc";
+}
+
+.fa-superpowers:before {
+ content: "\f2dd";
+}
+
+.fa-wpexplorer:before {
+ content: "\f2de";
+}
+
+.fa-meetup:before {
+ content: "\f2e0";
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+/*# sourceMappingURL=../maps/css/admin.css.map */
diff --git a/assets/css/admin.min.css b/assets/css/admin.min.css
new file mode 100644
index 0000000000..0eb4fba425
--- /dev/null
+++ b/assets/css/admin.min.css
@@ -0,0 +1,5 @@
+#poststuff .llms-metabox:before,#poststuff .llms-metabox:after,.llms-form-fields:before,.llms-metabox .llms-access-plans:before,.llms-collapsible .llms-collapsible-body:before,.llms-collapsible .llms-collapsible-header:before,.llms-collapsible:before,.llms-form-fields:after,.llms-metabox .llms-access-plans:after,.llms-collapsible .llms-collapsible-body:after,.llms-collapsible .llms-collapsible-header:after,.llms-collapsible:after{content:" ";display:table}#poststuff .llms-metabox:after,.llms-form-fields:after,.llms-metabox .llms-access-plans:after,.llms-collapsible .llms-collapsible-body:after,.llms-collapsible .llms-collapsible-header:after,.llms-collapsible:after{clear:both}.llms-button-action,.llms-button-danger,.llms-button-primary,.llms-button-secondary{border:none;border-radius:8px;color:#fefefe;cursor:pointer;display:inline-block;font-size:18px;font-weight:700;text-decoration:none;text-shadow:none;line-height:1;margin:0;max-width:100%;padding:12px 24px;position:relative;-webkit-transition:all .5s ease;transition:all .5s ease}.llms-button-action:disabled,.llms-button-danger:disabled,.llms-button-primary:disabled,.llms-button-secondary:disabled{opacity:.5}.llms-button-action:hover,.llms-button-action:active,.llms-button-danger:hover,.llms-button-danger:active,.llms-button-primary:hover,.llms-button-primary:active,.llms-button-secondary:hover,.llms-button-secondary:active{color:#fefefe}.llms-button-action:focus,.llms-button-danger:focus,.llms-button-primary:focus,.llms-button-secondary:focus{color:#fefefe}.llms-button-action.auto,.llms-button-danger.auto,.llms-button-primary.auto,.llms-button-secondary.auto{width:auto}.llms-button-action.full,.llms-button-danger.full,.llms-button-primary.full,.llms-button-secondary.full{display:block;text-align:center;width:100%}.llms-button-action.square,.llms-button-danger.square,.llms-button-primary.square,.llms-button-secondary.square{padding:12px}.llms-button-action.small,.llms-button-danger.small,.llms-button-primary.small,.llms-button-secondary.small{font-size:13px;padding:8px 14px}.llms-button-action.small.square,.llms-button-danger.small.square,.llms-button-primary.small.square,.llms-button-secondary.small.square{padding:8px}.llms-button-action.large,.llms-button-danger.large,.llms-button-primary.large,.llms-button-secondary.large{font-size:18px;line-height:1.2;padding:16px 32px}.llms-button-action.large.square,.llms-button-danger.large.square,.llms-button-primary.large.square,.llms-button-secondary.large.square{padding:16px}.llms-button-action.large .fa,.llms-button-danger.large .fa,.llms-button-primary.large .fa,.llms-button-secondary.large .fa{left:-7px;position:relative}a.llms-button-action,a.llms-button-danger,a.llms-button-primary{color:#fefefe}.llms-button-primary{background:#466dd8}.llms-button-primary:hover,.llms-button-primary.clicked{background:#2b55cb}.llms-button-primary:focus,.llms-button-primary:active{background:#6888df}.llms-button-secondary{background:#e1e1e1;color:#444}.llms-button-secondary:hover{color:#414141;background:#cdcdcd}.llms-button-secondary:focus,.llms-button-secondary:active{color:#414141;background:#ebebeb}a.llms-button-secondary{color:#444}.llms-button-action{background:#c05621}.llms-button-action:hover,.llms-button-action.clicked{background:#f67d28}.llms-button-action:focus,.llms-button-action:active{background:#faad76}.llms-button-danger{background:#bb231c}.llms-button-danger:hover{background:#981c17}.llms-button-danger:focus,.llms-button-danger:active{background:#cd261f}.llms-button-outline{background:rgba(0,0,0,0);border:3px solid #1d2327;border-radius:8px;color:#1d2327;cursor:pointer;font-size:16px;font-weight:700;text-decoration:none;text-shadow:none;line-height:1;margin:0;max-width:100%;padding:12px 24px;position:relative;-webkit-transition:all .5s ease;transition:all .5s ease}.llms-button-outline:disabled{opacity:.5}.llms-button-outline:hover,.llms-button-outline:active{color:#1d2327}.llms-button-outline:focus{color:#1d2327}.llms-button-outline.auto{width:auto}.llms-button-outline.full{display:block;text-align:center;width:100%}.llms-button-outline.square{padding:12px}.llms-course-continue-button{display:inline-block}.lifterlms [data-tip],.lifterlms [data-title-default],.lifterlms [data-title-active],.llms-metabox [data-tip],.llms-metabox [data-title-default],.llms-metabox [data-title-active],.llms-mb-container [data-tip],.llms-mb-container [data-title-default],.llms-mb-container [data-title-active],.llms-quiz-wrapper [data-tip],.llms-quiz-wrapper [data-title-default],.llms-quiz-wrapper [data-title-active]{position:relative}.lifterlms [data-tip].tip--top-right:before,.lifterlms [data-title-default].tip--top-right:before,.lifterlms [data-title-active].tip--top-right:before,.llms-metabox [data-tip].tip--top-right:before,.llms-metabox [data-title-default].tip--top-right:before,.llms-metabox [data-title-active].tip--top-right:before,.llms-mb-container [data-tip].tip--top-right:before,.llms-mb-container [data-title-default].tip--top-right:before,.llms-mb-container [data-title-active].tip--top-right:before,.llms-quiz-wrapper [data-tip].tip--top-right:before,.llms-quiz-wrapper [data-title-default].tip--top-right:before,.llms-quiz-wrapper [data-title-active].tip--top-right:before{bottom:100%;left:-10px}.lifterlms [data-tip].tip--top-right:hover:before,.lifterlms [data-title-default].tip--top-right:hover:before,.lifterlms [data-title-active].tip--top-right:hover:before,.llms-metabox [data-tip].tip--top-right:hover:before,.llms-metabox [data-title-default].tip--top-right:hover:before,.llms-metabox [data-title-active].tip--top-right:hover:before,.llms-mb-container [data-tip].tip--top-right:hover:before,.llms-mb-container [data-title-default].tip--top-right:hover:before,.llms-mb-container [data-title-active].tip--top-right:hover:before,.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before{bottom:calc(100% + 6px)}.lifterlms [data-tip].tip--top-right:after,.lifterlms [data-title-default].tip--top-right:after,.lifterlms [data-title-active].tip--top-right:after,.llms-metabox [data-tip].tip--top-right:after,.llms-metabox [data-title-default].tip--top-right:after,.llms-metabox [data-title-active].tip--top-right:after,.llms-mb-container [data-tip].tip--top-right:after,.llms-mb-container [data-title-default].tip--top-right:after,.llms-mb-container [data-title-active].tip--top-right:after,.llms-quiz-wrapper [data-tip].tip--top-right:after,.llms-quiz-wrapper [data-title-default].tip--top-right:after,.llms-quiz-wrapper [data-title-active].tip--top-right:after{border-top-color:#444;left:6px;top:0}.lifterlms [data-tip].tip--top-right:hover:after,.lifterlms [data-title-default].tip--top-right:hover:after,.lifterlms [data-title-active].tip--top-right:hover:after,.llms-metabox [data-tip].tip--top-right:hover:after,.llms-metabox [data-title-default].tip--top-right:hover:after,.llms-metabox [data-title-active].tip--top-right:hover:after,.llms-mb-container [data-tip].tip--top-right:hover:after,.llms-mb-container [data-title-default].tip--top-right:hover:after,.llms-mb-container [data-title-active].tip--top-right:hover:after,.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after{top:-6px}.lifterlms [data-tip].tip--top-left:before,.lifterlms [data-title-default].tip--top-left:before,.lifterlms [data-title-active].tip--top-left:before,.llms-metabox [data-tip].tip--top-left:before,.llms-metabox [data-title-default].tip--top-left:before,.llms-metabox [data-title-active].tip--top-left:before,.llms-mb-container [data-tip].tip--top-left:before,.llms-mb-container [data-title-default].tip--top-left:before,.llms-mb-container [data-title-active].tip--top-left:before,.llms-quiz-wrapper [data-tip].tip--top-left:before,.llms-quiz-wrapper [data-title-default].tip--top-left:before,.llms-quiz-wrapper [data-title-active].tip--top-left:before{bottom:100%;right:-10px}.lifterlms [data-tip].tip--top-left:hover:before,.lifterlms [data-title-default].tip--top-left:hover:before,.lifterlms [data-title-active].tip--top-left:hover:before,.llms-metabox [data-tip].tip--top-left:hover:before,.llms-metabox [data-title-default].tip--top-left:hover:before,.llms-metabox [data-title-active].tip--top-left:hover:before,.llms-mb-container [data-tip].tip--top-left:hover:before,.llms-mb-container [data-title-default].tip--top-left:hover:before,.llms-mb-container [data-title-active].tip--top-left:hover:before,.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before{bottom:calc(100% + 6px)}.lifterlms [data-tip].tip--top-left:after,.lifterlms [data-title-default].tip--top-left:after,.lifterlms [data-title-active].tip--top-left:after,.llms-metabox [data-tip].tip--top-left:after,.llms-metabox [data-title-default].tip--top-left:after,.llms-metabox [data-title-active].tip--top-left:after,.llms-mb-container [data-tip].tip--top-left:after,.llms-mb-container [data-title-default].tip--top-left:after,.llms-mb-container [data-title-active].tip--top-left:after,.llms-quiz-wrapper [data-tip].tip--top-left:after,.llms-quiz-wrapper [data-title-default].tip--top-left:after,.llms-quiz-wrapper [data-title-active].tip--top-left:after{border-top-color:#444;right:6px;top:0}.lifterlms [data-tip].tip--top-left:hover:after,.lifterlms [data-title-default].tip--top-left:hover:after,.lifterlms [data-title-active].tip--top-left:hover:after,.llms-metabox [data-tip].tip--top-left:hover:after,.llms-metabox [data-title-default].tip--top-left:hover:after,.llms-metabox [data-title-active].tip--top-left:hover:after,.llms-mb-container [data-tip].tip--top-left:hover:after,.llms-mb-container [data-title-default].tip--top-left:hover:after,.llms-mb-container [data-title-active].tip--top-left:hover:after,.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after{top:-6px}.lifterlms [data-tip].tip--bottom-left:before,.lifterlms [data-title-default].tip--bottom-left:before,.lifterlms [data-title-active].tip--bottom-left:before,.llms-metabox [data-tip].tip--bottom-left:before,.llms-metabox [data-title-default].tip--bottom-left:before,.llms-metabox [data-title-active].tip--bottom-left:before,.llms-mb-container [data-tip].tip--bottom-left:before,.llms-mb-container [data-title-default].tip--bottom-left:before,.llms-mb-container [data-title-active].tip--bottom-left:before,.llms-quiz-wrapper [data-tip].tip--bottom-left:before,.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,.llms-quiz-wrapper [data-title-active].tip--bottom-left:before{top:100%;right:-10px}.lifterlms [data-tip].tip--bottom-left:hover:before,.lifterlms [data-title-default].tip--bottom-left:hover:before,.lifterlms [data-title-active].tip--bottom-left:hover:before,.llms-metabox [data-tip].tip--bottom-left:hover:before,.llms-metabox [data-title-default].tip--bottom-left:hover:before,.llms-metabox [data-title-active].tip--bottom-left:hover:before,.llms-mb-container [data-tip].tip--bottom-left:hover:before,.llms-mb-container [data-title-default].tip--bottom-left:hover:before,.llms-mb-container [data-title-active].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before{top:calc(100% + 6px)}.lifterlms [data-tip].tip--bottom-left:after,.lifterlms [data-title-default].tip--bottom-left:after,.lifterlms [data-title-active].tip--bottom-left:after,.llms-metabox [data-tip].tip--bottom-left:after,.llms-metabox [data-title-default].tip--bottom-left:after,.llms-metabox [data-title-active].tip--bottom-left:after,.llms-mb-container [data-tip].tip--bottom-left:after,.llms-mb-container [data-title-default].tip--bottom-left:after,.llms-mb-container [data-title-active].tip--bottom-left:after,.llms-quiz-wrapper [data-tip].tip--bottom-left:after,.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,.llms-quiz-wrapper [data-title-active].tip--bottom-left:after{border-bottom-color:#444;right:6px;bottom:0}.lifterlms [data-tip].tip--bottom-left:hover:after,.lifterlms [data-title-default].tip--bottom-left:hover:after,.lifterlms [data-title-active].tip--bottom-left:hover:after,.llms-metabox [data-tip].tip--bottom-left:hover:after,.llms-metabox [data-title-default].tip--bottom-left:hover:after,.llms-metabox [data-title-active].tip--bottom-left:hover:after,.llms-mb-container [data-tip].tip--bottom-left:hover:after,.llms-mb-container [data-title-default].tip--bottom-left:hover:after,.llms-mb-container [data-title-active].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after{bottom:-6px}.lifterlms [data-tip].tip--bottom-right:before,.lifterlms [data-title-default].tip--bottom-right:before,.lifterlms [data-title-active].tip--bottom-right:before,.llms-metabox [data-tip].tip--bottom-right:before,.llms-metabox [data-title-default].tip--bottom-right:before,.llms-metabox [data-title-active].tip--bottom-right:before,.llms-mb-container [data-tip].tip--bottom-right:before,.llms-mb-container [data-title-default].tip--bottom-right:before,.llms-mb-container [data-title-active].tip--bottom-right:before,.llms-quiz-wrapper [data-tip].tip--bottom-right:before,.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,.llms-quiz-wrapper [data-title-active].tip--bottom-right:before{top:100%;left:-10px}.lifterlms [data-tip].tip--bottom-right:hover:before,.lifterlms [data-title-default].tip--bottom-right:hover:before,.lifterlms [data-title-active].tip--bottom-right:hover:before,.llms-metabox [data-tip].tip--bottom-right:hover:before,.llms-metabox [data-title-default].tip--bottom-right:hover:before,.llms-metabox [data-title-active].tip--bottom-right:hover:before,.llms-mb-container [data-tip].tip--bottom-right:hover:before,.llms-mb-container [data-title-default].tip--bottom-right:hover:before,.llms-mb-container [data-title-active].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before{top:calc(100% + 6px)}.lifterlms [data-tip].tip--bottom-right:after,.lifterlms [data-title-default].tip--bottom-right:after,.lifterlms [data-title-active].tip--bottom-right:after,.llms-metabox [data-tip].tip--bottom-right:after,.llms-metabox [data-title-default].tip--bottom-right:after,.llms-metabox [data-title-active].tip--bottom-right:after,.llms-mb-container [data-tip].tip--bottom-right:after,.llms-mb-container [data-title-default].tip--bottom-right:after,.llms-mb-container [data-title-active].tip--bottom-right:after,.llms-quiz-wrapper [data-tip].tip--bottom-right:after,.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,.llms-quiz-wrapper [data-title-active].tip--bottom-right:after{border-bottom-color:#444;left:6px;bottom:0}.lifterlms [data-tip].tip--bottom-right:hover:after,.lifterlms [data-title-default].tip--bottom-right:hover:after,.lifterlms [data-title-active].tip--bottom-right:hover:after,.llms-metabox [data-tip].tip--bottom-right:hover:after,.llms-metabox [data-title-default].tip--bottom-right:hover:after,.llms-metabox [data-title-active].tip--bottom-right:hover:after,.llms-mb-container [data-tip].tip--bottom-right:hover:after,.llms-mb-container [data-title-default].tip--bottom-right:hover:after,.llms-mb-container [data-title-active].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after{bottom:-6px}.lifterlms [data-tip]:before,.lifterlms [data-title-default]:before,.lifterlms [data-title-active]:before,.llms-metabox [data-tip]:before,.llms-metabox [data-title-default]:before,.llms-metabox [data-title-active]:before,.llms-mb-container [data-tip]:before,.llms-mb-container [data-title-default]:before,.llms-mb-container [data-title-active]:before,.llms-quiz-wrapper [data-tip]:before,.llms-quiz-wrapper [data-title-default]:before,.llms-quiz-wrapper [data-title-active]:before{background:#444;border-radius:4px;color:#fff;font-size:13px;line-height:1.2;padding:8px;max-width:300px;width:-webkit-max-content;width:-moz-max-content;width:max-content}.lifterlms [data-tip]:after,.lifterlms [data-title-default]:after,.lifterlms [data-title-active]:after,.llms-metabox [data-tip]:after,.llms-metabox [data-title-default]:after,.llms-metabox [data-title-active]:after,.llms-mb-container [data-tip]:after,.llms-mb-container [data-title-default]:after,.llms-mb-container [data-title-active]:after,.llms-quiz-wrapper [data-tip]:after,.llms-quiz-wrapper [data-title-default]:after,.llms-quiz-wrapper [data-title-active]:after{content:"";border:6px solid rgba(0,0,0,0);height:0;width:0}.lifterlms [data-tip]:before,.lifterlms [data-tip]:after,.lifterlms [data-title-default]:before,.lifterlms [data-title-default]:after,.lifterlms [data-title-active]:before,.lifterlms [data-title-active]:after,.llms-metabox [data-tip]:before,.llms-metabox [data-tip]:after,.llms-metabox [data-title-default]:before,.llms-metabox [data-title-default]:after,.llms-metabox [data-title-active]:before,.llms-metabox [data-title-active]:after,.llms-mb-container [data-tip]:before,.llms-mb-container [data-tip]:after,.llms-mb-container [data-title-default]:before,.llms-mb-container [data-title-default]:after,.llms-mb-container [data-title-active]:before,.llms-mb-container [data-title-active]:after,.llms-quiz-wrapper [data-tip]:before,.llms-quiz-wrapper [data-tip]:after,.llms-quiz-wrapper [data-title-default]:before,.llms-quiz-wrapper [data-title-default]:after,.llms-quiz-wrapper [data-title-active]:before,.llms-quiz-wrapper [data-title-active]:after{opacity:0;-webkit-transition:all .2s .1s ease;transition:all .2s .1s ease;position:absolute;pointer-events:none;visibility:hidden}.lifterlms [data-tip]:hover:before,.lifterlms [data-tip]:hover:after,.lifterlms [data-title-default]:hover:before,.lifterlms [data-title-default]:hover:after,.lifterlms [data-title-active]:hover:before,.lifterlms [data-title-active]:hover:after,.llms-metabox [data-tip]:hover:before,.llms-metabox [data-tip]:hover:after,.llms-metabox [data-title-default]:hover:before,.llms-metabox [data-title-default]:hover:after,.llms-metabox [data-title-active]:hover:before,.llms-metabox [data-title-active]:hover:after,.llms-mb-container [data-tip]:hover:before,.llms-mb-container [data-tip]:hover:after,.llms-mb-container [data-title-default]:hover:before,.llms-mb-container [data-title-default]:hover:after,.llms-mb-container [data-title-active]:hover:before,.llms-mb-container [data-title-active]:hover:after,.llms-quiz-wrapper [data-tip]:hover:before,.llms-quiz-wrapper [data-tip]:hover:after,.llms-quiz-wrapper [data-title-default]:hover:before,.llms-quiz-wrapper [data-title-default]:hover:after,.llms-quiz-wrapper [data-title-active]:hover:before,.llms-quiz-wrapper [data-title-active]:hover:after{opacity:1;-webkit-transition:all 0 .1s ease;transition:all 0 .1s ease;visibility:visible;z-index:99999999}.lifterlms [data-tip]:before,.llms-metabox [data-tip]:before,.llms-mb-container [data-tip]:before,.llms-quiz-wrapper [data-tip]:before{content:attr(data-tip)}.lifterlms [data-tip].active:before,.llms-metabox [data-tip].active:before,.llms-mb-container [data-tip].active:before,.llms-quiz-wrapper [data-tip].active:before{content:attr(data-tip-active)}#adminmenu .toplevel_page_lifterlms .wp-menu-image img{padding-top:6px;width:20px}#adminmenu .toplevel_page_lifterlms a[href*="page=llms-add-ons"],#adminmenu .opensub .wp-submenu li.current a[href*="page=llms-add-ons"],#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],#adminmenu .wp-submenu li.current a[href*="page=llms-add-ons"],#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a[href*="page=llms-add-ons"]{color:#f8954f}.last-col{float:right;padding-right:0 !important}.last-col:after{clear:both}@media(max-width: 767px){.m-all{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding-right:0}.m-1of2{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.m-1of3{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33%}.m-2of3{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66%}.m-1of4{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.m-3of4{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.m-right{text-align:center}.m-center{text-align:center}.m-left{text-align:center}.d-right{text-align:right}.d-center{text-align:center}.d-left{text-align:left}}@media(min-width: 768px)and (max-width: 1029px){.t-all{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding-right:0}.t-1of2{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.t-1of3{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33%}.t-2of3{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66%}.t-1of4{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.t-3of4{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.t-1of5{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:20%}.t-2of5{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:40%}.t-3of5{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:60%}.t-4of5{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%}.d-right{text-align:right}.d-center{text-align:center}.d-left{text-align:left}}@media(min-width: 1030px){.d-all{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding-right:0}.d-1of2{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.d-1of3{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33%}.d-2of3{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66%}.d-1of4{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.d-3of4{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.d-1of5{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:20%}.d-2of5{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:40%}.d-3of5{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:60%}.d-4of5{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%}.d-1of6{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.6666666667%}.d-1of7{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:14.2857142857%}.d-2of7{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:28.5714286%}.d-3of7{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:42.8571429%}.d-4of7{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:57.1428572%}.d-5of7{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:71.4285715%}.d-6of7{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:85.7142857%}.d-1of8{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.d-1of9{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:11.1111111111%}.d-1of10{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:10%}.d-1of11{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:9.0909090909%}.d-1of12{float:left;padding-right:.75em;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33%}.d-right{text-align:right}.d-center{text-align:center}.d-left{text-align:left}}#llms-form-wrapper .llms-search-form-wrapper{border-bottom:1px solid #999;margin:20px 0}#llms-form-wrapper #llms_analytics_search{border:none !important;text-shadow:none !important;border:none !important;outline:none !important;-webkit-box-shadow:none !important;box-shadow:none !important;margin:0 !important;color:#fefefe !important;background:#466dd8 !important;border-radius:0;-webkit-transition:.5s;transition:.5s}#llms-form-wrapper #llms_analytics_search:hover{background:#0185a3 !important}#llms-form-wrapper #llms_analytics_search:active{background:#33b1cb !important}#llms-skip-setup-form .llms-admin-link{background:none !important;border:none;padding:0 !important;color:#0074a2;cursor:pointer}#llms-skip-setup-form .llms-admin-link:hover{color:#2ea2cc}#llms-skip-setup-form .llms-admin-link:focus{color:#124964}.llms-switch{position:relative}.llms-switch .llms-toggle{position:absolute;margin-left:-9999px;visibility:hidden}.llms-switch .llms-toggle+label{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;position:relative;cursor:pointer;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.llms-switch input.llms-toggle-round+label{border:2px solid #6c7781;border-radius:10px;height:20px;width:36px}.llms-switch input.llms-toggle-round+label:before,.llms-switch input.llms-toggle-round+label:after{-webkit-box-sizing:border-box;box-sizing:border-box;content:"";display:block;position:absolute;-webkit-transition:background .4s;transition:background .4s}.llms-switch input.llms-toggle-round:checked+label{border-color:#11a0d2;background-color:#11a0d2}.llms-switch input.llms-toggle-round+label:after{height:12px;left:2px;top:2px;background-color:#6c7781;border-radius:50%;-webkit-transition:margin .4s;transition:margin .4s;width:12px;z-index:3}.llms-switch input.llms-toggle-round:checked+label:after{background-color:#fefefe;margin-left:16px}.llms-switch input.llms-toggle-round+label:before{height:8px;top:4px;border:1px solid #6c7781;border-radius:50%;right:4px;width:8px;z-index:2}.llms-switch input.llms-toggle-round:checked+label:before{border-color:#fefefe;border-radius:0;left:6px;right:auto;width:2px}#llms-profile-fields{margin:50px 0}#llms-profile-fields .llms-form-field{padding-left:0}#llms-profile-fields label{display:block;font-weight:bold;padding:8px 0 2px}#llms-profile-fields .type-checkbox .type-checkbox label{display:initial;font-weight:initial;padding:0}#llms-profile-fields .type-checkbox .type-checkbox input{display:inline-block;margin-bottom:0;width:1rem}#llms-profile-fields select{max-width:100%}a.llms-voucher-delete{background:#bb231c;color:#fefefe;display:block;padding:4px 2px;text-decoration:none;-webkit-transition:ease .3s all;transition:ease .3s all}a.llms-voucher-delete:hover{background:#af3a26}.llms-voucher-codes-wrapper table,.llms-voucher-redemption-wrapper table{width:100%;border-collapse:collapse}.llms-voucher-codes-wrapper table th,.llms-voucher-codes-wrapper table td,.llms-voucher-redemption-wrapper table th,.llms-voucher-redemption-wrapper table td{border:none}.llms-voucher-codes-wrapper table thead,.llms-voucher-redemption-wrapper table thead{background-color:#466dd8;color:#fff}.llms-voucher-codes-wrapper table thead th,.llms-voucher-redemption-wrapper table thead th{padding:10px 10px}.llms-voucher-codes-wrapper table tr,.llms-voucher-redemption-wrapper table tr{counter-increment:row-counter}.llms-voucher-codes-wrapper table tr:nth-child(even),.llms-voucher-redemption-wrapper table tr:nth-child(even){background-color:#f1f1f1}.llms-voucher-codes-wrapper table tr td,.llms-voucher-redemption-wrapper table tr td{padding:5px}.llms-voucher-codes-wrapper table tr td:first-child:before,.llms-voucher-redemption-wrapper table tr td:first-child:before{content:counter(row-counter)}.llms-voucher-codes-wrapper table{width:100%;border-collapse:collapse}.llms-voucher-codes-wrapper table th,.llms-voucher-codes-wrapper table td{border:none}.llms-voucher-codes-wrapper table thead{background-color:#466dd8;color:#fff}.llms-voucher-codes-wrapper table tr:nth-child(even){background-color:#f1f1f1}.llms-voucher-codes-wrapper table tr td span{display:inline-block;min-width:30px}.llms-voucher-codes-wrapper button{cursor:pointer}.llms-voucher-codes-wrapper .llms-voucher-delete{float:right;margin-right:15px}.llms-voucher-codes-wrapper .llms-voucher-uses{width:50px}.llms-voucher-codes-wrapper .llms-voucher-add-codes{float:right}.llms-voucher-codes-wrapper .llms-voucher-add-codes input[type=text]{width:30px}.llms-voucher-export-wrapper .llms-voucher-export-type{width:100%}.llms-voucher-export-wrapper .llms-voucher-export-type p{margin:0 0 0 15px}.llms-voucher-export-wrapper .llms-voucher-email-wrapper{width:100%;margin:25px 0}.llms-voucher-export-wrapper .llms-voucher-email-wrapper input[type=text]{width:100%}.llms-voucher-export-wrapper .llms-voucher-email-wrapper p{margin:0}.llms-voucher-export-wrapper>button{float:right}.postbox .inside{overflow:auto}.llms-widget{background-color:#fff;border:1px solid #dedede;border-radius:12px;-webkit-box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin-bottom:20px;padding:20px;position:relative;width:100%}.llms-widget.alt{border:1px solid #ccc;background-color:#efefef;margin-bottom:10px}.llms-widget.alt .llms-label{color:#777;font-size:14px;margin-bottom:10px;padding-bottom:5px}.llms-widget.alt h2{color:#444;font-weight:300}.llms-widget a{border-bottom:1px dotted #466dd8;display:inline-block;text-decoration:none}.llms-widget a:hover{border-bottom:1px dotted #2b55cb}.llms-widget .llms-widget-content{margin:.67em 0;color:#466dd8;font-size:2.4em;font-weight:700;line-height:1;word-break:break-all}.llms-widget h2{font-size:1.8em}.llms-widget .llms-label{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:18px;font-weight:400;margin:0 0 10px 0;text-align:center}.llms-widget .llms-chart{width:100%;padding:10px;-webkit-box-sizing:border-box;box-sizing:border-box}.llms-widget mark.yes{background-color:#7ad03a}.llms-widget .llms-subtitle{margin-bottom:0}.llms-widget .spinner{float:none;left:50%;margin:-10px 0 0 -10px;position:absolute;top:50%;z-index:2}.llms-widget.is-loading:before{background:#fefefe;bottom:0;content:"";left:0;opacity:.9;position:absolute;right:0;top:0;z-index:1}.llms-widget.is-loading .spinner{visibility:visible}.llms-widget td[colspan="2"]{padding-left:0}.llms-widget tr.llms-disabled-field{opacity:.5;pointer-events:none}.llms-widget-1-3,.llms-widget-1-4,.llms-widget-1-5{text-align:center}.llms-widget .llms-widget-info-toggle{color:#aaa;cursor:pointer;font-size:16px;position:absolute;right:20px;top:20px}.llms-widget.info-showing .llms-widget-info{display:block}.llms-widget-info{background:#444;color:#fefefe;bottom:-50px;display:none;padding:15px;position:absolute;text-align:center;left:10px;right:15px;z-index:3}.llms-widget-info:before{content:"";border:12px solid rgba(0,0,0,0);border-bottom-color:#444;left:50%;margin-left:-12px;position:absolute;top:-24px}.llms-widget-info p{margin:0}.llms-widget-row:before,.llms-widget-row:after{content:" ";display:table}.llms-widget-row:after{clear:both}.llms-widget-row .no-padding{padding:0 !important}svg.icon{height:24px;width:24px;display:inline-block;fill:currentColor;vertical-align:baseline}button svg.icon{height:18px;width:18px;margin:4px -4px 0 4px;-webkit-filter:drop-shadow(0 1px #eee);filter:drop-shadow(0 1px #eee);float:right}svg.icon.menu-icon{height:20px;width:20px;display:inline-block;fill:currentColor;vertical-align:text-bottom;margin-right:10px}svg.icon.tree-icon{height:13px;width:13px;vertical-align:middle}svg.icon.section-icon{height:16px;width:16px;vertical-align:text-bottom}svg.icon.button-icon{height:16px;width:16px;vertical-align:text-bottom}svg.icon.button-icon-attr{height:10px;width:10px;vertical-align:middle}svg.icon.list-icon{height:12px;width:12px;vertical-align:middle}svg.icon.list-icon.on{color:#466dd8}svg.icon.list-icon.off{color:#444}svg.icon.detail-icon{height:16px;width:16px;vertical-align:text-bottom;cursor:default}svg.icon.detail-icon.on{color:#466dd8}svg.icon.detail-icon.off{color:#ccc}svg.icon-ion-arrow-up{-webkit-transform:rotate(90deg);transform:rotate(90deg)}svg use{pointer-events:none}#side-sortables .tab-content{padding:0}.llms-mb-container .tab-content{display:none;background-color:#fff;padding:0 20px}.llms-mb-container .tab-content ul:not(.select2-selection__rendered){margin:0 0 15px 0}.llms-mb-container .tab-content ul:not(.select2-selection__rendered)>li{padding:20px 0;margin:0}.llms-mb-container .tab-content ul:not(.select2-selection__rendered)>li.select:not([class*=d-]){width:100%}.llms-mb-container .tab-content ul:not(.select2-selection__rendered)>li:last-child{border:0;padding-bottom:0}.llms-mb-container .tab-content ul:not(.select2-selection__rendered)>li.top{border-bottom:0;padding-bottom:0}.llms-mb-container .tab-content .full-width{width:100%}.llms-mb-container .tab-content #wp-content-editor-tools{background:none}.llms-mb-container .tab-content.llms-active{display:inherit}.llms-mb-container .tab-content .no-border{border-bottom:0px}.topModal{display:none;position:relative;border:4px solid gray;background:#fff;z-index:1000001;padding:2px;max-width:500px;margin:34px auto 0;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-color:#fff;border-radius:2px;border:1px solid #ddd}.topModalClose{float:right;cursor:pointer;margin-right:10px;margin-top:10px}.topModalContainer{display:none;overflow:auto;overflow-y:hidden;position:fixed;top:0 !important;right:0;bottom:0;left:0;-webkit-overflow-scrolling:touch;width:auto !important;margin-left:0 !important;background-color:rgba(0,0,0,0) !important;z-index:100002 !important}.topModalBackground{display:none;background:#000;position:fixed;height:100%;width:100%;top:0 !important;left:0;margin-left:0 !important;z-index:100002 !important;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto;overflow-y:hidden}body.modal-open{overflow:hidden}.llms-modal-header{border-top-right-radius:1px;border-top-left-radius:1px;background:#466dd8;color:#eee;padding:10px 15px;font-size:18px}#llms-icon-modal-close{width:16px;height:16px;fill:#fefefe}.llms-modal-content{padding:20px}.llms-modal-content h3{margin-top:0}.llms-modal-form h1{margin-top:0}.llms-modal-form input[type=text]{width:100%}.llms-modal-form textarea,.llms-modal-form input[type=text],.llms-modal-form input[type=password],.llms-modal-form input[type=file],.llms-modal-form input[type=datetime],.llms-modal-form input[type=datetime-local],.llms-modal-form input[type=date],.llms-modal-form input[type=month],.llms-modal-form input[type=time],.llms-modal-form input[type=week],.llms-modal-form input[type=number],.llms-modal-form input[type=email],.llms-modal-form input[type=url],.llms-modal-form input[type=search],.llms-modal-form input[type=tel],.llms-modal-form input[type=color]{padding:0 .4em 0 .4em;margin-bottom:2em;vertical-align:middle;border-radius:3px;min-width:50px;max-width:635px;width:100%;min-height:32px;background-color:#fff;border:1px solid #ccc;margin:0 0 24px 0;outline:none;-webkit-transition:border .3s ease-in-out 0s;transition:border .3s ease-in-out 0s}.llms-modal-form textarea:focus,.llms-modal-form input[type=text]:focus,.llms-modal-form input[type=password]:focus,.llms-modal-form input[type=file]:focus,.llms-modal-form input[type=datetime]:focus,.llms-modal-form input[type=datetime-local]:focus,.llms-modal-form input[type=date]:focus,.llms-modal-form input[type=month]:focus,.llms-modal-form input[type=time]:focus,.llms-modal-form input[type=week]:focus,.llms-modal-form input[type=number]:focus,.llms-modal-form input[type=email]:focus,.llms-modal-form input[type=url]:focus,.llms-modal-form input[type=search]:focus,.llms-modal-form input[type=tel]:focus,.llms-modal-form input[type=color]:focus{background:#fefefe;border:1px solid #466dd8}.llms-modal-form textarea{padding:.4em !important;height:100px !important;border-radius:3px;vertical-align:middle;min-height:32px;outline:none;-webkit-box-sizing:border-box;box-sizing:border-box}.llms-modal-form textarea:focus{background:#fefefe;border:1px solid #466dd8}.llms-modal-form .chosen-container-single .chosen-single{border-radius:3px;vertical-align:middle;min-height:32px;border:1px solid #ccc;width:100%;background:#fefefe !important;outline:none;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 0 0 #fff;box-shadow:0 0 0 #fff;line-height:32px;margin:0 0 24px 0}.llms-modal-form .chosen-container-single .chosen-single:focus{background:#fefefe;border:1px solid #466dd8}.llms-modal-form .chosen-container-single .chosen-single div b{margin-top:4px}.llms-modal-form .chosen-search input[type=text]{border:1px solid #ccc}.llms-modal-form .chosen-search input[type=text]:focus{background-color:#fefefe;border:1px solid #466dd8}.llms-modal-form .chosen-container-single .chosen-drop{margin-top:-28px}.llms-modal-form .llms-button-primary,.llms-modal-form .llms-button-secondary{padding:10px 10px;border-radius:0;-webkit-transition:.5s;transition:.5s;-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.llms-modal-form .llms-button-primary.full,.llms-modal-form .llms-button-secondary.full{width:100%}.modal-open .select2-dropdown{z-index:1000005}.button.llms-merge-code-button{vertical-align:middle}.button.llms-merge-code-button svg{margin-right:2px;position:relative;top:4px;width:16px}.button.llms-merge-code-button svg g{fill:currentColor}.llms-mb-container .llms-merge-code-wrapper{float:right;top:-5px}.llms-merge-code-wrapper{display:inline;position:relative}.llms-merge-codes{background:#f7f7f7;border:1px solid #ccc;border-radius:3px;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc;color:#555;display:none;left:1px;overflow:hidden;position:absolute;top:30px;width:200px}.llms-merge-codes ul{margin:0;padding:0}.llms-merge-codes li{cursor:pointer;margin:0;padding:4px 8px !important;border-bottom:1px solid #ccc}.llms-merge-codes li:hover{color:#23282d;background:#fefefe}.llms-merge-codes.active{display:block;z-index:777}.llms-nav-tab,.llms-nav-tab-filters{display:block;width:100%}form.llms-nav-tab-filters.full-width{width:100%}form.llms-nav-tab-filters.full-width label{display:inline-block;width:10%;text-align:left}form.llms-nav-tab-filters.full-width .select2-container{width:85% !important}.llms-nav-tab-settings{display:block;width:100%}#llms-form-wrapper .llms-select{width:100%;margin-bottom:20px}#llms-form-wrapper .llms-checkbox{display:inline-block;width:100%;text-align:left}#llms-form-wrapper .llms-filter-options{width:100%}#llms-form-wrapper .llms-date-select{width:100%;display:inline-block;margin-bottom:20px}#llms-form-wrapper .llms-date-select input[type=text]{width:100%}ul.tabs li{display:block}@media only screen and (min-width: 481px){#llms-form-wrapper .llms-checkbox{width:33%}}@media only screen and (min-width: 768px){ul.tabs li{display:inline-block}.llms-nav-tab{display:inline-block;width:33%}.llms-nav-tab-settings{display:inline-block;width:25%}#llms-form-wrapper .llms-select{width:50%;max-width:500px}#llms-form-wrapper .llms-filter-options{width:50%;max-width:500px}#llms-form-wrapper .llms-date-select{width:47.5%}#llms-form-wrapper .llms-date-select:first-child{margin-right:5%}.llms-widget input[type=text],.llms-widget input[type=password],.llms-widget input[type=datetime],.llms-widget input[type=datetime-local],.llms-widget input[type=date],.llms-widget input[type=month],.llms-widget input[type=time],.llms-widget input[type=week],.llms-widget input[type=number],.llms-widget input[type=email],.llms-widget input[type=url],.llms-widget input[type=search],.llms-widget input[type=tel],.llms-widget input[type=color],.llms-widget select,.llms-widget textarea{width:50%}.llms-widget input[type=text].medium,.llms-widget input[type=password].medium,.llms-widget input[type=datetime].medium,.llms-widget input[type=datetime-local].medium,.llms-widget input[type=date].medium,.llms-widget input[type=month].medium,.llms-widget input[type=time].medium,.llms-widget input[type=week].medium,.llms-widget input[type=number].medium,.llms-widget input[type=email].medium,.llms-widget input[type=url].medium,.llms-widget input[type=search].medium,.llms-widget input[type=tel].medium,.llms-widget input[type=color].medium,.llms-widget select.medium,.llms-widget textarea.medium{width:30%}.llms-widget input[type=text].small,.llms-widget input[type=password].small,.llms-widget input[type=datetime].small,.llms-widget input[type=datetime-local].small,.llms-widget input[type=date].small,.llms-widget input[type=month].small,.llms-widget input[type=time].small,.llms-widget input[type=week].small,.llms-widget input[type=number].small,.llms-widget input[type=email].small,.llms-widget input[type=url].small,.llms-widget input[type=search].small,.llms-widget input[type=tel].small,.llms-widget input[type=color].small,.llms-widget select.small,.llms-widget textarea.small{width:20%}.llms-widget input[type=text].tiny,.llms-widget input[type=password].tiny,.llms-widget input[type=datetime].tiny,.llms-widget input[type=datetime-local].tiny,.llms-widget input[type=date].tiny,.llms-widget input[type=month].tiny,.llms-widget input[type=time].tiny,.llms-widget input[type=week].tiny,.llms-widget input[type=number].tiny,.llms-widget input[type=email].tiny,.llms-widget input[type=url].tiny,.llms-widget input[type=search].tiny,.llms-widget input[type=tel].tiny,.llms-widget input[type=color].tiny,.llms-widget select.tiny,.llms-widget textarea.tiny{width:10%}}@media only screen and (min-width: 1030px){.llms-nav-tab{display:inline-block;width:33.333%}.llms-nav-tab-settings{display:inline-block;width:25%}#llms-form-wrapper .llms-select{display:inline-block;width:47.5%}#llms-form-wrapper .llms-select:first-child{margin-right:5%}#llms-form-wrapper .llms-filter-options{display:inline-block;width:47.5%}#llms-form-wrapper .llms-filter-options.date-filter{margin-right:5%}#llms-form-wrapper .llms-filter-options .llms-date-select{margin-bottom:0}#llms-form-wrapper .llms-date-select{width:47.5%}#llms-form-wrapper .llms-date-select:first-child{margin-right:5%}.llms-widget-row:before,.llms-widget-row:after{content:" ";display:table}.llms-widget-row:after{clear:both}.llms-widget-row .llms-widget-1-5{vertical-align:top;width:20%;float:left;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px}.llms-widget-row .llms-widget-1-4{vertical-align:top;width:25%;float:left;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px}.llms-widget-row .llms-widget-1-3{width:33.3%;float:left;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px}.llms-widget-row .llms-widget-1-2{width:50%;float:left;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 5px;vertical-align:top}}@media only screen and (min-width: 1240px){.llms-nav-tab-filters,.llms-nav-tab-settings{float:left;width:12.5%}}.wrap.lifterlms{margin-top:0}.llms-header{background-color:#fff;margin:0 0 0 -20px;padding:20px 10px;position:relative;z-index:1}.llms-header .llms-inside-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 10px}.llms-header .lifterlms-logo{-webkit-box-flex:0;-ms-flex:0 0 190px;flex:0 0 190px;max-height:52px;margin-right:10px}.llms-header .llms-meta{-ms-flex-item-align:center;align-self:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:16px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;line-height:1.5}.llms-header .llms-meta .llms-version{background-color:#1d2327;color:#fff;border-radius:999px;font-size:13px;font-weight:700;padding:6px 12px}.llms-header .llms-meta a{display:inline-block}.llms-header .llms-meta .llms-license{border-right:1px solid #ccc;font-weight:700;margin-right:12px;padding-right:12px}.llms-header .llms-meta .llms-license a{text-decoration:none}.llms-header .llms-meta .llms-license a:before{content:"";display:inline-block;font:400 16px/1 dashicons;left:0;padding-right:3px;position:relative;text-decoration:none;vertical-align:text-bottom}.llms-header .llms-meta .llms-license a.llms-license-none{color:#888}.llms-header .llms-meta .llms-license a.llms-license-none:before{content:""}.llms-header .llms-meta .llms-license a.llms-license-active{color:#008a20}.llms-header .llms-meta .llms-license a.llms-license-active:before{content:""}.llms-header .llms-meta .llms-support{font-weight:700}.llms-header .llms-meta .llms-support a{color:#1d2327;text-decoration:none}.llms-subheader{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin-left:-20px;padding:10px 20px;width:100%;z-index:1}.llms-subheader h1{font-weight:700;padding:0}.llms-subheader h1 a{color:inherit;text-decoration:none}#post_course_difficulty{min-width:200px}#_video-embed,#_audio-embed{width:100%}hr{background-color:#ccc;border:none;height:1px;margin:30px 0;padding:0}.llms_certificate_default_image,.llms_certificate_image{width:300px}.llms_achievement_default_image,.llms_achievement_image{width:120px}div[id^=lifterlms-] .inside{overflow:visible}.notice.llms-admin-notice{background-color:#fff;border:1px solid #ccd0d4;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.15);box-shadow:0 1px 4px rgba(0,0,0,.15);display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 !important;position:relative}.notice.llms-admin-notice .notice-dismiss{text-decoration:none}.notice.llms-admin-notice.notice-warning{border-left:4px solid #f8954f}.notice.llms-admin-notice.notice-warning .llms-admin-notice-icon{background-color:#fef4ed}.notice.llms-admin-notice.notice-info{border-left:4px solid #466dd8}.notice.llms-admin-notice.notice-info h3{color:#466dd8}.notice.llms-admin-notice.notice-info .llms-admin-notice-icon{background-color:#edf0fb}.notice.llms-admin-notice.notice-success{border-left:4px solid #18a957}.notice.llms-admin-notice.notice-success h3{color:#18a957}.notice.llms-admin-notice.notice-success .llms-admin-notice-icon{background-color:#e8f6ee}.notice.llms-admin-notice.notice-error{border-left:4px solid #df1642}.notice.llms-admin-notice.notice-error h3{color:#9c0f2e}.notice.llms-admin-notice.notice-error .llms-admin-notice-icon{background-color:#fce8ec}.notice.llms-admin-notice .llms-admin-notice-icon{background-image:url(../../assets/images/lifterlms-icon-color.png);background-position:center center;background-repeat:no-repeat;background-size:30px;min-width:70px}.notice.llms-admin-notice .llms-admin-notice-content{color:#111;padding:20px}.notice.llms-admin-notice h3{font-size:18px;font-weight:700;line-height:25px;margin:0 0 15px 0}.notice.llms-admin-notice button,.notice.llms-admin-notice .llms-button-primary{display:inline-block}.notice.llms-admin-notice p{font-size:14px;line-height:22px;margin:0 0 15px 0;max-width:65em;padding:0}.notice.llms-admin-notice p:last-of-type{margin-bottom:0}.llms-button-action.small .dashicons,.llms-button-danger.small .dashicons,.llms-button-primary.small .dashicons,.llms-button-secondary.small .dashicons{font-size:13px;height:13px;width:13px}.llms-button-action:hover,.llms-button-danger:hover,.llms-button-primary:hover,.llms-button-secondary:hover{-webkit-box-shadow:none;box-shadow:none}a.llms-view-as{line-height:2;margin-right:8px}.llms-image-field-preview{max-height:80px;vertical-align:middle;width:auto}.llms-image-field-remove.hidden{display:none}.llms-log-viewer{background:#fff;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);margin:20px 0;padding:25px}.llms-log-viewer pre{font-family:monospace;margin:0;padding:0;white-space:pre-wrap}.llms-status--tools .llms-table{background:#fff;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.llms-status--tools .llms-table td,.llms-status--tools .llms-table th{padding:10px;vertical-align:top}.llms-status--tools .llms-table th{width:28%}.llms-status--tools .llms-table p{margin:0 0 10px}.llms-error{color:#bb231c;font-style:italic}.llms-rating-stars{color:#ffb900;text-decoration:none}@media screen and (max-width: 782px){.llms-header{top:46px}.llms-header .llms-inside-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:20px}.llms-header .llms-inside-wrap .lifterlms-logo{-ms-flex-item-align:center;align-self:center;-webkit-box-flex:inherit;-ms-flex:inherit;flex:inherit;max-height:initial;max-width:200px}.llms-header .llms-inside-wrap .llms-meta{-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px}}.llms-table-wrap{position:relative}.llms-table-header{padding:0}.llms-table-header:before,.llms-table-header:after{content:" ";display:table}.llms-table-header:after{clear:both}.llms-table-header h2{font-size:20px;padding:0;display:inline-block;line-height:1.5;margin:0 0 20px 0;vertical-align:middle}.llms-table-header .llms-table-search,.llms-table-header .llms-table-filters{float:right;padding-left:10px}.llms-table-header .llms-table-search input{margin:0;padding:0 8px}.llms-table{border:1px solid #c3c4c7;border-collapse:collapse;width:100%}.llms-table a:not(.small){color:#466dd8}.llms-table a:not(.small):hover{color:#2b55cb}.llms-table td,.llms-table th{border-bottom:1px solid #c3c4c7;padding:10px 12px;text-align:center}.llms-table td.expandable.closed,.llms-table th.expandable.closed{display:none}.llms-table td .llms-button-primary,.llms-table td .llms-button-secondary,.llms-table td .llms-button-action,.llms-table td .llms-button-danger,.llms-table th .llms-button-primary,.llms-table th .llms-button-secondary,.llms-table th .llms-button-action,.llms-table th .llms-button-danger{display:inline-block}.llms-table tr.llms-quiz-pending td{font-weight:700}.llms-table thead th,.llms-table tfoot th{background-color:#fff;font-weight:700}.llms-table thead th a.llms-sortable,.llms-table tfoot th a.llms-sortable{padding-right:16px;position:relative;text-decoration:none;width:100%}.llms-table thead th a.llms-sortable.active[data-order=DESC] .asc,.llms-table tfoot th a.llms-sortable.active[data-order=DESC] .asc{opacity:1}.llms-table thead th a.llms-sortable.active[data-order=ASC] .desc,.llms-table tfoot th a.llms-sortable.active[data-order=ASC] .desc{opacity:1}.llms-table thead th a.llms-sortable:hover[data-order=DESC] .asc,.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .asc{opacity:0}.llms-table thead th a.llms-sortable:hover[data-order=DESC] .desc,.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .desc{opacity:1}.llms-table thead th a.llms-sortable:hover[data-order=ASC] .asc,.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .asc{opacity:1}.llms-table thead th a.llms-sortable:hover[data-order=ASC] .desc,.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .desc{opacity:0}.llms-table thead th a.llms-sortable .dashicons,.llms-table tfoot th a.llms-sortable .dashicons{color:#444;font-size:16px;height:16px;opacity:0;position:absolute;width:16px}.llms-table tfoot th{border-bottom:none}.llms-table tfoot th .llms-table-export{float:left}.llms-table tfoot th .llms-table-export .llms-table-progress{background:#efefef;display:none;margin-left:8px;vertical-align:middle;width:100px}.llms-table tfoot th .llms-table-pagination{float:right}.llms-table.zebra tbody tr:nth-child(even) th,.llms-table.zebra tbody tr:nth-child(even) td{background-color:#fff}.llms-table.zebra tbody tr:nth-child(odd) th,.llms-table.zebra tbody tr:nth-child(odd) td{background-color:#f6f7f7}.llms-table.text-left td,.llms-table.text-left th{text-align:left}.llms-table.size-large td,.llms-table.size-large th{font-size:14px;padding:10px 12px}.llms-table .llms-drag-handle{color:#777;cursor:pointer;-webkit-transition:color .4s ease;transition:color .4s ease}.llms-table .llms-action-icon{color:#777;text-decoration:none}.llms-table .llms-action-icon .tooltip{cursor:pointer}.llms-table .llms-action-icon:hover{color:#466dd8}.llms-table .llms-action-icon.danger:hover{color:#bb231c}.llms-table .llms-table-page-count{font-size:12px;padding:0 5px}.llms-table-progress{text-align:center}.llms-table-progress .llms-table-progress-bar{background:#eee;border-radius:10px;height:16px;overflow:hidden;position:relative}.llms-table-progress .llms-table-progress-bar .llms-table-progress-inner{background:#466dd8;height:100%;-webkit-transition:width .2s ease;transition:width .2s ease}.llms-table-progress .llms-table-progress-text{color:#466dd8;font-size:12px;font-weight:700;line-height:16px}.llms-table.llms-gateway-table .status .fa,.llms-table.llms-integrations-table .status .fa{color:#466dd8;font-size:22px}.llms-table.llms-gateway-table .sort,.llms-table.llms-integrations-table .sort{cursor:move;text-align:center;width:10px}.llms-gb-table-notifications th,.llms-gb-table-notifications td{text-align:left}.llms-order-note .llms-order-note-content{background:#efefef;margin-bottom:10px;padding:10px;position:relative}.llms-order-note .llms-order-note-content:after{border-style:solid;border-color:#efefef rgba(0,0,0,0);border-width:10px 10px 0 0;bottom:-10px;content:"";display:block;height:0;left:20px;position:absolute;width:0}.llms-order-note .llms-order-note-content p{font-size:13px;margin:0;line-height:1.5}.llms-order-note .llms-order-note-meta{color:#999;font-size:11px;margin-left:10px}.llms-mb-list label{font-size:15px;font-weight:700;line-height:1.5;display:block;width:100%}.llms-mb-list .description{margin-bottom:8px}.llms-mb-list .input-full{width:100%}#poststuff .llms-metabox h2,#poststuff .llms-metabox h3,#poststuff .llms-metabox h6{margin:0;padding:0}#poststuff .llms-metabox h2{font-size:18px;font-weight:700}#poststuff .llms-metabox h3{color:#777;font-size:16px}#poststuff .llms-metabox h4{border-bottom:1px solid #e5e5e5;padding:0;margin:0}#poststuff .llms-metabox .llms-transaction-test-mode{background:#ffffd7;font-style:italic;left:0;padding:2px;position:absolute;right:0;top:0;text-align:center}#poststuff .llms-metabox a.llms-editable,#poststuff .llms-metabox .llms-metabox-icon,#poststuff .llms-metabox button.llms-editable{color:#999;text-decoration:none}#poststuff .llms-metabox a.llms-editable:hover,#poststuff .llms-metabox .llms-metabox-icon:hover,#poststuff .llms-metabox button.llms-editable:hover{color:#466dd8}#poststuff .llms-metabox button.llms-editable{border:none;background:none;cursor:pointer;padding:0;vertical-align:top}#poststuff .llms-metabox h4 button.llms-editable{float:right}#poststuff .llms-metabox .llms-table{margin-top:10px}.llms-metabox-section{background:#fff;margin-top:25px;position:relative}.llms-metabox-section.no-top-margin{margin-top:0}.llms-metabox-section .llms-metabox-field{margin:15px 0;position:relative}.llms-metabox-section .llms-metabox-field label{color:#777;display:block;margin-bottom:5px;font-weight:500;vertical-align:baseline}.llms-metabox-section .llms-metabox-field select,.llms-metabox-section .llms-metabox-field textarea,.llms-metabox-section .llms-metabox-field input[type=text],.llms-metabox-section .llms-metabox-field input[type=number]{width:100%}.llms-metabox-section .llms-metabox-field input.md-text{width:105px}.llms-metabox-section .llms-metabox-field input.sm-text{width:45px}.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-date-input{width:95px}.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-time-input{width:45px}.llms-metabox-section .llms-metabox-field .llms-datetime-field em{font-style:normal;padding:0 3px}.llms-collapsible{border:1px solid #e5e5e5;position:relative;margin-top:0;margin-bottom:-1px}.llms-collapsible:last-child{margin-bottom:0}.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-down{display:none}.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-up{display:inline}.llms-collapsible .llms-collapsible-header{padding:10px}.llms-collapsible .llms-collapsible-header h3{color:#777;margin:0;font-size:16px}.llms-collapsible .llms-collapsible-header .dashicons-arrow-up{display:inline}.llms-collapsible .llms-collapsible-header .dashicons-arrow-up{display:none}.llms-collapsible .llms-collapsible-header a{text-decoration:none}.llms-collapsible .llms-collapsible-header .dashicons{color:#777;cursor:pointer;-webkit-transition:color .4s ease;transition:color .4s ease}.llms-collapsible .llms-collapsible-header .dashicons:hover{color:#466dd8}.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning,.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning:hover,.llms-collapsible .llms-collapsible-header .dashicons.dashicons-trash:hover,.llms-collapsible .llms-collapsible-header .dashicons.dashicons-no:hover{color:#bb231c}.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger,.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger:hover{color:#c05621}.llms-collapsible .llms-collapsible-body{display:none;padding:10px}._llms_instructors_data.repeater .llms-repeater-rows .llms-repeater-row:first-child .llms-repeater-remove{display:none}._llms_instructors_data.repeater .llms-mb-list{padding:0 5px !important}.post-type-llms_order #post-body-content{display:none}#lifterlms-order-details .handlediv,#lifterlms-order-details .handlediv.button-link,#lifterlms-order-details .postbox-header{display:none}#lifterlms-order-details .inside{padding:20px;margin-top:0}.llms-table tbody tr.llms-txn-failed td{background-color:rgba(187,35,28,.5);border-bottom-color:rgba(187,35,28,.5)}.llms-table tbody tr.llms-txn-refunded td{background-color:rgba(255,165,0,.5);border-bottom-color:rgba(255,165,0,.5)}.llms-txn-refund-form .llms-metabox-section,.llms-manual-txn-form .llms-metabox-section{margin-top:0}.llms-txn-refund-form .llms-metabox-field,.llms-manual-txn-form .llms-metabox-field{text-align:right}.llms-txn-refund-form .llms-metabox-field input[type=number],.llms-manual-txn-form .llms-metabox-field input[type=number]{max-width:100px}.llms-txn-refund-form .llms-metabox-field input[type=text],.llms-manual-txn-form .llms-metabox-field input[type=text]{max-width:340px}.llms-manual-txn-form{background-color:#eaeaea}.llms-manual-txn-form .llms-metabox-section{background-color:#eaeaea}#llms-remaining-edit{display:none}.llms-remaining-edit--content label,.llms-remaining-edit--content span,.llms-remaining-edit--content textarea{display:block}.llms-remaining-edit--content label{margin-bottom:20px}.llms-remaining-edit--content textarea,.llms-remaining-edit--content input{width:100%}.submitbox .llms-mb-section,.llms-award-engagement-submitbox .llms-mb-list{margin-bottom:12px}.submitbox .llms-mb-section:last-of-type,.llms-award-engagement-submitbox .llms-mb-list:last-of-type{margin-bottom:0}.sync-action:before,.submitbox .llms-mb-section.student-info:before,.submitbox .llms-mb-section.post_author_override label:before,.llms-award-engagement-submitbox .llms-mb-list.student-info:before,.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before{font:normal 20px/1 dashicons;speak:never;display:inline-block;margin-left:-1px;padding-right:3px;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:relative;top:-1px;color:#8c8f94}body:not(.admin-color-fresh) .sync-action:before,body:not(.admin-color-fresh) .submitbox .llms-mb-section.student-info:before,body:not(.admin-color-fresh) .submitbox .llms-mb-section.post_author_override label:before,body:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.student-info:before,body:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before{color:currentColor}.submitbox .llms-mb-section.student-info:before,.submitbox .llms-mb-section.post_author_override label:before,.llms-award-engagement-submitbox .llms-mb-list.student-info:before,.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before{content:""}.sync-action:before{content:"";color:#fff}.submitbox .llms-mb-section.post_author_override label,.llms-award-engagement-submitbox .llms-mb-list.post_author_override label{display:inline-block;width:auto}.llms-metabox #llms-new-access-plan-model{display:none}.llms-metabox .llms-access-plans{margin-top:10px}.llms-metabox .llms-access-plans>.llms-no-plans-msg{display:none}.llms-metabox .llms-access-plans>.llms-no-plans-msg:last-child{-webkit-box-shadow:inset 0 0 0 1px #e5e5e5;box-shadow:inset 0 0 0 1px #e5e5e5;display:block;text-align:center;padding:10px}.llms-metabox .llms-access-plans.dragging{background:#efefef;-webkit-box-shadow:inset 0 0 0 1px #e5e5e5;box-shadow:inset 0 0 0 1px #e5e5e5}.llms-metabox .llms-access-plans .llms-spinning{z-index:1}.llms-metabox .llms-access-plans .llms-invalid{border-color:#bb231c}.llms-metabox .llms-access-plans .llms-invalid .dashicons-warning{display:inline}.llms-metabox .llms-access-plans .llms-needs-attention .dashicons-warning.medium-danger{display:inline}.llms-metabox .llms-access-plans .dashicons-warning{display:none}.llms-metabox .llms-access-plan{text-align:left}.llms-metabox .llms-access-plan [data-tip]:before{text-align:center}.llms-metabox .llms-access-plan .llms-plan-link,.llms-metabox .llms-access-plan [data-controller]{display:none}.llms-metabox .llms-access-plan:hover .llms-plan-link,.llms-metabox .llms-access-plan.opened .llms-plan-link{display:inline-block}.llms-metabox .llms-access-plan .llms-metabox-field{margin:5px 0}.llms-metabox .llms-access-plan .llms-required{color:#bb231c;margin-left:3px}.llms-metabox .llms-access-plan .notice{margin-left:0}.llms-metabox-students .llms-table tr .name{text-align:left}.llms-metabox-students .llms-add-student:hover{color:#4d8d3c}.llms-metabox-students .llms-remove-student:hover{color:#bb231c}.llms-mb-container .tab-content ul:not(.select2-selection__rendered).llms-mb-repeater-fields>li.llms-mb-list{border-bottom:none;padding:0 0 10px}.llms-mb-list.repeater .llms-repeater-rows{position:relative;margin-top:10px;min-height:10px}.llms-mb-list.repeater .llms-repeater-rows.dragging{background:#efefef;-webkit-box-shadow:inset 0 0 0 1px #e5e5e5;box-shadow:inset 0 0 0 1px #e5e5e5}.llms-mb-list.repeater .llms-repeater-row{background:#fff}.llms-mb-list.repeater .llms-mb-repeater-footer{text-align:right;margin-top:20px}.llms-mb-list.repeater .tmce-active .wp-editor-area{color:#32373c}.llms-builder-launcher p{margin-top:0}.llms-builder-launcher ol{margin-top:-6px}.llms-builder-launcher .llms-button-primary{-webkit-box-sizing:border-box;box-sizing:border-box}.wp-list-table .llms-status{border-radius:6px;display:inline-block;font-size:13px;font-weight:700;line-height:1.4;padding:2px 6px;vertical-align:middle}.wp-list-table .llms-status.llms-size--large{font-size:105%;padding:6px 12px}.wp-list-table .llms-status.llms-active,.wp-list-table .llms-status.llms-completed,.wp-list-table .llms-status.llms-pass,.wp-list-table .llms-status.llms-txn-succeeded{color:#4d8d3c;background-color:rgba(77,141,60,.15)}.wp-list-table .llms-status.llms-fail,.wp-list-table .llms-status.llms-failed,.wp-list-table .llms-status.llms-expired,.wp-list-table .llms-status.llms-cancelled,.wp-list-table .llms-status.llms-txn-failed{color:#bb231c;background-color:rgba(187,35,28,.15)}.wp-list-table .llms-status.llms-incomplete,.wp-list-table .llms-status.llms-on-hold,.wp-list-table .llms-status.llms-pending,.wp-list-table .llms-status.llms-pending-cancel,.wp-list-table .llms-status.llms-refunded,.wp-list-table .llms-status.llms-txn-pending,.wp-list-table .llms-status.llms-txn-refunded{color:#c05621;background-color:rgba(192,86,33,.15)}#lifterlms-order-transactions .llms-table tfoot th{text-align:right}.llms-post-table-post-filter{display:inline-block;margin-right:6px;max-width:100%;width:220px}.llms-nav-tab-wrapper{background:#466dd8;margin:20px 0}.llms-nav-tab-wrapper.llms-nav-secondary{background:#e1e1e1}.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item{margin:0}.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link{background:#cdcdcd}.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link{color:#414141;font-size:15px;padding:8px 14px}.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link .dashicons{font-size:15px;height:15px;width:15px}.llms-nav-tab-wrapper.llms-nav-text{background:inherit}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-items{padding-left:0}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item{background:inherit;color:#646970}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:last-child:after{display:none}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:after{content:"|";display:inline-block;margin:0 8px 0 6px}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link:hover{background:inherit;color:#466dd8}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item.llms-active .llms-nav-link{background:inherit;color:#000;font-weight:600;text-decoration:none}.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link{color:#466dd8;display:inline-block;letter-spacing:0;margin:0;padding:0;text-decoration:underline;text-transform:none}.llms-nav-tab-wrapper.llms-nav-style-tabs{background-color:#1c3987;margin:0;padding-top:8px}.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item{margin:0 3px}.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item .llms-nav-link{border-top-left-radius:4px;border-top-right-radius:4px}.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item.llms-active .llms-nav-link{background-color:#fff;color:#466dd8;font-weight:700}.llms-nav-tab-wrapper.llms-nav-style-filters{background-color:#466dd8;border-radius:12px;margin:20px 0;overflow:hidden;padding:0}.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-left:0}@media only screen and (min-width: 782px){.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item{float:none}.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item .llms-nav-link{padding:14px}.llms-nav-tab-wrapper .llms-nav-items{margin:0;padding-left:10px}.llms-nav-tab-wrapper .llms-nav-items:before,.llms-nav-tab-wrapper .llms-nav-items:after{content:" ";display:table}.llms-nav-tab-wrapper .llms-nav-items:after{clear:both}.llms-nav-tab-wrapper .llms-nav-item{margin:0}.llms-nav-tab-wrapper .llms-nav-item .llms-nav-link:hover{background:#466dd8}.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link{background:#1c3987}.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link{font-weight:400}@media only screen and (min-width: 768px){.llms-nav-tab-wrapper .llms-nav-item{float:left}.llms-nav-tab-wrapper .llms-nav-item.llms-nav-item-right{float:right}}.llms-nav-tab-wrapper .llms-nav-link{color:#fff;cursor:pointer;display:block;font-weight:400;font-size:15px;padding:9px 18px;text-align:center;text-decoration:none;-webkit-transition:all .3s ease;transition:all .3s ease}#llms-options-page-contents h2{color:#999;font-weight:500;letter-spacing:2px;border-bottom:1px solid #999}.llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15);margin:0;padding:0}.llms-reporting.wrap .llms-stab-title{color:#1c3987;font-size:36px;font-weight:300;margin-bottom:20px}.llms-reporting.wrap td.id a{text-decoration:none}.llms-reporting.wrap th.id,.llms-reporting.wrap td.id,.llms-reporting.wrap th.name,.llms-reporting.wrap td.name,.llms-reporting.wrap th.registered,.llms-reporting.wrap td.registered,.llms-reporting.wrap th.last_seen,.llms-reporting.wrap td.last_seen,.llms-reporting.wrap th.overall_progress,.llms-reporting.wrap td.overall_progress,.llms-reporting.wrap th.title,.llms-reporting.wrap td.title,.llms-reporting.wrap th.course,.llms-reporting.wrap td.course,.llms-reporting.wrap th.lesson,.llms-reporting.wrap td.lesson{text-align:left}.llms-reporting.wrap td.section-title{background:#eaeaea;text-align:left;font-weight:700;padding:16px 4px}.llms-reporting.wrap td.questions-table{text-align:left}.llms-reporting.wrap td.questions-table .correct,.llms-reporting.wrap td.questions-table .question,.llms-reporting.wrap td.questions-table .selected{text-align:left;max-width:300px}.llms-reporting.wrap td.questions-table .correct img,.llms-reporting.wrap td.questions-table .question img,.llms-reporting.wrap td.questions-table .selected img{height:auto;max-width:64px}.llms-reporting.wrap table.quiz-attempts{margin-bottom:40px}.llms-reporting.wrap.tab--students .llms-options-page-contents #llms-award-certificate-wrapper .components-button.is-secondary{background:#e1e1e1;border-radius:8px;-webkit-box-shadow:none;box-shadow:none;color:#414141;font-size:13px;font-weight:700;height:auto;padding:8px 14px}.llms-reporting.wrap.tab--enrollments .llms-nav-tab-wrapper.llms-nav-secondary,.llms-reporting.wrap.tab--sales .llms-nav-tab-wrapper.llms-nav-secondary{margin-bottom:0}.llms-reporting.wrap.tab--enrollments .llms-options-page-contents,.llms-reporting.wrap.tab--sales .llms-options-page-contents{-webkit-box-shadow:none;box-shadow:none;background:none;margin-top:20px;padding:0}.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form,.llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:center;align-self:center;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:13px;gap:5px}.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form label,.llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form label{font-weight:700}.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form input,.llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form input{border:0;font-size:13px;margin:0;padding:0 4px;vertical-align:middle;width:110px}.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form .select2-container input,.llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form .select2-container input{width:100% !important}.llms-reporting.wrap.tab--enrollments .button.small,.llms-reporting.wrap.tab--sales .button.small{height:23px;line-height:23px}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters,.llms-reporting.wrap.tab--sales .llms-analytics-filters{display:none}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-inside-wrap,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-inside-wrap{background-color:#fff;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);margin:-20px 10px 20px 10px;padding:20px}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:20px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:0}@media only screen and (min-width: 782px){.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item label,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item label{display:block;font-weight:700;margin:0 0 5px 0}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item .select2-selection__rendered,.llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item .select2-selection__rendered{word-wrap:break-word;text-overflow:inherit;white-space:normal}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p,.llms-reporting.wrap.tab--sales .llms-analytics-filters p{margin:0;text-align:right}.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p .llms-button-primary,.llms-reporting.wrap.tab--sales .llms-analytics-filters p .llms-button-primary{display:inline-block}.llms-reporting.wrap .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap{width:160px}.llms-charts-wrapper{background-color:#fff;border:1px solid #dedede;border-radius:12px;-webkit-box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);box-shadow:0px 0px 1px rgba(48,49,51,.05),0px 2px 4px rgba(48,49,51,.1);padding:20px}.llms-reporting-tab h1,.llms-reporting-tab h2,.llms-reporting-tab h3,.llms-reporting-tab h4,.llms-reporting-tab h5,.llms-reporting-tab h6{margin:0}.llms-reporting-tab h1 a,.llms-reporting-tab h2 a,.llms-reporting-tab h3 a,.llms-reporting-tab h4 a,.llms-reporting-tab h5 a,.llms-reporting-tab h6 a{color:#466dd8;text-decoration:none}.llms-reporting-tab h1 a:hover,.llms-reporting-tab h2 a:hover,.llms-reporting-tab h3 a:hover,.llms-reporting-tab h4 a:hover,.llms-reporting-tab h5 a:hover,.llms-reporting-tab h6 a:hover{color:#466dd8}.llms-reporting-tab h2{font-size:22px;line-height:1.5}.llms-reporting-tab h2.llms-table-title{margin-bottom:20px}.llms-reporting-tab h5{font-size:15px;line-height:1.5}.llms-reporting-tab .llms-reporting-body{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);margin:20px auto;padding:0}.llms-reporting-tab .llms-reporting-body .llms-reporting-stab{padding:30px}.llms-reporting-tab .llms-reporting-body .llms-reporting-stab .llms-table-header{margin:0}.llms-reporting-tab .llms-reporting-body .llms-gb-tab{padding:30px}.llms-reporting-tab .llms-reporting-body .llms-reporting-header{padding:30px;margin:0}.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img{border-radius:50%;display:inline-block;margin-right:10px;overflow:hidden;vertical-align:middle}.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img img{display:block;max-height:64px;width:auto}.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-info{display:inline-block;vertical-align:middle}.llms-reporting-breadcrumbs{margin:0;padding:0}.llms-reporting-breadcrumbs a{color:#466dd8;font-size:15px;text-decoration:none}.llms-reporting-breadcrumbs a:hover{color:#2b55cb}.llms-reporting-breadcrumbs a:after{content:" > ";color:#646970}.llms-reporting-breadcrumbs a:last-child{color:#000;font-weight:700}.llms-reporting-breadcrumbs a:last-child:after{display:none}#llms-students-table .name{text-align:left}.llms-reporting-tab-content{display:-webkit-box;display:-ms-flexbox;display:flex}.llms-reporting-tab-content>header:before,.llms-reporting-tab-content>header:after{content:" ";display:table}.llms-reporting-tab-content>header:after{clear:both}.llms-reporting-tab-content h3{margin-bottom:20px}.llms-reporting-tab-content .llms-reporting-tab-filter{float:right;position:relative;margin-right:.75em;width:180px;top:-3px}.llms-reporting-tab-content .llms-reporting-tab-main{-webkit-box-flex:3;-ms-flex:3;flex:3;max-width:75%}.llms-reporting-tab-content .llms-reporting-tab-side{-webkit-box-flex:1;-ms-flex:1;flex:1;margin-left:20px}.llms-reporting-tab-content>.llms-table-wrap{-webkit-box-flex:1;-ms-flex:1;flex:1}.llms-reporting-widgets:before,.llms-reporting-widgets:after{content:" ";display:table}.llms-reporting-widgets:after{clear:both}.llms-reporting-widget{border-top:4px solid #466dd8;background:#fafafa;margin-bottom:10px;padding:30px}.llms-reporting-widget:before,.llms-reporting-widget:after{content:" ";display:table}.llms-reporting-widget:after{clear:both}.llms-reporting-widget .fa{color:#999;float:left;font-size:32px;margin-right:10px}.llms-reporting-widget strong{color:#333;font-size:20px;line-height:1.2}.llms-reporting-widget.llms-reporting-student-address strong{line-height:1.1}.llms-reporting-widget sup,.llms-reporting-widget .llms-price-currency-symbol{font-size:75%;position:relative;top:-4px;vertical-align:baseline}.llms-reporting-widget small{font-size:13px}.llms-reporting-widget small.compare{margin-left:5px}.llms-reporting-widget small.compare.positive{color:#4d8d3c}.llms-reporting-widget small.compare.negative{color:#bb231c}.llms-reporting-event{border-left:4px solid #555;background:#fafafa;font-size:11px;line-height:1.2;margin-bottom:.75em;padding:10px}.llms-reporting-event:before,.llms-reporting-event:after{content:" ";display:table}.llms-reporting-event:after{clear:both}.llms-reporting-event.color--blue{border-left-color:#466dd8}.llms-reporting-event.color--green,.llms-reporting-event._enrollment_trigger,.llms-reporting-event._is_complete.yes{border-left-color:#4d8d3c}.llms-reporting-event.color--purple,.llms-reporting-event._status.enrolled{border-left-color:#845ef7}.llms-reporting-event.color--red,.llms-reporting-event._status.expired,.llms-reporting-event._status.cancelled{border-left-color:#bb231c}.llms-reporting-event.color--orange,.llms-reporting-event._achievement_earned,.llms-reporting-event._certificate_earned,.llms-reporting-event._email_sent{border-left-color:#c05621}.llms-reporting-event time{color:#888}.llms-reporting-event .llms-student-avatar{margin-left:10px;float:right}.llms-reporting-event a{text-decoration:none;color:inherit}@media only screen and (min-width: 782px){.llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary{margin-left:0;margin-right:0}}.llms-quiz-attempt-results{margin:0;padding:0;list-style-type:none}.llms-quiz-attempt-results .llms-quiz-attempt-question{background:#efefef;border-radius:6px;margin:0 0 15px;position:relative;list-style-type:none}.llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer{color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:15px 35px 15px 15px;text-decoration:none}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct,.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect{background:rgba(192,86,33,.2)}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon,.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon{background-color:#c05621}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct{background:rgba(77,141,60,.15)}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon{background-color:#4d8d3c}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect{background:rgba(187,35,28,.15)}.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon{background-color:#bb231c}.llms-quiz-attempt-results .llms-quiz-attempt-question pre{overflow:auto}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title{font-size:22px;margin:0;line-height:1.4}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points{line-height:1.4}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip{position:absolute;right:-12px;top:-2px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon{color:rgba(255,255,255,.65);border-radius:50%;font-size:30px;height:40px;line-height:40px;text-align:center;width:40px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main{display:none;padding:0 15px 15px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label{font-weight:700;margin:0 0 10px;padding:0}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers{margin:0;padding:0}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer{padding:0;margin:0 0 0 30px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child{list-style-type:none;margin-left:0}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img{height:auto;max-width:200px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section{border-top:2px solid rgba(255,255,255,.5);margin-top:20px;padding-top:20px}.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child{border-top:none;margin-top:0;padding-top:0}.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers,.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers{list-style-type:none;margin:0;padding:0}.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer,.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer{display:inline-block;list-style-type:none;margin:0;padding:5px}.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed{opacity:.5}.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title{font-style:italic;font-weight:normal}.wrap.llms-reporting .llms-inside-wrap,.wrap.lifterlms-settings .llms-inside-wrap,.wrap.llms-status .llms-inside-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 auto}.wrap.llms-reporting .llms-inside-wrap .llms-nav-text,.wrap.lifterlms-settings .llms-inside-wrap .llms-nav-text,.wrap.llms-status .llms-inside-wrap .llms-nav-text{margin:0 auto}.wrap.llms-reporting .llms-subheader .llms-save,.wrap.lifterlms-settings .llms-subheader .llms-save,.wrap.llms-status .llms-subheader .llms-save{-webkit-box-flex:1;-ms-flex:auto;flex:auto;text-align:right}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.15);box-shadow:0 1px 3px rgba(0,0,0,.15);margin:0 -20px 20px -10px}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items{padding-left:0}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover{background:#f0f0f1;color:#222}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link{background:#fafafa;color:#466dd8;border-top-color:#466dd8}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link{font-weight:700}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link{border-top:2px solid rgba(0,0,0,0);padding:14px}.wrap.llms-reporting .llms-setting-group,.wrap.lifterlms-settings .llms-setting-group,.wrap.llms-status .llms-setting-group{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);margin:20px auto;padding:20px}.wrap.llms-reporting .llms-setting-group .llms-label,.wrap.lifterlms-settings .llms-setting-group .llms-label,.wrap.llms-status .llms-setting-group .llms-label{border-bottom:1px solid #efefef;font-weight:700;font-size:20px;padding:20px;margin:-20px -20px 20px}.wrap.llms-reporting .llms-setting-group .llms-label .llms-button-primary,.wrap.lifterlms-settings .llms-setting-group .llms-label .llms-button-primary,.wrap.llms-status .llms-setting-group .llms-label .llms-button-primary{margin-left:10px}.wrap.llms-reporting .llms-setting-group .llms-help-tooltip .dashicons,.wrap.lifterlms-settings .llms-setting-group .llms-help-tooltip .dashicons,.wrap.llms-status .llms-setting-group .llms-help-tooltip .dashicons{color:#444;cursor:help}.wrap.llms-reporting .llms-setting-group .form-table,.wrap.lifterlms-settings .llms-setting-group .form-table,.wrap.llms-status .llms-setting-group .form-table{margin:0}.wrap.llms-reporting .llms-setting-group .form-table tr:first-child .llms-subtitle,.wrap.lifterlms-settings .llms-setting-group .form-table tr:first-child .llms-subtitle,.wrap.llms-status .llms-setting-group .form-table tr:first-child .llms-subtitle{margin-top:0}.wrap.llms-reporting .llms-setting-group td[colspan="2"],.wrap.lifterlms-settings .llms-setting-group td[colspan="2"],.wrap.llms-status .llms-setting-group td[colspan="2"]{padding-top:0;padding-left:0}.wrap.llms-reporting .llms-setting-group tr.llms-disabled-field,.wrap.lifterlms-settings .llms-setting-group tr.llms-disabled-field,.wrap.llms-status .llms-setting-group tr.llms-disabled-field{opacity:.5;pointer-events:none}.wrap.llms-reporting .llms-setting-group p,.wrap.lifterlms-settings .llms-setting-group p,.wrap.llms-status .llms-setting-group p{font-size:14px}.wrap.llms-reporting .llms-setting-group input[type=text],.wrap.llms-reporting .llms-setting-group input[type=password],.wrap.llms-reporting .llms-setting-group input[type=datetime],.wrap.llms-reporting .llms-setting-group input[type=datetime-local],.wrap.llms-reporting .llms-setting-group input[type=date],.wrap.llms-reporting .llms-setting-group input[type=month],.wrap.llms-reporting .llms-setting-group input[type=time],.wrap.llms-reporting .llms-setting-group input[type=week],.wrap.llms-reporting .llms-setting-group input[type=number],.wrap.llms-reporting .llms-setting-group input[type=email],.wrap.llms-reporting .llms-setting-group input[type=url],.wrap.llms-reporting .llms-setting-group input[type=search],.wrap.llms-reporting .llms-setting-group input[type=tel],.wrap.llms-reporting .llms-setting-group input[type=color],.wrap.llms-reporting .llms-setting-group select,.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area),.wrap.lifterlms-settings .llms-setting-group input[type=text],.wrap.lifterlms-settings .llms-setting-group input[type=password],.wrap.lifterlms-settings .llms-setting-group input[type=datetime],.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local],.wrap.lifterlms-settings .llms-setting-group input[type=date],.wrap.lifterlms-settings .llms-setting-group input[type=month],.wrap.lifterlms-settings .llms-setting-group input[type=time],.wrap.lifterlms-settings .llms-setting-group input[type=week],.wrap.lifterlms-settings .llms-setting-group input[type=number],.wrap.lifterlms-settings .llms-setting-group input[type=email],.wrap.lifterlms-settings .llms-setting-group input[type=url],.wrap.lifterlms-settings .llms-setting-group input[type=search],.wrap.lifterlms-settings .llms-setting-group input[type=tel],.wrap.lifterlms-settings .llms-setting-group input[type=color],.wrap.lifterlms-settings .llms-setting-group select,.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area),.wrap.llms-status .llms-setting-group input[type=text],.wrap.llms-status .llms-setting-group input[type=password],.wrap.llms-status .llms-setting-group input[type=datetime],.wrap.llms-status .llms-setting-group input[type=datetime-local],.wrap.llms-status .llms-setting-group input[type=date],.wrap.llms-status .llms-setting-group input[type=month],.wrap.llms-status .llms-setting-group input[type=time],.wrap.llms-status .llms-setting-group input[type=week],.wrap.llms-status .llms-setting-group input[type=number],.wrap.llms-status .llms-setting-group input[type=email],.wrap.llms-status .llms-setting-group input[type=url],.wrap.llms-status .llms-setting-group input[type=search],.wrap.llms-status .llms-setting-group input[type=tel],.wrap.llms-status .llms-setting-group input[type=color],.wrap.llms-status .llms-setting-group select,.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area){width:50%}.wrap.llms-reporting .llms-setting-group input[type=text].medium,.wrap.llms-reporting .llms-setting-group input[type=password].medium,.wrap.llms-reporting .llms-setting-group input[type=datetime].medium,.wrap.llms-reporting .llms-setting-group input[type=datetime-local].medium,.wrap.llms-reporting .llms-setting-group input[type=date].medium,.wrap.llms-reporting .llms-setting-group input[type=month].medium,.wrap.llms-reporting .llms-setting-group input[type=time].medium,.wrap.llms-reporting .llms-setting-group input[type=week].medium,.wrap.llms-reporting .llms-setting-group input[type=number].medium,.wrap.llms-reporting .llms-setting-group input[type=email].medium,.wrap.llms-reporting .llms-setting-group input[type=url].medium,.wrap.llms-reporting .llms-setting-group input[type=search].medium,.wrap.llms-reporting .llms-setting-group input[type=tel].medium,.wrap.llms-reporting .llms-setting-group input[type=color].medium,.wrap.llms-reporting .llms-setting-group select.medium,.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).medium,.wrap.lifterlms-settings .llms-setting-group input[type=text].medium,.wrap.lifterlms-settings .llms-setting-group input[type=password].medium,.wrap.lifterlms-settings .llms-setting-group input[type=datetime].medium,.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].medium,.wrap.lifterlms-settings .llms-setting-group input[type=date].medium,.wrap.lifterlms-settings .llms-setting-group input[type=month].medium,.wrap.lifterlms-settings .llms-setting-group input[type=time].medium,.wrap.lifterlms-settings .llms-setting-group input[type=week].medium,.wrap.lifterlms-settings .llms-setting-group input[type=number].medium,.wrap.lifterlms-settings .llms-setting-group input[type=email].medium,.wrap.lifterlms-settings .llms-setting-group input[type=url].medium,.wrap.lifterlms-settings .llms-setting-group input[type=search].medium,.wrap.lifterlms-settings .llms-setting-group input[type=tel].medium,.wrap.lifterlms-settings .llms-setting-group input[type=color].medium,.wrap.lifterlms-settings .llms-setting-group select.medium,.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).medium,.wrap.llms-status .llms-setting-group input[type=text].medium,.wrap.llms-status .llms-setting-group input[type=password].medium,.wrap.llms-status .llms-setting-group input[type=datetime].medium,.wrap.llms-status .llms-setting-group input[type=datetime-local].medium,.wrap.llms-status .llms-setting-group input[type=date].medium,.wrap.llms-status .llms-setting-group input[type=month].medium,.wrap.llms-status .llms-setting-group input[type=time].medium,.wrap.llms-status .llms-setting-group input[type=week].medium,.wrap.llms-status .llms-setting-group input[type=number].medium,.wrap.llms-status .llms-setting-group input[type=email].medium,.wrap.llms-status .llms-setting-group input[type=url].medium,.wrap.llms-status .llms-setting-group input[type=search].medium,.wrap.llms-status .llms-setting-group input[type=tel].medium,.wrap.llms-status .llms-setting-group input[type=color].medium,.wrap.llms-status .llms-setting-group select.medium,.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).medium{width:30%}.wrap.llms-reporting .llms-setting-group input[type=text].small,.wrap.llms-reporting .llms-setting-group input[type=password].small,.wrap.llms-reporting .llms-setting-group input[type=datetime].small,.wrap.llms-reporting .llms-setting-group input[type=datetime-local].small,.wrap.llms-reporting .llms-setting-group input[type=date].small,.wrap.llms-reporting .llms-setting-group input[type=month].small,.wrap.llms-reporting .llms-setting-group input[type=time].small,.wrap.llms-reporting .llms-setting-group input[type=week].small,.wrap.llms-reporting .llms-setting-group input[type=number].small,.wrap.llms-reporting .llms-setting-group input[type=email].small,.wrap.llms-reporting .llms-setting-group input[type=url].small,.wrap.llms-reporting .llms-setting-group input[type=search].small,.wrap.llms-reporting .llms-setting-group input[type=tel].small,.wrap.llms-reporting .llms-setting-group input[type=color].small,.wrap.llms-reporting .llms-setting-group select.small,.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).small,.wrap.lifterlms-settings .llms-setting-group input[type=text].small,.wrap.lifterlms-settings .llms-setting-group input[type=password].small,.wrap.lifterlms-settings .llms-setting-group input[type=datetime].small,.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].small,.wrap.lifterlms-settings .llms-setting-group input[type=date].small,.wrap.lifterlms-settings .llms-setting-group input[type=month].small,.wrap.lifterlms-settings .llms-setting-group input[type=time].small,.wrap.lifterlms-settings .llms-setting-group input[type=week].small,.wrap.lifterlms-settings .llms-setting-group input[type=number].small,.wrap.lifterlms-settings .llms-setting-group input[type=email].small,.wrap.lifterlms-settings .llms-setting-group input[type=url].small,.wrap.lifterlms-settings .llms-setting-group input[type=search].small,.wrap.lifterlms-settings .llms-setting-group input[type=tel].small,.wrap.lifterlms-settings .llms-setting-group input[type=color].small,.wrap.lifterlms-settings .llms-setting-group select.small,.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).small,.wrap.llms-status .llms-setting-group input[type=text].small,.wrap.llms-status .llms-setting-group input[type=password].small,.wrap.llms-status .llms-setting-group input[type=datetime].small,.wrap.llms-status .llms-setting-group input[type=datetime-local].small,.wrap.llms-status .llms-setting-group input[type=date].small,.wrap.llms-status .llms-setting-group input[type=month].small,.wrap.llms-status .llms-setting-group input[type=time].small,.wrap.llms-status .llms-setting-group input[type=week].small,.wrap.llms-status .llms-setting-group input[type=number].small,.wrap.llms-status .llms-setting-group input[type=email].small,.wrap.llms-status .llms-setting-group input[type=url].small,.wrap.llms-status .llms-setting-group input[type=search].small,.wrap.llms-status .llms-setting-group input[type=tel].small,.wrap.llms-status .llms-setting-group input[type=color].small,.wrap.llms-status .llms-setting-group select.small,.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).small{width:20%}.wrap.llms-reporting .llms-setting-group input[type=text].tiny,.wrap.llms-reporting .llms-setting-group input[type=password].tiny,.wrap.llms-reporting .llms-setting-group input[type=datetime].tiny,.wrap.llms-reporting .llms-setting-group input[type=datetime-local].tiny,.wrap.llms-reporting .llms-setting-group input[type=date].tiny,.wrap.llms-reporting .llms-setting-group input[type=month].tiny,.wrap.llms-reporting .llms-setting-group input[type=time].tiny,.wrap.llms-reporting .llms-setting-group input[type=week].tiny,.wrap.llms-reporting .llms-setting-group input[type=number].tiny,.wrap.llms-reporting .llms-setting-group input[type=email].tiny,.wrap.llms-reporting .llms-setting-group input[type=url].tiny,.wrap.llms-reporting .llms-setting-group input[type=search].tiny,.wrap.llms-reporting .llms-setting-group input[type=tel].tiny,.wrap.llms-reporting .llms-setting-group input[type=color].tiny,.wrap.llms-reporting .llms-setting-group select.tiny,.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).tiny,.wrap.lifterlms-settings .llms-setting-group input[type=text].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=password].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=datetime].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=date].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=month].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=time].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=week].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=number].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=email].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=url].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=search].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=tel].tiny,.wrap.lifterlms-settings .llms-setting-group input[type=color].tiny,.wrap.lifterlms-settings .llms-setting-group select.tiny,.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).tiny,.wrap.llms-status .llms-setting-group input[type=text].tiny,.wrap.llms-status .llms-setting-group input[type=password].tiny,.wrap.llms-status .llms-setting-group input[type=datetime].tiny,.wrap.llms-status .llms-setting-group input[type=datetime-local].tiny,.wrap.llms-status .llms-setting-group input[type=date].tiny,.wrap.llms-status .llms-setting-group input[type=month].tiny,.wrap.llms-status .llms-setting-group input[type=time].tiny,.wrap.llms-status .llms-setting-group input[type=week].tiny,.wrap.llms-status .llms-setting-group input[type=number].tiny,.wrap.llms-status .llms-setting-group input[type=email].tiny,.wrap.llms-status .llms-setting-group input[type=url].tiny,.wrap.llms-status .llms-setting-group input[type=search].tiny,.wrap.llms-status .llms-setting-group input[type=tel].tiny,.wrap.llms-status .llms-setting-group input[type=color].tiny,.wrap.llms-status .llms-setting-group select.tiny,.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).tiny{width:10%}@media only screen and (min-width: 782px){.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link{background:#fff}}.wrap.llms-reporting #llms-mailhawk-connect,.wrap.lifterlms-settings #llms-mailhawk-connect,.wrap.llms-status #llms-mailhawk-connect{height:auto;margin:0 0 6px;position:relative}.wrap.llms-reporting #llms-mailhawk-connect .dashicons,.wrap.lifterlms-settings #llms-mailhawk-connect .dashicons,.wrap.llms-status #llms-mailhawk-connect .dashicons{margin:-4px 4px 0 0;vertical-align:middle}.wrap.llms-reporting #llms-sendwp-connect,.wrap.lifterlms-settings #llms-sendwp-connect,.wrap.llms-status #llms-sendwp-connect{height:auto;margin:0 0 6px;position:relative}.wrap.llms-reporting #llms-sendwp-connect .fa,.wrap.lifterlms-settings #llms-sendwp-connect .fa,.wrap.llms-status #llms-sendwp-connect .fa{margin-right:4px}@media only screen and (min-width: 782px){.wrap.lifterlms-settings .llms-subheader{height:40px;position:sticky;top:32px}.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary{margin:0 -20px 20px -22px}.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items{padding-left:10px}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary{margin:0 -20px 20px -22px}.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items{padding-left:10px}.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary{margin:0 -20px 20px -22px}.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items{padding-left:10px}}.wrap.llms-dashboard .llms-inside-wrap{padding-top:30px}.wrap.llms-dashboard #poststuff h2{padding:12px 20px}.wrap.llms-dashboard .llms-dashboard-activity h2{font-size:20px;font-weight:700;line-height:1.5;margin-top:0;text-align:center}.wrap.llms-dashboard .postbox{background-color:#fff;border:none;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.wrap.llms-dashboard .postbox .postbox-header{border-bottom-color:#efefef}.wrap.llms-dashboard .postbox .inside{padding:20px}.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap{margin-top:0}.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item{margin-top:0}.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item p{text-align:left}.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item footer.llms-actions{padding-top:0}.wrap.llms-dashboard #llms_dashboard_addons p{text-align:center}.wrap.llms-dashboard #llms_dashboard_addons p .llms-button-primary{display:inline-block;margin-top:15px}.wrap.llms-dashboard #llms_dashboard_quick_links ul{list-style:disc;margin:5px 0 0 20px}.wrap.llms-dashboard #llms_dashboard_quick_links ul li{font-size:15px;line-height:1.5}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links{display:grid;grid-template-columns:1fr;grid-gap:30px}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links a{display:inline-block}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list h3{margin:0 0 10px 0}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul{margin-bottom:20px}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul.llms-checklist{list-style:none;margin-left:0}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa{text-align:center;width:16px}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-check{color:#008a20}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-times{color:#d63638}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-primary,.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-secondary,.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-action{display:block;text-align:center}@media only screen and (min-width: 782px){.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links{grid-template-columns:1fr 1fr 1fr}}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links{display:grid;grid-template-columns:1fr 1fr;grid-gap:20px}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3{margin:0}.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 .dashicons{color:#aaa}@media only screen and (min-width: 782px){.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links{grid-template-columns:1fr 1fr 1fr 1fr}}.wrap.llms-dashboard #llms_dashboard_blog ul,.wrap.llms-dashboard #llms_dashboard_podcast ul{margin:0}.wrap.llms-dashboard #llms_dashboard_blog ul li,.wrap.llms-dashboard #llms_dashboard_podcast ul li{margin:0 0 15px 0}.wrap.llms-dashboard #llms_dashboard_blog ul li a,.wrap.llms-dashboard #llms_dashboard_podcast ul li a{display:block}.wrap.llms-dashboard #llms_dashboard_blog p,.wrap.llms-dashboard #llms_dashboard_podcast p{margin:15px 0;text-align:center}.wrap.llms-dashboard #llms_dashboard_blog p a,.wrap.llms-dashboard #llms_dashboard_podcast p a{display:inline-block}#llms_dashboard_widget .inside{margin:0;padding-bottom:8px}#llms_dashboard_widget .llms-dashboard-widget-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-top:12px}#llms_dashboard_widget .activity-block{padding-bottom:8px;border-color:#e8e8e8}#llms_dashboard_widget h3{margin-bottom:0}#llms_dashboard_widget .llms-charts-wrapper{display:none}#llms_dashboard_widget .llms-widget-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;gap:8px;width:100%;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:4px 0}#llms_dashboard_widget .llms-widget-row:before,#llms_dashboard_widget .llms-widget-row:after{display:none}#llms_dashboard_widget .llms-widget-1-4{padding:0;-webkit-box-flex:1;-ms-flex:1;flex:1}#llms_dashboard_widget .llms-widget{padding:8px 8px 12px;margin:0;border-radius:6px;border:1px solid #e8e8e8;-webkit-box-shadow:0px 2px 4px #f6f7f7;box-shadow:0px 2px 4px #f6f7f7;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}#llms_dashboard_widget .llms-label{font-size:14px;width:100%;-ms-flex-item-align:start;align-self:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#llms_dashboard_widget .llms-widget-content{font-size:20px;margin:0}#llms_dashboard_widget .llms-widget-info-toggle{display:none}#llms_dashboard_widget a{border:0}#llms_dashboard_widget .subsubsub{color:#dcdcde}.llms-dashboard-widget-feed{margin:0 -12px;padding:0;background-color:#f6f7f7}.llms-dashboard-widget-feed li{margin:0;padding:8px 12px;border-bottom:1px solid #e8e8e8}.llms-dashboard-widget-feed span{display:block}.wrap.llms-resources .llms-inside-wrap{padding-top:30px}.wrap.llms-resources #poststuff #post-body.columns-2{margin-right:350px}.wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables{width:330px}@media only screen and (max-width: 850px){.wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables{width:auto}}.wrap.llms-resources #poststuff #postbox-container-1{float:right;margin-right:-350px;width:330px}.wrap.llms-resources #poststuff h2{padding:12px 20px}.wrap.llms-resources #poststuff .postbox{background-color:#fff;border:none;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.wrap.llms-resources #poststuff .postbox .postbox-header{border-bottom-color:#efefef}.wrap.llms-resources #poststuff .postbox .inside{margin:0;padding:20px}.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video p{font-size:15px;line-height:1.5;margin:0 0 40px 0}.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container{height:0;overflow:hidden;padding-top:30px;padding-bottom:56.25%;position:relative}.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container iframe,.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container object,.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container embed{left:0;height:100%;position:absolute;top:0;width:100%}.wrap.llms-resources #llms_dashboard_getting_started ul{margin:0 0 20px 0}.wrap.llms-resources #llms_dashboard_getting_started ul li{font-size:15px;line-height:1.5;margin-bottom:15px}.wrap.llms-resources #llms_dashboard_getting_started .llms-button-primary{display:block;margin-top:auto;max-width:300px;text-align:center}.wrap.llms-resources #llms_dashboard_resource_links ul{list-style:disc;margin:5px 0 0 20px}.wrap.llms-resources #llms_dashboard_resource_links ul li{font-size:15px;line-height:1.5}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links{display:grid;grid-template-columns:1fr;grid-gap:60px}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links a{display:inline-block}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3{margin:0 0 10px 0}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 .dashicons{color:#aaa}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list ul{margin-bottom:20px}.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-primary,.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-secondary,.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-action{display:block;margin-top:auto;max-width:300px;text-align:center}@media only screen and (min-width: 782px){.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links{grid-template-columns:1fr 1fr 1fr}}.llms-remarks .llms-remarks-field{height:120px;width:100%}.llms-remarks input[type=number]{width:60px}button[name=llms_quiz_attempt_action] .save{display:none}button[name=llms_quiz_attempt_action].grading .default{display:none}button[name=llms_quiz_attempt_action].grading .save{display:inline}.llms-form-fields{-webkit-box-sizing:border-box;box-sizing:border-box}.llms-form-fields *{-webkit-box-sizing:border-box;box-sizing:border-box}.llms-form-fields.flush .llms-form-field{padding:0 0 20px}.llms-form-fields label:not(.llms-field-html label){font-weight:700}.llms-form-fields .wp-block-columns,.llms-form-fields .wp-block-column{margin-bottom:0}.llms-form-heading{padding:0 10px 10px}.llms-form-field{float:left;padding:0 10px 20px;position:relative;width:100%}.llms-form-field label:empty:after{content:" "}.llms-form-field [type=text],.llms-form-field [type=password],.llms-form-field [type=email],.llms-form-field [type=url],.llms-form-field [type=tel],.llms-form-field [type=number]{background-color:#fefefe;background-clip:padding-box;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;line-height:1;padding:8px 12px;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;width:100%}.llms-form-field input:focus,.llms-form-field input:focus-visible{border-color:#6888df;outline:thin solid}.llms-form-field select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-color:#fefefe;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#010101;padding:8px 12px;margin:0;width:100%;font-family:inherit;font-size:16px;cursor:inherit;line-height:1.6;z-index:1;outline:none;background-repeat:no-repeat;background-image:linear-gradient(45deg, transparent 50%, currentcolor 50%),linear-gradient(135deg, currentcolor 50%, transparent 50%);background-position:right 15px top 1.3rem,right 10px top 1.3rem;background-size:5px 5px,5px 5px}.llms-form-field select::-ms-expand{display:none}.llms-form-field select:focus{border:1px solid #6888df;outline:thin solid}.llms-form-field.valid input[type=date],.llms-form-field.valid input[type=time],.llms-form-field.valid input[type=datetime-local],.llms-form-field.valid input[type=week],.llms-form-field.valid input[type=month],.llms-form-field.valid input[type=text],.llms-form-field.valid input[type=email],.llms-form-field.valid input[type=url],.llms-form-field.valid input[type=password],.llms-form-field.valid input[type=search],.llms-form-field.valid input[type=tel],.llms-form-field.valid input[type=number],.llms-form-field.valid textarea,.llms-form-field.valid select{background:rgba(131,195,115,.3);border-color:#83c373}.llms-form-field.error input[type=date],.llms-form-field.error input[type=time],.llms-form-field.error input[type=datetime-local],.llms-form-field.error input[type=week],.llms-form-field.error input[type=month],.llms-form-field.error input[type=text],.llms-form-field.error input[type=email],.llms-form-field.error input[type=url],.llms-form-field.error input[type=password],.llms-form-field.error input[type=search],.llms-form-field.error input[type=tel],.llms-form-field.error input[type=number],.llms-form-field.error textarea,.llms-form-field.error select,.llms-form-field.invalid input[type=date],.llms-form-field.invalid input[type=time],.llms-form-field.invalid input[type=datetime-local],.llms-form-field.invalid input[type=week],.llms-form-field.invalid input[type=month],.llms-form-field.invalid input[type=text],.llms-form-field.invalid input[type=email],.llms-form-field.invalid input[type=url],.llms-form-field.invalid input[type=password],.llms-form-field.invalid input[type=search],.llms-form-field.invalid input[type=tel],.llms-form-field.invalid input[type=number],.llms-form-field.invalid textarea,.llms-form-field.invalid select{background:rgba(187,35,28,.3);border-color:#bb231c}.llms-form-field.llms-visually-hidden-field{display:none}.llms-form-field.align-right{text-align:right}@media screen and (min-width: 600px){.llms-form-field.llms-cols-1{width:8.3333333333%}.llms-form-field.llms-cols-2{width:16.6666666667%}.llms-form-field.llms-cols-3{width:25%}.llms-form-field.llms-cols-4{width:33.3333333333%}.llms-form-field.llms-cols-5{width:41.6666666667%}.llms-form-field.llms-cols-6{width:50%}.llms-form-field.llms-cols-7{width:58.3333333333%}.llms-form-field.llms-cols-8{width:66.6666666667%}.llms-form-field.llms-cols-9{width:75%}.llms-form-field.llms-cols-10{width:83.3333333333%}.llms-form-field.llms-cols-11{width:91.6666666667%}.llms-form-field.llms-cols-12{width:100%}}.llms-form-field.type-hidden{padding:0}.llms-form-field.type-radio input,.llms-form-field.type-radio label,.llms-form-field.type-checkbox input,.llms-form-field.type-checkbox label{display:inline-block;width:auto}.llms-form-field.type-radio input,.llms-form-field.type-checkbox input{margin-right:10px}.llms-form-field.type-radio label+.llms-description,.llms-form-field.type-checkbox label+.llms-description{display:block}.llms-form-field.type-radio:not(.is-group) input[type=radio]{position:absolute;opacity:0;visibility:none}.llms-form-field.type-radio:not(.is-group) label:before{background:#fafafa;background-position:-24px 0;background-repeat:no-repeat;border-radius:50%;-webkit-box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.35) 0 0 0 1px;box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.35) 0 0 0 1px;content:"";cursor:pointer;display:inline-block;height:22px;margin-right:5px;position:relative;-webkit-transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);top:-3px;vertical-align:middle;width:22px;z-index:2}.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked+label:before{-webkit-transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);background-position:0 0;background-image:radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%)}.llms-form-field .llms-input-group{margin-top:5px}.llms-form-field .llms-input-group .llms-form-field{padding:0 0 5px 5px}.llms-form-field.type-reset button:not(.auto),.llms-form-field.type-button button:not(.auto),.llms-form-field.type-submit button:not(.auto){width:100%}.llms-form-field .llms-description{font-size:14px;font-style:italic;line-height:18px}.llms-form-field .llms-required{color:#bb231c;margin-left:4px}.llms-form-field input,.llms-form-field textarea,.llms-form-field select{width:100%;margin-bottom:5px}.llms-form-field .select2-container .select2-selection--single{height:auto;padding:4px 6px}.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%}.llms-password-strength-meter{border:1px solid #dadada;display:none;font-size:10px;margin-top:-10px;padding:1px;position:relative;text-align:center}.llms-password-strength-meter:before{bottom:0;content:"";left:0;position:absolute;top:0;-webkit-transition:width .4s ease;transition:width .4s ease}.llms-password-strength-meter.mismatch,.llms-password-strength-meter.too-short,.llms-password-strength-meter.very-weak{border-color:#e35b5b}.llms-password-strength-meter.mismatch:before,.llms-password-strength-meter.too-short:before,.llms-password-strength-meter.very-weak:before{background:rgba(227,91,91,.25);width:25%}.llms-password-strength-meter.too-short:before{width:0}.llms-password-strength-meter.weak{border-color:#f78b53}.llms-password-strength-meter.weak:before{background:rgba(247,139,83,.25);width:50%}.llms-password-strength-meter.medium{border-color:#ffc733}.llms-password-strength-meter.medium:before{background:rgba(255,199,51,.25);width:75%}.llms-password-strength-meter.strong{border-color:#83c373}.llms-password-strength-meter.strong:before{background:rgba(131,195,115,.25);width:100%}.llms-password-strength-meter+.llms-description{display:block}/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:"FontAwesome";src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
+/*# sourceMappingURL=../maps/css/admin.min.css.map */
diff --git a/assets/css/builder-rtl.css b/assets/css/builder-rtl.css
new file mode 100644
index 0000000000..1767570c4c
--- /dev/null
+++ b/assets/css/builder-rtl.css
@@ -0,0 +1,1554 @@
+@charset "UTF-8";
+body.admin_page_llms-course-builder {
+ background: #fff;
+}
+body.admin_page_llms-course-builder #adminmenumain {
+ display: none;
+}
+body.admin_page_llms-course-builder #wpbody-content {
+ padding-bottom: 0;
+}
+body.admin_page_llms-course-builder #wpfooter {
+ display: none;
+}
+body.admin_page_llms-course-builder #wpcontent, body.admin_page_llms-course-builder #wpfooter {
+ margin-right: 0;
+}
+body.admin_page_llms-course-builder .llms-button-secondary .fa {
+ margin-left: 5px;
+}
+body.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__group {
+ font-size: 16px;
+}
+body.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__option .select2-results__option {
+ padding-right: 2em;
+}
+
+.wrap.lifterlms.llms-builder {
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ padding: 10px;
+ width: calc(100% - 200px);
+ z-index: 3;
+}
+@media only screen and (min-width: 1200px) {
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {
+ width: 560px;
+ }
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ width: calc(100% - 640px);
+ }
+}
+@media only screen and (min-width: 1440px) {
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {
+ width: calc(100% - 780px);
+ }
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ width: 720px;
+ }
+}
+@media only screen and (min-width: 1680px) {
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {
+ width: calc(100% - 1000px);
+ }
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ width: 940px;
+ }
+}
+@media only screen and (max-width: 782px) {
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ position: absolute;
+ top: 0;
+ width: auto;
+ }
+}
+.wrap.lifterlms.llms-builder .llms-headline {
+ display: inline-block;
+ font-weight: 400;
+ margin: 0;
+ padding: 0;
+ -webkit-transition: width 0.3s ease-in-out;
+ transition: width 0.3s ease-in-out;
+ vertical-align: middle;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main {
+ padding: 30px 0 30px 30px;
+ position: relative;
+ width: calc(100% - 450px);
+ z-index: 2;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons {
+ display: inline-block;
+ position: relative;
+ vertical-align: middle;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons button {
+ background: none;
+ color: inherit;
+ border: none;
+ padding: 0;
+ cursor: pointer;
+ outline: inherit;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons-lesson-id {
+ vertical-align: top;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ gap: 15px;
+ position: relative;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header .llms-button-secondary {
+ margin-left: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections {
+ -webkit-box-shadow: 0 0 0 3px transparent;
+ box-shadow: 0 0 0 3px transparent;
+ min-height: 60px;
+ padding: 10px 0;
+ -webkit-transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+ transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease, min-height 0.2s ease;
+ transition: box-shadow 0.6s ease, min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections.dragging {
+ -webkit-box-shadow: 0 0 0 3px #466dd8;
+ box-shadow: 0 0 0 3px #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section {
+ background: #fff;
+ border: 1px solid #efefef;
+ border-radius: 6px;
+ -webkit-box-shadow: -2px 2px 8px rgba(0, 0, 0, 0.08);
+ box-shadow: -2px 2px 8px rgba(0, 0, 0, 0.08);
+ position: relative;
+ margin: 0 0 20px 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 20px 30px 20px 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 0px;
+ margin-top: -5px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon {
+ padding: 5px 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-left {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+}
+@media only screen and (min-width: 1200px) {
+ .wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-left {
+ white-space: nowrap;
+ }
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded .llms-lessons {
+ overflow: visible;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected .llms-drag-utility.drag-section {
+ border-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected > .llms-builder-header .llms-headline {
+ font-weight: 400;
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-footer {
+ border-top: 1px solid #efefef;
+ padding: 20px 30px 20px 20px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:first-child:before {
+ top: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:last-child:before {
+ bottom: 55px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded:last-child:before {
+ bottom: 86px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons {
+ -webkit-box-shadow: 0 0 0 3px transparent;
+ box-shadow: 0 0 0 3px transparent;
+ height: 0;
+ margin: 0;
+ padding: 0;
+ -webkit-transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+ transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease, min-height 0.2s ease;
+ transition: box-shadow 0.6s ease, min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.dragging {
+ -webkit-box-shadow: 0 0 0 3px #466dd8;
+ box-shadow: 0 0 0 3px #466dd8;
+ min-height: 60px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded, .wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded {
+ height: auto;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded li.llms-lesson, .wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded li.llms-lesson {
+ pointer-events: auto;
+ visibility: visible;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson {
+ background: #fff;
+ border-top: 1px solid #efefef;
+ margin: 0;
+ padding: 20px 30px 20px 10px;
+ position: relative;
+ pointer-events: none;
+ visibility: hidden;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected .llms-drag-utility.drag-lesson {
+ border-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected > .llms-builder-header .llms-headline {
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ gap: 15px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-headline {
+ font-weight: 700;
+ margin-right: 10px;
+ cursor: pointer;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ gap: 15px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-left {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 0;
+ margin-top: -5px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon {
+ padding: 5px 10px;
+}
+@media only screen and (min-width: 1200px) {
+ .wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-left {
+ white-space: nowrap;
+ }
+}
+@media only screen and (min-width: 1200px) {
+ .wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header > .llms-builder-header {
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ }
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section .llms-drag-utility {
+ background: #fff;
+ border: 2px solid #ccc;
+ border-radius: 50%;
+ height: 10px;
+ right: 13px;
+ position: absolute;
+ top: 24px;
+ width: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson .llms-drag-utility {
+ height: 6px;
+ right: 14px;
+ top: 25px !important;
+ width: 6px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility,
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility {
+ border-color: #fff;
+ cursor: move;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility:hover:after,
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility:hover:after {
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility:after,
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility:after {
+ background: #fff;
+ content: "··\a··\a··";
+ color: #ccc;
+ display: block;
+ font-size: 36px;
+ height: 29px;
+ letter-spacing: -1px;
+ line-height: 8px;
+ right: -7px;
+ position: absolute;
+ text-align: center;
+ top: -12px;
+ width: 23px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-sortable-helper, .wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-draggable-dragging,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-sortable-helper,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-draggable-dragging {
+ border: 1px solid #ccc;
+ background: #fff;
+ -webkit-transform: rotate(-2deg);
+ transform: rotate(-2deg);
+ visibility: visible !important;
+ z-index: 999;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder {
+ border: 3px dashed #466dd8;
+ background: rgba(70, 109, 216, 0.3);
+ margin: 0 10px;
+ padding: 5px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder:before,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder:before {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility {
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility:after {
+ right: -35px;
+ top: -28px;
+}
+.wrap.lifterlms.llms-builder .llms-input-wrapper {
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container {
+ font-size: inherit;
+ font-family: inherit;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor.ql-blank::before {
+ color: #a0a0a0;
+ right: 8px;
+ left: 8px;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor p {
+ font-size: inherit;
+ line-height: 1;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-tooltip {
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-input,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor {
+ border: none;
+ border-bottom: 2px dotted transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ cursor: text;
+ display: inline-block;
+ font-size: inherit;
+ font-weight: 700;
+ height: auto;
+ line-height: 1;
+ margin: 0 8px;
+ min-width: 60px;
+ padding: 0;
+ -webkit-transition: border 0.2s ease, -webkit-box-shadow 0.2s ease;
+ transition: border 0.2s ease, -webkit-box-shadow 0.2s ease;
+ transition: border 0.2s ease, box-shadow 0.2s ease;
+ transition: border 0.2s ease, box-shadow 0.2s ease, -webkit-box-shadow 0.2s ease;
+}
+.wrap.lifterlms.llms-builder .llms-input:empty:before,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:empty:before {
+ color: #a0a0a0;
+ content: attr(data-placeholder);
+}
+.wrap.lifterlms.llms-builder .llms-input:hover,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:hover {
+ border-bottom-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-input[disabled],
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled] {
+ cursor: not-allowed;
+}
+.wrap.lifterlms.llms-builder .llms-input[disabled]:hover,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled]:hover {
+ border-bottom-color: transparent;
+}
+.wrap.lifterlms.llms-builder .llms-input:focus,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:focus {
+ background: #fff;
+ -webkit-box-shadow: 0 0 0 4px #fff, 0 0 0 6px #466dd8;
+ box-shadow: 0 0 0 4px #fff, 0 0 0 6px #466dd8;
+ border-bottom: none;
+ outline: none;
+}
+.wrap.lifterlms.llms-builder .llms-input b, .wrap.lifterlms.llms-builder .llms-input strong,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor b,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor strong {
+ font-weight: 700;
+}
+.wrap.lifterlms.llms-builder .llms-input.standard,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard {
+ border: 1px solid #e6e6e6;
+ margin: 2px;
+ padding: 5px 3px;
+}
+.wrap.lifterlms.llms-builder .llms-input.standard:hover,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:hover {
+ border-color: #d6d6d6;
+}
+.wrap.lifterlms.llms-builder .llms-input.standard:focus,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:focus {
+ -webkit-box-shadow: 0 0 0 2px #466dd8;
+ box-shadow: 0 0 0 2px #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-input.permalink,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.permalink {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor {
+ padding: 0 1px;
+}
+.wrap.lifterlms.llms-builder .llms-label {
+ font-weight: 500;
+}
+.wrap.lifterlms.llms-builder .llms-label .fa {
+ color: #aaa;
+ padding-right: 6px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-editor .llms-label {
+ float: right;
+ margin-left: 10px;
+ position: relative;
+ top: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-editor textarea {
+ border: none;
+ padding: 10px;
+ display: block;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image button.llms-add-image {
+ width: 130px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image .llms-image {
+ display: inline-block;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image .llms-image:hover .llms-action-icon {
+ opacity: 1;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image .llms-image .llms-action-icon {
+ color: #fff;
+ font-size: 24px;
+ opacity: 0;
+ padding: 0;
+ position: absolute;
+ -webkit-transition: opacity 0.2s ease;
+ transition: opacity 0.2s ease;
+ left: 3px;
+ top: 1px;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image .llms-image img {
+ display: block;
+ height: 100px;
+ max-width: 100%;
+ width: auto;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group {
+ background: #f4f4f4;
+ padding: 10px;
+ position: relative;
+ margin: 0 1px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label {
+ min-width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-editable-input,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-editable-input {
+ -webkit-box-flex: 2;
+ -ms-flex: 2;
+ flex: 2;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label--after,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label--after {
+ color: #888;
+ min-width: auto;
+ font-size: 85%;
+ padding-right: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch {
+ display: block;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:before, .wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:before,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch .llms-label,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch .llms-label {
+ width: calc(100% - 34px);
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-image,
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-video,
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-editor,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-image,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-video,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-editor {
+ margin-top: 2px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard {
+ display: block;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.two-digits, .wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.three-digits, .wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.four-digits,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.two-digits,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.three-digits,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.four-digits {
+ display: inline-block;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number .llms-input {
+ color: #888;
+ min-width: 30px;
+ text-align: left;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.two-digits {
+ width: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.three-digits {
+ width: 40px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.four-digits {
+ width: 60px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number small {
+ color: #888;
+ text-transform: uppercase;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+}
+.wrap.lifterlms.llms-builder .llms-model-settings:before, .wrap.lifterlms.llms-builder .llms-model-settings:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header {
+ border-bottom: 1px solid #efefef;
+ padding: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-up {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-down {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-up {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-down {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-body {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-header:before, .wrap.lifterlms.llms-builder .llms-settings-group-header:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-header:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-title {
+ display: inline-block;
+ font-size: 16px;
+ font-weight: 700;
+ line-height: 1.5;
+ margin: 0 5px;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-toggle {
+ float: left;
+ font-size: 18px;
+ padding: 2px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-body {
+ padding: 16px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ margin: 2px 0;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field,
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:first-child,
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:first-child {
+ margin-right: 0;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:last-child,
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:last-child {
+ margin-left: 0;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-breaker {
+ margin: 2px 0;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-editable-select {
+ margin: 2px 0;
+}
+.wrap.lifterlms.llms-builder .llms-editable-select .select2-container--default.select2-container--focus .select2-selection--multiple {
+ border-color: #aaa;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio label {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label {
+ display: inline-block;
+ margin: 0 3px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label > span {
+ -webkit-transition: background 0.2s ease;
+ transition: background 0.2s ease;
+ display: inline-block;
+ padding: 3px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images img {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input:checked + span {
+ background: #466dd8;
+}
+.wrap.lifterlms.llms-builder .settings-field--disabled {
+ opacity: 0.5;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon {
+ color: #666;
+ display: inline-block;
+ font-size: 13px;
+ text-decoration: none;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon:hover {
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon:hover.danger {
+ color: #bb231c;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon.circle {
+ border: 2px solid #aaa;
+ border-radius: 50%;
+ font-size: 9px;
+ height: 8px;
+ line-height: 1;
+ padding: 5px;
+ text-align: center;
+ width: 8px;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover {
+ border-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover.danger {
+ border-color: #bb231c;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ gap: 15px;
+ margin: 10px 8px 0 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item {
+ color: #666;
+ font-size: 13px;
+ margin: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active, .wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon {
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .fa, .wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon .fa {
+ margin-left: 5px;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button {
+ background: none;
+ color: inherit;
+ border: none;
+ padding: 0;
+ cursor: pointer;
+ outline: inherit;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button:hover {
+ text-decoration: underline;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar {
+ background: #e6e6e6;
+ bottom: 0;
+ overflow: hidden;
+ padding: 30px;
+ position: fixed;
+ -webkit-transition: width 0.3s ease-in-out;
+ transition: width 0.3s ease-in-out;
+ top: 32px;
+ left: 0;
+ width: 360px;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul, .wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities li {
+ margin: 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li:last-child {
+ margin-left: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility {
+ background: #efefef;
+ border: 1px solid #ccc;
+ border-radius: 8px;
+ color: inherit;
+ cursor: pointer;
+ display: block;
+ overflow: hidden;
+ padding: 6px 12px;
+ position: relative;
+ text-align: center;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility:hover {
+ background: #fefefe;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility .fa {
+ background: #848484;
+ position: absolute;
+ right: 0;
+ top: 0;
+ padding: 7px;
+ color: #fff;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-sidebar-headline {
+ margin: 0 0 10px;
+ font-size: 22px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list {
+ margin-bottom: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list li {
+ margin-bottom: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utility {
+ color: #444;
+ text-decoration: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button {
+ background: #466dd8;
+ border-radius: 8px;
+ border: none;
+ color: #fff;
+ cursor: pointer;
+ display: block;
+ margin: 0;
+ overflow: hidden;
+ padding: 17px 20px;
+ position: relative;
+ -webkit-transition: background 0.2s ease, color 0.2s ease;
+ transition: background 0.2s ease, color 0.2s ease;
+ text-align: center;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button:hover {
+ background: #2b55cb;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary {
+ background: #efefef;
+ color: #444;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary:hover {
+ background: #fefefe;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary .fa {
+ background: #848484;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button .fa {
+ background: #1c3987;
+ border-radius: 0 4px 4px 0;
+ color: #fff;
+ display: block;
+ font-size: 20px;
+ padding: 15px 20px;
+ position: absolute;
+ top: 0;
+ right: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button[disabled=disabled] {
+ opacity: 0.4;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small {
+ padding: 8px 46px 8px 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small .fa {
+ font-size: 15px;
+ padding: 9px 10px;
+ width: 20px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right.small {
+ padding-right: 10px;
+ padding-left: 46px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right .fa {
+ border-radius: 4px 0 0 4px;
+ right: auto;
+ left: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor {
+ height: 100%;
+ min-height: 100%;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav {
+ background-color: #1c3987;
+ margin: 0;
+ padding: 8px 8px 0 0;
+ font-size: 0;
+ margin: -10px -10px 10px -10px;
+ position: relative;
+ z-index: 2;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item {
+ display: inline-block;
+ margin: 0 0 0 6px;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu:before {
+ border: 8px solid transparent;
+ border-right-color: #cacaca;
+ content: "";
+ position: absolute;
+ top: 11px;
+ right: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu .llms-editor-menu-item:hover > a,
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu .llms-editor-menu-item.active > a {
+ background: #dfdfdf;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item:hover > a {
+ background-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > a {
+ background-color: #e6e6e6;
+ color: #466dd8;
+ font-weight: 700;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > a:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > .llms-editor-menu {
+ display: inline-block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item a {
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ color: #FFF;
+ display: inline-block;
+ padding: 9px 18px;
+ text-decoration: none;
+ -webkit-transition: background 0.2s ease;
+ transition: background 0.2s ease;
+ font-size: 15px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right {
+ float: left;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right a, .wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right:hover {
+ background: transparent;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab {
+ display: none;
+ height: calc(100% - 90px);
+ overflow: scroll;
+ position: relative;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+ overflow: scroll;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions .llms-quiz-questions {
+ overflow: visible;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save {
+ bottom: 10px;
+ right: 10px;
+ position: absolute;
+ left: 10px;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error {
+ background: #bb231c;
+ border-radius: 4px;
+ color: #fff;
+ display: inline-block;
+ font-style: italic;
+ padding: 5px 25px 7px 15px;
+ margin: 0 0 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error li {
+ margin: 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-save {
+ width: 75%;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-exit {
+ padding-right: 5px;
+ padding-left: 5px;
+ width: 23%;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button {
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i {
+ position: absolute;
+ right: 10px;
+ top: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i .llms-spinner {
+ border-color: #fff;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status] .llms-status-indicator {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saved] .status--saved {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] {
+ background-color: #f8954f;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] .status--unsaved {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saving] .status--saving {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=error] .status--error {
+ display: block;
+}
+@media only screen and (max-width: 782px) {
+ .wrap.lifterlms.llms-builder .llms-builder-sidebar {
+ margin-left: 10px;
+ position: relative;
+ top: 0;
+ width: auto;
+ }
+ .wrap.lifterlms.llms-builder .llms-builder-main {
+ padding-left: 10px;
+ width: auto;
+ }
+}
+.wrap.lifterlms.llms-builder .select2-container {
+ z-index: 99999999;
+}
+.wrap.lifterlms.llms-builder .select2-results__option {
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] {
+ background: #466dd8;
+}
+.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] .llms-existing-action {
+ color: #fff;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 5px 0 5px 5px;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info {
+ -webkit-box-flex: 6;
+ -ms-flex: 6;
+ flex: 6;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4, .wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5 {
+ margin: 0;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4 {
+ font-weight: 400;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5 {
+ font-weight: 300;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action {
+ color: #466dd8;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ text-align: center;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action .fa {
+ display: block;
+ font-size: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action small {
+ text-transform: uppercase;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-empty {
+ margin: 100px auto;
+ text-align: center;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-empty p {
+ font-size: 18px;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-empty button.llms-element-button {
+ max-width: 320px;
+ margin: 0 auto;
+}
+.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-model-title {
+ width: calc(100% - 310px);
+}
+.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-quiz-points {
+ float: right;
+ margin-left: 10px;
+ width: 100px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ padding: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header:before, .wrap.lifterlms.llms-builder .llms-model-header:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder .llms-model-header:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title {
+ float: right;
+ margin-left: 10px;
+ width: calc(100% - 200px);
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title .llms-input {
+ width: calc(100% - 65px);
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-model-status.llms-switch {
+ float: right;
+ margin-left: 10px;
+ position: relative;
+ text-align: left;
+ top: -2px;
+ width: 100px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons {
+ float: right;
+ position: relative;
+ text-align: left;
+ width: 80px;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .llms-action-icon {
+ margin-right: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .fa {
+ max-width: 15px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header + .llms-model-settings.active {
+ margin-top: -10px;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings {
+ clear: both;
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings.active {
+ display: block;
+ margin-top: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin: 0 5px;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:first-child {
+ margin-right: 0;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:last-child {
+ margin-left: 0;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button.llms-show-question-bank {
+ -webkit-box-flex: 2;
+ -ms-flex: 2;
+ flex: 2;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-tools {
+ display: none;
+ width: 100%;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank:before, .wrap.lifterlms.llms-builder ul.llms-question-bank:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header {
+ clear: both;
+ padding-top: 20px;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header:first-child {
+ padding-top: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header h4 {
+ font-size: 20px;
+ margin: 10px 5px;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ float: right;
+ margin: 0;
+ padding: 3px;
+ width: 33.3333%;
+ -webkit-transition: opacity 0.3s ease-in-out;
+ transition: opacity 0.3s ease-in-out;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type.filtered {
+ opacity: 0.3;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable {
+ display: block;
+ position: relative;
+ text-decoration: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable .llms-element-button {
+ opacity: 0.5;
+ pointer-events: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions {
+ margin: 10px 3px;
+ padding: 5px;
+ -webkit-transition: -webkit-box-shadow 0.6s ease;
+ transition: -webkit-box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease, -webkit-box-shadow 0.6s ease;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions.dragging {
+ -webkit-box-shadow: 0 0 0 3px #466dd8;
+ box-shadow: 0 0 0 3px #466dd8;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions:empty:before {
+ background: #fff;
+ content: attr(data-empty-msg);
+ display: block;
+ font-size: 18px;
+ margin: 0 auto;
+ padding: 100px 0;
+ text-align: center;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question {
+ background: #fff;
+ margin: 0 0 3px;
+ padding: 15px 12px 10px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question:hover > .llms-builder-header .llms-action-icons {
+ opacity: 1;
+ pointer-events: auto;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions {
+ margin-right: 12px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions .llms-question {
+ border-bottom: 2px solid #e6e6e6;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions:empty:before {
+ content: attr(data-empty-msg);
+ display: block;
+ font-size: 18px;
+ text-align: center;
+ margin: 20px auto;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder.qtype--group {
+ display: none !important;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:before, .wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header > * {
+ float: right;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body {
+ display: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body.active {
+ display: block;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp {
+ background: #466dd8;
+ border-radius: 4px;
+ color: #fff;
+ cursor: move;
+ font-size: 90%;
+ margin-top: -5px;
+ padding: 4px 10px 6px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp small, .wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa {
+ line-height: 1.2;
+ vertical-align: middle;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa {
+ margin-left: 4px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline {
+ width: calc(100% - 110px - 90px - 55px);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline .ql-editor {
+ width: calc(100% - 16px);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-action-icons {
+ width: 110px;
+ opacity: 0;
+ pointer-events: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-points {
+ width: 90px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features {
+ margin: 10px 0 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features:last-child {
+ margin: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features .llms-switch {
+ margin-left: 15px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-editable-video {
+ position: relative;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-wrapper {
+ background: #f4f4f4;
+ margin: 2px 1px;
+ padding: 10px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header {
+ margin-bottom: 10px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:before, .wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header .llms-switch {
+ float: left;
+ text-align: left;
+ width: 260px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices {
+ border: 3px solid #f4f4f4;
+ margin: -3px;
+ padding: 0;
+ -webkit-transition: -webkit-box-shadow 0.6s ease;
+ transition: -webkit-box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease, -webkit-box-shadow 0.6s ease;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.dragging {
+ -webkit-box-shadow: 0 0 0 3px #466dd8;
+ box-shadow: 0 0 0 3px #466dd8;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.multi-choices li.llms-question-choice .llms-choice-id span {
+ border-radius: 4px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice {
+ margin: 0 0 5px;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice:last-child {
+ margin-bottom: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox] {
+ display: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox]:checked + .llms-marker {
+ background: #4d8d3c;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker {
+ border-radius: 50%;
+ background: #d0d0d0;
+ -webkit-box-shadow: inset 0 0 1px #848484;
+ box-shadow: inset 0 0 1px #848484;
+ color: #444;
+ display: inline-block;
+ font-size: 16px;
+ height: 20px;
+ line-height: 20px;
+ padding: 5px;
+ position: relative;
+ text-align: center;
+ -webkit-transition: background 0.1s ease;
+ transition: background 0.1s ease;
+ width: 20px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker .fa {
+ right: 7px;
+ opacity: 0;
+ position: absolute;
+ top: 7px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover b {
+ opacity: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover .fa {
+ opacity: 1;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input-wrapper,
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image {
+ display: inline-block;
+ width: calc(100% - 55px - 35px - 5px);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input {
+ width: calc(100% - 16px);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image {
+ vertical-align: middle;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image img {
+ height: 50px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-action-icons {
+ display: inline-block;
+ opacity: 1;
+ pointer-events: auto;
+ text-align: left;
+ width: 55px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.llms-sortable-placeholder {
+ border: 3px dashed #466dd8 !important;
+ background: rgba(70, 109, 216, 0.3);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.ui-sortable-helper {
+ border: 1px solid #ccc;
+ background: #fff;
+ padding: 10px;
+ -webkit-transform: rotate(-2deg);
+ transform: rotate(-2deg);
+ z-index: 999;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-sortable-helper,
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-draggable-dragging {
+ border: 1px solid #ccc;
+ background: #fff;
+ -webkit-transform: rotate(-2deg);
+ transform: rotate(-2deg);
+ z-index: 999;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder {
+ border: 3px dashed #466dd8 !important;
+ background: rgba(70, 109, 216, 0.3);
+}
+.wrap.lifterlms.llms-builder .llms-switch {
+ display: inline-block;
+ float: none;
+ width: auto;
+}
+.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox] {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked + .llms-switch-slider {
+ background: #4d8d3c;
+}
+.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked + .llms-switch-slider:after {
+ -webkit-transform: translateX(-14px);
+ transform: translateX(-14px);
+}
+.wrap.lifterlms.llms-builder .llms-switch .llms-label {
+ display: inline-block;
+ vertical-align: top;
+}
+.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider {
+ background: #e0e0e0;
+ border-radius: 8px;
+ display: inline-block;
+ height: 16px;
+ margin-top: 2px;
+ position: relative;
+ -webkit-transition: background 0.2s ease;
+ transition: background 0.2s ease;
+ vertical-align: top;
+ width: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider:after {
+ background: #fff;
+ border-radius: 8px;
+ content: "";
+ display: block;
+ height: 12px;
+ right: 2px;
+ position: relative;
+ -webkit-transition: -webkit-transform 0.2s ease;
+ transition: -webkit-transform 0.2s ease;
+ transition: transform 0.2s ease;
+ transition: transform 0.2s ease, -webkit-transform 0.2s ease;
+ top: 2px;
+ width: 12px;
+}
+
+.llms-multi-input .llms-input-wrapper {
+ width: 50%;
+ float: right;
+ margin-bottom: 6px;
+ font-size: 12px;
+}
+
+.llms-multi-input .llms-input-wrapper .llms-input {
+ font-size: 12px;
+ padding: 5px;
+}
diff --git a/assets/css/builder-rtl.min.css b/assets/css/builder-rtl.min.css
new file mode 100644
index 0000000000..75721a3b76
--- /dev/null
+++ b/assets/css/builder-rtl.min.css
@@ -0,0 +1 @@
+body.admin_page_llms-course-builder{background:#fff}body.admin_page_llms-course-builder #adminmenumain{display:none}body.admin_page_llms-course-builder #wpbody-content{padding-bottom:0}body.admin_page_llms-course-builder #wpfooter{display:none}body.admin_page_llms-course-builder #wpcontent,body.admin_page_llms-course-builder #wpfooter{margin-right:0}body.admin_page_llms-course-builder .llms-button-secondary .fa{margin-left:5px}body.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__group{font-size:16px}body.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__option .select2-results__option{padding-right:2em}.wrap.lifterlms.llms-builder{margin:0;padding:0;position:relative}.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{padding:10px;width:calc(100% - 200px);z-index:3}@media only screen and (min-width: 1200px){.wrap.lifterlms.llms-builder.editor-active .llms-builder-main{width:560px}.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{width:calc(100% - 640px)}}@media only screen and (min-width: 1440px){.wrap.lifterlms.llms-builder.editor-active .llms-builder-main{width:calc(100% - 780px)}.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{width:720px}}@media only screen and (min-width: 1680px){.wrap.lifterlms.llms-builder.editor-active .llms-builder-main{width:calc(100% - 1000px)}.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{width:940px}}@media only screen and (max-width: 782px){.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{position:absolute;top:0;width:auto}}.wrap.lifterlms.llms-builder .llms-headline{display:inline-block;font-weight:400;margin:0;padding:0;-webkit-transition:width .3s ease-in-out;transition:width .3s ease-in-out;vertical-align:middle}.wrap.lifterlms.llms-builder .llms-builder-main{padding:30px 0 30px 30px;position:relative;width:calc(100% - 450px);z-index:2}.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons{display:inline-block;position:relative;vertical-align:middle}.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons button{background:none;color:inherit;border:none;padding:0;cursor:pointer;outline:inherit}.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons-lesson-id{vertical-align:top}.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:15px;position:relative;z-index:1}.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header .llms-button-secondary{margin-left:10px}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections{-webkit-box-shadow:0 0 0 3px rgba(0,0,0,0);box-shadow:0 0 0 3px rgba(0,0,0,0);min-height:60px;padding:10px 0;-webkit-transition:min-height .2s ease,-webkit-box-shadow .6s ease;transition:min-height .2s ease,-webkit-box-shadow .6s ease;transition:box-shadow .6s ease,min-height .2s ease;transition:box-shadow .6s ease,min-height .2s ease,-webkit-box-shadow .6s ease}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections.dragging{-webkit-box-shadow:0 0 0 3px #466dd8;box-shadow:0 0 0 3px #466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section{background:#fff;border:1px solid #efefef;border-radius:6px;-webkit-box-shadow:-2px 2px 8px rgba(0,0,0,.08);box-shadow:-2px 2px 8px rgba(0,0,0,.08);position:relative;margin:0 0 20px 0;padding:0}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:20px 30px 20px 10px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-right{display:-webkit-box;display:-ms-flexbox;display:flex;gap:0px;margin-top:-5px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon{padding:5px 10px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-left{display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px}@media only screen and (min-width: 1200px){.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-right,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-left{white-space:nowrap}}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded .llms-lessons{overflow:visible}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected .llms-drag-utility.drag-section{border-color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected>.llms-builder-header .llms-headline{font-weight:400;color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-footer{border-top:1px solid #efefef;padding:20px 30px 20px 20px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:first-child:before{top:30px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:last-child:before{bottom:55px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded:last-child:before{bottom:86px}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons{-webkit-box-shadow:0 0 0 3px rgba(0,0,0,0);box-shadow:0 0 0 3px rgba(0,0,0,0);height:0;margin:0;padding:0;-webkit-transition:min-height .2s ease,-webkit-box-shadow .6s ease;transition:min-height .2s ease,-webkit-box-shadow .6s ease;transition:box-shadow .6s ease,min-height .2s ease;transition:box-shadow .6s ease,min-height .2s ease,-webkit-box-shadow .6s ease}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.dragging{-webkit-box-shadow:0 0 0 3px #466dd8;box-shadow:0 0 0 3px #466dd8;min-height:60px}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded,.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded{height:auto}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded li.llms-lesson,.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded li.llms-lesson{pointer-events:auto;visibility:visible}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson{background:#fff;border-top:1px solid #efefef;margin:0;padding:20px 30px 20px 10px;position:relative;pointer-events:none;visibility:hidden}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected .llms-drag-utility.drag-lesson{border-color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected>.llms-builder-header .llms-headline{color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:15px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-headline{font-weight:700;margin-right:10px;cursor:pointer}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;gap:15px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-left{display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-right{display:-webkit-box;display:-ms-flexbox;display:flex;gap:0;margin-top:-5px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon{padding:5px 10px}@media only screen and (min-width: 1200px){.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-right,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-left{white-space:nowrap}}@media only screen and (min-width: 1200px){.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header>.llms-builder-header{-ms-flex-wrap:nowrap;flex-wrap:nowrap}}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section .llms-drag-utility{background:#fff;border:2px solid #ccc;border-radius:50%;height:10px;right:13px;position:absolute;top:24px;width:10px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson .llms-drag-utility{height:6px;right:14px;top:25px !important;width:6px}.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover>.llms-drag-utility,.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover>.llms-drag-utility{border-color:#fff;cursor:move}.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover>.llms-drag-utility:hover:after,.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover>.llms-drag-utility:hover:after{color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover>.llms-drag-utility:after,.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover>.llms-drag-utility:after{background:#fff;content:"··\a··\a··";color:#ccc;display:block;font-size:36px;height:29px;letter-spacing:-1px;line-height:8px;right:-7px;position:absolute;text-align:center;top:-12px;width:23px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-sortable-helper,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-draggable-dragging,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-sortable-helper,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-draggable-dragging{border:1px solid #ccc;background:#fff;-webkit-transform:rotate(-2deg);transform:rotate(-2deg);visibility:visible !important;z-index:999}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder{border:3px dashed #466dd8;background:rgba(70,109,216,.3);margin:0 10px;padding:5px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder:before,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder:before{display:none}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections>li.llms-lesson.ui-draggable-dragging .llms-drag-utility{position:relative}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections>li.llms-lesson.ui-draggable-dragging .llms-drag-utility:after{right:-35px;top:-28px}.wrap.lifterlms.llms-builder .llms-input-wrapper{position:relative}.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container{font-size:inherit;font-family:inherit}.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor.ql-blank::before{color:#a0a0a0;right:8px;left:8px}.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor p{font-size:inherit;line-height:1}.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-tooltip{z-index:1}.wrap.lifterlms.llms-builder .llms-input,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor{border:none;border-bottom:2px dotted rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;cursor:text;display:inline-block;font-size:inherit;font-weight:700;height:auto;line-height:1;margin:0 8px;min-width:60px;padding:0;-webkit-transition:border .2s ease,-webkit-box-shadow .2s ease;transition:border .2s ease,-webkit-box-shadow .2s ease;transition:border .2s ease,box-shadow .2s ease;transition:border .2s ease,box-shadow .2s ease,-webkit-box-shadow .2s ease}.wrap.lifterlms.llms-builder .llms-input:empty:before,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:empty:before{color:#a0a0a0;content:attr(data-placeholder)}.wrap.lifterlms.llms-builder .llms-input:hover,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:hover{border-bottom-color:#466dd8}.wrap.lifterlms.llms-builder .llms-input[disabled],.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled]{cursor:not-allowed}.wrap.lifterlms.llms-builder .llms-input[disabled]:hover,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled]:hover{border-bottom-color:rgba(0,0,0,0)}.wrap.lifterlms.llms-builder .llms-input:focus,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:focus{background:#fff;-webkit-box-shadow:0 0 0 4px #fff,0 0 0 6px #466dd8;box-shadow:0 0 0 4px #fff,0 0 0 6px #466dd8;border-bottom:none;outline:none}.wrap.lifterlms.llms-builder .llms-input b,.wrap.lifterlms.llms-builder .llms-input strong,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor b,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor strong{font-weight:700}.wrap.lifterlms.llms-builder .llms-input.standard,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard{border:1px solid #e6e6e6;margin:2px;padding:5px 3px}.wrap.lifterlms.llms-builder .llms-input.standard:hover,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:hover{border-color:#d6d6d6}.wrap.lifterlms.llms-builder .llms-input.standard:focus,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:focus{-webkit-box-shadow:0 0 0 2px #466dd8;box-shadow:0 0 0 2px #466dd8}.wrap.lifterlms.llms-builder .llms-input.permalink,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.permalink{display:none}.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor{padding:0 1px}.wrap.lifterlms.llms-builder .llms-label{font-weight:500}.wrap.lifterlms.llms-builder .llms-label .fa{color:#aaa;padding-right:6px}.wrap.lifterlms.llms-builder .llms-editable-editor .llms-label{float:right;margin-left:10px;position:relative;top:10px}.wrap.lifterlms.llms-builder .llms-editable-editor textarea{border:none;padding:10px;display:block;width:100%}.wrap.lifterlms.llms-builder .llms-editable-image button.llms-add-image{width:130px}.wrap.lifterlms.llms-builder .llms-editable-image .llms-image{display:inline-block;position:relative}.wrap.lifterlms.llms-builder .llms-editable-image .llms-image:hover .llms-action-icon{opacity:1}.wrap.lifterlms.llms-builder .llms-editable-image .llms-image .llms-action-icon{color:#fff;font-size:24px;opacity:0;padding:0;position:absolute;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;left:3px;top:1px;z-index:1}.wrap.lifterlms.llms-builder .llms-editable-image .llms-image img{display:block;height:100px;max-width:100%;width:auto}.wrap.lifterlms.llms-builder .llms-settings-field,.wrap.lifterlms.llms-builder .llms-editable-toggle-group{background:#f4f4f4;padding:10px;position:relative;margin:0 1px}.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after,.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label,.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label{min-width:100%}.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-editable-input,.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-editable-input{-webkit-box-flex:2;-ms-flex:2;flex:2}.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label--after,.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label--after{color:#888;min-width:auto;font-size:85%;padding-right:10px}.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch{display:block;width:100%}.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:before,.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:before,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after{content:" ";display:table}.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after{clear:both}.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch .llms-label,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch .llms-label{width:calc(100% - 34px)}.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-image,.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-video,.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-editor,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-image,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-video,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-editor{margin-top:2px}.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard{display:block;width:100%}.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.two-digits,.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.three-digits,.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.four-digits,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.two-digits,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.three-digits,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.four-digits{display:inline-block}.wrap.lifterlms.llms-builder .llms-editable-number .llms-input{color:#888;min-width:30px;text-align:left}.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.two-digits{width:30px}.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.three-digits{width:40px}.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.four-digits{width:60px}.wrap.lifterlms.llms-builder .llms-editable-number small{color:#888;text-transform:uppercase}.wrap.lifterlms.llms-builder .llms-model-settings{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.wrap.lifterlms.llms-builder .llms-model-settings:before,.wrap.lifterlms.llms-builder .llms-model-settings:after{content:" ";display:table}.wrap.lifterlms.llms-builder .llms-model-settings:after{clear:both}.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header{border-bottom:1px solid #efefef;padding:10px}.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-up{display:block}.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-down{display:none}.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-up{display:none}.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-down{display:block}.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-body{display:none}.wrap.lifterlms.llms-builder .llms-settings-group-header:before,.wrap.lifterlms.llms-builder .llms-settings-group-header:after{content:" ";display:table}.wrap.lifterlms.llms-builder .llms-settings-group-header:after{clear:both}.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-title{display:inline-block;font-size:16px;font-weight:700;line-height:1.5;margin:0 5px;padding:0}.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-toggle{float:left;font-size:18px;padding:2px}.wrap.lifterlms.llms-builder .llms-settings-group-body{padding:16px}.wrap.lifterlms.llms-builder .llms-settings-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:2px 0}.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field,.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group{-webkit-box-flex:1;-ms-flex:1;flex:1}.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:first-child,.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:first-child{margin-right:0}.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:last-child,.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:last-child{margin-left:0}.wrap.lifterlms.llms-builder .llms-settings-row .llms-breaker{margin:2px 0;width:100%}.wrap.lifterlms.llms-builder .llms-editable-select{margin:2px 0}.wrap.lifterlms.llms-builder .llms-editable-select .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#aaa}.wrap.lifterlms.llms-builder .llms-editable-radio label{display:block}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input{display:none}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label{display:inline-block;margin:0 3px}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label>span{-webkit-transition:background .2s ease;transition:background .2s ease;display:inline-block;padding:3px}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images img{display:block}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input:checked+span{background:#466dd8}.wrap.lifterlms.llms-builder .settings-field--disabled{opacity:.5}.wrap.lifterlms.llms-builder .llms-action-icon{color:#666;display:inline-block;font-size:13px;text-decoration:none}.wrap.lifterlms.llms-builder .llms-action-icon:hover{color:#466dd8}.wrap.lifterlms.llms-builder .llms-action-icon:hover.danger{color:#bb231c}.wrap.lifterlms.llms-builder .llms-action-icon.circle{border:2px solid #aaa;border-radius:50%;font-size:9px;height:8px;line-height:1;padding:5px;text-align:center;width:8px}.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover{border-color:#466dd8}.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover.danger{border-color:#bb231c}.wrap.lifterlms.llms-builder ul.llms-info-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:15px;margin:10px 8px 0 0;padding:0}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item{color:#666;font-size:13px;margin:0}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active,.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon{color:#466dd8}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .fa,.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon .fa{margin-left:5px}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button{background:none;color:inherit;border:none;padding:0;cursor:pointer;outline:inherit}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button:hover{text-decoration:underline}.wrap.lifterlms.llms-builder .llms-builder-sidebar{background:#e6e6e6;bottom:0;overflow:hidden;padding:30px;position:fixed;-webkit-transition:width .3s ease-in-out;transition:width .3s ease-in-out;top:32px;left:0;width:360px;z-index:1}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul,.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities li{margin:0;padding:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul{display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li{-webkit-box-flex:1;-ms-flex:1;flex:1}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li:last-child{margin-left:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility{background:#efefef;border:1px solid #ccc;border-radius:8px;color:inherit;cursor:pointer;display:block;overflow:hidden;padding:6px 12px;position:relative;text-align:center;width:100%}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility:hover{background:#fefefe}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility .fa{background:#848484;position:absolute;right:0;top:0;padding:7px;color:#fff}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-sidebar-headline{margin:0 0 10px;font-size:22px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list{margin-bottom:30px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list li{margin-bottom:10px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utility{color:#444;text-decoration:none}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button{background:#466dd8;border-radius:8px;border:none;color:#fff;cursor:pointer;display:block;margin:0;overflow:hidden;padding:17px 20px;position:relative;-webkit-transition:background .2s ease,color .2s ease;transition:background .2s ease,color .2s ease;text-align:center;width:100%}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button:hover{background:#2b55cb}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary{background:#efefef;color:#444}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary:hover{background:#fefefe}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary .fa{background:#848484}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button .fa{background:#1c3987;border-radius:0 4px 4px 0;color:#fff;display:block;font-size:20px;padding:15px 20px;position:absolute;top:0;right:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button[disabled=disabled]{opacity:.4}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small{padding:8px 46px 8px 10px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small .fa{font-size:15px;padding:9px 10px;width:20px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right.small{padding-right:10px;padding-left:46px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right .fa{border-radius:4px 0 0 4px;right:auto;left:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor{height:100%;min-height:100%;position:relative}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav{background-color:#1c3987;margin:0;padding:8px 8px 0 0;font-size:0;margin:-10px -10px 10px -10px;position:relative;z-index:2}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu{list-style-type:none;margin:0;padding:0;position:relative}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item{display:inline-block;margin:0 0 0 6px;padding:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item>.llms-editor-menu{display:none}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item>.llms-editor-menu:before{border:8px solid rgba(0,0,0,0);border-right-color:#cacaca;content:"";position:absolute;top:11px;right:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item>.llms-editor-menu .llms-editor-menu-item:hover>a,.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item>.llms-editor-menu .llms-editor-menu-item.active>a{background:#dfdfdf}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item:hover>a{background-color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active>a{background-color:#e6e6e6;color:#466dd8;font-weight:700}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active>a:focus{-webkit-box-shadow:none;box-shadow:none}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active>.llms-editor-menu{display:inline-block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item a{border-top-right-radius:4px;border-top-left-radius:4px;color:#fff;display:inline-block;padding:9px 18px;text-decoration:none;-webkit-transition:background .2s ease;transition:background .2s ease;font-size:15px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right{float:left}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right a,.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right:hover{background:rgba(0,0,0,0)}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab{display:none;height:calc(100% - 90px);overflow:scroll;position:relative;z-index:1}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active{display:block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;overflow:scroll}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions .llms-quiz-questions{overflow:visible}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save{bottom:10px;right:10px;position:absolute;left:10px;z-index:1}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error{background:#bb231c;border-radius:4px;color:#fff;display:inline-block;font-style:italic;padding:5px 25px 7px 15px;margin:0 0 10px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error li{margin:0;padding:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-save{width:75%}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-exit{padding-right:5px;padding-left:5px;width:23%}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button{position:relative}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i{position:absolute;right:10px;top:10px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i .llms-spinner{border-color:#fff}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status] .llms-status-indicator{display:none}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saved] .status--saved{display:block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved]{background-color:#f8954f}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] .status--unsaved{display:block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saving] .status--saving{display:block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=error] .status--error{display:block}@media only screen and (max-width: 782px){.wrap.lifterlms.llms-builder .llms-builder-sidebar{margin-left:10px;position:relative;top:0;width:auto}.wrap.lifterlms.llms-builder .llms-builder-main{padding-left:10px;width:auto}}.wrap.lifterlms.llms-builder .select2-container{z-index:99999999}.wrap.lifterlms.llms-builder .select2-results__option{padding:0}.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected]{background:#466dd8}.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] .llms-existing-action{color:#fff}.wrap.lifterlms.llms-builder .llms-existing-lesson-result{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;padding:5px 0 5px 5px}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info{-webkit-box-flex:6;-ms-flex:6;flex:6}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4,.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5{margin:0}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4{font-weight:400}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5{font-weight:300}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action{color:#466dd8;-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action .fa{display:block;font-size:30px}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action small{text-transform:uppercase}.wrap.lifterlms.llms-builder .llms-quiz-empty{margin:100px auto;text-align:center}.wrap.lifterlms.llms-builder .llms-quiz-empty p{font-size:18px}.wrap.lifterlms.llms-builder .llms-quiz-empty button.llms-element-button{max-width:320px;margin:0 auto}.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-model-title{width:calc(100% - 310px)}.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-quiz-points{float:right;margin-left:10px;width:100px}.wrap.lifterlms.llms-builder .llms-model-header{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);padding:10px}.wrap.lifterlms.llms-builder .llms-model-header:before,.wrap.lifterlms.llms-builder .llms-model-header:after{content:" ";display:table}.wrap.lifterlms.llms-builder .llms-model-header:after{clear:both}.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title{float:right;margin-left:10px;width:calc(100% - 200px)}.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title .llms-input{width:calc(100% - 65px)}.wrap.lifterlms.llms-builder .llms-model-header .llms-model-status.llms-switch{float:right;margin-left:10px;position:relative;text-align:left;top:-2px;width:100px}.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons{float:right;position:relative;text-align:left;width:80px;z-index:1}.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .llms-action-icon{margin-right:10px}.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .fa{max-width:15px}.wrap.lifterlms.llms-builder .llms-model-header+.llms-model-settings.active{margin-top:-10px}.wrap.lifterlms.llms-builder .llms-model-settings{clear:both;display:none}.wrap.lifterlms.llms-builder .llms-model-settings.active{display:block;margin-top:10px}.wrap.lifterlms.llms-builder .llms-quiz-footer{display:-webkit-box;display:-ms-flexbox;display:flex}.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:0 5px}.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:first-child{margin-right:0}.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:last-child{margin-left:0}.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button.llms-show-question-bank{-webkit-box-flex:2;-ms-flex:2;flex:2}.wrap.lifterlms.llms-builder .llms-quiz-tools{display:none;width:100%;position:relative}.wrap.lifterlms.llms-builder ul.llms-question-bank{list-style-type:none;margin:0;padding:0}.wrap.lifterlms.llms-builder ul.llms-question-bank:before,.wrap.lifterlms.llms-builder ul.llms-question-bank:after{content:" ";display:table}.wrap.lifterlms.llms-builder ul.llms-question-bank:after{clear:both}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header{clear:both;padding-top:20px}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header:first-child{padding-top:0}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header h4{font-size:20px;margin:10px 5px}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type{-webkit-box-sizing:border-box;box-sizing:border-box;float:right;margin:0;padding:3px;width:33.3333%;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type.filtered{opacity:.3}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable{display:block;position:relative;text-decoration:none}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable .llms-element-button{opacity:.5;pointer-events:none}.wrap.lifterlms.llms-builder ul.llms-quiz-questions{margin:10px 3px;padding:5px;-webkit-transition:-webkit-box-shadow .6s ease;transition:-webkit-box-shadow .6s ease;transition:box-shadow .6s ease;transition:box-shadow .6s ease, -webkit-box-shadow .6s ease;transition:box-shadow .6s ease,-webkit-box-shadow .6s ease}.wrap.lifterlms.llms-builder ul.llms-quiz-questions.dragging{-webkit-box-shadow:0 0 0 3px #466dd8;box-shadow:0 0 0 3px #466dd8}.wrap.lifterlms.llms-builder ul.llms-quiz-questions:empty:before{background:#fff;content:attr(data-empty-msg);display:block;font-size:18px;margin:0 auto;padding:100px 0;text-align:center}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question{background:#fff;margin:0 0 3px;padding:15px 12px 10px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question:hover>.llms-builder-header .llms-action-icons{opacity:1;pointer-events:auto}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions{margin-right:12px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions .llms-question{border-bottom:2px solid #e6e6e6}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions:empty:before{content:attr(data-empty-msg);display:block;font-size:18px;text-align:center;margin:20px auto}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder.qtype--group{display:none !important}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:before,.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after{content:" ";display:table}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after{clear:both}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header>*{float:right}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body{display:none}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body.active{display:block}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp{background:#466dd8;border-radius:4px;color:#fff;cursor:move;font-size:90%;margin-top:-5px;padding:4px 10px 6px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp small,.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa{line-height:1.2;vertical-align:middle}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa{margin-left:4px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline{width:calc(100% - 110px - 90px - 55px)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline .ql-editor{width:calc(100% - 16px)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-action-icons{width:110px;opacity:0;pointer-events:none}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-points{width:90px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features{margin:10px 0 0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features:last-child{margin:0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features .llms-switch{margin-left:15px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-editable-video{position:relative;z-index:1}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-wrapper{background:#f4f4f4;margin:2px 1px;padding:10px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header{margin-bottom:10px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:before,.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after{content:" ";display:table}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after{clear:both}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header .llms-switch{float:left;text-align:left;width:260px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices{border:3px solid #f4f4f4;margin:-3px;padding:0;-webkit-transition:-webkit-box-shadow .6s ease;transition:-webkit-box-shadow .6s ease;transition:box-shadow .6s ease;transition:box-shadow .6s ease, -webkit-box-shadow .6s ease;transition:box-shadow .6s ease,-webkit-box-shadow .6s ease}.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.dragging{-webkit-box-shadow:0 0 0 3px #466dd8;box-shadow:0 0 0 3px #466dd8}.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.multi-choices li.llms-question-choice .llms-choice-id span{border-radius:4px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice{margin:0 0 5px;padding:0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice:last-child{margin-bottom:0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox]{display:none}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox]:checked+.llms-marker{background:#4d8d3c}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker{border-radius:50%;background:#d0d0d0;-webkit-box-shadow:inset 0 0 1px #848484;box-shadow:inset 0 0 1px #848484;color:#444;display:inline-block;font-size:16px;height:20px;line-height:20px;padding:5px;position:relative;text-align:center;-webkit-transition:background .1s ease;transition:background .1s ease;width:20px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker .fa{right:7px;opacity:0;position:absolute;top:7px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover b{opacity:0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover .fa{opacity:1}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input-wrapper,.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image{display:inline-block;width:calc(100% - 55px - 35px - 5px)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input{width:calc(100% - 16px)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image{vertical-align:middle}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image img{height:50px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-action-icons{display:inline-block;opacity:1;pointer-events:auto;text-align:left;width:55px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.llms-sortable-placeholder{border:3px dashed #466dd8 !important;background:rgba(70,109,216,.3)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.ui-sortable-helper{border:1px solid #ccc;background:#fff;padding:10px;-webkit-transform:rotate(-2deg);transform:rotate(-2deg);z-index:999}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-sortable-helper,.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-draggable-dragging{border:1px solid #ccc;background:#fff;-webkit-transform:rotate(-2deg);transform:rotate(-2deg);z-index:999}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder{border:3px dashed #466dd8 !important;background:rgba(70,109,216,.3)}.wrap.lifterlms.llms-builder .llms-switch{display:inline-block;float:none;width:auto}.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]{display:none}.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked+.llms-switch-slider{background:#4d8d3c}.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked+.llms-switch-slider:after{-webkit-transform:translateX(-14px);transform:translateX(-14px)}.wrap.lifterlms.llms-builder .llms-switch .llms-label{display:inline-block;vertical-align:top}.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider{background:#e0e0e0;border-radius:8px;display:inline-block;height:16px;margin-top:2px;position:relative;-webkit-transition:background .2s ease;transition:background .2s ease;vertical-align:top;width:30px}.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider:after{background:#fff;border-radius:8px;content:"";display:block;height:12px;right:2px;position:relative;-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease, -webkit-transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease;top:2px;width:12px}.llms-multi-input .llms-input-wrapper{width:50%;float:right;margin-bottom:6px;font-size:12px}.llms-multi-input .llms-input-wrapper .llms-input{font-size:12px;padding:5px}
diff --git a/assets/css/builder.css b/assets/css/builder.css
new file mode 100644
index 0000000000..9c85370731
--- /dev/null
+++ b/assets/css/builder.css
@@ -0,0 +1,1555 @@
+@charset "UTF-8";
+body.admin_page_llms-course-builder {
+ background: #fff;
+}
+body.admin_page_llms-course-builder #adminmenumain {
+ display: none;
+}
+body.admin_page_llms-course-builder #wpbody-content {
+ padding-bottom: 0;
+}
+body.admin_page_llms-course-builder #wpfooter {
+ display: none;
+}
+body.admin_page_llms-course-builder #wpcontent, body.admin_page_llms-course-builder #wpfooter {
+ margin-left: 0;
+}
+body.admin_page_llms-course-builder .llms-button-secondary .fa {
+ margin-right: 5px;
+}
+body.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__group {
+ font-size: 16px;
+}
+body.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__option .select2-results__option {
+ padding-left: 2em;
+}
+
+.wrap.lifterlms.llms-builder {
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ padding: 10px;
+ width: calc(100% - 200px);
+ z-index: 3;
+}
+@media only screen and (min-width: 1200px) {
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {
+ width: 560px;
+ }
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ width: calc(100% - 640px);
+ }
+}
+@media only screen and (min-width: 1440px) {
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {
+ width: calc(100% - 780px);
+ }
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ width: 720px;
+ }
+}
+@media only screen and (min-width: 1680px) {
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {
+ width: calc(100% - 1000px);
+ }
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ width: 940px;
+ }
+}
+@media only screen and (max-width: 782px) {
+ .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {
+ position: absolute;
+ top: 0;
+ width: auto;
+ }
+}
+.wrap.lifterlms.llms-builder .llms-headline {
+ display: inline-block;
+ font-weight: 400;
+ margin: 0;
+ padding: 0;
+ -webkit-transition: width 0.3s ease-in-out;
+ transition: width 0.3s ease-in-out;
+ vertical-align: middle;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main {
+ padding: 30px 30px 30px 0;
+ position: relative;
+ width: calc(100% - 450px);
+ z-index: 2;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons {
+ display: inline-block;
+ position: relative;
+ vertical-align: middle;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons button {
+ background: none;
+ color: inherit;
+ border: none;
+ padding: 0;
+ cursor: pointer;
+ outline: inherit;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons-lesson-id {
+ vertical-align: top;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ gap: 15px;
+ position: relative;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header .llms-button-secondary {
+ margin-right: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections {
+ -webkit-box-shadow: 0 0 0 3px transparent;
+ box-shadow: 0 0 0 3px transparent;
+ min-height: 60px;
+ padding: 10px 0;
+ -webkit-transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+ transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease, min-height 0.2s ease;
+ transition: box-shadow 0.6s ease, min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections.dragging {
+ -webkit-box-shadow: 0 0 0 3px #466dd8;
+ box-shadow: 0 0 0 3px #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section {
+ background: #fff;
+ border: 1px solid #efefef;
+ border-radius: 6px;
+ -webkit-box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.08);
+ box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.08);
+ position: relative;
+ margin: 0 0 20px 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 20px 10px 20px 30px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 0px;
+ margin-top: -5px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon {
+ padding: 5px 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-left {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+}
+@media only screen and (min-width: 1200px) {
+ .wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-left {
+ white-space: nowrap;
+ }
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded .llms-lessons {
+ overflow: visible;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected .llms-drag-utility.drag-section {
+ border-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected > .llms-builder-header .llms-headline {
+ font-weight: 400;
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-footer {
+ border-top: 1px solid #efefef;
+ padding: 20px 20px 20px 30px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:first-child:before {
+ top: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:last-child:before {
+ bottom: 55px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded:last-child:before {
+ bottom: 86px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons {
+ -webkit-box-shadow: 0 0 0 3px transparent;
+ box-shadow: 0 0 0 3px transparent;
+ height: 0;
+ margin: 0;
+ padding: 0;
+ -webkit-transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+ transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease, min-height 0.2s ease;
+ transition: box-shadow 0.6s ease, min-height 0.2s ease, -webkit-box-shadow 0.6s ease;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.dragging {
+ -webkit-box-shadow: 0 0 0 3px #466dd8;
+ box-shadow: 0 0 0 3px #466dd8;
+ min-height: 60px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded, .wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded {
+ height: auto;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded li.llms-lesson, .wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded li.llms-lesson {
+ pointer-events: auto;
+ visibility: visible;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson {
+ background: #fff;
+ border-top: 1px solid #efefef;
+ margin: 0;
+ padding: 20px 10px 20px 30px;
+ position: relative;
+ pointer-events: none;
+ visibility: hidden;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected .llms-drag-utility.drag-lesson {
+ border-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected > .llms-builder-header .llms-headline {
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ gap: 15px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-headline {
+ font-weight: 700;
+ margin-left: 10px;
+ cursor: pointer;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ gap: 15px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-left {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 0;
+ margin-top: -5px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon {
+ padding: 5px 10px;
+}
+@media only screen and (min-width: 1200px) {
+ .wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-left {
+ white-space: nowrap;
+ }
+}
+@media only screen and (min-width: 1200px) {
+ .wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header > .llms-builder-header {
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ }
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section .llms-drag-utility {
+ background: #fff;
+ border: 2px solid #ccc;
+ border-radius: 50%;
+ height: 10px;
+ left: 13px;
+ position: absolute;
+ top: 24px;
+ width: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson .llms-drag-utility {
+ height: 6px;
+ left: 14px;
+ top: 25px !important;
+ width: 6px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility,
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility {
+ border-color: #fff;
+ cursor: move;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility:hover:after,
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility:hover:after {
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility:after,
+.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility:after {
+ background: #fff;
+ content: "··\a··\a··";
+ color: #ccc;
+ display: block;
+ font-size: 36px;
+ height: 29px;
+ letter-spacing: -1px;
+ line-height: 8px;
+ left: -7px;
+ position: absolute;
+ text-align: center;
+ top: -12px;
+ width: 23px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-sortable-helper, .wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-draggable-dragging,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-sortable-helper,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-draggable-dragging {
+ border: 1px solid #ccc;
+ background: #fff;
+ -webkit-transform: rotate(2deg);
+ transform: rotate(2deg);
+ visibility: visible !important;
+ z-index: 999;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder {
+ border: 3px dashed #466dd8;
+ background: rgba(70, 109, 216, 0.3);
+ margin: 0 10px;
+ padding: 5px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder:before,
+.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder:before {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility {
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility:after {
+ left: -35px;
+ top: -28px;
+}
+.wrap.lifterlms.llms-builder .llms-input-wrapper {
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container {
+ font-size: inherit;
+ font-family: inherit;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor.ql-blank::before {
+ color: #a0a0a0;
+ left: 8px;
+ right: 8px;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor p {
+ font-size: inherit;
+ line-height: 1;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-tooltip {
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-input,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor {
+ border: none;
+ border-bottom: 2px dotted transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ cursor: text;
+ display: inline-block;
+ font-size: inherit;
+ font-weight: 700;
+ height: auto;
+ line-height: 1;
+ margin: 0 8px;
+ min-width: 60px;
+ padding: 0;
+ -webkit-transition: border 0.2s ease, -webkit-box-shadow 0.2s ease;
+ transition: border 0.2s ease, -webkit-box-shadow 0.2s ease;
+ transition: border 0.2s ease, box-shadow 0.2s ease;
+ transition: border 0.2s ease, box-shadow 0.2s ease, -webkit-box-shadow 0.2s ease;
+}
+.wrap.lifterlms.llms-builder .llms-input:empty:before,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:empty:before {
+ color: #a0a0a0;
+ content: attr(data-placeholder);
+}
+.wrap.lifterlms.llms-builder .llms-input:hover,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:hover {
+ border-bottom-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-input[disabled],
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled] {
+ cursor: not-allowed;
+}
+.wrap.lifterlms.llms-builder .llms-input[disabled]:hover,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled]:hover {
+ border-bottom-color: transparent;
+}
+.wrap.lifterlms.llms-builder .llms-input:focus,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:focus {
+ background: #fff;
+ -webkit-box-shadow: 0 0 0 4px #fff, 0 0 0 6px #466dd8;
+ box-shadow: 0 0 0 4px #fff, 0 0 0 6px #466dd8;
+ border-bottom: none;
+ outline: none;
+}
+.wrap.lifterlms.llms-builder .llms-input b, .wrap.lifterlms.llms-builder .llms-input strong,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor b,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor strong {
+ font-weight: 700;
+}
+.wrap.lifterlms.llms-builder .llms-input.standard,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard {
+ border: 1px solid #e6e6e6;
+ margin: 2px;
+ padding: 5px 3px;
+}
+.wrap.lifterlms.llms-builder .llms-input.standard:hover,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:hover {
+ border-color: #d6d6d6;
+}
+.wrap.lifterlms.llms-builder .llms-input.standard:focus,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:focus {
+ -webkit-box-shadow: 0 0 0 2px #466dd8;
+ box-shadow: 0 0 0 2px #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-input.permalink,
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.permalink {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor {
+ padding: 0 1px;
+}
+.wrap.lifterlms.llms-builder .llms-label {
+ font-weight: 500;
+}
+.wrap.lifterlms.llms-builder .llms-label .fa {
+ color: #aaa;
+ padding-left: 6px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-editor .llms-label {
+ float: left;
+ margin-right: 10px;
+ position: relative;
+ top: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-editor textarea {
+ border: none;
+ padding: 10px;
+ display: block;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image button.llms-add-image {
+ width: 130px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image .llms-image {
+ display: inline-block;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image .llms-image:hover .llms-action-icon {
+ opacity: 1;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image .llms-image .llms-action-icon {
+ color: #fff;
+ font-size: 24px;
+ opacity: 0;
+ padding: 0;
+ position: absolute;
+ -webkit-transition: opacity 0.2s ease;
+ transition: opacity 0.2s ease;
+ right: 3px;
+ top: 1px;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-editable-image .llms-image img {
+ display: block;
+ height: 100px;
+ max-width: 100%;
+ width: auto;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group {
+ background: #f4f4f4;
+ padding: 10px;
+ position: relative;
+ margin: 0 1px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label {
+ min-width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-editable-input,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-editable-input {
+ -webkit-box-flex: 2;
+ -ms-flex: 2;
+ flex: 2;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label--after,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label--after {
+ color: #888;
+ min-width: auto;
+ font-size: 85%;
+ padding-left: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch {
+ display: block;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:before, .wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:before,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch .llms-label,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch .llms-label {
+ width: calc(100% - 34px);
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-image,
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-video,
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-editor,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-image,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-video,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-editor {
+ margin-top: 2px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard {
+ display: block;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.two-digits, .wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.three-digits, .wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.four-digits,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.two-digits,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.three-digits,
+.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.four-digits {
+ display: inline-block;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number .llms-input {
+ color: #888;
+ min-width: 30px;
+ text-align: right;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.two-digits {
+ width: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.three-digits {
+ width: 40px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.four-digits {
+ width: 60px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-number small {
+ color: #888;
+ text-transform: uppercase;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+}
+.wrap.lifterlms.llms-builder .llms-model-settings:before, .wrap.lifterlms.llms-builder .llms-model-settings:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header {
+ border-bottom: 1px solid #efefef;
+ padding: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-up {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-down {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-up {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-down {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-body {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-header:before, .wrap.lifterlms.llms-builder .llms-settings-group-header:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-header:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-title {
+ display: inline-block;
+ font-size: 16px;
+ font-weight: 700;
+ line-height: 1.5;
+ margin: 0 5px;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-toggle {
+ float: right;
+ font-size: 18px;
+ padding: 2px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-group-body {
+ padding: 16px;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ margin: 2px 0;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field,
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:first-child,
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:first-child {
+ margin-left: 0;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:last-child,
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:last-child {
+ margin-right: 0;
+}
+.wrap.lifterlms.llms-builder .llms-settings-row .llms-breaker {
+ margin: 2px 0;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-editable-select {
+ margin: 2px 0;
+}
+.wrap.lifterlms.llms-builder .llms-editable-select .select2-container--default.select2-container--focus .select2-selection--multiple {
+ border-color: #aaa;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio label {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label {
+ display: inline-block;
+ margin: 0 3px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label > span {
+ -webkit-transition: background 0.2s ease;
+ transition: background 0.2s ease;
+ display: inline-block;
+ padding: 3px;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images img {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input:checked + span {
+ background: #466dd8;
+}
+.wrap.lifterlms.llms-builder .settings-field--disabled {
+ opacity: 0.5;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon {
+ color: #666;
+ display: inline-block;
+ font-size: 13px;
+ text-decoration: none;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon:hover {
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon:hover.danger {
+ color: #bb231c;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon.circle {
+ border: 2px solid #aaa;
+ border-radius: 50%;
+ font-size: 9px;
+ height: 8px;
+ line-height: 1;
+ padding: 5px;
+ text-align: center;
+ width: 8px;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover {
+ border-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover.danger {
+ border-color: #bb231c;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ gap: 15px;
+ margin: 10px 0 0 8px;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item {
+ color: #666;
+ font-size: 13px;
+ margin: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active, .wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon {
+ color: #466dd8;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .fa, .wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon .fa {
+ margin-right: 5px;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button {
+ background: none;
+ color: inherit;
+ border: none;
+ padding: 0;
+ cursor: pointer;
+ outline: inherit;
+}
+.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button:hover {
+ text-decoration: underline;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar {
+ background: #e6e6e6;
+ bottom: 0;
+ overflow: hidden;
+ padding: 30px;
+ position: fixed;
+ -webkit-transition: width 0.3s ease-in-out;
+ transition: width 0.3s ease-in-out;
+ top: 32px;
+ right: 0;
+ width: 360px;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul, .wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities li {
+ margin: 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li:last-child {
+ margin-right: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility {
+ background: #efefef;
+ border: 1px solid #ccc;
+ border-radius: 8px;
+ color: inherit;
+ cursor: pointer;
+ display: block;
+ overflow: hidden;
+ padding: 6px 12px;
+ position: relative;
+ text-align: center;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility:hover {
+ background: #fefefe;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility .fa {
+ background: #848484;
+ position: absolute;
+ left: 0;
+ top: 0;
+ padding: 7px;
+ color: #fff;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-sidebar-headline {
+ margin: 0 0 10px;
+ font-size: 22px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list {
+ margin-bottom: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list li {
+ margin-bottom: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utility {
+ color: #444;
+ text-decoration: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button {
+ background: #466dd8;
+ border-radius: 8px;
+ border: none;
+ color: #fff;
+ cursor: pointer;
+ display: block;
+ margin: 0;
+ overflow: hidden;
+ padding: 17px 20px;
+ position: relative;
+ -webkit-transition: background 0.2s ease, color 0.2s ease;
+ transition: background 0.2s ease, color 0.2s ease;
+ text-align: center;
+ width: 100%;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button:hover {
+ background: #2b55cb;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary {
+ background: #efefef;
+ color: #444;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary:hover {
+ background: #fefefe;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary .fa {
+ background: #848484;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button .fa {
+ background: #1c3987;
+ border-radius: 4px 0 0 4px;
+ color: #fff;
+ display: block;
+ font-size: 20px;
+ padding: 15px 20px;
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button[disabled=disabled] {
+ opacity: 0.4;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small {
+ padding: 8px 10px 8px 46px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small .fa {
+ font-size: 15px;
+ padding: 9px 10px;
+ width: 20px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right.small {
+ padding-left: 10px;
+ padding-right: 46px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right .fa {
+ border-radius: 0 4px 4px 0;
+ left: auto;
+ right: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor {
+ height: 100%;
+ min-height: 100%;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav {
+ background-color: #1c3987;
+ margin: 0;
+ padding: 8px 0 0 8px;
+ font-size: 0;
+ margin: -10px -10px 10px -10px;
+ position: relative;
+ z-index: 2;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item {
+ display: inline-block;
+ margin: 0 6px 0 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu:before {
+ border: 8px solid transparent;
+ border-left-color: #cacaca;
+ content: "";
+ position: absolute;
+ top: 11px;
+ left: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu .llms-editor-menu-item:hover > a,
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu .llms-editor-menu-item.active > a {
+ background: #dfdfdf;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item:hover > a {
+ background-color: #466dd8;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > a {
+ background-color: #e6e6e6;
+ color: #466dd8;
+ font-weight: 700;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > a:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > .llms-editor-menu {
+ display: inline-block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item a {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ color: #FFF;
+ display: inline-block;
+ padding: 9px 18px;
+ text-decoration: none;
+ -webkit-transition: background 0.2s ease;
+ transition: background 0.2s ease;
+ font-size: 15px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right {
+ float: right;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right a, .wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right:hover {
+ background: transparent;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab {
+ display: none;
+ height: calc(100% - 90px);
+ overflow: scroll;
+ position: relative;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+ overflow: scroll;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions .llms-quiz-questions {
+ overflow: visible;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save {
+ bottom: 10px;
+ left: 10px;
+ position: absolute;
+ right: 10px;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error {
+ background: #bb231c;
+ border-radius: 4px;
+ color: #fff;
+ display: inline-block;
+ font-style: italic;
+ padding: 5px 15px 7px 25px;
+ margin: 0 0 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error li {
+ margin: 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-save {
+ width: 75%;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-exit {
+ padding-left: 5px;
+ padding-right: 5px;
+ width: 23%;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button {
+ position: relative;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i {
+ position: absolute;
+ left: 10px;
+ top: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i .llms-spinner {
+ border-color: #fff;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status] .llms-status-indicator {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saved] .status--saved {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] {
+ background-color: #f8954f;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] .status--unsaved {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saving] .status--saving {
+ display: block;
+}
+.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=error] .status--error {
+ display: block;
+}
+@media only screen and (max-width: 782px) {
+ .wrap.lifterlms.llms-builder .llms-builder-sidebar {
+ margin-right: 10px;
+ position: relative;
+ top: 0;
+ width: auto;
+ }
+ .wrap.lifterlms.llms-builder .llms-builder-main {
+ padding-right: 10px;
+ width: auto;
+ }
+}
+.wrap.lifterlms.llms-builder .select2-container {
+ z-index: 99999999;
+}
+.wrap.lifterlms.llms-builder .select2-results__option {
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] {
+ background: #466dd8;
+}
+.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] .llms-existing-action {
+ color: #fff;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 5px 5px 5px 0;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info {
+ -webkit-box-flex: 6;
+ -ms-flex: 6;
+ flex: 6;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4, .wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5 {
+ margin: 0;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4 {
+ font-weight: 400;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5 {
+ font-weight: 300;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action {
+ color: #466dd8;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ text-align: center;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action .fa {
+ display: block;
+ font-size: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action small {
+ text-transform: uppercase;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-empty {
+ margin: 100px auto;
+ text-align: center;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-empty p {
+ font-size: 18px;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-empty button.llms-element-button {
+ max-width: 320px;
+ margin: 0 auto;
+}
+.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-model-title {
+ width: calc(100% - 310px);
+}
+.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-quiz-points {
+ float: left;
+ margin-right: 10px;
+ width: 100px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header {
+ background-color: #FFF;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
+ padding: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header:before, .wrap.lifterlms.llms-builder .llms-model-header:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder .llms-model-header:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title {
+ float: left;
+ margin-right: 10px;
+ width: calc(100% - 200px);
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title .llms-input {
+ width: calc(100% - 65px);
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-model-status.llms-switch {
+ float: left;
+ margin-right: 10px;
+ position: relative;
+ text-align: right;
+ top: -2px;
+ width: 100px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons {
+ float: left;
+ position: relative;
+ text-align: right;
+ width: 80px;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .llms-action-icon {
+ margin-left: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .fa {
+ max-width: 15px;
+}
+.wrap.lifterlms.llms-builder .llms-model-header + .llms-model-settings.active {
+ margin-top: -10px;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings {
+ clear: both;
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-model-settings.active {
+ display: block;
+ margin-top: 10px;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin: 0 5px;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:first-child {
+ margin-left: 0;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:last-child {
+ margin-right: 0;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button.llms-show-question-bank {
+ -webkit-box-flex: 2;
+ -ms-flex: 2;
+ flex: 2;
+}
+.wrap.lifterlms.llms-builder .llms-quiz-tools {
+ display: none;
+ width: 100%;
+ position: relative;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank:before, .wrap.lifterlms.llms-builder ul.llms-question-bank:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header {
+ clear: both;
+ padding-top: 20px;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header:first-child {
+ padding-top: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header h4 {
+ font-size: 20px;
+ margin: 10px 5px;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ float: left;
+ margin: 0;
+ padding: 3px;
+ width: 33.3333%;
+ -webkit-transition: opacity 0.3s ease-in-out;
+ transition: opacity 0.3s ease-in-out;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type.filtered {
+ opacity: 0.3;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable {
+ display: block;
+ position: relative;
+ text-decoration: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable .llms-element-button {
+ opacity: 0.5;
+ pointer-events: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions {
+ margin: 10px 3px;
+ padding: 5px;
+ -webkit-transition: -webkit-box-shadow 0.6s ease;
+ transition: -webkit-box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease, -webkit-box-shadow 0.6s ease;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions.dragging {
+ -webkit-box-shadow: 0 0 0 3px #466dd8;
+ box-shadow: 0 0 0 3px #466dd8;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions:empty:before {
+ background: #fff;
+ content: attr(data-empty-msg);
+ display: block;
+ font-size: 18px;
+ margin: 0 auto;
+ padding: 100px 0;
+ text-align: center;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question {
+ background: #fff;
+ margin: 0 0 3px;
+ padding: 15px 12px 10px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question:hover > .llms-builder-header .llms-action-icons {
+ opacity: 1;
+ pointer-events: auto;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions {
+ margin-left: 12px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions .llms-question {
+ border-bottom: 2px solid #e6e6e6;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions:empty:before {
+ content: attr(data-empty-msg);
+ display: block;
+ font-size: 18px;
+ text-align: center;
+ margin: 20px auto;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder.qtype--group {
+ display: none !important;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:before, .wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header > * {
+ float: left;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body {
+ display: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body.active {
+ display: block;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp {
+ background: #466dd8;
+ border-radius: 4px;
+ color: #fff;
+ cursor: move;
+ font-size: 90%;
+ margin-top: -5px;
+ padding: 4px 10px 6px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp small, .wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa {
+ line-height: 1.2;
+ vertical-align: middle;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa {
+ margin-right: 4px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline {
+ width: calc(100% - 110px - 90px - 55px);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline .ql-editor {
+ width: calc(100% - 16px);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-action-icons {
+ width: 110px;
+ opacity: 0;
+ pointer-events: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-points {
+ width: 90px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features {
+ margin: 10px 0 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features:last-child {
+ margin: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features .llms-switch {
+ margin-right: 15px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-editable-video {
+ position: relative;
+ z-index: 1;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-wrapper {
+ background: #f4f4f4;
+ margin: 2px 1px;
+ padding: 10px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header {
+ margin-bottom: 10px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:before, .wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after {
+ content: " ";
+ display: table;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after {
+ clear: both;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header .llms-switch {
+ float: right;
+ text-align: right;
+ width: 260px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices {
+ border: 3px solid #f4f4f4;
+ margin: -3px;
+ padding: 0;
+ -webkit-transition: -webkit-box-shadow 0.6s ease;
+ transition: -webkit-box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease;
+ transition: box-shadow 0.6s ease, -webkit-box-shadow 0.6s ease;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.dragging {
+ -webkit-box-shadow: 0 0 0 3px #466dd8;
+ box-shadow: 0 0 0 3px #466dd8;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.multi-choices li.llms-question-choice .llms-choice-id span {
+ border-radius: 4px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice {
+ margin: 0 0 5px;
+ padding: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice:last-child {
+ margin-bottom: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox] {
+ display: none;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox]:checked + .llms-marker {
+ background: #4d8d3c;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker {
+ border-radius: 50%;
+ background: #d0d0d0;
+ -webkit-box-shadow: inset 0 0 1px #848484;
+ box-shadow: inset 0 0 1px #848484;
+ color: #444;
+ display: inline-block;
+ font-size: 16px;
+ height: 20px;
+ line-height: 20px;
+ padding: 5px;
+ position: relative;
+ text-align: center;
+ -webkit-transition: background 0.1s ease;
+ transition: background 0.1s ease;
+ width: 20px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker .fa {
+ left: 7px;
+ opacity: 0;
+ position: absolute;
+ top: 7px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover b {
+ opacity: 0;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover .fa {
+ opacity: 1;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input-wrapper,
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image {
+ display: inline-block;
+ width: calc(100% - 55px - 35px - 5px);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input {
+ width: calc(100% - 16px);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image {
+ vertical-align: middle;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image img {
+ height: 50px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-action-icons {
+ display: inline-block;
+ opacity: 1;
+ pointer-events: auto;
+ text-align: right;
+ width: 55px;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.llms-sortable-placeholder {
+ border: 3px dashed #466dd8 !important;
+ background: rgba(70, 109, 216, 0.3);
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.ui-sortable-helper {
+ border: 1px solid #ccc;
+ background: #fff;
+ padding: 10px;
+ -webkit-transform: rotate(2deg);
+ transform: rotate(2deg);
+ z-index: 999;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-sortable-helper,
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-draggable-dragging {
+ border: 1px solid #ccc;
+ background: #fff;
+ -webkit-transform: rotate(2deg);
+ transform: rotate(2deg);
+ z-index: 999;
+}
+.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder {
+ border: 3px dashed #466dd8 !important;
+ background: rgba(70, 109, 216, 0.3);
+}
+.wrap.lifterlms.llms-builder .llms-switch {
+ display: inline-block;
+ float: none;
+ width: auto;
+}
+.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox] {
+ display: none;
+}
+.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked + .llms-switch-slider {
+ background: #4d8d3c;
+}
+.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked + .llms-switch-slider:after {
+ -webkit-transform: translateX(14px);
+ transform: translateX(14px);
+}
+.wrap.lifterlms.llms-builder .llms-switch .llms-label {
+ display: inline-block;
+ vertical-align: top;
+}
+.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider {
+ background: #e0e0e0;
+ border-radius: 8px;
+ display: inline-block;
+ height: 16px;
+ margin-top: 2px;
+ position: relative;
+ -webkit-transition: background 0.2s ease;
+ transition: background 0.2s ease;
+ vertical-align: top;
+ width: 30px;
+}
+.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider:after {
+ background: #fff;
+ border-radius: 8px;
+ content: "";
+ display: block;
+ height: 12px;
+ left: 2px;
+ position: relative;
+ -webkit-transition: -webkit-transform 0.2s ease;
+ transition: -webkit-transform 0.2s ease;
+ transition: transform 0.2s ease;
+ transition: transform 0.2s ease, -webkit-transform 0.2s ease;
+ top: 2px;
+ width: 12px;
+}
+
+.llms-multi-input .llms-input-wrapper {
+ width: 50%;
+ float: left;
+ margin-bottom: 6px;
+ font-size: 12px;
+}
+
+.llms-multi-input .llms-input-wrapper .llms-input {
+ font-size: 12px;
+ padding: 5px;
+}
+/*# sourceMappingURL=../maps/css/builder.css.map */
diff --git a/assets/css/builder.min.css b/assets/css/builder.min.css
new file mode 100644
index 0000000000..3f5f57d2da
--- /dev/null
+++ b/assets/css/builder.min.css
@@ -0,0 +1,2 @@
+body.admin_page_llms-course-builder{background:#fff}body.admin_page_llms-course-builder #adminmenumain{display:none}body.admin_page_llms-course-builder #wpbody-content{padding-bottom:0}body.admin_page_llms-course-builder #wpfooter{display:none}body.admin_page_llms-course-builder #wpcontent,body.admin_page_llms-course-builder #wpfooter{margin-left:0}body.admin_page_llms-course-builder .llms-button-secondary .fa{margin-right:5px}body.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__group{font-size:16px}body.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__option .select2-results__option{padding-left:2em}.wrap.lifterlms.llms-builder{margin:0;padding:0;position:relative}.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{padding:10px;width:calc(100% - 200px);z-index:3}@media only screen and (min-width: 1200px){.wrap.lifterlms.llms-builder.editor-active .llms-builder-main{width:560px}.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{width:calc(100% - 640px)}}@media only screen and (min-width: 1440px){.wrap.lifterlms.llms-builder.editor-active .llms-builder-main{width:calc(100% - 780px)}.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{width:720px}}@media only screen and (min-width: 1680px){.wrap.lifterlms.llms-builder.editor-active .llms-builder-main{width:calc(100% - 1000px)}.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{width:940px}}@media only screen and (max-width: 782px){.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar{position:absolute;top:0;width:auto}}.wrap.lifterlms.llms-builder .llms-headline{display:inline-block;font-weight:400;margin:0;padding:0;-webkit-transition:width .3s ease-in-out;transition:width .3s ease-in-out;vertical-align:middle}.wrap.lifterlms.llms-builder .llms-builder-main{padding:30px 30px 30px 0;position:relative;width:calc(100% - 450px);z-index:2}.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons{display:inline-block;position:relative;vertical-align:middle}.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons button{background:none;color:inherit;border:none;padding:0;cursor:pointer;outline:inherit}.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons-lesson-id{vertical-align:top}.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:15px;position:relative;z-index:1}.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header .llms-button-secondary{margin-right:10px}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections{-webkit-box-shadow:0 0 0 3px rgba(0,0,0,0);box-shadow:0 0 0 3px rgba(0,0,0,0);min-height:60px;padding:10px 0;-webkit-transition:min-height .2s ease,-webkit-box-shadow .6s ease;transition:min-height .2s ease,-webkit-box-shadow .6s ease;transition:box-shadow .6s ease,min-height .2s ease;transition:box-shadow .6s ease,min-height .2s ease,-webkit-box-shadow .6s ease}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections.dragging{-webkit-box-shadow:0 0 0 3px #466dd8;box-shadow:0 0 0 3px #466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section{background:#fff;border:1px solid #efefef;border-radius:6px;-webkit-box-shadow:2px 2px 8px rgba(0,0,0,.08);box-shadow:2px 2px 8px rgba(0,0,0,.08);position:relative;margin:0 0 20px 0;padding:0}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:20px 10px 20px 30px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-right{display:-webkit-box;display:-ms-flexbox;display:flex;gap:0px;margin-top:-5px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon{padding:5px 10px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-left{display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px}@media only screen and (min-width: 1200px){.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-right,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-header .llms-action-icons .llms-action-icons-left{white-space:nowrap}}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded .llms-lessons{overflow:visible}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected .llms-drag-utility.drag-section{border-color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected>.llms-builder-header .llms-headline{font-weight:400;color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section>.llms-builder-footer{border-top:1px solid #efefef;padding:20px 20px 20px 30px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:first-child:before{top:30px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:last-child:before{bottom:55px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded:last-child:before{bottom:86px}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons{-webkit-box-shadow:0 0 0 3px rgba(0,0,0,0);box-shadow:0 0 0 3px rgba(0,0,0,0);height:0;margin:0;padding:0;-webkit-transition:min-height .2s ease,-webkit-box-shadow .6s ease;transition:min-height .2s ease,-webkit-box-shadow .6s ease;transition:box-shadow .6s ease,min-height .2s ease;transition:box-shadow .6s ease,min-height .2s ease,-webkit-box-shadow .6s ease}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.dragging{-webkit-box-shadow:0 0 0 3px #466dd8;box-shadow:0 0 0 3px #466dd8;min-height:60px}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded,.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded{height:auto}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded li.llms-lesson,.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded li.llms-lesson{pointer-events:auto;visibility:visible}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson{background:#fff;border-top:1px solid #efefef;margin:0;padding:20px 10px 20px 30px;position:relative;pointer-events:none;visibility:hidden}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected .llms-drag-utility.drag-lesson{border-color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected>.llms-builder-header .llms-headline{color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:15px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-headline{font-weight:700;margin-left:10px;cursor:pointer}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;gap:15px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-left{display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-right{display:-webkit-box;display:-ms-flexbox;display:flex;gap:0;margin-top:-5px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon{padding:5px 10px}@media only screen and (min-width: 1200px){.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-right,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header .llms-action-icons .llms-action-icons-left{white-space:nowrap}}@media only screen and (min-width: 1200px){.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson>.llms-builder-header>.llms-builder-header{-ms-flex-wrap:nowrap;flex-wrap:nowrap}}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section .llms-drag-utility{background:#fff;border:2px solid #ccc;border-radius:50%;height:10px;left:13px;position:absolute;top:24px;width:10px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson .llms-drag-utility{height:6px;left:14px;top:25px !important;width:6px}.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover>.llms-drag-utility,.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover>.llms-drag-utility{border-color:#fff;cursor:move}.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover>.llms-drag-utility:hover:after,.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover>.llms-drag-utility:hover:after{color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover>.llms-drag-utility:after,.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover>.llms-drag-utility:after{background:#fff;content:"··\a··\a··";color:#ccc;display:block;font-size:36px;height:29px;letter-spacing:-1px;line-height:8px;left:-7px;position:absolute;text-align:center;top:-12px;width:23px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-sortable-helper,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-draggable-dragging,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-sortable-helper,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-draggable-dragging{border:1px solid #ccc;background:#fff;-webkit-transform:rotate(2deg);transform:rotate(2deg);visibility:visible !important;z-index:999}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder{border:3px dashed #466dd8;background:rgba(70,109,216,.3);margin:0 10px;padding:5px}.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder:before,.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder:before{display:none}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections>li.llms-lesson.ui-draggable-dragging .llms-drag-utility{position:relative}.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections>li.llms-lesson.ui-draggable-dragging .llms-drag-utility:after{left:-35px;top:-28px}.wrap.lifterlms.llms-builder .llms-input-wrapper{position:relative}.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container{font-size:inherit;font-family:inherit}.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor.ql-blank::before{color:#a0a0a0;left:8px;right:8px}.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor p{font-size:inherit;line-height:1}.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-tooltip{z-index:1}.wrap.lifterlms.llms-builder .llms-input,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor{border:none;border-bottom:2px dotted rgba(0,0,0,0);-webkit-box-shadow:none;box-shadow:none;cursor:text;display:inline-block;font-size:inherit;font-weight:700;height:auto;line-height:1;margin:0 8px;min-width:60px;padding:0;-webkit-transition:border .2s ease,-webkit-box-shadow .2s ease;transition:border .2s ease,-webkit-box-shadow .2s ease;transition:border .2s ease,box-shadow .2s ease;transition:border .2s ease,box-shadow .2s ease,-webkit-box-shadow .2s ease}.wrap.lifterlms.llms-builder .llms-input:empty:before,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:empty:before{color:#a0a0a0;content:attr(data-placeholder)}.wrap.lifterlms.llms-builder .llms-input:hover,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:hover{border-bottom-color:#466dd8}.wrap.lifterlms.llms-builder .llms-input[disabled],.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled]{cursor:not-allowed}.wrap.lifterlms.llms-builder .llms-input[disabled]:hover,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled]:hover{border-bottom-color:rgba(0,0,0,0)}.wrap.lifterlms.llms-builder .llms-input:focus,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:focus{background:#fff;-webkit-box-shadow:0 0 0 4px #fff,0 0 0 6px #466dd8;box-shadow:0 0 0 4px #fff,0 0 0 6px #466dd8;border-bottom:none;outline:none}.wrap.lifterlms.llms-builder .llms-input b,.wrap.lifterlms.llms-builder .llms-input strong,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor b,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor strong{font-weight:700}.wrap.lifterlms.llms-builder .llms-input.standard,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard{border:1px solid #e6e6e6;margin:2px;padding:5px 3px}.wrap.lifterlms.llms-builder .llms-input.standard:hover,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:hover{border-color:#d6d6d6}.wrap.lifterlms.llms-builder .llms-input.standard:focus,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:focus{-webkit-box-shadow:0 0 0 2px #466dd8;box-shadow:0 0 0 2px #466dd8}.wrap.lifterlms.llms-builder .llms-input.permalink,.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.permalink{display:none}.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor{padding:0 1px}.wrap.lifterlms.llms-builder .llms-label{font-weight:500}.wrap.lifterlms.llms-builder .llms-label .fa{color:#aaa;padding-left:6px}.wrap.lifterlms.llms-builder .llms-editable-editor .llms-label{float:left;margin-right:10px;position:relative;top:10px}.wrap.lifterlms.llms-builder .llms-editable-editor textarea{border:none;padding:10px;display:block;width:100%}.wrap.lifterlms.llms-builder .llms-editable-image button.llms-add-image{width:130px}.wrap.lifterlms.llms-builder .llms-editable-image .llms-image{display:inline-block;position:relative}.wrap.lifterlms.llms-builder .llms-editable-image .llms-image:hover .llms-action-icon{opacity:1}.wrap.lifterlms.llms-builder .llms-editable-image .llms-image .llms-action-icon{color:#fff;font-size:24px;opacity:0;padding:0;position:absolute;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;right:3px;top:1px;z-index:1}.wrap.lifterlms.llms-builder .llms-editable-image .llms-image img{display:block;height:100px;max-width:100%;width:auto}.wrap.lifterlms.llms-builder .llms-settings-field,.wrap.lifterlms.llms-builder .llms-editable-toggle-group{background:#f4f4f4;padding:10px;position:relative;margin:0 1px}.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after,.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label,.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label{min-width:100%}.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-editable-input,.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-editable-input{-webkit-box-flex:2;-ms-flex:2;flex:2}.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label--after,.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label--after{color:#888;min-width:auto;font-size:85%;padding-left:10px}.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch{display:block;width:100%}.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:before,.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:before,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after{content:" ";display:table}.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after{clear:both}.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch .llms-label,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch .llms-label{width:calc(100% - 34px)}.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-image,.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-video,.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-editor,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-image,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-video,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-editor{margin-top:2px}.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard{display:block;width:100%}.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.two-digits,.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.three-digits,.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.four-digits,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.two-digits,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.three-digits,.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.four-digits{display:inline-block}.wrap.lifterlms.llms-builder .llms-editable-number .llms-input{color:#888;min-width:30px;text-align:right}.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.two-digits{width:30px}.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.three-digits{width:40px}.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.four-digits{width:60px}.wrap.lifterlms.llms-builder .llms-editable-number small{color:#888;text-transform:uppercase}.wrap.lifterlms.llms-builder .llms-model-settings{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.wrap.lifterlms.llms-builder .llms-model-settings:before,.wrap.lifterlms.llms-builder .llms-model-settings:after{content:" ";display:table}.wrap.lifterlms.llms-builder .llms-model-settings:after{clear:both}.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header{border-bottom:1px solid #efefef;padding:10px}.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-up{display:block}.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-down{display:none}.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-up{display:none}.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-down{display:block}.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-body{display:none}.wrap.lifterlms.llms-builder .llms-settings-group-header:before,.wrap.lifterlms.llms-builder .llms-settings-group-header:after{content:" ";display:table}.wrap.lifterlms.llms-builder .llms-settings-group-header:after{clear:both}.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-title{display:inline-block;font-size:16px;font-weight:700;line-height:1.5;margin:0 5px;padding:0}.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-toggle{float:right;font-size:18px;padding:2px}.wrap.lifterlms.llms-builder .llms-settings-group-body{padding:16px}.wrap.lifterlms.llms-builder .llms-settings-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:2px 0}.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field,.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group{-webkit-box-flex:1;-ms-flex:1;flex:1}.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:first-child,.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:first-child{margin-left:0}.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:last-child,.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:last-child{margin-right:0}.wrap.lifterlms.llms-builder .llms-settings-row .llms-breaker{margin:2px 0;width:100%}.wrap.lifterlms.llms-builder .llms-editable-select{margin:2px 0}.wrap.lifterlms.llms-builder .llms-editable-select .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#aaa}.wrap.lifterlms.llms-builder .llms-editable-radio label{display:block}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input{display:none}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label{display:inline-block;margin:0 3px}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label>span{-webkit-transition:background .2s ease;transition:background .2s ease;display:inline-block;padding:3px}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images img{display:block}.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input:checked+span{background:#466dd8}.wrap.lifterlms.llms-builder .settings-field--disabled{opacity:.5}.wrap.lifterlms.llms-builder .llms-action-icon{color:#666;display:inline-block;font-size:13px;text-decoration:none}.wrap.lifterlms.llms-builder .llms-action-icon:hover{color:#466dd8}.wrap.lifterlms.llms-builder .llms-action-icon:hover.danger{color:#bb231c}.wrap.lifterlms.llms-builder .llms-action-icon.circle{border:2px solid #aaa;border-radius:50%;font-size:9px;height:8px;line-height:1;padding:5px;text-align:center;width:8px}.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover{border-color:#466dd8}.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover.danger{border-color:#bb231c}.wrap.lifterlms.llms-builder ul.llms-info-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:15px;margin:10px 0 0 8px;padding:0}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item{color:#666;font-size:13px;margin:0}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active,.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon{color:#466dd8}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .fa,.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon .fa{margin-right:5px}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button{background:none;color:inherit;border:none;padding:0;cursor:pointer;outline:inherit}.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button:hover{text-decoration:underline}.wrap.lifterlms.llms-builder .llms-builder-sidebar{background:#e6e6e6;bottom:0;overflow:hidden;padding:30px;position:fixed;-webkit-transition:width .3s ease-in-out;transition:width .3s ease-in-out;top:32px;right:0;width:360px;z-index:1}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul,.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities li{margin:0;padding:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul{display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li{-webkit-box-flex:1;-ms-flex:1;flex:1}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li:last-child{margin-right:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility{background:#efefef;border:1px solid #ccc;border-radius:8px;color:inherit;cursor:pointer;display:block;overflow:hidden;padding:6px 12px;position:relative;text-align:center;width:100%}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility:hover{background:#fefefe}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility .fa{background:#848484;position:absolute;left:0;top:0;padding:7px;color:#fff}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-sidebar-headline{margin:0 0 10px;font-size:22px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list{margin-bottom:30px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list li{margin-bottom:10px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utility{color:#444;text-decoration:none}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button{background:#466dd8;border-radius:8px;border:none;color:#fff;cursor:pointer;display:block;margin:0;overflow:hidden;padding:17px 20px;position:relative;-webkit-transition:background .2s ease,color .2s ease;transition:background .2s ease,color .2s ease;text-align:center;width:100%}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button:hover{background:#2b55cb}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary{background:#efefef;color:#444}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary:hover{background:#fefefe}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary .fa{background:#848484}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button .fa{background:#1c3987;border-radius:4px 0 0 4px;color:#fff;display:block;font-size:20px;padding:15px 20px;position:absolute;top:0;left:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button[disabled=disabled]{opacity:.4}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small{padding:8px 10px 8px 46px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small .fa{font-size:15px;padding:9px 10px;width:20px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right.small{padding-left:10px;padding-right:46px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right .fa{border-radius:0 4px 4px 0;left:auto;right:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor{height:100%;min-height:100%;position:relative}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav{background-color:#1c3987;margin:0;padding:8px 0 0 8px;font-size:0;margin:-10px -10px 10px -10px;position:relative;z-index:2}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu{list-style-type:none;margin:0;padding:0;position:relative}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item{display:inline-block;margin:0 6px 0 0;padding:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item>.llms-editor-menu{display:none}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item>.llms-editor-menu:before{border:8px solid rgba(0,0,0,0);border-left-color:#cacaca;content:"";position:absolute;top:11px;left:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item>.llms-editor-menu .llms-editor-menu-item:hover>a,.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item>.llms-editor-menu .llms-editor-menu-item.active>a{background:#dfdfdf}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item:hover>a{background-color:#466dd8}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active>a{background-color:#e6e6e6;color:#466dd8;font-weight:700}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active>a:focus{-webkit-box-shadow:none;box-shadow:none}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active>.llms-editor-menu{display:inline-block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item a{border-top-left-radius:4px;border-top-right-radius:4px;color:#fff;display:inline-block;padding:9px 18px;text-decoration:none;-webkit-transition:background .2s ease;transition:background .2s ease;font-size:15px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right{float:right}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right a,.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right:hover{background:rgba(0,0,0,0)}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab{display:none;height:calc(100% - 90px);overflow:scroll;position:relative;z-index:1}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active{display:block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;overflow:scroll}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions .llms-quiz-questions{overflow:visible}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save{bottom:10px;left:10px;position:absolute;right:10px;z-index:1}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error{background:#bb231c;border-radius:4px;color:#fff;display:inline-block;font-style:italic;padding:5px 15px 7px 25px;margin:0 0 10px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error li{margin:0;padding:0}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-save{width:75%}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-exit{padding-left:5px;padding-right:5px;width:23%}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button{position:relative}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i{position:absolute;left:10px;top:10px}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i .llms-spinner{border-color:#fff}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status] .llms-status-indicator{display:none}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saved] .status--saved{display:block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved]{background-color:#f8954f}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] .status--unsaved{display:block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saving] .status--saving{display:block}.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=error] .status--error{display:block}@media only screen and (max-width: 782px){.wrap.lifterlms.llms-builder .llms-builder-sidebar{margin-right:10px;position:relative;top:0;width:auto}.wrap.lifterlms.llms-builder .llms-builder-main{padding-right:10px;width:auto}}.wrap.lifterlms.llms-builder .select2-container{z-index:99999999}.wrap.lifterlms.llms-builder .select2-results__option{padding:0}.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected]{background:#466dd8}.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] .llms-existing-action{color:#fff}.wrap.lifterlms.llms-builder .llms-existing-lesson-result{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;padding:5px 5px 5px 0}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info{-webkit-box-flex:6;-ms-flex:6;flex:6}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4,.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5{margin:0}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4{font-weight:400}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5{font-weight:300}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action{color:#466dd8;-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action .fa{display:block;font-size:30px}.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action small{text-transform:uppercase}.wrap.lifterlms.llms-builder .llms-quiz-empty{margin:100px auto;text-align:center}.wrap.lifterlms.llms-builder .llms-quiz-empty p{font-size:18px}.wrap.lifterlms.llms-builder .llms-quiz-empty button.llms-element-button{max-width:320px;margin:0 auto}.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-model-title{width:calc(100% - 310px)}.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-quiz-points{float:left;margin-right:10px;width:100px}.wrap.lifterlms.llms-builder .llms-model-header{background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13);padding:10px}.wrap.lifterlms.llms-builder .llms-model-header:before,.wrap.lifterlms.llms-builder .llms-model-header:after{content:" ";display:table}.wrap.lifterlms.llms-builder .llms-model-header:after{clear:both}.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title{float:left;margin-right:10px;width:calc(100% - 200px)}.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title .llms-input{width:calc(100% - 65px)}.wrap.lifterlms.llms-builder .llms-model-header .llms-model-status.llms-switch{float:left;margin-right:10px;position:relative;text-align:right;top:-2px;width:100px}.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons{float:left;position:relative;text-align:right;width:80px;z-index:1}.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .llms-action-icon{margin-left:10px}.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .fa{max-width:15px}.wrap.lifterlms.llms-builder .llms-model-header+.llms-model-settings.active{margin-top:-10px}.wrap.lifterlms.llms-builder .llms-model-settings{clear:both;display:none}.wrap.lifterlms.llms-builder .llms-model-settings.active{display:block;margin-top:10px}.wrap.lifterlms.llms-builder .llms-quiz-footer{display:-webkit-box;display:-ms-flexbox;display:flex}.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button{-webkit-box-flex:1;-ms-flex:1;flex:1;margin:0 5px}.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:first-child{margin-left:0}.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:last-child{margin-right:0}.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button.llms-show-question-bank{-webkit-box-flex:2;-ms-flex:2;flex:2}.wrap.lifterlms.llms-builder .llms-quiz-tools{display:none;width:100%;position:relative}.wrap.lifterlms.llms-builder ul.llms-question-bank{list-style-type:none;margin:0;padding:0}.wrap.lifterlms.llms-builder ul.llms-question-bank:before,.wrap.lifterlms.llms-builder ul.llms-question-bank:after{content:" ";display:table}.wrap.lifterlms.llms-builder ul.llms-question-bank:after{clear:both}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header{clear:both;padding-top:20px}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header:first-child{padding-top:0}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header h4{font-size:20px;margin:10px 5px}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type{-webkit-box-sizing:border-box;box-sizing:border-box;float:left;margin:0;padding:3px;width:33.3333%;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type.filtered{opacity:.3}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable{display:block;position:relative;text-decoration:none}.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable .llms-element-button{opacity:.5;pointer-events:none}.wrap.lifterlms.llms-builder ul.llms-quiz-questions{margin:10px 3px;padding:5px;-webkit-transition:-webkit-box-shadow .6s ease;transition:-webkit-box-shadow .6s ease;transition:box-shadow .6s ease;transition:box-shadow .6s ease, -webkit-box-shadow .6s ease;transition:box-shadow .6s ease,-webkit-box-shadow .6s ease}.wrap.lifterlms.llms-builder ul.llms-quiz-questions.dragging{-webkit-box-shadow:0 0 0 3px #466dd8;box-shadow:0 0 0 3px #466dd8}.wrap.lifterlms.llms-builder ul.llms-quiz-questions:empty:before{background:#fff;content:attr(data-empty-msg);display:block;font-size:18px;margin:0 auto;padding:100px 0;text-align:center}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question{background:#fff;margin:0 0 3px;padding:15px 12px 10px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question:hover>.llms-builder-header .llms-action-icons{opacity:1;pointer-events:auto}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions{margin-left:12px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions .llms-question{border-bottom:2px solid #e6e6e6}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions:empty:before{content:attr(data-empty-msg);display:block;font-size:18px;text-align:center;margin:20px auto}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder.qtype--group{display:none !important}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:before,.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after{content:" ";display:table}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after{clear:both}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header>*{float:left}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body{display:none}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body.active{display:block}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp{background:#466dd8;border-radius:4px;color:#fff;cursor:move;font-size:90%;margin-top:-5px;padding:4px 10px 6px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp small,.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa{line-height:1.2;vertical-align:middle}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa{margin-right:4px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline{width:calc(100% - 110px - 90px - 55px)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline .ql-editor{width:calc(100% - 16px)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-action-icons{width:110px;opacity:0;pointer-events:none}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-points{width:90px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features{margin:10px 0 0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features:last-child{margin:0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features .llms-switch{margin-right:15px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-editable-video{position:relative;z-index:1}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-wrapper{background:#f4f4f4;margin:2px 1px;padding:10px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header{margin-bottom:10px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:before,.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after{content:" ";display:table}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after{clear:both}.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header .llms-switch{float:right;text-align:right;width:260px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices{border:3px solid #f4f4f4;margin:-3px;padding:0;-webkit-transition:-webkit-box-shadow .6s ease;transition:-webkit-box-shadow .6s ease;transition:box-shadow .6s ease;transition:box-shadow .6s ease, -webkit-box-shadow .6s ease;transition:box-shadow .6s ease,-webkit-box-shadow .6s ease}.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.dragging{-webkit-box-shadow:0 0 0 3px #466dd8;box-shadow:0 0 0 3px #466dd8}.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.multi-choices li.llms-question-choice .llms-choice-id span{border-radius:4px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice{margin:0 0 5px;padding:0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice:last-child{margin-bottom:0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox]{display:none}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox]:checked+.llms-marker{background:#4d8d3c}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker{border-radius:50%;background:#d0d0d0;-webkit-box-shadow:inset 0 0 1px #848484;box-shadow:inset 0 0 1px #848484;color:#444;display:inline-block;font-size:16px;height:20px;line-height:20px;padding:5px;position:relative;text-align:center;-webkit-transition:background .1s ease;transition:background .1s ease;width:20px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker .fa{left:7px;opacity:0;position:absolute;top:7px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover b{opacity:0}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover .fa{opacity:1}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input-wrapper,.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image{display:inline-block;width:calc(100% - 55px - 35px - 5px)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input{width:calc(100% - 16px)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image{vertical-align:middle}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image img{height:50px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-action-icons{display:inline-block;opacity:1;pointer-events:auto;text-align:right;width:55px}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.llms-sortable-placeholder{border:3px dashed #466dd8 !important;background:rgba(70,109,216,.3)}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.ui-sortable-helper{border:1px solid #ccc;background:#fff;padding:10px;-webkit-transform:rotate(2deg);transform:rotate(2deg);z-index:999}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-sortable-helper,.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-draggable-dragging{border:1px solid #ccc;background:#fff;-webkit-transform:rotate(2deg);transform:rotate(2deg);z-index:999}.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder{border:3px dashed #466dd8 !important;background:rgba(70,109,216,.3)}.wrap.lifterlms.llms-builder .llms-switch{display:inline-block;float:none;width:auto}.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]{display:none}.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked+.llms-switch-slider{background:#4d8d3c}.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked+.llms-switch-slider:after{-webkit-transform:translateX(14px);transform:translateX(14px)}.wrap.lifterlms.llms-builder .llms-switch .llms-label{display:inline-block;vertical-align:top}.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider{background:#e0e0e0;border-radius:8px;display:inline-block;height:16px;margin-top:2px;position:relative;-webkit-transition:background .2s ease;transition:background .2s ease;vertical-align:top;width:30px}.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider:after{background:#fff;border-radius:8px;content:"";display:block;height:12px;left:2px;position:relative;-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease, -webkit-transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease;top:2px;width:12px}.llms-multi-input .llms-input-wrapper{width:50%;float:left;margin-bottom:6px;font-size:12px}.llms-multi-input .llms-input-wrapper .llms-input{font-size:12px;padding:5px}
+/*# sourceMappingURL=../maps/css/builder.min.css.map */
diff --git a/assets/css/certificates-rtl.css b/assets/css/certificates-rtl.css
new file mode 100644
index 0000000000..a261b4c489
--- /dev/null
+++ b/assets/css/certificates-rtl.css
@@ -0,0 +1,122 @@
+/**
+ * Reset.
+ */
+body {
+ background-color: #fff;
+ background-image: none;
+ margin: 0 auto;
+}
+
+.header, .footer,
+.wrap-header, .wrap-footer,
+.site-header, .site-footer,
+.nav-primary, .primary-nav {
+ display: none;
+}
+
+.llms-certificate-container {
+ margin: 40px auto 0;
+}
+
+/**
+ * Legacy Template.
+ */
+.llms-certificate-container:not(.cert-template-v2) {
+ padding: 0;
+ overflow: hidden;
+}
+.llms-certificate-container:not(.cert-template-v2) .certificate-background {
+ position: relative;
+ z-index: 1;
+ width: 100%;
+ display: block;
+}
+.llms-certificate-container:not(.cert-template-v2) .llms_certificate,
+.llms-certificate-container:not(.cert-template-v2) .llms_my_certificate {
+ margin: 80px;
+ position: relative;
+ z-index: 2;
+}
+.llms-certificate-container:not(.cert-template-v2) h1:first-child {
+ text-align: center;
+}
+
+/**
+ * V2 Template
+ */
+.llms-certificate-wrapper {
+ margin: 0 auto;
+}
+
+.llms-certificate-container.cert-template-v2 {
+ width: 100%;
+ height: 100%;
+ background-size: 100% 100% !important;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-certificate-container.cert-template-v2 .wp-block-columns .wp-block-column > * {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+
+/**
+ * Certificate Actions Footer.
+ */
+.llms-print-certificate {
+ margin-top: 40px;
+ margin-bottom: 40px;
+ text-align: center;
+}
+.llms-print-certificate form {
+ display: inline;
+}
+
+@media print {
+ html, body {
+ -webkit-print-color-adjust: exact !important;
+ print-color-adjust: exact !important;
+ height: 100%;
+ overflow: hidden;
+ }
+ @page {
+ size: auto;
+ }
+ .no-print {
+ display: none;
+ }
+ body * {
+ visibility: hidden !important;
+ background: #fff none;
+ }
+ .site, .site-content {
+ overflow: visible;
+ }
+ header, aside, nav, footer {
+ display: none !important;
+ }
+ .single-llms_my_certificate .container,
+.single-llms_certificate .container {
+ width: 100%;
+ }
+ .llms-certificate-container,
+.llms-certificate-container * {
+ visibility: visible !important;
+ background: transparent none;
+ }
+ .llms-certificate-container:not(.cert-template-v2) {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ margin: 0 auto;
+ background: #fff none;
+ }
+ .llms-certificate-container.cert-template-v2 {
+ margin: 0 auto !important;
+ -webkit-print-color-adjust: exact !important;
+ print-color-adjust: exact !important;
+ -webkit-transform: scale(0.95);
+ transform: scale(0.95);
+ }
+}
diff --git a/assets/css/certificates-rtl.min.css b/assets/css/certificates-rtl.min.css
new file mode 100644
index 0000000000..997c1f2981
--- /dev/null
+++ b/assets/css/certificates-rtl.min.css
@@ -0,0 +1 @@
+body{background-color:#fff;background-image:none;margin:0 auto}.header,.footer,.wrap-header,.wrap-footer,.site-header,.site-footer,.nav-primary,.primary-nav{display:none}.llms-certificate-container{margin:40px auto 0}.llms-certificate-container:not(.cert-template-v2){padding:0;overflow:hidden}.llms-certificate-container:not(.cert-template-v2) .certificate-background{position:relative;z-index:1;width:100%;display:block}.llms-certificate-container:not(.cert-template-v2) .llms_certificate,.llms-certificate-container:not(.cert-template-v2) .llms_my_certificate{margin:80px;position:relative;z-index:2}.llms-certificate-container:not(.cert-template-v2) h1:first-child{text-align:center}.llms-certificate-wrapper{margin:0 auto}.llms-certificate-container.cert-template-v2{width:100%;height:100%;background-size:100% 100% !important;-webkit-box-sizing:border-box;box-sizing:border-box}.llms-certificate-container.cert-template-v2 .wp-block-columns .wp-block-column>*{margin-top:0 !important;margin-bottom:0 !important}.llms-print-certificate{margin-top:40px;margin-bottom:40px;text-align:center}.llms-print-certificate form{display:inline}@media print{html,body{-webkit-print-color-adjust:exact !important;print-color-adjust:exact !important;height:100%;overflow:hidden}@page{size:auto}.no-print{display:none}body *{visibility:hidden !important;background:#fff none}.site,.site-content{overflow:visible}header,aside,nav,footer{display:none !important}.single-llms_my_certificate .container,.single-llms_certificate .container{width:100%}.llms-certificate-container,.llms-certificate-container *{visibility:visible !important;background:rgba(0,0,0,0) none}.llms-certificate-container:not(.cert-template-v2){position:absolute;top:0;right:0;left:0;margin:0 auto;background:#fff none}.llms-certificate-container.cert-template-v2{margin:0 auto !important;-webkit-print-color-adjust:exact !important;print-color-adjust:exact !important;-webkit-transform:scale(0.95);transform:scale(0.95)}}
diff --git a/assets/css/certificates.css b/assets/css/certificates.css
new file mode 100644
index 0000000000..9e822cf762
--- /dev/null
+++ b/assets/css/certificates.css
@@ -0,0 +1,123 @@
+/**
+ * Reset.
+ */
+body {
+ background-color: #fff;
+ background-image: none;
+ margin: 0 auto;
+}
+
+.header, .footer,
+.wrap-header, .wrap-footer,
+.site-header, .site-footer,
+.nav-primary, .primary-nav {
+ display: none;
+}
+
+.llms-certificate-container {
+ margin: 40px auto 0;
+}
+
+/**
+ * Legacy Template.
+ */
+.llms-certificate-container:not(.cert-template-v2) {
+ padding: 0;
+ overflow: hidden;
+}
+.llms-certificate-container:not(.cert-template-v2) .certificate-background {
+ position: relative;
+ z-index: 1;
+ width: 100%;
+ display: block;
+}
+.llms-certificate-container:not(.cert-template-v2) .llms_certificate,
+.llms-certificate-container:not(.cert-template-v2) .llms_my_certificate {
+ margin: 80px;
+ position: relative;
+ z-index: 2;
+}
+.llms-certificate-container:not(.cert-template-v2) h1:first-child {
+ text-align: center;
+}
+
+/**
+ * V2 Template
+ */
+.llms-certificate-wrapper {
+ margin: 0 auto;
+}
+
+.llms-certificate-container.cert-template-v2 {
+ width: 100%;
+ height: 100%;
+ background-size: 100% 100% !important;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-certificate-container.cert-template-v2 .wp-block-columns .wp-block-column > * {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+
+/**
+ * Certificate Actions Footer.
+ */
+.llms-print-certificate {
+ margin-top: 40px;
+ margin-bottom: 40px;
+ text-align: center;
+}
+.llms-print-certificate form {
+ display: inline;
+}
+
+@media print {
+ html, body {
+ -webkit-print-color-adjust: exact !important;
+ print-color-adjust: exact !important;
+ height: 100%;
+ overflow: hidden;
+ }
+ @page {
+ size: auto;
+ }
+ .no-print {
+ display: none;
+ }
+ body * {
+ visibility: hidden !important;
+ background: #fff none;
+ }
+ .site, .site-content {
+ overflow: visible;
+ }
+ header, aside, nav, footer {
+ display: none !important;
+ }
+ .single-llms_my_certificate .container,
+.single-llms_certificate .container {
+ width: 100%;
+ }
+ .llms-certificate-container,
+.llms-certificate-container * {
+ visibility: visible !important;
+ background: transparent none;
+ }
+ .llms-certificate-container:not(.cert-template-v2) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ margin: 0 auto;
+ background: #fff none;
+ }
+ .llms-certificate-container.cert-template-v2 {
+ margin: 0 auto !important;
+ -webkit-print-color-adjust: exact !important;
+ print-color-adjust: exact !important;
+ -webkit-transform: scale(0.95);
+ transform: scale(0.95);
+ }
+}
+/*# sourceMappingURL=../maps/css/certificates.css.map */
diff --git a/assets/css/certificates.min.css b/assets/css/certificates.min.css
new file mode 100644
index 0000000000..317f971da8
--- /dev/null
+++ b/assets/css/certificates.min.css
@@ -0,0 +1,2 @@
+body{background-color:#fff;background-image:none;margin:0 auto}.header,.footer,.wrap-header,.wrap-footer,.site-header,.site-footer,.nav-primary,.primary-nav{display:none}.llms-certificate-container{margin:40px auto 0}.llms-certificate-container:not(.cert-template-v2){padding:0;overflow:hidden}.llms-certificate-container:not(.cert-template-v2) .certificate-background{position:relative;z-index:1;width:100%;display:block}.llms-certificate-container:not(.cert-template-v2) .llms_certificate,.llms-certificate-container:not(.cert-template-v2) .llms_my_certificate{margin:80px;position:relative;z-index:2}.llms-certificate-container:not(.cert-template-v2) h1:first-child{text-align:center}.llms-certificate-wrapper{margin:0 auto}.llms-certificate-container.cert-template-v2{width:100%;height:100%;background-size:100% 100% !important;-webkit-box-sizing:border-box;box-sizing:border-box}.llms-certificate-container.cert-template-v2 .wp-block-columns .wp-block-column>*{margin-top:0 !important;margin-bottom:0 !important}.llms-print-certificate{margin-top:40px;margin-bottom:40px;text-align:center}.llms-print-certificate form{display:inline}@media print{html,body{-webkit-print-color-adjust:exact !important;print-color-adjust:exact !important;height:100%;overflow:hidden}@page{size:auto}.no-print{display:none}body *{visibility:hidden !important;background:#fff none}.site,.site-content{overflow:visible}header,aside,nav,footer{display:none !important}.single-llms_my_certificate .container,.single-llms_certificate .container{width:100%}.llms-certificate-container,.llms-certificate-container *{visibility:visible !important;background:rgba(0,0,0,0) none}.llms-certificate-container:not(.cert-template-v2){position:absolute;top:0;left:0;right:0;margin:0 auto;background:#fff none}.llms-certificate-container.cert-template-v2{margin:0 auto !important;-webkit-print-color-adjust:exact !important;print-color-adjust:exact !important;-webkit-transform:scale(0.95);transform:scale(0.95)}}
+/*# sourceMappingURL=../maps/css/certificates.min.css.map */
diff --git a/assets/css/editor-rtl.css b/assets/css/editor-rtl.css
new file mode 100644
index 0000000000..c429de7bc3
--- /dev/null
+++ b/assets/css/editor-rtl.css
@@ -0,0 +1,37 @@
+.llms-block-empty,
+.llms-block-error {
+ padding: 1em;
+ border: 1px solid #e0e0e0;
+ font-size: 16px;
+}
+
+.llms-block-empty {
+ font-style: italic;
+}
+
+.wp-block .llms-button-primary {
+ text-decoration: none;
+}
+
+.llms-navigation-link-settings .components-panel__row > .components-base-control {
+ width: 100%;
+}
+
+.llms-block-icon {
+ -webkit-transform: scale(0.75);
+ transform: scale(0.75);
+}
+
+.llms-loop-item .llms-video-wrapper {
+ aspect-ratio: 16/9;
+ position: relative;
+}
+.llms-loop-item .llms-video-wrapper iframe {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ right: 0;
+ top: 0;
+ -o-object-fit: cover;
+ object-fit: cover;
+}
diff --git a/assets/css/editor-rtl.min.css b/assets/css/editor-rtl.min.css
new file mode 100644
index 0000000000..46908fdc9e
--- /dev/null
+++ b/assets/css/editor-rtl.min.css
@@ -0,0 +1 @@
+.llms-block-empty,.llms-block-error{padding:1em;border:1px solid #e0e0e0;font-size:16px}.llms-block-empty{font-style:italic}.wp-block .llms-button-primary{text-decoration:none}.llms-navigation-link-settings .components-panel__row>.components-base-control{width:100%}.llms-block-icon{-webkit-transform:scale(0.75);transform:scale(0.75)}.llms-loop-item .llms-video-wrapper{aspect-ratio:16/9;position:relative}.llms-loop-item .llms-video-wrapper iframe{width:100%;height:100%;position:absolute;right:0;top:0;-o-object-fit:cover;object-fit:cover}
diff --git a/assets/css/editor.css b/assets/css/editor.css
new file mode 100644
index 0000000000..e8021d4299
--- /dev/null
+++ b/assets/css/editor.css
@@ -0,0 +1,38 @@
+.llms-block-empty,
+.llms-block-error {
+ padding: 1em;
+ border: 1px solid #e0e0e0;
+ font-size: 16px;
+}
+
+.llms-block-empty {
+ font-style: italic;
+}
+
+.wp-block .llms-button-primary {
+ text-decoration: none;
+}
+
+.llms-navigation-link-settings .components-panel__row > .components-base-control {
+ width: 100%;
+}
+
+.llms-block-icon {
+ -webkit-transform: scale(0.75);
+ transform: scale(0.75);
+}
+
+.llms-loop-item .llms-video-wrapper {
+ aspect-ratio: 16/9;
+ position: relative;
+}
+.llms-loop-item .llms-video-wrapper iframe {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0;
+ top: 0;
+ -o-object-fit: cover;
+ object-fit: cover;
+}
+/*# sourceMappingURL=../maps/css/editor.css.map */
diff --git a/assets/css/editor.min.css b/assets/css/editor.min.css
new file mode 100644
index 0000000000..61f0909e95
--- /dev/null
+++ b/assets/css/editor.min.css
@@ -0,0 +1,2 @@
+.llms-block-empty,.llms-block-error{padding:1em;border:1px solid #e0e0e0;font-size:16px}.llms-block-empty{font-style:italic}.wp-block .llms-button-primary{text-decoration:none}.llms-navigation-link-settings .components-panel__row>.components-base-control{width:100%}.llms-block-icon{-webkit-transform:scale(0.75);transform:scale(0.75)}.llms-loop-item .llms-video-wrapper{aspect-ratio:16/9;position:relative}.llms-loop-item .llms-video-wrapper iframe{width:100%;height:100%;position:absolute;left:0;top:0;-o-object-fit:cover;object-fit:cover}
+/*# sourceMappingURL=../maps/css/editor.min.css.map */
diff --git a/assets/css/lifterlms-rtl.css b/assets/css/lifterlms-rtl.css
new file mode 100644
index 0000000000..fd68a8cb38
--- /dev/null
+++ b/assets/css/lifterlms-rtl.css
@@ -0,0 +1,6677 @@
+@charset "UTF-8";
+.llms-pagination ul:before, .llms-pagination ul:after,
+.llms-form-fields:before,
+.llms-checkout-cols-2:before,
+.llms-access-plans:before,
+.llms-loop-list:before,
+.llms-cols:before,
+.llms-form-fields:after,
+.llms-checkout-cols-2:after,
+.llms-access-plans:after,
+.llms-loop-list:after,
+.llms-cols:after {
+ content: " ";
+ display: table;
+}
+.llms-pagination ul:after,
+.llms-form-fields:after,
+.llms-checkout-cols-2:after,
+.llms-access-plans:after,
+.llms-loop-list:after,
+.llms-cols:after {
+ clear: both;
+}
+
+.llms-cols .llms-col {
+ width: 100%;
+}
+@media all and (min-width: 600px) {
+ .llms-cols [class*=llms-col-] {
+ float: right;
+ }
+}
+
+.llms-flex-cols {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+}
+.llms-flex-cols [class*=llms-col] {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 1 auto;
+ flex: 0 1 auto;
+ width: 100%;
+}
+
+@media all and (min-width: 600px) {
+ .llms-cols .llms-col-1, .llms-flex-cols .llms-col-1 {
+ width: 100%;
+ }
+ .llms-cols .llms-col-2, .llms-flex-cols .llms-col-2 {
+ width: 50%;
+ }
+ .llms-cols .llms-col-3, .llms-flex-cols .llms-col-3 {
+ width: 33.3333333333%;
+ }
+ .llms-cols .llms-col-4, .llms-flex-cols .llms-col-4 {
+ width: 25%;
+ }
+ .llms-cols .llms-col-5, .llms-flex-cols .llms-col-5 {
+ width: 20%;
+ }
+ .llms-cols .llms-col-6, .llms-flex-cols .llms-col-6 {
+ width: 16.6666666667%;
+ }
+ .llms-cols .llms-col-7, .llms-flex-cols .llms-col-7 {
+ width: 14.2857142857%;
+ }
+ .llms-cols .llms-col-8, .llms-flex-cols .llms-col-8 {
+ width: 12.5%;
+ }
+ .llms-cols .llms-col-9, .llms-flex-cols .llms-col-9 {
+ width: 11.1111111111%;
+ }
+ .llms-cols .llms-col-10, .llms-flex-cols .llms-col-10 {
+ width: 10%;
+ }
+ .llms-cols .llms-col-11, .llms-flex-cols .llms-col-11 {
+ width: 9.0909090909%;
+ }
+ .llms-cols .llms-col-12, .llms-flex-cols .llms-col-12 {
+ width: 8.3333333333%;
+ }
+}
+.llms-button-action,
+.llms-button-danger,
+.llms-button-primary,
+.llms-button-secondary {
+ border: none;
+ border-radius: 8px;
+ color: #fefefe;
+ cursor: pointer;
+ display: inline-block;
+ font-size: 18px;
+ font-weight: 700;
+ text-decoration: none;
+ text-shadow: none;
+ line-height: 1;
+ margin: 0;
+ max-width: 100%;
+ padding: 12px 24px;
+ position: relative;
+ -webkit-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+}
+.llms-button-action:disabled,
+.llms-button-danger:disabled,
+.llms-button-primary:disabled,
+.llms-button-secondary:disabled {
+ opacity: 0.5;
+}
+.llms-button-action:hover, .llms-button-action:active,
+.llms-button-danger:hover,
+.llms-button-danger:active,
+.llms-button-primary:hover,
+.llms-button-primary:active,
+.llms-button-secondary:hover,
+.llms-button-secondary:active {
+ color: #fefefe;
+}
+.llms-button-action:focus,
+.llms-button-danger:focus,
+.llms-button-primary:focus,
+.llms-button-secondary:focus {
+ color: #fefefe;
+}
+.llms-button-action.auto,
+.llms-button-danger.auto,
+.llms-button-primary.auto,
+.llms-button-secondary.auto {
+ width: auto;
+}
+.llms-button-action.full,
+.llms-button-danger.full,
+.llms-button-primary.full,
+.llms-button-secondary.full {
+ display: block;
+ text-align: center;
+ width: 100%;
+}
+.llms-button-action.square,
+.llms-button-danger.square,
+.llms-button-primary.square,
+.llms-button-secondary.square {
+ padding: 12px;
+}
+.llms-button-action.small,
+.llms-button-danger.small,
+.llms-button-primary.small,
+.llms-button-secondary.small {
+ font-size: 13px;
+ padding: 8px 14px;
+}
+.llms-button-action.small.square,
+.llms-button-danger.small.square,
+.llms-button-primary.small.square,
+.llms-button-secondary.small.square {
+ padding: 8px;
+}
+.llms-button-action.large,
+.llms-button-danger.large,
+.llms-button-primary.large,
+.llms-button-secondary.large {
+ font-size: 18px;
+ line-height: 1.2;
+ padding: 16px 32px;
+}
+.llms-button-action.large.square,
+.llms-button-danger.large.square,
+.llms-button-primary.large.square,
+.llms-button-secondary.large.square {
+ padding: 16px;
+}
+.llms-button-action.large .fa,
+.llms-button-danger.large .fa,
+.llms-button-primary.large .fa,
+.llms-button-secondary.large .fa {
+ right: -7px;
+ position: relative;
+}
+
+/* Fix for cases where link color overrides the button color */
+a.llms-button-action,
+a.llms-button-danger,
+a.llms-button-primary {
+ color: #fefefe;
+}
+
+.llms-button-primary {
+ background: #466dd8;
+}
+.llms-button-primary:hover, .llms-button-primary.clicked {
+ background: #274eba;
+}
+.llms-button-primary:focus, .llms-button-primary:active {
+ background: #6888df;
+}
+
+.llms-button-secondary {
+ background: #e1e1e1;
+ color: #444;
+}
+.llms-button-secondary:hover {
+ color: #414141;
+ background: #cdcdcd;
+}
+.llms-button-secondary:focus, .llms-button-secondary:active {
+ color: #414141;
+ background: #ebebeb;
+}
+
+/* Fix for cases where link color overrides the button color */
+a.llms-button-secondary {
+ color: #444;
+}
+
+.llms-button-action {
+ background: #c05621;
+}
+.llms-button-action:hover, .llms-button-action.clicked {
+ background: #f67d28;
+}
+.llms-button-action:focus, .llms-button-action:active {
+ background: #faad76;
+}
+
+.llms-button-danger {
+ background: #bb231c;
+}
+.llms-button-danger:hover {
+ background: #981c17;
+}
+.llms-button-danger:focus, .llms-button-danger:active {
+ background: #cd261f;
+}
+
+.llms-button-outline {
+ background: transparent;
+ border: 3px solid #1D2327;
+ border-radius: 8px;
+ color: #1D2327;
+ cursor: pointer;
+ font-size: 16px;
+ font-weight: 700;
+ text-decoration: none;
+ text-shadow: none;
+ line-height: 1;
+ margin: 0;
+ max-width: 100%;
+ padding: 12px 24px;
+ position: relative;
+ -webkit-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+}
+.llms-button-outline:disabled {
+ opacity: 0.5;
+}
+.llms-button-outline:hover, .llms-button-outline:active {
+ color: #1D2327;
+}
+.llms-button-outline:focus {
+ color: #1D2327;
+}
+.llms-button-outline.auto {
+ width: auto;
+}
+.llms-button-outline.full {
+ display: block;
+ text-align: center;
+ width: 100%;
+}
+.llms-button-outline.square {
+ padding: 12px;
+}
+
+.llms-course-continue-button {
+ display: inline-block;
+}
+
+.llms-donut {
+ background-color: #f1f1f1;
+ background-image: none;
+ border-radius: 50%;
+ color: #466dd8;
+ height: 200px;
+ overflow: hidden;
+ position: relative;
+ width: 200px;
+}
+.llms-donut:before, .llms-donut:after {
+ content: " ";
+ display: table;
+}
+.llms-donut:after {
+ clear: both;
+}
+.llms-donut svg {
+ overflow: visible !important;
+ pointer-events: none;
+ width: 100%;
+}
+.llms-donut svg path {
+ fill: none;
+ stroke-width: 35px;
+ stroke: #466dd8;
+}
+.llms-donut.mini {
+ height: 36px;
+ width: 36px;
+}
+.llms-donut.mini .percentage {
+ font-size: 10px;
+}
+.llms-donut.small {
+ height: 100px;
+ width: 100px;
+}
+.llms-donut.small .percentage {
+ font-size: 18px;
+}
+.llms-donut.medium {
+ height: 130px;
+ width: 130px;
+}
+.llms-donut.medium .percentage {
+ font-size: 26px;
+}
+.llms-donut.large {
+ height: 260px;
+ width: 260px;
+}
+.llms-donut.large .percentage {
+ font-size: 48px;
+}
+.llms-donut .inside {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background: #fff;
+ border-radius: 50%;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ height: 80%;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ right: 50%;
+ position: absolute;
+ text-align: center;
+ -webkit-transform: translate(50%, -50%);
+ transform: translate(50%, -50%);
+ width: 80%;
+ top: 50%;
+ z-index: 3;
+}
+.llms-donut .percentage {
+ line-height: 1.2;
+ font-size: 34px;
+}
+.llms-donut .caption {
+ font-size: 75%;
+}
+
+.lifterlms [data-tip],
+.lifterlms [data-title-default],
+.lifterlms [data-title-active],
+.llms-metabox [data-tip],
+.llms-metabox [data-title-default],
+.llms-metabox [data-title-active],
+.llms-mb-container [data-tip],
+.llms-mb-container [data-title-default],
+.llms-mb-container [data-title-active],
+.llms-quiz-wrapper [data-tip],
+.llms-quiz-wrapper [data-title-default],
+.llms-quiz-wrapper [data-title-active] {
+ position: relative;
+}
+.lifterlms [data-tip].tip--top-right:before,
+.lifterlms [data-title-default].tip--top-right:before,
+.lifterlms [data-title-active].tip--top-right:before,
+.llms-metabox [data-tip].tip--top-right:before,
+.llms-metabox [data-title-default].tip--top-right:before,
+.llms-metabox [data-title-active].tip--top-right:before,
+.llms-mb-container [data-tip].tip--top-right:before,
+.llms-mb-container [data-title-default].tip--top-right:before,
+.llms-mb-container [data-title-active].tip--top-right:before,
+.llms-quiz-wrapper [data-tip].tip--top-right:before,
+.llms-quiz-wrapper [data-title-default].tip--top-right:before,
+.llms-quiz-wrapper [data-title-active].tip--top-right:before {
+ bottom: 100%;
+ right: -10px;
+}
+.lifterlms [data-tip].tip--top-right:hover:before,
+.lifterlms [data-title-default].tip--top-right:hover:before,
+.lifterlms [data-title-active].tip--top-right:hover:before,
+.llms-metabox [data-tip].tip--top-right:hover:before,
+.llms-metabox [data-title-default].tip--top-right:hover:before,
+.llms-metabox [data-title-active].tip--top-right:hover:before,
+.llms-mb-container [data-tip].tip--top-right:hover:before,
+.llms-mb-container [data-title-default].tip--top-right:hover:before,
+.llms-mb-container [data-title-active].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before {
+ bottom: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--top-right:after,
+.lifterlms [data-title-default].tip--top-right:after,
+.lifterlms [data-title-active].tip--top-right:after,
+.llms-metabox [data-tip].tip--top-right:after,
+.llms-metabox [data-title-default].tip--top-right:after,
+.llms-metabox [data-title-active].tip--top-right:after,
+.llms-mb-container [data-tip].tip--top-right:after,
+.llms-mb-container [data-title-default].tip--top-right:after,
+.llms-mb-container [data-title-active].tip--top-right:after,
+.llms-quiz-wrapper [data-tip].tip--top-right:after,
+.llms-quiz-wrapper [data-title-default].tip--top-right:after,
+.llms-quiz-wrapper [data-title-active].tip--top-right:after {
+ border-top-color: #444;
+ right: 6px;
+ top: 0;
+}
+.lifterlms [data-tip].tip--top-right:hover:after,
+.lifterlms [data-title-default].tip--top-right:hover:after,
+.lifterlms [data-title-active].tip--top-right:hover:after,
+.llms-metabox [data-tip].tip--top-right:hover:after,
+.llms-metabox [data-title-default].tip--top-right:hover:after,
+.llms-metabox [data-title-active].tip--top-right:hover:after,
+.llms-mb-container [data-tip].tip--top-right:hover:after,
+.llms-mb-container [data-title-default].tip--top-right:hover:after,
+.llms-mb-container [data-title-active].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after {
+ top: -6px;
+}
+.lifterlms [data-tip].tip--top-left:before,
+.lifterlms [data-title-default].tip--top-left:before,
+.lifterlms [data-title-active].tip--top-left:before,
+.llms-metabox [data-tip].tip--top-left:before,
+.llms-metabox [data-title-default].tip--top-left:before,
+.llms-metabox [data-title-active].tip--top-left:before,
+.llms-mb-container [data-tip].tip--top-left:before,
+.llms-mb-container [data-title-default].tip--top-left:before,
+.llms-mb-container [data-title-active].tip--top-left:before,
+.llms-quiz-wrapper [data-tip].tip--top-left:before,
+.llms-quiz-wrapper [data-title-default].tip--top-left:before,
+.llms-quiz-wrapper [data-title-active].tip--top-left:before {
+ bottom: 100%;
+ left: -10px;
+}
+.lifterlms [data-tip].tip--top-left:hover:before,
+.lifterlms [data-title-default].tip--top-left:hover:before,
+.lifterlms [data-title-active].tip--top-left:hover:before,
+.llms-metabox [data-tip].tip--top-left:hover:before,
+.llms-metabox [data-title-default].tip--top-left:hover:before,
+.llms-metabox [data-title-active].tip--top-left:hover:before,
+.llms-mb-container [data-tip].tip--top-left:hover:before,
+.llms-mb-container [data-title-default].tip--top-left:hover:before,
+.llms-mb-container [data-title-active].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before {
+ bottom: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--top-left:after,
+.lifterlms [data-title-default].tip--top-left:after,
+.lifterlms [data-title-active].tip--top-left:after,
+.llms-metabox [data-tip].tip--top-left:after,
+.llms-metabox [data-title-default].tip--top-left:after,
+.llms-metabox [data-title-active].tip--top-left:after,
+.llms-mb-container [data-tip].tip--top-left:after,
+.llms-mb-container [data-title-default].tip--top-left:after,
+.llms-mb-container [data-title-active].tip--top-left:after,
+.llms-quiz-wrapper [data-tip].tip--top-left:after,
+.llms-quiz-wrapper [data-title-default].tip--top-left:after,
+.llms-quiz-wrapper [data-title-active].tip--top-left:after {
+ border-top-color: #444;
+ left: 6px;
+ top: 0;
+}
+.lifterlms [data-tip].tip--top-left:hover:after,
+.lifterlms [data-title-default].tip--top-left:hover:after,
+.lifterlms [data-title-active].tip--top-left:hover:after,
+.llms-metabox [data-tip].tip--top-left:hover:after,
+.llms-metabox [data-title-default].tip--top-left:hover:after,
+.llms-metabox [data-title-active].tip--top-left:hover:after,
+.llms-mb-container [data-tip].tip--top-left:hover:after,
+.llms-mb-container [data-title-default].tip--top-left:hover:after,
+.llms-mb-container [data-title-active].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after {
+ top: -6px;
+}
+.lifterlms [data-tip].tip--bottom-left:before,
+.lifterlms [data-title-default].tip--bottom-left:before,
+.lifterlms [data-title-active].tip--bottom-left:before,
+.llms-metabox [data-tip].tip--bottom-left:before,
+.llms-metabox [data-title-default].tip--bottom-left:before,
+.llms-metabox [data-title-active].tip--bottom-left:before,
+.llms-mb-container [data-tip].tip--bottom-left:before,
+.llms-mb-container [data-title-default].tip--bottom-left:before,
+.llms-mb-container [data-title-active].tip--bottom-left:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:before {
+ top: 100%;
+ left: -10px;
+}
+.lifterlms [data-tip].tip--bottom-left:hover:before,
+.lifterlms [data-title-default].tip--bottom-left:hover:before,
+.lifterlms [data-title-active].tip--bottom-left:hover:before,
+.llms-metabox [data-tip].tip--bottom-left:hover:before,
+.llms-metabox [data-title-default].tip--bottom-left:hover:before,
+.llms-metabox [data-title-active].tip--bottom-left:hover:before,
+.llms-mb-container [data-tip].tip--bottom-left:hover:before,
+.llms-mb-container [data-title-default].tip--bottom-left:hover:before,
+.llms-mb-container [data-title-active].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before {
+ top: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--bottom-left:after,
+.lifterlms [data-title-default].tip--bottom-left:after,
+.lifterlms [data-title-active].tip--bottom-left:after,
+.llms-metabox [data-tip].tip--bottom-left:after,
+.llms-metabox [data-title-default].tip--bottom-left:after,
+.llms-metabox [data-title-active].tip--bottom-left:after,
+.llms-mb-container [data-tip].tip--bottom-left:after,
+.llms-mb-container [data-title-default].tip--bottom-left:after,
+.llms-mb-container [data-title-active].tip--bottom-left:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:after {
+ border-bottom-color: #444;
+ left: 6px;
+ bottom: 0;
+}
+.lifterlms [data-tip].tip--bottom-left:hover:after,
+.lifterlms [data-title-default].tip--bottom-left:hover:after,
+.lifterlms [data-title-active].tip--bottom-left:hover:after,
+.llms-metabox [data-tip].tip--bottom-left:hover:after,
+.llms-metabox [data-title-default].tip--bottom-left:hover:after,
+.llms-metabox [data-title-active].tip--bottom-left:hover:after,
+.llms-mb-container [data-tip].tip--bottom-left:hover:after,
+.llms-mb-container [data-title-default].tip--bottom-left:hover:after,
+.llms-mb-container [data-title-active].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after {
+ bottom: -6px;
+}
+.lifterlms [data-tip].tip--bottom-right:before,
+.lifterlms [data-title-default].tip--bottom-right:before,
+.lifterlms [data-title-active].tip--bottom-right:before,
+.llms-metabox [data-tip].tip--bottom-right:before,
+.llms-metabox [data-title-default].tip--bottom-right:before,
+.llms-metabox [data-title-active].tip--bottom-right:before,
+.llms-mb-container [data-tip].tip--bottom-right:before,
+.llms-mb-container [data-title-default].tip--bottom-right:before,
+.llms-mb-container [data-title-active].tip--bottom-right:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:before {
+ top: 100%;
+ right: -10px;
+}
+.lifterlms [data-tip].tip--bottom-right:hover:before,
+.lifterlms [data-title-default].tip--bottom-right:hover:before,
+.lifterlms [data-title-active].tip--bottom-right:hover:before,
+.llms-metabox [data-tip].tip--bottom-right:hover:before,
+.llms-metabox [data-title-default].tip--bottom-right:hover:before,
+.llms-metabox [data-title-active].tip--bottom-right:hover:before,
+.llms-mb-container [data-tip].tip--bottom-right:hover:before,
+.llms-mb-container [data-title-default].tip--bottom-right:hover:before,
+.llms-mb-container [data-title-active].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before {
+ top: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--bottom-right:after,
+.lifterlms [data-title-default].tip--bottom-right:after,
+.lifterlms [data-title-active].tip--bottom-right:after,
+.llms-metabox [data-tip].tip--bottom-right:after,
+.llms-metabox [data-title-default].tip--bottom-right:after,
+.llms-metabox [data-title-active].tip--bottom-right:after,
+.llms-mb-container [data-tip].tip--bottom-right:after,
+.llms-mb-container [data-title-default].tip--bottom-right:after,
+.llms-mb-container [data-title-active].tip--bottom-right:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:after {
+ border-bottom-color: #444;
+ right: 6px;
+ bottom: 0;
+}
+.lifterlms [data-tip].tip--bottom-right:hover:after,
+.lifterlms [data-title-default].tip--bottom-right:hover:after,
+.lifterlms [data-title-active].tip--bottom-right:hover:after,
+.llms-metabox [data-tip].tip--bottom-right:hover:after,
+.llms-metabox [data-title-default].tip--bottom-right:hover:after,
+.llms-metabox [data-title-active].tip--bottom-right:hover:after,
+.llms-mb-container [data-tip].tip--bottom-right:hover:after,
+.llms-mb-container [data-title-default].tip--bottom-right:hover:after,
+.llms-mb-container [data-title-active].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after {
+ bottom: -6px;
+}
+.lifterlms [data-tip]:before,
+.lifterlms [data-title-default]:before,
+.lifterlms [data-title-active]:before,
+.llms-metabox [data-tip]:before,
+.llms-metabox [data-title-default]:before,
+.llms-metabox [data-title-active]:before,
+.llms-mb-container [data-tip]:before,
+.llms-mb-container [data-title-default]:before,
+.llms-mb-container [data-title-active]:before,
+.llms-quiz-wrapper [data-tip]:before,
+.llms-quiz-wrapper [data-title-default]:before,
+.llms-quiz-wrapper [data-title-active]:before {
+ background: #444;
+ border-radius: 4px;
+ color: #fff;
+ font-size: 13px;
+ line-height: 1.2;
+ padding: 8px;
+ max-width: 300px;
+ width: -webkit-max-content;
+ width: -moz-max-content;
+ width: max-content;
+}
+.lifterlms [data-tip]:after,
+.lifterlms [data-title-default]:after,
+.lifterlms [data-title-active]:after,
+.llms-metabox [data-tip]:after,
+.llms-metabox [data-title-default]:after,
+.llms-metabox [data-title-active]:after,
+.llms-mb-container [data-tip]:after,
+.llms-mb-container [data-title-default]:after,
+.llms-mb-container [data-title-active]:after,
+.llms-quiz-wrapper [data-tip]:after,
+.llms-quiz-wrapper [data-title-default]:after,
+.llms-quiz-wrapper [data-title-active]:after {
+ content: "";
+ border: 6px solid transparent;
+ height: 0;
+ width: 0;
+}
+.lifterlms [data-tip]:before, .lifterlms [data-tip]:after,
+.lifterlms [data-title-default]:before,
+.lifterlms [data-title-default]:after,
+.lifterlms [data-title-active]:before,
+.lifterlms [data-title-active]:after,
+.llms-metabox [data-tip]:before,
+.llms-metabox [data-tip]:after,
+.llms-metabox [data-title-default]:before,
+.llms-metabox [data-title-default]:after,
+.llms-metabox [data-title-active]:before,
+.llms-metabox [data-title-active]:after,
+.llms-mb-container [data-tip]:before,
+.llms-mb-container [data-tip]:after,
+.llms-mb-container [data-title-default]:before,
+.llms-mb-container [data-title-default]:after,
+.llms-mb-container [data-title-active]:before,
+.llms-mb-container [data-title-active]:after,
+.llms-quiz-wrapper [data-tip]:before,
+.llms-quiz-wrapper [data-tip]:after,
+.llms-quiz-wrapper [data-title-default]:before,
+.llms-quiz-wrapper [data-title-default]:after,
+.llms-quiz-wrapper [data-title-active]:before,
+.llms-quiz-wrapper [data-title-active]:after {
+ opacity: 0;
+ -webkit-transition: all 0.2s 0.1s ease;
+ transition: all 0.2s 0.1s ease;
+ position: absolute;
+ pointer-events: none;
+ visibility: hidden;
+}
+.lifterlms [data-tip]:hover:before, .lifterlms [data-tip]:hover:after,
+.lifterlms [data-title-default]:hover:before,
+.lifterlms [data-title-default]:hover:after,
+.lifterlms [data-title-active]:hover:before,
+.lifterlms [data-title-active]:hover:after,
+.llms-metabox [data-tip]:hover:before,
+.llms-metabox [data-tip]:hover:after,
+.llms-metabox [data-title-default]:hover:before,
+.llms-metabox [data-title-default]:hover:after,
+.llms-metabox [data-title-active]:hover:before,
+.llms-metabox [data-title-active]:hover:after,
+.llms-mb-container [data-tip]:hover:before,
+.llms-mb-container [data-tip]:hover:after,
+.llms-mb-container [data-title-default]:hover:before,
+.llms-mb-container [data-title-default]:hover:after,
+.llms-mb-container [data-title-active]:hover:before,
+.llms-mb-container [data-title-active]:hover:after,
+.llms-quiz-wrapper [data-tip]:hover:before,
+.llms-quiz-wrapper [data-tip]:hover:after,
+.llms-quiz-wrapper [data-title-default]:hover:before,
+.llms-quiz-wrapper [data-title-default]:hover:after,
+.llms-quiz-wrapper [data-title-active]:hover:before,
+.llms-quiz-wrapper [data-title-active]:hover:after {
+ opacity: 1;
+ -webkit-transition: all 0 0.1s ease;
+ transition: all 0 0.1s ease;
+ visibility: visible;
+ z-index: 99999999;
+}
+.lifterlms [data-tip]:before,
+.llms-metabox [data-tip]:before,
+.llms-mb-container [data-tip]:before,
+.llms-quiz-wrapper [data-tip]:before {
+ content: attr(data-tip);
+}
+.lifterlms [data-tip].active:before,
+.llms-metabox [data-tip].active:before,
+.llms-mb-container [data-tip].active:before,
+.llms-quiz-wrapper [data-tip].active:before {
+ content: attr(data-tip-active);
+}
+
+.llms-membership-image {
+ display: block;
+ margin: 0 auto;
+}
+
+.llms-course-image {
+ display: block;
+ margin: 0 auto;
+ max-width: 100%;
+}
+
+.llms-featured-image {
+ display: block;
+ margin: 0 auto;
+}
+
+.llms-image-thumb {
+ width: 150px;
+}
+
+.llms-video-wrapper .center-video {
+ height: auto;
+ max-width: 100%;
+ overflow: hidden;
+ position: relative;
+ padding-top: 56.25%;
+ text-align: center;
+}
+.llms-video-wrapper .center-video > .wp-video,
+.llms-video-wrapper .center-video .fluid-width-video-wrapper,
+.llms-video-wrapper .center-video iframe, .llms-video-wrapper .center-video object, .llms-video-wrapper .center-video embed {
+ height: 100%;
+ right: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.llms-video-wrapper .center-video > .wp-video {
+ width: 100% !important;
+}
+.llms-video-wrapper .center-video .fluid-width-video-wrapper {
+ padding-top: 0 !important;
+}
+
+.clear {
+ clear: both;
+ width: 100%;
+}
+
+.llms-featured-image {
+ text-align: center;
+}
+
+#main-content .llms-payment-options p {
+ margin: 0;
+ font-size: 16px;
+}
+
+.llms-option {
+ display: block;
+ position: relative;
+ margin: 20px 0;
+ padding-right: 40px;
+ font-size: 16px;
+}
+.llms-option label {
+ cursor: pointer;
+ position: static;
+}
+
+.llms-option:first-child {
+ margin-top: 0;
+}
+
+.llms-option:last-child {
+ margin-bottom: 0;
+}
+
+#main-content .llms-option:last-child {
+ margin-bottom: 0;
+}
+
+.llms-option input[type=radio] {
+ display: block;
+ position: absolute;
+ top: 3px;
+ right: 0;
+ z-index: 0;
+}
+
+.llms-option input[type=radio] {
+ display: inline-block;
+}
+
+.llms-option input[type=radio] + label span.llms-radio {
+ display: none;
+}
+
+.llms-option input[type=radio] + label span.llms-radio {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ z-index: 20;
+ position: absolute;
+ top: 0;
+ right: -2px;
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ border-radius: 50%;
+ cursor: pointer;
+ vertical-align: middle;
+ -webkit-box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.5) 0 0 0 1px;
+ box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.5) 0 0 0 1px;
+ background: #efefef;
+ background-image: radial-gradient(ellipse at center, #bb231c 0%, #bb231c 40%, #efefef 45%);
+ background-repeat: no-repeat;
+ -webkit-transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+}
+
+.llms-option input[type=radio]:checked + label span.llms-radio {
+ -webkit-transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+}
+
+.llms-option input[type=radio] + label span.llms-radio {
+ background-position: -24px 0;
+}
+
+.llms-option input[type=radio]:checked + label span.llms-radio {
+ background-position: 100% 0;
+}
+
+.llms-option input[type=submit] {
+ border: none;
+ background: #bb231c;
+ color: #fff;
+ font-size: 20px;
+ padding: 10px 0;
+ border-radius: 3px;
+ cursor: pointer;
+ width: 100%;
+}
+
+.llms-styled-text {
+ padding: 14px 0;
+}
+
+.llms-notice-box {
+ border-radius: 3px;
+ z-index: 10;
+ margin: 10px 0;
+ padding: 15px 20px;
+ border: 1px solid #ccc;
+ list-style-type: none;
+ width: 100%;
+ overflow: auto;
+}
+.llms-notice-box input[type=text] {
+ height: auto;
+}
+.llms-notice-box .col-1-1 {
+ width: 100%;
+}
+.llms-notice-box .col-1-1 input[type=text] {
+ width: 100%;
+}
+.llms-notice-box .col-1-2 {
+ width: 50%;
+ float: right;
+}
+@media screen and (max-width: 768px) {
+ .llms-notice-box .col-1-2 {
+ width: 100%;
+ }
+}
+.llms-notice-box .col-1-3 {
+ width: 33%;
+ float: right;
+ margin-left: 10px;
+}
+.llms-notice-box .col-1-4 {
+ width: 25%;
+ float: right;
+ margin-left: 10px;
+}
+@media screen and (max-width: 768px) {
+ .llms-notice-box .col-1-4 {
+ width: 100%;
+ }
+}
+.llms-notice-box .col-1-6 {
+ width: 16.6%;
+ float: right;
+ margin-left: 10px;
+}
+.llms-notice-box .col-1-8 {
+ width: 11%;
+ float: left;
+}
+.llms-notice-box .llms-pad-right {
+ padding-left: 10px;
+}
+@media screen and (max-width: 768px) {
+ .llms-notice-box .llms-pad-right {
+ padding-left: 0;
+ }
+}
+
+input[type=text].cc_cvv,
+#cc_cvv {
+ margin-left: 0;
+ width: 23%;
+ float: left;
+}
+
+.llms-clear-box {
+ border-radius: 3px;
+ z-index: 10;
+ margin: 10px 0;
+ padding: 15px 20px;
+ list-style-type: none;
+ width: 100%;
+ overflow: auto;
+}
+
+.llms-price-label {
+ font-weight: normal;
+}
+
+.llms-final-price {
+ font-weight: bold;
+ float: left;
+}
+
+.llms-center-content {
+ text-align: center;
+}
+
+.llms-input-text {
+ background-color: #fff;
+ border: 1px solid #ddd;
+ color: #333;
+ font-size: 18px;
+ font-weight: 300;
+ padding: 16px;
+ width: 100%;
+}
+
+.llms-price {
+ margin-bottom: 0;
+ font-weight: bold;
+}
+
+.llms-price-loop {
+ margin-bottom: 0;
+ font-weight: bold;
+}
+
+.courses .entry {
+ padding: 0;
+}
+
+.list-view .site-content .llms-course-list .hentry, .list-view .site-content .llms-membership-list .hentry {
+ border-top: 0;
+ padding-top: 0;
+}
+
+.llms-content {
+ width: 100%;
+}
+
+.llms-lesson-button-wrapper {
+ width: 100%;
+ display: block;
+ clear: both;
+ text-align: center;
+}
+
+.llms-template-wrapper {
+ width: 100%;
+ display: block;
+ clear: both;
+}
+
+.llms-button-wrapper {
+ width: 100%;
+ display: block;
+ clear: both;
+ text-align: center;
+}
+
+.llms-styled-select {
+ border: 1px solid #ccc;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border-radius: 3px;
+ overflow: hidden;
+ position: relative;
+}
+
+.llms-styled-select, .llms-styled-select select {
+ width: 100%;
+}
+
+select:focus {
+ outline: none;
+}
+
+.llms-styled-select select {
+ height: 34px;
+ padding: 5px 5px 5px 0;
+ background: transparent;
+ border: none;
+ -webkit-appearance: none;
+ font-size: 16px;
+ color: #444444;
+}
+
+@-moz-document url-prefix() {
+ .--ms-styled-select select {
+ width: 110%;
+ }
+}
+.llms-styled-select .fa-sort-desc {
+ position: absolute;
+ top: 0;
+ left: 12px;
+ font-size: 24px;
+ color: #ccc;
+}
+
+select::-ms-expand {
+ display: none;
+}
+
+_:-o-prefocus .llms-styled-select, .selector .llms-styled-select {
+ background: none;
+}
+
+.llms-form-item-wrapper {
+ margin-bottom: 1em;
+}
+
+/* Circle Graph */
+.llms-progress-circle {
+ position: relative;
+ width: 200px;
+ height: 200px;
+ float: right;
+}
+
+.llms-progress-circle-count {
+ top: 27%;
+ position: absolute;
+ width: 94%;
+ text-align: center;
+ color: #666;
+ font-size: 44px;
+}
+
+.llms-progress-circle svg {
+ position: absolute;
+ width: 200px;
+ height: 200px;
+}
+
+.llms-progress-circle circle {
+ fill: transparent;
+}
+
+svg .llms-background-circle {
+ fill: transparent;
+ stroke-width: 10px;
+ stroke: #f1f2f1;
+ stroke-dasharray: 430;
+}
+
+svg .llms-animated-circle {
+ fill: transparent;
+ stroke-width: 10px;
+ stroke: #e5554e;
+ stroke-dasharray: 430;
+ stroke-dashoffset: 410;
+}
+
+.llms-widget-syllabus .llms-lesson.current-lesson .lesson-title {
+ font-weight: 700;
+}
+.llms-widget-syllabus .section-header {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 5px;
+}
+.llms-widget-syllabus .section-header .llms-collapse-caret {
+ text-align: right;
+ width: 14px;
+}
+.llms-widget-syllabus .llms-lesson-complete, .llms-widget-syllabus .lesson-complete-placeholder {
+ font-size: 18px;
+ margin-left: 5px;
+ color: #ccc;
+}
+.llms-widget-syllabus .llms-lesson-complete.done, .llms-widget-syllabus .lesson-complete-placeholder.done {
+ color: #466dd8;
+}
+.llms-widget-syllabus .section-title {
+ font-weight: bold;
+}
+.llms-widget-syllabus .lesson-title a {
+ text-decoration: underline;
+}
+.llms-widget-syllabus .lesson-title.done a {
+ color: #666;
+ text-decoration: line-through;
+}
+.llms-widget-syllabus ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-widget-syllabus ul li {
+ list-style-type: none;
+ margin: 0 0 10px 0;
+}
+.llms-widget-syllabus ul li ul {
+ margin: 0 0 15px 0;
+}
+.llms-widget-syllabus ul li ul li {
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin: 0 0 10px 0;
+ padding: 0;
+}
+
+.llms-remove-coupon {
+ float: left;
+}
+
+/*.llms-lesson-link-locked, .llms-lesson-link-locked:hover {
+ background: #f1f1f1;
+ display: block;
+ color: #a6a6a6;
+ min-height: 85px;
+ padding: 15px;
+ text-decoration: none;
+ position: relative;
+}*/
+.llms-lesson-preview.is-complete .llms-lesson-link-locked {
+ padding-right: 75px;
+}
+
+.llms-lesson-tooltip {
+ display: none;
+ position: absolute;
+ color: #000000;
+ background-color: #c0c0c0;
+ padding: 0.25em;
+ border-radius: 2px;
+ z-index: 100;
+ top: 0;
+ right: 50%;
+ text-align: center;
+ -webkit-transform: translateX(50%) translateY(-100%);
+ transform: translateX(50%) translateY(-100%);
+}
+
+/* arrows - :after */
+.llms-lesson-tooltip:after {
+ content: "";
+ width: 0;
+ height: 0;
+ border-top: 8px solid #c0c0c0;
+ border-right: 8px solid transparent;
+ border-left: 8px solid transparent;
+ position: absolute;
+ bottom: -8px;
+ right: 50%;
+ -webkit-transform: translateX(50%);
+ transform: translateX(50%);
+}
+
+.llms-lesson-tooltip.active {
+ display: inline-block;
+}
+
+.llms-favorite-wrapper {
+ cursor: pointer;
+}
+.llms-favorite-wrapper .fa-heart {
+ color: #EF476F;
+}
+
+.llms-has-favorite .llms-parent-course-link {
+ display: inline-block;
+ margin-bottom: 20px;
+}
+.llms-has-favorite .llms-parent-course-link + .llms-favorite-wrapper {
+ float: left;
+ margin: 0;
+}
+
+.llms-syllabus-wrapper .llms-has-favorite {
+ text-align: right;
+}
+.llms-syllabus-wrapper .llms-has-favorite .llms-favorite-wrapper {
+ display: inline-block;
+}
+
+.llms-loop-list {
+ list-style: none;
+ margin: 0 -10px;
+ padding: 0;
+}
+@media all and (min-width: 600px) {
+ .llms-loop-list.cols-1 .llms-loop-item {
+ width: 100%;
+ }
+ .llms-loop-list.cols-2 .llms-loop-item {
+ width: 50%;
+ }
+ .llms-loop-list.cols-3 .llms-loop-item {
+ width: 33.3333333333%;
+ }
+ .llms-loop-list.cols-4 .llms-loop-item {
+ width: 25%;
+ }
+ .llms-loop-list.cols-5 .llms-loop-item {
+ width: 20%;
+ }
+ .llms-loop-list.cols-6 .llms-loop-item {
+ width: 16.6666666667%;
+ }
+}
+
+.llms-loop-item {
+ float: right;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+
+.llms-loop-item-content {
+ background: #fefefe;
+ border: 1px solid #dedede;
+ border-radius: 6px;
+ overflow: hidden;
+ padding-bottom: 15px;
+ margin: 10px;
+}
+.llms-loop-item-content .llms-loop-link {
+ color: #010101;
+ display: block;
+ text-decoration: none;
+}
+.llms-loop-item-content .llms-loop-link:visited {
+ color: #010101;
+}
+.llms-loop-item-content .llms-featured-image {
+ display: block;
+ max-width: 100%;
+}
+.llms-loop-item-content .llms-loop-title {
+ color: #010101;
+ margin: 15px 0;
+}
+.llms-loop-item-content .llms-loop-title:hover {
+ color: #466dd8;
+}
+.llms-loop-item-content .llms-meta,
+.llms-loop-item-content .llms-author,
+.llms-loop-item-content .llms-loop-title {
+ padding: 0 15px;
+}
+.llms-loop-item-content .llms-meta,
+.llms-loop-item-content .llms-author {
+ color: #444;
+ display: block;
+ font-size: 14px;
+ margin-bottom: 10px;
+}
+.llms-loop-item-content .llms-meta:last-child,
+.llms-loop-item-content .llms-author:last-child {
+ margin-bottom: 0;
+}
+.llms-loop-item-content .llms-author {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 5px;
+}
+.llms-loop-item-content .llms-featured-img-wrap {
+ overflow: hidden;
+}
+.llms-loop-item-content p {
+ margin-bottom: 0;
+}
+.llms-loop-item-content .llms-progress {
+ margin: 0;
+ height: 0.4em;
+}
+.llms-loop-item-content .llms-progress .progress__indicator {
+ display: none;
+}
+.llms-loop-item-content .llms-progress .llms-progress-bar {
+ background-color: #f6f6f6;
+ left: 0;
+ top: 0;
+}
+
+.llms-meta-info {
+ margin: 40px 0;
+}
+.llms-meta-info .llms-meta-title {
+ margin: 0;
+}
+.llms-meta-info .llms-meta p {
+ margin-bottom: 0;
+}
+.llms-meta-info .llms-meta span {
+ font-weight: 700;
+}
+
+.llms-course-progress {
+ margin: 40px auto;
+ max-width: 480px;
+ text-align: center;
+}
+
+.llms-syllabus-wrapper {
+ margin: 20px 0;
+ text-align: right;
+}
+.llms-syllabus-wrapper .llms-section-title {
+ margin: 40px 0 10px;
+}
+.llms-syllabus-wrapper .llms-section-title + .llms-lesson-preview {
+ border-top: 1px solid #dedede;
+}
+
+.llms-lesson-preview {
+ border-left: 1px solid #dedede;
+ border-bottom: 1px solid #dedede;
+ border-right: 1px solid #dedede;
+ display: block;
+ margin: 0;
+ max-width: 100%;
+ position: relative;
+}
+.llms-lesson-preview .llms-lesson-link {
+ background: #fefefe;
+ color: #010101;
+ display: block;
+ padding: 15px;
+ text-decoration: none;
+ -webkit-transition: background-color 0.3s ease;
+ transition: background-color 0.3s ease;
+}
+.llms-lesson-preview .llms-lesson-link:hover {
+ background: #eaeaea;
+}
+.llms-lesson-preview .llms-lesson-link:visited {
+ color: #212121;
+}
+.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked {
+ background: #EFEFEF;
+ color: #666;
+}
+.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked:hover {
+ background: #dedede;
+}
+.llms-lesson-preview .llms-lesson-link .llms-lesson-preview-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: reverse;
+ -ms-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+}
+.llms-lesson-preview .llms-lesson-thumbnail {
+ margin-bottom: 15px;
+}
+.llms-lesson-preview .llms-lesson-thumbnail img {
+ display: block;
+ height: auto;
+ width: 100%;
+}
+.llms-lesson-preview .llms-lesson-title {
+ font-weight: 700;
+ margin: 0 auto 5px;
+}
+.llms-lesson-preview .llms-lesson-title:last-child {
+ margin-bottom: 0;
+}
+.llms-lesson-preview .llms-lesson-excerpt {
+ margin-top: 5px;
+}
+.llms-lesson-preview .llms-lesson-excerpt p {
+ margin: 0 0 10px 0;
+ padding: 0;
+}
+.llms-lesson-preview .llms-lesson-excerpt p:last-of-type {
+ margin: 0;
+}
+.llms-lesson-preview .llms-main {
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.llms-lesson-preview .llms-extra {
+ min-width: 50px;
+ text-align: left;
+}
+.llms-lesson-preview .llms-lesson-counter,
+.llms-lesson-preview .llms-free-lesson-svg,
+.llms-lesson-preview .llms-lesson-complete,
+.llms-lesson-preview .llms-lesson-complete-placeholder {
+ display: block;
+}
+.llms-lesson-preview.is-free .llms-lesson-complete, .llms-lesson-preview.is-complete .llms-lesson-complete {
+ color: #466dd8;
+}
+.llms-lesson-preview.is-complete .llms-lesson-title:not(.llms-student-dashboard .llms-lesson-title):not(.llms-course-navigation .llms-lesson-title) {
+ text-decoration: line-through;
+}
+.llms-lesson-preview .llms-icon-free {
+ background: #466dd8;
+ border-radius: 6px;
+ color: #fefefe;
+ display: inline-block;
+ font-size: 14px;
+ font-weight: bold;
+ line-height: 1;
+ padding: 5px 8px 4px;
+ white-space: nowrap;
+}
+.llms-lesson-preview.is-incomplete .llms-lesson-complete {
+ color: #cacaca;
+}
+.llms-lesson-preview .llms-lesson-counter {
+ font-size: 16px;
+ margin-bottom: 5px;
+}
+.llms-lesson-preview .llms-free-lesson-svg {
+ fill: currentColor;
+ height: 23px;
+ width: 50px;
+}
+
+.llms-course-navigation {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 20px;
+}
+.llms-course-navigation .llms-prev-lesson,
+.llms-course-navigation .llms-next-lesson,
+.llms-course-navigation .llms-back-to-course {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.llms-course-navigation .llms-prev-lesson + .llms-back-to-course {
+ text-align: left;
+}
+.llms-course-navigation .llms-next-lesson .llms-lesson-preview .llms-lesson-link {
+ text-align: left;
+}
+.llms-course-navigation .llms-lesson-preview {
+ border: 1px solid #dedede;
+}
+.llms-course-navigation .llms-lesson-link {
+ display: block;
+}
+
+/* progress bar */
+.llms-progress {
+ clear: both;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: reverse;
+ -ms-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+ position: relative;
+ height: 1em;
+ width: 100%;
+ margin: 15px 0;
+}
+
+.llms-progress .llms-progress-bar {
+ background-color: #dedede;
+ position: relative;
+ height: 0.4em;
+ top: 0.3em;
+ width: 100%;
+}
+
+.llms-progress .progress-bar-complete {
+ background-color: #ef476f;
+ height: 100%;
+}
+
+.progress__indicator {
+ float: left;
+ text-align: left;
+ height: 1em;
+ line-height: 1em;
+ margin-right: 5px;
+ white-space: nowrap;
+}
+
+.llms-author .name {
+ margin-right: 5px;
+}
+.llms-author .label {
+ margin-right: 5px;
+}
+.llms-author .avatar {
+ border-radius: 50%;
+}
+.llms-author .bio {
+ margin-top: 5px;
+}
+
+.llms-instructor-info {
+ margin: 40px 0;
+}
+.llms-instructor-info .llms-meta-title {
+ margin: 0;
+}
+.llms-instructor-info .llms-instructors .llms-col:first-child .llms-author {
+ margin-right: 0;
+}
+.llms-instructor-info .llms-instructors .llms-col:last-child .llms-author {
+ margin-left: 0;
+}
+.llms-instructor-info .llms-instructors .llms-author {
+ background: #fefefe;
+ border: 1px solid #dedede;
+ border-top: 4px solid #466dd8;
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ color: #010101;
+ text-align: center;
+ margin: 45px 0 0;
+ padding: 0 20px 20px;
+}
+.llms-instructor-info .llms-instructors .llms-author .avatar {
+ background: #466dd8;
+ border: 4px solid #466dd8;
+ display: block;
+ margin: -35px auto 10px;
+}
+.llms-instructor-info .llms-instructors .llms-author .llms-author-info {
+ display: block;
+}
+.llms-instructor-info .llms-instructors .llms-author .llms-author-info.name {
+ font-weight: 700;
+}
+.llms-instructor-info .llms-instructors .llms-author .llms-author-info.label {
+ font-size: 85%;
+}
+.llms-instructor-info .llms-instructors .llms-author .llms-author-info.bio {
+ font-size: 90%;
+ margin-bottom: 0;
+}
+
+.llms_review {
+ margin: 20px 0px;
+ padding: 10px;
+}
+.llms_review h5 {
+ font-size: 17px;
+ margin: 3px 0px;
+}
+.llms_review h6 {
+ font-size: 13px;
+}
+.llms_review p {
+ font-size: 15px;
+}
+
+.review_box [type=text] {
+ margin: 10px 0px;
+}
+.review_box h5 {
+ color: red;
+ display: none;
+}
+.review_box + .thank_you_box {
+ display: none;
+}
+
+.llms-notice {
+ background: rgba(70, 109, 216, 0.3);
+ border-color: #466dd8;
+ border-style: solid;
+ border-width: 1px;
+ border-radius: 6px;
+ padding: 15px;
+ margin-bottom: 40px;
+}
+.llms-notice a {
+ color: inherit;
+}
+.llms-notice p:last-child, .llms-notice ul:last-child {
+ margin-bottom: 0;
+}
+.llms-notice li {
+ list-style-type: none;
+}
+.llms-notice.llms-debug {
+ background: rgba(202, 202, 202, 0.3);
+ border-color: #cacaca;
+}
+.llms-notice.llms-error {
+ background: rgba(187, 35, 28, 0.15);
+ border-color: #bb231c;
+}
+.llms-notice.llms-success {
+ background: rgba(77, 141, 60, 0.15);
+ border-color: #4d8d3c;
+}
+
+.entry-content .llms-notice {
+ margin: 0 0 40px;
+}
+.entry-content .llms-notice li {
+ list-style-type: none;
+}
+
+ul.llms-achievements-loop,
+.lifterlms ul.llms-achievements-loop,
+ul.llms-certificates-loop,
+.lifterlms ul.llms-certificates-loop {
+ list-style-type: none;
+ margin: 0 -10px;
+ padding: 0;
+}
+ul.llms-achievements-loop:before, ul.llms-achievements-loop:after,
+.lifterlms ul.llms-achievements-loop:before,
+.lifterlms ul.llms-achievements-loop:after,
+ul.llms-certificates-loop:before,
+ul.llms-certificates-loop:after,
+.lifterlms ul.llms-certificates-loop:before,
+.lifterlms ul.llms-certificates-loop:after {
+ content: " ";
+ display: table;
+}
+ul.llms-achievements-loop:after,
+.lifterlms ul.llms-achievements-loop:after,
+ul.llms-certificates-loop:after,
+.lifterlms ul.llms-certificates-loop:after {
+ clear: both;
+}
+ul.llms-achievements-loop li.llms-achievement-loop-item,
+ul.llms-achievements-loop li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop li.llms-certificate-loop-item,
+ul.llms-certificates-loop li.llms-achievement-loop-item,
+ul.llms-certificates-loop li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop li.llms-certificate-loop-item {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: block;
+ float: right;
+ list-style-type: none;
+ margin: 0;
+ padding: 10px;
+ width: 100%;
+}
+@media all and (min-width: 600px) {
+ ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item {
+ width: 100%;
+ }
+ ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item {
+ width: 50%;
+ }
+ ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item {
+ width: 33.3333333333%;
+ }
+ ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item {
+ width: 25%;
+ }
+ ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item {
+ width: 20%;
+ }
+}
+
+.llms-achievement,
+.llms-certificate {
+ background: #fefefe;
+ border: none;
+ border-radius: 12px;
+ color: #010101;
+ display: block;
+ padding: 20px 0;
+ text-decoration: none;
+ width: 100%;
+}
+.llms-achievement:hover,
+.llms-certificate:hover {
+ background: #eaeaea;
+}
+.llms-achievement .llms-achievement-img,
+.llms-certificate .llms-achievement-img {
+ display: block;
+ margin: 0 auto;
+ max-width: 80%;
+}
+.llms-achievement .llms-achievement-title,
+.llms-certificate .llms-achievement-title {
+ color: #010101;
+ font-size: 16px;
+ margin: 0;
+ padding: 10px;
+ text-align: center;
+}
+.llms-achievement .llms-certificate-title,
+.llms-certificate .llms-certificate-title {
+ color: #010101;
+ font-size: 16px;
+ margin: 0;
+ padding: 0 0 10px;
+}
+.llms-achievement .llms-achievement-info,
+.llms-achievement .llms-achievement-date,
+.llms-certificate .llms-achievement-info,
+.llms-certificate .llms-achievement-date {
+ display: none;
+}
+.llms-achievement .llms-achievement-content,
+.llms-certificate .llms-achievement-content {
+ padding: 20px;
+}
+.llms-achievement .llms-achievement-content:empty,
+.llms-certificate .llms-achievement-content:empty {
+ padding: 0;
+}
+.llms-achievement .llms-achievement-content *:last-child,
+.llms-certificate .llms-achievement-content *:last-child {
+ margin-bottom: 0;
+}
+
+.llms-certificate {
+ border: 4px double #dedede;
+ padding: 20px 10px;
+ background: #fefefe;
+ text-align: center;
+}
+.llms-certificate:hover {
+ background: #fefefe;
+ border-color: #eaeaea;
+}
+
+.llms-achievement-modal .llms-achievement {
+ background: #fff;
+}
+.llms-achievement-modal .llms-achievement-info {
+ display: block;
+}
+.llms-achievement-modal .llms-achievement-title {
+ display: none;
+}
+
+.llms-notification {
+ background: #fefefe;
+ -webkit-box-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;
+ box-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;
+ border-top: 4px solid #466dd8;
+ color: #010101;
+ opacity: 0;
+ padding: 12px;
+ position: fixed;
+ left: -800px;
+ top: 24px;
+ -webkit-transition: opacity 0.4s ease-in-out, left 0.4s ease-in-out;
+ transition: opacity 0.4s ease-in-out, left 0.4s ease-in-out;
+ visibility: hidden;
+ width: auto;
+ z-index: 9999999;
+}
+.llms-notification:before, .llms-notification:after {
+ content: " ";
+ display: table;
+}
+.llms-notification:after {
+ clear: both;
+}
+.llms-notification.visible {
+ right: 12px;
+ opacity: 1;
+ left: 12px;
+ -webkit-transition: opacity 0.4s ease-in-out, left 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
+ transition: opacity 0.4s ease-in-out, left 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
+ transition: opacity 0.4s ease-in-out, left 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, transform 0.2s ease-in-out;
+ transition: opacity 0.4s ease-in-out, left 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
+ visibility: visible;
+}
+.llms-notification.visible:hover .llms-notification-dismiss {
+ opacity: 1;
+}
+.llms-notification .llms-notification-content {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.llms-notification .llms-notification-main {
+ -ms-flex-item-align: start;
+ align-self: flex-start;
+ -webkit-box-flex: 4;
+ -ms-flex: 4;
+ flex: 4;
+ -webkit-box-ordinal-group: 3;
+ -ms-flex-order: 2;
+ order: 2;
+}
+.llms-notification .llms-notification-title {
+ color: #010101;
+ font-size: 18px;
+ margin: 0;
+}
+.llms-notification .llms-notification-body {
+ font-size: 14px;
+ line-height: 1.4;
+}
+.llms-notification .llms-notification-body p, .llms-notification .llms-notification-body li {
+ font-size: inherit;
+}
+.llms-notification .llms-notification-body p {
+ margin-bottom: 8px;
+}
+.llms-notification .llms-notification-body p img {
+ max-width: 100%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert {
+ background: #f6f6f6;
+ border: 1px solid #d0d0d0;
+ -webkit-box-shadow: inset 0 0 0 3px #fefefe, inset 0 0 0 4px #dedede;
+ box-shadow: inset 0 0 0 3px #fefefe, inset 0 0 0 4px #dedede;
+ padding: 16px 16px 24px;
+ margin-top: 12px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert-title {
+ font-size: 16px;
+ font-weight: 700;
+ margin: 12px auto;
+ text-align: center;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body {
+ width: 100%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(1) {
+ width: 65%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(2) {
+ width: 35%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(3) {
+ width: 85%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(4) {
+ width: 75%;
+ margin-top: 18px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(5) {
+ width: 70%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(6) {
+ margin-right: 12px;
+ margin-bottom: -24px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(7) {
+ width: 65%;
+ margin-left: 12px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-line {
+ border-radius: 2px;
+ height: 8px;
+ background: #b0b0b0;
+ background-image: -webkit-gradient(linear, right top, left top, from(#b0b0b0), color-stop(20%, #a0a0a0), color-stop(40%, #b0b0b0), to(#b0b0b0));
+ background-image: linear-gradient(to left, #b0b0b0 0%, #a0a0a0 20%, #b0b0b0 40%, #b0b0b0 100%);
+ background-repeat: no-repeat;
+ margin: 4px auto;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-dot {
+ background: #b0b0b0;
+ border-radius: 50%;
+ display: inline-block;
+ content: "";
+ height: 24px;
+ width: 24px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert p {
+ margin-bottom: 0;
+}
+.llms-notification .llms-notification-aside {
+ -ms-flex-item-align: start;
+ align-self: flex-start;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin-left: 12px;
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1;
+}
+.llms-notification .llms-notification-icon {
+ display: block;
+ max-width: 64px;
+}
+.llms-notification .llms-notification-footer {
+ border-top: 1px solid #e5e5e5;
+ font-size: 12px;
+ margin-top: 12px;
+ padding: 6px 6px 0;
+ text-align: left;
+}
+.llms-notification .llms-notification-footer a {
+ color: #010101;
+}
+.llms-notification .llms-notification-dismiss {
+ color: #bb231c;
+ cursor: pointer;
+ font-size: 22px;
+ position: absolute;
+ left: 10px;
+ top: 8px;
+ -webkit-transition: opacity 0.4s ease-in-out;
+ transition: opacity 0.4s ease-in-out;
+}
+
+.llms-sd-notification-center .llms-notification-list,
+.llms-sd-notification-center .llms-notification-list-item {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-sd-notification-center .llms-notification-list-item:hover .llms-notification {
+ background: #fcfcfc;
+}
+.llms-sd-notification-center .llms-notification {
+ opacity: 1;
+ border-top: 1px solid #e5e5e5;
+ right: auto;
+ padding: 24px;
+ position: relative;
+ left: auto;
+ top: auto;
+ visibility: visible;
+ width: auto;
+}
+.llms-sd-notification-center .llms-notification .llms-notification-aside {
+ max-width: 64px;
+}
+.llms-sd-notification-center .llms-notification .llms-notification-footer {
+ border: none;
+ padding: 0;
+ text-align: right;
+}
+.llms-sd-notification-center .llms-notification .llms-progress {
+ display: none !important;
+}
+.llms-sd-notification-center .llms-notification .llms-notification-date {
+ color: #515151;
+ float: right;
+ margin-left: 6px;
+}
+.llms-sd-notification-center .llms-notification .llms-mini-cert {
+ margin: 0 auto;
+ max-width: 380px;
+}
+
+@media all and (min-width: 480px) {
+ .llms-notification {
+ left: -800px;
+ width: 360px;
+ }
+ .llms-notification.visible {
+ right: auto;
+ left: 24px;
+ }
+ .llms-notification .llms-notification-dismiss {
+ opacity: 0;
+ }
+}
+.llms-pagination ul {
+ list-style-type: none;
+ margin: 40px 0;
+ padding: 0;
+}
+.llms-pagination ul li {
+ float: right;
+}
+.llms-pagination ul li a {
+ border-bottom: 0;
+ text-decoration: none;
+}
+.llms-pagination ul li .page-numbers {
+ padding: 0.5em;
+ text-decoration: underline;
+}
+.llms-pagination ul li .page-numbers.current {
+ text-decoration: none;
+}
+
+.llms-tooltip {
+ background: #2a2a2a;
+ border-radius: 4px;
+ color: #fff;
+ font-size: 14px;
+ line-height: 1.2;
+ opacity: 0;
+ top: -20px;
+ padding: 8px 12px;
+ right: 50%;
+ position: absolute;
+ pointer-events: none;
+ -webkit-transform: translateX(50%);
+ transform: translateX(50%);
+ -webkit-transition: opacity 0.2s ease, top 0.2s ease;
+ transition: opacity 0.2s ease, top 0.2s ease;
+ max-width: 320px;
+}
+.llms-tooltip.show {
+ top: -28px;
+ opacity: 1;
+}
+.llms-tooltip:after {
+ bottom: -8px;
+ border-top: 8px solid #2a2a2a;
+ border-right: 8px solid transparent;
+ border-left: 8px solid transparent;
+ content: "";
+ height: 0;
+ right: 50%;
+ position: absolute;
+ -webkit-transform: translateX(50%);
+ transform: translateX(50%);
+ width: 0;
+}
+
+.webui-popover-title {
+ font-size: initial;
+ font-weight: initial;
+ line-height: initial;
+}
+
+.webui-popover-inverse .webui-popover-inner .close {
+ color: #fff;
+ opacity: 0.6;
+ text-shadow: none;
+}
+.webui-popover-inverse .webui-popover-inner .close:hover {
+ opacity: 0.8;
+}
+.webui-popover-inverse .webui-popover-content a {
+ color: #fff;
+ text-decoration: underline;
+}
+.webui-popover-inverse .webui-popover-content a:hover {
+ text-decoration: none;
+}
+
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question {
+ background: #efefef;
+ border-radius: 6px;
+ margin: 0 0 15px;
+ position: relative;
+ list-style-type: none;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {
+ color: inherit;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 10px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 15px 15px 15px 35px;
+ text-decoration: none;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect {
+ background: rgba(192, 86, 33, 0.2);
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon {
+ background-color: #c05621;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {
+ background: rgba(77, 141, 60, 0.15);
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {
+ background-color: #4d8d3c;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {
+ background: rgba(187, 35, 28, 0.15);
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {
+ background-color: #bb231c;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question pre {
+ overflow: auto;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {
+ font-size: 22px;
+ margin: 0;
+ line-height: 1.4;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {
+ line-height: 1.4;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {
+ position: absolute;
+ left: -12px;
+ top: -2px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon {
+ color: rgba(255, 255, 255, 0.65);
+ border-radius: 50%;
+ font-size: 30px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ width: 40px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {
+ display: none;
+ padding: 0 15px 15px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {
+ font-weight: 700;
+ margin: 0 0 10px;
+ padding: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers {
+ margin: 0;
+ padding: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {
+ padding: 0;
+ margin: 0 30px 0 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child {
+ list-style-type: none;
+ margin-right: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {
+ height: auto;
+ max-width: 200px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section {
+ border-top: 2px solid rgba(255, 255, 255, 0.5);
+ margin-top: 20px;
+ padding-top: 20px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child {
+ border-top: none;
+ margin-top: 0;
+ padding-top: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {
+ display: inline-block;
+ list-style-type: none;
+ margin: 0;
+ padding: 5px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {
+ opacity: 0.5;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {
+ font-style: italic;
+ font-weight: normal;
+}
+.single-llms_quiz .llms-return {
+ margin-bottom: 10px;
+}
+.single-llms_quiz .llms-quiz-results:before, .single-llms_quiz .llms-quiz-results:after {
+ content: " ";
+ display: table;
+}
+.single-llms_quiz .llms-quiz-results:after {
+ clear: both;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.passing {
+ color: #4d8d3c;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.passing svg path {
+ stroke: #4d8d3c;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.pending {
+ color: #555;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.pending svg path {
+ stroke: #555;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.failing {
+ color: #bb231c;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.failing svg path {
+ stroke: #bb231c;
+}
+.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside,
+.single-llms_quiz .llms-quiz-results .llms-quiz-results-main,
+.single-llms_quiz .llms-quiz-results .llms-quiz-results-history {
+ margin-bottom: 20px;
+}
+@media all and (min-width: 600px) {
+ .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside {
+ float: right;
+ width: 220px;
+ }
+ .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside + .llms-quiz-results-main {
+ float: left;
+ width: calc(100% - 300px);
+ }
+ .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside + .llms-quiz-results-main + .llms-quiz-results-history {
+ float: left;
+ width: calc(100% - 300px);
+ }
+ .single-llms_quiz .llms-quiz-results .llms-quiz-results-history {
+ clear: left;
+ }
+}
+.single-llms_quiz ul.llms-quiz-meta-info {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.single-llms_quiz ul.llms-quiz-meta-info li {
+ list-style-type: none;
+ margin: 10px 0 0;
+ padding: 0;
+}
+.single-llms_quiz ul.llms-quiz-meta-info {
+ margin-bottom: 10px;
+}
+.single-llms_quiz .llms-quiz-buttons {
+ margin-top: 10px;
+ text-align: right;
+}
+.single-llms_quiz .llms-quiz-buttons form {
+ display: inline-block;
+}
+
+.llms-quiz-question-wrapper {
+ min-height: 140px;
+ position: relative;
+}
+.llms-quiz-question-wrapper .llms-quiz-loading {
+ bottom: 20px;
+ right: 0;
+ position: absolute;
+ left: 0;
+ text-align: center;
+ z-index: 1;
+}
+.llms-quiz-question-wrapper .llms-question-image img {
+ height: auto;
+ max-width: 100%;
+}
+
+.llms-quiz-ui {
+ position: relative;
+}
+.llms-quiz-ui .llms-quiz-header {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin: 0 0 40px;
+}
+.llms-quiz-ui .llms-progress {
+ background-color: #dedede;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ height: 8px;
+ margin: 0;
+ overflow: hidden;
+}
+.llms-quiz-ui .llms-progress .progress-bar-complete {
+ -webkit-transition: width 0.3s ease-in;
+ transition: width 0.3s ease-in;
+ width: 0;
+}
+.llms-quiz-ui .llms-error {
+ background: rgba(187, 35, 28, 0.15);
+ border: 1px solid #bb231c;
+ border-radius: 6px;
+ margin: 20px 0;
+ padding: 15px;
+}
+.llms-quiz-ui .llms-error:before, .llms-quiz-ui .llms-error:after {
+ content: " ";
+ display: table;
+}
+.llms-quiz-ui .llms-error:after {
+ clear: both;
+}
+.llms-quiz-ui .llms-error a {
+ color: #bb231c;
+ float: left;
+ font-size: 22px;
+ line-height: 1;
+ text-decoration: none;
+}
+.llms-quiz-ui .llms-quiz-counter {
+ display: none;
+ color: #6a6a6a;
+ float: left;
+ font-size: 18px;
+}
+.llms-quiz-ui .llms-quiz-counter .llms-sep {
+ margin: 0 5px;
+}
+.llms-quiz-ui .llms-quiz-nav {
+ margin-top: 20px;
+}
+.llms-quiz-ui .llms-quiz-nav button {
+ margin: 0 0 0 10px;
+}
+
+.llms-question-wrapper .llms-question-text {
+ font-size: 30px;
+ font-weight: 400;
+ margin-bottom: 15px;
+}
+.llms-question-wrapper ol.llms-question-choices {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice {
+ border-bottom: 1px solid #e8e8e8;
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice:last-child {
+ border-bottom: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture {
+ border-bottom: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture label {
+ display: inline-block;
+ padding: 0;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-marker {
+ bottom: 10px;
+ margin: 0;
+ position: absolute;
+ left: 10px;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image {
+ margin: 2px;
+ padding: 20px;
+ -webkit-transition: background 0.4s ease;
+ transition: background 0.4s ease;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image img {
+ display: block;
+ height: auto;
+ width: 100%;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture input:checked ~ .llms-choice-image {
+ background: #efefef;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice input {
+ display: none;
+ right: 0;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ visibility: hidden;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice label {
+ display: block;
+ margin: 0;
+ padding: 10px 20px;
+ position: relative;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .iterator {
+ display: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .fa {
+ display: inline;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker {
+ background: #fefefe;
+ color: #010101;
+ display: inline-block;
+ font-size: 20px;
+ height: 40px;
+ line-height: 40px;
+ margin-left: 10px;
+ text-align: center;
+ -webkit-transition: all 0.2s ease;
+ transition: all 0.2s ease;
+ vertical-align: middle;
+ width: 40px;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker .fa {
+ display: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--lister, .llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--checkbox {
+ border-radius: 4px;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--radio {
+ border-radius: 50%;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker {
+ background: #ef476f;
+ color: #fff;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker .iterator {
+ display: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker .fa {
+ display: inline;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-choice-text {
+ display: inline-block;
+ font-size: 18px;
+ font-weight: 400;
+ line-height: 1.6;
+ margin: 0;
+ padding: 0;
+ vertical-align: middle;
+ width: calc(100% - 60px);
+}
+
+.llms-quiz-timer {
+ background: #fff;
+ border: 1px solid #4d8d3c;
+ border-radius: 4px;
+ color: #4d8d3c;
+ float: left;
+ font-size: 18px;
+ line-height: 1;
+ margin-right: 20px;
+ padding: 8px 12px;
+ position: relative;
+ white-space: nowrap;
+ z-index: 1;
+}
+.llms-quiz-timer.color-half {
+ border-color: #c05621;
+ color: #c05621;
+}
+.llms-quiz-timer.color-empty {
+ border-color: #bb231c;
+ color: #bb231c;
+}
+.llms-quiz-timer .llms-tiles {
+ display: inline-block;
+ margin-right: 5px;
+}
+
+.voucher-expand {
+ display: none;
+}
+
+@media all and (min-width: 600px) {
+ .llms-access-plans.cols-1 .llms-access-plan {
+ width: 100%;
+ }
+ .llms-access-plans.cols-2 .llms-access-plan {
+ width: 50%;
+ }
+ .llms-access-plans.cols-3 .llms-access-plan {
+ width: 33.3333333333%;
+ }
+ .llms-access-plans.cols-4 .llms-access-plan {
+ width: 25%;
+ }
+ .llms-access-plans.cols-5 .llms-access-plan {
+ width: 20%;
+ }
+}
+
+.llms-free-enroll-form {
+ margin-bottom: 0;
+}
+
+.llms-access-plan {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ float: right;
+ text-align: center;
+ width: 100%;
+}
+.llms-access-plan .llms-access-plan-content,
+.llms-access-plan .llms-access-plan-footer {
+ background: #f1f1f1;
+}
+.llms-access-plan.featured .llms-access-plan-featured {
+ background: #466dd8;
+ border-top-right-radius: 6px;
+ border-top-left-radius: 6px;
+}
+.llms-access-plan.featured .llms-access-plan-content {
+ border-radius: 0;
+}
+.llms-access-plan.featured .llms-access-plan-title {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+}
+.llms-access-plan.featured .llms-access-plan-footer,
+.llms-access-plan.featured .llms-access-plan-content {
+ border-right: 3px solid #466dd8;
+ border-left: 3px solid #466dd8;
+}
+.llms-access-plan.featured .llms-access-plan-footer {
+ border-bottom-color: #466dd8;
+}
+.llms-access-plan.on-sale .price-regular {
+ text-decoration: line-through;
+}
+.llms-access-plan.on-sale .price-regular .lifterlms-price {
+ font-weight: 400;
+}
+.llms-access-plan .stamp {
+ background: #466dd8;
+ border-radius: 6px;
+ color: #fefefe;
+ display: inline-block;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: bold;
+ line-height: 1;
+ padding: 5px 8px 4px;
+}
+
+.llms-access-plan-featured {
+ color: #fff;
+ font-size: 14px;
+ font-weight: 700;
+ letter-spacing: 1px;
+ margin: 0 2px 0 2px;
+ padding: 5px 0 0;
+}
+
+.llms-access-plan-content {
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+ margin: 0 2px 0;
+ overflow: hidden;
+}
+.llms-access-plan-content .llms-access-plan-pricing {
+ color: #010101;
+ padding: 20px 0 0;
+}
+
+.llms-access-plan-title {
+ background: #466dd8;
+ color: #fefefe;
+ margin: 0;
+ padding: 10px 15px;
+}
+
+.llms-access-plan-pricing .llms-price-currency-symbol {
+ font-size: 14px;
+ vertical-align: top;
+}
+
+.llms-access-plan-price .lifterlms-price {
+ font-weight: 700;
+}
+.llms-access-plan-price.sale {
+ padding: 5px 0;
+ border-top: 1px solid #d0d0d0;
+ border-bottom: 1px solid #d0d0d0;
+}
+
+.llms-access-plan-trial,
+.llms-access-plan-schedule,
+.llms-access-plan-sale-end,
+.llms-access-plan-expiration {
+ font-size: 16px;
+}
+
+.llms-access-plan-description {
+ color: #010101;
+ font-size: 16px;
+ padding: 10px 10px 0;
+}
+.llms-access-plan-description ul {
+ margin: 0;
+}
+.llms-access-plan-description ul li {
+ border-bottom: 1px solid #d0d0d0;
+ list-style-type: none;
+}
+.llms-access-plan-description ul li:last-child {
+ border-bottom: none;
+}
+.llms-access-plan-description div:last-child, .llms-access-plan-description img:last-child, .llms-access-plan-description p:last-child, .llms-access-plan-description ul:last-child, .llms-access-plan-description li:last-child {
+ margin-bottom: 0;
+}
+
+.llms-access-plan-restrictions {
+ margin-top: 20px;
+}
+.llms-access-plan-restrictions .stamp {
+ vertical-align: baseline;
+}
+.llms-access-plan-restrictions ul {
+ margin: 5px 0 0 0;
+ padding: 0;
+}
+.llms-access-plan-restrictions ul li {
+ font-size: 14px;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-access-plan-restrictions a {
+ color: #c05621;
+}
+.llms-access-plan-restrictions a:hover {
+ color: #f67d28;
+}
+
+.llms-access-plan-footer {
+ border-bottom: 3px solid #f1f1f1;
+ border-bottom-right-radius: 6px;
+ border-bottom-left-radius: 6px;
+ padding: 15px;
+ margin: 0 2px 2px 2px;
+}
+.llms-access-plan-footer .button {
+ display: inline-block;
+}
+.llms-access-plan-footer .llms-access-plan-pricing {
+ padding: 0 0 10px;
+}
+
+.webui-popover-content .llms-members-only-restrictions {
+ text-align: center;
+}
+.webui-popover-content .llms-members-only-restrictions ul, .webui-popover-content .llms-members-only-restrictions ol, .webui-popover-content .llms-members-only-restrictions li, .webui-popover-content .llms-members-only-restrictions p {
+ margin: 0;
+ padding: 0;
+}
+.webui-popover-content .llms-members-only-restrictions ul, .webui-popover-content .llms-members-only-restrictions ol, .webui-popover-content .llms-members-only-restrictions li {
+ list-style-type: none;
+}
+.webui-popover-content .llms-members-only-restrictions li {
+ padding: 8px 0;
+ border-top: 1px solid #3b3b3b;
+}
+.webui-popover-content .llms-members-only-restrictions li:first-child {
+ border-top: none;
+}
+.webui-popover-content .llms-members-only-restrictions li a {
+ display: block;
+}
+
+.llms-checkout-wrapper .llms-person-login-form-wrapper {
+ margin-bottom: 40px;
+}
+.llms-checkout-wrapper form.llms-login {
+ display: none;
+}
+.llms-checkout-wrapper .llms-form-heading {
+ margin: 0 0 20px;
+}
+
+.llms-checkout {
+ position: relative;
+}
+
+.llms-checkout-cols-2.llms-col-2 section {
+ background-color: #fefefe;
+ border: 1px solid #ccc;
+ border-radius: 12px;
+ padding: 20px;
+}
+.llms-checkout-cols-2.llms-col-2 section .llms-form-heading {
+ padding: 0;
+}
+@media all and (min-width: 800px) {
+ .llms-checkout-cols-2 .llms-checkout-col {
+ float: right;
+ }
+ .llms-checkout-cols-2 .llms-checkout-col.llms-col-1 {
+ margin-left: 20px;
+ width: calc(58% - 20px);
+ }
+ .llms-checkout-cols-2 .llms-checkout-col.llms-col-2 {
+ margin-right: 20px;
+ width: calc(42% - 20px);
+ }
+ .llms-checkout-cols-2 .llms-checkout-col.llms-col-2 button {
+ width: 100%;
+ }
+}
+
+.llms-checkout-section {
+ margin-bottom: 40px;
+ position: relative;
+}
+
+.llms-checkout-section-content.llms-form-fields {
+ margin: 0px;
+}
+.llms-checkout-section-content .llms-label {
+ font-weight: 400;
+}
+.llms-checkout-section-content .llms-order-summary {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-checkout-section-content .llms-order-summary li {
+ list-style-type: none;
+ margin: 0 0 15px 0;
+}
+.llms-checkout-section-content .llms-order-summary :not(.llms-label) {
+ font-weight: 700;
+}
+.llms-checkout-section-content .llms-order-summary li.llms-pricing.on-sale .price-regular, .llms-checkout-section-content .llms-order-summary li.llms-pricing.has-coupon .price-regular {
+ text-decoration: line-through;
+}
+.llms-checkout-section-content .llms-coupon-wrapper {
+ border-top: 1px solid #dedede;
+ margin-top: 20px;
+ padding-top: 20px;
+}
+.llms-checkout-section-content .llms-coupon-wrapper .llms-coupon-entry {
+ display: none;
+ margin-top: 20px;
+}
+
+.llms-form-field.llms-payment-gateway-option {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 8px;
+}
+.llms-form-field.llms-payment-gateway-option label + span.llms-description {
+ display: inline-block;
+ margin-right: 5px;
+}
+.llms-form-field.llms-payment-gateway-option .llms-description a {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ text-decoration: none;
+}
+.llms-form-field.llms-payment-gateway-option .llms-description img {
+ display: inline;
+ max-height: 22px;
+ vertical-align: middle;
+}
+
+.llms-checkout-wrapper ul.llms-payment-gateways {
+ margin: 5px 0 0;
+ padding: 0;
+}
+
+ul.llms-payment-gateways {
+ list-style-type: none;
+}
+ul.llms-payment-gateways li:last-child:after {
+ border-bottom: 1px solid #dedede;
+ content: "";
+ display: block;
+ margin: 20px 0;
+}
+ul.llms-payment-gateways .llms-payment-gateway {
+ margin-bottom: 30px;
+ list-style-type: none;
+}
+ul.llms-payment-gateways .llms-payment-gateway:last-child {
+ margin-bottom: none;
+}
+ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-payment-gateway-option label {
+ font-weight: 700;
+}
+ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields {
+ display: block;
+}
+ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields .llms-notice {
+ margin-right: 10px;
+ margin-left: 10px;
+}
+ul.llms-payment-gateways .llms-payment-gateway .llms-form-field {
+ padding-bottom: 0;
+}
+ul.llms-payment-gateways .llms-gateway-description {
+ margin-right: 40px;
+}
+ul.llms-payment-gateways .llms-gateway-fields {
+ display: none;
+ margin: 5px 0 20px;
+}
+ul.llms-payment-gateways .llms-payment-gateway-error {
+ padding: 0 10px;
+}
+
+.llms-checkout-confirm {
+ margin: 0;
+}
+
+.llms-payment-method {
+ margin: 10px 10px 0;
+}
+
+.llms-gateway-description p {
+ font-size: 14px;
+ font-style: italic;
+ margin: 0;
+}
+
+.llms-form-fields {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-form-fields * {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-form-fields.flush .llms-form-field {
+ padding: 0 0 20px;
+}
+.llms-form-fields label:not(.llms-field-html label) {
+ font-weight: 700;
+}
+.llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {
+ margin-bottom: 0;
+}
+
+.llms-form-heading {
+ padding: 0 10px 10px;
+}
+
+.llms-form-field {
+ float: right;
+ padding: 0 10px 20px;
+ position: relative;
+ width: 100%;
+}
+.llms-form-field label:empty:after {
+ content: " ";
+}
+.llms-form-field [type=text],
+.llms-form-field [type=password],
+.llms-form-field [type=email],
+.llms-form-field [type=url],
+.llms-form-field [type=tel],
+.llms-form-field [type=number] {
+ background-color: #fefefe;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 16px;
+ line-height: 1;
+ padding: 8px 12px;
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ width: 100%;
+}
+.llms-form-field input:focus,
+.llms-form-field input:focus-visible {
+ border-color: #6888df;
+ outline: thin solid;
+}
+.llms-form-field select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ appearance: none;
+ background-color: #fefefe;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ color: #010101;
+ padding: 8px 12px;
+ margin: 0;
+ width: 100%;
+ font-family: inherit;
+ font-size: 16px;
+ cursor: inherit;
+ line-height: 1.6;
+ z-index: 1;
+ outline: none;
+ background-repeat: no-repeat;
+ background-image: linear-gradient(-45deg, transparent 50%, currentcolor 50%), linear-gradient(-135deg, currentcolor 50%, transparent 50%);
+ background-position: left 15px top 1.3rem, left 10px top 1.3rem;
+ background-size: 5px 5px, 5px 5px;
+}
+.llms-form-field select::-ms-expand {
+ display: none;
+}
+.llms-form-field select:focus {
+ border: 1px solid #6888df;
+ outline: thin solid;
+}
+.llms-form-field.valid input[type=date], .llms-form-field.valid input[type=time], .llms-form-field.valid input[type=datetime-local], .llms-form-field.valid input[type=week], .llms-form-field.valid input[type=month], .llms-form-field.valid input[type=text], .llms-form-field.valid input[type=email], .llms-form-field.valid input[type=url], .llms-form-field.valid input[type=password], .llms-form-field.valid input[type=search], .llms-form-field.valid input[type=tel], .llms-form-field.valid input[type=number], .llms-form-field.valid textarea, .llms-form-field.valid select {
+ background: rgba(131, 195, 115, 0.3);
+ border-color: #83c373;
+}
+.llms-form-field.error input[type=date], .llms-form-field.error input[type=time], .llms-form-field.error input[type=datetime-local], .llms-form-field.error input[type=week], .llms-form-field.error input[type=month], .llms-form-field.error input[type=text], .llms-form-field.error input[type=email], .llms-form-field.error input[type=url], .llms-form-field.error input[type=password], .llms-form-field.error input[type=search], .llms-form-field.error input[type=tel], .llms-form-field.error input[type=number], .llms-form-field.error textarea, .llms-form-field.error select, .llms-form-field.invalid input[type=date], .llms-form-field.invalid input[type=time], .llms-form-field.invalid input[type=datetime-local], .llms-form-field.invalid input[type=week], .llms-form-field.invalid input[type=month], .llms-form-field.invalid input[type=text], .llms-form-field.invalid input[type=email], .llms-form-field.invalid input[type=url], .llms-form-field.invalid input[type=password], .llms-form-field.invalid input[type=search], .llms-form-field.invalid input[type=tel], .llms-form-field.invalid input[type=number], .llms-form-field.invalid textarea, .llms-form-field.invalid select {
+ background: rgba(187, 35, 28, 0.3);
+ border-color: #bb231c;
+}
+.llms-form-field.llms-visually-hidden-field {
+ display: none;
+}
+.llms-form-field.align-right {
+ text-align: left;
+}
+@media screen and (min-width: 600px) {
+ .llms-form-field.llms-cols-1 {
+ width: 8.3333333333%;
+ }
+ .llms-form-field.llms-cols-2 {
+ width: 16.6666666667%;
+ }
+ .llms-form-field.llms-cols-3 {
+ width: 25%;
+ }
+ .llms-form-field.llms-cols-4 {
+ width: 33.3333333333%;
+ }
+ .llms-form-field.llms-cols-5 {
+ width: 41.6666666667%;
+ }
+ .llms-form-field.llms-cols-6 {
+ width: 50%;
+ }
+ .llms-form-field.llms-cols-7 {
+ width: 58.3333333333%;
+ }
+ .llms-form-field.llms-cols-8 {
+ width: 66.6666666667%;
+ }
+ .llms-form-field.llms-cols-9 {
+ width: 75%;
+ }
+ .llms-form-field.llms-cols-10 {
+ width: 83.3333333333%;
+ }
+ .llms-form-field.llms-cols-11 {
+ width: 91.6666666667%;
+ }
+ .llms-form-field.llms-cols-12 {
+ width: 100%;
+ }
+}
+.llms-form-field.type-hidden {
+ padding: 0;
+}
+.llms-form-field.type-radio input,
+.llms-form-field.type-radio label, .llms-form-field.type-checkbox input,
+.llms-form-field.type-checkbox label {
+ display: inline-block;
+ width: auto;
+}
+.llms-form-field.type-radio input, .llms-form-field.type-checkbox input {
+ margin-left: 10px;
+}
+.llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {
+ display: block;
+}
+.llms-form-field.type-radio:not(.is-group) input[type=radio] {
+ position: absolute;
+ opacity: 0;
+ visibility: none;
+}
+.llms-form-field.type-radio:not(.is-group) label:before {
+ background: #fafafa;
+ background-position: -24px 0;
+ background-repeat: no-repeat;
+ border-radius: 50%;
+ -webkit-box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;
+ box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;
+ content: "";
+ cursor: pointer;
+ display: inline-block;
+ height: 22px;
+ margin-left: 5px;
+ position: relative;
+ -webkit-transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ top: -3px;
+ vertical-align: middle;
+ width: 22px;
+ z-index: 2;
+}
+.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked + label:before {
+ -webkit-transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ background-position: 100% 0;
+ background-image: radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%);
+}
+.llms-form-field .llms-input-group {
+ margin-top: 5px;
+}
+.llms-form-field .llms-input-group .llms-form-field {
+ padding: 0 5px 5px 0;
+}
+.llms-form-field.type-reset button:not(.auto), .llms-form-field.type-button button:not(.auto), .llms-form-field.type-submit button:not(.auto) {
+ width: 100%;
+}
+.llms-form-field .llms-description {
+ font-size: 14px;
+ font-style: italic;
+ line-height: 18px;
+}
+.llms-form-field .llms-required {
+ color: #bb231c;
+ margin-right: 4px;
+}
+.llms-form-field input, .llms-form-field textarea, .llms-form-field select {
+ width: 100%;
+ margin-bottom: 5px;
+}
+.llms-form-field .select2-container .select2-selection--single {
+ height: auto;
+ padding: 4px 6px;
+}
+.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {
+ height: 100%;
+}
+
+.llms-password-strength-meter {
+ border: 1px solid #dadada;
+ display: none;
+ font-size: 10px;
+ margin-top: -10px;
+ padding: 1px;
+ position: relative;
+ text-align: center;
+}
+.llms-password-strength-meter:before {
+ bottom: 0;
+ content: "";
+ right: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transition: width 0.4s ease;
+ transition: width 0.4s ease;
+}
+.llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {
+ border-color: #e35b5b;
+}
+.llms-password-strength-meter.mismatch:before, .llms-password-strength-meter.too-short:before, .llms-password-strength-meter.very-weak:before {
+ background: rgba(227, 91, 91, 0.25);
+ width: 25%;
+}
+.llms-password-strength-meter.too-short:before {
+ width: 0;
+}
+.llms-password-strength-meter.weak {
+ border-color: #f78b53;
+}
+.llms-password-strength-meter.weak:before {
+ background: rgba(247, 139, 83, 0.25);
+ width: 50%;
+}
+.llms-password-strength-meter.medium {
+ border-color: #ffc733;
+}
+.llms-password-strength-meter.medium:before {
+ background: rgba(255, 199, 51, 0.25);
+ width: 75%;
+}
+.llms-password-strength-meter.strong {
+ border-color: #83c373;
+}
+.llms-password-strength-meter.strong:before {
+ background: rgba(131, 195, 115, 0.25);
+ width: 100%;
+}
+.llms-password-strength-meter + .llms-description {
+ display: block;
+}
+
+.llms-widget-syllabus--collapsible .llms-section .section-header {
+ cursor: pointer;
+}
+.llms-widget-syllabus--collapsible .llms-section.llms-section--opened .llms-collapse-caret .fa-caret-right {
+ display: none;
+}
+.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-collapse-caret .fa-caret-down {
+ display: none;
+}
+.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-lesson {
+ display: none;
+}
+.llms-widget-syllabus--collapsible .llms-syllabus-footer {
+ text-align: right;
+}
+
+.llms-student-dashboard {
+ /**
+ * Dashboard Home
+ */
+}
+.llms-student-dashboard .llms-sd-title {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+ margin: 40px 0 20px 0;
+}
+.llms-student-dashboard .llms-sd-title small {
+ font-size: 18px;
+}
+.llms-student-dashboard .llms-sd-title small + a {
+ text-decoration: none;
+}
+.llms-student-dashboard .llms-sd-items {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-student-dashboard .llms-sd-item {
+ display: inline-block;
+ list-style-type: none;
+ margin: 5px 0;
+ padding: 0;
+}
+.llms-student-dashboard .llms-sd-item:last-child .llms-sep {
+ display: none;
+}
+.llms-student-dashboard .llms-sd-item .llms-sep {
+ color: #666;
+ margin: 0 5px;
+}
+.llms-student-dashboard .llms-sd-section h2 {
+ margin: 0 0 15px 0;
+}
+.llms-student-dashboard .llms-sd-section .llms-sd-section-title {
+ margin: 0;
+ padding: 0;
+}
+.llms-student-dashboard .llms-sd-section .llms-sd-section-footer {
+ margin-top: 10px;
+}
+.llms-student-dashboard .llms-sd-section .llms-sd-section-footer .llms-button-secondary {
+ display: inline-block;
+}
+.llms-student-dashboard .orders-table {
+ border: 1px solid #dedede;
+ border-spacing: 0;
+ width: 100%;
+}
+.llms-student-dashboard .orders-table thead {
+ display: none;
+}
+.llms-student-dashboard .orders-table thead th, .llms-student-dashboard .orders-table thead td {
+ font-weight: 700;
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .orders-table thead {
+ display: table-header-group;
+ }
+}
+.llms-student-dashboard .orders-table tbody tr:nth-child(odd) td, .llms-student-dashboard .orders-table tbody tr:nth-child(odd) th {
+ background: #f9f9f9;
+}
+.llms-student-dashboard .orders-table tbody tr:last-child {
+ border-bottom-width: 0;
+}
+.llms-student-dashboard .orders-table tfoot tr {
+ background: #f9f9f9;
+}
+.llms-student-dashboard .orders-table tfoot th, .llms-student-dashboard .orders-table tfoot td {
+ padding: 10px;
+ text-align: left;
+}
+.llms-student-dashboard .orders-table tfoot th:last-child, .llms-student-dashboard .orders-table tfoot td:last-child {
+ border-bottom-width: 0;
+}
+.llms-student-dashboard .orders-table th {
+ font-weight: 700;
+}
+.llms-student-dashboard .orders-table th, .llms-student-dashboard .orders-table td {
+ border-color: #dedede;
+ border-style: solid;
+ border-width: 0;
+ display: block;
+ padding: 15px 20px;
+ text-align: center;
+}
+.llms-student-dashboard .orders-table th .llms-button-primary, .llms-student-dashboard .orders-table td .llms-button-primary {
+ display: inline-block;
+}
+.llms-student-dashboard .orders-table th:last-child, .llms-student-dashboard .orders-table td:last-child {
+ border-bottom-width: 1px;
+}
+.llms-student-dashboard .orders-table th:before, .llms-student-dashboard .orders-table td:before {
+ content: attr(data-label);
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .orders-table th, .llms-student-dashboard .orders-table td {
+ border-bottom-width: 1px;
+ display: table-cell;
+ text-align: right;
+ }
+ .llms-student-dashboard .orders-table th:first-child, .llms-student-dashboard .orders-table td:first-child {
+ width: 220px;
+ }
+ .llms-student-dashboard .orders-table th:before, .llms-student-dashboard .orders-table td:before {
+ display: none;
+ }
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .orders-table.transactions th:first-child {
+ width: auto;
+ }
+}
+.llms-student-dashboard .llms-status {
+ border-radius: 6px;
+ display: inline-block;
+ font-size: 13px;
+ font-weight: 700;
+ line-height: 1.4;
+ padding: 2px 6px;
+ vertical-align: middle;
+}
+.llms-student-dashboard .llms-status.llms-size--large {
+ font-size: 105%;
+ padding: 6px 12px;
+}
+.llms-student-dashboard .llms-status.llms-active, .llms-student-dashboard .llms-status.llms-completed, .llms-student-dashboard .llms-status.llms-pass, .llms-student-dashboard .llms-status.llms-txn-succeeded {
+ color: #4d8d3c;
+ background-color: rgba(77, 141, 60, 0.15);
+}
+.llms-student-dashboard .llms-status.llms-fail, .llms-student-dashboard .llms-status.llms-failed, .llms-student-dashboard .llms-status.llms-expired, .llms-student-dashboard .llms-status.llms-cancelled, .llms-student-dashboard .llms-status.llms-txn-failed {
+ color: #bb231c;
+ background-color: rgba(187, 35, 28, 0.15);
+}
+.llms-student-dashboard .llms-status.llms-incomplete, .llms-student-dashboard .llms-status.llms-on-hold, .llms-student-dashboard .llms-status.llms-pending, .llms-student-dashboard .llms-status.llms-pending-cancel, .llms-student-dashboard .llms-status.llms-refunded, .llms-student-dashboard .llms-status.llms-txn-pending, .llms-student-dashboard .llms-status.llms-txn-refunded {
+ color: #c05621;
+ background-color: rgba(192, 86, 33, 0.15);
+}
+.llms-student-dashboard .order-title .llms-status {
+ font-size: 18px;
+}
+.llms-student-dashboard .llms-person-form-wrapper .llms-change-password {
+ display: none;
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .order-primary {
+ float: right;
+ width: 68%;
+ }
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .order-secondary {
+ float: right;
+ width: 32%;
+ }
+}
+.llms-student-dashboard .order-secondary form {
+ margin-bottom: 0;
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .llms-view-order.llms-stack-cols .order-primary,
+.llms-student-dashboard .llms-view-order.llms-stack-cols .order-secondary {
+ float: none;
+ width: 100%;
+ }
+}
+.llms-student-dashboard .llms-switch-payment-source .llms-notice,
+.llms-student-dashboard .llms-switch-payment-source .entry-content .llms-notice {
+ margin-right: 10px;
+ margin-left: 10px;
+}
+.llms-student-dashboard .llms-switch-payment-source-main {
+ border: none;
+ display: none;
+ margin: 0;
+}
+.llms-student-dashboard .llms-switch-payment-source-main ul.llms-payment-gateways {
+ padding: 10px 15px 0;
+ margin: 0;
+}
+.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method,
+.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary {
+ padding: 0 25px 10px;
+ margin: 0;
+ list-style-type: none;
+}
+.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method li,
+.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary li {
+ list-style-type: none;
+}
+.llms-student-dashboard.dashboard .llms-sd-section {
+ border: 1px solid #dedede;
+ border-radius: 6px;
+ padding: 20px;
+ margin-bottom: 40px;
+}
+.llms-student-dashboard .llms-loop-list {
+ margin: 0 -10px;
+}
+
+.llms-sd-grades .llms-table .llms-progress {
+ display: block;
+ margin: 0;
+}
+.llms-sd-grades .llms-table .llms-progress .llms-progress-bar {
+ top: 0;
+ height: 1.4em;
+}
+.llms-sd-grades .llms-table .llms-progress .progress__indicator {
+ font-size: 1em;
+ position: relative;
+ left: 0.4em;
+ top: 0.2em;
+ z-index: 1;
+}
+
+.llms-table.llms-single-course-grades tbody tr:first-child td, .llms-table.llms-single-course-grades tbody tr:first-child th {
+ background-color: #eaeaea;
+}
+.llms-table.llms-single-course-grades th {
+ font-weight: 400;
+ text-align: right;
+}
+.llms-table.llms-single-course-grades td .llms-donut {
+ display: inline-block;
+ vertical-align: middle;
+}
+.llms-table.llms-single-course-grades td .llms-status {
+ margin-left: 4px;
+}
+.llms-table.llms-single-course-grades td .llms-donut + .llms-status {
+ margin-right: 4px;
+}
+.llms-table.llms-single-course-grades th.llms-section_title {
+ font-size: 110%;
+ font-weight: 700;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title {
+ max-width: 40%;
+}
+.llms-table.llms-single-course-grades td.llms-associated_quiz .llms-donut {
+ display: inline-block;
+ margin-left: 5px;
+ vertical-align: middle;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title a[href="#"] {
+ pointer-events: none;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] {
+ color: inherit;
+ position: relative;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] .llms-tooltip {
+ max-width: 380px;
+ width: 380px;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] .llms-tooltip.show {
+ top: -54px;
+}
+
+.llms-sd-widgets {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.llms-sd-widgets .llms-sd-widget {
+ background: #fefefe;
+ border: 1px solid #dedede;
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin: 10px 10px 20px;
+ padding: 0 0 20px;
+}
+.llms-sd-widgets .llms-sd-widget:first-child {
+ margin-right: 0;
+}
+.llms-sd-widgets .llms-sd-widget:last-child {
+ margin-left: 0;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-widget-title {
+ background: #466dd8;
+ color: #fff;
+ font-size: 18px;
+ line-height: 1;
+ margin: 0 0 20px;
+ padding: 10px;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-widget-empty {
+ font-size: 14px;
+ font-style: italic;
+ opacity: 0.5;
+ text-align: center;
+}
+.llms-sd-widgets .llms-sd-widget .llms-donut {
+ margin: 0 auto;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-date {
+ opacity: 0.8;
+ text-align: center;
+ font-size: 22px;
+ line-height: 1.1;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-date span {
+ display: block;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-date span.day {
+ font-size: 52px;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-date span.diff {
+ font-size: 12px;
+ font-style: italic;
+ margin-top: 8px;
+ opacity: 0.75;
+}
+.llms-sd-widgets .llms-sd-widget .llms-achievement {
+ background: transparent;
+ margin: 0 auto;
+ max-width: 120px;
+}
+.llms-sd-widgets .llms-sd-widget .llms-achievement .llms-achievement-title {
+ display: none;
+}
+
+.redeem-voucher .form-row label {
+ display: block;
+ font-weight: 700;
+}
+.redeem-voucher .form-row input[type=text] {
+ background-color: #fefefe;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 16px;
+ line-height: 1;
+ padding: 8px 12px;
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+}
+
+.llms-sd-pagination {
+ margin-top: 24px;
+}
+.llms-sd-pagination:before, .llms-sd-pagination:after {
+ content: " ";
+ display: table;
+}
+.llms-sd-pagination:after {
+ clear: both;
+}
+.llms-sd-pagination .llms-button-secondary {
+ display: inline-block;
+}
+.llms-sd-pagination .llms-button-secondary.prev {
+ float: right;
+}
+.llms-sd-pagination .llms-button-secondary.next {
+ float: left;
+}
+
+.llms-sd-notification-center {
+ background: #fefefe;
+ border: 1px solid #dedede;
+ border-radius: 6px;
+ padding: 20px;
+}
+.llms-sd-notification-center .llms-notification-list-item .llms-notification {
+ z-index: 1;
+}
+.llms-sd-notification-center .llms-notification-list-item .llms-notification:hover {
+ background-color: inherit;
+}
+
+.llms-table {
+ border: 1px solid #dedede;
+ border-spacing: 0;
+ width: 100%;
+}
+.llms-table thead th, .llms-table thead td {
+ font-weight: 700;
+}
+.llms-table tbody tr:nth-child(odd) td, .llms-table tbody tr:nth-child(odd) th {
+ background: #f9f9f9;
+}
+.llms-table tbody tr:last-child {
+ border-bottom-width: 0;
+}
+.llms-table tfoot tr {
+ background: #f9f9f9;
+}
+.llms-table tfoot tr .llms-pagination .page-numbers {
+ margin: 0;
+}
+.llms-table tfoot tr .llms-table-sort {
+ text-align: left;
+}
+.llms-table tfoot tr .llms-table-sort form, .llms-table tfoot tr .llms-table-sort select, .llms-table tfoot tr .llms-table-sort input, .llms-table tfoot tr .llms-table-sort button {
+ margin: 0;
+}
+.llms-table th {
+ font-weight: 700;
+}
+.llms-table th, .llms-table td {
+ border-bottom: 1px solid #dedede;
+ padding: 15px 20px;
+}
+.llms-table th:first-child, .llms-table td:first-child {
+ padding-right: 12px;
+}
+.llms-table th:last-child, .llms-table td:last-child {
+ padding-left: 12px;
+}
+
+#page .llms-table tfoot label {
+ display: inline;
+}
+
+#page .llms-table tfoot select {
+ height: auto;
+}
+
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: "FontAwesome";
+ src: url("../fonts/fontawesome-webfont.eot?v=4.7.0");
+ src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+
+.fa-2x {
+ font-size: 2em;
+}
+
+.fa-3x {
+ font-size: 3em;
+}
+
+.fa-4x {
+ font-size: 4em;
+}
+
+.fa-5x {
+ font-size: 5em;
+}
+
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+
+.fa-ul {
+ padding-right: 0;
+ margin-right: 2.14285714em;
+ list-style-type: none;
+}
+
+.fa-ul > li {
+ position: relative;
+}
+
+.fa-li {
+ position: absolute;
+ right: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+
+.fa-li.fa-lg {
+ right: -1.85714286em;
+}
+
+.fa-border {
+ padding: 0.2em 0.25em 0.15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: 0.1em;
+}
+
+.fa-pull-left {
+ float: right;
+}
+
+.fa-pull-right {
+ float: left;
+}
+
+.fa.fa-pull-left {
+ margin-left: 0.3em;
+}
+
+.fa.fa-pull-right {
+ margin-right: 0.3em;
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right {
+ float: left;
+}
+
+.pull-left {
+ float: right;
+}
+
+.fa.pull-left {
+ margin-left: 0.3em;
+}
+
+.fa.pull-right {
+ margin-right: 0.3em;
+}
+
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(-359deg);
+ transform: rotate(-359deg);
+ }
+}
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(-359deg);
+ transform: rotate(-359deg);
+ }
+}
+.fa-rotate-90 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+ -webkit-transform: rotate(-90deg);
+ transform: rotate(-90deg);
+}
+
+.fa-rotate-180 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+ -webkit-transform: rotate(-180deg);
+ transform: rotate(-180deg);
+}
+
+.fa-rotate-270 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+ -webkit-transform: rotate(-270deg);
+ transform: rotate(-270deg);
+}
+
+.fa-flip-horizontal {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+ -webkit-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+
+.fa-flip-vertical {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+ -webkit-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ -webkit-filter: none;
+ filter: none;
+}
+
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+
+.fa-stack-1x,
+.fa-stack-2x {
+ position: absolute;
+ right: 0;
+ width: 100%;
+ text-align: center;
+}
+
+.fa-stack-1x {
+ line-height: inherit;
+}
+
+.fa-stack-2x {
+ font-size: 2em;
+}
+
+.fa-inverse {
+ color: #ffffff;
+}
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "\f000";
+}
+
+.fa-music:before {
+ content: "\f001";
+}
+
+.fa-search:before {
+ content: "\f002";
+}
+
+.fa-envelope-o:before {
+ content: "\f003";
+}
+
+.fa-heart:before {
+ content: "\f004";
+}
+
+.fa-star:before {
+ content: "\f005";
+}
+
+.fa-star-o:before {
+ content: "\f006";
+}
+
+.fa-user:before {
+ content: "\f007";
+}
+
+.fa-film:before {
+ content: "\f008";
+}
+
+.fa-th-large:before {
+ content: "\f009";
+}
+
+.fa-th:before {
+ content: "\f00a";
+}
+
+.fa-th-list:before {
+ content: "\f00b";
+}
+
+.fa-check:before {
+ content: "\f00c";
+}
+
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "\f00d";
+}
+
+.fa-search-plus:before {
+ content: "\f00e";
+}
+
+.fa-search-minus:before {
+ content: "\f010";
+}
+
+.fa-power-off:before {
+ content: "\f011";
+}
+
+.fa-signal:before {
+ content: "\f012";
+}
+
+.fa-gear:before,
+.fa-cog:before {
+ content: "\f013";
+}
+
+.fa-trash-o:before {
+ content: "\f014";
+}
+
+.fa-home:before {
+ content: "\f015";
+}
+
+.fa-file-o:before {
+ content: "\f016";
+}
+
+.fa-clock-o:before {
+ content: "\f017";
+}
+
+.fa-road:before {
+ content: "\f018";
+}
+
+.fa-download:before {
+ content: "\f019";
+}
+
+.fa-arrow-circle-o-down:before {
+ content: "\f01a";
+}
+
+.fa-arrow-circle-o-up:before {
+ content: "\f01b";
+}
+
+.fa-inbox:before {
+ content: "\f01c";
+}
+
+.fa-play-circle-o:before {
+ content: "\f01d";
+}
+
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "\f01e";
+}
+
+.fa-refresh:before {
+ content: "\f021";
+}
+
+.fa-list-alt:before {
+ content: "\f022";
+}
+
+.fa-lock:before {
+ content: "\f023";
+}
+
+.fa-flag:before {
+ content: "\f024";
+}
+
+.fa-headphones:before {
+ content: "\f025";
+}
+
+.fa-volume-off:before {
+ content: "\f026";
+}
+
+.fa-volume-down:before {
+ content: "\f027";
+}
+
+.fa-volume-up:before {
+ content: "\f028";
+}
+
+.fa-qrcode:before {
+ content: "\f029";
+}
+
+.fa-barcode:before {
+ content: "\f02a";
+}
+
+.fa-tag:before {
+ content: "\f02b";
+}
+
+.fa-tags:before {
+ content: "\f02c";
+}
+
+.fa-book:before {
+ content: "\f02d";
+}
+
+.fa-bookmark:before {
+ content: "\f02e";
+}
+
+.fa-print:before {
+ content: "\f02f";
+}
+
+.fa-camera:before {
+ content: "\f030";
+}
+
+.fa-font:before {
+ content: "\f031";
+}
+
+.fa-bold:before {
+ content: "\f032";
+}
+
+.fa-italic:before {
+ content: "\f033";
+}
+
+.fa-text-height:before {
+ content: "\f034";
+}
+
+.fa-text-width:before {
+ content: "\f035";
+}
+
+.fa-align-left:before {
+ content: "\f036";
+}
+
+.fa-align-center:before {
+ content: "\f037";
+}
+
+.fa-align-right:before {
+ content: "\f038";
+}
+
+.fa-align-justify:before {
+ content: "\f039";
+}
+
+.fa-list:before {
+ content: "\f03a";
+}
+
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "\f03b";
+}
+
+.fa-indent:before {
+ content: "\f03c";
+}
+
+.fa-video-camera:before {
+ content: "\f03d";
+}
+
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "\f03e";
+}
+
+.fa-pencil:before {
+ content: "\f040";
+}
+
+.fa-map-marker:before {
+ content: "\f041";
+}
+
+.fa-adjust:before {
+ content: "\f042";
+}
+
+.fa-tint:before {
+ content: "\f043";
+}
+
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "\f044";
+}
+
+.fa-share-square-o:before {
+ content: "\f045";
+}
+
+.fa-check-square-o:before {
+ content: "\f046";
+}
+
+.fa-arrows:before {
+ content: "\f047";
+}
+
+.fa-step-backward:before {
+ content: "\f048";
+}
+
+.fa-fast-backward:before {
+ content: "\f049";
+}
+
+.fa-backward:before {
+ content: "\f04a";
+}
+
+.fa-play:before {
+ content: "\f04b";
+}
+
+.fa-pause:before {
+ content: "\f04c";
+}
+
+.fa-stop:before {
+ content: "\f04d";
+}
+
+.fa-forward:before {
+ content: "\f04e";
+}
+
+.fa-fast-forward:before {
+ content: "\f050";
+}
+
+.fa-step-forward:before {
+ content: "\f051";
+}
+
+.fa-eject:before {
+ content: "\f052";
+}
+
+.fa-chevron-left:before {
+ content: "\f053";
+}
+
+.fa-chevron-right:before {
+ content: "\f054";
+}
+
+.fa-plus-circle:before {
+ content: "\f055";
+}
+
+.fa-minus-circle:before {
+ content: "\f056";
+}
+
+.fa-times-circle:before {
+ content: "\f057";
+}
+
+.fa-check-circle:before {
+ content: "\f058";
+}
+
+.fa-question-circle:before {
+ content: "\f059";
+}
+
+.fa-info-circle:before {
+ content: "\f05a";
+}
+
+.fa-crosshairs:before {
+ content: "\f05b";
+}
+
+.fa-times-circle-o:before {
+ content: "\f05c";
+}
+
+.fa-check-circle-o:before {
+ content: "\f05d";
+}
+
+.fa-ban:before {
+ content: "\f05e";
+}
+
+.fa-arrow-left:before {
+ content: "\f060";
+}
+
+.fa-arrow-right:before {
+ content: "\f061";
+}
+
+.fa-arrow-up:before {
+ content: "\f062";
+}
+
+.fa-arrow-down:before {
+ content: "\f063";
+}
+
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "\f064";
+}
+
+.fa-expand:before {
+ content: "\f065";
+}
+
+.fa-compress:before {
+ content: "\f066";
+}
+
+.fa-plus:before {
+ content: "\f067";
+}
+
+.fa-minus:before {
+ content: "\f068";
+}
+
+.fa-asterisk:before {
+ content: "\f069";
+}
+
+.fa-exclamation-circle:before {
+ content: "\f06a";
+}
+
+.fa-gift:before {
+ content: "\f06b";
+}
+
+.fa-leaf:before {
+ content: "\f06c";
+}
+
+.fa-fire:before {
+ content: "\f06d";
+}
+
+.fa-eye:before {
+ content: "\f06e";
+}
+
+.fa-eye-slash:before {
+ content: "\f070";
+}
+
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "\f071";
+}
+
+.fa-plane:before {
+ content: "\f072";
+}
+
+.fa-calendar:before {
+ content: "\f073";
+}
+
+.fa-random:before {
+ content: "\f074";
+}
+
+.fa-comment:before {
+ content: "\f075";
+}
+
+.fa-magnet:before {
+ content: "\f076";
+}
+
+.fa-chevron-up:before {
+ content: "\f077";
+}
+
+.fa-chevron-down:before {
+ content: "\f078";
+}
+
+.fa-retweet:before {
+ content: "\f079";
+}
+
+.fa-shopping-cart:before {
+ content: "\f07a";
+}
+
+.fa-folder:before {
+ content: "\f07b";
+}
+
+.fa-folder-open:before {
+ content: "\f07c";
+}
+
+.fa-arrows-v:before {
+ content: "\f07d";
+}
+
+.fa-arrows-h:before {
+ content: "\f07e";
+}
+
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "\f080";
+}
+
+.fa-twitter-square:before {
+ content: "\f081";
+}
+
+.fa-facebook-square:before {
+ content: "\f082";
+}
+
+.fa-camera-retro:before {
+ content: "\f083";
+}
+
+.fa-key:before {
+ content: "\f084";
+}
+
+.fa-gears:before,
+.fa-cogs:before {
+ content: "\f085";
+}
+
+.fa-comments:before {
+ content: "\f086";
+}
+
+.fa-thumbs-o-up:before {
+ content: "\f087";
+}
+
+.fa-thumbs-o-down:before {
+ content: "\f088";
+}
+
+.fa-star-half:before {
+ content: "\f089";
+}
+
+.fa-heart-o:before {
+ content: "\f08a";
+}
+
+.fa-sign-out:before {
+ content: "\f08b";
+}
+
+.fa-linkedin-square:before {
+ content: "\f08c";
+}
+
+.fa-thumb-tack:before {
+ content: "\f08d";
+}
+
+.fa-external-link:before {
+ content: "\f08e";
+}
+
+.fa-sign-in:before {
+ content: "\f090";
+}
+
+.fa-trophy:before {
+ content: "\f091";
+}
+
+.fa-github-square:before {
+ content: "\f092";
+}
+
+.fa-upload:before {
+ content: "\f093";
+}
+
+.fa-lemon-o:before {
+ content: "\f094";
+}
+
+.fa-phone:before {
+ content: "\f095";
+}
+
+.fa-square-o:before {
+ content: "\f096";
+}
+
+.fa-bookmark-o:before {
+ content: "\f097";
+}
+
+.fa-phone-square:before {
+ content: "\f098";
+}
+
+.fa-twitter:before {
+ content: "\f099";
+}
+
+.fa-facebook-f:before,
+.fa-facebook:before {
+ content: "\f09a";
+}
+
+.fa-github:before {
+ content: "\f09b";
+}
+
+.fa-unlock:before {
+ content: "\f09c";
+}
+
+.fa-credit-card:before {
+ content: "\f09d";
+}
+
+.fa-feed:before,
+.fa-rss:before {
+ content: "\f09e";
+}
+
+.fa-hdd-o:before {
+ content: "\f0a0";
+}
+
+.fa-bullhorn:before {
+ content: "\f0a1";
+}
+
+.fa-bell:before {
+ content: "\f0f3";
+}
+
+.fa-certificate:before {
+ content: "\f0a3";
+}
+
+.fa-hand-o-right:before {
+ content: "\f0a4";
+}
+
+.fa-hand-o-left:before {
+ content: "\f0a5";
+}
+
+.fa-hand-o-up:before {
+ content: "\f0a6";
+}
+
+.fa-hand-o-down:before {
+ content: "\f0a7";
+}
+
+.fa-arrow-circle-left:before {
+ content: "\f0a8";
+}
+
+.fa-arrow-circle-right:before {
+ content: "\f0a9";
+}
+
+.fa-arrow-circle-up:before {
+ content: "\f0aa";
+}
+
+.fa-arrow-circle-down:before {
+ content: "\f0ab";
+}
+
+.fa-globe:before {
+ content: "\f0ac";
+}
+
+.fa-wrench:before {
+ content: "\f0ad";
+}
+
+.fa-tasks:before {
+ content: "\f0ae";
+}
+
+.fa-filter:before {
+ content: "\f0b0";
+}
+
+.fa-briefcase:before {
+ content: "\f0b1";
+}
+
+.fa-arrows-alt:before {
+ content: "\f0b2";
+}
+
+.fa-group:before,
+.fa-users:before {
+ content: "\f0c0";
+}
+
+.fa-chain:before,
+.fa-link:before {
+ content: "\f0c1";
+}
+
+.fa-cloud:before {
+ content: "\f0c2";
+}
+
+.fa-flask:before {
+ content: "\f0c3";
+}
+
+.fa-cut:before,
+.fa-scissors:before {
+ content: "\f0c4";
+}
+
+.fa-copy:before,
+.fa-files-o:before {
+ content: "\f0c5";
+}
+
+.fa-paperclip:before {
+ content: "\f0c6";
+}
+
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "\f0c7";
+}
+
+.fa-square:before {
+ content: "\f0c8";
+}
+
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "\f0c9";
+}
+
+.fa-list-ul:before {
+ content: "\f0ca";
+}
+
+.fa-list-ol:before {
+ content: "\f0cb";
+}
+
+.fa-strikethrough:before {
+ content: "\f0cc";
+}
+
+.fa-underline:before {
+ content: "\f0cd";
+}
+
+.fa-table:before {
+ content: "\f0ce";
+}
+
+.fa-magic:before {
+ content: "\f0d0";
+}
+
+.fa-truck:before {
+ content: "\f0d1";
+}
+
+.fa-pinterest:before {
+ content: "\f0d2";
+}
+
+.fa-pinterest-square:before {
+ content: "\f0d3";
+}
+
+.fa-google-plus-square:before {
+ content: "\f0d4";
+}
+
+.fa-google-plus:before {
+ content: "\f0d5";
+}
+
+.fa-money:before {
+ content: "\f0d6";
+}
+
+.fa-caret-down:before {
+ content: "\f0d7";
+}
+
+.fa-caret-up:before {
+ content: "\f0d8";
+}
+
+.fa-caret-left:before {
+ content: "\f0d9";
+}
+
+.fa-caret-right:before {
+ content: "\f0da";
+}
+
+.fa-columns:before {
+ content: "\f0db";
+}
+
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "\f0dc";
+}
+
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "\f0dd";
+}
+
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "\f0de";
+}
+
+.fa-envelope:before {
+ content: "\f0e0";
+}
+
+.fa-linkedin:before {
+ content: "\f0e1";
+}
+
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "\f0e2";
+}
+
+.fa-legal:before,
+.fa-gavel:before {
+ content: "\f0e3";
+}
+
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "\f0e4";
+}
+
+.fa-comment-o:before {
+ content: "\f0e5";
+}
+
+.fa-comments-o:before {
+ content: "\f0e6";
+}
+
+.fa-flash:before,
+.fa-bolt:before {
+ content: "\f0e7";
+}
+
+.fa-sitemap:before {
+ content: "\f0e8";
+}
+
+.fa-umbrella:before {
+ content: "\f0e9";
+}
+
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "\f0ea";
+}
+
+.fa-lightbulb-o:before {
+ content: "\f0eb";
+}
+
+.fa-exchange:before {
+ content: "\f0ec";
+}
+
+.fa-cloud-download:before {
+ content: "\f0ed";
+}
+
+.fa-cloud-upload:before {
+ content: "\f0ee";
+}
+
+.fa-user-md:before {
+ content: "\f0f0";
+}
+
+.fa-stethoscope:before {
+ content: "\f0f1";
+}
+
+.fa-suitcase:before {
+ content: "\f0f2";
+}
+
+.fa-bell-o:before {
+ content: "\f0a2";
+}
+
+.fa-coffee:before {
+ content: "\f0f4";
+}
+
+.fa-cutlery:before {
+ content: "\f0f5";
+}
+
+.fa-file-text-o:before {
+ content: "\f0f6";
+}
+
+.fa-building-o:before {
+ content: "\f0f7";
+}
+
+.fa-hospital-o:before {
+ content: "\f0f8";
+}
+
+.fa-ambulance:before {
+ content: "\f0f9";
+}
+
+.fa-medkit:before {
+ content: "\f0fa";
+}
+
+.fa-fighter-jet:before {
+ content: "\f0fb";
+}
+
+.fa-beer:before {
+ content: "\f0fc";
+}
+
+.fa-h-square:before {
+ content: "\f0fd";
+}
+
+.fa-plus-square:before {
+ content: "\f0fe";
+}
+
+.fa-angle-double-left:before {
+ content: "\f100";
+}
+
+.fa-angle-double-right:before {
+ content: "\f101";
+}
+
+.fa-angle-double-up:before {
+ content: "\f102";
+}
+
+.fa-angle-double-down:before {
+ content: "\f103";
+}
+
+.fa-angle-left:before {
+ content: "\f104";
+}
+
+.fa-angle-right:before {
+ content: "\f105";
+}
+
+.fa-angle-up:before {
+ content: "\f106";
+}
+
+.fa-angle-down:before {
+ content: "\f107";
+}
+
+.fa-desktop:before {
+ content: "\f108";
+}
+
+.fa-laptop:before {
+ content: "\f109";
+}
+
+.fa-tablet:before {
+ content: "\f10a";
+}
+
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "\f10b";
+}
+
+.fa-circle-o:before {
+ content: "\f10c";
+}
+
+.fa-quote-left:before {
+ content: "\f10d";
+}
+
+.fa-quote-right:before {
+ content: "\f10e";
+}
+
+.fa-spinner:before {
+ content: "\f110";
+}
+
+.fa-circle:before {
+ content: "\f111";
+}
+
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "\f112";
+}
+
+.fa-github-alt:before {
+ content: "\f113";
+}
+
+.fa-folder-o:before {
+ content: "\f114";
+}
+
+.fa-folder-open-o:before {
+ content: "\f115";
+}
+
+.fa-smile-o:before {
+ content: "\f118";
+}
+
+.fa-frown-o:before {
+ content: "\f119";
+}
+
+.fa-meh-o:before {
+ content: "\f11a";
+}
+
+.fa-gamepad:before {
+ content: "\f11b";
+}
+
+.fa-keyboard-o:before {
+ content: "\f11c";
+}
+
+.fa-flag-o:before {
+ content: "\f11d";
+}
+
+.fa-flag-checkered:before {
+ content: "\f11e";
+}
+
+.fa-terminal:before {
+ content: "\f120";
+}
+
+.fa-code:before {
+ content: "\f121";
+}
+
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "\f122";
+}
+
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "\f123";
+}
+
+.fa-location-arrow:before {
+ content: "\f124";
+}
+
+.fa-crop:before {
+ content: "\f125";
+}
+
+.fa-code-fork:before {
+ content: "\f126";
+}
+
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "\f127";
+}
+
+.fa-question:before {
+ content: "\f128";
+}
+
+.fa-info:before {
+ content: "\f129";
+}
+
+.fa-exclamation:before {
+ content: "\f12a";
+}
+
+.fa-superscript:before {
+ content: "\f12b";
+}
+
+.fa-subscript:before {
+ content: "\f12c";
+}
+
+.fa-eraser:before {
+ content: "\f12d";
+}
+
+.fa-puzzle-piece:before {
+ content: "\f12e";
+}
+
+.fa-microphone:before {
+ content: "\f130";
+}
+
+.fa-microphone-slash:before {
+ content: "\f131";
+}
+
+.fa-shield:before {
+ content: "\f132";
+}
+
+.fa-calendar-o:before {
+ content: "\f133";
+}
+
+.fa-fire-extinguisher:before {
+ content: "\f134";
+}
+
+.fa-rocket:before {
+ content: "\f135";
+}
+
+.fa-maxcdn:before {
+ content: "\f136";
+}
+
+.fa-chevron-circle-left:before {
+ content: "\f137";
+}
+
+.fa-chevron-circle-right:before {
+ content: "\f138";
+}
+
+.fa-chevron-circle-up:before {
+ content: "\f139";
+}
+
+.fa-chevron-circle-down:before {
+ content: "\f13a";
+}
+
+.fa-html5:before {
+ content: "\f13b";
+}
+
+.fa-css3:before {
+ content: "\f13c";
+}
+
+.fa-anchor:before {
+ content: "\f13d";
+}
+
+.fa-unlock-alt:before {
+ content: "\f13e";
+}
+
+.fa-bullseye:before {
+ content: "\f140";
+}
+
+.fa-ellipsis-h:before {
+ content: "\f141";
+}
+
+.fa-ellipsis-v:before {
+ content: "\f142";
+}
+
+.fa-rss-square:before {
+ content: "\f143";
+}
+
+.fa-play-circle:before {
+ content: "\f144";
+}
+
+.fa-ticket:before {
+ content: "\f145";
+}
+
+.fa-minus-square:before {
+ content: "\f146";
+}
+
+.fa-minus-square-o:before {
+ content: "\f147";
+}
+
+.fa-level-up:before {
+ content: "\f148";
+}
+
+.fa-level-down:before {
+ content: "\f149";
+}
+
+.fa-check-square:before {
+ content: "\f14a";
+}
+
+.fa-pencil-square:before {
+ content: "\f14b";
+}
+
+.fa-external-link-square:before {
+ content: "\f14c";
+}
+
+.fa-share-square:before {
+ content: "\f14d";
+}
+
+.fa-compass:before {
+ content: "\f14e";
+}
+
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "\f150";
+}
+
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "\f151";
+}
+
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "\f152";
+}
+
+.fa-euro:before,
+.fa-eur:before {
+ content: "\f153";
+}
+
+.fa-gbp:before {
+ content: "\f154";
+}
+
+.fa-dollar:before,
+.fa-usd:before {
+ content: "\f155";
+}
+
+.fa-rupee:before,
+.fa-inr:before {
+ content: "\f156";
+}
+
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "\f157";
+}
+
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "\f158";
+}
+
+.fa-won:before,
+.fa-krw:before {
+ content: "\f159";
+}
+
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "\f15a";
+}
+
+.fa-file:before {
+ content: "\f15b";
+}
+
+.fa-file-text:before {
+ content: "\f15c";
+}
+
+.fa-sort-alpha-asc:before {
+ content: "\f15d";
+}
+
+.fa-sort-alpha-desc:before {
+ content: "\f15e";
+}
+
+.fa-sort-amount-asc:before {
+ content: "\f160";
+}
+
+.fa-sort-amount-desc:before {
+ content: "\f161";
+}
+
+.fa-sort-numeric-asc:before {
+ content: "\f162";
+}
+
+.fa-sort-numeric-desc:before {
+ content: "\f163";
+}
+
+.fa-thumbs-up:before {
+ content: "\f164";
+}
+
+.fa-thumbs-down:before {
+ content: "\f165";
+}
+
+.fa-youtube-square:before {
+ content: "\f166";
+}
+
+.fa-youtube:before {
+ content: "\f167";
+}
+
+.fa-xing:before {
+ content: "\f168";
+}
+
+.fa-xing-square:before {
+ content: "\f169";
+}
+
+.fa-youtube-play:before {
+ content: "\f16a";
+}
+
+.fa-dropbox:before {
+ content: "\f16b";
+}
+
+.fa-stack-overflow:before {
+ content: "\f16c";
+}
+
+.fa-instagram:before {
+ content: "\f16d";
+}
+
+.fa-flickr:before {
+ content: "\f16e";
+}
+
+.fa-adn:before {
+ content: "\f170";
+}
+
+.fa-bitbucket:before {
+ content: "\f171";
+}
+
+.fa-bitbucket-square:before {
+ content: "\f172";
+}
+
+.fa-tumblr:before {
+ content: "\f173";
+}
+
+.fa-tumblr-square:before {
+ content: "\f174";
+}
+
+.fa-long-arrow-down:before {
+ content: "\f175";
+}
+
+.fa-long-arrow-up:before {
+ content: "\f176";
+}
+
+.fa-long-arrow-left:before {
+ content: "\f177";
+}
+
+.fa-long-arrow-right:before {
+ content: "\f178";
+}
+
+.fa-apple:before {
+ content: "\f179";
+}
+
+.fa-windows:before {
+ content: "\f17a";
+}
+
+.fa-android:before {
+ content: "\f17b";
+}
+
+.fa-linux:before {
+ content: "\f17c";
+}
+
+.fa-dribbble:before {
+ content: "\f17d";
+}
+
+.fa-skype:before {
+ content: "\f17e";
+}
+
+.fa-foursquare:before {
+ content: "\f180";
+}
+
+.fa-trello:before {
+ content: "\f181";
+}
+
+.fa-female:before {
+ content: "\f182";
+}
+
+.fa-male:before {
+ content: "\f183";
+}
+
+.fa-gittip:before,
+.fa-gratipay:before {
+ content: "\f184";
+}
+
+.fa-sun-o:before {
+ content: "\f185";
+}
+
+.fa-moon-o:before {
+ content: "\f186";
+}
+
+.fa-archive:before {
+ content: "\f187";
+}
+
+.fa-bug:before {
+ content: "\f188";
+}
+
+.fa-vk:before {
+ content: "\f189";
+}
+
+.fa-weibo:before {
+ content: "\f18a";
+}
+
+.fa-renren:before {
+ content: "\f18b";
+}
+
+.fa-pagelines:before {
+ content: "\f18c";
+}
+
+.fa-stack-exchange:before {
+ content: "\f18d";
+}
+
+.fa-arrow-circle-o-right:before {
+ content: "\f18e";
+}
+
+.fa-arrow-circle-o-left:before {
+ content: "\f190";
+}
+
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "\f191";
+}
+
+.fa-dot-circle-o:before {
+ content: "\f192";
+}
+
+.fa-wheelchair:before {
+ content: "\f193";
+}
+
+.fa-vimeo-square:before {
+ content: "\f194";
+}
+
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "\f195";
+}
+
+.fa-plus-square-o:before {
+ content: "\f196";
+}
+
+.fa-space-shuttle:before {
+ content: "\f197";
+}
+
+.fa-slack:before {
+ content: "\f198";
+}
+
+.fa-envelope-square:before {
+ content: "\f199";
+}
+
+.fa-wordpress:before {
+ content: "\f19a";
+}
+
+.fa-openid:before {
+ content: "\f19b";
+}
+
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "\f19c";
+}
+
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "\f19d";
+}
+
+.fa-yahoo:before {
+ content: "\f19e";
+}
+
+.fa-google:before {
+ content: "\f1a0";
+}
+
+.fa-reddit:before {
+ content: "\f1a1";
+}
+
+.fa-reddit-square:before {
+ content: "\f1a2";
+}
+
+.fa-stumbleupon-circle:before {
+ content: "\f1a3";
+}
+
+.fa-stumbleupon:before {
+ content: "\f1a4";
+}
+
+.fa-delicious:before {
+ content: "\f1a5";
+}
+
+.fa-digg:before {
+ content: "\f1a6";
+}
+
+.fa-pied-piper-pp:before {
+ content: "\f1a7";
+}
+
+.fa-pied-piper-alt:before {
+ content: "\f1a8";
+}
+
+.fa-drupal:before {
+ content: "\f1a9";
+}
+
+.fa-joomla:before {
+ content: "\f1aa";
+}
+
+.fa-language:before {
+ content: "\f1ab";
+}
+
+.fa-fax:before {
+ content: "\f1ac";
+}
+
+.fa-building:before {
+ content: "\f1ad";
+}
+
+.fa-child:before {
+ content: "\f1ae";
+}
+
+.fa-paw:before {
+ content: "\f1b0";
+}
+
+.fa-spoon:before {
+ content: "\f1b1";
+}
+
+.fa-cube:before {
+ content: "\f1b2";
+}
+
+.fa-cubes:before {
+ content: "\f1b3";
+}
+
+.fa-behance:before {
+ content: "\f1b4";
+}
+
+.fa-behance-square:before {
+ content: "\f1b5";
+}
+
+.fa-steam:before {
+ content: "\f1b6";
+}
+
+.fa-steam-square:before {
+ content: "\f1b7";
+}
+
+.fa-recycle:before {
+ content: "\f1b8";
+}
+
+.fa-automobile:before,
+.fa-car:before {
+ content: "\f1b9";
+}
+
+.fa-cab:before,
+.fa-taxi:before {
+ content: "\f1ba";
+}
+
+.fa-tree:before {
+ content: "\f1bb";
+}
+
+.fa-spotify:before {
+ content: "\f1bc";
+}
+
+.fa-deviantart:before {
+ content: "\f1bd";
+}
+
+.fa-soundcloud:before {
+ content: "\f1be";
+}
+
+.fa-database:before {
+ content: "\f1c0";
+}
+
+.fa-file-pdf-o:before {
+ content: "\f1c1";
+}
+
+.fa-file-word-o:before {
+ content: "\f1c2";
+}
+
+.fa-file-excel-o:before {
+ content: "\f1c3";
+}
+
+.fa-file-powerpoint-o:before {
+ content: "\f1c4";
+}
+
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "\f1c5";
+}
+
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "\f1c6";
+}
+
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "\f1c7";
+}
+
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "\f1c8";
+}
+
+.fa-file-code-o:before {
+ content: "\f1c9";
+}
+
+.fa-vine:before {
+ content: "\f1ca";
+}
+
+.fa-codepen:before {
+ content: "\f1cb";
+}
+
+.fa-jsfiddle:before {
+ content: "\f1cc";
+}
+
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "\f1cd";
+}
+
+.fa-circle-o-notch:before {
+ content: "\f1ce";
+}
+
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+ content: "\f1d0";
+}
+
+.fa-ge:before,
+.fa-empire:before {
+ content: "\f1d1";
+}
+
+.fa-git-square:before {
+ content: "\f1d2";
+}
+
+.fa-git:before {
+ content: "\f1d3";
+}
+
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+ content: "\f1d4";
+}
+
+.fa-tencent-weibo:before {
+ content: "\f1d5";
+}
+
+.fa-qq:before {
+ content: "\f1d6";
+}
+
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "\f1d7";
+}
+
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "\f1d8";
+}
+
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "\f1d9";
+}
+
+.fa-history:before {
+ content: "\f1da";
+}
+
+.fa-circle-thin:before {
+ content: "\f1db";
+}
+
+.fa-header:before {
+ content: "\f1dc";
+}
+
+.fa-paragraph:before {
+ content: "\f1dd";
+}
+
+.fa-sliders:before {
+ content: "\f1de";
+}
+
+.fa-share-alt:before {
+ content: "\f1e0";
+}
+
+.fa-share-alt-square:before {
+ content: "\f1e1";
+}
+
+.fa-bomb:before {
+ content: "\f1e2";
+}
+
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "\f1e3";
+}
+
+.fa-tty:before {
+ content: "\f1e4";
+}
+
+.fa-binoculars:before {
+ content: "\f1e5";
+}
+
+.fa-plug:before {
+ content: "\f1e6";
+}
+
+.fa-slideshare:before {
+ content: "\f1e7";
+}
+
+.fa-twitch:before {
+ content: "\f1e8";
+}
+
+.fa-yelp:before {
+ content: "\f1e9";
+}
+
+.fa-newspaper-o:before {
+ content: "\f1ea";
+}
+
+.fa-wifi:before {
+ content: "\f1eb";
+}
+
+.fa-calculator:before {
+ content: "\f1ec";
+}
+
+.fa-paypal:before {
+ content: "\f1ed";
+}
+
+.fa-google-wallet:before {
+ content: "\f1ee";
+}
+
+.fa-cc-visa:before {
+ content: "\f1f0";
+}
+
+.fa-cc-mastercard:before {
+ content: "\f1f1";
+}
+
+.fa-cc-discover:before {
+ content: "\f1f2";
+}
+
+.fa-cc-amex:before {
+ content: "\f1f3";
+}
+
+.fa-cc-paypal:before {
+ content: "\f1f4";
+}
+
+.fa-cc-stripe:before {
+ content: "\f1f5";
+}
+
+.fa-bell-slash:before {
+ content: "\f1f6";
+}
+
+.fa-bell-slash-o:before {
+ content: "\f1f7";
+}
+
+.fa-trash:before {
+ content: "\f1f8";
+}
+
+.fa-copyright:before {
+ content: "\f1f9";
+}
+
+.fa-at:before {
+ content: "\f1fa";
+}
+
+.fa-eyedropper:before {
+ content: "\f1fb";
+}
+
+.fa-paint-brush:before {
+ content: "\f1fc";
+}
+
+.fa-birthday-cake:before {
+ content: "\f1fd";
+}
+
+.fa-area-chart:before {
+ content: "\f1fe";
+}
+
+.fa-pie-chart:before {
+ content: "\f200";
+}
+
+.fa-line-chart:before {
+ content: "\f201";
+}
+
+.fa-lastfm:before {
+ content: "\f202";
+}
+
+.fa-lastfm-square:before {
+ content: "\f203";
+}
+
+.fa-toggle-off:before {
+ content: "\f204";
+}
+
+.fa-toggle-on:before {
+ content: "\f205";
+}
+
+.fa-bicycle:before {
+ content: "\f206";
+}
+
+.fa-bus:before {
+ content: "\f207";
+}
+
+.fa-ioxhost:before {
+ content: "\f208";
+}
+
+.fa-angellist:before {
+ content: "\f209";
+}
+
+.fa-cc:before {
+ content: "\f20a";
+}
+
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "\f20b";
+}
+
+.fa-meanpath:before {
+ content: "\f20c";
+}
+
+.fa-buysellads:before {
+ content: "\f20d";
+}
+
+.fa-connectdevelop:before {
+ content: "\f20e";
+}
+
+.fa-dashcube:before {
+ content: "\f210";
+}
+
+.fa-forumbee:before {
+ content: "\f211";
+}
+
+.fa-leanpub:before {
+ content: "\f212";
+}
+
+.fa-sellsy:before {
+ content: "\f213";
+}
+
+.fa-shirtsinbulk:before {
+ content: "\f214";
+}
+
+.fa-simplybuilt:before {
+ content: "\f215";
+}
+
+.fa-skyatlas:before {
+ content: "\f216";
+}
+
+.fa-cart-plus:before {
+ content: "\f217";
+}
+
+.fa-cart-arrow-down:before {
+ content: "\f218";
+}
+
+.fa-diamond:before {
+ content: "\f219";
+}
+
+.fa-ship:before {
+ content: "\f21a";
+}
+
+.fa-user-secret:before {
+ content: "\f21b";
+}
+
+.fa-motorcycle:before {
+ content: "\f21c";
+}
+
+.fa-street-view:before {
+ content: "\f21d";
+}
+
+.fa-heartbeat:before {
+ content: "\f21e";
+}
+
+.fa-venus:before {
+ content: "\f221";
+}
+
+.fa-mars:before {
+ content: "\f222";
+}
+
+.fa-mercury:before {
+ content: "\f223";
+}
+
+.fa-intersex:before,
+.fa-transgender:before {
+ content: "\f224";
+}
+
+.fa-transgender-alt:before {
+ content: "\f225";
+}
+
+.fa-venus-double:before {
+ content: "\f226";
+}
+
+.fa-mars-double:before {
+ content: "\f227";
+}
+
+.fa-venus-mars:before {
+ content: "\f228";
+}
+
+.fa-mars-stroke:before {
+ content: "\f229";
+}
+
+.fa-mars-stroke-v:before {
+ content: "\f22a";
+}
+
+.fa-mars-stroke-h:before {
+ content: "\f22b";
+}
+
+.fa-neuter:before {
+ content: "\f22c";
+}
+
+.fa-genderless:before {
+ content: "\f22d";
+}
+
+.fa-facebook-official:before {
+ content: "\f230";
+}
+
+.fa-pinterest-p:before {
+ content: "\f231";
+}
+
+.fa-whatsapp:before {
+ content: "\f232";
+}
+
+.fa-server:before {
+ content: "\f233";
+}
+
+.fa-user-plus:before {
+ content: "\f234";
+}
+
+.fa-user-times:before {
+ content: "\f235";
+}
+
+.fa-hotel:before,
+.fa-bed:before {
+ content: "\f236";
+}
+
+.fa-viacoin:before {
+ content: "\f237";
+}
+
+.fa-train:before {
+ content: "\f238";
+}
+
+.fa-subway:before {
+ content: "\f239";
+}
+
+.fa-medium:before {
+ content: "\f23a";
+}
+
+.fa-yc:before,
+.fa-y-combinator:before {
+ content: "\f23b";
+}
+
+.fa-optin-monster:before {
+ content: "\f23c";
+}
+
+.fa-opencart:before {
+ content: "\f23d";
+}
+
+.fa-expeditedssl:before {
+ content: "\f23e";
+}
+
+.fa-battery-4:before,
+.fa-battery:before,
+.fa-battery-full:before {
+ content: "\f240";
+}
+
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+ content: "\f241";
+}
+
+.fa-battery-2:before,
+.fa-battery-half:before {
+ content: "\f242";
+}
+
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+ content: "\f243";
+}
+
+.fa-battery-0:before,
+.fa-battery-empty:before {
+ content: "\f244";
+}
+
+.fa-mouse-pointer:before {
+ content: "\f245";
+}
+
+.fa-i-cursor:before {
+ content: "\f246";
+}
+
+.fa-object-group:before {
+ content: "\f247";
+}
+
+.fa-object-ungroup:before {
+ content: "\f248";
+}
+
+.fa-sticky-note:before {
+ content: "\f249";
+}
+
+.fa-sticky-note-o:before {
+ content: "\f24a";
+}
+
+.fa-cc-jcb:before {
+ content: "\f24b";
+}
+
+.fa-cc-diners-club:before {
+ content: "\f24c";
+}
+
+.fa-clone:before {
+ content: "\f24d";
+}
+
+.fa-balance-scale:before {
+ content: "\f24e";
+}
+
+.fa-hourglass-o:before {
+ content: "\f250";
+}
+
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+ content: "\f251";
+}
+
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+ content: "\f252";
+}
+
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+ content: "\f253";
+}
+
+.fa-hourglass:before {
+ content: "\f254";
+}
+
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+ content: "\f255";
+}
+
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+ content: "\f256";
+}
+
+.fa-hand-scissors-o:before {
+ content: "\f257";
+}
+
+.fa-hand-lizard-o:before {
+ content: "\f258";
+}
+
+.fa-hand-spock-o:before {
+ content: "\f259";
+}
+
+.fa-hand-pointer-o:before {
+ content: "\f25a";
+}
+
+.fa-hand-peace-o:before {
+ content: "\f25b";
+}
+
+.fa-trademark:before {
+ content: "\f25c";
+}
+
+.fa-registered:before {
+ content: "\f25d";
+}
+
+.fa-creative-commons:before {
+ content: "\f25e";
+}
+
+.fa-gg:before {
+ content: "\f260";
+}
+
+.fa-gg-circle:before {
+ content: "\f261";
+}
+
+.fa-tripadvisor:before {
+ content: "\f262";
+}
+
+.fa-odnoklassniki:before {
+ content: "\f263";
+}
+
+.fa-odnoklassniki-square:before {
+ content: "\f264";
+}
+
+.fa-get-pocket:before {
+ content: "\f265";
+}
+
+.fa-wikipedia-w:before {
+ content: "\f266";
+}
+
+.fa-safari:before {
+ content: "\f267";
+}
+
+.fa-chrome:before {
+ content: "\f268";
+}
+
+.fa-firefox:before {
+ content: "\f269";
+}
+
+.fa-opera:before {
+ content: "\f26a";
+}
+
+.fa-internet-explorer:before {
+ content: "\f26b";
+}
+
+.fa-tv:before,
+.fa-television:before {
+ content: "\f26c";
+}
+
+.fa-contao:before {
+ content: "\f26d";
+}
+
+.fa-500px:before {
+ content: "\f26e";
+}
+
+.fa-amazon:before {
+ content: "\f270";
+}
+
+.fa-calendar-plus-o:before {
+ content: "\f271";
+}
+
+.fa-calendar-minus-o:before {
+ content: "\f272";
+}
+
+.fa-calendar-times-o:before {
+ content: "\f273";
+}
+
+.fa-calendar-check-o:before {
+ content: "\f274";
+}
+
+.fa-industry:before {
+ content: "\f275";
+}
+
+.fa-map-pin:before {
+ content: "\f276";
+}
+
+.fa-map-signs:before {
+ content: "\f277";
+}
+
+.fa-map-o:before {
+ content: "\f278";
+}
+
+.fa-map:before {
+ content: "\f279";
+}
+
+.fa-commenting:before {
+ content: "\f27a";
+}
+
+.fa-commenting-o:before {
+ content: "\f27b";
+}
+
+.fa-houzz:before {
+ content: "\f27c";
+}
+
+.fa-vimeo:before {
+ content: "\f27d";
+}
+
+.fa-black-tie:before {
+ content: "\f27e";
+}
+
+.fa-fonticons:before {
+ content: "\f280";
+}
+
+.fa-reddit-alien:before {
+ content: "\f281";
+}
+
+.fa-edge:before {
+ content: "\f282";
+}
+
+.fa-credit-card-alt:before {
+ content: "\f283";
+}
+
+.fa-codiepie:before {
+ content: "\f284";
+}
+
+.fa-modx:before {
+ content: "\f285";
+}
+
+.fa-fort-awesome:before {
+ content: "\f286";
+}
+
+.fa-usb:before {
+ content: "\f287";
+}
+
+.fa-product-hunt:before {
+ content: "\f288";
+}
+
+.fa-mixcloud:before {
+ content: "\f289";
+}
+
+.fa-scribd:before {
+ content: "\f28a";
+}
+
+.fa-pause-circle:before {
+ content: "\f28b";
+}
+
+.fa-pause-circle-o:before {
+ content: "\f28c";
+}
+
+.fa-stop-circle:before {
+ content: "\f28d";
+}
+
+.fa-stop-circle-o:before {
+ content: "\f28e";
+}
+
+.fa-shopping-bag:before {
+ content: "\f290";
+}
+
+.fa-shopping-basket:before {
+ content: "\f291";
+}
+
+.fa-hashtag:before {
+ content: "\f292";
+}
+
+.fa-bluetooth:before {
+ content: "\f293";
+}
+
+.fa-bluetooth-b:before {
+ content: "\f294";
+}
+
+.fa-percent:before {
+ content: "\f295";
+}
+
+.fa-gitlab:before {
+ content: "\f296";
+}
+
+.fa-wpbeginner:before {
+ content: "\f297";
+}
+
+.fa-wpforms:before {
+ content: "\f298";
+}
+
+.fa-envira:before {
+ content: "\f299";
+}
+
+.fa-universal-access:before {
+ content: "\f29a";
+}
+
+.fa-wheelchair-alt:before {
+ content: "\f29b";
+}
+
+.fa-question-circle-o:before {
+ content: "\f29c";
+}
+
+.fa-blind:before {
+ content: "\f29d";
+}
+
+.fa-audio-description:before {
+ content: "\f29e";
+}
+
+.fa-volume-control-phone:before {
+ content: "\f2a0";
+}
+
+.fa-braille:before {
+ content: "\f2a1";
+}
+
+.fa-assistive-listening-systems:before {
+ content: "\f2a2";
+}
+
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+ content: "\f2a3";
+}
+
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+ content: "\f2a4";
+}
+
+.fa-glide:before {
+ content: "\f2a5";
+}
+
+.fa-glide-g:before {
+ content: "\f2a6";
+}
+
+.fa-signing:before,
+.fa-sign-language:before {
+ content: "\f2a7";
+}
+
+.fa-low-vision:before {
+ content: "\f2a8";
+}
+
+.fa-viadeo:before {
+ content: "\f2a9";
+}
+
+.fa-viadeo-square:before {
+ content: "\f2aa";
+}
+
+.fa-snapchat:before {
+ content: "\f2ab";
+}
+
+.fa-snapchat-ghost:before {
+ content: "\f2ac";
+}
+
+.fa-snapchat-square:before {
+ content: "\f2ad";
+}
+
+.fa-pied-piper:before {
+ content: "\f2ae";
+}
+
+.fa-first-order:before {
+ content: "\f2b0";
+}
+
+.fa-yoast:before {
+ content: "\f2b1";
+}
+
+.fa-themeisle:before {
+ content: "\f2b2";
+}
+
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+ content: "\f2b3";
+}
+
+.fa-fa:before,
+.fa-font-awesome:before {
+ content: "\f2b4";
+}
+
+.fa-handshake-o:before {
+ content: "\f2b5";
+}
+
+.fa-envelope-open:before {
+ content: "\f2b6";
+}
+
+.fa-envelope-open-o:before {
+ content: "\f2b7";
+}
+
+.fa-linode:before {
+ content: "\f2b8";
+}
+
+.fa-address-book:before {
+ content: "\f2b9";
+}
+
+.fa-address-book-o:before {
+ content: "\f2ba";
+}
+
+.fa-vcard:before,
+.fa-address-card:before {
+ content: "\f2bb";
+}
+
+.fa-vcard-o:before,
+.fa-address-card-o:before {
+ content: "\f2bc";
+}
+
+.fa-user-circle:before {
+ content: "\f2bd";
+}
+
+.fa-user-circle-o:before {
+ content: "\f2be";
+}
+
+.fa-user-o:before {
+ content: "\f2c0";
+}
+
+.fa-id-badge:before {
+ content: "\f2c1";
+}
+
+.fa-drivers-license:before,
+.fa-id-card:before {
+ content: "\f2c2";
+}
+
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+ content: "\f2c3";
+}
+
+.fa-quora:before {
+ content: "\f2c4";
+}
+
+.fa-free-code-camp:before {
+ content: "\f2c5";
+}
+
+.fa-telegram:before {
+ content: "\f2c6";
+}
+
+.fa-thermometer-4:before,
+.fa-thermometer:before,
+.fa-thermometer-full:before {
+ content: "\f2c7";
+}
+
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+ content: "\f2c8";
+}
+
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+ content: "\f2c9";
+}
+
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+ content: "\f2ca";
+}
+
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+ content: "\f2cb";
+}
+
+.fa-shower:before {
+ content: "\f2cc";
+}
+
+.fa-bathtub:before,
+.fa-s15:before,
+.fa-bath:before {
+ content: "\f2cd";
+}
+
+.fa-podcast:before {
+ content: "\f2ce";
+}
+
+.fa-window-maximize:before {
+ content: "\f2d0";
+}
+
+.fa-window-minimize:before {
+ content: "\f2d1";
+}
+
+.fa-window-restore:before {
+ content: "\f2d2";
+}
+
+.fa-times-rectangle:before,
+.fa-window-close:before {
+ content: "\f2d3";
+}
+
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+ content: "\f2d4";
+}
+
+.fa-bandcamp:before {
+ content: "\f2d5";
+}
+
+.fa-grav:before {
+ content: "\f2d6";
+}
+
+.fa-etsy:before {
+ content: "\f2d7";
+}
+
+.fa-imdb:before {
+ content: "\f2d8";
+}
+
+.fa-ravelry:before {
+ content: "\f2d9";
+}
+
+.fa-eercast:before {
+ content: "\f2da";
+}
+
+.fa-microchip:before {
+ content: "\f2db";
+}
+
+.fa-snowflake-o:before {
+ content: "\f2dc";
+}
+
+.fa-superpowers:before {
+ content: "\f2dd";
+}
+
+.fa-wpexplorer:before {
+ content: "\f2de";
+}
+
+.fa-meetup:before {
+ content: "\f2e0";
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
diff --git a/assets/css/lifterlms-rtl.min.css b/assets/css/lifterlms-rtl.min.css
new file mode 100644
index 0000000000..a6294a514a
--- /dev/null
+++ b/assets/css/lifterlms-rtl.min.css
@@ -0,0 +1,4 @@
+.llms-pagination ul:before,.llms-pagination ul:after,.llms-form-fields:before,.llms-checkout-cols-2:before,.llms-access-plans:before,.llms-loop-list:before,.llms-cols:before,.llms-form-fields:after,.llms-checkout-cols-2:after,.llms-access-plans:after,.llms-loop-list:after,.llms-cols:after{content:" ";display:table}.llms-pagination ul:after,.llms-form-fields:after,.llms-checkout-cols-2:after,.llms-access-plans:after,.llms-loop-list:after,.llms-cols:after{clear:both}.llms-cols .llms-col{width:100%}@media all and (min-width: 600px){.llms-cols [class*=llms-col-]{float:right}}.llms-flex-cols{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.llms-flex-cols [class*=llms-col]{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:100%}@media all and (min-width: 600px){.llms-cols .llms-col-1,.llms-flex-cols .llms-col-1{width:100%}.llms-cols .llms-col-2,.llms-flex-cols .llms-col-2{width:50%}.llms-cols .llms-col-3,.llms-flex-cols .llms-col-3{width:33.3333333333%}.llms-cols .llms-col-4,.llms-flex-cols .llms-col-4{width:25%}.llms-cols .llms-col-5,.llms-flex-cols .llms-col-5{width:20%}.llms-cols .llms-col-6,.llms-flex-cols .llms-col-6{width:16.6666666667%}.llms-cols .llms-col-7,.llms-flex-cols .llms-col-7{width:14.2857142857%}.llms-cols .llms-col-8,.llms-flex-cols .llms-col-8{width:12.5%}.llms-cols .llms-col-9,.llms-flex-cols .llms-col-9{width:11.1111111111%}.llms-cols .llms-col-10,.llms-flex-cols .llms-col-10{width:10%}.llms-cols .llms-col-11,.llms-flex-cols .llms-col-11{width:9.0909090909%}.llms-cols .llms-col-12,.llms-flex-cols .llms-col-12{width:8.3333333333%}}.llms-button-action,.llms-button-danger,.llms-button-primary,.llms-button-secondary{border:none;border-radius:8px;color:#fefefe;cursor:pointer;display:inline-block;font-size:18px;font-weight:700;text-decoration:none;text-shadow:none;line-height:1;margin:0;max-width:100%;padding:12px 24px;position:relative;-webkit-transition:all .5s ease;transition:all .5s ease}.llms-button-action:disabled,.llms-button-danger:disabled,.llms-button-primary:disabled,.llms-button-secondary:disabled{opacity:.5}.llms-button-action:hover,.llms-button-action:active,.llms-button-danger:hover,.llms-button-danger:active,.llms-button-primary:hover,.llms-button-primary:active,.llms-button-secondary:hover,.llms-button-secondary:active{color:#fefefe}.llms-button-action:focus,.llms-button-danger:focus,.llms-button-primary:focus,.llms-button-secondary:focus{color:#fefefe}.llms-button-action.auto,.llms-button-danger.auto,.llms-button-primary.auto,.llms-button-secondary.auto{width:auto}.llms-button-action.full,.llms-button-danger.full,.llms-button-primary.full,.llms-button-secondary.full{display:block;text-align:center;width:100%}.llms-button-action.square,.llms-button-danger.square,.llms-button-primary.square,.llms-button-secondary.square{padding:12px}.llms-button-action.small,.llms-button-danger.small,.llms-button-primary.small,.llms-button-secondary.small{font-size:13px;padding:8px 14px}.llms-button-action.small.square,.llms-button-danger.small.square,.llms-button-primary.small.square,.llms-button-secondary.small.square{padding:8px}.llms-button-action.large,.llms-button-danger.large,.llms-button-primary.large,.llms-button-secondary.large{font-size:18px;line-height:1.2;padding:16px 32px}.llms-button-action.large.square,.llms-button-danger.large.square,.llms-button-primary.large.square,.llms-button-secondary.large.square{padding:16px}.llms-button-action.large .fa,.llms-button-danger.large .fa,.llms-button-primary.large .fa,.llms-button-secondary.large .fa{right:-7px;position:relative}a.llms-button-action,a.llms-button-danger,a.llms-button-primary{color:#fefefe}.llms-button-primary{background:#466dd8}.llms-button-primary:hover,.llms-button-primary.clicked{background:#274eba}.llms-button-primary:focus,.llms-button-primary:active{background:#6888df}.llms-button-secondary{background:#e1e1e1;color:#444}.llms-button-secondary:hover{color:#414141;background:#cdcdcd}.llms-button-secondary:focus,.llms-button-secondary:active{color:#414141;background:#ebebeb}a.llms-button-secondary{color:#444}.llms-button-action{background:#c05621}.llms-button-action:hover,.llms-button-action.clicked{background:#f67d28}.llms-button-action:focus,.llms-button-action:active{background:#faad76}.llms-button-danger{background:#bb231c}.llms-button-danger:hover{background:#981c17}.llms-button-danger:focus,.llms-button-danger:active{background:#cd261f}.llms-button-outline{background:rgba(0,0,0,0);border:3px solid #1d2327;border-radius:8px;color:#1d2327;cursor:pointer;font-size:16px;font-weight:700;text-decoration:none;text-shadow:none;line-height:1;margin:0;max-width:100%;padding:12px 24px;position:relative;-webkit-transition:all .5s ease;transition:all .5s ease}.llms-button-outline:disabled{opacity:.5}.llms-button-outline:hover,.llms-button-outline:active{color:#1d2327}.llms-button-outline:focus{color:#1d2327}.llms-button-outline.auto{width:auto}.llms-button-outline.full{display:block;text-align:center;width:100%}.llms-button-outline.square{padding:12px}.llms-course-continue-button{display:inline-block}.llms-donut{background-color:#f1f1f1;background-image:none;border-radius:50%;color:#466dd8;height:200px;overflow:hidden;position:relative;width:200px}.llms-donut:before,.llms-donut:after{content:" ";display:table}.llms-donut:after{clear:both}.llms-donut svg{overflow:visible !important;pointer-events:none;width:100%}.llms-donut svg path{fill:none;stroke-width:35px;stroke:#466dd8}.llms-donut.mini{height:36px;width:36px}.llms-donut.mini .percentage{font-size:10px}.llms-donut.small{height:100px;width:100px}.llms-donut.small .percentage{font-size:18px}.llms-donut.medium{height:130px;width:130px}.llms-donut.medium .percentage{font-size:26px}.llms-donut.large{height:260px;width:260px}.llms-donut.large .percentage{font-size:48px}.llms-donut .inside{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;height:80%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;right:50%;position:absolute;text-align:center;-webkit-transform:translate(50%, -50%);transform:translate(50%, -50%);width:80%;top:50%;z-index:3}.llms-donut .percentage{line-height:1.2;font-size:34px}.llms-donut .caption{font-size:75%}.lifterlms [data-tip],.lifterlms [data-title-default],.lifterlms [data-title-active],.llms-metabox [data-tip],.llms-metabox [data-title-default],.llms-metabox [data-title-active],.llms-mb-container [data-tip],.llms-mb-container [data-title-default],.llms-mb-container [data-title-active],.llms-quiz-wrapper [data-tip],.llms-quiz-wrapper [data-title-default],.llms-quiz-wrapper [data-title-active]{position:relative}.lifterlms [data-tip].tip--top-right:before,.lifterlms [data-title-default].tip--top-right:before,.lifterlms [data-title-active].tip--top-right:before,.llms-metabox [data-tip].tip--top-right:before,.llms-metabox [data-title-default].tip--top-right:before,.llms-metabox [data-title-active].tip--top-right:before,.llms-mb-container [data-tip].tip--top-right:before,.llms-mb-container [data-title-default].tip--top-right:before,.llms-mb-container [data-title-active].tip--top-right:before,.llms-quiz-wrapper [data-tip].tip--top-right:before,.llms-quiz-wrapper [data-title-default].tip--top-right:before,.llms-quiz-wrapper [data-title-active].tip--top-right:before{bottom:100%;right:-10px}.lifterlms [data-tip].tip--top-right:hover:before,.lifterlms [data-title-default].tip--top-right:hover:before,.lifterlms [data-title-active].tip--top-right:hover:before,.llms-metabox [data-tip].tip--top-right:hover:before,.llms-metabox [data-title-default].tip--top-right:hover:before,.llms-metabox [data-title-active].tip--top-right:hover:before,.llms-mb-container [data-tip].tip--top-right:hover:before,.llms-mb-container [data-title-default].tip--top-right:hover:before,.llms-mb-container [data-title-active].tip--top-right:hover:before,.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before{bottom:calc(100% + 6px)}.lifterlms [data-tip].tip--top-right:after,.lifterlms [data-title-default].tip--top-right:after,.lifterlms [data-title-active].tip--top-right:after,.llms-metabox [data-tip].tip--top-right:after,.llms-metabox [data-title-default].tip--top-right:after,.llms-metabox [data-title-active].tip--top-right:after,.llms-mb-container [data-tip].tip--top-right:after,.llms-mb-container [data-title-default].tip--top-right:after,.llms-mb-container [data-title-active].tip--top-right:after,.llms-quiz-wrapper [data-tip].tip--top-right:after,.llms-quiz-wrapper [data-title-default].tip--top-right:after,.llms-quiz-wrapper [data-title-active].tip--top-right:after{border-top-color:#444;right:6px;top:0}.lifterlms [data-tip].tip--top-right:hover:after,.lifterlms [data-title-default].tip--top-right:hover:after,.lifterlms [data-title-active].tip--top-right:hover:after,.llms-metabox [data-tip].tip--top-right:hover:after,.llms-metabox [data-title-default].tip--top-right:hover:after,.llms-metabox [data-title-active].tip--top-right:hover:after,.llms-mb-container [data-tip].tip--top-right:hover:after,.llms-mb-container [data-title-default].tip--top-right:hover:after,.llms-mb-container [data-title-active].tip--top-right:hover:after,.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after{top:-6px}.lifterlms [data-tip].tip--top-left:before,.lifterlms [data-title-default].tip--top-left:before,.lifterlms [data-title-active].tip--top-left:before,.llms-metabox [data-tip].tip--top-left:before,.llms-metabox [data-title-default].tip--top-left:before,.llms-metabox [data-title-active].tip--top-left:before,.llms-mb-container [data-tip].tip--top-left:before,.llms-mb-container [data-title-default].tip--top-left:before,.llms-mb-container [data-title-active].tip--top-left:before,.llms-quiz-wrapper [data-tip].tip--top-left:before,.llms-quiz-wrapper [data-title-default].tip--top-left:before,.llms-quiz-wrapper [data-title-active].tip--top-left:before{bottom:100%;left:-10px}.lifterlms [data-tip].tip--top-left:hover:before,.lifterlms [data-title-default].tip--top-left:hover:before,.lifterlms [data-title-active].tip--top-left:hover:before,.llms-metabox [data-tip].tip--top-left:hover:before,.llms-metabox [data-title-default].tip--top-left:hover:before,.llms-metabox [data-title-active].tip--top-left:hover:before,.llms-mb-container [data-tip].tip--top-left:hover:before,.llms-mb-container [data-title-default].tip--top-left:hover:before,.llms-mb-container [data-title-active].tip--top-left:hover:before,.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before{bottom:calc(100% + 6px)}.lifterlms [data-tip].tip--top-left:after,.lifterlms [data-title-default].tip--top-left:after,.lifterlms [data-title-active].tip--top-left:after,.llms-metabox [data-tip].tip--top-left:after,.llms-metabox [data-title-default].tip--top-left:after,.llms-metabox [data-title-active].tip--top-left:after,.llms-mb-container [data-tip].tip--top-left:after,.llms-mb-container [data-title-default].tip--top-left:after,.llms-mb-container [data-title-active].tip--top-left:after,.llms-quiz-wrapper [data-tip].tip--top-left:after,.llms-quiz-wrapper [data-title-default].tip--top-left:after,.llms-quiz-wrapper [data-title-active].tip--top-left:after{border-top-color:#444;left:6px;top:0}.lifterlms [data-tip].tip--top-left:hover:after,.lifterlms [data-title-default].tip--top-left:hover:after,.lifterlms [data-title-active].tip--top-left:hover:after,.llms-metabox [data-tip].tip--top-left:hover:after,.llms-metabox [data-title-default].tip--top-left:hover:after,.llms-metabox [data-title-active].tip--top-left:hover:after,.llms-mb-container [data-tip].tip--top-left:hover:after,.llms-mb-container [data-title-default].tip--top-left:hover:after,.llms-mb-container [data-title-active].tip--top-left:hover:after,.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after{top:-6px}.lifterlms [data-tip].tip--bottom-left:before,.lifterlms [data-title-default].tip--bottom-left:before,.lifterlms [data-title-active].tip--bottom-left:before,.llms-metabox [data-tip].tip--bottom-left:before,.llms-metabox [data-title-default].tip--bottom-left:before,.llms-metabox [data-title-active].tip--bottom-left:before,.llms-mb-container [data-tip].tip--bottom-left:before,.llms-mb-container [data-title-default].tip--bottom-left:before,.llms-mb-container [data-title-active].tip--bottom-left:before,.llms-quiz-wrapper [data-tip].tip--bottom-left:before,.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,.llms-quiz-wrapper [data-title-active].tip--bottom-left:before{top:100%;left:-10px}.lifterlms [data-tip].tip--bottom-left:hover:before,.lifterlms [data-title-default].tip--bottom-left:hover:before,.lifterlms [data-title-active].tip--bottom-left:hover:before,.llms-metabox [data-tip].tip--bottom-left:hover:before,.llms-metabox [data-title-default].tip--bottom-left:hover:before,.llms-metabox [data-title-active].tip--bottom-left:hover:before,.llms-mb-container [data-tip].tip--bottom-left:hover:before,.llms-mb-container [data-title-default].tip--bottom-left:hover:before,.llms-mb-container [data-title-active].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before{top:calc(100% + 6px)}.lifterlms [data-tip].tip--bottom-left:after,.lifterlms [data-title-default].tip--bottom-left:after,.lifterlms [data-title-active].tip--bottom-left:after,.llms-metabox [data-tip].tip--bottom-left:after,.llms-metabox [data-title-default].tip--bottom-left:after,.llms-metabox [data-title-active].tip--bottom-left:after,.llms-mb-container [data-tip].tip--bottom-left:after,.llms-mb-container [data-title-default].tip--bottom-left:after,.llms-mb-container [data-title-active].tip--bottom-left:after,.llms-quiz-wrapper [data-tip].tip--bottom-left:after,.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,.llms-quiz-wrapper [data-title-active].tip--bottom-left:after{border-bottom-color:#444;left:6px;bottom:0}.lifterlms [data-tip].tip--bottom-left:hover:after,.lifterlms [data-title-default].tip--bottom-left:hover:after,.lifterlms [data-title-active].tip--bottom-left:hover:after,.llms-metabox [data-tip].tip--bottom-left:hover:after,.llms-metabox [data-title-default].tip--bottom-left:hover:after,.llms-metabox [data-title-active].tip--bottom-left:hover:after,.llms-mb-container [data-tip].tip--bottom-left:hover:after,.llms-mb-container [data-title-default].tip--bottom-left:hover:after,.llms-mb-container [data-title-active].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after{bottom:-6px}.lifterlms [data-tip].tip--bottom-right:before,.lifterlms [data-title-default].tip--bottom-right:before,.lifterlms [data-title-active].tip--bottom-right:before,.llms-metabox [data-tip].tip--bottom-right:before,.llms-metabox [data-title-default].tip--bottom-right:before,.llms-metabox [data-title-active].tip--bottom-right:before,.llms-mb-container [data-tip].tip--bottom-right:before,.llms-mb-container [data-title-default].tip--bottom-right:before,.llms-mb-container [data-title-active].tip--bottom-right:before,.llms-quiz-wrapper [data-tip].tip--bottom-right:before,.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,.llms-quiz-wrapper [data-title-active].tip--bottom-right:before{top:100%;right:-10px}.lifterlms [data-tip].tip--bottom-right:hover:before,.lifterlms [data-title-default].tip--bottom-right:hover:before,.lifterlms [data-title-active].tip--bottom-right:hover:before,.llms-metabox [data-tip].tip--bottom-right:hover:before,.llms-metabox [data-title-default].tip--bottom-right:hover:before,.llms-metabox [data-title-active].tip--bottom-right:hover:before,.llms-mb-container [data-tip].tip--bottom-right:hover:before,.llms-mb-container [data-title-default].tip--bottom-right:hover:before,.llms-mb-container [data-title-active].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before{top:calc(100% + 6px)}.lifterlms [data-tip].tip--bottom-right:after,.lifterlms [data-title-default].tip--bottom-right:after,.lifterlms [data-title-active].tip--bottom-right:after,.llms-metabox [data-tip].tip--bottom-right:after,.llms-metabox [data-title-default].tip--bottom-right:after,.llms-metabox [data-title-active].tip--bottom-right:after,.llms-mb-container [data-tip].tip--bottom-right:after,.llms-mb-container [data-title-default].tip--bottom-right:after,.llms-mb-container [data-title-active].tip--bottom-right:after,.llms-quiz-wrapper [data-tip].tip--bottom-right:after,.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,.llms-quiz-wrapper [data-title-active].tip--bottom-right:after{border-bottom-color:#444;right:6px;bottom:0}.lifterlms [data-tip].tip--bottom-right:hover:after,.lifterlms [data-title-default].tip--bottom-right:hover:after,.lifterlms [data-title-active].tip--bottom-right:hover:after,.llms-metabox [data-tip].tip--bottom-right:hover:after,.llms-metabox [data-title-default].tip--bottom-right:hover:after,.llms-metabox [data-title-active].tip--bottom-right:hover:after,.llms-mb-container [data-tip].tip--bottom-right:hover:after,.llms-mb-container [data-title-default].tip--bottom-right:hover:after,.llms-mb-container [data-title-active].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after{bottom:-6px}.lifterlms [data-tip]:before,.lifterlms [data-title-default]:before,.lifterlms [data-title-active]:before,.llms-metabox [data-tip]:before,.llms-metabox [data-title-default]:before,.llms-metabox [data-title-active]:before,.llms-mb-container [data-tip]:before,.llms-mb-container [data-title-default]:before,.llms-mb-container [data-title-active]:before,.llms-quiz-wrapper [data-tip]:before,.llms-quiz-wrapper [data-title-default]:before,.llms-quiz-wrapper [data-title-active]:before{background:#444;border-radius:4px;color:#fff;font-size:13px;line-height:1.2;padding:8px;max-width:300px;width:-webkit-max-content;width:-moz-max-content;width:max-content}.lifterlms [data-tip]:after,.lifterlms [data-title-default]:after,.lifterlms [data-title-active]:after,.llms-metabox [data-tip]:after,.llms-metabox [data-title-default]:after,.llms-metabox [data-title-active]:after,.llms-mb-container [data-tip]:after,.llms-mb-container [data-title-default]:after,.llms-mb-container [data-title-active]:after,.llms-quiz-wrapper [data-tip]:after,.llms-quiz-wrapper [data-title-default]:after,.llms-quiz-wrapper [data-title-active]:after{content:"";border:6px solid rgba(0,0,0,0);height:0;width:0}.lifterlms [data-tip]:before,.lifterlms [data-tip]:after,.lifterlms [data-title-default]:before,.lifterlms [data-title-default]:after,.lifterlms [data-title-active]:before,.lifterlms [data-title-active]:after,.llms-metabox [data-tip]:before,.llms-metabox [data-tip]:after,.llms-metabox [data-title-default]:before,.llms-metabox [data-title-default]:after,.llms-metabox [data-title-active]:before,.llms-metabox [data-title-active]:after,.llms-mb-container [data-tip]:before,.llms-mb-container [data-tip]:after,.llms-mb-container [data-title-default]:before,.llms-mb-container [data-title-default]:after,.llms-mb-container [data-title-active]:before,.llms-mb-container [data-title-active]:after,.llms-quiz-wrapper [data-tip]:before,.llms-quiz-wrapper [data-tip]:after,.llms-quiz-wrapper [data-title-default]:before,.llms-quiz-wrapper [data-title-default]:after,.llms-quiz-wrapper [data-title-active]:before,.llms-quiz-wrapper [data-title-active]:after{opacity:0;-webkit-transition:all .2s .1s ease;transition:all .2s .1s ease;position:absolute;pointer-events:none;visibility:hidden}.lifterlms [data-tip]:hover:before,.lifterlms [data-tip]:hover:after,.lifterlms [data-title-default]:hover:before,.lifterlms [data-title-default]:hover:after,.lifterlms [data-title-active]:hover:before,.lifterlms [data-title-active]:hover:after,.llms-metabox [data-tip]:hover:before,.llms-metabox [data-tip]:hover:after,.llms-metabox [data-title-default]:hover:before,.llms-metabox [data-title-default]:hover:after,.llms-metabox [data-title-active]:hover:before,.llms-metabox [data-title-active]:hover:after,.llms-mb-container [data-tip]:hover:before,.llms-mb-container [data-tip]:hover:after,.llms-mb-container [data-title-default]:hover:before,.llms-mb-container [data-title-default]:hover:after,.llms-mb-container [data-title-active]:hover:before,.llms-mb-container [data-title-active]:hover:after,.llms-quiz-wrapper [data-tip]:hover:before,.llms-quiz-wrapper [data-tip]:hover:after,.llms-quiz-wrapper [data-title-default]:hover:before,.llms-quiz-wrapper [data-title-default]:hover:after,.llms-quiz-wrapper [data-title-active]:hover:before,.llms-quiz-wrapper [data-title-active]:hover:after{opacity:1;-webkit-transition:all 0 .1s ease;transition:all 0 .1s ease;visibility:visible;z-index:99999999}.lifterlms [data-tip]:before,.llms-metabox [data-tip]:before,.llms-mb-container [data-tip]:before,.llms-quiz-wrapper [data-tip]:before{content:attr(data-tip)}.lifterlms [data-tip].active:before,.llms-metabox [data-tip].active:before,.llms-mb-container [data-tip].active:before,.llms-quiz-wrapper [data-tip].active:before{content:attr(data-tip-active)}.llms-membership-image{display:block;margin:0 auto}.llms-course-image{display:block;margin:0 auto;max-width:100%}.llms-featured-image{display:block;margin:0 auto}.llms-image-thumb{width:150px}.llms-video-wrapper .center-video{height:auto;max-width:100%;overflow:hidden;position:relative;padding-top:56.25%;text-align:center}.llms-video-wrapper .center-video>.wp-video,.llms-video-wrapper .center-video .fluid-width-video-wrapper,.llms-video-wrapper .center-video iframe,.llms-video-wrapper .center-video object,.llms-video-wrapper .center-video embed{height:100%;right:0;position:absolute;top:0;width:100%}.llms-video-wrapper .center-video>.wp-video{width:100% !important}.llms-video-wrapper .center-video .fluid-width-video-wrapper{padding-top:0 !important}.clear{clear:both;width:100%}.llms-featured-image{text-align:center}#main-content .llms-payment-options p{margin:0;font-size:16px}.llms-option{display:block;position:relative;margin:20px 0;padding-right:40px;font-size:16px}.llms-option label{cursor:pointer;position:static}.llms-option:first-child{margin-top:0}.llms-option:last-child{margin-bottom:0}#main-content .llms-option:last-child{margin-bottom:0}.llms-option input[type=radio]{display:block;position:absolute;top:3px;right:0;z-index:0}.llms-option input[type=radio]{display:inline-block}.llms-option input[type=radio]+label span.llms-radio{display:none}.llms-option input[type=radio]+label span.llms-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:20;position:absolute;top:0;right:-2px;display:inline-block;width:24px;height:24px;border-radius:50%;cursor:pointer;vertical-align:middle;-webkit-box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.5) 0 0 0 1px;box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.5) 0 0 0 1px;background:#efefef;background-image:radial-gradient(ellipse at center, #bb231c 0%, #bb231c 40%, #efefef 45%);background-repeat:no-repeat;-webkit-transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);transition:background-position .15s cubic-bezier(0.8, 0, 1, 1)}.llms-option input[type=radio]:checked+label span.llms-radio{-webkit-transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1)}.llms-option input[type=radio]+label span.llms-radio{background-position:-24px 0}.llms-option input[type=radio]:checked+label span.llms-radio{background-position:100% 0}.llms-option input[type=submit]{border:none;background:#bb231c;color:#fff;font-size:20px;padding:10px 0;border-radius:3px;cursor:pointer;width:100%}.llms-styled-text{padding:14px 0}.llms-notice-box{border-radius:3px;z-index:10;margin:10px 0;padding:15px 20px;border:1px solid #ccc;list-style-type:none;width:100%;overflow:auto}.llms-notice-box input[type=text]{height:auto}.llms-notice-box .col-1-1{width:100%}.llms-notice-box .col-1-1 input[type=text]{width:100%}.llms-notice-box .col-1-2{width:50%;float:right}@media screen and (max-width: 768px){.llms-notice-box .col-1-2{width:100%}}.llms-notice-box .col-1-3{width:33%;float:right;margin-left:10px}.llms-notice-box .col-1-4{width:25%;float:right;margin-left:10px}@media screen and (max-width: 768px){.llms-notice-box .col-1-4{width:100%}}.llms-notice-box .col-1-6{width:16.6%;float:right;margin-left:10px}.llms-notice-box .col-1-8{width:11%;float:left}.llms-notice-box .llms-pad-right{padding-left:10px}@media screen and (max-width: 768px){.llms-notice-box .llms-pad-right{padding-left:0}}input[type=text].cc_cvv,#cc_cvv{margin-left:0;width:23%;float:left}.llms-clear-box{border-radius:3px;z-index:10;margin:10px 0;padding:15px 20px;list-style-type:none;width:100%;overflow:auto}.llms-price-label{font-weight:normal}.llms-final-price{font-weight:bold;float:left}.llms-center-content{text-align:center}.llms-input-text{background-color:#fff;border:1px solid #ddd;color:#333;font-size:18px;font-weight:300;padding:16px;width:100%}.llms-price{margin-bottom:0;font-weight:bold}.llms-price-loop{margin-bottom:0;font-weight:bold}.courses .entry{padding:0}.list-view .site-content .llms-course-list .hentry,.list-view .site-content .llms-membership-list .hentry{border-top:0;padding-top:0}.llms-content{width:100%}.llms-lesson-button-wrapper{width:100%;display:block;clear:both;text-align:center}.llms-template-wrapper{width:100%;display:block;clear:both}.llms-button-wrapper{width:100%;display:block;clear:both;text-align:center}.llms-styled-select{border:1px solid #ccc;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px;overflow:hidden;position:relative}.llms-styled-select,.llms-styled-select select{width:100%}select:focus{outline:none}.llms-styled-select select{height:34px;padding:5px 5px 5px 0;background:rgba(0,0,0,0);border:none;-webkit-appearance:none;font-size:16px;color:#444}@-moz-document url-prefix(){.--ms-styled-select select{width:110%}}.llms-styled-select .fa-sort-desc{position:absolute;top:0;left:12px;font-size:24px;color:#ccc}select::-ms-expand{display:none}_:-o-prefocus .llms-styled-select,.selector .llms-styled-select{background:none}.llms-form-item-wrapper{margin-bottom:1em}.llms-progress-circle{position:relative;width:200px;height:200px;float:right}.llms-progress-circle-count{top:27%;position:absolute;width:94%;text-align:center;color:#666;font-size:44px}.llms-progress-circle svg{position:absolute;width:200px;height:200px}.llms-progress-circle circle{fill:rgba(0,0,0,0)}svg .llms-background-circle{fill:rgba(0,0,0,0);stroke-width:10px;stroke:#f1f2f1;stroke-dasharray:430}svg .llms-animated-circle{fill:rgba(0,0,0,0);stroke-width:10px;stroke:#e5554e;stroke-dasharray:430;stroke-dashoffset:410}.llms-widget-syllabus .llms-lesson.current-lesson .lesson-title{font-weight:700}.llms-widget-syllabus .section-header{display:-webkit-box;display:-ms-flexbox;display:flex;gap:5px}.llms-widget-syllabus .section-header .llms-collapse-caret{text-align:right;width:14px}.llms-widget-syllabus .llms-lesson-complete,.llms-widget-syllabus .lesson-complete-placeholder{font-size:18px;margin-left:5px;color:#ccc}.llms-widget-syllabus .llms-lesson-complete.done,.llms-widget-syllabus .lesson-complete-placeholder.done{color:#466dd8}.llms-widget-syllabus .section-title{font-weight:bold}.llms-widget-syllabus .lesson-title a{text-decoration:underline}.llms-widget-syllabus .lesson-title.done a{color:#666;text-decoration:line-through}.llms-widget-syllabus ul{list-style-type:none;margin:0;padding:0}.llms-widget-syllabus ul li{list-style-type:none;margin:0 0 10px 0}.llms-widget-syllabus ul li ul{margin:0 0 15px 0}.llms-widget-syllabus ul li ul li{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 0 10px 0;padding:0}.llms-remove-coupon{float:left}.llms-lesson-preview.is-complete .llms-lesson-link-locked{padding-right:75px}.llms-lesson-tooltip{display:none;position:absolute;color:#000;background-color:silver;padding:.25em;border-radius:2px;z-index:100;top:0;right:50%;text-align:center;-webkit-transform:translateX(50%) translateY(-100%);transform:translateX(50%) translateY(-100%)}.llms-lesson-tooltip:after{content:"";width:0;height:0;border-top:8px solid silver;border-right:8px solid rgba(0,0,0,0);border-left:8px solid rgba(0,0,0,0);position:absolute;bottom:-8px;right:50%;-webkit-transform:translateX(50%);transform:translateX(50%)}.llms-lesson-tooltip.active{display:inline-block}.llms-favorite-wrapper{cursor:pointer}.llms-favorite-wrapper .fa-heart{color:#ef476f}.llms-has-favorite .llms-parent-course-link{display:inline-block;margin-bottom:20px}.llms-has-favorite .llms-parent-course-link+.llms-favorite-wrapper{float:left;margin:0}.llms-syllabus-wrapper .llms-has-favorite{text-align:right}.llms-syllabus-wrapper .llms-has-favorite .llms-favorite-wrapper{display:inline-block}.llms-loop-list{list-style:none;margin:0 -10px;padding:0}@media all and (min-width: 600px){.llms-loop-list.cols-1 .llms-loop-item{width:100%}.llms-loop-list.cols-2 .llms-loop-item{width:50%}.llms-loop-list.cols-3 .llms-loop-item{width:33.3333333333%}.llms-loop-list.cols-4 .llms-loop-item{width:25%}.llms-loop-list.cols-5 .llms-loop-item{width:20%}.llms-loop-list.cols-6 .llms-loop-item{width:16.6666666667%}}.llms-loop-item{float:right;list-style:none;margin:0;padding:0;width:100%}.llms-loop-item-content{background:#fefefe;border:1px solid #dedede;border-radius:6px;overflow:hidden;padding-bottom:15px;margin:10px}.llms-loop-item-content .llms-loop-link{color:#010101;display:block;text-decoration:none}.llms-loop-item-content .llms-loop-link:visited{color:#010101}.llms-loop-item-content .llms-featured-image{display:block;max-width:100%}.llms-loop-item-content .llms-loop-title{color:#010101;margin:15px 0}.llms-loop-item-content .llms-loop-title:hover{color:#466dd8}.llms-loop-item-content .llms-meta,.llms-loop-item-content .llms-author,.llms-loop-item-content .llms-loop-title{padding:0 15px}.llms-loop-item-content .llms-meta,.llms-loop-item-content .llms-author{color:#444;display:block;font-size:14px;margin-bottom:10px}.llms-loop-item-content .llms-meta:last-child,.llms-loop-item-content .llms-author:last-child{margin-bottom:0}.llms-loop-item-content .llms-author{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:5px}.llms-loop-item-content .llms-featured-img-wrap{overflow:hidden}.llms-loop-item-content p{margin-bottom:0}.llms-loop-item-content .llms-progress{margin:0;height:.4em}.llms-loop-item-content .llms-progress .progress__indicator{display:none}.llms-loop-item-content .llms-progress .llms-progress-bar{background-color:#f6f6f6;left:0;top:0}.llms-meta-info{margin:40px 0}.llms-meta-info .llms-meta-title{margin:0}.llms-meta-info .llms-meta p{margin-bottom:0}.llms-meta-info .llms-meta span{font-weight:700}.llms-course-progress{margin:40px auto;max-width:480px;text-align:center}.llms-syllabus-wrapper{margin:20px 0;text-align:right}.llms-syllabus-wrapper .llms-section-title{margin:40px 0 10px}.llms-syllabus-wrapper .llms-section-title+.llms-lesson-preview{border-top:1px solid #dedede}.llms-lesson-preview{border-left:1px solid #dedede;border-bottom:1px solid #dedede;border-right:1px solid #dedede;display:block;margin:0;max-width:100%;position:relative}.llms-lesson-preview .llms-lesson-link{background:#fefefe;color:#010101;display:block;padding:15px;text-decoration:none;-webkit-transition:background-color .3s ease;transition:background-color .3s ease}.llms-lesson-preview .llms-lesson-link:hover{background:#eaeaea}.llms-lesson-preview .llms-lesson-link:visited{color:#212121}.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked{background:#efefef;color:#666}.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked:hover{background:#dedede}.llms-lesson-preview .llms-lesson-link .llms-lesson-preview-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.llms-lesson-preview .llms-lesson-thumbnail{margin-bottom:15px}.llms-lesson-preview .llms-lesson-thumbnail img{display:block;height:auto;width:100%}.llms-lesson-preview .llms-lesson-title{font-weight:700;margin:0 auto 5px}.llms-lesson-preview .llms-lesson-title:last-child{margin-bottom:0}.llms-lesson-preview .llms-lesson-excerpt{margin-top:5px}.llms-lesson-preview .llms-lesson-excerpt p{margin:0 0 10px 0;padding:0}.llms-lesson-preview .llms-lesson-excerpt p:last-of-type{margin:0}.llms-lesson-preview .llms-main{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.llms-lesson-preview .llms-extra{min-width:50px;text-align:left}.llms-lesson-preview .llms-lesson-counter,.llms-lesson-preview .llms-free-lesson-svg,.llms-lesson-preview .llms-lesson-complete,.llms-lesson-preview .llms-lesson-complete-placeholder{display:block}.llms-lesson-preview.is-free .llms-lesson-complete,.llms-lesson-preview.is-complete .llms-lesson-complete{color:#466dd8}.llms-lesson-preview.is-complete .llms-lesson-title:not(.llms-student-dashboard .llms-lesson-title):not(.llms-course-navigation .llms-lesson-title){text-decoration:line-through}.llms-lesson-preview .llms-icon-free{background:#466dd8;border-radius:6px;color:#fefefe;display:inline-block;font-size:14px;font-weight:bold;line-height:1;padding:5px 8px 4px;white-space:nowrap}.llms-lesson-preview.is-incomplete .llms-lesson-complete{color:#cacaca}.llms-lesson-preview .llms-lesson-counter{font-size:16px;margin-bottom:5px}.llms-lesson-preview .llms-free-lesson-svg{fill:currentColor;height:23px;width:50px}.llms-course-navigation{display:-webkit-box;display:-ms-flexbox;display:flex;gap:20px}.llms-course-navigation .llms-prev-lesson,.llms-course-navigation .llms-next-lesson,.llms-course-navigation .llms-back-to-course{-webkit-box-flex:1;-ms-flex:1;flex:1}.llms-course-navigation .llms-prev-lesson+.llms-back-to-course{text-align:left}.llms-course-navigation .llms-next-lesson .llms-lesson-preview .llms-lesson-link{text-align:left}.llms-course-navigation .llms-lesson-preview{border:1px solid #dedede}.llms-course-navigation .llms-lesson-link{display:block}.llms-progress{clear:both;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;position:relative;height:1em;width:100%;margin:15px 0}.llms-progress .llms-progress-bar{background-color:#dedede;position:relative;height:.4em;top:.3em;width:100%}.llms-progress .progress-bar-complete{background-color:#ef476f;height:100%}.progress__indicator{float:left;text-align:left;height:1em;line-height:1em;margin-right:5px;white-space:nowrap}.llms-author .name{margin-right:5px}.llms-author .label{margin-right:5px}.llms-author .avatar{border-radius:50%}.llms-author .bio{margin-top:5px}.llms-instructor-info{margin:40px 0}.llms-instructor-info .llms-meta-title{margin:0}.llms-instructor-info .llms-instructors .llms-col:first-child .llms-author{margin-right:0}.llms-instructor-info .llms-instructors .llms-col:last-child .llms-author{margin-left:0}.llms-instructor-info .llms-instructors .llms-author{background:#fefefe;border:1px solid #dedede;border-top:4px solid #466dd8;border-bottom-left-radius:6px;border-bottom-right-radius:6px;color:#010101;text-align:center;margin:45px 0 0;padding:0 20px 20px}.llms-instructor-info .llms-instructors .llms-author .avatar{background:#466dd8;border:4px solid #466dd8;display:block;margin:-35px auto 10px}.llms-instructor-info .llms-instructors .llms-author .llms-author-info{display:block}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.name{font-weight:700}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.label{font-size:85%}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.bio{font-size:90%;margin-bottom:0}.llms_review{margin:20px 0px;padding:10px}.llms_review h5{font-size:17px;margin:3px 0px}.llms_review h6{font-size:13px}.llms_review p{font-size:15px}.review_box [type=text]{margin:10px 0px}.review_box h5{color:red;display:none}.review_box+.thank_you_box{display:none}.llms-notice{background:rgba(70,109,216,.3);border-color:#466dd8;border-style:solid;border-width:1px;border-radius:6px;padding:15px;margin-bottom:40px}.llms-notice a{color:inherit}.llms-notice p:last-child,.llms-notice ul:last-child{margin-bottom:0}.llms-notice li{list-style-type:none}.llms-notice.llms-debug{background:rgba(202,202,202,.3);border-color:#cacaca}.llms-notice.llms-error{background:rgba(187,35,28,.15);border-color:#bb231c}.llms-notice.llms-success{background:rgba(77,141,60,.15);border-color:#4d8d3c}.entry-content .llms-notice{margin:0 0 40px}.entry-content .llms-notice li{list-style-type:none}ul.llms-achievements-loop,.lifterlms ul.llms-achievements-loop,ul.llms-certificates-loop,.lifterlms ul.llms-certificates-loop{list-style-type:none;margin:0 -10px;padding:0}ul.llms-achievements-loop:before,ul.llms-achievements-loop:after,.lifterlms ul.llms-achievements-loop:before,.lifterlms ul.llms-achievements-loop:after,ul.llms-certificates-loop:before,ul.llms-certificates-loop:after,.lifterlms ul.llms-certificates-loop:before,.lifterlms ul.llms-certificates-loop:after{content:" ";display:table}ul.llms-achievements-loop:after,.lifterlms ul.llms-achievements-loop:after,ul.llms-certificates-loop:after,.lifterlms ul.llms-certificates-loop:after{clear:both}ul.llms-achievements-loop li.llms-achievement-loop-item,ul.llms-achievements-loop li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop li.llms-certificate-loop-item,ul.llms-certificates-loop li.llms-achievement-loop-item,ul.llms-certificates-loop li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop li.llms-certificate-loop-item{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;float:right;list-style-type:none;margin:0;padding:10px;width:100%}@media all and (min-width: 600px){ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item{width:100%}ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item{width:50%}ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item{width:33.3333333333%}ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item{width:25%}ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item{width:20%}}.llms-achievement,.llms-certificate{background:#fefefe;border:none;border-radius:12px;color:#010101;display:block;padding:20px 0;text-decoration:none;width:100%}.llms-achievement:hover,.llms-certificate:hover{background:#eaeaea}.llms-achievement .llms-achievement-img,.llms-certificate .llms-achievement-img{display:block;margin:0 auto;max-width:80%}.llms-achievement .llms-achievement-title,.llms-certificate .llms-achievement-title{color:#010101;font-size:16px;margin:0;padding:10px;text-align:center}.llms-achievement .llms-certificate-title,.llms-certificate .llms-certificate-title{color:#010101;font-size:16px;margin:0;padding:0 0 10px}.llms-achievement .llms-achievement-info,.llms-achievement .llms-achievement-date,.llms-certificate .llms-achievement-info,.llms-certificate .llms-achievement-date{display:none}.llms-achievement .llms-achievement-content,.llms-certificate .llms-achievement-content{padding:20px}.llms-achievement .llms-achievement-content:empty,.llms-certificate .llms-achievement-content:empty{padding:0}.llms-achievement .llms-achievement-content *:last-child,.llms-certificate .llms-achievement-content *:last-child{margin-bottom:0}.llms-certificate{border:4px double #dedede;padding:20px 10px;background:#fefefe;text-align:center}.llms-certificate:hover{background:#fefefe;border-color:#eaeaea}.llms-achievement-modal .llms-achievement{background:#fff}.llms-achievement-modal .llms-achievement-info{display:block}.llms-achievement-modal .llms-achievement-title{display:none}.llms-notification{background:#fefefe;-webkit-box-shadow:0 1px 2px -2px #333,0 1px 1px -1px #333;box-shadow:0 1px 2px -2px #333,0 1px 1px -1px #333;border-top:4px solid #466dd8;color:#010101;opacity:0;padding:12px;position:fixed;left:-800px;top:24px;-webkit-transition:opacity .4s ease-in-out,left .4s ease-in-out;transition:opacity .4s ease-in-out,left .4s ease-in-out;visibility:hidden;width:auto;z-index:9999999}.llms-notification:before,.llms-notification:after{content:" ";display:table}.llms-notification:after{clear:both}.llms-notification.visible{right:12px;opacity:1;left:12px;-webkit-transition:opacity .4s ease-in-out,left .4s ease-in-out,top .1s ease-in-out,background .2s ease-in-out,-webkit-transform .2s ease-in-out;transition:opacity .4s ease-in-out,left .4s ease-in-out,top .1s ease-in-out,background .2s ease-in-out,-webkit-transform .2s ease-in-out;transition:opacity .4s ease-in-out,left .4s ease-in-out,top .1s ease-in-out,background .2s ease-in-out,transform .2s ease-in-out;transition:opacity .4s ease-in-out,left .4s ease-in-out,top .1s ease-in-out,background .2s ease-in-out,transform .2s ease-in-out,-webkit-transform .2s ease-in-out;visibility:visible}.llms-notification.visible:hover .llms-notification-dismiss{opacity:1}.llms-notification .llms-notification-content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.llms-notification .llms-notification-main{-ms-flex-item-align:start;align-self:flex-start;-webkit-box-flex:4;-ms-flex:4;flex:4;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.llms-notification .llms-notification-title{color:#010101;font-size:18px;margin:0}.llms-notification .llms-notification-body{font-size:14px;line-height:1.4}.llms-notification .llms-notification-body p,.llms-notification .llms-notification-body li{font-size:inherit}.llms-notification .llms-notification-body p{margin-bottom:8px}.llms-notification .llms-notification-body p img{max-width:100%}.llms-notification .llms-notification-body .llms-mini-cert{background:#f6f6f6;border:1px solid #d0d0d0;-webkit-box-shadow:inset 0 0 0 3px #fefefe,inset 0 0 0 4px #dedede;box-shadow:inset 0 0 0 3px #fefefe,inset 0 0 0 4px #dedede;padding:16px 16px 24px;margin-top:12px}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert-title{font-size:16px;font-weight:700;margin:12px auto;text-align:center}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body{width:100%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(1){width:65%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(2){width:35%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(3){width:85%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(4){width:75%;margin-top:18px}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(5){width:70%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(6){margin-right:12px;margin-bottom:-24px}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(7){width:65%;margin-left:12px}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-line{border-radius:2px;height:8px;background:#b0b0b0;background-image:-webkit-gradient(linear, right top, left top, from(#b0b0b0), color-stop(20%, #a0a0a0), color-stop(40%, #b0b0b0), to(#b0b0b0));background-image:linear-gradient(to left, #b0b0b0 0%, #a0a0a0 20%, #b0b0b0 40%, #b0b0b0 100%);background-repeat:no-repeat;margin:4px auto}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-dot{background:#b0b0b0;border-radius:50%;display:inline-block;content:"";height:24px;width:24px}.llms-notification .llms-notification-body .llms-mini-cert p{margin-bottom:0}.llms-notification .llms-notification-aside{-ms-flex-item-align:start;align-self:flex-start;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-left:12px;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.llms-notification .llms-notification-icon{display:block;max-width:64px}.llms-notification .llms-notification-footer{border-top:1px solid #e5e5e5;font-size:12px;margin-top:12px;padding:6px 6px 0;text-align:left}.llms-notification .llms-notification-footer a{color:#010101}.llms-notification .llms-notification-dismiss{color:#bb231c;cursor:pointer;font-size:22px;position:absolute;left:10px;top:8px;-webkit-transition:opacity .4s ease-in-out;transition:opacity .4s ease-in-out}.llms-sd-notification-center .llms-notification-list,.llms-sd-notification-center .llms-notification-list-item{list-style-type:none;margin:0;padding:0}.llms-sd-notification-center .llms-notification-list-item:hover .llms-notification{background:#fcfcfc}.llms-sd-notification-center .llms-notification{opacity:1;border-top:1px solid #e5e5e5;right:auto;padding:24px;position:relative;left:auto;top:auto;visibility:visible;width:auto}.llms-sd-notification-center .llms-notification .llms-notification-aside{max-width:64px}.llms-sd-notification-center .llms-notification .llms-notification-footer{border:none;padding:0;text-align:right}.llms-sd-notification-center .llms-notification .llms-progress{display:none !important}.llms-sd-notification-center .llms-notification .llms-notification-date{color:#515151;float:right;margin-left:6px}.llms-sd-notification-center .llms-notification .llms-mini-cert{margin:0 auto;max-width:380px}@media all and (min-width: 480px){.llms-notification{left:-800px;width:360px}.llms-notification.visible{right:auto;left:24px}.llms-notification .llms-notification-dismiss{opacity:0}}.llms-pagination ul{list-style-type:none;margin:40px 0;padding:0}.llms-pagination ul li{float:right}.llms-pagination ul li a{border-bottom:0;text-decoration:none}.llms-pagination ul li .page-numbers{padding:.5em;text-decoration:underline}.llms-pagination ul li .page-numbers.current{text-decoration:none}.llms-tooltip{background:#2a2a2a;border-radius:4px;color:#fff;font-size:14px;line-height:1.2;opacity:0;top:-20px;padding:8px 12px;right:50%;position:absolute;pointer-events:none;-webkit-transform:translateX(50%);transform:translateX(50%);-webkit-transition:opacity .2s ease,top .2s ease;transition:opacity .2s ease,top .2s ease;max-width:320px}.llms-tooltip.show{top:-28px;opacity:1}.llms-tooltip:after{bottom:-8px;border-top:8px solid #2a2a2a;border-right:8px solid rgba(0,0,0,0);border-left:8px solid rgba(0,0,0,0);content:"";height:0;right:50%;position:absolute;-webkit-transform:translateX(50%);transform:translateX(50%);width:0}.webui-popover-title{font-size:initial;font-weight:initial;line-height:initial}.webui-popover-inverse .webui-popover-inner .close{color:#fff;opacity:.6;text-shadow:none}.webui-popover-inverse .webui-popover-inner .close:hover{opacity:.8}.webui-popover-inverse .webui-popover-content a{color:#fff;text-decoration:underline}.webui-popover-inverse .webui-popover-content a:hover{text-decoration:none}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results{margin:0;padding:0;list-style-type:none}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question{background:#efefef;border-radius:6px;margin:0 0 15px;position:relative;list-style-type:none}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer{color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:15px 15px 15px 35px;text-decoration:none}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct,.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect{background:rgba(192,86,33,.2)}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon,.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon{background-color:#c05621}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct{background:rgba(77,141,60,.15)}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon{background-color:#4d8d3c}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect{background:rgba(187,35,28,.15)}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon{background-color:#bb231c}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question pre{overflow:auto}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title{font-size:22px;margin:0;line-height:1.4}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points{line-height:1.4}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip{position:absolute;left:-12px;top:-2px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon{color:rgba(255,255,255,.65);border-radius:50%;font-size:30px;height:40px;line-height:40px;text-align:center;width:40px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main{display:none;padding:0 15px 15px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label{font-weight:700;margin:0 0 10px;padding:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers{margin:0;padding:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer{padding:0;margin:0 30px 0 0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child{list-style-type:none;margin-right:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img{height:auto;max-width:200px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section{border-top:2px solid rgba(255,255,255,.5);margin-top:20px;padding-top:20px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child{border-top:none;margin-top:0;padding-top:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers,.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers{list-style-type:none;margin:0;padding:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer,.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer{display:inline-block;list-style-type:none;margin:0;padding:5px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed{opacity:.5}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title{font-style:italic;font-weight:normal}.single-llms_quiz .llms-return{margin-bottom:10px}.single-llms_quiz .llms-quiz-results:before,.single-llms_quiz .llms-quiz-results:after{content:" ";display:table}.single-llms_quiz .llms-quiz-results:after{clear:both}.single-llms_quiz .llms-quiz-results .llms-donut.passing{color:#4d8d3c}.single-llms_quiz .llms-quiz-results .llms-donut.passing svg path{stroke:#4d8d3c}.single-llms_quiz .llms-quiz-results .llms-donut.pending{color:#555}.single-llms_quiz .llms-quiz-results .llms-donut.pending svg path{stroke:#555}.single-llms_quiz .llms-quiz-results .llms-donut.failing{color:#bb231c}.single-llms_quiz .llms-quiz-results .llms-donut.failing svg path{stroke:#bb231c}.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside,.single-llms_quiz .llms-quiz-results .llms-quiz-results-main,.single-llms_quiz .llms-quiz-results .llms-quiz-results-history{margin-bottom:20px}@media all and (min-width: 600px){.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside{float:right;width:220px}.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside+.llms-quiz-results-main{float:left;width:calc(100% - 300px)}.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside+.llms-quiz-results-main+.llms-quiz-results-history{float:left;width:calc(100% - 300px)}.single-llms_quiz .llms-quiz-results .llms-quiz-results-history{clear:left}}.single-llms_quiz ul.llms-quiz-meta-info{list-style-type:none;margin:0;padding:0}.single-llms_quiz ul.llms-quiz-meta-info li{list-style-type:none;margin:10px 0 0;padding:0}.single-llms_quiz ul.llms-quiz-meta-info{margin-bottom:10px}.single-llms_quiz .llms-quiz-buttons{margin-top:10px;text-align:right}.single-llms_quiz .llms-quiz-buttons form{display:inline-block}.llms-quiz-question-wrapper{min-height:140px;position:relative}.llms-quiz-question-wrapper .llms-quiz-loading{bottom:20px;right:0;position:absolute;left:0;text-align:center;z-index:1}.llms-quiz-question-wrapper .llms-question-image img{height:auto;max-width:100%}.llms-quiz-ui{position:relative}.llms-quiz-ui .llms-quiz-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 0 40px}.llms-quiz-ui .llms-progress{background-color:#dedede;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;height:8px;margin:0;overflow:hidden}.llms-quiz-ui .llms-progress .progress-bar-complete{-webkit-transition:width .3s ease-in;transition:width .3s ease-in;width:0}.llms-quiz-ui .llms-error{background:rgba(187,35,28,.15);border:1px solid #bb231c;border-radius:6px;margin:20px 0;padding:15px}.llms-quiz-ui .llms-error:before,.llms-quiz-ui .llms-error:after{content:" ";display:table}.llms-quiz-ui .llms-error:after{clear:both}.llms-quiz-ui .llms-error a{color:#bb231c;float:left;font-size:22px;line-height:1;text-decoration:none}.llms-quiz-ui .llms-quiz-counter{display:none;color:#6a6a6a;float:left;font-size:18px}.llms-quiz-ui .llms-quiz-counter .llms-sep{margin:0 5px}.llms-quiz-ui .llms-quiz-nav{margin-top:20px}.llms-quiz-ui .llms-quiz-nav button{margin:0 0 0 10px}.llms-question-wrapper .llms-question-text{font-size:30px;font-weight:400;margin-bottom:15px}.llms-question-wrapper ol.llms-question-choices{list-style-type:none;margin:0;padding:0}.llms-question-wrapper ol.llms-question-choices li.llms-choice{border-bottom:1px solid #e8e8e8;margin:0;padding:0;position:relative}.llms-question-wrapper ol.llms-question-choices li.llms-choice:last-child{border-bottom:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture{border-bottom:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture label{display:inline-block;padding:0}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-marker{bottom:10px;margin:0;position:absolute;left:10px}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image{margin:2px;padding:20px;-webkit-transition:background .4s ease;transition:background .4s ease}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image img{display:block;height:auto;width:100%}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture input:checked~.llms-choice-image{background:#efefef}.llms-question-wrapper ol.llms-question-choices li.llms-choice input{display:none;right:0;pointer-events:none;position:absolute;top:0;visibility:hidden}.llms-question-wrapper ol.llms-question-choices li.llms-choice label{display:block;margin:0;padding:10px 20px;position:relative}.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .iterator{display:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .fa{display:inline}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker{background:#fefefe;color:#010101;display:inline-block;font-size:20px;height:40px;line-height:40px;margin-left:10px;text-align:center;-webkit-transition:all .2s ease;transition:all .2s ease;vertical-align:middle;width:40px}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker .fa{display:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--lister,.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--checkbox{border-radius:4px}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--radio{border-radius:50%}.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked+.llms-marker{background:#ef476f;color:#fff}.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked+.llms-marker .iterator{display:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked+.llms-marker .fa{display:inline}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-choice-text{display:inline-block;font-size:18px;font-weight:400;line-height:1.6;margin:0;padding:0;vertical-align:middle;width:calc(100% - 60px)}.llms-quiz-timer{background:#fff;border:1px solid #4d8d3c;border-radius:4px;color:#4d8d3c;float:left;font-size:18px;line-height:1;margin-right:20px;padding:8px 12px;position:relative;white-space:nowrap;z-index:1}.llms-quiz-timer.color-half{border-color:#c05621;color:#c05621}.llms-quiz-timer.color-empty{border-color:#bb231c;color:#bb231c}.llms-quiz-timer .llms-tiles{display:inline-block;margin-right:5px}.voucher-expand{display:none}@media all and (min-width: 600px){.llms-access-plans.cols-1 .llms-access-plan{width:100%}.llms-access-plans.cols-2 .llms-access-plan{width:50%}.llms-access-plans.cols-3 .llms-access-plan{width:33.3333333333%}.llms-access-plans.cols-4 .llms-access-plan{width:25%}.llms-access-plans.cols-5 .llms-access-plan{width:20%}}.llms-free-enroll-form{margin-bottom:0}.llms-access-plan{-webkit-box-sizing:border-box;box-sizing:border-box;float:right;text-align:center;width:100%}.llms-access-plan .llms-access-plan-content,.llms-access-plan .llms-access-plan-footer{background:#f1f1f1}.llms-access-plan.featured .llms-access-plan-featured{background:#466dd8;border-top-right-radius:6px;border-top-left-radius:6px}.llms-access-plan.featured .llms-access-plan-content{border-radius:0}.llms-access-plan.featured .llms-access-plan-title{border-top-right-radius:0;border-top-left-radius:0}.llms-access-plan.featured .llms-access-plan-footer,.llms-access-plan.featured .llms-access-plan-content{border-right:3px solid #466dd8;border-left:3px solid #466dd8}.llms-access-plan.featured .llms-access-plan-footer{border-bottom-color:#466dd8}.llms-access-plan.on-sale .price-regular{text-decoration:line-through}.llms-access-plan.on-sale .price-regular .lifterlms-price{font-weight:400}.llms-access-plan .stamp{background:#466dd8;border-radius:6px;color:#fefefe;display:inline-block;font-size:14px;font-style:normal;font-weight:bold;line-height:1;padding:5px 8px 4px}.llms-access-plan-featured{color:#fff;font-size:14px;font-weight:700;letter-spacing:1px;margin:0 2px 0 2px;padding:5px 0 0}.llms-access-plan-content{border-top-left-radius:6px;border-top-right-radius:6px;margin:0 2px 0;overflow:hidden}.llms-access-plan-content .llms-access-plan-pricing{color:#010101;padding:20px 0 0}.llms-access-plan-title{background:#466dd8;color:#fefefe;margin:0;padding:10px 15px}.llms-access-plan-pricing .llms-price-currency-symbol{font-size:14px;vertical-align:top}.llms-access-plan-price .lifterlms-price{font-weight:700}.llms-access-plan-price.sale{padding:5px 0;border-top:1px solid #d0d0d0;border-bottom:1px solid #d0d0d0}.llms-access-plan-trial,.llms-access-plan-schedule,.llms-access-plan-sale-end,.llms-access-plan-expiration{font-size:16px}.llms-access-plan-description{color:#010101;font-size:16px;padding:10px 10px 0}.llms-access-plan-description ul{margin:0}.llms-access-plan-description ul li{border-bottom:1px solid #d0d0d0;list-style-type:none}.llms-access-plan-description ul li:last-child{border-bottom:none}.llms-access-plan-description div:last-child,.llms-access-plan-description img:last-child,.llms-access-plan-description p:last-child,.llms-access-plan-description ul:last-child,.llms-access-plan-description li:last-child{margin-bottom:0}.llms-access-plan-restrictions{margin-top:20px}.llms-access-plan-restrictions .stamp{vertical-align:baseline}.llms-access-plan-restrictions ul{margin:5px 0 0 0;padding:0}.llms-access-plan-restrictions ul li{font-size:14px;list-style-type:none;margin:0;padding:0}.llms-access-plan-restrictions a{color:#c05621}.llms-access-plan-restrictions a:hover{color:#f67d28}.llms-access-plan-footer{border-bottom:3px solid #f1f1f1;border-bottom-right-radius:6px;border-bottom-left-radius:6px;padding:15px;margin:0 2px 2px 2px}.llms-access-plan-footer .button{display:inline-block}.llms-access-plan-footer .llms-access-plan-pricing{padding:0 0 10px}.webui-popover-content .llms-members-only-restrictions{text-align:center}.webui-popover-content .llms-members-only-restrictions ul,.webui-popover-content .llms-members-only-restrictions ol,.webui-popover-content .llms-members-only-restrictions li,.webui-popover-content .llms-members-only-restrictions p{margin:0;padding:0}.webui-popover-content .llms-members-only-restrictions ul,.webui-popover-content .llms-members-only-restrictions ol,.webui-popover-content .llms-members-only-restrictions li{list-style-type:none}.webui-popover-content .llms-members-only-restrictions li{padding:8px 0;border-top:1px solid #3b3b3b}.webui-popover-content .llms-members-only-restrictions li:first-child{border-top:none}.webui-popover-content .llms-members-only-restrictions li a{display:block}.llms-checkout-wrapper .llms-person-login-form-wrapper{margin-bottom:40px}.llms-checkout-wrapper form.llms-login{display:none}.llms-checkout-wrapper .llms-form-heading{margin:0 0 20px}.llms-checkout{position:relative}.llms-checkout-cols-2.llms-col-2 section{background-color:#fefefe;border:1px solid #ccc;border-radius:12px;padding:20px}.llms-checkout-cols-2.llms-col-2 section .llms-form-heading{padding:0}@media all and (min-width: 800px){.llms-checkout-cols-2 .llms-checkout-col{float:right}.llms-checkout-cols-2 .llms-checkout-col.llms-col-1{margin-left:20px;width:calc(58% - 20px)}.llms-checkout-cols-2 .llms-checkout-col.llms-col-2{margin-right:20px;width:calc(42% - 20px)}.llms-checkout-cols-2 .llms-checkout-col.llms-col-2 button{width:100%}}.llms-checkout-section{margin-bottom:40px;position:relative}.llms-checkout-section-content.llms-form-fields{margin:0px}.llms-checkout-section-content .llms-label{font-weight:400}.llms-checkout-section-content .llms-order-summary{list-style-type:none;margin:0;padding:0}.llms-checkout-section-content .llms-order-summary li{list-style-type:none;margin:0 0 15px 0}.llms-checkout-section-content .llms-order-summary :not(.llms-label){font-weight:700}.llms-checkout-section-content .llms-order-summary li.llms-pricing.on-sale .price-regular,.llms-checkout-section-content .llms-order-summary li.llms-pricing.has-coupon .price-regular{text-decoration:line-through}.llms-checkout-section-content .llms-coupon-wrapper{border-top:1px solid #dedede;margin-top:20px;padding-top:20px}.llms-checkout-section-content .llms-coupon-wrapper .llms-coupon-entry{display:none;margin-top:20px}.llms-form-field.llms-payment-gateway-option{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.llms-form-field.llms-payment-gateway-option label+span.llms-description{display:inline-block;margin-right:5px}.llms-form-field.llms-payment-gateway-option .llms-description a{border:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.llms-form-field.llms-payment-gateway-option .llms-description img{display:inline;max-height:22px;vertical-align:middle}.llms-checkout-wrapper ul.llms-payment-gateways{margin:5px 0 0;padding:0}ul.llms-payment-gateways{list-style-type:none}ul.llms-payment-gateways li:last-child:after{border-bottom:1px solid #dedede;content:"";display:block;margin:20px 0}ul.llms-payment-gateways .llms-payment-gateway{margin-bottom:30px;list-style-type:none}ul.llms-payment-gateways .llms-payment-gateway:last-child{margin-bottom:none}ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-payment-gateway-option label{font-weight:700}ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields{display:block}ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields .llms-notice{margin-right:10px;margin-left:10px}ul.llms-payment-gateways .llms-payment-gateway .llms-form-field{padding-bottom:0}ul.llms-payment-gateways .llms-gateway-description{margin-right:40px}ul.llms-payment-gateways .llms-gateway-fields{display:none;margin:5px 0 20px}ul.llms-payment-gateways .llms-payment-gateway-error{padding:0 10px}.llms-checkout-confirm{margin:0}.llms-payment-method{margin:10px 10px 0}.llms-gateway-description p{font-size:14px;font-style:italic;margin:0}.llms-form-fields{-webkit-box-sizing:border-box;box-sizing:border-box}.llms-form-fields *{-webkit-box-sizing:border-box;box-sizing:border-box}.llms-form-fields.flush .llms-form-field{padding:0 0 20px}.llms-form-fields label:not(.llms-field-html label){font-weight:700}.llms-form-fields .wp-block-columns,.llms-form-fields .wp-block-column{margin-bottom:0}.llms-form-heading{padding:0 10px 10px}.llms-form-field{float:right;padding:0 10px 20px;position:relative;width:100%}.llms-form-field label:empty:after{content:" "}.llms-form-field [type=text],.llms-form-field [type=password],.llms-form-field [type=email],.llms-form-field [type=url],.llms-form-field [type=tel],.llms-form-field [type=number]{background-color:#fefefe;background-clip:padding-box;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;line-height:1;padding:8px 12px;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;width:100%}.llms-form-field input:focus,.llms-form-field input:focus-visible{border-color:#6888df;outline:thin solid}.llms-form-field select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-color:#fefefe;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#010101;padding:8px 12px;margin:0;width:100%;font-family:inherit;font-size:16px;cursor:inherit;line-height:1.6;z-index:1;outline:none;background-repeat:no-repeat;background-image:linear-gradient(-45deg, transparent 50%, currentcolor 50%),linear-gradient(-135deg, currentcolor 50%, transparent 50%);background-position:left 15px top 1.3rem,left 10px top 1.3rem;background-size:5px 5px,5px 5px}.llms-form-field select::-ms-expand{display:none}.llms-form-field select:focus{border:1px solid #6888df;outline:thin solid}.llms-form-field.valid input[type=date],.llms-form-field.valid input[type=time],.llms-form-field.valid input[type=datetime-local],.llms-form-field.valid input[type=week],.llms-form-field.valid input[type=month],.llms-form-field.valid input[type=text],.llms-form-field.valid input[type=email],.llms-form-field.valid input[type=url],.llms-form-field.valid input[type=password],.llms-form-field.valid input[type=search],.llms-form-field.valid input[type=tel],.llms-form-field.valid input[type=number],.llms-form-field.valid textarea,.llms-form-field.valid select{background:rgba(131,195,115,.3);border-color:#83c373}.llms-form-field.error input[type=date],.llms-form-field.error input[type=time],.llms-form-field.error input[type=datetime-local],.llms-form-field.error input[type=week],.llms-form-field.error input[type=month],.llms-form-field.error input[type=text],.llms-form-field.error input[type=email],.llms-form-field.error input[type=url],.llms-form-field.error input[type=password],.llms-form-field.error input[type=search],.llms-form-field.error input[type=tel],.llms-form-field.error input[type=number],.llms-form-field.error textarea,.llms-form-field.error select,.llms-form-field.invalid input[type=date],.llms-form-field.invalid input[type=time],.llms-form-field.invalid input[type=datetime-local],.llms-form-field.invalid input[type=week],.llms-form-field.invalid input[type=month],.llms-form-field.invalid input[type=text],.llms-form-field.invalid input[type=email],.llms-form-field.invalid input[type=url],.llms-form-field.invalid input[type=password],.llms-form-field.invalid input[type=search],.llms-form-field.invalid input[type=tel],.llms-form-field.invalid input[type=number],.llms-form-field.invalid textarea,.llms-form-field.invalid select{background:rgba(187,35,28,.3);border-color:#bb231c}.llms-form-field.llms-visually-hidden-field{display:none}.llms-form-field.align-right{text-align:left}@media screen and (min-width: 600px){.llms-form-field.llms-cols-1{width:8.3333333333%}.llms-form-field.llms-cols-2{width:16.6666666667%}.llms-form-field.llms-cols-3{width:25%}.llms-form-field.llms-cols-4{width:33.3333333333%}.llms-form-field.llms-cols-5{width:41.6666666667%}.llms-form-field.llms-cols-6{width:50%}.llms-form-field.llms-cols-7{width:58.3333333333%}.llms-form-field.llms-cols-8{width:66.6666666667%}.llms-form-field.llms-cols-9{width:75%}.llms-form-field.llms-cols-10{width:83.3333333333%}.llms-form-field.llms-cols-11{width:91.6666666667%}.llms-form-field.llms-cols-12{width:100%}}.llms-form-field.type-hidden{padding:0}.llms-form-field.type-radio input,.llms-form-field.type-radio label,.llms-form-field.type-checkbox input,.llms-form-field.type-checkbox label{display:inline-block;width:auto}.llms-form-field.type-radio input,.llms-form-field.type-checkbox input{margin-left:10px}.llms-form-field.type-radio label+.llms-description,.llms-form-field.type-checkbox label+.llms-description{display:block}.llms-form-field.type-radio:not(.is-group) input[type=radio]{position:absolute;opacity:0;visibility:none}.llms-form-field.type-radio:not(.is-group) label:before{background:#fafafa;background-position:-24px 0;background-repeat:no-repeat;border-radius:50%;-webkit-box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.35) 0 0 0 1px;box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.35) 0 0 0 1px;content:"";cursor:pointer;display:inline-block;height:22px;margin-left:5px;position:relative;-webkit-transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);top:-3px;vertical-align:middle;width:22px;z-index:2}.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked+label:before{-webkit-transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);background-position:100% 0;background-image:radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%)}.llms-form-field .llms-input-group{margin-top:5px}.llms-form-field .llms-input-group .llms-form-field{padding:0 5px 5px 0}.llms-form-field.type-reset button:not(.auto),.llms-form-field.type-button button:not(.auto),.llms-form-field.type-submit button:not(.auto){width:100%}.llms-form-field .llms-description{font-size:14px;font-style:italic;line-height:18px}.llms-form-field .llms-required{color:#bb231c;margin-right:4px}.llms-form-field input,.llms-form-field textarea,.llms-form-field select{width:100%;margin-bottom:5px}.llms-form-field .select2-container .select2-selection--single{height:auto;padding:4px 6px}.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%}.llms-password-strength-meter{border:1px solid #dadada;display:none;font-size:10px;margin-top:-10px;padding:1px;position:relative;text-align:center}.llms-password-strength-meter:before{bottom:0;content:"";right:0;position:absolute;top:0;-webkit-transition:width .4s ease;transition:width .4s ease}.llms-password-strength-meter.mismatch,.llms-password-strength-meter.too-short,.llms-password-strength-meter.very-weak{border-color:#e35b5b}.llms-password-strength-meter.mismatch:before,.llms-password-strength-meter.too-short:before,.llms-password-strength-meter.very-weak:before{background:rgba(227,91,91,.25);width:25%}.llms-password-strength-meter.too-short:before{width:0}.llms-password-strength-meter.weak{border-color:#f78b53}.llms-password-strength-meter.weak:before{background:rgba(247,139,83,.25);width:50%}.llms-password-strength-meter.medium{border-color:#ffc733}.llms-password-strength-meter.medium:before{background:rgba(255,199,51,.25);width:75%}.llms-password-strength-meter.strong{border-color:#83c373}.llms-password-strength-meter.strong:before{background:rgba(131,195,115,.25);width:100%}.llms-password-strength-meter+.llms-description{display:block}.llms-widget-syllabus--collapsible .llms-section .section-header{cursor:pointer}.llms-widget-syllabus--collapsible .llms-section.llms-section--opened .llms-collapse-caret .fa-caret-right{display:none}.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-collapse-caret .fa-caret-down{display:none}.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-lesson{display:none}.llms-widget-syllabus--collapsible .llms-syllabus-footer{text-align:right}.llms-student-dashboard .llms-sd-title{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px;margin:40px 0 20px 0}.llms-student-dashboard .llms-sd-title small{font-size:18px}.llms-student-dashboard .llms-sd-title small+a{text-decoration:none}.llms-student-dashboard .llms-sd-items{list-style-type:none;margin:0;padding:0}.llms-student-dashboard .llms-sd-item{display:inline-block;list-style-type:none;margin:5px 0;padding:0}.llms-student-dashboard .llms-sd-item:last-child .llms-sep{display:none}.llms-student-dashboard .llms-sd-item .llms-sep{color:#666;margin:0 5px}.llms-student-dashboard .llms-sd-section h2{margin:0 0 15px 0}.llms-student-dashboard .llms-sd-section .llms-sd-section-title{margin:0;padding:0}.llms-student-dashboard .llms-sd-section .llms-sd-section-footer{margin-top:10px}.llms-student-dashboard .llms-sd-section .llms-sd-section-footer .llms-button-secondary{display:inline-block}.llms-student-dashboard .orders-table{border:1px solid #dedede;border-spacing:0;width:100%}.llms-student-dashboard .orders-table thead{display:none}.llms-student-dashboard .orders-table thead th,.llms-student-dashboard .orders-table thead td{font-weight:700}@media all and (min-width: 600px){.llms-student-dashboard .orders-table thead{display:table-header-group}}.llms-student-dashboard .orders-table tbody tr:nth-child(odd) td,.llms-student-dashboard .orders-table tbody tr:nth-child(odd) th{background:#f9f9f9}.llms-student-dashboard .orders-table tbody tr:last-child{border-bottom-width:0}.llms-student-dashboard .orders-table tfoot tr{background:#f9f9f9}.llms-student-dashboard .orders-table tfoot th,.llms-student-dashboard .orders-table tfoot td{padding:10px;text-align:left}.llms-student-dashboard .orders-table tfoot th:last-child,.llms-student-dashboard .orders-table tfoot td:last-child{border-bottom-width:0}.llms-student-dashboard .orders-table th{font-weight:700}.llms-student-dashboard .orders-table th,.llms-student-dashboard .orders-table td{border-color:#dedede;border-style:solid;border-width:0;display:block;padding:15px 20px;text-align:center}.llms-student-dashboard .orders-table th .llms-button-primary,.llms-student-dashboard .orders-table td .llms-button-primary{display:inline-block}.llms-student-dashboard .orders-table th:last-child,.llms-student-dashboard .orders-table td:last-child{border-bottom-width:1px}.llms-student-dashboard .orders-table th:before,.llms-student-dashboard .orders-table td:before{content:attr(data-label)}@media all and (min-width: 600px){.llms-student-dashboard .orders-table th,.llms-student-dashboard .orders-table td{border-bottom-width:1px;display:table-cell;text-align:right}.llms-student-dashboard .orders-table th:first-child,.llms-student-dashboard .orders-table td:first-child{width:220px}.llms-student-dashboard .orders-table th:before,.llms-student-dashboard .orders-table td:before{display:none}}@media all and (min-width: 600px){.llms-student-dashboard .orders-table.transactions th:first-child{width:auto}}.llms-student-dashboard .llms-status{border-radius:6px;display:inline-block;font-size:13px;font-weight:700;line-height:1.4;padding:2px 6px;vertical-align:middle}.llms-student-dashboard .llms-status.llms-size--large{font-size:105%;padding:6px 12px}.llms-student-dashboard .llms-status.llms-active,.llms-student-dashboard .llms-status.llms-completed,.llms-student-dashboard .llms-status.llms-pass,.llms-student-dashboard .llms-status.llms-txn-succeeded{color:#4d8d3c;background-color:rgba(77,141,60,.15)}.llms-student-dashboard .llms-status.llms-fail,.llms-student-dashboard .llms-status.llms-failed,.llms-student-dashboard .llms-status.llms-expired,.llms-student-dashboard .llms-status.llms-cancelled,.llms-student-dashboard .llms-status.llms-txn-failed{color:#bb231c;background-color:rgba(187,35,28,.15)}.llms-student-dashboard .llms-status.llms-incomplete,.llms-student-dashboard .llms-status.llms-on-hold,.llms-student-dashboard .llms-status.llms-pending,.llms-student-dashboard .llms-status.llms-pending-cancel,.llms-student-dashboard .llms-status.llms-refunded,.llms-student-dashboard .llms-status.llms-txn-pending,.llms-student-dashboard .llms-status.llms-txn-refunded{color:#c05621;background-color:rgba(192,86,33,.15)}.llms-student-dashboard .order-title .llms-status{font-size:18px}.llms-student-dashboard .llms-person-form-wrapper .llms-change-password{display:none}@media all and (min-width: 600px){.llms-student-dashboard .order-primary{float:right;width:68%}}@media all and (min-width: 600px){.llms-student-dashboard .order-secondary{float:right;width:32%}}.llms-student-dashboard .order-secondary form{margin-bottom:0}@media all and (min-width: 600px){.llms-student-dashboard .llms-view-order.llms-stack-cols .order-primary,.llms-student-dashboard .llms-view-order.llms-stack-cols .order-secondary{float:none;width:100%}}.llms-student-dashboard .llms-switch-payment-source .llms-notice,.llms-student-dashboard .llms-switch-payment-source .entry-content .llms-notice{margin-right:10px;margin-left:10px}.llms-student-dashboard .llms-switch-payment-source-main{border:none;display:none;margin:0}.llms-student-dashboard .llms-switch-payment-source-main ul.llms-payment-gateways{padding:10px 15px 0;margin:0}.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method,.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary{padding:0 25px 10px;margin:0;list-style-type:none}.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method li,.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary li{list-style-type:none}.llms-student-dashboard.dashboard .llms-sd-section{border:1px solid #dedede;border-radius:6px;padding:20px;margin-bottom:40px}.llms-student-dashboard .llms-loop-list{margin:0 -10px}.llms-sd-grades .llms-table .llms-progress{display:block;margin:0}.llms-sd-grades .llms-table .llms-progress .llms-progress-bar{top:0;height:1.4em}.llms-sd-grades .llms-table .llms-progress .progress__indicator{font-size:1em;position:relative;left:.4em;top:.2em;z-index:1}.llms-table.llms-single-course-grades tbody tr:first-child td,.llms-table.llms-single-course-grades tbody tr:first-child th{background-color:#eaeaea}.llms-table.llms-single-course-grades th{font-weight:400;text-align:right}.llms-table.llms-single-course-grades td .llms-donut{display:inline-block;vertical-align:middle}.llms-table.llms-single-course-grades td .llms-status{margin-left:4px}.llms-table.llms-single-course-grades td .llms-donut+.llms-status{margin-right:4px}.llms-table.llms-single-course-grades th.llms-section_title{font-size:110%;font-weight:700}.llms-table.llms-single-course-grades td.llms-lesson_title{max-width:40%}.llms-table.llms-single-course-grades td.llms-associated_quiz .llms-donut{display:inline-block;margin-left:5px;vertical-align:middle}.llms-table.llms-single-course-grades td.llms-lesson_title a[href="#"]{pointer-events:none}.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"]{color:inherit;position:relative}.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] .llms-tooltip{max-width:380px;width:380px}.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] .llms-tooltip.show{top:-54px}.llms-sd-widgets{display:-webkit-box;display:-ms-flexbox;display:flex}.llms-sd-widgets .llms-sd-widget{background:#fefefe;border:1px solid #dedede;border-bottom-left-radius:6px;border-bottom-right-radius:6px;-webkit-box-flex:1;-ms-flex:1;flex:1;margin:10px 10px 20px;padding:0 0 20px}.llms-sd-widgets .llms-sd-widget:first-child{margin-right:0}.llms-sd-widgets .llms-sd-widget:last-child{margin-left:0}.llms-sd-widgets .llms-sd-widget .llms-sd-widget-title{background:#466dd8;color:#fff;font-size:18px;line-height:1;margin:0 0 20px;padding:10px}.llms-sd-widgets .llms-sd-widget .llms-sd-widget-empty{font-size:14px;font-style:italic;opacity:.5;text-align:center}.llms-sd-widgets .llms-sd-widget .llms-donut{margin:0 auto}.llms-sd-widgets .llms-sd-widget .llms-sd-date{opacity:.8;text-align:center;font-size:22px;line-height:1.1}.llms-sd-widgets .llms-sd-widget .llms-sd-date span{display:block}.llms-sd-widgets .llms-sd-widget .llms-sd-date span.day{font-size:52px}.llms-sd-widgets .llms-sd-widget .llms-sd-date span.diff{font-size:12px;font-style:italic;margin-top:8px;opacity:.75}.llms-sd-widgets .llms-sd-widget .llms-achievement{background:rgba(0,0,0,0);margin:0 auto;max-width:120px}.llms-sd-widgets .llms-sd-widget .llms-achievement .llms-achievement-title{display:none}.redeem-voucher .form-row label{display:block;font-weight:700}.redeem-voucher .form-row input[type=text]{background-color:#fefefe;background-clip:padding-box;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;line-height:1;padding:8px 12px;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.llms-sd-pagination{margin-top:24px}.llms-sd-pagination:before,.llms-sd-pagination:after{content:" ";display:table}.llms-sd-pagination:after{clear:both}.llms-sd-pagination .llms-button-secondary{display:inline-block}.llms-sd-pagination .llms-button-secondary.prev{float:right}.llms-sd-pagination .llms-button-secondary.next{float:left}.llms-sd-notification-center{background:#fefefe;border:1px solid #dedede;border-radius:6px;padding:20px}.llms-sd-notification-center .llms-notification-list-item .llms-notification{z-index:1}.llms-sd-notification-center .llms-notification-list-item .llms-notification:hover{background-color:inherit}.llms-table{border:1px solid #dedede;border-spacing:0;width:100%}.llms-table thead th,.llms-table thead td{font-weight:700}.llms-table tbody tr:nth-child(odd) td,.llms-table tbody tr:nth-child(odd) th{background:#f9f9f9}.llms-table tbody tr:last-child{border-bottom-width:0}.llms-table tfoot tr{background:#f9f9f9}.llms-table tfoot tr .llms-pagination .page-numbers{margin:0}.llms-table tfoot tr .llms-table-sort{text-align:left}.llms-table tfoot tr .llms-table-sort form,.llms-table tfoot tr .llms-table-sort select,.llms-table tfoot tr .llms-table-sort input,.llms-table tfoot tr .llms-table-sort button{margin:0}.llms-table th{font-weight:700}.llms-table th,.llms-table td{border-bottom:1px solid #dedede;padding:15px 20px}.llms-table th:first-child,.llms-table td:first-child{padding-right:12px}.llms-table th:last-child,.llms-table td:last-child{padding-left:12px}#page .llms-table tfoot label{display:inline}#page .llms-table tfoot select{height:auto}/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:"FontAwesome";src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-right:0;margin-right:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;right:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{right:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:right}.fa-pull-right{float:left}.fa.fa-pull-left{margin-left:.3em}.fa.fa-pull-right{margin-right:.3em}.pull-right{float:left}.pull-left{float:right}.fa.pull-left{margin-left:.3em}.fa.pull-right{margin-right:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(-270deg);transform:rotate(-270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;right:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/assets/css/lifterlms.css b/assets/css/lifterlms.css
new file mode 100644
index 0000000000..febda16d99
--- /dev/null
+++ b/assets/css/lifterlms.css
@@ -0,0 +1,6678 @@
+@charset "UTF-8";
+.llms-pagination ul:before, .llms-pagination ul:after,
+.llms-form-fields:before,
+.llms-checkout-cols-2:before,
+.llms-access-plans:before,
+.llms-loop-list:before,
+.llms-cols:before,
+.llms-form-fields:after,
+.llms-checkout-cols-2:after,
+.llms-access-plans:after,
+.llms-loop-list:after,
+.llms-cols:after {
+ content: " ";
+ display: table;
+}
+.llms-pagination ul:after,
+.llms-form-fields:after,
+.llms-checkout-cols-2:after,
+.llms-access-plans:after,
+.llms-loop-list:after,
+.llms-cols:after {
+ clear: both;
+}
+
+.llms-cols .llms-col {
+ width: 100%;
+}
+@media all and (min-width: 600px) {
+ .llms-cols [class*=llms-col-] {
+ float: left;
+ }
+}
+
+.llms-flex-cols {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+}
+.llms-flex-cols [class*=llms-col] {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 1 auto;
+ flex: 0 1 auto;
+ width: 100%;
+}
+
+@media all and (min-width: 600px) {
+ .llms-cols .llms-col-1, .llms-flex-cols .llms-col-1 {
+ width: 100%;
+ }
+ .llms-cols .llms-col-2, .llms-flex-cols .llms-col-2 {
+ width: 50%;
+ }
+ .llms-cols .llms-col-3, .llms-flex-cols .llms-col-3 {
+ width: 33.3333333333%;
+ }
+ .llms-cols .llms-col-4, .llms-flex-cols .llms-col-4 {
+ width: 25%;
+ }
+ .llms-cols .llms-col-5, .llms-flex-cols .llms-col-5 {
+ width: 20%;
+ }
+ .llms-cols .llms-col-6, .llms-flex-cols .llms-col-6 {
+ width: 16.6666666667%;
+ }
+ .llms-cols .llms-col-7, .llms-flex-cols .llms-col-7 {
+ width: 14.2857142857%;
+ }
+ .llms-cols .llms-col-8, .llms-flex-cols .llms-col-8 {
+ width: 12.5%;
+ }
+ .llms-cols .llms-col-9, .llms-flex-cols .llms-col-9 {
+ width: 11.1111111111%;
+ }
+ .llms-cols .llms-col-10, .llms-flex-cols .llms-col-10 {
+ width: 10%;
+ }
+ .llms-cols .llms-col-11, .llms-flex-cols .llms-col-11 {
+ width: 9.0909090909%;
+ }
+ .llms-cols .llms-col-12, .llms-flex-cols .llms-col-12 {
+ width: 8.3333333333%;
+ }
+}
+.llms-button-action,
+.llms-button-danger,
+.llms-button-primary,
+.llms-button-secondary {
+ border: none;
+ border-radius: 8px;
+ color: #fefefe;
+ cursor: pointer;
+ display: inline-block;
+ font-size: 18px;
+ font-weight: 700;
+ text-decoration: none;
+ text-shadow: none;
+ line-height: 1;
+ margin: 0;
+ max-width: 100%;
+ padding: 12px 24px;
+ position: relative;
+ -webkit-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+}
+.llms-button-action:disabled,
+.llms-button-danger:disabled,
+.llms-button-primary:disabled,
+.llms-button-secondary:disabled {
+ opacity: 0.5;
+}
+.llms-button-action:hover, .llms-button-action:active,
+.llms-button-danger:hover,
+.llms-button-danger:active,
+.llms-button-primary:hover,
+.llms-button-primary:active,
+.llms-button-secondary:hover,
+.llms-button-secondary:active {
+ color: #fefefe;
+}
+.llms-button-action:focus,
+.llms-button-danger:focus,
+.llms-button-primary:focus,
+.llms-button-secondary:focus {
+ color: #fefefe;
+}
+.llms-button-action.auto,
+.llms-button-danger.auto,
+.llms-button-primary.auto,
+.llms-button-secondary.auto {
+ width: auto;
+}
+.llms-button-action.full,
+.llms-button-danger.full,
+.llms-button-primary.full,
+.llms-button-secondary.full {
+ display: block;
+ text-align: center;
+ width: 100%;
+}
+.llms-button-action.square,
+.llms-button-danger.square,
+.llms-button-primary.square,
+.llms-button-secondary.square {
+ padding: 12px;
+}
+.llms-button-action.small,
+.llms-button-danger.small,
+.llms-button-primary.small,
+.llms-button-secondary.small {
+ font-size: 13px;
+ padding: 8px 14px;
+}
+.llms-button-action.small.square,
+.llms-button-danger.small.square,
+.llms-button-primary.small.square,
+.llms-button-secondary.small.square {
+ padding: 8px;
+}
+.llms-button-action.large,
+.llms-button-danger.large,
+.llms-button-primary.large,
+.llms-button-secondary.large {
+ font-size: 18px;
+ line-height: 1.2;
+ padding: 16px 32px;
+}
+.llms-button-action.large.square,
+.llms-button-danger.large.square,
+.llms-button-primary.large.square,
+.llms-button-secondary.large.square {
+ padding: 16px;
+}
+.llms-button-action.large .fa,
+.llms-button-danger.large .fa,
+.llms-button-primary.large .fa,
+.llms-button-secondary.large .fa {
+ left: -7px;
+ position: relative;
+}
+
+/* Fix for cases where link color overrides the button color */
+a.llms-button-action,
+a.llms-button-danger,
+a.llms-button-primary {
+ color: #fefefe;
+}
+
+.llms-button-primary {
+ background: #466dd8;
+}
+.llms-button-primary:hover, .llms-button-primary.clicked {
+ background: #274eba;
+}
+.llms-button-primary:focus, .llms-button-primary:active {
+ background: #6888df;
+}
+
+.llms-button-secondary {
+ background: #e1e1e1;
+ color: #444;
+}
+.llms-button-secondary:hover {
+ color: #414141;
+ background: #cdcdcd;
+}
+.llms-button-secondary:focus, .llms-button-secondary:active {
+ color: #414141;
+ background: #ebebeb;
+}
+
+/* Fix for cases where link color overrides the button color */
+a.llms-button-secondary {
+ color: #444;
+}
+
+.llms-button-action {
+ background: #c05621;
+}
+.llms-button-action:hover, .llms-button-action.clicked {
+ background: #f67d28;
+}
+.llms-button-action:focus, .llms-button-action:active {
+ background: #faad76;
+}
+
+.llms-button-danger {
+ background: #bb231c;
+}
+.llms-button-danger:hover {
+ background: #981c17;
+}
+.llms-button-danger:focus, .llms-button-danger:active {
+ background: #cd261f;
+}
+
+.llms-button-outline {
+ background: transparent;
+ border: 3px solid #1D2327;
+ border-radius: 8px;
+ color: #1D2327;
+ cursor: pointer;
+ font-size: 16px;
+ font-weight: 700;
+ text-decoration: none;
+ text-shadow: none;
+ line-height: 1;
+ margin: 0;
+ max-width: 100%;
+ padding: 12px 24px;
+ position: relative;
+ -webkit-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+}
+.llms-button-outline:disabled {
+ opacity: 0.5;
+}
+.llms-button-outline:hover, .llms-button-outline:active {
+ color: #1D2327;
+}
+.llms-button-outline:focus {
+ color: #1D2327;
+}
+.llms-button-outline.auto {
+ width: auto;
+}
+.llms-button-outline.full {
+ display: block;
+ text-align: center;
+ width: 100%;
+}
+.llms-button-outline.square {
+ padding: 12px;
+}
+
+.llms-course-continue-button {
+ display: inline-block;
+}
+
+.llms-donut {
+ background-color: #f1f1f1;
+ background-image: none;
+ border-radius: 50%;
+ color: #466dd8;
+ height: 200px;
+ overflow: hidden;
+ position: relative;
+ width: 200px;
+}
+.llms-donut:before, .llms-donut:after {
+ content: " ";
+ display: table;
+}
+.llms-donut:after {
+ clear: both;
+}
+.llms-donut svg {
+ overflow: visible !important;
+ pointer-events: none;
+ width: 100%;
+}
+.llms-donut svg path {
+ fill: none;
+ stroke-width: 35px;
+ stroke: #466dd8;
+}
+.llms-donut.mini {
+ height: 36px;
+ width: 36px;
+}
+.llms-donut.mini .percentage {
+ font-size: 10px;
+}
+.llms-donut.small {
+ height: 100px;
+ width: 100px;
+}
+.llms-donut.small .percentage {
+ font-size: 18px;
+}
+.llms-donut.medium {
+ height: 130px;
+ width: 130px;
+}
+.llms-donut.medium .percentage {
+ font-size: 26px;
+}
+.llms-donut.large {
+ height: 260px;
+ width: 260px;
+}
+.llms-donut.large .percentage {
+ font-size: 48px;
+}
+.llms-donut .inside {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background: #fff;
+ border-radius: 50%;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ height: 80%;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ left: 50%;
+ position: absolute;
+ text-align: center;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ width: 80%;
+ top: 50%;
+ z-index: 3;
+}
+.llms-donut .percentage {
+ line-height: 1.2;
+ font-size: 34px;
+}
+.llms-donut .caption {
+ font-size: 75%;
+}
+
+.lifterlms [data-tip],
+.lifterlms [data-title-default],
+.lifterlms [data-title-active],
+.llms-metabox [data-tip],
+.llms-metabox [data-title-default],
+.llms-metabox [data-title-active],
+.llms-mb-container [data-tip],
+.llms-mb-container [data-title-default],
+.llms-mb-container [data-title-active],
+.llms-quiz-wrapper [data-tip],
+.llms-quiz-wrapper [data-title-default],
+.llms-quiz-wrapper [data-title-active] {
+ position: relative;
+}
+.lifterlms [data-tip].tip--top-right:before,
+.lifterlms [data-title-default].tip--top-right:before,
+.lifterlms [data-title-active].tip--top-right:before,
+.llms-metabox [data-tip].tip--top-right:before,
+.llms-metabox [data-title-default].tip--top-right:before,
+.llms-metabox [data-title-active].tip--top-right:before,
+.llms-mb-container [data-tip].tip--top-right:before,
+.llms-mb-container [data-title-default].tip--top-right:before,
+.llms-mb-container [data-title-active].tip--top-right:before,
+.llms-quiz-wrapper [data-tip].tip--top-right:before,
+.llms-quiz-wrapper [data-title-default].tip--top-right:before,
+.llms-quiz-wrapper [data-title-active].tip--top-right:before {
+ bottom: 100%;
+ left: -10px;
+}
+.lifterlms [data-tip].tip--top-right:hover:before,
+.lifterlms [data-title-default].tip--top-right:hover:before,
+.lifterlms [data-title-active].tip--top-right:hover:before,
+.llms-metabox [data-tip].tip--top-right:hover:before,
+.llms-metabox [data-title-default].tip--top-right:hover:before,
+.llms-metabox [data-title-active].tip--top-right:hover:before,
+.llms-mb-container [data-tip].tip--top-right:hover:before,
+.llms-mb-container [data-title-default].tip--top-right:hover:before,
+.llms-mb-container [data-title-active].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before {
+ bottom: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--top-right:after,
+.lifterlms [data-title-default].tip--top-right:after,
+.lifterlms [data-title-active].tip--top-right:after,
+.llms-metabox [data-tip].tip--top-right:after,
+.llms-metabox [data-title-default].tip--top-right:after,
+.llms-metabox [data-title-active].tip--top-right:after,
+.llms-mb-container [data-tip].tip--top-right:after,
+.llms-mb-container [data-title-default].tip--top-right:after,
+.llms-mb-container [data-title-active].tip--top-right:after,
+.llms-quiz-wrapper [data-tip].tip--top-right:after,
+.llms-quiz-wrapper [data-title-default].tip--top-right:after,
+.llms-quiz-wrapper [data-title-active].tip--top-right:after {
+ border-top-color: #444;
+ left: 6px;
+ top: 0;
+}
+.lifterlms [data-tip].tip--top-right:hover:after,
+.lifterlms [data-title-default].tip--top-right:hover:after,
+.lifterlms [data-title-active].tip--top-right:hover:after,
+.llms-metabox [data-tip].tip--top-right:hover:after,
+.llms-metabox [data-title-default].tip--top-right:hover:after,
+.llms-metabox [data-title-active].tip--top-right:hover:after,
+.llms-mb-container [data-tip].tip--top-right:hover:after,
+.llms-mb-container [data-title-default].tip--top-right:hover:after,
+.llms-mb-container [data-title-active].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after {
+ top: -6px;
+}
+.lifterlms [data-tip].tip--top-left:before,
+.lifterlms [data-title-default].tip--top-left:before,
+.lifterlms [data-title-active].tip--top-left:before,
+.llms-metabox [data-tip].tip--top-left:before,
+.llms-metabox [data-title-default].tip--top-left:before,
+.llms-metabox [data-title-active].tip--top-left:before,
+.llms-mb-container [data-tip].tip--top-left:before,
+.llms-mb-container [data-title-default].tip--top-left:before,
+.llms-mb-container [data-title-active].tip--top-left:before,
+.llms-quiz-wrapper [data-tip].tip--top-left:before,
+.llms-quiz-wrapper [data-title-default].tip--top-left:before,
+.llms-quiz-wrapper [data-title-active].tip--top-left:before {
+ bottom: 100%;
+ right: -10px;
+}
+.lifterlms [data-tip].tip--top-left:hover:before,
+.lifterlms [data-title-default].tip--top-left:hover:before,
+.lifterlms [data-title-active].tip--top-left:hover:before,
+.llms-metabox [data-tip].tip--top-left:hover:before,
+.llms-metabox [data-title-default].tip--top-left:hover:before,
+.llms-metabox [data-title-active].tip--top-left:hover:before,
+.llms-mb-container [data-tip].tip--top-left:hover:before,
+.llms-mb-container [data-title-default].tip--top-left:hover:before,
+.llms-mb-container [data-title-active].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before {
+ bottom: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--top-left:after,
+.lifterlms [data-title-default].tip--top-left:after,
+.lifterlms [data-title-active].tip--top-left:after,
+.llms-metabox [data-tip].tip--top-left:after,
+.llms-metabox [data-title-default].tip--top-left:after,
+.llms-metabox [data-title-active].tip--top-left:after,
+.llms-mb-container [data-tip].tip--top-left:after,
+.llms-mb-container [data-title-default].tip--top-left:after,
+.llms-mb-container [data-title-active].tip--top-left:after,
+.llms-quiz-wrapper [data-tip].tip--top-left:after,
+.llms-quiz-wrapper [data-title-default].tip--top-left:after,
+.llms-quiz-wrapper [data-title-active].tip--top-left:after {
+ border-top-color: #444;
+ right: 6px;
+ top: 0;
+}
+.lifterlms [data-tip].tip--top-left:hover:after,
+.lifterlms [data-title-default].tip--top-left:hover:after,
+.lifterlms [data-title-active].tip--top-left:hover:after,
+.llms-metabox [data-tip].tip--top-left:hover:after,
+.llms-metabox [data-title-default].tip--top-left:hover:after,
+.llms-metabox [data-title-active].tip--top-left:hover:after,
+.llms-mb-container [data-tip].tip--top-left:hover:after,
+.llms-mb-container [data-title-default].tip--top-left:hover:after,
+.llms-mb-container [data-title-active].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after {
+ top: -6px;
+}
+.lifterlms [data-tip].tip--bottom-left:before,
+.lifterlms [data-title-default].tip--bottom-left:before,
+.lifterlms [data-title-active].tip--bottom-left:before,
+.llms-metabox [data-tip].tip--bottom-left:before,
+.llms-metabox [data-title-default].tip--bottom-left:before,
+.llms-metabox [data-title-active].tip--bottom-left:before,
+.llms-mb-container [data-tip].tip--bottom-left:before,
+.llms-mb-container [data-title-default].tip--bottom-left:before,
+.llms-mb-container [data-title-active].tip--bottom-left:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:before {
+ top: 100%;
+ right: -10px;
+}
+.lifterlms [data-tip].tip--bottom-left:hover:before,
+.lifterlms [data-title-default].tip--bottom-left:hover:before,
+.lifterlms [data-title-active].tip--bottom-left:hover:before,
+.llms-metabox [data-tip].tip--bottom-left:hover:before,
+.llms-metabox [data-title-default].tip--bottom-left:hover:before,
+.llms-metabox [data-title-active].tip--bottom-left:hover:before,
+.llms-mb-container [data-tip].tip--bottom-left:hover:before,
+.llms-mb-container [data-title-default].tip--bottom-left:hover:before,
+.llms-mb-container [data-title-active].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before {
+ top: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--bottom-left:after,
+.lifterlms [data-title-default].tip--bottom-left:after,
+.lifterlms [data-title-active].tip--bottom-left:after,
+.llms-metabox [data-tip].tip--bottom-left:after,
+.llms-metabox [data-title-default].tip--bottom-left:after,
+.llms-metabox [data-title-active].tip--bottom-left:after,
+.llms-mb-container [data-tip].tip--bottom-left:after,
+.llms-mb-container [data-title-default].tip--bottom-left:after,
+.llms-mb-container [data-title-active].tip--bottom-left:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:after {
+ border-bottom-color: #444;
+ right: 6px;
+ bottom: 0;
+}
+.lifterlms [data-tip].tip--bottom-left:hover:after,
+.lifterlms [data-title-default].tip--bottom-left:hover:after,
+.lifterlms [data-title-active].tip--bottom-left:hover:after,
+.llms-metabox [data-tip].tip--bottom-left:hover:after,
+.llms-metabox [data-title-default].tip--bottom-left:hover:after,
+.llms-metabox [data-title-active].tip--bottom-left:hover:after,
+.llms-mb-container [data-tip].tip--bottom-left:hover:after,
+.llms-mb-container [data-title-default].tip--bottom-left:hover:after,
+.llms-mb-container [data-title-active].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after {
+ bottom: -6px;
+}
+.lifterlms [data-tip].tip--bottom-right:before,
+.lifterlms [data-title-default].tip--bottom-right:before,
+.lifterlms [data-title-active].tip--bottom-right:before,
+.llms-metabox [data-tip].tip--bottom-right:before,
+.llms-metabox [data-title-default].tip--bottom-right:before,
+.llms-metabox [data-title-active].tip--bottom-right:before,
+.llms-mb-container [data-tip].tip--bottom-right:before,
+.llms-mb-container [data-title-default].tip--bottom-right:before,
+.llms-mb-container [data-title-active].tip--bottom-right:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:before {
+ top: 100%;
+ left: -10px;
+}
+.lifterlms [data-tip].tip--bottom-right:hover:before,
+.lifterlms [data-title-default].tip--bottom-right:hover:before,
+.lifterlms [data-title-active].tip--bottom-right:hover:before,
+.llms-metabox [data-tip].tip--bottom-right:hover:before,
+.llms-metabox [data-title-default].tip--bottom-right:hover:before,
+.llms-metabox [data-title-active].tip--bottom-right:hover:before,
+.llms-mb-container [data-tip].tip--bottom-right:hover:before,
+.llms-mb-container [data-title-default].tip--bottom-right:hover:before,
+.llms-mb-container [data-title-active].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before {
+ top: calc(100% + 6px);
+}
+.lifterlms [data-tip].tip--bottom-right:after,
+.lifterlms [data-title-default].tip--bottom-right:after,
+.lifterlms [data-title-active].tip--bottom-right:after,
+.llms-metabox [data-tip].tip--bottom-right:after,
+.llms-metabox [data-title-default].tip--bottom-right:after,
+.llms-metabox [data-title-active].tip--bottom-right:after,
+.llms-mb-container [data-tip].tip--bottom-right:after,
+.llms-mb-container [data-title-default].tip--bottom-right:after,
+.llms-mb-container [data-title-active].tip--bottom-right:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:after {
+ border-bottom-color: #444;
+ left: 6px;
+ bottom: 0;
+}
+.lifterlms [data-tip].tip--bottom-right:hover:after,
+.lifterlms [data-title-default].tip--bottom-right:hover:after,
+.lifterlms [data-title-active].tip--bottom-right:hover:after,
+.llms-metabox [data-tip].tip--bottom-right:hover:after,
+.llms-metabox [data-title-default].tip--bottom-right:hover:after,
+.llms-metabox [data-title-active].tip--bottom-right:hover:after,
+.llms-mb-container [data-tip].tip--bottom-right:hover:after,
+.llms-mb-container [data-title-default].tip--bottom-right:hover:after,
+.llms-mb-container [data-title-active].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,
+.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after {
+ bottom: -6px;
+}
+.lifterlms [data-tip]:before,
+.lifterlms [data-title-default]:before,
+.lifterlms [data-title-active]:before,
+.llms-metabox [data-tip]:before,
+.llms-metabox [data-title-default]:before,
+.llms-metabox [data-title-active]:before,
+.llms-mb-container [data-tip]:before,
+.llms-mb-container [data-title-default]:before,
+.llms-mb-container [data-title-active]:before,
+.llms-quiz-wrapper [data-tip]:before,
+.llms-quiz-wrapper [data-title-default]:before,
+.llms-quiz-wrapper [data-title-active]:before {
+ background: #444;
+ border-radius: 4px;
+ color: #fff;
+ font-size: 13px;
+ line-height: 1.2;
+ padding: 8px;
+ max-width: 300px;
+ width: -webkit-max-content;
+ width: -moz-max-content;
+ width: max-content;
+}
+.lifterlms [data-tip]:after,
+.lifterlms [data-title-default]:after,
+.lifterlms [data-title-active]:after,
+.llms-metabox [data-tip]:after,
+.llms-metabox [data-title-default]:after,
+.llms-metabox [data-title-active]:after,
+.llms-mb-container [data-tip]:after,
+.llms-mb-container [data-title-default]:after,
+.llms-mb-container [data-title-active]:after,
+.llms-quiz-wrapper [data-tip]:after,
+.llms-quiz-wrapper [data-title-default]:after,
+.llms-quiz-wrapper [data-title-active]:after {
+ content: "";
+ border: 6px solid transparent;
+ height: 0;
+ width: 0;
+}
+.lifterlms [data-tip]:before, .lifterlms [data-tip]:after,
+.lifterlms [data-title-default]:before,
+.lifterlms [data-title-default]:after,
+.lifterlms [data-title-active]:before,
+.lifterlms [data-title-active]:after,
+.llms-metabox [data-tip]:before,
+.llms-metabox [data-tip]:after,
+.llms-metabox [data-title-default]:before,
+.llms-metabox [data-title-default]:after,
+.llms-metabox [data-title-active]:before,
+.llms-metabox [data-title-active]:after,
+.llms-mb-container [data-tip]:before,
+.llms-mb-container [data-tip]:after,
+.llms-mb-container [data-title-default]:before,
+.llms-mb-container [data-title-default]:after,
+.llms-mb-container [data-title-active]:before,
+.llms-mb-container [data-title-active]:after,
+.llms-quiz-wrapper [data-tip]:before,
+.llms-quiz-wrapper [data-tip]:after,
+.llms-quiz-wrapper [data-title-default]:before,
+.llms-quiz-wrapper [data-title-default]:after,
+.llms-quiz-wrapper [data-title-active]:before,
+.llms-quiz-wrapper [data-title-active]:after {
+ opacity: 0;
+ -webkit-transition: all 0.2s 0.1s ease;
+ transition: all 0.2s 0.1s ease;
+ position: absolute;
+ pointer-events: none;
+ visibility: hidden;
+}
+.lifterlms [data-tip]:hover:before, .lifterlms [data-tip]:hover:after,
+.lifterlms [data-title-default]:hover:before,
+.lifterlms [data-title-default]:hover:after,
+.lifterlms [data-title-active]:hover:before,
+.lifterlms [data-title-active]:hover:after,
+.llms-metabox [data-tip]:hover:before,
+.llms-metabox [data-tip]:hover:after,
+.llms-metabox [data-title-default]:hover:before,
+.llms-metabox [data-title-default]:hover:after,
+.llms-metabox [data-title-active]:hover:before,
+.llms-metabox [data-title-active]:hover:after,
+.llms-mb-container [data-tip]:hover:before,
+.llms-mb-container [data-tip]:hover:after,
+.llms-mb-container [data-title-default]:hover:before,
+.llms-mb-container [data-title-default]:hover:after,
+.llms-mb-container [data-title-active]:hover:before,
+.llms-mb-container [data-title-active]:hover:after,
+.llms-quiz-wrapper [data-tip]:hover:before,
+.llms-quiz-wrapper [data-tip]:hover:after,
+.llms-quiz-wrapper [data-title-default]:hover:before,
+.llms-quiz-wrapper [data-title-default]:hover:after,
+.llms-quiz-wrapper [data-title-active]:hover:before,
+.llms-quiz-wrapper [data-title-active]:hover:after {
+ opacity: 1;
+ -webkit-transition: all 0 0.1s ease;
+ transition: all 0 0.1s ease;
+ visibility: visible;
+ z-index: 99999999;
+}
+.lifterlms [data-tip]:before,
+.llms-metabox [data-tip]:before,
+.llms-mb-container [data-tip]:before,
+.llms-quiz-wrapper [data-tip]:before {
+ content: attr(data-tip);
+}
+.lifterlms [data-tip].active:before,
+.llms-metabox [data-tip].active:before,
+.llms-mb-container [data-tip].active:before,
+.llms-quiz-wrapper [data-tip].active:before {
+ content: attr(data-tip-active);
+}
+
+.llms-membership-image {
+ display: block;
+ margin: 0 auto;
+}
+
+.llms-course-image {
+ display: block;
+ margin: 0 auto;
+ max-width: 100%;
+}
+
+.llms-featured-image {
+ display: block;
+ margin: 0 auto;
+}
+
+.llms-image-thumb {
+ width: 150px;
+}
+
+.llms-video-wrapper .center-video {
+ height: auto;
+ max-width: 100%;
+ overflow: hidden;
+ position: relative;
+ padding-top: 56.25%;
+ text-align: center;
+}
+.llms-video-wrapper .center-video > .wp-video,
+.llms-video-wrapper .center-video .fluid-width-video-wrapper,
+.llms-video-wrapper .center-video iframe, .llms-video-wrapper .center-video object, .llms-video-wrapper .center-video embed {
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.llms-video-wrapper .center-video > .wp-video {
+ width: 100% !important;
+}
+.llms-video-wrapper .center-video .fluid-width-video-wrapper {
+ padding-top: 0 !important;
+}
+
+.clear {
+ clear: both;
+ width: 100%;
+}
+
+.llms-featured-image {
+ text-align: center;
+}
+
+#main-content .llms-payment-options p {
+ margin: 0;
+ font-size: 16px;
+}
+
+.llms-option {
+ display: block;
+ position: relative;
+ margin: 20px 0;
+ padding-left: 40px;
+ font-size: 16px;
+}
+.llms-option label {
+ cursor: pointer;
+ position: static;
+}
+
+.llms-option:first-child {
+ margin-top: 0;
+}
+
+.llms-option:last-child {
+ margin-bottom: 0;
+}
+
+#main-content .llms-option:last-child {
+ margin-bottom: 0;
+}
+
+.llms-option input[type=radio] {
+ display: block;
+ position: absolute;
+ top: 3px;
+ left: 0;
+ z-index: 0;
+}
+
+.llms-option input[type=radio] {
+ display: inline-block;
+}
+
+.llms-option input[type=radio] + label span.llms-radio {
+ display: none;
+}
+
+.llms-option input[type=radio] + label span.llms-radio {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ z-index: 20;
+ position: absolute;
+ top: 0;
+ left: -2px;
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ border-radius: 50%;
+ cursor: pointer;
+ vertical-align: middle;
+ -webkit-box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.5) 0 0 0 1px;
+ box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.5) 0 0 0 1px;
+ background: #efefef;
+ background-image: radial-gradient(ellipse at center, #bb231c 0%, #bb231c 40%, #efefef 45%);
+ background-repeat: no-repeat;
+ -webkit-transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+}
+
+.llms-option input[type=radio]:checked + label span.llms-radio {
+ -webkit-transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+}
+
+.llms-option input[type=radio] + label span.llms-radio {
+ background-position: -24px 0;
+}
+
+.llms-option input[type=radio]:checked + label span.llms-radio {
+ background-position: 0 0;
+}
+
+.llms-option input[type=submit] {
+ border: none;
+ background: #bb231c;
+ color: #fff;
+ font-size: 20px;
+ padding: 10px 0;
+ border-radius: 3px;
+ cursor: pointer;
+ width: 100%;
+}
+
+.llms-styled-text {
+ padding: 14px 0;
+}
+
+.llms-notice-box {
+ border-radius: 3px;
+ z-index: 10;
+ margin: 10px 0;
+ padding: 15px 20px;
+ border: 1px solid #ccc;
+ list-style-type: none;
+ width: 100%;
+ overflow: auto;
+}
+.llms-notice-box input[type=text] {
+ height: auto;
+}
+.llms-notice-box .col-1-1 {
+ width: 100%;
+}
+.llms-notice-box .col-1-1 input[type=text] {
+ width: 100%;
+}
+.llms-notice-box .col-1-2 {
+ width: 50%;
+ float: left;
+}
+@media screen and (max-width: 768px) {
+ .llms-notice-box .col-1-2 {
+ width: 100%;
+ }
+}
+.llms-notice-box .col-1-3 {
+ width: 33%;
+ float: left;
+ margin-right: 10px;
+}
+.llms-notice-box .col-1-4 {
+ width: 25%;
+ float: left;
+ margin-right: 10px;
+}
+@media screen and (max-width: 768px) {
+ .llms-notice-box .col-1-4 {
+ width: 100%;
+ }
+}
+.llms-notice-box .col-1-6 {
+ width: 16.6%;
+ float: left;
+ margin-right: 10px;
+}
+.llms-notice-box .col-1-8 {
+ width: 11%;
+ float: right;
+}
+.llms-notice-box .llms-pad-right {
+ padding-right: 10px;
+}
+@media screen and (max-width: 768px) {
+ .llms-notice-box .llms-pad-right {
+ padding-right: 0;
+ }
+}
+
+input[type=text].cc_cvv,
+#cc_cvv {
+ margin-right: 0;
+ width: 23%;
+ float: right;
+}
+
+.llms-clear-box {
+ border-radius: 3px;
+ z-index: 10;
+ margin: 10px 0;
+ padding: 15px 20px;
+ list-style-type: none;
+ width: 100%;
+ overflow: auto;
+}
+
+.llms-price-label {
+ font-weight: normal;
+}
+
+.llms-final-price {
+ font-weight: bold;
+ float: right;
+}
+
+.llms-center-content {
+ text-align: center;
+}
+
+.llms-input-text {
+ background-color: #fff;
+ border: 1px solid #ddd;
+ color: #333;
+ font-size: 18px;
+ font-weight: 300;
+ padding: 16px;
+ width: 100%;
+}
+
+.llms-price {
+ margin-bottom: 0;
+ font-weight: bold;
+}
+
+.llms-price-loop {
+ margin-bottom: 0;
+ font-weight: bold;
+}
+
+.courses .entry {
+ padding: 0;
+}
+
+.list-view .site-content .llms-course-list .hentry, .list-view .site-content .llms-membership-list .hentry {
+ border-top: 0;
+ padding-top: 0;
+}
+
+.llms-content {
+ width: 100%;
+}
+
+.llms-lesson-button-wrapper {
+ width: 100%;
+ display: block;
+ clear: both;
+ text-align: center;
+}
+
+.llms-template-wrapper {
+ width: 100%;
+ display: block;
+ clear: both;
+}
+
+.llms-button-wrapper {
+ width: 100%;
+ display: block;
+ clear: both;
+ text-align: center;
+}
+
+.llms-styled-select {
+ border: 1px solid #ccc;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border-radius: 3px;
+ overflow: hidden;
+ position: relative;
+}
+
+.llms-styled-select, .llms-styled-select select {
+ width: 100%;
+}
+
+select:focus {
+ outline: none;
+}
+
+.llms-styled-select select {
+ height: 34px;
+ padding: 5px 0 5px 5px;
+ background: transparent;
+ border: none;
+ -webkit-appearance: none;
+ font-size: 16px;
+ color: #444444;
+}
+
+@-moz-document url-prefix() {
+ .--ms-styled-select select {
+ width: 110%;
+ }
+}
+.llms-styled-select .fa-sort-desc {
+ position: absolute;
+ top: 0;
+ right: 12px;
+ font-size: 24px;
+ color: #ccc;
+}
+
+select::-ms-expand {
+ display: none;
+}
+
+_:-o-prefocus .llms-styled-select, .selector .llms-styled-select {
+ background: none;
+}
+
+.llms-form-item-wrapper {
+ margin-bottom: 1em;
+}
+
+/* Circle Graph */
+.llms-progress-circle {
+ position: relative;
+ width: 200px;
+ height: 200px;
+ float: left;
+}
+
+.llms-progress-circle-count {
+ top: 27%;
+ position: absolute;
+ width: 94%;
+ text-align: center;
+ color: #666;
+ font-size: 44px;
+}
+
+.llms-progress-circle svg {
+ position: absolute;
+ width: 200px;
+ height: 200px;
+}
+
+.llms-progress-circle circle {
+ fill: transparent;
+}
+
+svg .llms-background-circle {
+ fill: transparent;
+ stroke-width: 10px;
+ stroke: #f1f2f1;
+ stroke-dasharray: 430;
+}
+
+svg .llms-animated-circle {
+ fill: transparent;
+ stroke-width: 10px;
+ stroke: #e5554e;
+ stroke-dasharray: 430;
+ stroke-dashoffset: 410;
+}
+
+.llms-widget-syllabus .llms-lesson.current-lesson .lesson-title {
+ font-weight: 700;
+}
+.llms-widget-syllabus .section-header {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 5px;
+}
+.llms-widget-syllabus .section-header .llms-collapse-caret {
+ text-align: left;
+ width: 14px;
+}
+.llms-widget-syllabus .llms-lesson-complete, .llms-widget-syllabus .lesson-complete-placeholder {
+ font-size: 18px;
+ margin-right: 5px;
+ color: #ccc;
+}
+.llms-widget-syllabus .llms-lesson-complete.done, .llms-widget-syllabus .lesson-complete-placeholder.done {
+ color: #466dd8;
+}
+.llms-widget-syllabus .section-title {
+ font-weight: bold;
+}
+.llms-widget-syllabus .lesson-title a {
+ text-decoration: underline;
+}
+.llms-widget-syllabus .lesson-title.done a {
+ color: #666;
+ text-decoration: line-through;
+}
+.llms-widget-syllabus ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-widget-syllabus ul li {
+ list-style-type: none;
+ margin: 0 0 10px 0;
+}
+.llms-widget-syllabus ul li ul {
+ margin: 0 0 15px 0;
+}
+.llms-widget-syllabus ul li ul li {
+ -webkit-box-align: start;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin: 0 0 10px 0;
+ padding: 0;
+}
+
+.llms-remove-coupon {
+ float: right;
+}
+
+/*.llms-lesson-link-locked, .llms-lesson-link-locked:hover {
+ background: #f1f1f1;
+ display: block;
+ color: #a6a6a6;
+ min-height: 85px;
+ padding: 15px;
+ text-decoration: none;
+ position: relative;
+}*/
+.llms-lesson-preview.is-complete .llms-lesson-link-locked {
+ padding-left: 75px;
+}
+
+.llms-lesson-tooltip {
+ display: none;
+ position: absolute;
+ color: #000000;
+ background-color: #c0c0c0;
+ padding: 0.25em;
+ border-radius: 2px;
+ z-index: 100;
+ top: 0;
+ left: 50%;
+ text-align: center;
+ -webkit-transform: translateX(-50%) translateY(-100%);
+ transform: translateX(-50%) translateY(-100%);
+}
+
+/* arrows - :after */
+.llms-lesson-tooltip:after {
+ content: "";
+ width: 0;
+ height: 0;
+ border-top: 8px solid #c0c0c0;
+ border-left: 8px solid transparent;
+ border-right: 8px solid transparent;
+ position: absolute;
+ bottom: -8px;
+ left: 50%;
+ -webkit-transform: translateX(-50%);
+ transform: translateX(-50%);
+}
+
+.llms-lesson-tooltip.active {
+ display: inline-block;
+}
+
+.llms-favorite-wrapper {
+ cursor: pointer;
+}
+.llms-favorite-wrapper .fa-heart {
+ color: #EF476F;
+}
+
+.llms-has-favorite .llms-parent-course-link {
+ display: inline-block;
+ margin-bottom: 20px;
+}
+.llms-has-favorite .llms-parent-course-link + .llms-favorite-wrapper {
+ float: right;
+ margin: 0;
+}
+
+.llms-syllabus-wrapper .llms-has-favorite {
+ text-align: left;
+}
+.llms-syllabus-wrapper .llms-has-favorite .llms-favorite-wrapper {
+ display: inline-block;
+}
+
+.llms-loop-list {
+ list-style: none;
+ margin: 0 -10px;
+ padding: 0;
+}
+@media all and (min-width: 600px) {
+ .llms-loop-list.cols-1 .llms-loop-item {
+ width: 100%;
+ }
+ .llms-loop-list.cols-2 .llms-loop-item {
+ width: 50%;
+ }
+ .llms-loop-list.cols-3 .llms-loop-item {
+ width: 33.3333333333%;
+ }
+ .llms-loop-list.cols-4 .llms-loop-item {
+ width: 25%;
+ }
+ .llms-loop-list.cols-5 .llms-loop-item {
+ width: 20%;
+ }
+ .llms-loop-list.cols-6 .llms-loop-item {
+ width: 16.6666666667%;
+ }
+}
+
+.llms-loop-item {
+ float: left;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+
+.llms-loop-item-content {
+ background: #fefefe;
+ border: 1px solid #dedede;
+ border-radius: 6px;
+ overflow: hidden;
+ padding-bottom: 15px;
+ margin: 10px;
+}
+.llms-loop-item-content .llms-loop-link {
+ color: #010101;
+ display: block;
+ text-decoration: none;
+}
+.llms-loop-item-content .llms-loop-link:visited {
+ color: #010101;
+}
+.llms-loop-item-content .llms-featured-image {
+ display: block;
+ max-width: 100%;
+}
+.llms-loop-item-content .llms-loop-title {
+ color: #010101;
+ margin: 15px 0;
+}
+.llms-loop-item-content .llms-loop-title:hover {
+ color: #466dd8;
+}
+.llms-loop-item-content .llms-meta,
+.llms-loop-item-content .llms-author,
+.llms-loop-item-content .llms-loop-title {
+ padding: 0 15px;
+}
+.llms-loop-item-content .llms-meta,
+.llms-loop-item-content .llms-author {
+ color: #444;
+ display: block;
+ font-size: 14px;
+ margin-bottom: 10px;
+}
+.llms-loop-item-content .llms-meta:last-child,
+.llms-loop-item-content .llms-author:last-child {
+ margin-bottom: 0;
+}
+.llms-loop-item-content .llms-author {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 5px;
+}
+.llms-loop-item-content .llms-featured-img-wrap {
+ overflow: hidden;
+}
+.llms-loop-item-content p {
+ margin-bottom: 0;
+}
+.llms-loop-item-content .llms-progress {
+ margin: 0;
+ height: 0.4em;
+}
+.llms-loop-item-content .llms-progress .progress__indicator {
+ display: none;
+}
+.llms-loop-item-content .llms-progress .llms-progress-bar {
+ background-color: #f6f6f6;
+ right: 0;
+ top: 0;
+}
+
+.llms-meta-info {
+ margin: 40px 0;
+}
+.llms-meta-info .llms-meta-title {
+ margin: 0;
+}
+.llms-meta-info .llms-meta p {
+ margin-bottom: 0;
+}
+.llms-meta-info .llms-meta span {
+ font-weight: 700;
+}
+
+.llms-course-progress {
+ margin: 40px auto;
+ max-width: 480px;
+ text-align: center;
+}
+
+.llms-syllabus-wrapper {
+ margin: 20px 0;
+ text-align: left;
+}
+.llms-syllabus-wrapper .llms-section-title {
+ margin: 40px 0 10px;
+}
+.llms-syllabus-wrapper .llms-section-title + .llms-lesson-preview {
+ border-top: 1px solid #dedede;
+}
+
+.llms-lesson-preview {
+ border-right: 1px solid #dedede;
+ border-bottom: 1px solid #dedede;
+ border-left: 1px solid #dedede;
+ display: block;
+ margin: 0;
+ max-width: 100%;
+ position: relative;
+}
+.llms-lesson-preview .llms-lesson-link {
+ background: #fefefe;
+ color: #010101;
+ display: block;
+ padding: 15px;
+ text-decoration: none;
+ -webkit-transition: background-color 0.3s ease;
+ transition: background-color 0.3s ease;
+}
+.llms-lesson-preview .llms-lesson-link:hover {
+ background: #eaeaea;
+}
+.llms-lesson-preview .llms-lesson-link:visited {
+ color: #212121;
+}
+.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked {
+ background: #EFEFEF;
+ color: #666;
+}
+.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked:hover {
+ background: #dedede;
+}
+.llms-lesson-preview .llms-lesson-link .llms-lesson-preview-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: reverse;
+ -ms-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+}
+.llms-lesson-preview .llms-lesson-thumbnail {
+ margin-bottom: 15px;
+}
+.llms-lesson-preview .llms-lesson-thumbnail img {
+ display: block;
+ height: auto;
+ width: 100%;
+}
+.llms-lesson-preview .llms-lesson-title {
+ font-weight: 700;
+ margin: 0 auto 5px;
+}
+.llms-lesson-preview .llms-lesson-title:last-child {
+ margin-bottom: 0;
+}
+.llms-lesson-preview .llms-lesson-excerpt {
+ margin-top: 5px;
+}
+.llms-lesson-preview .llms-lesson-excerpt p {
+ margin: 0 0 10px 0;
+ padding: 0;
+}
+.llms-lesson-preview .llms-lesson-excerpt p:last-of-type {
+ margin: 0;
+}
+.llms-lesson-preview .llms-main {
+ -webkit-box-flex: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+}
+.llms-lesson-preview .llms-extra {
+ min-width: 50px;
+ text-align: right;
+}
+.llms-lesson-preview .llms-lesson-counter,
+.llms-lesson-preview .llms-free-lesson-svg,
+.llms-lesson-preview .llms-lesson-complete,
+.llms-lesson-preview .llms-lesson-complete-placeholder {
+ display: block;
+}
+.llms-lesson-preview.is-free .llms-lesson-complete, .llms-lesson-preview.is-complete .llms-lesson-complete {
+ color: #466dd8;
+}
+.llms-lesson-preview.is-complete .llms-lesson-title:not(.llms-student-dashboard .llms-lesson-title):not(.llms-course-navigation .llms-lesson-title) {
+ text-decoration: line-through;
+}
+.llms-lesson-preview .llms-icon-free {
+ background: #466dd8;
+ border-radius: 6px;
+ color: #fefefe;
+ display: inline-block;
+ font-size: 14px;
+ font-weight: bold;
+ line-height: 1;
+ padding: 5px 8px 4px;
+ white-space: nowrap;
+}
+.llms-lesson-preview.is-incomplete .llms-lesson-complete {
+ color: #cacaca;
+}
+.llms-lesson-preview .llms-lesson-counter {
+ font-size: 16px;
+ margin-bottom: 5px;
+}
+.llms-lesson-preview .llms-free-lesson-svg {
+ fill: currentColor;
+ height: 23px;
+ width: 50px;
+}
+
+.llms-course-navigation {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 20px;
+}
+.llms-course-navigation .llms-prev-lesson,
+.llms-course-navigation .llms-next-lesson,
+.llms-course-navigation .llms-back-to-course {
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+.llms-course-navigation .llms-prev-lesson + .llms-back-to-course {
+ text-align: right;
+}
+.llms-course-navigation .llms-next-lesson .llms-lesson-preview .llms-lesson-link {
+ text-align: right;
+}
+.llms-course-navigation .llms-lesson-preview {
+ border: 1px solid #dedede;
+}
+.llms-course-navigation .llms-lesson-link {
+ display: block;
+}
+
+/* progress bar */
+.llms-progress {
+ clear: both;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: reverse;
+ -ms-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+ position: relative;
+ height: 1em;
+ width: 100%;
+ margin: 15px 0;
+}
+
+.llms-progress .llms-progress-bar {
+ background-color: #dedede;
+ position: relative;
+ height: 0.4em;
+ top: 0.3em;
+ width: 100%;
+}
+
+.llms-progress .progress-bar-complete {
+ background-color: #ef476f;
+ height: 100%;
+}
+
+.progress__indicator {
+ float: right;
+ text-align: right;
+ height: 1em;
+ line-height: 1em;
+ margin-left: 5px;
+ white-space: nowrap;
+}
+
+.llms-author .name {
+ margin-left: 5px;
+}
+.llms-author .label {
+ margin-left: 5px;
+}
+.llms-author .avatar {
+ border-radius: 50%;
+}
+.llms-author .bio {
+ margin-top: 5px;
+}
+
+.llms-instructor-info {
+ margin: 40px 0;
+}
+.llms-instructor-info .llms-meta-title {
+ margin: 0;
+}
+.llms-instructor-info .llms-instructors .llms-col:first-child .llms-author {
+ margin-left: 0;
+}
+.llms-instructor-info .llms-instructors .llms-col:last-child .llms-author {
+ margin-right: 0;
+}
+.llms-instructor-info .llms-instructors .llms-author {
+ background: #fefefe;
+ border: 1px solid #dedede;
+ border-top: 4px solid #466dd8;
+ border-bottom-right-radius: 6px;
+ border-bottom-left-radius: 6px;
+ color: #010101;
+ text-align: center;
+ margin: 45px 0 0;
+ padding: 0 20px 20px;
+}
+.llms-instructor-info .llms-instructors .llms-author .avatar {
+ background: #466dd8;
+ border: 4px solid #466dd8;
+ display: block;
+ margin: -35px auto 10px;
+}
+.llms-instructor-info .llms-instructors .llms-author .llms-author-info {
+ display: block;
+}
+.llms-instructor-info .llms-instructors .llms-author .llms-author-info.name {
+ font-weight: 700;
+}
+.llms-instructor-info .llms-instructors .llms-author .llms-author-info.label {
+ font-size: 85%;
+}
+.llms-instructor-info .llms-instructors .llms-author .llms-author-info.bio {
+ font-size: 90%;
+ margin-bottom: 0;
+}
+
+.llms_review {
+ margin: 20px 0px;
+ padding: 10px;
+}
+.llms_review h5 {
+ font-size: 17px;
+ margin: 3px 0px;
+}
+.llms_review h6 {
+ font-size: 13px;
+}
+.llms_review p {
+ font-size: 15px;
+}
+
+.review_box [type=text] {
+ margin: 10px 0px;
+}
+.review_box h5 {
+ color: red;
+ display: none;
+}
+.review_box + .thank_you_box {
+ display: none;
+}
+
+.llms-notice {
+ background: rgba(70, 109, 216, 0.3);
+ border-color: #466dd8;
+ border-style: solid;
+ border-width: 1px;
+ border-radius: 6px;
+ padding: 15px;
+ margin-bottom: 40px;
+}
+.llms-notice a {
+ color: inherit;
+}
+.llms-notice p:last-child, .llms-notice ul:last-child {
+ margin-bottom: 0;
+}
+.llms-notice li {
+ list-style-type: none;
+}
+.llms-notice.llms-debug {
+ background: rgba(202, 202, 202, 0.3);
+ border-color: #cacaca;
+}
+.llms-notice.llms-error {
+ background: rgba(187, 35, 28, 0.15);
+ border-color: #bb231c;
+}
+.llms-notice.llms-success {
+ background: rgba(77, 141, 60, 0.15);
+ border-color: #4d8d3c;
+}
+
+.entry-content .llms-notice {
+ margin: 0 0 40px;
+}
+.entry-content .llms-notice li {
+ list-style-type: none;
+}
+
+ul.llms-achievements-loop,
+.lifterlms ul.llms-achievements-loop,
+ul.llms-certificates-loop,
+.lifterlms ul.llms-certificates-loop {
+ list-style-type: none;
+ margin: 0 -10px;
+ padding: 0;
+}
+ul.llms-achievements-loop:before, ul.llms-achievements-loop:after,
+.lifterlms ul.llms-achievements-loop:before,
+.lifterlms ul.llms-achievements-loop:after,
+ul.llms-certificates-loop:before,
+ul.llms-certificates-loop:after,
+.lifterlms ul.llms-certificates-loop:before,
+.lifterlms ul.llms-certificates-loop:after {
+ content: " ";
+ display: table;
+}
+ul.llms-achievements-loop:after,
+.lifterlms ul.llms-achievements-loop:after,
+ul.llms-certificates-loop:after,
+.lifterlms ul.llms-certificates-loop:after {
+ clear: both;
+}
+ul.llms-achievements-loop li.llms-achievement-loop-item,
+ul.llms-achievements-loop li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop li.llms-certificate-loop-item,
+ul.llms-certificates-loop li.llms-achievement-loop-item,
+ul.llms-certificates-loop li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop li.llms-certificate-loop-item {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: block;
+ float: left;
+ list-style-type: none;
+ margin: 0;
+ padding: 10px;
+ width: 100%;
+}
+@media all and (min-width: 600px) {
+ ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item {
+ width: 100%;
+ }
+ ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item {
+ width: 50%;
+ }
+ ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item {
+ width: 33.3333333333%;
+ }
+ ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item {
+ width: 25%;
+ }
+ ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item,
+.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,
+ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,
+ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,
+.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item {
+ width: 20%;
+ }
+}
+
+.llms-achievement,
+.llms-certificate {
+ background: #fefefe;
+ border: none;
+ border-radius: 12px;
+ color: #010101;
+ display: block;
+ padding: 20px 0;
+ text-decoration: none;
+ width: 100%;
+}
+.llms-achievement:hover,
+.llms-certificate:hover {
+ background: #eaeaea;
+}
+.llms-achievement .llms-achievement-img,
+.llms-certificate .llms-achievement-img {
+ display: block;
+ margin: 0 auto;
+ max-width: 80%;
+}
+.llms-achievement .llms-achievement-title,
+.llms-certificate .llms-achievement-title {
+ color: #010101;
+ font-size: 16px;
+ margin: 0;
+ padding: 10px;
+ text-align: center;
+}
+.llms-achievement .llms-certificate-title,
+.llms-certificate .llms-certificate-title {
+ color: #010101;
+ font-size: 16px;
+ margin: 0;
+ padding: 0 0 10px;
+}
+.llms-achievement .llms-achievement-info,
+.llms-achievement .llms-achievement-date,
+.llms-certificate .llms-achievement-info,
+.llms-certificate .llms-achievement-date {
+ display: none;
+}
+.llms-achievement .llms-achievement-content,
+.llms-certificate .llms-achievement-content {
+ padding: 20px;
+}
+.llms-achievement .llms-achievement-content:empty,
+.llms-certificate .llms-achievement-content:empty {
+ padding: 0;
+}
+.llms-achievement .llms-achievement-content *:last-child,
+.llms-certificate .llms-achievement-content *:last-child {
+ margin-bottom: 0;
+}
+
+.llms-certificate {
+ border: 4px double #dedede;
+ padding: 20px 10px;
+ background: #fefefe;
+ text-align: center;
+}
+.llms-certificate:hover {
+ background: #fefefe;
+ border-color: #eaeaea;
+}
+
+.llms-achievement-modal .llms-achievement {
+ background: #fff;
+}
+.llms-achievement-modal .llms-achievement-info {
+ display: block;
+}
+.llms-achievement-modal .llms-achievement-title {
+ display: none;
+}
+
+.llms-notification {
+ background: #fefefe;
+ -webkit-box-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;
+ box-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;
+ border-top: 4px solid #466dd8;
+ color: #010101;
+ opacity: 0;
+ padding: 12px;
+ position: fixed;
+ right: -800px;
+ top: 24px;
+ -webkit-transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out;
+ transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out;
+ visibility: hidden;
+ width: auto;
+ z-index: 9999999;
+}
+.llms-notification:before, .llms-notification:after {
+ content: " ";
+ display: table;
+}
+.llms-notification:after {
+ clear: both;
+}
+.llms-notification.visible {
+ left: 12px;
+ opacity: 1;
+ right: 12px;
+ -webkit-transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
+ transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
+ transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, transform 0.2s ease-in-out;
+ transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
+ visibility: visible;
+}
+.llms-notification.visible:hover .llms-notification-dismiss {
+ opacity: 1;
+}
+.llms-notification .llms-notification-content {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.llms-notification .llms-notification-main {
+ -ms-flex-item-align: start;
+ align-self: flex-start;
+ -webkit-box-flex: 4;
+ -ms-flex: 4;
+ flex: 4;
+ -webkit-box-ordinal-group: 3;
+ -ms-flex-order: 2;
+ order: 2;
+}
+.llms-notification .llms-notification-title {
+ color: #010101;
+ font-size: 18px;
+ margin: 0;
+}
+.llms-notification .llms-notification-body {
+ font-size: 14px;
+ line-height: 1.4;
+}
+.llms-notification .llms-notification-body p, .llms-notification .llms-notification-body li {
+ font-size: inherit;
+}
+.llms-notification .llms-notification-body p {
+ margin-bottom: 8px;
+}
+.llms-notification .llms-notification-body p img {
+ max-width: 100%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert {
+ background: #f6f6f6;
+ border: 1px solid #d0d0d0;
+ -webkit-box-shadow: inset 0 0 0 3px #fefefe, inset 0 0 0 4px #dedede;
+ box-shadow: inset 0 0 0 3px #fefefe, inset 0 0 0 4px #dedede;
+ padding: 16px 16px 24px;
+ margin-top: 12px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert-title {
+ font-size: 16px;
+ font-weight: 700;
+ margin: 12px auto;
+ text-align: center;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body {
+ width: 100%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(1) {
+ width: 65%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(2) {
+ width: 35%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(3) {
+ width: 85%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(4) {
+ width: 75%;
+ margin-top: 18px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(5) {
+ width: 70%;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(6) {
+ margin-left: 12px;
+ margin-bottom: -24px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(7) {
+ width: 65%;
+ margin-right: 12px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-line {
+ border-radius: 2px;
+ height: 8px;
+ background: #b0b0b0;
+ background-image: -webkit-gradient(linear, left top, right top, from(#b0b0b0), color-stop(20%, #a0a0a0), color-stop(40%, #b0b0b0), to(#b0b0b0));
+ background-image: linear-gradient(to right, #b0b0b0 0%, #a0a0a0 20%, #b0b0b0 40%, #b0b0b0 100%);
+ background-repeat: no-repeat;
+ margin: 4px auto;
+}
+.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-dot {
+ background: #b0b0b0;
+ border-radius: 50%;
+ display: inline-block;
+ content: "";
+ height: 24px;
+ width: 24px;
+}
+.llms-notification .llms-notification-body .llms-mini-cert p {
+ margin-bottom: 0;
+}
+.llms-notification .llms-notification-aside {
+ -ms-flex-item-align: start;
+ align-self: flex-start;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin-right: 12px;
+ -webkit-box-ordinal-group: 2;
+ -ms-flex-order: 1;
+ order: 1;
+}
+.llms-notification .llms-notification-icon {
+ display: block;
+ max-width: 64px;
+}
+.llms-notification .llms-notification-footer {
+ border-top: 1px solid #e5e5e5;
+ font-size: 12px;
+ margin-top: 12px;
+ padding: 6px 6px 0;
+ text-align: right;
+}
+.llms-notification .llms-notification-footer a {
+ color: #010101;
+}
+.llms-notification .llms-notification-dismiss {
+ color: #bb231c;
+ cursor: pointer;
+ font-size: 22px;
+ position: absolute;
+ right: 10px;
+ top: 8px;
+ -webkit-transition: opacity 0.4s ease-in-out;
+ transition: opacity 0.4s ease-in-out;
+}
+
+.llms-sd-notification-center .llms-notification-list,
+.llms-sd-notification-center .llms-notification-list-item {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-sd-notification-center .llms-notification-list-item:hover .llms-notification {
+ background: #fcfcfc;
+}
+.llms-sd-notification-center .llms-notification {
+ opacity: 1;
+ border-top: 1px solid #e5e5e5;
+ left: auto;
+ padding: 24px;
+ position: relative;
+ right: auto;
+ top: auto;
+ visibility: visible;
+ width: auto;
+}
+.llms-sd-notification-center .llms-notification .llms-notification-aside {
+ max-width: 64px;
+}
+.llms-sd-notification-center .llms-notification .llms-notification-footer {
+ border: none;
+ padding: 0;
+ text-align: left;
+}
+.llms-sd-notification-center .llms-notification .llms-progress {
+ display: none !important;
+}
+.llms-sd-notification-center .llms-notification .llms-notification-date {
+ color: #515151;
+ float: left;
+ margin-right: 6px;
+}
+.llms-sd-notification-center .llms-notification .llms-mini-cert {
+ margin: 0 auto;
+ max-width: 380px;
+}
+
+@media all and (min-width: 480px) {
+ .llms-notification {
+ right: -800px;
+ width: 360px;
+ }
+ .llms-notification.visible {
+ left: auto;
+ right: 24px;
+ }
+ .llms-notification .llms-notification-dismiss {
+ opacity: 0;
+ }
+}
+.llms-pagination ul {
+ list-style-type: none;
+ margin: 40px 0;
+ padding: 0;
+}
+.llms-pagination ul li {
+ float: left;
+}
+.llms-pagination ul li a {
+ border-bottom: 0;
+ text-decoration: none;
+}
+.llms-pagination ul li .page-numbers {
+ padding: 0.5em;
+ text-decoration: underline;
+}
+.llms-pagination ul li .page-numbers.current {
+ text-decoration: none;
+}
+
+.llms-tooltip {
+ background: #2a2a2a;
+ border-radius: 4px;
+ color: #fff;
+ font-size: 14px;
+ line-height: 1.2;
+ opacity: 0;
+ top: -20px;
+ padding: 8px 12px;
+ left: 50%;
+ position: absolute;
+ pointer-events: none;
+ -webkit-transform: translateX(-50%);
+ transform: translateX(-50%);
+ -webkit-transition: opacity 0.2s ease, top 0.2s ease;
+ transition: opacity 0.2s ease, top 0.2s ease;
+ max-width: 320px;
+}
+.llms-tooltip.show {
+ top: -28px;
+ opacity: 1;
+}
+.llms-tooltip:after {
+ bottom: -8px;
+ border-top: 8px solid #2a2a2a;
+ border-left: 8px solid transparent;
+ border-right: 8px solid transparent;
+ content: "";
+ height: 0;
+ left: 50%;
+ position: absolute;
+ -webkit-transform: translateX(-50%);
+ transform: translateX(-50%);
+ width: 0;
+}
+
+.webui-popover-title {
+ font-size: initial;
+ font-weight: initial;
+ line-height: initial;
+}
+
+.webui-popover-inverse .webui-popover-inner .close {
+ color: #fff;
+ opacity: 0.6;
+ text-shadow: none;
+}
+.webui-popover-inverse .webui-popover-inner .close:hover {
+ opacity: 0.8;
+}
+.webui-popover-inverse .webui-popover-content a {
+ color: #fff;
+ text-decoration: underline;
+}
+.webui-popover-inverse .webui-popover-content a:hover {
+ text-decoration: none;
+}
+
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question {
+ background: #efefef;
+ border-radius: 6px;
+ margin: 0 0 15px;
+ position: relative;
+ list-style-type: none;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {
+ color: inherit;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 10px;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 15px 35px 15px 15px;
+ text-decoration: none;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect {
+ background: rgba(192, 86, 33, 0.2);
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon {
+ background-color: #c05621;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {
+ background: rgba(77, 141, 60, 0.15);
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {
+ background-color: #4d8d3c;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {
+ background: rgba(187, 35, 28, 0.15);
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {
+ background-color: #bb231c;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question pre {
+ overflow: auto;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {
+ font-size: 22px;
+ margin: 0;
+ line-height: 1.4;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {
+ line-height: 1.4;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {
+ position: absolute;
+ right: -12px;
+ top: -2px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon {
+ color: rgba(255, 255, 255, 0.65);
+ border-radius: 50%;
+ font-size: 30px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ width: 40px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {
+ display: none;
+ padding: 0 15px 15px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {
+ font-weight: 700;
+ margin: 0 0 10px;
+ padding: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers {
+ margin: 0;
+ padding: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {
+ padding: 0;
+ margin: 0 0 0 30px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child {
+ list-style-type: none;
+ margin-left: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {
+ height: auto;
+ max-width: 200px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section {
+ border-top: 2px solid rgba(255, 255, 255, 0.5);
+ margin-top: 20px;
+ padding-top: 20px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child {
+ border-top: none;
+ margin-top: 0;
+ padding-top: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {
+ display: inline-block;
+ list-style-type: none;
+ margin: 0;
+ padding: 5px;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {
+ opacity: 0.5;
+}
+.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {
+ font-style: italic;
+ font-weight: normal;
+}
+.single-llms_quiz .llms-return {
+ margin-bottom: 10px;
+}
+.single-llms_quiz .llms-quiz-results:before, .single-llms_quiz .llms-quiz-results:after {
+ content: " ";
+ display: table;
+}
+.single-llms_quiz .llms-quiz-results:after {
+ clear: both;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.passing {
+ color: #4d8d3c;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.passing svg path {
+ stroke: #4d8d3c;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.pending {
+ color: #555;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.pending svg path {
+ stroke: #555;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.failing {
+ color: #bb231c;
+}
+.single-llms_quiz .llms-quiz-results .llms-donut.failing svg path {
+ stroke: #bb231c;
+}
+.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside,
+.single-llms_quiz .llms-quiz-results .llms-quiz-results-main,
+.single-llms_quiz .llms-quiz-results .llms-quiz-results-history {
+ margin-bottom: 20px;
+}
+@media all and (min-width: 600px) {
+ .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside {
+ float: left;
+ width: 220px;
+ }
+ .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside + .llms-quiz-results-main {
+ float: right;
+ width: calc(100% - 300px);
+ }
+ .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside + .llms-quiz-results-main + .llms-quiz-results-history {
+ float: right;
+ width: calc(100% - 300px);
+ }
+ .single-llms_quiz .llms-quiz-results .llms-quiz-results-history {
+ clear: right;
+ }
+}
+.single-llms_quiz ul.llms-quiz-meta-info {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.single-llms_quiz ul.llms-quiz-meta-info li {
+ list-style-type: none;
+ margin: 10px 0 0;
+ padding: 0;
+}
+.single-llms_quiz ul.llms-quiz-meta-info {
+ margin-bottom: 10px;
+}
+.single-llms_quiz .llms-quiz-buttons {
+ margin-top: 10px;
+ text-align: left;
+}
+.single-llms_quiz .llms-quiz-buttons form {
+ display: inline-block;
+}
+
+.llms-quiz-question-wrapper {
+ min-height: 140px;
+ position: relative;
+}
+.llms-quiz-question-wrapper .llms-quiz-loading {
+ bottom: 20px;
+ left: 0;
+ position: absolute;
+ right: 0;
+ text-align: center;
+ z-index: 1;
+}
+.llms-quiz-question-wrapper .llms-question-image img {
+ height: auto;
+ max-width: 100%;
+}
+
+.llms-quiz-ui {
+ position: relative;
+}
+.llms-quiz-ui .llms-quiz-header {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ margin: 0 0 40px;
+}
+.llms-quiz-ui .llms-progress {
+ background-color: #dedede;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ height: 8px;
+ margin: 0;
+ overflow: hidden;
+}
+.llms-quiz-ui .llms-progress .progress-bar-complete {
+ -webkit-transition: width 0.3s ease-in;
+ transition: width 0.3s ease-in;
+ width: 0;
+}
+.llms-quiz-ui .llms-error {
+ background: rgba(187, 35, 28, 0.15);
+ border: 1px solid #bb231c;
+ border-radius: 6px;
+ margin: 20px 0;
+ padding: 15px;
+}
+.llms-quiz-ui .llms-error:before, .llms-quiz-ui .llms-error:after {
+ content: " ";
+ display: table;
+}
+.llms-quiz-ui .llms-error:after {
+ clear: both;
+}
+.llms-quiz-ui .llms-error a {
+ color: #bb231c;
+ float: right;
+ font-size: 22px;
+ line-height: 1;
+ text-decoration: none;
+}
+.llms-quiz-ui .llms-quiz-counter {
+ display: none;
+ color: #6a6a6a;
+ float: right;
+ font-size: 18px;
+}
+.llms-quiz-ui .llms-quiz-counter .llms-sep {
+ margin: 0 5px;
+}
+.llms-quiz-ui .llms-quiz-nav {
+ margin-top: 20px;
+}
+.llms-quiz-ui .llms-quiz-nav button {
+ margin: 0 10px 0 0;
+}
+
+.llms-question-wrapper .llms-question-text {
+ font-size: 30px;
+ font-weight: 400;
+ margin-bottom: 15px;
+}
+.llms-question-wrapper ol.llms-question-choices {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice {
+ border-bottom: 1px solid #e8e8e8;
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice:last-child {
+ border-bottom: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture {
+ border-bottom: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture label {
+ display: inline-block;
+ padding: 0;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-marker {
+ bottom: 10px;
+ margin: 0;
+ position: absolute;
+ right: 10px;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image {
+ margin: 2px;
+ padding: 20px;
+ -webkit-transition: background 0.4s ease;
+ transition: background 0.4s ease;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image img {
+ display: block;
+ height: auto;
+ width: 100%;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture input:checked ~ .llms-choice-image {
+ background: #efefef;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice input {
+ display: none;
+ left: 0;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ visibility: hidden;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice label {
+ display: block;
+ margin: 0;
+ padding: 10px 20px;
+ position: relative;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .iterator {
+ display: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .fa {
+ display: inline;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker {
+ background: #fefefe;
+ color: #010101;
+ display: inline-block;
+ font-size: 20px;
+ height: 40px;
+ line-height: 40px;
+ margin-right: 10px;
+ text-align: center;
+ -webkit-transition: all 0.2s ease;
+ transition: all 0.2s ease;
+ vertical-align: middle;
+ width: 40px;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker .fa {
+ display: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--lister, .llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--checkbox {
+ border-radius: 4px;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--radio {
+ border-radius: 50%;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker {
+ background: #ef476f;
+ color: #fff;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker .iterator {
+ display: none;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker .fa {
+ display: inline;
+}
+.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-choice-text {
+ display: inline-block;
+ font-size: 18px;
+ font-weight: 400;
+ line-height: 1.6;
+ margin: 0;
+ padding: 0;
+ vertical-align: middle;
+ width: calc(100% - 60px);
+}
+
+.llms-quiz-timer {
+ background: #fff;
+ border: 1px solid #4d8d3c;
+ border-radius: 4px;
+ color: #4d8d3c;
+ float: right;
+ font-size: 18px;
+ line-height: 1;
+ margin-left: 20px;
+ padding: 8px 12px;
+ position: relative;
+ white-space: nowrap;
+ z-index: 1;
+}
+.llms-quiz-timer.color-half {
+ border-color: #c05621;
+ color: #c05621;
+}
+.llms-quiz-timer.color-empty {
+ border-color: #bb231c;
+ color: #bb231c;
+}
+.llms-quiz-timer .llms-tiles {
+ display: inline-block;
+ margin-left: 5px;
+}
+
+.voucher-expand {
+ display: none;
+}
+
+@media all and (min-width: 600px) {
+ .llms-access-plans.cols-1 .llms-access-plan {
+ width: 100%;
+ }
+ .llms-access-plans.cols-2 .llms-access-plan {
+ width: 50%;
+ }
+ .llms-access-plans.cols-3 .llms-access-plan {
+ width: 33.3333333333%;
+ }
+ .llms-access-plans.cols-4 .llms-access-plan {
+ width: 25%;
+ }
+ .llms-access-plans.cols-5 .llms-access-plan {
+ width: 20%;
+ }
+}
+
+.llms-free-enroll-form {
+ margin-bottom: 0;
+}
+
+.llms-access-plan {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ float: left;
+ text-align: center;
+ width: 100%;
+}
+.llms-access-plan .llms-access-plan-content,
+.llms-access-plan .llms-access-plan-footer {
+ background: #f1f1f1;
+}
+.llms-access-plan.featured .llms-access-plan-featured {
+ background: #466dd8;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+.llms-access-plan.featured .llms-access-plan-content {
+ border-radius: 0;
+}
+.llms-access-plan.featured .llms-access-plan-title {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.llms-access-plan.featured .llms-access-plan-footer,
+.llms-access-plan.featured .llms-access-plan-content {
+ border-left: 3px solid #466dd8;
+ border-right: 3px solid #466dd8;
+}
+.llms-access-plan.featured .llms-access-plan-footer {
+ border-bottom-color: #466dd8;
+}
+.llms-access-plan.on-sale .price-regular {
+ text-decoration: line-through;
+}
+.llms-access-plan.on-sale .price-regular .lifterlms-price {
+ font-weight: 400;
+}
+.llms-access-plan .stamp {
+ background: #466dd8;
+ border-radius: 6px;
+ color: #fefefe;
+ display: inline-block;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: bold;
+ line-height: 1;
+ padding: 5px 8px 4px;
+}
+
+.llms-access-plan-featured {
+ color: #fff;
+ font-size: 14px;
+ font-weight: 700;
+ letter-spacing: 1px;
+ margin: 0 2px 0 2px;
+ padding: 5px 0 0;
+}
+
+.llms-access-plan-content {
+ border-top-right-radius: 6px;
+ border-top-left-radius: 6px;
+ margin: 0 2px 0;
+ overflow: hidden;
+}
+.llms-access-plan-content .llms-access-plan-pricing {
+ color: #010101;
+ padding: 20px 0 0;
+}
+
+.llms-access-plan-title {
+ background: #466dd8;
+ color: #fefefe;
+ margin: 0;
+ padding: 10px 15px;
+}
+
+.llms-access-plan-pricing .llms-price-currency-symbol {
+ font-size: 14px;
+ vertical-align: top;
+}
+
+.llms-access-plan-price .lifterlms-price {
+ font-weight: 700;
+}
+.llms-access-plan-price.sale {
+ padding: 5px 0;
+ border-top: 1px solid #d0d0d0;
+ border-bottom: 1px solid #d0d0d0;
+}
+
+.llms-access-plan-trial,
+.llms-access-plan-schedule,
+.llms-access-plan-sale-end,
+.llms-access-plan-expiration {
+ font-size: 16px;
+}
+
+.llms-access-plan-description {
+ color: #010101;
+ font-size: 16px;
+ padding: 10px 10px 0;
+}
+.llms-access-plan-description ul {
+ margin: 0;
+}
+.llms-access-plan-description ul li {
+ border-bottom: 1px solid #d0d0d0;
+ list-style-type: none;
+}
+.llms-access-plan-description ul li:last-child {
+ border-bottom: none;
+}
+.llms-access-plan-description div:last-child, .llms-access-plan-description img:last-child, .llms-access-plan-description p:last-child, .llms-access-plan-description ul:last-child, .llms-access-plan-description li:last-child {
+ margin-bottom: 0;
+}
+
+.llms-access-plan-restrictions {
+ margin-top: 20px;
+}
+.llms-access-plan-restrictions .stamp {
+ vertical-align: baseline;
+}
+.llms-access-plan-restrictions ul {
+ margin: 5px 0 0 0;
+ padding: 0;
+}
+.llms-access-plan-restrictions ul li {
+ font-size: 14px;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-access-plan-restrictions a {
+ color: #c05621;
+}
+.llms-access-plan-restrictions a:hover {
+ color: #f67d28;
+}
+
+.llms-access-plan-footer {
+ border-bottom: 3px solid #f1f1f1;
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ padding: 15px;
+ margin: 0 2px 2px 2px;
+}
+.llms-access-plan-footer .button {
+ display: inline-block;
+}
+.llms-access-plan-footer .llms-access-plan-pricing {
+ padding: 0 0 10px;
+}
+
+.webui-popover-content .llms-members-only-restrictions {
+ text-align: center;
+}
+.webui-popover-content .llms-members-only-restrictions ul, .webui-popover-content .llms-members-only-restrictions ol, .webui-popover-content .llms-members-only-restrictions li, .webui-popover-content .llms-members-only-restrictions p {
+ margin: 0;
+ padding: 0;
+}
+.webui-popover-content .llms-members-only-restrictions ul, .webui-popover-content .llms-members-only-restrictions ol, .webui-popover-content .llms-members-only-restrictions li {
+ list-style-type: none;
+}
+.webui-popover-content .llms-members-only-restrictions li {
+ padding: 8px 0;
+ border-top: 1px solid #3b3b3b;
+}
+.webui-popover-content .llms-members-only-restrictions li:first-child {
+ border-top: none;
+}
+.webui-popover-content .llms-members-only-restrictions li a {
+ display: block;
+}
+
+.llms-checkout-wrapper .llms-person-login-form-wrapper {
+ margin-bottom: 40px;
+}
+.llms-checkout-wrapper form.llms-login {
+ display: none;
+}
+.llms-checkout-wrapper .llms-form-heading {
+ margin: 0 0 20px;
+}
+
+.llms-checkout {
+ position: relative;
+}
+
+.llms-checkout-cols-2.llms-col-2 section {
+ background-color: #fefefe;
+ border: 1px solid #ccc;
+ border-radius: 12px;
+ padding: 20px;
+}
+.llms-checkout-cols-2.llms-col-2 section .llms-form-heading {
+ padding: 0;
+}
+@media all and (min-width: 800px) {
+ .llms-checkout-cols-2 .llms-checkout-col {
+ float: left;
+ }
+ .llms-checkout-cols-2 .llms-checkout-col.llms-col-1 {
+ margin-right: 20px;
+ width: calc(58% - 20px);
+ }
+ .llms-checkout-cols-2 .llms-checkout-col.llms-col-2 {
+ margin-left: 20px;
+ width: calc(42% - 20px);
+ }
+ .llms-checkout-cols-2 .llms-checkout-col.llms-col-2 button {
+ width: 100%;
+ }
+}
+
+.llms-checkout-section {
+ margin-bottom: 40px;
+ position: relative;
+}
+
+.llms-checkout-section-content.llms-form-fields {
+ margin: 0px;
+}
+.llms-checkout-section-content .llms-label {
+ font-weight: 400;
+}
+.llms-checkout-section-content .llms-order-summary {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-checkout-section-content .llms-order-summary li {
+ list-style-type: none;
+ margin: 0 0 15px 0;
+}
+.llms-checkout-section-content .llms-order-summary :not(.llms-label) {
+ font-weight: 700;
+}
+.llms-checkout-section-content .llms-order-summary li.llms-pricing.on-sale .price-regular, .llms-checkout-section-content .llms-order-summary li.llms-pricing.has-coupon .price-regular {
+ text-decoration: line-through;
+}
+.llms-checkout-section-content .llms-coupon-wrapper {
+ border-top: 1px solid #dedede;
+ margin-top: 20px;
+ padding-top: 20px;
+}
+.llms-checkout-section-content .llms-coupon-wrapper .llms-coupon-entry {
+ display: none;
+ margin-top: 20px;
+}
+
+.llms-form-field.llms-payment-gateway-option {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 8px;
+}
+.llms-form-field.llms-payment-gateway-option label + span.llms-description {
+ display: inline-block;
+ margin-left: 5px;
+}
+.llms-form-field.llms-payment-gateway-option .llms-description a {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ text-decoration: none;
+}
+.llms-form-field.llms-payment-gateway-option .llms-description img {
+ display: inline;
+ max-height: 22px;
+ vertical-align: middle;
+}
+
+.llms-checkout-wrapper ul.llms-payment-gateways {
+ margin: 5px 0 0;
+ padding: 0;
+}
+
+ul.llms-payment-gateways {
+ list-style-type: none;
+}
+ul.llms-payment-gateways li:last-child:after {
+ border-bottom: 1px solid #dedede;
+ content: "";
+ display: block;
+ margin: 20px 0;
+}
+ul.llms-payment-gateways .llms-payment-gateway {
+ margin-bottom: 30px;
+ list-style-type: none;
+}
+ul.llms-payment-gateways .llms-payment-gateway:last-child {
+ margin-bottom: none;
+}
+ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-payment-gateway-option label {
+ font-weight: 700;
+}
+ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields {
+ display: block;
+}
+ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields .llms-notice {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+ul.llms-payment-gateways .llms-payment-gateway .llms-form-field {
+ padding-bottom: 0;
+}
+ul.llms-payment-gateways .llms-gateway-description {
+ margin-left: 40px;
+}
+ul.llms-payment-gateways .llms-gateway-fields {
+ display: none;
+ margin: 5px 0 20px;
+}
+ul.llms-payment-gateways .llms-payment-gateway-error {
+ padding: 0 10px;
+}
+
+.llms-checkout-confirm {
+ margin: 0;
+}
+
+.llms-payment-method {
+ margin: 10px 10px 0;
+}
+
+.llms-gateway-description p {
+ font-size: 14px;
+ font-style: italic;
+ margin: 0;
+}
+
+.llms-form-fields {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-form-fields * {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.llms-form-fields.flush .llms-form-field {
+ padding: 0 0 20px;
+}
+.llms-form-fields label:not(.llms-field-html label) {
+ font-weight: 700;
+}
+.llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {
+ margin-bottom: 0;
+}
+
+.llms-form-heading {
+ padding: 0 10px 10px;
+}
+
+.llms-form-field {
+ float: left;
+ padding: 0 10px 20px;
+ position: relative;
+ width: 100%;
+}
+.llms-form-field label:empty:after {
+ content: " ";
+}
+.llms-form-field [type=text],
+.llms-form-field [type=password],
+.llms-form-field [type=email],
+.llms-form-field [type=url],
+.llms-form-field [type=tel],
+.llms-form-field [type=number] {
+ background-color: #fefefe;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 16px;
+ line-height: 1;
+ padding: 8px 12px;
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ width: 100%;
+}
+.llms-form-field input:focus,
+.llms-form-field input:focus-visible {
+ border-color: #6888df;
+ outline: thin solid;
+}
+.llms-form-field select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ appearance: none;
+ background-color: #fefefe;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ color: #010101;
+ padding: 8px 12px;
+ margin: 0;
+ width: 100%;
+ font-family: inherit;
+ font-size: 16px;
+ cursor: inherit;
+ line-height: 1.6;
+ z-index: 1;
+ outline: none;
+ background-repeat: no-repeat;
+ background-image: linear-gradient(45deg, transparent 50%, currentcolor 50%), linear-gradient(135deg, currentcolor 50%, transparent 50%);
+ background-position: right 15px top 1.3rem, right 10px top 1.3rem;
+ background-size: 5px 5px, 5px 5px;
+}
+.llms-form-field select::-ms-expand {
+ display: none;
+}
+.llms-form-field select:focus {
+ border: 1px solid #6888df;
+ outline: thin solid;
+}
+.llms-form-field.valid input[type=date], .llms-form-field.valid input[type=time], .llms-form-field.valid input[type=datetime-local], .llms-form-field.valid input[type=week], .llms-form-field.valid input[type=month], .llms-form-field.valid input[type=text], .llms-form-field.valid input[type=email], .llms-form-field.valid input[type=url], .llms-form-field.valid input[type=password], .llms-form-field.valid input[type=search], .llms-form-field.valid input[type=tel], .llms-form-field.valid input[type=number], .llms-form-field.valid textarea, .llms-form-field.valid select {
+ background: rgba(131, 195, 115, 0.3);
+ border-color: #83c373;
+}
+.llms-form-field.error input[type=date], .llms-form-field.error input[type=time], .llms-form-field.error input[type=datetime-local], .llms-form-field.error input[type=week], .llms-form-field.error input[type=month], .llms-form-field.error input[type=text], .llms-form-field.error input[type=email], .llms-form-field.error input[type=url], .llms-form-field.error input[type=password], .llms-form-field.error input[type=search], .llms-form-field.error input[type=tel], .llms-form-field.error input[type=number], .llms-form-field.error textarea, .llms-form-field.error select, .llms-form-field.invalid input[type=date], .llms-form-field.invalid input[type=time], .llms-form-field.invalid input[type=datetime-local], .llms-form-field.invalid input[type=week], .llms-form-field.invalid input[type=month], .llms-form-field.invalid input[type=text], .llms-form-field.invalid input[type=email], .llms-form-field.invalid input[type=url], .llms-form-field.invalid input[type=password], .llms-form-field.invalid input[type=search], .llms-form-field.invalid input[type=tel], .llms-form-field.invalid input[type=number], .llms-form-field.invalid textarea, .llms-form-field.invalid select {
+ background: rgba(187, 35, 28, 0.3);
+ border-color: #bb231c;
+}
+.llms-form-field.llms-visually-hidden-field {
+ display: none;
+}
+.llms-form-field.align-right {
+ text-align: right;
+}
+@media screen and (min-width: 600px) {
+ .llms-form-field.llms-cols-1 {
+ width: 8.3333333333%;
+ }
+ .llms-form-field.llms-cols-2 {
+ width: 16.6666666667%;
+ }
+ .llms-form-field.llms-cols-3 {
+ width: 25%;
+ }
+ .llms-form-field.llms-cols-4 {
+ width: 33.3333333333%;
+ }
+ .llms-form-field.llms-cols-5 {
+ width: 41.6666666667%;
+ }
+ .llms-form-field.llms-cols-6 {
+ width: 50%;
+ }
+ .llms-form-field.llms-cols-7 {
+ width: 58.3333333333%;
+ }
+ .llms-form-field.llms-cols-8 {
+ width: 66.6666666667%;
+ }
+ .llms-form-field.llms-cols-9 {
+ width: 75%;
+ }
+ .llms-form-field.llms-cols-10 {
+ width: 83.3333333333%;
+ }
+ .llms-form-field.llms-cols-11 {
+ width: 91.6666666667%;
+ }
+ .llms-form-field.llms-cols-12 {
+ width: 100%;
+ }
+}
+.llms-form-field.type-hidden {
+ padding: 0;
+}
+.llms-form-field.type-radio input,
+.llms-form-field.type-radio label, .llms-form-field.type-checkbox input,
+.llms-form-field.type-checkbox label {
+ display: inline-block;
+ width: auto;
+}
+.llms-form-field.type-radio input, .llms-form-field.type-checkbox input {
+ margin-right: 10px;
+}
+.llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {
+ display: block;
+}
+.llms-form-field.type-radio:not(.is-group) input[type=radio] {
+ position: absolute;
+ opacity: 0;
+ visibility: none;
+}
+.llms-form-field.type-radio:not(.is-group) label:before {
+ background: #fafafa;
+ background-position: -24px 0;
+ background-repeat: no-repeat;
+ border-radius: 50%;
+ -webkit-box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;
+ box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;
+ content: "";
+ cursor: pointer;
+ display: inline-block;
+ height: 22px;
+ margin-right: 5px;
+ position: relative;
+ -webkit-transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);
+ top: -3px;
+ vertical-align: middle;
+ width: 22px;
+ z-index: 2;
+}
+.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked + label:before {
+ -webkit-transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);
+ background-position: 0 0;
+ background-image: radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%);
+}
+.llms-form-field .llms-input-group {
+ margin-top: 5px;
+}
+.llms-form-field .llms-input-group .llms-form-field {
+ padding: 0 0 5px 5px;
+}
+.llms-form-field.type-reset button:not(.auto), .llms-form-field.type-button button:not(.auto), .llms-form-field.type-submit button:not(.auto) {
+ width: 100%;
+}
+.llms-form-field .llms-description {
+ font-size: 14px;
+ font-style: italic;
+ line-height: 18px;
+}
+.llms-form-field .llms-required {
+ color: #bb231c;
+ margin-left: 4px;
+}
+.llms-form-field input, .llms-form-field textarea, .llms-form-field select {
+ width: 100%;
+ margin-bottom: 5px;
+}
+.llms-form-field .select2-container .select2-selection--single {
+ height: auto;
+ padding: 4px 6px;
+}
+.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {
+ height: 100%;
+}
+
+.llms-password-strength-meter {
+ border: 1px solid #dadada;
+ display: none;
+ font-size: 10px;
+ margin-top: -10px;
+ padding: 1px;
+ position: relative;
+ text-align: center;
+}
+.llms-password-strength-meter:before {
+ bottom: 0;
+ content: "";
+ left: 0;
+ position: absolute;
+ top: 0;
+ -webkit-transition: width 0.4s ease;
+ transition: width 0.4s ease;
+}
+.llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {
+ border-color: #e35b5b;
+}
+.llms-password-strength-meter.mismatch:before, .llms-password-strength-meter.too-short:before, .llms-password-strength-meter.very-weak:before {
+ background: rgba(227, 91, 91, 0.25);
+ width: 25%;
+}
+.llms-password-strength-meter.too-short:before {
+ width: 0;
+}
+.llms-password-strength-meter.weak {
+ border-color: #f78b53;
+}
+.llms-password-strength-meter.weak:before {
+ background: rgba(247, 139, 83, 0.25);
+ width: 50%;
+}
+.llms-password-strength-meter.medium {
+ border-color: #ffc733;
+}
+.llms-password-strength-meter.medium:before {
+ background: rgba(255, 199, 51, 0.25);
+ width: 75%;
+}
+.llms-password-strength-meter.strong {
+ border-color: #83c373;
+}
+.llms-password-strength-meter.strong:before {
+ background: rgba(131, 195, 115, 0.25);
+ width: 100%;
+}
+.llms-password-strength-meter + .llms-description {
+ display: block;
+}
+
+.llms-widget-syllabus--collapsible .llms-section .section-header {
+ cursor: pointer;
+}
+.llms-widget-syllabus--collapsible .llms-section.llms-section--opened .llms-collapse-caret .fa-caret-right {
+ display: none;
+}
+.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-collapse-caret .fa-caret-down {
+ display: none;
+}
+.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-lesson {
+ display: none;
+}
+.llms-widget-syllabus--collapsible .llms-syllabus-footer {
+ text-align: left;
+}
+
+.llms-student-dashboard {
+ /**
+ * Dashboard Home
+ */
+}
+.llms-student-dashboard .llms-sd-title {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ gap: 15px;
+ margin: 40px 0 20px 0;
+}
+.llms-student-dashboard .llms-sd-title small {
+ font-size: 18px;
+}
+.llms-student-dashboard .llms-sd-title small + a {
+ text-decoration: none;
+}
+.llms-student-dashboard .llms-sd-items {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+.llms-student-dashboard .llms-sd-item {
+ display: inline-block;
+ list-style-type: none;
+ margin: 5px 0;
+ padding: 0;
+}
+.llms-student-dashboard .llms-sd-item:last-child .llms-sep {
+ display: none;
+}
+.llms-student-dashboard .llms-sd-item .llms-sep {
+ color: #666;
+ margin: 0 5px;
+}
+.llms-student-dashboard .llms-sd-section h2 {
+ margin: 0 0 15px 0;
+}
+.llms-student-dashboard .llms-sd-section .llms-sd-section-title {
+ margin: 0;
+ padding: 0;
+}
+.llms-student-dashboard .llms-sd-section .llms-sd-section-footer {
+ margin-top: 10px;
+}
+.llms-student-dashboard .llms-sd-section .llms-sd-section-footer .llms-button-secondary {
+ display: inline-block;
+}
+.llms-student-dashboard .orders-table {
+ border: 1px solid #dedede;
+ border-spacing: 0;
+ width: 100%;
+}
+.llms-student-dashboard .orders-table thead {
+ display: none;
+}
+.llms-student-dashboard .orders-table thead th, .llms-student-dashboard .orders-table thead td {
+ font-weight: 700;
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .orders-table thead {
+ display: table-header-group;
+ }
+}
+.llms-student-dashboard .orders-table tbody tr:nth-child(odd) td, .llms-student-dashboard .orders-table tbody tr:nth-child(odd) th {
+ background: #f9f9f9;
+}
+.llms-student-dashboard .orders-table tbody tr:last-child {
+ border-bottom-width: 0;
+}
+.llms-student-dashboard .orders-table tfoot tr {
+ background: #f9f9f9;
+}
+.llms-student-dashboard .orders-table tfoot th, .llms-student-dashboard .orders-table tfoot td {
+ padding: 10px;
+ text-align: right;
+}
+.llms-student-dashboard .orders-table tfoot th:last-child, .llms-student-dashboard .orders-table tfoot td:last-child {
+ border-bottom-width: 0;
+}
+.llms-student-dashboard .orders-table th {
+ font-weight: 700;
+}
+.llms-student-dashboard .orders-table th, .llms-student-dashboard .orders-table td {
+ border-color: #dedede;
+ border-style: solid;
+ border-width: 0;
+ display: block;
+ padding: 15px 20px;
+ text-align: center;
+}
+.llms-student-dashboard .orders-table th .llms-button-primary, .llms-student-dashboard .orders-table td .llms-button-primary {
+ display: inline-block;
+}
+.llms-student-dashboard .orders-table th:last-child, .llms-student-dashboard .orders-table td:last-child {
+ border-bottom-width: 1px;
+}
+.llms-student-dashboard .orders-table th:before, .llms-student-dashboard .orders-table td:before {
+ content: attr(data-label);
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .orders-table th, .llms-student-dashboard .orders-table td {
+ border-bottom-width: 1px;
+ display: table-cell;
+ text-align: left;
+ }
+ .llms-student-dashboard .orders-table th:first-child, .llms-student-dashboard .orders-table td:first-child {
+ width: 220px;
+ }
+ .llms-student-dashboard .orders-table th:before, .llms-student-dashboard .orders-table td:before {
+ display: none;
+ }
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .orders-table.transactions th:first-child {
+ width: auto;
+ }
+}
+.llms-student-dashboard .llms-status {
+ border-radius: 6px;
+ display: inline-block;
+ font-size: 13px;
+ font-weight: 700;
+ line-height: 1.4;
+ padding: 2px 6px;
+ vertical-align: middle;
+}
+.llms-student-dashboard .llms-status.llms-size--large {
+ font-size: 105%;
+ padding: 6px 12px;
+}
+.llms-student-dashboard .llms-status.llms-active, .llms-student-dashboard .llms-status.llms-completed, .llms-student-dashboard .llms-status.llms-pass, .llms-student-dashboard .llms-status.llms-txn-succeeded {
+ color: #4d8d3c;
+ background-color: rgba(77, 141, 60, 0.15);
+}
+.llms-student-dashboard .llms-status.llms-fail, .llms-student-dashboard .llms-status.llms-failed, .llms-student-dashboard .llms-status.llms-expired, .llms-student-dashboard .llms-status.llms-cancelled, .llms-student-dashboard .llms-status.llms-txn-failed {
+ color: #bb231c;
+ background-color: rgba(187, 35, 28, 0.15);
+}
+.llms-student-dashboard .llms-status.llms-incomplete, .llms-student-dashboard .llms-status.llms-on-hold, .llms-student-dashboard .llms-status.llms-pending, .llms-student-dashboard .llms-status.llms-pending-cancel, .llms-student-dashboard .llms-status.llms-refunded, .llms-student-dashboard .llms-status.llms-txn-pending, .llms-student-dashboard .llms-status.llms-txn-refunded {
+ color: #c05621;
+ background-color: rgba(192, 86, 33, 0.15);
+}
+.llms-student-dashboard .order-title .llms-status {
+ font-size: 18px;
+}
+.llms-student-dashboard .llms-person-form-wrapper .llms-change-password {
+ display: none;
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .order-primary {
+ float: left;
+ width: 68%;
+ }
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .order-secondary {
+ float: left;
+ width: 32%;
+ }
+}
+.llms-student-dashboard .order-secondary form {
+ margin-bottom: 0;
+}
+@media all and (min-width: 600px) {
+ .llms-student-dashboard .llms-view-order.llms-stack-cols .order-primary,
+.llms-student-dashboard .llms-view-order.llms-stack-cols .order-secondary {
+ float: none;
+ width: 100%;
+ }
+}
+.llms-student-dashboard .llms-switch-payment-source .llms-notice,
+.llms-student-dashboard .llms-switch-payment-source .entry-content .llms-notice {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+.llms-student-dashboard .llms-switch-payment-source-main {
+ border: none;
+ display: none;
+ margin: 0;
+}
+.llms-student-dashboard .llms-switch-payment-source-main ul.llms-payment-gateways {
+ padding: 10px 15px 0;
+ margin: 0;
+}
+.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method,
+.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary {
+ padding: 0 25px 10px;
+ margin: 0;
+ list-style-type: none;
+}
+.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method li,
+.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary li {
+ list-style-type: none;
+}
+.llms-student-dashboard.dashboard .llms-sd-section {
+ border: 1px solid #dedede;
+ border-radius: 6px;
+ padding: 20px;
+ margin-bottom: 40px;
+}
+.llms-student-dashboard .llms-loop-list {
+ margin: 0 -10px;
+}
+
+.llms-sd-grades .llms-table .llms-progress {
+ display: block;
+ margin: 0;
+}
+.llms-sd-grades .llms-table .llms-progress .llms-progress-bar {
+ top: 0;
+ height: 1.4em;
+}
+.llms-sd-grades .llms-table .llms-progress .progress__indicator {
+ font-size: 1em;
+ position: relative;
+ right: 0.4em;
+ top: 0.2em;
+ z-index: 1;
+}
+
+.llms-table.llms-single-course-grades tbody tr:first-child td, .llms-table.llms-single-course-grades tbody tr:first-child th {
+ background-color: #eaeaea;
+}
+.llms-table.llms-single-course-grades th {
+ font-weight: 400;
+ text-align: left;
+}
+.llms-table.llms-single-course-grades td .llms-donut {
+ display: inline-block;
+ vertical-align: middle;
+}
+.llms-table.llms-single-course-grades td .llms-status {
+ margin-right: 4px;
+}
+.llms-table.llms-single-course-grades td .llms-donut + .llms-status {
+ margin-left: 4px;
+}
+.llms-table.llms-single-course-grades th.llms-section_title {
+ font-size: 110%;
+ font-weight: 700;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title {
+ max-width: 40%;
+}
+.llms-table.llms-single-course-grades td.llms-associated_quiz .llms-donut {
+ display: inline-block;
+ margin-right: 5px;
+ vertical-align: middle;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title a[href="#"] {
+ pointer-events: none;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] {
+ color: inherit;
+ position: relative;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] .llms-tooltip {
+ max-width: 380px;
+ width: 380px;
+}
+.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] .llms-tooltip.show {
+ top: -54px;
+}
+
+.llms-sd-widgets {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+}
+.llms-sd-widgets .llms-sd-widget {
+ background: #fefefe;
+ border: 1px solid #dedede;
+ border-bottom-right-radius: 6px;
+ border-bottom-left-radius: 6px;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ margin: 10px 10px 20px;
+ padding: 0 0 20px;
+}
+.llms-sd-widgets .llms-sd-widget:first-child {
+ margin-left: 0;
+}
+.llms-sd-widgets .llms-sd-widget:last-child {
+ margin-right: 0;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-widget-title {
+ background: #466dd8;
+ color: #fff;
+ font-size: 18px;
+ line-height: 1;
+ margin: 0 0 20px;
+ padding: 10px;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-widget-empty {
+ font-size: 14px;
+ font-style: italic;
+ opacity: 0.5;
+ text-align: center;
+}
+.llms-sd-widgets .llms-sd-widget .llms-donut {
+ margin: 0 auto;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-date {
+ opacity: 0.8;
+ text-align: center;
+ font-size: 22px;
+ line-height: 1.1;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-date span {
+ display: block;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-date span.day {
+ font-size: 52px;
+}
+.llms-sd-widgets .llms-sd-widget .llms-sd-date span.diff {
+ font-size: 12px;
+ font-style: italic;
+ margin-top: 8px;
+ opacity: 0.75;
+}
+.llms-sd-widgets .llms-sd-widget .llms-achievement {
+ background: transparent;
+ margin: 0 auto;
+ max-width: 120px;
+}
+.llms-sd-widgets .llms-sd-widget .llms-achievement .llms-achievement-title {
+ display: none;
+}
+
+.redeem-voucher .form-row label {
+ display: block;
+ font-weight: 700;
+}
+.redeem-voucher .form-row input[type=text] {
+ background-color: #fefefe;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border-radius: 6px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 16px;
+ line-height: 1;
+ padding: 8px 12px;
+ -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
+}
+
+.llms-sd-pagination {
+ margin-top: 24px;
+}
+.llms-sd-pagination:before, .llms-sd-pagination:after {
+ content: " ";
+ display: table;
+}
+.llms-sd-pagination:after {
+ clear: both;
+}
+.llms-sd-pagination .llms-button-secondary {
+ display: inline-block;
+}
+.llms-sd-pagination .llms-button-secondary.prev {
+ float: left;
+}
+.llms-sd-pagination .llms-button-secondary.next {
+ float: right;
+}
+
+.llms-sd-notification-center {
+ background: #fefefe;
+ border: 1px solid #dedede;
+ border-radius: 6px;
+ padding: 20px;
+}
+.llms-sd-notification-center .llms-notification-list-item .llms-notification {
+ z-index: 1;
+}
+.llms-sd-notification-center .llms-notification-list-item .llms-notification:hover {
+ background-color: inherit;
+}
+
+.llms-table {
+ border: 1px solid #dedede;
+ border-spacing: 0;
+ width: 100%;
+}
+.llms-table thead th, .llms-table thead td {
+ font-weight: 700;
+}
+.llms-table tbody tr:nth-child(odd) td, .llms-table tbody tr:nth-child(odd) th {
+ background: #f9f9f9;
+}
+.llms-table tbody tr:last-child {
+ border-bottom-width: 0;
+}
+.llms-table tfoot tr {
+ background: #f9f9f9;
+}
+.llms-table tfoot tr .llms-pagination .page-numbers {
+ margin: 0;
+}
+.llms-table tfoot tr .llms-table-sort {
+ text-align: right;
+}
+.llms-table tfoot tr .llms-table-sort form, .llms-table tfoot tr .llms-table-sort select, .llms-table tfoot tr .llms-table-sort input, .llms-table tfoot tr .llms-table-sort button {
+ margin: 0;
+}
+.llms-table th {
+ font-weight: 700;
+}
+.llms-table th, .llms-table td {
+ border-bottom: 1px solid #dedede;
+ padding: 15px 20px;
+}
+.llms-table th:first-child, .llms-table td:first-child {
+ padding-left: 12px;
+}
+.llms-table th:last-child, .llms-table td:last-child {
+ padding-right: 12px;
+}
+
+#page .llms-table tfoot label {
+ display: inline;
+}
+
+#page .llms-table tfoot select {
+ height: auto;
+}
+
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: "FontAwesome";
+ src: url("../fonts/fontawesome-webfont.eot?v=4.7.0");
+ src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+
+.fa-2x {
+ font-size: 2em;
+}
+
+.fa-3x {
+ font-size: 3em;
+}
+
+.fa-4x {
+ font-size: 4em;
+}
+
+.fa-5x {
+ font-size: 5em;
+}
+
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+
+.fa-ul > li {
+ position: relative;
+}
+
+.fa-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+
+.fa-li.fa-lg {
+ left: -1.85714286em;
+}
+
+.fa-border {
+ padding: 0.2em 0.25em 0.15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: 0.1em;
+}
+
+.fa-pull-left {
+ float: left;
+}
+
+.fa-pull-right {
+ float: right;
+}
+
+.fa.fa-pull-left {
+ margin-right: 0.3em;
+}
+
+.fa.fa-pull-right {
+ margin-left: 0.3em;
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right {
+ float: right;
+}
+
+.pull-left {
+ float: left;
+}
+
+.fa.pull-left {
+ margin-right: 0.3em;
+}
+
+.fa.pull-right {
+ margin-left: 0.3em;
+}
+
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+.fa-rotate-90 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+.fa-rotate-180 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+ -webkit-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.fa-rotate-270 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+ -webkit-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+
+.fa-flip-horizontal {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+ -webkit-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+
+.fa-flip-vertical {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+ -webkit-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ -webkit-filter: none;
+ filter: none;
+}
+
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+
+.fa-stack-1x,
+.fa-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+
+.fa-stack-1x {
+ line-height: inherit;
+}
+
+.fa-stack-2x {
+ font-size: 2em;
+}
+
+.fa-inverse {
+ color: #ffffff;
+}
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "\f000";
+}
+
+.fa-music:before {
+ content: "\f001";
+}
+
+.fa-search:before {
+ content: "\f002";
+}
+
+.fa-envelope-o:before {
+ content: "\f003";
+}
+
+.fa-heart:before {
+ content: "\f004";
+}
+
+.fa-star:before {
+ content: "\f005";
+}
+
+.fa-star-o:before {
+ content: "\f006";
+}
+
+.fa-user:before {
+ content: "\f007";
+}
+
+.fa-film:before {
+ content: "\f008";
+}
+
+.fa-th-large:before {
+ content: "\f009";
+}
+
+.fa-th:before {
+ content: "\f00a";
+}
+
+.fa-th-list:before {
+ content: "\f00b";
+}
+
+.fa-check:before {
+ content: "\f00c";
+}
+
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "\f00d";
+}
+
+.fa-search-plus:before {
+ content: "\f00e";
+}
+
+.fa-search-minus:before {
+ content: "\f010";
+}
+
+.fa-power-off:before {
+ content: "\f011";
+}
+
+.fa-signal:before {
+ content: "\f012";
+}
+
+.fa-gear:before,
+.fa-cog:before {
+ content: "\f013";
+}
+
+.fa-trash-o:before {
+ content: "\f014";
+}
+
+.fa-home:before {
+ content: "\f015";
+}
+
+.fa-file-o:before {
+ content: "\f016";
+}
+
+.fa-clock-o:before {
+ content: "\f017";
+}
+
+.fa-road:before {
+ content: "\f018";
+}
+
+.fa-download:before {
+ content: "\f019";
+}
+
+.fa-arrow-circle-o-down:before {
+ content: "\f01a";
+}
+
+.fa-arrow-circle-o-up:before {
+ content: "\f01b";
+}
+
+.fa-inbox:before {
+ content: "\f01c";
+}
+
+.fa-play-circle-o:before {
+ content: "\f01d";
+}
+
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "\f01e";
+}
+
+.fa-refresh:before {
+ content: "\f021";
+}
+
+.fa-list-alt:before {
+ content: "\f022";
+}
+
+.fa-lock:before {
+ content: "\f023";
+}
+
+.fa-flag:before {
+ content: "\f024";
+}
+
+.fa-headphones:before {
+ content: "\f025";
+}
+
+.fa-volume-off:before {
+ content: "\f026";
+}
+
+.fa-volume-down:before {
+ content: "\f027";
+}
+
+.fa-volume-up:before {
+ content: "\f028";
+}
+
+.fa-qrcode:before {
+ content: "\f029";
+}
+
+.fa-barcode:before {
+ content: "\f02a";
+}
+
+.fa-tag:before {
+ content: "\f02b";
+}
+
+.fa-tags:before {
+ content: "\f02c";
+}
+
+.fa-book:before {
+ content: "\f02d";
+}
+
+.fa-bookmark:before {
+ content: "\f02e";
+}
+
+.fa-print:before {
+ content: "\f02f";
+}
+
+.fa-camera:before {
+ content: "\f030";
+}
+
+.fa-font:before {
+ content: "\f031";
+}
+
+.fa-bold:before {
+ content: "\f032";
+}
+
+.fa-italic:before {
+ content: "\f033";
+}
+
+.fa-text-height:before {
+ content: "\f034";
+}
+
+.fa-text-width:before {
+ content: "\f035";
+}
+
+.fa-align-left:before {
+ content: "\f036";
+}
+
+.fa-align-center:before {
+ content: "\f037";
+}
+
+.fa-align-right:before {
+ content: "\f038";
+}
+
+.fa-align-justify:before {
+ content: "\f039";
+}
+
+.fa-list:before {
+ content: "\f03a";
+}
+
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "\f03b";
+}
+
+.fa-indent:before {
+ content: "\f03c";
+}
+
+.fa-video-camera:before {
+ content: "\f03d";
+}
+
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "\f03e";
+}
+
+.fa-pencil:before {
+ content: "\f040";
+}
+
+.fa-map-marker:before {
+ content: "\f041";
+}
+
+.fa-adjust:before {
+ content: "\f042";
+}
+
+.fa-tint:before {
+ content: "\f043";
+}
+
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "\f044";
+}
+
+.fa-share-square-o:before {
+ content: "\f045";
+}
+
+.fa-check-square-o:before {
+ content: "\f046";
+}
+
+.fa-arrows:before {
+ content: "\f047";
+}
+
+.fa-step-backward:before {
+ content: "\f048";
+}
+
+.fa-fast-backward:before {
+ content: "\f049";
+}
+
+.fa-backward:before {
+ content: "\f04a";
+}
+
+.fa-play:before {
+ content: "\f04b";
+}
+
+.fa-pause:before {
+ content: "\f04c";
+}
+
+.fa-stop:before {
+ content: "\f04d";
+}
+
+.fa-forward:before {
+ content: "\f04e";
+}
+
+.fa-fast-forward:before {
+ content: "\f050";
+}
+
+.fa-step-forward:before {
+ content: "\f051";
+}
+
+.fa-eject:before {
+ content: "\f052";
+}
+
+.fa-chevron-left:before {
+ content: "\f053";
+}
+
+.fa-chevron-right:before {
+ content: "\f054";
+}
+
+.fa-plus-circle:before {
+ content: "\f055";
+}
+
+.fa-minus-circle:before {
+ content: "\f056";
+}
+
+.fa-times-circle:before {
+ content: "\f057";
+}
+
+.fa-check-circle:before {
+ content: "\f058";
+}
+
+.fa-question-circle:before {
+ content: "\f059";
+}
+
+.fa-info-circle:before {
+ content: "\f05a";
+}
+
+.fa-crosshairs:before {
+ content: "\f05b";
+}
+
+.fa-times-circle-o:before {
+ content: "\f05c";
+}
+
+.fa-check-circle-o:before {
+ content: "\f05d";
+}
+
+.fa-ban:before {
+ content: "\f05e";
+}
+
+.fa-arrow-left:before {
+ content: "\f060";
+}
+
+.fa-arrow-right:before {
+ content: "\f061";
+}
+
+.fa-arrow-up:before {
+ content: "\f062";
+}
+
+.fa-arrow-down:before {
+ content: "\f063";
+}
+
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "\f064";
+}
+
+.fa-expand:before {
+ content: "\f065";
+}
+
+.fa-compress:before {
+ content: "\f066";
+}
+
+.fa-plus:before {
+ content: "\f067";
+}
+
+.fa-minus:before {
+ content: "\f068";
+}
+
+.fa-asterisk:before {
+ content: "\f069";
+}
+
+.fa-exclamation-circle:before {
+ content: "\f06a";
+}
+
+.fa-gift:before {
+ content: "\f06b";
+}
+
+.fa-leaf:before {
+ content: "\f06c";
+}
+
+.fa-fire:before {
+ content: "\f06d";
+}
+
+.fa-eye:before {
+ content: "\f06e";
+}
+
+.fa-eye-slash:before {
+ content: "\f070";
+}
+
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "\f071";
+}
+
+.fa-plane:before {
+ content: "\f072";
+}
+
+.fa-calendar:before {
+ content: "\f073";
+}
+
+.fa-random:before {
+ content: "\f074";
+}
+
+.fa-comment:before {
+ content: "\f075";
+}
+
+.fa-magnet:before {
+ content: "\f076";
+}
+
+.fa-chevron-up:before {
+ content: "\f077";
+}
+
+.fa-chevron-down:before {
+ content: "\f078";
+}
+
+.fa-retweet:before {
+ content: "\f079";
+}
+
+.fa-shopping-cart:before {
+ content: "\f07a";
+}
+
+.fa-folder:before {
+ content: "\f07b";
+}
+
+.fa-folder-open:before {
+ content: "\f07c";
+}
+
+.fa-arrows-v:before {
+ content: "\f07d";
+}
+
+.fa-arrows-h:before {
+ content: "\f07e";
+}
+
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "\f080";
+}
+
+.fa-twitter-square:before {
+ content: "\f081";
+}
+
+.fa-facebook-square:before {
+ content: "\f082";
+}
+
+.fa-camera-retro:before {
+ content: "\f083";
+}
+
+.fa-key:before {
+ content: "\f084";
+}
+
+.fa-gears:before,
+.fa-cogs:before {
+ content: "\f085";
+}
+
+.fa-comments:before {
+ content: "\f086";
+}
+
+.fa-thumbs-o-up:before {
+ content: "\f087";
+}
+
+.fa-thumbs-o-down:before {
+ content: "\f088";
+}
+
+.fa-star-half:before {
+ content: "\f089";
+}
+
+.fa-heart-o:before {
+ content: "\f08a";
+}
+
+.fa-sign-out:before {
+ content: "\f08b";
+}
+
+.fa-linkedin-square:before {
+ content: "\f08c";
+}
+
+.fa-thumb-tack:before {
+ content: "\f08d";
+}
+
+.fa-external-link:before {
+ content: "\f08e";
+}
+
+.fa-sign-in:before {
+ content: "\f090";
+}
+
+.fa-trophy:before {
+ content: "\f091";
+}
+
+.fa-github-square:before {
+ content: "\f092";
+}
+
+.fa-upload:before {
+ content: "\f093";
+}
+
+.fa-lemon-o:before {
+ content: "\f094";
+}
+
+.fa-phone:before {
+ content: "\f095";
+}
+
+.fa-square-o:before {
+ content: "\f096";
+}
+
+.fa-bookmark-o:before {
+ content: "\f097";
+}
+
+.fa-phone-square:before {
+ content: "\f098";
+}
+
+.fa-twitter:before {
+ content: "\f099";
+}
+
+.fa-facebook-f:before,
+.fa-facebook:before {
+ content: "\f09a";
+}
+
+.fa-github:before {
+ content: "\f09b";
+}
+
+.fa-unlock:before {
+ content: "\f09c";
+}
+
+.fa-credit-card:before {
+ content: "\f09d";
+}
+
+.fa-feed:before,
+.fa-rss:before {
+ content: "\f09e";
+}
+
+.fa-hdd-o:before {
+ content: "\f0a0";
+}
+
+.fa-bullhorn:before {
+ content: "\f0a1";
+}
+
+.fa-bell:before {
+ content: "\f0f3";
+}
+
+.fa-certificate:before {
+ content: "\f0a3";
+}
+
+.fa-hand-o-right:before {
+ content: "\f0a4";
+}
+
+.fa-hand-o-left:before {
+ content: "\f0a5";
+}
+
+.fa-hand-o-up:before {
+ content: "\f0a6";
+}
+
+.fa-hand-o-down:before {
+ content: "\f0a7";
+}
+
+.fa-arrow-circle-left:before {
+ content: "\f0a8";
+}
+
+.fa-arrow-circle-right:before {
+ content: "\f0a9";
+}
+
+.fa-arrow-circle-up:before {
+ content: "\f0aa";
+}
+
+.fa-arrow-circle-down:before {
+ content: "\f0ab";
+}
+
+.fa-globe:before {
+ content: "\f0ac";
+}
+
+.fa-wrench:before {
+ content: "\f0ad";
+}
+
+.fa-tasks:before {
+ content: "\f0ae";
+}
+
+.fa-filter:before {
+ content: "\f0b0";
+}
+
+.fa-briefcase:before {
+ content: "\f0b1";
+}
+
+.fa-arrows-alt:before {
+ content: "\f0b2";
+}
+
+.fa-group:before,
+.fa-users:before {
+ content: "\f0c0";
+}
+
+.fa-chain:before,
+.fa-link:before {
+ content: "\f0c1";
+}
+
+.fa-cloud:before {
+ content: "\f0c2";
+}
+
+.fa-flask:before {
+ content: "\f0c3";
+}
+
+.fa-cut:before,
+.fa-scissors:before {
+ content: "\f0c4";
+}
+
+.fa-copy:before,
+.fa-files-o:before {
+ content: "\f0c5";
+}
+
+.fa-paperclip:before {
+ content: "\f0c6";
+}
+
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "\f0c7";
+}
+
+.fa-square:before {
+ content: "\f0c8";
+}
+
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "\f0c9";
+}
+
+.fa-list-ul:before {
+ content: "\f0ca";
+}
+
+.fa-list-ol:before {
+ content: "\f0cb";
+}
+
+.fa-strikethrough:before {
+ content: "\f0cc";
+}
+
+.fa-underline:before {
+ content: "\f0cd";
+}
+
+.fa-table:before {
+ content: "\f0ce";
+}
+
+.fa-magic:before {
+ content: "\f0d0";
+}
+
+.fa-truck:before {
+ content: "\f0d1";
+}
+
+.fa-pinterest:before {
+ content: "\f0d2";
+}
+
+.fa-pinterest-square:before {
+ content: "\f0d3";
+}
+
+.fa-google-plus-square:before {
+ content: "\f0d4";
+}
+
+.fa-google-plus:before {
+ content: "\f0d5";
+}
+
+.fa-money:before {
+ content: "\f0d6";
+}
+
+.fa-caret-down:before {
+ content: "\f0d7";
+}
+
+.fa-caret-up:before {
+ content: "\f0d8";
+}
+
+.fa-caret-left:before {
+ content: "\f0d9";
+}
+
+.fa-caret-right:before {
+ content: "\f0da";
+}
+
+.fa-columns:before {
+ content: "\f0db";
+}
+
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "\f0dc";
+}
+
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "\f0dd";
+}
+
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "\f0de";
+}
+
+.fa-envelope:before {
+ content: "\f0e0";
+}
+
+.fa-linkedin:before {
+ content: "\f0e1";
+}
+
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "\f0e2";
+}
+
+.fa-legal:before,
+.fa-gavel:before {
+ content: "\f0e3";
+}
+
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "\f0e4";
+}
+
+.fa-comment-o:before {
+ content: "\f0e5";
+}
+
+.fa-comments-o:before {
+ content: "\f0e6";
+}
+
+.fa-flash:before,
+.fa-bolt:before {
+ content: "\f0e7";
+}
+
+.fa-sitemap:before {
+ content: "\f0e8";
+}
+
+.fa-umbrella:before {
+ content: "\f0e9";
+}
+
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "\f0ea";
+}
+
+.fa-lightbulb-o:before {
+ content: "\f0eb";
+}
+
+.fa-exchange:before {
+ content: "\f0ec";
+}
+
+.fa-cloud-download:before {
+ content: "\f0ed";
+}
+
+.fa-cloud-upload:before {
+ content: "\f0ee";
+}
+
+.fa-user-md:before {
+ content: "\f0f0";
+}
+
+.fa-stethoscope:before {
+ content: "\f0f1";
+}
+
+.fa-suitcase:before {
+ content: "\f0f2";
+}
+
+.fa-bell-o:before {
+ content: "\f0a2";
+}
+
+.fa-coffee:before {
+ content: "\f0f4";
+}
+
+.fa-cutlery:before {
+ content: "\f0f5";
+}
+
+.fa-file-text-o:before {
+ content: "\f0f6";
+}
+
+.fa-building-o:before {
+ content: "\f0f7";
+}
+
+.fa-hospital-o:before {
+ content: "\f0f8";
+}
+
+.fa-ambulance:before {
+ content: "\f0f9";
+}
+
+.fa-medkit:before {
+ content: "\f0fa";
+}
+
+.fa-fighter-jet:before {
+ content: "\f0fb";
+}
+
+.fa-beer:before {
+ content: "\f0fc";
+}
+
+.fa-h-square:before {
+ content: "\f0fd";
+}
+
+.fa-plus-square:before {
+ content: "\f0fe";
+}
+
+.fa-angle-double-left:before {
+ content: "\f100";
+}
+
+.fa-angle-double-right:before {
+ content: "\f101";
+}
+
+.fa-angle-double-up:before {
+ content: "\f102";
+}
+
+.fa-angle-double-down:before {
+ content: "\f103";
+}
+
+.fa-angle-left:before {
+ content: "\f104";
+}
+
+.fa-angle-right:before {
+ content: "\f105";
+}
+
+.fa-angle-up:before {
+ content: "\f106";
+}
+
+.fa-angle-down:before {
+ content: "\f107";
+}
+
+.fa-desktop:before {
+ content: "\f108";
+}
+
+.fa-laptop:before {
+ content: "\f109";
+}
+
+.fa-tablet:before {
+ content: "\f10a";
+}
+
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "\f10b";
+}
+
+.fa-circle-o:before {
+ content: "\f10c";
+}
+
+.fa-quote-left:before {
+ content: "\f10d";
+}
+
+.fa-quote-right:before {
+ content: "\f10e";
+}
+
+.fa-spinner:before {
+ content: "\f110";
+}
+
+.fa-circle:before {
+ content: "\f111";
+}
+
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "\f112";
+}
+
+.fa-github-alt:before {
+ content: "\f113";
+}
+
+.fa-folder-o:before {
+ content: "\f114";
+}
+
+.fa-folder-open-o:before {
+ content: "\f115";
+}
+
+.fa-smile-o:before {
+ content: "\f118";
+}
+
+.fa-frown-o:before {
+ content: "\f119";
+}
+
+.fa-meh-o:before {
+ content: "\f11a";
+}
+
+.fa-gamepad:before {
+ content: "\f11b";
+}
+
+.fa-keyboard-o:before {
+ content: "\f11c";
+}
+
+.fa-flag-o:before {
+ content: "\f11d";
+}
+
+.fa-flag-checkered:before {
+ content: "\f11e";
+}
+
+.fa-terminal:before {
+ content: "\f120";
+}
+
+.fa-code:before {
+ content: "\f121";
+}
+
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "\f122";
+}
+
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "\f123";
+}
+
+.fa-location-arrow:before {
+ content: "\f124";
+}
+
+.fa-crop:before {
+ content: "\f125";
+}
+
+.fa-code-fork:before {
+ content: "\f126";
+}
+
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "\f127";
+}
+
+.fa-question:before {
+ content: "\f128";
+}
+
+.fa-info:before {
+ content: "\f129";
+}
+
+.fa-exclamation:before {
+ content: "\f12a";
+}
+
+.fa-superscript:before {
+ content: "\f12b";
+}
+
+.fa-subscript:before {
+ content: "\f12c";
+}
+
+.fa-eraser:before {
+ content: "\f12d";
+}
+
+.fa-puzzle-piece:before {
+ content: "\f12e";
+}
+
+.fa-microphone:before {
+ content: "\f130";
+}
+
+.fa-microphone-slash:before {
+ content: "\f131";
+}
+
+.fa-shield:before {
+ content: "\f132";
+}
+
+.fa-calendar-o:before {
+ content: "\f133";
+}
+
+.fa-fire-extinguisher:before {
+ content: "\f134";
+}
+
+.fa-rocket:before {
+ content: "\f135";
+}
+
+.fa-maxcdn:before {
+ content: "\f136";
+}
+
+.fa-chevron-circle-left:before {
+ content: "\f137";
+}
+
+.fa-chevron-circle-right:before {
+ content: "\f138";
+}
+
+.fa-chevron-circle-up:before {
+ content: "\f139";
+}
+
+.fa-chevron-circle-down:before {
+ content: "\f13a";
+}
+
+.fa-html5:before {
+ content: "\f13b";
+}
+
+.fa-css3:before {
+ content: "\f13c";
+}
+
+.fa-anchor:before {
+ content: "\f13d";
+}
+
+.fa-unlock-alt:before {
+ content: "\f13e";
+}
+
+.fa-bullseye:before {
+ content: "\f140";
+}
+
+.fa-ellipsis-h:before {
+ content: "\f141";
+}
+
+.fa-ellipsis-v:before {
+ content: "\f142";
+}
+
+.fa-rss-square:before {
+ content: "\f143";
+}
+
+.fa-play-circle:before {
+ content: "\f144";
+}
+
+.fa-ticket:before {
+ content: "\f145";
+}
+
+.fa-minus-square:before {
+ content: "\f146";
+}
+
+.fa-minus-square-o:before {
+ content: "\f147";
+}
+
+.fa-level-up:before {
+ content: "\f148";
+}
+
+.fa-level-down:before {
+ content: "\f149";
+}
+
+.fa-check-square:before {
+ content: "\f14a";
+}
+
+.fa-pencil-square:before {
+ content: "\f14b";
+}
+
+.fa-external-link-square:before {
+ content: "\f14c";
+}
+
+.fa-share-square:before {
+ content: "\f14d";
+}
+
+.fa-compass:before {
+ content: "\f14e";
+}
+
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "\f150";
+}
+
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "\f151";
+}
+
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "\f152";
+}
+
+.fa-euro:before,
+.fa-eur:before {
+ content: "\f153";
+}
+
+.fa-gbp:before {
+ content: "\f154";
+}
+
+.fa-dollar:before,
+.fa-usd:before {
+ content: "\f155";
+}
+
+.fa-rupee:before,
+.fa-inr:before {
+ content: "\f156";
+}
+
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "\f157";
+}
+
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "\f158";
+}
+
+.fa-won:before,
+.fa-krw:before {
+ content: "\f159";
+}
+
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "\f15a";
+}
+
+.fa-file:before {
+ content: "\f15b";
+}
+
+.fa-file-text:before {
+ content: "\f15c";
+}
+
+.fa-sort-alpha-asc:before {
+ content: "\f15d";
+}
+
+.fa-sort-alpha-desc:before {
+ content: "\f15e";
+}
+
+.fa-sort-amount-asc:before {
+ content: "\f160";
+}
+
+.fa-sort-amount-desc:before {
+ content: "\f161";
+}
+
+.fa-sort-numeric-asc:before {
+ content: "\f162";
+}
+
+.fa-sort-numeric-desc:before {
+ content: "\f163";
+}
+
+.fa-thumbs-up:before {
+ content: "\f164";
+}
+
+.fa-thumbs-down:before {
+ content: "\f165";
+}
+
+.fa-youtube-square:before {
+ content: "\f166";
+}
+
+.fa-youtube:before {
+ content: "\f167";
+}
+
+.fa-xing:before {
+ content: "\f168";
+}
+
+.fa-xing-square:before {
+ content: "\f169";
+}
+
+.fa-youtube-play:before {
+ content: "\f16a";
+}
+
+.fa-dropbox:before {
+ content: "\f16b";
+}
+
+.fa-stack-overflow:before {
+ content: "\f16c";
+}
+
+.fa-instagram:before {
+ content: "\f16d";
+}
+
+.fa-flickr:before {
+ content: "\f16e";
+}
+
+.fa-adn:before {
+ content: "\f170";
+}
+
+.fa-bitbucket:before {
+ content: "\f171";
+}
+
+.fa-bitbucket-square:before {
+ content: "\f172";
+}
+
+.fa-tumblr:before {
+ content: "\f173";
+}
+
+.fa-tumblr-square:before {
+ content: "\f174";
+}
+
+.fa-long-arrow-down:before {
+ content: "\f175";
+}
+
+.fa-long-arrow-up:before {
+ content: "\f176";
+}
+
+.fa-long-arrow-left:before {
+ content: "\f177";
+}
+
+.fa-long-arrow-right:before {
+ content: "\f178";
+}
+
+.fa-apple:before {
+ content: "\f179";
+}
+
+.fa-windows:before {
+ content: "\f17a";
+}
+
+.fa-android:before {
+ content: "\f17b";
+}
+
+.fa-linux:before {
+ content: "\f17c";
+}
+
+.fa-dribbble:before {
+ content: "\f17d";
+}
+
+.fa-skype:before {
+ content: "\f17e";
+}
+
+.fa-foursquare:before {
+ content: "\f180";
+}
+
+.fa-trello:before {
+ content: "\f181";
+}
+
+.fa-female:before {
+ content: "\f182";
+}
+
+.fa-male:before {
+ content: "\f183";
+}
+
+.fa-gittip:before,
+.fa-gratipay:before {
+ content: "\f184";
+}
+
+.fa-sun-o:before {
+ content: "\f185";
+}
+
+.fa-moon-o:before {
+ content: "\f186";
+}
+
+.fa-archive:before {
+ content: "\f187";
+}
+
+.fa-bug:before {
+ content: "\f188";
+}
+
+.fa-vk:before {
+ content: "\f189";
+}
+
+.fa-weibo:before {
+ content: "\f18a";
+}
+
+.fa-renren:before {
+ content: "\f18b";
+}
+
+.fa-pagelines:before {
+ content: "\f18c";
+}
+
+.fa-stack-exchange:before {
+ content: "\f18d";
+}
+
+.fa-arrow-circle-o-right:before {
+ content: "\f18e";
+}
+
+.fa-arrow-circle-o-left:before {
+ content: "\f190";
+}
+
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "\f191";
+}
+
+.fa-dot-circle-o:before {
+ content: "\f192";
+}
+
+.fa-wheelchair:before {
+ content: "\f193";
+}
+
+.fa-vimeo-square:before {
+ content: "\f194";
+}
+
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "\f195";
+}
+
+.fa-plus-square-o:before {
+ content: "\f196";
+}
+
+.fa-space-shuttle:before {
+ content: "\f197";
+}
+
+.fa-slack:before {
+ content: "\f198";
+}
+
+.fa-envelope-square:before {
+ content: "\f199";
+}
+
+.fa-wordpress:before {
+ content: "\f19a";
+}
+
+.fa-openid:before {
+ content: "\f19b";
+}
+
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "\f19c";
+}
+
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "\f19d";
+}
+
+.fa-yahoo:before {
+ content: "\f19e";
+}
+
+.fa-google:before {
+ content: "\f1a0";
+}
+
+.fa-reddit:before {
+ content: "\f1a1";
+}
+
+.fa-reddit-square:before {
+ content: "\f1a2";
+}
+
+.fa-stumbleupon-circle:before {
+ content: "\f1a3";
+}
+
+.fa-stumbleupon:before {
+ content: "\f1a4";
+}
+
+.fa-delicious:before {
+ content: "\f1a5";
+}
+
+.fa-digg:before {
+ content: "\f1a6";
+}
+
+.fa-pied-piper-pp:before {
+ content: "\f1a7";
+}
+
+.fa-pied-piper-alt:before {
+ content: "\f1a8";
+}
+
+.fa-drupal:before {
+ content: "\f1a9";
+}
+
+.fa-joomla:before {
+ content: "\f1aa";
+}
+
+.fa-language:before {
+ content: "\f1ab";
+}
+
+.fa-fax:before {
+ content: "\f1ac";
+}
+
+.fa-building:before {
+ content: "\f1ad";
+}
+
+.fa-child:before {
+ content: "\f1ae";
+}
+
+.fa-paw:before {
+ content: "\f1b0";
+}
+
+.fa-spoon:before {
+ content: "\f1b1";
+}
+
+.fa-cube:before {
+ content: "\f1b2";
+}
+
+.fa-cubes:before {
+ content: "\f1b3";
+}
+
+.fa-behance:before {
+ content: "\f1b4";
+}
+
+.fa-behance-square:before {
+ content: "\f1b5";
+}
+
+.fa-steam:before {
+ content: "\f1b6";
+}
+
+.fa-steam-square:before {
+ content: "\f1b7";
+}
+
+.fa-recycle:before {
+ content: "\f1b8";
+}
+
+.fa-automobile:before,
+.fa-car:before {
+ content: "\f1b9";
+}
+
+.fa-cab:before,
+.fa-taxi:before {
+ content: "\f1ba";
+}
+
+.fa-tree:before {
+ content: "\f1bb";
+}
+
+.fa-spotify:before {
+ content: "\f1bc";
+}
+
+.fa-deviantart:before {
+ content: "\f1bd";
+}
+
+.fa-soundcloud:before {
+ content: "\f1be";
+}
+
+.fa-database:before {
+ content: "\f1c0";
+}
+
+.fa-file-pdf-o:before {
+ content: "\f1c1";
+}
+
+.fa-file-word-o:before {
+ content: "\f1c2";
+}
+
+.fa-file-excel-o:before {
+ content: "\f1c3";
+}
+
+.fa-file-powerpoint-o:before {
+ content: "\f1c4";
+}
+
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "\f1c5";
+}
+
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "\f1c6";
+}
+
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "\f1c7";
+}
+
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "\f1c8";
+}
+
+.fa-file-code-o:before {
+ content: "\f1c9";
+}
+
+.fa-vine:before {
+ content: "\f1ca";
+}
+
+.fa-codepen:before {
+ content: "\f1cb";
+}
+
+.fa-jsfiddle:before {
+ content: "\f1cc";
+}
+
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "\f1cd";
+}
+
+.fa-circle-o-notch:before {
+ content: "\f1ce";
+}
+
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+ content: "\f1d0";
+}
+
+.fa-ge:before,
+.fa-empire:before {
+ content: "\f1d1";
+}
+
+.fa-git-square:before {
+ content: "\f1d2";
+}
+
+.fa-git:before {
+ content: "\f1d3";
+}
+
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+ content: "\f1d4";
+}
+
+.fa-tencent-weibo:before {
+ content: "\f1d5";
+}
+
+.fa-qq:before {
+ content: "\f1d6";
+}
+
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "\f1d7";
+}
+
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "\f1d8";
+}
+
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "\f1d9";
+}
+
+.fa-history:before {
+ content: "\f1da";
+}
+
+.fa-circle-thin:before {
+ content: "\f1db";
+}
+
+.fa-header:before {
+ content: "\f1dc";
+}
+
+.fa-paragraph:before {
+ content: "\f1dd";
+}
+
+.fa-sliders:before {
+ content: "\f1de";
+}
+
+.fa-share-alt:before {
+ content: "\f1e0";
+}
+
+.fa-share-alt-square:before {
+ content: "\f1e1";
+}
+
+.fa-bomb:before {
+ content: "\f1e2";
+}
+
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "\f1e3";
+}
+
+.fa-tty:before {
+ content: "\f1e4";
+}
+
+.fa-binoculars:before {
+ content: "\f1e5";
+}
+
+.fa-plug:before {
+ content: "\f1e6";
+}
+
+.fa-slideshare:before {
+ content: "\f1e7";
+}
+
+.fa-twitch:before {
+ content: "\f1e8";
+}
+
+.fa-yelp:before {
+ content: "\f1e9";
+}
+
+.fa-newspaper-o:before {
+ content: "\f1ea";
+}
+
+.fa-wifi:before {
+ content: "\f1eb";
+}
+
+.fa-calculator:before {
+ content: "\f1ec";
+}
+
+.fa-paypal:before {
+ content: "\f1ed";
+}
+
+.fa-google-wallet:before {
+ content: "\f1ee";
+}
+
+.fa-cc-visa:before {
+ content: "\f1f0";
+}
+
+.fa-cc-mastercard:before {
+ content: "\f1f1";
+}
+
+.fa-cc-discover:before {
+ content: "\f1f2";
+}
+
+.fa-cc-amex:before {
+ content: "\f1f3";
+}
+
+.fa-cc-paypal:before {
+ content: "\f1f4";
+}
+
+.fa-cc-stripe:before {
+ content: "\f1f5";
+}
+
+.fa-bell-slash:before {
+ content: "\f1f6";
+}
+
+.fa-bell-slash-o:before {
+ content: "\f1f7";
+}
+
+.fa-trash:before {
+ content: "\f1f8";
+}
+
+.fa-copyright:before {
+ content: "\f1f9";
+}
+
+.fa-at:before {
+ content: "\f1fa";
+}
+
+.fa-eyedropper:before {
+ content: "\f1fb";
+}
+
+.fa-paint-brush:before {
+ content: "\f1fc";
+}
+
+.fa-birthday-cake:before {
+ content: "\f1fd";
+}
+
+.fa-area-chart:before {
+ content: "\f1fe";
+}
+
+.fa-pie-chart:before {
+ content: "\f200";
+}
+
+.fa-line-chart:before {
+ content: "\f201";
+}
+
+.fa-lastfm:before {
+ content: "\f202";
+}
+
+.fa-lastfm-square:before {
+ content: "\f203";
+}
+
+.fa-toggle-off:before {
+ content: "\f204";
+}
+
+.fa-toggle-on:before {
+ content: "\f205";
+}
+
+.fa-bicycle:before {
+ content: "\f206";
+}
+
+.fa-bus:before {
+ content: "\f207";
+}
+
+.fa-ioxhost:before {
+ content: "\f208";
+}
+
+.fa-angellist:before {
+ content: "\f209";
+}
+
+.fa-cc:before {
+ content: "\f20a";
+}
+
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "\f20b";
+}
+
+.fa-meanpath:before {
+ content: "\f20c";
+}
+
+.fa-buysellads:before {
+ content: "\f20d";
+}
+
+.fa-connectdevelop:before {
+ content: "\f20e";
+}
+
+.fa-dashcube:before {
+ content: "\f210";
+}
+
+.fa-forumbee:before {
+ content: "\f211";
+}
+
+.fa-leanpub:before {
+ content: "\f212";
+}
+
+.fa-sellsy:before {
+ content: "\f213";
+}
+
+.fa-shirtsinbulk:before {
+ content: "\f214";
+}
+
+.fa-simplybuilt:before {
+ content: "\f215";
+}
+
+.fa-skyatlas:before {
+ content: "\f216";
+}
+
+.fa-cart-plus:before {
+ content: "\f217";
+}
+
+.fa-cart-arrow-down:before {
+ content: "\f218";
+}
+
+.fa-diamond:before {
+ content: "\f219";
+}
+
+.fa-ship:before {
+ content: "\f21a";
+}
+
+.fa-user-secret:before {
+ content: "\f21b";
+}
+
+.fa-motorcycle:before {
+ content: "\f21c";
+}
+
+.fa-street-view:before {
+ content: "\f21d";
+}
+
+.fa-heartbeat:before {
+ content: "\f21e";
+}
+
+.fa-venus:before {
+ content: "\f221";
+}
+
+.fa-mars:before {
+ content: "\f222";
+}
+
+.fa-mercury:before {
+ content: "\f223";
+}
+
+.fa-intersex:before,
+.fa-transgender:before {
+ content: "\f224";
+}
+
+.fa-transgender-alt:before {
+ content: "\f225";
+}
+
+.fa-venus-double:before {
+ content: "\f226";
+}
+
+.fa-mars-double:before {
+ content: "\f227";
+}
+
+.fa-venus-mars:before {
+ content: "\f228";
+}
+
+.fa-mars-stroke:before {
+ content: "\f229";
+}
+
+.fa-mars-stroke-v:before {
+ content: "\f22a";
+}
+
+.fa-mars-stroke-h:before {
+ content: "\f22b";
+}
+
+.fa-neuter:before {
+ content: "\f22c";
+}
+
+.fa-genderless:before {
+ content: "\f22d";
+}
+
+.fa-facebook-official:before {
+ content: "\f230";
+}
+
+.fa-pinterest-p:before {
+ content: "\f231";
+}
+
+.fa-whatsapp:before {
+ content: "\f232";
+}
+
+.fa-server:before {
+ content: "\f233";
+}
+
+.fa-user-plus:before {
+ content: "\f234";
+}
+
+.fa-user-times:before {
+ content: "\f235";
+}
+
+.fa-hotel:before,
+.fa-bed:before {
+ content: "\f236";
+}
+
+.fa-viacoin:before {
+ content: "\f237";
+}
+
+.fa-train:before {
+ content: "\f238";
+}
+
+.fa-subway:before {
+ content: "\f239";
+}
+
+.fa-medium:before {
+ content: "\f23a";
+}
+
+.fa-yc:before,
+.fa-y-combinator:before {
+ content: "\f23b";
+}
+
+.fa-optin-monster:before {
+ content: "\f23c";
+}
+
+.fa-opencart:before {
+ content: "\f23d";
+}
+
+.fa-expeditedssl:before {
+ content: "\f23e";
+}
+
+.fa-battery-4:before,
+.fa-battery:before,
+.fa-battery-full:before {
+ content: "\f240";
+}
+
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+ content: "\f241";
+}
+
+.fa-battery-2:before,
+.fa-battery-half:before {
+ content: "\f242";
+}
+
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+ content: "\f243";
+}
+
+.fa-battery-0:before,
+.fa-battery-empty:before {
+ content: "\f244";
+}
+
+.fa-mouse-pointer:before {
+ content: "\f245";
+}
+
+.fa-i-cursor:before {
+ content: "\f246";
+}
+
+.fa-object-group:before {
+ content: "\f247";
+}
+
+.fa-object-ungroup:before {
+ content: "\f248";
+}
+
+.fa-sticky-note:before {
+ content: "\f249";
+}
+
+.fa-sticky-note-o:before {
+ content: "\f24a";
+}
+
+.fa-cc-jcb:before {
+ content: "\f24b";
+}
+
+.fa-cc-diners-club:before {
+ content: "\f24c";
+}
+
+.fa-clone:before {
+ content: "\f24d";
+}
+
+.fa-balance-scale:before {
+ content: "\f24e";
+}
+
+.fa-hourglass-o:before {
+ content: "\f250";
+}
+
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+ content: "\f251";
+}
+
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+ content: "\f252";
+}
+
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+ content: "\f253";
+}
+
+.fa-hourglass:before {
+ content: "\f254";
+}
+
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+ content: "\f255";
+}
+
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+ content: "\f256";
+}
+
+.fa-hand-scissors-o:before {
+ content: "\f257";
+}
+
+.fa-hand-lizard-o:before {
+ content: "\f258";
+}
+
+.fa-hand-spock-o:before {
+ content: "\f259";
+}
+
+.fa-hand-pointer-o:before {
+ content: "\f25a";
+}
+
+.fa-hand-peace-o:before {
+ content: "\f25b";
+}
+
+.fa-trademark:before {
+ content: "\f25c";
+}
+
+.fa-registered:before {
+ content: "\f25d";
+}
+
+.fa-creative-commons:before {
+ content: "\f25e";
+}
+
+.fa-gg:before {
+ content: "\f260";
+}
+
+.fa-gg-circle:before {
+ content: "\f261";
+}
+
+.fa-tripadvisor:before {
+ content: "\f262";
+}
+
+.fa-odnoklassniki:before {
+ content: "\f263";
+}
+
+.fa-odnoklassniki-square:before {
+ content: "\f264";
+}
+
+.fa-get-pocket:before {
+ content: "\f265";
+}
+
+.fa-wikipedia-w:before {
+ content: "\f266";
+}
+
+.fa-safari:before {
+ content: "\f267";
+}
+
+.fa-chrome:before {
+ content: "\f268";
+}
+
+.fa-firefox:before {
+ content: "\f269";
+}
+
+.fa-opera:before {
+ content: "\f26a";
+}
+
+.fa-internet-explorer:before {
+ content: "\f26b";
+}
+
+.fa-tv:before,
+.fa-television:before {
+ content: "\f26c";
+}
+
+.fa-contao:before {
+ content: "\f26d";
+}
+
+.fa-500px:before {
+ content: "\f26e";
+}
+
+.fa-amazon:before {
+ content: "\f270";
+}
+
+.fa-calendar-plus-o:before {
+ content: "\f271";
+}
+
+.fa-calendar-minus-o:before {
+ content: "\f272";
+}
+
+.fa-calendar-times-o:before {
+ content: "\f273";
+}
+
+.fa-calendar-check-o:before {
+ content: "\f274";
+}
+
+.fa-industry:before {
+ content: "\f275";
+}
+
+.fa-map-pin:before {
+ content: "\f276";
+}
+
+.fa-map-signs:before {
+ content: "\f277";
+}
+
+.fa-map-o:before {
+ content: "\f278";
+}
+
+.fa-map:before {
+ content: "\f279";
+}
+
+.fa-commenting:before {
+ content: "\f27a";
+}
+
+.fa-commenting-o:before {
+ content: "\f27b";
+}
+
+.fa-houzz:before {
+ content: "\f27c";
+}
+
+.fa-vimeo:before {
+ content: "\f27d";
+}
+
+.fa-black-tie:before {
+ content: "\f27e";
+}
+
+.fa-fonticons:before {
+ content: "\f280";
+}
+
+.fa-reddit-alien:before {
+ content: "\f281";
+}
+
+.fa-edge:before {
+ content: "\f282";
+}
+
+.fa-credit-card-alt:before {
+ content: "\f283";
+}
+
+.fa-codiepie:before {
+ content: "\f284";
+}
+
+.fa-modx:before {
+ content: "\f285";
+}
+
+.fa-fort-awesome:before {
+ content: "\f286";
+}
+
+.fa-usb:before {
+ content: "\f287";
+}
+
+.fa-product-hunt:before {
+ content: "\f288";
+}
+
+.fa-mixcloud:before {
+ content: "\f289";
+}
+
+.fa-scribd:before {
+ content: "\f28a";
+}
+
+.fa-pause-circle:before {
+ content: "\f28b";
+}
+
+.fa-pause-circle-o:before {
+ content: "\f28c";
+}
+
+.fa-stop-circle:before {
+ content: "\f28d";
+}
+
+.fa-stop-circle-o:before {
+ content: "\f28e";
+}
+
+.fa-shopping-bag:before {
+ content: "\f290";
+}
+
+.fa-shopping-basket:before {
+ content: "\f291";
+}
+
+.fa-hashtag:before {
+ content: "\f292";
+}
+
+.fa-bluetooth:before {
+ content: "\f293";
+}
+
+.fa-bluetooth-b:before {
+ content: "\f294";
+}
+
+.fa-percent:before {
+ content: "\f295";
+}
+
+.fa-gitlab:before {
+ content: "\f296";
+}
+
+.fa-wpbeginner:before {
+ content: "\f297";
+}
+
+.fa-wpforms:before {
+ content: "\f298";
+}
+
+.fa-envira:before {
+ content: "\f299";
+}
+
+.fa-universal-access:before {
+ content: "\f29a";
+}
+
+.fa-wheelchair-alt:before {
+ content: "\f29b";
+}
+
+.fa-question-circle-o:before {
+ content: "\f29c";
+}
+
+.fa-blind:before {
+ content: "\f29d";
+}
+
+.fa-audio-description:before {
+ content: "\f29e";
+}
+
+.fa-volume-control-phone:before {
+ content: "\f2a0";
+}
+
+.fa-braille:before {
+ content: "\f2a1";
+}
+
+.fa-assistive-listening-systems:before {
+ content: "\f2a2";
+}
+
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+ content: "\f2a3";
+}
+
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+ content: "\f2a4";
+}
+
+.fa-glide:before {
+ content: "\f2a5";
+}
+
+.fa-glide-g:before {
+ content: "\f2a6";
+}
+
+.fa-signing:before,
+.fa-sign-language:before {
+ content: "\f2a7";
+}
+
+.fa-low-vision:before {
+ content: "\f2a8";
+}
+
+.fa-viadeo:before {
+ content: "\f2a9";
+}
+
+.fa-viadeo-square:before {
+ content: "\f2aa";
+}
+
+.fa-snapchat:before {
+ content: "\f2ab";
+}
+
+.fa-snapchat-ghost:before {
+ content: "\f2ac";
+}
+
+.fa-snapchat-square:before {
+ content: "\f2ad";
+}
+
+.fa-pied-piper:before {
+ content: "\f2ae";
+}
+
+.fa-first-order:before {
+ content: "\f2b0";
+}
+
+.fa-yoast:before {
+ content: "\f2b1";
+}
+
+.fa-themeisle:before {
+ content: "\f2b2";
+}
+
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+ content: "\f2b3";
+}
+
+.fa-fa:before,
+.fa-font-awesome:before {
+ content: "\f2b4";
+}
+
+.fa-handshake-o:before {
+ content: "\f2b5";
+}
+
+.fa-envelope-open:before {
+ content: "\f2b6";
+}
+
+.fa-envelope-open-o:before {
+ content: "\f2b7";
+}
+
+.fa-linode:before {
+ content: "\f2b8";
+}
+
+.fa-address-book:before {
+ content: "\f2b9";
+}
+
+.fa-address-book-o:before {
+ content: "\f2ba";
+}
+
+.fa-vcard:before,
+.fa-address-card:before {
+ content: "\f2bb";
+}
+
+.fa-vcard-o:before,
+.fa-address-card-o:before {
+ content: "\f2bc";
+}
+
+.fa-user-circle:before {
+ content: "\f2bd";
+}
+
+.fa-user-circle-o:before {
+ content: "\f2be";
+}
+
+.fa-user-o:before {
+ content: "\f2c0";
+}
+
+.fa-id-badge:before {
+ content: "\f2c1";
+}
+
+.fa-drivers-license:before,
+.fa-id-card:before {
+ content: "\f2c2";
+}
+
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+ content: "\f2c3";
+}
+
+.fa-quora:before {
+ content: "\f2c4";
+}
+
+.fa-free-code-camp:before {
+ content: "\f2c5";
+}
+
+.fa-telegram:before {
+ content: "\f2c6";
+}
+
+.fa-thermometer-4:before,
+.fa-thermometer:before,
+.fa-thermometer-full:before {
+ content: "\f2c7";
+}
+
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+ content: "\f2c8";
+}
+
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+ content: "\f2c9";
+}
+
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+ content: "\f2ca";
+}
+
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+ content: "\f2cb";
+}
+
+.fa-shower:before {
+ content: "\f2cc";
+}
+
+.fa-bathtub:before,
+.fa-s15:before,
+.fa-bath:before {
+ content: "\f2cd";
+}
+
+.fa-podcast:before {
+ content: "\f2ce";
+}
+
+.fa-window-maximize:before {
+ content: "\f2d0";
+}
+
+.fa-window-minimize:before {
+ content: "\f2d1";
+}
+
+.fa-window-restore:before {
+ content: "\f2d2";
+}
+
+.fa-times-rectangle:before,
+.fa-window-close:before {
+ content: "\f2d3";
+}
+
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+ content: "\f2d4";
+}
+
+.fa-bandcamp:before {
+ content: "\f2d5";
+}
+
+.fa-grav:before {
+ content: "\f2d6";
+}
+
+.fa-etsy:before {
+ content: "\f2d7";
+}
+
+.fa-imdb:before {
+ content: "\f2d8";
+}
+
+.fa-ravelry:before {
+ content: "\f2d9";
+}
+
+.fa-eercast:before {
+ content: "\f2da";
+}
+
+.fa-microchip:before {
+ content: "\f2db";
+}
+
+.fa-snowflake-o:before {
+ content: "\f2dc";
+}
+
+.fa-superpowers:before {
+ content: "\f2dd";
+}
+
+.fa-wpexplorer:before {
+ content: "\f2de";
+}
+
+.fa-meetup:before {
+ content: "\f2e0";
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+/*# sourceMappingURL=../maps/css/lifterlms.css.map */
diff --git a/assets/css/lifterlms.min.css b/assets/css/lifterlms.min.css
new file mode 100644
index 0000000000..de84e7294c
--- /dev/null
+++ b/assets/css/lifterlms.min.css
@@ -0,0 +1,5 @@
+.llms-pagination ul:before,.llms-pagination ul:after,.llms-form-fields:before,.llms-checkout-cols-2:before,.llms-access-plans:before,.llms-loop-list:before,.llms-cols:before,.llms-form-fields:after,.llms-checkout-cols-2:after,.llms-access-plans:after,.llms-loop-list:after,.llms-cols:after{content:" ";display:table}.llms-pagination ul:after,.llms-form-fields:after,.llms-checkout-cols-2:after,.llms-access-plans:after,.llms-loop-list:after,.llms-cols:after{clear:both}.llms-cols .llms-col{width:100%}@media all and (min-width: 600px){.llms-cols [class*=llms-col-]{float:left}}.llms-flex-cols{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.llms-flex-cols [class*=llms-col]{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:100%}@media all and (min-width: 600px){.llms-cols .llms-col-1,.llms-flex-cols .llms-col-1{width:100%}.llms-cols .llms-col-2,.llms-flex-cols .llms-col-2{width:50%}.llms-cols .llms-col-3,.llms-flex-cols .llms-col-3{width:33.3333333333%}.llms-cols .llms-col-4,.llms-flex-cols .llms-col-4{width:25%}.llms-cols .llms-col-5,.llms-flex-cols .llms-col-5{width:20%}.llms-cols .llms-col-6,.llms-flex-cols .llms-col-6{width:16.6666666667%}.llms-cols .llms-col-7,.llms-flex-cols .llms-col-7{width:14.2857142857%}.llms-cols .llms-col-8,.llms-flex-cols .llms-col-8{width:12.5%}.llms-cols .llms-col-9,.llms-flex-cols .llms-col-9{width:11.1111111111%}.llms-cols .llms-col-10,.llms-flex-cols .llms-col-10{width:10%}.llms-cols .llms-col-11,.llms-flex-cols .llms-col-11{width:9.0909090909%}.llms-cols .llms-col-12,.llms-flex-cols .llms-col-12{width:8.3333333333%}}.llms-button-action,.llms-button-danger,.llms-button-primary,.llms-button-secondary{border:none;border-radius:8px;color:#fefefe;cursor:pointer;display:inline-block;font-size:18px;font-weight:700;text-decoration:none;text-shadow:none;line-height:1;margin:0;max-width:100%;padding:12px 24px;position:relative;-webkit-transition:all .5s ease;transition:all .5s ease}.llms-button-action:disabled,.llms-button-danger:disabled,.llms-button-primary:disabled,.llms-button-secondary:disabled{opacity:.5}.llms-button-action:hover,.llms-button-action:active,.llms-button-danger:hover,.llms-button-danger:active,.llms-button-primary:hover,.llms-button-primary:active,.llms-button-secondary:hover,.llms-button-secondary:active{color:#fefefe}.llms-button-action:focus,.llms-button-danger:focus,.llms-button-primary:focus,.llms-button-secondary:focus{color:#fefefe}.llms-button-action.auto,.llms-button-danger.auto,.llms-button-primary.auto,.llms-button-secondary.auto{width:auto}.llms-button-action.full,.llms-button-danger.full,.llms-button-primary.full,.llms-button-secondary.full{display:block;text-align:center;width:100%}.llms-button-action.square,.llms-button-danger.square,.llms-button-primary.square,.llms-button-secondary.square{padding:12px}.llms-button-action.small,.llms-button-danger.small,.llms-button-primary.small,.llms-button-secondary.small{font-size:13px;padding:8px 14px}.llms-button-action.small.square,.llms-button-danger.small.square,.llms-button-primary.small.square,.llms-button-secondary.small.square{padding:8px}.llms-button-action.large,.llms-button-danger.large,.llms-button-primary.large,.llms-button-secondary.large{font-size:18px;line-height:1.2;padding:16px 32px}.llms-button-action.large.square,.llms-button-danger.large.square,.llms-button-primary.large.square,.llms-button-secondary.large.square{padding:16px}.llms-button-action.large .fa,.llms-button-danger.large .fa,.llms-button-primary.large .fa,.llms-button-secondary.large .fa{left:-7px;position:relative}a.llms-button-action,a.llms-button-danger,a.llms-button-primary{color:#fefefe}.llms-button-primary{background:#466dd8}.llms-button-primary:hover,.llms-button-primary.clicked{background:#274eba}.llms-button-primary:focus,.llms-button-primary:active{background:#6888df}.llms-button-secondary{background:#e1e1e1;color:#444}.llms-button-secondary:hover{color:#414141;background:#cdcdcd}.llms-button-secondary:focus,.llms-button-secondary:active{color:#414141;background:#ebebeb}a.llms-button-secondary{color:#444}.llms-button-action{background:#c05621}.llms-button-action:hover,.llms-button-action.clicked{background:#f67d28}.llms-button-action:focus,.llms-button-action:active{background:#faad76}.llms-button-danger{background:#bb231c}.llms-button-danger:hover{background:#981c17}.llms-button-danger:focus,.llms-button-danger:active{background:#cd261f}.llms-button-outline{background:rgba(0,0,0,0);border:3px solid #1d2327;border-radius:8px;color:#1d2327;cursor:pointer;font-size:16px;font-weight:700;text-decoration:none;text-shadow:none;line-height:1;margin:0;max-width:100%;padding:12px 24px;position:relative;-webkit-transition:all .5s ease;transition:all .5s ease}.llms-button-outline:disabled{opacity:.5}.llms-button-outline:hover,.llms-button-outline:active{color:#1d2327}.llms-button-outline:focus{color:#1d2327}.llms-button-outline.auto{width:auto}.llms-button-outline.full{display:block;text-align:center;width:100%}.llms-button-outline.square{padding:12px}.llms-course-continue-button{display:inline-block}.llms-donut{background-color:#f1f1f1;background-image:none;border-radius:50%;color:#466dd8;height:200px;overflow:hidden;position:relative;width:200px}.llms-donut:before,.llms-donut:after{content:" ";display:table}.llms-donut:after{clear:both}.llms-donut svg{overflow:visible !important;pointer-events:none;width:100%}.llms-donut svg path{fill:none;stroke-width:35px;stroke:#466dd8}.llms-donut.mini{height:36px;width:36px}.llms-donut.mini .percentage{font-size:10px}.llms-donut.small{height:100px;width:100px}.llms-donut.small .percentage{font-size:18px}.llms-donut.medium{height:130px;width:130px}.llms-donut.medium .percentage{font-size:26px}.llms-donut.large{height:260px;width:260px}.llms-donut.large .percentage{font-size:48px}.llms-donut .inside{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border-radius:50%;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;height:80%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;left:50%;position:absolute;text-align:center;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:80%;top:50%;z-index:3}.llms-donut .percentage{line-height:1.2;font-size:34px}.llms-donut .caption{font-size:75%}.lifterlms [data-tip],.lifterlms [data-title-default],.lifterlms [data-title-active],.llms-metabox [data-tip],.llms-metabox [data-title-default],.llms-metabox [data-title-active],.llms-mb-container [data-tip],.llms-mb-container [data-title-default],.llms-mb-container [data-title-active],.llms-quiz-wrapper [data-tip],.llms-quiz-wrapper [data-title-default],.llms-quiz-wrapper [data-title-active]{position:relative}.lifterlms [data-tip].tip--top-right:before,.lifterlms [data-title-default].tip--top-right:before,.lifterlms [data-title-active].tip--top-right:before,.llms-metabox [data-tip].tip--top-right:before,.llms-metabox [data-title-default].tip--top-right:before,.llms-metabox [data-title-active].tip--top-right:before,.llms-mb-container [data-tip].tip--top-right:before,.llms-mb-container [data-title-default].tip--top-right:before,.llms-mb-container [data-title-active].tip--top-right:before,.llms-quiz-wrapper [data-tip].tip--top-right:before,.llms-quiz-wrapper [data-title-default].tip--top-right:before,.llms-quiz-wrapper [data-title-active].tip--top-right:before{bottom:100%;left:-10px}.lifterlms [data-tip].tip--top-right:hover:before,.lifterlms [data-title-default].tip--top-right:hover:before,.lifterlms [data-title-active].tip--top-right:hover:before,.llms-metabox [data-tip].tip--top-right:hover:before,.llms-metabox [data-title-default].tip--top-right:hover:before,.llms-metabox [data-title-active].tip--top-right:hover:before,.llms-mb-container [data-tip].tip--top-right:hover:before,.llms-mb-container [data-title-default].tip--top-right:hover:before,.llms-mb-container [data-title-active].tip--top-right:hover:before,.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before{bottom:calc(100% + 6px)}.lifterlms [data-tip].tip--top-right:after,.lifterlms [data-title-default].tip--top-right:after,.lifterlms [data-title-active].tip--top-right:after,.llms-metabox [data-tip].tip--top-right:after,.llms-metabox [data-title-default].tip--top-right:after,.llms-metabox [data-title-active].tip--top-right:after,.llms-mb-container [data-tip].tip--top-right:after,.llms-mb-container [data-title-default].tip--top-right:after,.llms-mb-container [data-title-active].tip--top-right:after,.llms-quiz-wrapper [data-tip].tip--top-right:after,.llms-quiz-wrapper [data-title-default].tip--top-right:after,.llms-quiz-wrapper [data-title-active].tip--top-right:after{border-top-color:#444;left:6px;top:0}.lifterlms [data-tip].tip--top-right:hover:after,.lifterlms [data-title-default].tip--top-right:hover:after,.lifterlms [data-title-active].tip--top-right:hover:after,.llms-metabox [data-tip].tip--top-right:hover:after,.llms-metabox [data-title-default].tip--top-right:hover:after,.llms-metabox [data-title-active].tip--top-right:hover:after,.llms-mb-container [data-tip].tip--top-right:hover:after,.llms-mb-container [data-title-default].tip--top-right:hover:after,.llms-mb-container [data-title-active].tip--top-right:hover:after,.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after{top:-6px}.lifterlms [data-tip].tip--top-left:before,.lifterlms [data-title-default].tip--top-left:before,.lifterlms [data-title-active].tip--top-left:before,.llms-metabox [data-tip].tip--top-left:before,.llms-metabox [data-title-default].tip--top-left:before,.llms-metabox [data-title-active].tip--top-left:before,.llms-mb-container [data-tip].tip--top-left:before,.llms-mb-container [data-title-default].tip--top-left:before,.llms-mb-container [data-title-active].tip--top-left:before,.llms-quiz-wrapper [data-tip].tip--top-left:before,.llms-quiz-wrapper [data-title-default].tip--top-left:before,.llms-quiz-wrapper [data-title-active].tip--top-left:before{bottom:100%;right:-10px}.lifterlms [data-tip].tip--top-left:hover:before,.lifterlms [data-title-default].tip--top-left:hover:before,.lifterlms [data-title-active].tip--top-left:hover:before,.llms-metabox [data-tip].tip--top-left:hover:before,.llms-metabox [data-title-default].tip--top-left:hover:before,.llms-metabox [data-title-active].tip--top-left:hover:before,.llms-mb-container [data-tip].tip--top-left:hover:before,.llms-mb-container [data-title-default].tip--top-left:hover:before,.llms-mb-container [data-title-active].tip--top-left:hover:before,.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before{bottom:calc(100% + 6px)}.lifterlms [data-tip].tip--top-left:after,.lifterlms [data-title-default].tip--top-left:after,.lifterlms [data-title-active].tip--top-left:after,.llms-metabox [data-tip].tip--top-left:after,.llms-metabox [data-title-default].tip--top-left:after,.llms-metabox [data-title-active].tip--top-left:after,.llms-mb-container [data-tip].tip--top-left:after,.llms-mb-container [data-title-default].tip--top-left:after,.llms-mb-container [data-title-active].tip--top-left:after,.llms-quiz-wrapper [data-tip].tip--top-left:after,.llms-quiz-wrapper [data-title-default].tip--top-left:after,.llms-quiz-wrapper [data-title-active].tip--top-left:after{border-top-color:#444;right:6px;top:0}.lifterlms [data-tip].tip--top-left:hover:after,.lifterlms [data-title-default].tip--top-left:hover:after,.lifterlms [data-title-active].tip--top-left:hover:after,.llms-metabox [data-tip].tip--top-left:hover:after,.llms-metabox [data-title-default].tip--top-left:hover:after,.llms-metabox [data-title-active].tip--top-left:hover:after,.llms-mb-container [data-tip].tip--top-left:hover:after,.llms-mb-container [data-title-default].tip--top-left:hover:after,.llms-mb-container [data-title-active].tip--top-left:hover:after,.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after{top:-6px}.lifterlms [data-tip].tip--bottom-left:before,.lifterlms [data-title-default].tip--bottom-left:before,.lifterlms [data-title-active].tip--bottom-left:before,.llms-metabox [data-tip].tip--bottom-left:before,.llms-metabox [data-title-default].tip--bottom-left:before,.llms-metabox [data-title-active].tip--bottom-left:before,.llms-mb-container [data-tip].tip--bottom-left:before,.llms-mb-container [data-title-default].tip--bottom-left:before,.llms-mb-container [data-title-active].tip--bottom-left:before,.llms-quiz-wrapper [data-tip].tip--bottom-left:before,.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,.llms-quiz-wrapper [data-title-active].tip--bottom-left:before{top:100%;right:-10px}.lifterlms [data-tip].tip--bottom-left:hover:before,.lifterlms [data-title-default].tip--bottom-left:hover:before,.lifterlms [data-title-active].tip--bottom-left:hover:before,.llms-metabox [data-tip].tip--bottom-left:hover:before,.llms-metabox [data-title-default].tip--bottom-left:hover:before,.llms-metabox [data-title-active].tip--bottom-left:hover:before,.llms-mb-container [data-tip].tip--bottom-left:hover:before,.llms-mb-container [data-title-default].tip--bottom-left:hover:before,.llms-mb-container [data-title-active].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before{top:calc(100% + 6px)}.lifterlms [data-tip].tip--bottom-left:after,.lifterlms [data-title-default].tip--bottom-left:after,.lifterlms [data-title-active].tip--bottom-left:after,.llms-metabox [data-tip].tip--bottom-left:after,.llms-metabox [data-title-default].tip--bottom-left:after,.llms-metabox [data-title-active].tip--bottom-left:after,.llms-mb-container [data-tip].tip--bottom-left:after,.llms-mb-container [data-title-default].tip--bottom-left:after,.llms-mb-container [data-title-active].tip--bottom-left:after,.llms-quiz-wrapper [data-tip].tip--bottom-left:after,.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,.llms-quiz-wrapper [data-title-active].tip--bottom-left:after{border-bottom-color:#444;right:6px;bottom:0}.lifterlms [data-tip].tip--bottom-left:hover:after,.lifterlms [data-title-default].tip--bottom-left:hover:after,.lifterlms [data-title-active].tip--bottom-left:hover:after,.llms-metabox [data-tip].tip--bottom-left:hover:after,.llms-metabox [data-title-default].tip--bottom-left:hover:after,.llms-metabox [data-title-active].tip--bottom-left:hover:after,.llms-mb-container [data-tip].tip--bottom-left:hover:after,.llms-mb-container [data-title-default].tip--bottom-left:hover:after,.llms-mb-container [data-title-active].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after{bottom:-6px}.lifterlms [data-tip].tip--bottom-right:before,.lifterlms [data-title-default].tip--bottom-right:before,.lifterlms [data-title-active].tip--bottom-right:before,.llms-metabox [data-tip].tip--bottom-right:before,.llms-metabox [data-title-default].tip--bottom-right:before,.llms-metabox [data-title-active].tip--bottom-right:before,.llms-mb-container [data-tip].tip--bottom-right:before,.llms-mb-container [data-title-default].tip--bottom-right:before,.llms-mb-container [data-title-active].tip--bottom-right:before,.llms-quiz-wrapper [data-tip].tip--bottom-right:before,.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,.llms-quiz-wrapper [data-title-active].tip--bottom-right:before{top:100%;left:-10px}.lifterlms [data-tip].tip--bottom-right:hover:before,.lifterlms [data-title-default].tip--bottom-right:hover:before,.lifterlms [data-title-active].tip--bottom-right:hover:before,.llms-metabox [data-tip].tip--bottom-right:hover:before,.llms-metabox [data-title-default].tip--bottom-right:hover:before,.llms-metabox [data-title-active].tip--bottom-right:hover:before,.llms-mb-container [data-tip].tip--bottom-right:hover:before,.llms-mb-container [data-title-default].tip--bottom-right:hover:before,.llms-mb-container [data-title-active].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before{top:calc(100% + 6px)}.lifterlms [data-tip].tip--bottom-right:after,.lifterlms [data-title-default].tip--bottom-right:after,.lifterlms [data-title-active].tip--bottom-right:after,.llms-metabox [data-tip].tip--bottom-right:after,.llms-metabox [data-title-default].tip--bottom-right:after,.llms-metabox [data-title-active].tip--bottom-right:after,.llms-mb-container [data-tip].tip--bottom-right:after,.llms-mb-container [data-title-default].tip--bottom-right:after,.llms-mb-container [data-title-active].tip--bottom-right:after,.llms-quiz-wrapper [data-tip].tip--bottom-right:after,.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,.llms-quiz-wrapper [data-title-active].tip--bottom-right:after{border-bottom-color:#444;left:6px;bottom:0}.lifterlms [data-tip].tip--bottom-right:hover:after,.lifterlms [data-title-default].tip--bottom-right:hover:after,.lifterlms [data-title-active].tip--bottom-right:hover:after,.llms-metabox [data-tip].tip--bottom-right:hover:after,.llms-metabox [data-title-default].tip--bottom-right:hover:after,.llms-metabox [data-title-active].tip--bottom-right:hover:after,.llms-mb-container [data-tip].tip--bottom-right:hover:after,.llms-mb-container [data-title-default].tip--bottom-right:hover:after,.llms-mb-container [data-title-active].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after{bottom:-6px}.lifterlms [data-tip]:before,.lifterlms [data-title-default]:before,.lifterlms [data-title-active]:before,.llms-metabox [data-tip]:before,.llms-metabox [data-title-default]:before,.llms-metabox [data-title-active]:before,.llms-mb-container [data-tip]:before,.llms-mb-container [data-title-default]:before,.llms-mb-container [data-title-active]:before,.llms-quiz-wrapper [data-tip]:before,.llms-quiz-wrapper [data-title-default]:before,.llms-quiz-wrapper [data-title-active]:before{background:#444;border-radius:4px;color:#fff;font-size:13px;line-height:1.2;padding:8px;max-width:300px;width:-webkit-max-content;width:-moz-max-content;width:max-content}.lifterlms [data-tip]:after,.lifterlms [data-title-default]:after,.lifterlms [data-title-active]:after,.llms-metabox [data-tip]:after,.llms-metabox [data-title-default]:after,.llms-metabox [data-title-active]:after,.llms-mb-container [data-tip]:after,.llms-mb-container [data-title-default]:after,.llms-mb-container [data-title-active]:after,.llms-quiz-wrapper [data-tip]:after,.llms-quiz-wrapper [data-title-default]:after,.llms-quiz-wrapper [data-title-active]:after{content:"";border:6px solid rgba(0,0,0,0);height:0;width:0}.lifterlms [data-tip]:before,.lifterlms [data-tip]:after,.lifterlms [data-title-default]:before,.lifterlms [data-title-default]:after,.lifterlms [data-title-active]:before,.lifterlms [data-title-active]:after,.llms-metabox [data-tip]:before,.llms-metabox [data-tip]:after,.llms-metabox [data-title-default]:before,.llms-metabox [data-title-default]:after,.llms-metabox [data-title-active]:before,.llms-metabox [data-title-active]:after,.llms-mb-container [data-tip]:before,.llms-mb-container [data-tip]:after,.llms-mb-container [data-title-default]:before,.llms-mb-container [data-title-default]:after,.llms-mb-container [data-title-active]:before,.llms-mb-container [data-title-active]:after,.llms-quiz-wrapper [data-tip]:before,.llms-quiz-wrapper [data-tip]:after,.llms-quiz-wrapper [data-title-default]:before,.llms-quiz-wrapper [data-title-default]:after,.llms-quiz-wrapper [data-title-active]:before,.llms-quiz-wrapper [data-title-active]:after{opacity:0;-webkit-transition:all .2s .1s ease;transition:all .2s .1s ease;position:absolute;pointer-events:none;visibility:hidden}.lifterlms [data-tip]:hover:before,.lifterlms [data-tip]:hover:after,.lifterlms [data-title-default]:hover:before,.lifterlms [data-title-default]:hover:after,.lifterlms [data-title-active]:hover:before,.lifterlms [data-title-active]:hover:after,.llms-metabox [data-tip]:hover:before,.llms-metabox [data-tip]:hover:after,.llms-metabox [data-title-default]:hover:before,.llms-metabox [data-title-default]:hover:after,.llms-metabox [data-title-active]:hover:before,.llms-metabox [data-title-active]:hover:after,.llms-mb-container [data-tip]:hover:before,.llms-mb-container [data-tip]:hover:after,.llms-mb-container [data-title-default]:hover:before,.llms-mb-container [data-title-default]:hover:after,.llms-mb-container [data-title-active]:hover:before,.llms-mb-container [data-title-active]:hover:after,.llms-quiz-wrapper [data-tip]:hover:before,.llms-quiz-wrapper [data-tip]:hover:after,.llms-quiz-wrapper [data-title-default]:hover:before,.llms-quiz-wrapper [data-title-default]:hover:after,.llms-quiz-wrapper [data-title-active]:hover:before,.llms-quiz-wrapper [data-title-active]:hover:after{opacity:1;-webkit-transition:all 0 .1s ease;transition:all 0 .1s ease;visibility:visible;z-index:99999999}.lifterlms [data-tip]:before,.llms-metabox [data-tip]:before,.llms-mb-container [data-tip]:before,.llms-quiz-wrapper [data-tip]:before{content:attr(data-tip)}.lifterlms [data-tip].active:before,.llms-metabox [data-tip].active:before,.llms-mb-container [data-tip].active:before,.llms-quiz-wrapper [data-tip].active:before{content:attr(data-tip-active)}.llms-membership-image{display:block;margin:0 auto}.llms-course-image{display:block;margin:0 auto;max-width:100%}.llms-featured-image{display:block;margin:0 auto}.llms-image-thumb{width:150px}.llms-video-wrapper .center-video{height:auto;max-width:100%;overflow:hidden;position:relative;padding-top:56.25%;text-align:center}.llms-video-wrapper .center-video>.wp-video,.llms-video-wrapper .center-video .fluid-width-video-wrapper,.llms-video-wrapper .center-video iframe,.llms-video-wrapper .center-video object,.llms-video-wrapper .center-video embed{height:100%;left:0;position:absolute;top:0;width:100%}.llms-video-wrapper .center-video>.wp-video{width:100% !important}.llms-video-wrapper .center-video .fluid-width-video-wrapper{padding-top:0 !important}.clear{clear:both;width:100%}.llms-featured-image{text-align:center}#main-content .llms-payment-options p{margin:0;font-size:16px}.llms-option{display:block;position:relative;margin:20px 0;padding-left:40px;font-size:16px}.llms-option label{cursor:pointer;position:static}.llms-option:first-child{margin-top:0}.llms-option:last-child{margin-bottom:0}#main-content .llms-option:last-child{margin-bottom:0}.llms-option input[type=radio]{display:block;position:absolute;top:3px;left:0;z-index:0}.llms-option input[type=radio]{display:inline-block}.llms-option input[type=radio]+label span.llms-radio{display:none}.llms-option input[type=radio]+label span.llms-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;z-index:20;position:absolute;top:0;left:-2px;display:inline-block;width:24px;height:24px;border-radius:50%;cursor:pointer;vertical-align:middle;-webkit-box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.5) 0 0 0 1px;box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.5) 0 0 0 1px;background:#efefef;background-image:radial-gradient(ellipse at center, #bb231c 0%, #bb231c 40%, #efefef 45%);background-repeat:no-repeat;-webkit-transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);transition:background-position .15s cubic-bezier(0.8, 0, 1, 1)}.llms-option input[type=radio]:checked+label span.llms-radio{-webkit-transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1)}.llms-option input[type=radio]+label span.llms-radio{background-position:-24px 0}.llms-option input[type=radio]:checked+label span.llms-radio{background-position:0 0}.llms-option input[type=submit]{border:none;background:#bb231c;color:#fff;font-size:20px;padding:10px 0;border-radius:3px;cursor:pointer;width:100%}.llms-styled-text{padding:14px 0}.llms-notice-box{border-radius:3px;z-index:10;margin:10px 0;padding:15px 20px;border:1px solid #ccc;list-style-type:none;width:100%;overflow:auto}.llms-notice-box input[type=text]{height:auto}.llms-notice-box .col-1-1{width:100%}.llms-notice-box .col-1-1 input[type=text]{width:100%}.llms-notice-box .col-1-2{width:50%;float:left}@media screen and (max-width: 768px){.llms-notice-box .col-1-2{width:100%}}.llms-notice-box .col-1-3{width:33%;float:left;margin-right:10px}.llms-notice-box .col-1-4{width:25%;float:left;margin-right:10px}@media screen and (max-width: 768px){.llms-notice-box .col-1-4{width:100%}}.llms-notice-box .col-1-6{width:16.6%;float:left;margin-right:10px}.llms-notice-box .col-1-8{width:11%;float:right}.llms-notice-box .llms-pad-right{padding-right:10px}@media screen and (max-width: 768px){.llms-notice-box .llms-pad-right{padding-right:0}}input[type=text].cc_cvv,#cc_cvv{margin-right:0;width:23%;float:right}.llms-clear-box{border-radius:3px;z-index:10;margin:10px 0;padding:15px 20px;list-style-type:none;width:100%;overflow:auto}.llms-price-label{font-weight:normal}.llms-final-price{font-weight:bold;float:right}.llms-center-content{text-align:center}.llms-input-text{background-color:#fff;border:1px solid #ddd;color:#333;font-size:18px;font-weight:300;padding:16px;width:100%}.llms-price{margin-bottom:0;font-weight:bold}.llms-price-loop{margin-bottom:0;font-weight:bold}.courses .entry{padding:0}.list-view .site-content .llms-course-list .hentry,.list-view .site-content .llms-membership-list .hentry{border-top:0;padding-top:0}.llms-content{width:100%}.llms-lesson-button-wrapper{width:100%;display:block;clear:both;text-align:center}.llms-template-wrapper{width:100%;display:block;clear:both}.llms-button-wrapper{width:100%;display:block;clear:both;text-align:center}.llms-styled-select{border:1px solid #ccc;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px;overflow:hidden;position:relative}.llms-styled-select,.llms-styled-select select{width:100%}select:focus{outline:none}.llms-styled-select select{height:34px;padding:5px 0 5px 5px;background:rgba(0,0,0,0);border:none;-webkit-appearance:none;font-size:16px;color:#444}@-moz-document url-prefix(){.--ms-styled-select select{width:110%}}.llms-styled-select .fa-sort-desc{position:absolute;top:0;right:12px;font-size:24px;color:#ccc}select::-ms-expand{display:none}_:-o-prefocus .llms-styled-select,.selector .llms-styled-select{background:none}.llms-form-item-wrapper{margin-bottom:1em}.llms-progress-circle{position:relative;width:200px;height:200px;float:left}.llms-progress-circle-count{top:27%;position:absolute;width:94%;text-align:center;color:#666;font-size:44px}.llms-progress-circle svg{position:absolute;width:200px;height:200px}.llms-progress-circle circle{fill:rgba(0,0,0,0)}svg .llms-background-circle{fill:rgba(0,0,0,0);stroke-width:10px;stroke:#f1f2f1;stroke-dasharray:430}svg .llms-animated-circle{fill:rgba(0,0,0,0);stroke-width:10px;stroke:#e5554e;stroke-dasharray:430;stroke-dashoffset:410}.llms-widget-syllabus .llms-lesson.current-lesson .lesson-title{font-weight:700}.llms-widget-syllabus .section-header{display:-webkit-box;display:-ms-flexbox;display:flex;gap:5px}.llms-widget-syllabus .section-header .llms-collapse-caret{text-align:left;width:14px}.llms-widget-syllabus .llms-lesson-complete,.llms-widget-syllabus .lesson-complete-placeholder{font-size:18px;margin-right:5px;color:#ccc}.llms-widget-syllabus .llms-lesson-complete.done,.llms-widget-syllabus .lesson-complete-placeholder.done{color:#466dd8}.llms-widget-syllabus .section-title{font-weight:bold}.llms-widget-syllabus .lesson-title a{text-decoration:underline}.llms-widget-syllabus .lesson-title.done a{color:#666;text-decoration:line-through}.llms-widget-syllabus ul{list-style-type:none;margin:0;padding:0}.llms-widget-syllabus ul li{list-style-type:none;margin:0 0 10px 0}.llms-widget-syllabus ul li ul{margin:0 0 15px 0}.llms-widget-syllabus ul li ul li{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 0 10px 0;padding:0}.llms-remove-coupon{float:right}.llms-lesson-preview.is-complete .llms-lesson-link-locked{padding-left:75px}.llms-lesson-tooltip{display:none;position:absolute;color:#000;background-color:silver;padding:.25em;border-radius:2px;z-index:100;top:0;left:50%;text-align:center;-webkit-transform:translateX(-50%) translateY(-100%);transform:translateX(-50%) translateY(-100%)}.llms-lesson-tooltip:after{content:"";width:0;height:0;border-top:8px solid silver;border-left:8px solid rgba(0,0,0,0);border-right:8px solid rgba(0,0,0,0);position:absolute;bottom:-8px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.llms-lesson-tooltip.active{display:inline-block}.llms-favorite-wrapper{cursor:pointer}.llms-favorite-wrapper .fa-heart{color:#ef476f}.llms-has-favorite .llms-parent-course-link{display:inline-block;margin-bottom:20px}.llms-has-favorite .llms-parent-course-link+.llms-favorite-wrapper{float:right;margin:0}.llms-syllabus-wrapper .llms-has-favorite{text-align:left}.llms-syllabus-wrapper .llms-has-favorite .llms-favorite-wrapper{display:inline-block}.llms-loop-list{list-style:none;margin:0 -10px;padding:0}@media all and (min-width: 600px){.llms-loop-list.cols-1 .llms-loop-item{width:100%}.llms-loop-list.cols-2 .llms-loop-item{width:50%}.llms-loop-list.cols-3 .llms-loop-item{width:33.3333333333%}.llms-loop-list.cols-4 .llms-loop-item{width:25%}.llms-loop-list.cols-5 .llms-loop-item{width:20%}.llms-loop-list.cols-6 .llms-loop-item{width:16.6666666667%}}.llms-loop-item{float:left;list-style:none;margin:0;padding:0;width:100%}.llms-loop-item-content{background:#fefefe;border:1px solid #dedede;border-radius:6px;overflow:hidden;padding-bottom:15px;margin:10px}.llms-loop-item-content .llms-loop-link{color:#010101;display:block;text-decoration:none}.llms-loop-item-content .llms-loop-link:visited{color:#010101}.llms-loop-item-content .llms-featured-image{display:block;max-width:100%}.llms-loop-item-content .llms-loop-title{color:#010101;margin:15px 0}.llms-loop-item-content .llms-loop-title:hover{color:#466dd8}.llms-loop-item-content .llms-meta,.llms-loop-item-content .llms-author,.llms-loop-item-content .llms-loop-title{padding:0 15px}.llms-loop-item-content .llms-meta,.llms-loop-item-content .llms-author{color:#444;display:block;font-size:14px;margin-bottom:10px}.llms-loop-item-content .llms-meta:last-child,.llms-loop-item-content .llms-author:last-child{margin-bottom:0}.llms-loop-item-content .llms-author{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:5px}.llms-loop-item-content .llms-featured-img-wrap{overflow:hidden}.llms-loop-item-content p{margin-bottom:0}.llms-loop-item-content .llms-progress{margin:0;height:.4em}.llms-loop-item-content .llms-progress .progress__indicator{display:none}.llms-loop-item-content .llms-progress .llms-progress-bar{background-color:#f6f6f6;right:0;top:0}.llms-meta-info{margin:40px 0}.llms-meta-info .llms-meta-title{margin:0}.llms-meta-info .llms-meta p{margin-bottom:0}.llms-meta-info .llms-meta span{font-weight:700}.llms-course-progress{margin:40px auto;max-width:480px;text-align:center}.llms-syllabus-wrapper{margin:20px 0;text-align:left}.llms-syllabus-wrapper .llms-section-title{margin:40px 0 10px}.llms-syllabus-wrapper .llms-section-title+.llms-lesson-preview{border-top:1px solid #dedede}.llms-lesson-preview{border-right:1px solid #dedede;border-bottom:1px solid #dedede;border-left:1px solid #dedede;display:block;margin:0;max-width:100%;position:relative}.llms-lesson-preview .llms-lesson-link{background:#fefefe;color:#010101;display:block;padding:15px;text-decoration:none;-webkit-transition:background-color .3s ease;transition:background-color .3s ease}.llms-lesson-preview .llms-lesson-link:hover{background:#eaeaea}.llms-lesson-preview .llms-lesson-link:visited{color:#212121}.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked{background:#efefef;color:#666}.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked:hover{background:#dedede}.llms-lesson-preview .llms-lesson-link .llms-lesson-preview-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.llms-lesson-preview .llms-lesson-thumbnail{margin-bottom:15px}.llms-lesson-preview .llms-lesson-thumbnail img{display:block;height:auto;width:100%}.llms-lesson-preview .llms-lesson-title{font-weight:700;margin:0 auto 5px}.llms-lesson-preview .llms-lesson-title:last-child{margin-bottom:0}.llms-lesson-preview .llms-lesson-excerpt{margin-top:5px}.llms-lesson-preview .llms-lesson-excerpt p{margin:0 0 10px 0;padding:0}.llms-lesson-preview .llms-lesson-excerpt p:last-of-type{margin:0}.llms-lesson-preview .llms-main{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.llms-lesson-preview .llms-extra{min-width:50px;text-align:right}.llms-lesson-preview .llms-lesson-counter,.llms-lesson-preview .llms-free-lesson-svg,.llms-lesson-preview .llms-lesson-complete,.llms-lesson-preview .llms-lesson-complete-placeholder{display:block}.llms-lesson-preview.is-free .llms-lesson-complete,.llms-lesson-preview.is-complete .llms-lesson-complete{color:#466dd8}.llms-lesson-preview.is-complete .llms-lesson-title:not(.llms-student-dashboard .llms-lesson-title):not(.llms-course-navigation .llms-lesson-title){text-decoration:line-through}.llms-lesson-preview .llms-icon-free{background:#466dd8;border-radius:6px;color:#fefefe;display:inline-block;font-size:14px;font-weight:bold;line-height:1;padding:5px 8px 4px;white-space:nowrap}.llms-lesson-preview.is-incomplete .llms-lesson-complete{color:#cacaca}.llms-lesson-preview .llms-lesson-counter{font-size:16px;margin-bottom:5px}.llms-lesson-preview .llms-free-lesson-svg{fill:currentColor;height:23px;width:50px}.llms-course-navigation{display:-webkit-box;display:-ms-flexbox;display:flex;gap:20px}.llms-course-navigation .llms-prev-lesson,.llms-course-navigation .llms-next-lesson,.llms-course-navigation .llms-back-to-course{-webkit-box-flex:1;-ms-flex:1;flex:1}.llms-course-navigation .llms-prev-lesson+.llms-back-to-course{text-align:right}.llms-course-navigation .llms-next-lesson .llms-lesson-preview .llms-lesson-link{text-align:right}.llms-course-navigation .llms-lesson-preview{border:1px solid #dedede}.llms-course-navigation .llms-lesson-link{display:block}.llms-progress{clear:both;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;position:relative;height:1em;width:100%;margin:15px 0}.llms-progress .llms-progress-bar{background-color:#dedede;position:relative;height:.4em;top:.3em;width:100%}.llms-progress .progress-bar-complete{background-color:#ef476f;height:100%}.progress__indicator{float:right;text-align:right;height:1em;line-height:1em;margin-left:5px;white-space:nowrap}.llms-author .name{margin-left:5px}.llms-author .label{margin-left:5px}.llms-author .avatar{border-radius:50%}.llms-author .bio{margin-top:5px}.llms-instructor-info{margin:40px 0}.llms-instructor-info .llms-meta-title{margin:0}.llms-instructor-info .llms-instructors .llms-col:first-child .llms-author{margin-left:0}.llms-instructor-info .llms-instructors .llms-col:last-child .llms-author{margin-right:0}.llms-instructor-info .llms-instructors .llms-author{background:#fefefe;border:1px solid #dedede;border-top:4px solid #466dd8;border-bottom-right-radius:6px;border-bottom-left-radius:6px;color:#010101;text-align:center;margin:45px 0 0;padding:0 20px 20px}.llms-instructor-info .llms-instructors .llms-author .avatar{background:#466dd8;border:4px solid #466dd8;display:block;margin:-35px auto 10px}.llms-instructor-info .llms-instructors .llms-author .llms-author-info{display:block}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.name{font-weight:700}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.label{font-size:85%}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.bio{font-size:90%;margin-bottom:0}.llms_review{margin:20px 0px;padding:10px}.llms_review h5{font-size:17px;margin:3px 0px}.llms_review h6{font-size:13px}.llms_review p{font-size:15px}.review_box [type=text]{margin:10px 0px}.review_box h5{color:red;display:none}.review_box+.thank_you_box{display:none}.llms-notice{background:rgba(70,109,216,.3);border-color:#466dd8;border-style:solid;border-width:1px;border-radius:6px;padding:15px;margin-bottom:40px}.llms-notice a{color:inherit}.llms-notice p:last-child,.llms-notice ul:last-child{margin-bottom:0}.llms-notice li{list-style-type:none}.llms-notice.llms-debug{background:rgba(202,202,202,.3);border-color:#cacaca}.llms-notice.llms-error{background:rgba(187,35,28,.15);border-color:#bb231c}.llms-notice.llms-success{background:rgba(77,141,60,.15);border-color:#4d8d3c}.entry-content .llms-notice{margin:0 0 40px}.entry-content .llms-notice li{list-style-type:none}ul.llms-achievements-loop,.lifterlms ul.llms-achievements-loop,ul.llms-certificates-loop,.lifterlms ul.llms-certificates-loop{list-style-type:none;margin:0 -10px;padding:0}ul.llms-achievements-loop:before,ul.llms-achievements-loop:after,.lifterlms ul.llms-achievements-loop:before,.lifterlms ul.llms-achievements-loop:after,ul.llms-certificates-loop:before,ul.llms-certificates-loop:after,.lifterlms ul.llms-certificates-loop:before,.lifterlms ul.llms-certificates-loop:after{content:" ";display:table}ul.llms-achievements-loop:after,.lifterlms ul.llms-achievements-loop:after,ul.llms-certificates-loop:after,.lifterlms ul.llms-certificates-loop:after{clear:both}ul.llms-achievements-loop li.llms-achievement-loop-item,ul.llms-achievements-loop li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop li.llms-certificate-loop-item,ul.llms-certificates-loop li.llms-achievement-loop-item,ul.llms-certificates-loop li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop li.llms-certificate-loop-item{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;float:left;list-style-type:none;margin:0;padding:10px;width:100%}@media all and (min-width: 600px){ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item{width:100%}ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item{width:50%}ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item{width:33.3333333333%}ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item{width:25%}ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item,ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item,.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item{width:20%}}.llms-achievement,.llms-certificate{background:#fefefe;border:none;border-radius:12px;color:#010101;display:block;padding:20px 0;text-decoration:none;width:100%}.llms-achievement:hover,.llms-certificate:hover{background:#eaeaea}.llms-achievement .llms-achievement-img,.llms-certificate .llms-achievement-img{display:block;margin:0 auto;max-width:80%}.llms-achievement .llms-achievement-title,.llms-certificate .llms-achievement-title{color:#010101;font-size:16px;margin:0;padding:10px;text-align:center}.llms-achievement .llms-certificate-title,.llms-certificate .llms-certificate-title{color:#010101;font-size:16px;margin:0;padding:0 0 10px}.llms-achievement .llms-achievement-info,.llms-achievement .llms-achievement-date,.llms-certificate .llms-achievement-info,.llms-certificate .llms-achievement-date{display:none}.llms-achievement .llms-achievement-content,.llms-certificate .llms-achievement-content{padding:20px}.llms-achievement .llms-achievement-content:empty,.llms-certificate .llms-achievement-content:empty{padding:0}.llms-achievement .llms-achievement-content *:last-child,.llms-certificate .llms-achievement-content *:last-child{margin-bottom:0}.llms-certificate{border:4px double #dedede;padding:20px 10px;background:#fefefe;text-align:center}.llms-certificate:hover{background:#fefefe;border-color:#eaeaea}.llms-achievement-modal .llms-achievement{background:#fff}.llms-achievement-modal .llms-achievement-info{display:block}.llms-achievement-modal .llms-achievement-title{display:none}.llms-notification{background:#fefefe;-webkit-box-shadow:0 1px 2px -2px #333,0 1px 1px -1px #333;box-shadow:0 1px 2px -2px #333,0 1px 1px -1px #333;border-top:4px solid #466dd8;color:#010101;opacity:0;padding:12px;position:fixed;right:-800px;top:24px;-webkit-transition:opacity .4s ease-in-out,right .4s ease-in-out;transition:opacity .4s ease-in-out,right .4s ease-in-out;visibility:hidden;width:auto;z-index:9999999}.llms-notification:before,.llms-notification:after{content:" ";display:table}.llms-notification:after{clear:both}.llms-notification.visible{left:12px;opacity:1;right:12px;-webkit-transition:opacity .4s ease-in-out,right .4s ease-in-out,top .1s ease-in-out,background .2s ease-in-out,-webkit-transform .2s ease-in-out;transition:opacity .4s ease-in-out,right .4s ease-in-out,top .1s ease-in-out,background .2s ease-in-out,-webkit-transform .2s ease-in-out;transition:opacity .4s ease-in-out,right .4s ease-in-out,top .1s ease-in-out,background .2s ease-in-out,transform .2s ease-in-out;transition:opacity .4s ease-in-out,right .4s ease-in-out,top .1s ease-in-out,background .2s ease-in-out,transform .2s ease-in-out,-webkit-transform .2s ease-in-out;visibility:visible}.llms-notification.visible:hover .llms-notification-dismiss{opacity:1}.llms-notification .llms-notification-content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.llms-notification .llms-notification-main{-ms-flex-item-align:start;align-self:flex-start;-webkit-box-flex:4;-ms-flex:4;flex:4;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.llms-notification .llms-notification-title{color:#010101;font-size:18px;margin:0}.llms-notification .llms-notification-body{font-size:14px;line-height:1.4}.llms-notification .llms-notification-body p,.llms-notification .llms-notification-body li{font-size:inherit}.llms-notification .llms-notification-body p{margin-bottom:8px}.llms-notification .llms-notification-body p img{max-width:100%}.llms-notification .llms-notification-body .llms-mini-cert{background:#f6f6f6;border:1px solid #d0d0d0;-webkit-box-shadow:inset 0 0 0 3px #fefefe,inset 0 0 0 4px #dedede;box-shadow:inset 0 0 0 3px #fefefe,inset 0 0 0 4px #dedede;padding:16px 16px 24px;margin-top:12px}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert-title{font-size:16px;font-weight:700;margin:12px auto;text-align:center}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body{width:100%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(1){width:65%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(2){width:35%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(3){width:85%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(4){width:75%;margin-top:18px}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(5){width:70%}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(6){margin-left:12px;margin-bottom:-24px}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body>div:nth-child(7){width:65%;margin-right:12px}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-line{border-radius:2px;height:8px;background:#b0b0b0;background-image:-webkit-gradient(linear, left top, right top, from(#b0b0b0), color-stop(20%, #a0a0a0), color-stop(40%, #b0b0b0), to(#b0b0b0));background-image:linear-gradient(to right, #b0b0b0 0%, #a0a0a0 20%, #b0b0b0 40%, #b0b0b0 100%);background-repeat:no-repeat;margin:4px auto}.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-dot{background:#b0b0b0;border-radius:50%;display:inline-block;content:"";height:24px;width:24px}.llms-notification .llms-notification-body .llms-mini-cert p{margin-bottom:0}.llms-notification .llms-notification-aside{-ms-flex-item-align:start;align-self:flex-start;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-right:12px;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.llms-notification .llms-notification-icon{display:block;max-width:64px}.llms-notification .llms-notification-footer{border-top:1px solid #e5e5e5;font-size:12px;margin-top:12px;padding:6px 6px 0;text-align:right}.llms-notification .llms-notification-footer a{color:#010101}.llms-notification .llms-notification-dismiss{color:#bb231c;cursor:pointer;font-size:22px;position:absolute;right:10px;top:8px;-webkit-transition:opacity .4s ease-in-out;transition:opacity .4s ease-in-out}.llms-sd-notification-center .llms-notification-list,.llms-sd-notification-center .llms-notification-list-item{list-style-type:none;margin:0;padding:0}.llms-sd-notification-center .llms-notification-list-item:hover .llms-notification{background:#fcfcfc}.llms-sd-notification-center .llms-notification{opacity:1;border-top:1px solid #e5e5e5;left:auto;padding:24px;position:relative;right:auto;top:auto;visibility:visible;width:auto}.llms-sd-notification-center .llms-notification .llms-notification-aside{max-width:64px}.llms-sd-notification-center .llms-notification .llms-notification-footer{border:none;padding:0;text-align:left}.llms-sd-notification-center .llms-notification .llms-progress{display:none !important}.llms-sd-notification-center .llms-notification .llms-notification-date{color:#515151;float:left;margin-right:6px}.llms-sd-notification-center .llms-notification .llms-mini-cert{margin:0 auto;max-width:380px}@media all and (min-width: 480px){.llms-notification{right:-800px;width:360px}.llms-notification.visible{left:auto;right:24px}.llms-notification .llms-notification-dismiss{opacity:0}}.llms-pagination ul{list-style-type:none;margin:40px 0;padding:0}.llms-pagination ul li{float:left}.llms-pagination ul li a{border-bottom:0;text-decoration:none}.llms-pagination ul li .page-numbers{padding:.5em;text-decoration:underline}.llms-pagination ul li .page-numbers.current{text-decoration:none}.llms-tooltip{background:#2a2a2a;border-radius:4px;color:#fff;font-size:14px;line-height:1.2;opacity:0;top:-20px;padding:8px 12px;left:50%;position:absolute;pointer-events:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);-webkit-transition:opacity .2s ease,top .2s ease;transition:opacity .2s ease,top .2s ease;max-width:320px}.llms-tooltip.show{top:-28px;opacity:1}.llms-tooltip:after{bottom:-8px;border-top:8px solid #2a2a2a;border-left:8px solid rgba(0,0,0,0);border-right:8px solid rgba(0,0,0,0);content:"";height:0;left:50%;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:0}.webui-popover-title{font-size:initial;font-weight:initial;line-height:initial}.webui-popover-inverse .webui-popover-inner .close{color:#fff;opacity:.6;text-shadow:none}.webui-popover-inverse .webui-popover-inner .close:hover{opacity:.8}.webui-popover-inverse .webui-popover-content a{color:#fff;text-decoration:underline}.webui-popover-inverse .webui-popover-content a:hover{text-decoration:none}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results{margin:0;padding:0;list-style-type:none}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question{background:#efefef;border-radius:6px;margin:0 0 15px;position:relative;list-style-type:none}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer{color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:15px 35px 15px 15px;text-decoration:none}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct,.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect{background:rgba(192,86,33,.2)}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon,.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon{background-color:#c05621}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct{background:rgba(77,141,60,.15)}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon{background-color:#4d8d3c}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect{background:rgba(187,35,28,.15)}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon{background-color:#bb231c}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question pre{overflow:auto}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title{font-size:22px;margin:0;line-height:1.4}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points{line-height:1.4}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip{position:absolute;right:-12px;top:-2px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon{color:rgba(255,255,255,.65);border-radius:50%;font-size:30px;height:40px;line-height:40px;text-align:center;width:40px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main{display:none;padding:0 15px 15px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label{font-weight:700;margin:0 0 10px;padding:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers{margin:0;padding:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer{padding:0;margin:0 0 0 30px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child{list-style-type:none;margin-left:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img{height:auto;max-width:200px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section{border-top:2px solid rgba(255,255,255,.5);margin-top:20px;padding-top:20px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child{border-top:none;margin-top:0;padding-top:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers,.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers{list-style-type:none;margin:0;padding:0}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer,.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer{display:inline-block;list-style-type:none;margin:0;padding:5px}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed{opacity:.5}.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title{font-style:italic;font-weight:normal}.single-llms_quiz .llms-return{margin-bottom:10px}.single-llms_quiz .llms-quiz-results:before,.single-llms_quiz .llms-quiz-results:after{content:" ";display:table}.single-llms_quiz .llms-quiz-results:after{clear:both}.single-llms_quiz .llms-quiz-results .llms-donut.passing{color:#4d8d3c}.single-llms_quiz .llms-quiz-results .llms-donut.passing svg path{stroke:#4d8d3c}.single-llms_quiz .llms-quiz-results .llms-donut.pending{color:#555}.single-llms_quiz .llms-quiz-results .llms-donut.pending svg path{stroke:#555}.single-llms_quiz .llms-quiz-results .llms-donut.failing{color:#bb231c}.single-llms_quiz .llms-quiz-results .llms-donut.failing svg path{stroke:#bb231c}.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside,.single-llms_quiz .llms-quiz-results .llms-quiz-results-main,.single-llms_quiz .llms-quiz-results .llms-quiz-results-history{margin-bottom:20px}@media all and (min-width: 600px){.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside{float:left;width:220px}.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside+.llms-quiz-results-main{float:right;width:calc(100% - 300px)}.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside+.llms-quiz-results-main+.llms-quiz-results-history{float:right;width:calc(100% - 300px)}.single-llms_quiz .llms-quiz-results .llms-quiz-results-history{clear:right}}.single-llms_quiz ul.llms-quiz-meta-info{list-style-type:none;margin:0;padding:0}.single-llms_quiz ul.llms-quiz-meta-info li{list-style-type:none;margin:10px 0 0;padding:0}.single-llms_quiz ul.llms-quiz-meta-info{margin-bottom:10px}.single-llms_quiz .llms-quiz-buttons{margin-top:10px;text-align:left}.single-llms_quiz .llms-quiz-buttons form{display:inline-block}.llms-quiz-question-wrapper{min-height:140px;position:relative}.llms-quiz-question-wrapper .llms-quiz-loading{bottom:20px;left:0;position:absolute;right:0;text-align:center;z-index:1}.llms-quiz-question-wrapper .llms-question-image img{height:auto;max-width:100%}.llms-quiz-ui{position:relative}.llms-quiz-ui .llms-quiz-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 0 40px}.llms-quiz-ui .llms-progress{background-color:#dedede;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;height:8px;margin:0;overflow:hidden}.llms-quiz-ui .llms-progress .progress-bar-complete{-webkit-transition:width .3s ease-in;transition:width .3s ease-in;width:0}.llms-quiz-ui .llms-error{background:rgba(187,35,28,.15);border:1px solid #bb231c;border-radius:6px;margin:20px 0;padding:15px}.llms-quiz-ui .llms-error:before,.llms-quiz-ui .llms-error:after{content:" ";display:table}.llms-quiz-ui .llms-error:after{clear:both}.llms-quiz-ui .llms-error a{color:#bb231c;float:right;font-size:22px;line-height:1;text-decoration:none}.llms-quiz-ui .llms-quiz-counter{display:none;color:#6a6a6a;float:right;font-size:18px}.llms-quiz-ui .llms-quiz-counter .llms-sep{margin:0 5px}.llms-quiz-ui .llms-quiz-nav{margin-top:20px}.llms-quiz-ui .llms-quiz-nav button{margin:0 10px 0 0}.llms-question-wrapper .llms-question-text{font-size:30px;font-weight:400;margin-bottom:15px}.llms-question-wrapper ol.llms-question-choices{list-style-type:none;margin:0;padding:0}.llms-question-wrapper ol.llms-question-choices li.llms-choice{border-bottom:1px solid #e8e8e8;margin:0;padding:0;position:relative}.llms-question-wrapper ol.llms-question-choices li.llms-choice:last-child{border-bottom:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture{border-bottom:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture label{display:inline-block;padding:0}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-marker{bottom:10px;margin:0;position:absolute;right:10px}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image{margin:2px;padding:20px;-webkit-transition:background .4s ease;transition:background .4s ease}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image img{display:block;height:auto;width:100%}.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture input:checked~.llms-choice-image{background:#efefef}.llms-question-wrapper ol.llms-question-choices li.llms-choice input{display:none;left:0;pointer-events:none;position:absolute;top:0;visibility:hidden}.llms-question-wrapper ol.llms-question-choices li.llms-choice label{display:block;margin:0;padding:10px 20px;position:relative}.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .iterator{display:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .fa{display:inline}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker{background:#fefefe;color:#010101;display:inline-block;font-size:20px;height:40px;line-height:40px;margin-right:10px;text-align:center;-webkit-transition:all .2s ease;transition:all .2s ease;vertical-align:middle;width:40px}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker .fa{display:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--lister,.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--checkbox{border-radius:4px}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--radio{border-radius:50%}.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked+.llms-marker{background:#ef476f;color:#fff}.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked+.llms-marker .iterator{display:none}.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked+.llms-marker .fa{display:inline}.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-choice-text{display:inline-block;font-size:18px;font-weight:400;line-height:1.6;margin:0;padding:0;vertical-align:middle;width:calc(100% - 60px)}.llms-quiz-timer{background:#fff;border:1px solid #4d8d3c;border-radius:4px;color:#4d8d3c;float:right;font-size:18px;line-height:1;margin-left:20px;padding:8px 12px;position:relative;white-space:nowrap;z-index:1}.llms-quiz-timer.color-half{border-color:#c05621;color:#c05621}.llms-quiz-timer.color-empty{border-color:#bb231c;color:#bb231c}.llms-quiz-timer .llms-tiles{display:inline-block;margin-left:5px}.voucher-expand{display:none}@media all and (min-width: 600px){.llms-access-plans.cols-1 .llms-access-plan{width:100%}.llms-access-plans.cols-2 .llms-access-plan{width:50%}.llms-access-plans.cols-3 .llms-access-plan{width:33.3333333333%}.llms-access-plans.cols-4 .llms-access-plan{width:25%}.llms-access-plans.cols-5 .llms-access-plan{width:20%}}.llms-free-enroll-form{margin-bottom:0}.llms-access-plan{-webkit-box-sizing:border-box;box-sizing:border-box;float:left;text-align:center;width:100%}.llms-access-plan .llms-access-plan-content,.llms-access-plan .llms-access-plan-footer{background:#f1f1f1}.llms-access-plan.featured .llms-access-plan-featured{background:#466dd8;border-top-left-radius:6px;border-top-right-radius:6px}.llms-access-plan.featured .llms-access-plan-content{border-radius:0}.llms-access-plan.featured .llms-access-plan-title{border-top-left-radius:0;border-top-right-radius:0}.llms-access-plan.featured .llms-access-plan-footer,.llms-access-plan.featured .llms-access-plan-content{border-left:3px solid #466dd8;border-right:3px solid #466dd8}.llms-access-plan.featured .llms-access-plan-footer{border-bottom-color:#466dd8}.llms-access-plan.on-sale .price-regular{text-decoration:line-through}.llms-access-plan.on-sale .price-regular .lifterlms-price{font-weight:400}.llms-access-plan .stamp{background:#466dd8;border-radius:6px;color:#fefefe;display:inline-block;font-size:14px;font-style:normal;font-weight:bold;line-height:1;padding:5px 8px 4px}.llms-access-plan-featured{color:#fff;font-size:14px;font-weight:700;letter-spacing:1px;margin:0 2px 0 2px;padding:5px 0 0}.llms-access-plan-content{border-top-right-radius:6px;border-top-left-radius:6px;margin:0 2px 0;overflow:hidden}.llms-access-plan-content .llms-access-plan-pricing{color:#010101;padding:20px 0 0}.llms-access-plan-title{background:#466dd8;color:#fefefe;margin:0;padding:10px 15px}.llms-access-plan-pricing .llms-price-currency-symbol{font-size:14px;vertical-align:top}.llms-access-plan-price .lifterlms-price{font-weight:700}.llms-access-plan-price.sale{padding:5px 0;border-top:1px solid #d0d0d0;border-bottom:1px solid #d0d0d0}.llms-access-plan-trial,.llms-access-plan-schedule,.llms-access-plan-sale-end,.llms-access-plan-expiration{font-size:16px}.llms-access-plan-description{color:#010101;font-size:16px;padding:10px 10px 0}.llms-access-plan-description ul{margin:0}.llms-access-plan-description ul li{border-bottom:1px solid #d0d0d0;list-style-type:none}.llms-access-plan-description ul li:last-child{border-bottom:none}.llms-access-plan-description div:last-child,.llms-access-plan-description img:last-child,.llms-access-plan-description p:last-child,.llms-access-plan-description ul:last-child,.llms-access-plan-description li:last-child{margin-bottom:0}.llms-access-plan-restrictions{margin-top:20px}.llms-access-plan-restrictions .stamp{vertical-align:baseline}.llms-access-plan-restrictions ul{margin:5px 0 0 0;padding:0}.llms-access-plan-restrictions ul li{font-size:14px;list-style-type:none;margin:0;padding:0}.llms-access-plan-restrictions a{color:#c05621}.llms-access-plan-restrictions a:hover{color:#f67d28}.llms-access-plan-footer{border-bottom:3px solid #f1f1f1;border-bottom-left-radius:6px;border-bottom-right-radius:6px;padding:15px;margin:0 2px 2px 2px}.llms-access-plan-footer .button{display:inline-block}.llms-access-plan-footer .llms-access-plan-pricing{padding:0 0 10px}.webui-popover-content .llms-members-only-restrictions{text-align:center}.webui-popover-content .llms-members-only-restrictions ul,.webui-popover-content .llms-members-only-restrictions ol,.webui-popover-content .llms-members-only-restrictions li,.webui-popover-content .llms-members-only-restrictions p{margin:0;padding:0}.webui-popover-content .llms-members-only-restrictions ul,.webui-popover-content .llms-members-only-restrictions ol,.webui-popover-content .llms-members-only-restrictions li{list-style-type:none}.webui-popover-content .llms-members-only-restrictions li{padding:8px 0;border-top:1px solid #3b3b3b}.webui-popover-content .llms-members-only-restrictions li:first-child{border-top:none}.webui-popover-content .llms-members-only-restrictions li a{display:block}.llms-checkout-wrapper .llms-person-login-form-wrapper{margin-bottom:40px}.llms-checkout-wrapper form.llms-login{display:none}.llms-checkout-wrapper .llms-form-heading{margin:0 0 20px}.llms-checkout{position:relative}.llms-checkout-cols-2.llms-col-2 section{background-color:#fefefe;border:1px solid #ccc;border-radius:12px;padding:20px}.llms-checkout-cols-2.llms-col-2 section .llms-form-heading{padding:0}@media all and (min-width: 800px){.llms-checkout-cols-2 .llms-checkout-col{float:left}.llms-checkout-cols-2 .llms-checkout-col.llms-col-1{margin-right:20px;width:calc(58% - 20px)}.llms-checkout-cols-2 .llms-checkout-col.llms-col-2{margin-left:20px;width:calc(42% - 20px)}.llms-checkout-cols-2 .llms-checkout-col.llms-col-2 button{width:100%}}.llms-checkout-section{margin-bottom:40px;position:relative}.llms-checkout-section-content.llms-form-fields{margin:0px}.llms-checkout-section-content .llms-label{font-weight:400}.llms-checkout-section-content .llms-order-summary{list-style-type:none;margin:0;padding:0}.llms-checkout-section-content .llms-order-summary li{list-style-type:none;margin:0 0 15px 0}.llms-checkout-section-content .llms-order-summary :not(.llms-label){font-weight:700}.llms-checkout-section-content .llms-order-summary li.llms-pricing.on-sale .price-regular,.llms-checkout-section-content .llms-order-summary li.llms-pricing.has-coupon .price-regular{text-decoration:line-through}.llms-checkout-section-content .llms-coupon-wrapper{border-top:1px solid #dedede;margin-top:20px;padding-top:20px}.llms-checkout-section-content .llms-coupon-wrapper .llms-coupon-entry{display:none;margin-top:20px}.llms-form-field.llms-payment-gateway-option{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.llms-form-field.llms-payment-gateway-option label+span.llms-description{display:inline-block;margin-left:5px}.llms-form-field.llms-payment-gateway-option .llms-description a{border:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.llms-form-field.llms-payment-gateway-option .llms-description img{display:inline;max-height:22px;vertical-align:middle}.llms-checkout-wrapper ul.llms-payment-gateways{margin:5px 0 0;padding:0}ul.llms-payment-gateways{list-style-type:none}ul.llms-payment-gateways li:last-child:after{border-bottom:1px solid #dedede;content:"";display:block;margin:20px 0}ul.llms-payment-gateways .llms-payment-gateway{margin-bottom:30px;list-style-type:none}ul.llms-payment-gateways .llms-payment-gateway:last-child{margin-bottom:none}ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-payment-gateway-option label{font-weight:700}ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields{display:block}ul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields .llms-notice{margin-left:10px;margin-right:10px}ul.llms-payment-gateways .llms-payment-gateway .llms-form-field{padding-bottom:0}ul.llms-payment-gateways .llms-gateway-description{margin-left:40px}ul.llms-payment-gateways .llms-gateway-fields{display:none;margin:5px 0 20px}ul.llms-payment-gateways .llms-payment-gateway-error{padding:0 10px}.llms-checkout-confirm{margin:0}.llms-payment-method{margin:10px 10px 0}.llms-gateway-description p{font-size:14px;font-style:italic;margin:0}.llms-form-fields{-webkit-box-sizing:border-box;box-sizing:border-box}.llms-form-fields *{-webkit-box-sizing:border-box;box-sizing:border-box}.llms-form-fields.flush .llms-form-field{padding:0 0 20px}.llms-form-fields label:not(.llms-field-html label){font-weight:700}.llms-form-fields .wp-block-columns,.llms-form-fields .wp-block-column{margin-bottom:0}.llms-form-heading{padding:0 10px 10px}.llms-form-field{float:left;padding:0 10px 20px;position:relative;width:100%}.llms-form-field label:empty:after{content:" "}.llms-form-field [type=text],.llms-form-field [type=password],.llms-form-field [type=email],.llms-form-field [type=url],.llms-form-field [type=tel],.llms-form-field [type=number]{background-color:#fefefe;background-clip:padding-box;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;line-height:1;padding:8px 12px;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;width:100%}.llms-form-field input:focus,.llms-form-field input:focus-visible{border-color:#6888df;outline:thin solid}.llms-form-field select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-color:#fefefe;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#010101;padding:8px 12px;margin:0;width:100%;font-family:inherit;font-size:16px;cursor:inherit;line-height:1.6;z-index:1;outline:none;background-repeat:no-repeat;background-image:linear-gradient(45deg, transparent 50%, currentcolor 50%),linear-gradient(135deg, currentcolor 50%, transparent 50%);background-position:right 15px top 1.3rem,right 10px top 1.3rem;background-size:5px 5px,5px 5px}.llms-form-field select::-ms-expand{display:none}.llms-form-field select:focus{border:1px solid #6888df;outline:thin solid}.llms-form-field.valid input[type=date],.llms-form-field.valid input[type=time],.llms-form-field.valid input[type=datetime-local],.llms-form-field.valid input[type=week],.llms-form-field.valid input[type=month],.llms-form-field.valid input[type=text],.llms-form-field.valid input[type=email],.llms-form-field.valid input[type=url],.llms-form-field.valid input[type=password],.llms-form-field.valid input[type=search],.llms-form-field.valid input[type=tel],.llms-form-field.valid input[type=number],.llms-form-field.valid textarea,.llms-form-field.valid select{background:rgba(131,195,115,.3);border-color:#83c373}.llms-form-field.error input[type=date],.llms-form-field.error input[type=time],.llms-form-field.error input[type=datetime-local],.llms-form-field.error input[type=week],.llms-form-field.error input[type=month],.llms-form-field.error input[type=text],.llms-form-field.error input[type=email],.llms-form-field.error input[type=url],.llms-form-field.error input[type=password],.llms-form-field.error input[type=search],.llms-form-field.error input[type=tel],.llms-form-field.error input[type=number],.llms-form-field.error textarea,.llms-form-field.error select,.llms-form-field.invalid input[type=date],.llms-form-field.invalid input[type=time],.llms-form-field.invalid input[type=datetime-local],.llms-form-field.invalid input[type=week],.llms-form-field.invalid input[type=month],.llms-form-field.invalid input[type=text],.llms-form-field.invalid input[type=email],.llms-form-field.invalid input[type=url],.llms-form-field.invalid input[type=password],.llms-form-field.invalid input[type=search],.llms-form-field.invalid input[type=tel],.llms-form-field.invalid input[type=number],.llms-form-field.invalid textarea,.llms-form-field.invalid select{background:rgba(187,35,28,.3);border-color:#bb231c}.llms-form-field.llms-visually-hidden-field{display:none}.llms-form-field.align-right{text-align:right}@media screen and (min-width: 600px){.llms-form-field.llms-cols-1{width:8.3333333333%}.llms-form-field.llms-cols-2{width:16.6666666667%}.llms-form-field.llms-cols-3{width:25%}.llms-form-field.llms-cols-4{width:33.3333333333%}.llms-form-field.llms-cols-5{width:41.6666666667%}.llms-form-field.llms-cols-6{width:50%}.llms-form-field.llms-cols-7{width:58.3333333333%}.llms-form-field.llms-cols-8{width:66.6666666667%}.llms-form-field.llms-cols-9{width:75%}.llms-form-field.llms-cols-10{width:83.3333333333%}.llms-form-field.llms-cols-11{width:91.6666666667%}.llms-form-field.llms-cols-12{width:100%}}.llms-form-field.type-hidden{padding:0}.llms-form-field.type-radio input,.llms-form-field.type-radio label,.llms-form-field.type-checkbox input,.llms-form-field.type-checkbox label{display:inline-block;width:auto}.llms-form-field.type-radio input,.llms-form-field.type-checkbox input{margin-right:10px}.llms-form-field.type-radio label+.llms-description,.llms-form-field.type-checkbox label+.llms-description{display:block}.llms-form-field.type-radio:not(.is-group) input[type=radio]{position:absolute;opacity:0;visibility:none}.llms-form-field.type-radio:not(.is-group) label:before{background:#fafafa;background-position:-24px 0;background-repeat:no-repeat;border-radius:50%;-webkit-box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.35) 0 0 0 1px;box-shadow:rgba(255,255,255,.15) 0 1px 1px,inset rgba(0,0,0,.35) 0 0 0 1px;content:"";cursor:pointer;display:inline-block;height:22px;margin-right:5px;position:relative;-webkit-transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);transition:background-position .15s cubic-bezier(0.8, 0, 1, 1);top:-3px;vertical-align:middle;width:22px;z-index:2}.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked+label:before{-webkit-transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);transition:background-position .2s .15s cubic-bezier(0, 0, 0.2, 1);background-position:0 0;background-image:radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%)}.llms-form-field .llms-input-group{margin-top:5px}.llms-form-field .llms-input-group .llms-form-field{padding:0 0 5px 5px}.llms-form-field.type-reset button:not(.auto),.llms-form-field.type-button button:not(.auto),.llms-form-field.type-submit button:not(.auto){width:100%}.llms-form-field .llms-description{font-size:14px;font-style:italic;line-height:18px}.llms-form-field .llms-required{color:#bb231c;margin-left:4px}.llms-form-field input,.llms-form-field textarea,.llms-form-field select{width:100%;margin-bottom:5px}.llms-form-field .select2-container .select2-selection--single{height:auto;padding:4px 6px}.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow{height:100%}.llms-password-strength-meter{border:1px solid #dadada;display:none;font-size:10px;margin-top:-10px;padding:1px;position:relative;text-align:center}.llms-password-strength-meter:before{bottom:0;content:"";left:0;position:absolute;top:0;-webkit-transition:width .4s ease;transition:width .4s ease}.llms-password-strength-meter.mismatch,.llms-password-strength-meter.too-short,.llms-password-strength-meter.very-weak{border-color:#e35b5b}.llms-password-strength-meter.mismatch:before,.llms-password-strength-meter.too-short:before,.llms-password-strength-meter.very-weak:before{background:rgba(227,91,91,.25);width:25%}.llms-password-strength-meter.too-short:before{width:0}.llms-password-strength-meter.weak{border-color:#f78b53}.llms-password-strength-meter.weak:before{background:rgba(247,139,83,.25);width:50%}.llms-password-strength-meter.medium{border-color:#ffc733}.llms-password-strength-meter.medium:before{background:rgba(255,199,51,.25);width:75%}.llms-password-strength-meter.strong{border-color:#83c373}.llms-password-strength-meter.strong:before{background:rgba(131,195,115,.25);width:100%}.llms-password-strength-meter+.llms-description{display:block}.llms-widget-syllabus--collapsible .llms-section .section-header{cursor:pointer}.llms-widget-syllabus--collapsible .llms-section.llms-section--opened .llms-collapse-caret .fa-caret-right{display:none}.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-collapse-caret .fa-caret-down{display:none}.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-lesson{display:none}.llms-widget-syllabus--collapsible .llms-syllabus-footer{text-align:left}.llms-student-dashboard .llms-sd-title{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;gap:15px;margin:40px 0 20px 0}.llms-student-dashboard .llms-sd-title small{font-size:18px}.llms-student-dashboard .llms-sd-title small+a{text-decoration:none}.llms-student-dashboard .llms-sd-items{list-style-type:none;margin:0;padding:0}.llms-student-dashboard .llms-sd-item{display:inline-block;list-style-type:none;margin:5px 0;padding:0}.llms-student-dashboard .llms-sd-item:last-child .llms-sep{display:none}.llms-student-dashboard .llms-sd-item .llms-sep{color:#666;margin:0 5px}.llms-student-dashboard .llms-sd-section h2{margin:0 0 15px 0}.llms-student-dashboard .llms-sd-section .llms-sd-section-title{margin:0;padding:0}.llms-student-dashboard .llms-sd-section .llms-sd-section-footer{margin-top:10px}.llms-student-dashboard .llms-sd-section .llms-sd-section-footer .llms-button-secondary{display:inline-block}.llms-student-dashboard .orders-table{border:1px solid #dedede;border-spacing:0;width:100%}.llms-student-dashboard .orders-table thead{display:none}.llms-student-dashboard .orders-table thead th,.llms-student-dashboard .orders-table thead td{font-weight:700}@media all and (min-width: 600px){.llms-student-dashboard .orders-table thead{display:table-header-group}}.llms-student-dashboard .orders-table tbody tr:nth-child(odd) td,.llms-student-dashboard .orders-table tbody tr:nth-child(odd) th{background:#f9f9f9}.llms-student-dashboard .orders-table tbody tr:last-child{border-bottom-width:0}.llms-student-dashboard .orders-table tfoot tr{background:#f9f9f9}.llms-student-dashboard .orders-table tfoot th,.llms-student-dashboard .orders-table tfoot td{padding:10px;text-align:right}.llms-student-dashboard .orders-table tfoot th:last-child,.llms-student-dashboard .orders-table tfoot td:last-child{border-bottom-width:0}.llms-student-dashboard .orders-table th{font-weight:700}.llms-student-dashboard .orders-table th,.llms-student-dashboard .orders-table td{border-color:#dedede;border-style:solid;border-width:0;display:block;padding:15px 20px;text-align:center}.llms-student-dashboard .orders-table th .llms-button-primary,.llms-student-dashboard .orders-table td .llms-button-primary{display:inline-block}.llms-student-dashboard .orders-table th:last-child,.llms-student-dashboard .orders-table td:last-child{border-bottom-width:1px}.llms-student-dashboard .orders-table th:before,.llms-student-dashboard .orders-table td:before{content:attr(data-label)}@media all and (min-width: 600px){.llms-student-dashboard .orders-table th,.llms-student-dashboard .orders-table td{border-bottom-width:1px;display:table-cell;text-align:left}.llms-student-dashboard .orders-table th:first-child,.llms-student-dashboard .orders-table td:first-child{width:220px}.llms-student-dashboard .orders-table th:before,.llms-student-dashboard .orders-table td:before{display:none}}@media all and (min-width: 600px){.llms-student-dashboard .orders-table.transactions th:first-child{width:auto}}.llms-student-dashboard .llms-status{border-radius:6px;display:inline-block;font-size:13px;font-weight:700;line-height:1.4;padding:2px 6px;vertical-align:middle}.llms-student-dashboard .llms-status.llms-size--large{font-size:105%;padding:6px 12px}.llms-student-dashboard .llms-status.llms-active,.llms-student-dashboard .llms-status.llms-completed,.llms-student-dashboard .llms-status.llms-pass,.llms-student-dashboard .llms-status.llms-txn-succeeded{color:#4d8d3c;background-color:rgba(77,141,60,.15)}.llms-student-dashboard .llms-status.llms-fail,.llms-student-dashboard .llms-status.llms-failed,.llms-student-dashboard .llms-status.llms-expired,.llms-student-dashboard .llms-status.llms-cancelled,.llms-student-dashboard .llms-status.llms-txn-failed{color:#bb231c;background-color:rgba(187,35,28,.15)}.llms-student-dashboard .llms-status.llms-incomplete,.llms-student-dashboard .llms-status.llms-on-hold,.llms-student-dashboard .llms-status.llms-pending,.llms-student-dashboard .llms-status.llms-pending-cancel,.llms-student-dashboard .llms-status.llms-refunded,.llms-student-dashboard .llms-status.llms-txn-pending,.llms-student-dashboard .llms-status.llms-txn-refunded{color:#c05621;background-color:rgba(192,86,33,.15)}.llms-student-dashboard .order-title .llms-status{font-size:18px}.llms-student-dashboard .llms-person-form-wrapper .llms-change-password{display:none}@media all and (min-width: 600px){.llms-student-dashboard .order-primary{float:left;width:68%}}@media all and (min-width: 600px){.llms-student-dashboard .order-secondary{float:left;width:32%}}.llms-student-dashboard .order-secondary form{margin-bottom:0}@media all and (min-width: 600px){.llms-student-dashboard .llms-view-order.llms-stack-cols .order-primary,.llms-student-dashboard .llms-view-order.llms-stack-cols .order-secondary{float:none;width:100%}}.llms-student-dashboard .llms-switch-payment-source .llms-notice,.llms-student-dashboard .llms-switch-payment-source .entry-content .llms-notice{margin-left:10px;margin-right:10px}.llms-student-dashboard .llms-switch-payment-source-main{border:none;display:none;margin:0}.llms-student-dashboard .llms-switch-payment-source-main ul.llms-payment-gateways{padding:10px 15px 0;margin:0}.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method,.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary{padding:0 25px 10px;margin:0;list-style-type:none}.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method li,.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary li{list-style-type:none}.llms-student-dashboard.dashboard .llms-sd-section{border:1px solid #dedede;border-radius:6px;padding:20px;margin-bottom:40px}.llms-student-dashboard .llms-loop-list{margin:0 -10px}.llms-sd-grades .llms-table .llms-progress{display:block;margin:0}.llms-sd-grades .llms-table .llms-progress .llms-progress-bar{top:0;height:1.4em}.llms-sd-grades .llms-table .llms-progress .progress__indicator{font-size:1em;position:relative;right:.4em;top:.2em;z-index:1}.llms-table.llms-single-course-grades tbody tr:first-child td,.llms-table.llms-single-course-grades tbody tr:first-child th{background-color:#eaeaea}.llms-table.llms-single-course-grades th{font-weight:400;text-align:left}.llms-table.llms-single-course-grades td .llms-donut{display:inline-block;vertical-align:middle}.llms-table.llms-single-course-grades td .llms-status{margin-right:4px}.llms-table.llms-single-course-grades td .llms-donut+.llms-status{margin-left:4px}.llms-table.llms-single-course-grades th.llms-section_title{font-size:110%;font-weight:700}.llms-table.llms-single-course-grades td.llms-lesson_title{max-width:40%}.llms-table.llms-single-course-grades td.llms-associated_quiz .llms-donut{display:inline-block;margin-right:5px;vertical-align:middle}.llms-table.llms-single-course-grades td.llms-lesson_title a[href="#"]{pointer-events:none}.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"]{color:inherit;position:relative}.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] .llms-tooltip{max-width:380px;width:380px}.llms-table.llms-single-course-grades td.llms-lesson_title a[href^="#"] .llms-tooltip.show{top:-54px}.llms-sd-widgets{display:-webkit-box;display:-ms-flexbox;display:flex}.llms-sd-widgets .llms-sd-widget{background:#fefefe;border:1px solid #dedede;border-bottom-right-radius:6px;border-bottom-left-radius:6px;-webkit-box-flex:1;-ms-flex:1;flex:1;margin:10px 10px 20px;padding:0 0 20px}.llms-sd-widgets .llms-sd-widget:first-child{margin-left:0}.llms-sd-widgets .llms-sd-widget:last-child{margin-right:0}.llms-sd-widgets .llms-sd-widget .llms-sd-widget-title{background:#466dd8;color:#fff;font-size:18px;line-height:1;margin:0 0 20px;padding:10px}.llms-sd-widgets .llms-sd-widget .llms-sd-widget-empty{font-size:14px;font-style:italic;opacity:.5;text-align:center}.llms-sd-widgets .llms-sd-widget .llms-donut{margin:0 auto}.llms-sd-widgets .llms-sd-widget .llms-sd-date{opacity:.8;text-align:center;font-size:22px;line-height:1.1}.llms-sd-widgets .llms-sd-widget .llms-sd-date span{display:block}.llms-sd-widgets .llms-sd-widget .llms-sd-date span.day{font-size:52px}.llms-sd-widgets .llms-sd-widget .llms-sd-date span.diff{font-size:12px;font-style:italic;margin-top:8px;opacity:.75}.llms-sd-widgets .llms-sd-widget .llms-achievement{background:rgba(0,0,0,0);margin:0 auto;max-width:120px}.llms-sd-widgets .llms-sd-widget .llms-achievement .llms-achievement-title{display:none}.redeem-voucher .form-row label{display:block;font-weight:700}.redeem-voucher .form-row input[type=text]{background-color:#fefefe;background-clip:padding-box;border:1px solid #999;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;line-height:1;padding:8px 12px;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.llms-sd-pagination{margin-top:24px}.llms-sd-pagination:before,.llms-sd-pagination:after{content:" ";display:table}.llms-sd-pagination:after{clear:both}.llms-sd-pagination .llms-button-secondary{display:inline-block}.llms-sd-pagination .llms-button-secondary.prev{float:left}.llms-sd-pagination .llms-button-secondary.next{float:right}.llms-sd-notification-center{background:#fefefe;border:1px solid #dedede;border-radius:6px;padding:20px}.llms-sd-notification-center .llms-notification-list-item .llms-notification{z-index:1}.llms-sd-notification-center .llms-notification-list-item .llms-notification:hover{background-color:inherit}.llms-table{border:1px solid #dedede;border-spacing:0;width:100%}.llms-table thead th,.llms-table thead td{font-weight:700}.llms-table tbody tr:nth-child(odd) td,.llms-table tbody tr:nth-child(odd) th{background:#f9f9f9}.llms-table tbody tr:last-child{border-bottom-width:0}.llms-table tfoot tr{background:#f9f9f9}.llms-table tfoot tr .llms-pagination .page-numbers{margin:0}.llms-table tfoot tr .llms-table-sort{text-align:right}.llms-table tfoot tr .llms-table-sort form,.llms-table tfoot tr .llms-table-sort select,.llms-table tfoot tr .llms-table-sort input,.llms-table tfoot tr .llms-table-sort button{margin:0}.llms-table th{font-weight:700}.llms-table th,.llms-table td{border-bottom:1px solid #dedede;padding:15px 20px}.llms-table th:first-child,.llms-table td:first-child{padding-left:12px}.llms-table th:last-child,.llms-table td:last-child{padding-right:12px}#page .llms-table tfoot label{display:inline}#page .llms-table tfoot select{height:auto}/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:"FontAwesome";src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{-webkit-filter:none;filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
+/*# sourceMappingURL=../maps/css/lifterlms.min.css.map */
diff --git a/assets/js/llms-admin-addons.js.map b/assets/js/llms-admin-addons.js.map
new file mode 100644
index 0000000000..7fbeb1908e
--- /dev/null
+++ b/assets/js/llms-admin-addons.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"js/llms-admin-addons.js","mappings":"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","sources":["webpack://lifterlms/./src/scss/admin-addons.scss?82ea","webpack://lifterlms/external window \"jQuery\"","webpack://lifterlms/external window [\"wp\",\"i18n\"]","webpack://lifterlms/webpack/bootstrap","webpack://lifterlms/webpack/runtime/compat get default export","webpack://lifterlms/webpack/runtime/define property getters","webpack://lifterlms/webpack/runtime/hasOwnProperty shorthand","webpack://lifterlms/webpack/runtime/make namespace object","webpack://lifterlms/./src/js/admin-addons.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport {};","module.exports = window[\"jQuery\"];","module.exports = window[\"wp\"][\"i18n\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * UI & UX for the Admin add-ons management screen\n *\n * @package LifterLMS/Scripts/Admin\n *\n * @since 3.22.0\n * @version 5.5.0\n */\n\nimport { _n, sprintf } from '@wordpress/i18n';\nimport $ from 'jquery';\nimport '../scss/admin-addons.scss';\n\n( function() {\n\t/**\n\t * Tracks current # of each bulk action to be run upon form submission\n\t *\n\t * @type {Object}\n\t */\n\tconst actions = {\n\t\tupdate: 0,\n\t\tinstall: 0,\n\t\tactivate: 0,\n\t\tdeactivate: 0,\n\t};\n\n\t/**\n\t * When the bulk action modal is closed, clear all existing staged actions\n\t *\n\t * @since 3.22.0\n\t */\n\t$( '.llms-bulk-close' ).on( 'click', function( e ) {\n\t\te.preventDefault();\n\t\t$( 'input.llms-bulk-check' ).filter( ':checked' ).prop( 'checked', false ).trigger( 'change' );\n\t} );\n\n\t/**\n\t * Update the UI and counters when a checkbox action is changed\n\t *\n\t * @since 3.22.0\n\t */\n\t$( 'input.llms-bulk-check' ).on( 'change', function() {\n\t\tconst action = $( this ).attr( 'data-action' );\n\n\t\tif ( $( this ).is( ':checked' ) ) {\n\t\t\tactions[ action ]++;\n\t\t} else {\n\t\t\tactions[ action ]--;\n\t\t}\n\n\t\tupdateUserInterface();\n\t} );\n\n\t/**\n\t * Updates the UI when bulk actions are changed.\n\t *\n\t * Shows # of each action to be applied & shows the form submission / cancel buttons\n\t *\n\t * @since 3.22.0\n\t * @since 5.5.0 Use `wp.i18n` functions in favor of `LLMS.l10n` and use `$.text()` in favor of `$.html()`.\n\t * Renamed from `update_ui()` to match coding standards.\n\t *\n\t * @return {void}\n\t */\n\tfunction updateUserInterface() {\n\t\tconst $el = $( '#llms-addons-bulk-actions' );\n\t\tif ( actions.update || actions.install || actions.activate || actions.deactivate ) {\n\t\t\t$el.addClass( 'active' );\n\t\t} else {\n\t\t\t$el.removeClass( 'active' );\n\t\t}\n\n\t\t$.each( actions, function( key, count ) {\n\t\t\tconst $desc = $el.find( '.llms-bulk-desc.' + key );\n\n\t\t\tlet text = '';\n\n\t\t\tif ( count ) {\n\t\t\t\t// Translators: %d = Number of add-ons to perform the specified action against.\n\t\t\t\ttext = sprintf( _n( '%d add-on', '%d add-ons', count, 'lifterlms' ), count );\n\t\t\t\t$desc.show();\n\t\t\t} else {\n\t\t\t\t$desc.hide();\n\t\t\t}\n\t\t\t$desc.find( 'span' ).text( text );\n\t\t} );\n\t}\n\n\t/**\n\t * Show the keys management dropdown on click of the \"My License Keys\" button\n\t *\n\t * @since 3.22.0\n\t */\n\t$( '#llms-active-keys-toggle' ).on( 'click', function() {\n\t\t$( '#llms-key-field-form' ).toggle();\n\t} );\n}() );\n"],"names":["_n","sprintf","$","actions","update","install","activate","deactivate","on","e","preventDefault","filter","prop","trigger","action","attr","is","updateUserInterface","$el","addClass","removeClass","each","key","count","$desc","find","text","show","hide","toggle"],"sourceRoot":""}
\ No newline at end of file
diff --git a/assets/js/llms-admin-award-certificate.js.map b/assets/js/llms-admin-award-certificate.js.map
new file mode 100644
index 0000000000..6578e5aa4f
--- /dev/null
+++ b/assets/js/llms-admin-award-certificate.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"js/llms-admin-award-certificate.js","mappings":"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","sources":["webpack://lifterlms/./src/js/util/award-certificate-button/create.js","webpack://lifterlms/./src/js/util/award-certificate-button/index.js","webpack://lifterlms/./src/js/util/award-certificate-button/message.js","webpack://lifterlms/./src/js/util/award-certificate-button/urls.js","webpack://lifterlms/./src/js/util/edit-certificate-title.js","webpack://lifterlms/./src/js/util/index.js","webpack://lifterlms/external window [\"llms\",\"components\"]","webpack://lifterlms/external window [\"llms\",\"utils\"]","webpack://lifterlms/external window [\"wp\",\"components\"]","webpack://lifterlms/external window [\"wp\",\"coreData\"]","webpack://lifterlms/external window [\"wp\",\"data\"]","webpack://lifterlms/external window [\"wp\",\"editor\"]","webpack://lifterlms/external window [\"wp\",\"element\"]","webpack://lifterlms/external window [\"wp\",\"i18n\"]","webpack://lifterlms/external window [\"wp\",\"url\"]","webpack://lifterlms/webpack/bootstrap","webpack://lifterlms/webpack/runtime/compat get default export","webpack://lifterlms/webpack/runtime/define property getters","webpack://lifterlms/webpack/runtime/hasOwnProperty shorthand","webpack://lifterlms/webpack/runtime/make namespace object","webpack://lifterlms/./src/js/admin-award-certificate.js"],"sourcesContent":["// WP deps.\nimport { store as coreStore } from '@wordpress/core-data';\nimport { dispatch } from '@wordpress/data';\n\n/**\n * Creates a new awarded certificate post for a given student with a specified parent template.\n *\n * @since 6.0.0\n *\n * @param {number} studentId WP_User ID.\n * @param {number} templateId WP_Post ID.\n * @return {Promise} A promise that resolves to the WP_Post object api response on success.\n */\nexport default function( studentId, templateId ) {\n\tconst { saveEntityRecord } = dispatch( coreStore );\n\n\treturn saveEntityRecord(\n\t\t'postType',\n\t\t'llms_my_certificate',\n\t\t{\n\t\t\tauthor: studentId,\n\t\t\tcertificate_template: templateId,\n\t\t\tstatus: 'draft',\n\t\t}\n\t);\n}\n","// WP Deps.\nimport { __ } from '@wordpress/i18n';\nimport { Button, Modal } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\n\n// LLMS Deps.\nimport { PostSearchControl, UserSearchControl } from '@lifterlms/components';\n\n// Internal Deps.\nimport createAward from './create';\nimport getMessage from './message';\nimport { getRedirectUrl, getScratchUrl } from './urls';\n\n/**\n * Button and modal interface for creating a draft certificate from a specified template for a specific student.\n *\n * @since 6.0.0\n *\n * @param {Object} params Component configuration object.\n * @param {string} params.modalTitle Title of the modal.\n * @param {string} params.buttonLabel Text of the button.\n * @param {boolean} params.isDisabled Whether or not the button is disabled.\n * @param {boolean} params.enableScratch When `true`, displays a \"Start from Scratch\" button that links to the awarded certificate editor page.\n * @param {boolean} params.selectStudent When `true`, displays a searchable select element to allow user selection of the user.\n * @param {boolean} params.selectTemplate When `true`, displays a searchable select element to allow user selection of the template.\n * @param {?number} params.studentId WP_User ID of the student to award the certificate to.\n * @param {?number} params.templateId WP_Post ID of the certificate template post to create the certificate from.\n * @return {WPElement} The component.\n */\nexport default function( {\n\tmodalTitle = __( 'Award a New Certificate', 'lifterlms' ),\n\tbuttonLabel = __( 'Award', 'lifterlms' ),\n\tisDisabled = false,\n\tenableScratch = true,\n\tselectStudent = true,\n\tselectTemplate = true,\n\tstudentId = null,\n\ttemplateId = null,\n} ) {\n\tconst [ isOpen, setIsOpen ] = useState( false ),\n\t\t[ isBusy, setIsBusy ] = useState( false ),\n\t\t[ currStudentId, setStudentId ] = useState( studentId ),\n\t\t[ currTemplateId, setTemplateId ] = useState( templateId ),\n\t\tcloseModal = () => setIsOpen( false ),\n\t\topenModal = () => setIsOpen( true ),\n\t\tisReady = currStudentId && currTemplateId,\n\t\tonClick = () => {\n\t\t\tsetIsBusy( true );\n\t\t\tcreateAward( currStudentId, currTemplateId ).then( ( { id } ) => {\n\t\t\t\twindow.location = getRedirectUrl( id );\n\t\t\t} );\n\t\t};\n\n\treturn (\n\t\t<>\n\t\t\t{ isOpen && (\n\t\t\t\t\n\n\t\t\t\t\t{ getMessage( selectStudent, selectTemplate ) }
\n\n\t\t\t\t\t{ selectStudent && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tconst id = obj?.id || null;\n\t\t\t\t\t\t\t\tsetStudentId( id );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ selectTemplate && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tconst id = obj?.id || null;\n\t\t\t\t\t\t\t\tsetTemplateId( id );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Create Draft' ) }\n\t\t\t\t\t\t \n\n\t\t\t\t\t\t{ enableScratch && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Start from Scratch', 'lifterlms' ) }\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Cancel', 'lifterlms' ) }\n\t\t\t\t\t\t \n\t\t\t\t\t
\n\t\t\t\t \n\t\t\t) }\n\t\t\t\n\t\t\t\t{ buttonLabel }\n\t\t\t \n\t\t>\n\t);\n}\n","import { __ } from '@wordpress/i18n';\n\n/**\n * Retrieves the message based on the selectors present in the modal.\n *\n * @since 6.0.0\n *\n * @param {boolean} selectStudent Whether or not the student selector is present.\n * @param {boolean} selectTemplate Whether or not the template selector is present.\n * @return {string} A message string.\n */\nexport default function( selectStudent, selectTemplate ) {\n\tlet msg = '';\n\tif ( selectStudent && selectTemplate ) {\n\t\tmsg = __( 'Create a new certificate award from the selected template for the selected student.', 'lifterlms' );\n\t} else if ( selectStudent && ! selectTemplate ) {\n\t\tmsg = __( 'Create a new certificate award from this template for the selected student.', 'lifterlms' );\n\t} else if ( ! selectStudent && selectTemplate ) {\n\t\tmsg = __( 'Create a new certificate award from the selected template for this student.', 'lifterlms' );\n\t}\n\treturn msg;\n}\n","// WP deps.\nimport { addQueryArgs } from '@wordpress/url';\n\n// LLMS deps.\nimport { getAdminUrl } from '@lifterlms/utils';\n\n/**\n * Retrieves the redirect URL for the newly created certificate.\n *\n * @since 6.0.0\n *\n * @param {number} post WP_Post ID.\n * @return {string} The edit post URL for awarded certificate draft.\n */\nexport function getRedirectUrl( post ) {\n\treturn addQueryArgs(\n\t\t`${ getAdminUrl() }/post.php`,\n\t\t{\n\t\t\tpost,\n\t\t\taction: 'edit',\n\t\t\tnewAwardMsg: 1,\n\t\t}\n\t);\n}\n\n/**\n * Retrieves the url for the \"Start from Scratch\" button.\n *\n * @since 6.0.0\n *\n * @param {?number} sid WP_User ID of the selected student.\n * @return {string} The URL.\n */\nexport function getScratchUrl( sid = null ) {\n\tconst args = {\n\t\tpost_type: 'llms_my_certificate',\n\t};\n\n\tif ( sid ) {\n\t\targs.sid = sid;\n\t}\n\n\treturn addQueryArgs(\n\t\t`${ getAdminUrl() }/post-new.php`,\n\t\targs,\n\t);\n}\n","import { dispatch, select } from '@wordpress/data';\nimport { store as editorStore } from '@wordpress/editor';\n\n/**\n * Edits the title of the current certificate post type in the block editor.\n *\n * This utility is used to allow sharing functionality between `llms_certificate` and `llms_my_certificate`\n * post types. Depending on the post type, the certificate title is stored in a different post field.\n *\n * To edit the actual post title of a `llms_certificate` post (not the awarded certificate's title), use\n * `wp.data.dispatch( 'core/editor' ).editPost()` directly.\n *\n * @since 6.0.0\n *\n * @param {string} title The desired certificate title.\n * @param {string} postType The current post type, automatically reads it from the current post if omitted.\n * @return {Promise} Promise that resolves when the title edits have been made to the current post.\n */\nexport function editCertificateTitle( title, postType = null ) {\n\tif ( ! postType ) {\n\t\tconst { getCurrentPostType } = select( editorStore );\n\t\tpostType = getCurrentPostType();\n\t}\n\n\tconst { editPost } = dispatch( editorStore ),\n\t\tedits = {};\n\n\tif ( 'llms_certificate' === postType ) {\n\t\tedits.certificate_title = title;\n\t} else if ( 'llms_my_certificate' === postType ) {\n\t\tedits.title = title;\n\t}\n\n\treturn editPost( edits );\n}\n","export { editCertificateTitle } from './edit-certificate-title';\nexport { default as AwardCertificateButton } from './award-certificate-button';\n","module.exports = window[\"llms\"][\"components\"];","module.exports = window[\"llms\"][\"utils\"];","module.exports = window[\"wp\"][\"components\"];","module.exports = window[\"wp\"][\"coreData\"];","module.exports = window[\"wp\"][\"data\"];","module.exports = window[\"wp\"][\"editor\"];","module.exports = window[\"wp\"][\"element\"];","module.exports = window[\"wp\"][\"i18n\"];","module.exports = window[\"wp\"][\"url\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// WP deps.\nimport { render } from '@wordpress/element';\nimport { getQueryArg } from '@wordpress/url';\n\n// Internal deps.\nimport { AwardCertificateButton } from './util';\n\nconst WRAPPER_ID = 'llms-award-certificate-wrapper',\n\trenderNodeStyles = {},\n\tbuttonArgs = {},\n\tdefaultBtn = getDefaultButton();\n\n/**\n * Retrieves the DOM Element selector for the default button to be replaced by the component.\n *\n * @since 6.0.0\n *\n * @return {?Element} DOM element for the default button or null if no button found.\n */\nfunction getDefaultButton() {\n\t// Certificates post table page.\n\tlet btn = document.querySelector( '.page-title-action' );\n\tif ( btn ) {\n\t\trenderNodeStyles.top = '-3px';\n\t\trenderNodeStyles.position = 'relative';\n\t}\n\n\t// Student certificates reporting page.\n\tif ( ! btn ) {\n\t\tbtn = document.getElementById( 'llms-new-award-button' );\n\n\t\trenderNodeStyles.marginBottom = '20px';\n\t\trenderNodeStyles.display = 'inline-block';\n\n\t\tbuttonArgs.studentId = parseInt( getQueryArg( window.location, 'student_id' ) );\n\t\tbuttonArgs.selectStudent = false;\n\t}\n\n\t// Reuse the original buttons label.\n\tif ( btn ) {\n\t\tbuttonArgs.buttonLabel = btn.textContent;\n\t}\n\n\treturn btn;\n}\n\n/**\n * Inserts the wrapper element node where the new component button will be rendered.\n *\n * @since 6.0.0\n *\n * @return {boolean} Returns `false` if no default button is found, otherwise returns true.\n */\nfunction insertRenderNode() {\n\tif ( ! defaultBtn ) {\n\t\treturn false;\n\t}\n\n\tconst renderNode = document.createElement( 'span' );\n\trenderNode.id = WRAPPER_ID;\n\n\tObject.entries( renderNodeStyles ).forEach( ( [ rule, style ] ) => {\n\t\trenderNode.style[ rule ] = style;\n\t} );\n\n\tdefaultBtn.style.display = 'none';\n\tdefaultBtn.after( renderNode );\n\n\treturn true;\n}\n\n// Render the component.\nif ( insertRenderNode() ) {\n\trender( , document.getElementById( WRAPPER_ID ) );\n}\n"],"names":["store","coreStore","dispatch","studentId","templateId","saveEntityRecord","author","certificate_template","status","__","Button","Modal","useState","PostSearchControl","UserSearchControl","createAward","getMessage","getRedirectUrl","getScratchUrl","_ref","modalTitle","buttonLabel","isDisabled","enableScratch","selectStudent","selectTemplate","isOpen","setIsOpen","isBusy","setIsBusy","currStudentId","setStudentId","currTemplateId","setTemplateId","closeModal","openModal","isReady","onClick","then","_ref2","id","window","location","createElement","Fragment","title","style","maxWidth","onRequestClose","isClearable","label","selectedValue","onUpdate","obj","postType","placeholder","textAlign","padding","margin","borderTop","marginRight","disabled","variant","href","msg","addQueryArgs","getAdminUrl","post","action","newAwardMsg","sid","arguments","length","undefined","args","post_type","select","editorStore","editCertificateTitle","getCurrentPostType","editPost","edits","certificate_title","default","AwardCertificateButton","render","getQueryArg","WRAPPER_ID","renderNodeStyles","buttonArgs","defaultBtn","getDefaultButton","btn","document","querySelector","top","position","getElementById","marginBottom","display","parseInt","textContent","insertRenderNode","renderNode","Object","entries","forEach","rule","after"],"sourceRoot":""}
\ No newline at end of file
diff --git a/assets/js/llms-admin-certificate-editor.js.map b/assets/js/llms-admin-certificate-editor.js.map
new file mode 100644
index 0000000000..d11c904aae
--- /dev/null
+++ b/assets/js/llms-admin-certificate-editor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"js/llms-admin-certificate-editor.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;AAA4C;AACwH;AACrI;AACL;;AAE1B;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,4CAAI,IAAI;;AAExB;AACA;AACA;;AAEA,QAAQ,6CAAK;AACb;AACA;;AAEA,IAAI,4CAAI;AACR;;AAEA,SAAS,6CAAK,QAAQ,4CAAQ;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,6CAAK;AACjB;AACA;AACA,gCAAgC,4CAAI;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA,qDAAqD,4CAAQ;AAC7D;;AAEA;AACA,yBAAyB,+CAAO;AAChC;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,4CAAI;AAChC;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,4CAAI;AAC7B;AACA,IAAI,mBAAmB,4CAAI;;AAE3B;AACA;;AAEA;AACA,SAAS,+CAAO,SAAS,6CAAK;AAC9B,GAAG;;;AAGH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA,IAAI;AACJ;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB,kBAAkB;AAC3C,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gDAAgD,QAAQ;AACxD;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA,4BAA4B,4CAAQ;;AAEpC;AACA;;AAEA,MAAM,KAAqC;AAC3C;AACA;;AAEA;AACA,oFAAoF;AACpF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iEAAiE;;AAEjE,sBAAsB,mBAAmB;AACzC;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;;AAEA;;AAEA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;;AAEA,KAAK;AACL;;AAEA;AACA;AACA,6BAA6B,6CAAS,EAAE,KAAqC;AAC7E;AACA;AACA;AACA,UAAU,2CAA2C,2CAAO;AAC5D;AACA;AACA,iDAAiD;AACjD;AACA;AACA,MAAM,EAAE,CAEF;AACN,qBAAqB,kDAAU;;AAE/B;AACA,aAAa,iDAAS,CAAC,+CAAO;AAC9B;;AAEA;AACA;;AAEA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC,0BAA0B;;AAE/D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,sDAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;;AAEA,iEAAe,WAAW,EAAC;;;;;;;;;;;;;;;;AClXY;;AAEvC,2+HAA2+H;;AAE3+H,iCAAiC,4DAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,WAAW,EAAC;;;;;;;;;;;;;;;ACd3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,OAAO,EAAC;;;;;;;;;;;;;;;;;ACRsC;;AAE7D;AACA;AACA;;AAEA;AACA,SAAS,8DAAsB;AAC/B,CAAC;;AAED,iEAAe,oBAAoB,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVmD;AAC9C;AACiB;AACV;AACsD;AACnB;AAC9B;AACmD;;AAExG,uBAAuB;;AAEvB,yCAAyC,oDAAa;AACtD;AACA;AACA;AACA;AACA;AACA,oDAAoD,0DAAW;AAC/D;AACA,CAAC;;AAED,IAAI,IAAqC;AACzC;AACA;;AAEA;AACA;AACA,SAAS,iDAAU;AACnB;;AAEA;AACA;AACA,sBAAsB,iDAAU;AAChC;AACA,gBAAgB,iDAAU;AAC1B;AACA,GAAG;AACH;;AAEA,kCAAkC,oDAAa,GAAG;;AAElD,IAAI,IAAqC;AACzC;AACA;;AAEA;AACA,SAAS,iDAAU;AACnB;;AAEA;AACA;AACA;;AAEA,QAAQ,KAAqC;AAC7C,qGAAqG,SAAS,EAAE;AAChH;;AAEA;AACA;;AAEA,MAAM,KAAqC;AAC3C;AACA;;AAEA,SAAS,8EAAQ,GAAG;AACpB;;AAEA,0CAA0C,iEAAW;AACrD,SAAS,iEAAW;AACpB;AACA,GAAG;AACH,CAAC;AACD;AACA,cAAc,iDAAU;;AAExB;AACA;AACA;;AAEA,sBAAsB,oDAAa;AACnC;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,gBAAgB,iDAAU;AAC1B,wBAAwB,oDAAa,YAAY,8EAAQ;AACzD;AACA;AACA,KAAK;AACL,KAAK;;;AAGL,+BAA+B,iDAAU;AACzC;AACA,SAAS,0GAAoB;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;;AAEA,wIAAwI;AACxI;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,kBAAkB;AACpC,oEAAoE;;AAEpE,iCAAiC;;AAEjC,6DAA6D;AAC7D;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC;AACjC;;AAEA,MAAM,KAAqC;AAC3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE,8DAAc;AAChB,cAAc,sHAAwC;AACtD,WAAW,4DAAY;AACvB,GAAG;;AAEH;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,mEAAmB;AACnC,IAAI;AACJ;AACA;;AAEA,mBAAmB,mEAAe,8BAA8B,iDAAU;;AAE1E,MAAM,KAAqC;AAC3C;;AAEA;AACA,mBAAmB,mEAAe,4CAA4C;AAC9E;AACA;;AAEA;AACA;;AAEA;AACA,qFAAqF,MAAqC;AAC1H;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,oDAAa,CAAC,2CAAQ,qBAAqB,oDAAa;AAC9E;AACA;AACA;AACA,GAAG,gBAAgB,oDAAa;AAChC,CAAC;;AAED,IAAI,IAAqC;AACzC;AACA;;AAEsN;;;;;;;;;;;;;;;;;;ACzO/K;AACE;AACF;;AAEvC,gRAAgR,uCAAuC;AACvT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sCAAsC,4DAAO;AAC7C;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA,MAAM,yDAAQ;AACd;AACA;;AAEA;AACA;;AAEA,IAAI,IAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,KAAqC;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD;;AAEhD,cAAc,KAAqC;AACnD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,SAAS,IAAqC;AACxD,qPAAqP,YAAY,kIAAkI,aAAa;AAChZ;;AAEA;AACA;;AAEA;AACA,UAAU,IAAqC;AAC/C;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC,yEAAyE;AACzE;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,6BAA6B,0BAA0B;AACvD,UAAU;AACV,sFAAsF;AACtF;AACA,QAAQ;AACR,gDAAgD,aAAoB;AACpE;AACA;;AAEA;AACA,2BAA2B,mBAAmB;AAC9C;AACA,8FAA8F;AAC9F;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;;AAEA;AACA;AACA,oBAAoB,KAAqC;AACzD;AACA;;AAEA,mCAAmC,qBAAqB;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mCAAmC,GAAG,QAAQ;AAC9C;;AAEA,IAAI,IAAqC;AACzC,qEAAqE;AACrE,EAAE;AACF;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ,QAAQ,KAAqC;AAC7C;AACA;;AAEA;AACA,IAAI;;;AAGJ,kBAAkB,iBAAiB;AACnC;;AAEA;AACA,UAAU,KAAqC;AAC/C;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA,KAAK;AACL,IAAI;;;AAGJ;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;;AAEA,aAAa,yDAAU;;AAEvB,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAE2B;;;;;;;;;;;;;;;AC3T3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA,SAAS,UAAU;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,OAAO,EAAC;;;;;;;;;;;;;;;ACtDvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;ACjD5B;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,SAAS,aAAa;;AAEtB,kCAAkC,mCAAmC;;AAErE,0BAA0B,wBAAwB;AAClD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;;;AAGA,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;;AAEA;;AAEA;AACA;;AAEA,mDAAmD,aAAoB;AACvE;AACA;AACA,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,QAAQ,IAAqC;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR,YAAY,KAAqC,yHAAyH;AAC1K;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,QAAQ,IAAqC;AAC7C;AACA;AACA;;AAEA;AACA,CAAC;;AAEqB;;;;;;;;;;;;;;;;;;;;;;;ACzJoC;AACE;AACX;AACe;AACmB;AAC9B;AACmD;;AAExG,+BAA+B,8DAAW;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gRAAgR,uCAAuC;;AAEvT;AACA;AACA;AACA;AACA,EAAE,8DAAc;AAChB,cAAc,sHAAwC;AACtD,WAAW,4DAAY;AACvB,GAAG;;AAEH;AACA;;AAEA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gDAAgD;AAChD;;AAEA;AACA;AACA,MAAM;AACN,UAAU,KAAqC;AAC/C;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,SAAS;AACtB,YAAY,KAAqC;AACjD;AACA;;AAEA;AACA;AACA,MAAM;;;AAGN,iBAAiB,iDAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA4B,iDAAU,CAAC,6CAAY;AACnD;;AAEA;AACA,oBAAoB,mEAAmB;AACvC,QAAQ;AACR;AACA;;AAEA,uBAAuB,mEAAe;AACtC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,oDAAa,CAAC,2CAAQ,qBAAqB,oDAAa;AAClF;AACA;AACA;AACA,OAAO,gBAAgB,oDAAa;AACpC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,aAAoB;AACjE;AACA,UAAU;;;AAGV;AACA;AACA,KAAK;;AAEL;AACA,mCAAmC,8EAAQ,GAAG;AAC9C;AACA,OAAO;AACP;;AA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;;;;;ACAnD;;AAEb,cAAc,mBAAO,CAAC,uFAAU;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,iBAAiB;AACrC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;;;AAIb,IAAI,IAAqC;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA,kDAAkD;;AAElD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,eAAe;AACf,kBAAkB;AAClB,gBAAgB;AAChB,YAAY;AACZ,YAAY;AACZ,cAAc;AACd,gBAAgB;AAChB,kBAAkB;AAClB,gBAAgB;AAChB,mBAAmB;AACnB,wBAAwB;AACxB,yBAAyB;AACzB,yBAAyB;AACzB,iBAAiB;AACjB,oBAAoB;AACpB,kBAAkB;AAClB,cAAc;AACd,cAAc;AACd,gBAAgB;AAChB,kBAAkB;AAClB,oBAAoB;AACpB,kBAAkB;AAClB,0BAA0B;AAC1B,cAAc;AACd,GAAG;AACH;;;;;;;;;;;ACpLa;;AAEb,IAAI,KAAqC,EAAE,EAE1C,CAAC;AACF,EAAE,qKAAyD;AAC3D;;;;;;;;;;;ACNA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;;;;;ACAe;AACf;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfO;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACnBmE;AACU;AACvC;AACJ;AACL;;AAEpC;AACA,WAAW,YAAY;AACvB,YAAY;AACZ;AACO;AACP,cAAc,mDAAM;;AAEpB;AACA;;AAEA,kBAAkB,YAAY;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB;AACO;AACP;AACA;AACA;AACA,SAAS,iDAAW,mBAAmB,oDAAM;AAC7C;AACA,SAAS,+CAAS;AAClB,YAAY,yDAAS,EAAE,mDAAI,WAAW,OAAO,oDAAO,2BAA2B,4CAAM,EAAE;AACvF,SAAS,6CAAO;AAChB;AACA,aAAa,oDAAO;AACpB,eAAe,kDAAK;AACpB;AACA;AACA,gBAAgB,yDAAS,EAAE,mDAAI,WAAW,QAAQ,oDAAO,6BAA6B,yCAAG,UAAU;AACnG;AACA;AACA,gBAAgB,yDAAS;AACzB,UAAU,mDAAI,WAAW,QAAQ,oDAAO,4BAA4B,4CAAM,gBAAgB;AAC1F,UAAU,mDAAI,WAAW,QAAQ,oDAAO,4BAA4B,yCAAG,UAAU;AACjF,UAAU,mDAAI,WAAW,QAAQ,oDAAO,sBAAsB,wCAAE,gBAAgB;AAChF;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACO;AACP;AACA,OAAO,6CAAO;AACd;AACA,WAAW,oDAAO,CAAC,uDAAQ;AAC3B,aAAa,mDAAM;AACnB;AACA;AACA,cAAc,mDAAM,WAAW,mDAAM;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mDAAM;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB,qBAAqB,mDAAM;AAC3B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;;;;;;;;;;;;;;;;;;;;;AC3GuD;AACuC;AAC0C;;AAExI;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,sDAAO,2CAA2C,oDAAK;AAC/D;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C,mDAAI;AAChD;AACA;AACA;AACA,SAAS,oDAAO,eAAe,oDAAO,CAAC,sDAAO;AAC9C;AACA;AACA;AACA;AACA;AACA,kBAAkB,sDAAO;AACzB;AACA;AACA;AACA,kBAAkB,yDAAU;AAC5B;AACA;AACA;AACA,kBAAkB,uDAAQ,CAAC,oDAAK;AAChC;AACA;AACA;AACA,YAAY,mDAAI;AAChB;AACA,MAAM,oDAAM,SAAS,wDAAS,CAAC,mDAAI,IAAI,oDAAK;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAM;AAC5B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,mDAAM;AACjC,OAAO,mDAAM,4CAA4C,2CAA2C,oDAAO,0BAA0B;AACrI;AACA;AACA,8BAA8B;AAC9B,UAAU;AACV;AACA,MAAM,oDAAM;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,mDAAM;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,mDAAM;AACvB;AACA;AACA;AACA;AACA,qDAAqD,mDAAI;AACzD;;AAEA,0BAA0B,iDAAI;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAM;AAC/B;AACA;AACA;AACA;AACA,UAAU,mDAAI;AACd,qBAAqB,sDAAO,CAAC,mDAAI;;AAEjC,eAAe,mDAAI,sBAAsB,mDAAM,sBAAsB,yDAAU,CAAC,oDAAK;AACrF;AACA;AACA;AACA,6BAA6B,mDAAM;AACnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA,YAAY,mDAAM;;AAElB,+BAA+B,WAAW;AAC1C,sBAAsB,mDAAM,yBAAyB,gDAAG,6BAA6B,UAAU;AAC/F,WAAW,iDAAI,6BAA6B,oDAAO;AACnD;;AAEA,QAAQ,mDAAI,qCAAqC,6CAAO;AACxD;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,YAAY;AACZ;AACO;AACP,QAAQ,mDAAI,sBAAsB,6CAAO,EAAE,iDAAI,CAAC,mDAAI,KAAK,mDAAM;AAC/D;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,mDAAI,sBAAsB,iDAAW,EAAE,mDAAM,oBAAoB,mDAAM;AAC/E;;;;;;;;;;;;;;;;;AC9LyC;AAC0B;;AAEnE;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,SAAS,iDAAI;AACb;AACA;AACA,UAAU,4CAAM;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,4CAAM;AAChB;AACA;AACA,UAAU,4CAAM,WAAW,yCAAG,WAAW,wCAAE;AAC3C;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE;AAC7B;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE;AAC7B;AACA;AACA,UAAU,4CAAM,WAAW,oDAAO,0BAA0B,4CAAM,gBAAgB,wCAAE;AACpF;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE,kBAAkB,oDAAO;AACtD;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE,sBAAsB,oDAAO;AAC1D;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE,GAAG,oDAAO;AACvC;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE,GAAG,oDAAO;AACvC;AACA;AACA,UAAU,4CAAM,YAAY,oDAAO,uBAAuB,4CAAM,WAAW,wCAAE,GAAG,oDAAO;AACvF;AACA;AACA,UAAU,4CAAM,GAAG,oDAAO,qCAAqC,4CAAM;AACrE;AACA;AACA,UAAU,oDAAO,CAAC,oDAAO,CAAC,oDAAO,wBAAwB,4CAAM,yBAAyB,4CAAM;AAC9F;AACA;AACA,UAAU,oDAAO,6BAA6B,4CAAM;AACpD;AACA;AACA,UAAU,oDAAO,CAAC,oDAAO,6BAA6B,4CAAM,mBAAmB,wCAAE,6BAA6B,kBAAkB,4CAAM;AACtI;AACA;AACA,UAAU,oDAAO,2BAA2B,4CAAM;AAClD;AACA;AACA;AACA;AACA;AACA,OAAO,mDAAM;AACb,YAAY,mDAAM;AAClB;AACA;AACA;AACA,UAAU,mDAAM;AAChB;AACA;AACA;AACA,aAAa,oDAAO,mCAAmC,4CAAM,oBAAoB,yCAAG,IAAI,mDAAM;AAC9F;AACA;AACA,cAAc,oDAAO,4BAA4B,oDAAO;AACxD;AACA;AACA;AACA;AACA;AACA,OAAO,mDAAM;AACb;AACA;AACA;AACA,WAAW,mDAAM,QAAQ,mDAAM,gBAAgB,oDAAO;AACtD;AACA;AACA,YAAY,oDAAO,mBAAmB,4CAAM;AAC5C;AACA;AACA,YAAY,oDAAO,kBAAkB,MAAM,gBAAgB,4CAAM,IAAI,mDAAM,wDAAwD,4CAAM,mBAAmB,wCAAE;AAC9J;AACA;AACA;AACA;AACA,WAAW,mDAAM;AACjB;AACA;AACA,YAAY,4CAAM,WAAW,wCAAE,GAAG,oDAAO,yBAAyB,EAAE;AACpE;AACA;AACA,YAAY,4CAAM,WAAW,wCAAE,GAAG,oDAAO,yBAAyB,EAAE;AACpE;AACA;AACA,YAAY,4CAAM,WAAW,wCAAE,GAAG,oDAAO,yBAAyB,EAAE;AACpE;;AAEA,UAAU,4CAAM,WAAW,wCAAE;AAC7B;;AAEA;AACA;;;;;;;;;;;;;;;;;;ACtH0E;AAC/B;;AAE3C;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA,cAAc,mDAAM;;AAEpB,iBAAiB,YAAY;AAC7B;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA,OAAO,4CAAM,OAAO,iDAAW;AAC/B,OAAO,6CAAO;AACd,OAAO,+CAAS,4CAA4C,8CAA8C;AAC1G,OAAO,6CAAO;AACd;;AAEA,QAAQ,mDAAM,wFAAwF,iBAAiB;AACvH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClC+E;;AAExE;AACA;AACA;AACA;AACA;AACA;;AAEP;AACA,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB;AACO;AACP,SAAS;AACT;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,mDAAM,iDAAiD,qBAAqB;AACpF;;AAEA;AACA,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,YAAY;AACZ;AACO;AACP,4BAA4B,mDAAM;;AAElC;AACA;;AAEA;AACA;;AAEA;AACA,YAAY;AACZ;AACO;AACP,iCAAiC,mDAAM;;AAEvC;AACA;;AAEA;AACA;;AAEA;AACA,YAAY;AACZ;AACO;AACP,QAAQ,mDAAM;AACd;;AAEA;AACA,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,mDAAM;AACd;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,oCAAoC,mDAAM;AAC1C;;AAEA;AACA,WAAW,KAAK;AAChB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,iDAAI;AACZ;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA;AACA,WAAW,mDAAM;AACjB;AACA,WAAW,oDAAM;AACjB;AACA,YAAY,oDAAM,CAAC,iDAAI;AACvB;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kDAAkD,iDAAI;AACtD;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrPA;AACA,WAAW;AACX,YAAY;AACZ;AACO;;AAEP;AACA,WAAW;AACX,YAAY;AACZ;AACO;;AAEP;AACA,WAAW;AACX,YAAY;AACZ;AACO;;AAEP;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,iBAAiB;AAC5B,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA;;;;;;;UClHA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D","sources":["webpack://lifterlms/./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","webpack://lifterlms/./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://lifterlms/./node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/react/dist/emotion-element-6a883da9.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/serialize/node_modules/@emotion/hash/dist/emotion-hash.esm.js","webpack://lifterlms/./node_modules/@emotion/serialize/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","webpack://lifterlms/./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js","webpack://lifterlms/./src/js/admin-certificate-editor/document-settings.js","webpack://lifterlms/./src/js/admin-certificate-editor/edit-certificate.js","webpack://lifterlms/./src/js/admin-certificate-editor/editor.js","webpack://lifterlms/./src/js/admin-certificate-editor/i18n.js","webpack://lifterlms/./src/js/admin-certificate-editor/index.js","webpack://lifterlms/./src/js/admin-certificate-editor/merge-codes.js","webpack://lifterlms/./src/js/admin-certificate-editor/migrate.js","webpack://lifterlms/./src/js/admin-certificate-editor/modify-blocks.js","webpack://lifterlms/./src/js/admin-certificate-editor/notices.js","webpack://lifterlms/./src/js/admin-certificate-editor/plugin/background-control.js","webpack://lifterlms/./src/js/admin-certificate-editor/plugin/margins-control.js","webpack://lifterlms/./src/js/admin-certificate-editor/plugin/orientation-control.js","webpack://lifterlms/./src/js/admin-certificate-editor/plugin/sequential-id-control.js","webpack://lifterlms/./src/js/admin-certificate-editor/plugin/size-control.js","webpack://lifterlms/./src/js/admin-certificate-editor/plugin/title-control.js","webpack://lifterlms/./src/js/admin-certificate-editor/post-status-info/award-button.js","webpack://lifterlms/./src/js/admin-certificate-editor/post-status-info/award-check.js","webpack://lifterlms/./src/js/admin-certificate-editor/post-status-info/index.js","webpack://lifterlms/./src/js/admin-certificate-editor/post-status-info/reset-template-button.js","webpack://lifterlms/./src/js/admin-certificate-editor/post-status-info/reset-template-check.js","webpack://lifterlms/./src/js/admin-certificate-editor/user-settings.js","webpack://lifterlms/./src/js/util/award-certificate-button/create.js","webpack://lifterlms/./src/js/util/award-certificate-button/index.js","webpack://lifterlms/./src/js/util/award-certificate-button/message.js","webpack://lifterlms/./src/js/util/award-certificate-button/urls.js","webpack://lifterlms/./src/js/util/edit-certificate-title.js","webpack://lifterlms/./src/js/util/index.js","webpack://lifterlms/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://lifterlms/./node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js","webpack://lifterlms/./node_modules/hoist-non-react-statics/node_modules/react-is/index.js","webpack://lifterlms/external window \"React\"","webpack://lifterlms/external window [\"llms\",\"components\"]","webpack://lifterlms/external window [\"llms\",\"icons\"]","webpack://lifterlms/external window [\"llms\",\"utils\"]","webpack://lifterlms/external window [\"wp\",\"blockEditor\"]","webpack://lifterlms/external window [\"wp\",\"blocks\"]","webpack://lifterlms/external window [\"wp\",\"components\"]","webpack://lifterlms/external window [\"wp\",\"compose\"]","webpack://lifterlms/external window [\"wp\",\"coreData\"]","webpack://lifterlms/external window [\"wp\",\"data\"]","webpack://lifterlms/external window [\"wp\",\"domReady\"]","webpack://lifterlms/external window [\"wp\",\"editPost\"]","webpack://lifterlms/external window [\"wp\",\"editor\"]","webpack://lifterlms/external window [\"wp\",\"element\"]","webpack://lifterlms/external window [\"wp\",\"hooks\"]","webpack://lifterlms/external window [\"wp\",\"i18n\"]","webpack://lifterlms/external window [\"wp\",\"notices\"]","webpack://lifterlms/external window [\"wp\",\"plugins\"]","webpack://lifterlms/external window [\"wp\",\"richText\"]","webpack://lifterlms/external window [\"wp\",\"url\"]","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://lifterlms/./node_modules/stylis/src/Enum.js","webpack://lifterlms/./node_modules/stylis/src/Middleware.js","webpack://lifterlms/./node_modules/stylis/src/Parser.js","webpack://lifterlms/./node_modules/stylis/src/Prefixer.js","webpack://lifterlms/./node_modules/stylis/src/Serializer.js","webpack://lifterlms/./node_modules/stylis/src/Tokenizer.js","webpack://lifterlms/./node_modules/stylis/src/Utility.js","webpack://lifterlms/webpack/bootstrap","webpack://lifterlms/webpack/runtime/compat get default export","webpack://lifterlms/webpack/runtime/define property getters","webpack://lifterlms/webpack/runtime/hasOwnProperty shorthand","webpack://lifterlms/webpack/runtime/make namespace object","webpack://lifterlms/./src/js/admin-certificate-editor.js"],"sourcesContent":["import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule' || cache.compat) return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses) {\n var isNested = element.parent === children[0]; // in nested rules comments become children of the \"auto-inserted\" rule\n //\n // considering this input:\n // .a {\n // .b /* comm */ {}\n // color: hotpink;\n // }\n // we get output corresponding to this:\n // .a {\n // & {\n // /* comm */\n // color: hotpink;\n // }\n // .b {}\n // }\n\n var commentContainer = isNested ? children[0].children : // global rule at the root level\n children;\n\n for (var i = commentContainer.length - 1; i >= 0; i--) {\n var node = commentContainer[i];\n\n if (node.line < element.line) {\n break;\n } // it is quite weird but comments are *usually* put at `column: element.column - 1`\n // so we seek *from the end* for the node that is earlier than the rule's `element` and check that\n // this will also match inputs like this:\n // .a {\n // /* comm */\n // .b {}\n // }\n //\n // but that is fine\n //\n // it would be the easiest to change the placement of the comment to be the first child of the rule:\n // .a {\n // .b { /* comm */ }\n // }\n // with such inputs we wouldn't have to search for the comment at all\n // TODO: consider changing this comment placement in the next major version\n\n\n if (node.column < element.column) {\n if (isIgnoringComment(node)) {\n return;\n }\n\n break;\n }\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default isPropValid;\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import hoistNonReactStatics$1 from 'hoist-non-react-statics';\n\n// this file isolates this package that is not tree-shakeable\n// and if this module doesn't actually contain any logic of its own\n// then Rollup just use 'hoist-non-react-statics' directly in other chunks\n\nvar hoistNonReactStatics = (function (targetComponent, sourceComponent) {\n return hoistNonReactStatics$1(targetComponent, sourceComponent);\n});\n\nexport default hoistNonReactStatics;\n","import { createContext, useContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getLastPart = function getLastPart(functionName) {\n // The match may be something like 'Object.createEmotionProps' or\n // 'Loader.prototype.render'\n var parts = functionName.split('.');\n return parts[parts.length - 1];\n};\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n if (match) return getLastPart(match[1]); // Safari / Firefox\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return getLastPart(match[1]);\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/createElement(WrappedComponent, newProps));\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, useTheme as u, withEmotionCache as w };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(var|attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error(noComponentSelectorMessage);\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useContext, createElement, Fragment } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var FinalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof FinalTag === 'string'\n }), /*#__PURE__*/createElement(FinalTag, newProps));\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;\n","import '@babel/runtime/helpers/extends';\nimport 'react';\nimport '@emotion/is-prop-valid';\nimport createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@emotion/react';\nimport '@emotion/utils';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nvar newStyled = createStyled.bind();\ntags.forEach(function (tagName) {\n // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type\n newStyled[tagName] = newStyled(tagName);\n});\n\nexport default newStyled;\n","import * as React from 'react';\nimport { useLayoutEffect } from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","var weakMemoize = function weakMemoize(func) {\n // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // $FlowFixMe\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\nexport default weakMemoize;\n","import { __ } from '@wordpress/i18n';\nimport { compose } from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { PluginDocumentSettingPanel } from '@wordpress/edit-post';\nimport { store as editorStore } from '@wordpress/editor';\n\nimport BackgroundControl from './plugin/background-control';\nimport MarginsControl from './plugin/margins-control';\nimport OrientationControl from './plugin/orientation-control';\nimport SequentialIdControl from './plugin/sequential-id-control';\nimport SizeControl from './plugin/size-control';\nimport TitleControl, { Check as TitleControlCheck } from './plugin/title-control';\n\n/**\n * Render the certificate settings editor panel.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component arguments.\n * @param {string} args.type Current post type.\n * @param {string} args.title Current certificate title.\n * @param {string} args.sequentialId Next certificate sequential ID.\n * @param {string} args.background Current background color setting.\n * @param {number} args.height Current height setting.\n * @param {number[]} args.margins Current margins setting.\n * @param {string} args.orientation Current orientation setting.\n * @param {string} args.size Current size setting.\n * @param {string} args.unit Current unit setting.\n * @param {number} args.width Current wfidth setting.\n * @return {PluginDocumentSettingPanel} The component.\n */\nfunction CertificateDocumentSettings( { type, title, sequentialId, background, height, margins, orientation, size, unit, width } ) {\n\treturn (\n\n\t\t\n\n\t\t\t\n\t\t\t\t \n\t\t\t\t \n\t\t\t \n\t\t\t \n\t\t\t \n\t\t\t \n\t\t\t \n\t\t\t \n\t\t\t \n\t\t\t \n\t\t\t{ 'llms_certificate' === type && (\n\t\t\t\t<>\n\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t>\n\t\t\t) }\n\n\t\t \n\n\t);\n}\n\nconst applyWithSelect = withSelect( ( select ) => {\n\tconst { getEditedPostAttribute } = select( editorStore );\n\n\treturn {\n\t\ttype: getEditedPostAttribute( 'type' ),\n\t\ttitle: getEditedPostAttribute( 'certificate_title' ),\n\t\tsequentialId: getEditedPostAttribute( 'certificate_sequential_id' ),\n\t\tbackground: getEditedPostAttribute( 'certificate_background' ),\n\t\theight: getEditedPostAttribute( 'certificate_height' ),\n\t\tmargins: getEditedPostAttribute( 'certificate_margins' ),\n\t\torientation: getEditedPostAttribute( 'certificate_orientation' ),\n\t\tsize: getEditedPostAttribute( 'certificate_size' ),\n\t\tunit: getEditedPostAttribute( 'certificate_unit' ),\n\t\twidth: getEditedPostAttribute( 'certificate_width' ),\n\t};\n} );\n\nexport default compose( [ applyWithSelect ] )(\n\tCertificateDocumentSettings\n);\n","import { dispatch } from '@wordpress/data';\nimport { store as editorStore } from '@wordpress/editor';\n\n/**\n * Make changes to a custom field of a certificate post.\n *\n * @since 6.0.0\n *\n * @param {string} key Unprefixed field key. For example, to edit \"certificate_size\", pass \"size\".\n * @param {*} val Field value.\n * @return {void}\n */\nexport default function editCertificate( key, val ) {\n\tconst { editPost } = dispatch( editorStore ),\n\t\tedits = {};\n\tedits[ `certificate_${ key }` ] = val;\n\teditPost( edits );\n}\n","import { store as coreStore } from '@wordpress/core-data';\nimport { dispatch, select, subscribe } from '@wordpress/data';\nimport { rawHandler } from '@wordpress/blocks';\nimport domReady from '@wordpress/dom-ready';\nimport { store as editorStore } from '@wordpress/editor';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Flag used by maybeRefreshContent() to determine of the current post has been saved.\n *\n * @type {boolean}\n */\nlet hasSaved = false;\n\n/**\n * Retrieves the current media object for the certificate's featured image.\n *\n * @since 6.0.0\n *\n * @return {Object} The featured image object or an empty object if no featured image is set.\n */\nfunction getFeaturedMedia() {\n\tconst { getEditedPostAttribute } = select( editorStore ),\n\t\t{ getMedia } = select( coreStore ),\n\t\timageId = getEditedPostAttribute( 'featured_media' );\n\n\treturn imageId ? getMedia( imageId ) : {};\n}\n\n/**\n * Retrieve the source url for the certificate background image.\n *\n * Utilizes the current featured image if set otherwise falls back to the global\n * default certificate background image.\n *\n * @since 6.0.0\n *\n * @return {string} The background image source url.\n */\nfunction getBackgroundImage() {\n\tconst mediaRes = getFeaturedMedia(),\n\t\t{ default_image: defaultSrc } = window.llms.certificates;\n\n\t// Wait until the API is ready.\n\tif ( undefined === mediaRes ) {\n\t\treturn null;\n\t}\n\n\tconst { source_url: src } = mediaRes;\n\n\treturn src ? src : defaultSrc;\n}\n\n/**\n * Add inline styles to fix visual issues for certificate building.\n *\n * Forces blocks to take up the actual full-width of the certificate \"canvas\" and\n * removes margins and spacing between blocks so that what is displayed in the editor\n * more closely resembles what will be displayed on the frontend.\n *\n * @since 6.0.0\n *\n * @return {void}\n */\nfunction applyBlockVisualFixes() {\n\tconst style = document.createElement( 'style' );\n\tstyle.type = 'text/css';\n\t// Force editor style to show blocks as full width.\n\tstyle.appendChild( document.createTextNode( '.editor-styles-wrapper .wp-block { max-width: 100% !important; }' ) );\n\t// Force editor block spacing to more closely resemble rendering on the frontend.\n\tstyle.appendChild( document.createTextNode( '.editor-styles-wrapper [data-block], .wp-block { margin-top: 0 !important; margin-bottom: 0 !important }' ) );\n\tdocument.head.appendChild( style );\n}\n\n/**\n * Determines whether or not the current post has a certificate title block.\n *\n * @since 6.0.0\n *\n * @see {@link https://github.com/WordPress/gutenberg/issues/37540}\n *\n * @return {boolean} Returns `true` if the post has the block and `false` if it doesn't.\n */\nfunction hasCertificateTitle() {\n\tconst { getInserterItems } = select( blockEditorStore );\n\n\t// Using this method in favor of `canInsertBlockType()` due to this: https://github.com/WordPress/gutenberg/issues/37540.\n\tconst { isDisabled } = getInserterItems().find( ( { name } ) => 'llms/certificate-title' === name );\n\treturn isDisabled;\n}\n\n/**\n * Sync saved content with displayed content.\n *\n * We process merge codes, shortcodes and reusable blocks server-side when a published `llms_my_certificate` is updated.\n * When the content is returned from the server, it is not updated in the block editor (it's assumed that\n * the content doesn't change).\n *\n * This function waits until a save has been processed and then determines if the editor's content should be updated\n * by looking for merge codes, shortcodes or reusable blocks in the editor's content. If any are found in the editor's\n * content and none are found in the post's content as returned from the server it will update the editor's\n * content with the content returned from the server.\n *\n * @since 6.0.0\n * @since 6.4.0 Added refresh if the edited content contains a WordPress reusable block.\n *\n * @see {@link https://github.com/WordPress/gutenberg/issues/26763}\n *\n * @param {string} content Post content as returned from the server.\n * @param {string} editedContent Post content currently found in the editor.\n * @return {void}\n */\nfunction maybeRefreshContent( content, editedContent ) {\n\tconst { isSavingPost } = select( editorStore ),\n\t\tisSaving = isSavingPost();\n\n\t// @see {@link https://github.com/WordPress/gutenberg/issues/17632#issuecomment-583772895}\n\tif ( isSaving ) {\n\t\thasSaved = true;\n\t} else if ( ! isSaving && hasSaved ) {\n\t\thasSaved = false;\n\n\t\tconst REGEX = /(\\{[A-Za-z_].*\\})|(\\[llms-user .+]|())/g,\n\t\t\tactualMatch = content.match( REGEX ),\n\t\t\teditedMatch = editedContent.match( REGEX );\n\n\t\tif ( editedMatch?.length && ! actualMatch?.length ) {\n\t\t\trefreshContent( content );\n\t\t}\n\t}\n}\n\n/**\n * Replace the content in the editor with the specified content.\n *\n * @since 6.0.0\n *\n * @param {string} content HTML/Block markup string.\n * @return {void}\n */\nfunction refreshContent( content ) {\n\tconst { replaceBlocks } = dispatch( blockEditorStore ),\n\t\t{ savePost } = dispatch( editorStore ),\n\t\t{ getBlocks } = select( blockEditorStore );\n\n\treplaceBlocks(\n\t\tgetBlocks().map( ( { clientId } ) => clientId ),\n\t\trawHandler( { HTML: content } )\n\t);\n\n\tsavePost();\n}\n\n/**\n * Updates to the the editor \"canvas\" to reflect certificate settings.\n *\n * Sets the width, margins, background image, color, etc...\n *\n * @since 6.0.0\n *\n * @return {void}\n */\nfunction updateDOM() {\n\tconst { getCurrentPostAttribute, getEditedPostAttribute, getCurrentPostType } = select( editorStore ),\n\t\tbg = getEditedPostAttribute( 'certificate_background' ),\n\t\tmargins = getEditedPostAttribute( 'certificate_margins' ),\n\t\twidth = getEditedPostAttribute( 'certificate_width' ),\n\t\theight = getEditedPostAttribute( 'certificate_height' ),\n\t\tunit = getEditedPostAttribute( 'certificate_unit' ),\n\t\torientation = getEditedPostAttribute( 'certificate_orientation' ),\n\t\tcontent = getCurrentPostAttribute( 'content' ),\n\t\teditedContent = getEditedPostAttribute( 'content' );\n\n\tconst list = document.querySelector( '.block-editor-block-list__layout.is-root-container' );\n\tif ( list ) {\n\t\tconst displayWidth = 'portrait' === orientation ? width : height,\n\t\t\tdisplayHeight = 'portrait' === orientation ? height : width,\n\t\t\tpadding = margins.map( ( margin ) => `${ margin }%` ).join( ' ' );\n\n\t\tlist.style.backgroundImage = `url( '${ getBackgroundImage() }' )`;\n\t\tlist.style.backgroundSize = `${ displayWidth }${ unit } ${ displayHeight }${ unit }`;\n\t\tlist.style.backgroundRepeat = 'no-repeat';\n\t\tlist.style.marginLeft = 'auto';\n\t\tlist.style.marginRight = 'auto';\n\t\tlist.style.padding = padding;\n\t\tlist.style.width = `${ displayWidth }${ unit }`;\n\t\tlist.style.minHeight = `${ displayHeight }${ unit }`;\n\t\tlist.style.boxSizing = 'border-box';\n\t}\n\n\tconst styles = document.querySelector( '.editor-styles-wrapper' );\n\tif ( styles ) {\n\t\tstyles.style.backgroundColor = bg;\n\t}\n\n\tif ( 'llms_my_certificate' === getCurrentPostType() ) {\n\t\tmaybeRefreshContent( content, editedContent );\n\n\t\t// Visually hide the post title element based on the presence of the cert title block.\n\t\tconst title = document.querySelector( '.edit-post-visual-editor__post-title-wrapper' );\n\t\tif ( title ) {\n\t\t\ttitle.style.display = hasCertificateTitle() ? 'none' : 'initial';\n\t\t}\n\t}\n}\n\ndomReady( () => {\n\tapplyBlockVisualFixes();\n\n\tsubscribe( updateDOM );\n} );\n","import { addFilter } from '@wordpress/hooks';\nimport { __ } from '@wordpress/i18n';\nimport { subscribe, select } from '@wordpress/data';\nimport { store as editorStore } from '@wordpress/editor';\n\n/**\n * Wait for the current post type to load and unsubscribe as soon as we have a post type.\n *\n * This subscription \"translates\" the \"Move to trash\" button to \"Delete permanently\".\n *\n * @since 6.0.0\n */\nconst unsubscribe = subscribe( () => {\n\tconst { getCurrentPostType } = select( editorStore ),\n\t\tpostType = getCurrentPostType();\n\n\tif ( null !== postType ) {\n\t\tdoUnsubscribe( 'llms_my_certificate' === postType );\n\t}\n} );\n\n/**\n * Performs unsubscribe on the subscription and optionally applies the desired translation.\n *\n * @since 6.0.0\n *\n * @param {boolean} withFilter Whether or not the addFilter call should be applied.\n * @return {void}\n */\nfunction doUnsubscribe( withFilter ) {\n\tunsubscribe();\n\n\tif ( ! withFilter ) {\n\t\treturn;\n\t}\n\n\taddFilter( 'i18n.gettext_default', 'llms/certificates', function( text ) {\n\t\tif ( 'Move to trash' === text ) {\n\t\t\treturn __( 'Delete permanently', 'lifterlms' );\n\t\t}\n\n\t\treturn text;\n\t} );\n}\n\n","// WP deps.\nimport { registerPlugin } from '@wordpress/plugins';\n\n// Internal deps.\nimport './editor';\nimport './i18n';\nimport './merge-codes';\nimport './migrate';\nimport './modify-blocks';\nimport './notices';\nimport CertificateDocumentSettings from './document-settings';\nimport CertificatePostStatusInfo from './post-status-info';\nimport CertificateUserSettings from './user-settings';\n\n/**\n * Register the document settings plugin with the block editor.\n *\n * @since 6.0.0\n */\nregisterPlugin(\n\t'llms-certificate-doc-settings',\n\t{\n\t\trender: CertificateDocumentSettings,\n\t\ticon: '',\n\t}\n);\n\n/**\n * Registers the awarded certificate user selection / display control.\n *\n * @since 6.0.0\n */\nregisterPlugin(\n\t'llms-certificate-user',\n\t{\n\t\trender: CertificateUserSettings,\n\t}\n);\n\n/**\n * Registers the certificate default template reset button.\n *\n * @since 6.0.0\n */\nregisterPlugin(\n\t'llms-certificate-post-status-info',\n\t{\n\t\trender: CertificatePostStatusInfo,\n\t}\n);\n","// WP deps.\nimport { __ } from '@wordpress/i18n';\nimport { RichTextToolbarButton } from '@wordpress/block-editor';\nimport { Button, Modal } from '@wordpress/components';\nimport { registerFormatType, insert } from '@wordpress/rich-text';\nimport { useState } from '@wordpress/element';\n\nimport { CopyButton } from '@lifterlms/components';\nimport { Icon, lifterlms } from '@lifterlms/icons';\n\n/**\n * Displays a single for a merge code.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component arguments.\n * @param {Function} args.closeModal Function to close the modal.\n * @param {Function} args.onChange RichText change callback function, used to insert\n * the merge code into the current RichText area in the editor.\n * @param {Object} args.value Current value object of the RichText element.\n * @return {WPElement} The table row component.\n */\nfunction MergeCodeTableRow( { closeModal, onChange, value } ) {\n\tconst { merge_codes: list } = window.llms.certificates;\n\n\treturn Object.entries( list ).map( ( [ code, name ], index ) => {\n\t\treturn (\n\t\t\t \n\t\t\t\t{ name } \n\t\t\t\t\n\t\t\t\t\t \n\t\t\t\t \n\t\t\t\t\n\t\t\t\t\t {\n\t\t\t\t\t\t\tcloseModal();\n\t\t\t\t\t\t\tonChange( insert( value, code ) );\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Insert', 'lifterlms' ) }\n\t\t\t\t\t \n\t\t\t\t \n\t\t\t \n\t\t);\n\t} );\n}\n\n/**\n * RichText format edit component.\n *\n * @since 6.0.0\n *\n * @param {Object} props Component properties.\n * @return {WPElement} The component.\n */\nfunction Edit( props ) {\n\tconst [ isOpen, setOpen ] = useState( false ),\n\t\topenModal = () => setOpen( true ),\n\t\tcloseModal = () => setOpen( false ),\n\t\t{ value, onChange } = props;\n\n\treturn (\n\t\t<>\n\t\t\t }\n\t\t\t\ttitle={ __( 'Merge Codes', 'lifterlms' ) }\n\t\t\t\tonClick={ openModal }\n\t\t\t/>\n\n\t\t\t{ isOpen && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{ __( 'Name', 'lifterlms' ) } \n\t\t\t\t\t\t\t\t\t{ __( 'Merge code', 'lifterlms' ) } \n\t\t\t\t\t\t\t\t\t{ __( 'Insert', 'lifterlms' ) } \n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t \n\t\t\t) }\n\t\t>\n\t);\n}\n\n/**\n * Register a RichText format with the block editor.\n *\n * @since 6.0.0\n */\nregisterFormatType( 'llms/certificate-merge-codes', {\n\ttitle: __( 'LifterLMS Certificate Merge Codes', 'lifterlms' ),\n\ttagName: 'span',\n\tclassName: 'llms-cert-mc-wrap',\n\tedit: Edit,\n} );\n","import { subscribe, select, dispatch } from '@wordpress/data';\nimport { rawHandler, serialize } from '@wordpress/blocks';\nimport { store as editorStore } from '@wordpress/editor';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Wait for the current post type to load and unsubscribe as soon as we have a post type.\n *\n * This subscription \"translates\" the \"Move to trash\" button to \"Delete permanently\".\n *\n * @since 6.0.0\n */\nconst unsubscribe = subscribe( () => {\n\tconst search = new URLSearchParams( window.location.search ),\n\t\tdoMigration = 1 === parseInt( search.get( 'llms-migrate-legacy-certificate' ) );\n\n\tif ( ! doMigration ) {\n\t\treturn doUnsubscribe( false );\n\t}\n\n\tconst blocks = getAllBlocks();\n\n\tif ( 0 !== blocks.length ) {\n\t\tdoUnsubscribe( true );\n\t}\n} );\n\n/**\n * Performs unsubscribe on the subscription and optionally migrates classic editor blocks.\n *\n * @since 6.0.0\n *\n * @param {boolean} withMigration Whether or not to perform the classic editor migration.\n * @return {void}\n */\nfunction doUnsubscribe( withMigration ) {\n\tunsubscribe();\n\n\tif ( ! withMigration ) {\n\t\treturn;\n\t}\n\n\tmigrateClassicBlock();\n}\n\n/**\n * Helper to retrieve a list of all blocks.\n *\n * @since 6.0.0\n *\n * @return {WPBlock[]} Array of blocks.\n */\nfunction getAllBlocks() {\n\tconst { getBlocks } = select( blockEditorStore );\n\treturn getBlocks();\n}\n\n/**\n * Performs a migration on all classic editor blocks.\n *\n * This performs logic largely similar to the classic blocks \"Convert to Blocks\"\n * button. Also forces a post update after migrating.\n *\n * @since 6.0.0\n *\n * @see {@link https://github.com/WordPress/gutenberg/blob/trunk/packages/block-library/src/freeform/convert-to-blocks-button.js}\n *\n * @return {void}\n */\nfunction migrateClassicBlock() {\n\tconst classics = getAllBlocks().filter( ( { name } ) => 'core/freeform' === name );\n\n\tif ( 0 === classics.length ) {\n\t\treturn;\n\t}\n\n\tconst { replaceBlocks } = dispatch( blockEditorStore ),\n\t\t{ savePost } = dispatch( editorStore );\n\n\tclassics.forEach( ( block ) => {\n\t\treplaceBlocks(\n\t\t\tblock.clientId,\n\t\t\trawHandler( { HTML: serialize( block ) } )\n\t\t);\n\t} );\n\n\tsavePost();\n}\n\n","// WP Deps.\nimport { addFilter } from '@wordpress/hooks';\n\n/**\n * Modifies the registration of the core/columns block.\n *\n * I cannot find a way to disable the toggle in the block's inspector panel, nor\n * can I determine the proper way to simply define the block's default attribute value\n * as `false`. By setting the variations to all have the default value it will\n * ensure that any new columns added to a certificate will have mobile stacking disabled.\n * Users will still be able to enable this via the admin UI but since there's no way\n * to disable the toggle we'll have to accept that. Realistically it won't have much impact\n * anyway but it would be good to be able to disable it.\n *\n * @since 6.0.0\n *\n * @see {@link https://github.com/gocodebox/lifterlms/issues/1972}\n *\n * @param {Object} settings Block registration settings.\n * @param {string} blockName The block's name.\n * @return {Object} Block registration settings.\n */\nfunction modifyColumnsBlock( settings, blockName ) {\n\tif ( 'core/columns' === blockName ) {\n\t\t// Force all the existing columns block variation to have mobile stacking disabled by default.\n\t\tsettings.variations = settings.variations.map( ( variation ) => {\n\t\t\tconst { attributes = {} } = variation;\n\t\t\tvariation.attributes = {\n\t\t\t\t...attributes,\n\t\t\t\tisStackedOnMobile: false,\n\t\t\t};\n\t\t\treturn variation;\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'llms/certificate-editor/columns-block',\n\tmodifyColumnsBlock,\n);\n","import { __ } from '@wordpress/i18n';\nimport { dispatch } from '@wordpress/data';\nimport domReady from '@wordpress/dom-ready';\nimport { store as noticeStore } from '@wordpress/notices';\nimport { getQueryArg } from '@wordpress/url';\n\ndomReady( () => {\n\tif ( '1' !== getQueryArg( window.location.href, 'newAwardMsg' ) ) {\n\t\treturn;\n\t}\n\n\tconst { createSuccessNotice } = dispatch( noticeStore );\n\n\tcreateSuccessNotice( __( 'The certificate award has been created as a draft.', 'lifterlms' ) );\n} );\n","import { useSetting } from '@wordpress/block-editor';\nimport { BaseControl, ColorPalette } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\nimport editCertificate from '../edit-certificate';\n\n/**\n * Retrieves a color palette for use in the background control component.\n *\n * Attempts to use the theme's color palette (if available) and falls back\n * to the color palette provided by the LifterLMS plugin.\n *\n * Additionally converts all hexcodes to lowercase to enforce consistency\n * across themes which may store hexcodes in upper or lower case.\n *\n * @see {@link https://developer.wordpress.org/block-editor/how-to-guides/themes/theme-support/#block-color-palettes}\n *\n * @since 6.0.0\n *\n * @return {Object[]} Array of color palette objects.\n */\nfunction usePalette() {\n\tlet palette = useSetting( 'color.palette' );\n\n\t// Use default LifterLMS colors if there's none specified by the theme.\n\tif ( ! palette.length ) {\n\t\tpalette = window.llms.certificates.colors;\n\t}\n\n\treturn palette.map( ( item ) => {\n\t\tconst { color } = item;\n\t\treturn {\n\t\t\t...item,\n\t\t\tcolor: color.startsWith( '#' ) ? color.toLowerCase() : color,\n\t\t};\n\t} );\n}\n\n/**\n * Certificate background color control.\n *\n * @since 6.0.0\n *\n * @param {Object} args Function arguments object.\n * @param {string} args.background Value of the background color.\n * @return {BaseControl} The background control component.\n */\nexport default function BackgroundControl( { background } ) {\n\tconst [ color, setColor ] = useState( background );\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\tsetColor( val );\n\t\t\t\t\teditCertificate( 'background', val );\n\t\t\t\t} }\n\t\t\t\tvalue={ color }\n\t\t\t\tclearable={ false }\n\t\t\t/>\n\t\t \n\t);\n}\n","// External dependencies.\nimport styled from '@emotion/styled';\n\n// WordPress dependencies.\nimport { BaseControl, TextControl } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\n\n// Internal dependencies.\nimport editCertificate from '../edit-certificate';\n\n/**\n * Retrieve a description for the margin based on it's index in the margins array.\n *\n * @since 6.0.0\n *\n * @param {number} index Index of the margin.\n * @return {string} Margin description.\n */\nfunction getDesc( index ) {\n\tconst vals = [\n\t\t__( 'Top', 'lifterlms' ),\n\t\t__( 'Right', 'lifterlms' ),\n\t\t__( 'Bottom', 'lifterlms' ),\n\t\t__( 'Left', 'lifterlms' ),\n\t];\n\n\treturn vals[ index ];\n}\n\n/**\n * Styled Text Control\n *\n * @since 6.0.0\n */\nconst StyledTextControl = styled( TextControl )`\n\t& .components-base-control__field {\n\t\tposition: relative;\n\n\t\t&:hover:after,\n\t\t&:focus-within:after {\n\t\t right: 25px;\n\t\t}\n\n\t\t&:after {\n\t\t\tcontent: '%';\n\t\t\tfont-size: 85%;\n\t\t\tpointer-events: none;\n\t\t\tposition: absolute;\n\t\t\tright: 6px;\n\t\t\ttop: 6px;\n\t\t\ttransition: right 0.05s ease-in-out;\n\t\t}\n\t}\n`;\n\n/**\n * Single margin control component.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component arguments.\n * @param {number} args.margin Current value of the margin.\n * @param {number} args.index Index of the margin.\n * @param {Function} args.editMargins Function used to update the margins.\n * @return {WPElement} Component.\n */\nfunction MarginControl( { margin, index, editMargins } ) {\n\tconst [ currMargin, setMargin ] = useState( margin ),\n\t\tmarginId = [ 'top', 'right', 'bottom', 'left' ][ index ];\n\n\treturn (\n\t\t\n\t\t\t {\n\t\t\t\t\teditMargins( val, index, setMargin );\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ getDesc( index ) } \n\t\t
\n\t);\n}\n\n/**\n * Certificate margins control.\n *\n * @since 6.0.0\n *\n * @param {Object} args Function arguments object.\n * @param {number[]} args.margins Array of numbers representing the certificate's margins.\n * @return {BaseControl} The background control component.\n */\nexport default function MarginsControl( { margins } ) {\n\tconst editMargins = ( val, index, setState ) => {\n\t\tconst newMargins = [ ...margins ];\n\t\tnewMargins[ index ] = val;\n\n\t\tsetState( val );\n\t\teditCertificate( 'margins', newMargins );\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ margins.map( ( margin, index ) => ( ) ) }\n\t\t\t
\n\t\t \n\t);\n}\n","import { __ } from '@wordpress/i18n';\n\nimport { ButtonGroupControl } from '@lifterlms/components';\n\nimport editCertificate from '../edit-certificate';\n\n/**\n * Certificates orientation control component.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component arguments.\n * @param {string} args.orientation Currently selected orientation value.\n * @return {ButtonGroupControl} Control component.\n */\nexport default function OrientationControl( { orientation } ) {\n\tconst { orientations } = window.llms.certificates,\n\t\toptions = Object.entries( orientations ).map( ( [ value, label ] ) => ( { value, label } ) );\n\n\treturn (\n\t\t editCertificate( 'orientation', val ) }\n\t\t/>\n\t);\n}\n","import { __ } from '@wordpress/i18n';\nimport { TextControl } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\n\nimport editCertificate from '../edit-certificate';\n\n/**\n * Certificates next sequential id control component.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component arguments.\n * @param {string} args.sequentialId Current sequential ID.\n * @return {TextControl} Control component.\n */\nexport default function SequentialIdControl( { sequentialId } ) {\n\tconst [ currId, setId ] = useState( sequentialId );\n\n\tlet { minSequentialId } = window.llms.certificates;\n\n\tif ( ! minSequentialId ) {\n\t\tminSequentialId = sequentialId;\n\t\twindow.llms.certificates.minSequentialId = minSequentialId;\n\t}\n\n\treturn (\n\t\t {\n\t\t\t\tsetId( val );\n\t\t\t\teditCertificate( 'sequential_id', val );\n\t\t\t} }\n\t\t\thelp={ __( 'Used for the {sequential_id} merge code when generating a certificate from this template.', 'lifterlms' ) }\n\t\t/>\n\t);\n}\n","import { __, _x, sprintf } from '@wordpress/i18n';\nimport { SelectControl, TextControl } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\n\nimport editCertificate from '../edit-certificate';\n\n/**\n * Format the label for a size in the SizeControl.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component args.\n * @param {string} args.name Name of the size.\n * @param {number} args.width Size width.\n * @param {number} args.height Size height.\n * @param {string} args.unit Size unit ID.\n * @return {string} Label for the size.\n */\nfunction formatSizeLabel( { name, width, height, unit } ) {\n\tconst { units } = window.llms.certificates,\n\t\t{ symbol } = units[ unit ] || {};\n\treturn sprintf( '%1$s (%2$s%4$s x %3$s%4$s)', name, width, height, symbol );\n}\n\n/**\n * Control component group for defining a custom size.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component args.\n * @param {number} args.width Current width.\n * @param {number} args.height Current height.\n * @param {string} args.unit Current unit ID.\n * @return {WPElement} The component.\n */\nfunction CustomSizeControl( { width, height, unit } ) {\n\tconst [ currWidth, setWidth ] = useState( width ),\n\t\t[ currHeight, setHeight ] = useState( height ),\n\t\t[ currUnit, setUnit ] = useState( unit );\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t {\n\t\t\t\t\t\tsetWidth( val );\n\t\t\t\t\t\teditCertificate( 'width', val );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t
\n\t\t\t
\n\t\t\t\t {\n\t\t\t\t\t\tsetHeight( val );\n\t\t\t\t\t\teditCertificate( 'height', val );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t
\n\t\t\t
\n\t\t\t\t {\n\t\t\t\t\t\tsetUnit( val );\n\t\t\t\t\t\teditCertificate( 'unit', val );\n\t\t\t\t\t} }\n\t\t\t\t\toptions={ [\n\t\t\t\t\t\t{ value: 'in', label: __( 'in (Inches)', 'lifterlms' ) },\n\t\t\t\t\t\t{ value: 'mm', label: __( 'mm (Millimeters)', 'lifterlms' ) },\n\t\t\t\t\t] }\n\t\t\t\t/>\n\t\t\t
\n\t\t
\n\t);\n}\n\n/**\n * Size control selector.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component args.\n * @param {string} args.size Selected size ID.\n * @param {number} args.width Current width.\n * @param {number} args.height Current height.\n * @param {string} args.unit Current unit.\n * @return {WPElement} Component.\n */\nexport default function SizeControl( { size: selected, width, height, unit } ) {\n\tconst { sizes } = window.llms.certificates,\n\t\toptions = Object.entries( sizes ).map( ( [ value, sizeData ] ) => ( { value, label: formatSizeLabel( sizeData ) } ) ),\n\t\t[ size, setSize ] = useState( selected );\n\n\toptions.push( {\n\t\tvalue: 'CUSTOM',\n\t\tlabel: _x( 'Custom', 'certificate sizing option', 'lifterlms' ),\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t {\n\t\t\t\t\tsetSize( val );\n\t\t\t\t\teditCertificate( 'size', val );\n\n\t\t\t\t\t// Update other fields so that when switching to custom it always shows the previously selected size data.\n\t\t\t\t\tif ( 'CUSTOM' !== val ) {\n\t\t\t\t\t\tconst newSize = sizes[ val ];\n\t\t\t\t\t\teditCertificate( 'unit', newSize.unit );\n\t\t\t\t\t\teditCertificate( 'width', newSize.width );\n\t\t\t\t\t\teditCertificate( 'height', newSize.height );\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t/>\n\n\t\t\t{ 'CUSTOM' === size && ( ) }\n\n\t\t>\n\t);\n}\n","import { __ } from '@wordpress/i18n';\nimport { TextControl } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { store as editorStore } from '@wordpress/editor';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\nimport editCertificate from '../edit-certificate';\n\n/**\n * Determine if the TitleControl should be displayed.\n *\n * The control is not available for `llms_my_certificate` post types at all and is not used\n * when a `lifterlms/certificate-title` block is found in the content of an `llms_certificate`\n * post type.\n *\n * @since 6.0.0\n *\n * @param {Object} props Component properties.\n * @param {WPElement[]} props.children Child components.\n * @return {?WPElement[]} Child components list or `null` if the components shouldn't display.\n */\nexport function Check( { children } ) {\n\tconst { getCurrentPostType } = useSelect( editorStore ),\n\t\t{ getInserterItems } = useSelect( blockEditorStore );\n\n\tif ( 'llms_certificate' !== getCurrentPostType() ) {\n\t\treturn null;\n\t}\n\n\t// Using this method in favor of `canInsertBlockType()` due to this: https://github.com/WordPress/gutenberg/issues/37540.\n\tconst { isDisabled } = getInserterItems().find( ( { name } ) => 'llms/certificate-title' === name );\n\tif ( isDisabled ) {\n\t\treturn null;\n\t}\n\n\treturn children;\n}\n\n/**\n * Certificates title control component.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component arguments.\n * @param {string} args.title Currently selected title value.\n * @return {TextControl} Control component.\n */\nexport default function TitleControl( { title } ) {\n\treturn (\n\t\t editCertificate( 'title', val ) }\n\t\t\thelp={ __( 'Used as the title for certificates generated from this template.', 'lifterlms' ) }\n\t\t/>\n\t);\n}\n","import { AwardCheck } from './award-check';\nimport { AwardCertificateButton } from '../../util';\n\n/**\n * Renders a button / modal interface used to generate awarded certificates.\n *\n * @since 6.0.0\n *\n * @param {Object} params Component options.\n * @param {number} params.postId WP_Post ID of the template.\n * @param {string} params.postType Current post type where the button is being displayed.\n * @param {boolean} params.isSaving Whether or not the editor is currently saving.\n * @param {boolean} params.isPublished Whether or not the current post is published.\n * @return {AwardCheck} Check component which conditionally renders the component.\n */\nexport default function( { postId, postType, isSaving, isPublished } ) {\n\treturn (\n\t\t\n\t\t\t \n\t\t \n\t);\n}\n\n","/**\n * Conditional wrapper component used to determine if the AwardFromTemplate component should be rendered.\n *\n * The component is rendered for certificate templates.\n *\n * @since 6.0.0\n *\n * @param {Object} params Component parameters.\n * @param {Object[]} params.postType Current post type.\n * @param {Object[]} params.children Child components.\n * @return {?Object[]} Returns the children or `null` if the check fails.\n */\nexport function AwardCheck( { postType, children } ) {\n\tif ( postType && 'llms_certificate' === postType ) {\n\t\treturn children;\n\t}\n\treturn null;\n}\n","import { compose } from '@wordpress/compose';\nimport { withSelect } from '@wordpress/data';\nimport { PluginPostStatusInfo } from '@wordpress/edit-post';\nimport { store as editorStore } from '@wordpress/editor';\n\nimport AwardButton from './award-button';\nimport ResetButton from './reset-template-button';\n\n/**\n * Renders a button / modal interface used to generate awarded certificates.\n *\n * @since 6.0.0\n *\n * @param {Object} params Component options.\n * @param {boolean} params.isPublished Whether or not the current post is published.\n * @param {boolean} params.isSaving Whether or not the editor is currently saving.\n * @param {number} params.postId WP_Post ID of the template.\n * @param {string} params.postType Current post type where the button is being displayed.\n * @return {PluginPostStatusInfo} The status info component.\n */\nexport function PluginStatusButtons( { isPublished, isSaving, postId, postType } ) {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t \n\t\t\t\t
\n\t\t\t
\n\t\t \n\t);\n}\n\nexport default compose( [\n\twithSelect( ( wpSelect ) => {\n\t\tconst {\n\t\t\tisSavingPost,\n\t\t\tisCurrentPostPublished,\n\t\t\tgetCurrentPostId,\n\t\t\tgetCurrentPostType,\n\t\t} = wpSelect( editorStore );\n\t\treturn {\n\t\t\tisPublished: isCurrentPostPublished(),\n\t\t\tisSaving: isSavingPost(),\n\t\t\tpostId: getCurrentPostId(),\n\t\t\tpostType: getCurrentPostType(),\n\t\t};\n\t} ),\n] )( PluginStatusButtons );\n","import { __ } from '@wordpress/i18n';\nimport { Button, Modal } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\nimport { dispatch, select } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { store as editorStore } from '@wordpress/editor';\nimport { synchronizeBlocksWithTemplate } from '@wordpress/blocks';\nimport { doAction } from '@wordpress/hooks';\n\nimport { ResetTemplateCheck } from './reset-template-check';\nimport { editCertificateTitle } from '../../util';\n\n/**\n * Resets the post's default post type template and then triggers a save action.\n *\n * @since 6.0.0\n * @param {Function} onComplete Callback function invoked when the reset and save actions are completed.\n * @param {boolean} isPublished Determines if the current post is published.\n * @return {void}\n */\nfunction resetTemplate( onComplete, isPublished ) {\n\tconst { getBlocks, getTemplate } = select( blockEditorStore ),\n\t\t{ replaceBlocks, insertBlocks } = dispatch( blockEditorStore ),\n\t\t{ editPost, savePost } = dispatch( editorStore ),\n\t\tclientIds = getBlocks().map( ( { clientId } ) => clientId ),\n\t\ttemplate = synchronizeBlocksWithTemplate( [], getTemplate() );\n\n\teditCertificateTitle( '' );\n\tif ( isPublished ) {\n\t\teditPost( { status: 'draft' } );\n\t}\n\n\t/**\n\t * Action run before the default certificate post type template is reset.\n\t *\n\t * @since 6.0.0\n\t *\n\t * @param {Array} template Block template array.\n\t */\n\tdoAction( 'llms.resetCertificateTemplate.before', template );\n\n\tif ( clientIds.length ) {\n\t\treplaceBlocks( clientIds, template );\n\t} else {\n\t\tinsertBlocks( template );\n\t}\n\n\t/**\n\t * Action run after the default certificate post type template is reset.\n\t *\n\t * @since 6.0.0\n\t *\n\t * @param {Array} template Block template array.\n\t */\n\tdoAction( 'llms.resetCertificateTemplate.after', template );\n\n\tsavePost();\n\tonComplete();\n}\n\n/**\n * Resets a certificate to the default block template defined during post type registration.\n *\n * Renders a \"Reset template\" button near the \"Move to trash\" button in the post status\n * area of the editor document settings sidebar.\n *\n * @since 6.0.0\n *\n * @param {Object} props Component properties.\n * @param {boolean} props.isSaving Whether or not the post is currently being saved. The main button is disabled during saves.\n * @param {boolean} props.isPublished Whether or not the post is currently published. If the post is published, it will be switched to a draft during the reset.\n *\n * @return {?ResetTemplateCheck} Returns the child components to render or `null` if the button should not be displayed.\n */\nexport default function( { isSaving, isPublished } ) {\n\tconst [ isOpen, setIsOpen ] = useState( false ),\n\t\tcloseModal = () => setIsOpen( false ),\n\t\topenModal = () => setIsOpen( true );\n\n\tlet msg = __( 'Are you sure you wish to replace the certificate content with the original default layout? This action cannot be undone!', 'lifterlms' );\n\tif ( isPublished ) {\n\t\tmsg = __( \"Are you sure you wish to unpublish the certificate and replace it's content with the original default layout? This action cannot be undone!\", 'lifterlms' );\n\t}\n\n\treturn (\n\t\t\n\t\t\t{ isOpen && (\n\t\t\t\t\n\t\t\t\t\t{ msg }
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Cancel', 'lifterlms' ) }\n\t\t\t\t\t\t \n\t\t\t\t\t\t \n\t\t\t\t\t\t resetTemplate( closeModal, isPublished ) }>\n\t\t\t\t\t\t\t{ __( 'Reset template', 'lifterlms' ) }\n\t\t\t\t\t\t \n\t\t\t\t\t
\n\t\t\t\t \n\t\t\t) }\n\t\t\t{ __( 'Reset template', 'lifterlms' ) } \n\t\t \n\t);\n}\n","import { useSelect } from '@wordpress/data';\nimport { store as editorStore } from '@wordpress/editor';\n\n/**\n * Conditional wrapper component used to determine if the ResetTemplate component should be rendered.\n *\n * The component is rendered for certificate templates and awarded certificates so long as the template\n * is *not* connected to a template.\n *\n * @since 6.0.0\n *\n * @param {Object} params Component parameters.\n * @param {Object[]} params.children Child components.\n * @return {?Object[]} Returns the children or `null` if the check fails.\n */\nexport function ResetTemplateCheck( { children } ) {\n\tconst { getCurrentPost } = useSelect( editorStore ),\n\t\tpost = getCurrentPost(),\n\t\t{ type, certificate_template: template } = post;\n\n\tif ( type && ( 'llms_certificate' === type || ( 'llms_my_certificate' === type && 0 === template ) ) ) {\n\t\treturn children;\n\t}\n\n\treturn null;\n}\n","// External deps.\nimport styled from '@emotion/styled';\n\n// WP deps.\nimport { __ } from '@wordpress/i18n';\nimport { PanelRow, ExternalLink } from '@wordpress/components';\nimport { compose } from '@wordpress/compose';\nimport { withSelect, dispatch, useSelect } from '@wordpress/data';\nimport { PluginPostStatusInfo } from '@wordpress/edit-post';\nimport { store as editorStore } from '@wordpress/editor';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { addQueryArgs, getQueryArg } from '@wordpress/url';\n\n// Internal deps.\nimport { UserSearchControl } from '@lifterlms/components';\n\n/**\n * Force the PanelRow to full-width.\n *\n * @since 6.0.0\n */\nexport const StyledPanelRow = styled( PanelRow )`\n\twidth: 100%;\n`;\n\n/**\n * Outputs information about the selected user.\n *\n * This component is displayed for published certificates in place of the .\n *\n * @since 6.0.0\n *\n * @param {Object} args Component arguments.\n * @param {Object} args.userId WP_User ID of the selected user.\n * @return {WPElement|ExternalLink} Returns a generic element with loading text or an ExternalLink component linking to the\n * the WP admin user edit screen for the selected user.\n */\nfunction SelectedUser( { userId } ) {\n\tconst name = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityRecord } = select( coreStore ),\n\t\t\t\tuser = getEntityRecord( 'root', 'user', userId );\n\t\t\treturn user?.name;\n\t\t},\n\t\t[ userId ]\n\t);\n\n\tif ( ! name ) {\n\t\treturn (\n\t\t\t{ __( 'Loading…', 'lifterlms' ) } \n\t\t);\n\t}\n\n\treturn ( { name } );\n}\n\n/**\n * Render the certificate settings editor panel.\n *\n * @since 6.0.0\n *\n * @param {Object} args Component arguments.\n * @param {string} args.type Current post type.\n * @param {number} args.userId WP User Id.\n * @param {boolean} args.isNew Whether the current post has never been saved.\n * @return {?PluginPostStatusInfo} The component or `null` when rendered in an invalid context.\n */\nfunction CertificateUserSettings( { type, userId, isNew } ) {\n\t// Only load for the right post type.\n\tif ( 'llms_my_certificate' !== type ) {\n\t\treturn null;\n\t}\n\n\t// Retrieve the user ID from the URL.\n\tconst forceId = getQueryArg( window.location.href, 'sid' );\n\tuserId = forceId ? forceId : userId;\n\n\treturn (\n\n\t\t\n\t\t\t\n\t\t\t\t{ __( 'Student', 'lifterlms' ) } \n\n\t\t\t\t{ ( ! isNew || forceId ) && (\n\t\t\t\t\t \n\t\t\t\t) }\n\t\t\t\t{ ( isNew && ! forceId ) && (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tconst { editPost } = dispatch( editorStore );\n\t\t\t\t\t\t\teditPost(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tauthor: id, // Update the post author.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t \n\t\t \n\n\t);\n}\n\nconst applyWithSelect = withSelect( ( select ) => {\n\tconst { getEditedPostAttribute, isEditedPostNew } = select( editorStore );\n\treturn {\n\t\tisNew: isEditedPostNew(),\n\t\ttype: getEditedPostAttribute( 'type' ),\n\t\tuserId: getEditedPostAttribute( 'author' ),\n\t};\n} );\n\nexport default compose( [ applyWithSelect ] )(\n\tCertificateUserSettings\n);\n","// WP deps.\nimport { store as coreStore } from '@wordpress/core-data';\nimport { dispatch } from '@wordpress/data';\n\n/**\n * Creates a new awarded certificate post for a given student with a specified parent template.\n *\n * @since 6.0.0\n *\n * @param {number} studentId WP_User ID.\n * @param {number} templateId WP_Post ID.\n * @return {Promise} A promise that resolves to the WP_Post object api response on success.\n */\nexport default function( studentId, templateId ) {\n\tconst { saveEntityRecord } = dispatch( coreStore );\n\n\treturn saveEntityRecord(\n\t\t'postType',\n\t\t'llms_my_certificate',\n\t\t{\n\t\t\tauthor: studentId,\n\t\t\tcertificate_template: templateId,\n\t\t\tstatus: 'draft',\n\t\t}\n\t);\n}\n","// WP Deps.\nimport { __ } from '@wordpress/i18n';\nimport { Button, Modal } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\n\n// LLMS Deps.\nimport { PostSearchControl, UserSearchControl } from '@lifterlms/components';\n\n// Internal Deps.\nimport createAward from './create';\nimport getMessage from './message';\nimport { getRedirectUrl, getScratchUrl } from './urls';\n\n/**\n * Button and modal interface for creating a draft certificate from a specified template for a specific student.\n *\n * @since 6.0.0\n *\n * @param {Object} params Component configuration object.\n * @param {string} params.modalTitle Title of the modal.\n * @param {string} params.buttonLabel Text of the button.\n * @param {boolean} params.isDisabled Whether or not the button is disabled.\n * @param {boolean} params.enableScratch When `true`, displays a \"Start from Scratch\" button that links to the awarded certificate editor page.\n * @param {boolean} params.selectStudent When `true`, displays a searchable select element to allow user selection of the user.\n * @param {boolean} params.selectTemplate When `true`, displays a searchable select element to allow user selection of the template.\n * @param {?number} params.studentId WP_User ID of the student to award the certificate to.\n * @param {?number} params.templateId WP_Post ID of the certificate template post to create the certificate from.\n * @return {WPElement} The component.\n */\nexport default function( {\n\tmodalTitle = __( 'Award a New Certificate', 'lifterlms' ),\n\tbuttonLabel = __( 'Award', 'lifterlms' ),\n\tisDisabled = false,\n\tenableScratch = true,\n\tselectStudent = true,\n\tselectTemplate = true,\n\tstudentId = null,\n\ttemplateId = null,\n} ) {\n\tconst [ isOpen, setIsOpen ] = useState( false ),\n\t\t[ isBusy, setIsBusy ] = useState( false ),\n\t\t[ currStudentId, setStudentId ] = useState( studentId ),\n\t\t[ currTemplateId, setTemplateId ] = useState( templateId ),\n\t\tcloseModal = () => setIsOpen( false ),\n\t\topenModal = () => setIsOpen( true ),\n\t\tisReady = currStudentId && currTemplateId,\n\t\tonClick = () => {\n\t\t\tsetIsBusy( true );\n\t\t\tcreateAward( currStudentId, currTemplateId ).then( ( { id } ) => {\n\t\t\t\twindow.location = getRedirectUrl( id );\n\t\t\t} );\n\t\t};\n\n\treturn (\n\t\t<>\n\t\t\t{ isOpen && (\n\t\t\t\t\n\n\t\t\t\t\t{ getMessage( selectStudent, selectTemplate ) }
\n\n\t\t\t\t\t{ selectStudent && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tconst id = obj?.id || null;\n\t\t\t\t\t\t\t\tsetStudentId( id );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ selectTemplate && (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tconst id = obj?.id || null;\n\t\t\t\t\t\t\t\tsetTemplateId( id );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Create Draft' ) }\n\t\t\t\t\t\t \n\n\t\t\t\t\t\t{ enableScratch && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{ __( 'Start from Scratch', 'lifterlms' ) }\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{ __( 'Cancel', 'lifterlms' ) }\n\t\t\t\t\t\t \n\t\t\t\t\t
\n\t\t\t\t \n\t\t\t) }\n\t\t\t\n\t\t\t\t{ buttonLabel }\n\t\t\t \n\t\t>\n\t);\n}\n","import { __ } from '@wordpress/i18n';\n\n/**\n * Retrieves the message based on the selectors present in the modal.\n *\n * @since 6.0.0\n *\n * @param {boolean} selectStudent Whether or not the student selector is present.\n * @param {boolean} selectTemplate Whether or not the template selector is present.\n * @return {string} A message string.\n */\nexport default function( selectStudent, selectTemplate ) {\n\tlet msg = '';\n\tif ( selectStudent && selectTemplate ) {\n\t\tmsg = __( 'Create a new certificate award from the selected template for the selected student.', 'lifterlms' );\n\t} else if ( selectStudent && ! selectTemplate ) {\n\t\tmsg = __( 'Create a new certificate award from this template for the selected student.', 'lifterlms' );\n\t} else if ( ! selectStudent && selectTemplate ) {\n\t\tmsg = __( 'Create a new certificate award from the selected template for this student.', 'lifterlms' );\n\t}\n\treturn msg;\n}\n","// WP deps.\nimport { addQueryArgs } from '@wordpress/url';\n\n// LLMS deps.\nimport { getAdminUrl } from '@lifterlms/utils';\n\n/**\n * Retrieves the redirect URL for the newly created certificate.\n *\n * @since 6.0.0\n *\n * @param {number} post WP_Post ID.\n * @return {string} The edit post URL for awarded certificate draft.\n */\nexport function getRedirectUrl( post ) {\n\treturn addQueryArgs(\n\t\t`${ getAdminUrl() }/post.php`,\n\t\t{\n\t\t\tpost,\n\t\t\taction: 'edit',\n\t\t\tnewAwardMsg: 1,\n\t\t}\n\t);\n}\n\n/**\n * Retrieves the url for the \"Start from Scratch\" button.\n *\n * @since 6.0.0\n *\n * @param {?number} sid WP_User ID of the selected student.\n * @return {string} The URL.\n */\nexport function getScratchUrl( sid = null ) {\n\tconst args = {\n\t\tpost_type: 'llms_my_certificate',\n\t};\n\n\tif ( sid ) {\n\t\targs.sid = sid;\n\t}\n\n\treturn addQueryArgs(\n\t\t`${ getAdminUrl() }/post-new.php`,\n\t\targs,\n\t);\n}\n","import { dispatch, select } from '@wordpress/data';\nimport { store as editorStore } from '@wordpress/editor';\n\n/**\n * Edits the title of the current certificate post type in the block editor.\n *\n * This utility is used to allow sharing functionality between `llms_certificate` and `llms_my_certificate`\n * post types. Depending on the post type, the certificate title is stored in a different post field.\n *\n * To edit the actual post title of a `llms_certificate` post (not the awarded certificate's title), use\n * `wp.data.dispatch( 'core/editor' ).editPost()` directly.\n *\n * @since 6.0.0\n *\n * @param {string} title The desired certificate title.\n * @param {string} postType The current post type, automatically reads it from the current post if omitted.\n * @return {Promise} Promise that resolves when the title edits have been made to the current post.\n */\nexport function editCertificateTitle( title, postType = null ) {\n\tif ( ! postType ) {\n\t\tconst { getCurrentPostType } = select( editorStore );\n\t\tpostType = getCurrentPostType();\n\t}\n\n\tconst { editPost } = dispatch( editorStore ),\n\t\tedits = {};\n\n\tif ( 'llms_certificate' === postType ) {\n\t\tedits.certificate_title = title;\n\t} else if ( 'llms_my_certificate' === postType ) {\n\t\tedits.title = title;\n\t}\n\n\treturn editPost( edits );\n}\n","export { editCertificateTitle } from './edit-certificate-title';\nexport { default as AwardCertificateButton } from './award-certificate-button';\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","module.exports = window[\"React\"];","module.exports = window[\"llms\"][\"components\"];","module.exports = window[\"llms\"][\"icons\"];","module.exports = window[\"llms\"][\"utils\"];","module.exports = window[\"wp\"][\"blockEditor\"];","module.exports = window[\"wp\"][\"blocks\"];","module.exports = window[\"wp\"][\"components\"];","module.exports = window[\"wp\"][\"compose\"];","module.exports = window[\"wp\"][\"coreData\"];","module.exports = window[\"wp\"][\"data\"];","module.exports = window[\"wp\"][\"domReady\"];","module.exports = window[\"wp\"][\"editPost\"];","module.exports = window[\"wp\"][\"editor\"];","module.exports = window[\"wp\"][\"element\"];","module.exports = window[\"wp\"][\"hooks\"];","module.exports = window[\"wp\"][\"i18n\"];","module.exports = window[\"wp\"][\"notices\"];","module.exports = window[\"wp\"][\"plugins\"];","module.exports = window[\"wp\"][\"richText\"];","module.exports = window[\"wp\"][\"url\"];","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length)\n\t\t\t\t\tbreak\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && characters.charCodeAt(length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {string}\n */\nexport function prefix (value, length) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// flex, flex-direction\n\t\tcase 6828: case 4268:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// (s)ticky?\n\t\t\tif (charat(value, length + 1) !== 115)\n\t\t\t\tbreak\n\t\t// display: (flex|inline-flex)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n\t\t\t\t// stic(k)y\n\t\t\t\tcase 107:\n\t\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\t\t// (inline-)?fl(e)x\n\t\t\t\tcase 101:\n\t\t\t\t\treturn replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t}\n\t\t\tbreak\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t}\n\n\t\t\treturn WEBKIT + value + MS + value + value\n\t}\n\n\treturn value\n}\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3)\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import './admin-certificate-editor/index';\n"],"names":["__","compose","withSelect","PluginDocumentSettingPanel","store","editorStore","BackgroundControl","MarginsControl","OrientationControl","SequentialIdControl","SizeControl","TitleControl","Check","TitleControlCheck","CertificateDocumentSettings","_ref","type","title","sequentialId","background","height","margins","orientation","size","unit","width","createElement","className","name","opened","Fragment","applyWithSelect","select","getEditedPostAttribute","dispatch","editCertificate","key","val","editPost","edits","coreStore","subscribe","rawHandler","domReady","blockEditorStore","hasSaved","getFeaturedMedia","getMedia","imageId","getBackgroundImage","mediaRes","default_image","defaultSrc","window","llms","certificates","undefined","source_url","src","applyBlockVisualFixes","style","document","appendChild","createTextNode","head","hasCertificateTitle","getInserterItems","isDisabled","find","maybeRefreshContent","content","editedContent","isSavingPost","isSaving","REGEX","actualMatch","match","editedMatch","length","refreshContent","replaceBlocks","savePost","getBlocks","map","_ref2","clientId","HTML","updateDOM","getCurrentPostAttribute","getCurrentPostType","bg","list","querySelector","displayWidth","displayHeight","padding","margin","join","backgroundImage","backgroundSize","backgroundRepeat","marginLeft","marginRight","minHeight","boxSizing","styles","backgroundColor","display","addFilter","unsubscribe","postType","doUnsubscribe","withFilter","text","registerPlugin","CertificatePostStatusInfo","CertificateUserSettings","render","icon","RichTextToolbarButton","Button","Modal","registerFormatType","insert","useState","CopyButton","Icon","lifterlms","MergeCodeTableRow","closeModal","onChange","value","merge_codes","Object","entries","index","code","textAlign","buttonText","copyText","onCopy","isLink","isSecondary","isSmall","onClick","Edit","props","isOpen","setOpen","openModal","onRequestClose","tagName","edit","serialize","search","URLSearchParams","location","doMigration","parseInt","get","blocks","getAllBlocks","withMigration","migrateClassicBlock","classics","filter","forEach","block","modifyColumnsBlock","settings","blockName","variations","variation","attributes","isStackedOnMobile","noticeStore","getQueryArg","href","createSuccessNotice","useSetting","BaseControl","ColorPalette","usePalette","palette","colors","item","color","startsWith","toLowerCase","setColor","label","id","clearable","styled","TextControl","getDesc","vals","StyledTextControl","MarginControl","editMargins","currMargin","setMargin","marginId","flex","marginTop","setState","newMargins","ButtonGroupControl","orientations","options","selected","currId","setId","minSequentialId","step","min","help","_x","sprintf","SelectControl","formatSizeLabel","units","symbol","CustomSizeControl","currWidth","setWidth","currHeight","setHeight","currUnit","setUnit","placeholder","hideLabelFromVision","_ref3","sizes","_ref4","sizeData","setSize","push","newSize","useSelect","children","AwardCheck","AwardCertificateButton","postId","isPublished","enableScratch","selectTemplate","templateId","PluginPostStatusInfo","AwardButton","ResetButton","PluginStatusButtons","wpSelect","isCurrentPostPublished","getCurrentPostId","synchronizeBlocksWithTemplate","doAction","ResetTemplateCheck","editCertificateTitle","resetTemplate","onComplete","getTemplate","insertBlocks","clientIds","template","status","setIsOpen","msg","maxWidth","variant","disabled","isDestructive","getCurrentPost","post","certificate_template","PanelRow","ExternalLink","addQueryArgs","UserSearchControl","StyledPanelRow","SelectedUser","userId","getEntityRecord","user","page","tab","stab","student_id","isNew","forceId","selectedValue","onUpdate","author","isEditedPostNew","studentId","saveEntityRecord","PostSearchControl","createAward","getMessage","getRedirectUrl","getScratchUrl","modalTitle","buttonLabel","selectStudent","isBusy","setIsBusy","currStudentId","setStudentId","currTemplateId","setTemplateId","isReady","then","isClearable","obj","borderTop","getAdminUrl","action","newAwardMsg","sid","arguments","args","post_type","certificate_title","default"],"sourceRoot":""}
\ No newline at end of file
diff --git a/assets/js/llms-admin-elementor-editor.asset.php b/assets/js/llms-admin-elementor-editor.asset.php
new file mode 100644
index 0000000000..537019b1fa
--- /dev/null
+++ b/assets/js/llms-admin-elementor-editor.asset.php
@@ -0,0 +1 @@
+ array('wp-polyfill'), 'version' => 'adcda79c488b3fc7b474');
diff --git a/assets/js/llms-admin-elementor-editor.js b/assets/js/llms-admin-elementor-editor.js
new file mode 100644
index 0000000000..664ca96e49
--- /dev/null
+++ b/assets/js/llms-admin-elementor-editor.js
@@ -0,0 +1 @@
+jQuery(document).ready((function(e){"undefined"!=typeof elementor&&elementor.modules.layouts.panel.pages.menu.Menu.addItem({name:"Course Builder",title:"Launch Course Builder",icon:"wp-menu-image dashicons-before dashicons-welcome-learn-more",callback:function(){window.location.href=llms_elementor.builder_url}},"navigate_from_page","finder")}));
\ No newline at end of file
diff --git a/assets/js/llms-admin-elementor-editor.js.map b/assets/js/llms-admin-elementor-editor.js.map
new file mode 100644
index 0000000000..7360e9ca5d
--- /dev/null
+++ b/assets/js/llms-admin-elementor-editor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"js/llms-admin-elementor-editor.js","mappings":";;;;;AAAAA,MAAM,CAACC,QAAQ,CAAC,CAACC,KAAK,CAAC,UAASC,CAAC,EAAE;EAClC,IAAI,OAAOC,SAAS,KAAK,WAAW,EAAE;IACrC;EACD;EAEAA,SAAS,CAACC,OAAO,CAACC,OAAO,CAACC,KAAK,CAACC,KAAK,CAACC,IAAI,CAACC,IAAI,CAACC,OAAO,CAAC;IACvDC,IAAI,EAAC,gBAAgB;IACrBC,KAAK,EAAC,uBAAuB;IAC7BC,IAAI,EAAE,6DAA6D;IACnEC,QAAQ,EAAE,SAASA,QAAQA,CAAA,EAAG;MAC7BC,MAAM,CAACC,QAAQ,CAACC,IAAI,GAAGC,cAAc,CAACC,WAAW;IAClD;EAAC,CAAC,EAAE,oBAAoB,EAAE,QAAQ,CAAC;AACrC,CAAC,CAAC,C","sources":["webpack://lifterlms/./src/js/admin-elementor-editor.js"],"sourcesContent":["jQuery(document).ready(function($) {\n\tif (typeof elementor === 'undefined') {\n\t\treturn;\n\t}\n\n\telementor.modules.layouts.panel.pages.menu.Menu.addItem({\n\t\tname:'Course Builder',\n\t\ttitle:'Launch Course Builder',\n\t\ticon: 'wp-menu-image dashicons-before dashicons-welcome-learn-more',\n\t\tcallback: function callback() {\n\t\t\twindow.location.href = llms_elementor.builder_url;\n\t\t}}, 'navigate_from_page', 'finder');\n});\n"],"names":["jQuery","document","ready","$","elementor","modules","layouts","panel","pages","menu","Menu","addItem","name","title","icon","callback","window","location","href","llms_elementor","builder_url"],"sourceRoot":""}
\ No newline at end of file
diff --git a/assets/js/llms-admin-elementor-editor.min.js b/assets/js/llms-admin-elementor-editor.min.js
new file mode 100644
index 0000000000..1fb22b3a33
--- /dev/null
+++ b/assets/js/llms-admin-elementor-editor.min.js
@@ -0,0 +1,2 @@
+jQuery(document).ready(function(e){"undefined"!=typeof elementor&&elementor.modules.layouts.panel.pages.menu.Menu.addItem({name:"Course Builder",title:"Launch Course Builder",icon:"wp-menu-image dashicons-before dashicons-welcome-learn-more",callback:function(){window.location.href=llms_elementor.builder_url}},"navigate_from_page","finder")});
+//# sourceMappingURL=../maps/js/llms-admin-elementor-editor.min.js.map
diff --git a/assets/js/llms-admin.min.js b/assets/js/llms-admin.min.js
new file mode 100644
index 0000000000..1031957a68
--- /dev/null
+++ b/assets/js/llms-admin.min.js
@@ -0,0 +1,2 @@
+!function(s){window.llms=window.llms||{},window.llms.widgets=function(){return this.$widgets=s(".llms-widget"),this.$info_toggles=s(".llms-widget-info-toggle"),this.init=function(){this.bind()},this.bind=function(){this.$info_toggles.on("mouseenter mouseleave",function(e){s(this).closest(".llms-widget").toggleClass("info-showing","mouseenter"===e.type)})},this.init(),this};new window.llms.widgets;s.fn.llmsPostsSelect2=function(t){var l=this,t=t||{},e={multiple:!1,placeholder:void 0!==LLMS.l10n?LLMS.l10n.translate("Select a Course/Membership"):"Select a Course/Membership",post_type:l.attr("data-post-type")||"post",post_statuses:l.attr("data-post-statuses")||"publish",instructor_id:null,allow_clear:l.attr("data-post-type")||!1,width:null};s.each(e,function(e){l.attr("data-"+e)&&(t[e]=l.attr("data-"+e))}),"multiple"===l.attr("multiple")&&(t.multiple=!0),t=s.extend(e,t),this.llmsSelect2({allowClear:t.allow_clear,ajax:{dataType:"JSON",delay:250,method:"POST",url:window.ajaxurl,data:function(e){return{action:"select2_query_posts",page:e.page?e.page-1:0,post_type:t.post_type,instructor_id:t.instructor_id,post_statuses:t.post_statuses,term:e.term,_ajax_nonce:window.llms.ajax_nonce}},processResults:function(e,t){return{results:function t(e){return Array.isArray(e)?s.map(e,function(e){return{text:e.name,id:e.id}}):s.map(e,function(e){return{text:e.label,children:t(e.items)}})}(e.items),pagination:{more:e.more}}}},cache:!0,placeholder:t.placeholder,multiple:t.multiple,width:t.width})},s("select.llms-posts-select2").llmsPostsSelect2(),s.fn.llmsStudentsSelect2=function(t){var l,e;return this.length&&(l=this,t=t||{},e={allow_clear:!1,enrolled_in:"",multiple:!1,not_enrolled_in:"",placeholder:void 0!==LLMS.l10n?LLMS.l10n.translate("Select a student"):"Select a student",roles:"",width:"100%"},s.each(e,function(e){l.attr("data-"+e)&&(t[e]=l.attr("data-"+e))}),t=s.extend(e,t),this.llmsSelect2({allowClear:t.allow_clear,ajax:{dataType:"JSON",delay:250,method:"GET",url:window.wpApiSettings.root+"wp/v2/users",data:function(e){return{_wpnonce:window.wpApiSettings.nonce,context:"edit",page:e.page||1,per_page:10,not_enrolled_in:e.not_enrolled_in||t.not_enrolled_in,enrolled_in:e.enrolled_in||t.enrolled_in,roles:e.roles||t.roles,search:e.term,search_columns:"email,name,username"}},processResults:function(e,t){var t=t.page||1,l=this._request.getResponseHeader("X-WP-TotalPages");return{results:s.map(e,function(e){return{text:e.name+" <"+e.email+">",id:e.id}}),pagination:{more:t'+LLMS.l10n.replace("Error: %s",{"%s":e})+"").insertAfter(t)})}}}(jQuery);
+//# sourceMappingURL=../maps/js/llms-admin.min.js.map
diff --git a/assets/js/llms-builder.js b/assets/js/llms-builder.js
new file mode 100644
index 0000000000..c9d1272ecb
--- /dev/null
+++ b/assets/js/llms-builder.js
@@ -0,0 +1,11764 @@
+(function($){
+/**
+ * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
+ * Released under MIT license, http://github.com/requirejs/almond/LICENSE
+ */
+//Going sloppy to avoid 'use strict' string cost, but strict practices should
+//be followed.
+/*global setTimeout: false */
+
+var requirejs, require, define;
+(function (undef) {
+ var main, req, makeMap, handlers,
+ defined = {},
+ waiting = {},
+ config = {},
+ defining = {},
+ hasOwn = Object.prototype.hasOwnProperty,
+ aps = [].slice,
+ jsSuffixRegExp = /\.js$/;
+
+ function hasProp(obj, prop) {
+ return hasOwn.call(obj, prop);
+ }
+
+ /**
+ * Given a relative module name, like ./something, normalize it to
+ * a real name that can be mapped to a path.
+ * @param {String} name the relative name
+ * @param {String} baseName a real name that the name arg is relative
+ * to.
+ * @returns {String} normalized name
+ */
+ function normalize(name, baseName) {
+ var nameParts, nameSegment, mapValue, foundMap, lastIndex,
+ foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,
+ baseParts = baseName && baseName.split("/"),
+ map = config.map,
+ starMap = (map && map['*']) || {};
+
+ //Adjust any relative paths.
+ if (name) {
+ name = name.split('/');
+ lastIndex = name.length - 1;
+
+ // If wanting node ID compatibility, strip .js from end
+ // of IDs. Have to do this here, and not in nameToUrl
+ // because node allows either .js or non .js to map
+ // to same file.
+ if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
+ name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
+ }
+
+ // Starts with a '.' so need the baseName
+ if (name[0].charAt(0) === '.' && baseParts) {
+ //Convert baseName to array, and lop off the last part,
+ //so that . matches that 'directory' and not name of the baseName's
+ //module. For instance, baseName of 'one/two/three', maps to
+ //'one/two/three.js', but we want the directory, 'one/two' for
+ //this normalization.
+ normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
+ name = normalizedBaseParts.concat(name);
+ }
+
+ //start trimDots
+ for (i = 0; i < name.length; i++) {
+ part = name[i];
+ if (part === '.') {
+ name.splice(i, 1);
+ i -= 1;
+ } else if (part === '..') {
+ // If at the start, or previous value is still ..,
+ // keep them so that when converted to a path it may
+ // still work when converted to a path, even though
+ // as an ID it is less than ideal. In larger point
+ // releases, may be better to just kick out an error.
+ if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {
+ continue;
+ } else if (i > 0) {
+ name.splice(i - 1, 2);
+ i -= 2;
+ }
+ }
+ }
+ //end trimDots
+
+ name = name.join('/');
+ }
+
+ //Apply map config if available.
+ if ((baseParts || starMap) && map) {
+ nameParts = name.split('/');
+
+ for (i = nameParts.length; i > 0; i -= 1) {
+ nameSegment = nameParts.slice(0, i).join("/");
+
+ if (baseParts) {
+ //Find the longest baseName segment match in the config.
+ //So, do joins on the biggest to smallest lengths of baseParts.
+ for (j = baseParts.length; j > 0; j -= 1) {
+ mapValue = map[baseParts.slice(0, j).join('/')];
+
+ //baseName segment has config, find if it has one for
+ //this name.
+ if (mapValue) {
+ mapValue = mapValue[nameSegment];
+ if (mapValue) {
+ //Match, update name to the new value.
+ foundMap = mapValue;
+ foundI = i;
+ break;
+ }
+ }
+ }
+ }
+
+ if (foundMap) {
+ break;
+ }
+
+ //Check for a star map match, but just hold on to it,
+ //if there is a shorter segment match later in a matching
+ //config, then favor over this star map.
+ if (!foundStarMap && starMap && starMap[nameSegment]) {
+ foundStarMap = starMap[nameSegment];
+ starI = i;
+ }
+ }
+
+ if (!foundMap && foundStarMap) {
+ foundMap = foundStarMap;
+ foundI = starI;
+ }
+
+ if (foundMap) {
+ nameParts.splice(0, foundI, foundMap);
+ name = nameParts.join('/');
+ }
+ }
+
+ return name;
+ }
+
+ function makeRequire(relName, forceSync) {
+ return function () {
+ //A version of a require function that passes a moduleName
+ //value for items that may need to
+ //look up paths relative to the moduleName
+ var args = aps.call(arguments, 0);
+
+ //If first arg is not require('string'), and there is only
+ //one arg, it is the array form without a callback. Insert
+ //a null so that the following concat is correct.
+ if (typeof args[0] !== 'string' && args.length === 1) {
+ args.push(null);
+ }
+ return req.apply(undef, args.concat([relName, forceSync]));
+ };
+ }
+
+ function makeNormalize(relName) {
+ return function (name) {
+ return normalize(name, relName);
+ };
+ }
+
+ function makeLoad(depName) {
+ return function (value) {
+ defined[depName] = value;
+ };
+ }
+
+ function callDep(name) {
+ if (hasProp(waiting, name)) {
+ var args = waiting[name];
+ delete waiting[name];
+ defining[name] = true;
+ main.apply(undef, args);
+ }
+
+ if (!hasProp(defined, name) && !hasProp(defining, name)) {
+ throw new Error('No ' + name);
+ }
+ return defined[name];
+ }
+
+ //Turns a plugin!resource to [plugin, resource]
+ //with the plugin being undefined if the name
+ //did not have a plugin prefix.
+ function splitPrefix(name) {
+ var prefix,
+ index = name ? name.indexOf('!') : -1;
+ if (index > -1) {
+ prefix = name.substring(0, index);
+ name = name.substring(index + 1, name.length);
+ }
+ return [prefix, name];
+ }
+
+ //Creates a parts array for a relName where first part is plugin ID,
+ //second part is resource ID. Assumes relName has already been normalized.
+ function makeRelParts(relName) {
+ return relName ? splitPrefix(relName) : [];
+ }
+
+ /**
+ * Makes a name map, normalizing the name, and using a plugin
+ * for normalization if necessary. Grabs a ref to plugin
+ * too, as an optimization.
+ */
+ makeMap = function (name, relParts) {
+ var plugin,
+ parts = splitPrefix(name),
+ prefix = parts[0],
+ relResourceName = relParts[1];
+
+ name = parts[1];
+
+ if (prefix) {
+ prefix = normalize(prefix, relResourceName);
+ plugin = callDep(prefix);
+ }
+
+ //Normalize according
+ if (prefix) {
+ if (plugin && plugin.normalize) {
+ name = plugin.normalize(name, makeNormalize(relResourceName));
+ } else {
+ name = normalize(name, relResourceName);
+ }
+ } else {
+ name = normalize(name, relResourceName);
+ parts = splitPrefix(name);
+ prefix = parts[0];
+ name = parts[1];
+ if (prefix) {
+ plugin = callDep(prefix);
+ }
+ }
+
+ //Using ridiculous property names for space reasons
+ return {
+ f: prefix ? prefix + '!' + name : name, //fullName
+ n: name,
+ pr: prefix,
+ p: plugin
+ };
+ };
+
+ function makeConfig(name) {
+ return function () {
+ return (config && config.config && config.config[name]) || {};
+ };
+ }
+
+ handlers = {
+ require: function (name) {
+ return makeRequire(name);
+ },
+ exports: function (name) {
+ var e = defined[name];
+ if (typeof e !== 'undefined') {
+ return e;
+ } else {
+ return (defined[name] = {});
+ }
+ },
+ module: function (name) {
+ return {
+ id: name,
+ uri: '',
+ exports: defined[name],
+ config: makeConfig(name)
+ };
+ }
+ };
+
+ main = function (name, deps, callback, relName) {
+ var cjsModule, depName, ret, map, i, relParts,
+ args = [],
+ callbackType = typeof callback,
+ usingExports;
+
+ //Use name if no relName
+ relName = relName || name;
+ relParts = makeRelParts(relName);
+
+ //Call the callback to define the module, if necessary.
+ if (callbackType === 'undefined' || callbackType === 'function') {
+ //Pull out the defined dependencies and pass the ordered
+ //values to the callback.
+ //Default to [require, exports, module] if no deps
+ deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
+ for (i = 0; i < deps.length; i += 1) {
+ map = makeMap(deps[i], relParts);
+ depName = map.f;
+
+ //Fast path CommonJS standard dependencies.
+ if (depName === "require") {
+ args[i] = handlers.require(name);
+ } else if (depName === "exports") {
+ //CommonJS module spec 1.1
+ args[i] = handlers.exports(name);
+ usingExports = true;
+ } else if (depName === "module") {
+ //CommonJS module spec 1.1
+ cjsModule = args[i] = handlers.module(name);
+ } else if (hasProp(defined, depName) ||
+ hasProp(waiting, depName) ||
+ hasProp(defining, depName)) {
+ args[i] = callDep(depName);
+ } else if (map.p) {
+ map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
+ args[i] = defined[depName];
+ } else {
+ throw new Error(name + ' missing ' + depName);
+ }
+ }
+
+ ret = callback ? callback.apply(defined[name], args) : undefined;
+
+ if (name) {
+ //If setting exports via "module" is in play,
+ //favor that over return value and exports. After that,
+ //favor a non-undefined return value over exports use.
+ if (cjsModule && cjsModule.exports !== undef &&
+ cjsModule.exports !== defined[name]) {
+ defined[name] = cjsModule.exports;
+ } else if (ret !== undef || !usingExports) {
+ //Use the return value from the function.
+ defined[name] = ret;
+ }
+ }
+ } else if (name) {
+ //May just be an object definition for the module. Only
+ //worry about defining if have a module name.
+ defined[name] = callback;
+ }
+ };
+
+ requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
+ if (typeof deps === "string") {
+ if (handlers[deps]) {
+ //callback in this case is really relName
+ return handlers[deps](callback);
+ }
+ //Just return the module wanted. In this scenario, the
+ //deps arg is the module name, and second arg (if passed)
+ //is just the relName.
+ //Normalize module name, if it contains . or ..
+ return callDep(makeMap(deps, makeRelParts(callback)).f);
+ } else if (!deps.splice) {
+ //deps is a config object, not an array.
+ config = deps;
+ if (config.deps) {
+ req(config.deps, config.callback);
+ }
+ if (!callback) {
+ return;
+ }
+
+ if (callback.splice) {
+ //callback is an array, which means it is a dependency list.
+ //Adjust args if there are dependencies
+ deps = callback;
+ callback = relName;
+ relName = null;
+ } else {
+ deps = undef;
+ }
+ }
+
+ //Support require(['a'])
+ callback = callback || function () {};
+
+ //If relName is a function, it is an errback handler,
+ //so remove it.
+ if (typeof relName === 'function') {
+ relName = forceSync;
+ forceSync = alt;
+ }
+
+ //Simulate async callback;
+ if (forceSync) {
+ main(undef, deps, callback, relName);
+ } else {
+ //Using a non-zero value because of concern for what old browsers
+ //do, and latest browsers "upgrade" to 4 if lower value is used:
+ //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
+ //If want a value immediately, use require('id') instead -- something
+ //that works in almond on the global level, but not guaranteed and
+ //unlikely to work in other AMD implementations.
+ setTimeout(function () {
+ main(undef, deps, callback, relName);
+ }, 4);
+ }
+
+ return req;
+ };
+
+ /**
+ * Just drops the config on the floor, but returns req in case
+ * the config return value is used.
+ */
+ req.config = function (cfg) {
+ return req(cfg);
+ };
+
+ /**
+ * Expose module registry for debugging and tooling
+ */
+ requirejs._defined = defined;
+
+ define = function (name, deps, callback) {
+ if (typeof name !== 'string') {
+ throw new Error('See almond README: incorrect module build, no module name');
+ }
+
+ //This module may not have dependencies
+ if (!deps.splice) {
+ //deps is not an array, so probably means
+ //an object literal or factory function for
+ //the value. Adjust args.
+ callback = deps;
+ deps = [];
+ }
+
+ if (!hasProp(defined, name) && !hasProp(waiting, name)) {
+ waiting[name] = [name, deps, callback];
+ }
+ };
+
+ define.amd = {
+ jQuery: true
+ };
+}());
+
+define("vendor/almond", function(){});
+
+/**
+ * This is a slightly modified and forward compatible version of the @wordpress/hooks package
+ * as included in the Gutenberg feature plugin version 3.8.0
+ */
+window.llms=window.llms||{};
+// use the core hooks if available
+if ( 'undefined' !== typeof window.wp && 'undefined' !== typeof window.wp.hooks ) {
+ window.llms.hooks = window.wp.hooks;
+// otherwise load our own
+} else {
+ window.llms.hooks=function(n){var r={};function e(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=n,e.c=r,e.d=function(n,r,t){e.o(n,r)||Object.defineProperty(n,r,{configurable:!1,enumerable:!0,get:t})},e.r=function(n){Object.defineProperty(n,"__esModule",{value:!0})},e.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(r,"a",r),r},e.o=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},e.p="",e(e.s=209)}({209:function(n,r,e){"use strict";e.r(r);var t=function(n){return"string"!=typeof n||""===n?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(n)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)};var o=function(n){return"string"!=typeof n||""===n?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(n)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(n)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)};var i=function(n){return function(r,e,i){var u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;if(o(r)&&t(e))if("function"==typeof i)if("number"==typeof u){var c={callback:i,priority:u,namespace:e};if(n[r]){for(var a=n[r].handlers,l=0;lu);)l++;a.splice(l,0,c),(n.__current||[]).forEach(function(n){n.name===r&&n.currentIndex>=l&&n.currentIndex++})}else n[r]={handlers:[c],runs:0};"hookAdded"!==r&&b("hookAdded",r,e,i,u)}else console.error("If specified, the hook priority must be a number.");else console.error("The hook callback must be a function.")}};var u=function(n,r){return function(e,i){if(o(e)&&(r||t(i))){if(!n[e])return 0;var u=0;if(r)u=n[e].handlers.length,n[e]={runs:n[e].runs,handlers:[]};else for(var c=n[e].handlers,a=function(r){c[r].namespace===i&&(c.splice(r,1),u++,(n.__current||[]).forEach(function(n){n.name===e&&n.currentIndex>=r&&n.currentIndex--}))},l=c.length-1;l>=0;l--)a(l);return"hookRemoved"!==e&&b("hookRemoved",e,i),u}}};var c=function(n){return function(r){return r in n}};var a=function(n,r){return function(e){n[e]||(n[e]={handlers:[],runs:0}),n[e].runs++;for(var t=n[e].handlers,o=arguments.length,i=new Array(o>1?o-1:0),u=1;u li, tbody > tr > td" : "_listItem_onMousedown",
+ "dblclick > li, tbody > tr > td" : "_listItem_onDoubleClick",
+ "click" : "_listBackground_onClick",
+ "click ul.collection-view, table.collection-view" : "_listBackground_onClick",
+ "keydown" : "_onKeydown"
+ },
+
+ // only used if Backbone.Courier is available
+ spawnMessages : {
+ "focus" : "focus"
+ },
+
+ //only used if Backbone.Courier is available
+ passMessages : { "*" : "." },
+
+ // viewOption definitions with default values.
+ initializationOptions : [
+ { "collection" : null },
+ { "modelView" : null },
+ { "modelViewOptions" : {} },
+ { "itemTemplate" : null },
+ { "itemTemplateFunction" : null },
+ { "selectable" : true },
+ { "clickToSelect" : true },
+ { "selectableModelsFilter" : null },
+ { "visibleModelsFilter" : null },
+ { "sortableModelsFilter" : null },
+ { "selectMultiple" : false },
+ { "clickToToggle" : false },
+ { "processKeyEvents" : true },
+ { "sortable" : false },
+ { "sortableOptions" : null },
+ { "reuseModelViews" : true },
+ { "detachedRendering" : false },
+ { "emptyListCaption" : null }
+ ],
+
+ initialize : function( options ) {
+ Backbone.ViewOptions.add( this, "initializationOptions" ); // setup the ViewOptions functionality.
+ this.setOptions( options ); // and make use of any provided options
+
+ if( ! this.collection ) this.collection = new Backbone.Collection();
+
+ this._hasBeenRendered = false;
+
+ if( this._isBackboneCourierAvailable() ) {
+ Backbone.Courier.add( this );
+ }
+
+ this.$el.data( "view", this ); // needed for connected sortable lists
+ this.$el.addClass( "collection-view collection-list" ); // collection-list is in there for legacy purposes
+ if( this.selectable ) this.$el.addClass( "selectable" );
+
+ if( this.selectable && this.processKeyEvents )
+ this.$el.attr( "tabindex", 0 ); // so we get keyboard events
+
+ this.selectedItems = [];
+
+ this._updateItemTemplate();
+
+ if( this.collection )
+ this._registerCollectionEvents();
+
+ this.viewManager = new ChildViewContainer();
+ },
+
+ _onOptionsChanged : function( changedOptions, originalOptions ) {
+ var _this = this;
+ var rerender = false;
+
+ _.each( _.keys( changedOptions ), function( changedOptionKey ) {
+ var newVal = changedOptions[ changedOptionKey ];
+ var oldVal = originalOptions[ changedOptionKey ];
+ switch( changedOptionKey ) {
+ case "collection" :
+ if ( newVal !== oldVal ) {
+ _this.stopListening( oldVal );
+ _this._registerCollectionEvents();
+ }
+ break;
+ case "selectMultiple" :
+ if( ! newVal && _this.selectedItems.length > 1 )
+ _this.setSelectedModel( _.first( _this.selectedItems ), { by : "cid" } );
+ break;
+ case "selectable" :
+ if( ! newVal && _this.selectedItems.length > 0 )
+ _this.setSelectedModels( [] );
+
+ if( newVal && this.processKeyEvents ) _this.$el.attr( "tabindex", 0 ); // so we get keyboard events
+ else _this.$el.removeAttr( "tabindex", 0 );
+ break;
+ case "sortable" :
+ changedOptions.sortable ? _this._setupSortable() : _this.$el.sortable( "destroy" );
+ break;
+ case "selectableModelsFilter" :
+ _this.reapplyFilter( 'selectableModels' );
+ break;
+ case "sortableOptions" :
+ _this.$el.sortable( "destroy" );
+ _this._setupSortable();
+ break;
+ case "sortableModelsFilter" :
+ _this.reapplyFilter( 'sortableModels' );
+ break;
+ case "visibleModelsFilter" :
+ _this.reapplyFilter( 'visibleModels' );
+ break;
+ case "itemTemplate" :
+ _this._updateItemTemplate();
+ break;
+ case "processKeyEvents" :
+ if( newVal && this.selectable ) _this.$el.attr( "tabindex", 0 ); // so we get keyboard events
+ else _this.$el.removeAttr( "tabindex", 0 );
+ break;
+ case "modelView" :
+ //need to remove all old view instances
+ _this.viewManager.each( function( view ) {
+ _this.viewManager.remove( view );
+ // destroy the View itself
+ view.remove();
+ } );
+ break;
+ }
+ if( _.contains( kOptionsRequiringRerendering, changedOptionKey ) ) rerender = true;
+ } );
+
+ if( this._hasBeenRendered && rerender ) {
+ this.render();
+ }
+ },
+
+ setOption : function( optionName, optionValue ) { // now is merely a wrapper around backbone.viewOptions' setOptions()
+ var optionHash = {};
+ optionHash[ optionName ] = optionValue;
+ this.setOptions( optionHash );
+ },
+
+ getSelectedModel : function( options ) {
+ return this.selectedItems.length ? _.first( this.getSelectedModels( options ) ) : null;
+ },
+
+ getSelectedModels : function ( options ) {
+ var _this = this;
+
+ options = _.extend( {}, {
+ by : kDefaultReferenceBy
+ }, options );
+
+ var referenceBy = options.by;
+ var items = [];
+
+ switch( referenceBy ) {
+ case "id" :
+ _.each( this.selectedItems, function ( item ) {
+ items.push( _this.collection.get( item ).id );
+ } );
+ break;
+ case "cid" :
+ items = items.concat( this.selectedItems );
+ break;
+ case "offset" :
+ var curLineNumber = 0;
+
+ var itemElements = this._getVisibleItemEls();
+
+ itemElements.each( function() {
+ var thisItemEl = $( this );
+ if( thisItemEl.is( ".selected" ) )
+ items.push( curLineNumber );
+ curLineNumber++;
+ } );
+ break;
+ case "model" :
+ _.each( this.selectedItems, function ( item ) {
+ items.push( _this.collection.get( item ) );
+ } );
+ break;
+ case "view" :
+ _.each( this.selectedItems, function ( item ) {
+ items.push( _this.viewManager.findByModel( _this.collection.get( item ) ) );
+ } );
+ break;
+ default :
+ throw new Error( "Invalid referenceBy option: " + referenceBy );
+ break;
+ }
+
+ return items;
+
+ },
+
+ setSelectedModels : function( newSelectedItems, options ) {
+ if( ! _.isArray( newSelectedItems ) ) throw "Invalid parameter value";
+ if( ! this.selectable && newSelectedItems.length > 0 ) return; // used to throw error, but there are some circumstances in which a list can be selectable at times and not at others, don't want to have to worry about catching errors
+
+ options = _.extend( {}, {
+ silent : false,
+ by : kDefaultReferenceBy
+ }, options );
+
+ var referenceBy = options.by;
+ var newSelectedCids = [];
+
+ switch( referenceBy ) {
+ case "cid" :
+ newSelectedCids = newSelectedItems;
+ break;
+ case "id" :
+ this.collection.each( function( thisModel ) {
+ if( _.contains( newSelectedItems, thisModel.id ) ) newSelectedCids.push( thisModel.cid );
+ } );
+ break;
+ case "model" :
+ newSelectedCids = _.pluck( newSelectedItems, "cid" );
+ break;
+ case "view" :
+ _.each( newSelectedItems, function( item ) {
+ newSelectedCids.push( item.model.cid );
+ } );
+ break;
+ case "offset" :
+ var curLineNumber = 0;
+ var selectedItems = [];
+
+ var itemElements = this._getVisibleItemEls();
+ itemElements.each( function() {
+ var thisItemEl = $( this );
+ if( _.contains( newSelectedItems, curLineNumber ) )
+ newSelectedCids.push( thisItemEl.attr( "data-model-cid" ) );
+ curLineNumber++;
+ } );
+ break;
+ default :
+ throw new Error( "Invalid referenceBy option: " + referenceBy );
+ break;
+ }
+
+ var oldSelectedModels = this.getSelectedModels();
+ var oldSelectedCids = _.clone( this.selectedItems );
+
+ this.selectedItems = this._convertStringsToInts( newSelectedCids );
+ this._validateSelection();
+
+ var newSelectedModels = this.getSelectedModels();
+
+ if( ! this._containSameElements( oldSelectedCids, this.selectedItems ) )
+ {
+ this._addSelectedClassToSelectedItems( oldSelectedCids );
+
+ if( ! options.silent )
+ {
+ if( this._isBackboneCourierAvailable() ) {
+ this.spawn( "selectionChanged", {
+ selectedModels : newSelectedModels,
+ oldSelectedModels : oldSelectedModels
+ } );
+ } else this.trigger( "selectionChanged", newSelectedModels, oldSelectedModels );
+ }
+
+ this.updateDependentControls();
+ }
+ },
+
+ setSelectedModel : function( newSelectedItem, options ) {
+ if( ! newSelectedItem && newSelectedItem !== 0 )
+ this.setSelectedModels( [], options );
+ else
+ this.setSelectedModels( [ newSelectedItem ], options );
+ },
+
+ getView : function( reference, options ) {
+ options = _.extend( {}, {
+ by : kDefaultReferenceBy
+ }, options );
+
+ switch( options.by ) {
+ case "id" :
+ case "cid" :
+ var model = this.collection.get( reference ) || null;
+ return model && this.viewManager.findByModel( model );
+ break;
+ case "offset" :
+ var itemElements = this._getVisibleItemEls();
+ return $( itemElements.get( reference ) );
+ break;
+ case "model" :
+ return this.viewManager.findByModel( reference );
+ break;
+ default :
+ throw new Error( "Invalid referenceBy option: " + referenceBy );
+ break;
+ }
+ },
+
+ render : function() {
+ var _this = this;
+
+ this._hasBeenRendered = true;
+
+ if( this.selectable ) this._saveSelection();
+
+ var modelViewContainerEl;
+
+ // If collection view element is a table and it has a tbody
+ // within it, render the model views inside of the tbody
+ modelViewContainerEl = this._getContainerEl();
+
+ var oldViewManager = this.viewManager;
+ this.viewManager = new ChildViewContainer();
+
+ // detach each of our subviews that we have already created to represent models
+ // in the collection. We are going to re-use the ones that represent models that
+ // are still here, instead of creating new ones, so that we don't loose state
+ // information in the views.
+ oldViewManager.each( function( thisModelView ) {
+ // to boost performance, only detach those views that will be sticking around.
+ // we won't need the other ones later, so no need to detach them individually.
+ if( this.reuseModelViews && this.collection.get( thisModelView.model.cid ) ) {
+ thisModelView.$el.detach();
+ } else thisModelView.remove();
+ }, this );
+
+ modelViewContainerEl.empty();
+ var fragmentContainer;
+
+ if( this.detachedRendering )
+ fragmentContainer = document.createDocumentFragment();
+
+ this.collection.each( function( thisModel ) {
+ var thisModelView = oldViewManager.findByModelCid( thisModel.cid );
+ if( ! this.reuseModelViews || _.isUndefined( thisModelView ) ) {
+ // if the model view has not already been created on a
+ // previous render then create and initialize it now.
+ thisModelView = this._createNewModelView( thisModel, this._getModelViewOptions( thisModel ) );
+ }
+
+ this._insertAndRenderModelView( thisModelView, fragmentContainer || modelViewContainerEl );
+ }, this );
+
+ if( this.detachedRendering )
+ modelViewContainerEl.append( fragmentContainer );
+
+ if( this.sortable ) this._setupSortable();
+
+ this._showEmptyListCaptionIfAppropriate();
+
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "render" );
+ else this.trigger( "render" );
+
+ if( this.selectable ) {
+ this._restoreSelection();
+ this.updateDependentControls();
+ }
+
+ this.forceRerenderOnNextSortEvent = false;
+ },
+
+ _showEmptyListCaptionIfAppropriate : function ( ) {
+ this._removeEmptyListCaption();
+
+ if( this.emptyListCaption ) {
+ var visibleEls = this._getVisibleItemEls();
+
+ if( visibleEls.length === 0 ) {
+ var emptyListString;
+
+ if( _.isFunction( this.emptyListCaption ) )
+ emptyListString = this.emptyListCaption();
+ else
+ emptyListString = this.emptyListCaption;
+
+ var $emptyListCaptionEl;
+ var $varEl = $( "" + emptyListString + " " );
+
+ // need to wrap the empty caption to make it fit the rendered list structure (either with an li or a tr td)
+ if( this._isRenderedAsList() )
+ $emptyListCaptionEl = $varEl.wrapAll( " " ).parent().css( kStylesForEmptyListCaption );
+ else
+ $emptyListCaptionEl = $varEl.wrapAll( " " ).parent().parent().css( kStylesForEmptyListCaption );
+
+ this._getContainerEl().append( $emptyListCaptionEl );
+ }
+ }
+ },
+
+ _removeEmptyListCaption : function( ) {
+ if( this._isRenderedAsList() )
+ this._getContainerEl().find( "> li > var.empty-list-caption" ).parent().remove();
+ else
+ this._getContainerEl().find( "> tr > td > var.empty-list-caption" ).parent().parent().remove();
+ },
+
+ // Render a single model view in container object "parentElOrDocumentFragment", which is either
+ // a documentFragment or a jquery object. optional arg atIndex is not support for document fragments.
+ _insertAndRenderModelView : function( modelView, parentElOrDocumentFragment, atIndex ) {
+ var thisModelViewWrapped = this._wrapModelView( modelView );
+
+ if( parentElOrDocumentFragment.nodeType === 11 ) // if we are inserting into a document fragment, we need to use the DOM appendChild method
+ parentElOrDocumentFragment.appendChild( thisModelViewWrapped.get( 0 ) );
+ else {
+ var numberOfModelViewsCurrentlyInDOM = parentElOrDocumentFragment.children().length;
+ if( ! _.isUndefined( atIndex ) && atIndex >= 0 && atIndex < numberOfModelViewsCurrentlyInDOM )
+ // note this.collection.length might be greater than parentElOrDocumentFragment.children().length here
+ parentElOrDocumentFragment.children().eq( atIndex ).before( thisModelViewWrapped );
+ else {
+ // if we are attempting to insert a modelView in an position that is beyond what is currently in the
+ // DOM, then make a note that we need to re-render the collection view on the next sort event. If we dont
+ // force this re-render, we can end up with modelViews in the wrong order when the collection defines
+ // a comparator and multiple models are added at once. See https://github.com/rotundasoftware/backbone.collectionView/issues/69
+ if( ! _.isUndefined( atIndex ) && atIndex > numberOfModelViewsCurrentlyInDOM ) this.forceRerenderOnNextSortEvent = true;
+
+ parentElOrDocumentFragment.append( thisModelViewWrapped );
+ }
+ }
+
+ this.viewManager.add( modelView );
+
+ // we have to render the modelView after it has been put in context, as opposed to in the
+ // initialize function of the modelView, because some rendering might be dependent on
+ // the modelView's context in the DOM tree. For example, if the modelView stretch()'s itself,
+ // it must be in full context in the DOM tree or else the stretch will not behave as intended.
+ var renderResult = modelView.render();
+
+ // return false from the view's render function to hide this item
+ if( renderResult === false ) {
+ thisModelViewWrapped.hide();
+ thisModelViewWrapped.addClass( "not-visible" );
+ }
+
+ var hideThisModelView = false;
+ if( _.isFunction( this.visibleModelsFilter ) )
+ hideThisModelView = ! this.visibleModelsFilter( modelView.model );
+
+ if( thisModelViewWrapped.children().length === 1 )
+ thisModelViewWrapped.toggle( ! hideThisModelView );
+ else modelView.$el.toggle( ! hideThisModelView );
+
+ thisModelViewWrapped.toggleClass( "not-visible", hideThisModelView );
+
+ if( ! hideThisModelView && this.emptyListCaption ) this._removeEmptyListCaption();
+ },
+
+ updateDependentControls : function() {
+ if( this._isBackboneCourierAvailable() ) {
+ this.spawn( "updateDependentControls", {
+ selectedModels : this.getSelectedModels()
+ } );
+ } else this.trigger( "updateDependentControls", this.getSelectedModels() );
+ },
+
+ // Override `Backbone.View.remove` to also destroy all Views in `viewManager`
+ remove : function() {
+ this.viewManager.each( function( view ) {
+ view.remove();
+ } );
+
+ Backbone.View.prototype.remove.apply( this, arguments );
+ },
+
+ reapplyFilter : function( whichFilter ) {
+ var _this = this;
+
+ if( ! _.contains( [ "selectableModels", "sortableModels", "visibleModels" ], whichFilter ) ) {
+ throw new Error( "Invalid filter identifier supplied to reapplyFilter: " + whichFilter );
+ }
+
+ switch( whichFilter ) {
+ case "visibleModels":
+ _this.viewManager.each( function( thisModelView ) {
+ var notVisible = _this.visibleModelsFilter && ! _this.visibleModelsFilter.call( _this, thisModelView.model );
+
+ thisModelView.$el.toggleClass( "not-visible", notVisible );
+ if( _this._modelViewHasWrapperLI( thisModelView ) ) {
+ thisModelView.$el.closest( "li" ).toggleClass( "not-visible", notVisible ).toggle( ! notVisible );
+ } else thisModelView.$el.toggle( ! notVisible );
+ } );
+
+ this._showEmptyListCaptionIfAppropriate();
+ break;
+ case "sortableModels":
+ _this.$el.sortable( "destroy" );
+
+ _this.viewManager.each( function( thisModelView ) {
+ var notSortable = _this.sortableModelsFilter && ! _this.sortableModelsFilter.call( _this, thisModelView.model );
+
+ thisModelView.$el.toggleClass( "not-sortable", notSortable );
+ if( _this._modelViewHasWrapperLI( thisModelView ) ) {
+ thisModelView.$el.closest( "li" ).toggleClass( "not-sortable", notSortable );
+ }
+ } );
+
+ _this._setupSortable();
+ break;
+ case "selectableModels":
+ _this.viewManager.each( function( thisModelView ) {
+ var notSelectable = _this.selectableModelsFilter && ! _this.selectableModelsFilter.call( _this, thisModelView.model );
+
+ thisModelView.$el.toggleClass( "not-selectable", notSelectable );
+ if( _this._modelViewHasWrapperLI( thisModelView ) ) {
+ thisModelView.$el.closest( "li" ).toggleClass( "not-selectable", notSelectable );
+ }
+ } );
+
+ _this._validateSelection();
+ break;
+ }
+ },
+
+ // A method to remove the view relating to model.
+ _removeModelView : function( modelView ) {
+ if( this.selectable ) this._saveSelection();
+
+ this.viewManager.remove( modelView ); // Remove the view from the viewManager
+ if( this._modelViewHasWrapperLI( modelView ) ) modelView.$el.parent().remove(); // Remove the li wrapper from the DOM
+ modelView.remove(); // Remove the view from the DOM and stop listening to events
+
+ if( this.selectable ) this._restoreSelection();
+
+ this._showEmptyListCaptionIfAppropriate();
+ },
+
+ _validateSelectionAndRender : function() {
+ this._validateSelection();
+ this.render();
+ },
+
+ _registerCollectionEvents : function() {
+
+ this.listenTo( this.collection, "add", function( model ) {
+ var modelView;
+ if( this._hasBeenRendered ) {
+ modelView = this._createNewModelView( model, this._getModelViewOptions( model ) );
+ this._insertAndRenderModelView( modelView, this._getContainerEl(), this.collection.indexOf( model ) );
+ }
+
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "add", modelView );
+ else this.trigger( "add", modelView );
+ } );
+
+ this.listenTo( this.collection, "remove", function( model ) {
+ var modelView;
+
+ if( this._hasBeenRendered ) {
+ modelView = this.viewManager.findByModelCid( model.cid );
+ this._removeModelView( modelView );
+ }
+
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "remove" );
+ else this.trigger( "remove" );
+ } );
+
+ this.listenTo( this.collection, "reset", function() {
+ if( this._hasBeenRendered ) this.render();
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "reset" );
+ else this.trigger( "reset" );
+ } );
+
+ // we should not be listening to change events on the model as a default behavior. the models
+ // should be responsible for re-rendering themselves if necessary, and if the collection does
+ // also need to re-render as a result of a model change, this should be handled by overriding
+ // this method. by default the collection view should not re-render in response to model changes
+ // this.listenTo( this.collection, "change", function( model ) {
+ // if( this._hasBeenRendered ) this.viewManager.findByModel( model ).render();
+ // if( this._isBackboneCourierAvailable() )
+ // this.spawn( "change", { model : model } );
+ // } );
+
+ this.listenTo( this.collection, "sort", function( collection, options ) {
+ if( this._hasBeenRendered && ( options.add !== true || this.forceRerenderOnNextSortEvent ) ) this.render();
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "sort" );
+ else this.trigger( "sort" );
+ } );
+ },
+
+ _getContainerEl : function() {
+ if ( this._isRenderedAsTable() ) {
+ // not all tables have a tbody, so we test
+ var tbody = this.$el.find( "> tbody" );
+ if ( tbody.length > 0 )
+ return tbody;
+ }
+ return this.$el;
+ },
+
+ _getClickedItemId : function( theEvent ) {
+ var clickedItemId = null;
+
+ // important to use currentTarget as opposed to target, since we could be bubbling
+ // an event that took place within another collectionList
+ var clickedItemEl = $( theEvent.currentTarget );
+ if( clickedItemEl.closest( ".collection-view" ).get(0) !== this.$el.get(0) ) return;
+
+ // determine which list item was clicked. If we clicked in the blank area
+ // underneath all the elements, we want to know that too, since in this
+ // case we will want to deselect all elements. so check to see if the clicked
+ // DOM element is the list itself to find that out.
+ var clickedItem = clickedItemEl.closest( "[data-model-cid]" );
+ if( clickedItem.length > 0 )
+ {
+ clickedItemId = clickedItem.attr( "data-model-cid" );
+ if( $.isNumeric( clickedItemId ) ) clickedItemId = parseInt( clickedItemId, 10 );
+ }
+
+ return clickedItemId;
+ },
+
+ _updateItemTemplate : function() {
+ var itemTemplateHtml;
+ if( this.itemTemplate )
+ {
+ if( $( this.itemTemplate ).length === 0 )
+ throw "Could not find item template from selector: " + this.itemTemplate;
+
+ itemTemplateHtml = $( this.itemTemplate ).html();
+ }
+ else
+ itemTemplateHtml = this.$( ".item-template" ).html();
+
+ if( itemTemplateHtml ) this.itemTemplateFunction = _.template( itemTemplateHtml );
+
+ },
+
+ _validateSelection : function() {
+ // note can't use the collection's proxy to underscore because "cid" is not an attribute,
+ // but an element of the model object itself.
+ var modelReferenceIds = _.pluck( this.collection.models, "cid" );
+ this.selectedItems = _.intersection( modelReferenceIds, this.selectedItems );
+
+ if( _.isFunction( this.selectableModelsFilter ) )
+ {
+ this.selectedItems = _.filter( this.selectedItems, function( thisItemId ) {
+ return this.selectableModelsFilter.call( this, this.collection.get( thisItemId ) );
+ }, this );
+ }
+ },
+
+ _saveSelection : function() {
+ // save the current selection. use restoreSelection() to restore the selection to the state it was in the last time saveSelection() was called.
+ if( ! this.selectable ) throw "Attempt to save selection on non-selectable list";
+ this.savedSelection = {
+ items : _.clone( this.selectedItems ),
+ offset : this.getSelectedModel( { by : "offset" } )
+ };
+ },
+
+ _restoreSelection : function() {
+ if( ! this.savedSelection ) throw "Attempt to restore selection but no selection has been saved!";
+
+ // reset selectedItems to empty so that we "redraw" all "selected" classes
+ // when we set our new selection. We do this because it is likely that our
+ // contents have been refreshed, and we have thus lost all old "selected" classes.
+ this.setSelectedModels( [], { silent : true } );
+
+ if( this.savedSelection.items.length > 0 )
+ {
+ // first try to restore the old selected items using their reference ids.
+ this.setSelectedModels( this.savedSelection.items, { by : "cid", silent : true } );
+
+ // all the items with the saved reference ids have been removed from the list.
+ // ok. try to restore the selection based on the offset that used to be selected.
+ // this is the expected behavior after a item is deleted from a list (i.e. select
+ // the line that immediately follows the deleted line).
+ if( this.selectedItems.length === 0 )
+ this.setSelectedModel( this.savedSelection.offset, { by : "offset" } );
+
+ // Trigger a selection changed if the previously selected items were not all found
+ if (this.selectedItems.length !== this.savedSelection.items.length)
+ {
+ if( this._isBackboneCourierAvailable() ) {
+ this.spawn( "selectionChanged", {
+ selectedModels : this.getSelectedModels(),
+ oldSelectedModels : []
+ } );
+ } else this.trigger( "selectionChanged", this.getSelectedModels(), [] );
+ }
+ }
+ },
+
+ _addSelectedClassToSelectedItems : function( oldItemsIdsWithSelectedClass ) {
+ if( _.isUndefined( oldItemsIdsWithSelectedClass ) ) oldItemsIdsWithSelectedClass = [];
+
+ // oldItemsIdsWithSelectedClass is used for optimization purposes only. If this info is supplied then we
+ // only have to add / remove the "selected" class from those items that "selected" state has changed.
+
+ var itemsIdsFromWhichSelectedClassNeedsToBeRemoved = oldItemsIdsWithSelectedClass;
+ itemsIdsFromWhichSelectedClassNeedsToBeRemoved = _.without( itemsIdsFromWhichSelectedClassNeedsToBeRemoved, this.selectedItems );
+
+ _.each( itemsIdsFromWhichSelectedClassNeedsToBeRemoved, function( thisItemId ) {
+ this._getContainerEl().find( "[data-model-cid=" + thisItemId + "]" ).removeClass( "selected" );
+
+ if( this._isRenderedAsList() ) {
+ this._getContainerEl().find( "li[data-model-cid=" + thisItemId + "] > *" ).removeClass( "selected" );
+ }
+ }, this );
+
+ var itemsIdsFromWhichSelectedClassNeedsToBeAdded = this.selectedItems;
+ itemsIdsFromWhichSelectedClassNeedsToBeAdded = _.without( itemsIdsFromWhichSelectedClassNeedsToBeAdded, oldItemsIdsWithSelectedClass );
+
+ _.each( itemsIdsFromWhichSelectedClassNeedsToBeAdded, function( thisItemId ) {
+ this._getContainerEl().find( "[data-model-cid=" + thisItemId + "]" ).addClass( "selected" );
+
+ if( this._isRenderedAsList() ) {
+ this._getContainerEl().find( "li[data-model-cid=" + thisItemId + "] > *" ).addClass( "selected" );
+ }
+ }, this );
+ },
+
+ _reorderCollectionBasedOnHTML : function() {
+
+ var _this = this;
+
+ this._getContainerEl().children().each( function() {
+ var thisModelCid = $( this ).attr( "data-model-cid" );
+
+ if( thisModelCid )
+ {
+ // remove the current model and then add it back (at the end of the collection).
+ // When we are done looping through all models, they will be in the correct order.
+ var thisModel = _this.collection.get( thisModelCid );
+ if( thisModel )
+ {
+ _this.collection.remove( thisModel, { silent : true } );
+ _this.collection.add( thisModel, { silent : true, sort : ! _this.collection.comparator } );
+ }
+ }
+ } );
+
+ if( this._isBackboneCourierAvailable() ) this.spawn( "reorder" );
+ else this.collection.trigger( "reorder" );
+
+ if( this.collection.comparator ) this.collection.sort();
+
+ },
+
+ _getModelViewConstructor : function( thisModel ) {
+ return this.modelView || mDefaultModelViewConstructor;
+ },
+
+ _getModelViewOptions : function( thisModel ) {
+ var modelViewOptions = this.modelViewOptions;
+ if( _.isFunction( modelViewOptions ) ) modelViewOptions = modelViewOptions( thisModel );
+
+ return _.extend( { model : thisModel }, modelViewOptions );
+ },
+
+ _createNewModelView : function( model, modelViewOptions ) {
+ var modelViewConstructor = this._getModelViewConstructor( model );
+ if( _.isUndefined( modelViewConstructor ) ) throw "Could not find modelView constructor for model";
+
+ var newModelView = new( modelViewConstructor )( modelViewOptions );
+ newModelView.collectionListView = newModelView.collectionView = this; // collectionListView for legacy
+
+ return newModelView;
+ },
+
+ _wrapModelView : function( modelView ) {
+ var _this = this;
+
+ // we use items client ids as opposed to real ids, since we may not have a representation
+ // of these models on the server
+ var modelViewWrapperEl;
+
+ if( this._isRenderedAsTable() ) {
+ // if we are rendering the collection in a table, the template $el is a tr so we just need to set the data-model-cid
+ modelViewWrapperEl = modelView.$el;
+ modelView.$el.attr( "data-model-cid", modelView.model.cid );
+ }
+ else if( this._isRenderedAsList() ) {
+ // if we are rendering the collection in a list, we need wrap each item in an (if its not already an )
+ // and set the data-model-cid
+ if( modelView.$el.is( "li" ) ) {
+ modelViewWrapperEl = modelView.$el;
+ modelView.$el.attr( "data-model-cid", modelView.model.cid );
+ } else {
+ modelViewWrapperEl = modelView.$el.wrapAll( " " ).parent();
+ }
+ }
+
+ if( _.isFunction( this.sortableModelsFilter ) )
+ if( ! this.sortableModelsFilter.call( _this, modelView.model ) ) {
+ modelViewWrapperEl.addClass( "not-sortable" );
+ modelView.$el.addClass( "not-selectable" );
+ }
+
+ if( _.isFunction( this.selectableModelsFilter ) )
+ if( ! this.selectableModelsFilter.call( _this, modelView.model ) ) {
+ modelViewWrapperEl.addClass( "not-selectable" );
+ modelView.$el.addClass( "not-selectable" );
+ }
+
+ return modelViewWrapperEl;
+ },
+
+ _convertStringsToInts : function( theArray ) {
+ return _.map( theArray, function( thisEl ) {
+ if( ! _.isString( thisEl ) ) return thisEl;
+ var thisElAsNumber = parseInt( thisEl, 10 );
+ return( thisElAsNumber == thisEl ? thisElAsNumber : thisEl );
+ } );
+ },
+
+ _containSameElements : function( arrayA, arrayB ) {
+ if( arrayA.length != arrayB.length ) return false;
+ var intersectionSize = _.intersection( arrayA, arrayB ).length;
+ return intersectionSize == arrayA.length; // and must also equal arrayB.length, since arrayA.length == arrayB.length
+ },
+
+ _isRenderedAsTable : function() {
+ return this.$el.prop( "tagName" ).toLowerCase() === "table";
+ },
+
+ _isRenderedAsList : function() {
+ return ! this._isRenderedAsTable();
+ },
+
+ _modelViewHasWrapperLI : function( modelView ) {
+ return this._isRenderedAsList() && ! modelView.$el.is( "li" );
+ },
+
+ // Returns the wrapper HTML element for each visible modelView.
+ // When rendering in a table context, the returned elements are the $el of each modelView.
+ // When rendering in a list context,
+ // If the $el of the modelView is an , the returned elements are the $el of each modelView.
+ // Otherwise, the returned elements are the 's the collectionView wrapped around each modelView $el.
+ _getVisibleItemEls : function() {
+ var itemElements = [];
+ itemElements = this._getContainerEl().find( "> [data-model-cid]:not(.not-visible)" );
+
+ return itemElements;
+ },
+
+ _charCodes : {
+ upArrow : 38,
+ downArrow : 40
+ },
+
+ _isBackboneCourierAvailable : function() {
+ return !_.isUndefined( Backbone.Courier );
+ },
+
+ _setupSortable : function() {
+ var sortableOptions = _.extend( {
+ axis : "y",
+ distance : 10,
+ forcePlaceholderSize : true,
+ items : this._isRenderedAsTable() ? "> tbody > tr:not(.not-sortable)" : "> li:not(.not-sortable)",
+ start : _.bind( this._sortStart, this ),
+ change : _.bind( this._sortChange, this ),
+ stop : _.bind( this._sortStop, this ),
+ receive : _.bind( this._receive, this ),
+ over : _.bind( this._over, this )
+ }, _.result( this, "sortableOptions" ) );
+
+ this.$el = this.$el.sortable( sortableOptions );
+ //this.$el.sortable( "enable" ); // in case it was disabled previously
+ },
+
+ _sortStart : function( event, ui ) {
+ var modelBeingSorted = this.collection.get( ui.item.attr( "data-model-cid" ) );
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "sortStart", { modelBeingSorted : modelBeingSorted } );
+ else this.trigger( "sortStart", modelBeingSorted );
+ },
+
+ _sortChange : function( event, ui ) {
+ var modelBeingSorted = this.collection.get( ui.item.attr( "data-model-cid" ) );
+
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "sortChange", { modelBeingSorted : modelBeingSorted } );
+ else this.trigger( "sortChange", modelBeingSorted );
+ },
+
+ _sortStop : function( event, ui ) {
+ var modelBeingSorted = this.collection.get( ui.item.attr( "data-model-cid" ) );
+ var modelViewContainerEl = this._getContainerEl();
+ var newIndex = modelViewContainerEl.children().index( ui.item );
+
+ if( newIndex == -1 && modelBeingSorted ) {
+ // the element was removed from this list. can happen if this sortable is connected
+ // to another sortable, and the item was dropped into the other sortable.
+ this.collection.remove( modelBeingSorted );
+ }
+
+ if( ! modelBeingSorted ) return; // something is wacky. we don't mess with this case, preferring to guarantee that we can always provide a reference to the model
+
+ this._reorderCollectionBasedOnHTML();
+ this.updateDependentControls();
+
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "sortStop", { modelBeingSorted : modelBeingSorted, newIndex : newIndex } );
+ else this.trigger( "sortStop", modelBeingSorted, newIndex );
+ },
+
+ _receive : function( event, ui ) {
+
+ var senderListEl = ui.sender;
+ var senderCollectionListView = senderListEl.data( "view" );
+ if( ! senderCollectionListView || ! senderCollectionListView.collection ) return;
+
+ var newIndex = this._getContainerEl().children().index( ui.item );
+ var modelReceived = senderCollectionListView.collection.get( ui.item.attr( "data-model-cid" ) );
+ senderCollectionListView.collection.remove( modelReceived );
+ this.collection.add( modelReceived, { at : newIndex } );
+ modelReceived.collection = this.collection; // otherwise will not get properly set, since modelReceived.collection might already have a value.
+ this.setSelectedModel( modelReceived );
+ },
+
+ _over : function( event, ui ) {
+ // when an item is being dragged into the sortable,
+ // hide the empty list caption if it exists
+ this._getContainerEl().find( "> var.empty-list-caption" ).hide();
+ },
+
+ _onKeydown : function( event ) {
+ if( ! this.processKeyEvents ) return true;
+
+ var trap = false;
+
+ if( this.getSelectedModels( { by : "offset" } ).length == 1 )
+ {
+ // need to trap down and up arrows or else the browser
+ // will end up scrolling a autoscroll div.
+
+ var currentOffset = this.getSelectedModel( { by : "offset" } );
+ if( event.which === this._charCodes.upArrow && currentOffset !== 0 )
+ {
+ this.setSelectedModel( currentOffset - 1, { by : "offset" } );
+ trap = true;
+ }
+ else if( event.which === this._charCodes.downArrow && currentOffset !== this.collection.length - 1 )
+ {
+ this.setSelectedModel( currentOffset + 1, { by : "offset" } );
+ trap = true;
+ }
+ }
+
+ return ! trap;
+ },
+
+ _listItem_onMousedown : function( theEvent ) {
+ var clickedItemId = this._getClickedItemId( theEvent );
+
+ if( clickedItemId ) {
+ var clickedModel = this.collection.get( clickedItemId );
+ if( this._isBackboneCourierAvailable() ) {
+ var data = {
+ clickedModel : clickedModel,
+ metaKeyPressed : theEvent.ctrlKey || theEvent.metaKey
+ };
+
+ _.each( [ 'preventDefault', 'stopPropagation', 'stopImmediatePropagation' ], function( thisMethod ) {
+ data[ thisMethod ] = function() {
+ theEvent[ thisMethod ]();
+ };
+ } );
+
+ this.spawn( "click", data );
+ }
+ else this.trigger( "click", clickedModel );
+ }
+
+ if( ! this.selectable || ! this.clickToSelect ) return;
+
+ if( clickedItemId )
+ {
+ // Exit if an unselectable item was clicked
+ if( _.isFunction( this.selectableModelsFilter ) &&
+ ! this.selectableModelsFilter.call( this, this.collection.get( clickedItemId ) ) )
+ {
+ return;
+ }
+
+ // a selectable list item was clicked
+ if( this.selectMultiple && theEvent.shiftKey )
+ {
+ var firstSelectedItemIndex = -1;
+
+ if( this.selectedItems.length > 0 )
+ {
+ this.collection.find( function( thisItemModel ) {
+ firstSelectedItemIndex++;
+
+ // exit when we find our first selected element
+ return _.contains( this.selectedItems, thisItemModel.cid );
+ }, this );
+ }
+
+ var clickedItemIndex = -1;
+ this.collection.find( function( thisItemModel ) {
+ clickedItemIndex++;
+
+ // exit when we find the clicked element
+ return thisItemModel.cid == clickedItemId;
+ }, this );
+
+ var shiftKeyRootSelectedItemIndex = firstSelectedItemIndex == -1 ? clickedItemIndex : firstSelectedItemIndex;
+ var minSelectedItemIndex = Math.min( clickedItemIndex, shiftKeyRootSelectedItemIndex );
+ var maxSelectedItemIndex = Math.max( clickedItemIndex, shiftKeyRootSelectedItemIndex );
+
+ var newSelectedItems = [];
+ for( var thisIndex = minSelectedItemIndex; thisIndex <= maxSelectedItemIndex; thisIndex ++ )
+ newSelectedItems.push( this.collection.at( thisIndex ).cid );
+ this.setSelectedModels( newSelectedItems, { by : "cid" } );
+
+ // shift clicking will usually highlight selectable text, which we do not want.
+ // this is a cross browser (hopefully) snippet that deselects all text selection.
+ if( document.selection && document.selection.empty )
+ document.selection.empty();
+ else if(window.getSelection) {
+ var sel = window.getSelection();
+ if( sel && sel.removeAllRanges )
+ sel.removeAllRanges();
+ }
+ }
+ else if( ( this.selectMultiple || _.contains( this.selectedItems, clickedItemId ) ) && ( this.clickToToggle || theEvent.metaKey || theEvent.ctrlKey ) )
+ {
+ if( _.contains( this.selectedItems, clickedItemId ) )
+ this.setSelectedModels( _.without( this.selectedItems, clickedItemId ), { by : "cid" } );
+ else this.setSelectedModels( _.union( this.selectedItems, [clickedItemId] ), { by : "cid" } );
+ }
+ else
+ this.setSelectedModels( [ clickedItemId ], { by : "cid" } );
+ }
+ else
+ // the blank area of the list was clicked
+ this.setSelectedModels( [] );
+
+ },
+
+ _listItem_onDoubleClick : function( theEvent ) {
+
+ var clickedItemId = this._getClickedItemId( theEvent );
+
+ if( clickedItemId )
+ {
+ var clickedModel = this.collection.get( clickedItemId );
+
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "doubleClick", { clickedModel : clickedModel, metaKeyPressed : theEvent.ctrlKey || theEvent.metaKey } );
+ else this.trigger( "doubleClick", clickedModel );
+ }
+ },
+
+ _listBackground_onClick : function( theEvent ) {
+ if( ! this.selectable || ! this.clickToSelect ) return;
+ if( ! $( theEvent.target ).is( ".collection-view" ) ) return;
+
+ this.setSelectedModels( [] );
+ }
+
+ }, {
+ setDefaultModelViewConstructor : function( theConstructor ) {
+ mDefaultModelViewConstructor = theConstructor;
+ }
+ });
+
+ /*
+ * Backbone.ViewOptions, v0.2.4
+ * Copyright (c)2014 Rotunda Software, LLC.
+ * Distributed under MIT license
+ * http://github.com/rotundasoftware/backbone.viewOptions
+ */
+
+ Backbone.ViewOptions = {};
+
+ Backbone.ViewOptions.add = function( view, optionsDeclarationsProperty ) {
+ if( _.isUndefined( optionsDeclarationsProperty ) ) optionsDeclarationsProperty = "options";
+
+ // ****************** Public methods added to view ******************
+
+ view.setOptions = function( options ) {
+ var _this = this;
+ var optionsThatWereChanged = {};
+ var optionsThatWereChangedPreviousValues = {};
+
+ var optionDeclarations = _.result( this, optionsDeclarationsProperty );
+
+ if( ! _.isUndefined( optionDeclarations ) ) {
+ var normalizedOptionDeclarations = _normalizeOptionDeclarations( optionDeclarations );
+
+ _.each( normalizedOptionDeclarations, function( thisOptionProperties, thisOptionName ) {
+ var thisOptionRequired = thisOptionProperties.required;
+ var thisOptionDefaultValue = thisOptionProperties.defaultValue;
+
+ if( thisOptionRequired ) {
+ // note we do not throw an error if a required option is not supplied, but it is
+ // found on the object itself (due to a prior call of view.setOptions, most likely)
+
+ if( ( ! options || ! _.contains( _.keys( options ), thisOptionName ) ) && _.isUndefined( _this[ thisOptionName ] ) )
+ throw new Error( "Required option \"" + thisOptionName + "\" was not supplied." );
+
+ if( options && _.contains( _.keys( options ), thisOptionName ) && _.isUndefined( options[ thisOptionName ] ) )
+ throw new Error( "Required option \"" + thisOptionName + "\" can not be set to undefined." );
+ }
+
+ // attach the supplied value of this option, or the appropriate default value, to the view object
+ if( options && thisOptionName in options && ! _.isUndefined( options[ thisOptionName ] ) ) {
+ var oldValue = _this[ thisOptionName ];
+ var newValue = options[ thisOptionName ];
+ // if this option already exists on the view, and the new value is different,
+ // make a note that we will be changing it
+ if( ! _.isUndefined( oldValue ) && oldValue !== newValue ) {
+ optionsThatWereChangedPreviousValues[ thisOptionName ] = oldValue;
+ optionsThatWereChanged[ thisOptionName ] = newValue;
+ }
+ _this[ thisOptionName ] = newValue;
+ // note we do NOT delete the option off the options object here so that
+ // multiple views can be passed the same options object without issue.
+ }
+ else if( _.isUndefined( _this[ thisOptionName ] ) ) {
+ // note defaults do not write over any existing properties on the view itself.
+ _this[ thisOptionName ] = thisOptionDefaultValue;
+ }
+ } );
+ }
+
+ if( _.keys( optionsThatWereChanged ).length > 0 ) {
+ if( _.isFunction( _this.onOptionsChanged ) )
+ _this.onOptionsChanged( optionsThatWereChanged, optionsThatWereChangedPreviousValues );
+ else if( _.isFunction( _this._onOptionsChanged ) )
+ _this._onOptionsChanged( optionsThatWereChanged, optionsThatWereChangedPreviousValues );
+ }
+ };
+
+ view.getOptions = function() {
+ var optionDeclarations = _.result( this, optionsDeclarationsProperty );
+ if( _.isUndefined( optionDeclarations ) ) return {};
+
+ var normalizedOptionDeclarations = _normalizeOptionDeclarations( optionDeclarations );
+ var optionsNames = _.keys( normalizedOptionDeclarations );
+
+ return _.pick( this, optionsNames );
+ };
+ };
+
+ // ****************** Private Utility Functions ******************
+
+ function _normalizeOptionDeclarations( optionDeclarations ) {
+ // convert our short-hand option syntax (with exclamation marks, etc.)
+ // to a simple array of standard option declaration objects.
+
+ var normalizedOptionDeclarations = {};
+
+ if( ! _.isArray( optionDeclarations ) ) throw new Error( "Option declarations must be an array." );
+
+ _.each( optionDeclarations, function( thisOptionDeclaration ) {
+ var thisOptionName, thisOptionRequired, thisOptionDefaultValue;
+
+ thisOptionRequired = false;
+ thisOptionDefaultValue = undefined;
+
+ if( _.isString( thisOptionDeclaration ) )
+ thisOptionName = thisOptionDeclaration;
+ else if( _.isObject( thisOptionDeclaration ) ) {
+ thisOptionName = _.first( _.keys( thisOptionDeclaration ) );
+ if( _.isFunction( thisOptionDeclaration[ thisOptionName ] ) )
+ thisOptionDefaultValue = thisOptionDeclaration[ thisOptionName ];
+ else
+ thisOptionDefaultValue = _.clone( thisOptionDeclaration[ thisOptionName ] );
+ }
+ else throw new Error( "Each element in the option declarations array must be either a string or an object." );
+
+ if( thisOptionName[ thisOptionName.length - 1 ] === "!" ) {
+ thisOptionRequired = true;
+ thisOptionName = thisOptionName.slice( 0, thisOptionName.length - 1 );
+ }
+
+ normalizedOptionDeclarations[ thisOptionName ] = normalizedOptionDeclarations[ thisOptionName ] || {};
+ normalizedOptionDeclarations[ thisOptionName ].required = thisOptionRequired;
+ if( ! _.isUndefined( thisOptionDefaultValue ) ) normalizedOptionDeclarations[ thisOptionName ].defaultValue = thisOptionDefaultValue;
+ } );
+
+ return normalizedOptionDeclarations;
+ }
+
+
+ // Backbone.BabySitter
+ // -------------------
+ // v0.0.6
+ //
+ // Copyright (c)2013 Derick Bailey, Muted Solutions, LLC.
+ // Distributed under MIT license
+ //
+ // http://github.com/babysitterjs/backbone.babysitter
+
+ // Backbone.ChildViewContainer
+ // ---------------------------
+ //
+ // Provide a container to store, retrieve and
+ // shut down child views.
+
+ ChildViewContainer = (function(Backbone, _){
+
+ // Container Constructor
+ // ---------------------
+
+ var Container = function(views){
+ this._views = {};
+ this._indexByModel = {};
+ this._indexByCustom = {};
+ this._updateLength();
+
+ _.each(views, this.add, this);
+ };
+
+ // Container Methods
+ // -----------------
+
+ _.extend(Container.prototype, {
+
+ // Add a view to this container. Stores the view
+ // by `cid` and makes it searchable by the model
+ // cid (and model itself). Optionally specify
+ // a custom key to store an retrieve the view.
+ add: function(view, customIndex){
+ var viewCid = view.cid;
+
+ // store the view
+ this._views[viewCid] = view;
+
+ // index it by model
+ if (view.model){
+ this._indexByModel[view.model.cid] = viewCid;
+ }
+
+ // index by custom
+ if (customIndex){
+ this._indexByCustom[customIndex] = viewCid;
+ }
+
+ this._updateLength();
+ },
+
+ // Find a view by the model that was attached to
+ // it. Uses the model's `cid` to find it.
+ findByModel: function(model){
+ return this.findByModelCid(model.cid);
+ },
+
+ // Find a view by the `cid` of the model that was attached to
+ // it. Uses the model's `cid` to find the view `cid` and
+ // retrieve the view using it.
+ findByModelCid: function(modelCid){
+ var viewCid = this._indexByModel[modelCid];
+ return this.findByCid(viewCid);
+ },
+
+ // Find a view by a custom indexer.
+ findByCustom: function(index){
+ var viewCid = this._indexByCustom[index];
+ return this.findByCid(viewCid);
+ },
+
+ // Find by index. This is not guaranteed to be a
+ // stable index.
+ findByIndex: function(index){
+ return _.values(this._views)[index];
+ },
+
+ // retrieve a view by it's `cid` directly
+ findByCid: function(cid){
+ return this._views[cid];
+ },
+
+ findIndexByCid : function( cid ) {
+ var index = -1;
+ var view = _.find( this._views, function ( view ) {
+ index++;
+ if( view.model.cid == cid )
+ return view;
+ } );
+ return ( view ) ? index : -1;
+ },
+
+ // Remove a view
+ remove: function(view){
+ var viewCid = view.cid;
+
+ // delete model index
+ if (view.model){
+ delete this._indexByModel[view.model.cid];
+ }
+
+ // delete custom index
+ _.any(this._indexByCustom, function(cid, key) {
+ if (cid === viewCid) {
+ delete this._indexByCustom[key];
+ return true;
+ }
+ }, this);
+
+ // remove the view from the container
+ delete this._views[viewCid];
+
+ // update the length
+ this._updateLength();
+ },
+
+ // Call a method on every view in the container,
+ // passing parameters to the call method one at a
+ // time, like `function.call`.
+ call: function(method){
+ this.apply(method, _.tail(arguments));
+ },
+
+ // Apply a method on every view in the container,
+ // passing parameters to the call method one at a
+ // time, like `function.apply`.
+ apply: function(method, args){
+ _.each(this._views, function(view){
+ if (_.isFunction(view[method])){
+ view[method].apply(view, args || []);
+ }
+ });
+ },
+
+ // Update the `.length` attribute on this container
+ _updateLength: function(){
+ this.length = _.size(this._views);
+ }
+ });
+
+ // Borrowing this code from Backbone.Collection:
+ // http://backbonejs.org/docs/backbone.html#section-106
+ //
+ // Mix in methods from Underscore, for iteration, and other
+ // collection related features.
+ var methods = ['forEach', 'each', 'map', 'find', 'detect', 'filter',
+ 'select', 'reject', 'every', 'all', 'some', 'any', 'include',
+ 'contains', 'invoke', 'toArray', 'first', 'initial', 'rest',
+ 'last', 'without', 'isEmpty', 'pluck'];
+
+ _.each(methods, function(method) {
+ Container.prototype[method] = function() {
+ var views = _.values(this._views);
+ var args = [views].concat(_.toArray(arguments));
+ return _[method].apply(_, args);
+ };
+ });
+
+ // return the public API
+ return Container;
+ })(Backbone, _);
+
+ return Backbone.CollectionView;
+} ) );
+
+/**
+ * backbone.trackit - 0.1.0
+ *
+ * The MIT License
+ * Copyright (c) 2013 The New York Times, CMS Group, Matthew DeLambo
+ *
+ * @since 7.4.0 Added support for deep models (attributes that are objects themselves).
+ */
+(function() {
+
+ // Unsaved Record Keeping
+ // ----------------------
+
+ // Collection of all models in an app that have unsaved changes.
+ var unsavedModels = [];
+
+ // If the given model has unsaved changes then add it to
+ // the `unsavedModels` collection, otherwise remove it.
+ var updateUnsavedModels = function(model) {
+ if (!_.isEmpty(model._unsavedChanges)) {
+ if (!_.findWhere(unsavedModels, {cid:model.cid})) unsavedModels.push(model);
+ } else {
+ unsavedModels = _.filter(unsavedModels, function(m) { return model.cid != m.cid; });
+ }
+ };
+
+ // Unload Handlers
+ // ---------------
+
+ // Helper which returns a prompt message for an unload handler.
+ // Uses the given function name (one of the callback names
+ // from the `model.unsaved` configuration hash) to evaluate
+ // whether a prompt is needed/returned.
+ var getPrompt = function(fnName) {
+ var prompt, args = _.rest(arguments);
+ // Evaluate and return a boolean result. The given `fn` may be a
+ // boolean value, a function, or the name of a function on the model.
+ var evaluateModelFn = function(model, fn) {
+ if (_.isBoolean(fn)) return fn;
+ return (_.isString(fn) ? model[fn] : fn).apply(model, args);
+ };
+ _.each(unsavedModels, function(model) {
+ if (!prompt && evaluateModelFn(model, model._unsavedConfig[fnName]))
+ prompt = model._unsavedConfig.prompt;
+ });
+ return prompt;
+ };
+
+ // Wrap Backbone.History.navigate so that in-app routing
+ // (`router.navigate('/path')`) can be intercepted with a
+ // confirmation if there are any unsaved models.
+ Backbone.History.prototype.navigate = _.wrap(Backbone.History.prototype.navigate, function(oldNav, fragment, options) {
+ var prompt = getPrompt('unloadRouterPrompt', fragment, options);
+ if (prompt) {
+ if (confirm(prompt + ' \n\nAre you sure you want to leave this page?')) {
+ oldNav.call(this, fragment, options);
+ }
+ } else {
+ oldNav.call(this, fragment, options);
+ }
+ });
+
+ // Create a browser unload handler which is triggered
+ // on the refresh, back, or forward button.
+ window.onbeforeunload = function(e) {
+ return getPrompt('unloadWindowPrompt', e);
+ };
+
+ // Backbone.Model API
+ // ------------------
+
+ _.extend(Backbone.Model.prototype, {
+
+ unsaved: {},
+ _trackingChanges: false,
+ _originalAttrs: {},
+ _unsavedChanges: {},
+
+ // Opt in to tracking attribute changes
+ // between saves.
+ startTracking: function() {
+ this._unsavedConfig = _.extend({}, {
+ prompt: 'You have unsaved changes!',
+ unloadRouterPrompt: false,
+ unloadWindowPrompt: false
+ }, this.unsaved || {});
+ this._trackingChanges = true;
+ this._resetTracking();
+ this._triggerUnsavedChanges();
+ return this;
+ },
+
+ // Resets the default tracking values
+ // and stops tracking attribute changes.
+ stopTracking: function() {
+ this._trackingChanges = false;
+ this._originalAttrs = {};
+ this._unsavedChanges = {};
+ this._triggerUnsavedChanges();
+ return this;
+ },
+
+ // Gets rid of accrued changes and
+ // resets state.
+ restartTracking: function() {
+ this._resetTracking();
+ this._triggerUnsavedChanges();
+ return this;
+ },
+
+ // Restores this model's attributes to
+ // their original values since tracking
+ // started, the last save, or last restart.
+ resetAttributes: function() {
+ if (!this._trackingChanges) return;
+ this.attributes = this._originalAttrs;
+ this._resetTracking();
+ this._triggerUnsavedChanges();
+ return this;
+ },
+
+ // Symmetric to Backbone's `model.changedAttributes()`,
+ // except that this returns a hash of the model's attributes that
+ // have changed since the last save, or `false` if there are none.
+ // Like `changedAttributes`, an external attributes hash can be
+ // passed in, returning the attributes in that hash which differ
+ // from the model.
+ unsavedAttributes: function(attrs) {
+ if (!attrs) return _.isEmpty(this._unsavedChanges) ? false : _.clone(this._unsavedChanges);
+ var val, changed = false, old = this._unsavedChanges;
+ for (var attr in attrs) {
+ if (_.isEqual(old[attr], (val = attrs[attr]))) continue;
+ (changed || (changed = {}))[attr] = val;
+ }
+ return changed;
+ },
+
+ /**
+ * Reset tracking.
+ *
+ * @since 7.4.0 Added support for deep models (attributes that are objects themselves),
+ * by using `_.deepClone` in place of `_.clone`.
+ */
+ _resetTracking: function() {
+ this._originalAttrs = _.deepClone(this.attributes);
+ this._unsavedChanges = {};
+ },
+
+ // Trigger an `unsavedChanges` event on this model,
+ // supplying the result of whether there are unsaved
+ // changes and a changed attributes hash.
+ _triggerUnsavedChanges: function() {
+ this.trigger('unsavedChanges', !_.isEmpty(this._unsavedChanges), _.clone(this._unsavedChanges));
+ if (this.unsaved) updateUnsavedModels(this);
+ }
+ });
+
+ // Wrap `model.set()` and update the internal
+ // unsaved changes record keeping.
+ Backbone.Model.prototype.set = _.wrap(Backbone.Model.prototype.set, function(oldSet, key, val, options) {
+ var attrs, ret;
+ if (key == null) return this;
+ // Handle both `"key", value` and `{key: value}` -style arguments.
+ if (typeof key === 'object') {
+ attrs = key;
+ options = val;
+ } else {
+ (attrs = {})[key] = val;
+ }
+ options || (options = {});
+
+ // Delegate to Backbone's set.
+ ret = oldSet.call(this, attrs, options);
+
+ if (this._trackingChanges && !options.silent) {
+ _.each(attrs, _.bind(function(val, key) {
+ if (_.isEqual(this._originalAttrs[key], val))
+ delete this._unsavedChanges[key];
+ else
+ this._unsavedChanges[key] = val;
+ }, this));
+ this._triggerUnsavedChanges();
+ }
+ return ret;
+ });
+
+ // Intercept `model.save()` and reset tracking/unsaved
+ // changes if it was successful.
+ Backbone.sync = _.wrap(Backbone.sync, function(oldSync, method, model, options) {
+ options || (options = {});
+
+ if (method == 'update') {
+ options.success = _.wrap(options.success, _.bind(function(oldSuccess, data, textStatus, jqXHR) {
+ var ret;
+ if (oldSuccess) ret = oldSuccess.call(this, data, textStatus, jqXHR);
+ if (model._trackingChanges) {
+ model._resetTracking();
+ model._triggerUnsavedChanges();
+ }
+ return ret;
+ }, this));
+ }
+ return oldSync(method, model, options);
+ });
+
+})();
+
+define("vendor/backbone.trackit", function(){});
+
+/**
+ * Image object model for use in various models for the 'image' attribute
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Models/Image',[], function() {
+
+ return Backbone.Model.extend( {
+
+ defaults: {
+ enabled: 'no',
+ id: '',
+ size: 'full',
+ src: '',
+ },
+
+ initialize: function() {
+ this.startTracking();
+ },
+
+ } );
+} );
+
+/**
+ * Model relationships mixin
+ *
+ * @since 3.16.0
+ * @version 3.16.11
+ */
+define( 'Models/_Relationships',[], function() {
+
+ return {
+
+ /**
+ * Default relationship settings object
+ *
+ * @type {Object}
+ */
+ relationship_defaults: {
+ parent: {},
+ children: {},
+ },
+
+ /**
+ * Relationship settings object
+ * Should be overridden in the model
+ *
+ * @type {Object}
+ */
+ relationships: {},
+
+ /**
+ * Initialize all parent and child relationships
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ init_relationships: function( options ) {
+
+ var rels = this.get_relationships();
+
+ // initialize parent relationships
+ // useful when adding a model to ensure parent is initialized
+ if ( rels.parent && options && options.parent ) {
+ this.set_parent( options.parent );
+ }
+
+ // initialize all children relationships
+ _.each( rels.children, function( child_data, child_key ) {
+
+ if ( ! child_data.conditional || true === child_data.conditional( this ) ) {
+
+ var child_val = this.get( child_key ),
+ child;
+
+ if ( child_data.lookup ) {
+ child = child_data.lookup( child_val );
+ } else if ( 'model' === child_data.type ) {
+ child = window.llms_builder.construct.get_model( child_data.class, child_val );
+ } else if ( 'collection' === child_data.type ) {
+ child = window.llms_builder.construct.get_collection( child_data.class, child_val );
+ }
+
+ this.set( child_key, child );
+
+ // if the child defines a parent, save a reference to the parent on the child
+ if ( 'model' === child_data.type ) {
+ this._maybe_set_parent_reference( child );
+
+ // save directly to each model in the collection
+ } else if ( 'collection' === child_data.type ) {
+
+ child.parent = this;
+ child.each( function( child_model ) {
+
+ this._maybe_set_parent_reference( child_model );
+
+ }, this );
+
+ }
+
+ }
+
+ }, this );
+
+ },
+
+ /**
+ * Retrieve the property names for all children of the model
+ *
+ * @return array
+ * @since 3.16.11
+ * @version 3.16.11
+ */
+ get_child_props: function() {
+
+ var props = [];
+
+ _.each( this.get_relationships().children, function( data, key ) {
+
+ if ( ! data.conditional || true === data.conditional( this ) ) {
+ props.push( key );
+ }
+
+ }, this );
+
+ return props;
+
+ },
+
+ /**
+ * Retrieve the model's parent (if set)
+ *
+ * @return obj|false
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_parent: function() {
+
+ var rels = this.get_relationships();
+
+ if ( rels.parent ) {
+ return rels.parent.reference;
+ }
+
+ return false;
+
+ },
+
+ /**
+ * Retrieve relationships for the model
+ * Extends with defaults
+ *
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_relationships: function() {
+
+ return $.extend( true, this.relationships, this.relationship_defaults );
+
+ },
+
+ /**
+ * Set the parent reference for the given model
+ *
+ * @param obj obj parent model obj
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ set_parent: function( obj ) {
+ this.relationships.parent.reference = obj;
+ },
+
+ /**
+ * Set up the parent relationships for qualifying children during relationship initialization
+ *
+ * @param obj model child model
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ _maybe_set_parent_reference: function( model ) {
+
+ if ( ! model || ! model.get_relationships ) {
+ return;
+ }
+ var rels = model.get_relationships();
+ if ( rels.parent && rels.parent.model === this.get( 'type' ) ) {
+ model.set_parent( this );
+ }
+
+ },
+
+ };
+
+} );
+
+/**
+ * Quiz Question Choice
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Models/QuestionChoice',[ 'Models/Image', 'Models/_Relationships' ], function( Image, Relationships ) {
+
+ return Backbone.Model.extend( _.defaults( {
+
+ /**
+ * Model relationships
+ *
+ * @type {Object}
+ */
+ relationships: {
+ parent: {
+ model: 'llms_question',
+ type: 'model',
+ },
+ children: {
+ choice: {
+ conditional: function( model ) {
+ return ( 'image' === model.get( 'choice_type' ) );
+ },
+ class: 'Image',
+ model: 'image',
+ type: 'model',
+ },
+ },
+ },
+
+ /**
+ * Model defaults
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ defaults: function() {
+ return {
+ id: _.uniqueId( 'temp_' ),
+ choice: '',
+ choice_type: 'text',
+ correct: false,
+ marker: 'A',
+ question_id: '',
+ type: 'choice',
+ }
+ },
+
+ /**
+ * Initializer
+ *
+ * @param obj data object of model attributes
+ * @param obj options additional options
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function( data, options ) {
+
+ this.startTracking();
+ this.init_relationships( options );
+
+ },
+
+ /**
+ * Retrieve the choice's parent question
+ *
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_parent: function() {
+ return this.collection.parent;
+ },
+
+ /**
+ * Retrieve the ID used when trashing the model
+ *
+ * @return string
+ * @since 3.17.1
+ * @version 3.17.1
+ */
+ get_trash_id: function() {
+ return this.get( 'question_id' ) + ':' + this.get( 'id' );
+ },
+
+ /**
+ * Determine if "selection" is enabled for the question type
+ * Choice type questions are selectable by reorder type questions are not but still use choices
+ *
+ * @return {Boolean}
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ is_selectable: function() {
+ return this.get_parent().get( 'question_type' ).get_choice_selectable();
+ },
+
+ }, Relationships ) );
+
+} );
+
+/**
+ * Question Choice Collection
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Collections/QuestionChoices',[ 'Models/QuestionChoice' ], function( model ) {
+
+ return Backbone.Collection.extend( {
+
+ /**
+ * Model for collection items
+ *
+ * @type obj
+ */
+ model: model,
+
+ initialize: function() {
+
+ // reorder called by QuestionList view when sortable drops occur
+ this.on( 'reorder', this.update_order );
+
+ // when a choice is added or removed, update order
+ this.on( 'add', this.update_order );
+ this.on( 'remove', this.update_order );
+
+ // when a choice is added or remove, ensure min/max correct answers exist
+ this.on( 'add', this.update_correct );
+ this.on( 'remove', this.update_correct );
+
+ // when a choice is toggled, ensure min/max correct exist
+ this.on( 'correct-update', this.update_correct );
+
+ },
+
+ /**
+ * Retrieve the number of correct choices in the collection
+ *
+ * @return int
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ count_correct: function() {
+
+ return _.size( this.get_correct() );
+
+ },
+
+ /**
+ * Retrieve the collection reduced to only correct choices
+ *
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_correct: function() {
+ return this.filter( function( choice ) {
+ return choice.get( 'correct' );
+ } );
+ },
+
+ /**
+ * Ensure min/max correct choices exist in the collection based on the question's settings
+ *
+ * @param obj choice model of the choice that was toggled
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ update_correct: function( choice ) {
+
+ if ( ! this.parent.get( 'question_type' ).get_choice_selectable() ) {
+ return;
+ }
+
+ var siblings = this.without( choice ), // exclude the toggled choice from loops
+ question = this.parent;
+
+ // if multiple choices aren't enabled turn all other choices to incorrect
+ if ( 'no' === question.get( 'multi_choices' ) ) {
+ _.each( siblings, function( model ) {
+ model.set( 'correct', false );
+ } );
+ }
+
+ // if we don't have a single correct answer & the question has points, set one
+ // allows users to create quizzes / questions with no points and therefore no correct answers are allowed
+ if ( 0 === this.count_correct() && question.get( 'points' ) > 0 ) {
+ var models = 1 === this.size() ? this.models : siblings;
+ _.first( models ).set( 'correct', true );
+ }
+
+ },
+
+ /**
+ * Update the marker attr of each choice in the list to reflect the order of the collection
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ update_order: function() {
+
+ var self = this,
+ question = this.parent;
+
+ this.each( function( choice ) {
+ choice.set( 'marker', question.get( 'question_type' ).get_choice_markers()[ self.indexOf( choice ) ] );
+ } );
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Quiz Question Type
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Models/QuestionType',[], function() {
+
+ return Backbone.Model.extend( {
+
+ /**
+ * Get model default attributes
+ *
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ defaults: function() {
+ return {
+ choices: false,
+ clarifications: true,
+ default_choices: [],
+ description: true,
+ icon: 'question',
+ id: 'generic',
+ image: true,
+ keywords: [],
+ name: 'Generic',
+ placeholder: '',
+ points: true,
+ video: true,
+ }
+ },
+
+ /**
+ * Retrieve an array of keywords for the question type
+ * Used for filtering questions by search term in the quiz builder
+ *
+ * @return array
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_keywords: function() {
+
+ var name = this.get( 'name' ),
+ words = [ name ];
+
+ return words.concat( this.get( 'keywords' ) ).concat( name.split( ' ' ) );
+
+ },
+
+ /**
+ * Get marker array for the question choices
+ *
+ * @return array
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_choice_markers: function() {
+
+ return this._get_choice_option( 'markers' );
+
+ },
+
+ /**
+ * Determine if the question's choices are selectable
+ *
+ * @return bool
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_choice_selectable: function() {
+
+ return this._get_choice_option( 'selectable' );
+
+ },
+
+ /**
+ * Get the choice type (text,image)
+ *
+ * @return string
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_choice_type: function() {
+
+ return this._get_choice_option( 'type' );
+
+ },
+
+ /**
+ * Retrieve defined min. choices
+ *
+ * @return int
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_min_choices: function() {
+
+ return this._get_choice_option( 'min' );
+
+ },
+
+ /**
+ * Get type-defined max choices
+ *
+ * @return string
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_max_choices: function() {
+
+ return this._get_choice_option( 'max' );
+
+ },
+
+ /**
+ * Determine if multi-choice selection is enabled
+ *
+ * @return bool
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_multi_choices: function() {
+
+ var choices = this.get( 'choices' );
+
+ if ( ! choices ) {
+ return false;
+ }
+
+ return this._get_choice_option( 'multi' );
+
+ },
+
+ /**
+ * Retrieve data from the type's "choices" attribute
+ * Allows quick handling of types with no choice definitions w/o additional checks
+ *
+ * @param string option name of the choice option to retrieve
+ * @return mixed
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ _get_choice_option: function( option ) {
+
+ var choices = this.get( 'choices' );
+
+ if ( ! choices || ! choices[ option ] ) {
+ return false;
+ }
+
+ return choices[ option ];
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Utility functions for Models.
+ *
+ * @since 3.16.0
+ * @version 7.4.0
+ */
+define( 'Models/_Utilities',[], function() {
+
+ return {
+
+ fields: [],
+
+ /**
+ * Override Backbone `set` method.
+ *
+ * Takes into account attributes of the form object[prop].
+ *
+ * @since 7.4.0
+ *
+ * @param {Mixed} attr The attribute to be set.
+ * @param {Mixed} val The value to set.
+ */
+ set: function ( attr, val ) {
+
+ if ( 'string' === typeof attr ) {
+
+ const matches = attr.match( /(.*?)\[(.*?)\]/ );
+ if ( matches && 3 === matches.length ) {
+
+ const
+ realAttr = matches[1],
+ currentVal = Backbone.Model.prototype.get.call( this, realAttr );
+
+ var newVal = undefined !== currentVal ? currentVal : {};
+
+ newVal[ matches[2] ] = val;
+
+ arguments[0] = realAttr;
+ arguments[1] = newVal;
+
+ }
+ }
+
+ // Continue with Backbone default `set` behavior.
+ Backbone.Model.prototype.set.apply( this, arguments );
+
+ },
+
+ /**
+ * Override Backbone `get` method.
+ *
+ * Takes into account attributes of the form object[prop].
+ *
+ * @since 7.4.0
+ *
+ * @param {Mixed} attr The attribute name.
+ */
+ get: function( attr ) {
+
+ const matches = attr.match( /(.*?)\[(.*?)\]/ );
+ if ( matches && 3 === matches.length ) {
+ const val = Backbone.Model.prototype.get.call( this, matches[1] );
+ if ( val && undefined !== val[ matches[2] ] ) {
+ return val[ matches[2] ];
+ }
+ }
+
+ // Continue with Backbone default `get` behavior.
+ return Backbone.Model.prototype.get.call( this, attr );
+
+ },
+
+ /**
+ * Retrieve the edit post link for the current model.
+ *
+ * @since 3.16.0
+ *
+ * @return string
+ */
+ get_edit_post_link: function() {
+
+ if ( this.has_temp_id() ) {
+ return '';
+ }
+
+ return window.llms_builder.admin_url + 'post.php?post=' + this.get( 'id' ) + '&action=edit';
+
+ },
+
+ get_view_post_link: function() {
+ if ( this.has_temp_id() ) {
+ return '';
+ }
+
+ if ( this.get( 'permalink' ) ) {
+ return this.get( 'permalink' );
+ }
+
+ if ( this.get( 'status' ) === 'publish' ) {
+ return window.llms_builder.home_url + '?p=' + this.get( 'id' );
+ }
+
+ return window.llms_builder.home_url + '?p=' + this.get( 'id' ) + '&preview=true&post_type=' + this.get( 'type' );
+
+ },
+
+ /**
+ * Retrieve schema fields defined for the model
+ *
+ * @return object
+ * @since 3.17.0
+ * @version 3.17.1
+ */
+ get_settings_fields: function() {
+
+ var schema = this.schema || {};
+ return window.llms_builder.schemas.get( schema, this.get( 'type' ).replace( 'llms_', '' ), this );
+
+ },
+
+ /**
+ * Determine if the model has a temporary ID
+ *
+ * @return {Boolean}
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ has_temp_id: function() {
+
+ return ( ! _.isNumber( this.get( 'id' ) ) && 0 === this.get( 'id' ).indexOf( 'temp_' ) );
+
+ },
+
+ /**
+ * Initializes 3rd party custom schema (field) data for a model
+ *
+ * @return void
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ init_custom_schema: function() {
+
+ var groups = _.filter( this.get_settings_fields(), function( group ) {
+ return ( group.custom );
+ } );
+
+ _.each( groups, function( group ) {
+ _.each( _.flatten( group.fields ), function( field ) {
+
+ var keys = [ field.attribute ],
+ customs = this.get( 'custom' );
+
+ if ( field.switch_attribute ) {
+ keys.push( field.switch_attribute );
+ }
+
+ _.each( keys, function( key ) {
+ var attr = field.attribute_prefix ? field.attribute_prefix + key : key;
+ if ( customs && customs[ attr ] ) {
+ this.set( key, customs[ attr ][0] );
+ }
+ }, this );
+
+ }, this );
+ }, this );
+
+ },
+
+ };
+
+} );
+
+/**
+ * Quiz Question
+ *
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+define( 'Models/Question',[
+ 'Models/Image',
+ 'Collections/Questions',
+ 'Collections/QuestionChoices',
+ 'Models/QuestionType',
+ 'Models/_Relationships',
+ 'Models/_Utilities'
+ ], function(
+ Image,
+ Questions,
+ QuestionChoices,
+ QuestionType,
+ Relationships,
+ Utilities
+ ) {
+
+ return Backbone.Model.extend( _.defaults( {
+
+ /**
+ * Model relationships
+ *
+ * @type {Object}
+ */
+ relationships: {
+ parent: {
+ model: 'llms_quiz',
+ type: 'model',
+ },
+ children: {
+ choices: {
+ class: 'QuestionChoices',
+ model: 'choice',
+ type: 'collection',
+ },
+ image: {
+ class: 'Image',
+ model: 'image',
+ type: 'model',
+ },
+ questions: {
+ class: 'Questions',
+ conditional: function( model ) {
+ var type = model.get( 'question_type' ),
+ type_id = _.isString( type ) ? type : type.get( 'id' );
+ return ( 'group' === type_id );
+ },
+ model: 'llms_question',
+ type: 'collection',
+ },
+ question_type: {
+ class: 'QuestionType',
+ lookup: function( val ) {
+ if ( _.isString( val ) ) {
+ return window.llms_builder.questions.get( val );
+ }
+ return val;
+ },
+ model: 'question_type',
+ type: 'model',
+ },
+ }
+ },
+
+ /**
+ * Model defaults
+ *
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ defaults: function() {
+ return {
+ id: _.uniqueId( 'temp_' ),
+ choices: [],
+ content: '',
+ description_enabled: 'no',
+ image: {},
+ multi_choices: 'no',
+ menu_order: 1,
+ points: 1,
+ question_type: 'generic',
+ questions: [], // for question groups
+ parent_id: '',
+ title: '',
+ type: 'llms_question',
+ video_enabled: 'no',
+ video_src: '',
+
+ _expanded: false,
+ }
+ },
+
+ /**
+ * Initializer
+ *
+ * @param obj data object of data for the model
+ * @param obj options additional options
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function( data, options ) {
+
+ var self = this;
+
+ this.startTracking();
+ this.init_relationships( options );
+
+ if ( false !== this.get( 'question_type' ).choices ) {
+
+ this._ensure_min_choices();
+
+ // when a choice is removed, maybe add back some defaults so we always have the minimum
+ this.listenTo( this.get( 'choices' ), 'remove', function() {
+ // new items are added at index 0 when there's only 1 item in the collection, not sure why exactly...
+ setTimeout( function() {
+ self._ensure_min_choices();
+ }, 0 );
+ } );
+
+ }
+
+ // ensure question types that don't support points don't record default 1 point in database
+ if ( ! this.get( 'question_type' ).get( 'points' ) ) {
+ this.set( 'points', 0 );
+ }
+
+ _.delay( function( self ) {
+ self.on( 'change:points', self.get_parent().update_points, self.get_parent() );
+ }, 1, this );
+
+ },
+
+ /**
+ * Add a new question choice
+ *
+ * @param obj data object of choice data
+ * @param obj options additional options
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ add_choice: function( data, options ) {
+
+ var max = this.get( 'question_type' ).get_max_choices();
+ if ( this.get( 'choices' ).size() >= max ) {
+ return;
+ }
+
+ data = data || {};
+ options = options || {};
+
+ data.choice_type = this.get( 'question_type' ).get_choice_type();
+ data.question_id = this.get( 'id' );
+ options.parent = this;
+
+ var choice = this.get( 'choices' ).add( data, options );
+
+ Backbone.pubSub.trigger( 'question-add-choice', choice, this );
+
+ },
+
+ /**
+ * Collapse question_type attribute during full syncs to save to database
+ * Not needed because question types cannot be adjusted after question creation
+ * Called from sync controller
+ *
+ * @param obj atts flat object of attributes to be saved to db
+ * @param string sync_type full or partial
+ * full indicates a force resync or that the model isn't persisted yet
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ before_save: function( atts, sync_type ) {
+ if ( 'full' === sync_type ) {
+ atts.question_type = this.get( 'question_type' ).get( 'id' );
+ }
+ return atts;
+ },
+
+ /**
+ * Retrieve the model's parent (if set)
+ *
+ * @return obj|false
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_parent: function() {
+
+ var rels = this.get_relationships();
+
+ if ( rels.parent ) {
+ if ( this.collection && this.collection.parent ) {
+ return this.collection.parent;
+ } else if ( rels.parent.reference ) {
+ return rels.parent.reference;
+ }
+ }
+
+ return false;
+
+ },
+
+ /**
+ * Retrieve the translated post type name for the model's type
+ *
+ * @param bool plural if true, returns the plural, otherwise returns singular
+ * @return string
+ * @since 3.27.0
+ * @version 3.27.0
+ */
+ get_l10n_type: function( plural ) {
+
+ if ( plural ) {
+ return LLMS.l10n.translate( 'questions' );
+ }
+
+ return LLMS.l10n.translate( 'question' );
+ },
+
+ /**
+ * Gets the index of the question within it's parent
+ * Question numbers skip content elements
+ * & content elements skip questions
+ *
+ * @return int
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_type_index: function() {
+
+ // current models type, used to check the predicate in the filter function below
+ var curr_type = this.get( 'question_type' ).get( 'id' ),
+ questions;
+
+ questions = this.collection.filter( function( question ) {
+
+ var type = question.get( 'question_type' ).get( 'id' );
+
+ // if current model is not content, return all non-content questions
+ if ( curr_type !== 'content' ) {
+ return ( 'content' !== type );
+ }
+
+ // current model is content, return only content questions
+ return 'content' === type;
+
+ } );
+
+ return questions.indexOf( this );
+
+ },
+
+ /**
+ * Gets iterator for the given type
+ * Questions use numbers and content uses alphabet
+ *
+ * @return mixed
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_type_iterator: function() {
+
+ var index = this.get_type_index();
+
+ if ( -1 === index ) {
+ return '';
+ }
+
+ if ( 'content' === this.get( 'question_type' ).get( 'id' ) ) {
+ var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );
+ return alphabet[ index ];
+ }
+
+ return index + 1;
+
+ },
+
+ get_qid: function() {
+
+ var parent = this.get_parent_question(),
+ prefix = '';
+
+ if ( parent ) {
+
+ prefix = parent.get_qid() + '.';
+
+ }
+
+ // return short_id + this.get_type_iterator();
+ return prefix + this.get_type_iterator();
+
+ },
+
+ /**
+ * Retrieve the parent question (if the question is in a question group)
+ *
+ * @return obj|false
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_parent_question: function() {
+
+ if ( this.is_in_group() ) {
+
+ return this.collection.parent;
+
+ }
+
+ return false;
+
+ },
+
+ /**
+ * Retrieve the parent quiz
+ *
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_parent_quiz: function() {
+ return this.get_parent();
+ },
+
+ /**
+ * Points getter
+ * ensures that 0 is always returned if the question type doesn't support points
+ *
+ * @return int
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_points: function() {
+
+ if ( ! this.get( 'question_type' ).get( 'points' ) ) {
+ return 0;
+ }
+
+ return this.get( 'points' );
+
+ },
+
+ /**
+ * Retrieve the questions percentage value within the quiz
+ *
+ * @return string
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_points_percentage: function() {
+
+ var total = this.get_parent().get( '_points' ),
+ points = this.get( 'points' );
+
+ if ( 0 === total ) {
+ return '0%';
+ }
+
+ return ( ( points / total ) * 100 ).toFixed( 2 ) + '%';
+
+ },
+
+ /**
+ * Determine if the question belongs to a question group
+ *
+ * @return {Boolean}
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ is_in_group: function() {
+
+ return ( 'question' === this.collection.parent.get( 'type' ) );
+
+ },
+
+ _ensure_min_choices: function() {
+
+ var choices = this.get( 'choices' );
+ while ( choices.size() < this.get( 'question_type' ).get_min_choices() ) {
+ this.add_choice();
+ }
+
+ },
+
+ }, Relationships, Utilities ) );
+
+} );
+
+/**
+ * Questions Collection
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Collections/Questions',[ 'Models/Question' ], function( model ) {
+
+ return Backbone.Collection.extend( {
+
+ /**
+ * Model for collection items
+ *
+ * @type obj
+ */
+ model: model,
+
+ /**
+ * Initialize
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function() {
+
+ // reorder called by QuestionList view when sortable drops occur
+ this.on( 'reorder', this.update_order );
+
+ // when a question is added or removed, update order
+ this.on( 'add', this.update_order );
+ this.on( 'remove', this.update_order );
+
+ this.on( 'add', this.update_parent );
+
+ },
+
+ /**
+ * Update the order attr of each question in the list to reflect the order of the collection
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ update_order: function() {
+
+ var self = this;
+
+ this.each( function( question ) {
+
+ question.set( 'menu_order', self.indexOf( question ) + 1 );
+
+ } );
+
+ },
+
+ /**
+ * When adding a question to a question list, update the question's parent
+ * Will ensure that questions moved into and out of groups always have the correct parent_id
+ *
+ * @param obj model instance of the question model
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ update_parent: function( model ) {
+
+ model.set( 'parent_id', this.parent.get( 'id' ) );
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Quiz Schema.
+ *
+ * @since 3.17.6
+ * @since 7.4.0 Added upsell for Question Bank and condition in `random_questions` schema.
+ * @since 7.6.2 Added `disable_retake` schema.
+ * @version 7.6.2
+ */
+define( 'Schemas/Quiz',[], function() {
+
+ return window.llms.hooks.applyFilters( 'llms_define_quiz_schema', {
+
+ default: {
+ title: LLMS.l10n.translate( 'General Settings' ),
+ toggleable: true,
+ fields: [
+ [
+ {
+ attribute: 'permalink',
+ id: 'permalink',
+ type: 'permalink',
+ },
+ ], [
+ {
+ attribute: 'content',
+ id: 'description',
+ label: LLMS.l10n.translate( 'Description' ),
+ type: 'editor',
+ },
+ ], [
+ {
+ attribute: 'passing_percent',
+ id: 'passing-percent',
+ label: LLMS.l10n.translate( 'Passing Percentage' ),
+ min: 0,
+ max: 100,
+ tip: LLMS.l10n.translate( 'Minimum percentage of total points required to pass the quiz' ),
+ type: 'number',
+ },
+ {
+ attribute: 'allowed_attempts',
+ id: 'allowed-attempts',
+ label: LLMS.l10n.translate( 'Limit Attempts' ),
+ switch_attribute: 'limit_attempts',
+ tip: LLMS.l10n.translate( 'Limit the maximum number of times a student can take this quiz' ),
+ type: 'switch-number',
+ },
+ {
+ attribute: 'time_limit',
+ id: 'time-limit',
+ label: LLMS.l10n.translate( 'Time Limit' ),
+ min: 1,
+ max: 360,
+ switch_attribute: 'limit_time',
+ tip: LLMS.l10n.translate( 'Enforce a maximum number of minutes a student can spend on each attempt' ),
+ type: 'switch-number',
+ },
+ ], [
+ {
+ attribute: 'show_correct_answer',
+ id: 'show-correct-answer',
+ label: LLMS.l10n.translate( 'Show Correct Answers' ),
+ tip: LLMS.l10n.translate( 'When enabled, students will be shown the correct answer to any question they answered incorrectly.' ),
+ type: 'switch',
+ },
+ {
+ attribute: 'random_questions',
+ id: 'random-questions',
+ label: LLMS.l10n.translate( 'Randomize Question Order' ),
+ tip: LLMS.l10n.translate( 'Display questions in a random order for each attempt. Content questions are locked into their defined positions.' ),
+ type: 'switch',
+ condition: function() {
+ return 'yes' === this.get( 'question_bank' ) ? false : true;
+ }
+ },
+ {
+ attribute: 'disable_retake',
+ id: 'disable-retake',
+ label: LLMS.l10n.translate( 'Disable Retake' ),
+ tip: LLMS.l10n.translate( 'Prevent quiz retake after student passed the quiz.' ),
+ type: 'switch',
+ },
+ ], [
+ {
+ id: 'question-bank',
+ label: LLMS.l10n.translate( 'Question Bank' ),
+ tip: LLMS.l10n.translate( 'A question bank helps prevent cheating and reinforces learning by allowing instructors to create assessments with randomized questions pulled from a bank of questions. (Available in Advanced Quizzes addon)' ),
+ type: 'upsell',
+ text: LLMS.l10n.translate( 'Get LifterLMS Advanced Quizzes' ),
+ url: 'https://lifterlms.com/product/advanced-quizzes/?utm_source=LifterLMS%20Plugin&utm_medium=Quiz%20Builder%20Button&utm_campaign=Advanced%20Question%20Upsell&utm_content=3.16.0&utm_term=Questions%20Bank'
+ }
+ ]
+
+ ],
+ },
+
+ } );
+
+} );
+
+/**
+ * Quiz Model.
+ *
+ * @since 3.16.0
+ * @version 7.5.0
+ */
+define( 'Models/Quiz',[
+ 'Collections/Questions',
+ 'Models/Lesson',
+ 'Models/Question',
+ 'Models/_Relationships',
+ 'Models/_Utilities',
+ 'Schemas/Quiz',
+ ], function(
+ Questions,
+ Lesson,
+ Question,
+ Relationships,
+ Utilities,
+ QuizSchema
+ ) {
+
+ return Backbone.Model.extend( _.defaults( {
+
+ /**
+ * model relationships
+ * @type {Object}
+ */
+ relationships: {
+ parent: {
+ model: 'lesson',
+ type: 'model',
+ },
+ children: {
+ questions: {
+ class: 'Questions',
+ model: 'llms_question',
+ type: 'collection',
+ },
+ }
+ },
+
+ /**
+ * Lesson Settings Schema
+ * @type {Object}
+ */
+ schema: QuizSchema,
+
+ /**
+ * New quiz defaults.
+ *
+ * @since 3.16.0
+ * @since 7.4.0 Added filter for filtering defaults.
+ * @since 7.5.0 Replaced unused `random_answers` property with `random_questions`.
+ *
+ * @return {Object}
+ */
+ defaults: function() {
+
+ return window.llms.hooks.applyFilters( 'llms_quiz_model_defaults', {
+ id: _.uniqueId( 'temp_' ),
+ title: LLMS.l10n.translate( 'New Quiz' ),
+ type: 'llms_quiz',
+ lesson_id: '',
+
+ status: 'draft',
+
+ // editable fields.
+ content: '',
+ allowed_attempts: 5,
+ limit_attempts: 'no',
+ limit_time: 'no',
+ passing_percent: 65,
+ name: '',
+ random_questions: 'no',
+ time_limit: 30,
+ show_correct_answer: 'no',
+ disable_retake: 'no',
+
+ questions: [],
+
+ // calculated.
+ _points: 0,
+
+ // display.
+ permalink: '',
+ _show_settings: false,
+ _questions_loaded: false,
+ } );
+
+ },
+
+ /**
+ * Initializer
+ * @return void
+ * @since 3.16.0
+ * @version 3.24.0
+ */
+ initialize: function() {
+
+ this.init_custom_schema();
+ this.startTracking();
+ this.init_relationships();
+
+ this.listenTo( this.get( 'questions' ), 'add', this.update_points );
+ this.listenTo( this.get( 'questions' ), 'remove', this.update_points );
+
+ this.set( '_points', this.get_total_points() );
+
+ // when a quiz is published, ensure the parent lesson is marked as "Enabled" for quizzing
+ this.on( 'change:status', function() {
+ if ( 'publish' === this.get( 'status' ) ) {
+ this.get_parent().set( 'quiz_enabled', 'yes' );
+ }
+ } );
+
+ window.llms.hooks.doAction( 'llms_quiz_model_init', this );
+
+ },
+
+ /**
+ * Add a new question to the quiz
+ * @param obj data question data
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ add_question: function( data ) {
+
+ data.parent_id = this.get( 'id' );
+ var question = this.get( 'questions' ).add( data, {
+ parent: this,
+ } );
+ Backbone.pubSub.trigger( 'quiz-add-question', question, this );
+
+ },
+
+ /**
+ * Retrieve the translated post type name for the model's type
+ * @param bool plural if true, returns the plural, otherwise returns singular
+ * @return string
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+ get_l10n_type: function( plural ) {
+
+ if ( plural ) {
+ return LLMS.l10n.translate( 'quizzes' );
+ }
+
+ return LLMS.l10n.translate( 'quiz' );
+ },
+
+ /**
+ * Retrieve the quiz's total points
+ * @return int
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_total_points: function() {
+
+ var points = 0;
+
+ this.get( 'questions' ).each( function( question ) {
+ points += question.get_points();
+ } );
+
+ return points;
+
+ },
+
+ /**
+ * Lazy load questions via AJAX
+ * @param {Function} cb callback function
+ * @return void
+ * @since 3.19.2
+ * @version 3.19.2
+ */
+ load_questions: function( cb ) {
+
+ if ( this.get( '_questions_loaded' ) ) {
+
+ cb();
+
+ } else {
+
+ var self = this;
+
+ LLMS.Ajax.call( {
+ data: {
+ action: 'llms_builder',
+ action_type: 'lazy_load',
+ course_id: window.llms_builder.CourseModel.get( 'id' ),
+ load_id: this.get( 'id' ),
+ },
+ error: function( xhr, status, error ) {
+
+ console.log( xhr, status, error );
+ window.llms_builder.debug.log( '==== start load_questions error ====', xhr, status, error, '==== finish load_questions error ====' );
+ cb( true );
+
+ },
+ success: function( res ) {
+ if ( res && res.questions ) {
+ self.set( '_questions_loaded', true );
+ if ( res.questions ) {
+ _.each( res.questions, self.add_question, self );
+ }
+ cb();
+ } else {
+ cb( true );
+ }
+ }
+
+ } );
+
+ }
+
+
+ },
+
+ /**
+ * Update total number of points calculated property
+ * @return int
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ update_points: function() {
+
+ this.set( '_points', this.get_total_points() );
+
+ },
+
+ }, Relationships, Utilities ) );
+
+} );
+
+/**
+ * Lesson Schemas
+ *
+ * @since 3.17.0
+ * @version 3.25.4
+ */
+define( 'Schemas/Lesson',[], function() {
+
+ return window.llms.hooks.applyFilters( 'llms_define_lesson_schema', {
+
+ default: {
+ title: LLMS.l10n.translate( 'General Settings' ),
+ toggleable: true,
+ fields: [
+ [
+ {
+ attribute: 'permalink',
+ id: 'permalink',
+ type: 'permalink',
+ },
+ ], [
+ {
+ attribute: 'video_embed',
+ id: 'video-embed',
+ label: LLMS.l10n.translate( 'Video Embed URL' ),
+ type: 'video_embed',
+ },
+ {
+ attribute: 'audio_embed',
+ id: 'audio-embed',
+ label: LLMS.l10n.translate( 'Audio Embed URL' ),
+ type: 'audio_embed',
+ },
+ ], [
+ {
+ attribute: 'free_lesson',
+ id: 'free-lesson',
+ label: LLMS.l10n.translate( 'Free Lesson' ),
+ tip: LLMS.l10n.translate( 'Free lessons can be accessed without enrollment.' ),
+ type: 'switch',
+ },
+ {
+ attribute: 'require_passing_grade',
+ id: 'require-passing-grade',
+ label: LLMS.l10n.translate( 'Require Passing Grade on Quiz' ),
+ tip: LLMS.l10n.translate( 'When enabled, students must pass this quiz before the lesson can be completed.' ),
+ type: 'switch',
+ condition: function() {
+ return ( 'yes' === this.get( 'quiz_enabled' ) );
+ },
+ },
+ {
+ attribute: 'require_assignment_passing_grade',
+ id: 'require-assignment-passing-grade',
+ label: LLMS.l10n.translate( 'Require Passing Grade on Assignment' ),
+ tip: LLMS.l10n.translate( 'When enabled, students must pass this assignment before the lesson can be completed.' ),
+ type: 'switch',
+ condition: function() {
+ return ( 'undefined' !== window.llms_builder.assignments && 'yes' === this.get( 'assignment_enabled' ) );
+ },
+ },
+ {
+ attribute: 'points',
+ id: 'points',
+ label: LLMS.l10n.translate( 'Lesson Weight' ),
+ label_after: LLMS.l10n.translate( 'POINTS' ),
+ min: 0,
+ max: 99,
+ tip: LLMS.l10n.translate( 'Determines the weight of the lesson when calculating the overall grade of the course.' ),
+ tip_position: 'top-left',
+ type: 'number',
+ condition: function() {
+ return ( ( 'yes' === this.get( 'quiz_enabled' ) ) || ( 'undefined' !== window.llms_builder.assignments && 'yes' === this.get( 'assignment_enabled' ) ) );
+ },
+ },
+ ], [
+ {
+ attribute: 'prerequisite',
+ condition: function() {
+ return ( false === this.is_first_in_course() );
+ },
+ id: 'prerequisite',
+ label: LLMS.l10n.translate( 'Prerequisite' ),
+ switch_attribute: 'has_prerequisite',
+ type: 'switch-select',
+ options: function() {
+ return this.get_available_prereq_options();
+ },
+ },
+ ], [
+ {
+ label: LLMS.l10n.translate( 'Course Drip Method' ),
+ id: 'course-drip',
+ type: 'heading',
+ condition: function() {
+ return ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) );
+ },
+ detail: LLMS.l10n.translate( 'Drip settings are currently set at the course level, under the Restrictions settings tab. Disable to allow lesson level drip settings.' ) + ' ' + LLMS.l10n.translate( 'Edit Course' ) + ' ',
+ },
+ ], [
+ {
+ label: LLMS.l10n.translate( 'Course Drip Method' ),
+ id: 'course-drip',
+ type: 'heading',
+ condition: function() {
+ return ( ! this.get_course() || 'yes' !== this.get_course().get( 'lesson_drip' ) || ! this.get_course().get( 'drip_method' ) );
+ },
+ detail: LLMS.l10n.translate( 'Drip settings can be set at the course level to release course content at a specified interval, in the Restrictions settings tab.' ) + ' ' + LLMS.l10n.translate( 'Edit Course' ) + ' ',
+ },
+ ], [
+ {
+ attribute: 'drip_method',
+ id: 'drip-method',
+ label: LLMS.l10n.translate( 'Drip Method' ),
+ switch_attribute: 'drip_method',
+ type: 'select',
+ condition: function() {
+ return ( ! this.get_course() || 'yes' !== this.get_course().get( 'lesson_drip' ) || ! this.get_course().get( 'drip_method' ) );
+ },
+ options: function() {
+
+ var options = [
+ {
+ key: '',
+ val: LLMS.l10n.translate( 'None' ),
+ },
+ {
+ key: 'date',
+ val: LLMS.l10n.translate( 'On a specific date' ),
+ },
+ {
+ key: 'enrollment',
+ val: LLMS.l10n.translate( '# of days after course enrollment' ),
+ },
+ ];
+
+ if ( this.get_course() && this.get_course().get( 'start_date' ) ) {
+ options.push( {
+ key: 'start',
+ val: LLMS.l10n.translate( '# of days after course start date' ),
+ } );
+ }
+
+ if ( 'yes' === this.get( 'has_prerequisite' ) ) {
+ options.push( {
+ key: 'prerequisite',
+ val: LLMS.l10n.translate( '# of days after prerequisite lesson completion' ),
+ } );
+ }
+
+ return options;
+
+ },
+ },
+ {
+ attribute: 'days_before_available',
+ condition: function() {
+ if ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) ) {
+ return false;
+ }
+
+ return ( -1 !== [ 'enrollment', 'start', 'prerequisite' ].indexOf( this.get( 'drip_method' ) ) );
+ },
+ id: 'days-before-available',
+ label: LLMS.l10n.translate( '# of days' ),
+ min: 0,
+ type: 'number',
+ },
+ {
+ attribute: 'date_available',
+ date_format: 'Y-m-d',
+ condition: function() {
+ if ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) ) {
+ return false;
+ }
+
+ return ( 'date' === this.get( 'drip_method' ) );
+ },
+ id: 'date-available',
+ label: LLMS.l10n.translate( 'Date' ),
+ timepicker: 'false',
+ type: 'datepicker',
+ },
+ {
+ attribute: 'time_available',
+ condition: function() {
+ if ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) ) {
+ return false;
+ }
+
+ return ( 'date' === this.get( 'drip_method' ) );
+ },
+ datepicker: 'false',
+ date_format: 'h:i A',
+ id: 'time-available',
+ label: LLMS.l10n.translate( 'Time' ),
+ type: 'datepicker',
+ },
+ ],
+ ],
+ },
+
+ } );
+
+} );
+
+/**
+ * Lesson Model
+ *
+ * @since 3.13.0
+ * @version 4.20.0
+ */
+define( 'Models/Lesson',[ 'Models/Quiz', 'Models/_Relationships', 'Models/_Utilities', 'Schemas/Lesson' ], function( Quiz, Relationships, Utilities, LessonSchema ) {
+
+ return Backbone.Model.extend( _.defaults( {
+
+ /**
+ * Model relationships
+ *
+ * @type {Object}
+ */
+ relationships: {
+ parents: {
+ model: 'section',
+ type: 'model',
+ },
+ children: {
+ quiz: {
+ class: 'Quiz',
+ conditional: function( model ) {
+ // if quiz is enabled OR not enabled but we have some quiz data as an obj
+ return ( 'yes' === model.get( 'quiz_enabled' ) || ! _.isEmpty( model.get( 'quiz' ) ) );
+ },
+ model: 'llms_quiz',
+ type: 'model',
+ },
+ },
+ },
+
+ /**
+ * Lesson Settings Schema
+ *
+ * @type {Object}
+ */
+ schema: LessonSchema,
+
+ /**
+ * New lesson defaults
+ *
+ * @since 3.13.0
+ * @since 3.24.0 Unknown.
+ *
+ * @return {Object} Default options associative array (js object).
+ */
+ defaults: function() {
+ return {
+ id: _.uniqueId( 'temp_' ),
+ title: LLMS.l10n.translate( 'New Lesson' ),
+ type: 'lesson',
+ order: this.collection ? this.collection.length + 1 : 1,
+ parent_course: window.llms_builder.course.id,
+ parent_section: '',
+
+ // Urls.
+ edit_url: '',
+ view_url: '',
+
+ // Editable fields.
+ content: '',
+ audio_embed: '',
+ has_prerequisite: 'no',
+ require_passing_grade: 'yes',
+ require_assignment_passing_grade: 'yes',
+ video_embed: '',
+ free_lesson: '',
+ points: 1,
+
+ // Other fields.
+ assignment: {}, // Assignment model/data.
+ assignment_enabled: 'no',
+
+ quiz: {}, // Quiz model/data.
+ quiz_enabled: 'no',
+
+ _forceSync: false,
+
+ };
+ },
+
+ /**
+ * Initializer
+ *
+ * @since 3.16.0
+ * @since 3.17.0 Unknown
+ *
+ * @return {void}
+ */
+ initialize: function() {
+
+ this.init_custom_schema();
+ this.startTracking();
+ this.maybe_init_assignments();
+ this.init_relationships();
+
+ // If the lesson ID isn't set on a quiz, set it.
+ var quiz = this.get( 'quiz' );
+ if ( ! _.isEmpty( quiz ) && ! quiz.get( 'lesson_id' ) ) {
+ quiz.set( 'lesson_id', this.get( 'id' ) );
+ }
+
+ window.llms.hooks.doAction( 'llms_lesson_model_init', this );
+
+ },
+
+ /**
+ * Retrieve a reference to the parent course of the lesson
+ *
+ * @since 3.16.0
+ * @since 4.14.0 Use Section.get_course() in favor of Section.get_parent().
+ *
+ * @return {Object} The parent course model of the lesson.
+ */
+ get_course: function() {
+ return this.get_parent().get_course();
+ },
+
+ /**
+ * Retrieve the translated post type name for the model's type
+ *
+ * @since 3.16.12
+ *
+ * @param bool plural If true, returns the plural, otherwise returns singular.
+ * @return string The translated post type name.
+ */
+ get_l10n_type: function( plural ) {
+
+ if ( plural ) {
+ return LLMS.l10n.translate( 'lessons' );
+ }
+
+ return LLMS.l10n.translate( 'lesson' );
+ },
+
+ /**
+ * Override default get_parent to grab from collection if models parent isn't set
+ *
+ * @since 3.17.0
+ *
+ * @return {Object}|false The parent model or false if not available.
+ */
+ get_parent: function() {
+
+ var rels = this.get_relationships();
+ if ( rels.parent && rels.parent.reference ) {
+ return rels.parent.reference;
+ } else if ( this.collection && this.collection.parent ) {
+ return this.collection.parent;
+ }
+ return false;
+
+ },
+
+ /**
+ * Retrieve the questions percentage value within the quiz
+ *
+ * @since 3.24.0
+ *
+ * @return {String} Questions percentage value within the quiz.
+ */
+ get_points_percentage: function() {
+
+ var total = this.get_course().get_total_points(),
+ points = this.get( 'points' ) * 1;
+
+ if ( ! _.isNumber( points ) ) {
+ points = 0;
+ }
+
+ if ( 0 === total ) {
+ return '0%';
+ }
+
+ return ( ( points / total ) * 100 ).toFixed( 2 ) + '%';
+
+ },
+
+ /**
+ * Retrieve an array of prerequisite options available for the current lesson
+ *
+ * @since 3.17.0
+ *
+ * @return {Object} Prerequisite options.
+ */
+ get_available_prereq_options: function() {
+
+ var parent_section_index = this.get_parent().collection.indexOf( this.get_parent() ),
+ lesson_index_in_section = this.collection.indexOf( this ),
+ options = [];
+
+ this.get_course().get( 'sections' ).each( function( section, curr_sec_index ) {
+ if ( curr_sec_index <= parent_section_index ) {
+ var group = {
+ // Translators: %1$d = section order number, %2$s = section title.
+ label: LLMS.l10n.replace( 'Section %1$d: %2$s', {
+ '%1$d': section.get( 'order' ),
+ '%2$s': section.get( 'title' )
+ } ),
+ options: [],
+ };
+
+ section.get( 'lessons' ).each( function( lesson, curr_les_index ) {
+ if ( curr_sec_index !== parent_section_index || curr_les_index < lesson_index_in_section ) {
+ // Translators: %1$d = lesson order number, %2$s = lesson title.
+ group.options.push( {
+ key: lesson.get( 'id' ),
+ val: LLMS.l10n.replace( 'Lesson %1$d: %2$s', {
+ '%1$d': lesson.get( 'order' ),
+ '%2$s': lesson.get( 'title' )
+ } ),
+ } );
+ }
+ }, this );
+
+ options.push( group );
+ }
+ }, this );
+
+ return options;
+
+ },
+
+ /**
+ * Add a new quiz to the lesson
+ *
+ * @since 3.16.0
+ * @since 3.27.0 Unknown.
+ *
+ * @param {Object} data Object of quiz data used to construct a new quiz model.
+ * @return {Object} Model for the created quiz.
+ */
+ add_quiz: function( data ) {
+
+ data = data || {};
+
+ data.lesson_id = this.id;
+ data._questions_loaded = true;
+
+ if ( ! data.title ) {
+
+ data.title = LLMS.l10n.replace( '%1$s Quiz', {
+ '%1$s': this.get( 'title' ),
+ } );
+
+ }
+
+ this.set( 'quiz', data );
+ this.init_relationships();
+
+ var quiz = this.get( 'quiz' );
+ this.set( 'quiz_enabled', 'yes' );
+
+ window.llms.hooks.doAction( 'llms_lesson_add_quiz', quiz, this );
+
+ return quiz;
+
+ },
+
+ /**
+ * Determine if this is the first lesson
+ *
+ * @since 3.17.0
+ * @since 4.20.0 Use is_first_in_section() new method.
+ *
+ * @return {Boolean} Whether this is the first lesson of its course.
+ */
+ is_first_in_course: function() {
+
+ // If it's not the first item in the section it cant be the first lesson.
+ if ( ! this.is_first_in_section() ) {
+ return false;
+ }
+
+ // If it's not the first section it cant' be first lesson.
+ var section = this.get_parent();
+ if ( section.collection.indexOf( section ) ) {
+ return false;
+ }
+
+ // It's first lesson in first section.
+ return true;
+
+ },
+
+ /**
+ * Determine if this is the last lesson of the course
+ *
+ * @since 4.20.0
+ *
+ * @return {Boolean} Whether this is the last lesson of its course.
+ */
+ is_last_in_course: function() {
+
+ // If it's not last item in the section it cant be the last lesson.
+ if ( ! this.is_last_in_section() ) {
+ return false;
+ }
+
+ // If it's not the last section it cant' be last lesson.
+ var section = this.get_parent();
+ if ( section.collection.indexOf( section ) < ( section.collection.size() - 1 ) ) {
+ return false;
+ }
+
+ // It's last lesson in last section.
+ return true;
+
+ },
+
+ /**
+ * Determine if this is the first lesson within its section
+ *
+ * @since 4.20.0
+ *
+ * @return {Boolean} Whether this is the first lesson of its section.
+ */
+ is_first_in_section: function() {
+ return 0 === this.collection.indexOf( this );
+ },
+
+ /**
+ * Determine if this is the last lesson within its section
+ *
+ * @since 4.20.0
+ *
+ * @return {Boolean} Whether this is the last lesson of its section.
+ */
+ is_last_in_section: function() {
+ return this.collection.indexOf( this ) === ( this.collection.size() - 1 );
+ },
+
+ /**
+ * Get prev lesson in a course
+ *
+ * @since 4.20.0
+ *
+ * @param {String} status Prev lesson post status. If not specified any status will be taken into account.
+ * @return {Object}|false Previous lesson model or `false` if no previous lesson could be found.
+ */
+ get_prev: function( status ) {
+ return this.get_sibling( 'prev', status );
+ },
+
+ /**
+ * Get next lesson in a course
+ *
+ * @since 4.20.0
+ *
+ * @param {String} status Next lesson post status. If not specified any status will be taken into account.
+ * @return {Object}|false Next lesson model or `false` if no next lesson could be found.
+ */
+ get_next: function( status ) {
+ return this.get_sibling( 'next', status );
+ },
+
+ /**
+ * Get a sibling lesson
+ *
+ * @param {String} direction Siblings direction [next|prev]. If not specified will fall back on 'prev'.
+ * @param {String} status Sibling lesson post status. If not specified any status will be taken into account.
+ * @return {Object}|false Sibling lesson model, in the specified direction, or `false` if no sibling lesson could be found.
+ */
+ get_sibling: function( direction, status ) {
+
+ direction = 'next' === direction ? direction : 'prev';
+
+ // Functions and vars to use when direction is 'prev' (default).
+ var is_course_limit_reached_f = 'is_first_in_course',
+ is_section_limit_reached_f = 'is_first_in_section',
+ sibling_index_increment = -1,
+ get_sibling_lesson_in_sibling_section_f = 'last';
+
+ if ( 'next' === direction ) {
+ is_course_limit_reached_f = 'is_last_in_course';
+ is_section_limit_reached_f = 'is_last_in_section';
+ sibling_index_increment = 1,
+ get_sibling_lesson_in_sibling_section_f = 'first';
+ }
+
+ if ( this[ is_course_limit_reached_f ]() ) {
+ return false;
+ }
+
+ var sibling_index = this.collection.indexOf( this ) + sibling_index_increment,
+ sibling_lesson = this.collection.at( sibling_index );
+
+ if ( this[ 'next' === direction ? 'is_last_in_section' : 'is_first_in_section' ]() ) {
+ var cur_section = this.get_parent(),
+ sibling_section = cur_section[ 'get_' + direction ]( false );
+
+ // Skip sibling empty sections.
+ while ( sibling_section && ! sibling_section.get( 'lessons' ).size() ) {
+ sibling_section = sibling_section[ 'get_' + direction ]( false );
+ }
+
+ // Couldn't find any suitable lesson.
+ if ( ! sibling_section || ! sibling_section.get( 'lessons' ).size() ) {
+ return false;
+ }
+
+ sibling_lesson = sibling_section.get( 'lessons' )[ get_sibling_lesson_in_sibling_section_f ]();
+
+ }
+
+ // If we need a specific lesson status.
+ if ( status && status !== sibling_lesson.get( 'status' ) ) {
+ return sibling_lesson.get_sibling( direction, status );
+ }
+
+ return sibling_lesson;
+
+ },
+
+ /**
+ * Initialize lesson assignments *if* the assignments addon is available and enabled
+ *
+ * @since 3.17.0
+ *
+ * @return {Void}
+ */
+ maybe_init_assignments: function() {
+
+ if ( ! window.llms_builder.assignments ) {
+ return;
+ }
+
+ this.relationships.children.assignment = {
+ class: 'Assignment',
+ conditional: function( model ) {
+ // If assignment is enabled OR not enabled but we have some assignment data as an obj.
+ return ( 'yes' === model.get( 'assignment_enabled' ) || ! _.isEmpty( model.get( 'assignment' ) ) );
+ },
+ model: 'llms_assignment',
+ type: 'model',
+ };
+
+ },
+
+ }, Relationships, Utilities ) );
+
+} );
+
+/**
+ * Lessons Collection
+ *
+ * @since 3.13.0
+ * @version 3.17.0
+ */
+define( 'Collections/Lessons',[ 'Models/Lesson' ], function( model ) {
+
+ return Backbone.Collection.extend( {
+
+ /**
+ * Model for collection items
+ *
+ * @type obj
+ */
+ model: model,
+
+ /**
+ * Initializer
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.17.0
+ */
+ initialize: function() {
+
+ // reorder called by LessonList view when sortable drops occur
+ this.on( 'reorder', this.on_reorder );
+
+ // when a lesson is added or removed, update order
+ this.on( 'add', this.on_reorder );
+ this.on( 'remove', this.on_reorder );
+
+ },
+
+ /**
+ * On lesson reorder callback
+ *
+ * Update the order attr of each lesson to reflect the new lesson order
+ * Validate prerequisite (if set) and unset it if it's no longer a valid prereq
+ *
+ * @return void
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ on_reorder: function() {
+ this.update_order();
+ this.validate_prereqs();
+ },
+
+ /**
+ * Update lesson order attribute of all lessons when lessons are reordered
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.17.0
+ */
+ update_order: function() {
+
+ this.each( function( lesson ) {
+ lesson.set( 'order', this.indexOf( lesson ) + 1 );
+ }, this );
+
+ },
+
+ /**
+ * Validate prerequisite (if set) and unset it if it's no longer a valid prereq
+ *
+ * @return void
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ validate_prereqs: function() {
+
+ this.each( function( lesson ) {
+
+ // validate prereqs
+ if ( 'yes' === lesson.get( 'has_prerequisite' ) ) {
+ var valid = _.pluck( _.flatten( _.pluck( lesson.get_available_prereq_options(), 'options' ) ), 'key' );
+ if ( -1 === valid.indexOf( lesson.get( 'prerequisite' ) * 1 ) ) {
+ lesson.set( {
+ prerequisite: 0,
+ has_prerequisite: 'no',
+ } );
+ }
+ }
+
+ }, this );
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Quiz Question Type Collection
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Collections/QuestionTypes',[ 'Models/QuestionType' ], function( model ) {
+
+ return Backbone.Collection.extend( {
+
+ /**
+ * Model for collection items
+ *
+ * @type obj
+ */
+ model: model,
+
+ /**
+ * Initializer
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function() {
+
+ this.on( 'add', this.comparator );
+ this.on( 'remove', this.comparator );
+
+ },
+
+ /**
+ * Comparator (sorts collection)
+ *
+ * @param obj model QuestionType model
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ comparator: function( model ) {
+
+ return model.get( 'group' ).order;
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Section Model
+ *
+ * @since 3.16.0
+ * @version 4.20.0
+ */
+define( 'Models/Section',[ 'Collections/Lessons', 'Models/_Relationships' ], function( Lessons, Relationships ) {
+
+ return Backbone.Model.extend( _.defaults( {
+
+ relationships: {
+ parent: {
+ model: 'course',
+ type: 'model',
+ },
+ children: {
+ lessons: {
+ class: 'Lessons',
+ model: 'lesson',
+ type: 'collection',
+ },
+ }
+ },
+
+ /**
+ * New section defaults
+ *
+ * @since 3.16.0
+ *
+ * @return {Object}
+ */
+ defaults: function() {
+ return {
+ id: _.uniqueId( 'temp_' ),
+ lessons: [],
+ order: this.collection ? this.collection.length + 1 : 1,
+ parent_course: window.llms_builder.course.id,
+ title: LLMS.l10n.translate( 'New Section' ),
+ type: 'section',
+
+ // Expand the first 100 sections by default to avoid timeout issues.
+ _expanded: ! this.collection || this.collection.length <= 100 ? true : false,
+ _selected: false,
+ };
+ },
+
+ /**
+ * Initialize
+ *
+ * @since 3.16.0
+ *
+ * @return {void}
+ */
+ initialize: function() {
+
+ this.startTracking();
+ this.init_relationships();
+
+ },
+
+ /**
+ * Add a lesson to the section
+ *
+ * @since 3.16.0
+ * @since 3.16.11 Unknown.
+ *
+ * @param {Object} data Hash of lesson data (creates new lesson)
+ * or existing lesson as a Backbone.Model.
+ * @param {Object} options Hash of options.
+ * @return {Object} Backbone.Model of the new/updated lesson.
+ */
+ add_lesson: function( data, options ) {
+
+ data = data || {};
+ options = options || {};
+
+ if ( data instanceof Backbone.Model ) {
+ data.set( 'status', 'publish' );
+ data.set( 'parent_section', this.get( 'id' ) );
+ data.set_parent( this );
+ } else {
+ data.status = 'publish';
+ data.parent_section = this.get( 'id' );
+ }
+
+ return this.get( 'lessons' ).add( data, options );
+
+ },
+
+ /**
+ * Retrieve the translated post type name for the model's type
+ *
+ * @since 3.16.12
+ *
+ * @param {Boolean} plural If true, returns the plural, otherwise returns singular.
+ * @return {String}
+ */
+ get_l10n_type: function( plural ) {
+
+ if ( plural ) {
+ return LLMS.l10n.translate( 'sections' );
+ }
+
+ return LLMS.l10n.translate( 'section' );
+ },
+
+ /**
+ * Get next section in the collection
+ *
+ * @since 3.16.11
+ *
+ * @param {boolean} circular If true handles the collection in a circle.
+ * If current is the last section, returns the first section.
+ * @return {Object}|false
+ */
+ get_next: function( circular ) {
+ return this._get_sibling( 'next', circular );
+ },
+
+ /**
+ * Retrieve a reference to the parent course of the section
+ *
+ * @since 4.14.0
+ *
+ * @return {Object}
+ */
+ get_course: function() {
+
+ // When working with an unsaved draft course the parent isn't properly set on the creation of a section.
+ if ( ! this.get_parent() ) {
+ this.set_parent( window.llms_builder.CourseModel );
+ }
+
+ return this.get_parent();
+
+ },
+
+ /**
+ * Get prev section in the collection
+ *
+ * @since 3.16.11
+ *
+ * @param {Boolean} circular If true handles the collection in a circle.
+ * If current is the first section, returns the last section.
+ * @return {Object}|false
+ */
+ get_prev: function( circular ) {
+ return this._get_sibling( 'prev', circular );
+ },
+
+ /**
+ * Get a sibling section
+ *
+ * @since 3.16.11
+ * @since 4.20.0 Fix case when the last section was returned when looking for the prev of the first section and not `circular`.
+ *
+ * @param {String} direction Siblings direction [next|prev].
+ * @param {Boolean} circular If true handles the collection in a circle.
+ * If current is the last section, returns the first section.
+ * If current is the first section, returns the last section.
+ * @return {Object}|false
+ */
+ _get_sibling: function( direction, circular ) {
+
+ circular = ( 'undefined' === circular ) ? true : circular;
+
+ var max = this.collection.size() - 1,
+ index = this.collection.indexOf( this ),
+ sibling_index;
+
+ if ( 'next' === direction ) {
+ sibling_index = index + 1;
+ } else if ( 'prev' === direction ) {
+ sibling_index = index - 1;
+ }
+
+ // Don't retrieve greater than max or less than min.
+ if ( sibling_index <= max || sibling_index >= 0 ) {
+
+ return this.collection.at( sibling_index );
+
+ } else if ( circular ) {
+
+ if ( 'next' === direction ) {
+ return this.collection.first();
+ } else if ( 'prev' === direction ) {
+ return this.collection.last();
+ }
+
+ }
+
+ return false;
+
+ },
+
+ }, Relationships ) );
+
+} );
+
+/**
+ * Sections Collection
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Collections/Sections',[ 'Models/Section' ], function( model ) {
+
+ return Backbone.Collection.extend( {
+
+ /**
+ * Model for collection items
+ *
+ * @type obj
+ */
+ model: model,
+
+ /**
+ * Initialize
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function() {
+
+ var self = this;
+
+ // reorder called by SectionList view when sortable drops occur
+ this.on( 'reorder', this.update_order );
+
+ // when a section is added or removed, update order
+ this.on( 'add', this.update_order );
+ this.on( 'remove', this.update_order );
+
+ },
+
+ /**
+ * Update the order attr of each section in the list to reflect the order of the collection
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ update_order: function() {
+
+ var self = this;
+
+ this.each( function( section ) {
+
+ section.set( 'order', self.indexOf( section ) + 1 );
+
+ } );
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Lessons Collection
+ *
+ * @since 3.13.0
+ * @version 3.16.0
+ */
+define( 'Collections/loader',[
+ 'Collections/Lessons',
+ 'Collections/QuestionChoices',
+ 'Collections/Questions',
+ 'Collections/QuestionTypes',
+ 'Collections/Sections'
+ ], function(
+ Lessons,
+ QuestionChoices,
+ Questions,
+ QuestionTypes,
+ Sections
+ ) {
+
+ return {
+ Lessons: Lessons,
+ QuestionChoices: QuestionChoices,
+ Questions: Questions,
+ QuestionTypes: QuestionTypes,
+ Sections: Sections,
+ };
+
+} );
+
+/**
+ * Abstract LifterLMS Model
+ *
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+define( 'Models/Abstract',[ 'Models/_Relationships', 'Models/_Utilities' ], function( Relationships, Utilities ) {
+
+ return Backbone.Model.extend( _.defaults( {}, Relationships, Utilities ) );
+
+} );
+
+/**
+ * Course Model.
+ *
+ * @since 3.16.0
+ * @since 3.24.0 Added `get_total_points()` method.
+ * @since 3.37.11 Use lesson author ID instead of author object when adding existing lessons to a course.
+ * @version 5.4.0
+ */
+define( 'Models/Course',[ 'Collections/Sections', 'Models/_Relationships', 'Models/_Utilities' ], function( Sections, Relationships, Utilities ) {
+
+ return Backbone.Model.extend( _.defaults( {
+
+ relationships: {
+ children: {
+ sections: {
+ class: 'Sections',
+ model: 'section',
+ type: 'collection',
+ },
+ }
+ },
+
+ /**
+ * New Course Defaults.
+ *
+ * @since 3.16.0
+ *
+ * @return {Object}
+ */
+ defaults: function() {
+ return {
+ edit_url: '',
+ sections: [],
+ title: 'New Course',
+ type: 'course',
+ view_url: '',
+ }
+ },
+
+ /**
+ * Init.
+ *
+ * @since 3.16.0
+ *
+ * @return {Void}
+ */
+ initialize: function() {
+
+ this.startTracking();
+ this.init_relationships();
+
+ // Sidebar "New Section" button broadcast.
+ Backbone.pubSub.on( 'add-new-section', this.add_section, this );
+
+ // Sidebar "New Lesson" button broadcast.
+ Backbone.pubSub.on( 'add-new-lesson', this.add_lesson, this );
+
+ Backbone.pubSub.on( 'lesson-search-select', this.add_existing_lesson, this );
+
+ },
+
+ /**
+ * Add an existing lesson to the course.
+ *
+ * Duplicate a lesson from this or another course or attach an orphaned lesson.
+ *
+ * @since 3.16.0
+ * @since 3.24.0 Unknown.
+ * @since 3.37.11 Use the author id instead of the author object.
+ * @since 5.4.0 Added filter hook 'llms_adding_existing_lesson_data'.
+ * On cloning, duplicate assignments too, if assignment add-on active and assignment attached.
+ *
+ * @param {Object} lesson Lesson data obj.
+ * @return {Void}
+ */
+ add_existing_lesson: function( lesson ) {
+
+ var data = lesson.data;
+
+ if ( 'clone' === lesson.action ) {
+
+ delete data.id;
+
+ // If a quiz is attached, duplicate the quiz also.
+ if ( data.quiz ) {
+ data.quiz = _.prepareQuizObjectForCloning( data.quiz );
+ data.quiz._questions_loaded = true;
+ }
+
+ // If assignment add-on active and assignment attached, duplicate the assignment too.
+ if ( window.llms_builder.assignments && data.assignment ) {
+ data.assignment = _.prepareAssignmentObjectForCloning( data.assignment );
+ }
+
+ } else {
+
+ data._forceSync = true;
+
+ }
+
+ delete data.order;
+ delete data.parent_course;
+ delete data.parent_section;
+
+ // Use author id instead of the lesson author object.
+ data = _.prepareExistingPostObjectDataForAddingOrCloning( data );
+
+ /**
+ * Filters the data of the existing lesson being added.
+ *
+ * @since 5.4.0
+ *
+ * @param {Object} data Lesson data.
+ * @param {String} action Action being performed. [clone|attach].
+ * @param {Object} course The lesson's course parent model.
+ */
+ data = window.llms.hooks.applyFilters( 'llms_adding_existing_lesson_data', data, lesson.action, this );
+
+ this.add_lesson( data );
+
+ },
+
+ /**
+ * Add a new lesson to the course.
+ *
+ * @since 3.16.0
+ *
+ * @param {Object} data Lesson data.
+ * @return {Object} Backbone.Model of the lesson.
+ */
+ add_lesson: function( data ) {
+
+ data = data || {};
+ var options = {},
+ section;
+
+ if ( ! data.parent_section ) {
+ section = this.get_selected_section();
+ if ( ! section ) {
+ section = this.get( 'sections' ).last();
+ }
+ } else {
+ section = this.get( 'sections' ).get( data.parent_section );
+ }
+
+ data._selected = true;
+
+ data.parent_course = this.get( 'id' );
+
+ var lesson = section.add_lesson( data, options );
+ Backbone.pubSub.trigger( 'new-lesson-added', lesson );
+
+ // Expand the section.
+ section.set( '_expanded', true );
+
+ return lesson;
+
+ },
+
+ /**
+ * Add a new section to the course.
+ *
+ * @since 3.16.0
+ *
+ * @param {Object} data Section data.
+ * @return {Void}
+ */
+ add_section: function( data ) {
+
+ data = data || {};
+ var sections = this.get( 'sections' ),
+ options = {},
+ selected = this.get_selected_section();
+
+ // If a section is selected, add the new section after the currently selected one.
+ if ( selected ) {
+ options.at = sections.indexOf( selected ) + 1;
+ }
+
+ sections.add( data, options );
+
+ },
+
+ /**
+ * Retrieve the currently selected section in the course.
+ *
+ * @since 3.16.0
+ *
+ * @return {Object|undefined}
+ */
+ get_selected_section: function() {
+
+ return this.get( 'sections' ).find( function( model ) {
+ return model.get( '_selected' );
+ } );
+
+ },
+
+ /**
+ * Retrieve the total number of points in the course.
+ *
+ * @since 3.24.0
+ *
+ * @return {Integer}
+ */
+ get_total_points: function() {
+
+ var points = 0;
+
+ this.get( 'sections' ).each( function( section ) {
+ section.get( 'lessons' ).each( function( lesson ) {
+ var lesson_points = lesson.get( 'points' );
+ if ( ! _.isNumber( lesson_points ) ) {
+ lesson_points = 0;
+ }
+ points += lesson_points * 1;
+ } );
+ } );
+
+ return points;
+
+ },
+
+ }, Relationships, Utilities ) );
+
+} );
+
+/**
+ * Load all models
+ *
+ * @return obj
+ * @since 3.16.0
+ * @version 3.17.0
+ */
+define( 'Models/loader',[
+ 'Models/Abstract',
+ 'Models/Course',
+ 'Models/Image',
+ 'Models/Lesson',
+ 'Models/Question',
+ 'Models/QuestionChoice',
+ 'Models/QuestionType',
+ 'Models/Quiz',
+ 'Models/Section'
+ ],
+ function(
+ Abstract,
+ Course,
+ Image,
+ Lesson,
+ Question,
+ QuestionChoice,
+ QuestionType,
+ Quiz,
+ Section
+ ) {
+
+ return {
+ Abstract: Abstract,
+ Course: Course,
+ Image: Image,
+ Lesson: Lesson,
+ Question: Question,
+ QuestionChoice: QuestionChoice,
+ QuestionType: QuestionType,
+ Quiz: Quiz,
+ Section: Section,
+ };
+
+} );
+
+/**
+ * Detachable model
+ *
+ * @package LifterLMS/Scripts
+ *
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+
+define( 'Views/_Detachable',[], function() {
+
+ return {
+
+ /**
+ * DOM Events
+ *
+ * @type {Object}
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+ events: {
+ 'click a[href="#llms-detach-model"]': 'detach_model',
+ 'click button.llms-detach-model': 'detach_model',
+ },
+
+ /**
+ * Detaches a model from it's parent (doesn't delete)
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+ detach_model: function( event ) {
+
+ if ( event ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+
+ var msg = LLMS.l10n.replace( 'Are you sure you want to detach this %s?', {
+ '%s': this.model.get_l10n_type(),
+ } );
+
+ if ( window.confirm( msg ) ) {
+
+ if ( this.model.collection ) {
+ this.model.collection.remove( this.model );
+ }
+
+ // publish global event
+ Backbone.pubSub.trigger( 'model-detached', this.model );
+
+ // trigger local event so extending views can run other actions where necessary
+ this.trigger( 'model-trashed', this.model );
+
+ }
+
+ },
+
+ }
+
+} );
+
+/**
+ * Handles UX and Events for inline editing of views
+ *
+ * Use with a Model's View
+ * Allows editing model.title field via .llms-editable-title elements
+ *
+ * @package LifterLMS/Scripts
+ *
+ * @since 3.16.0
+ * @since 3.25.4 Unknown
+ * @since 3.37.11 Replace reference to `wp.editor` with `_.getEditor()` helper.
+ * @version 3.37.11
+ */
+define( 'Views/_Editable',[], function() {
+
+ return {
+
+ media_lib: null,
+
+ /**
+ * DOM Events
+ *
+ * @type {Object}
+ * @since 3.16.0
+ * @version 3.17.8
+ */
+ events: {
+ 'click .llms-add-image': 'open_media_lib',
+ 'click a[href="#llms-edit-slug"]': 'make_slug_editable',
+ 'click a[href="#llms-remove-image"]': 'remove_image',
+ 'change .llms-editable-select select': 'on_select',
+ 'change .llms-switch input[type="checkbox"]': 'toggle_switch',
+ 'change .llms-editable-radio input': 'on_radio_select',
+ 'focusin .llms-input': 'on_focus',
+ 'focusout .llms-input': 'on_blur',
+ 'keydown .llms-input': 'on_keydown',
+ 'input .llms-input[type="number"]': 'on_blur',
+ 'paste .llms-input[data-formatting]': 'on_paste',
+ },
+
+ /**
+ * Retrieve a list of allowed tags for a given element
+ *
+ * @param obj $el jQuery selector for the element
+ * @return array
+ * @since 3.16.0
+ * @version 3.17.8
+ */
+ get_allowed_tags: function( $el ) {
+
+ if ( $el.attr( 'data-formatting' ) ) {
+ return _.map( $el.attr( 'data-formatting' ).split( ',' ), function( tag ) {
+ return tag.trim();
+ } );
+ }
+
+ return [ 'b', 'i', 'u', 'strong', 'em' ];
+
+ },
+
+ /**
+ * Retrieve the content of an element
+ *
+ * @param obj $el jQuery object of the element
+ * @return string
+ * @since 3.16.0
+ * @version 3.17.8
+ */
+ get_content: function( $el ) {
+
+ if ( 'INPUT' === $el[0].tagName ) {
+ return $el.val();
+ }
+
+ if ( ! $el.attr( 'data-formatting' ) && ! $el.hasClass( 'ql-editor' ) ) {
+ return $el.text();
+ }
+
+ return _.stripFormatting( $el.html(), this.get_allowed_tags( $el ) );
+
+ },
+
+ /**
+ * Determine if changes have been made to the element
+ *
+ * @param {[obj]} event js event object
+ * @return {Boolean} true when changes have been made, false otherwise
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ has_changed: function( event ) {
+ var $el = $( event.target );
+ return ( $el.attr( 'data-original-content' ) !== this.get_content( $el ) );
+ },
+
+ /**
+ * Ensure that new content is at least 1 character long
+ *
+ * @param obj event js event object
+ * @return boolean
+ * @since 3.16.0
+ * @version 3.17.2
+ */
+ is_valid: function( event ) {
+
+ var self = this,
+ $el = $( event.target ),
+ content = this.get_content( $el ),
+ type = $el.attr( 'data-type' );
+
+ if ( ( $el.attr( 'required' ) || $el.attr( 'data-required' ) ) && content.length < 1 ) {
+ return false;
+ }
+
+ if ( 'url' === type || 'video' === type ) {
+ if ( ! this._validate_url( this.get_content( $el ) ) ) {
+ return false;
+ }
+
+ } else if ( 'permalink' === type ) {
+
+ LLMS.Ajax.call( {
+ data: {
+ action: 'llms_builder',
+ action_type: 'get_permalink',
+ course_id: window.llms_builder.CourseModel.get( 'id' ),
+ id: self.model.get( 'id' ),
+ title: self.model.get( 'title' ),
+ slug: content,
+ },
+ beforeSend: function() {
+ LLMS.Spinner.start( $el.closest( '.llms-editable-toggle-group' ), 'small' );
+ },
+ success: function( r ) {
+
+ if ( r.permalink && r.slug ) {
+ self.model.set( 'permalink', r.permalink );
+ self.model.set( 'name', r.slug );
+ self.render();
+ }
+
+ }
+ } );
+
+ }
+
+ return true;
+
+ },
+
+ /**
+ * Initialize datepicker elements
+ *
+ * @return void
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ init_datepickers: function() {
+
+ this.$el.find( '.llms-editable-date input' ).each( function() {
+
+ $( this ).datetimepicker( {
+ format: $( this ).attr( 'data-date-format' ) || 'Y-m-d h:i A',
+ datepicker: ( undefined === $( this ).attr( 'data-date-datepicker' ) ) ? true : ( 'true' == $( this ).attr( 'data-date-datepicker' ) ),
+ timepicker: ( undefined === $( this ).attr( 'data-date-timepicker' ) ) ? true : ( 'true' == $( this ).attr( 'data-date-timepicker' ) ),
+ onClose: function( current_time, $input ) {
+ $input.blur();
+ }
+ } );
+
+ } );
+
+ },
+
+ /**
+ * Initialize elements that allow inline formatting
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ init_formatting_els: function() {
+
+ var self = this;
+
+ this.$el.find( '.llms-input-formatting[data-formatting]' ).each( function() {
+
+ var formatting = $( this ).attr( 'data-formatting' ).split( ',' ),
+ attr = $( this ).attr( 'data-attribute' );
+
+ var ed = new Quill( this, {
+ modules: {
+ toolbar: [ formatting ],
+ keyboard: {
+ bindings: {
+ tab: {
+ key: 9,
+ handler: function( range, context ) {
+ return true;
+ },
+ },
+ 13: {
+ key: 13,
+ handler: function( range, context ) {
+ ed.root.blur();
+ return false;
+ },
+ },
+ },
+ },
+ },
+ placeholder: $( this ).attr( 'data-placeholder' ),
+ theme: 'bubble',
+ } );
+
+ ed.on( 'text-change', function( delta, oldDelta, source ) {
+ self.model.set( attr, self.get_content( $( ed.root ) ) );
+ } );
+
+ Backbone.pubSub.trigger( 'formatting-ed-init', ed, $( this ), self );
+
+ } );
+
+ },
+
+ /**
+ * Initialize editable select elements
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.25.4
+ */
+ init_selects: function() {
+
+ this.$el.find( '.llms-editable-select select' ).llmsSelect2( {
+ width: '100%',
+ } ).trigger( 'change' );
+
+ },
+
+ /**
+ * Blur/focusout function for .llms-editable-title elements
+ * Automatically saves changes if changes have been made
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.6
+ */
+ on_blur: function( event ) {
+
+ event.stopPropagation();
+
+ this.model.set( '_has_focus', false, { silent: true } );
+
+ var self = this,
+ $el = $( event.target ),
+ changed = this.has_changed( event );
+
+ if ( changed ) {
+
+ if ( ! self.is_valid( event ) ) {
+ self.revert_edits( event );
+ } else {
+ this.save_edits( event );
+ }
+
+ }
+
+ },
+
+ /**
+ * Focus event for editable inputs
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.6
+ * @version 3.16.6
+ */
+ on_focus: function( event ) {
+
+ event.stopPropagation();
+ this.model.set( '_has_focus', true, { silent: true } );
+
+ },
+
+ /**
+ * Handle content pasted into contenteditable fields
+ * This will ensure that HTML from RTF editors isn't pasted into the dom
+ *
+ * @param obj event js event obj
+ * @return void
+ * @since 3.17.8
+ * @version 3.17.8
+ */
+ on_paste: function( event ) {
+
+ event.preventDefault();
+ event.stopPropagation();
+
+ var text = ( event.originalEvent || event ).clipboardData.getData( 'text/plain' );
+ window.document.execCommand( 'insertText', false, text );
+
+ },
+
+ /**
+ * Change event for selectables
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ on_select: function( event ) {
+
+ var $el = $( event.target ),
+ multi = ( $el.attr( 'multiple' ) ),
+ attr = $el.attr( 'name' ),
+ $selected = $el.find( 'option:selected' ),
+ val;
+
+ if ( multi ) {
+ val = [];
+ val = $selected.map( function() {
+ return this.value;
+ } ).get();
+ } else {
+ val = $selected[0].value;
+ }
+
+ this.model.set( attr, val );
+
+ },
+
+ /**
+ * Change event for radio element groups
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.17.6
+ * @version 3.17.6
+ */
+ on_radio_select: function( event ) {
+
+ var $el = $( event.target ),
+ attr = $el.attr( 'name' ),
+ val = $el.val();
+
+ this.model.set( attr, val );
+
+ },
+
+ /**
+ * Keydown function for .llms-editable-title elements
+ * Blurs
+ *
+ * @param {obj} event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.17.8
+ */
+ on_keydown: function( event ) {
+
+ event.stopPropagation();
+
+ var self = this,
+ key = event.which || event.keyCode,
+ shift = event.shiftKey;
+ // ctrl = event.metaKey || event.ctrlKey;
+
+ switch ( key ) {
+
+ case 13: // enter
+ // shift + enter should add a return
+ if ( ! shift ) {
+ event.preventDefault();
+ event.target.blur();
+ }
+ break;
+
+ case 27: // escape
+ event.preventDefault();
+ this.revert_edits( event );
+ event.target.blur();
+ break;
+
+ }
+
+ },
+
+ /**
+ * Open the WP media lib
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.6
+ */
+ open_media_lib: function( event ) {
+
+ event.stopPropagation();
+
+ var self = this,
+ $el = $( event.currentTarget );
+
+ if ( self.media_lib ) {
+
+ self.media_lib.uploader.uploader.param( 'post_id' );
+
+ } else {
+
+ self.media_lib = wp.media.frames.file_frame = wp.media( {
+ title: LLMS.l10n.translate( 'Select an image' ),
+ button: {
+ text: LLMS.l10n.translate( 'Use this image' ),
+ },
+ multiple: false // Set to true to allow multiple files to be selected
+ } );
+
+ self.media_lib.on( 'select', function() {
+
+ var size = $el.attr( 'data-image-size' ),
+ attachment = self.media_lib.state().get( 'selection' ).first().toJSON(),
+ image = self.model.get( $el.attr( 'data-attribute' ) ),
+ url;
+
+ if ( size && attachment.sizes[ size ] ) {
+ url = attachment.sizes[ size ].url;
+ } else {
+ url = attachment.url;
+ }
+
+ image.set( {
+ id: attachment.id,
+ src: url,
+ } );
+
+ } );
+
+ }
+
+ // This flag is used to protect the media files uploaded via places like the Quiz questions (Picture type)
+ self.media_lib.uploader.options.uploader.params.llms = 1;
+
+ self.media_lib.open();
+
+ },
+
+ /**
+ * Click event to remove an image
+ *
+ * @param obj event js event obj
+ * @return voids
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ remove_image: function( event ) {
+
+ event.preventDefault();
+
+ this.model.get( $( event.currentTarget ).attr( 'data-attribute' ) ).set( {
+ id: '',
+ src: '',
+ } );
+
+ },
+
+ /**
+ * Helper to undo changes
+ * Bound to "escape" key via on_keydown function
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ revert_edits: function( event ) {
+ var $el = $( event.target ),
+ val = $el.attr( 'data-original-content' );
+ $el.html( val );
+ },
+
+ /**
+ * Sync changes to the model and DB
+ *
+ * @param {obj} event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ save_edits: function( event ) {
+
+ var $el = $( event.target ),
+ val = this.get_content( $el );
+
+ this.model.set( $el.attr( 'data-attribute' ), val );
+
+ },
+
+ /**
+ * Change event for a switch element
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.17.0
+ */
+ toggle_switch: function( event ) {
+
+ event.stopPropagation();
+ var $el = $( event.target ),
+ attr = $el.attr( 'name' ),
+ rerender = $el.attr( 'data-rerender' ),
+ val;
+
+ if ( $el.is( ':checked' ) ) {
+ val = $el.attr( 'data-on' ) ? $el.attr( 'data-on' ) : 'yes';
+ } else {
+ val = $el.attr( 'data-off' ) ? $el.attr( 'data-off' ) : 'no';
+ }
+
+ if ( -1 !== attr.indexOf( '.' ) ) {
+
+ var split = attr.split( '.' );
+
+ if ( 'parent' === split[0] ) {
+ this.model.get_parent().set( split[1], val );
+ } else {
+ this.model.get( split[0] ).set( split[1], val );
+ }
+
+ } else {
+
+ this.model.set( attr, val );
+
+ }
+
+ this.trigger( attr.replace( '.', '-' ) + '_toggle', val );
+
+ if ( ! rerender || 'yes' === rerender ) {
+ var self = this;
+ setTimeout( function() {
+ self.render();
+ }, 100 );
+ }
+
+ },
+
+ /**
+ * Initializes a WP Editor on a textarea
+ *
+ * @since 3.16.0
+ * @since 3.37.11 Replace reference to `wp.editor` with `_.getEditor()` helper.
+ *
+ * @param {String} id CSS ID of the editor (don't include #).
+ * @param {Object} settings Optional object of settings to pass to wp.oldEditor.initialize().
+ * @return {Void}
+ */
+ init_editor: function( id, settings ) {
+
+ settings = settings || {};
+
+ var editor = _.getEditor();
+
+ editor.remove( id );
+
+ editor.initialize( id, $.extend( true, editor.getDefaultSettings(), {
+ mediaButtons: true,
+ tinymce: {
+ toolbar1: 'bold,italic,strikethrough,bullist,numlist,blockquote,hr,alignleft,aligncenter,alignright,link,unlink,wp_adv',
+ toolbar2: 'formatselect,underline,alignjustify,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help',
+ setup: _.bind( this.on_editor_ready, this ),
+ }
+ }, settings ) );
+
+ },
+
+ /**
+ * Setup a permalink editor to allow editing of a permalink
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.6
+ * @version 3.16.6
+ */
+ make_slug_editable: function( event ) {
+
+ var self = this,
+ $btn = $( event.currentTarget ),
+ $link = $btn.prevAll( 'a' ),
+ $input = $btn.prev( 'input.permalink' ),
+ full_url = $link.attr( 'href' ),
+ slug = $input.val(),
+ short_url = full_url.replace( slug, '' );
+
+ // hide the button
+ $btn.hide();
+
+ // make the link not clickable
+ $link.css( {
+ color: '#999',
+ 'pointer-events': 'none',
+ 'text-decoration': 'none',
+ } );
+
+ // remove the current slug & trailing slash from the URL
+ $link.text( short_url.substring( 0, short_url.length - 1 ) );
+
+ // focus in on the field
+ $input.show().focus();
+
+ },
+
+ /**
+ * Callback function called after initialization of an editor
+ *
+ * Updates UI if a label is present.
+ *
+ * Binds a change event to ensure editor changes are saved to the model.
+ *
+ * @since 3.16.0
+ * @since 3.17.1 Uknown.
+ * @since 3.37.11 Replace references to `wp.editor` with `_.getEditor()` helper.
+ *
+ * @param {Object} editor TinyMCE Editor instance.
+ * @return {Void}
+ */
+ on_editor_ready: function( editor ) {
+
+ var self = this,
+ $ed = $( '#' + editor.id ),
+ $parent = $ed.closest( '.llms-editable-editor' ),
+ $label = $parent.find( '.llms-label' ),
+ prop = $ed.attr( 'data-attribute' )
+
+ if ( $label.length ) {
+ $label.prependTo( $parent.find( '.wp-editor-tools' ) );
+ }
+
+ // save changes to the model via Visual ed
+ editor.on( 'change', function( event ) {
+ self.model.set( prop, _.getEditor().getContent( editor.id ) );
+ } );
+
+ // save changes via Text ed
+ $ed.on( 'input', function( event ) {
+ self.model.set( prop, $ed.val() );
+ } );
+
+ // trigger an input on the Text ed when quicktags buttons are clicked
+ $parent.on( 'click', '.quicktags-toolbar .ed_button', function() {
+ setTimeout( function() {
+ $ed.trigger( 'input' );
+ }, 10 );
+ } );
+
+ },
+
+ _validate_url: function( str ) {
+
+ var a = document.createElement( 'a' );
+ a.href = str;
+ return ( a.host && a.host !== window.location.host );
+
+ }
+
+ };
+
+} );
+
+/**
+ * _receive override for Backbone.CollectionView core
+ * enables connection with jQuery UI draggable buttons
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Views/_Receivable',[], function() {
+
+ return {
+
+ /**
+ * Overloads the function from Backbone.CollectionView core because it doesn't properly handle
+ * receives from a jQuery UI draggable object
+ *
+ * @param obj event js event object
+ * @param obj ui jQuery UI object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ _receive : function( event, ui ) {
+
+ // came from sidebar drag
+ if ( ui.sender.hasClass( 'ui-draggable' ) ) {
+ var index = this._getContainerEl().children().index( ui.helper );
+ ui.helper.remove(); // remove the helper
+ this.collection.add( {}, { at: index } );
+ return;
+ }
+
+ var senderListEl = ui.sender;
+ var senderCollectionListView = senderListEl.data( 'view' );
+ if ( ! senderCollectionListView || ! senderCollectionListView.collection ) {
+ return;
+ }
+
+ var newIndex = this._getContainerEl().children().index( ui.item );
+ var modelReceived = senderCollectionListView.collection.get( ui.item.attr( 'data-model-cid' ) );
+ senderCollectionListView.collection.remove( modelReceived );
+ this.collection.add( modelReceived, { at : newIndex } );
+ modelReceived.collection = this.collection; // otherwise will not get properly set, since modelReceived.collection might already have a value.
+ this.setSelectedModel( modelReceived );
+ },
+
+ }
+
+} );
+
+/**
+ * Shiftable view mixin function
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Views/_Shiftable',[], function() {
+
+ return {
+
+ /**
+ * Conditionally hide action buttons based on section position in collection
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ maybe_hide_shiftable_buttons: function() {
+
+ if ( ! this.model.collection ) {
+ return;
+ }
+
+ var type = this.model.get( 'type' );
+
+ if ( this.model.collection.first() === this.model ) {
+ this.$el.find( '.shift-up--' + type ).hide();
+ } else if ( this.model.collection.last() === this.model ) {
+ this.$el.find( '.shift-down--' + type ).hide();
+ }
+
+ },
+
+ /**
+ * Move an item in a collection from one position to another
+ *
+ * @param int old_index current (old) index within the collection
+ * @param int new_index desired (new) index within the collection
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ shift: function( old_index, new_index ) {
+
+ var collection = this.model.collection;
+
+ collection.remove( this.model );
+ collection.add( this.model, { at: new_index } );
+ collection.trigger( 'reorder' );
+
+ },
+
+ /**
+ * Move an item down the tree one position
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ shift_down: function( e ) {
+
+ e.preventDefault();
+ var index = this.model.collection.indexOf( this.model );
+ this.shift( index, index + 1 );
+
+ },
+
+ /**
+ * Move an item up the tree one position
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ shift_up: function( e ) {
+
+ e.preventDefault();
+ var index = this.model.collection.indexOf( this.model );
+ this.shift( index, index - 1 );
+
+ },
+
+ };
+
+} );
+
+/**
+ * Subview utility mixin
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Views/_Subview',[], function() {
+
+ return {
+
+ subscriptions: {},
+
+ /**
+ * Name of the current subview
+ *
+ * @type {String}
+ */
+ state: '',
+
+ /**
+ * Object of subview data
+ *
+ * @type {Object}
+ */
+ views: {},
+
+ /**
+ * Retrieve a subview by name from this.views
+ *
+ * @param string name name of the subview
+ * @return obl|false
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ get_subview: function( name ) {
+
+ if ( this.views[ name ] ) {
+ return this.views[ name ];
+ }
+
+ return false;
+
+ },
+
+ events_subscribe: function( events ) {
+
+ _.each( events, function( func, event ) {
+
+ this.subscriptions[ event ] = func;
+ Backbone.pubSub.on( event, func, this );
+
+ }, this );
+
+ },
+
+ events_unsubscribe: function() {
+
+ _.each( this.subscriptions, function( func, event ) {
+
+ Backbone.pubSub.off( event, func, this );
+ delete this.subscriptions[ event ];
+
+ }, this );
+
+ },
+
+ /**
+ * Remove a single subview (and all it's subviews) by name
+ *
+ * @param string name name of the subview
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ remove_subview: function( name ) {
+
+ var view = this.get_subview( name );
+
+ if ( ! view ) {
+ return;
+ }
+
+ if ( view.instance ) {
+
+ // remove the subviews if the view has subviews
+ if ( ! _.isEmpty( view.instance.views ) ) {
+ view.instance.events_unsubscribe();
+ view.instance.remove_subviews();
+ }
+
+ view.instance.off();
+ view.instance.off( null, null, null );
+ view.instance.remove();
+ view.instance.undelegateEvents();
+
+ // _.each( view.instance, function( val, key ) {
+ // delete view.instance[ key ];
+ // } );
+
+ view.instance = null;
+
+ }
+
+ },
+
+ /**
+ * Remove all subviews (and all the subviews of those subviews)
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ remove_subviews: function() {
+
+ _.each( this.views, function( data, name ) {
+
+ this.remove_subview( name );
+
+ }, this );
+
+ },
+
+ /**
+ * Render subviews based on current state
+ *
+ * @param obj view_data additional data to pass to the subviews
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render_subviews: function( view_data ) {
+
+ view_data = view_data || {};
+
+ _.each( this.views, function( data, name ) {
+
+ if ( this.state === data.state ) {
+
+ this.render_subview( name, view_data );
+
+ } else {
+
+ this.remove_subview( name );
+
+ }
+
+ }, this );
+
+ },
+
+ /**
+ * Render a single subview by name
+ *
+ * @param string name name of the subview
+ * @param obj view_data additional data to pass to the subview initializer
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render_subview: function( name, view_data ) {
+
+ var view = this.get_subview( name );
+
+ if ( ! view ) {
+ return;
+ }
+
+ this.remove_subview( name );
+
+ if ( ! view.instance ) {
+ view.instance = new view.class( view_data );
+ }
+
+ view.instance.render();
+
+ },
+
+ /**
+ * Set the current subview
+ * Must call render after!
+ *
+ * @param string state name of the state [builder|editor]
+ * @return obj this for chaining
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ set_state: function ( state ) {
+
+ this.state = state;
+ return this;
+
+ },
+
+ }
+
+} );
+
+/**
+ * Trashable model
+ *
+ * @type {Object}
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+define( 'Views/_Trashable',[], function() {
+
+ return {
+
+ /**
+ * DOM Events
+ *
+ * @type {Object}
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+ events: {
+ 'click a[href="#llms-trash-model"]': 'trash_model',
+ 'click button.llms-trash-model': 'trash_model',
+ },
+
+ /**
+ * Remove a model from it's parent and delete it
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+ trash_model: function( event ) {
+
+ if ( event ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+
+ var msg = LLMS.l10n.replace( 'Are you sure you want to move this %s to the trash?', {
+ '%s': this.model.get_l10n_type(),
+ } );
+
+ if ( window.confirm( msg ) ) {
+
+ if ( this.model.collection ) {
+ this.model.collection.remove( this.model );
+ }
+
+ // publish event
+ Backbone.pubSub.trigger( 'model-trashed', this.model );
+
+ // trigger local event so extending views can run other actions where necessary
+ this.trigger( 'model-trashed', this.model );
+
+ }
+
+ },
+
+ }
+
+} );
+
+/**
+ * Load view mixins
+ *
+ * @package LifterLMS/Scripts
+ *
+ * @since 3.17.1
+ * @version 3.17.1
+ */
+
+define( 'Views/_loader',[
+ 'Views/_Detachable',
+ 'Views/_Editable',
+ 'Views/_Receivable',
+ 'Views/_Shiftable',
+ 'Views/_Subview',
+ 'Views/_Trashable'
+ ],
+ function(
+ Detachable,
+ Editable,
+ Receivable,
+ Shiftable,
+ Subview,
+ Trashable
+ ) {
+
+ return {
+ Detachable: Detachable,
+ Editable: Editable,
+ Receivable: Receivable,
+ Shiftable: Shiftable,
+ Subview: Subview,
+ Trashable: Trashable,
+ };
+
+} );
+
+/**
+ * Constructor functions for constructing models, views, and collections
+ *
+ * @since 3.16.0
+ * @version 3.17.1
+ */
+define( 'Controllers/Construct',[
+ 'Collections/loader',
+ 'Models/loader',
+ 'Views/_loader'
+ ], function(
+ Collections,
+ Models,
+ Views
+ ) {
+
+ return function() {
+
+ /**
+ * Internal getter
+ * Constructs new Collections, Models, and Views
+ *
+ * @param obj type type of object to construct [Collection,Model,View]
+ * @param string name name of the object to construct
+ * @param obj data object data to pass into the object's constructor
+ * @param obj options object options to pass into the constructor
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ function get( type, name, data, options ) {
+
+ if ( ! type[ name ] ) {
+ console.log( '"' + name + '" not found.' );
+ return false;
+ }
+
+ return new type[ name ]( data, options );
+
+ }
+
+ /**
+ * Instantiate a collection
+ *
+ * @param string name Collection class name (EG: "Sections")
+ * @param array data Array of model objects to pass to the constructor
+ * @param obj options Object of options to pass to the constructor
+ * @return obj
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ this.get_collection = function( name, data, options ) {
+
+ return get( Collections, name, data, options );
+
+ };
+
+ /**
+ * Instantiate a model
+ *
+ * @param string name Model class name (EG: "Section")
+ * @param obj data Object of model attributes to pass to the constructor
+ * @param obj options Object of options to pass to the constructor
+ * @return obj
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ this.get_model = function( name, data, options ) {
+
+ return get( Models, name, data, options );
+
+ };
+
+ /**
+ * Let 3rd parties extend a view using any of the mixin (_) views
+ *
+ * @param {obj} view base object used for the view
+ * @param... {string} extends any number of strings that should be mixed into the view
+ * @return obj
+ * @since 3.17.1
+ * @version 3.17.1
+ */
+ this.extend_view = function() {
+
+ var view = arguments[0],
+ i = 1;
+
+ while ( arguments[ i ] ) {
+
+ var classname = arguments[ i ];
+ if ( Views[ classname ] ) {
+
+ if ( view.events && Views[ classname ].events ) {
+ view.events = _.defaults( view.events, Views[ classname ].events );
+ }
+
+ view = _.defaults( view, Views[ classname ] );
+
+ }
+
+ i++;
+ }
+
+ return Backbone.View.extend( view );
+
+ };
+
+ /**
+ * Allows custom collection registration by extending the default BackBone collection
+ *
+ * @param string name model name
+ * @param obj props properties to extend the collection with
+ * @return void
+ * @since 3.17.1
+ * @version 3.17.1
+ */
+ this.register_collection = function( name, props ) {
+
+ Collections[ name ] = Backbone.Collection.extend( props );
+
+ };
+
+ /**
+ * Allows custom model registration by extending the default abstract model
+ *
+ * @param string name model name
+ * @param obj props properties to extend the abstract model with
+ * @return void
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ this.register_model = function( name, props ) {
+
+ Models[ name ] = Models['Abstract'].extend( props );
+
+ };
+
+ return this;
+
+ };
+
+} );
+
+/**
+ * LifterLMS Builder Debugging suite
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Controllers/Debug',[], function() {
+
+ return function( settings ) {
+
+ var self = this,
+ enabled = settings.enabled || false;
+
+ /**
+ * Disable debugging
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ this.disable = function() {
+
+ self.log( 'LifterLMS Builder debugging disabled' );
+ enabled = false;
+
+ };
+
+ /**
+ * Enable debugging
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ this.enable = function() {
+
+ enabled = true;
+ self.log( 'LifterLMS Builder debugging enabled' );
+
+ };
+
+ /**
+ * General logging function
+ * Logs to the js console only if logging is enabled
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ this.log = function() {
+
+ if ( ! enabled ) {
+ return;
+ }
+
+ _.each( arguments, function( data ) {
+ console.log( data );
+ } );
+
+ };
+
+ /**
+ * Toggles current state of the logger on or off
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ this.toggle = function() {
+
+ if ( enabled ) {
+ self.disable();
+ } else {
+ self.enable();
+ }
+
+ };
+
+ // on startup, log a message if logging is enabled
+ if ( enabled ) {
+ self.enable();
+ }
+
+ }
+
+} );
+
+/**
+ * Model schema functions
+ *
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+define( 'Controllers/Schemas',[], function() {
+
+ /**
+ * Main Schemas class
+ *
+ * @param obj schemas schemas definitions initialized via PHP filters
+ * @return obj
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ return function( schemas ) {
+
+ // initialize any custom schemas defined via PHP
+ var custom_schemas = schemas;
+ _.each( custom_schemas, function( type ) {
+ _.each( type, function( schema ) {
+ schema.custom = true;
+ } );
+ } );
+
+ /**
+ * Retrieve a schema for a given model by type
+ * Extends default schemas definitions with custom 3rd party definitions
+ *
+ * @param obj schema default schema definition from the model (or empty object if none defined)
+ * @param string model_type the model type ('lesson', 'quiz', etc)
+ * @param obj model Instance of the Backbone.Model for the given model
+ * @return obj
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ this.get = function( schema, model_type, model ) {
+
+ // extend the default schema with custom php schemas for the type if they exist
+ if ( custom_schemas[ model_type ] ) {
+ schema = _.extend( schema, custom_schemas[ model_type ] );
+ }
+
+ return schema;
+
+ };
+
+ return this;
+
+ };
+
+} );
+
+/**
+ * Sync builder data to the server
+ *
+ * @since 3.16.0
+ * @version 4.17.0
+ */
+define( 'Controllers/Sync',[], function() {
+
+ return function( Course, settings ) {
+
+ this.saving = false;
+
+ var self = this,
+ autosave = ( 'yes' === window.llms_builder.autosave ),
+ check_interval = null,
+ check_interval_ms = settings.check_interval_ms || ( ( 'yes' === window.llms_builder.autosave ) ? 10000 : 1000 ),
+ detached = new Backbone.Collection(),
+ trashed = new Backbone.Collection();
+
+ /**
+ * init
+ *
+ * @since 3.16.7
+ *
+ * @return {Void}
+ */
+ function init() {
+
+ // determine if autosaving is possible
+ if ( 'undefined' === typeof wp.heartbeat ) {
+
+ window.llms_builder.debug.log( 'WordPress Heartbeat disabled. Autosaving is disabled!' );
+ autosave = false;
+
+ }
+
+ // setup the check interval
+ if ( check_interval_ms ) {
+ self.set_check_interval( check_interval_ms );
+ }
+
+ // warn when users attempt to leave the page
+ $( window ).on( 'beforeunload', function() {
+
+ if ( self.has_unsaved_changes() ) {
+ check_for_changes();
+ return 'Are you sure you want to abandon your changes?';
+ }
+
+ } );
+
+ };
+
+ /*
+ /$$ /$$ /$$ /$$
+ |__/ | $$ | $$ |__/
+ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ | $$ /$$$$$$ /$$$$$$ /$$
+ | $$| $$__ $$|_ $$_/ /$$__ $$ /$$__ $$| $$__ $$ |____ $$| $$ |____ $$ /$$__ $$| $$
+ | $$| $$ \ $$ | $$ | $$$$$$$$| $$ \__/| $$ \ $$ /$$$$$$$| $$ /$$$$$$$| $$ \ $$| $$
+ | $$| $$ | $$ | $$ /$$| $$_____/| $$ | $$ | $$ /$$__ $$| $$ /$$__ $$| $$ | $$| $$
+ | $$| $$ | $$ | $$$$/| $$$$$$$| $$ | $$ | $$| $$$$$$$| $$ | $$$$$$$| $$$$$$$/| $$
+ |__/|__/ |__/ \___/ \_______/|__/ |__/ |__/ \_______/|__/ \_______/| $$____/ |__/
+ | $$
+ | $$
+ |__/
+ */
+
+ /**
+ * Adds error message(s) to the data object returned by heartbeat-tick
+ *
+ * @param obj data llms_builder data object from heartbeat-tick
+ * @param string|array err error messages array or string
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ function add_error_msg( data, err ) {
+
+ if ( 'success' === data.status ) {
+ data.message = [];
+ }
+
+ data.status = 'error';
+ if ( 'string' === typeof err ) {
+ err = [ err ];
+ }
+ data.message = data.message.concat( err );
+
+ return data;
+
+ };
+
+ /**
+ * Publish sync status so other areas of the application can see what's happening here
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ function check_for_changes() {
+
+ var data = {};
+ data.changes = self.get_unsaved_changes();
+ data.has_unsaved_changes = self.has_unsaved_changes( data.changes );
+ data.saving = self.saving;
+
+ window.llms_builder.debug.log( '==== start changes check ====', data, '==== finish changes check ====' );
+
+ Backbone.pubSub.trigger( 'current-save-status', data );
+
+ };
+
+ /**
+ * Manually Save data via Admin AJAX when the heartbeat API has been disabled
+ *
+ * @since 3.16.7
+ * @since 4.17.0 Fixed undefined variable error when logging an error response.
+ *
+ * @return void
+ */
+ function do_ajax_save() {
+
+ // prevent simultaneous saves
+ if ( self.saving ) {
+ return;
+ }
+
+ var changes = self.get_unsaved_changes();
+
+ // only send data if we have data to send
+ if ( self.has_unsaved_changes( changes ) ) {
+
+ changes.id = Course.get( 'id' );
+
+ LLMS.Ajax.call( {
+ data: {
+ action: 'llms_builder',
+ action_type: 'ajax_save',
+ course_id: changes.id,
+ llms_builder: JSON.stringify( changes ),
+ },
+ beforeSend: function() {
+
+ window.llms_builder.debug.log( '==== start do_ajax_save before ====', changes, '==== finish do_ajax_save before ====' );
+
+ self.saving = true;
+
+ Backbone.pubSub.trigger( 'heartbeat-send', self );
+
+ },
+ error: function( xhr, status, error ) {
+
+ window.llms_builder.debug.log( '==== start do_ajax_save error ====', xhr, '==== finish do_ajax_save error ====' );
+
+ self.saving = false;
+
+ Backbone.pubSub.trigger( 'heartbeat-tick', self, {
+ status: 'error',
+ message: xhr.responseText + ' (' + error + ' ' + status + ')',
+ } );
+
+ },
+ success: function( res ) {
+
+ if ( ! res.llms_builder ) {
+ return;
+ }
+
+ window.llms_builder.debug.log( '==== start do_ajax_save success ====', res, '==== finish do_ajax_save success ====' );
+
+ res.llms_builder = process_removals( res.llms_builder );
+ res.llms_builder = process_updates( res.llms_builder );
+
+ self.saving = false;
+
+ Backbone.pubSub.trigger( 'heartbeat-tick', self, res.llms_builder );
+
+ }
+
+ } );
+
+ }
+
+ };
+
+ /**
+ * Retrieve all the attributes changed on a model since the last sync
+ *
+ * For a new model (a model with a temp ID) or a model where _forceSync has been defined ALL atts will be returned
+ * For an existing model (without a temp ID) only retrieves changed attributes as tracked by Backbone.TrackIt
+ *
+ * This function excludes any attributes defined as child attributes via the models relationship settings
+ *
+ * @param obj model instance of a Backbone.Model
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.6
+ */
+ function get_changed_attributes( model ) {
+
+ var atts = {},
+ sync_type;
+
+ // don't save mid editing
+ if ( model.get( '_has_focus' ) ) {
+ return atts;
+ }
+
+ // model hasn't been persisted to the database to get a real ID yet
+ // send *all* of it's atts
+ if ( has_temp_id( model ) || true === model.get( '_forceSync' ) ) {
+
+ atts = _.clone( model.attributes );
+ sync_type = 'full';
+
+ // only send the changed atts
+ } else {
+
+ atts = model.unsavedAttributes();
+ sync_type = 'partial';
+
+ }
+
+ var exclude = ( model.get_relationships ) ? model.get_child_props() : [];
+ atts = _.omit( atts, function( val, key ) {
+
+ // exclude keys that start with an underscore which are used by the
+ // application but don't need to be stored in the database
+ if ( 0 === key.indexOf( '_' ) ) {
+ return true;
+ } else if ( -1 !== exclude.indexOf( key ) ) {
+ return true;
+ }
+ return false;
+
+ } );
+
+ if ( model.before_save ) {
+ atts = model.before_save( atts, sync_type );
+ }
+
+ return atts;
+
+ };
+
+ /**
+ * Get all the changes to an object (either a Model or a Collection of models)
+ * Returns only changes to models and the IDs of that model (should changes exist)
+ * Uses get_changed_attributes() to determine if all atts or only changed atts are needed
+ * Processes children intelligently to only return changed children rather than the entire collection of children
+ *
+ * @param obj object instance of a Backbone.Model or Backbone.Collection
+ * @return obj|array if object is a model, returns an object
+ * if object is a collection, returns an array of objects
+ * @since 3.16.0
+ * @version 3.16.11
+ */
+ function get_changes_to_object( object ) {
+
+ var changed_atts;
+
+ if ( object instanceof Backbone.Model ) {
+
+ changed_atts = get_changed_attributes( object );
+
+ if ( object.get_relationships ) {
+
+ _.each( object.get_child_props(), function( prop ) {
+
+ var children = get_changes_to_object( object.get( prop ) );
+ if ( ! _.isEmpty( children ) ) {
+ changed_atts[ prop ] = children;
+ }
+
+ } );
+
+ }
+
+ // if we have any data, add the id to the model
+ if ( ! _.isEmpty( changed_atts ) ) {
+ changed_atts.id = object.get( 'id' );
+ }
+
+ } else if ( object instanceof Backbone.Collection ) {
+
+ changed_atts = [];
+ object.each( function( model ) {
+ var model_changes = get_changes_to_object( model );
+ if ( ! _.isEmpty( model_changes ) ) {
+ changed_atts.push( model_changes );
+ }
+ } );
+
+ }
+
+ return changed_atts;
+
+ };
+
+ /**
+ * Determines if a model has a temporary ID or a real persisted ID
+ *
+ * @param obj model instance of a model
+ * @return boolean
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ function has_temp_id( model ) {
+
+ return ( ! _.isNumber( model.id ) && 0 === model.id.indexOf( 'temp_' ) );
+
+ };
+
+ /**
+ * Compares changes synced to the server against current model and restarts
+ * tracking on elements that haven't changed since the last sync
+ *
+ * @param obj model instance of a Backbone.Model
+ * @param obj data data set that was processed by the server
+ * @return void
+ * @since 3.16.11
+ * @version 3.19.4
+ */
+ function maybe_restart_tracking( model, data ) {
+
+ Backbone.pubSub.trigger( model.get( 'type' ) + '-maybe-restart-tracking', model, data );
+
+ var omit = [ 'id', 'orig_id' ];
+
+ if ( model.get_relationships ) {
+ omit.concat( model.get_child_props() );
+ }
+
+ _.each( _.omit( data, omit ), function( val, prop ) {
+
+ if ( _.isEqual( model.get( prop ), val ) ) {
+ delete model._unsavedChanges[ prop ];
+ model._originalAttrs[ prop ] = val;
+ }
+
+ } );
+
+ // if syncing was forced, allow tracking to move forward as normal moving forward
+ model.unset( '_forceSync' );
+
+ };
+
+ /**
+ * Processes response data from heartbeat-tick related to trashing & detaching models
+ * On success, removes from local removal collection
+ * On error, appends error messages to the data object returned to UI for on-screen feedback
+ *
+ * @param obj data data.llms_builder object from heartbeat-tick response
+ * @return obj
+ * @since 3.16.0
+ * @version 3.17.1
+ */
+ function process_removals( data ) {
+
+ // check removals for errors
+ var removals = {
+ detach: detached,
+ trash: trashed,
+ };
+
+ _.each( removals, function( coll, key ) {
+
+ if ( data[ key ] ) {
+
+ var errors = [];
+
+ _.each( data[ key ] , function( info ) {
+
+ // successfully detached, remove it from the detached collection
+ if ( ! info.error ) {
+
+ coll.remove( info.id );
+
+ } else {
+
+ errors.push( info.error );
+
+ }
+
+ } );
+
+ if ( errors.length ) {
+ _.extend( data, add_error_msg( data, errors ) );
+ }
+
+ }
+
+ } );
+
+ return data;
+ }
+
+ /**
+ * Processes response data from heartbeat-tick related to creating / updating a single object
+ * Handles both collections and models as a recursive function
+ *
+ * @param {[type]} data [description]
+ * @param {[type]} type [description]
+ * @param {[type]} parent [description]
+ * @param {[type]} main_data [description]
+ * @return {[type]}
+ * @since 3.16.0
+ * @version 3.16.11
+ */
+ function process_object_updates( data, type, parent, main_data ) {
+
+ if ( ! data[ type ] ) {
+ return data;
+ }
+
+ if ( parent.get( type ) instanceof Backbone.Model ) {
+
+ var info = data[ type ];
+
+ if ( info.error ) {
+
+ _.extend( main_data, add_error_msg( main_data, info.error ) );
+
+ } else {
+
+ var model = parent.get( type );
+
+ // update temp ids with the real id
+ if ( info.id != info.orig_id ) {
+ model.set( 'id', info.id );
+ delete model._unsavedChanges.id;
+ }
+ maybe_restart_tracking( model, info );
+
+ // check children
+ if ( model.get_relationships ) {
+
+ _.each( model.get_child_props(), function( child_key ) {
+ _.extend( data[ type ], process_object_updates( data[ type ], child_key, model, main_data ) );
+ } );
+
+ }
+
+ }
+
+ } else if ( parent.get( type ) instanceof Backbone.Collection ) {
+
+ _.each( data[ type ], function( info, index ) {
+
+ if ( info.error ) {
+
+ _.extend( main_data, add_error_msg( main_data, info.error ) );
+
+ } else {
+
+ var model = parent.get( type ).get( info.orig_id );
+
+ // update temp ids with the real id
+ if ( info.id != info.orig_id ) {
+ model.set( 'id', info.id );
+ delete model._unsavedChanges.id;
+ }
+ maybe_restart_tracking( model, info );
+
+ // check children
+ if ( model.get_relationships ) {
+
+ _.each( model.get_child_props(), function( child_key ) {
+ _.extend( data[ type ], process_object_updates( data[ type ][ index ], child_key, model, main_data ) );
+ } );
+
+ }
+
+ }
+
+ } );
+
+ }
+
+ return main_data;
+
+ };
+
+ /**
+ * Processes response data from heartbeat-tick related to updating & creating new models
+ * On success, removes from local removal collection
+ * On error, appends error messages to the data object returned to UI for on-screen feedback
+ *
+ * @param obj data data.llms_builder object from heartbeat-tick response
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ function process_updates( data ) {
+
+ // only mess with updates data
+ if ( ! data.updates ) {
+ return data;
+ }
+
+ if ( data.updates ) {
+ data = process_object_updates( data.updates, 'sections', Course, data );
+ }
+
+ return data;
+
+ };
+
+ /*
+ /$$ /$$ /$$ /$$
+ | $$ | $$|__/ |__/
+ /$$$$$$ /$$ /$$| $$$$$$$ | $$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$
+ /$$__ $$| $$ | $$| $$__ $$| $$| $$ /$$_____/ |____ $$ /$$__ $$| $$
+ | $$ \ $$| $$ | $$| $$ \ $$| $$| $$| $$ /$$$$$$$| $$ \ $$| $$
+ | $$ | $$| $$ | $$| $$ | $$| $$| $$| $$ /$$__ $$| $$ | $$| $$
+ | $$$$$$$/| $$$$$$/| $$$$$$$/| $$| $$| $$$$$$$ | $$$$$$$| $$$$$$$/| $$
+ | $$____/ \______/ |_______/ |__/|__/ \_______/ \_______/| $$____/ |__/
+ | $$ | $$
+ | $$ | $$
+ |__/ |__/
+ */
+
+ /**
+ * Retrieve all unsaved changes for the builder instance
+ *
+ * @return obj
+ * @since 3.16.0
+ * @version 3.17.1
+ */
+ this.get_unsaved_changes = function() {
+
+ return {
+ detach: detached.pluck( 'id' ),
+ trash: trashed.pluck( 'id' ),
+ updates: get_changes_to_object( Course ),
+
+ }
+ };
+
+ /**
+ * Check if the builder instance has unsaved changes
+ *
+ * @param obj changes optionally pass in an object from the return of this.get_unsaved_changes()
+ * save some resources by not running the check twice during heartbeats
+ * @return boolean
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ this.has_unsaved_changes = function( changes ) {
+
+ if ( 'undefined' === typeof changes ) {
+ changes = self.get_unsaved_changes();
+ }
+
+ // check all possible keys, once we find one with content we have some changes to persist
+ var found = _.find( changes, function( data ) {
+
+ return ( false === _.isEmpty( data ) );
+
+ } );
+
+ return found ? true : false;
+
+ };
+
+ /**
+ * Save changes right now.
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.7
+ */
+ this.save_now = function() {
+ if ( autosave ) {
+ wp.heartbeat.connectNow();
+ } else {
+ do_ajax_save();
+ }
+ };
+
+ /**
+ * Update the interval that checks for changes to the builder instance
+ *
+ * @param int ms time (in milliseconds) to run the check on
+ * pass 0 to disable the check
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ this.set_check_interval = function( ms ) {
+ check_interval_ms = ms;
+ if ( check_interval ) {
+ clearInterval( check_interval );
+ }
+ if ( check_interval_ms ) {
+ check_interval = setInterval( check_for_changes, check_interval_ms );
+ }
+ };
+
+ /*
+ /$$ /$$ /$$
+ | $$|__/ | $$
+ | $$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$
+ | $$| $$ /$$_____/|_ $$_/ /$$__ $$| $$__ $$ /$$__ $$ /$$__ $$ /$$_____/
+ | $$| $$| $$$$$$ | $$ | $$$$$$$$| $$ \ $$| $$$$$$$$| $$ \__/| $$$$$$
+ | $$| $$ \____ $$ | $$ /$$| $$_____/| $$ | $$| $$_____/| $$ \____ $$
+ | $$| $$ /$$$$$$$/ | $$$$/| $$$$$$$| $$ | $$| $$$$$$$| $$ /$$$$$$$/
+ |__/|__/|_______/ \___/ \_______/|__/ |__/ \_______/|__/ |_______/
+ */
+
+ /**
+ * Listen for detached models and send them to the server for persistence
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ Backbone.pubSub.on( 'model-detached', function( model ) {
+
+ // detached models with temp ids haven't been persisted so we don't care
+ if ( has_temp_id( model ) ) {
+ return;
+ }
+
+ detached.add( _.clone( model.attributes ) );
+
+ } );
+
+ /**
+ * Listen for trashed models and send them to the server for deletion
+ *
+ * @since 3.16.0
+ * @version 3.17.1
+ */
+ Backbone.pubSub.on( 'model-trashed', function( model ) {
+
+ // if the model has a temp ID we don't have to persist the deletion
+ if ( has_temp_id( model ) ) {
+ return;
+ }
+
+ var data = _.clone( model.attributes );
+
+ if ( model.get_trash_id ) {
+ data.id = model.get_trash_id();
+ }
+
+ trashed.add( data );
+
+ } );
+
+ /*
+ /$$ /$$ /$$ /$$
+ | $$ | $$ | $$ | $$
+ | $$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$
+ | $$__ $$ /$$__ $$ |____ $$ /$$__ $$|_ $$_/ | $$__ $$ /$$__ $$ |____ $$|_ $$_/
+ | $$ \ $$| $$$$$$$$ /$$$$$$$| $$ \__/ | $$ | $$ \ $$| $$$$$$$$ /$$$$$$$ | $$
+ | $$ | $$| $$_____/ /$$__ $$| $$ | $$ /$$| $$ | $$| $$_____/ /$$__ $$ | $$ /$$
+ | $$ | $$| $$$$$$$| $$$$$$$| $$ | $$$$/| $$$$$$$/| $$$$$$$| $$$$$$$ | $$$$/
+ |__/ |__/ \_______/ \_______/|__/ \___/ |_______/ \_______/ \_______/ \___/
+ */
+
+
+ /**
+ * Add data to the WP heartbeat to persist new models, changes, and deletions to the DB
+ *
+ * @since 3.16.0
+ * @since 3.16.7 Unknown
+ * @since 4.14.0 Return early when autosaving is disabled.
+ */
+ $( document ).on( 'heartbeat-send', function( event, data ) {
+
+ // Autosaving is disabled.
+ if ( ! autosave ) {
+ return;
+ }
+
+ // prevent simultaneous saves
+ if ( self.saving ) {
+ return;
+ }
+
+ var changes = self.get_unsaved_changes();
+
+ // only send data if we have data to send
+ if ( self.has_unsaved_changes( changes ) ) {
+
+ changes.id = Course.get( 'id' );
+ self.saving = true;
+ data.llms_builder = JSON.stringify( changes );
+
+ }
+
+ window.llms_builder.debug.log( '==== start heartbeat-send ====', data, '==== finish heartbeat-send ====' );
+
+ Backbone.pubSub.trigger( 'heartbeat-send', self );
+
+ } );
+
+ /**
+ * Confirm detachments & deletions and replace temp IDs with new persisted IDs
+ *
+ * @since 3.16.0
+ * @since 4.14.0 Return early when autosaving is disabled.
+ */
+ $( document ).on( 'heartbeat-tick', function( event, data ) {
+
+ // Autosaving is disabled.
+ if ( ! autosave ) {
+ return;
+ }
+
+ if ( ! data.llms_builder ) {
+ return;
+ }
+
+ window.llms_builder.debug.log( '==== start heartbeat-tick ====', data, '==== finish heartbeat-tick ====' );
+
+ data.llms_builder = process_removals( data.llms_builder );
+ data.llms_builder = process_updates( data.llms_builder );
+
+ self.saving = false;
+
+ Backbone.pubSub.trigger( 'heartbeat-tick', self, data.llms_builder );
+
+ } );
+
+ /**
+ * On heartbeat errors publish an error to the main builder application
+ *
+ * @since 3.16.0
+ * @since 4.14.0 Return early when autosaving is disabled.
+ */
+ $( document ).on( 'heartbeat-error', function( event, data ) {
+
+ // Autosaving is disabled.
+ if ( ! autosave ) {
+ return;
+ }
+
+ window.llms_builder.debug.log( '==== start heartbeat-error ====', data, '==== finish heartbeat-error ====' );
+
+ self.saving = false;
+
+ Backbone.pubSub.trigger( 'heartbeat-tick', self, {
+ status: 'error',
+ message: data.responseText + ' (' + data.status + ' ' + data.statusText + ')',
+ } );
+
+ } );
+
+ /*
+ /$$ /$$ /$$
+ |__/ |__/ | $$
+ /$$ /$$$$$$$ /$$ /$$$$$$
+ | $$| $$__ $$| $$|_ $$_/
+ | $$| $$ \ $$| $$ | $$
+ | $$| $$ | $$| $$ | $$ /$$
+ | $$| $$ | $$| $$ | $$$$/
+ |__/|__/ |__/|__/ \___/
+ */
+ init();
+
+ return this;
+
+ };
+
+} );
+
+/**
+ * Single Lesson View
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+define( 'Views/Lesson',[
+ 'Views/_Detachable',
+ 'Views/_Editable',
+ 'Views/_Shiftable',
+ 'Views/_Trashable'
+ ], function(
+ Detachable,
+ Editable,
+ Shiftable,
+ Trashable
+ ) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * Get default attributes for the html wrapper element
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ attributes: function() {
+ return {
+ 'data-id': this.model.id,
+ 'data-section-id': this.model.get( 'parent_section' ),
+ };
+ },
+
+ /**
+ * HTML class names
+ * @type {String}
+ */
+ className: 'llms-builder-item llms-lesson',
+
+ /**
+ * Events
+ * @type {Object}
+ * @since 3.16.0
+ * @version 3.16.12
+ */
+ events: _.defaults( {
+ 'click .edit-lesson': 'open_lesson_editor',
+ 'click .llms-headline': 'open_lesson_editor',
+ 'click .edit-quiz': 'open_quiz_editor',
+ 'click .edit-assignment': 'open_assignment_editor',
+ 'click .section-prev': 'section_prev',
+ 'click .section-next': 'section_next',
+ 'click .shift-up--lesson': 'shift_up',
+ 'click .shift-down--lesson': 'shift_down',
+ }, Detachable.events, Editable.events, Trashable.events ),
+
+ /**
+ * HTML element wrapper ID attribute
+ * @return string
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ id: function() {
+ return 'llms-lesson-' + this.model.id;
+ },
+
+ /**
+ * Wrapper Tag name
+ * @type {String}
+ */
+ tagName: 'li',
+
+ /**
+ * Get the underscore template
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-lesson-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ * @return void
+ * @since 3.14.1
+ * @version 3.14.1
+ */
+ initialize: function() {
+
+ this.render();
+
+ this.listenTo( this.model, 'change', this.render );
+
+ Backbone.pubSub.on( 'lesson-selected', this.on_select, this );
+ Backbone.pubSub.on( 'new-lesson-added', this.on_select, this );
+
+ },
+
+ /**
+ * Compiles the template and renders the view
+ * @return self (for chaining)
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render: function() {
+
+ this.$el.html( this.template( this.model ) );
+ this.maybe_hide_shiftable_buttons();
+ if ( this.model.get( '_selected' ) ) {
+ this.$el.addClass( 'selected' );
+ } else {
+ this.$el.removeClass( 'selected' );
+ }
+ return this;
+
+ },
+
+ /**
+ * Click event for the assignment editor action icon
+ * Opens sidebar to the assignment editor tab
+ * @param obj event JS Event obj.
+ * @return void
+ * @since 3.17.0
+ * @version 3.27.0
+ */
+ open_assignment_editor: function( event ) {
+
+ if ( event ) {
+ event.preventDefault();
+ }
+
+ Backbone.pubSub.trigger( 'lesson-selected', this.model, 'assignment' );
+ this.model.set( '_selected', true );
+ this.set_hash( 'assignment' );
+
+ },
+
+ /**
+ * Click event for lesson settings action icon
+ * Opens sidebar to the lesson editor tab
+ * @param obj event JS Event obj.
+ * @return void
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+ open_lesson_editor: function( event ) {
+
+ if ( event ) {
+ event.preventDefault();
+ }
+
+ Backbone.pubSub.trigger( 'lesson-selected', this.model, 'lesson' );
+ this.model.set( '_selected', true );
+ this.set_hash( false );
+
+ },
+
+ /**
+ * Click event for the quiz editor action icon
+ * Opens sidebar to the quiz editor tab
+ * @param obj event JS Event obj.
+ * @return void
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+ open_quiz_editor: function( event ) {
+
+ if ( event ) {
+ event.preventDefault();
+ }
+
+ Backbone.pubSub.trigger( 'lesson-selected', this.model, 'quiz' );
+ this.model.set( '_selected', true );
+ this.set_hash( 'quiz' );
+
+ },
+
+ /**
+ * When a lesson is selected mark it as selected in the hidden prop
+ * Allows views to re-render and reflect current state properly
+ * @param obj model lesson model that's been selected
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ on_select: function( model ) {
+
+ if ( this.model.id !== model.id ) {
+ this.model.set( '_selected', false );
+ }
+
+ },
+
+ /**
+ * Click event for the "Next Section" button
+ * @param obj event js event obj
+ * @return void
+ * @since 3.16.11
+ * @version 3.16.11
+ */
+ section_next: function( event ) {
+ event.preventDefault();
+ this._move_to_section( 'next' );
+ },
+
+ /**
+ * Click event for the "Previous Section" button
+ * @param obj event js event obj
+ * @return void
+ * @since 3.16.11
+ * @version 3.16.11
+ */
+ section_prev: function( event ) {
+ event.preventDefault();
+ this._move_to_section( 'prev' );
+ },
+
+ /**
+ * Adds a hash for deep linking to a specific lesson tab
+ * @param string subtab subtab [quiz|assignment]
+ * @return void
+ * @since 3.27.0
+ * @version 3.27.0
+ */
+ set_hash: function( subtab ) {
+
+ var hash = 'lesson:' + this.model.get( 'id' );
+
+ if ( subtab ) {
+ hash += ':' + subtab;
+ }
+
+ window.location.hash = hash;
+
+ },
+
+ /**
+ * Move the lesson into a new section
+ * @param string direction direction [prev|next]
+ * @return void
+ * @since 3.16.11
+ * @version 3.16.11
+ */
+ _move_to_section: function( direction ) {
+
+ var from_coll = this.model.collection,
+ to_section;
+
+ if ( 'next' === direction ) {
+ to_section = from_coll.parent.get_next();
+ } else if ( 'prev' === direction ) {
+ to_section = from_coll.parent.get_prev();
+ }
+
+ if ( to_section ) {
+
+ from_coll.remove( this.model );
+ to_section.add_lesson( this.model );
+ to_section.set( '_expanded', true );
+
+ }
+
+ },
+
+ }, Detachable, Editable, Shiftable, Trashable ) );
+
+} );
+
+/**
+ * Single Section View
+ *
+ * @since 3.13.0
+ * @version 3.16.0
+ */
+define( 'Views/LessonList',[ 'Views/Lesson', 'Views/_Receivable' ], function( LessonView, Receivable ) {
+
+ return Backbone.CollectionView.extend( _.defaults( {
+
+ className: 'llms-lessons',
+
+ /**
+ * Section model
+ *
+ * @type {[type]}
+ */
+ modelView: LessonView,
+
+ /**
+ * Are sections selectable?
+ *
+ * @type {Bool}
+ */
+ selectable: false,
+
+ /**
+ * Are sections sortable?
+ *
+ * @type {Bool}
+ */
+ sortable: true,
+
+ sortableOptions: {
+ axis: false,
+ connectWith: '.llms-lessons',
+ cursor: 'move',
+ handle: '.drag-lesson',
+ items: '.llms-lesson',
+ placeholder: 'llms-lesson llms-sortable-placeholder',
+ },
+
+ sortable_start: function( collection ) {
+ $( '.llms-lessons' ).addClass( 'dragging' );
+ },
+
+ sortable_stop: function( collection ) {
+ $( '.llms-lessons' ).removeClass( 'dragging' );
+ },
+
+ /**
+ * Overloads the function from Backbone.CollectionView core because it doesn't send stop events
+ * if moving from one sortable to another... :-(
+ *
+ * @param obj event js event object
+ * @param obj ui jQuery UI object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ _sortStop : function( event, ui ) {
+
+ var modelBeingSorted = this.collection.get( ui.item.attr( 'data-model-cid' ) ),
+ modelViewContainerEl = this._getContainerEl(),
+ newIndex = modelViewContainerEl.children().index( ui.item );
+
+ if ( newIndex == -1 && modelBeingSorted ) {
+ this.collection.remove( modelBeingSorted );
+ }
+
+ this._reorderCollectionBasedOnHTML();
+ this.updateDependentControls();
+
+ if ( this._isBackboneCourierAvailable() ) {
+ this.spawn( 'sortStop', { modelBeingSorted : modelBeingSorted, newIndex : newIndex } );
+ } else {
+ this.trigger( 'sortStop', modelBeingSorted, newIndex );
+ }
+
+ },
+
+ }, Receivable ) );
+
+} );
+
+/**
+ * Single Section View
+ * @since 3.13.0
+ * @version 3.16.12
+ */
+define( 'Views/Section',[
+ 'Views/LessonList',
+ 'Views/_Editable',
+ 'Views/_Shiftable',
+ 'Views/_Trashable'
+ ], function(
+ LessonListView,
+ Editable,
+ Shiftable,
+ Trashable
+ ) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * Get default attributes for the html wrapper element
+ * @return obj
+ * @since 3.13.0
+ * @version 3.13.0
+ */
+ attributes: function() {
+ return {
+ 'data-id': this.model.id,
+ };
+ },
+
+ /**
+ * Element class names
+ * @type {String}
+ */
+ className: 'llms-builder-item llms-section',
+
+ /**
+ * Events
+ * @type {Object}
+ * @since 3.16.0
+ * @version 3.16.12
+ */
+ events: _.defaults( {
+
+ 'click': 'select',
+ 'click .expand': 'expand',
+ 'click .collapse': 'collapse',
+ 'click .shift-up--section': 'shift_up',
+ 'click .shift-down--section': 'shift_down',
+ 'click .new-lesson': 'add_new_lesson',
+ 'click .llms-builder-header': 'toggle',
+ 'mouseenter .llms-lessons': 'on_mouseenter',
+
+ }, Editable.events, Trashable.events ),
+
+ /**
+ * HTML element wrapper ID attribute
+ * @return string
+ * @since 3.13.0
+ * @version 3.13.0
+ */
+ id: function() {
+ return 'llms-section-' + this.model.id;
+ },
+
+ /**
+ * Wrapper Tag name
+ * @type {String}
+ */
+ tagName: 'li',
+
+ /**
+ * Get the underscore template
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-section-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ * @return void
+ * @since 3.13.0
+ * @version 3.16.0
+ */
+ initialize: function() {
+
+ this.render();
+ this.listenTo( this.model, 'change', this.render );
+ this.listenTo( this.model, 'change:_expanded', this.toggle_expanded );
+ this.lessonListView.collection.on( 'add', this.on_lesson_add, this );
+
+ this.dragTimeout = null;
+
+ Backbone.pubSub.on( 'expand-all', this.expand, this );
+ Backbone.pubSub.on( 'collapse-all', this.collapse, this );
+
+ },
+
+ /**
+ * Render the section
+ * Initializes a new collection and views for all lessons in the section
+ * @return void
+ * @since 3.13.0
+ * @version 3.16.0
+ */
+ render: function() {
+
+ this.$el.html( this.template( this.model.toJSON() ) );
+
+ this.maybe_hide_shiftable_buttons();
+
+ this.lessonListView = new LessonListView( {
+ el: this.$el.find( '.llms-lessons' ),
+ collection: this.model.get( 'lessons' ),
+ } );
+ this.lessonListView.render();
+ this.lessonListView.on( 'sortStart', this.lessonListView.sortable_start );
+ this.lessonListView.on( 'sortStop', this.lessonListView.sortable_stop );
+
+ // selection changes
+ this.lessonListView.on( 'selectionChanged', this.active_lesson_change, this );
+
+ this.maybe_hide_trash_button();
+
+ return this;
+
+ },
+
+ add_new_lesson: function( event ) {
+
+ event.preventDefault();
+
+ Backbone.pubSub.trigger( 'section-select', this.model );
+ Backbone.pubSub.trigger( 'add-new-lesson' );
+
+ },
+
+ active_lesson_change: function( current, previous ) {
+
+ Backbone.pubSub.trigger( 'active-lesson-change', {
+ current: current,
+ previous: previous,
+ } );
+
+ },
+
+ toggle: function( event, update ) {
+
+ // We only want to expand/collapse when the actual header div is clicked, not an element inside it.
+ if ( 'llms-builder-header' !== event.target.className ) {
+ return;
+ }
+
+ if ( this.model.get( '_expanded' ) ) {
+ this.collapse( event, update );
+ } else {
+ this.expand( event, update );
+ }
+
+ },
+
+ /**
+ * Collapse lessons within the section
+ * @param obj event js event object
+ * @param bool update if true, updates the model to reflect the new state
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ collapse: function( event, update ) {
+
+ if ( 'undefined' === typeof update ) {
+ update = true;
+ }
+
+ if ( event ) {
+ event.stopPropagation();
+ event.preventDefault();
+ }
+
+ this.$el.removeClass( 'expanded' ).find( '.drag-expanded' ).removeClass( 'drag-expanded' );
+ if ( update ) {
+ this.model.set( '_expanded', false );
+ }
+ Backbone.pubSub.trigger( 'section-toggle', this.model );
+
+ },
+
+ /**
+ * Expand lessons within the section
+ * @param obj event js event object
+ * @param bool update if true, updates the model to reflect the new state
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ expand: function( event, update ) {
+
+ if ( 'undefined' === typeof update ) {
+ update = true;
+ }
+
+ if ( event ) {
+ event.stopPropagation();
+ event.preventDefault();
+ }
+
+ this.$el.addClass( 'expanded' );
+ if ( update ) {
+ this.model.set( '_expanded', true );
+ }
+ Backbone.pubSub.trigger( 'section-toggle', this.model );
+
+ },
+
+ maybe_hide_trash_button: function() {
+
+ var $btn = this.$el.find( '.trash--section' );
+
+ if ( this.model.get( 'lessons' ).isEmpty() ) {
+
+ $btn.show();
+
+ } else {
+
+ $btn.hide()
+
+ }
+
+ },
+
+ /**
+ * When a lesson is added to the section trigger a collection reorder & update the lesson's id
+ * @param obj model Lesson model
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ on_lesson_add: function( model ) {
+
+ this.lessonListView.collection.trigger( 'reorder' );
+ model.set( 'parent_section', this.model.get( 'id' ) );
+ this.expand();
+
+ },
+
+ on_mouseenter: function( event ) {
+
+
+ if ( $( event.target ).hasClass( 'dragging' ) ) {
+
+ $( '.drag-expanded' ).removeClass( 'drag-expanded' );
+ $( event.target ).addClass( 'drag-expanded' );
+
+ }
+
+ },
+
+ /**
+ * Expand
+ * @param {[type]} model [description]
+ * @param {[type]} value [description]
+ * @return {[type]}
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ toggle_expanded: function( model, value ) {
+
+ if ( value ) {
+ this.expand( null, false );
+ } else {
+ this.collapse( null, false );
+ }
+
+ },
+
+ }, Editable, Shiftable, Trashable ) );
+
+} );
+
+/**
+ * Single Section View
+ *
+ * @since 3.13.0
+ * @version 3.16.0
+ */
+define( 'Views/SectionList',[ 'Views/Section', 'Views/_Receivable' ], function( SectionView, Receivable ) {
+
+ return Backbone.CollectionView.extend( _.defaults( {
+
+ /**
+ * Parent element
+ *
+ * @type {String}
+ */
+ el: '#llms-sections',
+
+ events : {
+ 'mousedown > li.llms-section > .llms-builder-header .llms-headline' : '_listItem_onMousedown',
+ // 'dblclick > li, tbody > tr > td' : '_listItem_onDoubleClick',
+ 'click' : '_listBackground_onClick',
+ 'click ul.collection-view' : '_listBackground_onClick',
+ 'keydown' : '_onKeydown'
+ },
+
+ /**
+ * Section model
+ *
+ * @type {[type]}
+ */
+ modelView: SectionView,
+
+ /**
+ * Enable keyboard events
+ *
+ * @type {Bool}
+ */
+ processKeyEvents: false,
+
+ /**
+ * Are sections selectable?
+ *
+ * @type {Bool}
+ */
+ selectable: true,
+
+ /**
+ * Are sections sortable?
+ *
+ * @type {Bool}
+ */
+ sortable: true,
+
+ sortableOptions: {
+ axis: false,
+ cursor: 'move',
+ handle: '.drag-section',
+ items: '.llms-section',
+ placeholder: 'llms-section llms-sortable-placeholder',
+ },
+
+ sortable_start: function( collection ) {
+ this.$el.addClass( 'dragging' );
+ },
+
+ sortable_stop: function( collection ) {
+ this.$el.removeClass( 'dragging' );
+ },
+
+ }, Receivable ) );
+
+} );
+
+/**
+ * Single Course View
+ *
+ * @since 3.13.0
+ * @version 3.16.0
+ */
+define( 'Views/Course',[
+ 'Views/SectionList',
+ 'Views/_Detachable',
+ 'Views/_Editable',
+ 'Views/_Shiftable',
+ 'Views/_Trashable'
+], function(
+ SectionListView,
+ Detachable,
+ Editable,
+ Shiftable,
+ Trashable
+) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * Get default attributes for the html wrapper element
+ *
+ * @return obj
+ * @since 3.13.0
+ * @version 3.13.0
+ */
+ attributes: function() {
+ return {
+ 'data-id': this.model.id,
+ };
+ },
+
+ /**
+ * HTML element selector
+ *
+ * @type {String}
+ */
+ el: '#llms-builder-main',
+
+ /**
+ * Wrapper Tag name
+ *
+ * @type {String}
+ */
+ tagName: 'div',
+
+ /**
+ * Get the underscore template
+ *
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-course-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ *
+ * @return void
+ * @since 3.13.0
+ * @version 3.13.0
+ */
+ initialize: function() {
+
+ var self = this;
+
+ // this.listenTo( this.model, 'sync', this.render );
+ this.render();
+
+ this.sectionListView = new SectionListView( {
+ collection: this.model.get( 'sections' ),
+ } );
+ this.sectionListView.render();
+ // drag and drop start
+ this.sectionListView.on( 'sortStart', this.sectionListView.sortable_start );
+ // drag and drop stop
+ this.sectionListView.on( 'sortStop', this.sectionListView.sortable_stop );
+ // selection changes
+ this.sectionListView.on( 'selectionChanged', this.active_section_change );
+ // "select" a section when it's added to the course
+ this.listenTo( this.model.get( 'sections' ), 'add', this.on_section_add );
+
+ Backbone.pubSub.on( 'section-toggle', this.on_section_toggle, this );
+
+ Backbone.pubSub.on( 'section-select', this.on_section_select, this );
+
+ Backbone.pubSub.on( 'expand-section', this.expand_section, this );
+
+ Backbone.pubSub.on( 'lesson-selected', this.active_lesson_change, this );
+
+ },
+
+ /**
+ * Events
+ * @type {Object}
+ * @version 7.6.0
+ */
+ events: _.defaults( {
+ 'click .new-section': 'add_new_section',
+ }, Detachable.events, Editable.events, Trashable.events ),
+
+ /**
+ * Compiles the template and renders the view
+ *
+ * @return self (for chaining)
+ * @since 3.13.0
+ * @version 3.13.0
+ */
+ render: function() {
+ this.$el.html( this.template( this.model ) );
+ return this;
+ },
+
+ active_lesson_change: function( model ) {
+
+ // set parent section to be active
+ var section = this.model.get( 'sections' ).get( model.get( 'parent_section' ) );
+ this.sectionListView.setSelectedModel( section );
+
+ },
+
+ /**
+ * When a section "selection" changes in the list
+ * Update each section model so we can figure out which one is selected from other views
+ *
+ * @param array current array of selected models
+ * @param array previous array of previously selected models
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ active_section_change: function( current, previous ) {
+
+ _.each( current, function( model ) {
+ model.set( '_selected', true );
+ } );
+
+ _.each( previous, function( model ) {
+ model.set( '_selected', false );
+ } );
+
+ },
+
+ /**
+ * "Selects" the new section when it's added to the course
+ *
+ * @param obj model Section model that's just been added
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ on_section_add: function( model ) {
+
+ this.sectionListView.setSelectedModel( model );
+
+ },
+
+ /**
+ * When expanding/collapsing sections
+ * if collapsing, unselect, if expanding, select
+ *
+ * @param obj model toggled section
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ on_section_toggle: function( model ) {
+
+ var selected = model.get( '_expanded' ) ? [ model ] : [];
+ this.sectionListView.setSelectedModels( selected );
+
+ },
+
+
+ /**
+ * When doing things like adding a lesson, seelct the section.
+ *
+ * @param obj model toggled section
+ * @return void
+ * @since 7.6.0
+ * @version 7.6.0
+ */
+ on_section_select: function( model ) {
+
+ this.sectionListView.setSelectedModel( model );
+
+ },
+
+ add_new_section: function( event ) {
+
+ event.preventDefault();
+ Backbone.pubSub.trigger( 'add-new-section' );
+ },
+
+
+ }, Editable ) );
+
+} );
+
+/**
+ * Model settings fields view
+ *
+ * @since 3.17.0
+ * @version 4.7.0
+ */
+define( 'Views/SettingsFields',[], function() {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * DOM events
+ *
+ * @type {Object}
+ */
+ events: {
+ 'click .llms-settings-group-toggle': 'toggle_group',
+ },
+
+ /**
+ * Processed fields data
+ * Allows access by ID without traversing the schema
+ *
+ * @type {Object}
+ */
+ fields: {},
+
+ /**
+ * Wrapper Tag name
+ *
+ * @type {String}
+ */
+ tagName: 'div',
+
+ /**
+ * Get the underscore template
+ *
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-settings-fields-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ *
+ * @return void
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ // initialize: function() {},
+
+ /**
+ * Retrieve an array of all editor fields in all groups
+ *
+ * @return array
+ * @since 3.17.1
+ * @version 3.17.1
+ */
+ get_editor_fields: function() {
+ return _.filter( this.fields, function( field ) {
+ return this.is_editor_field( field.type );
+ }, this );
+ },
+
+ /**
+ * Get settings group data from a model
+ *
+ * @return {[type]}
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ get_groups: function() {
+
+ return this.model.get_settings_fields();
+
+ },
+
+ /**
+ * Determine if a settings group is hidden in localStorage
+ *
+ * @param string group_id id of the group
+ * @return {Boolean}
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ is_group_hidden: function( group_id ) {
+
+ var id = 'llms-' + this.model.get( 'type' ) + '-settings-group--' + group_id;
+
+ if ( 'undefined' !== window.localStorage ) {
+ return ( 'hidden' === window.localStorage.getItem( id ) );
+ }
+
+ return false;
+
+ },
+
+ /**
+ * Get the switch attribute for a field with switches
+ *
+ * @param obj field field data obj
+ * @return string
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ get_switch_attribute: function( field ) {
+
+ return field.switch_attribute ? field.switch_attribute : field.attribute;
+
+ },
+
+ /**
+ * Determine if a field has a switch
+ *
+ * @param string type field type string
+ * @return {Boolean}
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ has_switch: function( type ) {
+ return ( -1 !== type.indexOf( 'switch' ) );
+ },
+
+ /**
+ * Determine if a field is a default (text) field
+ *
+ * @param string type field type string
+ * @return {Boolean}
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ is_default_field: function( type ) {
+
+ var types = [ 'audio_embed', 'datepicker', 'number', 'text', 'video_embed' ];
+ return ( -1 !== types.indexOf( type.replace( 'switch-', '' ) ) );
+
+ },
+
+ /**
+ * Determine if a field is a WYSIWYG editor field
+ *
+ * @param string type field type string
+ * @return {Boolean}
+ * @since 3.17.1
+ * @version 3.17.1
+ */
+ is_editor_field: function( type ) {
+
+ var types = [ 'editor', 'switch-editor' ];
+ return ( -1 !== types.indexOf( type.replace( 'switch-', '' ) ) );
+
+ },
+
+ /**
+ * Determine if a switch is enabled for a field
+ *
+ * @param obj field field data object
+ * @return {Boolean}
+ * @since 3.17.0
+ * @version 3.17.6
+ */
+ is_switch_condition_met: function( field ) {
+
+ return ( field.switch_on === this.model.get( field.switch_attribute ) );
+
+ },
+
+ /**
+ * Compiles the template and renders the view
+ *
+ * @return self (for chaining)
+ * @since 3.17.0
+ * @version 3.17.1
+ */
+ render: function() {
+
+ this.$el.html( this.template( this ) );
+
+ // if editors exist, render them
+ _.each( this.get_editor_fields(), function( field ) {
+ this.render_editor( field );
+ }, this );
+
+ return this;
+
+ },
+
+ /**
+ * Renders an editor field
+ *
+ * @since 3.17.1
+ * @since 3.37.11 Replace references to `wp.editor` with `_.getEditor()` helper.
+ *
+ * @param {Object} field Field data object.
+ * @return {Void}
+ */
+ render_editor: function( field ) {
+
+ var self = this,
+ wpEditor = _.getEditor();
+
+ // Exit early if there's no editor to work with.
+ if ( undefined === wpEditor ) {
+ console.error( 'Unable to access `wp.oldEditor` or `wp.editor`.' );
+ return;
+ }
+
+ wpEditor.remove( field.id );
+ field.settings.tinymce.setup = function( editor ) {
+
+ var $ed = $( '#' + editor.id ),
+ $parent = $ed.closest( '.llms-editable-editor' ),
+ $label = $parent.find( '.llms-label' ),
+ prop = $ed.attr( 'data-attribute' )
+
+ if ( $label.length ) {
+ $label.prependTo( $parent.find( '.wp-editor-tools' ) );
+ }
+
+ // save changes to the model via Visual ed
+ editor.on( 'change', function( event ) {
+ self.model.set( prop, wpEditor.getContent( editor.id ) );
+ } );
+
+ // save changes via Text ed
+ $ed.on( 'input', function( event ) {
+ self.model.set( prop, $ed.val() );
+ } );
+
+ // trigger an input on the Text ed when quicktags buttons are clicked
+ $parent.on( 'click', '.quicktags-toolbar .ed_button', function() {
+ setTimeout( function() {
+ $ed.trigger( 'input' );
+ }, 10 );
+ } );
+ };
+
+ wpEditor.initialize( field.id, field.settings );
+
+ },
+
+ /**
+ * Get the HTML for a select field
+ *
+ * @param obj options flat or multi-dimensional options object
+ * @param string attribute name of the select field's attribute
+ * @return string
+ * @since 3.17.0
+ * @version 3.17.2
+ */
+ render_select_options: function( options, attribute ) {
+
+ var html = '',
+ selected = this.model.get( attribute );
+
+ function option_html( label, val ) {
+
+ return '' + label.substring( 0, 100 ) + ( label.length > 100 ? '...' : '' ) + ' ';
+
+ }
+
+ _.each( options, function( option, index ) {
+
+ // this will be an key:val object
+ if ( 'string' === typeof option ) {
+ html += option_html( option, index );
+ // either option group or array of key,val objects
+ } else if ( 'object' === typeof option ) {
+ // option group
+ if ( option.label && option.options ) {
+ html += '';
+ html += this.render_select_options( option.options, attribute );
+ } else {
+ html += option_html( option.val, option.key );
+ }
+ }
+
+ }, this );
+
+ return html;
+
+ },
+
+ /**
+ * Setup and fill fields with default data based on field type
+ *
+ * @since 3.17.0
+ * @since 3.24.0 Unknown.
+ * @since 3.37.11 Replace reference to `wp.editor` with `_.getEditor()` helper.
+ * @since 4.7.0 Ensure `switch-number` fields are set with the `number` type attribute.
+ *
+ * @param {Object} orig_field Original field as defined in the settings.
+ * @param {Integer} field_index Index of the field in the current row.
+ * @return {Object}
+ */
+ setup_field: function( orig_field, field_index ) {
+
+ var defaults = {
+ classes: [],
+ id: _.uniqueId( orig_field.attribute + '_' ),
+ input_type: 'text',
+ label: '',
+ options: {},
+ placeholder: '',
+ tip: '',
+ tip_position: 'top-right',
+ settings: {},
+ };
+
+ // check the field condition if set
+ if ( orig_field.condition && false === _.bind( orig_field.condition, this.model )() ) {
+ return false;
+ }
+
+ switch ( orig_field.type ) {
+
+ case 'audio_embed':
+ defaults.classes.push( 'llms-editable-audio' );
+ defaults.placeholder = 'https://';
+ defaults.tip = LLMS.l10n.translate( 'Use SoundCloud or Spotify audio URLS.' );
+ defaults.input_type = 'url';
+ break;
+
+ case 'datepicker':
+ defaults.classes.push( 'llms-editable-date' );
+ break;
+
+ case 'editor':
+ case 'switch-editor':
+ var orig_settings = orig_field.settings || {};
+ defaults.settings = $.extend( true, _.getEditor().getDefaultSettings(), {
+ mediaButtons: true,
+ tinymce: {
+ toolbar1: 'bold,italic,strikethrough,bullist,numlist,blockquote,hr,alignleft,aligncenter,alignright,link,unlink,wp_adv',
+ toolbar2: 'formatselect,underline,alignjustify,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help',
+ }
+ }, orig_settings );
+ break;
+
+ case 'number':
+ case 'switch-number':
+ defaults.input_type = 'number';
+ break;
+
+ case 'permalink':
+ defaults.label = LLMS.l10n.translate( 'Permalink' );
+ break;
+
+ case 'video_embed':
+ defaults.classes.push( 'llms-editable-video' );
+ defaults.placeholder = 'https://';
+ defaults.tip = LLMS.l10n.translate( 'Use YouTube, Vimeo, or Wistia video URLS.' );
+ defaults.input_type = 'url';
+ break;
+
+ }
+
+ if ( this.has_switch( orig_field.type ) ) {
+ defaults.switch_on = 'yes';
+ defaults.switch_off = 'no';
+ }
+
+ var field = _.defaults( _.deepClone( orig_field ), defaults );
+
+ // if options is a function run it
+ if ( _.isFunction( field.options ) ) {
+ field.options = _.bind( field.options, this.model )();
+ }
+
+ // if it's a radio field options values can be submitted as images
+ // this will transform those images into html
+ if ( -1 !== [ 'radio', 'switch-radio' ].indexOf( orig_field.type ) ) {
+
+ var has_images = false;
+ _.each( orig_field.options, function( val, key ) {
+ if ( -1 !== val.indexOf( '.png' ) || -1 !== val.indexOf( '.jpg' ) ) {
+ field.options[key] = ' ';
+ has_images = true;
+ }
+ } );
+ if ( has_images ) {
+ field.classes.push( 'has-images' );
+ }
+
+ }
+
+ // transform classes array to a css class string
+ if ( field.classes.length ) {
+ field.classes = ' ' + field.classes.join( ' ' );
+ }
+
+ this.fields[ field.id ] = field;
+
+ return field;
+
+ },
+
+ /**
+ * Determine if toggling a switch select should rerender the view
+ *
+ * @param string field_type field type string
+ * @return boolean
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ should_rerender_on_toggle: function( field_type ) {
+
+ return ( -1 !== field_type.indexOf( 'switch-' ) ) ? 'yes' : 'no';
+
+ },
+
+ /**
+ * Click event for toggling visibility of settings groups
+ * If localStorage is available, persist state
+ *
+ * @param obj event js event object
+ * @return void
+ * @since 3.17.0
+ * @version 3.17.0
+ */
+ toggle_group: function( event ) {
+
+ event.preventDefault();
+
+ var $el = $( event.currentTarget ),
+ $group = $el.closest( '.llms-model-settings' );
+
+ $group.toggleClass( 'hidden' );
+
+ if ( 'undefined' !== window.localStorage ) {
+
+ var id = $group.attr( 'id' );
+ if ( $group.hasClass( 'hidden' ) ) {
+ window.localStorage.setItem( id, 'hidden' );
+ } else {
+ window.localStorage.removeItem( id );
+ }
+
+ }
+
+ },
+
+ } ) );
+
+} );
+
+/**
+ * Lesson Editor (Sidebar) View
+ *
+ * @package LifterLMS/Scripts/Builder
+ *
+ * @since 3.17.0
+ * @since 3.35.2 Added filter `llms_lesson_rerender_change_events` to view re-render change events.
+ * @version 3.35.2
+ */
+define( 'Views/LessonEditor',[
+ 'Views/_Detachable',
+ 'Views/_Editable',
+ 'Views/_Trashable',
+ 'Views/_Subview',
+ 'Views/SettingsFields'
+ ], function(
+ Detachable,
+ Editable,
+ Trashable,
+ Subview,
+ SettingsFields
+ ) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * Current view state
+ *
+ * @type {String}
+ */
+ state: 'default',
+
+ /**
+ * Current Subviews
+ *
+ * @type {Object}
+ */
+ views: {
+ settings: {
+ class: SettingsFields,
+ instance: null,
+ state: 'default',
+ },
+ },
+
+ el: '#llms-editor-lesson',
+
+ /**
+ * Events
+ *
+ * @type {Object}
+ */
+ events: _.defaults( {}, Detachable.events, Editable.events, Trashable.events ),
+
+ /**
+ * Template function
+ *
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-lesson-settings-template' ),
+
+ /**
+ * Init
+ *
+ * @since 3.17.0
+ * @since 3.24.0 Unknown
+ * @since 3.35.2 Added filter to change events.
+ *
+ * @param {obj} data Parent template data.
+ * @return {void}
+ */
+ initialize: function( data ) {
+
+ this.model = data.lesson;
+
+ var change_events = window.llms.hooks.applyFilters( 'llms_lesson_rerender_change_events', [
+ 'change:date_available',
+ 'change:drip_method',
+ 'change:time_available',
+ ] );
+ _.each( change_events, function( event ) {
+ this.listenTo( this.model, event, this.render );
+ }, this );
+
+ // render only the tooltip for points percentage when points change
+ this.listenTo( this.model, 'change:points', this.render_points_percentage );
+
+ // when the "has_prerequisite" attr is toggled ON
+ // trigger the prereq select object to set the default (first available) prereq for the lesson
+ this.listenTo( this.model, 'change:has_prerequisite', function( lesson, val ) {
+ if ( 'yes' === val ) {
+ this.$el.find( 'select[name="prerequisite"]' ).trigger( 'change' );
+ }
+ } );
+
+ },
+
+ /**
+ * Render the view
+ *
+ * @return obj
+ * @since 3.17.0
+ * @version 3.24.0
+ */
+ render: function() {
+
+ this.$el.html( this.template( this.model ) );
+
+ this.remove_subview( 'settings' );
+
+ this.render_subview( 'settings', {
+ el: '#llms-lesson-settings-fields',
+ model: this.model,
+ } );
+
+ this.init_datepickers();
+ this.init_selects();
+
+ this.render_points_percentage();
+
+ return this;
+
+ },
+
+ /**
+ * Render the portion of the template which displays the points percentage
+ *
+ * @return void
+ * @since 3.24.0
+ * @version 3.24.0
+ */
+ render_points_percentage: function() {
+ this.$el.find( '#llms-model-settings-field--points .llms-editable-input' )
+ .addClass( 'tip--top-left' )
+ .attr( 'data-tip', this.model.get_points_percentage() );
+ }
+
+ }, Detachable, Editable, Trashable, Subview, SettingsFields ) );
+
+} );
+
+/**
+ * Popover View
+ *
+ * @since 3.16.0
+ * @version 4.0.0
+ */
+define( 'Views/Popover',[], function() {
+
+ return Backbone.View.extend( {
+
+ /**
+ * Default Properties
+ *
+ * @type {Object}
+ */
+ defaults: {
+ placement: 'auto',
+ // container: document.body,
+ width: 'auto',
+ trigger: 'manual',
+ style: 'light',
+ animation: 'pop',
+ title: '',
+ content: '',
+ closeable: false,
+ backdrop: false,
+ onShow: function( $el ) {},
+ onHide: function( $el ) {},
+ },
+
+ /**
+ * Wrapper Tag name
+ *
+ * @type {String}
+ */
+ tagName: 'div',
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ *
+ * @since 3.14.1
+ * @since 4.0.0 Add RTL support for popovers.
+ *
+ * @return void
+ */
+ initialize: function( data ) {
+
+ if ( this.$el.length ) {
+ this.defaults.container = this.$el.parent();
+ }
+
+ this.args = _.defaults( data.args, this.defaults );
+
+ // Reverse directions for RTL sites.
+ if ( $( 'body' ).hasClass( 'rtl' ) ) {
+
+ if ( -1 !== this.args.placement.indexOf( 'left' ) ) {
+ this.args.placement = this.args.placement.replace( 'left', 'right' );
+ } else if ( -1 !== this.args.placement.indexOf( 'right' ) ) {
+ this.args.placement = this.args.placement.replace( 'right', 'left' );
+ }
+
+ }
+
+ this.render();
+
+ },
+
+ /**
+ * Compiles the template and renders the view
+ *
+ * @since 3.16.0
+ *
+ * @return {Object} Instance of the Backbone.view.
+ */
+ render: function() {
+
+ this.$el.webuiPopover( this.args );
+ return this;
+
+ },
+
+ /**
+ * Hide the popover
+ *
+ * @since 3.16.0
+ * @since 3.16.12 Unknown.
+ *
+ * @return {Object} Instance of the Backbone.view.
+ */
+ hide: function() {
+
+ this.$el.webuiPopover( 'hide' );
+ return this;
+
+ },
+
+ /**
+ * Show the popover
+ *
+ * @since 3.16.0
+ * @since 3.16.12 Unknown.
+ *
+ * @return {Object} Instance of the Backbone.view.
+ */
+ show: function() {
+
+ this.$el.webuiPopover( 'show' );
+ return this;
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Post Popover Search content View
+ *
+ * @since 3.16.0
+ * @version 4.4.0
+ */
+define( 'Views/PostSearch',[], function() {
+
+ return Backbone.View.extend( {
+
+ /**
+ * DOM Events
+ *
+ * @type obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ events: {
+ 'select2:select': 'add_post',
+ },
+
+ /**
+ * Wrapper Tag name
+ *
+ * @type {String}
+ */
+ tagName: 'select',
+
+ /**
+ * Initializer
+ *
+ * @param obj data customize the search box with data
+ * @return void
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+ initialize: function( data ) {
+
+ this.post_type = data.post_type;
+ this.searching_message = data.searching_message || LLMS.l10n.translate( 'Searching...' );
+
+ },
+
+ /**
+ * Select event, adds the existing lesson to the course
+ *
+ * @param obj event select2:select event object
+ * @since 3.16.0
+ * @version 3.17.0
+ */
+ add_post: function( event ) {
+
+ var type = this.$el.attr( 'data-post-type' );
+
+ Backbone.pubSub.trigger( type.replace( 'llms_', '' ) + '-search-select', event.params.data, event );
+ this.$el.val( null ).trigger( 'change' );
+
+ },
+
+ /**
+ * Render the section
+ *
+ * Initializes a new collection and views for all lessons in the section.
+ *
+ * @since 3.16.0
+ * @since 3.16.12 Unknown.
+ * @since 4.4.0 Update ajax nonce source.
+ *
+ * @return void
+ */
+ render: function() {
+ var self = this;
+ setTimeout( function () {
+ self.$el.llmsSelect2( {
+ ajax: {
+ dataType: 'JSON',
+ delay: 250,
+ method: 'POST',
+ url: window.ajaxurl,
+ data: function( params ) {
+ return {
+ action: 'llms_builder',
+ action_type: 'search',
+ course_id: window.llms_builder.course.id,
+ post_type: self.post_type,
+ term: params.term,
+ page: params.page,
+ _ajax_nonce: window.llms.ajax_nonce,
+ };
+ },
+ },
+ dropdownParent: $( '.wrap.lifterlms.llms-builder' ),
+ // Don't escape html from render_result.
+ escapeMarkup: function( markup ) {
+ return markup;
+ },
+ placeholder: self.searching_message,
+ templateResult: self.render_result,
+ width: '100%',
+ } );
+ self.$el.attr( 'data-post-type', self.post_type );
+ }, 0 );
+ return this;
+
+ },
+
+ /**
+ * Render a nicer UI for each search result in the in the Select2 search results
+ *
+ * @param object res result data
+ * @return string
+ * @since 3.16.0
+ * @version 3.16.12
+ */
+ render_result: function( res ) {
+
+ var $html = $( '
' );
+
+ if ( res.loading ) {
+ return $html.append( res.text );
+ }
+
+ var $side = $( '' ),
+ $main = $( '
' );
+ icon = ( 'attach' === res.action ) ? 'paperclip' : 'clone',
+ text = ( 'attach' === res.action ) ? LLMS.l10n.translate( 'Attach' ) : LLMS.l10n.translate( 'Clone' );
+
+ $side.append( '' + text + ' ' );
+
+ $main.append( '' + res.data.title + ' ' );
+ $main.append( '' + LLMS.l10n.translate( 'ID' ) + ': ' + res.data.id + ' ' );
+
+ _.each( res.parents, function( parent ) {
+ $main.append( '' + parent + ' ' );
+ } );
+
+ return $html.append( $side ).append( $main );
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Question Type View
+ *
+ * @since 3.16.0
+ * @since 3.30.1 Fixed issue causing multiple binds for add_existing_question events.
+ * @version 5.4.0
+ */
+define( 'Views/QuestionType',[ 'Views/Popover', 'Views/PostSearch' ], function( Popover, QuestionSearch ) {
+
+ return Backbone.View.extend( {
+
+ /**
+ * HTML class names.
+ *
+ * @type {String}
+ */
+ className: 'llms-question-type',
+
+ events: {
+ 'click .llms-add-question': 'add_question',
+ },
+
+ /**
+ * HTML element wrapper ID attribute.
+ *
+ * @since 3.16.0
+ *
+ * @return {String}
+ */
+ id: function() {
+ return 'llms-question-type-' + this.model.id;
+ },
+
+ /**
+ * Wrapper Tag name.
+ *
+ * @type {String}
+ */
+ tagName: 'li',
+
+ /**
+ * Get the underscore template.
+ *
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-question-type-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen).
+ *
+ * @since 3.16.0
+ *
+ * @return {Void}
+ */
+ initialize: function() {
+
+ this.render();
+
+ },
+
+ /**
+ * Compiles the template and renders the view.
+ *
+ * @since 3.16.0
+ *
+ * @return {Self} For chaining.
+ */
+ render: function() {
+ this.$el.html( this.template( this.model ) );
+ return this;
+ },
+
+ /**
+ * Add a question of the selected type to the current quiz.
+ *
+ * @since 3.16.0
+ * @since 3.27.0 Unknown.
+ *
+ * @return {Void}
+ */
+ add_question: function() {
+
+ if ( 'existing' === this.model.get( 'id' ) ) {
+ this.add_existing_question_click();
+ } else {
+ this.add_new_question();
+ }
+
+ },
+
+ /**
+ * Add a new question to the quiz.
+ *
+ * @since 3.27.0
+ * @since 3.30.1 Fixed issue causing multiple binds.
+ *
+ * @return {Void}
+ */
+ add_existing_question_click: function() {
+
+ var pop = new Popover( {
+ el: '#llms-add-question--existing',
+ args: {
+ backdrop: true,
+ closeable: true,
+ container: '#llms-builder-sidebar',
+ dismissible: true,
+ placement: 'top-left',
+ width: 'calc( 100% - 40px )',
+ offsetLeft: 250,
+ offsetTop: 60,
+ title: LLMS.l10n.translate( 'Add Existing Question' ),
+ content: new QuestionSearch( {
+ post_type: 'llms_question',
+ searching_message: LLMS.l10n.translate( 'Search for existing questions...' ),
+ } ).render().$el,
+ }
+ } );
+
+ pop.show();
+ Backbone.pubSub.on( 'question-search-select', this.add_existing_question, this );
+ Backbone.pubSub.on( 'question-search-select', function( event ) {
+ pop.hide();
+ Backbone.pubSub.off( 'question-search-select', this.add_existing_question, this );
+ }, this );
+
+ },
+
+ /**
+ * Callback event fired when a question is selected from the Add Existing Question popover interface.
+ *
+ * @since 3.27.0
+ * @since 5.4.0 Use author id instead of the question author object.
+ *
+ * @param {Object} event JS event object.
+ * @return {Void}
+ */
+ add_existing_question: function( event ) {
+
+ var question = event.data;
+
+ if ( 'clone' === event.action ) {
+ question = _.prepareQuestionObjectForCloning( question );
+ } else {
+ // Use author id instead of the question author object.
+ question = _.prepareExistingPostObjectDataForAddingOrCloning( question );
+ question._forceSync = true;
+ }
+
+ question._expanded = true;
+ this.quiz.add_question( question );
+
+ this.quiz.trigger( 'new-question-added' );
+
+ },
+
+ /**
+ * Add a new question to the quiz.
+ *
+ * @since 3.27.0
+ *
+ * @return {Void}
+ */
+ add_new_question: function() {
+
+ this.quiz.add_question( {
+ _expanded: true,
+ choices: this.model.get( 'default_choices' ) ? this.model.get( 'default_choices' ) : null,
+ question_type: this.model,
+ } );
+
+ this.quiz.trigger( 'new-question-added' );
+
+ },
+
+ // filter: function( term ) {
+
+ // var words = this.model.get_keywords().map( function( word ) {
+ // return word.toLowerCase();
+ // } );
+
+ // term = term.toLowerCase();
+
+ // if ( -1 === words.indexOf( term ) ) {
+ // this.$el.addClass( 'filtered' );
+ // } else {
+ // this.$el.removeClass( 'filtered' );
+ // }
+
+ // },
+
+ // clear_filter: function() {
+ // this.$el.removeClass( 'filtered' );
+ // }
+
+ } );
+
+} );
+
+/**
+ * Quiz question bank view
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Views/QuestionBank',[ 'Views/QuestionType' ], function( QuestionView ) {
+
+ return Backbone.CollectionView.extend( {
+
+ className: 'llms-question',
+
+ /**
+ * Parent element
+ *
+ * @type {String}
+ */
+ el: '#llms-question-bank',
+
+ /**
+ * Section model
+ *
+ * @type {[type]}
+ */
+ modelView: QuestionView,
+
+ /**
+ * Are sections selectable?
+ *
+ * @type {Bool}
+ */
+ selectable: false,
+
+ /**
+ * Are sections sortable?
+ *
+ * @type {Bool}
+ */
+ sortable: false,
+
+ } );
+
+} );
+
+/**
+ * Single Question Choice View
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Views/QuestionChoice',[ 'Views/_Editable', ], function( Editable ) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * HTML class names
+ * @type {String}
+ */
+ className: 'llms-question-choice',
+
+ events: _.defaults( {
+ 'change input[name="correct"]': 'toggle_correct',
+ 'click .llms-action-icon[href="#llms-add-choice"]': 'add_choice',
+ 'click .llms-action-icon[href="#llms-del-choice"]': 'del_choice',
+ }, Editable.events ),
+
+ /**
+ * HTML element wrapper ID attribute
+ * @return string
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ id: function() {
+ return 'llms-question-choice-' + this.model.id;
+ },
+
+ /**
+ * Wrapper Tag name
+ * @type {String}
+ */
+ tagName: 'li',
+
+ /**
+ * Get the underscore template
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-question-choice-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ * @return void
+ * @since 3.14.1
+ * @version 3.14.1
+ */
+ initialize: function() {
+
+ this.render();
+
+ this.listenTo( this.model.collection, 'add', this.maybe_disable_buttons );
+ this.listenTo( this.model, 'change', this.render );
+
+ if ( 'image' === this.model.get( 'choice_type' ) ) {
+ this.listenTo( this.model.get( 'choice' ), 'change', this.render );
+ }
+
+ },
+
+ /**
+ * Compiles the template and renders the view
+ * @return self (for chaining)
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render: function() {
+ this.$el.html( this.template( this.model ) );
+ return this;
+ },
+
+ /**
+ * Add a new choice to the current choice list
+ * Adds *after* the clicked choice
+ * @param obj event JS event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ add_choice: function( event ) {
+
+ event.stopPropagation();
+ event.preventDefault();
+
+ var index = this.model.collection.indexOf( this.model );
+ this.model.collection.parent.add_choice( {}, {
+ at: index + 1,
+ } );
+
+ },
+
+ /**
+ * Delete the choice from the choice list & ensure there's at least one correct choice
+ * @param obj event js event obj
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ del_choice: function( event ) {
+
+ event.preventDefault();
+ Backbone.pubSub.trigger( 'model-trashed', this.model );
+ this.model.collection.remove( this.model );
+
+ },
+
+ /**
+ * When the correct answer input changes sync status to model
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ toggle_correct: function() {
+
+ var correct = this.$el.find( 'input[name="correct"]' ).is( ':checked' );
+ this.model.set( 'correct', correct );
+ this.model.collection.trigger( 'correct-update', this.model );
+
+ },
+
+ }, Editable ) );
+
+} );
+
+/**
+ * Quiz question bank view
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Views/QuestionChoiceList',[ 'Views/QuestionChoice' ], function( ChoiceView ) {
+
+ return Backbone.CollectionView.extend( {
+
+ className: 'llms-quiz-questions',
+
+ /**
+ * Choice model view
+ *
+ * @type {[type]}
+ */
+ modelView: ChoiceView,
+
+ /**
+ * Enable keyboard events
+ *
+ * @type {Bool}
+ */
+ processKeyEvents: false,
+
+ /**
+ * Are sections selectable?
+ *
+ * @type {Bool}
+ */
+ selectable: false,
+
+ /**
+ * Are sections sortable?
+ *
+ * @type {Bool}
+ */
+ sortable: true,
+
+ sortableOptions: {
+ axis: false,
+ // connectWith: '.llms-lessons',
+ cursor: 'move',
+ handle: '.llms-choice-id',
+ items: '.llms-question-choice',
+ placeholder: 'llms-question-choice llms-sortable-placeholder',
+ },
+
+ sortable_start: function( model ) {
+ this.$el.addClass( 'dragging' );
+ },
+
+ sortable_stop: function( model ) {
+ this.$el.removeClass( 'dragging' );
+ },
+
+ } );
+
+} );
+
+/**
+ * Single Question View
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+define( 'Views/Question',[
+ 'Views/_Detachable',
+ 'Views/_Editable',
+ 'Views/QuestionChoiceList'
+ ], function(
+ Detachable,
+ Editable,
+ ChoiceListView
+ ) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * Generate CSS classes for the question
+ * @return string
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ className: function() {
+ return 'llms-question qtype--' + this.model.get( 'question_type' ).get( 'id' );
+ },
+
+ events: _.defaults( {
+ 'click .clone--question': 'clone',
+ 'click .delete--question': 'delete',
+ 'click .expand--question': 'expand',
+ 'click .collapse--question': 'collapse',
+ 'change input[name="question_points"]': 'update_points',
+ }, Detachable.events, Editable.events ),
+
+ /**
+ * HTML element wrapper ID attribute
+ * @return string
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ id: function() {
+ return 'llms-question-' + this.model.id;
+ },
+
+ /**
+ * Wrapper Tag name
+ * @type {String}
+ */
+ tagName: 'li',
+
+ /**
+ * Get the underscore template
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-question-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function() {
+
+ var change_events = [
+ 'change:_expanded',
+ 'change:menu_order',
+ ];
+ _.each( change_events, function( event ) {
+ this.listenTo( this.model, event, this.render );
+ }, this );
+
+ this.listenTo( this.model.get( 'image' ), 'change', this.render );
+
+ this.listenTo( this.model.get_parent(), 'change:_points', this.render_points_percentage );
+
+ this.on( 'multi_choices_toggle', this.multi_choices_toggle, this );
+
+ Backbone.pubSub.on( 'del-question-choice', this.del_choice, this );
+
+ },
+
+ /**
+ * Compiles the template and renders the view
+ * @return self (for chaining)
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render: function() {
+
+ this.$el.html( this.template( this.model ) );
+
+ if ( this.model.get( 'question_type').get( 'choices' ) ) {
+
+ this.choiceListView = new ChoiceListView( {
+ el: this.$el.find( '.llms-question-choices' ),
+ collection: this.model.get( 'choices' ),
+ } );
+ this.choiceListView.render();
+ this.choiceListView.on( 'sortStart', this.choiceListView.sortable_start );
+ this.choiceListView.on( 'sortStop', this.choiceListView.sortable_stop );
+
+ }
+
+ if ( 'group' === this.model.get( 'question_type' ).get( 'id' ) ) {
+
+ var self = this;
+ setTimeout( function() {
+ self.questionListView = self.collectionListView.quiz.get_question_list( {
+ el: self.$el.find( '.llms-quiz-questions' ),
+ collection: self.model.get( 'questions' ),
+ } );
+ self.questionListView.render();
+ self.questionListView.on( 'sortStart', self.questionListView.sortable_start );
+ self.questionListView.on( 'sortStop', self.questionListView.sortable_stop );
+ }, 1 );
+
+ }
+
+ if ( this.model.get( 'description_enabled' ) ) {
+ this.init_editor( 'question-desc--' + this.model.get( 'id' ) );
+ }
+
+ if ( this.model.get( 'clarifications_enabled' ) ) {
+ this.init_editor( 'question-clarifications--' + this.model.get( 'id' ), {
+ mediaButtons: false,
+ tinymce: {
+ toolbar1: 'bold,italic,strikethrough,bullist,numlist,alignleft,aligncenter,alignright',
+ toolbar2: '',
+ setup: _.bind( this.on_editor_ready, this ),
+ }
+ } );
+ }
+
+ this.init_formatting_els();
+ this.init_selects();
+
+ return this;
+ },
+
+ /**
+ * rerender points percentage when question points are updated
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render_points_percentage: function() {
+
+ this.$el.find( '.llms-question-points' ).attr( 'data-tip', this.model.get_points_percentage() );
+
+ },
+
+ /**
+ * Click event to duplicate a question within a quiz
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ clone: function( event ) {
+
+ event.stopPropagation();
+ event.preventDefault();
+ this.model.collection.add( this._get_question_clone( this.model ) );
+
+ },
+
+ /**
+ * Recursive clone function which will correctly clone children of a question
+ * @param obj question question model
+ * @return obj
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ _get_question_clone: function( question ) {
+
+ // create a duplicate
+ var clone = _.clone( question.attributes );
+
+ // remove id (we want the duplicate to have a temp id)
+ delete clone.id;
+
+ clone.parent_id = question.get( 'id' );
+
+ // set the question type ID
+ clone.question_type = question.get( 'question_type' ).get( 'id' );
+
+ // clone the image attributes separately
+ clone.image = _.clone( question.get( 'image' ).attributes );
+
+ // if it has choices clone all the choices
+ if ( question.get( 'choices' ) ) {
+
+ clone.choices = [];
+
+ question.get( 'choices' ).each( function ( choice ) {
+
+ var choice_clone = _.clone( choice.attributes );
+ delete choice_clone.id;
+ delete choice_clone.question_id;
+
+ clone.choices.push( choice_clone );
+
+ } );
+
+ }
+
+ if ( 'group' === question.get( 'question_type' ).get( 'id' ) ) {
+
+ clone.questions = [];
+ question.get( 'questions' ).each( function( child ) {
+ clone.questions.push( this._get_question_clone( child ) );
+ }, this );
+
+ }
+
+ return clone;
+
+ },
+
+ /**
+ * Collapse a question and hide it's settings
+ * @param obj event js event obj.
+ * @return void
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+ collapse: function( event ) {
+
+ if ( event ) {
+ event.preventDefault();
+ }
+
+ this.model.set( '_expanded', false );
+
+ },
+
+ /**
+ * Delete the question from a quiz / question group
+ * @param obj event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ delete: function( event ) {
+
+ event.preventDefault();
+
+ if ( window.confirm( LLMS.l10n.translate( 'Are you sure you want to delete this question?' ) ) ) {
+
+ this.model.collection.remove( this.model );
+ Backbone.pubSub.trigger( 'model-trashed', this.model );
+
+ }
+
+ },
+
+ /**
+ * Click event to reveal a question's settings & choices
+ * @param obj event js event obj.
+ * @return void
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+ expand: function( event ) {
+
+ if ( event ) {
+ event.preventDefault();
+ }
+
+ this.model.set( '_expanded', true );
+
+ },
+
+ /**
+ * When toggling multiple correct answers *off* remove all correct choices except the first correct choice in the list
+ * @param string val value of the question's `multi_choice` attr [yes|no]
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ multi_choices_toggle: function( val ) {
+
+ if ( 'yes' === val ) {
+ return;
+ }
+
+ this.model.get( 'choices' ).update_correct( _.first( this.model.get( 'choices' ).get_correct() ) );
+
+ },
+
+ /**
+ * Update the model's points when the value of the points input is updated
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ update_points: function() {
+
+ this.model.set( 'points', this.$el.find( 'input[name="question_points"]' ).val() * 1 );
+
+ }
+
+ }, Detachable, Editable ) );
+
+} );
+
+/**
+ * Quiz question bank view
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Views/QuestionList',[ 'Views/Question' ], function( QuestionView ) {
+
+ return Backbone.CollectionView.extend( {
+
+ className: 'llms-quiz-questions',
+
+ /**
+ * Parent element
+ * @type {String}
+ */
+ // el: '#llms-quiz-questions',
+
+ /**
+ * Section model
+ * @type {[type]}
+ */
+ modelView: QuestionView,
+
+ /**
+ * Enable keyboard events
+ * @type {Bool}
+ */
+ processKeyEvents: false,
+
+ /**
+ * Are sections selectable?
+ * @type {Bool}
+ */
+ selectable: false,
+
+ /**
+ * Are sections sortable?
+ * @type {Bool}
+ */
+ sortable: true,
+
+ sortableOptions: {
+ axis: false,
+ connectWith: '.llms-quiz-questions',
+ cursor: 'move',
+ handle: '.llms-data-stamp',
+ items: '.llms-question',
+ placeholder: 'llms-question llms-sortable-placeholder',
+ },
+
+ /**
+ * Highlight drop areas when dragging starts
+ * @param obj model model being sorted
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ sortable_start: function( model ) {
+ var selector = 'group' === model.get( 'question_type' ).get( 'id' ) ? '.llms-editor-tab > .llms-quiz-questions' : '.llms-quiz-questions';
+ $( selector ).addClass( 'dragging' );
+ },
+
+ /**
+ * Remove highlights when dragging stops
+ * @param obj model model being sorted
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ sortable_stop: function() {
+ $( '.llms-quiz-questions' ).removeClass( 'dragging' );
+ },
+
+ /**
+ * Overrides receive to ensure that question groups can't be moved into question groups
+ * @param obj event js event object
+ * @param obj ui jQuery UI Sortable ui object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ _receive : function( event, ui ) {
+
+ event.stopPropagation();
+
+ // prevent moving a question group into a question group
+ if ( ui.item.hasClass( 'qtype--group' ) && $( event.target ).closest( '.qtype--group' ).length ) {;
+ ui.sender.sortable( 'cancel' );
+ return;
+ }
+
+ var senderListEl = ui.sender;
+ var senderCollectionListView = senderListEl.data( "view" );
+ if( ! senderCollectionListView || ! senderCollectionListView.collection ) return;
+
+ var newIndex = this._getContainerEl().children().index( ui.item );
+ var modelReceived = senderCollectionListView.collection.get( ui.item.attr( "data-model-cid" ) );
+ senderCollectionListView.collection.remove( modelReceived );
+ this.collection.add( modelReceived, { at : newIndex } );
+ modelReceived.collection = this.collection; // otherwise will not get properly set, since modelReceived.collection might already have a value.
+ this.setSelectedModel( modelReceived );
+ },
+
+ /**
+ * Override to allow manipulation of placeholder element
+ * @param {[type]} event [description]
+ * @param {[type]} ui [description]
+ * @return {[type]}
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ _sortStart : function( event, ui ) {
+
+ var modelBeingSorted = this.collection.get( ui.item.attr( "data-model-cid" ) );
+
+ ui.placeholder.addClass( 'qtype--' + modelBeingSorted.get( 'question_type' ).get( 'id' ) );
+
+ if( this._isBackboneCourierAvailable() )
+ this.spawn( "sortStart", { modelBeingSorted : modelBeingSorted } );
+ else this.trigger( "sortStart", modelBeingSorted );
+ },
+
+ /**
+ * Overloads the function from Backbone.CollectionView core because it doesn't send stop events
+ * if moving from one sortable to another... :-(
+ * @param obj event js event object
+ * @param obj ui jQuery UI object
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ _sortStop : function( event, ui ) {
+
+ event.stopPropagation();
+
+ var modelBeingSorted = this.collection.get( ui.item.attr( 'data-model-cid' ) ),
+ modelViewContainerEl = this._getContainerEl(),
+ newIndex = modelViewContainerEl.children().index( ui.item );
+
+ if ( newIndex == -1 && modelBeingSorted ) {
+ this.collection.remove( modelBeingSorted );
+ }
+
+ this._reorderCollectionBasedOnHTML();
+ this.updateDependentControls();
+
+ if( this._isBackboneCourierAvailable() ) {
+ this.spawn( 'sortStop', { modelBeingSorted : modelBeingSorted, newIndex : newIndex } );
+ } else {
+ this.trigger( 'sortStop', modelBeingSorted, newIndex );
+ }
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Single Quiz View.
+ *
+ * @since 3.16.0
+ * @version 5.4.0
+ */
+define( 'Views/Quiz',[
+ 'Models/Quiz',
+ 'Views/Popover',
+ 'Views/PostSearch',
+ 'Views/QuestionBank',
+ 'Views/QuestionList',
+ 'Views/SettingsFields',
+ 'Views/_Detachable',
+ 'Views/_Editable',
+ 'Views/_Subview',
+ 'Views/_Trashable'
+ ], function(
+ QuizModel,
+ Popover,
+ PostSearch,
+ QuestionBank,
+ QuestionList,
+ SettingsFields,
+ Detachable,
+ Editable,
+ Subview,
+ Trashable
+ ) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * Current view state.
+ *
+ * @type {String}
+ */
+ state: 'default',
+
+ /**
+ * Current Subviews.
+ *
+ * @type {Object}
+ */
+ views: {
+ settings: {
+ class: SettingsFields,
+ instance: null,
+ state: 'default',
+ },
+ bank: {
+ class: QuestionBank,
+ instance: null,
+ state: 'default',
+ },
+ list: {
+ class: QuestionList,
+ instance: null,
+ state: 'default',
+ },
+ },
+
+ el: '#llms-editor-quiz',
+
+ /**
+ * Events.
+ *
+ * @type {Object}
+ */
+ events: _.defaults( {
+ 'click #llms-existing-quiz': 'add_existing_quiz_click',
+ 'click #llms-new-quiz': 'add_new_quiz',
+ 'click #llms-show-question-bank': 'show_tools',
+ 'click .bulk-toggle': 'bulk_toggle',
+ // 'keyup #llms-question-bank-filter': 'filter_question_types',
+ // 'search #llms-question-bank-filter': 'filter_question_types',
+ }, Detachable.events, Editable.events, Trashable.events ),
+
+ /**
+ * Wrapper Tag name.
+ *
+ * @type {String}
+ */
+ tagName: 'div',
+
+ /**
+ * Get the underscore template
+ *
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-quiz-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen).
+ *
+ * @since 3.16.0
+ * @since 3.19.2 Unknown.
+ *
+ * @return {Void}
+ */
+ initialize: function( data ) {
+
+ this.lesson = data.lesson;
+
+ // Initialize the model if the quiz is enabled or it's disabled but we still have data for a quiz.
+ if ( 'yes' === this.lesson.get( 'quiz_enabled' ) || ! _.isEmpty( this.lesson.get( 'quiz' ) ) ) {
+
+ this.model = this.lesson.get( 'quiz' );
+
+ /**
+ * @todo this is a terrible terrible patch
+ * I've spent nearly 3 days trying to figure out how to not use this line of code
+ * ISSUE REPRODUCTION:
+ * Open course builder
+ * Open a lesson (A) and add a quiz
+ * Switch to a new lesson (B)
+ * Add a new quiz
+ * Return to lesson A and the quizzes parent will be set to LESSON B
+ * This will happen for *every* quiz in the builder...
+ * Adding this set_parent on init guarantees that the quizzes correct parent is set
+ * after adding new quizzes to other lessons
+ * it's awful and it's gross...
+ * I'm confused and tired and going to miss release dates again because of it
+ */
+ this.model.set_parent( this.lesson );
+
+ this.listenTo( this.model, 'change:_points', this.render_points );
+
+ }
+
+ this.on( 'model-trashed', this.on_trashed );
+
+ },
+
+ /**
+ * Compiles the template and renders the view.
+ *
+ * @since 3.16.0
+ * @since 3.19.2 Unknown.
+ *
+ * @return {Self} For chaining.
+ */
+ render: function() {
+
+ this.$el.html( this.template( this.model ) );
+
+ // Render the quiz builder.
+ if ( this.model ) {
+
+ // Don't allow interaction until questions are lazy loaded.
+ LLMS.Spinner.start( this.$el );
+
+ this.render_subview( 'settings', {
+ el: '#llms-quiz-settings-fields',
+ model: this.model,
+ } );
+
+ this.init_datepickers();
+ this.init_selects();
+
+ this.render_subview( 'bank', {
+ collection: window.llms_builder.questions,
+ } );
+
+ var last_group = null,
+ group = null;
+ // Let all the question types reference the quiz for adding questions quickly.
+ this.get_subview( 'bank' ).instance.viewManager.each( function( view ) {
+
+ view.quiz = this.model;
+
+ group = view.model.get( 'group' ).name;
+
+ if ( last_group !== group ) {
+ last_group = group;
+ view.$el.before( '' );
+ }
+
+ }, this );
+
+ this.model.load_questions( _.bind( function( err ) {
+
+ if ( err ) {
+ alert( LLMS.l10n.translate( 'An error occurred while trying to load the questions. Please refresh the page and try again.' ) );
+ return this;
+ }
+
+ LLMS.Spinner.stop( this.$el );
+ this.render_subview( 'list', {
+ el: '#llms-quiz-questions',
+ collection: this.model.get( 'questions' ),
+ } );
+ var list = this.get_subview( 'list' ).instance;
+ list.quiz = this;
+ list.collection.on( 'add', function() {
+ list.collection.trigger( 'reorder' );
+ }, this );
+ list.on( 'sortStart', list.sortable_start );
+ list.on( 'sortStop', list.sortable_stop );
+
+ }, this ) );
+
+ this.model.on( 'new-question-added', function() {
+ var $questions = this.$el.find( '#llms-quiz-questions' );
+ $questions.animate( { scrollTop: $questions.prop( 'scrollHeight' ) }, 200 );
+ }, this );
+
+ }
+
+ return this;
+
+ },
+
+ /**
+ * On quiz points update, update the value of the Total Points area in the header.
+ *
+ * @since 3.17.6
+ *
+ * @param {Object} quiz Instance of the quiz model.
+ * @param {Int} points Updated number of points.
+ * @return {Void}
+ */
+ render_points: function( quiz, points ) {
+
+ this.$el.find( '#llms-quiz-total-points' ).text( points );
+
+ },
+
+ /**
+ * Bulk expand / collapse question buttons.
+ *
+ * @since 3.16.0
+ *
+ * @param {Object} Event JS event object.
+ * @return {Void}
+ */
+ bulk_toggle: function( event ) {
+
+ var expanded = ( 'expand' === $( event.target ).attr( 'data-action' ) );
+
+ this.model.get( 'questions' ).each( function( question ) {
+ question.set( '_expanded', expanded );
+ } );
+
+ },
+
+ /**
+ * Adds a new quiz to a lesson which currently has no quiz associated with it.
+ *
+ * @since 3.16.0
+ *
+ * @return {Void}
+ */
+ add_new_quiz: function() {
+
+ var quiz = this.lesson.get( 'quiz' );
+ if ( _.isEmpty( quiz ) ) {
+ quiz = this.lesson.add_quiz();
+ } else {
+ this.lesson.set( 'quiz_enabled', 'yes' );
+ }
+
+ this.model = quiz;
+ this.render();
+
+ },
+
+
+ /**
+ * Add an existing quiz to a lesson.
+ *
+ * @since 3.16.0
+ * @since 3.24.0 Unknown.
+ * @since 5.4.0 Use author id instead of the quiz author object.
+ *
+ * @param {Object} event JS event object.
+ * @return {Void}
+ */
+ add_existing_quiz: function( event ) {
+
+ this.post_search_popover.hide();
+
+ var quiz = event.data;
+
+ if ( 'clone' === event.action ) {
+
+ quiz = _.prepareQuizObjectForCloning( quiz );
+
+ } else {
+
+ // Use author id instead of the quiz author object.
+ quiz = _.prepareExistingPostObjectDataForAddingOrCloning( quiz );
+ quiz._forceSync = true;
+
+ }
+
+ delete quiz.lesson_id;
+
+ this.lesson.add_quiz( quiz );
+ this.model = this.lesson.get( 'quiz' );
+ this.render();
+
+ },
+
+ /**
+ * Open add existing quiz popover.
+ *
+ * @since 3.16.12
+ *
+ * @param {Object} event JS event object.
+ * @return {Void}
+ */
+ add_existing_quiz_click: function( event ) {
+
+ event.preventDefault();
+
+ this.post_search_popover = new Popover( {
+ el: '#llms-existing-quiz',
+ args: {
+ backdrop: true,
+ closeable: true,
+ container: '.wrap.lifterlms.llms-builder',
+ dismissible: true,
+ placement: 'left',
+ width: 480,
+ title: LLMS.l10n.translate( 'Add Existing Quiz' ),
+ content: new PostSearch( {
+ post_type: 'llms_quiz',
+ searching_message: LLMS.l10n.translate( 'Search for existing quizzes...' ),
+ } ).render().$el,
+ onHide: function() {
+ Backbone.pubSub.off( 'quiz-search-select' );
+ },
+ }
+ } );
+
+ this.post_search_popover.show();
+ Backbone.pubSub.once( 'quiz-search-select', this.add_existing_quiz, this );
+
+ },
+
+ // filter_question_types: _.debounce( function( event ) {
+
+ // var term = $( event.target ).val();
+
+ // this.QuestionBankView.viewManager.each( function( view ) {
+ // if ( ! term ) {
+ // view.clear_filter();
+ // } else {
+ // view.filter( term );
+ // }
+ // } );
+
+
+ // }, 300 ),
+
+ /**
+ * Callback function when the quiz has been deleted.
+ *
+ * @since 3.16.6
+ *
+ * @param {Oject} quiz Quiz Model.
+ * @return {Void}
+ */
+ on_trashed: function( quiz ) {
+
+ this.lesson.set( 'quiz_enabled', 'no' );
+ this.lesson.set( 'quiz', '' );
+
+ delete this.model;
+
+ this.render();
+
+ },
+
+ /**
+ * "Add Question" button click event.
+ *
+ * @since 3.16.0
+ *
+ * Creates a popover with question type list interface.
+ *
+ * @return {Void}
+ */
+ show_tools: function() {
+
+ // Create popover,
+ var pop = new Popover( {
+ el: '#llms-show-question-bank',
+ args: {
+ backdrop: true,
+ closeable: true,
+ container: '#llms-builder-sidebar',
+ dismissible: true,
+ placement: 'top-left',
+ width: 'calc( 100% - 40px )',
+ title: LLMS.l10n.translate( 'Add a Question' ),
+ url: '#llms-quiz-tools',
+ }
+ } );
+
+ // Show it.
+ pop.show();
+
+ // If a question is added, hide the popover.
+ this.model.on( 'new-question-added', function() {
+ pop.hide();
+ } );
+
+ },
+
+ get_question_list: function( options ) {
+ return new QuestionList( options );
+ }
+
+ }, Detachable, Editable, Subview, Trashable, SettingsFields ) );
+
+} );
+
+/**
+ * Single Assignment View.
+ *
+ * @package LifterLMS/Scripts
+ *
+ * @since 3.17.0
+ * @version 5.4.0
+ */
+
+define( 'Views/Assignment',[
+ 'Views/Popover',
+ 'Views/PostSearch',
+ 'Views/_Detachable',
+ 'Views/_Editable',
+ 'Views/_Trashable',
+ 'Views/_Subview',
+ 'Views/SettingsFields'
+ ], function(
+ Popover,
+ PostSearch,
+ Detachable,
+ Editable,
+ Trashable,
+ Subview,
+ SettingsFields
+ ) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * Current view state.
+ *
+ * @type {String}
+ */
+ state: 'default',
+
+ /**
+ * Current Subviews.
+ *
+ * @type {Object}
+ */
+ views: {
+ settings: {
+ class: SettingsFields,
+ instance: null,
+ state: 'default',
+ },
+ },
+
+ el: '#llms-editor-assignment',
+
+ /**
+ * DOM Events.
+ *
+ * @since 3.17.1
+ *
+ * @return {Object}
+ */
+ events: function() {
+ var addon_events = this.is_addon_available() ? window.llms_builder.assignments.get_view_events() : {};
+ return _.defaults( {
+ 'click #llms-existing-assignment': 'add_existing_assignment_click',
+ 'click #llms-new-assignment': 'add_new_assignment',
+ }, Detachable.events, Editable.events, Trashable.events, addon_events );
+ },
+
+ /**
+ * Wrapper Tag name.
+ *
+ * @type {String}
+ */
+ tagName: 'div',
+
+ /**
+ * Get the underscore template.
+ *
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-assignment-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen).
+ *
+ * @since 3.17.0
+ * @since 3.17.2 Unknown.
+ *
+ * @return {Void}
+ */
+ initialize: function( data ) {
+
+ this.lesson = data.lesson;
+
+ // initialize the model if the assignment is enabled or it's disabled but we still have data for a assignment
+ if ( 'yes' === this.lesson.get( 'assignment_enabled' ) || ! _.isEmpty( this.lesson.get( 'assignment' ) ) ) {
+
+ this.model = this.lesson.get( 'assignment' );
+
+ /**
+ * Todo Item.
+ *
+ * @todo this is a terrible terrible patch
+ * I've spent nearly 3 days trying to figure out how to not use this line of code
+ * ISSUE REPRODUCTION:
+ * Open course builder
+ * Open a lesson (A) and add a assignment
+ * Switch to a new lesson (B)
+ * Add a new assignment
+ * Return to lesson A and the assignment's parent will be set to LESSON B
+ * This will happen for *every* assignment in the builder...
+ * Adding this set_parent on init guarantees that the assignment's correct parent is set
+ * after adding new assignment's to other lessons
+ * it's awful and it's gross...
+ * I'm confused and tired and going to miss release dates again because of it
+ */
+ this.model.set_parent( this.lesson );
+
+ }
+
+ this.on( 'model-trashed', this.on_trashed );
+
+ },
+
+ /**
+ * Compiles the template and renders the view.
+ *
+ * @since 3.17.0
+ * @since 3.17.7 Unknown.
+ *
+ * @return {Self} For chaining.
+ */
+ render: function() {
+
+ this.$el.html( this.template( this.model ) );
+
+ if ( this.model && this.is_addon_available() ) {
+
+ this.stopListening( this.model, 'change:assignment_type', this.render );
+
+ this.render_subview( 'settings', {
+ el: '#llms-assignment-settings-fields',
+ model: this.model,
+ } );
+
+ // this.init_datepickers();
+ this.init_selects();
+
+ window.llms_builder.assignments.render_editor( this );
+
+ this.listenTo( this.model, 'change:assignment_type', this.render );
+
+ }
+
+ return this;
+
+ },
+
+ /**
+ * Adds a new assignment to a lesson which currently has no assignment associated with it.
+ *
+ * @since 3.17.0
+ *
+ * @return {Void}
+ */
+ add_new_assignment: function() {
+
+ if ( this.is_addon_available() ) {
+
+ this.model = window.llms_builder.assignments.get_assignment( {
+ /* Translators: %1$s = associated lesson title */
+ title: LLMS.l10n.replace( '%1$s Assignment', {
+ '%1$s': this.lesson.get( 'title' ),
+ } ),
+ lesson_id: this.lesson.get( 'id' ),
+ } );
+
+ this.lesson.set( 'assignment_enabled', 'yes' );
+ this.lesson.set( 'assignment', this.model );
+
+ this.render();
+
+ } else {
+
+ this.show_ad_popover( '#llms-new-assignment' );
+
+ }
+
+ },
+
+ /**
+ * When an assignment is selected from the post select popover
+ * instantiate it and add it to the current lesson.
+ *
+ * @param {Object} event Data from the select2 select event.
+ *
+ * @since 3.17.0
+ * @since 5.4.0 Prepare assignment object for cloning and use author id instead of the quiz author object.
+ */
+ add_existing_assignment: function( event ) {
+
+ this.post_search_popover.hide();
+
+ var assignment = event.data;
+
+ if ( 'clone' === event.action ) {
+
+ assignment = _.prepareAssignmentObjectForCloning( assignment );
+
+ } else {
+
+ // Use author id instead of the assignment author object.
+ assignment = _.prepareExistingPostObjectDataForAddingOrCloning( assignment );
+ assignment._forceSync = true;
+
+ }
+
+ assignment.lesson_id = this.lesson.get( 'id' )
+
+ assignment = window.llms_builder.construct.get_model( 'Assignment', assignment );
+
+ this.lesson.set( 'assignment_enabled', 'yes' );
+ this.lesson.set( 'assignment', assignment );
+ this.model = assignment;
+
+ this.render();
+
+ },
+
+ /**
+ * Open add existing assignment popover.
+ *
+ * @since 3.17.0
+ *
+ * @param {Object} event JS event object.
+ * @return {Void}
+ */
+ add_existing_assignment_click: function( event ) {
+
+ event.preventDefault();
+
+ if ( this.is_addon_available() ) {
+
+ this.post_search_popover = new Popover( {
+ el: '#llms-existing-assignment',
+ args: {
+ backdrop: true,
+ closeable: true,
+ container: '.wrap.lifterlms.llms-builder',
+ dismissible: true,
+ placement: 'left',
+ width: 480,
+ title: LLMS.l10n.translate( 'Add Existing Assignment' ),
+ content: new PostSearch( {
+ post_type: 'llms_assignment',
+ searching_message: LLMS.l10n.translate( 'Search for existing assignments...' ),
+ } ).render().$el,
+ onHide: function() {
+ Backbone.pubSub.off( 'assignment-search-select' );
+ },
+ }
+ } );
+
+ this.post_search_popover.show();
+ Backbone.pubSub.once( 'assignment-search-select', this.add_existing_assignment, this );
+
+ } else {
+
+ this.show_ad_popover( '#llms-existing-assignment' );
+
+ }
+
+ },
+
+ /**
+ * Determine if Assignments addon is available to use.
+ *
+ * @since 3.17.0
+ *
+ * @return {Boolean}
+ */
+ is_addon_available: function() {
+
+ return ( window.llms_builder.assignments );
+
+ },
+
+ /**
+ * Called when assignment is trashed.
+ *
+ * @since 3.17.0
+ *
+ * @param {Oject} assignment Assignment Model.
+ * @return {Void}
+ */
+ on_trashed: function( assignment ) {
+
+ this.lesson.set( 'assignment_enabled', 'no' );
+ this.lesson.set( 'assignment', '' );
+
+ delete this.model;
+
+ this.render();
+
+ },
+
+ /**
+ * Shows a dirty dirty ad popover for advanced assignments.
+ *
+ * @since 3.17.0
+ *
+ * @param {Sring} el The jQuery selector string.
+ * @return {Void}
+ */
+ show_ad_popover: function( el ) {
+
+ var h3 = LLMS.l10n.translate( 'Get Your Students Taking Action' ),
+ p = 'Great learning content is only half of teaching online. When your learners fully engage, they will take your content and move into action. Remove barriers for your learners by telling them what to do to apply what they just learned. Create graded assignments or simply give them a checklist of action items to complete before moving on.',
+ btn = LLMS.l10n.translate( 'Get Assignments Now!' ),
+ url = 'https://lifterlms.com/product/lifterlms-assignments?utm_source=LifterLMS%20Plugin&utm_medium=Assignment%20Builder%20Button&utm_campaign=Assignment%20Addon%20Upsell&utm_content=3.17.0';
+
+ this.ad_popover = new Popover( {
+ el: el,
+ args: {
+ backdrop: true,
+ closeable: true,
+ container: '.wrap.lifterlms.llms-builder',
+ dismissible: true,
+ // placement: 'left',
+ width: 380,
+ title: LLMS.l10n.translate( 'Unlock LifterLMS Assignments' ),
+ // This is here for translation but not actually used by the popover.
+ closeLabel: LLMS.l10n.translate( 'Close' ),
+ content: '' + h3 + ' ' + p + '
' + btn + '
'
+ }
+ } );
+
+ this.ad_popover.show();
+
+ },
+
+ }, Detachable, Editable, Trashable, Subview, SettingsFields ) );
+
+ } );
+
+/**
+ * Sidebar Editor View
+ *
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+define( 'Views/Editor',[
+ 'Views/LessonEditor',
+ 'Views/Quiz',
+ 'Views/Assignment',
+ 'Views/_Subview'
+ ], function(
+ LessonEditor,
+ Quiz,
+ Assignment,
+ Subview
+ ) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * Current view state
+ *
+ * @type {String}
+ */
+ state: 'lesson', // [lesson|quiz]
+
+ /**
+ * Current Subviews
+ *
+ * @type {Object}
+ */
+ views: {
+ lesson: {
+ class: LessonEditor,
+ instance: null,
+ state: 'lesson',
+ },
+ assignment: {
+ class: Assignment,
+ instance: null,
+ state: 'assignment',
+ },
+ quiz: {
+ class: Quiz,
+ instance: null,
+ state: 'quiz',
+ },
+ },
+
+ /**
+ * HTML element selector
+ *
+ * @type {String}
+ */
+ el: '#llms-editor',
+
+ events: {
+ 'click .llms-editor-nav a[href="#llms-editor-close"]': 'close_editor',
+ 'click .llms-editor-nav a:not([href="#llms-editor-close"])': 'switch_tab',
+ },
+
+ /**
+ * Wrapper Tag name
+ *
+ * @type {String}
+ */
+ tagName: 'div',
+
+ /**
+ * Get the underscore template
+ *
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-editor-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function( data ) {
+
+ this.SidebarView = data.SidebarView;
+ if ( data.tab ) {
+ this.state = data.tab;
+ }
+
+ },
+
+ /**
+ * Compiles the template and renders the view
+ *
+ * @return self (for chaining)
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render: function( view_data ) {
+
+ view_data = view_data || {};
+
+ this.$el.html( this.template( this ) );
+
+ this.render_subviews( _.extend( view_data, {
+ lesson: this.model,
+ } ) );
+
+ return this;
+
+ },
+
+ /**
+ * Click event for close sidebar editor button
+ * Sends event to main SidebarView to trigger editor closing events
+ *
+ * @param obj event js event obj
+ * @return void
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+ close_editor: function( event ) {
+
+ event.preventDefault();
+ Backbone.pubSub.trigger( 'sidebar-editor-close' );
+ window.location.hash = '';
+
+ },
+
+ /**
+ * Click event for switching tabs in the editor navigation
+ *
+ * @param object event js event object
+ * @return void
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+ switch_tab: function( event ) {
+
+ event.preventDefault();
+
+ var $btn = $( event.target ),
+ view = $btn.attr( 'data-view' ),
+ $tab = this.$el.find( $btn.attr( 'href' ) );
+
+ this.set_state( view ).render();
+ this.set_hash( view );
+
+ // Backbone.pubSub.trigger( 'editor-tab-activated', $btn.attr( 'href' ).substring( 1 ) );
+ },
+
+ /**
+ * Adds a hash for deep linking to a specific lesson tab
+ *
+ * @param string subtab subtab [quiz|assignment]
+ * @return void
+ * @since 3.27.0
+ * @version 3.27.0
+ */
+ set_hash: function( subtab ) {
+
+ var hash = 'lesson:' + this.model.get( 'id' );
+
+ if ( 'lesson' !== subtab ) {
+ hash += ':' + subtab;
+ }
+
+ window.location.hash = hash;
+
+ },
+
+ }, Subview ) );
+
+} );
+
+/**
+ * Sidebar Elements View
+ *
+ * @since 3.16.0
+ * @version 3.16.12
+ */
+define( 'Views/Elements',[ 'Models/Section', 'Views/Section', 'Models/Lesson', 'Views/Lesson', 'Views/Popover', 'Views/PostSearch' ], function( Section, SectionView, Lesson, LessonView, Popover, LessonSearch ) {
+
+ return Backbone.View.extend( {
+
+ /**
+ * HTML element selector
+ *
+ * @type {String}
+ */
+ el: '#llms-elements',
+
+ events: {
+ 'click #llms-new-section': 'add_new_section',
+ 'click #llms-new-lesson': 'add_new_lesson',
+ 'click #llms-existing-lesson': 'add_existing_lesson',
+ },
+
+ /**
+ * Wrapper Tag name
+ *
+ * @type {String}
+ */
+ tagName: 'div',
+
+ /**
+ * Get the underscore template
+ *
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-elements-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function( data ) {
+
+ // save a reference to the main Course view
+ this.SidebarView = data.SidebarView;
+
+ // watch course sections and enable/disable lesson buttons conditionally
+ this.listenTo( this.SidebarView.CourseView.model.get( 'sections' ), 'add', this.maybe_disable_buttons );
+ this.listenTo( this.SidebarView.CourseView.model.get( 'sections' ), 'remove', this.maybe_disable_buttons );
+
+ },
+
+ /**
+ * Compiles the template and renders the view
+ *
+ * @return self (for chaining)
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render: function() {
+
+ this.$el.html( this.template() );
+ this.draggable();
+ this.maybe_add_initial_section();
+
+ return this;
+ },
+
+ draggable: function() {
+
+ $( '#llms-new-section' ).draggable( {
+ appendTo: '#llms-sections',
+ cancel: false,
+ connectToSortable: '.llms-sections',
+ helper: function() {
+ return new SectionView( { model: new Section() } ).render().$el;
+ },
+ start: function() {
+ $( '.llms-sections' ).addClass( 'dragging' );
+ },
+ stop: function() {
+ $( '.llms-sections' ).removeClass( 'dragging' );
+ },
+ } );
+
+ $( '#llms-new-lesson' ).draggable( {
+ // appendTo: '#llms-sections .llms-section:first-child .llms-lessons',
+ appendTo: '#llms-sections',
+ cancel: false,
+ connectToSortable: '.llms-lessons',
+ helper: function() {
+ return new LessonView( { model: new Lesson() } ).render().$el;
+ },
+ start: function() {
+
+ $( '.llms-lessons' ).addClass( 'dragging' );
+
+ },
+ stop: function() {
+ $( '.llms-lessons' ).removeClass( 'dragging' );
+ $( '.drag-expanded' ).removeClass( '.drag-expanded' );
+ },
+ } );
+
+ },
+
+ add_new_section: function( event ) {
+
+ event.preventDefault();
+ Backbone.pubSub.trigger( 'add-new-section' );
+ },
+
+ add_new_lesson: function( event ) {
+ event.preventDefault();
+ Backbone.pubSub.trigger( 'add-new-lesson' );
+ },
+
+ /**
+ * Show the popover to add an existing lessons
+ *
+ * @param object event JS Event Object
+ * @return void
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+ add_existing_lesson: function( event ) {
+
+ event.preventDefault();
+
+ var pop = new Popover( {
+ el: '#llms-existing-lesson',
+ args: {
+ backdrop: true,
+ closeable: true,
+ container: '.wrap.lifterlms.llms-builder',
+ dismissible: true,
+ placement: 'left',
+ width: 480,
+ title: LLMS.l10n.translate( 'Add Existing Lesson' ),
+ content: new LessonSearch( {
+ post_type: 'lesson',
+ searching_message: LLMS.l10n.translate( 'Search for existing lessons...' ),
+ } ).render().$el,
+ }
+ } );
+
+ pop.show();
+ Backbone.pubSub.on( 'lesson-search-select', function() {
+ pop.hide()
+ } );
+
+ },
+
+ /**
+ * Disables lesson add buttons if no sections are available to add a lesson to
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ maybe_add_initial_section: function() {
+
+ var $els = $( '#llms-new-lesson, #llms-existing-lesson' );
+
+ if ( ! this.SidebarView.CourseView.model.get( 'sections' ).length ) {
+ Backbone.pubSub.trigger( 'add-new-section' );
+ Backbone.pubSub.trigger( 'add-new-lesson' );
+ Backbone.pubSub.trigger( 'add-new-lesson' );
+ Backbone.pubSub.trigger( 'add-new-lesson' );
+ } else {
+ $els.removeAttr( 'disabled' );
+ }
+
+ },
+
+ } );
+
+} );
+
+/**
+ * Sidebar Utilities View
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+define( 'Views/Utilities',[], function() {
+
+ return Backbone.View.extend( {
+
+ /**
+ * HTML element selector
+ *
+ * @type {String}
+ */
+ el: '#llms-utilities',
+
+ events: {
+ 'click #llms-collapse-all': 'collapse_all',
+ 'click #llms-expand-all': 'expand_all'
+ },
+
+ /**
+ * Wrapper Tag name
+ *
+ * @type {String}
+ */
+ tagName: 'div',
+
+ /**
+ * Get the underscore template
+ *
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-utilities-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function() {
+
+ // this.render();
+ },
+
+ /**
+ * Compiles the template and renders the view
+ *
+ * @return self (for chaining)
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render: function() {
+ this.$el.html( this.template() );
+ return this;
+ },
+
+ /**
+ * Collapse all sections
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ collapse_all: function( event ) {
+ event.preventDefault();
+ Backbone.pubSub.trigger( 'collapse-all' );
+ },
+
+ /**
+ * Expand all sections
+ *
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ expand_all: function( event ) {
+ event.preventDefault();
+ Backbone.pubSub.trigger( 'expand-all' );
+ },
+
+ } );
+
+} );
+
+/**
+ * Main sidebar view
+ *
+ * @since 3.16.0
+ * @version 7.2.0
+ */
+define( 'Views/Sidebar',[
+ 'Views/Editor',
+ 'Views/Elements',
+ 'Views/Utilities',
+ 'Views/_Subview'
+], function(
+ Editor,
+ Elements,
+ Utilities,
+ Subview
+) {
+
+ return Backbone.View.extend( _.defaults( {
+
+ /**
+ * Current builder state
+ * @type {String}
+ */
+ state: 'builder', // [builder|editor]
+
+ /**
+ * Current Subviews
+ * @type {Object}
+ */
+ views: {
+ elements: {
+ class: Elements,
+ instance: null,
+ state: 'builder',
+ },
+ utilities: {
+ class: Utilities,
+ instance: null,
+ state: 'builder',
+ },
+ editor: {
+ class: Editor,
+ instance: null,
+ state: 'editor',
+ },
+ },
+
+ /**
+ * HTML element selector
+ * @type {String}
+ */
+ el: '#llms-builder-sidebar',
+
+ /**
+ * DOM events
+ * @type {Object}
+ */
+ events: {
+ 'click #llms-save-button': 'save_now',
+ 'click #llms-exit-button': 'exit_now',
+ 'click .llms-builder-error': 'clear_errors',
+ },
+
+ /**
+ * Wrapper Tag name
+ * @type {String}
+ */
+ tagName: 'aside',
+
+ /**
+ * Get the underscore template
+ * @type {[type]}
+ */
+ template: wp.template( 'llms-sidebar-template' ),
+
+ /**
+ * Initialization callback func (renders the element on screen)
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ initialize: function( data ) {
+
+ // save a reference to the main Course view
+ this.CourseView = data.CourseView;
+
+ this.render();
+
+ Backbone.pubSub.on( 'current-save-status', this.changes_made, this );
+
+ Backbone.pubSub.on( 'heartbeat-send', this.heartbeat_send, this );
+ Backbone.pubSub.on( 'heartbeat-tick', this.heartbeat_tick, this );
+
+ Backbone.pubSub.on( 'lesson-selected', this.on_lesson_select, this );
+ Backbone.pubSub.on( 'sidebar-editor-close', this.on_editor_close, this );
+
+ this.$saveButton = $( '#llms-save-button' );
+
+ },
+
+ /**
+ * Compiles the template and renders the view
+ * @return self (for chaining)
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ render: function( view_data ) {
+
+ view_data = view_data || {};
+
+ this.$el.html( this.template() );
+
+ this.render_subviews( _.extend( view_data, {
+ SidebarView: this,
+ } ) );
+
+ var $el = $( '.wrap.lifterlms.llms-builder' );
+ if ( 'builder' === this.state ) {
+ $el.removeClass( 'editor-active' );
+ } else {
+ $el.addClass( 'editor-active' );
+ }
+
+ this.$saveButton = this.$el.find( '#llms-save-button' );
+
+ return this;
+
+ },
+
+ /**
+ * Adds error message element
+ * @param {[type]} $err [description]
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ add_error: function( $err ) {
+
+ this.$el.find( '.llms-builder-save' ).prepend( $err );
+
+ },
+
+ /**
+ * Clear any existing error message elements
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ clear_errors: function() {
+
+ this.$el.find( '.llms-builder-save .llms-builder-error' ).remove();
+
+ },
+
+ /**
+ * Update save status button when changes are detected
+ * runs on an interval to check status of course regularly for unsaved changes
+ * @param obj sync instance of the sync controller
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ changes_made: function( sync ) {
+
+ // if a save is currently running, don't do anything
+ if ( sync.saving ) {
+ return;
+ }
+
+ if ( sync.has_unsaved_changes ) {
+
+ this.$saveButton.attr( 'data-status', 'unsaved' );
+ this.$saveButton.removeAttr( 'disabled' );
+
+ } else {
+
+ this.$saveButton.attr( 'data-status', 'saved' );
+ this.$saveButton.attr( 'disabled', 'disabled' );
+
+ }
+
+ },
+
+ /**
+ * Exit the builder and return to the WP Course Editor
+ * @return void
+ * @since 3.16.7
+ * @version 3.16.7
+ */
+ exit_now: function() {
+
+ window.location.href = window.llms_builder.CourseModel.get_edit_post_link();
+
+ },
+
+ /**
+ * Triggered when a heartbeat send event starts containing builder information
+ * @param obj sync instance of the sync controller
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ heartbeat_send: function( sync ) {
+
+ if ( sync.saving ) {
+ LLMS.Spinner.start( this.$saveButton.find( 'i' ), 'small' );
+ this.$saveButton.attr( {
+ 'data-status': 'saving',
+ disabled: 'disabled',
+ } );
+ }
+
+ },
+
+ /**
+ * Triggered when a heartbeat tick completes and updates save status or appends errors
+ * @param obj sync instance of the sync controller
+ * @param obj data updated data
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ heartbeat_tick: function( sync, data ) {
+
+ if ( ! sync.saving ) {
+
+ var status = 'saved';
+
+ this.clear_errors();
+
+ if ( 'error' === data.status ) {
+
+ status = 'error';
+
+ var msg = data.message,
+ $err = $( ' ' );
+
+ if ( 'object' === typeof msg ) {
+ _.each( msg, function( txt ) {
+ $err.append( '' + txt + ' ' );
+ } );
+ } else {
+ $err = $err.append( '' + msg + ' ' );;
+ }
+
+ this.add_error( $err );
+
+ }
+
+ this.$saveButton.find( '.llms-spinning' ).remove();
+ this.$saveButton.attr( {
+ 'data-status': status,
+ disabled: 'disabled',
+ } );
+
+ }
+
+ },
+
+ /**
+ * Determine if the editor is the currently active state
+ * @return boolean
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ is_editor_active: function() {
+
+ return ( 'editor' === this.state );
+
+ },
+
+ /**
+ * Triggered when the editor closes, updates state to be the course builder view
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ on_editor_close: function() {
+
+ this.set_state( 'builder' ).render();
+
+ },
+
+ /**
+ * When a lesson is selected, opens the sidebar to the editor view
+ * @param obj lesson_model instance of the lesson model which was selected
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ on_lesson_select: function( lesson_model, tab ) {
+
+ if ( 'editor' !== this.state ) {
+ this.set_state( 'editor' );
+ } else {
+ this.remove_subview( 'editor' );
+ }
+
+ this.render( {
+ model: lesson_model,
+ tab: tab,
+ } );
+
+ },
+
+ /**
+ * Save button click event
+ * @return void
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ save_now: function() {
+
+ window.llms_builder.sync.save_now();
+
+ },
+
+ }, Subview ) );
+
+} );
+
+/**
+ * LifterLMS JS Builder App Bootstrap
+ *
+ * @since 3.16.0
+ * @since 3.37.11 Added `_.getEditor()` helper.
+ * @version 5.4.0
+ */
+require( [
+ 'vendor/wp-hooks',
+ 'vendor/backbone.collectionView',
+ 'vendor/backbone.trackit',
+ 'Controllers/Construct',
+ 'Controllers/Debug',
+ 'Controllers/Schemas',
+ 'Controllers/Sync',
+ 'Models/loader',
+ 'Views/Course',
+ 'Views/Sidebar'
+ ], function(
+ Hooks,
+ CV,
+ TrackIt,
+ Construct,
+ Debug,
+ Schemas,
+ Sync,
+ Models,
+ CourseView,
+ SidebarView
+ ) {
+
+ window.llms_builder.debug = new Debug( window.llms_builder.debug );
+ window.llms_builder.construct = new Construct();
+ window.llms_builder.schemas = new Schemas( window.llms_builder.schemas );
+
+ /**
+ * Compare values, used by _.checked & _.selected mixins.
+ *
+ * @since 3.17.2
+ *
+ * @param {Mixed} expected expected Value, probably a string (the value of a select option or checkbox element).
+ * @param {Mixed} mixed actual Actual value, probably a string (the return of model.get( 'something' ) )
+ * but could be an array like a multiselect.
+ * @return {Bool}
+ */
+ function value_compare( expected, actual ) {
+ return ( ( _.isArray( actual ) && -1 !== actual.indexOf( expected ) ) || expected == actual );
+ };
+
+ /**
+ * Underscores templating utilities
+ *
+ * @since 3.17.0
+ * @version 3.27.0
+ */
+ _.mixin( {
+
+ /**
+ * Determine if two values are equal and output checked attribute if they are.
+ *
+ * Useful for templating checkboxes & radio elements
+ * like WP Core PHP checked() but in JS.
+ *
+ * @since 3.17.0
+ * @since 3.17.2 Unknown.
+ *
+ * @param {Mixed} expected Expected element value.
+ * @param {Mixed} actual Actual element value.
+ * @return {String}
+ */
+ checked: function( expected, actual ) {
+ if ( value_compare( expected, actual ) ) {
+ return ' checked="checked"';
+ }
+ return '';
+ },
+
+ /**
+ * Recursively clone an object via _.clone().
+ *
+ * @since 3.17.7
+ *
+ * @param {Object} obj Object to clone.
+ * @return {Object}
+ */
+ deepClone: function( obj ) {
+
+ var clone = _.clone( obj );
+
+ _.each( clone, function( val, key ) {
+ if ( ! _.isFunction( val ) && _.isObject( val ) ) {
+ clone[ key ] = _.deepClone( val );
+ };
+ } );
+
+ return clone;
+
+ },
+
+ /**
+ * Retrieve the wp.editor instance.
+ *
+ * Uses `wp.oldEditor` (when available) which was added in WordPress 5.0.
+ *
+ * Falls back to `wp.editor()` which will usually be the same as `wp.oldEditor` unless
+ * the `@wordpress/editor` module has been loaded by another plugin or a theme.
+ *
+ * @since 3.37.11
+ *
+ * @return {Object}
+ */
+ getEditor: function() {
+
+ if ( undefined !== wp.oldEditor ) {
+
+ var ed = wp.oldEditor;
+
+ // Inline scripts added by WordPress are not ported to `wp.oldEditor`, see https://github.com/WordPress/WordPress/blob/641c632b0c9fde4e094b217f50749984ca43a2fa/wp-includes/class-wp-editor.php#L977.
+ if ( undefined !== wp.editor && undefined !== wp.editor.getDefaultSettings ) {
+ ed.getDefaultSettings = wp.editor.getDefaultSettings;
+ }
+
+ return ed;
+
+ } else if ( undefined !== wp.editor && undefined !== wp.editor.autop ){
+
+ return wp.editor;
+
+ }
+
+ },
+
+ /**
+ * Strips IDs & Parent References from quizzes and all quiz questions.
+ *
+ * @since 3.24.0
+ * @since 3.27.0 Unknown.
+ * @since 5.4.0 Use author id instead of the question author object.
+ *
+ * @param {Object} quiz Raw quiz object (not a model).
+ * @return {Object}
+ */
+ prepareQuizObjectForCloning: function( quiz ) {
+
+ delete quiz.id;
+ delete quiz.lesson_id;
+
+ _.each( quiz.questions, function( question ) {
+
+ question = _.prepareQuestionObjectForCloning( question );
+
+ } );
+
+ // Use author id instead of the quiz author object.
+ quiz = _.prepareExistingPostObjectDataForAddingOrCloning( quiz );
+
+ return quiz;
+
+ },
+
+ /**
+ * Strips IDs & Parent References from a question.
+ *
+ * @since 3.27.0
+ * @since 5.4.0 Use author id instead of the question author object.
+ *
+ * @param {Object} question Raw question object (not a model).
+ * @return {Object}
+ */
+ prepareQuestionObjectForCloning: function( question ) {
+
+ delete question.id;
+ delete question.parent_id;
+
+ if ( question.image && _.isObject( question.image ) ) {
+ question.image._forceSync = true;
+ }
+
+ if ( question.choices ) {
+
+ _.each( question.choices, function( choice ) {
+
+ delete choice.question_id;
+ delete choice.id;
+ if ( 'image' === choice.choice_type && _.isObject( choice.choice ) ) {
+ choice.choice._forceSync = true;
+ }
+
+ } );
+
+ }
+
+ // Use author id instead of the question author object.
+ question = _.prepareExistingPostObjectDataForAddingOrCloning( question );
+
+ return question;
+
+ },
+
+ /**
+ * Strips IDs & Parent References from assignments and all assignment tasks.
+ *
+ * @since 5.4.0
+ *
+ * @param {Object} assignment Raw assignment object (not a model).
+ * @return {Object}
+ */
+ prepareAssignmentObjectForCloning: function( assignment ) {
+
+ delete assignment.id;
+ delete assignment.lesson_id;
+
+ // Clone tasks.
+ if ( 'tasklist' === assignment.assignment_type ) {
+ _.each( assignment.tasks, function( task ) {
+ delete task.id;
+ delete task.assignment_id;
+ } );
+ }
+
+ // Use author id instead of the quiz author object.
+ assignment = _.prepareExistingPostObjectDataForAddingOrCloning( assignment );
+
+ return assignment;
+
+ },
+
+ /**
+ * Prepare post object data for adding or cloning.
+ *
+ * Use author id instead of the post type author object.
+ *
+ * @since 5.4.0
+ *
+ * @param {Object} quiz Raw post object (not a model).
+ * @return {Object}
+ */
+ prepareExistingPostObjectDataForAddingOrCloning: function( post_data ) {
+
+ if ( post_data.author && _.isObject( post_data.author ) && post_data.author.id ) {
+ post_data.author = post_data.author.id;
+ }
+
+ return post_data;
+
+ },
+
+ /**
+ * Determine if two values are equal and output selected attribute if they are.
+ *
+ * Useful for templating select elements
+ * like WP Core PHP selected() but in JS.
+ *
+ *
+ * @since 3.17.0
+ * @since 3.17.2 Unknown.
+ *
+ * @param {Mixed} expected Expected element value.
+ * @param {Mixed} actual Actual element value.
+ * @return {String}
+ */
+ selected: function( expected, actual ) {
+ if ( value_compare( expected, actual ) ) {
+ return ' selected="selected"';
+ }
+ return '';
+ },
+
+ /**
+ * Generic function for stripping HTML tags from a string.
+ *
+ * @since 3.17.8
+ *
+ * @param {String} content Raw string.
+ * @param {Array} allowed_tags Array of allowed HTML tags.
+ * @return {String}
+ */
+ stripFormatting: function( content, allowed_tags ) {
+
+ if ( ! allowed_tags ) {
+ allowed_tags = [ 'b', 'i', 'u', 'strong', 'em' ];
+ }
+
+ var $html = $( '' + content + '
' );
+
+ $html.find( '*' ).not( allowed_tags.join( ',' ) ).each( function( ) {
+
+ $( this ).replaceWith( this.innerHTML );
+
+ } );
+
+ return $html.html();
+
+ },
+
+ } );
+
+ Backbone.pubSub = _.extend( {}, Backbone.Events );
+
+ $( document ).trigger( 'llms-builder-pre-init' );
+
+ window.llms_builder.questions = window.llms_builder.construct.get_collection( 'QuestionTypes', window.llms_builder.questions );
+
+ var CourseModel = window.llms_builder.construct.get_model( 'Course', window.llms_builder.course );
+ window.llms_builder.CourseModel = CourseModel;
+
+ window.llms_builder.sync = new Sync( CourseModel, window.llms_builder.sync );
+
+ var Course = new CourseView( {
+ model: CourseModel,
+ } );
+
+ var Sidebar = new SidebarView( {
+ CourseView: Course
+ } );
+
+ $( document ).trigger( 'llms-builder-init', {
+ course: Course,
+ sidebar: Sidebar,
+ } );
+
+ /**
+ * Do deep linking to Lesson / Quiz / Assignments.
+ *
+ * Hash should be in the form of #lesson:{lesson_id}:{subtab}
+ * subtab can be either "quiz" or "assignment". If none found assumes the "lesson" tab.
+ *
+ * @since 3.27.0
+ * @since 3.30.1 Wait for wp.editor & window.tinymce to load before opening deep link tabs.
+ * @since 3.37.11 Use `_.getEditor()` helper when checking for the presence of `wp.editor`.
+ */
+ if ( window.location.hash ) {
+
+ var hash = window.location.hash;
+ if ( -1 === hash.indexOf( '#lesson:' ) ) {
+ return;
+ }
+ var parts = hash.replace( '#lesson:', '' ).split( ':' ),
+ $lesson = $( '#llms-lesson-' + parts[0] );
+
+ if ( $lesson.length ) {
+
+ LLMS.wait_for( function() {
+ return ( undefined !== _.getEditor() && undefined !== window.tinymce );
+ }, function() {
+ $lesson.closest( '.llms-builder-item.llms-section' ).find( 'a.llms-action-icon.expand' ).trigger( 'click' );
+ var subtab = parts[1] ? parts[1] : 'lesson';
+ $( '#llms-lesson-' + parts[0] ).find( 'a.llms-action-icon.edit-' + subtab ).trigger( 'click' );
+ } );
+
+ }
+
+ }
+
+ } );
+
+define("main", function(){});
+
+}(jQuery));
+
+//# sourceMappingURL=../maps/js/llms-builder.js.map
diff --git a/assets/js/llms-builder.min.js b/assets/js/llms-builder.min.js
new file mode 100644
index 0000000000..fe3aa6968f
--- /dev/null
+++ b/assets/js/llms-builder.min.js
@@ -0,0 +1,6 @@
+!function(e){var t,i,n;!function(e){function s(e,t){return y.call(e,t)}function o(e,t){var i,n,s,o,l,r,a,c,d,u,h,_,p=t&&t.split("/"),g=v.map,m=g&&g["*"]||{};if(e){for(e=e.split("/"),l=e.length-1,v.nodeIdCompat&&S.test(e[l])&&(e[l]=e[l].replace(S,"")),"."===e[0].charAt(0)&&p&&(_=p.slice(0,p.length-1),e=_.concat(e)),d=0;d0&&(e.splice(d-1,2),d-=2)}e=e.join("/")}if((p||m)&&g){for(i=e.split("/"),d=i.length;d>0;d-=1){if(n=i.slice(0,d).join("/"),p)for(u=p.length;u>0;u-=1)if((s=g[p.slice(0,u).join("/")])&&(s=s[n])){o=s,r=d;break}if(o)break;!a&&m&&m[n]&&(a=m[n],c=d)}!o&&a&&(o=a,r=c),o&&(i.splice(0,r,o),e=i.join("/"))}return e}function l(t,i){return function(){var n=k.call(arguments,0);return"string"!=typeof n[0]&&1===n.length&&n.push(null),p.apply(e,n.concat([t,i]))}}function r(e){return function(t){return o(t,e)}}function a(e){return function(t){f[e]=t}}function c(t){if(s(b,t)){var i=b[t];delete b[t],w[t]=!0,_.apply(e,i)}if(!s(f,t)&&!s(w,t))throw new Error("No "+t);return f[t]}function d(e){var t,i=e?e.indexOf("!"):-1;return i>-1&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function u(e){return e?d(e):[]}function h(e){return function(){return v&&v.config&&v.config[e]||{}}}var _,p,g,m,f={},b={},v={},w={},y=Object.prototype.hasOwnProperty,k=[].slice,S=/\.js$/;g=function(e,t){var i,n=d(e),s=n[0],l=t[1];return e=n[1],s&&(s=o(s,l),i=c(s)),s?e=i&&i.normalize?i.normalize(e,r(l)):o(e,l):(e=o(e,l),n=d(e),s=n[0],e=n[1],s&&(i=c(s))),{f:s?s+"!"+e:e,n:e,pr:s,p:i}},m={require:function(e){return l(e)},exports:function(e){var t=f[e];return void 0!==t?t:f[e]={}},module:function(e){return{id:e,uri:"",exports:f[e],config:h(e)}}},_=function(t,i,n,o){var r,d,h,_,p,v,y,k=[],S=typeof n;if(o=o||t,v=u(o),"undefined"===S||"function"===S){for(i=!i.length&&n.length?["require","exports","module"]:i,p=0;p3&&void 0!==arguments[3]?arguments[3]:10;if(s(t)&&n(i))if("function"==typeof o)if("number"==typeof l){var r={callback:o,priority:l,namespace:i};if(e[t]){for(var a=e[t].handlers,c=0;cl);)c++;a.splice(c,0,r),(e.__current||[]).forEach(function(e){e.name===t&&e.currentIndex>=c&&e.currentIndex++})}else e[t]={handlers:[r],runs:0};"hookAdded"!==t&&k("hookAdded",t,i,o,l)}else console.error("If specified, the hook priority must be a number.");else console.error("The hook callback must be a function.")}},l=function(e,t){return function(i,o){if(s(i)&&(t||n(o))){if(!e[i])return 0;var l=0;if(t)l=e[i].handlers.length,e[i]={runs:e[i].runs,handlers:[]};else for(var r=e[i].handlers,a=r.length-1;a>=0;a--)!function(t){r[t].namespace===o&&(r.splice(t,1),l++,(e.__current||[]).forEach(function(e){e.name===i&&e.currentIndex>=t&&e.currentIndex--}))}(a);return"hookRemoved"!==i&&k("hookRemoved",i,o),l}}},r=function(e){return function(t){return t in e}},a=function(e,t){return function(i){e[i]||(e[i]={handlers:[],runs:0}),e[i].runs++;for(var n=e[i].handlers,s=arguments.length,o=new Array(s>1?s-1:0),l=1;l li, tbody > tr > td":"_listItem_onMousedown","dblclick > li, tbody > tr > td":"_listItem_onDoubleClick",click:"_listBackground_onClick","click ul.collection-view, table.collection-view":"_listBackground_onClick",keydown:"_onKeydown"},spawnMessages:{focus:"focus"},passMessages:{"*":"."},initializationOptions:[{collection:null},{modelView:null},{modelViewOptions:{}},{itemTemplate:null},{itemTemplateFunction:null},{selectable:!0},{clickToSelect:!0},{selectableModelsFilter:null},{visibleModelsFilter:null},{sortableModelsFilter:null},{selectMultiple:!1},{clickToToggle:!1},{processKeyEvents:!0},{sortable:!1},{sortableOptions:null},{reuseModelViews:!0},{detachedRendering:!1},{emptyListCaption:null}],initialize:function(e){t.ViewOptions.add(this,"initializationOptions"),this.setOptions(e),this.collection||(this.collection=new t.Collection),this._hasBeenRendered=!1,this._isBackboneCourierAvailable()&&t.Courier.add(this),this.$el.data("view",this),this.$el.addClass("collection-view collection-list"),this.selectable&&this.$el.addClass("selectable"),this.selectable&&this.processKeyEvents&&this.$el.attr("tabindex",0),this.selectedItems=[],this._updateItemTemplate(),this.collection&&this._registerCollectionEvents(),this.viewManager=new ChildViewContainer},_onOptionsChanged:function(t,i){var n=this,s=!1;e.each(e.keys(t),function(l){var r=t[l],a=i[l];switch(l){case"collection":r!==a&&(n.stopListening(a),n._registerCollectionEvents());break;case"selectMultiple":!r&&n.selectedItems.length>1&&n.setSelectedModel(e.first(n.selectedItems),{by:"cid"});break;case"selectable":!r&&n.selectedItems.length>0&&n.setSelectedModels([]),r&&this.processKeyEvents?n.$el.attr("tabindex",0):n.$el.removeAttr("tabindex",0);break;case"sortable":t.sortable?n._setupSortable():n.$el.sortable("destroy");break;case"selectableModelsFilter":n.reapplyFilter("selectableModels");break;case"sortableOptions":n.$el.sortable("destroy"),n._setupSortable();break;case"sortableModelsFilter":n.reapplyFilter("sortableModels");break;case"visibleModelsFilter":n.reapplyFilter("visibleModels");break;case"itemTemplate":n._updateItemTemplate();break;case"processKeyEvents":r&&this.selectable?n.$el.attr("tabindex",0):n.$el.removeAttr("tabindex",0);break;case"modelView":n.viewManager.each(function(e){n.viewManager.remove(e),e.remove()})}e.contains(o,l)&&(s=!0)}),this._hasBeenRendered&&s&&this.render()},setOption:function(e,t){var i={};i[e]=t,this.setOptions(i)},getSelectedModel:function(t){return this.selectedItems.length?e.first(this.getSelectedModels(t)):null},getSelectedModels:function(t){var n=this;t=e.extend({},{by:"model"},t);var s=t.by,o=[];switch(s){case"id":e.each(this.selectedItems,function(e){o.push(n.collection.get(e).id)});break;case"cid":o=o.concat(this.selectedItems);break;case"offset":var l=0;this._getVisibleItemEls().each(function(){i(this).is(".selected")&&o.push(l),l++});break;case"model":e.each(this.selectedItems,function(e){o.push(n.collection.get(e))});break;case"view":e.each(this.selectedItems,function(e){o.push(n.viewManager.findByModel(n.collection.get(e)))});break;default:throw new Error("Invalid referenceBy option: "+s)}return o},setSelectedModels:function(t,n){if(!e.isArray(t))throw"Invalid parameter value";if(this.selectable||!(t.length>0)){n=e.extend({},{silent:!1,by:"model"},n);var s=n.by,o=[];switch(s){case"cid":o=t;break;case"id":this.collection.each(function(i){e.contains(t,i.id)&&o.push(i.cid)});break;case"model":o=e.pluck(t,"cid");break;case"view":e.each(t,function(e){o.push(e.model.cid)});break;case"offset":var l=0;this._getVisibleItemEls().each(function(){var n=i(this);e.contains(t,l)&&o.push(n.attr("data-model-cid")),l++});break;default:throw new Error("Invalid referenceBy option: "+s)}var r=this.getSelectedModels(),a=e.clone(this.selectedItems);this.selectedItems=this._convertStringsToInts(o),this._validateSelection();var c=this.getSelectedModels();this._containSameElements(a,this.selectedItems)||(this._addSelectedClassToSelectedItems(a),n.silent||(this._isBackboneCourierAvailable()?this.spawn("selectionChanged",{selectedModels:c,oldSelectedModels:r}):this.trigger("selectionChanged",c,r)),this.updateDependentControls())}},setSelectedModel:function(e,t){e||0===e?this.setSelectedModels([e],t):this.setSelectedModels([],t)},getView:function(t,n){switch(n=e.extend({},{by:"model"},n),n.by){case"id":case"cid":var s=this.collection.get(t)||null;return s&&this.viewManager.findByModel(s);case"offset":var o=this._getVisibleItemEls();return i(o.get(t));case"model":return this.viewManager.findByModel(t);default:throw new Error("Invalid referenceBy option: "+referenceBy)}},render:function(){this._hasBeenRendered=!0,this.selectable&&this._saveSelection();var t;t=this._getContainerEl();var i=this.viewManager;this.viewManager=new ChildViewContainer,i.each(function(e){this.reuseModelViews&&this.collection.get(e.model.cid)?e.$el.detach():e.remove()},this),t.empty();var n;this.detachedRendering&&(n=document.createDocumentFragment()),this.collection.each(function(s){var o=i.findByModelCid(s.cid);this.reuseModelViews&&!e.isUndefined(o)||(o=this._createNewModelView(s,this._getModelViewOptions(s))),this._insertAndRenderModelView(o,n||t)},this),this.detachedRendering&&t.append(n),this.sortable&&this._setupSortable(),this._showEmptyListCaptionIfAppropriate(),this._isBackboneCourierAvailable()?this.spawn("render"):this.trigger("render"),this.selectable&&(this._restoreSelection(),this.updateDependentControls()),this.forceRerenderOnNextSortEvent=!1},_showEmptyListCaptionIfAppropriate:function(){if(this._removeEmptyListCaption(),this.emptyListCaption){if(0===this._getVisibleItemEls().length){var t;t=e.isFunction(this.emptyListCaption)?this.emptyListCaption():this.emptyListCaption;var n,s=i(""+t+" ");n=this._isRenderedAsList()?s.wrapAll(" ").parent().css(l):s.wrapAll(" ").parent().parent().css(l),this._getContainerEl().append(n)}}},_removeEmptyListCaption:function(){this._isRenderedAsList()?this._getContainerEl().find("> li > var.empty-list-caption").parent().remove():this._getContainerEl().find("> tr > td > var.empty-list-caption").parent().parent().remove()},_insertAndRenderModelView:function(t,i,n){var s=this._wrapModelView(t);if(11===i.nodeType)i.appendChild(s.get(0));else{var o=i.children().length;!e.isUndefined(n)&&n>=0&&no&&(this.forceRerenderOnNextSortEvent=!0),i.append(s))}this.viewManager.add(t),!1===t.render()&&(s.hide(),s.addClass("not-visible"));var l=!1;e.isFunction(this.visibleModelsFilter)&&(l=!this.visibleModelsFilter(t.model)),1===s.children().length?s.toggle(!l):t.$el.toggle(!l),s.toggleClass("not-visible",l),!l&&this.emptyListCaption&&this._removeEmptyListCaption()},updateDependentControls:function(){this._isBackboneCourierAvailable()?this.spawn("updateDependentControls",{selectedModels:this.getSelectedModels()}):this.trigger("updateDependentControls",this.getSelectedModels())},remove:function(){this.viewManager.each(function(e){e.remove()}),t.View.prototype.remove.apply(this,arguments)},reapplyFilter:function(t){var i=this;if(!e.contains(["selectableModels","sortableModels","visibleModels"],t))throw new Error("Invalid filter identifier supplied to reapplyFilter: "+t);switch(t){case"visibleModels":i.viewManager.each(function(e){var t=i.visibleModelsFilter&&!i.visibleModelsFilter.call(i,e.model);e.$el.toggleClass("not-visible",t),i._modelViewHasWrapperLI(e)?e.$el.closest("li").toggleClass("not-visible",t).toggle(!t):e.$el.toggle(!t)}),this._showEmptyListCaptionIfAppropriate();break;case"sortableModels":i.$el.sortable("destroy"),i.viewManager.each(function(e){var t=i.sortableModelsFilter&&!i.sortableModelsFilter.call(i,e.model);e.$el.toggleClass("not-sortable",t),i._modelViewHasWrapperLI(e)&&e.$el.closest("li").toggleClass("not-sortable",t)}),i._setupSortable();break;case"selectableModels":i.viewManager.each(function(e){var t=i.selectableModelsFilter&&!i.selectableModelsFilter.call(i,e.model);e.$el.toggleClass("not-selectable",t),i._modelViewHasWrapperLI(e)&&e.$el.closest("li").toggleClass("not-selectable",t)}),i._validateSelection()}},_removeModelView:function(e){this.selectable&&this._saveSelection(),this.viewManager.remove(e),this._modelViewHasWrapperLI(e)&&e.$el.parent().remove(),e.remove(),this.selectable&&this._restoreSelection(),this._showEmptyListCaptionIfAppropriate()},_validateSelectionAndRender:function(){this._validateSelection(),this.render()},_registerCollectionEvents:function(){this.listenTo(this.collection,"add",function(e){var t;this._hasBeenRendered&&(t=this._createNewModelView(e,this._getModelViewOptions(e)),this._insertAndRenderModelView(t,this._getContainerEl(),this.collection.indexOf(e))),this._isBackboneCourierAvailable()?this.spawn("add",t):this.trigger("add",t)}),this.listenTo(this.collection,"remove",function(e){var t;this._hasBeenRendered&&(t=this.viewManager.findByModelCid(e.cid),this._removeModelView(t)),this._isBackboneCourierAvailable()?this.spawn("remove"):this.trigger("remove")}),this.listenTo(this.collection,"reset",function(){this._hasBeenRendered&&this.render(),this._isBackboneCourierAvailable()?this.spawn("reset"):this.trigger("reset")}),this.listenTo(this.collection,"sort",function(e,t){this._hasBeenRendered&&(!0!==t.add||this.forceRerenderOnNextSortEvent)&&this.render(),this._isBackboneCourierAvailable()?this.spawn("sort"):this.trigger("sort")})},_getContainerEl:function(){if(this._isRenderedAsTable()){var e=this.$el.find("> tbody");if(e.length>0)return e}return this.$el},_getClickedItemId:function(e){var t=null,n=i(e.currentTarget);if(n.closest(".collection-view").get(0)===this.$el.get(0)){var s=n.closest("[data-model-cid]");return s.length>0&&(t=s.attr("data-model-cid"),i.isNumeric(t)&&(t=parseInt(t,10))),t}},_updateItemTemplate:function(){var t;if(this.itemTemplate){if(0===i(this.itemTemplate).length)throw"Could not find item template from selector: "+this.itemTemplate;t=i(this.itemTemplate).html()}else t=this.$(".item-template").html();t&&(this.itemTemplateFunction=e.template(t))},_validateSelection:function(){var t=e.pluck(this.collection.models,"cid");this.selectedItems=e.intersection(t,this.selectedItems),e.isFunction(this.selectableModelsFilter)&&(this.selectedItems=e.filter(this.selectedItems,function(e){return this.selectableModelsFilter.call(this,this.collection.get(e))},this))},_saveSelection:function(){if(!this.selectable)throw"Attempt to save selection on non-selectable list";this.savedSelection={items:e.clone(this.selectedItems),offset:this.getSelectedModel({by:"offset"})}},_restoreSelection:function(){if(!this.savedSelection)throw"Attempt to restore selection but no selection has been saved!";this.setSelectedModels([],{silent:!0}),this.savedSelection.items.length>0&&(this.setSelectedModels(this.savedSelection.items,{by:"cid",silent:!0}),0===this.selectedItems.length&&this.setSelectedModel(this.savedSelection.offset,{by:"offset"}),this.selectedItems.length!==this.savedSelection.items.length&&(this._isBackboneCourierAvailable()?this.spawn("selectionChanged",{selectedModels:this.getSelectedModels(),oldSelectedModels:[]}):this.trigger("selectionChanged",this.getSelectedModels(),[])))},_addSelectedClassToSelectedItems:function(t){e.isUndefined(t)&&(t=[]);var i=t;i=e.without(i,this.selectedItems),e.each(i,function(e){this._getContainerEl().find("[data-model-cid="+e+"]").removeClass("selected"),this._isRenderedAsList()&&this._getContainerEl().find("li[data-model-cid="+e+"] > *").removeClass("selected")},this);var n=this.selectedItems;n=e.without(n,t),e.each(n,function(e){this._getContainerEl().find("[data-model-cid="+e+"]").addClass("selected"),this._isRenderedAsList()&&this._getContainerEl().find("li[data-model-cid="+e+"] > *").addClass("selected")},this)},_reorderCollectionBasedOnHTML:function(){var e=this;this._getContainerEl().children().each(function(){var t=i(this).attr("data-model-cid");if(t){var n=e.collection.get(t);n&&(e.collection.remove(n,{silent:!0}),e.collection.add(n,{silent:!0,sort:!e.collection.comparator}))}}),this._isBackboneCourierAvailable()?this.spawn("reorder"):this.collection.trigger("reorder"),this.collection.comparator&&this.collection.sort()},_getModelViewConstructor:function(e){return this.modelView||s},_getModelViewOptions:function(t){var i=this.modelViewOptions;return e.isFunction(i)&&(i=i(t)),e.extend({model:t},i)},_createNewModelView:function(t,i){var n=this._getModelViewConstructor(t);if(e.isUndefined(n))throw"Could not find modelView constructor for model";var s=new n(i);return s.collectionListView=s.collectionView=this,s},_wrapModelView:function(t){var i,n=this;return this._isRenderedAsTable()?(i=t.$el,t.$el.attr("data-model-cid",t.model.cid)):this._isRenderedAsList()&&(t.$el.is("li")?(i=t.$el,t.$el.attr("data-model-cid",t.model.cid)):i=t.$el.wrapAll(" ").parent()),e.isFunction(this.sortableModelsFilter)&&(this.sortableModelsFilter.call(n,t.model)||(i.addClass("not-sortable"),t.$el.addClass("not-selectable"))),e.isFunction(this.selectableModelsFilter)&&(this.selectableModelsFilter.call(n,t.model)||(i.addClass("not-selectable"),t.$el.addClass("not-selectable"))),i},_convertStringsToInts:function(t){return e.map(t,function(t){if(!e.isString(t))return t;var i=parseInt(t,10);return i==t?i:t})},_containSameElements:function(t,i){return t.length==i.length&&e.intersection(t,i).length==t.length},_isRenderedAsTable:function(){return"table"===this.$el.prop("tagName").toLowerCase()},_isRenderedAsList:function(){return!this._isRenderedAsTable()},_modelViewHasWrapperLI:function(e){return this._isRenderedAsList()&&!e.$el.is("li")},_getVisibleItemEls:function(){return this._getContainerEl().find("> [data-model-cid]:not(.not-visible)")},_charCodes:{upArrow:38,downArrow:40},_isBackboneCourierAvailable:function(){return!e.isUndefined(t.Courier)},_setupSortable:function(){var t=e.extend({axis:"y",distance:10,forcePlaceholderSize:!0,items:this._isRenderedAsTable()?"> tbody > tr:not(.not-sortable)":"> li:not(.not-sortable)",start:e.bind(this._sortStart,this),change:e.bind(this._sortChange,this),stop:e.bind(this._sortStop,this),receive:e.bind(this._receive,this),over:e.bind(this._over,this)},e.result(this,"sortableOptions"));this.$el=this.$el.sortable(t)},_sortStart:function(e,t){var i=this.collection.get(t.item.attr("data-model-cid"));this._isBackboneCourierAvailable()?this.spawn("sortStart",{modelBeingSorted:i}):this.trigger("sortStart",i)},_sortChange:function(e,t){var i=this.collection.get(t.item.attr("data-model-cid"));this._isBackboneCourierAvailable()?this.spawn("sortChange",{modelBeingSorted:i}):this.trigger("sortChange",i)},_sortStop:function(e,t){var i=this.collection.get(t.item.attr("data-model-cid")),n=this._getContainerEl(),s=n.children().index(t.item);-1==s&&i&&this.collection.remove(i),i&&(this._reorderCollectionBasedOnHTML(),this.updateDependentControls(),this._isBackboneCourierAvailable()?this.spawn("sortStop",{modelBeingSorted:i,newIndex:s}):this.trigger("sortStop",i,s))},_receive:function(e,t){var i=t.sender,n=i.data("view");if(n&&n.collection){var s=this._getContainerEl().children().index(t.item),o=n.collection.get(t.item.attr("data-model-cid"));n.collection.remove(o),this.collection.add(o,{at:s}),o.collection=this.collection,this.setSelectedModel(o)}},_over:function(e,t){this._getContainerEl().find("> var.empty-list-caption").hide()},_onKeydown:function(e){if(!this.processKeyEvents)return!0;var t=!1;if(1==this.getSelectedModels({by:"offset"}).length){var i=this.getSelectedModel({by:"offset"});e.which===this._charCodes.upArrow&&0!==i?(this.setSelectedModel(i-1,{by:"offset"}),t=!0):e.which===this._charCodes.downArrow&&i!==this.collection.length-1&&(this.setSelectedModel(i+1,{by:"offset"}),t=!0)}return!t},_listItem_onMousedown:function(t){var i=this._getClickedItemId(t);if(i){var n=this.collection.get(i);if(this._isBackboneCourierAvailable()){var s={clickedModel:n,metaKeyPressed:t.ctrlKey||t.metaKey};e.each(["preventDefault","stopPropagation","stopImmediatePropagation"],function(e){s[e]=function(){t[e]()}}),this.spawn("click",s)}else this.trigger("click",n)}if(this.selectable&&this.clickToSelect)if(i){if(e.isFunction(this.selectableModelsFilter)&&!this.selectableModelsFilter.call(this,this.collection.get(i)))return;if(this.selectMultiple&&t.shiftKey){var o=-1;this.selectedItems.length>0&&this.collection.find(function(t){return o++,e.contains(this.selectedItems,t.cid)},this);var l=-1;this.collection.find(function(e){return l++,e.cid==i},this);for(var r=-1==o?l:o,a=Math.min(l,r),c=Math.max(l,r),d=[],u=a;u<=c;u++)d.push(this.collection.at(u).cid);if(this.setSelectedModels(d,{by:"cid"}),document.selection&&document.selection.empty)document.selection.empty();else if(window.getSelection){var h=window.getSelection();h&&h.removeAllRanges&&h.removeAllRanges()}}else(this.selectMultiple||e.contains(this.selectedItems,i))&&(this.clickToToggle||t.metaKey||t.ctrlKey)?e.contains(this.selectedItems,i)?this.setSelectedModels(e.without(this.selectedItems,i),{by:"cid"}):this.setSelectedModels(e.union(this.selectedItems,[i]),{by:"cid"}):this.setSelectedModels([i],{by:"cid"})}else this.setSelectedModels([])},_listItem_onDoubleClick:function(e){var t=this._getClickedItemId(e);if(t){var i=this.collection.get(t);this._isBackboneCourierAvailable()?this.spawn("doubleClick",{clickedModel:i,metaKeyPressed:e.ctrlKey||e.metaKey}):this.trigger("doubleClick",i)}},_listBackground_onClick:function(e){this.selectable&&this.clickToSelect&&i(e.target).is(".collection-view")&&this.setSelectedModels([])}},{setDefaultModelViewConstructor:function(e){s=e}}),t.ViewOptions={},t.ViewOptions.add=function(t,i){e.isUndefined(i)&&(i="options"),t.setOptions=function(t){var s=this,o={},l={},r=e.result(this,i);if(!e.isUndefined(r)){var a=n(r);e.each(a,function(i,n){var r=i.required,a=i.defaultValue;if(r){if((!t||!e.contains(e.keys(t),n))&&e.isUndefined(s[n]))throw new Error('Required option "'+n+'" was not supplied.');if(t&&e.contains(e.keys(t),n)&&e.isUndefined(t[n]))throw new Error('Required option "'+n+'" can not be set to undefined.')}if(t&&n in t&&!e.isUndefined(t[n])){var c=s[n],d=t[n];e.isUndefined(c)||c===d||(l[n]=c,o[n]=d),s[n]=d}else e.isUndefined(s[n])&&(s[n]=a)})}e.keys(o).length>0&&(e.isFunction(s.onOptionsChanged)?s.onOptionsChanged(o,l):e.isFunction(s._onOptionsChanged)&&s._onOptionsChanged(o,l))},t.getOptions=function(){var t=e.result(this,i);if(e.isUndefined(t))return{};var s=n(t),o=e.keys(s);return e.pick(this,o)}},ChildViewContainer=function(e,t){var i=function(e){this._views={},this._indexByModel={},this._indexByCustom={},this._updateLength(),t.each(e,this.add,this)};t.extend(i.prototype,{add:function(e,t){var i=e.cid;this._views[i]=e,e.model&&(this._indexByModel[e.model.cid]=i),t&&(this._indexByCustom[t]=i),this._updateLength()},findByModel:function(e){return this.findByModelCid(e.cid)},findByModelCid:function(e){var t=this._indexByModel[e];return this.findByCid(t)},findByCustom:function(e){var t=this._indexByCustom[e];return this.findByCid(t)},findByIndex:function(e){return t.values(this._views)[e]},findByCid:function(e){return this._views[e]},findIndexByCid:function(e){var i=-1;return t.find(this._views,function(t){if(i++,t.model.cid==e)return t})?i:-1},remove:function(e){var i=e.cid;e.model&&delete this._indexByModel[e.model.cid],t.any(this._indexByCustom,function(e,t){if(e===i)return delete this._indexByCustom[t],!0},this),delete this._views[i],this._updateLength()},call:function(e){this.apply(e,t.tail(arguments))},apply:function(e,i){t.each(this._views,function(n){t.isFunction(n[e])&&n[e].apply(n,i||[])})},_updateLength:function(){this.length=t.size(this._views)}});var n=["forEach","each","map","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","toArray","first","initial","rest","last","without","isEmpty","pluck"];return t.each(n,function(e){i.prototype[e]=function(){var i=t.values(this._views),n=[i].concat(t.toArray(arguments));return t[e].apply(t,n)}}),i}(0,e),t.CollectionView}),function(){var e=[],t=function(t){_.isEmpty(t._unsavedChanges)?e=_.filter(e,function(e){return t.cid!=e.cid}):_.findWhere(e,{cid:t.cid})||e.push(t)},i=function(t){var i,n=_.rest(arguments),s=function(e,t){return _.isBoolean(t)?t:(_.isString(t)?e[t]:t).apply(e,n)};return _.each(e,function(e){!i&&s(e,e._unsavedConfig[t])&&(i=e._unsavedConfig.prompt)}),i};Backbone.History.prototype.navigate=_.wrap(Backbone.History.prototype.navigate,function(e,t,n){var s=i("unloadRouterPrompt",t,n);s?confirm(s+" \n\nAre you sure you want to leave this page?")&&e.call(this,t,n):e.call(this,t,n)}),window.onbeforeunload=function(e){return i("unloadWindowPrompt",e)},_.extend(Backbone.Model.prototype,{unsaved:{},_trackingChanges:!1,_originalAttrs:{},_unsavedChanges:{},startTracking:function(){return this._unsavedConfig=_.extend({},{prompt:"You have unsaved changes!",unloadRouterPrompt:!1,unloadWindowPrompt:!1},this.unsaved||{}),this._trackingChanges=!0,this._resetTracking(),this._triggerUnsavedChanges(),this},stopTracking:function(){return this._trackingChanges=!1,this._originalAttrs={},this._unsavedChanges={},this._triggerUnsavedChanges(),this},restartTracking:function(){return this._resetTracking(),this._triggerUnsavedChanges(),this},resetAttributes:function(){if(this._trackingChanges)return this.attributes=this._originalAttrs,this._resetTracking(),this._triggerUnsavedChanges(),this},unsavedAttributes:function(e){if(!e)return!_.isEmpty(this._unsavedChanges)&&_.clone(this._unsavedChanges);var t,i=!1,n=this._unsavedChanges;for(var s in e)_.isEqual(n[s],t=e[s])||((i||(i={}))[s]=t);return i},_resetTracking:function(){this._originalAttrs=_.deepClone(this.attributes),this._unsavedChanges={}},_triggerUnsavedChanges:function(){this.trigger("unsavedChanges",!_.isEmpty(this._unsavedChanges),_.clone(this._unsavedChanges)),this.unsaved&&t(this)}}),Backbone.Model.prototype.set=_.wrap(Backbone.Model.prototype.set,function(e,t,i,n){var s,o;return null==t?this:("object"==typeof t?(s=t,n=i):(s={})[t]=i,n||(n={}),o=e.call(this,s,n),this._trackingChanges&&!n.silent&&(_.each(s,_.bind(function(e,t){_.isEqual(this._originalAttrs[t],e)?delete this._unsavedChanges[t]:this._unsavedChanges[t]=e},this)),this._triggerUnsavedChanges()),o)}),Backbone.sync=_.wrap(Backbone.sync,function(e,t,i,n){return n||(n={}),"update"==t&&(n.success=_.wrap(n.success,_.bind(function(e,t,n,s){var o;return e&&(o=e.call(this,t,n,s)),i._trackingChanges&&(i._resetTracking(),i._triggerUnsavedChanges()),o},this))),e(t,i,n)})}(),n("vendor/backbone.trackit",function(){}),n("Models/Image",[],function(){return Backbone.Model.extend({defaults:{enabled:"no",id:"",size:"full",src:""},initialize:function(){this.startTracking()}})}),n("Models/_Relationships",[],function(){return{relationship_defaults:{parent:{},children:{}},relationships:{},init_relationships:function(e){var t=this.get_relationships();t.parent&&e&&e.parent&&this.set_parent(e.parent),_.each(t.children,function(e,t){if(!e.conditional||!0===e.conditional(this)){var i,n=this.get(t);e.lookup?i=e.lookup(n):"model"===e.type?i=window.llms_builder.construct.get_model(e.class,n):"collection"===e.type&&(i=window.llms_builder.construct.get_collection(e.class,n)),this.set(t,i),
+"model"===e.type?this._maybe_set_parent_reference(i):"collection"===e.type&&(i.parent=this,i.each(function(e){this._maybe_set_parent_reference(e)},this))}},this)},get_child_props:function(){var e=[];return _.each(this.get_relationships().children,function(t,i){t.conditional&&!0!==t.conditional(this)||e.push(i)},this),e},get_parent:function(){var e=this.get_relationships();return!!e.parent&&e.parent.reference},get_relationships:function(){return e.extend(!0,this.relationships,this.relationship_defaults)},set_parent:function(e){this.relationships.parent.reference=e},_maybe_set_parent_reference:function(e){if(e&&e.get_relationships){var t=e.get_relationships();t.parent&&t.parent.model===this.get("type")&&e.set_parent(this)}}}}),n("Models/QuestionChoice",["Models/Image","Models/_Relationships"],function(e,t){return Backbone.Model.extend(_.defaults({relationships:{parent:{model:"llms_question",type:"model"},children:{choice:{conditional:function(e){return"image"===e.get("choice_type")},class:"Image",model:"image",type:"model"}}},defaults:function(){return{id:_.uniqueId("temp_"),choice:"",choice_type:"text",correct:!1,marker:"A",question_id:"",type:"choice"}},initialize:function(e,t){this.startTracking(),this.init_relationships(t)},get_parent:function(){return this.collection.parent},get_trash_id:function(){return this.get("question_id")+":"+this.get("id")},is_selectable:function(){return this.get_parent().get("question_type").get_choice_selectable()}},t))}),n("Collections/QuestionChoices",["Models/QuestionChoice"],function(e){return Backbone.Collection.extend({model:e,initialize:function(){this.on("reorder",this.update_order),this.on("add",this.update_order),this.on("remove",this.update_order),this.on("add",this.update_correct),this.on("remove",this.update_correct),this.on("correct-update",this.update_correct)},count_correct:function(){return _.size(this.get_correct())},get_correct:function(){return this.filter(function(e){return e.get("correct")})},update_correct:function(e){if(this.parent.get("question_type").get_choice_selectable()){var t=this.without(e),i=this.parent;if("no"===i.get("multi_choices")&&_.each(t,function(e){e.set("correct",!1)}),0===this.count_correct()&&i.get("points")>0){var n=1===this.size()?this.models:t;_.first(n).set("correct",!0)}}},update_order:function(){var e=this,t=this.parent;this.each(function(i){i.set("marker",t.get("question_type").get_choice_markers()[e.indexOf(i)])})}})}),n("Models/QuestionType",[],function(){return Backbone.Model.extend({defaults:function(){return{choices:!1,clarifications:!0,default_choices:[],description:!0,icon:"question",id:"generic",image:!0,keywords:[],name:"Generic",placeholder:"",points:!0,video:!0}},get_keywords:function(){var e=this.get("name");return[e].concat(this.get("keywords")).concat(e.split(" "))},get_choice_markers:function(){return this._get_choice_option("markers")},get_choice_selectable:function(){return this._get_choice_option("selectable")},get_choice_type:function(){return this._get_choice_option("type")},get_min_choices:function(){return this._get_choice_option("min")},get_max_choices:function(){return this._get_choice_option("max")},get_multi_choices:function(){return!!this.get("choices")&&this._get_choice_option("multi")},_get_choice_option:function(e){var t=this.get("choices");return!(!t||!t[e])&&t[e]}})}),n("Models/_Utilities",[],function(){return{fields:[],set:function(e,t){if("string"==typeof e){const i=e.match(/(.*?)\[(.*?)\]/);if(i&&3===i.length){const n=i[1],s=Backbone.Model.prototype.get.call(this,n);var o=void 0!==s?s:{};o[i[2]]=t,arguments[0]=n,arguments[1]=o}}Backbone.Model.prototype.set.apply(this,arguments)},get:function(e){const t=e.match(/(.*?)\[(.*?)\]/);if(t&&3===t.length){const i=Backbone.Model.prototype.get.call(this,t[1]);if(i&&void 0!==i[t[2]])return i[t[2]]}return Backbone.Model.prototype.get.call(this,e)},get_edit_post_link:function(){return this.has_temp_id()?"":window.llms_builder.admin_url+"post.php?post="+this.get("id")+"&action=edit"},get_view_post_link:function(){return this.has_temp_id()?"":this.get("permalink")?this.get("permalink"):"publish"===this.get("status")?window.llms_builder.home_url+"?p="+this.get("id"):window.llms_builder.home_url+"?p="+this.get("id")+"&preview=true&post_type="+this.get("type")},get_settings_fields:function(){var e=this.schema||{};return window.llms_builder.schemas.get(e,this.get("type").replace("llms_",""),this)},has_temp_id:function(){return!_.isNumber(this.get("id"))&&0===this.get("id").indexOf("temp_")},init_custom_schema:function(){var e=_.filter(this.get_settings_fields(),function(e){return e.custom});_.each(e,function(e){_.each(_.flatten(e.fields),function(e){var t=[e.attribute],i=this.get("custom");e.switch_attribute&&t.push(e.switch_attribute),_.each(t,function(t){var n=e.attribute_prefix?e.attribute_prefix+t:t;i&&i[n]&&this.set(t,i[n][0])},this)},this)},this)}}}),n("Models/Question",["Models/Image","Collections/Questions","Collections/QuestionChoices","Models/QuestionType","Models/_Relationships","Models/_Utilities"],function(e,t,i,n,s,o){return Backbone.Model.extend(_.defaults({relationships:{parent:{model:"llms_quiz",type:"model"},children:{choices:{class:"QuestionChoices",model:"choice",type:"collection"},image:{class:"Image",model:"image",type:"model"},questions:{class:"Questions",conditional:function(e){var t=e.get("question_type");return"group"===(_.isString(t)?t:t.get("id"))},model:"llms_question",type:"collection"},question_type:{class:"QuestionType",lookup:function(e){return _.isString(e)?window.llms_builder.questions.get(e):e},model:"question_type",type:"model"}}},defaults:function(){return{id:_.uniqueId("temp_"),choices:[],content:"",description_enabled:"no",image:{},multi_choices:"no",menu_order:1,points:1,question_type:"generic",questions:[],parent_id:"",title:"",type:"llms_question",video_enabled:"no",video_src:"",_expanded:!1}},initialize:function(e,t){var i=this;this.startTracking(),this.init_relationships(t),!1!==this.get("question_type").choices&&(this._ensure_min_choices(),this.listenTo(this.get("choices"),"remove",function(){setTimeout(function(){i._ensure_min_choices()},0)})),this.get("question_type").get("points")||this.set("points",0),_.delay(function(e){e.on("change:points",e.get_parent().update_points,e.get_parent())},1,this)},add_choice:function(e,t){var i=this.get("question_type").get_max_choices();if(!(this.get("choices").size()>=i)){e=e||{},t=t||{},e.choice_type=this.get("question_type").get_choice_type(),e.question_id=this.get("id"),t.parent=this;var n=this.get("choices").add(e,t);Backbone.pubSub.trigger("question-add-choice",n,this)}},before_save:function(e,t){return"full"===t&&(e.question_type=this.get("question_type").get("id")),e},get_parent:function(){var e=this.get_relationships();if(e.parent){if(this.collection&&this.collection.parent)return this.collection.parent;if(e.parent.reference)return e.parent.reference}return!1},get_l10n_type:function(e){return e?LLMS.l10n.translate("questions"):LLMS.l10n.translate("question")},get_type_index:function(){var e,t=this.get("question_type").get("id");return e=this.collection.filter(function(e){var i=e.get("question_type").get("id");return"content"!==t?"content"!==i:"content"===i}),e.indexOf(this)},get_type_iterator:function(){var e=this.get_type_index();if(-1===e)return"";if("content"===this.get("question_type").get("id")){return"ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")[e]}return e+1},get_qid:function(){var e=this.get_parent_question(),t="";return e&&(t=e.get_qid()+"."),t+this.get_type_iterator()},get_parent_question:function(){return!!this.is_in_group()&&this.collection.parent},get_parent_quiz:function(){return this.get_parent()},get_points:function(){return this.get("question_type").get("points")?this.get("points"):0},get_points_percentage:function(){var e=this.get_parent().get("_points"),t=this.get("points");return 0===e?"0%":(t/e*100).toFixed(2)+"%"},is_in_group:function(){return"question"===this.collection.parent.get("type")},_ensure_min_choices:function(){for(var e=this.get("choices");e.size()"+LLMS.l10n.translate("Edit Course")+""}],[{label:LLMS.l10n.translate("Course Drip Method"),id:"course-drip",type:"heading",condition:function(){return!this.get_course()||"yes"!==this.get_course().get("lesson_drip")||!this.get_course().get("drip_method")},detail:LLMS.l10n.translate("Drip settings can be set at the course level to release course content at a specified interval, in the Restrictions settings tab.")+" "+LLMS.l10n.translate("Edit Course")+" "}],[{attribute:"drip_method",id:"drip-method",label:LLMS.l10n.translate("Drip Method"),switch_attribute:"drip_method",type:"select",condition:function(){return!this.get_course()||"yes"!==this.get_course().get("lesson_drip")||!this.get_course().get("drip_method")},options:function(){var e=[{key:"",val:LLMS.l10n.translate("None")},{key:"date",val:LLMS.l10n.translate("On a specific date")},{key:"enrollment",val:LLMS.l10n.translate("# of days after course enrollment")}];return this.get_course()&&this.get_course().get("start_date")&&e.push({key:"start",val:LLMS.l10n.translate("# of days after course start date")}),"yes"===this.get("has_prerequisite")&&e.push({key:"prerequisite",val:LLMS.l10n.translate("# of days after prerequisite lesson completion")}),e}},{attribute:"days_before_available",condition:function(){return(!this.get_course()||"yes"!==this.get_course().get("lesson_drip")||!this.get_course().get("drip_method"))&&-1!==["enrollment","start","prerequisite"].indexOf(this.get("drip_method"))},id:"days-before-available",label:LLMS.l10n.translate("# of days"),min:0,type:"number"},{attribute:"date_available",date_format:"Y-m-d",condition:function(){return(!this.get_course()||"yes"!==this.get_course().get("lesson_drip")||!this.get_course().get("drip_method"))&&"date"===this.get("drip_method")},id:"date-available",label:LLMS.l10n.translate("Date"),timepicker:"false",type:"datepicker"},{attribute:"time_available",condition:function(){return(!this.get_course()||"yes"!==this.get_course().get("lesson_drip")||!this.get_course().get("drip_method"))&&"date"===this.get("drip_method")},datepicker:"false",date_format:"h:i A",id:"time-available",label:LLMS.l10n.translate("Time"),type:"datepicker"}]]}})}),n("Models/Lesson",["Models/Quiz","Models/_Relationships","Models/_Utilities","Schemas/Lesson"],function(e,t,i,n){return Backbone.Model.extend(_.defaults({relationships:{parents:{model:"section",type:"model"},children:{quiz:{class:"Quiz",conditional:function(e){return"yes"===e.get("quiz_enabled")||!_.isEmpty(e.get("quiz"))},model:"llms_quiz",type:"model"}}},schema:n,defaults:function(){return{id:_.uniqueId("temp_"),title:LLMS.l10n.translate("New Lesson"),type:"lesson",order:this.collection?this.collection.length+1:1,parent_course:window.llms_builder.course.id,parent_section:"",edit_url:"",view_url:"",content:"",audio_embed:"",has_prerequisite:"no",require_passing_grade:"yes",require_assignment_passing_grade:"yes",video_embed:"",free_lesson:"",points:1,assignment:{},assignment_enabled:"no",quiz:{},quiz_enabled:"no",_forceSync:!1}},initialize:function(){this.init_custom_schema(),this.startTracking(),this.maybe_init_assignments(),this.init_relationships();var e=this.get("quiz");_.isEmpty(e)||e.get("lesson_id")||e.set("lesson_id",this.get("id")),window.llms.hooks.doAction("llms_lesson_model_init",this)},get_course:function(){return this.get_parent().get_course()},get_l10n_type:function(e){return e?LLMS.l10n.translate("lessons"):LLMS.l10n.translate("lesson")},get_parent:function(){var e=this.get_relationships();return e.parent&&e.parent.reference?e.parent.reference:!(!this.collection||!this.collection.parent)&&this.collection.parent},get_points_percentage:function(){var e=this.get_course().get_total_points(),t=1*this.get("points");return _.isNumber(t)||(t=0),0===e?"0%":(t/e*100).toFixed(2)+"%"},get_available_prereq_options:function(){var e=this.get_parent().collection.indexOf(this.get_parent()),t=this.collection.indexOf(this),i=[];return this.get_course().get("sections").each(function(n,s){if(s<=e){var o={label:LLMS.l10n.replace("Section %1$d: %2$s",{"%1$d":n.get("order"),"%2$s":n.get("title")}),options:[]};n.get("lessons").each(function(i,n){(s!==e||n=0)return this.collection.at(i);if(t){if("next"===e)return this.collection.first();if("prev"===e)return this.collection.last()}return!1}},t))}),n("Collections/Sections",["Models/Section"],function(e){return Backbone.Collection.extend({model:e,initialize:function(){this.on("reorder",this.update_order),this.on("add",this.update_order),this.on("remove",this.update_order)},update_order:function(){var e=this;this.each(function(t){t.set("order",e.indexOf(t)+1)})}})}),n("Collections/loader",["Collections/Lessons","Collections/QuestionChoices","Collections/Questions","Collections/QuestionTypes","Collections/Sections"],function(e,t,i,n,s){return{Lessons:e,QuestionChoices:t,Questions:i,QuestionTypes:n,Sections:s}}),n("Models/Abstract",["Models/_Relationships","Models/_Utilities"],function(e,t){return Backbone.Model.extend(_.defaults({},e,t))}),n("Models/Course",["Collections/Sections","Models/_Relationships","Models/_Utilities"],function(e,t,i){return Backbone.Model.extend(_.defaults({relationships:{children:{sections:{class:"Sections",model:"section",type:"collection"}}},defaults:function(){return{edit_url:"",sections:[],title:"New Course",type:"course",view_url:""}},initialize:function(){this.startTracking(),this.init_relationships(),Backbone.pubSub.on("add-new-section",this.add_section,this),Backbone.pubSub.on("add-new-lesson",this.add_lesson,this),Backbone.pubSub.on("lesson-search-select",this.add_existing_lesson,this)},add_existing_lesson:function(e){var t=e.data;"clone"===e.action?(delete t.id,t.quiz&&(t.quiz=_.prepareQuizObjectForCloning(t.quiz),t.quiz._questions_loaded=!0),window.llms_builder.assignments&&t.assignment&&(t.assignment=_.prepareAssignmentObjectForCloning(t.assignment))):t._forceSync=!0,delete t.order,delete t.parent_course,delete t.parent_section,t=_.prepareExistingPostObjectDataForAddingOrCloning(t),t=window.llms.hooks.applyFilters("llms_adding_existing_lesson_data",t,e.action,this),this.add_lesson(t)},add_lesson:function(e){e=e||{};var t,i={};e.parent_section?t=this.get("sections").get(e.parent_section):(t=this.get_selected_section())||(t=this.get("sections").last()),e._selected=!0,e.parent_course=this.get("id");var n=t.add_lesson(e,i);return Backbone.pubSub.trigger("new-lesson-added",n),t.set("_expanded",!0),n},add_section:function(e){e=e||{};var t=this.get("sections"),i={},n=this.get_selected_section();n&&(i.at=t.indexOf(n)+1),t.add(e,i)},get_selected_section:function(){return this.get("sections").find(function(e){return e.get("_selected")})},get_total_points:function(){var e=0;return this.get("sections").each(function(t){t.get("lessons").each(function(t){var i=t.get("points");_.isNumber(i)||(i=0),e+=1*i})}),e}},t,i))}),n("Models/loader",["Models/Abstract","Models/Course","Models/Image","Models/Lesson","Models/Question","Models/QuestionChoice","Models/QuestionType","Models/Quiz","Models/Section"],function(e,t,i,n,s,o,l,r,a){return{Abstract:e,Course:t,Image:i,Lesson:n,Question:s,QuestionChoice:o,QuestionType:l,Quiz:r,Section:a}}),n("Views/_Detachable",[],function(){return{events:{'click a[href="#llms-detach-model"]':"detach_model","click button.llms-detach-model":"detach_model"},detach_model:function(e){e&&(e.preventDefault(),e.stopPropagation());var t=LLMS.l10n.replace("Are you sure you want to detach this %s?",{"%s":this.model.get_l10n_type()});window.confirm(t)&&(this.model.collection&&this.model.collection.remove(this.model),Backbone.pubSub.trigger("model-detached",this.model),this.trigger("model-trashed",this.model))}}}),n("Views/_Editable",[],function(){return{media_lib:null,events:{"click .llms-add-image":"open_media_lib",'click a[href="#llms-edit-slug"]':"make_slug_editable",'click a[href="#llms-remove-image"]':"remove_image","change .llms-editable-select select":"on_select",'change .llms-switch input[type="checkbox"]':"toggle_switch","change .llms-editable-radio input":"on_radio_select","focusin .llms-input":"on_focus","focusout .llms-input":"on_blur","keydown .llms-input":"on_keydown",'input .llms-input[type="number"]':"on_blur","paste .llms-input[data-formatting]":"on_paste"},get_allowed_tags:function(e){return e.attr("data-formatting")?_.map(e.attr("data-formatting").split(","),function(e){return e.trim()}):["b","i","u","strong","em"]},get_content:function(e){return"INPUT"===e[0].tagName?e.val():e.attr("data-formatting")||e.hasClass("ql-editor")?_.stripFormatting(e.html(),this.get_allowed_tags(e)):e.text()},has_changed:function(t){var i=e(t.target);return i.attr("data-original-content")!==this.get_content(i)},is_valid:function(t){var i=this,n=e(t.target),s=this.get_content(n),o=n.attr("data-type");if((n.attr("required")||n.attr("data-required"))&&s.length<1)return!1;if("url"===o||"video"===o){if(!this._validate_url(this.get_content(n)))return!1}else"permalink"===o&&LLMS.Ajax.call({data:{action:"llms_builder",action_type:"get_permalink",course_id:window.llms_builder.CourseModel.get("id"),id:i.model.get("id"),title:i.model.get("title"),slug:s},beforeSend:function(){LLMS.Spinner.start(n.closest(".llms-editable-toggle-group"),"small")},success:function(e){e.permalink&&e.slug&&(i.model.set("permalink",e.permalink),i.model.set("name",e.slug),i.render())}});return!0},init_datepickers:function(){this.$el.find(".llms-editable-date input").each(function(){e(this).datetimepicker({format:e(this).attr("data-date-format")||"Y-m-d h:i A",datepicker:void 0===e(this).attr("data-date-datepicker")||"true"==e(this).attr("data-date-datepicker"),timepicker:void 0===e(this).attr("data-date-timepicker")||"true"==e(this).attr("data-date-timepicker"),onClose:function(e,t){t.blur()}})})},init_formatting_els:function(){var t=this;this.$el.find(".llms-input-formatting[data-formatting]").each(function(){var i=e(this).attr("data-formatting").split(","),n=e(this).attr("data-attribute"),s=new Quill(this,{modules:{toolbar:[i],keyboard:{bindings:{tab:{key:9,handler:function(e,t){return!0}},13:{key:13,handler:function(e,t){return s.root.blur(),!1}}}}},placeholder:e(this).attr("data-placeholder"),theme:"bubble"});s.on("text-change",function(i,o,l){t.model.set(n,t.get_content(e(s.root)))}),Backbone.pubSub.trigger("formatting-ed-init",s,e(this),t)})},init_selects:function(){this.$el.find(".llms-editable-select select").llmsSelect2({width:"100%"}).trigger("change")},on_blur:function(t){t.stopPropagation(),this.model.set("_has_focus",!1,{silent:!0});var i=this;e(t.target);this.has_changed(t)&&(i.is_valid(t)?this.save_edits(t):i.revert_edits(t))},on_focus:function(e){e.stopPropagation(),this.model.set("_has_focus",!0,{silent:!0})},on_paste:function(e){e.preventDefault(),e.stopPropagation();var t=(e.originalEvent||e).clipboardData.getData("text/plain");window.document.execCommand("insertText",!1,t)},on_select:function(t){var i,n=e(t.target),s=n.attr("multiple"),o=n.attr("name"),l=n.find("option:selected");s?(i=[],i=l.map(function(){return this.value}).get()):i=l[0].value,this.model.set(o,i)},on_radio_select:function(t){var i=e(t.target),n=i.attr("name"),s=i.val();this.model.set(n,s)},on_keydown:function(e){e.stopPropagation();var t=e.which||e.keyCode,i=e.shiftKey;switch(t){case 13:i||(e.preventDefault(),e.target.blur());break;case 27:e.preventDefault(),this.revert_edits(e),e.target.blur()}},open_media_lib:function(t){t.stopPropagation();var i=this,n=e(t.currentTarget);i.media_lib?i.media_lib.uploader.uploader.param("post_id"):(i.media_lib=wp.media.frames.file_frame=wp.media({title:LLMS.l10n.translate("Select an image"),button:{text:LLMS.l10n.translate("Use this image")},multiple:!1}),i.media_lib.on("select",function(){var e,t=n.attr("data-image-size"),s=i.media_lib.state().get("selection").first().toJSON(),o=i.model.get(n.attr("data-attribute"));e=t&&s.sizes[t]?s.sizes[t].url:s.url,o.set({id:s.id,src:e})})),i.media_lib.uploader.options.uploader.params.llms=1,i.media_lib.open()},remove_image:function(t){t.preventDefault(),this.model.get(e(t.currentTarget).attr("data-attribute")).set({id:"",src:""})},revert_edits:function(t){var i=e(t.target),n=i.attr("data-original-content");i.html(n)},save_edits:function(t){var i=e(t.target),n=this.get_content(i);this.model.set(i.attr("data-attribute"),n)
+},toggle_switch:function(t){t.stopPropagation();var i,n=e(t.target),s=n.attr("name"),o=n.attr("data-rerender");if(i=n.is(":checked")?n.attr("data-on")?n.attr("data-on"):"yes":n.attr("data-off")?n.attr("data-off"):"no",-1!==s.indexOf(".")){var l=s.split(".");"parent"===l[0]?this.model.get_parent().set(l[1],i):this.model.get(l[0]).set(l[1],i)}else this.model.set(s,i);if(this.trigger(s.replace(".","-")+"_toggle",i),!o||"yes"===o){var r=this;setTimeout(function(){r.render()},100)}},init_editor:function(t,i){i=i||{};var n=_.getEditor();n.remove(t),n.initialize(t,e.extend(!0,n.getDefaultSettings(),{mediaButtons:!0,tinymce:{toolbar1:"bold,italic,strikethrough,bullist,numlist,blockquote,hr,alignleft,aligncenter,alignright,link,unlink,wp_adv",toolbar2:"formatselect,underline,alignjustify,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help",setup:_.bind(this.on_editor_ready,this)}},i))},make_slug_editable:function(t){var i=e(t.currentTarget),n=i.prevAll("a"),s=i.prev("input.permalink"),o=n.attr("href"),l=s.val(),r=o.replace(l,"");i.hide(),n.css({color:"#999","pointer-events":"none","text-decoration":"none"}),n.text(r.substring(0,r.length-1)),s.show().focus()},on_editor_ready:function(t){var i=this,n=e("#"+t.id),s=n.closest(".llms-editable-editor"),o=s.find(".llms-label"),l=n.attr("data-attribute");o.length&&o.prependTo(s.find(".wp-editor-tools")),t.on("change",function(e){i.model.set(l,_.getEditor().getContent(t.id))}),n.on("input",function(e){i.model.set(l,n.val())}),s.on("click",".quicktags-toolbar .ed_button",function(){setTimeout(function(){n.trigger("input")},10)})},_validate_url:function(e){var t=document.createElement("a");return t.href=e,t.host&&t.host!==window.location.host}}}),n("Views/_Receivable",[],function(){return{_receive:function(e,t){if(t.sender.hasClass("ui-draggable")){var i=this._getContainerEl().children().index(t.helper);return t.helper.remove(),void this.collection.add({},{at:i})}var n=t.sender,s=n.data("view");if(s&&s.collection){var o=this._getContainerEl().children().index(t.item),l=s.collection.get(t.item.attr("data-model-cid"));s.collection.remove(l),this.collection.add(l,{at:o}),l.collection=this.collection,this.setSelectedModel(l)}}}}),n("Views/_Shiftable",[],function(){return{maybe_hide_shiftable_buttons:function(){if(this.model.collection){var e=this.model.get("type");this.model.collection.first()===this.model?this.$el.find(".shift-up--"+e).hide():this.model.collection.last()===this.model&&this.$el.find(".shift-down--"+e).hide()}},shift:function(e,t){var i=this.model.collection;i.remove(this.model),i.add(this.model,{at:t}),i.trigger("reorder")},shift_down:function(e){e.preventDefault();var t=this.model.collection.indexOf(this.model);this.shift(t,t+1)},shift_up:function(e){e.preventDefault();var t=this.model.collection.indexOf(this.model);this.shift(t,t-1)}}}),n("Views/_Subview",[],function(){return{subscriptions:{},state:"",views:{},get_subview:function(e){return!!this.views[e]&&this.views[e]},events_subscribe:function(e){_.each(e,function(e,t){this.subscriptions[t]=e,Backbone.pubSub.on(t,e,this)},this)},events_unsubscribe:function(){_.each(this.subscriptions,function(e,t){Backbone.pubSub.off(t,e,this),delete this.subscriptions[t]},this)},remove_subview:function(e){var t=this.get_subview(e);t&&t.instance&&(_.isEmpty(t.instance.views)||(t.instance.events_unsubscribe(),t.instance.remove_subviews()),t.instance.off(),t.instance.off(null,null,null),t.instance.remove(),t.instance.undelegateEvents(),t.instance=null)},remove_subviews:function(){_.each(this.views,function(e,t){this.remove_subview(t)},this)},render_subviews:function(e){e=e||{},_.each(this.views,function(t,i){this.state===t.state?this.render_subview(i,e):this.remove_subview(i)},this)},render_subview:function(e,t){var i=this.get_subview(e);i&&(this.remove_subview(e),i.instance||(i.instance=new i.class(t)),i.instance.render())},set_state:function(e){return this.state=e,this}}}),n("Views/_Trashable",[],function(){return{events:{'click a[href="#llms-trash-model"]':"trash_model","click button.llms-trash-model":"trash_model"},trash_model:function(e){e&&(e.preventDefault(),e.stopPropagation());var t=LLMS.l10n.replace("Are you sure you want to move this %s to the trash?",{"%s":this.model.get_l10n_type()});window.confirm(t)&&(this.model.collection&&this.model.collection.remove(this.model),Backbone.pubSub.trigger("model-trashed",this.model),this.trigger("model-trashed",this.model))}}}),n("Views/_loader",["Views/_Detachable","Views/_Editable","Views/_Receivable","Views/_Shiftable","Views/_Subview","Views/_Trashable"],function(e,t,i,n,s,o){return{Detachable:e,Editable:t,Receivable:i,Shiftable:n,Subview:s,Trashable:o}}),n("Controllers/Construct",["Collections/loader","Models/loader","Views/_loader"],function(e,t,i){return function(){function n(e,t,i,n){return e[t]?new e[t](i,n):(console.log('"'+t+'" not found.'),!1)}return this.get_collection=function(t,i,s){return n(e,t,i,s)},this.get_model=function(e,i,s){return n(t,e,i,s)},this.extend_view=function(){for(var e=arguments[0],t=1;arguments[t];){var n=arguments[t];i[n]&&(e.events&&i[n].events&&(e.events=_.defaults(e.events,i[n].events)),e=_.defaults(e,i[n])),t++}return Backbone.View.extend(e)},this.register_collection=function(t,i){e[t]=Backbone.Collection.extend(i)},this.register_model=function(e,i){t[e]=t.Abstract.extend(i)},this}}),n("Controllers/Debug",[],function(){return function(e){var t=this,i=e.enabled||!1;this.disable=function(){t.log("LifterLMS Builder debugging disabled"),i=!1},this.enable=function(){i=!0,t.log("LifterLMS Builder debugging enabled")},this.log=function(){i&&_.each(arguments,function(e){console.log(e)})},this.toggle=function(){i?t.disable():t.enable()},i&&t.enable()}}),n("Controllers/Schemas",[],function(){return function(e){var t=e;return _.each(t,function(e){_.each(e,function(e){e.custom=!0})}),this.get=function(e,i,n){return t[i]&&(e=_.extend(e,t[i])),e},this}}),n("Controllers/Sync",[],function(){return function(t,i){function n(e,t){return"success"===e.status&&(e.message=[]),e.status="error","string"==typeof t&&(t=[t]),e.message=e.message.concat(t),e}function s(){var e={};e.changes=p.get_unsaved_changes(),e.has_unsaved_changes=p.has_unsaved_changes(e.changes),e.saving=p.saving,window.llms_builder.debug.log("==== start changes check ====",e,"==== finish changes check ===="),Backbone.pubSub.trigger("current-save-status",e)}function o(){if(!p.saving){var e=p.get_unsaved_changes();p.has_unsaved_changes(e)&&(e.id=t.get("id"),LLMS.Ajax.call({data:{action:"llms_builder",action_type:"ajax_save",course_id:e.id,llms_builder:JSON.stringify(e)},beforeSend:function(){window.llms_builder.debug.log("==== start do_ajax_save before ====",e,"==== finish do_ajax_save before ===="),p.saving=!0,Backbone.pubSub.trigger("heartbeat-send",p)},error:function(e,t,i){window.llms_builder.debug.log("==== start do_ajax_save error ====",e,"==== finish do_ajax_save error ===="),p.saving=!1,Backbone.pubSub.trigger("heartbeat-tick",p,{status:"error",message:e.responseText+" ("+i+" "+t+")"})},success:function(e){e.llms_builder&&(window.llms_builder.debug.log("==== start do_ajax_save success ====",e,"==== finish do_ajax_save success ===="),e.llms_builder=d(e.llms_builder),e.llms_builder=h(e.llms_builder),p.saving=!1,Backbone.pubSub.trigger("heartbeat-tick",p,e.llms_builder))}}))}}function l(e){var t,i={};if(e.get("_has_focus"))return i;a(e)||!0===e.get("_forceSync")?(i=_.clone(e.attributes),t="full"):(i=e.unsavedAttributes(),t="partial");var n=e.get_relationships?e.get_child_props():[];return i=_.omit(i,function(e,t){return 0===t.indexOf("_")||-1!==n.indexOf(t)}),e.before_save&&(i=e.before_save(i,t)),i}function r(e){var t;return e instanceof Backbone.Model?(t=l(e),e.get_relationships&&_.each(e.get_child_props(),function(i){var n=r(e.get(i));_.isEmpty(n)||(t[i]=n)}),_.isEmpty(t)||(t.id=e.get("id"))):e instanceof Backbone.Collection&&(t=[],e.each(function(e){var i=r(e);_.isEmpty(i)||t.push(i)})),t}function a(e){return!_.isNumber(e.id)&&0===e.id.indexOf("temp_")}function c(e,t){Backbone.pubSub.trigger(e.get("type")+"-maybe-restart-tracking",e,t);var i=["id","orig_id"];e.get_relationships&&i.concat(e.get_child_props()),_.each(_.omit(t,i),function(t,i){_.isEqual(e.get(i),t)&&(delete e._unsavedChanges[i],e._originalAttrs[i]=t)}),e.unset("_forceSync")}function d(e){var t={detach:b,trash:v};return _.each(t,function(t,i){if(e[i]){var s=[];_.each(e[i],function(e){e.error?s.push(e.error):t.remove(e.id)}),s.length&&_.extend(e,n(e,s))}}),e}function u(e,t,i,s){if(!e[t])return e;if(i.get(t)instanceof Backbone.Model){var o=e[t];if(o.error)_.extend(s,n(s,o.error));else{var l=i.get(t);o.id!=o.orig_id&&(l.set("id",o.id),delete l._unsavedChanges.id),c(l,o),l.get_relationships&&_.each(l.get_child_props(),function(i){_.extend(e[t],u(e[t],i,l,s))})}}else i.get(t)instanceof Backbone.Collection&&_.each(e[t],function(o,l){if(o.error)_.extend(s,n(s,o.error));else{var r=i.get(t).get(o.orig_id);o.id!=o.orig_id&&(r.set("id",o.id),delete r._unsavedChanges.id),c(r,o),r.get_relationships&&_.each(r.get_child_props(),function(i){_.extend(e[t],u(e[t][l],i,r,s))})}});return s}function h(e){return e.updates?(e.updates&&(e=u(e.updates,"sections",t,e)),e):e}this.saving=!1;var p=this,g="yes"===window.llms_builder.autosave,m=null,f=i.check_interval_ms||("yes"===window.llms_builder.autosave?1e4:1e3),b=new Backbone.Collection,v=new Backbone.Collection;return this.get_unsaved_changes=function(){return{detach:b.pluck("id"),trash:v.pluck("id"),updates:r(t)}},this.has_unsaved_changes=function(e){return void 0===e&&(e=p.get_unsaved_changes()),!!_.find(e,function(e){return!1===_.isEmpty(e)})},this.save_now=function(){g?wp.heartbeat.connectNow():o()},this.set_check_interval=function(e){f=e,m&&clearInterval(m),f&&(m=setInterval(s,f))},Backbone.pubSub.on("model-detached",function(e){a(e)||b.add(_.clone(e.attributes))}),Backbone.pubSub.on("model-trashed",function(e){if(!a(e)){var t=_.clone(e.attributes);e.get_trash_id&&(t.id=e.get_trash_id()),v.add(t)}}),e(document).on("heartbeat-send",function(e,i){if(g&&!p.saving){var n=p.get_unsaved_changes();p.has_unsaved_changes(n)&&(n.id=t.get("id"),p.saving=!0,i.llms_builder=JSON.stringify(n)),window.llms_builder.debug.log("==== start heartbeat-send ====",i,"==== finish heartbeat-send ===="),Backbone.pubSub.trigger("heartbeat-send",p)}}),e(document).on("heartbeat-tick",function(e,t){g&&t.llms_builder&&(window.llms_builder.debug.log("==== start heartbeat-tick ====",t,"==== finish heartbeat-tick ===="),t.llms_builder=d(t.llms_builder),t.llms_builder=h(t.llms_builder),p.saving=!1,Backbone.pubSub.trigger("heartbeat-tick",p,t.llms_builder))}),e(document).on("heartbeat-error",function(e,t){g&&(window.llms_builder.debug.log("==== start heartbeat-error ====",t,"==== finish heartbeat-error ===="),p.saving=!1,Backbone.pubSub.trigger("heartbeat-tick",p,{status:"error",message:t.responseText+" ("+t.status+" "+t.statusText+")"}))}),function(){void 0===wp.heartbeat&&(window.llms_builder.debug.log("WordPress Heartbeat disabled. Autosaving is disabled!"),g=!1),f&&p.set_check_interval(f),e(window).on("beforeunload",function(){if(p.has_unsaved_changes())return s(),"Are you sure you want to abandon your changes?"})}(),this}}),n("Views/Lesson",["Views/_Detachable","Views/_Editable","Views/_Shiftable","Views/_Trashable"],function(e,t,i,n){return Backbone.View.extend(_.defaults({attributes:function(){return{"data-id":this.model.id,"data-section-id":this.model.get("parent_section")}},className:"llms-builder-item llms-lesson",events:_.defaults({"click .edit-lesson":"open_lesson_editor","click .llms-headline":"open_lesson_editor","click .edit-quiz":"open_quiz_editor","click .edit-assignment":"open_assignment_editor","click .section-prev":"section_prev","click .section-next":"section_next","click .shift-up--lesson":"shift_up","click .shift-down--lesson":"shift_down"},e.events,t.events,n.events),id:function(){return"llms-lesson-"+this.model.id},tagName:"li",template:wp.template("llms-lesson-template"),initialize:function(){this.render(),this.listenTo(this.model,"change",this.render),Backbone.pubSub.on("lesson-selected",this.on_select,this),Backbone.pubSub.on("new-lesson-added",this.on_select,this)},render:function(){return this.$el.html(this.template(this.model)),this.maybe_hide_shiftable_buttons(),this.model.get("_selected")?this.$el.addClass("selected"):this.$el.removeClass("selected"),this},open_assignment_editor:function(e){e&&e.preventDefault(),Backbone.pubSub.trigger("lesson-selected",this.model,"assignment"),this.model.set("_selected",!0),this.set_hash("assignment")},open_lesson_editor:function(e){e&&e.preventDefault(),Backbone.pubSub.trigger("lesson-selected",this.model,"lesson"),this.model.set("_selected",!0),this.set_hash(!1)},open_quiz_editor:function(e){e&&e.preventDefault(),Backbone.pubSub.trigger("lesson-selected",this.model,"quiz"),this.model.set("_selected",!0),this.set_hash("quiz")},on_select:function(e){this.model.id!==e.id&&this.model.set("_selected",!1)},section_next:function(e){e.preventDefault(),this._move_to_section("next")},section_prev:function(e){e.preventDefault(),this._move_to_section("prev")},set_hash:function(e){var t="lesson:"+this.model.get("id");e&&(t+=":"+e),window.location.hash=t},_move_to_section:function(e){var t,i=this.model.collection;"next"===e?t=i.parent.get_next():"prev"===e&&(t=i.parent.get_prev()),t&&(i.remove(this.model),t.add_lesson(this.model),t.set("_expanded",!0))}},e,t,i,n))}),n("Views/LessonList",["Views/Lesson","Views/_Receivable"],function(t,i){return Backbone.CollectionView.extend(_.defaults({className:"llms-lessons",modelView:t,selectable:!1,sortable:!0,sortableOptions:{axis:!1,connectWith:".llms-lessons",cursor:"move",handle:".drag-lesson",items:".llms-lesson",placeholder:"llms-lesson llms-sortable-placeholder"},sortable_start:function(t){e(".llms-lessons").addClass("dragging")},sortable_stop:function(t){e(".llms-lessons").removeClass("dragging")},_sortStop:function(e,t){var i=this.collection.get(t.item.attr("data-model-cid")),n=this._getContainerEl(),s=n.children().index(t.item);-1==s&&i&&this.collection.remove(i),this._reorderCollectionBasedOnHTML(),this.updateDependentControls(),this._isBackboneCourierAvailable()?this.spawn("sortStop",{modelBeingSorted:i,newIndex:s}):this.trigger("sortStop",i,s)}},i))}),n("Views/Section",["Views/LessonList","Views/_Editable","Views/_Shiftable","Views/_Trashable"],function(t,i,n,s){return Backbone.View.extend(_.defaults({attributes:function(){return{"data-id":this.model.id}},className:"llms-builder-item llms-section",events:_.defaults({click:"select","click .expand":"expand","click .collapse":"collapse","click .shift-up--section":"shift_up","click .shift-down--section":"shift_down","click .new-lesson":"add_new_lesson","click .llms-builder-header":"toggle","mouseenter .llms-lessons":"on_mouseenter"},i.events,s.events),id:function(){return"llms-section-"+this.model.id},tagName:"li",template:wp.template("llms-section-template"),initialize:function(){this.render(),this.listenTo(this.model,"change",this.render),this.listenTo(this.model,"change:_expanded",this.toggle_expanded),this.lessonListView.collection.on("add",this.on_lesson_add,this),this.dragTimeout=null,Backbone.pubSub.on("expand-all",this.expand,this),Backbone.pubSub.on("collapse-all",this.collapse,this)},render:function(){return this.$el.html(this.template(this.model.toJSON())),this.maybe_hide_shiftable_buttons(),this.lessonListView=new t({el:this.$el.find(".llms-lessons"),collection:this.model.get("lessons")}),this.lessonListView.render(),this.lessonListView.on("sortStart",this.lessonListView.sortable_start),this.lessonListView.on("sortStop",this.lessonListView.sortable_stop),this.lessonListView.on("selectionChanged",this.active_lesson_change,this),this.maybe_hide_trash_button(),this},add_new_lesson:function(e){e.preventDefault(),Backbone.pubSub.trigger("section-select",this.model),Backbone.pubSub.trigger("add-new-lesson")},active_lesson_change:function(e,t){Backbone.pubSub.trigger("active-lesson-change",{current:e,previous:t})},toggle:function(e,t){"llms-builder-header"===e.target.className&&(this.model.get("_expanded")?this.collapse(e,t):this.expand(e,t))},collapse:function(e,t){void 0===t&&(t=!0),e&&(e.stopPropagation(),e.preventDefault()),this.$el.removeClass("expanded").find(".drag-expanded").removeClass("drag-expanded"),t&&this.model.set("_expanded",!1),Backbone.pubSub.trigger("section-toggle",this.model)},expand:function(e,t){void 0===t&&(t=!0),e&&(e.stopPropagation(),e.preventDefault()),this.$el.addClass("expanded"),t&&this.model.set("_expanded",!0),Backbone.pubSub.trigger("section-toggle",this.model)},maybe_hide_trash_button:function(){var e=this.$el.find(".trash--section");this.model.get("lessons").isEmpty()?e.show():e.hide()},on_lesson_add:function(e){this.lessonListView.collection.trigger("reorder"),e.set("parent_section",this.model.get("id")),this.expand()},on_mouseenter:function(t){e(t.target).hasClass("dragging")&&(e(".drag-expanded").removeClass("drag-expanded"),e(t.target).addClass("drag-expanded"))},toggle_expanded:function(e,t){t?this.expand(null,!1):this.collapse(null,!1)}},i,n,s))}),n("Views/SectionList",["Views/Section","Views/_Receivable"],function(e,t){return Backbone.CollectionView.extend(_.defaults({el:"#llms-sections",events:{"mousedown > li.llms-section > .llms-builder-header .llms-headline":"_listItem_onMousedown",click:"_listBackground_onClick","click ul.collection-view":"_listBackground_onClick",keydown:"_onKeydown"},modelView:e,processKeyEvents:!1,selectable:!0,sortable:!0,sortableOptions:{axis:!1,cursor:"move",handle:".drag-section",items:".llms-section",placeholder:"llms-section llms-sortable-placeholder"},sortable_start:function(e){this.$el.addClass("dragging")},sortable_stop:function(e){this.$el.removeClass("dragging")}},t))}),n("Views/Course",["Views/SectionList","Views/_Detachable","Views/_Editable","Views/_Shiftable","Views/_Trashable"],function(e,t,i,n,s){return Backbone.View.extend(_.defaults({attributes:function(){return{"data-id":this.model.id}},el:"#llms-builder-main",tagName:"div",template:wp.template("llms-course-template"),initialize:function(){this.render(),this.sectionListView=new e({collection:this.model.get("sections")}),this.sectionListView.render(),this.sectionListView.on("sortStart",this.sectionListView.sortable_start),this.sectionListView.on("sortStop",this.sectionListView.sortable_stop),this.sectionListView.on("selectionChanged",this.active_section_change),this.listenTo(this.model.get("sections"),"add",this.on_section_add),Backbone.pubSub.on("section-toggle",this.on_section_toggle,this),Backbone.pubSub.on("section-select",this.on_section_select,this),Backbone.pubSub.on("expand-section",this.expand_section,this),Backbone.pubSub.on("lesson-selected",this.active_lesson_change,this)},events:_.defaults({"click .new-section":"add_new_section"},t.events,i.events,s.events),render:function(){return this.$el.html(this.template(this.model)),this},active_lesson_change:function(e){var t=this.model.get("sections").get(e.get("parent_section"));this.sectionListView.setSelectedModel(t)},active_section_change:function(e,t){_.each(e,function(e){e.set("_selected",!0)}),_.each(t,function(e){e.set("_selected",!1)})},on_section_add:function(e){this.sectionListView.setSelectedModel(e)},on_section_toggle:function(e){var t=e.get("_expanded")?[e]:[];this.sectionListView.setSelectedModels(t)},on_section_select:function(e){this.sectionListView.setSelectedModel(e)},add_new_section:function(e){e.preventDefault(),Backbone.pubSub.trigger("add-new-section")}},i))}),n("Views/SettingsFields",[],function(){return Backbone.View.extend(_.defaults({events:{"click .llms-settings-group-toggle":"toggle_group"},fields:{},tagName:"div",template:wp.template("llms-settings-fields-template"),get_editor_fields:function(){return _.filter(this.fields,function(e){return this.is_editor_field(e.type)},this)},get_groups:function(){return this.model.get_settings_fields()},is_group_hidden:function(e){var t="llms-"+this.model.get("type")+"-settings-group--"+e;return"undefined"!==window.localStorage&&"hidden"===window.localStorage.getItem(t)},get_switch_attribute:function(e){return e.switch_attribute?e.switch_attribute:e.attribute},has_switch:function(e){return-1!==e.indexOf("switch")},is_default_field:function(e){return-1!==["audio_embed","datepicker","number","text","video_embed"].indexOf(e.replace("switch-",""))},is_editor_field:function(e){return-1!==["editor","switch-editor"].indexOf(e.replace("switch-",""))},is_switch_condition_met:function(e){return e.switch_on===this.model.get(e.switch_attribute)},render:function(){return this.$el.html(this.template(this)),_.each(this.get_editor_fields(),function(e){this.render_editor(e)},this),this},render_editor:function(t){var i=this,n=_.getEditor();if(void 0===n)return void console.error("Unable to access `wp.oldEditor` or `wp.editor`.");n.remove(t.id),t.settings.tinymce.setup=function(t){var s=e("#"+t.id),o=s.closest(".llms-editable-editor"),l=o.find(".llms-label"),r=s.attr("data-attribute");l.length&&l.prependTo(o.find(".wp-editor-tools")),t.on("change",function(e){i.model.set(r,n.getContent(t.id))}),s.on("input",function(e){i.model.set(r,s.val())}),o.on("click",".quicktags-toolbar .ed_button",function(){setTimeout(function(){s.trigger("input")},10)})},n.initialize(t.id,t.settings)},render_select_options:function(e,t){function i(e,t){return'"+e.substring(0,100)+(e.length>100?"...":"")+" "}var n="",s=this.model.get(t);return _.each(e,function(e,s){"string"==typeof e?n+=i(e,s):"object"==typeof e&&(e.label&&e.options?(n+='',n+=this.render_select_options(e.options,t)):n+=i(e.val,e.key))},this),n},setup_field:function(t,i){var n={classes:[],id:_.uniqueId(t.attribute+"_"),input_type:"text",label:"",options:{},placeholder:"",tip:"",tip_position:"top-right",settings:{}};if(t.condition&&!1===_.bind(t.condition,this.model)())return!1;switch(t.type){case"audio_embed":n.classes.push("llms-editable-audio"),n.placeholder="https://",n.tip=LLMS.l10n.translate("Use SoundCloud or Spotify audio URLS."),n.input_type="url";break;case"datepicker":n.classes.push("llms-editable-date");break;case"editor":case"switch-editor":var s=t.settings||{};n.settings=e.extend(!0,_.getEditor().getDefaultSettings(),{mediaButtons:!0,tinymce:{toolbar1:"bold,italic,strikethrough,bullist,numlist,blockquote,hr,alignleft,aligncenter,alignright,link,unlink,wp_adv",toolbar2:"formatselect,underline,alignjustify,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help"}},s);break;case"number":case"switch-number":n.input_type="number";break;case"permalink":n.label=LLMS.l10n.translate("Permalink");break;case"video_embed":n.classes.push("llms-editable-video"),n.placeholder="https://",n.tip=LLMS.l10n.translate("Use YouTube, Vimeo, or Wistia video URLS."),n.input_type="url"}this.has_switch(t.type)&&(n.switch_on="yes",n.switch_off="no");var o=_.defaults(_.deepClone(t),n);if(_.isFunction(o.options)&&(o.options=_.bind(o.options,this.model)()),-1!==["radio","switch-radio"].indexOf(t.type)){var l=!1;_.each(t.options,function(e,t){-1===e.indexOf(".png")&&-1===e.indexOf(".jpg")||(o.options[t]=' ',l=!0)}),l&&o.classes.push("has-images")}return o.classes.length&&(o.classes=" "+o.classes.join(" ")),this.fields[o.id]=o,o},should_rerender_on_toggle:function(e){return-1!==e.indexOf("switch-")?"yes":"no"},toggle_group:function(t){t.preventDefault();var i=e(t.currentTarget),n=i.closest(".llms-model-settings");if(n.toggleClass("hidden"),"undefined"!==window.localStorage){var s=n.attr("id");n.hasClass("hidden")?window.localStorage.setItem(s,"hidden"):window.localStorage.removeItem(s)}}}))}),n("Views/LessonEditor",["Views/_Detachable","Views/_Editable","Views/_Trashable","Views/_Subview","Views/SettingsFields"],function(e,t,i,n,s){return Backbone.View.extend(_.defaults({state:"default",views:{settings:{class:s,instance:null,state:"default"}},el:"#llms-editor-lesson",events:_.defaults({},e.events,t.events,i.events),template:wp.template("llms-lesson-settings-template"),initialize:function(e){this.model=e.lesson;var t=window.llms.hooks.applyFilters("llms_lesson_rerender_change_events",["change:date_available","change:drip_method","change:time_available"]);_.each(t,function(e){this.listenTo(this.model,e,this.render)},this),this.listenTo(this.model,"change:points",this.render_points_percentage),this.listenTo(this.model,"change:has_prerequisite",function(e,t){"yes"===t&&this.$el.find('select[name="prerequisite"]').trigger("change")})},render:function(){return this.$el.html(this.template(this.model)),this.remove_subview("settings"),this.render_subview("settings",{el:"#llms-lesson-settings-fields",model:this.model}),this.init_datepickers(),this.init_selects(),this.render_points_percentage(),this},render_points_percentage:function(){this.$el.find("#llms-model-settings-field--points .llms-editable-input").addClass("tip--top-left").attr("data-tip",this.model.get_points_percentage())}},e,t,i,n,s))}),n("Views/Popover",[],function(){return Backbone.View.extend({defaults:{placement:"auto",width:"auto",trigger:"manual",style:"light",animation:"pop",title:"",content:"",closeable:!1,backdrop:!1,onShow:function(e){},onHide:function(e){}},tagName:"div",initialize:function(t){this.$el.length&&(this.defaults.container=this.$el.parent()),this.args=_.defaults(t.args,this.defaults),e("body").hasClass("rtl")&&(-1!==this.args.placement.indexOf("left")?this.args.placement=this.args.placement.replace("left","right"):-1!==this.args.placement.indexOf("right")&&(this.args.placement=this.args.placement.replace("right","left"))),this.render()},render:function(){return this.$el.webuiPopover(this.args),this},hide:function(){return this.$el.webuiPopover("hide"),this},show:function(){return this.$el.webuiPopover("show"),this}})}),n("Views/PostSearch",[],function(){return Backbone.View.extend({events:{"select2:select":"add_post"},tagName:"select",initialize:function(e){this.post_type=e.post_type,this.searching_message=e.searching_message||LLMS.l10n.translate("Searching...")},add_post:function(e){var t=this.$el.attr("data-post-type");Backbone.pubSub.trigger(t.replace("llms_","")+"-search-select",e.params.data,e),this.$el.val(null).trigger("change")},render:function(){var t=this;return setTimeout(function(){t.$el.llmsSelect2({ajax:{dataType:"JSON",delay:250,method:"POST",url:window.ajaxurl,data:function(e){return{action:"llms_builder",action_type:"search",course_id:window.llms_builder.course.id,post_type:t.post_type,term:e.term,page:e.page,_ajax_nonce:window.llms.ajax_nonce}}},dropdownParent:e(".wrap.lifterlms.llms-builder"),escapeMarkup:function(e){return e},placeholder:t.searching_message,templateResult:t.render_result,width:"100%"}),t.$el.attr("data-post-type",t.post_type)},0),this},render_result:function(t){var i=e('
');if(t.loading)return i.append(t.text);var n=e(''),s=e('
');return icon="attach"===t.action?"paperclip":"clone",text="attach"===t.action?LLMS.l10n.translate("Attach"):LLMS.l10n.translate("Clone"),n.append(''+text+" "),s.append(""+t.data.title+" "),s.append(""+LLMS.l10n.translate("ID")+": "+t.data.id+" "),_.each(t.parents,function(e){s.append(""+e+" ")}),i.append(n).append(s)}})}),n("Views/QuestionType",["Views/Popover","Views/PostSearch"],function(e,t){return Backbone.View.extend({className:"llms-question-type",events:{"click .llms-add-question":"add_question"},id:function(){return"llms-question-type-"+this.model.id},tagName:"li",template:wp.template("llms-question-type-template"),initialize:function(){this.render()},render:function(){return this.$el.html(this.template(this.model)),this},add_question:function(){"existing"===this.model.get("id")?this.add_existing_question_click():this.add_new_question()},add_existing_question_click:function(){var i=new e({el:"#llms-add-question--existing",args:{backdrop:!0,closeable:!0,container:"#llms-builder-sidebar",dismissible:!0,placement:"top-left",width:"calc( 100% - 40px )",offsetLeft:250,offsetTop:60,title:LLMS.l10n.translate("Add Existing Question"),content:new t({post_type:"llms_question",searching_message:LLMS.l10n.translate("Search for existing questions...")}).render().$el}});i.show(),Backbone.pubSub.on("question-search-select",this.add_existing_question,this),Backbone.pubSub.on("question-search-select",function(e){i.hide(),Backbone.pubSub.off("question-search-select",this.add_existing_question,this)},this)},add_existing_question:function(e){var t=e.data;"clone"===e.action?t=_.prepareQuestionObjectForCloning(t):(t=_.prepareExistingPostObjectDataForAddingOrCloning(t),t._forceSync=!0),t._expanded=!0,this.quiz.add_question(t),this.quiz.trigger("new-question-added")},add_new_question:function(){this.quiz.add_question({_expanded:!0,choices:this.model.get("default_choices")?this.model.get("default_choices"):null,question_type:this.model}),this.quiz.trigger("new-question-added")}})}),n("Views/QuestionBank",["Views/QuestionType"],function(e){return Backbone.CollectionView.extend({className:"llms-question",el:"#llms-question-bank",modelView:e,selectable:!1,sortable:!1})}),n("Views/QuestionChoice",["Views/_Editable"],function(e){return Backbone.View.extend(_.defaults({className:"llms-question-choice",events:_.defaults({'change input[name="correct"]':"toggle_correct",'click .llms-action-icon[href="#llms-add-choice"]':"add_choice",'click .llms-action-icon[href="#llms-del-choice"]':"del_choice"},e.events),id:function(){return"llms-question-choice-"+this.model.id},tagName:"li",template:wp.template("llms-question-choice-template"),initialize:function(){this.render(),this.listenTo(this.model.collection,"add",this.maybe_disable_buttons),this.listenTo(this.model,"change",this.render),"image"===this.model.get("choice_type")&&this.listenTo(this.model.get("choice"),"change",this.render)},render:function(){return this.$el.html(this.template(this.model)),this},add_choice:function(e){e.stopPropagation(),e.preventDefault();var t=this.model.collection.indexOf(this.model);this.model.collection.parent.add_choice({},{at:t+1})},del_choice:function(e){e.preventDefault(),Backbone.pubSub.trigger("model-trashed",this.model),this.model.collection.remove(this.model)},toggle_correct:function(){var e=this.$el.find('input[name="correct"]').is(":checked");this.model.set("correct",e),this.model.collection.trigger("correct-update",this.model)}},e))}),n("Views/QuestionChoiceList",["Views/QuestionChoice"],function(e){return Backbone.CollectionView.extend({className:"llms-quiz-questions",modelView:e,processKeyEvents:!1,selectable:!1,sortable:!0,sortableOptions:{axis:!1,cursor:"move",handle:".llms-choice-id",items:".llms-question-choice",placeholder:"llms-question-choice llms-sortable-placeholder"},sortable_start:function(e){this.$el.addClass("dragging")},sortable_stop:function(e){this.$el.removeClass("dragging")}})}),n("Views/Question",["Views/_Detachable","Views/_Editable","Views/QuestionChoiceList"],function(e,t,i){return Backbone.View.extend(_.defaults({className:function(){return"llms-question qtype--"+this.model.get("question_type").get("id")},events:_.defaults({"click .clone--question":"clone","click .delete--question":"delete","click .expand--question":"expand","click .collapse--question":"collapse",'change input[name="question_points"]':"update_points"},e.events,t.events),id:function(){return"llms-question-"+this.model.id},tagName:"li",template:wp.template("llms-question-template"),initialize:function(){var e=["change:_expanded","change:menu_order"];_.each(e,function(e){this.listenTo(this.model,e,this.render)},this),this.listenTo(this.model.get("image"),"change",this.render),
+this.listenTo(this.model.get_parent(),"change:_points",this.render_points_percentage),this.on("multi_choices_toggle",this.multi_choices_toggle,this),Backbone.pubSub.on("del-question-choice",this.del_choice,this)},render:function(){if(this.$el.html(this.template(this.model)),this.model.get("question_type").get("choices")&&(this.choiceListView=new i({el:this.$el.find(".llms-question-choices"),collection:this.model.get("choices")}),this.choiceListView.render(),this.choiceListView.on("sortStart",this.choiceListView.sortable_start),this.choiceListView.on("sortStop",this.choiceListView.sortable_stop)),"group"===this.model.get("question_type").get("id")){var e=this;setTimeout(function(){e.questionListView=e.collectionListView.quiz.get_question_list({el:e.$el.find(".llms-quiz-questions"),collection:e.model.get("questions")}),e.questionListView.render(),e.questionListView.on("sortStart",e.questionListView.sortable_start),e.questionListView.on("sortStop",e.questionListView.sortable_stop)},1)}return this.model.get("description_enabled")&&this.init_editor("question-desc--"+this.model.get("id")),this.model.get("clarifications_enabled")&&this.init_editor("question-clarifications--"+this.model.get("id"),{mediaButtons:!1,tinymce:{toolbar1:"bold,italic,strikethrough,bullist,numlist,alignleft,aligncenter,alignright",toolbar2:"",setup:_.bind(this.on_editor_ready,this)}}),this.init_formatting_els(),this.init_selects(),this},render_points_percentage:function(){this.$el.find(".llms-question-points").attr("data-tip",this.model.get_points_percentage())},clone:function(e){e.stopPropagation(),e.preventDefault(),this.model.collection.add(this._get_question_clone(this.model))},_get_question_clone:function(e){var t=_.clone(e.attributes);return delete t.id,t.parent_id=e.get("id"),t.question_type=e.get("question_type").get("id"),t.image=_.clone(e.get("image").attributes),e.get("choices")&&(t.choices=[],e.get("choices").each(function(e){var i=_.clone(e.attributes);delete i.id,delete i.question_id,t.choices.push(i)})),"group"===e.get("question_type").get("id")&&(t.questions=[],e.get("questions").each(function(e){t.questions.push(this._get_question_clone(e))},this)),t},collapse:function(e){e&&e.preventDefault(),this.model.set("_expanded",!1)},delete:function(e){e.preventDefault(),window.confirm(LLMS.l10n.translate("Are you sure you want to delete this question?"))&&(this.model.collection.remove(this.model),Backbone.pubSub.trigger("model-trashed",this.model))},expand:function(e){e&&e.preventDefault(),this.model.set("_expanded",!0)},multi_choices_toggle:function(e){"yes"!==e&&this.model.get("choices").update_correct(_.first(this.model.get("choices").get_correct()))},update_points:function(){this.model.set("points",1*this.$el.find('input[name="question_points"]').val())}},e,t))}),n("Views/QuestionList",["Views/Question"],function(t){return Backbone.CollectionView.extend({className:"llms-quiz-questions",modelView:t,processKeyEvents:!1,selectable:!1,sortable:!0,sortableOptions:{axis:!1,connectWith:".llms-quiz-questions",cursor:"move",handle:".llms-data-stamp",items:".llms-question",placeholder:"llms-question llms-sortable-placeholder"},sortable_start:function(t){var i="group"===t.get("question_type").get("id")?".llms-editor-tab > .llms-quiz-questions":".llms-quiz-questions";e(i).addClass("dragging")},sortable_stop:function(){e(".llms-quiz-questions").removeClass("dragging")},_receive:function(t,i){if(t.stopPropagation(),i.item.hasClass("qtype--group")&&e(t.target).closest(".qtype--group").length)return void i.sender.sortable("cancel");var n=i.sender,s=n.data("view");if(s&&s.collection){var o=this._getContainerEl().children().index(i.item),l=s.collection.get(i.item.attr("data-model-cid"));s.collection.remove(l),this.collection.add(l,{at:o}),l.collection=this.collection,this.setSelectedModel(l)}},_sortStart:function(e,t){var i=this.collection.get(t.item.attr("data-model-cid"));t.placeholder.addClass("qtype--"+i.get("question_type").get("id")),this._isBackboneCourierAvailable()?this.spawn("sortStart",{modelBeingSorted:i}):this.trigger("sortStart",i)},_sortStop:function(e,t){e.stopPropagation();var i=this.collection.get(t.item.attr("data-model-cid")),n=this._getContainerEl(),s=n.children().index(t.item);-1==s&&i&&this.collection.remove(i),this._reorderCollectionBasedOnHTML(),this.updateDependentControls(),this._isBackboneCourierAvailable()?this.spawn("sortStop",{modelBeingSorted:i,newIndex:s}):this.trigger("sortStop",i,s)}})}),n("Views/Quiz",["Models/Quiz","Views/Popover","Views/PostSearch","Views/QuestionBank","Views/QuestionList","Views/SettingsFields","Views/_Detachable","Views/_Editable","Views/_Subview","Views/_Trashable"],function(t,i,n,s,o,l,r,a,c,d){return Backbone.View.extend(_.defaults({state:"default",views:{settings:{class:l,instance:null,state:"default"},bank:{class:s,instance:null,state:"default"},list:{class:o,instance:null,state:"default"}},el:"#llms-editor-quiz",events:_.defaults({"click #llms-existing-quiz":"add_existing_quiz_click","click #llms-new-quiz":"add_new_quiz","click #llms-show-question-bank":"show_tools","click .bulk-toggle":"bulk_toggle"},r.events,a.events,d.events),tagName:"div",template:wp.template("llms-quiz-template"),initialize:function(e){this.lesson=e.lesson,"yes"!==this.lesson.get("quiz_enabled")&&_.isEmpty(this.lesson.get("quiz"))||(this.model=this.lesson.get("quiz"),this.model.set_parent(this.lesson),this.listenTo(this.model,"change:_points",this.render_points)),this.on("model-trashed",this.on_trashed)},render:function(){if(this.$el.html(this.template(this.model)),this.model){LLMS.Spinner.start(this.$el),this.render_subview("settings",{el:"#llms-quiz-settings-fields",model:this.model}),this.init_datepickers(),this.init_selects(),this.render_subview("bank",{collection:window.llms_builder.questions});var e=null,t=null;this.get_subview("bank").instance.viewManager.each(function(i){i.quiz=this.model,t=i.model.get("group").name,e!==t&&(e=t,i.$el.before('"))},this),this.model.load_questions(_.bind(function(e){if(e)return alert(LLMS.l10n.translate("An error occurred while trying to load the questions. Please refresh the page and try again.")),this;LLMS.Spinner.stop(this.$el),this.render_subview("list",{el:"#llms-quiz-questions",collection:this.model.get("questions")});var t=this.get_subview("list").instance;t.quiz=this,t.collection.on("add",function(){t.collection.trigger("reorder")},this),t.on("sortStart",t.sortable_start),t.on("sortStop",t.sortable_stop)},this)),this.model.on("new-question-added",function(){var e=this.$el.find("#llms-quiz-questions");e.animate({scrollTop:e.prop("scrollHeight")},200)},this)}return this},render_points:function(e,t){this.$el.find("#llms-quiz-total-points").text(t)},bulk_toggle:function(t){var i="expand"===e(t.target).attr("data-action");this.model.get("questions").each(function(e){e.set("_expanded",i)})},add_new_quiz:function(){var e=this.lesson.get("quiz");_.isEmpty(e)?e=this.lesson.add_quiz():this.lesson.set("quiz_enabled","yes"),this.model=e,this.render()},add_existing_quiz:function(e){this.post_search_popover.hide();var t=e.data;"clone"===e.action?t=_.prepareQuizObjectForCloning(t):(t=_.prepareExistingPostObjectDataForAddingOrCloning(t),t._forceSync=!0),delete t.lesson_id,this.lesson.add_quiz(t),this.model=this.lesson.get("quiz"),this.render()},add_existing_quiz_click:function(e){e.preventDefault(),this.post_search_popover=new i({el:"#llms-existing-quiz",args:{backdrop:!0,closeable:!0,container:".wrap.lifterlms.llms-builder",dismissible:!0,placement:"left",width:480,title:LLMS.l10n.translate("Add Existing Quiz"),content:new n({post_type:"llms_quiz",searching_message:LLMS.l10n.translate("Search for existing quizzes...")}).render().$el,onHide:function(){Backbone.pubSub.off("quiz-search-select")}}}),this.post_search_popover.show(),Backbone.pubSub.once("quiz-search-select",this.add_existing_quiz,this)},on_trashed:function(e){this.lesson.set("quiz_enabled","no"),this.lesson.set("quiz",""),delete this.model,this.render()},show_tools:function(){var e=new i({el:"#llms-show-question-bank",args:{backdrop:!0,closeable:!0,container:"#llms-builder-sidebar",dismissible:!0,placement:"top-left",width:"calc( 100% - 40px )",title:LLMS.l10n.translate("Add a Question"),url:"#llms-quiz-tools"}});e.show(),this.model.on("new-question-added",function(){e.hide()})},get_question_list:function(e){return new o(e)}},r,a,c,d,l))}),n("Views/Assignment",["Views/Popover","Views/PostSearch","Views/_Detachable","Views/_Editable","Views/_Trashable","Views/_Subview","Views/SettingsFields"],function(e,t,i,n,s,o,l){return Backbone.View.extend(_.defaults({state:"default",views:{settings:{class:l,instance:null,state:"default"}},el:"#llms-editor-assignment",events:function(){var e=this.is_addon_available()?window.llms_builder.assignments.get_view_events():{};return _.defaults({"click #llms-existing-assignment":"add_existing_assignment_click","click #llms-new-assignment":"add_new_assignment"},i.events,n.events,s.events,e)},tagName:"div",template:wp.template("llms-assignment-template"),initialize:function(e){this.lesson=e.lesson,"yes"!==this.lesson.get("assignment_enabled")&&_.isEmpty(this.lesson.get("assignment"))||(this.model=this.lesson.get("assignment"),this.model.set_parent(this.lesson)),this.on("model-trashed",this.on_trashed)},render:function(){return this.$el.html(this.template(this.model)),this.model&&this.is_addon_available()&&(this.stopListening(this.model,"change:assignment_type",this.render),this.render_subview("settings",{el:"#llms-assignment-settings-fields",model:this.model}),this.init_selects(),window.llms_builder.assignments.render_editor(this),this.listenTo(this.model,"change:assignment_type",this.render)),this},add_new_assignment:function(){this.is_addon_available()?(this.model=window.llms_builder.assignments.get_assignment({title:LLMS.l10n.replace("%1$s Assignment",{"%1$s":this.lesson.get("title")}),lesson_id:this.lesson.get("id")}),this.lesson.set("assignment_enabled","yes"),this.lesson.set("assignment",this.model),this.render()):this.show_ad_popover("#llms-new-assignment")},add_existing_assignment:function(e){this.post_search_popover.hide();var t=e.data;"clone"===e.action?t=_.prepareAssignmentObjectForCloning(t):(t=_.prepareExistingPostObjectDataForAddingOrCloning(t),t._forceSync=!0),t.lesson_id=this.lesson.get("id"),t=window.llms_builder.construct.get_model("Assignment",t),this.lesson.set("assignment_enabled","yes"),this.lesson.set("assignment",t),this.model=t,this.render()},add_existing_assignment_click:function(i){i.preventDefault(),this.is_addon_available()?(this.post_search_popover=new e({el:"#llms-existing-assignment",args:{backdrop:!0,closeable:!0,container:".wrap.lifterlms.llms-builder",dismissible:!0,placement:"left",width:480,title:LLMS.l10n.translate("Add Existing Assignment"),content:new t({post_type:"llms_assignment",searching_message:LLMS.l10n.translate("Search for existing assignments...")}).render().$el,onHide:function(){Backbone.pubSub.off("assignment-search-select")}}}),this.post_search_popover.show(),Backbone.pubSub.once("assignment-search-select",this.add_existing_assignment,this)):this.show_ad_popover("#llms-existing-assignment")},is_addon_available:function(){return window.llms_builder.assignments},on_trashed:function(e){this.lesson.set("assignment_enabled","no"),this.lesson.set("assignment",""),delete this.model,this.render()},show_ad_popover:function(t){var i=LLMS.l10n.translate("Get Your Students Taking Action"),n=LLMS.l10n.translate("Get Assignments Now!");this.ad_popover=new e({el:t,args:{backdrop:!0,closeable:!0,container:".wrap.lifterlms.llms-builder",dismissible:!0,width:380,title:LLMS.l10n.translate("Unlock LifterLMS Assignments"),closeLabel:LLMS.l10n.translate("Close"),content:""+i+' Great learning content is only half of teaching online. When your learners fully engage, they will take your content and move into action. Remove barriers for your learners by telling them what to do to apply what they just learned. Create graded assignments or simply give them a checklist of action items to complete before moving on.
'+n+"
"}}),this.ad_popover.show()}},i,n,s,o,l))}),n("Views/Editor",["Views/LessonEditor","Views/Quiz","Views/Assignment","Views/_Subview"],function(t,i,n,s){return Backbone.View.extend(_.defaults({state:"lesson",views:{lesson:{class:t,instance:null,state:"lesson"},assignment:{class:n,instance:null,state:"assignment"},quiz:{class:i,instance:null,state:"quiz"}},el:"#llms-editor",events:{'click .llms-editor-nav a[href="#llms-editor-close"]':"close_editor",'click .llms-editor-nav a:not([href="#llms-editor-close"])':"switch_tab"},tagName:"div",template:wp.template("llms-editor-template"),initialize:function(e){this.SidebarView=e.SidebarView,e.tab&&(this.state=e.tab)},render:function(e){return e=e||{},this.$el.html(this.template(this)),this.render_subviews(_.extend(e,{lesson:this.model})),this},close_editor:function(e){e.preventDefault(),Backbone.pubSub.trigger("sidebar-editor-close"),window.location.hash=""},switch_tab:function(t){t.preventDefault();var i=e(t.target),n=i.attr("data-view");this.$el.find(i.attr("href"));this.set_state(n).render(),this.set_hash(n)},set_hash:function(e){var t="lesson:"+this.model.get("id");"lesson"!==e&&(t+=":"+e),window.location.hash=t}},s))}),n("Views/Elements",["Models/Section","Views/Section","Models/Lesson","Views/Lesson","Views/Popover","Views/PostSearch"],function(t,i,n,s,o,l){return Backbone.View.extend({el:"#llms-elements",events:{"click #llms-new-section":"add_new_section","click #llms-new-lesson":"add_new_lesson","click #llms-existing-lesson":"add_existing_lesson"},tagName:"div",template:wp.template("llms-elements-template"),initialize:function(e){this.SidebarView=e.SidebarView,this.listenTo(this.SidebarView.CourseView.model.get("sections"),"add",this.maybe_disable_buttons),this.listenTo(this.SidebarView.CourseView.model.get("sections"),"remove",this.maybe_disable_buttons)},render:function(){return this.$el.html(this.template()),this.draggable(),this.maybe_add_initial_section(),this},draggable:function(){e("#llms-new-section").draggable({appendTo:"#llms-sections",cancel:!1,connectToSortable:".llms-sections",helper:function(){return new i({model:new t}).render().$el},start:function(){e(".llms-sections").addClass("dragging")},stop:function(){e(".llms-sections").removeClass("dragging")}}),e("#llms-new-lesson").draggable({appendTo:"#llms-sections",cancel:!1,connectToSortable:".llms-lessons",helper:function(){return new s({model:new n}).render().$el},start:function(){e(".llms-lessons").addClass("dragging")},stop:function(){e(".llms-lessons").removeClass("dragging"),e(".drag-expanded").removeClass(".drag-expanded")}})},add_new_section:function(e){e.preventDefault(),Backbone.pubSub.trigger("add-new-section")},add_new_lesson:function(e){e.preventDefault(),Backbone.pubSub.trigger("add-new-lesson")},add_existing_lesson:function(e){e.preventDefault();var t=new o({el:"#llms-existing-lesson",args:{backdrop:!0,closeable:!0,container:".wrap.lifterlms.llms-builder",dismissible:!0,placement:"left",width:480,title:LLMS.l10n.translate("Add Existing Lesson"),content:new l({post_type:"lesson",searching_message:LLMS.l10n.translate("Search for existing lessons...")}).render().$el}});t.show(),Backbone.pubSub.on("lesson-search-select",function(){t.hide()})},maybe_add_initial_section:function(){var t=e("#llms-new-lesson, #llms-existing-lesson");this.SidebarView.CourseView.model.get("sections").length?t.removeAttr("disabled"):(Backbone.pubSub.trigger("add-new-section"),Backbone.pubSub.trigger("add-new-lesson"),Backbone.pubSub.trigger("add-new-lesson"),Backbone.pubSub.trigger("add-new-lesson"))}})}),n("Views/Utilities",[],function(){return Backbone.View.extend({el:"#llms-utilities",events:{"click #llms-collapse-all":"collapse_all","click #llms-expand-all":"expand_all"},tagName:"div",template:wp.template("llms-utilities-template"),initialize:function(){},render:function(){return this.$el.html(this.template()),this},collapse_all:function(e){e.preventDefault(),Backbone.pubSub.trigger("collapse-all")},expand_all:function(e){e.preventDefault(),Backbone.pubSub.trigger("expand-all")}})}),n("Views/Sidebar",["Views/Editor","Views/Elements","Views/Utilities","Views/_Subview"],function(t,i,n,s){return Backbone.View.extend(_.defaults({state:"builder",views:{elements:{class:i,instance:null,state:"builder"},utilities:{class:n,instance:null,state:"builder"},editor:{class:t,instance:null,state:"editor"}},el:"#llms-builder-sidebar",events:{"click #llms-save-button":"save_now","click #llms-exit-button":"exit_now","click .llms-builder-error":"clear_errors"},tagName:"aside",template:wp.template("llms-sidebar-template"),initialize:function(t){this.CourseView=t.CourseView,this.render(),Backbone.pubSub.on("current-save-status",this.changes_made,this),Backbone.pubSub.on("heartbeat-send",this.heartbeat_send,this),Backbone.pubSub.on("heartbeat-tick",this.heartbeat_tick,this),Backbone.pubSub.on("lesson-selected",this.on_lesson_select,this),Backbone.pubSub.on("sidebar-editor-close",this.on_editor_close,this),this.$saveButton=e("#llms-save-button")},render:function(t){t=t||{},this.$el.html(this.template()),this.render_subviews(_.extend(t,{SidebarView:this}));var i=e(".wrap.lifterlms.llms-builder");return"builder"===this.state?i.removeClass("editor-active"):i.addClass("editor-active"),this.$saveButton=this.$el.find("#llms-save-button"),this},add_error:function(e){this.$el.find(".llms-builder-save").prepend(e)},clear_errors:function(){this.$el.find(".llms-builder-save .llms-builder-error").remove()},changes_made:function(e){e.saving||(e.has_unsaved_changes?(this.$saveButton.attr("data-status","unsaved"),this.$saveButton.removeAttr("disabled")):(this.$saveButton.attr("data-status","saved"),this.$saveButton.attr("disabled","disabled")))},exit_now:function(){window.location.href=window.llms_builder.CourseModel.get_edit_post_link()},heartbeat_send:function(e){e.saving&&(LLMS.Spinner.start(this.$saveButton.find("i"),"small"),this.$saveButton.attr({"data-status":"saving",disabled:"disabled"}))},heartbeat_tick:function(t,i){if(!t.saving){var n="saved";if(this.clear_errors(),"error"===i.status){n="error";var s=i.message,o=e(' ');"object"==typeof s?_.each(s,function(e){o.append(""+e+" ")}):o=o.append(""+s+" "),this.add_error(o)}this.$saveButton.find(".llms-spinning").remove(),this.$saveButton.attr({"data-status":n,disabled:"disabled"})}},is_editor_active:function(){return"editor"===this.state},on_editor_close:function(){this.set_state("builder").render()},on_lesson_select:function(e,t){"editor"!==this.state?this.set_state("editor"):this.remove_subview("editor"),this.render({model:e,tab:t})},save_now:function(){window.llms_builder.sync.save_now()}},s))}),i(["vendor/wp-hooks","vendor/backbone.collectionView","vendor/backbone.trackit","Controllers/Construct","Controllers/Debug","Controllers/Schemas","Controllers/Sync","Models/loader","Views/Course","Views/Sidebar"],function(t,i,n,s,o,l,r,a,c,d){function u(e,t){return _.isArray(t)&&-1!==t.indexOf(e)||e==t}window.llms_builder.debug=new o(window.llms_builder.debug),window.llms_builder.construct=new s,window.llms_builder.schemas=new l(window.llms_builder.schemas),_.mixin({checked:function(e,t){return u(e,t)?' checked="checked"':""},deepClone:function(e){var t=_.clone(e);return _.each(t,function(e,i){!_.isFunction(e)&&_.isObject(e)&&(t[i]=_.deepClone(e))}),t},getEditor:function(){if(void 0!==wp.oldEditor){var e=wp.oldEditor;return void 0!==wp.editor&&void 0!==wp.editor.getDefaultSettings&&(e.getDefaultSettings=wp.editor.getDefaultSettings),e}if(void 0!==wp.editor&&void 0!==wp.editor.autop)return wp.editor},prepareQuizObjectForCloning:function(e){return delete e.id,delete e.lesson_id,_.each(e.questions,function(e){e=_.prepareQuestionObjectForCloning(e)}),e=_.prepareExistingPostObjectDataForAddingOrCloning(e)},prepareQuestionObjectForCloning:function(e){return delete e.id,delete e.parent_id,e.image&&_.isObject(e.image)&&(e.image._forceSync=!0),e.choices&&_.each(e.choices,function(e){delete e.question_id,delete e.id,"image"===e.choice_type&&_.isObject(e.choice)&&(e.choice._forceSync=!0)}),e=_.prepareExistingPostObjectDataForAddingOrCloning(e)},prepareAssignmentObjectForCloning:function(e){return delete e.id,delete e.lesson_id,"tasklist"===e.assignment_type&&_.each(e.tasks,function(e){delete e.id,delete e.assignment_id}),e=_.prepareExistingPostObjectDataForAddingOrCloning(e)},prepareExistingPostObjectDataForAddingOrCloning:function(e){return e.author&&_.isObject(e.author)&&e.author.id&&(e.author=e.author.id),e},selected:function(e,t){return u(e,t)?' selected="selected"':""},stripFormatting:function(t,i){i||(i=["b","i","u","strong","em"]);var n=e(""+t+"
");return n.find("*").not(i.join(",")).each(function(){e(this).replaceWith(this.innerHTML)}),n.html()}}),Backbone.pubSub=_.extend({},Backbone.Events),e(document).trigger("llms-builder-pre-init"),window.llms_builder.questions=window.llms_builder.construct.get_collection("QuestionTypes",window.llms_builder.questions);var h=window.llms_builder.construct.get_model("Course",window.llms_builder.course);window.llms_builder.CourseModel=h,window.llms_builder.sync=new r(h,window.llms_builder.sync);var p=new c({model:h}),g=new d({CourseView:p});if(e(document).trigger("llms-builder-init",{course:p,sidebar:g}),window.location.hash){var m=window.location.hash;if(-1===m.indexOf("#lesson:"))return;var f=m.replace("#lesson:","").split(":"),b=e("#llms-lesson-"+f[0]);b.length&&LLMS.wait_for(function(){return void 0!==_.getEditor()&&void 0!==window.tinymce},function(){b.closest(".llms-builder-item.llms-section").find("a.llms-action-icon.expand").trigger("click");var t=f[1]?f[1]:"lesson";e("#llms-lesson-"+f[0]).find("a.llms-action-icon.edit-"+t).trigger("click")})}}),n("main",function(){})}(jQuery);
+
+//# sourceMappingURL=../maps/js/llms-builder.min.js.map
diff --git a/assets/js/llms-components.js.map b/assets/js/llms-components.js.map
new file mode 100644
index 0000000000..9d3ae31a82
--- /dev/null
+++ b/assets/js/llms-components.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"js/llms-components.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;AAA4C;AACwH;AACrI;AACL;;AAE1B;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,4CAAI,IAAI;;AAExB;AACA;AACA;;AAEA,QAAQ,6CAAK;AACb;AACA;;AAEA,IAAI,4CAAI;AACR;;AAEA,SAAS,6CAAK,QAAQ,4CAAQ;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,6CAAK;AACjB;AACA;AACA,gCAAgC,4CAAI;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA,qDAAqD,4CAAQ;AAC7D;;AAEA;AACA,yBAAyB,+CAAO;AAChC;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,4CAAI;AAChC;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,4CAAI;AAC7B;AACA,IAAI,mBAAmB,4CAAI;;AAE3B;AACA;;AAEA;AACA,SAAS,+CAAO,SAAS,6CAAK;AAC9B,GAAG;;;AAGH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA,IAAI;AACJ;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB,kBAAkB;AAC3C,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gDAAgD,QAAQ;AACxD;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA,4BAA4B,4CAAQ;;AAEpC;AACA;;AAEA,MAAM,KAAqC;AAC3C;AACA;;AAEA;AACA,oFAAoF;AACpF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iEAAiE;;AAEjE,sBAAsB,mBAAmB;AACzC;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;;AAEA;;AAEA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;;AAEA,KAAK;AACL;;AAEA;AACA;AACA,6BAA6B,6CAAS,EAAE,KAAqC;AAC7E;AACA;AACA;AACA,UAAU,2CAA2C,2CAAO;AAC5D;AACA;AACA,iDAAiD;AACjD;AACA;AACA,MAAM,EAAE,CAEF;AACN,qBAAqB,kDAAU;;AAE/B;AACA,aAAa,iDAAS,CAAC,+CAAO;AAC9B;;AAEA;AACA;;AAEA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC,0BAA0B;;AAE/D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,sDAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;;AAEA,iEAAe,WAAW,EAAC;;;;;;;;;;;;;;;;AClXY;;AAEvC,2+HAA2+H;;AAE3+H,iCAAiC,4DAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,WAAW,EAAC;;;;;;;;;;;;;;;ACd3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,OAAO,EAAC;;;;;;;;;;;;;;;;;ACRsC;;AAE7D;AACA;AACA;;AAEA;AACA,SAAS,8DAAsB;AAC/B,CAAC;;AAED,iEAAe,oBAAoB,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVmD;AAC9C;AACiB;AACV;AACsD;AACnB;AAC9B;AACmD;;AAExG,uBAAuB;;AAEvB,yCAAyC,oDAAa;AACtD;AACA;AACA;AACA;AACA;AACA,oDAAoD,0DAAW;AAC/D;AACA,CAAC;;AAED,IAAI,IAAqC;AACzC;AACA;;AAEA;AACA;AACA,SAAS,iDAAU;AACnB;;AAEA;AACA;AACA,sBAAsB,iDAAU;AAChC;AACA,gBAAgB,iDAAU;AAC1B;AACA,GAAG;AACH;;AAEA,kCAAkC,oDAAa,GAAG;;AAElD,IAAI,IAAqC;AACzC;AACA;;AAEA;AACA,SAAS,iDAAU;AACnB;;AAEA;AACA;AACA;;AAEA,QAAQ,KAAqC;AAC7C,qGAAqG,SAAS,EAAE;AAChH;;AAEA;AACA;;AAEA,MAAM,KAAqC;AAC3C;AACA;;AAEA,SAAS,8EAAQ,GAAG;AACpB;;AAEA,0CAA0C,iEAAW;AACrD,SAAS,iEAAW;AACpB;AACA,GAAG;AACH,CAAC;AACD;AACA,cAAc,iDAAU;;AAExB;AACA;AACA;;AAEA,sBAAsB,oDAAa;AACnC;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,gBAAgB,iDAAU;AAC1B,wBAAwB,oDAAa,YAAY,8EAAQ;AACzD;AACA;AACA,KAAK;AACL,KAAK;;;AAGL,+BAA+B,iDAAU;AACzC;AACA,SAAS,0GAAoB;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;;AAEA,wIAAwI;AACxI;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,kBAAkB;AACpC,oEAAoE;;AAEpE,iCAAiC;;AAEjC,6DAA6D;AAC7D;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC;AACjC;;AAEA,MAAM,KAAqC;AAC3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE,8DAAc;AAChB,cAAc,sHAAwC;AACtD,WAAW,4DAAY;AACvB,GAAG;;AAEH;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,mEAAmB;AACnC,IAAI;AACJ;AACA;;AAEA,mBAAmB,mEAAe,8BAA8B,iDAAU;;AAE1E,MAAM,KAAqC;AAC3C;;AAEA;AACA,mBAAmB,mEAAe,4CAA4C;AAC9E;AACA;;AAEA;AACA;;AAEA;AACA,qFAAqF,MAAqC;AAC1H;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,oDAAa,CAAC,2CAAQ,qBAAqB,oDAAa;AAC9E;AACA;AACA;AACA,GAAG,gBAAgB,oDAAa;AAChC,CAAC;;AAED,IAAI,IAAqC;AACzC;AACA;;AAEsN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzOlJ;AAC5C;AACyI;AAC0C;AACnK;AACT;AACE;AAC2C;AACO;AAC9B;AACyF;;AAE9I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,4EAAmB;AAC3C;AACA,WAAW,sDAAmB;AAC9B;;AAEA;AACA;AACA,6BAA6B,uEAAO;AACpC,6BAA6B,2EAAkB;;AAE/C,kBAAkB,gBAAgB;AAClC;AACA,IAAI;;;AAGJ,SAAS,sDAAmB;AAC5B;;AAEA,yCAAyC;AACzC;AACA;;AAEA,4BAA4B,2EAAgB;AAC5C,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,mEAAe,sBAAsB,iDAAU,CAAC,uEAAY;AAC/E;AACA;AACA;;;AAGA,iBAAiB,6CAAM;AACvB,EAAE,kHAAoC;AACtC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,6BAA6B;;AAE7B;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE,kHAAoC;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM,4DAAY;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,CAAC;;AAED,IAAI,IAAqC;AACzC;AACA;;AAEA;AACA,sEAAsE,aAAa;AACnF;AACA;;AAEA,SAAS,mEAAe;AACxB;;AAEA;AACA;AACA,6CAA6C;;AAE7C;AACA;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS,SAAS;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ,gBAAgB,KAAqC;AACrD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;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3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAE2B;;;;;;;;;;;;;;;AC3T3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA,SAAS,UAAU;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,OAAO,EAAC;;;;;;;;;;;;;;;ACtDvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;ACjD5B;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA,SAAS,aAAa;;AAEtB,kCAAkC,mCAAmC;;AAErE,0BAA0B,wBAAwB;AAClD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;;;AAGA,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;;AAEA;;AAEA;AACA;;AAEA,mDAAmD,aAAoB;AACvE;AACA;AACA,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,QAAQ,IAAqC;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR,YAAY,KAAqC,yHAAyH;AAC1K;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,QAAQ,IAAqC;AAC7C;AACA;AACA;;AAEA;AACA,CAAC;;AAEqB;;;;;;;;;;;;;;;;;;;;;;;ACzJoC;AACE;AACX;AACe;AACmB;AAC9B;AACmD;;AAExG,+BAA+B,8DAAW;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,gRAAgR,uCAAuC;;AAEvT;AACA;AACA;AACA;AACA,EAAE,8DAAc;AAChB,cAAc,sHAAwC;AACtD,WAAW,4DAAY;AACvB,GAAG;;AAEH;AACA;;AAEA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gDAAgD;AAChD;;AAEA;AACA;AACA,MAAM;AACN,UAAU,KAAqC;AAC/C;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,SAAS;AACtB,YAAY,KAAqC;AACjD;AACA;;AAEA;AACA;AACA,MAAM;;;AAGN,iBAAiB,iDAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA4B,iDAAU,CAAC,6CAAY;AACnD;;AAEA;AACA,oBAAoB,mEAAmB;AACvC,QAAQ;AACR;AACA;;AAEA,uBAAuB,mEAAe;AACtC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,oDAAa,CAAC,2CAAQ,qBAAqB,oDAAa;AAClF;AACA;AACA;AACA,OAAO,gBAAgB,oDAAa;AACpC,K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W,CAAE3I,KAAM,CAAC;EACnC;AACD;;;;;;;;;;AClGa;;AAEb,cAAc,mBAAO,CAAC,uFAAU;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,iBAAiB;AACrC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;;;AAIb,IAAI,IAAqC;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA,kDAAkD;;AAElD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB,sBAAsB;AACtB,uBAAuB;AACvB,uBAAuB;AACvB,eAAe;AACf,kBAAkB;AAClB,gBAAgB;AAChB,YAAY;AACZ,YAAY;AACZ,cAAc;AACd,gBAAgB;AAChB,kBAAkB;AAClB,gBAAgB;AAChB,mBAAmB;AACnB,wBAAwB;AACxB,yBAAyB;AACzB,yBAAyB;AACzB,iBAAiB;AACjB,oBAAoB;AACpB,kBAAkB;AAClB,cAAc;AACd,cAAc;AACd,gBAAgB;AAChB,kBAAkB;AAClB,oBAAoB;AACpB,kBAAkB;AAClB,0BAA0B;AAC1B,cAAc;AACd,GAAG;AACH;;;;;;;;;;;ACpLa;;AAEb,IAAI,KAAqC,EAAE,EAE1C,CAAC;AACF,EAAE,qKAAyD;AAC3D;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iEAAe,UAAU,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChDgC;AAC3B;AACI;AAC6B;AACkB;AACd;AACA;AAC1B;AAClB;AAC8B;AACE;AACV;AACP;AACQ;AACH;AACH;AACM;AAC5B;AAC+B;AAC7B;;AAErB,+BAA+B,iDAAU;AACzC,0BAA0B,iEAAQ;AAClC,oBAAoB,yEAAe;AACnC,sBAAsB,gDAAmB,CAAC,4DAAM,EAAE,8EAAQ;AAC1D;AACA,GAAG;AACH,CAAC;;AAED,iEAAe,WAAW,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7B+B;AACsxB;AACxwB;AACN;AACN;AACkB;AAC/C;AACsD;AAC3C;AACL;AACqD;;AAE1F,gDAAgD;;AAEhD,WAAW,MAAqC,GAAG,CAGlD,CAAC;AACF;AACA,0BAA0B,aAAa,SAAS,8BAA8B,WAAW,UAAU,kBAAkB,gBAAgB,UAAU,mBAAmB,eAAe;AACjL,mDAAmD,cAAc;AACjE;AACA;;AAEA;AACA,SAAS,mDAAG,SAAS,8EAAQ;AAC7B;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;;AAE3C,iBAAiB,8CAAO;AACxB,WAAW,yDAAc,CAAC,yDAAc,GAAG,kDAAkD;AAC7F,GAAG,uBAAuB;;AAE1B,qBAAqB,8CAAO;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA,SAAS;;;AAGT;AACA,4DAA4D;;AAE5D;AACA;;AAEA,0BAA0B,yDAAc;AACxC;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA,GAAG;AACH,oBAAoB,8CAAO;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH,oBAAoB,8CAAO;AAC3B;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,GAAG;AACH,qBAAqB,8CAAO;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,GAAG;AACH;AACA,yBAAyB,mDAAG,CAAC,2CAAQ,QAAQ,mDAAG;AAChD;AACA,GAAG,iBAAiB,mDAAG;AACvB;AACA,GAAG;AACH;AACA,SAAS,mDAAG,CAAC,2CAAQ,QAAQ,mDAAG;AAChC;AACA,GAAG,uCAAuC,mDAAG;AAC7C;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;;AAEA,gBAAgB,uBAAuB;AACvC;;AAEA,kBAAkB,8BAA8B;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA,sCAAsC,uDAAU;;AAEhD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gCAAgC,yDAAc;AAC9C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,8FAAwB;;AAEtC;AACA,sBAAsB,yDAAW;AACjC,SAAS,mDAAG,UAAU,8EAAQ;AAC9B;AACA,GAAG;AACH,sBAAsB,mDAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,EAAE,MAAqC,GAAG,CAAE,KAAK,iBAAiB,GAAG,MAAqC,GAAG,CAAE,+CAA+C,cAAc;AACjL,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,6CAAM;AACvB,cAAc,6CAAM;AACpB,mBAAmB,6CAAM;AACzB,qBAAqB,6CAAM;AAC3B,yBAAyB,kDAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA,GAAG;AACH,gBAAgB,kDAAW;AAC3B;AACA,GAAG;AACH,qBAAqB,kDAAW;AAChC;AACA;AACA,GAAG;AACH,oBAAoB,kDAAW;AAC/B;AACA;AACA,GAAG;AACH,uBAAuB,kDAAW;AAClC;AACA;AACA,qBAAqB,qDAAqB;AAC1C;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH,sBAAsB,kDAAW;AACjC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE,gDAAS;AACX;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAM,GAAG;AAChC,qBAAqB,6CAAM;AAC3B,sBAAsB,kDAAW;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;;;AAGN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,MAAM;;;AAGN;AACA,iCAAiC,mBAAmB;AACpD,+EAA+E;;AAE/E;AACA;AACA;AACA;AACA,MAAM;;;AAGN;AACA,GAAG;AACH,yBAAyB,kDAAW;AACpC;AACA;AACA,8CAA8C;;AAE9C,4DAA4D;;AAE5D;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,MAAM;;;AAGN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE,gDAAS;AACX;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,8CAA8C;;AAE9C;AACA;AACA;;AAEA,YAAY,MAAqC,GAAG,CAGnD,CAAC;AACF;AACA,0BAA0B,OAAO,SAAS,QAAQ,MAAM,oBAAoB;AAC5E,mDAAmD,cAAc;AACjE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA,SAAS,mDAAG,CAAC,2CAAQ,uBAAuB,mDAAG;AAC/C;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,qDAAiB;AACnC,aAAa,qDAAY;AACzB,WAAW,qDAAK;AAChB,qBAAqB,qDAAoB;AACzC,SAAS,qDAAQ;AACjB,gBAAgB,qDAAe;AAC/B,uBAAuB,qDAAsB;AAC7C,sBAAsB,qDAAqB;AAC3C,SAAS,qDAAQ;AACjB,oBAAoB,qDAAmB;AACvC,kBAAkB,qDAAiB;AACnC,QAAQ,qDAAO;AACf,YAAY,qDAAW;AACvB,cAAc,qDAAa;AAC3B,cAAc,qDAAa;AAC3B,mBAAmB,qDAAkB;AACrC,oBAAoB,qDAAmB;AACvC,oBAAoB,qDAAmB;AACvC,UAAU,qDAAS;AACnB,eAAe,qDAAc;AAC7B,eAAe,qDAAK;AACpB,kBAAkB,qDAAiB;AACnC,GAAG;AACH;;AAEA;AACA;;AAEA;AACA,eAAe,yDAAc,GAAG,WAAW;;;AAG3C;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB,kBAAkB;;AAElB,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,yDAAc;AACnC,sBAAsB,yDAAc;AACpC;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,yDAAc;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA,GAAG,SAAS,qDAAU;AACtB;;AAEA;AACA;AACA;AACA,wDAAwD,wFAAkB;AAC1E;AACA,OAAO;AACP,MAAM;AACN;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,EAAE,+EAAS;;AAEX,eAAe,yDAAY;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,qFAAe;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,SAAS;;AAET;AACA,QAAQ;;;AAGR;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,uBAAuB,yDAAiB;AACxC;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA,yBAAyB,yDAAiB,WAAW,wFAAkB;AACvE,UAAU;AACV,yBAAyB,yDAAkB;AAC3C;AACA,QAAQ;AACR,2BAA2B,yDAAkB;AAC7C;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP,qBAAqB,yDAAY;;AAEjC;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;;AAEA,qBAAqB,yDAAY;AACjC;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,yDAAY;;AAEjC;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA,0EAA0E,aAAa;AACvF;AACA;;AAEA,aAAa,2DAAgB;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,yDAAiB;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,yDAAc;AACrC;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,mDAAmD,yDAAiB;AACpE;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC;AACA;;AAEA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;;;AAGR;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,yCAAyC;AACzC;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,aAAa;;AAEb;AACA,YAAY;AACZ;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,yDAAU;AACxC;AACA;;AAEA,EAAE,kFAAY;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;;;AAGR;AACA,QAAQ,yDAAc;AACtB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,MAAM;;AAEN,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,oDAAoD;;AAEpD;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,YAAY;AACZ;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;;AAGA;AACA;AACA,QAAQ;AACR;;;AAGA,aAAa,yDAAc,CAAC,yDAAc,GAAG;AAC7C;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,sDAAsD;;AAEtD,2BAA2B,yDAAc,CAAC,yDAAc,CAAC,yDAAc;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,QAAQ;AACR;AACA,OAAO;;AAEP;AACA;AACA,4BAA4B,gDAAmB,aAAa,8EAAQ;AACpE;AACA;AACA;AACA,oBAAoB,qDAAI;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA,0BAA0B,gDAAmB,QAAQ,8EAAQ,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gDAAgD,gDAAmB,cAAc,8EAAQ,GAAG;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,gDAAmB,aAAa,8EAAQ,GAAG;AACzE;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,gDAAmB,cAAc,8EAAQ,GAAG;AACtE;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gDAAmB,iBAAiB,8EAAQ,GAAG;AACzE;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gDAAmB,mBAAmB,8EAAQ,GAAG;AAC3E;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,wEAAwE;;;AAGxE;AACA;AACA;AACA;AACA,0BAA0B,gDAAmB,qBAAqB,8EAAQ,GAAG;AAC7E;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gDAAmB,oBAAoB,8EAAQ,GAAG;AAC5E;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAmB,SAAS,8EAAQ,GAAG;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gDAAmB,QAAQ,8EAAQ,GAAG;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,aAAa;AACb;AACA,aAAa;AACb,YAAY;AACZ;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA,SAAS;AACT;AACA,8BAA8B,gDAAmB;AACjD,QAAQ;AACR;AACA;AACA,SAAS;;AAET;AACA,8BAA8B,gDAAmB;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gDAAmB,CAAC,qDAAU,EAAE,8EAAQ,GAAG;AAChF;AACA;AACA;AACA;AACA,4BAA4B,gDAAmB,OAAO,8EAAQ,GAAG;AACjE;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS,gBAAgB,gDAAmB;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT,8BAA8B,gDAAmB,WAAW,8EAAQ,GAAG;AACvE;AACA;;AAEA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO,GAAG;AACV;AACA;;AAEA,yEAAyE,gDAAmB,aAAa,8EAAQ,GAAG;AACpH;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX,8BAA8B,gDAAmB;AACjD;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA,gCAAgC,gDAAmB;AACnD;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW,iBAAiB,gDAAmB;AAC/C;AACA;AACA,WAAW;AACX,8BAA8B,gDAAmB;AACjD;AACA,QAAQ;AACR;;AAEA,4BAA4B,gDAAmB;AAC/C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gDAAmB,aAAa,8EAAQ,GAAG;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gDAAmB,kBAAkB,8EAAQ,GAAG;AAC1E;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO,yCAAyC,gDAAmB,UAAU,8EAAQ,GAAG;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO,gBAAgB,gDAAmB,iBAAiB,8EAAQ,GAAG;AACtE;AACA,OAAO,sEAAsE,gDAAmB,sBAAsB,8EAAQ,GAAG;AACjI;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yDAAU;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,yDAAY;AAC7B;AACA;AACA;AACA;AACA,QAAQ;AACR;;;AAGA;AACA;AACA;;AAEA,aAAa,yDAAc,CAAC,yDAAc,CAAC,yDAAc,GAAG,kDAAkD;AAC9G;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA,CAAC,CAAC,4CAAS;;AAEX;;AAEgJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjsFtF;AACgB;AACY;AACI;AACpB;AACd;AACgB;AACN;AACN;AACc;AACzB;AACR;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,gFAAgF;AAChF;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,EAAE;AACF;AACA;;AAEA;AACA;AACA,MAAM,6EAAO;AACb;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8FAAwB;;AAE/C,0BAA0B;AAC1B,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,8BAA8B;AAC3D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+FAA+F,aAAa;AAC5G;AACA;;AAEA;AACA,gBAAgB,oFAAc;AAC9B;;AAEA;AACA,GAAG;AACH;AACA,gBAAgB,oFAAc;AAC9B;AACA;;AAEA;AACA;AACA,GAAG,IAAI;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,4DAA4D;AAC5D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA,UAAU;AACV;;;AAGA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;;;AAGR;AACA,6CAA6C;AAC7C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,EAAE,qFAAiB,4CAA4C,qFAAiB,6CAA6C,qFAAiB,uCAAuC,qFAAiB,yFAAyF,qFAAiB,6CAA6C,qFAAiB,0CAA0C,qFAAiB,iCAAiC,qFAAiB,0BAA0B,qFAAiB;AACzgB;AACA,0CAA0C,oDAAa;AACvD;AACA,CAAC,GAAG;;AAEJ;AACA,EAAE,+EAAS;;AAEX;;AAEA;AACA;;AAEA,IAAI,qFAAe;;AAEnB,wEAAwE,aAAa;AACrF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C,kBAAkB;AAC/D;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA,EAAE,kFAAY;AACd;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA,CAAC,CAAC,4CAAS;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,+EAAS;;AAEX;;AAEA;AACA;;AAEA,IAAI,qFAAe;;AAEnB,2EAA2E,eAAe;AAC1F;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,0EAA0E;;AAE1E;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA,EAAE,kFAAY;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET,wBAAwB,oDAAG,QAAQ,8EAAQ;AAC3C;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,aAAa,oDAAG;AAChB;AACA;AACA;AACA,OAAO,0BAA0B,wDAAY;AAC7C;AACA,GAAG;;AAEH;AACA,CAAC,CAAC,4CAAS;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;;AAEA;;AAEA,8CAA8C;;AAE9C,YAAY,MAAqC,GAAG,CAGnD,CAAC;AACF;AACA,gCAAgC,kBAAkB,cAAc,oBAAoB,eAAe,UAAU;AAC7G,mDAAmD,cAAc;AACjE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,8FAAwB;;AAEtC,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,SAAS,oDAAG,MAAM,8EAAQ;AAC1B;AACA,GAAG,UAAU,oDAAG;AAChB;AACA,GAAG;AACH;AACA;AACA,SAAS,oDAAG,MAAM,8EAAQ;AAC1B;AACA,GAAG,UAAU,oDAAG;AAChB;AACA,GAAG;AACH,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG,2BAA2B,oDAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG,2BAA2B,oDAAG;AACjC,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,SAAS,8EAAQ,GAAG;AAChC;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,GAAG;AACH;AACA;;AAEA,2BAA2B,0DAAS,uCAAuC,4FAAsB,uBAAuB,aAAa,UAAU,aAAa;AAC5J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,oDAAG;AACZ,sBAAsB,oDAAK;AAC3B,gGAAgG;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,EAAE,MAAqC,GAAG,CAAE,KAAK,iBAAiB,GAAG,MAAqC,GAAG,CAAE,+CAA+C,cAAc;AACjL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG,eAAe,oDAAG;AACrB;AACA;AACA,GAAG,GAAG,oDAAG;AACT;AACA;AACA,GAAG,GAAG,oDAAG;AACT;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA,KAAK;AACL,GAAG,eAAe,oDAAG,UAAU,8EAAQ,GAAG;AAC1C;AACA;AACA;AACA;AACA,GAAG,WAAW,oDAAG;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,8FAAwB;;AAE/C,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8FAAwB;;AAE3C,SAAS,oDAAG;AACZ;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG,EAAE,oDAAG,UAAU,8EAAQ;AAC1B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA,GAAG,2BAA2B,oDAAG;AACjC;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,CAAC,uDAAU;AACvB;AACA;AACA,WAAW,oDAAG;AACd;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK,EAAE,oDAAG;AACV;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK,aAAa,oDAAG;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAG,QAAQ,8EAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;;AAEw1B;;;;;;;;;;;;;;;;;;;;;AC1jDhxB;AACc;AAChB;AACoB;AACzB;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8FAAwB;;AAEhD;AACA,oBAAoB,6CAAM;AAC1B,gBAAgB,6CAAM;;AAEtB,kBAAkB,+CAAQ;AAC1B,mBAAmB,oFAAc;AACjC;AACA;;AAEA,mBAAmB,+CAAQ;AAC3B,mBAAmB,oFAAc;AACjC;AACA;;AAEA,mBAAmB,+CAAQ;AAC3B,mBAAmB,oFAAc;AACjC;AACA;;AAEA,mBAAmB,+CAAQ;AAC3B,mBAAmB,oFAAc;AACjC;AACA;;AAEA,mBAAmB,+CAAQ;AAC3B,oBAAoB,oFAAc;AAClC;AACA;;AAEA,oBAAoB,+CAAQ;AAC5B,oBAAoB,oFAAc;AAClC;AACA;;AAEA,oBAAoB,+CAAQ,GAAG;AAC/B,oBAAoB,oFAAc;AAClC;AACA;;AAEA,oBAAoB,+CAAQ;AAC5B,oBAAoB,oFAAc;AAClC;AACA;;AAEA,oBAAoB,+CAAQ;AAC5B,oBAAoB,oFAAc;AAClC;AACA;;AAEA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA,EAAE,gDAAS;AACX;AACA;AACA;AACA;AACA,GAAG;AACH,oBAAoB,kDAAW;AAC/B;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH,EAAE,gDAAS;AACX;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;;AAEA,GAAG;AACH,sBAAsB,kDAAW;AACjC,qBAAqB,yDAAiB;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,yDAAc,CAAC,yDAAc,GAAG,mBAAmB,EAAE,qFAAe,GAAG;AACzG,OAAO;AACP;AACA,GAAG;AACH;AACA,SAAS,yDAAc,CAAC,yDAAc,GAAG,sBAAsB;AAC/D;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEyB;;;;;;;;;;;;;;;;;;;;ACzJqC;AACQ;AACoB;AAC5C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8FAAwB;;AAEhD,kBAAkB,+CAAQ;AAC1B,mBAAmB,oFAAc;AACjC;AACA;;AAEA,mBAAmB,+CAAQ;AAC3B,mBAAmB,oFAAc;AACjC;AACA;;AAEA,mBAAmB,+CAAQ;AAC3B,mBAAmB,oFAAc;AACjC;AACA;;AAEA,iBAAiB,kDAAW;AAC5B;AACA;AACA;;AAEA;AACA,GAAG;AACH,sBAAsB,kDAAW;AACjC;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH,mBAAmB,kDAAW;AAC9B;AACA;AACA;;AAEA;AACA,GAAG;AACH,oBAAoB,kDAAW;AAC/B;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA,SAAS,yDAAc,CAAC,yDAAc,GAAG,sBAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEgC;;;;;;;;;;;ACjFhC;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;;;;;ACAe;AACf;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACRe;AACf;AACA;;;;;;;;;;;;;;;ACFqD;AACtC;AACf,iCAAiC,gEAAgB;AACjD;;;;;;;;;;;;;;ACHe;AACf;AACA;AACA;AACA;;;;;;;;;;;;;;ACJA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;ACjBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACbe;AACf;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACfiD;AAClC;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH,kBAAkB,8DAAc;AAChC;;;;;;;;;;;;;;ACjBe;AACf;AACA;;;;;;;;;;;;;;ACFe;AACf;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4BAA4B,+BAA+B;AAC3D;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;AC5Be;AACf;AACA;;;;;;;;;;;;;;ACFe;AACf;AACA;;;;;;;;;;;;;;;ACF6E;AAC9D;AACf;AACA,eAAe,4EAA4B;AAC3C;;AAEA;AACA;;AAEA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;AClBe;AACf;AACA;AACA;AACA;;AAEA,cAAc,uBAAuB;AACrC;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACbe;AACf;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACNiD;AACY;AACY;AACtB;AACpC;AACf,SAAS,8DAAc,SAAS,oEAAoB,YAAY,0EAA0B,YAAY,+DAAe;AACrH;;;;;;;;;;;;;;ACNe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;ACVuD;AACJ;AACsB;AAClB;AACxC;AACf,SAAS,iEAAiB,SAAS,+DAAe,SAAS,0EAA0B,SAAS,iEAAiB;AAC/G;;;;;;;;;;;;;;ACNe;AACf;;AAEA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH;;;;;;;;;;;;;;;ACRqD;AACtC;AACf;AACA,oCAAoC,gEAAgB;AACpD;AACA;AACA;AACA,sFAAsF,gEAAgB;AACtG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRO;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACnBmE;AACU;AACvC;AACJ;AACL;;AAEpC;AACA,WAAW,YAAY;AACvB,YAAY;AACZ;AACO;AACP,cAAc,mDAAM;;AAEpB;AACA;;AAEA,kBAAkB,YAAY;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB;AACO;AACP;AACA;AACA;AACA,SAAS,iDAAW,mBAAmB,oDAAM;AAC7C;AACA,SAAS,+CAAS;AAClB,YAAY,yDAAS,EAAE,mDAAI,WAAW,OAAO,oDAAO,2BAA2B,4CAAM,EAAE;AACvF,SAAS,6CAAO;AAChB;AACA,aAAa,oDAAO;AACpB,eAAe,kDAAK;AACpB;AACA;AACA,gBAAgB,yDAAS,EAAE,mDAAI,WAAW,QAAQ,oDAAO,6BAA6B,yCAAG,UAAU;AACnG;AACA;AACA,gBAAgB,yDAAS;AACzB,UAAU,mDAAI,WAAW,QAAQ,oDAAO,4BAA4B,4CAAM,gBAAgB;AAC1F,UAAU,mDAAI,WAAW,QAAQ,oDAAO,4BAA4B,yCAAG,UAAU;AACjF,UAAU,mDAAI,WAAW,QAAQ,oDAAO,sBAAsB,wCAAE,gBAAgB;AAChF;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACO;AACP;AACA,OAAO,6CAAO;AACd;AACA,WAAW,oDAAO,CAAC,uDAAQ;AAC3B,aAAa,mDAAM;AACnB;AACA;AACA,cAAc,mDAAM,WAAW,mDAAM;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mDAAM;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAM;AACtB,qBAAqB,mDAAM;AAC3B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;;;;;;;;;;;;;;;;;;;;;AC3GuD;AACuC;AAC0C;;AAExI;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,sDAAO,2CAA2C,oDAAK;AAC/D;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C,mDAAI;AAChD;AACA;AACA;AACA,SAAS,oDAAO,eAAe,oDAAO,CAAC,sDAAO;AAC9C;AACA;AACA;AACA;AACA;AACA,kBAAkB,sDAAO;AACzB;AACA;AACA;AACA,kBAAkB,yDAAU;AAC5B;AACA;AACA;AACA,kBAAkB,uDAAQ,CAAC,oDAAK;AAChC;AACA;AACA;AACA,YAAY,mDAAI;AAChB;AACA,MAAM,oDAAM,SAAS,wDAAS,CAAC,mDAAI,IAAI,oDAAK;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAM;AAC5B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,mDAAM;AACjC,OAAO,mDAAM,4CAA4C,2CAA2C,oDAAO,0BAA0B;AACrI;AACA;AACA,8BAA8B;AAC9B,UAAU;AACV;AACA,MAAM,oDAAM;;AAEZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,mDAAM;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,mDAAM;AACvB;AACA;AACA;AACA;AACA,qDAAqD,mDAAI;AACzD;;AAEA,0BAA0B,iDAAI;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAM;AAC/B;AACA;AACA;AACA;AACA,UAAU,mDAAI;AACd,qBAAqB,sDAAO,CAAC,mDAAI;;AAEjC,eAAe,mDAAI,sBAAsB,mDAAM,sBAAsB,yDAAU,CAAC,oDAAK;AACrF;AACA;AACA;AACA,6BAA6B,mDAAM;AACnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA,YAAY,mDAAM;;AAElB,+BAA+B,WAAW;AAC1C,sBAAsB,mDAAM,yBAAyB,gDAAG,6BAA6B,UAAU;AAC/F,WAAW,iDAAI,6BAA6B,oDAAO;AACnD;;AAEA,QAAQ,mDAAI,qCAAqC,6CAAO;AACxD;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,YAAY;AACZ;AACO;AACP,QAAQ,mDAAI,sBAAsB,6CAAO,EAAE,iDAAI,CAAC,mDAAI,KAAK,mDAAM;AAC/D;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,mDAAI,sBAAsB,iDAAW,EAAE,mDAAM,oBAAoB,mDAAM;AAC/E;;;;;;;;;;;;;;;;;AC9LyC;AAC0B;;AAEnE;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,SAAS,iDAAI;AACb;AACA;AACA,UAAU,4CAAM;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,4CAAM;AAChB;AACA;AACA,UAAU,4CAAM,WAAW,yCAAG,WAAW,wCAAE;AAC3C;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE;AAC7B;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE;AAC7B;AACA;AACA,UAAU,4CAAM,WAAW,oDAAO,0BAA0B,4CAAM,gBAAgB,wCAAE;AACpF;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE,kBAAkB,oDAAO;AACtD;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE,sBAAsB,oDAAO;AAC1D;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE,GAAG,oDAAO;AACvC;AACA;AACA,UAAU,4CAAM,WAAW,wCAAE,GAAG,oDAAO;AACvC;AACA;AACA,UAAU,4CAAM,YAAY,oDAAO,uBAAuB,4CAAM,WAAW,wCAAE,GAAG,oDAAO;AACvF;AACA;AACA,UAAU,4CAAM,GAAG,oDAAO,qCAAqC,4CAAM;AACrE;AACA;AACA,UAAU,oDAAO,CAAC,oDAAO,CAAC,oDAAO,wBAAwB,4CAAM,yBAAyB,4CAAM;AAC9F;AACA;AACA,UAAU,oDAAO,6BAA6B,4CAAM;AACpD;AACA;AACA,UAAU,oDAAO,CAAC,oDAAO,6BAA6B,4CAAM,mBAAmB,wCAAE,6BAA6B,kBAAkB,4CAAM;AACtI;AACA;AACA,UAAU,oDAAO,2BAA2B,4CAAM;AAClD;AACA;AACA;AACA;AACA;AACA,OAAO,mDAAM;AACb,YAAY,mDAAM;AAClB;AACA;AACA;AACA,UAAU,mDAAM;AAChB;AACA;AACA;AACA,aAAa,oDAAO,mCAAmC,4CAAM,oBAAoB,yCAAG,IAAI,mDAAM;AAC9F;AACA;AACA,cAAc,oDAAO,4BAA4B,oDAAO;AACxD;AACA;AACA;AACA;AACA;AACA,OAAO,mDAAM;AACb;AACA;AACA;AACA,WAAW,mDAAM,QAAQ,mDAAM,gBAAgB,oDAAO;AACtD;AACA;AACA,YAAY,oDAAO,mBAAmB,4CAAM;AAC5C;AACA;AACA,YAAY,oDAAO,kBAAkB,MAAM,gBAAgB,4CAAM,IAAI,mDAAM,wDAAwD,4CAAM,mBAAmB,wCAAE;AAC9J;AACA;AACA;AACA;AACA,WAAW,mDAAM;AACjB;AACA;AACA,YAAY,4CAAM,WAAW,wCAAE,GAAG,oDAAO,yBAAyB,EAAE;AACpE;AACA;AACA,YAAY,4CAAM,WAAW,wCAAE,GAAG,oDAAO,yBAAyB,EAAE;AACpE;AACA;AACA,YAAY,4CAAM,WAAW,wCAAE,GAAG,oDAAO,yBAAyB,EAAE;AACpE;;AAEA,UAAU,4CAAM,WAAW,wCAAE;AAC7B;;AAEA;AACA;;;;;;;;;;;;;;;;;;ACtH0E;AAC/B;;AAE3C;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA,cAAc,mDAAM;;AAEpB,iBAAiB,YAAY;AAC7B;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA,OAAO,4CAAM,OAAO,iDAAW;AAC/B,OAAO,6CAAO;AACd,OAAO,+CAAS,4CAA4C,8CAA8C;AAC1G,OAAO,6CAAO;AACd;;AAEA,QAAQ,mDAAM,wFAAwF,iBAAiB;AACvH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClC+E;;AAExE;AACA;AACA;AACA;AACA;AACA;;AAEP;AACA,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,WAAW,mBAAmB;AAC9B,WAAW,mBAAmB;AAC9B,WAAW,QAAQ;AACnB;AACO;AACP,SAAS;AACT;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,mDAAM,iDAAiD,qBAAqB;AACpF;;AAEA;AACA,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,YAAY;AACZ;AACO;AACP,4BAA4B,mDAAM;;AAElC;AACA;;AAEA;AACA;;AAEA;AACA,YAAY;AACZ;AACO;AACP,iCAAiC,mDAAM;;AAEvC;AACA;;AAEA;AACA;;AAEA;AACA,YAAY;AACZ;AACO;AACP,QAAQ,mDAAM;AACd;;AAEA;AACA,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,mDAAM;AACd;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,oCAAoC,mDAAM;AAC1C;;AAEA;AACA,WAAW,KAAK;AAChB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP,QAAQ,iDAAI;AACZ;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA;AACA,WAAW,mDAAM;AACjB;AACA,WAAW,oDAAM;AACjB;AACA,YAAY,oDAAM,CAAC,iDAAI;AACvB;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kDAAkD,iDAAI;AACtD;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrPA;AACA,WAAW;AACX,YAAY;AACZ;AACO;;AAEP;AACA,WAAW;AACX,YAAY;AACZ;AACO;;AAEP;AACA,WAAW;AACX,YAAY;AACZ;AACO;;AAEP;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,iBAAiB;AAC5B,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,YAAY;AACZ;AACO;AACP;AACA;;AAEA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,YAAY;AACZ;AACO;AACP;AACA;;;;;;;;;;;;;;;;AClHA;;AAEA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA,YAAY,WAAW;AACvB;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,8EAA8E,aAAa;AAC3F;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA,aAAa,UAAU;AACvB;;AAEA;AACA;AACA;;AAE8B;AAC9B;;;;;;;UC3IA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;ACN4D;AAE5D2J,MAAM,CAACC,IAAI,GAAGD,MAAM,CAACC,IAAI,IAAI,CAAC,CAAC;;AAE/B;AACA,MAAM;EAAEC,UAAU,GAAG,CAAC;AAAE,CAAC,GAAGF,MAAM,CAACC,IAAI;;AAEvC;AACA;AACA;AACA;AACA;AACAD,MAAM,CAACC,IAAI,CAACC,UAAU,GAAG;EACxB,GAAGA,UAAU;EACb,GAAGH,qDAAUA;AACd,CAAC,C","sources":["webpack://lifterlms/./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","webpack://lifterlms/./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://lifterlms/./node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/react/dist/emotion-element-6a883da9.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/react/dist/emotion-react.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/serialize/node_modules/@emotion/hash/dist/emotion-hash.esm.js","webpack://lifterlms/./node_modules/@emotion/serialize/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","webpack://lifterlms/./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","webpack://lifterlms/./node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js","webpack://lifterlms/./packages/components/src/button-group-control/index.js","webpack://lifterlms/./packages/components/src/copy-button/index.js","webpack://lifterlms/./packages/components/src/index.js","webpack://lifterlms/./packages/components/src/search-control/base-search-control.js","webpack://lifterlms/./packages/components/src/search-control/defaults.js","webpack://lifterlms/./packages/components/src/search-control/index.js","webpack://lifterlms/./packages/components/src/search-control/post-search-control.js","webpack://lifterlms/./packages/components/src/search-control/styled-base-control.js","webpack://lifterlms/./packages/components/src/search-control/user-search-control.js","webpack://lifterlms/./packages/components/src/spinner/constants.js","webpack://lifterlms/./packages/components/src/spinner/index.js","webpack://lifterlms/./packages/components/src/spinner/styles.js","webpack://lifterlms/./packages/components/src/spinner/utils.js","webpack://lifterlms/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://lifterlms/./node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js","webpack://lifterlms/./node_modules/hoist-non-react-statics/node_modules/react-is/index.js","webpack://lifterlms/./node_modules/memoize-one/dist/memoize-one.esm.js","webpack://lifterlms/./node_modules/react-select/async/dist/react-select.esm.js","webpack://lifterlms/./node_modules/react-select/dist/Select-54ac8379.esm.js","webpack://lifterlms/./node_modules/react-select/dist/index-a7690a33.esm.js","webpack://lifterlms/./node_modules/react-select/dist/useAsync-9deee0fa.esm.js","webpack://lifterlms/./node_modules/react-select/dist/useStateManager-68425271.esm.js","webpack://lifterlms/external window \"React\"","webpack://lifterlms/external window \"ReactDOM\"","webpack://lifterlms/external window \"lodash\"","webpack://lifterlms/external window [\"wp\",\"apiFetch\"]","webpack://lifterlms/external window [\"wp\",\"components\"]","webpack://lifterlms/external window [\"wp\",\"compose\"]","webpack://lifterlms/external window [\"wp\",\"element\"]","webpack://lifterlms/external window [\"wp\",\"i18n\"]","webpack://lifterlms/external window [\"wp\",\"url\"]","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://lifterlms/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://lifterlms/./node_modules/stylis/src/Enum.js","webpack://lifterlms/./node_modules/stylis/src/Middleware.js","webpack://lifterlms/./node_modules/stylis/src/Parser.js","webpack://lifterlms/./node_modules/stylis/src/Prefixer.js","webpack://lifterlms/./node_modules/stylis/src/Serializer.js","webpack://lifterlms/./node_modules/stylis/src/Tokenizer.js","webpack://lifterlms/./node_modules/stylis/src/Utility.js","webpack://lifterlms/./node_modules/throttle-debounce/esm/index.js","webpack://lifterlms/webpack/bootstrap","webpack://lifterlms/webpack/runtime/compat get default export","webpack://lifterlms/webpack/runtime/define property getters","webpack://lifterlms/webpack/runtime/global","webpack://lifterlms/webpack/runtime/hasOwnProperty shorthand","webpack://lifterlms/webpack/runtime/make namespace object","webpack://lifterlms/./src/js/components.js"],"sourcesContent":["import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule' || cache.compat) return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses) {\n var isNested = element.parent === children[0]; // in nested rules comments become children of the \"auto-inserted\" rule\n //\n // considering this input:\n // .a {\n // .b /* comm */ {}\n // color: hotpink;\n // }\n // we get output corresponding to this:\n // .a {\n // & {\n // /* comm */\n // color: hotpink;\n // }\n // .b {}\n // }\n\n var commentContainer = isNested ? children[0].children : // global rule at the root level\n children;\n\n for (var i = commentContainer.length - 1; i >= 0; i--) {\n var node = commentContainer[i];\n\n if (node.line < element.line) {\n break;\n } // it is quite weird but comments are *usually* put at `column: element.column - 1`\n // so we seek *from the end* for the node that is earlier than the rule's `element` and check that\n // this will also match inputs like this:\n // .a {\n // /* comm */\n // .b {}\n // }\n //\n // but that is fine\n //\n // it would be the easiest to change the placement of the comment to be the first child of the rule:\n // .a {\n // .b { /* comm */ }\n // }\n // with such inputs we wouldn't have to search for the comment at all\n // TODO: consider changing this comment placement in the next major version\n\n\n if (node.column < element.column) {\n if (isIgnoringComment(node)) {\n return;\n }\n\n break;\n }\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default isPropValid;\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import hoistNonReactStatics$1 from 'hoist-non-react-statics';\n\n// this file isolates this package that is not tree-shakeable\n// and if this module doesn't actually contain any logic of its own\n// then Rollup just use 'hoist-non-react-statics' directly in other chunks\n\nvar hoistNonReactStatics = (function (targetComponent, sourceComponent) {\n return hoistNonReactStatics$1(targetComponent, sourceComponent);\n});\n\nexport default hoistNonReactStatics;\n","import { createContext, useContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getLastPart = function getLastPart(functionName) {\n // The match may be something like 'Object.createEmotionProps' or\n // 'Loader.prototype.render'\n var parts = functionName.split('.');\n return parts[parts.length - 1];\n};\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n if (match) return getLastPart(match[1]); // Safari / Firefox\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return getLastPart(match[1]);\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/createElement(WrappedComponent, newProps));\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, useTheme as u, withEmotionCache as w };\n","import { createElement, useContext, useRef, Fragment } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-6a883da9.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-6a883da9.browser.esm.js';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport 'hoist-non-react-statics';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar pkg = {\n\tname: \"@emotion/react\",\n\tversion: \"11.10.4\",\n\tmain: \"dist/emotion-react.cjs.js\",\n\tmodule: \"dist/emotion-react.esm.js\",\n\tbrowser: {\n\t\t\"./dist/emotion-react.esm.js\": \"./dist/emotion-react.browser.esm.js\"\n\t},\n\texports: {\n\t\t\".\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./dist/emotion-react.worker.esm.js\",\n\t\t\t\tbrowser: \"./dist/emotion-react.browser.esm.js\",\n\t\t\t\t\"default\": \"./dist/emotion-react.esm.js\"\n\t\t\t},\n\t\t\t\"default\": \"./dist/emotion-react.cjs.js\"\n\t\t},\n\t\t\"./jsx-runtime\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js\",\n\t\t\t\tbrowser: \"./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js\",\n\t\t\t\t\"default\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js\"\n\t\t\t},\n\t\t\t\"default\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js\"\n\t\t},\n\t\t\"./_isolated-hnrs\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js\",\n\t\t\t\tbrowser: \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js\",\n\t\t\t\t\"default\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js\"\n\t\t\t},\n\t\t\t\"default\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js\"\n\t\t},\n\t\t\"./jsx-dev-runtime\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js\",\n\t\t\t\tbrowser: \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js\",\n\t\t\t\t\"default\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js\"\n\t\t\t},\n\t\t\t\"default\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js\"\n\t\t},\n\t\t\"./package.json\": \"./package.json\",\n\t\t\"./types/css-prop\": \"./types/css-prop.d.ts\",\n\t\t\"./macro\": \"./macro.js\"\n\t},\n\ttypes: \"types/index.d.ts\",\n\tfiles: [\n\t\t\"src\",\n\t\t\"dist\",\n\t\t\"jsx-runtime\",\n\t\t\"jsx-dev-runtime\",\n\t\t\"_isolated-hnrs\",\n\t\t\"types/*.d.ts\",\n\t\t\"macro.js\",\n\t\t\"macro.d.ts\",\n\t\t\"macro.js.flow\"\n\t],\n\tsideEffects: false,\n\tauthor: \"Emotion Contributors\",\n\tlicense: \"MIT\",\n\tscripts: {\n\t\t\"test:typescript\": \"dtslint types\"\n\t},\n\tdependencies: {\n\t\t\"@babel/runtime\": \"^7.18.3\",\n\t\t\"@emotion/babel-plugin\": \"^11.10.0\",\n\t\t\"@emotion/cache\": \"^11.10.0\",\n\t\t\"@emotion/serialize\": \"^1.1.0\",\n\t\t\"@emotion/use-insertion-effect-with-fallbacks\": \"^1.0.0\",\n\t\t\"@emotion/utils\": \"^1.2.0\",\n\t\t\"@emotion/weak-memoize\": \"^0.3.0\",\n\t\t\"hoist-non-react-statics\": \"^3.3.1\"\n\t},\n\tpeerDependencies: {\n\t\t\"@babel/core\": \"^7.0.0\",\n\t\treact: \">=16.8.0\"\n\t},\n\tpeerDependenciesMeta: {\n\t\t\"@babel/core\": {\n\t\t\toptional: true\n\t\t},\n\t\t\"@types/react\": {\n\t\t\toptional: true\n\t\t}\n\t},\n\tdevDependencies: {\n\t\t\"@babel/core\": \"^7.18.5\",\n\t\t\"@definitelytyped/dtslint\": \"0.0.112\",\n\t\t\"@emotion/css\": \"11.10.0\",\n\t\t\"@emotion/css-prettifier\": \"1.1.0\",\n\t\t\"@emotion/server\": \"11.10.0\",\n\t\t\"@emotion/styled\": \"11.10.4\",\n\t\t\"html-tag-names\": \"^1.1.2\",\n\t\treact: \"16.14.0\",\n\t\t\"svg-tag-names\": \"^1.1.1\",\n\t\ttypescript: \"^4.5.5\"\n\t},\n\trepository: \"https://github.com/emotion-js/emotion/tree/main/packages/react\",\n\tpublishConfig: {\n\t\taccess: \"public\"\n\t},\n\t\"umd:main\": \"dist/emotion-react.umd.min.js\",\n\tpreconstruct: {\n\t\tentrypoints: [\n\t\t\t\"./index.js\",\n\t\t\t\"./jsx-runtime.js\",\n\t\t\t\"./jsx-dev-runtime.js\",\n\t\t\t\"./_isolated-hnrs.js\"\n\t\t],\n\t\tumdName: \"emotionReact\",\n\t\texports: {\n\t\t\tenvConditions: [\n\t\t\t\t\"browser\",\n\t\t\t\t\"worker\"\n\t\t\t],\n\t\t\textra: {\n\t\t\t\t\"./types/css-prop\": \"./types/css-prop.d.ts\",\n\t\t\t\t\"./macro\": \"./macro.js\"\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar jsx = function jsx(type, props) {\n var args = arguments;\n\n if (props == null || !hasOwnProperty.call(props, 'css')) {\n // $FlowFixMe\n return createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n } // $FlowFixMe\n\n\n return createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false; // maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n // probably using the custom createElement which\n // means it will be turned into a className prop\n // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n props.className || props.css)) {\n console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n warnedAboutCssPropForGlobal = true;\n }\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, useContext(ThemeContext));\n // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n\n var sheetRef = useRef();\n useInsertionEffectWithLayoutFallback(function () {\n var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n var sheet = new cache.sheet.constructor({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false; // $FlowFixMe\n\n var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other s\n\n node.setAttribute('data-emotion', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n useInsertionEffectWithLayoutFallback(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n insertStyles(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Global.displayName = 'EmotionGlobal';\n}\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n};\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n if (process.env.NODE_ENV !== 'production' && arg.styles !== undefined && arg.name !== undefined) {\n console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from component.');\n }\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serializedArr = _ref.serializedArr;\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n\n for (var i = 0; i < serializedArr.length; i++) {\n var res = insertStyles(cache, serializedArr[i], false);\n }\n });\n\n return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n var hasRendered = false;\n var serializedArr = [];\n\n var css = function css() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n registerStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: useContext(ThemeContext)\n };\n var ele = props.children(content);\n hasRendered = true;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serializedArr: serializedArr\n }), ele);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n ClassNames.displayName = 'EmotionClassNames';\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var isBrowser = \"object\" !== 'undefined'; // #1727 for some reason Jest evaluates modules twice if some consuming module gets mocked with jest.mock\n\n var isJest = typeof jest !== 'undefined';\n\n if (isBrowser && !isJest) {\n // globalThis has wide browser support - https://caniuse.com/?search=globalThis, Node.js 12 and later\n var globalContext = // $FlowIgnore\n typeof globalThis !== 'undefined' ? globalThis // eslint-disable-line no-undef\n : isBrowser ? window : global;\n var globalKey = \"__EMOTION_REACT_\" + pkg.version.split('.')[0] + \"__\";\n\n if (globalContext[globalKey]) {\n console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.');\n }\n\n globalContext[globalKey] = true;\n }\n}\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(var|attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error(noComponentSelectorMessage);\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useContext, createElement, Fragment } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var FinalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof FinalTag === 'string'\n }), /*#__PURE__*/createElement(FinalTag, newProps));\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;\n","import '@babel/runtime/helpers/extends';\nimport 'react';\nimport '@emotion/is-prop-valid';\nimport createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@emotion/react';\nimport '@emotion/utils';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nvar newStyled = createStyled.bind();\ntags.forEach(function (tagName) {\n // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type\n newStyled[tagName] = newStyled(tagName);\n});\n\nexport default newStyled;\n","import * as React from 'react';\nimport { useLayoutEffect } from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","var weakMemoize = function weakMemoize(func) {\n // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // $FlowFixMe\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\nexport default weakMemoize;\n","// WP deps.\nimport { BaseControl, Button, ButtonGroup } from '@wordpress/components';\nimport { useState } from '@wordpress/element';\n\n/**\n * Button Group Control component\n *\n * Similar to the experimental `` component from @wordpress/components but it allows\n * passing in an array of options.\n *\n * @since 1.0.0\n *\n * @see BaseControl https://github.com/WordPress/gutenberg/tree/trunk/packages/components/src/base-control\n *\n * @param {Object} props Component properties object.\n * @param {string} props.label Control label text.\n * @param {string} props.className Control element css class name attribute.\n * @param {string} props.id Control element ID attribute.\n * @param {Function} props.onClick Callback function when a button in the group is clicked.\n * @param {string} props.selected The value of the currently selected option.\n * @param {Object[]} props.options An array of objects used to create the buttons in the group.\n * Each object should contain at least a \"label\" and \"value\" property and\n * can optionally include an \"icon\" property.\n * @return {BaseControl} The rendered component.\n */\nexport default function( {\n\tlabel,\n\tonClick = () => {},\n\tclassName = null,\n\tid = null,\n\tselected = '',\n\toptions = [],\n} ) {\n\tconst [ selectedValue, setSelectedValue ] = useState( selected );\n\n\tclassName = className ? ` ${ className }` : '';\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{ options.map(\n\t\t\t\t\t( { label: buttonLabel, value, icon = null } ) => (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tsetSelectedValue( value );\n\t\t\t\t\t\t\t\tonClick( value );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ buttonLabel }\n\t\t\t\t\t\t \n\t\t\t\t\t)\n\t\t\t\t) }\n\t\t\t \n\t\t \n\t);\n}\n","import { __ } from '@wordpress/i18n';\nimport { ClipboardButton, Button, Tooltip } from '@wordpress/components';\nimport { useCopyToClipboard } from '@wordpress/compose';\n\n/**\n * A \"click to copy\" button.\n *\n * Uses the `useCopyToClipboard()` hook with a on WP 5.8 & later, otherwise falls back\n * to the deprecated .\n *\n * @since 1.0.0\n *\n * @param {Object} args Component arguments.\n * @param {string} args.buttonText Text to to display within the button.\n * @param {string} args.copyText Text to copy to the clipboard.\n * @param {string} args.tooltipText Text to use in the tooltip wrapper around the button.\n * @param {Function} args.onCopy Copy success callback function.\n * @param {...*} args.buttonProps Remaining properties passed to the underlying component.\n * @return {Object} The copy button fragment.\n */\nexport default function( {\n\tbuttonText,\n\tcopyText,\n\tonCopy,\n\ttooltipText = null,\n\t...buttonProps\n} ) {\n\ttooltipText = tooltipText || __( 'Click to copy.', 'lifterlms' );\n\n\tconst canUseHook = 'undefined' !== typeof useCopyToClipboard;\n\n\t// WP 5.8+.\n\tconst HookButton = () => {\n\t\tconst ref = useCopyToClipboard( copyText, onCopy );\n\t\treturn (\n\t\t\t\n\t\t\t\t{ buttonText }\n\t\t\t \n\t\t);\n\t};\n\n\t// WP < 5.8.\n\tconst BackwardsButton = () => {\n\t\treturn (\n\t\t\t\n\t\t\t\t{ buttonText }\n\t\t\t \n\t\t);\n\t};\n\n\treturn (\n\t\t\n\t\t\t{ canUseHook && }\n\t\t\t{ ! canUseHook && }\n\t\t \n\t);\n}\n","export { default as ButtonGroupControl } from './button-group-control';\nexport { default as CopyButton } from './copy-button';\n\nexport * from './search-control';\n\nexport * as Spinner from './spinner';\n","// External Deps.\nimport Select from 'react-select/async';\nimport { debounce } from 'throttle-debounce';\nimport { uniqueId, differenceBy, uniqBy } from 'lodash';\n\n// WP Deps.\nimport { __ } from '@wordpress/i18n';\nimport { useState, useEffect } from '@wordpress/element';\nimport apiFetch from '@wordpress/api-fetch';\nimport { addQueryArgs } from '@wordpress/url';\n\n// Internal Deps.\nimport { StyledBaseControl } from './styled-base-control';\nimport {\n\tdefaultHydrateValues,\n\tdefaultStyles,\n\tdefaultTheme,\n\tdefaultFormatSearchResults,\n} from './defaults';\n\n/**\n * Searchable element powered by a WordPress REST API endpoint.\n *\n * @since 1.0.0\n *\n * @param {Object} args Component arguments.\n * @param {string} args.searchPath Required. API path used to perform the search.\n * @param {Function} args.onUpdate Callback function invoked when the value of the select changes.\n * The callback function is passed a single parameter, the new selected\n * value object(s). For multiselects it will be an array of objects.\n * If the select is clearable, the value will be `null` when the select\n * is cleared.\n * @param {Array} args.selectedValue The currently selected value(s). If an object is passed, it should contain at least\n * a `label` and `value` key. Can pass IDs as integers and the values will be automatically\n * hydrated.\n * @param {string} args.placeholder The placeholder displayed within an empty search control.\n * @param {string} args.className HTML class attribute added to the select control.\n * @param {string} args.classNamePrefix Prefix added to select control subcomponent classnames. In most circumstances this should not\n * be changed as it is used to style the compontents.\n * @param {number} args.searchDebounceDelay Search debounce delay, in milliseconds.\n * @param {Object} args.additionalSearchArgs Object of additional query string arguments to use with the API request.\n * @param {?string} args.label Search control label, passed to .\n * @param {?string} args.id Search control HTML ID attribute, passed to .\n * @param {?Object[]} args.defaultOptions Array of hydrated objects to preload into the select as options.\n * @param {?Function} args.getSearchArgs Function invoked to generate the query string arguments used when fetching\n * results from the API. The callback function is passed the search string.\n * @param {?Function} args.getSearchURL Function invoked to create the search URL used to fetch results. The function\n * is passed the `searchPath` and generated query string arguments from `getSearchArgs()`.\n * @param {?Function} args.hydrateValues Function invoked to hydrate integer values. The function is passed the currently selected values,\n * the `searchPath`, and an array of cached (and hydrated) objects previously loaded from the server.\n * @param {?Function} args.formatSearchResults Function invoked to format results retrieved from the server. The function is passed an array\n * of objects from the server. It should return an array of objects, each containing at least a\n * value and label property.\n * @param {?Function} args.formatSearchResultLabel Function invoked to format the display label for a result. The function is passed\n * an object representing a single result and should return a string.\n * @param {?Function} args.formatSearchResultValue Function invoked to format the saved value for a result. The function is passed\n * an object representing a single result and should the value to be stored.\n * @param {...*} args.selectProps Any remaining properties are passed to the component, {@link https://react-select.com/props#select-props}.\n * @return {StyledBaseControl} The component.\n */\nexport default function BaseSearchControl( {\n\tsearchPath,\n\tonUpdate = () => {},\n\tselectedValue = [],\n\tadditionalSearchArgs = {},\n\tdefaultOptions = null,\n\tgetSearchArgs = null,\n\tlabel = null,\n\tgetSearchURL = null,\n\thydrateValues = null,\n\tformatSearchResults = null,\n\tformatSearchResultLabel = null,\n\tformatSearchResultValue = null,\n\tid = null,\n\tplaceholder = __( 'Search…', 'lifterlms' ),\n\tclassName = 'llms-base-search-control',\n\tclassNamePrefix = 'llms-search-control',\n\tsearchDebounceDelay = 300,\n\t...selectProps\n} ) {\n\t// Setup state variables.\n\tconst [ loadedResults, setLoadedResults ] = useState( [] ),\n\t\taddLoadedResults = ( newResults ) =>\n\t\t\tsetLoadedResults( loadedResults.concat( newResults ) ),\n\t\t[ value, setValue ] = useState(\n\t\t\tArray.isArray( selectedValue ) ? selectedValue : [ selectedValue ]\n\t\t);\n\n\t// If an ID is stored and passed into component as the selectedValue, hydrate the value from cached results or the API.\n\tuseEffect( () => {\n\t\t// Nothing to hydrate.\n\t\tif ( ! selectedValue.length ) {\n\t\t\treturn;\n\t\t}\n\t\thydrateValues = hydrateValues || defaultHydrateValues;\n\t\thydrateValues( value, searchPath, loadedResults ).then(\n\t\t\t( newValues ) => {\n\t\t\t\tnewValues = formatSearchResults(\n\t\t\t\t\tnewValues,\n\t\t\t\t\tformatSearchResultLabel,\n\t\t\t\t\tformatSearchResultValue\n\t\t\t\t);\n\t\t\t\tconst toAdd = differenceBy( newValues, loadedResults, 'id' );\n\t\t\t\tif ( toAdd.length ) {\n\t\t\t\t\taddLoadedResults( toAdd );\n\t\t\t\t}\n\t\t\t\tsetValue( newValues );\n\t\t\t\treturn newValues;\n\t\t\t}\n\t\t);\n\t}, [ selectedValue ] );\n\n\t/**\n\t * On change function callback.\n\t *\n\t * Updates the current value's state and calls the `onUpdate()` user function.\n\t *\n\t * @since 1.0.0\n\t *\n\t * @param {?Object[]} newValues Newly selected values.\n\t * @return {void}\n\t */\n\tconst onChange = ( newValues ) => {\n\t\tsetValue( Array.isArray( newValues ) ? newValues : [ newValues ] );\n\t\tonUpdate( newValues );\n\t};\n\n\t/**\n\t * Load options from the server.\n\t *\n\t * On search term update callback function.\n\t *\n\t * @since 1.0.0\n\t */\n\tconst loadOptions = debounce(\n\t\tsearchDebounceDelay,\n\t\t( searchQuery, callback ) => {\n\t\t\tapiFetch( {\n\t\t\t\tpath: getSearchURL( searchPath, getSearchArgs( searchQuery ) ),\n\t\t\t} ).then( ( results ) => {\n\t\t\t\tconst formatted = formatSearchResults(\n\t\t\t\t\tresults,\n\t\t\t\t\tformatSearchResultLabel,\n\t\t\t\t\tformatSearchResultValue\n\t\t\t\t);\n\t\t\t\taddLoadedResults( formatted );\n\t\t\t\tcallback( formatted );\n\t\t\t} );\n\t\t}\n\t);\n\n\t// Setup defaults.\n\tid = id || uniqueId( `${ className }--` );\n\n\tformatSearchResults = formatSearchResults || defaultFormatSearchResults;\n\tformatSearchResultLabel = formatSearchResultLabel\n\t\t? formatSearchResultLabel\n\t\t: ( res ) => res?.id;\n\tformatSearchResultValue = formatSearchResultValue\n\t\t? formatSearchResultValue\n\t\t: ( res ) => res?.id;\n\n\tgetSearchArgs = getSearchArgs\n\t\t? getSearchArgs\n\t\t: ( searchQuery ) => ( {\n\t\t\tper_page: 10,\n\t\t\tsearch: searchQuery,\n\t\t\t...additionalSearchArgs,\n\t\t} );\n\n\tgetSearchURL = getSearchURL\n\t\t? getSearchURL\n\t\t: ( path, args ) => addQueryArgs( path, args );\n\n\tselectProps.styles = selectProps.styles || defaultStyles;\n\tselectProps.theme = selectProps.theme || defaultTheme;\n\n\tif ( null === defaultOptions && value.length ) {\n\t\tdefaultOptions = loadedResults.length\n\t\t\t? uniqBy( loadedResults, 'id' )\n\t\t\t: true;\n\t}\n\n\treturn (\n\t\t\n\t\t\t \n\t\t \n\t);\n}\n","// External deps.\nimport { isPlainObject } from 'lodash';\n\n// WP deps.\nimport apiFetch from '@wordpress/api-fetch';\n\n/**\n * Default function used to hydrate stored numeric IDs to the equivalent object.\n *\n * @since 1.0.0\n *\n * @param {Array} values Array of values.\n * @param {string} path API request path.\n * @param {Object[]} loadedResults Array of already-hydrated API results.\n * @return {Object[]} Hydrated result array.\n */\nexport async function defaultHydrateValues( values, path, loadedResults ) {\n\tconst isResultHydrated = ( result ) =>\n\t\tisPlainObject( result ) && result.label && result.value;\n\n\treturn Promise.all(\n\t\tvalues.map( async ( value ) => {\n\t\t\tif ( ! isResultHydrated( value ) && Number.isInteger( value ) ) {\n\t\t\t\tvalue =\n\t\t\t\t\tloadedResults.find( ( { id } ) => id === value ) ||\n\t\t\t\t\t( await apiFetch( { path: `${ path }/${ value }` } ) );\n\t\t\t}\n\n\t\t\treturn value;\n\t\t} )\n\t);\n}\n\n/**\n * Default styles object passed to the underlying component.\n *\n * @type {Object}\n */\nexport const defaultStyles = {\n\tcontrol: ( control ) => ( {\n\t\t...control,\n\t\tborderColor: '#8d96a0',\n\t\t'&:hover': {\n\t\t\t...control[ '&:hover' ],\n\t\t\tborderColor: '#8d96a0',\n\t\t},\n\t} ),\n};\n\n/**\n * Default component theme callback function.\n *\n * Customizes the theme of the component to better match the WordPress editor UI.\n *\n * Uses the default UI color from the current admin theme. The theme doesn't work that well\n * with the other provided theme colors (which are darker than the Select component options which\n * are lighter highlights). So if you're using a non-default admin color scheme the select will probably\n * look a bit weird. I'm sorry.\n *\n * @since 1.0.0\n *\n * @see https://react-select.com/styles#overriding-the-theme\n *\n * @param {Object} theme Theme object.\n * @return {Object} Theme object.\n */\nexport function defaultTheme( theme ) {\n\treturn {\n\t\t...theme,\n\t\tcolors: {\n\t\t\t...theme.colors,\n\t\t\tprimary: 'var( --wp-admin-theme-color )',\n\t\t\t// primary25: '#ccf2ff',\n\t\t\t// primary50: '#b3ecff',\n\t\t\t// primary75: '#4dd2ff',\n\t\t},\n\t\tspacing: {\n\t\t\t...theme.spacing,\n\t\t\tbaseUnit: 2,\n\t\t\tcontrolHeight: 28,\n\t\t\tmenuGutter: 4,\n\t\t},\n\t};\n}\n\n/**\n * Default format search results function.\n *\n * Accepts an array of raw API results adds a label and value for use by the \n * component.\n *\n * @since 1.0.0\n *\n * @param {Object[]} results API result array.\n * @param {Function} formatSearchResultLabel Label formatting function.\n * @param {Function} formatSearchResultValue Value formatting function.\n * @return {Object[]} Formatted results.\n */\nexport function defaultFormatSearchResults(\n\tresults,\n\tformatSearchResultLabel,\n\tformatSearchResultValue\n) {\n\treturn results.map( ( result ) => ( {\n\t\t...result,\n\t\tlabel: formatSearchResultLabel( result ),\n\t\tvalue: formatSearchResultValue( result ),\n\t} ) );\n}\n","import BaseSearchControl from './base-search-control';\nimport PostSearchControl from './post-search-control';\nimport UserSearchControl from './user-search-control';\n\nexport { BaseSearchControl, PostSearchControl, UserSearchControl };\n","import { __, _x, sprintf } from '@wordpress/i18n';\n\nimport BaseSearchControl from './base-search-control';\n\n/**\n * Searchable element powered by a WordPress REST API users endpoint.\n *\n * This component is a wrapper around the component. It is configured\n * to search users via the WordPress user REST API endpoint.\n *\n * @since 1.0.0\n *\n * @param {Object} args Component arguments.\n * @param {string} args.postType Post type endpoint.\n * @param {string} args.baseSearchPath Base search path used to create the searchPath.\n * @param {?string} args.searchPath API path used to perform the search. If passed, will be used instead of the\n * path generated from `args.postType` and `args.baseSearchPath`.\n * @param {string} args.placeholder The placeholder displayed within an empty search control.\n * @param {string} args.className HTML class attribute added to the select control.\n * @param {?Function} args.formatSearchResultLabel Function invoked to format the display label for a result. The function is passed\n * @param {Object} args.additionalSearchArgs An object representing a single result and should return a string.\n * @param {...*} args.baseProps Any remaining properties are passed to the component.\n * @return {BaseSearchControl} The component.\n */\nexport default function PostSearchControl( {\n\tpostType = 'posts',\n\tbaseSearchPath = '/wp/v2/',\n\tsearchPath = null,\n\tclassName = 'llms-post-search-control',\n\tplaceholder = __( 'Search for posts…', 'lifterlms' ),\n\tformatSearchResultLabel = null,\n\tadditionalSearchArgs = {},\n\t...baseProps\n} ) {\n\t// Default result label.\n\tformatSearchResultLabel = formatSearchResultLabel\n\t\t? formatSearchResultLabel\n\t\t: ( { title, id } ) =>\n\t\t\tsprintf(\n\t\t\t\t// Translators: %1$s = Post title; %2$s = Post id.\n\t\t\t\t_x(\n\t\t\t\t\t'%1$s (ID# %2$d)',\n\t\t\t\t\t'Post search result label',\n\t\t\t\t\t'lifterlms'\n\t\t\t\t),\n\t\t\t\ttitle.rendered,\n\t\t\t\tid\n\t\t\t);\n\n\treturn (\n\t\t \n\t);\n}\n","// External deps.\nimport styled from '@emotion/styled';\n\n// WP deps.\nimport { BaseControl } from '@wordpress/components';\n\n/**\n * A component with styles targeting the components within it.\n *\n * Addresses issues arising from WP core styles loaded in the block editor that create visual\n * issues with our components.\n *\n * @since 1.0.0\n */\nexport const StyledBaseControl = styled( BaseControl )`\n\twidth: 100%;\n\t& .llms-search-control__input:focus {\n\t\tbox-shadow: none;\n\t}\n\t& .llms-search-control__menu {\n\t\tbackground: #fff !important;\n\t\tz-index: 9999999 !important;\n\t}\n\t& .llms-search-control__value-container {\n\t\twidth: 100%;\n\t}\n`;\n","import { __, _x, sprintf } from '@wordpress/i18n';\n\nimport BaseSearchControl from './base-search-control';\n\n/**\n * Searchable element powered by a WordPress REST API users endpoint.\n *\n * This component is a wrapper around the component. It is configured\n * to search users via the WordPress user REST API endpoint.\n *\n * @since 1.0.0\n *\n * @param {Object} args Component arguments.\n * @param {string} args.searchPath Required. API path used to perform the search.\n * @param {string} args.placeholder The placeholder displayed within an empty search control.\n * @param {string} args.className HTML class attribute added to the select control.\n * @param {?Function} args.formatSearchResultLabel Function invoked to format the display label for a result. The function is passed\n * @param {Object} args.additionalSearchArgs An object representing a single result and should return a string.\n * @param {...*} args.baseProps Any remaining properties are passed to the component.\n * @return {BaseSearchControl} The component.\n */\nexport default function UserSearchControl( {\n\tsearchPath = '/wp/v2/users',\n\tclassName = 'llms-user-search-control',\n\tplaceholder = __( 'Search users by email or name…', 'lifterlms' ),\n\tformatSearchResultLabel = null,\n\tadditionalSearchArgs = {},\n\t...baseProps\n} ) {\n\t// Default result label.\n\tformatSearchResultLabel = formatSearchResultLabel\n\t\t? formatSearchResultLabel\n\t\t: ( { name, id } ) =>\n\t\t\tsprintf(\n\t\t\t\t// Translators: %1$s = User's name; %2$s = User's id.\n\t\t\t\t_x(\n\t\t\t\t\t'%1$s (ID# %2$d)',\n\t\t\t\t\t'User search result label',\n\t\t\t\t\t'lifterlms'\n\t\t\t\t),\n\t\t\t\tname,\n\t\t\t\tid\n\t\t\t);\n\n\treturn (\n\t\t \n\t);\n}\n","/**\n * Spinner wrapper element class name.\n *\n * @type {string}\n */\nexport const WRAPPER_CLASSNAME = 'llms-spinning';\n\n/**\n * Spinner element class name.\n *\n * @type {string}\n */\nexport const CLASSNAME = 'llms-spinner';\n\n/**\n * Small-sized spinner identifier / class name.\n *\n * @type {string}\n */\nexport const SIZE_SMALL = 'small';\n\n/**\n * Default-sized spinner identifier / class name.\n *\n * @type {string}\n */\nexport const SIZE_DEFAULT = 'default';\n","/* eslint-env jquery */\n\n// Internal deps.\nimport { SIZE_DEFAULT } from './constants';\nimport { create, ensureElementList, find, loadStyles } from './utils';\n\n/**\n * This module was originally included in the LifterLMS Core Javascript in the `LLMS` global object as `LLMS.Spinner`.\n *\n * It has since been relocated here as a module in the `@lifterlms/components` package. During the move it was upgraded\n * to enable usage without the requirement of passing in jQuery selectors.\n *\n * In the future, passing native jQuery selectors into any of these modules will be deprecated in favor of native/vanilla Javascript\n * Elements or selector strings that can be passed into `document.querySelector()` or `document.querySelectorAll()`.\n */\n\n/**\n * Retrieves spinner(s) inside a given element.\n *\n * If the spinner element doesn't already exist it will be created.\n *\n * @since 1.1.0\n *\n * @param {jQuery|Element|string} selector A selector to be parsed by `jQuery()`, an existing `jQuery()` selection, a DOM Element. The first spinner\n * found within the element will be returned. If none found it will be created, appended to the element, and\n * then returned.\n * @param {string} size Size or the spinner element. Accepts \"default\" (40px) or \"small\" (20px).\n * @param {boolean} useJQuery If `true`, the return value will be a jQuery selection as opposed to an Element. This is the default behavior\n * for backwards compatibility but will be removed in a future version.\n * @return {null|Element|jQuery} Returns `null` when the selector cannot be located, otherwise returns an `Element` or `jQuery` selection based on the value\n * of `useJQuery`.\n */\nexport function get( selector, size = SIZE_DEFAULT, useJQuery = true ) {\n\tloadStyles();\n\n\tconst nodeList = ensureElementList( selector );\n\tif ( ! nodeList.length ) {\n\t\treturn null;\n\t}\n\n\tconst wrapper = nodeList[ 0 ],\n\t\t// Find an existing spinner and create it if one doesn't exist.\n\t\tspinner = find( wrapper ) || create( wrapper, size );\n\n\t// Return it.\n\treturn useJQuery && typeof jQuery !== 'undefined'\n\t\t? jQuery( spinner )\n\t\t: spinner;\n}\n\n/**\n * Starts spinner(s) inside a given element or element list.\n *\n * If the spinner element doesn't already exist it will be created.\n *\n * @since 1.1.0\n *\n * @param {jQuery|Element|NodeList|string} selector A selector to be parsed by `jQuery()`, an existing `jQuery()` selection, a DOM Element, or an\n * array of DOM Elements. Each element in the list will have it's spinner started. If a spinner doesn't\n * exist within the element, it will be appended and then started.\n * @param {string} size Size or the spinner element. Accepts \"default\" (40px) or \"small\" (20px).\n * @return {void}\n */\nexport function start( selector, size = SIZE_DEFAULT ) {\n\tensureElementList( selector ).forEach( ( el ) => {\n\t\tconst spinner = get( el, size, false );\n\t\tif ( spinner ) {\n\t\t\tspinner.style.display = 'block';\n\t\t}\n\t} );\n}\n\n/**\n * Stops spinner(s) inside a given element or element list.\n *\n * @since 1.1.0\n *\n * @param {jQuery|Element|NodeList|string} selector A selector to be parsed by `jQuery()`, an existing `jQuery()` selection, a DOM Element, or an\n * array of DOM Elements. Each element in the list will have it's spinner stopped.\n * @return {void}\n */\nexport function stop( selector ) {\n\tensureElementList( selector ).forEach( ( el ) => {\n\t\tconst spinner = get( el, SIZE_DEFAULT, false );\n\t\tif ( spinner ) {\n\t\t\tspinner.style.display = 'none';\n\t\t}\n\t} );\n}\n","import { WRAPPER_CLASSNAME, CLASSNAME, SIZE_SMALL } from './constants';\n\n/**\n * CSS Styles for the components.\n *\n * @type {string}\n */\nexport const STYLES = `\n\t.${ WRAPPER_CLASSNAME } {\n\t\tbackground: rgba( 250, 250, 250, 0.7 );\n\t\tbottom: 0;\n\t\tdisplay: none;\n\t\tleft: 0;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\ttop: 0;\n\t\tz-index: 2;\n\t}\n\n\t.${ CLASSNAME } {\n\t\tanimation: llms-spinning 1.5s linear infinite;\n\t\tbox-sizing: border-box;\n\t\tborder: 4px solid #313131;\n\t\tborder-radius: 50%;\n\t\theight: 40px;\n\t\tleft: 50%;\n\t\tmargin-left: -20px;\n\t\tmargin-top: -20px;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\twidth: 40px;\n\n\t}\n\n\t.${ CLASSNAME }.${ SIZE_SMALL } {\n\t\tborder-width: 2px;\n\t\theight: 20px;\n\t\tmargin-left: -10px;\n\t\tmargin-top: -10px;\n\t\twidth: 20px;\n\t}\n\n\t@keyframes llms-spinning {\n\t\t0% {\n\t\t\ttransform: rotate( 0deg )\n\t\t}\n\t\t50% {\n\t\t\tborder-radius: 5%;\n\t\t}\n\t\t100% {\n\t\t\ttransform: rotate( 220deg) \n\t\t}\n\t}\n`;\n","// WP deps.\nimport { __ } from '@wordpress/i18n';\n\n// Internal deps.\nimport { WRAPPER_CLASSNAME, CLASSNAME, SIZE_DEFAULT } from './constants';\nimport { STYLES } from './styles';\n\n/**\n * Creates a spinner element inside the specified wrapper Element.\n *\n * @since 1.1.0\n *\n * @param {Element} wrapper DOM node to append the created spinner element to.\n * @param {string} size Spinner element size.\n * @return {Element} Returns the created spinner node.\n */\nexport function create( wrapper, size = SIZE_DEFAULT ) {\n\tconst spinner = document.createElement( 'div' ),\n\t\tloadingMsg = __( 'Loading…', 'lifterlms' );\n\n\tspinner.innerHTML = `${ loadingMsg } `;\n\tspinner.classList.add( WRAPPER_CLASSNAME );\n\n\twrapper.appendChild( spinner );\n\n\treturn spinner;\n}\n\n/**\n * Normalizes accepted selector inputs and returns a `NodeList`.\n *\n * When jQuery selection is detected, adds a console deprecation warning as well.\n *\n * @since 1.1.0\n *\n * @param {NodeList|Element|string|jQuery} selector The input selector.\n * @return {Element[]} An array of `Element` objects derived from the selector input.\n */\nexport function ensureElementList( selector ) {\n\tselector =\n\t\ttypeof selector === 'string'\n\t\t\t? document.querySelectorAll( selector )\n\t\t\t: selector;\n\n\t// Already a NodeList.\n\tif ( selector instanceof NodeList ) {\n\t\treturn Array.from( selector );\n\t}\n\n\tconst list = [];\n\tif ( selector instanceof Element ) {\n\t\tlist.push( selector );\n\t} else if ( typeof jQuery !== 'undefined' && selector instanceof jQuery ) {\n\t\tselector.toArray().forEach( ( el ) => list.push( el ) );\n\t}\n\n\treturn list;\n}\n\n/**\n * Locates an existing spinner element which is a direct child of the specified wrapper element.\n *\n * @since 1.1.0\n *\n * @param {Element} wrapper Node element for the wrapper.\n * @return {null|undefined|Element} Returns `null` if no spinners exist within the wrapper, undefined if no spinners are\n * direct descendants of the wrapper, otherwise returns the spinner element.\n */\nexport function find( wrapper ) {\n\tconst spinners = wrapper.querySelectorAll( `.${ WRAPPER_CLASSNAME }` );\n\tif ( ! spinners.length ) {\n\t\treturn null;\n\t}\n\n\treturn Array.from( spinners ).find( ( el ) => wrapper === el.parentNode );\n}\n\n/**\n * Loads CSS styles and appends them to the document's .\n *\n * Attaching CSS directly to the `get()` method means that we don't have to worry about loading CSS files (or relying on CSS) included\n * by the LifterLMS core plugin in order to use this styled component.\n *\n * @since 1.1.0\n *\n * @return {void}\n */\nexport function loadStyles() {\n\tconst STYLE_ID = 'llms-spinner-styles';\n\n\tif ( ! document.getElementById( STYLE_ID ) ) {\n\t\tconst style = document.createElement( 'style' );\n\t\tstyle.textContent = STYLES.replace( /\\n/g, '' )\n\t\t\t.replace( /\\t/g, ' ' )\n\t\t\t.replace( /\\s\\s+/g, ' ' );\n\t\tstyle.id = STYLE_ID;\n\t\tdocument.head.appendChild( style );\n\t}\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport { S as Select } from '../../dist/Select-54ac8379.esm.js';\nimport { u as useStateManager } from '../../dist/useStateManager-68425271.esm.js';\nimport { u as useAsync } from '../../dist/useAsync-9deee0fa.esm.js';\nexport { u as useAsync } from '../../dist/useAsync-9deee0fa.esm.js';\nimport '../../dist/index-a7690a33.esm.js';\nimport '@emotion/react';\nimport '@babel/runtime/helpers/taggedTemplateLiteral';\nimport '@babel/runtime/helpers/objectWithoutProperties';\nimport '@babel/runtime/helpers/slicedToArray';\nimport '@babel/runtime/helpers/typeof';\nimport '@babel/runtime/helpers/classCallCheck';\nimport '@babel/runtime/helpers/createClass';\nimport '@babel/runtime/helpers/inherits';\nimport '@babel/runtime/helpers/defineProperty';\nimport 'react-dom';\nimport '@babel/runtime/helpers/toConsumableArray';\nimport 'memoize-one';\n\nvar AsyncSelect = /*#__PURE__*/forwardRef(function (props, ref) {\n var stateManagedProps = useAsync(props);\n var selectProps = useStateManager(stateManagedProps);\n return /*#__PURE__*/React.createElement(Select, _extends({\n ref: ref\n }, selectProps));\n});\n\nexport default AsyncSelect;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { a as _objectSpread2, r as removeProps, s as supportsPassiveEvents, b as clearIndicatorCSS, d as containerCSS, e as css$1, f as dropdownIndicatorCSS, g as groupCSS, h as groupHeadingCSS, i as indicatorsContainerCSS, j as indicatorSeparatorCSS, k as inputCSS, l as loadingIndicatorCSS, m as loadingMessageCSS, n as menuCSS, o as menuListCSS, p as menuPortalCSS, q as multiValueCSS, t as multiValueLabelCSS, u as multiValueRemoveCSS, v as noOptionsMessageCSS, w as optionCSS, x as placeholderCSS, y as css$2, z as valueContainerCSS, A as isTouchCapable, B as isMobileDevice, _ as _createSuper, C as multiValueAsValue, D as singleValueAsValue, E as valueTernary, F as classNames, G as defaultComponents, H as notNullish, I as isDocumentElement, J as cleanValue, K as scrollIntoView, L as noop, M as MenuPlacer } from './index-a7690a33.esm.js';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport * as React from 'react';\nimport { useMemo, Fragment, useRef, useCallback, useEffect, Component } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport memoizeOne from 'memoize-one';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\nvar _ref = process.env.NODE_ENV === \"production\" ? {\n name: \"7pg0cj-a11yText\",\n styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap\"\n} : {\n name: \"1f43avz-a11yText-A11yText\",\n styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap;label:A11yText;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkExMXlUZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNSSIsImZpbGUiOiJBMTF5VGV4dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeCBqc3ggKi9cbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxuLy8gQXNzaXN0aXZlIHRleHQgdG8gZGVzY3JpYmUgdmlzdWFsIGVsZW1lbnRzLiBIaWRkZW4gZm9yIHNpZ2h0ZWQgdXNlcnMuXG5jb25zdCBBMTF5VGV4dCA9IChwcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ10pID0+IChcbiAgPHNwYW5cbiAgICBjc3M9e3tcbiAgICAgIGxhYmVsOiAnYTExeVRleHQnLFxuICAgICAgekluZGV4OiA5OTk5LFxuICAgICAgYm9yZGVyOiAwLFxuICAgICAgY2xpcDogJ3JlY3QoMXB4LCAxcHgsIDFweCwgMXB4KScsXG4gICAgICBoZWlnaHQ6IDEsXG4gICAgICB3aWR0aDogMSxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgcGFkZGluZzogMCxcbiAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQTExeVRleHQ7XG4iXX0= */\",\n toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1\n};\n\nvar A11yText = function A11yText(props) {\n return jsx(\"span\", _extends({\n css: _ref\n }, props));\n};\n\nvar defaultAriaLiveMessages = {\n guidance: function guidance(props) {\n var isSearchable = props.isSearchable,\n isMulti = props.isMulti,\n isDisabled = props.isDisabled,\n tabSelectsValue = props.tabSelectsValue,\n context = props.context;\n\n switch (context) {\n case 'menu':\n return \"Use Up and Down to choose options\".concat(isDisabled ? '' : ', press Enter to select the currently focused option', \", press Escape to exit the menu\").concat(tabSelectsValue ? ', press Tab to select the option and exit the menu' : '', \".\");\n\n case 'input':\n return \"\".concat(props['aria-label'] || 'Select', \" is focused \").concat(isSearchable ? ',type to refine list' : '', \", press Down to open the menu, \").concat(isMulti ? ' press left to focus selected values' : '');\n\n case 'value':\n return 'Use left and right to toggle between focused values, press Backspace to remove the currently focused value';\n\n default:\n return '';\n }\n },\n onChange: function onChange(props) {\n var action = props.action,\n _props$label = props.label,\n label = _props$label === void 0 ? '' : _props$label,\n labels = props.labels,\n isDisabled = props.isDisabled;\n\n switch (action) {\n case 'deselect-option':\n case 'pop-value':\n case 'remove-value':\n return \"option \".concat(label, \", deselected.\");\n\n case 'clear':\n return 'All selected options have been cleared.';\n\n case 'initial-input-focus':\n return \"option\".concat(labels.length > 1 ? 's' : '', \" \").concat(labels.join(','), \", selected.\");\n\n case 'select-option':\n return isDisabled ? \"option \".concat(label, \" is disabled. Select another option.\") : \"option \".concat(label, \", selected.\");\n\n default:\n return '';\n }\n },\n onFocus: function onFocus(props) {\n var context = props.context,\n focused = props.focused,\n options = props.options,\n _props$label2 = props.label,\n label = _props$label2 === void 0 ? '' : _props$label2,\n selectValue = props.selectValue,\n isDisabled = props.isDisabled,\n isSelected = props.isSelected;\n\n var getArrayIndex = function getArrayIndex(arr, item) {\n return arr && arr.length ? \"\".concat(arr.indexOf(item) + 1, \" of \").concat(arr.length) : '';\n };\n\n if (context === 'value' && selectValue) {\n return \"value \".concat(label, \" focused, \").concat(getArrayIndex(selectValue, focused), \".\");\n }\n\n if (context === 'menu') {\n var disabled = isDisabled ? ' disabled' : '';\n var status = \"\".concat(isSelected ? 'selected' : 'focused').concat(disabled);\n return \"option \".concat(label, \" \").concat(status, \", \").concat(getArrayIndex(options, focused), \".\");\n }\n\n return '';\n },\n onFilter: function onFilter(props) {\n var inputValue = props.inputValue,\n resultsMessage = props.resultsMessage;\n return \"\".concat(resultsMessage).concat(inputValue ? ' for search term ' + inputValue : '', \".\");\n }\n};\n\nvar LiveRegion = function LiveRegion(props) {\n var ariaSelection = props.ariaSelection,\n focusedOption = props.focusedOption,\n focusedValue = props.focusedValue,\n focusableOptions = props.focusableOptions,\n isFocused = props.isFocused,\n selectValue = props.selectValue,\n selectProps = props.selectProps,\n id = props.id;\n var ariaLiveMessages = selectProps.ariaLiveMessages,\n getOptionLabel = selectProps.getOptionLabel,\n inputValue = selectProps.inputValue,\n isMulti = selectProps.isMulti,\n isOptionDisabled = selectProps.isOptionDisabled,\n isSearchable = selectProps.isSearchable,\n menuIsOpen = selectProps.menuIsOpen,\n options = selectProps.options,\n screenReaderStatus = selectProps.screenReaderStatus,\n tabSelectsValue = selectProps.tabSelectsValue;\n var ariaLabel = selectProps['aria-label'];\n var ariaLive = selectProps['aria-live']; // Update aria live message configuration when prop changes\n\n var messages = useMemo(function () {\n return _objectSpread2(_objectSpread2({}, defaultAriaLiveMessages), ariaLiveMessages || {});\n }, [ariaLiveMessages]); // Update aria live selected option when prop changes\n\n var ariaSelected = useMemo(function () {\n var message = '';\n\n if (ariaSelection && messages.onChange) {\n var option = ariaSelection.option,\n selectedOptions = ariaSelection.options,\n removedValue = ariaSelection.removedValue,\n removedValues = ariaSelection.removedValues,\n value = ariaSelection.value; // select-option when !isMulti does not return option so we assume selected option is value\n\n var asOption = function asOption(val) {\n return !Array.isArray(val) ? val : null;\n }; // If there is just one item from the action then get its label\n\n\n var selected = removedValue || option || asOption(value);\n var label = selected ? getOptionLabel(selected) : ''; // If there are multiple items from the action then return an array of labels\n\n var multiSelected = selectedOptions || removedValues || undefined;\n var labels = multiSelected ? multiSelected.map(getOptionLabel) : [];\n\n var onChangeProps = _objectSpread2({\n // multiSelected items are usually items that have already been selected\n // or set by the user as a default value so we assume they are not disabled\n isDisabled: selected && isOptionDisabled(selected, selectValue),\n label: label,\n labels: labels\n }, ariaSelection);\n\n message = messages.onChange(onChangeProps);\n }\n\n return message;\n }, [ariaSelection, messages, isOptionDisabled, selectValue, getOptionLabel]);\n var ariaFocused = useMemo(function () {\n var focusMsg = '';\n var focused = focusedOption || focusedValue;\n var isSelected = !!(focusedOption && selectValue && selectValue.includes(focusedOption));\n\n if (focused && messages.onFocus) {\n var onFocusProps = {\n focused: focused,\n label: getOptionLabel(focused),\n isDisabled: isOptionDisabled(focused, selectValue),\n isSelected: isSelected,\n options: options,\n context: focused === focusedOption ? 'menu' : 'value',\n selectValue: selectValue\n };\n focusMsg = messages.onFocus(onFocusProps);\n }\n\n return focusMsg;\n }, [focusedOption, focusedValue, getOptionLabel, isOptionDisabled, messages, options, selectValue]);\n var ariaResults = useMemo(function () {\n var resultsMsg = '';\n\n if (menuIsOpen && options.length && messages.onFilter) {\n var resultsMessage = screenReaderStatus({\n count: focusableOptions.length\n });\n resultsMsg = messages.onFilter({\n inputValue: inputValue,\n resultsMessage: resultsMessage\n });\n }\n\n return resultsMsg;\n }, [focusableOptions, inputValue, menuIsOpen, messages, options, screenReaderStatus]);\n var ariaGuidance = useMemo(function () {\n var guidanceMsg = '';\n\n if (messages.guidance) {\n var context = focusedValue ? 'value' : menuIsOpen ? 'menu' : 'input';\n guidanceMsg = messages.guidance({\n 'aria-label': ariaLabel,\n context: context,\n isDisabled: focusedOption && isOptionDisabled(focusedOption, selectValue),\n isMulti: isMulti,\n isSearchable: isSearchable,\n tabSelectsValue: tabSelectsValue\n });\n }\n\n return guidanceMsg;\n }, [ariaLabel, focusedOption, focusedValue, isMulti, isOptionDisabled, isSearchable, menuIsOpen, messages, selectValue, tabSelectsValue]);\n var ariaContext = \"\".concat(ariaFocused, \" \").concat(ariaResults, \" \").concat(ariaGuidance);\n var ScreenReaderText = jsx(Fragment, null, jsx(\"span\", {\n id: \"aria-selection\"\n }, ariaSelected), jsx(\"span\", {\n id: \"aria-context\"\n }, ariaContext));\n var isInitialFocus = (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus';\n return jsx(Fragment, null, jsx(A11yText, {\n id: id\n }, isInitialFocus && ScreenReaderText), jsx(A11yText, {\n \"aria-live\": ariaLive,\n \"aria-atomic\": \"false\",\n \"aria-relevant\": \"additions text\"\n }, isFocused && !isInitialFocus && ScreenReaderText));\n};\n\nvar diacritics = [{\n base: 'A',\n letters: \"A\\u24B6\\uFF21\\xC0\\xC1\\xC2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\xC3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\xC4\\u01DE\\u1EA2\\xC5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\"\n}, {\n base: 'AA',\n letters: \"\\uA732\"\n}, {\n base: 'AE',\n letters: \"\\xC6\\u01FC\\u01E2\"\n}, {\n base: 'AO',\n letters: \"\\uA734\"\n}, {\n base: 'AU',\n letters: \"\\uA736\"\n}, {\n base: 'AV',\n letters: \"\\uA738\\uA73A\"\n}, {\n base: 'AY',\n letters: \"\\uA73C\"\n}, {\n base: 'B',\n letters: \"B\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181\"\n}, {\n base: 'C',\n letters: \"C\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\xC7\\u1E08\\u0187\\u023B\\uA73E\"\n}, {\n base: 'D',\n letters: \"D\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779\"\n}, {\n base: 'DZ',\n letters: \"\\u01F1\\u01C4\"\n}, {\n base: 'Dz',\n letters: \"\\u01F2\\u01C5\"\n}, {\n base: 'E',\n letters: \"E\\u24BA\\uFF25\\xC8\\xC9\\xCA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\xCB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\"\n}, {\n base: 'F',\n letters: \"F\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\"\n}, {\n base: 'G',\n letters: \"G\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\"\n}, {\n base: 'H',\n letters: \"H\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\"\n}, {\n base: 'I',\n letters: \"I\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\"\n}, {\n base: 'J',\n letters: \"J\\u24BF\\uFF2A\\u0134\\u0248\"\n}, {\n base: 'K',\n letters: \"K\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\"\n}, {\n base: 'L',\n letters: \"L\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\"\n}, {\n base: 'LJ',\n letters: \"\\u01C7\"\n}, {\n base: 'Lj',\n letters: \"\\u01C8\"\n}, {\n base: 'M',\n letters: \"M\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\"\n}, {\n base: 'N',\n letters: \"N\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4\"\n}, {\n base: 'NJ',\n letters: \"\\u01CA\"\n}, {\n base: 'Nj',\n letters: \"\\u01CB\"\n}, {\n base: 'O',\n letters: \"O\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\"\n}, {\n base: 'OI',\n letters: \"\\u01A2\"\n}, {\n base: 'OO',\n letters: \"\\uA74E\"\n}, {\n base: 'OU',\n letters: \"\\u0222\"\n}, {\n base: 'P',\n letters: \"P\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\"\n}, {\n base: 'Q',\n letters: \"Q\\u24C6\\uFF31\\uA756\\uA758\\u024A\"\n}, {\n base: 'R',\n letters: \"R\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\"\n}, {\n base: 'S',\n letters: \"S\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\"\n}, {\n base: 'T',\n letters: \"T\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\"\n}, {\n base: 'TZ',\n letters: \"\\uA728\"\n}, {\n base: 'U',\n letters: \"U\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\"\n}, {\n base: 'V',\n letters: \"V\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\"\n}, {\n base: 'VY',\n letters: \"\\uA760\"\n}, {\n base: 'W',\n letters: \"W\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\"\n}, {\n base: 'X',\n letters: \"X\\u24CD\\uFF38\\u1E8A\\u1E8C\"\n}, {\n base: 'Y',\n letters: \"Y\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\"\n}, {\n base: 'Z',\n letters: \"Z\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\"\n}, {\n base: 'a',\n letters: \"a\\u24D0\\uFF41\\u1E9A\\xE0\\xE1\\xE2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\xE3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\xE4\\u01DF\\u1EA3\\xE5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\"\n}, {\n base: 'aa',\n letters: \"\\uA733\"\n}, {\n base: 'ae',\n letters: \"\\xE6\\u01FD\\u01E3\"\n}, {\n base: 'ao',\n letters: \"\\uA735\"\n}, {\n base: 'au',\n letters: \"\\uA737\"\n}, {\n base: 'av',\n letters: \"\\uA739\\uA73B\"\n}, {\n base: 'ay',\n letters: \"\\uA73D\"\n}, {\n base: 'b',\n letters: \"b\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\"\n}, {\n base: 'c',\n letters: \"c\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\xE7\\u1E09\\u0188\\u023C\\uA73F\\u2184\"\n}, {\n base: 'd',\n letters: \"d\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A\"\n}, {\n base: 'dz',\n letters: \"\\u01F3\\u01C6\"\n}, {\n base: 'e',\n letters: \"e\\u24D4\\uFF45\\xE8\\xE9\\xEA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\xEB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD\"\n}, {\n base: 'f',\n letters: \"f\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C\"\n}, {\n base: 'g',\n letters: \"g\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F\"\n}, {\n base: 'h',\n letters: \"h\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\"\n}, {\n base: 'hv',\n letters: \"\\u0195\"\n}, {\n base: 'i',\n letters: \"i\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\"\n}, {\n base: 'j',\n letters: \"j\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\"\n}, {\n base: 'k',\n letters: \"k\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\"\n}, {\n base: 'l',\n letters: \"l\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\"\n}, {\n base: 'lj',\n letters: \"\\u01C9\"\n}, {\n base: 'm',\n letters: \"m\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\"\n}, {\n base: 'n',\n letters: \"n\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\"\n}, {\n base: 'nj',\n letters: \"\\u01CC\"\n}, {\n base: 'o',\n letters: \"o\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\u0254\\uA74B\\uA74D\\u0275\"\n}, {\n base: 'oi',\n letters: \"\\u01A3\"\n}, {\n base: 'ou',\n letters: \"\\u0223\"\n}, {\n base: 'oo',\n letters: \"\\uA74F\"\n}, {\n base: 'p',\n letters: \"p\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\"\n}, {\n base: 'q',\n letters: \"q\\u24E0\\uFF51\\u024B\\uA757\\uA759\"\n}, {\n base: 'r',\n letters: \"r\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\"\n}, {\n base: 's',\n letters: \"s\\u24E2\\uFF53\\xDF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\"\n}, {\n base: 't',\n letters: \"t\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\"\n}, {\n base: 'tz',\n letters: \"\\uA729\"\n}, {\n base: 'u',\n letters: \"u\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\"\n}, {\n base: 'v',\n letters: \"v\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\"\n}, {\n base: 'vy',\n letters: \"\\uA761\"\n}, {\n base: 'w',\n letters: \"w\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\"\n}, {\n base: 'x',\n letters: \"x\\u24E7\\uFF58\\u1E8B\\u1E8D\"\n}, {\n base: 'y',\n letters: \"y\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\"\n}, {\n base: 'z',\n letters: \"z\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\"\n}];\nvar anyDiacritic = new RegExp('[' + diacritics.map(function (d) {\n return d.letters;\n}).join('') + ']', 'g');\nvar diacriticToBase = {};\n\nfor (var i = 0; i < diacritics.length; i++) {\n var diacritic = diacritics[i];\n\n for (var j = 0; j < diacritic.letters.length; j++) {\n diacriticToBase[diacritic.letters[j]] = diacritic.base;\n }\n}\n\nvar stripDiacritics = function stripDiacritics(str) {\n return str.replace(anyDiacritic, function (match) {\n return diacriticToBase[match];\n });\n};\n\nvar memoizedStripDiacriticsForInput = memoizeOne(stripDiacritics);\n\nvar trimString = function trimString(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n};\n\nvar defaultStringify = function defaultStringify(option) {\n return \"\".concat(option.label, \" \").concat(option.value);\n};\n\nvar createFilter = function createFilter(config) {\n return function (option, rawInput) {\n // eslint-disable-next-line no-underscore-dangle\n if (option.data.__isNew__) return true;\n\n var _ignoreCase$ignoreAcc = _objectSpread2({\n ignoreCase: true,\n ignoreAccents: true,\n stringify: defaultStringify,\n trim: true,\n matchFrom: 'any'\n }, config),\n ignoreCase = _ignoreCase$ignoreAcc.ignoreCase,\n ignoreAccents = _ignoreCase$ignoreAcc.ignoreAccents,\n stringify = _ignoreCase$ignoreAcc.stringify,\n trim = _ignoreCase$ignoreAcc.trim,\n matchFrom = _ignoreCase$ignoreAcc.matchFrom;\n\n var input = trim ? trimString(rawInput) : rawInput;\n var candidate = trim ? trimString(stringify(option)) : stringify(option);\n\n if (ignoreCase) {\n input = input.toLowerCase();\n candidate = candidate.toLowerCase();\n }\n\n if (ignoreAccents) {\n input = memoizedStripDiacriticsForInput(input);\n candidate = stripDiacritics(candidate);\n }\n\n return matchFrom === 'start' ? candidate.substr(0, input.length) === input : candidate.indexOf(input) > -1;\n };\n};\n\nvar _excluded = [\"innerRef\"];\nfunction DummyInput(_ref) {\n var innerRef = _ref.innerRef,\n props = _objectWithoutProperties(_ref, _excluded);\n\n // Remove animation props not meant for HTML elements\n var filteredProps = removeProps(props, 'onExited', 'in', 'enter', 'exit', 'appear');\n return jsx(\"input\", _extends({\n ref: innerRef\n }, filteredProps, {\n css: /*#__PURE__*/css({\n label: 'dummyInput',\n // get rid of any default styles\n background: 0,\n border: 0,\n // important! this hides the flashing cursor\n caretColor: 'transparent',\n fontSize: 'inherit',\n gridArea: '1 / 1 / 2 / 3',\n outline: 0,\n padding: 0,\n // important! without `width` browsers won't allow focus\n width: 1,\n // remove cursor on desktop\n color: 'transparent',\n // remove cursor on mobile whilst maintaining \"scroll into view\" behaviour\n left: -100,\n opacity: 0,\n position: 'relative',\n transform: 'scale(.01)'\n }, process.env.NODE_ENV === \"production\" ? \"\" : \";label:DummyInput;\", process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR1bW15SW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCTSIsImZpbGUiOiJEdW1teUlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgcmVtb3ZlUHJvcHMgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIER1bW15SW5wdXQoe1xuICBpbm5lclJlZixcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snaW5wdXQnXSAmIHtcbiAgcmVhZG9ubHkgaW5uZXJSZWY6IFJlZjxIVE1MSW5wdXRFbGVtZW50Pjtcbn0pIHtcbiAgLy8gUmVtb3ZlIGFuaW1hdGlvbiBwcm9wcyBub3QgbWVhbnQgZm9yIEhUTUwgZWxlbWVudHNcbiAgY29uc3QgZmlsdGVyZWRQcm9wcyA9IHJlbW92ZVByb3BzKFxuICAgIHByb3BzLFxuICAgICdvbkV4aXRlZCcsXG4gICAgJ2luJyxcbiAgICAnZW50ZXInLFxuICAgICdleGl0JyxcbiAgICAnYXBwZWFyJ1xuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9e2lubmVyUmVmfVxuICAgICAgey4uLmZpbHRlcmVkUHJvcHN9XG4gICAgICBjc3M9e3tcbiAgICAgICAgbGFiZWw6ICdkdW1teUlucHV0JyxcbiAgICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgICAgYmFja2dyb3VuZDogMCxcbiAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHRoaXMgaGlkZXMgdGhlIGZsYXNoaW5nIGN1cnNvclxuICAgICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgICAgICBvdXRsaW5lOiAwLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgICB3aWR0aDogMSxcblxuICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG5cbiAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgICBsZWZ0OiAtMTAwLFxuICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoLjAxKScsXG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59XG4iXX0= */\")\n }));\n}\n\nvar cancelScroll = function cancelScroll(event) {\n event.preventDefault();\n event.stopPropagation();\n};\n\nfunction useScrollCapture(_ref) {\n var isEnabled = _ref.isEnabled,\n onBottomArrive = _ref.onBottomArrive,\n onBottomLeave = _ref.onBottomLeave,\n onTopArrive = _ref.onTopArrive,\n onTopLeave = _ref.onTopLeave;\n var isBottom = useRef(false);\n var isTop = useRef(false);\n var touchStart = useRef(0);\n var scrollTarget = useRef(null);\n var handleEventDelta = useCallback(function (event, delta) {\n if (scrollTarget.current === null) return;\n var _scrollTarget$current = scrollTarget.current,\n scrollTop = _scrollTarget$current.scrollTop,\n scrollHeight = _scrollTarget$current.scrollHeight,\n clientHeight = _scrollTarget$current.clientHeight;\n var target = scrollTarget.current;\n var isDeltaPositive = delta > 0;\n var availableScroll = scrollHeight - clientHeight - scrollTop;\n var shouldCancelScroll = false; // reset bottom/top flags\n\n if (availableScroll > delta && isBottom.current) {\n if (onBottomLeave) onBottomLeave(event);\n isBottom.current = false;\n }\n\n if (isDeltaPositive && isTop.current) {\n if (onTopLeave) onTopLeave(event);\n isTop.current = false;\n } // bottom limit\n\n\n if (isDeltaPositive && delta > availableScroll) {\n if (onBottomArrive && !isBottom.current) {\n onBottomArrive(event);\n }\n\n target.scrollTop = scrollHeight;\n shouldCancelScroll = true;\n isBottom.current = true; // top limit\n } else if (!isDeltaPositive && -delta > scrollTop) {\n if (onTopArrive && !isTop.current) {\n onTopArrive(event);\n }\n\n target.scrollTop = 0;\n shouldCancelScroll = true;\n isTop.current = true;\n } // cancel scroll\n\n\n if (shouldCancelScroll) {\n cancelScroll(event);\n }\n }, [onBottomArrive, onBottomLeave, onTopArrive, onTopLeave]);\n var onWheel = useCallback(function (event) {\n handleEventDelta(event, event.deltaY);\n }, [handleEventDelta]);\n var onTouchStart = useCallback(function (event) {\n // set touch start so we can calculate touchmove delta\n touchStart.current = event.changedTouches[0].clientY;\n }, []);\n var onTouchMove = useCallback(function (event) {\n var deltaY = touchStart.current - event.changedTouches[0].clientY;\n handleEventDelta(event, deltaY);\n }, [handleEventDelta]);\n var startListening = useCallback(function (el) {\n // bail early if no element is available to attach to\n if (!el) return;\n var notPassive = supportsPassiveEvents ? {\n passive: false\n } : false;\n el.addEventListener('wheel', onWheel, notPassive);\n el.addEventListener('touchstart', onTouchStart, notPassive);\n el.addEventListener('touchmove', onTouchMove, notPassive);\n }, [onTouchMove, onTouchStart, onWheel]);\n var stopListening = useCallback(function (el) {\n // bail early if no element is available to detach from\n if (!el) return;\n el.removeEventListener('wheel', onWheel, false);\n el.removeEventListener('touchstart', onTouchStart, false);\n el.removeEventListener('touchmove', onTouchMove, false);\n }, [onTouchMove, onTouchStart, onWheel]);\n useEffect(function () {\n if (!isEnabled) return;\n var element = scrollTarget.current;\n startListening(element);\n return function () {\n stopListening(element);\n };\n }, [isEnabled, startListening, stopListening]);\n return function (element) {\n scrollTarget.current = element;\n };\n}\n\nvar STYLE_KEYS = ['boxSizing', 'height', 'overflow', 'paddingRight', 'position'];\nvar LOCK_STYLES = {\n boxSizing: 'border-box',\n // account for possible declaration `width: 100%;` on body\n overflow: 'hidden',\n position: 'relative',\n height: '100%'\n};\n\nfunction preventTouchMove(e) {\n e.preventDefault();\n}\n\nfunction allowTouchMove(e) {\n e.stopPropagation();\n}\n\nfunction preventInertiaScroll() {\n var top = this.scrollTop;\n var totalScroll = this.scrollHeight;\n var currentScroll = top + this.offsetHeight;\n\n if (top === 0) {\n this.scrollTop = 1;\n } else if (currentScroll === totalScroll) {\n this.scrollTop = top - 1;\n }\n} // `ontouchstart` check works on most browsers\n// `maxTouchPoints` works on IE10/11 and Surface\n\n\nfunction isTouchDevice() {\n return 'ontouchstart' in window || navigator.maxTouchPoints;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nvar activeScrollLocks = 0;\nvar listenerOptions = {\n capture: false,\n passive: false\n};\nfunction useScrollLock(_ref) {\n var isEnabled = _ref.isEnabled,\n _ref$accountForScroll = _ref.accountForScrollbars,\n accountForScrollbars = _ref$accountForScroll === void 0 ? true : _ref$accountForScroll;\n var originalStyles = useRef({});\n var scrollTarget = useRef(null);\n var addScrollLock = useCallback(function (touchScrollTarget) {\n if (!canUseDOM) return;\n var target = document.body;\n var targetStyle = target && target.style;\n\n if (accountForScrollbars) {\n // store any styles already applied to the body\n STYLE_KEYS.forEach(function (key) {\n var val = targetStyle && targetStyle[key];\n originalStyles.current[key] = val;\n });\n } // apply the lock styles and padding if this is the first scroll lock\n\n\n if (accountForScrollbars && activeScrollLocks < 1) {\n var currentPadding = parseInt(originalStyles.current.paddingRight, 10) || 0;\n var clientWidth = document.body ? document.body.clientWidth : 0;\n var adjustedPadding = window.innerWidth - clientWidth + currentPadding || 0;\n Object.keys(LOCK_STYLES).forEach(function (key) {\n var val = LOCK_STYLES[key];\n\n if (targetStyle) {\n targetStyle[key] = val;\n }\n });\n\n if (targetStyle) {\n targetStyle.paddingRight = \"\".concat(adjustedPadding, \"px\");\n }\n } // account for touch devices\n\n\n if (target && isTouchDevice()) {\n // Mobile Safari ignores { overflow: hidden } declaration on the body.\n target.addEventListener('touchmove', preventTouchMove, listenerOptions); // Allow scroll on provided target\n\n if (touchScrollTarget) {\n touchScrollTarget.addEventListener('touchstart', preventInertiaScroll, listenerOptions);\n touchScrollTarget.addEventListener('touchmove', allowTouchMove, listenerOptions);\n }\n } // increment active scroll locks\n\n\n activeScrollLocks += 1;\n }, [accountForScrollbars]);\n var removeScrollLock = useCallback(function (touchScrollTarget) {\n if (!canUseDOM) return;\n var target = document.body;\n var targetStyle = target && target.style; // safely decrement active scroll locks\n\n activeScrollLocks = Math.max(activeScrollLocks - 1, 0); // reapply original body styles, if any\n\n if (accountForScrollbars && activeScrollLocks < 1) {\n STYLE_KEYS.forEach(function (key) {\n var val = originalStyles.current[key];\n\n if (targetStyle) {\n targetStyle[key] = val;\n }\n });\n } // remove touch listeners\n\n\n if (target && isTouchDevice()) {\n target.removeEventListener('touchmove', preventTouchMove, listenerOptions);\n\n if (touchScrollTarget) {\n touchScrollTarget.removeEventListener('touchstart', preventInertiaScroll, listenerOptions);\n touchScrollTarget.removeEventListener('touchmove', allowTouchMove, listenerOptions);\n }\n }\n }, [accountForScrollbars]);\n useEffect(function () {\n if (!isEnabled) return;\n var element = scrollTarget.current;\n addScrollLock(element);\n return function () {\n removeScrollLock(element);\n };\n }, [isEnabled, addScrollLock, removeScrollLock]);\n return function (element) {\n scrollTarget.current = element;\n };\n}\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\nvar blurSelectInput = function blurSelectInput() {\n return document.activeElement && document.activeElement.blur();\n};\n\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n name: \"1kfdb0e\",\n styles: \"position:fixed;left:0;bottom:0;right:0;top:0\"\n} : {\n name: \"bp8cua-ScrollManager\",\n styles: \"position:fixed;left:0;bottom:0;right:0;top:0;label:ScrollManager;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjcm9sbE1hbmFnZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStDVSIsImZpbGUiOiJTY3JvbGxNYW5hZ2VyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIFJlYWN0RWxlbWVudCwgUmVmQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlU2Nyb2xsQ2FwdHVyZSBmcm9tICcuL3VzZVNjcm9sbENhcHR1cmUnO1xuaW1wb3J0IHVzZVNjcm9sbExvY2sgZnJvbSAnLi91c2VTY3JvbGxMb2NrJztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgcmVhZG9ubHkgY2hpbGRyZW46IChyZWY6IFJlZkNhbGxiYWNrPEhUTUxFbGVtZW50PikgPT4gUmVhY3RFbGVtZW50O1xuICByZWFkb25seSBsb2NrRW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FwdHVyZUVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9uQm90dG9tQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Cb3R0b21MZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uVG9wQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Ub3BMZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGJsdXJTZWxlY3RJbnB1dCA9ICgpID0+XG4gIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmJsdXIoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2Nyb2xsTWFuYWdlcih7XG4gIGNoaWxkcmVuLFxuICBsb2NrRW5hYmxlZCxcbiAgY2FwdHVyZUVuYWJsZWQgPSB0cnVlLFxuICBvbkJvdHRvbUFycml2ZSxcbiAgb25Cb3R0b21MZWF2ZSxcbiAgb25Ub3BBcnJpdmUsXG4gIG9uVG9wTGVhdmUsXG59OiBQcm9wcykge1xuICBjb25zdCBzZXRTY3JvbGxDYXB0dXJlVGFyZ2V0ID0gdXNlU2Nyb2xsQ2FwdHVyZSh7XG4gICAgaXNFbmFibGVkOiBjYXB0dXJlRW5hYmxlZCxcbiAgICBvbkJvdHRvbUFycml2ZSxcbiAgICBvbkJvdHRvbUxlYXZlLFxuICAgIG9uVG9wQXJyaXZlLFxuICAgIG9uVG9wTGVhdmUsXG4gIH0pO1xuICBjb25zdCBzZXRTY3JvbGxMb2NrVGFyZ2V0ID0gdXNlU2Nyb2xsTG9jayh7IGlzRW5hYmxlZDogbG9ja0VuYWJsZWQgfSk7XG5cbiAgY29uc3QgdGFyZ2V0UmVmOiBSZWZDYWxsYmFjazxIVE1MRWxlbWVudD4gPSAoZWxlbWVudCkgPT4ge1xuICAgIHNldFNjcm9sbENhcHR1cmVUYXJnZXQoZWxlbWVudCk7XG4gICAgc2V0U2Nyb2xsTG9ja1RhcmdldChlbGVtZW50KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIHtsb2NrRW5hYmxlZCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBvbkNsaWNrPXtibHVyU2VsZWN0SW5wdXR9XG4gICAgICAgICAgY3NzPXt7IHBvc2l0aW9uOiAnZml4ZWQnLCBsZWZ0OiAwLCBib3R0b206IDAsIHJpZ2h0OiAwLCB0b3A6IDAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7Y2hpbGRyZW4odGFyZ2V0UmVmKX1cbiAgICA8L0ZyYWdtZW50PlxuICApO1xufVxuIl19 */\",\n toString: _EMOTION_STRINGIFIED_CSS_ERROR__\n};\n\nfunction ScrollManager(_ref) {\n var children = _ref.children,\n lockEnabled = _ref.lockEnabled,\n _ref$captureEnabled = _ref.captureEnabled,\n captureEnabled = _ref$captureEnabled === void 0 ? true : _ref$captureEnabled,\n onBottomArrive = _ref.onBottomArrive,\n onBottomLeave = _ref.onBottomLeave,\n onTopArrive = _ref.onTopArrive,\n onTopLeave = _ref.onTopLeave;\n var setScrollCaptureTarget = useScrollCapture({\n isEnabled: captureEnabled,\n onBottomArrive: onBottomArrive,\n onBottomLeave: onBottomLeave,\n onTopArrive: onTopArrive,\n onTopLeave: onTopLeave\n });\n var setScrollLockTarget = useScrollLock({\n isEnabled: lockEnabled\n });\n\n var targetRef = function targetRef(element) {\n setScrollCaptureTarget(element);\n setScrollLockTarget(element);\n };\n\n return jsx(Fragment, null, lockEnabled && jsx(\"div\", {\n onClick: blurSelectInput,\n css: _ref2\n }), children(targetRef));\n}\n\nvar formatGroupLabel = function formatGroupLabel(group) {\n return group.label;\n};\nvar getOptionLabel$1 = function getOptionLabel(option) {\n return option.label;\n};\nvar getOptionValue$1 = function getOptionValue(option) {\n return option.value;\n};\nvar isOptionDisabled = function isOptionDisabled(option) {\n return !!option.isDisabled;\n};\n\nvar defaultStyles = {\n clearIndicator: clearIndicatorCSS,\n container: containerCSS,\n control: css$1,\n dropdownIndicator: dropdownIndicatorCSS,\n group: groupCSS,\n groupHeading: groupHeadingCSS,\n indicatorsContainer: indicatorsContainerCSS,\n indicatorSeparator: indicatorSeparatorCSS,\n input: inputCSS,\n loadingIndicator: loadingIndicatorCSS,\n loadingMessage: loadingMessageCSS,\n menu: menuCSS,\n menuList: menuListCSS,\n menuPortal: menuPortalCSS,\n multiValue: multiValueCSS,\n multiValueLabel: multiValueLabelCSS,\n multiValueRemove: multiValueRemoveCSS,\n noOptionsMessage: noOptionsMessageCSS,\n option: optionCSS,\n placeholder: placeholderCSS,\n singleValue: css$2,\n valueContainer: valueContainerCSS\n}; // Merge Utility\n// Allows consumers to extend a base Select with additional styles\n\nfunction mergeStyles(source) {\n var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // initialize with source styles\n var styles = _objectSpread2({}, source); // massage in target styles\n\n\n Object.keys(target).forEach(function (keyAsString) {\n var key = keyAsString;\n\n if (source[key]) {\n styles[key] = function (rsCss, props) {\n return target[key](source[key](rsCss, props), props);\n };\n } else {\n styles[key] = target[key];\n }\n });\n return styles;\n}\n\nvar colors = {\n primary: '#2684FF',\n primary75: '#4C9AFF',\n primary50: '#B2D4FF',\n primary25: '#DEEBFF',\n danger: '#DE350B',\n dangerLight: '#FFBDAD',\n neutral0: 'hsl(0, 0%, 100%)',\n neutral5: 'hsl(0, 0%, 95%)',\n neutral10: 'hsl(0, 0%, 90%)',\n neutral20: 'hsl(0, 0%, 80%)',\n neutral30: 'hsl(0, 0%, 70%)',\n neutral40: 'hsl(0, 0%, 60%)',\n neutral50: 'hsl(0, 0%, 50%)',\n neutral60: 'hsl(0, 0%, 40%)',\n neutral70: 'hsl(0, 0%, 30%)',\n neutral80: 'hsl(0, 0%, 20%)',\n neutral90: 'hsl(0, 0%, 10%)'\n};\nvar borderRadius = 4; // Used to calculate consistent margin/padding on elements\n\nvar baseUnit = 4; // The minimum height of the control\n\nvar controlHeight = 38; // The amount of space between the control and menu */\n\nvar menuGutter = baseUnit * 2;\nvar spacing = {\n baseUnit: baseUnit,\n controlHeight: controlHeight,\n menuGutter: menuGutter\n};\nvar defaultTheme = {\n borderRadius: borderRadius,\n colors: colors,\n spacing: spacing\n};\n\nvar defaultProps = {\n 'aria-live': 'polite',\n backspaceRemovesValue: true,\n blurInputOnSelect: isTouchCapable(),\n captureMenuScroll: !isTouchCapable(),\n closeMenuOnSelect: true,\n closeMenuOnScroll: false,\n components: {},\n controlShouldRenderValue: true,\n escapeClearsValue: false,\n filterOption: createFilter(),\n formatGroupLabel: formatGroupLabel,\n getOptionLabel: getOptionLabel$1,\n getOptionValue: getOptionValue$1,\n isDisabled: false,\n isLoading: false,\n isMulti: false,\n isRtl: false,\n isSearchable: true,\n isOptionDisabled: isOptionDisabled,\n loadingMessage: function loadingMessage() {\n return 'Loading...';\n },\n maxMenuHeight: 300,\n minMenuHeight: 140,\n menuIsOpen: false,\n menuPlacement: 'bottom',\n menuPosition: 'absolute',\n menuShouldBlockScroll: false,\n menuShouldScrollIntoView: !isMobileDevice(),\n noOptionsMessage: function noOptionsMessage() {\n return 'No options';\n },\n openMenuOnFocus: false,\n openMenuOnClick: true,\n options: [],\n pageSize: 5,\n placeholder: 'Select...',\n screenReaderStatus: function screenReaderStatus(_ref) {\n var count = _ref.count;\n return \"\".concat(count, \" result\").concat(count !== 1 ? 's' : '', \" available\");\n },\n styles: {},\n tabIndex: 0,\n tabSelectsValue: true\n};\n\nfunction toCategorizedOption(props, option, selectValue, index) {\n var isDisabled = _isOptionDisabled(props, option, selectValue);\n\n var isSelected = _isOptionSelected(props, option, selectValue);\n\n var label = getOptionLabel(props, option);\n var value = getOptionValue(props, option);\n return {\n type: 'option',\n data: option,\n isDisabled: isDisabled,\n isSelected: isSelected,\n label: label,\n value: value,\n index: index\n };\n}\n\nfunction buildCategorizedOptions(props, selectValue) {\n return props.options.map(function (groupOrOption, groupOrOptionIndex) {\n if ('options' in groupOrOption) {\n var categorizedOptions = groupOrOption.options.map(function (option, optionIndex) {\n return toCategorizedOption(props, option, selectValue, optionIndex);\n }).filter(function (categorizedOption) {\n return isFocusable(props, categorizedOption);\n });\n return categorizedOptions.length > 0 ? {\n type: 'group',\n data: groupOrOption,\n options: categorizedOptions,\n index: groupOrOptionIndex\n } : undefined;\n }\n\n var categorizedOption = toCategorizedOption(props, groupOrOption, selectValue, groupOrOptionIndex);\n return isFocusable(props, categorizedOption) ? categorizedOption : undefined;\n }).filter(notNullish);\n}\n\nfunction buildFocusableOptionsFromCategorizedOptions(categorizedOptions) {\n return categorizedOptions.reduce(function (optionsAccumulator, categorizedOption) {\n if (categorizedOption.type === 'group') {\n optionsAccumulator.push.apply(optionsAccumulator, _toConsumableArray(categorizedOption.options.map(function (option) {\n return option.data;\n })));\n } else {\n optionsAccumulator.push(categorizedOption.data);\n }\n\n return optionsAccumulator;\n }, []);\n}\n\nfunction buildFocusableOptions(props, selectValue) {\n return buildFocusableOptionsFromCategorizedOptions(buildCategorizedOptions(props, selectValue));\n}\n\nfunction isFocusable(props, categorizedOption) {\n var _props$inputValue = props.inputValue,\n inputValue = _props$inputValue === void 0 ? '' : _props$inputValue;\n var data = categorizedOption.data,\n isSelected = categorizedOption.isSelected,\n label = categorizedOption.label,\n value = categorizedOption.value;\n return (!shouldHideSelectedOptions(props) || !isSelected) && _filterOption(props, {\n label: label,\n value: value,\n data: data\n }, inputValue);\n}\n\nfunction getNextFocusedValue(state, nextSelectValue) {\n var focusedValue = state.focusedValue,\n lastSelectValue = state.selectValue;\n var lastFocusedIndex = lastSelectValue.indexOf(focusedValue);\n\n if (lastFocusedIndex > -1) {\n var nextFocusedIndex = nextSelectValue.indexOf(focusedValue);\n\n if (nextFocusedIndex > -1) {\n // the focused value is still in the selectValue, return it\n return focusedValue;\n } else if (lastFocusedIndex < nextSelectValue.length) {\n // the focusedValue is not present in the next selectValue array by\n // reference, so return the new value at the same index\n return nextSelectValue[lastFocusedIndex];\n }\n }\n\n return null;\n}\n\nfunction getNextFocusedOption(state, options) {\n var lastFocusedOption = state.focusedOption;\n return lastFocusedOption && options.indexOf(lastFocusedOption) > -1 ? lastFocusedOption : options[0];\n}\n\nvar getOptionLabel = function getOptionLabel(props, data) {\n return props.getOptionLabel(data);\n};\n\nvar getOptionValue = function getOptionValue(props, data) {\n return props.getOptionValue(data);\n};\n\nfunction _isOptionDisabled(props, option, selectValue) {\n return typeof props.isOptionDisabled === 'function' ? props.isOptionDisabled(option, selectValue) : false;\n}\n\nfunction _isOptionSelected(props, option, selectValue) {\n if (selectValue.indexOf(option) > -1) return true;\n\n if (typeof props.isOptionSelected === 'function') {\n return props.isOptionSelected(option, selectValue);\n }\n\n var candidate = getOptionValue(props, option);\n return selectValue.some(function (i) {\n return getOptionValue(props, i) === candidate;\n });\n}\n\nfunction _filterOption(props, option, inputValue) {\n return props.filterOption ? props.filterOption(option, inputValue) : true;\n}\n\nvar shouldHideSelectedOptions = function shouldHideSelectedOptions(props) {\n var hideSelectedOptions = props.hideSelectedOptions,\n isMulti = props.isMulti;\n if (hideSelectedOptions === undefined) return isMulti;\n return hideSelectedOptions;\n};\n\nvar instanceId = 1;\n\nvar Select = /*#__PURE__*/function (_Component) {\n _inherits(Select, _Component);\n\n var _super = _createSuper(Select);\n\n // Misc. Instance Properties\n // ------------------------------\n // TODO\n // Refs\n // ------------------------------\n // Lifecycle\n // ------------------------------\n function Select(_props) {\n var _this;\n\n _classCallCheck(this, Select);\n\n _this = _super.call(this, _props);\n _this.state = {\n ariaSelection: null,\n focusedOption: null,\n focusedValue: null,\n inputIsHidden: false,\n isFocused: false,\n selectValue: [],\n clearFocusValueOnUpdate: false,\n prevWasFocused: false,\n inputIsHiddenAfterUpdate: undefined,\n prevProps: undefined\n };\n _this.blockOptionHover = false;\n _this.isComposing = false;\n _this.commonProps = void 0;\n _this.initialTouchX = 0;\n _this.initialTouchY = 0;\n _this.instancePrefix = '';\n _this.openAfterFocus = false;\n _this.scrollToFocusedOptionOnUpdate = false;\n _this.userIsDragging = void 0;\n _this.controlRef = null;\n\n _this.getControlRef = function (ref) {\n _this.controlRef = ref;\n };\n\n _this.focusedOptionRef = null;\n\n _this.getFocusedOptionRef = function (ref) {\n _this.focusedOptionRef = ref;\n };\n\n _this.menuListRef = null;\n\n _this.getMenuListRef = function (ref) {\n _this.menuListRef = ref;\n };\n\n _this.inputRef = null;\n\n _this.getInputRef = function (ref) {\n _this.inputRef = ref;\n };\n\n _this.focus = _this.focusInput;\n _this.blur = _this.blurInput;\n\n _this.onChange = function (newValue, actionMeta) {\n var _this$props = _this.props,\n onChange = _this$props.onChange,\n name = _this$props.name;\n actionMeta.name = name;\n\n _this.ariaOnChange(newValue, actionMeta);\n\n onChange(newValue, actionMeta);\n };\n\n _this.setValue = function (newValue, action, option) {\n var _this$props2 = _this.props,\n closeMenuOnSelect = _this$props2.closeMenuOnSelect,\n isMulti = _this$props2.isMulti,\n inputValue = _this$props2.inputValue;\n\n _this.onInputChange('', {\n action: 'set-value',\n prevInputValue: inputValue\n });\n\n if (closeMenuOnSelect) {\n _this.setState({\n inputIsHiddenAfterUpdate: !isMulti\n });\n\n _this.onMenuClose();\n } // when the select value should change, we should reset focusedValue\n\n\n _this.setState({\n clearFocusValueOnUpdate: true\n });\n\n _this.onChange(newValue, {\n action: action,\n option: option\n });\n };\n\n _this.selectOption = function (newValue) {\n var _this$props3 = _this.props,\n blurInputOnSelect = _this$props3.blurInputOnSelect,\n isMulti = _this$props3.isMulti,\n name = _this$props3.name;\n var selectValue = _this.state.selectValue;\n\n var deselected = isMulti && _this.isOptionSelected(newValue, selectValue);\n\n var isDisabled = _this.isOptionDisabled(newValue, selectValue);\n\n if (deselected) {\n var candidate = _this.getOptionValue(newValue);\n\n _this.setValue(multiValueAsValue(selectValue.filter(function (i) {\n return _this.getOptionValue(i) !== candidate;\n })), 'deselect-option', newValue);\n } else if (!isDisabled) {\n // Select option if option is not disabled\n if (isMulti) {\n _this.setValue(multiValueAsValue([].concat(_toConsumableArray(selectValue), [newValue])), 'select-option', newValue);\n } else {\n _this.setValue(singleValueAsValue(newValue), 'select-option');\n }\n } else {\n _this.ariaOnChange(singleValueAsValue(newValue), {\n action: 'select-option',\n option: newValue,\n name: name\n });\n\n return;\n }\n\n if (blurInputOnSelect) {\n _this.blurInput();\n }\n };\n\n _this.removeValue = function (removedValue) {\n var isMulti = _this.props.isMulti;\n var selectValue = _this.state.selectValue;\n\n var candidate = _this.getOptionValue(removedValue);\n\n var newValueArray = selectValue.filter(function (i) {\n return _this.getOptionValue(i) !== candidate;\n });\n var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null);\n\n _this.onChange(newValue, {\n action: 'remove-value',\n removedValue: removedValue\n });\n\n _this.focusInput();\n };\n\n _this.clearValue = function () {\n var selectValue = _this.state.selectValue;\n\n _this.onChange(valueTernary(_this.props.isMulti, [], null), {\n action: 'clear',\n removedValues: selectValue\n });\n };\n\n _this.popValue = function () {\n var isMulti = _this.props.isMulti;\n var selectValue = _this.state.selectValue;\n var lastSelectedValue = selectValue[selectValue.length - 1];\n var newValueArray = selectValue.slice(0, selectValue.length - 1);\n var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null);\n\n _this.onChange(newValue, {\n action: 'pop-value',\n removedValue: lastSelectedValue\n });\n };\n\n _this.getValue = function () {\n return _this.state.selectValue;\n };\n\n _this.cx = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return classNames.apply(void 0, [_this.props.classNamePrefix].concat(args));\n };\n\n _this.getOptionLabel = function (data) {\n return getOptionLabel(_this.props, data);\n };\n\n _this.getOptionValue = function (data) {\n return getOptionValue(_this.props, data);\n };\n\n _this.getStyles = function (key, props) {\n var base = defaultStyles[key](props);\n base.boxSizing = 'border-box';\n var custom = _this.props.styles[key];\n return custom ? custom(base, props) : base;\n };\n\n _this.getElementId = function (element) {\n return \"\".concat(_this.instancePrefix, \"-\").concat(element);\n };\n\n _this.getComponents = function () {\n return defaultComponents(_this.props);\n };\n\n _this.buildCategorizedOptions = function () {\n return buildCategorizedOptions(_this.props, _this.state.selectValue);\n };\n\n _this.getCategorizedOptions = function () {\n return _this.props.menuIsOpen ? _this.buildCategorizedOptions() : [];\n };\n\n _this.buildFocusableOptions = function () {\n return buildFocusableOptionsFromCategorizedOptions(_this.buildCategorizedOptions());\n };\n\n _this.getFocusableOptions = function () {\n return _this.props.menuIsOpen ? _this.buildFocusableOptions() : [];\n };\n\n _this.ariaOnChange = function (value, actionMeta) {\n _this.setState({\n ariaSelection: _objectSpread2({\n value: value\n }, actionMeta)\n });\n };\n\n _this.onMenuMouseDown = function (event) {\n if (event.button !== 0) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n _this.focusInput();\n };\n\n _this.onMenuMouseMove = function (event) {\n _this.blockOptionHover = false;\n };\n\n _this.onControlMouseDown = function (event) {\n // Event captured by dropdown indicator\n if (event.defaultPrevented) {\n return;\n }\n\n var openMenuOnClick = _this.props.openMenuOnClick;\n\n if (!_this.state.isFocused) {\n if (openMenuOnClick) {\n _this.openAfterFocus = true;\n }\n\n _this.focusInput();\n } else if (!_this.props.menuIsOpen) {\n if (openMenuOnClick) {\n _this.openMenu('first');\n }\n } else {\n if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {\n _this.onMenuClose();\n }\n }\n\n if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {\n event.preventDefault();\n }\n };\n\n _this.onDropdownIndicatorMouseDown = function (event) {\n // ignore mouse events that weren't triggered by the primary button\n if (event && event.type === 'mousedown' && event.button !== 0) {\n return;\n }\n\n if (_this.props.isDisabled) return;\n var _this$props4 = _this.props,\n isMulti = _this$props4.isMulti,\n menuIsOpen = _this$props4.menuIsOpen;\n\n _this.focusInput();\n\n if (menuIsOpen) {\n _this.setState({\n inputIsHiddenAfterUpdate: !isMulti\n });\n\n _this.onMenuClose();\n } else {\n _this.openMenu('first');\n }\n\n event.preventDefault();\n };\n\n _this.onClearIndicatorMouseDown = function (event) {\n // ignore mouse events that weren't triggered by the primary button\n if (event && event.type === 'mousedown' && event.button !== 0) {\n return;\n }\n\n _this.clearValue();\n\n event.preventDefault();\n _this.openAfterFocus = false;\n\n if (event.type === 'touchend') {\n _this.focusInput();\n } else {\n setTimeout(function () {\n return _this.focusInput();\n });\n }\n };\n\n _this.onScroll = function (event) {\n if (typeof _this.props.closeMenuOnScroll === 'boolean') {\n if (event.target instanceof HTMLElement && isDocumentElement(event.target)) {\n _this.props.onMenuClose();\n }\n } else if (typeof _this.props.closeMenuOnScroll === 'function') {\n if (_this.props.closeMenuOnScroll(event)) {\n _this.props.onMenuClose();\n }\n }\n };\n\n _this.onCompositionStart = function () {\n _this.isComposing = true;\n };\n\n _this.onCompositionEnd = function () {\n _this.isComposing = false;\n };\n\n _this.onTouchStart = function (_ref2) {\n var touches = _ref2.touches;\n var touch = touches && touches.item(0);\n\n if (!touch) {\n return;\n }\n\n _this.initialTouchX = touch.clientX;\n _this.initialTouchY = touch.clientY;\n _this.userIsDragging = false;\n };\n\n _this.onTouchMove = function (_ref3) {\n var touches = _ref3.touches;\n var touch = touches && touches.item(0);\n\n if (!touch) {\n return;\n }\n\n var deltaX = Math.abs(touch.clientX - _this.initialTouchX);\n var deltaY = Math.abs(touch.clientY - _this.initialTouchY);\n var moveThreshold = 5;\n _this.userIsDragging = deltaX > moveThreshold || deltaY > moveThreshold;\n };\n\n _this.onTouchEnd = function (event) {\n if (_this.userIsDragging) return; // close the menu if the user taps outside\n // we're checking on event.target here instead of event.currentTarget, because we want to assert information\n // on events on child elements, not the document (which we've attached this handler to).\n\n if (_this.controlRef && !_this.controlRef.contains(event.target) && _this.menuListRef && !_this.menuListRef.contains(event.target)) {\n _this.blurInput();\n } // reset move vars\n\n\n _this.initialTouchX = 0;\n _this.initialTouchY = 0;\n };\n\n _this.onControlTouchEnd = function (event) {\n if (_this.userIsDragging) return;\n\n _this.onControlMouseDown(event);\n };\n\n _this.onClearIndicatorTouchEnd = function (event) {\n if (_this.userIsDragging) return;\n\n _this.onClearIndicatorMouseDown(event);\n };\n\n _this.onDropdownIndicatorTouchEnd = function (event) {\n if (_this.userIsDragging) return;\n\n _this.onDropdownIndicatorMouseDown(event);\n };\n\n _this.handleInputChange = function (event) {\n var prevInputValue = _this.props.inputValue;\n var inputValue = event.currentTarget.value;\n\n _this.setState({\n inputIsHiddenAfterUpdate: false\n });\n\n _this.onInputChange(inputValue, {\n action: 'input-change',\n prevInputValue: prevInputValue\n });\n\n if (!_this.props.menuIsOpen) {\n _this.onMenuOpen();\n }\n };\n\n _this.onInputFocus = function (event) {\n if (_this.props.onFocus) {\n _this.props.onFocus(event);\n }\n\n _this.setState({\n inputIsHiddenAfterUpdate: false,\n isFocused: true\n });\n\n if (_this.openAfterFocus || _this.props.openMenuOnFocus) {\n _this.openMenu('first');\n }\n\n _this.openAfterFocus = false;\n };\n\n _this.onInputBlur = function (event) {\n var prevInputValue = _this.props.inputValue;\n\n if (_this.menuListRef && _this.menuListRef.contains(document.activeElement)) {\n _this.inputRef.focus();\n\n return;\n }\n\n if (_this.props.onBlur) {\n _this.props.onBlur(event);\n }\n\n _this.onInputChange('', {\n action: 'input-blur',\n prevInputValue: prevInputValue\n });\n\n _this.onMenuClose();\n\n _this.setState({\n focusedValue: null,\n isFocused: false\n });\n };\n\n _this.onOptionHover = function (focusedOption) {\n if (_this.blockOptionHover || _this.state.focusedOption === focusedOption) {\n return;\n }\n\n _this.setState({\n focusedOption: focusedOption\n });\n };\n\n _this.shouldHideSelectedOptions = function () {\n return shouldHideSelectedOptions(_this.props);\n };\n\n _this.onKeyDown = function (event) {\n var _this$props5 = _this.props,\n isMulti = _this$props5.isMulti,\n backspaceRemovesValue = _this$props5.backspaceRemovesValue,\n escapeClearsValue = _this$props5.escapeClearsValue,\n inputValue = _this$props5.inputValue,\n isClearable = _this$props5.isClearable,\n isDisabled = _this$props5.isDisabled,\n menuIsOpen = _this$props5.menuIsOpen,\n onKeyDown = _this$props5.onKeyDown,\n tabSelectsValue = _this$props5.tabSelectsValue,\n openMenuOnFocus = _this$props5.openMenuOnFocus;\n var _this$state = _this.state,\n focusedOption = _this$state.focusedOption,\n focusedValue = _this$state.focusedValue,\n selectValue = _this$state.selectValue;\n if (isDisabled) return;\n\n if (typeof onKeyDown === 'function') {\n onKeyDown(event);\n\n if (event.defaultPrevented) {\n return;\n }\n } // Block option hover events when the user has just pressed a key\n\n\n _this.blockOptionHover = true;\n\n switch (event.key) {\n case 'ArrowLeft':\n if (!isMulti || inputValue) return;\n\n _this.focusValue('previous');\n\n break;\n\n case 'ArrowRight':\n if (!isMulti || inputValue) return;\n\n _this.focusValue('next');\n\n break;\n\n case 'Delete':\n case 'Backspace':\n if (inputValue) return;\n\n if (focusedValue) {\n _this.removeValue(focusedValue);\n } else {\n if (!backspaceRemovesValue) return;\n\n if (isMulti) {\n _this.popValue();\n } else if (isClearable) {\n _this.clearValue();\n }\n }\n\n break;\n\n case 'Tab':\n if (_this.isComposing) return;\n\n if (event.shiftKey || !menuIsOpen || !tabSelectsValue || !focusedOption || // don't capture the event if the menu opens on focus and the focused\n // option is already selected; it breaks the flow of navigation\n openMenuOnFocus && _this.isOptionSelected(focusedOption, selectValue)) {\n return;\n }\n\n _this.selectOption(focusedOption);\n\n break;\n\n case 'Enter':\n if (event.keyCode === 229) {\n // ignore the keydown event from an Input Method Editor(IME)\n // ref. https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\n break;\n }\n\n if (menuIsOpen) {\n if (!focusedOption) return;\n if (_this.isComposing) return;\n\n _this.selectOption(focusedOption);\n\n break;\n }\n\n return;\n\n case 'Escape':\n if (menuIsOpen) {\n _this.setState({\n inputIsHiddenAfterUpdate: false\n });\n\n _this.onInputChange('', {\n action: 'menu-close',\n prevInputValue: inputValue\n });\n\n _this.onMenuClose();\n } else if (isClearable && escapeClearsValue) {\n _this.clearValue();\n }\n\n break;\n\n case ' ':\n // space\n if (inputValue) {\n return;\n }\n\n if (!menuIsOpen) {\n _this.openMenu('first');\n\n break;\n }\n\n if (!focusedOption) return;\n\n _this.selectOption(focusedOption);\n\n break;\n\n case 'ArrowUp':\n if (menuIsOpen) {\n _this.focusOption('up');\n } else {\n _this.openMenu('last');\n }\n\n break;\n\n case 'ArrowDown':\n if (menuIsOpen) {\n _this.focusOption('down');\n } else {\n _this.openMenu('first');\n }\n\n break;\n\n case 'PageUp':\n if (!menuIsOpen) return;\n\n _this.focusOption('pageup');\n\n break;\n\n case 'PageDown':\n if (!menuIsOpen) return;\n\n _this.focusOption('pagedown');\n\n break;\n\n case 'Home':\n if (!menuIsOpen) return;\n\n _this.focusOption('first');\n\n break;\n\n case 'End':\n if (!menuIsOpen) return;\n\n _this.focusOption('last');\n\n break;\n\n default:\n return;\n }\n\n event.preventDefault();\n };\n\n _this.instancePrefix = 'react-select-' + (_this.props.instanceId || ++instanceId);\n _this.state.selectValue = cleanValue(_props.value);\n return _this;\n }\n\n _createClass(Select, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.startListeningComposition();\n this.startListeningToTouch();\n\n if (this.props.closeMenuOnScroll && document && document.addEventListener) {\n // Listen to all scroll events, and filter them out inside of 'onScroll'\n document.addEventListener('scroll', this.onScroll, true);\n }\n\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this$props6 = this.props,\n isDisabled = _this$props6.isDisabled,\n menuIsOpen = _this$props6.menuIsOpen;\n var isFocused = this.state.isFocused;\n\n if ( // ensure focus is restored correctly when the control becomes enabled\n isFocused && !isDisabled && prevProps.isDisabled || // ensure focus is on the Input when the menu opens\n isFocused && menuIsOpen && !prevProps.menuIsOpen) {\n this.focusInput();\n }\n\n if (isFocused && isDisabled && !prevProps.isDisabled) {\n // ensure select state gets blurred in case Select is programmatically disabled while focused\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n isFocused: false\n }, this.onMenuClose);\n } // scroll the focused option into view if necessary\n\n\n if (this.menuListRef && this.focusedOptionRef && this.scrollToFocusedOptionOnUpdate) {\n scrollIntoView(this.menuListRef, this.focusedOptionRef);\n this.scrollToFocusedOptionOnUpdate = false;\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.stopListeningComposition();\n this.stopListeningToTouch();\n document.removeEventListener('scroll', this.onScroll, true);\n } // ==============================\n // Consumer Handlers\n // ==============================\n\n }, {\n key: \"onMenuOpen\",\n value: function onMenuOpen() {\n this.props.onMenuOpen();\n }\n }, {\n key: \"onMenuClose\",\n value: function onMenuClose() {\n this.onInputChange('', {\n action: 'menu-close',\n prevInputValue: this.props.inputValue\n });\n this.props.onMenuClose();\n }\n }, {\n key: \"onInputChange\",\n value: function onInputChange(newValue, actionMeta) {\n this.props.onInputChange(newValue, actionMeta);\n } // ==============================\n // Methods\n // ==============================\n\n }, {\n key: \"focusInput\",\n value: function focusInput() {\n if (!this.inputRef) return;\n this.inputRef.focus();\n }\n }, {\n key: \"blurInput\",\n value: function blurInput() {\n if (!this.inputRef) return;\n this.inputRef.blur();\n } // aliased for consumers\n\n }, {\n key: \"openMenu\",\n value: function openMenu(focusOption) {\n var _this2 = this;\n\n var _this$state2 = this.state,\n selectValue = _this$state2.selectValue,\n isFocused = _this$state2.isFocused;\n var focusableOptions = this.buildFocusableOptions();\n var openAtIndex = focusOption === 'first' ? 0 : focusableOptions.length - 1;\n\n if (!this.props.isMulti) {\n var selectedIndex = focusableOptions.indexOf(selectValue[0]);\n\n if (selectedIndex > -1) {\n openAtIndex = selectedIndex;\n }\n } // only scroll if the menu isn't already open\n\n\n this.scrollToFocusedOptionOnUpdate = !(isFocused && this.menuListRef);\n this.setState({\n inputIsHiddenAfterUpdate: false,\n focusedValue: null,\n focusedOption: focusableOptions[openAtIndex]\n }, function () {\n return _this2.onMenuOpen();\n });\n }\n }, {\n key: \"focusValue\",\n value: function focusValue(direction) {\n var _this$state3 = this.state,\n selectValue = _this$state3.selectValue,\n focusedValue = _this$state3.focusedValue; // Only multiselects support value focusing\n\n if (!this.props.isMulti) return;\n this.setState({\n focusedOption: null\n });\n var focusedIndex = selectValue.indexOf(focusedValue);\n\n if (!focusedValue) {\n focusedIndex = -1;\n }\n\n var lastIndex = selectValue.length - 1;\n var nextFocus = -1;\n if (!selectValue.length) return;\n\n switch (direction) {\n case 'previous':\n if (focusedIndex === 0) {\n // don't cycle from the start to the end\n nextFocus = 0;\n } else if (focusedIndex === -1) {\n // if nothing is focused, focus the last value first\n nextFocus = lastIndex;\n } else {\n nextFocus = focusedIndex - 1;\n }\n\n break;\n\n case 'next':\n if (focusedIndex > -1 && focusedIndex < lastIndex) {\n nextFocus = focusedIndex + 1;\n }\n\n break;\n }\n\n this.setState({\n inputIsHidden: nextFocus !== -1,\n focusedValue: selectValue[nextFocus]\n });\n }\n }, {\n key: \"focusOption\",\n value: function focusOption() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';\n var pageSize = this.props.pageSize;\n var focusedOption = this.state.focusedOption;\n var options = this.getFocusableOptions();\n if (!options.length) return;\n var nextFocus = 0; // handles 'first'\n\n var focusedIndex = options.indexOf(focusedOption);\n\n if (!focusedOption) {\n focusedIndex = -1;\n }\n\n if (direction === 'up') {\n nextFocus = focusedIndex > 0 ? focusedIndex - 1 : options.length - 1;\n } else if (direction === 'down') {\n nextFocus = (focusedIndex + 1) % options.length;\n } else if (direction === 'pageup') {\n nextFocus = focusedIndex - pageSize;\n if (nextFocus < 0) nextFocus = 0;\n } else if (direction === 'pagedown') {\n nextFocus = focusedIndex + pageSize;\n if (nextFocus > options.length - 1) nextFocus = options.length - 1;\n } else if (direction === 'last') {\n nextFocus = options.length - 1;\n }\n\n this.scrollToFocusedOptionOnUpdate = true;\n this.setState({\n focusedOption: options[nextFocus],\n focusedValue: null\n });\n }\n }, {\n key: \"getTheme\",\n value: // ==============================\n // Getters\n // ==============================\n function getTheme() {\n // Use the default theme if there are no customizations.\n if (!this.props.theme) {\n return defaultTheme;\n } // If the theme prop is a function, assume the function\n // knows how to merge the passed-in default theme with\n // its own modifications.\n\n\n if (typeof this.props.theme === 'function') {\n return this.props.theme(defaultTheme);\n } // Otherwise, if a plain theme object was passed in,\n // overlay it with the default theme.\n\n\n return _objectSpread2(_objectSpread2({}, defaultTheme), this.props.theme);\n }\n }, {\n key: \"getCommonProps\",\n value: function getCommonProps() {\n var clearValue = this.clearValue,\n cx = this.cx,\n getStyles = this.getStyles,\n getValue = this.getValue,\n selectOption = this.selectOption,\n setValue = this.setValue,\n props = this.props;\n var isMulti = props.isMulti,\n isRtl = props.isRtl,\n options = props.options;\n var hasValue = this.hasValue();\n return {\n clearValue: clearValue,\n cx: cx,\n getStyles: getStyles,\n getValue: getValue,\n hasValue: hasValue,\n isMulti: isMulti,\n isRtl: isRtl,\n options: options,\n selectOption: selectOption,\n selectProps: props,\n setValue: setValue,\n theme: this.getTheme()\n };\n }\n }, {\n key: \"hasValue\",\n value: function hasValue() {\n var selectValue = this.state.selectValue;\n return selectValue.length > 0;\n }\n }, {\n key: \"hasOptions\",\n value: function hasOptions() {\n return !!this.getFocusableOptions().length;\n }\n }, {\n key: \"isClearable\",\n value: function isClearable() {\n var _this$props7 = this.props,\n isClearable = _this$props7.isClearable,\n isMulti = _this$props7.isMulti; // single select, by default, IS NOT clearable\n // multi select, by default, IS clearable\n\n if (isClearable === undefined) return isMulti;\n return isClearable;\n }\n }, {\n key: \"isOptionDisabled\",\n value: function isOptionDisabled(option, selectValue) {\n return _isOptionDisabled(this.props, option, selectValue);\n }\n }, {\n key: \"isOptionSelected\",\n value: function isOptionSelected(option, selectValue) {\n return _isOptionSelected(this.props, option, selectValue);\n }\n }, {\n key: \"filterOption\",\n value: function filterOption(option, inputValue) {\n return _filterOption(this.props, option, inputValue);\n }\n }, {\n key: \"formatOptionLabel\",\n value: function formatOptionLabel(data, context) {\n if (typeof this.props.formatOptionLabel === 'function') {\n var _inputValue = this.props.inputValue;\n var _selectValue = this.state.selectValue;\n return this.props.formatOptionLabel(data, {\n context: context,\n inputValue: _inputValue,\n selectValue: _selectValue\n });\n } else {\n return this.getOptionLabel(data);\n }\n }\n }, {\n key: \"formatGroupLabel\",\n value: function formatGroupLabel(data) {\n return this.props.formatGroupLabel(data);\n } // ==============================\n // Mouse Handlers\n // ==============================\n\n }, {\n key: \"startListeningComposition\",\n value: // ==============================\n // Composition Handlers\n // ==============================\n function startListeningComposition() {\n if (document && document.addEventListener) {\n document.addEventListener('compositionstart', this.onCompositionStart, false);\n document.addEventListener('compositionend', this.onCompositionEnd, false);\n }\n }\n }, {\n key: \"stopListeningComposition\",\n value: function stopListeningComposition() {\n if (document && document.removeEventListener) {\n document.removeEventListener('compositionstart', this.onCompositionStart);\n document.removeEventListener('compositionend', this.onCompositionEnd);\n }\n }\n }, {\n key: \"startListeningToTouch\",\n value: // ==============================\n // Touch Handlers\n // ==============================\n function startListeningToTouch() {\n if (document && document.addEventListener) {\n document.addEventListener('touchstart', this.onTouchStart, false);\n document.addEventListener('touchmove', this.onTouchMove, false);\n document.addEventListener('touchend', this.onTouchEnd, false);\n }\n }\n }, {\n key: \"stopListeningToTouch\",\n value: function stopListeningToTouch() {\n if (document && document.removeEventListener) {\n document.removeEventListener('touchstart', this.onTouchStart);\n document.removeEventListener('touchmove', this.onTouchMove);\n document.removeEventListener('touchend', this.onTouchEnd);\n }\n }\n }, {\n key: \"renderInput\",\n value: // ==============================\n // Renderers\n // ==============================\n function renderInput() {\n var _this$props8 = this.props,\n isDisabled = _this$props8.isDisabled,\n isSearchable = _this$props8.isSearchable,\n inputId = _this$props8.inputId,\n inputValue = _this$props8.inputValue,\n tabIndex = _this$props8.tabIndex,\n form = _this$props8.form,\n menuIsOpen = _this$props8.menuIsOpen;\n\n var _this$getComponents = this.getComponents(),\n Input = _this$getComponents.Input;\n\n var _this$state4 = this.state,\n inputIsHidden = _this$state4.inputIsHidden,\n ariaSelection = _this$state4.ariaSelection;\n var commonProps = this.commonProps;\n var id = inputId || this.getElementId('input'); // aria attributes makes the JSX \"noisy\", separated for clarity\n\n var ariaAttributes = _objectSpread2(_objectSpread2(_objectSpread2({\n 'aria-autocomplete': 'list',\n 'aria-expanded': menuIsOpen,\n 'aria-haspopup': true,\n 'aria-errormessage': this.props['aria-errormessage'],\n 'aria-invalid': this.props['aria-invalid'],\n 'aria-label': this.props['aria-label'],\n 'aria-labelledby': this.props['aria-labelledby'],\n role: 'combobox'\n }, menuIsOpen && {\n 'aria-controls': this.getElementId('listbox'),\n 'aria-owns': this.getElementId('listbox')\n }), !isSearchable && {\n 'aria-readonly': true\n }), this.hasValue() ? (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus' && {\n 'aria-describedby': this.getElementId('live-region')\n } : {\n 'aria-describedby': this.getElementId('placeholder')\n });\n\n if (!isSearchable) {\n // use a dummy input to maintain focus/blur functionality\n return /*#__PURE__*/React.createElement(DummyInput, _extends({\n id: id,\n innerRef: this.getInputRef,\n onBlur: this.onInputBlur,\n onChange: noop,\n onFocus: this.onInputFocus,\n disabled: isDisabled,\n tabIndex: tabIndex,\n inputMode: \"none\",\n form: form,\n value: \"\"\n }, ariaAttributes));\n }\n\n return /*#__PURE__*/React.createElement(Input, _extends({}, commonProps, {\n autoCapitalize: \"none\",\n autoComplete: \"off\",\n autoCorrect: \"off\",\n id: id,\n innerRef: this.getInputRef,\n isDisabled: isDisabled,\n isHidden: inputIsHidden,\n onBlur: this.onInputBlur,\n onChange: this.handleInputChange,\n onFocus: this.onInputFocus,\n spellCheck: \"false\",\n tabIndex: tabIndex,\n form: form,\n type: \"text\",\n value: inputValue\n }, ariaAttributes));\n }\n }, {\n key: \"renderPlaceholderOrValue\",\n value: function renderPlaceholderOrValue() {\n var _this3 = this;\n\n var _this$getComponents2 = this.getComponents(),\n MultiValue = _this$getComponents2.MultiValue,\n MultiValueContainer = _this$getComponents2.MultiValueContainer,\n MultiValueLabel = _this$getComponents2.MultiValueLabel,\n MultiValueRemove = _this$getComponents2.MultiValueRemove,\n SingleValue = _this$getComponents2.SingleValue,\n Placeholder = _this$getComponents2.Placeholder;\n\n var commonProps = this.commonProps;\n var _this$props9 = this.props,\n controlShouldRenderValue = _this$props9.controlShouldRenderValue,\n isDisabled = _this$props9.isDisabled,\n isMulti = _this$props9.isMulti,\n inputValue = _this$props9.inputValue,\n placeholder = _this$props9.placeholder;\n var _this$state5 = this.state,\n selectValue = _this$state5.selectValue,\n focusedValue = _this$state5.focusedValue,\n isFocused = _this$state5.isFocused;\n\n if (!this.hasValue() || !controlShouldRenderValue) {\n return inputValue ? null : /*#__PURE__*/React.createElement(Placeholder, _extends({}, commonProps, {\n key: \"placeholder\",\n isDisabled: isDisabled,\n isFocused: isFocused,\n innerProps: {\n id: this.getElementId('placeholder')\n }\n }), placeholder);\n }\n\n if (isMulti) {\n return selectValue.map(function (opt, index) {\n var isOptionFocused = opt === focusedValue;\n var key = \"\".concat(_this3.getOptionLabel(opt), \"-\").concat(_this3.getOptionValue(opt));\n return /*#__PURE__*/React.createElement(MultiValue, _extends({}, commonProps, {\n components: {\n Container: MultiValueContainer,\n Label: MultiValueLabel,\n Remove: MultiValueRemove\n },\n isFocused: isOptionFocused,\n isDisabled: isDisabled,\n key: key,\n index: index,\n removeProps: {\n onClick: function onClick() {\n return _this3.removeValue(opt);\n },\n onTouchEnd: function onTouchEnd() {\n return _this3.removeValue(opt);\n },\n onMouseDown: function onMouseDown(e) {\n e.preventDefault();\n }\n },\n data: opt\n }), _this3.formatOptionLabel(opt, 'value'));\n });\n }\n\n if (inputValue) {\n return null;\n }\n\n var singleValue = selectValue[0];\n return /*#__PURE__*/React.createElement(SingleValue, _extends({}, commonProps, {\n data: singleValue,\n isDisabled: isDisabled\n }), this.formatOptionLabel(singleValue, 'value'));\n }\n }, {\n key: \"renderClearIndicator\",\n value: function renderClearIndicator() {\n var _this$getComponents3 = this.getComponents(),\n ClearIndicator = _this$getComponents3.ClearIndicator;\n\n var commonProps = this.commonProps;\n var _this$props10 = this.props,\n isDisabled = _this$props10.isDisabled,\n isLoading = _this$props10.isLoading;\n var isFocused = this.state.isFocused;\n\n if (!this.isClearable() || !ClearIndicator || isDisabled || !this.hasValue() || isLoading) {\n return null;\n }\n\n var innerProps = {\n onMouseDown: this.onClearIndicatorMouseDown,\n onTouchEnd: this.onClearIndicatorTouchEnd,\n 'aria-hidden': 'true'\n };\n return /*#__PURE__*/React.createElement(ClearIndicator, _extends({}, commonProps, {\n innerProps: innerProps,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderLoadingIndicator\",\n value: function renderLoadingIndicator() {\n var _this$getComponents4 = this.getComponents(),\n LoadingIndicator = _this$getComponents4.LoadingIndicator;\n\n var commonProps = this.commonProps;\n var _this$props11 = this.props,\n isDisabled = _this$props11.isDisabled,\n isLoading = _this$props11.isLoading;\n var isFocused = this.state.isFocused;\n if (!LoadingIndicator || !isLoading) return null;\n var innerProps = {\n 'aria-hidden': 'true'\n };\n return /*#__PURE__*/React.createElement(LoadingIndicator, _extends({}, commonProps, {\n innerProps: innerProps,\n isDisabled: isDisabled,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderIndicatorSeparator\",\n value: function renderIndicatorSeparator() {\n var _this$getComponents5 = this.getComponents(),\n DropdownIndicator = _this$getComponents5.DropdownIndicator,\n IndicatorSeparator = _this$getComponents5.IndicatorSeparator; // separator doesn't make sense without the dropdown indicator\n\n\n if (!DropdownIndicator || !IndicatorSeparator) return null;\n var commonProps = this.commonProps;\n var isDisabled = this.props.isDisabled;\n var isFocused = this.state.isFocused;\n return /*#__PURE__*/React.createElement(IndicatorSeparator, _extends({}, commonProps, {\n isDisabled: isDisabled,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderDropdownIndicator\",\n value: function renderDropdownIndicator() {\n var _this$getComponents6 = this.getComponents(),\n DropdownIndicator = _this$getComponents6.DropdownIndicator;\n\n if (!DropdownIndicator) return null;\n var commonProps = this.commonProps;\n var isDisabled = this.props.isDisabled;\n var isFocused = this.state.isFocused;\n var innerProps = {\n onMouseDown: this.onDropdownIndicatorMouseDown,\n onTouchEnd: this.onDropdownIndicatorTouchEnd,\n 'aria-hidden': 'true'\n };\n return /*#__PURE__*/React.createElement(DropdownIndicator, _extends({}, commonProps, {\n innerProps: innerProps,\n isDisabled: isDisabled,\n isFocused: isFocused\n }));\n }\n }, {\n key: \"renderMenu\",\n value: function renderMenu() {\n var _this4 = this;\n\n var _this$getComponents7 = this.getComponents(),\n Group = _this$getComponents7.Group,\n GroupHeading = _this$getComponents7.GroupHeading,\n Menu = _this$getComponents7.Menu,\n MenuList = _this$getComponents7.MenuList,\n MenuPortal = _this$getComponents7.MenuPortal,\n LoadingMessage = _this$getComponents7.LoadingMessage,\n NoOptionsMessage = _this$getComponents7.NoOptionsMessage,\n Option = _this$getComponents7.Option;\n\n var commonProps = this.commonProps;\n var focusedOption = this.state.focusedOption;\n var _this$props12 = this.props,\n captureMenuScroll = _this$props12.captureMenuScroll,\n inputValue = _this$props12.inputValue,\n isLoading = _this$props12.isLoading,\n loadingMessage = _this$props12.loadingMessage,\n minMenuHeight = _this$props12.minMenuHeight,\n maxMenuHeight = _this$props12.maxMenuHeight,\n menuIsOpen = _this$props12.menuIsOpen,\n menuPlacement = _this$props12.menuPlacement,\n menuPosition = _this$props12.menuPosition,\n menuPortalTarget = _this$props12.menuPortalTarget,\n menuShouldBlockScroll = _this$props12.menuShouldBlockScroll,\n menuShouldScrollIntoView = _this$props12.menuShouldScrollIntoView,\n noOptionsMessage = _this$props12.noOptionsMessage,\n onMenuScrollToTop = _this$props12.onMenuScrollToTop,\n onMenuScrollToBottom = _this$props12.onMenuScrollToBottom;\n if (!menuIsOpen) return null; // TODO: Internal Option Type here\n\n var render = function render(props, id) {\n var type = props.type,\n data = props.data,\n isDisabled = props.isDisabled,\n isSelected = props.isSelected,\n label = props.label,\n value = props.value;\n var isFocused = focusedOption === data;\n var onHover = isDisabled ? undefined : function () {\n return _this4.onOptionHover(data);\n };\n var onSelect = isDisabled ? undefined : function () {\n return _this4.selectOption(data);\n };\n var optionId = \"\".concat(_this4.getElementId('option'), \"-\").concat(id);\n var innerProps = {\n id: optionId,\n onClick: onSelect,\n onMouseMove: onHover,\n onMouseOver: onHover,\n tabIndex: -1\n };\n return /*#__PURE__*/React.createElement(Option, _extends({}, commonProps, {\n innerProps: innerProps,\n data: data,\n isDisabled: isDisabled,\n isSelected: isSelected,\n key: optionId,\n label: label,\n type: type,\n value: value,\n isFocused: isFocused,\n innerRef: isFocused ? _this4.getFocusedOptionRef : undefined\n }), _this4.formatOptionLabel(props.data, 'menu'));\n };\n\n var menuUI;\n\n if (this.hasOptions()) {\n menuUI = this.getCategorizedOptions().map(function (item) {\n if (item.type === 'group') {\n var _data = item.data,\n options = item.options,\n groupIndex = item.index;\n var groupId = \"\".concat(_this4.getElementId('group'), \"-\").concat(groupIndex);\n var headingId = \"\".concat(groupId, \"-heading\");\n return /*#__PURE__*/React.createElement(Group, _extends({}, commonProps, {\n key: groupId,\n data: _data,\n options: options,\n Heading: GroupHeading,\n headingProps: {\n id: headingId,\n data: item.data\n },\n label: _this4.formatGroupLabel(item.data)\n }), item.options.map(function (option) {\n return render(option, \"\".concat(groupIndex, \"-\").concat(option.index));\n }));\n } else if (item.type === 'option') {\n return render(item, \"\".concat(item.index));\n }\n });\n } else if (isLoading) {\n var message = loadingMessage({\n inputValue: inputValue\n });\n if (message === null) return null;\n menuUI = /*#__PURE__*/React.createElement(LoadingMessage, commonProps, message);\n } else {\n var _message = noOptionsMessage({\n inputValue: inputValue\n });\n\n if (_message === null) return null;\n menuUI = /*#__PURE__*/React.createElement(NoOptionsMessage, commonProps, _message);\n }\n\n var menuPlacementProps = {\n minMenuHeight: minMenuHeight,\n maxMenuHeight: maxMenuHeight,\n menuPlacement: menuPlacement,\n menuPosition: menuPosition,\n menuShouldScrollIntoView: menuShouldScrollIntoView\n };\n var menuElement = /*#__PURE__*/React.createElement(MenuPlacer, _extends({}, commonProps, menuPlacementProps), function (_ref4) {\n var ref = _ref4.ref,\n _ref4$placerProps = _ref4.placerProps,\n placement = _ref4$placerProps.placement,\n maxHeight = _ref4$placerProps.maxHeight;\n return /*#__PURE__*/React.createElement(Menu, _extends({}, commonProps, menuPlacementProps, {\n innerRef: ref,\n innerProps: {\n onMouseDown: _this4.onMenuMouseDown,\n onMouseMove: _this4.onMenuMouseMove,\n id: _this4.getElementId('listbox')\n },\n isLoading: isLoading,\n placement: placement\n }), /*#__PURE__*/React.createElement(ScrollManager, {\n captureEnabled: captureMenuScroll,\n onTopArrive: onMenuScrollToTop,\n onBottomArrive: onMenuScrollToBottom,\n lockEnabled: menuShouldBlockScroll\n }, function (scrollTargetRef) {\n return /*#__PURE__*/React.createElement(MenuList, _extends({}, commonProps, {\n innerRef: function innerRef(instance) {\n _this4.getMenuListRef(instance);\n\n scrollTargetRef(instance);\n },\n isLoading: isLoading,\n maxHeight: maxHeight,\n focusedOption: focusedOption\n }), menuUI);\n }));\n }); // positioning behaviour is almost identical for portalled and fixed,\n // so we use the same component. the actual portalling logic is forked\n // within the component based on `menuPosition`\n\n return menuPortalTarget || menuPosition === 'fixed' ? /*#__PURE__*/React.createElement(MenuPortal, _extends({}, commonProps, {\n appendTo: menuPortalTarget,\n controlElement: this.controlRef,\n menuPlacement: menuPlacement,\n menuPosition: menuPosition\n }), menuElement) : menuElement;\n }\n }, {\n key: \"renderFormField\",\n value: function renderFormField() {\n var _this5 = this;\n\n var _this$props13 = this.props,\n delimiter = _this$props13.delimiter,\n isDisabled = _this$props13.isDisabled,\n isMulti = _this$props13.isMulti,\n name = _this$props13.name;\n var selectValue = this.state.selectValue;\n if (!name || isDisabled) return;\n\n if (isMulti) {\n if (delimiter) {\n var value = selectValue.map(function (opt) {\n return _this5.getOptionValue(opt);\n }).join(delimiter);\n return /*#__PURE__*/React.createElement(\"input\", {\n name: name,\n type: \"hidden\",\n value: value\n });\n } else {\n var input = selectValue.length > 0 ? selectValue.map(function (opt, i) {\n return /*#__PURE__*/React.createElement(\"input\", {\n key: \"i-\".concat(i),\n name: name,\n type: \"hidden\",\n value: _this5.getOptionValue(opt)\n });\n }) : /*#__PURE__*/React.createElement(\"input\", {\n name: name,\n type: \"hidden\"\n });\n return /*#__PURE__*/React.createElement(\"div\", null, input);\n }\n } else {\n var _value = selectValue[0] ? this.getOptionValue(selectValue[0]) : '';\n\n return /*#__PURE__*/React.createElement(\"input\", {\n name: name,\n type: \"hidden\",\n value: _value\n });\n }\n }\n }, {\n key: \"renderLiveRegion\",\n value: function renderLiveRegion() {\n var commonProps = this.commonProps;\n var _this$state6 = this.state,\n ariaSelection = _this$state6.ariaSelection,\n focusedOption = _this$state6.focusedOption,\n focusedValue = _this$state6.focusedValue,\n isFocused = _this$state6.isFocused,\n selectValue = _this$state6.selectValue;\n var focusableOptions = this.getFocusableOptions();\n return /*#__PURE__*/React.createElement(LiveRegion, _extends({}, commonProps, {\n id: this.getElementId('live-region'),\n ariaSelection: ariaSelection,\n focusedOption: focusedOption,\n focusedValue: focusedValue,\n isFocused: isFocused,\n selectValue: selectValue,\n focusableOptions: focusableOptions\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$getComponents8 = this.getComponents(),\n Control = _this$getComponents8.Control,\n IndicatorsContainer = _this$getComponents8.IndicatorsContainer,\n SelectContainer = _this$getComponents8.SelectContainer,\n ValueContainer = _this$getComponents8.ValueContainer;\n\n var _this$props14 = this.props,\n className = _this$props14.className,\n id = _this$props14.id,\n isDisabled = _this$props14.isDisabled,\n menuIsOpen = _this$props14.menuIsOpen;\n var isFocused = this.state.isFocused;\n var commonProps = this.commonProps = this.getCommonProps();\n return /*#__PURE__*/React.createElement(SelectContainer, _extends({}, commonProps, {\n className: className,\n innerProps: {\n id: id,\n onKeyDown: this.onKeyDown\n },\n isDisabled: isDisabled,\n isFocused: isFocused\n }), this.renderLiveRegion(), /*#__PURE__*/React.createElement(Control, _extends({}, commonProps, {\n innerRef: this.getControlRef,\n innerProps: {\n onMouseDown: this.onControlMouseDown,\n onTouchEnd: this.onControlTouchEnd\n },\n isDisabled: isDisabled,\n isFocused: isFocused,\n menuIsOpen: menuIsOpen\n }), /*#__PURE__*/React.createElement(ValueContainer, _extends({}, commonProps, {\n isDisabled: isDisabled\n }), this.renderPlaceholderOrValue(), this.renderInput()), /*#__PURE__*/React.createElement(IndicatorsContainer, _extends({}, commonProps, {\n isDisabled: isDisabled\n }), this.renderClearIndicator(), this.renderLoadingIndicator(), this.renderIndicatorSeparator(), this.renderDropdownIndicator())), this.renderMenu(), this.renderFormField());\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, state) {\n var prevProps = state.prevProps,\n clearFocusValueOnUpdate = state.clearFocusValueOnUpdate,\n inputIsHiddenAfterUpdate = state.inputIsHiddenAfterUpdate,\n ariaSelection = state.ariaSelection,\n isFocused = state.isFocused,\n prevWasFocused = state.prevWasFocused;\n var options = props.options,\n value = props.value,\n menuIsOpen = props.menuIsOpen,\n inputValue = props.inputValue,\n isMulti = props.isMulti;\n var selectValue = cleanValue(value);\n var newMenuOptionsState = {};\n\n if (prevProps && (value !== prevProps.value || options !== prevProps.options || menuIsOpen !== prevProps.menuIsOpen || inputValue !== prevProps.inputValue)) {\n var focusableOptions = menuIsOpen ? buildFocusableOptions(props, selectValue) : [];\n var focusedValue = clearFocusValueOnUpdate ? getNextFocusedValue(state, selectValue) : null;\n var focusedOption = getNextFocusedOption(state, focusableOptions);\n newMenuOptionsState = {\n selectValue: selectValue,\n focusedOption: focusedOption,\n focusedValue: focusedValue,\n clearFocusValueOnUpdate: false\n };\n } // some updates should toggle the state of the input visibility\n\n\n var newInputIsHiddenState = inputIsHiddenAfterUpdate != null && props !== prevProps ? {\n inputIsHidden: inputIsHiddenAfterUpdate,\n inputIsHiddenAfterUpdate: undefined\n } : {};\n var newAriaSelection = ariaSelection;\n var hasKeptFocus = isFocused && prevWasFocused;\n\n if (isFocused && !hasKeptFocus) {\n // If `value` or `defaultValue` props are not empty then announce them\n // when the Select is initially focused\n newAriaSelection = {\n value: valueTernary(isMulti, selectValue, selectValue[0] || null),\n options: selectValue,\n action: 'initial-input-focus'\n };\n hasKeptFocus = !prevWasFocused;\n } // If the 'initial-input-focus' action has been set already\n // then reset the ariaSelection to null\n\n\n if ((ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus') {\n newAriaSelection = null;\n }\n\n return _objectSpread2(_objectSpread2(_objectSpread2({}, newMenuOptionsState), newInputIsHiddenState), {}, {\n prevProps: props,\n ariaSelection: newAriaSelection,\n prevWasFocused: hasKeptFocus\n });\n }\n }]);\n\n return Select;\n}(Component);\n\nSelect.defaultProps = defaultProps;\n\nexport { Select as S, getOptionLabel$1 as a, defaultProps as b, createFilter as c, defaultTheme as d, getOptionValue$1 as g, mergeStyles as m };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { jsx, keyframes, css as css$2, ClassNames } from '@emotion/react';\nimport _taggedTemplateLiteral from '@babel/runtime/helpers/esm/taggedTemplateLiteral';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _defineProperty$1 from '@babel/runtime/helpers/esm/defineProperty';\nimport { Component, createContext } from 'react';\nimport { createPortal } from 'react-dom';\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nvar _excluded$3 = [\"className\", \"clearValue\", \"cx\", \"getStyles\", \"getValue\", \"hasValue\", \"isMulti\", \"isRtl\", \"options\", \"selectOption\", \"selectProps\", \"setValue\", \"theme\"];\n// ==============================\n// NO OP\n// ==============================\nvar noop = function noop() {};\n// Class Name Prefixer\n// ==============================\n\n/**\n String representation of component state for styling with class names.\n\n Expects an array of strings OR a string/object pair:\n - className(['comp', 'comp-arg', 'comp-arg-2'])\n @returns 'react-select__comp react-select__comp-arg react-select__comp-arg-2'\n - className('comp', { some: true, state: false })\n @returns 'react-select__comp react-select__comp--some'\n*/\n\nfunction applyPrefixToName(prefix, name) {\n if (!name) {\n return prefix;\n } else if (name[0] === '-') {\n return prefix + name;\n } else {\n return prefix + '__' + name;\n }\n}\n\nfunction classNames(prefix, state, className) {\n var arr = [className];\n\n if (state && prefix) {\n for (var key in state) {\n if (state.hasOwnProperty(key) && state[key]) {\n arr.push(\"\".concat(applyPrefixToName(prefix, key)));\n }\n }\n }\n\n return arr.filter(function (i) {\n return i;\n }).map(function (i) {\n return String(i).trim();\n }).join(' ');\n} // ==============================\n// Clean Value\n// ==============================\n\nvar cleanValue = function cleanValue(value) {\n if (isArray(value)) return value.filter(Boolean);\n if (_typeof(value) === 'object' && value !== null) return [value];\n return [];\n}; // ==============================\n// Clean Common Props\n// ==============================\n\nvar cleanCommonProps = function cleanCommonProps(props) {\n //className\n props.className;\n props.clearValue;\n props.cx;\n props.getStyles;\n props.getValue;\n props.hasValue;\n props.isMulti;\n props.isRtl;\n props.options;\n props.selectOption;\n props.selectProps;\n props.setValue;\n props.theme;\n var innerProps = _objectWithoutProperties(props, _excluded$3);\n\n return _objectSpread2({}, innerProps);\n}; // ==============================\n// Handle Input Change\n// ==============================\n\nfunction handleInputChange(inputValue, actionMeta, onInputChange) {\n if (onInputChange) {\n var _newValue = onInputChange(inputValue, actionMeta);\n\n if (typeof _newValue === 'string') return _newValue;\n }\n\n return inputValue;\n} // ==============================\n// Scroll Helpers\n// ==============================\n\nfunction isDocumentElement(el) {\n return [document.documentElement, document.body, window].indexOf(el) > -1;\n} // Normalized Scroll Top\n// ------------------------------\n\nfunction normalizedHeight(el) {\n if (isDocumentElement(el)) {\n return window.innerHeight;\n }\n\n return el.clientHeight;\n} // Normalized scrollTo & scrollTop\n// ------------------------------\n\nfunction getScrollTop(el) {\n if (isDocumentElement(el)) {\n return window.pageYOffset;\n }\n\n return el.scrollTop;\n}\nfunction scrollTo(el, top) {\n // with a scroll distance, we perform scroll on the element\n if (isDocumentElement(el)) {\n window.scrollTo(0, top);\n return;\n }\n\n el.scrollTop = top;\n} // Get Scroll Parent\n// ------------------------------\n\nfunction getScrollParent(element) {\n var style = getComputedStyle(element);\n var excludeStaticParent = style.position === 'absolute';\n var overflowRx = /(auto|scroll)/;\n if (style.position === 'fixed') return document.documentElement;\n\n for (var parent = element; parent = parent.parentElement;) {\n style = getComputedStyle(parent);\n\n if (excludeStaticParent && style.position === 'static') {\n continue;\n }\n\n if (overflowRx.test(style.overflow + style.overflowY + style.overflowX)) {\n return parent;\n }\n }\n\n return document.documentElement;\n} // Animated Scroll To\n// ------------------------------\n\n/**\n @param t: time (elapsed)\n @param b: initial value\n @param c: amount of change\n @param d: duration\n*/\n\nfunction easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n}\n\nfunction animatedScrollTo(element, to) {\n var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200;\n var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n var start = getScrollTop(element);\n var change = to - start;\n var increment = 10;\n var currentTime = 0;\n\n function animateScroll() {\n currentTime += increment;\n var val = easeOutCubic(currentTime, start, change, duration);\n scrollTo(element, val);\n\n if (currentTime < duration) {\n window.requestAnimationFrame(animateScroll);\n } else {\n callback(element);\n }\n }\n\n animateScroll();\n} // Scroll Into View\n// ------------------------------\n\nfunction scrollIntoView(menuEl, focusedEl) {\n var menuRect = menuEl.getBoundingClientRect();\n var focusedRect = focusedEl.getBoundingClientRect();\n var overScroll = focusedEl.offsetHeight / 3;\n\n if (focusedRect.bottom + overScroll > menuRect.bottom) {\n scrollTo(menuEl, Math.min(focusedEl.offsetTop + focusedEl.clientHeight - menuEl.offsetHeight + overScroll, menuEl.scrollHeight));\n } else if (focusedRect.top - overScroll < menuRect.top) {\n scrollTo(menuEl, Math.max(focusedEl.offsetTop - overScroll, 0));\n }\n} // ==============================\n// Get bounding client object\n// ==============================\n// cannot get keys using array notation with DOMRect\n\nfunction getBoundingClientObj(element) {\n var rect = element.getBoundingClientRect();\n return {\n bottom: rect.bottom,\n height: rect.height,\n left: rect.left,\n right: rect.right,\n top: rect.top,\n width: rect.width\n };\n}\n// Touch Capability Detector\n// ==============================\n\nfunction isTouchCapable() {\n try {\n document.createEvent('TouchEvent');\n return true;\n } catch (e) {\n return false;\n }\n} // ==============================\n// Mobile Device Detector\n// ==============================\n\nfunction isMobileDevice() {\n try {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n } catch (e) {\n return false;\n }\n} // ==============================\n// Passive Event Detector\n// ==============================\n// https://github.com/rafgraph/detect-it/blob/main/src/index.ts#L19-L36\n\nvar passiveOptionAccessed = false;\nvar options = {\n get passive() {\n return passiveOptionAccessed = true;\n }\n\n}; // check for SSR\n\nvar w = typeof window !== 'undefined' ? window : {};\n\nif (w.addEventListener && w.removeEventListener) {\n w.addEventListener('p', noop, options);\n w.removeEventListener('p', noop, false);\n}\n\nvar supportsPassiveEvents = passiveOptionAccessed;\nfunction notNullish(item) {\n return item != null;\n}\nfunction isArray(arg) {\n return Array.isArray(arg);\n}\nfunction valueTernary(isMulti, multiValue, singleValue) {\n return isMulti ? multiValue : singleValue;\n}\nfunction singleValueAsValue(singleValue) {\n return singleValue;\n}\nfunction multiValueAsValue(multiValue) {\n return multiValue;\n}\nvar removeProps = function removeProps(propsObj) {\n for (var _len = arguments.length, properties = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n properties[_key - 1] = arguments[_key];\n }\n\n var propsMap = Object.entries(propsObj).filter(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n key = _ref2[0];\n\n return !properties.includes(key);\n });\n return propsMap.reduce(function (newProps, _ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n key = _ref4[0],\n val = _ref4[1];\n\n newProps[key] = val;\n return newProps;\n }, {});\n};\n\nfunction getMenuPlacement(_ref) {\n var maxHeight = _ref.maxHeight,\n menuEl = _ref.menuEl,\n minHeight = _ref.minHeight,\n placement = _ref.placement,\n shouldScroll = _ref.shouldScroll,\n isFixedPosition = _ref.isFixedPosition,\n theme = _ref.theme;\n var spacing = theme.spacing;\n var scrollParent = getScrollParent(menuEl);\n var defaultState = {\n placement: 'bottom',\n maxHeight: maxHeight\n }; // something went wrong, return default state\n\n if (!menuEl || !menuEl.offsetParent) return defaultState; // we can't trust `scrollParent.scrollHeight` --> it may increase when\n // the menu is rendered\n\n var _scrollParent$getBoun = scrollParent.getBoundingClientRect(),\n scrollHeight = _scrollParent$getBoun.height;\n\n var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(),\n menuBottom = _menuEl$getBoundingCl.bottom,\n menuHeight = _menuEl$getBoundingCl.height,\n menuTop = _menuEl$getBoundingCl.top;\n\n var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(),\n containerTop = _menuEl$offsetParent$.top;\n\n var viewHeight = isFixedPosition ? window.innerHeight : normalizedHeight(scrollParent);\n var scrollTop = getScrollTop(scrollParent);\n var marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10);\n var marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10);\n var viewSpaceAbove = containerTop - marginTop;\n var viewSpaceBelow = viewHeight - menuTop;\n var scrollSpaceAbove = viewSpaceAbove + scrollTop;\n var scrollSpaceBelow = scrollHeight - scrollTop - menuTop;\n var scrollDown = menuBottom - viewHeight + scrollTop + marginBottom;\n var scrollUp = scrollTop + menuTop - marginTop;\n var scrollDuration = 160;\n\n switch (placement) {\n case 'auto':\n case 'bottom':\n // 1: the menu will fit, do nothing\n if (viewSpaceBelow >= menuHeight) {\n return {\n placement: 'bottom',\n maxHeight: maxHeight\n };\n } // 2: the menu will fit, if scrolled\n\n\n if (scrollSpaceBelow >= menuHeight && !isFixedPosition) {\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n }\n\n return {\n placement: 'bottom',\n maxHeight: maxHeight\n };\n } // 3: the menu will fit, if constrained\n\n\n if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) {\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n } // we want to provide as much of the menu as possible to the user,\n // so give them whatever is available below rather than the minHeight.\n\n\n var constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom;\n return {\n placement: 'bottom',\n maxHeight: constrainedHeight\n };\n } // 4. Forked beviour when there isn't enough space below\n // AUTO: flip the menu, render above\n\n\n if (placement === 'auto' || isFixedPosition) {\n // may need to be constrained after flipping\n var _constrainedHeight = maxHeight;\n var spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove;\n\n if (spaceAbove >= minHeight) {\n _constrainedHeight = Math.min(spaceAbove - marginBottom - spacing.controlHeight, maxHeight);\n }\n\n return {\n placement: 'top',\n maxHeight: _constrainedHeight\n };\n } // BOTTOM: allow browser to increase scrollable area and immediately set scroll\n\n\n if (placement === 'bottom') {\n if (shouldScroll) {\n scrollTo(scrollParent, scrollDown);\n }\n\n return {\n placement: 'bottom',\n maxHeight: maxHeight\n };\n }\n\n break;\n\n case 'top':\n // 1: the menu will fit, do nothing\n if (viewSpaceAbove >= menuHeight) {\n return {\n placement: 'top',\n maxHeight: maxHeight\n };\n } // 2: the menu will fit, if scrolled\n\n\n if (scrollSpaceAbove >= menuHeight && !isFixedPosition) {\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n }\n\n return {\n placement: 'top',\n maxHeight: maxHeight\n };\n } // 3: the menu will fit, if constrained\n\n\n if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n var _constrainedHeight2 = maxHeight; // we want to provide as much of the menu as possible to the user,\n // so give them whatever is available below rather than the minHeight.\n\n if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n _constrainedHeight2 = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop;\n }\n\n if (shouldScroll) {\n animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n }\n\n return {\n placement: 'top',\n maxHeight: _constrainedHeight2\n };\n } // 4. not enough space, the browser WILL NOT increase scrollable area when\n // absolutely positioned element rendered above the viewport (only below).\n // Flip the menu, render below\n\n\n return {\n placement: 'bottom',\n maxHeight: maxHeight\n };\n\n default:\n throw new Error(\"Invalid placement provided \\\"\".concat(placement, \"\\\".\"));\n }\n\n return defaultState;\n} // Menu Component\n// ------------------------------\n\nfunction alignToControl(placement) {\n var placementToCSSProp = {\n bottom: 'top',\n top: 'bottom'\n };\n return placement ? placementToCSSProp[placement] : 'bottom';\n}\n\nvar coercePlacement = function coercePlacement(p) {\n return p === 'auto' ? 'bottom' : p;\n};\n\nvar menuCSS = function menuCSS(_ref2) {\n var _ref3;\n\n var placement = _ref2.placement,\n _ref2$theme = _ref2.theme,\n borderRadius = _ref2$theme.borderRadius,\n spacing = _ref2$theme.spacing,\n colors = _ref2$theme.colors;\n return _ref3 = {\n label: 'menu'\n }, _defineProperty$1(_ref3, alignToControl(placement), '100%'), _defineProperty$1(_ref3, \"backgroundColor\", colors.neutral0), _defineProperty$1(_ref3, \"borderRadius\", borderRadius), _defineProperty$1(_ref3, \"boxShadow\", '0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)'), _defineProperty$1(_ref3, \"marginBottom\", spacing.menuGutter), _defineProperty$1(_ref3, \"marginTop\", spacing.menuGutter), _defineProperty$1(_ref3, \"position\", 'absolute'), _defineProperty$1(_ref3, \"width\", '100%'), _defineProperty$1(_ref3, \"zIndex\", 1), _ref3;\n};\nvar PortalPlacementContext = /*#__PURE__*/createContext({\n getPortalPlacement: null\n}); // NOTE: internal only\n\nvar MenuPlacer = /*#__PURE__*/function (_Component) {\n _inherits(MenuPlacer, _Component);\n\n var _super = _createSuper(MenuPlacer);\n\n function MenuPlacer() {\n var _this;\n\n _classCallCheck(this, MenuPlacer);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this.state = {\n maxHeight: _this.props.maxMenuHeight,\n placement: null\n };\n _this.context = void 0;\n\n _this.getPlacement = function (ref) {\n var _this$props = _this.props,\n minMenuHeight = _this$props.minMenuHeight,\n maxMenuHeight = _this$props.maxMenuHeight,\n menuPlacement = _this$props.menuPlacement,\n menuPosition = _this$props.menuPosition,\n menuShouldScrollIntoView = _this$props.menuShouldScrollIntoView,\n theme = _this$props.theme;\n if (!ref) return; // DO NOT scroll if position is fixed\n\n var isFixedPosition = menuPosition === 'fixed';\n var shouldScroll = menuShouldScrollIntoView && !isFixedPosition;\n var state = getMenuPlacement({\n maxHeight: maxMenuHeight,\n menuEl: ref,\n minHeight: minMenuHeight,\n placement: menuPlacement,\n shouldScroll: shouldScroll,\n isFixedPosition: isFixedPosition,\n theme: theme\n });\n var getPortalPlacement = _this.context.getPortalPlacement;\n if (getPortalPlacement) getPortalPlacement(state);\n\n _this.setState(state);\n };\n\n _this.getUpdatedProps = function () {\n var menuPlacement = _this.props.menuPlacement;\n var placement = _this.state.placement || coercePlacement(menuPlacement);\n return _objectSpread2(_objectSpread2({}, _this.props), {}, {\n placement: placement,\n maxHeight: _this.state.maxHeight\n });\n };\n\n return _this;\n }\n\n _createClass(MenuPlacer, [{\n key: \"render\",\n value: function render() {\n var children = this.props.children;\n return children({\n ref: this.getPlacement,\n placerProps: this.getUpdatedProps()\n });\n }\n }]);\n\n return MenuPlacer;\n}(Component);\nMenuPlacer.contextType = PortalPlacementContext;\n\nvar Menu = function Menu(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerRef = props.innerRef,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('menu', props),\n className: cx({\n menu: true\n }, className),\n ref: innerRef\n }, innerProps), children);\n};\n// Menu List\n// ==============================\n\nvar menuListCSS = function menuListCSS(_ref4) {\n var maxHeight = _ref4.maxHeight,\n baseUnit = _ref4.theme.spacing.baseUnit;\n return {\n maxHeight: maxHeight,\n overflowY: 'auto',\n paddingBottom: baseUnit,\n paddingTop: baseUnit,\n position: 'relative',\n // required for offset[Height, Top] > keyboard scroll\n WebkitOverflowScrolling: 'touch'\n };\n};\nvar MenuList = function MenuList(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps,\n innerRef = props.innerRef,\n isMulti = props.isMulti;\n return jsx(\"div\", _extends({\n css: getStyles('menuList', props),\n className: cx({\n 'menu-list': true,\n 'menu-list--is-multi': isMulti\n }, className),\n ref: innerRef\n }, innerProps), children);\n}; // ==============================\n// Menu Notices\n// ==============================\n\nvar noticeCSS = function noticeCSS(_ref5) {\n var _ref5$theme = _ref5.theme,\n baseUnit = _ref5$theme.spacing.baseUnit,\n colors = _ref5$theme.colors;\n return {\n color: colors.neutral40,\n padding: \"\".concat(baseUnit * 2, \"px \").concat(baseUnit * 3, \"px\"),\n textAlign: 'center'\n };\n};\n\nvar noOptionsMessageCSS = noticeCSS;\nvar loadingMessageCSS = noticeCSS;\nvar NoOptionsMessage = function NoOptionsMessage(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('noOptionsMessage', props),\n className: cx({\n 'menu-notice': true,\n 'menu-notice--no-options': true\n }, className)\n }, innerProps), children);\n};\nNoOptionsMessage.defaultProps = {\n children: 'No options'\n};\nvar LoadingMessage = function LoadingMessage(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('loadingMessage', props),\n className: cx({\n 'menu-notice': true,\n 'menu-notice--loading': true\n }, className)\n }, innerProps), children);\n};\nLoadingMessage.defaultProps = {\n children: 'Loading...'\n}; // ==============================\n// Menu Portal\n// ==============================\n\nvar menuPortalCSS = function menuPortalCSS(_ref6) {\n var rect = _ref6.rect,\n offset = _ref6.offset,\n position = _ref6.position;\n return {\n left: rect.left,\n position: position,\n top: offset,\n width: rect.width,\n zIndex: 1\n };\n};\nvar MenuPortal = /*#__PURE__*/function (_Component2) {\n _inherits(MenuPortal, _Component2);\n\n var _super2 = _createSuper(MenuPortal);\n\n function MenuPortal() {\n var _this2;\n\n _classCallCheck(this, MenuPortal);\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _this2 = _super2.call.apply(_super2, [this].concat(args));\n _this2.state = {\n placement: null\n };\n\n _this2.getPortalPlacement = function (_ref7) {\n var placement = _ref7.placement;\n var initialPlacement = coercePlacement(_this2.props.menuPlacement); // avoid re-renders if the placement has not changed\n\n if (placement !== initialPlacement) {\n _this2.setState({\n placement: placement\n });\n }\n };\n\n return _this2;\n }\n\n _createClass(MenuPortal, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n appendTo = _this$props2.appendTo,\n children = _this$props2.children,\n className = _this$props2.className,\n controlElement = _this$props2.controlElement,\n cx = _this$props2.cx,\n innerProps = _this$props2.innerProps,\n menuPlacement = _this$props2.menuPlacement,\n position = _this$props2.menuPosition,\n getStyles = _this$props2.getStyles;\n var isFixed = position === 'fixed'; // bail early if required elements aren't present\n\n if (!appendTo && !isFixed || !controlElement) {\n return null;\n }\n\n var placement = this.state.placement || coercePlacement(menuPlacement);\n var rect = getBoundingClientObj(controlElement);\n var scrollDistance = isFixed ? 0 : window.pageYOffset;\n var offset = rect[placement] + scrollDistance;\n var state = {\n offset: offset,\n position: position,\n rect: rect\n }; // same wrapper element whether fixed or portalled\n\n var menuWrapper = jsx(\"div\", _extends({\n css: getStyles('menuPortal', state),\n className: cx({\n 'menu-portal': true\n }, className)\n }, innerProps), children);\n return jsx(PortalPlacementContext.Provider, {\n value: {\n getPortalPlacement: this.getPortalPlacement\n }\n }, appendTo ? /*#__PURE__*/createPortal(menuWrapper, appendTo) : menuWrapper);\n }\n }]);\n\n return MenuPortal;\n}(Component);\n\nvar containerCSS = function containerCSS(_ref) {\n var isDisabled = _ref.isDisabled,\n isRtl = _ref.isRtl;\n return {\n label: 'container',\n direction: isRtl ? 'rtl' : undefined,\n pointerEvents: isDisabled ? 'none' : undefined,\n // cancel mouse events when disabled\n position: 'relative'\n };\n};\nvar SelectContainer = function SelectContainer(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps,\n isDisabled = props.isDisabled,\n isRtl = props.isRtl;\n return jsx(\"div\", _extends({\n css: getStyles('container', props),\n className: cx({\n '--is-disabled': isDisabled,\n '--is-rtl': isRtl\n }, className)\n }, innerProps), children);\n}; // ==============================\n// Value Container\n// ==============================\n\nvar valueContainerCSS = function valueContainerCSS(_ref2) {\n var spacing = _ref2.theme.spacing,\n isMulti = _ref2.isMulti,\n hasValue = _ref2.hasValue,\n controlShouldRenderValue = _ref2.selectProps.controlShouldRenderValue;\n return {\n alignItems: 'center',\n display: isMulti && hasValue && controlShouldRenderValue ? 'flex' : 'grid',\n flex: 1,\n flexWrap: 'wrap',\n padding: \"\".concat(spacing.baseUnit / 2, \"px \").concat(spacing.baseUnit * 2, \"px\"),\n WebkitOverflowScrolling: 'touch',\n position: 'relative',\n overflow: 'hidden'\n };\n};\nvar ValueContainer = function ValueContainer(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n innerProps = props.innerProps,\n isMulti = props.isMulti,\n getStyles = props.getStyles,\n hasValue = props.hasValue;\n return jsx(\"div\", _extends({\n css: getStyles('valueContainer', props),\n className: cx({\n 'value-container': true,\n 'value-container--is-multi': isMulti,\n 'value-container--has-value': hasValue\n }, className)\n }, innerProps), children);\n}; // ==============================\n// Indicator Container\n// ==============================\n\nvar indicatorsContainerCSS = function indicatorsContainerCSS() {\n return {\n alignItems: 'center',\n alignSelf: 'stretch',\n display: 'flex',\n flexShrink: 0\n };\n};\nvar IndicatorsContainer = function IndicatorsContainer(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n innerProps = props.innerProps,\n getStyles = props.getStyles;\n return jsx(\"div\", _extends({\n css: getStyles('indicatorsContainer', props),\n className: cx({\n indicators: true\n }, className)\n }, innerProps), children);\n};\n\nvar _templateObject;\n\nvar _excluded$2 = [\"size\"];\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n name: \"8mmkcg\",\n styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0\"\n} : {\n name: \"tj5bde-Svg\",\n styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0;label:Svg;\",\n map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXdCSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBTdmcgPSAoe1xuICBzaXplLFxuICAuLi5wcm9wc1xufTogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZTogbnVtYmVyIH0pID0+IChcbiAgPHN2Z1xuICAgIGhlaWdodD17c2l6ZX1cbiAgICB3aWR0aD17c2l6ZX1cbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICBjc3M9e3tcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBsaW5lSGVpZ2h0OiAxLFxuICAgICAgc3Ryb2tlOiAnY3VycmVudENvbG9yJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NJY29uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBDcm9zc0ljb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNMTQuMzQ4IDE0Ljg0OWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMGwtMi42NTEtMy4wMzAtMi42NTEgMy4wMjljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDAtMC40NjktMC40NjktMC40NjktMS4yMjkgMC0xLjY5N2wyLjc1OC0zLjE1LTIuNzU5LTMuMTUyYy0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOCAwLTEuNjk3czEuMjI4LTAuNDY5IDEuNjk3IDBsMi42NTIgMy4wMzEgMi42NTEtMy4wMzFjMC40NjktMC40NjkgMS4yMjgtMC40NjkgMS42OTcgMHMwLjQ2OSAxLjIyOSAwIDEuNjk3bC0yLjc1OCAzLjE1MiAyLjc1OCAzLjE1YzAuNDY5IDAuNDY5IDAuNDY5IDEuMjI5IDAgMS42OTh6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuZXhwb3J0IHR5cGUgRG93bkNoZXZyb25Qcm9wcyA9IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU/OiBudW1iZXIgfTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogRG93bkNoZXZyb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNNC41MTYgNy41NDhjMC40MzYtMC40NDYgMS4wNDMtMC40ODEgMS41NzYgMGwzLjkwOCAzLjc0NyAzLjkwOC0zLjc0N2MwLjUzMy0wLjQ4MSAxLjE0MS0wLjQ0NiAxLjU3NCAwIDAuNDM2IDAuNDQ1IDAuNDA4IDEuMTk3IDAgMS42MTUtMC40MDYgMC40MTgtNC42OTUgNC41MDItNC42OTUgNC41MDItMC4yMTcgMC4yMjMtMC41MDIgMC4zMzUtMC43ODcgMC4zMzVzLTAuNTctMC4xMTItMC43ODktMC4zMzVjMCAwLTQuMjg3LTQuMDg0LTQuNjk1LTQuNTAycy0wLjQzNi0xLjE3IDAtMS42MTV6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgQnV0dG9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBUaGUgY2hpbGRyZW4gdG8gYmUgcmVuZGVyZWQgaW5zaWRlIHRoZSBpbmRpY2F0b3IuICovXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAvKiogUHJvcHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBvbiB0byB0aGUgY2hpbGRyZW4uICovXG4gIGlubmVyUHJvcHM6IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snZGl2J107XG4gIC8qKiBUaGUgZm9jdXNlZCBzdGF0ZSBvZiB0aGUgc2VsZWN0LiAqL1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IGJhc2VDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpc0ZvY3VzZWQsXG4gIHRoZW1lOiB7XG4gICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgIGNvbG9ycyxcbiAgfSxcbn06XG4gIHwgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuXG4gICc6aG92ZXInOiB7XG4gICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBkcm9wZG93bkluZGljYXRvckNTUyA9IGJhc2VDU1M7XG5leHBvcnQgY29uc3QgRHJvcGRvd25JbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBEcm9wZG93bkluZGljYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+XG4pID0+IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjeCwgZ2V0U3R5bGVzLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e2dldFN0eWxlcygnZHJvcGRvd25JbmRpY2F0b3InLCBwcm9wcyl9XG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17Z2V0U3R5bGVzKCdjbGVhckluZGljYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICAgJ2NsZWFyLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGljYXRvclNlcGFyYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpbm5lclByb3BzPzogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ107XG59XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpc0Rpc2FibGVkLFxuICB0aGVtZToge1xuICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICBjb2xvcnMsXG4gIH0sXG59OiBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPik6IENTU09iamVjdFdpdGhMYWJlbCA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gIG1hcmdpblRvcDogYmFzZVVuaXQgKiAyLFxuICB3aWR0aDogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2luZGljYXRvclNlcGFyYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goeyAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUgfSwgY2xhc3NOYW1lKX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KHtcbiAgaXNGb2N1c2VkLFxuICBzaXplLFxuICB0aGVtZToge1xuICAgIGNvbG9ycyxcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gIH0sXG59OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgZm9udFNpemU6IHNpemUsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG1hcmdpblJpZ2h0OiBzaXplLFxuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbn0pO1xuXG5pbnRlcmZhY2UgTG9hZGluZ0RvdFByb3BzIHtcbiAgZGVsYXk6IG51bWJlcjtcbiAgb2Zmc2V0OiBib29sZWFuO1xufVxuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGRlbGF5LCBvZmZzZXQgfTogTG9hZGluZ0RvdFByb3BzKSA9PiAoXG4gIDxzcGFuXG4gICAgY3NzPXt7XG4gICAgICBhbmltYXRpb246IGAke2xvYWRpbmdEb3RBbmltYXRpb25zfSAxcyBlYXNlLWluLW91dCAke2RlbGF5fW1zIGluZmluaXRlO2AsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMWVtJyxcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgbWFyZ2luTGVmdDogb2Zmc2V0ID8gJzFlbScgOiB1bmRlZmluZWQsXG4gICAgICBoZWlnaHQ6ICcxZW0nLFxuICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICB3aWR0aDogJzFlbScsXG4gICAgfX1cbiAgLz5cbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ0luZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAvKiogU2V0IHNpemUgb2YgdGhlIGNvbnRhaW5lci4gKi9cbiAgc2l6ZTogbnVtYmVyO1xufVxuZXhwb3J0IGNvbnN0IExvYWRpbmdJbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcywgaXNSdGwgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2xvYWRpbmdJbmRpY2F0b3InLCBwcm9wcyl9XG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXswfSBvZmZzZXQ9e2lzUnRsfSAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezE2MH0gb2Zmc2V0IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MzIwfSBvZmZzZXQ9eyFpc1J0bH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5Mb2FkaW5nSW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHsgc2l6ZTogNCB9O1xuIl19 */\",\n toString: _EMOTION_STRINGIFIED_CSS_ERROR__\n};\n\n// ==============================\n// Dropdown & Clear Icons\n// ==============================\nvar Svg = function Svg(_ref) {\n var size = _ref.size,\n props = _objectWithoutProperties(_ref, _excluded$2);\n\n return jsx(\"svg\", _extends({\n height: size,\n width: size,\n viewBox: \"0 0 20 20\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n css: _ref2\n }, props));\n};\n\nvar CrossIcon = function CrossIcon(props) {\n return jsx(Svg, _extends({\n size: 20\n }, props), jsx(\"path\", {\n d: \"M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z\"\n }));\n};\nvar DownChevron = function DownChevron(props) {\n return jsx(Svg, _extends({\n size: 20\n }, props), jsx(\"path\", {\n d: \"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z\"\n }));\n}; // ==============================\n// Dropdown & Clear Buttons\n// ==============================\n\nvar baseCSS = function baseCSS(_ref3) {\n var isFocused = _ref3.isFocused,\n _ref3$theme = _ref3.theme,\n baseUnit = _ref3$theme.spacing.baseUnit,\n colors = _ref3$theme.colors;\n return {\n label: 'indicatorContainer',\n color: isFocused ? colors.neutral60 : colors.neutral20,\n display: 'flex',\n padding: baseUnit * 2,\n transition: 'color 150ms',\n ':hover': {\n color: isFocused ? colors.neutral80 : colors.neutral40\n }\n };\n};\n\nvar dropdownIndicatorCSS = baseCSS;\nvar DropdownIndicator = function DropdownIndicator(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('dropdownIndicator', props),\n className: cx({\n indicator: true,\n 'dropdown-indicator': true\n }, className)\n }, innerProps), children || jsx(DownChevron, null));\n};\nvar clearIndicatorCSS = baseCSS;\nvar ClearIndicator = function ClearIndicator(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('clearIndicator', props),\n className: cx({\n indicator: true,\n 'clear-indicator': true\n }, className)\n }, innerProps), children || jsx(CrossIcon, null));\n}; // ==============================\n// Separator\n// ==============================\n\nvar indicatorSeparatorCSS = function indicatorSeparatorCSS(_ref4) {\n var isDisabled = _ref4.isDisabled,\n _ref4$theme = _ref4.theme,\n baseUnit = _ref4$theme.spacing.baseUnit,\n colors = _ref4$theme.colors;\n return {\n label: 'indicatorSeparator',\n alignSelf: 'stretch',\n backgroundColor: isDisabled ? colors.neutral10 : colors.neutral20,\n marginBottom: baseUnit * 2,\n marginTop: baseUnit * 2,\n width: 1\n };\n};\nvar IndicatorSeparator = function IndicatorSeparator(props) {\n var className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"span\", _extends({}, innerProps, {\n css: getStyles('indicatorSeparator', props),\n className: cx({\n 'indicator-separator': true\n }, className)\n }));\n}; // ==============================\n// Loading\n// ==============================\n\nvar loadingDotAnimations = keyframes(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n 0%, 80%, 100% { opacity: 0; }\\n 40% { opacity: 1; }\\n\"])));\nvar loadingIndicatorCSS = function loadingIndicatorCSS(_ref5) {\n var isFocused = _ref5.isFocused,\n size = _ref5.size,\n _ref5$theme = _ref5.theme,\n colors = _ref5$theme.colors,\n baseUnit = _ref5$theme.spacing.baseUnit;\n return {\n label: 'loadingIndicator',\n color: isFocused ? colors.neutral60 : colors.neutral20,\n display: 'flex',\n padding: baseUnit * 2,\n transition: 'color 150ms',\n alignSelf: 'center',\n fontSize: size,\n lineHeight: 1,\n marginRight: size,\n textAlign: 'center',\n verticalAlign: 'middle'\n };\n};\n\nvar LoadingDot = function LoadingDot(_ref6) {\n var delay = _ref6.delay,\n offset = _ref6.offset;\n return jsx(\"span\", {\n css: /*#__PURE__*/css$2({\n animation: \"\".concat(loadingDotAnimations, \" 1s ease-in-out \").concat(delay, \"ms infinite;\"),\n backgroundColor: 'currentColor',\n borderRadius: '1em',\n display: 'inline-block',\n marginLeft: offset ? '1em' : undefined,\n height: '1em',\n verticalAlign: 'top',\n width: '1em'\n }, process.env.NODE_ENV === \"production\" ? \"\" : \";label:LoadingDot;\", process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFQSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBTdmcgPSAoe1xuICBzaXplLFxuICAuLi5wcm9wc1xufTogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZTogbnVtYmVyIH0pID0+IChcbiAgPHN2Z1xuICAgIGhlaWdodD17c2l6ZX1cbiAgICB3aWR0aD17c2l6ZX1cbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICBjc3M9e3tcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBsaW5lSGVpZ2h0OiAxLFxuICAgICAgc3Ryb2tlOiAnY3VycmVudENvbG9yJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NJY29uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBDcm9zc0ljb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNMTQuMzQ4IDE0Ljg0OWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMGwtMi42NTEtMy4wMzAtMi42NTEgMy4wMjljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDAtMC40NjktMC40NjktMC40NjktMS4yMjkgMC0xLjY5N2wyLjc1OC0zLjE1LTIuNzU5LTMuMTUyYy0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOCAwLTEuNjk3czEuMjI4LTAuNDY5IDEuNjk3IDBsMi42NTIgMy4wMzEgMi42NTEtMy4wMzFjMC40NjktMC40NjkgMS4yMjgtMC40NjkgMS42OTcgMHMwLjQ2OSAxLjIyOSAwIDEuNjk3bC0yLjc1OCAzLjE1MiAyLjc1OCAzLjE1YzAuNDY5IDAuNDY5IDAuNDY5IDEuMjI5IDAgMS42OTh6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuZXhwb3J0IHR5cGUgRG93bkNoZXZyb25Qcm9wcyA9IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU/OiBudW1iZXIgfTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogRG93bkNoZXZyb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNNC41MTYgNy41NDhjMC40MzYtMC40NDYgMS4wNDMtMC40ODEgMS41NzYgMGwzLjkwOCAzLjc0NyAzLjkwOC0zLjc0N2MwLjUzMy0wLjQ4MSAxLjE0MS0wLjQ0NiAxLjU3NCAwIDAuNDM2IDAuNDQ1IDAuNDA4IDEuMTk3IDAgMS42MTUtMC40MDYgMC40MTgtNC42OTUgNC41MDItNC42OTUgNC41MDItMC4yMTcgMC4yMjMtMC41MDIgMC4zMzUtMC43ODcgMC4zMzVzLTAuNTctMC4xMTItMC43ODktMC4zMzVjMCAwLTQuMjg3LTQuMDg0LTQuNjk1LTQuNTAycy0wLjQzNi0xLjE3IDAtMS42MTV6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgQnV0dG9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBUaGUgY2hpbGRyZW4gdG8gYmUgcmVuZGVyZWQgaW5zaWRlIHRoZSBpbmRpY2F0b3IuICovXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAvKiogUHJvcHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBvbiB0byB0aGUgY2hpbGRyZW4uICovXG4gIGlubmVyUHJvcHM6IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snZGl2J107XG4gIC8qKiBUaGUgZm9jdXNlZCBzdGF0ZSBvZiB0aGUgc2VsZWN0LiAqL1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IGJhc2VDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpc0ZvY3VzZWQsXG4gIHRoZW1lOiB7XG4gICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgIGNvbG9ycyxcbiAgfSxcbn06XG4gIHwgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuXG4gICc6aG92ZXInOiB7XG4gICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBkcm9wZG93bkluZGljYXRvckNTUyA9IGJhc2VDU1M7XG5leHBvcnQgY29uc3QgRHJvcGRvd25JbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBEcm9wZG93bkluZGljYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+XG4pID0+IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjeCwgZ2V0U3R5bGVzLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e2dldFN0eWxlcygnZHJvcGRvd25JbmRpY2F0b3InLCBwcm9wcyl9XG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17Z2V0U3R5bGVzKCdjbGVhckluZGljYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICAgJ2NsZWFyLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGljYXRvclNlcGFyYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpbm5lclByb3BzPzogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ107XG59XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpc0Rpc2FibGVkLFxuICB0aGVtZToge1xuICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICBjb2xvcnMsXG4gIH0sXG59OiBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPik6IENTU09iamVjdFdpdGhMYWJlbCA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gIG1hcmdpblRvcDogYmFzZVVuaXQgKiAyLFxuICB3aWR0aDogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2luZGljYXRvclNlcGFyYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goeyAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUgfSwgY2xhc3NOYW1lKX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KHtcbiAgaXNGb2N1c2VkLFxuICBzaXplLFxuICB0aGVtZToge1xuICAgIGNvbG9ycyxcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gIH0sXG59OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgZm9udFNpemU6IHNpemUsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG1hcmdpblJpZ2h0OiBzaXplLFxuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbn0pO1xuXG5pbnRlcmZhY2UgTG9hZGluZ0RvdFByb3BzIHtcbiAgZGVsYXk6IG51bWJlcjtcbiAgb2Zmc2V0OiBib29sZWFuO1xufVxuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGRlbGF5LCBvZmZzZXQgfTogTG9hZGluZ0RvdFByb3BzKSA9PiAoXG4gIDxzcGFuXG4gICAgY3NzPXt7XG4gICAgICBhbmltYXRpb246IGAke2xvYWRpbmdEb3RBbmltYXRpb25zfSAxcyBlYXNlLWluLW91dCAke2RlbGF5fW1zIGluZmluaXRlO2AsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMWVtJyxcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgbWFyZ2luTGVmdDogb2Zmc2V0ID8gJzFlbScgOiB1bmRlZmluZWQsXG4gICAgICBoZWlnaHQ6ICcxZW0nLFxuICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICB3aWR0aDogJzFlbScsXG4gICAgfX1cbiAgLz5cbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ0luZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAvKiogU2V0IHNpemUgb2YgdGhlIGNvbnRhaW5lci4gKi9cbiAgc2l6ZTogbnVtYmVyO1xufVxuZXhwb3J0IGNvbnN0IExvYWRpbmdJbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcywgaXNSdGwgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2xvYWRpbmdJbmRpY2F0b3InLCBwcm9wcyl9XG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXswfSBvZmZzZXQ9e2lzUnRsfSAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezE2MH0gb2Zmc2V0IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MzIwfSBvZmZzZXQ9eyFpc1J0bH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5Mb2FkaW5nSW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHsgc2l6ZTogNCB9O1xuIl19 */\")\n });\n};\n\nvar LoadingIndicator = function LoadingIndicator(props) {\n var className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps,\n isRtl = props.isRtl;\n return jsx(\"div\", _extends({\n css: getStyles('loadingIndicator', props),\n className: cx({\n indicator: true,\n 'loading-indicator': true\n }, className)\n }, innerProps), jsx(LoadingDot, {\n delay: 0,\n offset: isRtl\n }), jsx(LoadingDot, {\n delay: 160,\n offset: true\n }), jsx(LoadingDot, {\n delay: 320,\n offset: !isRtl\n }));\n};\nLoadingIndicator.defaultProps = {\n size: 4\n};\n\nvar css$1 = function css(_ref) {\n var isDisabled = _ref.isDisabled,\n isFocused = _ref.isFocused,\n _ref$theme = _ref.theme,\n colors = _ref$theme.colors,\n borderRadius = _ref$theme.borderRadius,\n spacing = _ref$theme.spacing;\n return {\n label: 'control',\n alignItems: 'center',\n backgroundColor: isDisabled ? colors.neutral5 : colors.neutral0,\n borderColor: isDisabled ? colors.neutral10 : isFocused ? colors.primary : colors.neutral20,\n borderRadius: borderRadius,\n borderStyle: 'solid',\n borderWidth: 1,\n boxShadow: isFocused ? \"0 0 0 1px \".concat(colors.primary) : undefined,\n cursor: 'default',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n minHeight: spacing.controlHeight,\n outline: '0 !important',\n position: 'relative',\n transition: 'all 100ms',\n '&:hover': {\n borderColor: isFocused ? colors.primary : colors.neutral30\n }\n };\n};\n\nvar Control = function Control(props) {\n var children = props.children,\n cx = props.cx,\n getStyles = props.getStyles,\n className = props.className,\n isDisabled = props.isDisabled,\n isFocused = props.isFocused,\n innerRef = props.innerRef,\n innerProps = props.innerProps,\n menuIsOpen = props.menuIsOpen;\n return jsx(\"div\", _extends({\n ref: innerRef,\n css: getStyles('control', props),\n className: cx({\n control: true,\n 'control--is-disabled': isDisabled,\n 'control--is-focused': isFocused,\n 'control--menu-is-open': menuIsOpen\n }, className)\n }, innerProps), children);\n};\n\nvar _excluded$1 = [\"data\"];\nvar groupCSS = function groupCSS(_ref) {\n var spacing = _ref.theme.spacing;\n return {\n paddingBottom: spacing.baseUnit * 2,\n paddingTop: spacing.baseUnit * 2\n };\n};\n\nvar Group = function Group(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n Heading = props.Heading,\n headingProps = props.headingProps,\n innerProps = props.innerProps,\n label = props.label,\n theme = props.theme,\n selectProps = props.selectProps;\n return jsx(\"div\", _extends({\n css: getStyles('group', props),\n className: cx({\n group: true\n }, className)\n }, innerProps), jsx(Heading, _extends({}, headingProps, {\n selectProps: selectProps,\n theme: theme,\n getStyles: getStyles,\n cx: cx\n }), label), jsx(\"div\", null, children));\n};\n\nvar groupHeadingCSS = function groupHeadingCSS(_ref2) {\n var spacing = _ref2.theme.spacing;\n return {\n label: 'group',\n color: '#999',\n cursor: 'default',\n display: 'block',\n fontSize: '75%',\n fontWeight: 500,\n marginBottom: '0.25em',\n paddingLeft: spacing.baseUnit * 3,\n paddingRight: spacing.baseUnit * 3,\n textTransform: 'uppercase'\n };\n};\nvar GroupHeading = function GroupHeading(props) {\n var getStyles = props.getStyles,\n cx = props.cx,\n className = props.className;\n\n var _cleanCommonProps = cleanCommonProps(props);\n _cleanCommonProps.data;\n var innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded$1);\n\n return jsx(\"div\", _extends({\n css: getStyles('groupHeading', props),\n className: cx({\n 'group-heading': true\n }, className)\n }, innerProps));\n};\n\nvar _excluded = [\"innerRef\", \"isDisabled\", \"isHidden\", \"inputClassName\"];\nvar inputCSS = function inputCSS(_ref) {\n var isDisabled = _ref.isDisabled,\n value = _ref.value,\n _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return _objectSpread2({\n margin: spacing.baseUnit / 2,\n paddingBottom: spacing.baseUnit / 2,\n paddingTop: spacing.baseUnit / 2,\n visibility: isDisabled ? 'hidden' : 'visible',\n color: colors.neutral80,\n // force css to recompute when value change due to @emotion bug.\n // We can remove it whenever the bug is fixed.\n transform: value ? 'translateZ(0)' : ''\n }, containerStyle);\n};\nvar spacingStyle = {\n gridArea: '1 / 2',\n font: 'inherit',\n minWidth: '2px',\n border: 0,\n margin: 0,\n outline: 0,\n padding: 0\n};\nvar containerStyle = {\n flex: '1 1 auto',\n display: 'inline-grid',\n gridArea: '1 / 1 / 2 / 3',\n gridTemplateColumns: '0 min-content',\n '&:after': _objectSpread2({\n content: 'attr(data-value) \" \"',\n visibility: 'hidden',\n whiteSpace: 'pre'\n }, spacingStyle)\n};\n\nvar inputStyle = function inputStyle(isHidden) {\n return _objectSpread2({\n label: 'input',\n color: 'inherit',\n background: 0,\n opacity: isHidden ? 0 : 1,\n width: '100%'\n }, spacingStyle);\n};\n\nvar Input = function Input(props) {\n var className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n value = props.value;\n\n var _cleanCommonProps = cleanCommonProps(props),\n innerRef = _cleanCommonProps.innerRef,\n isDisabled = _cleanCommonProps.isDisabled,\n isHidden = _cleanCommonProps.isHidden,\n inputClassName = _cleanCommonProps.inputClassName,\n innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded);\n\n return jsx(\"div\", {\n className: cx({\n 'input-container': true\n }, className),\n css: getStyles('input', props),\n \"data-value\": value || ''\n }, jsx(\"input\", _extends({\n className: cx({\n input: true\n }, inputClassName),\n ref: innerRef,\n style: inputStyle(isHidden),\n disabled: isDisabled\n }, innerProps)));\n};\n\nvar multiValueCSS = function multiValueCSS(_ref) {\n var _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n borderRadius = _ref$theme.borderRadius,\n colors = _ref$theme.colors;\n return {\n label: 'multiValue',\n backgroundColor: colors.neutral10,\n borderRadius: borderRadius / 2,\n display: 'flex',\n margin: spacing.baseUnit / 2,\n minWidth: 0 // resolves flex/text-overflow bug\n\n };\n};\nvar multiValueLabelCSS = function multiValueLabelCSS(_ref2) {\n var _ref2$theme = _ref2.theme,\n borderRadius = _ref2$theme.borderRadius,\n colors = _ref2$theme.colors,\n cropWithEllipsis = _ref2.cropWithEllipsis;\n return {\n borderRadius: borderRadius / 2,\n color: colors.neutral80,\n fontSize: '85%',\n overflow: 'hidden',\n padding: 3,\n paddingLeft: 6,\n textOverflow: cropWithEllipsis || cropWithEllipsis === undefined ? 'ellipsis' : undefined,\n whiteSpace: 'nowrap'\n };\n};\nvar multiValueRemoveCSS = function multiValueRemoveCSS(_ref3) {\n var _ref3$theme = _ref3.theme,\n spacing = _ref3$theme.spacing,\n borderRadius = _ref3$theme.borderRadius,\n colors = _ref3$theme.colors,\n isFocused = _ref3.isFocused;\n return {\n alignItems: 'center',\n borderRadius: borderRadius / 2,\n backgroundColor: isFocused ? colors.dangerLight : undefined,\n display: 'flex',\n paddingLeft: spacing.baseUnit,\n paddingRight: spacing.baseUnit,\n ':hover': {\n backgroundColor: colors.dangerLight,\n color: colors.danger\n }\n };\n};\nvar MultiValueGeneric = function MultiValueGeneric(_ref4) {\n var children = _ref4.children,\n innerProps = _ref4.innerProps;\n return jsx(\"div\", innerProps, children);\n};\nvar MultiValueContainer = MultiValueGeneric;\nvar MultiValueLabel = MultiValueGeneric;\nfunction MultiValueRemove(_ref5) {\n var children = _ref5.children,\n innerProps = _ref5.innerProps;\n return jsx(\"div\", _extends({\n role: \"button\"\n }, innerProps), children || jsx(CrossIcon, {\n size: 14\n }));\n}\n\nvar MultiValue = function MultiValue(props) {\n var children = props.children,\n className = props.className,\n components = props.components,\n cx = props.cx,\n data = props.data,\n getStyles = props.getStyles,\n innerProps = props.innerProps,\n isDisabled = props.isDisabled,\n removeProps = props.removeProps,\n selectProps = props.selectProps;\n var Container = components.Container,\n Label = components.Label,\n Remove = components.Remove;\n return jsx(ClassNames, null, function (_ref6) {\n var css = _ref6.css,\n emotionCx = _ref6.cx;\n return jsx(Container, {\n data: data,\n innerProps: _objectSpread2({\n className: emotionCx(css(getStyles('multiValue', props)), cx({\n 'multi-value': true,\n 'multi-value--is-disabled': isDisabled\n }, className))\n }, innerProps),\n selectProps: selectProps\n }, jsx(Label, {\n data: data,\n innerProps: {\n className: emotionCx(css(getStyles('multiValueLabel', props)), cx({\n 'multi-value__label': true\n }, className))\n },\n selectProps: selectProps\n }, children), jsx(Remove, {\n data: data,\n innerProps: _objectSpread2({\n className: emotionCx(css(getStyles('multiValueRemove', props)), cx({\n 'multi-value__remove': true\n }, className)),\n 'aria-label': \"Remove \".concat(children || 'option')\n }, removeProps),\n selectProps: selectProps\n }));\n });\n};\n\nvar optionCSS = function optionCSS(_ref) {\n var isDisabled = _ref.isDisabled,\n isFocused = _ref.isFocused,\n isSelected = _ref.isSelected,\n _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return {\n label: 'option',\n backgroundColor: isSelected ? colors.primary : isFocused ? colors.primary25 : 'transparent',\n color: isDisabled ? colors.neutral20 : isSelected ? colors.neutral0 : 'inherit',\n cursor: 'default',\n display: 'block',\n fontSize: 'inherit',\n padding: \"\".concat(spacing.baseUnit * 2, \"px \").concat(spacing.baseUnit * 3, \"px\"),\n width: '100%',\n userSelect: 'none',\n WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)',\n // provide some affordance on touch devices\n ':active': {\n backgroundColor: !isDisabled ? isSelected ? colors.primary : colors.primary50 : undefined\n }\n };\n};\n\nvar Option = function Option(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n isDisabled = props.isDisabled,\n isFocused = props.isFocused,\n isSelected = props.isSelected,\n innerRef = props.innerRef,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('option', props),\n className: cx({\n option: true,\n 'option--is-disabled': isDisabled,\n 'option--is-focused': isFocused,\n 'option--is-selected': isSelected\n }, className),\n ref: innerRef,\n \"aria-disabled\": isDisabled\n }, innerProps), children);\n};\n\nvar placeholderCSS = function placeholderCSS(_ref) {\n var _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return {\n label: 'placeholder',\n color: colors.neutral50,\n gridArea: '1 / 1 / 2 / 3',\n marginLeft: spacing.baseUnit / 2,\n marginRight: spacing.baseUnit / 2\n };\n};\n\nvar Placeholder = function Placeholder(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('placeholder', props),\n className: cx({\n placeholder: true\n }, className)\n }, innerProps), children);\n};\n\nvar css = function css(_ref) {\n var isDisabled = _ref.isDisabled,\n _ref$theme = _ref.theme,\n spacing = _ref$theme.spacing,\n colors = _ref$theme.colors;\n return {\n label: 'singleValue',\n color: isDisabled ? colors.neutral40 : colors.neutral80,\n gridArea: '1 / 1 / 2 / 3',\n marginLeft: spacing.baseUnit / 2,\n marginRight: spacing.baseUnit / 2,\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n };\n};\n\nvar SingleValue = function SingleValue(props) {\n var children = props.children,\n className = props.className,\n cx = props.cx,\n getStyles = props.getStyles,\n isDisabled = props.isDisabled,\n innerProps = props.innerProps;\n return jsx(\"div\", _extends({\n css: getStyles('singleValue', props),\n className: cx({\n 'single-value': true,\n 'single-value--is-disabled': isDisabled\n }, className)\n }, innerProps), children);\n};\n\nvar components = {\n ClearIndicator: ClearIndicator,\n Control: Control,\n DropdownIndicator: DropdownIndicator,\n DownChevron: DownChevron,\n CrossIcon: CrossIcon,\n Group: Group,\n GroupHeading: GroupHeading,\n IndicatorsContainer: IndicatorsContainer,\n IndicatorSeparator: IndicatorSeparator,\n Input: Input,\n LoadingIndicator: LoadingIndicator,\n Menu: Menu,\n MenuList: MenuList,\n MenuPortal: MenuPortal,\n LoadingMessage: LoadingMessage,\n NoOptionsMessage: NoOptionsMessage,\n MultiValue: MultiValue,\n MultiValueContainer: MultiValueContainer,\n MultiValueLabel: MultiValueLabel,\n MultiValueRemove: MultiValueRemove,\n Option: Option,\n Placeholder: Placeholder,\n SelectContainer: SelectContainer,\n SingleValue: SingleValue,\n ValueContainer: ValueContainer\n};\nvar defaultComponents = function defaultComponents(props) {\n return _objectSpread2(_objectSpread2({}, components), props.components);\n};\n\nexport { isTouchCapable as A, isMobileDevice as B, multiValueAsValue as C, singleValueAsValue as D, valueTernary as E, classNames as F, defaultComponents as G, notNullish as H, isDocumentElement as I, cleanValue as J, scrollIntoView as K, noop as L, MenuPlacer as M, handleInputChange as N, _createSuper as _, _objectSpread2 as a, clearIndicatorCSS as b, components as c, containerCSS as d, css$1 as e, dropdownIndicatorCSS as f, groupCSS as g, groupHeadingCSS as h, indicatorsContainerCSS as i, indicatorSeparatorCSS as j, inputCSS as k, loadingIndicatorCSS as l, loadingMessageCSS as m, menuCSS as n, menuListCSS as o, menuPortalCSS as p, multiValueCSS as q, removeProps as r, supportsPassiveEvents as s, multiValueLabelCSS as t, multiValueRemoveCSS as u, noOptionsMessageCSS as v, optionCSS as w, placeholderCSS as x, css as y, valueContainerCSS as z };\n","import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport { N as handleInputChange, a as _objectSpread2 } from './index-a7690a33.esm.js';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport { useRef, useState, useEffect, useCallback } from 'react';\n\nvar _excluded = [\"defaultOptions\", \"cacheOptions\", \"loadOptions\", \"options\", \"isLoading\", \"onInputChange\", \"filterOption\"];\nfunction useAsync(_ref) {\n var _ref$defaultOptions = _ref.defaultOptions,\n propsDefaultOptions = _ref$defaultOptions === void 0 ? false : _ref$defaultOptions,\n _ref$cacheOptions = _ref.cacheOptions,\n cacheOptions = _ref$cacheOptions === void 0 ? false : _ref$cacheOptions,\n propsLoadOptions = _ref.loadOptions;\n _ref.options;\n var _ref$isLoading = _ref.isLoading,\n propsIsLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,\n propsOnInputChange = _ref.onInputChange,\n _ref$filterOption = _ref.filterOption,\n filterOption = _ref$filterOption === void 0 ? null : _ref$filterOption,\n restSelectProps = _objectWithoutProperties(_ref, _excluded);\n\n var propsInputValue = restSelectProps.inputValue;\n var lastRequest = useRef(undefined);\n var mounted = useRef(false);\n\n var _useState = useState(Array.isArray(propsDefaultOptions) ? propsDefaultOptions : undefined),\n _useState2 = _slicedToArray(_useState, 2),\n defaultOptions = _useState2[0],\n setDefaultOptions = _useState2[1];\n\n var _useState3 = useState(typeof propsInputValue !== 'undefined' ? propsInputValue : ''),\n _useState4 = _slicedToArray(_useState3, 2),\n stateInputValue = _useState4[0],\n setStateInputValue = _useState4[1];\n\n var _useState5 = useState(propsDefaultOptions === true),\n _useState6 = _slicedToArray(_useState5, 2),\n isLoading = _useState6[0],\n setIsLoading = _useState6[1];\n\n var _useState7 = useState(undefined),\n _useState8 = _slicedToArray(_useState7, 2),\n loadedInputValue = _useState8[0],\n setLoadedInputValue = _useState8[1];\n\n var _useState9 = useState([]),\n _useState10 = _slicedToArray(_useState9, 2),\n loadedOptions = _useState10[0],\n setLoadedOptions = _useState10[1];\n\n var _useState11 = useState(false),\n _useState12 = _slicedToArray(_useState11, 2),\n passEmptyOptions = _useState12[0],\n setPassEmptyOptions = _useState12[1];\n\n var _useState13 = useState({}),\n _useState14 = _slicedToArray(_useState13, 2),\n optionsCache = _useState14[0],\n setOptionsCache = _useState14[1];\n\n var _useState15 = useState(undefined),\n _useState16 = _slicedToArray(_useState15, 2),\n prevDefaultOptions = _useState16[0],\n setPrevDefaultOptions = _useState16[1];\n\n var _useState17 = useState(undefined),\n _useState18 = _slicedToArray(_useState17, 2),\n prevCacheOptions = _useState18[0],\n setPrevCacheOptions = _useState18[1];\n\n if (cacheOptions !== prevCacheOptions) {\n setOptionsCache({});\n setPrevCacheOptions(cacheOptions);\n }\n\n if (propsDefaultOptions !== prevDefaultOptions) {\n setDefaultOptions(Array.isArray(propsDefaultOptions) ? propsDefaultOptions : undefined);\n setPrevDefaultOptions(propsDefaultOptions);\n }\n\n useEffect(function () {\n mounted.current = true;\n return function () {\n mounted.current = false;\n };\n }, []);\n var loadOptions = useCallback(function (inputValue, callback) {\n if (!propsLoadOptions) return callback();\n var loader = propsLoadOptions(inputValue, callback);\n\n if (loader && typeof loader.then === 'function') {\n loader.then(callback, function () {\n return callback();\n });\n }\n }, [propsLoadOptions]);\n useEffect(function () {\n if (propsDefaultOptions === true) {\n loadOptions(stateInputValue, function (options) {\n if (!mounted.current) return;\n setDefaultOptions(options || []);\n setIsLoading(!!lastRequest.current);\n });\n } // NOTE: this effect is designed to only run when the component mounts,\n // so we don't want to include any hook dependencies\n // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, []);\n var onInputChange = useCallback(function (newValue, actionMeta) {\n var inputValue = handleInputChange(newValue, actionMeta, propsOnInputChange);\n\n if (!inputValue) {\n lastRequest.current = undefined;\n setStateInputValue('');\n setLoadedInputValue('');\n setLoadedOptions([]);\n setIsLoading(false);\n setPassEmptyOptions(false);\n return;\n }\n\n if (cacheOptions && optionsCache[inputValue]) {\n setStateInputValue(inputValue);\n setLoadedInputValue(inputValue);\n setLoadedOptions(optionsCache[inputValue]);\n setIsLoading(false);\n setPassEmptyOptions(false);\n } else {\n var request = lastRequest.current = {};\n setStateInputValue(inputValue);\n setIsLoading(true);\n setPassEmptyOptions(!loadedInputValue);\n loadOptions(inputValue, function (options) {\n if (!mounted) return;\n if (request !== lastRequest.current) return;\n lastRequest.current = undefined;\n setIsLoading(false);\n setLoadedInputValue(inputValue);\n setLoadedOptions(options || []);\n setPassEmptyOptions(false);\n setOptionsCache(options ? _objectSpread2(_objectSpread2({}, optionsCache), {}, _defineProperty({}, inputValue, options)) : optionsCache);\n });\n }\n }, [cacheOptions, loadOptions, loadedInputValue, optionsCache, propsOnInputChange]);\n var options = passEmptyOptions ? [] : stateInputValue && loadedInputValue ? loadedOptions : defaultOptions || [];\n return _objectSpread2(_objectSpread2({}, restSelectProps), {}, {\n options: options,\n isLoading: isLoading || propsIsLoading,\n onInputChange: onInputChange,\n filterOption: filterOption\n });\n}\n\nexport { useAsync as u };\n","import { a as _objectSpread2 } from './index-a7690a33.esm.js';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport { useState, useCallback } from 'react';\n\nvar _excluded = [\"defaultInputValue\", \"defaultMenuIsOpen\", \"defaultValue\", \"inputValue\", \"menuIsOpen\", \"onChange\", \"onInputChange\", \"onMenuClose\", \"onMenuOpen\", \"value\"];\nfunction useStateManager(_ref) {\n var _ref$defaultInputValu = _ref.defaultInputValue,\n defaultInputValue = _ref$defaultInputValu === void 0 ? '' : _ref$defaultInputValu,\n _ref$defaultMenuIsOpe = _ref.defaultMenuIsOpen,\n defaultMenuIsOpen = _ref$defaultMenuIsOpe === void 0 ? false : _ref$defaultMenuIsOpe,\n _ref$defaultValue = _ref.defaultValue,\n defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue,\n propsInputValue = _ref.inputValue,\n propsMenuIsOpen = _ref.menuIsOpen,\n propsOnChange = _ref.onChange,\n propsOnInputChange = _ref.onInputChange,\n propsOnMenuClose = _ref.onMenuClose,\n propsOnMenuOpen = _ref.onMenuOpen,\n propsValue = _ref.value,\n restSelectProps = _objectWithoutProperties(_ref, _excluded);\n\n var _useState = useState(propsInputValue !== undefined ? propsInputValue : defaultInputValue),\n _useState2 = _slicedToArray(_useState, 2),\n stateInputValue = _useState2[0],\n setStateInputValue = _useState2[1];\n\n var _useState3 = useState(propsMenuIsOpen !== undefined ? propsMenuIsOpen : defaultMenuIsOpen),\n _useState4 = _slicedToArray(_useState3, 2),\n stateMenuIsOpen = _useState4[0],\n setStateMenuIsOpen = _useState4[1];\n\n var _useState5 = useState(propsValue !== undefined ? propsValue : defaultValue),\n _useState6 = _slicedToArray(_useState5, 2),\n stateValue = _useState6[0],\n setStateValue = _useState6[1];\n\n var onChange = useCallback(function (value, actionMeta) {\n if (typeof propsOnChange === 'function') {\n propsOnChange(value, actionMeta);\n }\n\n setStateValue(value);\n }, [propsOnChange]);\n var onInputChange = useCallback(function (value, actionMeta) {\n var newValue;\n\n if (typeof propsOnInputChange === 'function') {\n newValue = propsOnInputChange(value, actionMeta);\n }\n\n setStateInputValue(newValue !== undefined ? newValue : value);\n }, [propsOnInputChange]);\n var onMenuOpen = useCallback(function () {\n if (typeof propsOnMenuOpen === 'function') {\n propsOnMenuOpen();\n }\n\n setStateMenuIsOpen(true);\n }, [propsOnMenuOpen]);\n var onMenuClose = useCallback(function () {\n if (typeof propsOnMenuClose === 'function') {\n propsOnMenuClose();\n }\n\n setStateMenuIsOpen(false);\n }, [propsOnMenuClose]);\n var inputValue = propsInputValue !== undefined ? propsInputValue : stateInputValue;\n var menuIsOpen = propsMenuIsOpen !== undefined ? propsMenuIsOpen : stateMenuIsOpen;\n var value = propsValue !== undefined ? propsValue : stateValue;\n return _objectSpread2(_objectSpread2({}, restSelectProps), {}, {\n inputValue: inputValue,\n menuIsOpen: menuIsOpen,\n onChange: onChange,\n onInputChange: onInputChange,\n onMenuClose: onMenuClose,\n onMenuOpen: onMenuOpen,\n value: value\n });\n}\n\nexport { useStateManager as u };\n","module.exports = window[\"React\"];","module.exports = window[\"ReactDOM\"];","module.exports = window[\"lodash\"];","module.exports = window[\"wp\"][\"apiFetch\"];","module.exports = window[\"wp\"][\"components\"];","module.exports = window[\"wp\"][\"compose\"];","module.exports = window[\"wp\"][\"element\"];","module.exports = window[\"wp\"][\"i18n\"];","module.exports = window[\"wp\"][\"url\"];","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _taggedTemplateLiteral(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length)\n\t\t\t\t\tbreak\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && characters.charCodeAt(length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {string}\n */\nexport function prefix (value, length) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// flex, flex-direction\n\t\tcase 6828: case 4268:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// (s)ticky?\n\t\t\tif (charat(value, length + 1) !== 115)\n\t\t\t\tbreak\n\t\t// display: (flex|inline-flex)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n\t\t\t\t// stic(k)y\n\t\t\t\tcase 107:\n\t\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\t\t// (inline-)?fl(e)x\n\t\t\t\tcase 101:\n\t\t\t\t\treturn replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t}\n\t\t\tbreak\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t}\n\n\t\t\treturn WEBKIT + value + MS + value + value\n\t}\n\n\treturn value\n}\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3)\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n * the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the throttled-function is executed.\n * @param {boolean} [debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n * schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nfunction throttle (delay, noTrailing, callback, debounceMode) {\n /*\n * After wrapper has stopped being called, this timeout ensures that\n * `callback` is executed at the proper times in `throttle` and `end`\n * debounce modes.\n */\n var timeoutID;\n var cancelled = false; // Keep track of the last time `callback` was executed.\n\n var lastExec = 0; // Function to clear existing timeout\n\n function clearExistingTimeout() {\n if (timeoutID) {\n clearTimeout(timeoutID);\n }\n } // Function to cancel next exec\n\n\n function cancel() {\n clearExistingTimeout();\n cancelled = true;\n } // `noTrailing` defaults to falsy.\n\n\n if (typeof noTrailing !== 'boolean') {\n debounceMode = callback;\n callback = noTrailing;\n noTrailing = undefined;\n }\n /*\n * The `wrapper` function encapsulates all of the throttling / debouncing\n * functionality and when executed will limit the rate at which `callback`\n * is executed.\n */\n\n\n function wrapper() {\n for (var _len = arguments.length, arguments_ = new Array(_len), _key = 0; _key < _len; _key++) {\n arguments_[_key] = arguments[_key];\n }\n\n var self = this;\n var elapsed = Date.now() - lastExec;\n\n if (cancelled) {\n return;\n } // Execute `callback` and update the `lastExec` timestamp.\n\n\n function exec() {\n lastExec = Date.now();\n callback.apply(self, arguments_);\n }\n /*\n * If `debounceMode` is true (at begin) this is used to clear the flag\n * to allow future `callback` executions.\n */\n\n\n function clear() {\n timeoutID = undefined;\n }\n\n if (debounceMode && !timeoutID) {\n /*\n * Since `wrapper` is being called for the first time and\n * `debounceMode` is true (at begin), execute `callback`.\n */\n exec();\n }\n\n clearExistingTimeout();\n\n if (debounceMode === undefined && elapsed > delay) {\n /*\n * In throttle mode, if `delay` time has been exceeded, execute\n * `callback`.\n */\n exec();\n } else if (noTrailing !== true) {\n /*\n * In trailing throttle mode, since `delay` time has not been\n * exceeded, schedule `callback` to execute `delay` ms after most\n * recent execution.\n *\n * If `debounceMode` is true (at begin), schedule `clear` to execute\n * after `delay` ms.\n *\n * If `debounceMode` is false (at end), schedule `callback` to\n * execute after `delay` ms.\n */\n timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n }\n }\n\n wrapper.cancel = cancel; // Return the wrapper function.\n\n return wrapper;\n}\n\n/* eslint-disable no-undefined */\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n *\n * @returns {Function} A new, debounced function.\n */\n\nfunction debounce (delay, atBegin, callback) {\n return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n}\n\nexport { debounce, throttle };\n//# sourceMappingURL=index.js.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import * as Components from '../../packages/components/src';\n\nwindow.llms = window.llms || {};\n\n// Preserve components from `lifterlms-blocks`.\nconst { components = {} } = window.llms;\n\n/**\n * Expose @lifterlms/components via the global `window.llms` object.\n *\n * @since 6.0.0\n */\nwindow.llms.components = {\n\t...components,\n\t...Components,\n};\n"],"names":["BaseControl","Button","ButtonGroup","useState","_ref","label","onClick","className","id","selected","options","selectedValue","setSelectedValue","createElement","style","display","map","_ref2","buttonLabel","value","icon","padding","key","isPrimary","isSecondary","__","ClipboardButton","Tooltip","useCopyToClipboard","buttonText","copyText","onCopy","tooltipText","buttonProps","canUseHook","HookButton","ref","_extends","BackwardsButton","text","default","ButtonGroupControl","CopyButton","_Spinner","Spinner","Select","debounce","uniqueId","differenceBy","uniqBy","useEffect","apiFetch","addQueryArgs","StyledBaseControl","defaultHydrateValues","defaultStyles","defaultTheme","defaultFormatSearchResults","BaseSearchControl","searchPath","onUpdate","additionalSearchArgs","defaultOptions","getSearchArgs","getSearchURL","hydrateValues","formatSearchResults","formatSearchResultLabel","formatSearchResultValue","placeholder","classNamePrefix","searchDebounceDelay","selectProps","loadedResults","setLoadedResults","addLoadedResults","newResults","concat","setValue","Array","isArray","length","then","newValues","toAdd","onChange","loadOptions","searchQuery","callback","path","results","formatted","res","per_page","search","args","styles","theme","isPlainObject","values","isResultHydrated","result","Promise","all","Number","isInteger","find","control","borderColor","colors","primary","spacing","baseUnit","controlHeight","menuGutter","PostSearchControl","UserSearchControl","_x","sprintf","postType","baseSearchPath","baseProps","title","rendered","styled","name","WRAPPER_CLASSNAME","CLASSNAME","SIZE_SMALL","SIZE_DEFAULT","create","ensureElementList","loadStyles","get","selector","size","arguments","undefined","useJQuery","nodeList","wrapper","spinner","jQuery","start","forEach","el","stop","STYLES","document","loadingMsg","innerHTML","classList","add","appendChild","querySelectorAll","NodeList","from","list","Element","push","toArray","spinners","parentNode","STYLE_ID","getElementById","textContent","replace","head","Components","window","llms","components"],"sourceRoot":""}
\ No newline at end of file
diff --git a/assets/js/llms-icons.js.map b/assets/js/llms-icons.js.map
new file mode 100644
index 0000000000..df3b041fa7
--- /dev/null
+++ b/assets/js/llms-icons.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"js/llms-icons.js","mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACkD;AAClD,eAAe,kCAAkC,4CAA4C;;AAE7F;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA,YAAY,cAAc;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,SAAS,gEAAY;AACrB;AACA;AACA;AACA,GAAG;AACH;;AAEA,iEAAe,IAAI,EAAC;AACpB;;;;;;;;;;;;;;;;;AC9BwC;;;;;;;;;;;;;;;;;;;;ACAa;AAErD,MAAME,SAAS,GACdI,iEAAA,CAACH,sDAAG;EACHI,KAAK,EAAC,4BAA4B;EAClCC,OAAO,EAAC,WAAW;EACnBC,KAAK,EAAG;IACPC,QAAQ,EAAE,SAAS;IACnBC,QAAQ,EAAE,SAAS;IACnBC,cAAc,EAAE,OAAO;IACvBC,gBAAgB,EAAE;EACnB;AAAG,GAEHP,iEAAA,CAACF,oDAAC;EAACU,EAAE,EAAC;AAAgB,GACrBR,iEAAA,CAACD,uDAAI;EAACU,CAAC,EAAC;AAAisB,CAAE,CAAC,EAC5sBT,iEAAA,CAACD,uDAAI;EAACU,CAAC,EAAC;AAAkxB,CAAE,CAAC,EAC7xBT,iEAAA,CAACD,uDAAI;EAACU,CAAC,EAAC;AAAkK,CAAE,CAC1K,CACC,CACL;AAED,iEAAeb,SAAS;;;;;;;;;;ACrBxB;;;;;;;;;;ACAA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;ACNkD;;AAElD;AACA;AACA;AACA;AACA;AACAe,MAAM,CAACC,IAAI,GAAGD,MAAM,CAACC,IAAI,IAAI,CAAC,CAAC;AAC/BD,MAAM,CAACC,IAAI,CAACF,KAAK,GAAGA,gDAAK,C","sources":["webpack://lifterlms/./node_modules/@wordpress/icons/build-module/icon/index.js","webpack://lifterlms/./packages/icons/src/index.js","webpack://lifterlms/./packages/icons/src/lifterlms.js","webpack://lifterlms/external window [\"wp\",\"element\"]","webpack://lifterlms/external window [\"wp\",\"primitives\"]","webpack://lifterlms/webpack/bootstrap","webpack://lifterlms/webpack/runtime/compat get default export","webpack://lifterlms/webpack/runtime/define property getters","webpack://lifterlms/webpack/runtime/hasOwnProperty shorthand","webpack://lifterlms/webpack/runtime/make namespace object","webpack://lifterlms/./src/js/icons.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { cloneElement } from '@wordpress/element';\n/** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */\n\n/**\n * Return an SVG icon.\n *\n * @param {IconProps} props icon is the SVG component to render\n * size is a number specifiying the icon size in pixels\n * Other props will be passed to wrapped SVG component\n *\n * @return {JSX.Element} Icon component\n */\n\nfunction Icon(_ref) {\n let {\n icon,\n size = 24,\n ...props\n } = _ref;\n return cloneElement(icon, {\n width: size,\n height: size,\n ...props\n });\n}\n\nexport default Icon;\n//# sourceMappingURL=index.js.map","export { Icon } from '@wordpress/icons';\n\nexport { default as lifterlms } from './lifterlms';\n","import { SVG, G, Path } from '@wordpress/primitives';\n\nconst lifterlms = (\n\t\n\t\t\n\t\t\t \n\t\t\t \n\t\t\t \n\t\t \n\t \n);\n\nexport default lifterlms;\n","module.exports = window[\"wp\"][\"element\"];","module.exports = window[\"wp\"][\"primitives\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import * as icons from '../../packages/icons/src';\n\n/**\n * Expose @lifterlms/icons via the global `window.llms` object.\n *\n * @since 6.0.0\n */\nwindow.llms = window.llms || {};\nwindow.llms.icons = icons;\n"],"names":["Icon","default","lifterlms","SVG","G","Path","createElement","xmlns","viewBox","style","fillRule","clipRule","strokeLinejoin","strokeMiterlimit","id","d","icons","window","llms"],"sourceRoot":""}
\ No newline at end of file
diff --git a/assets/js/llms-metaboxes.js b/assets/js/llms-metaboxes.js
new file mode 100644
index 0000000000..41ec59a89e
--- /dev/null
+++ b/assets/js/llms-metaboxes.js
@@ -0,0 +1,1522 @@
+/****************************************************************
+ *
+ * Contributor's Notice
+ *
+ * This is a compiled file and should not be edited directly!
+ * The uncompiled script is located in the "assets/private" directory
+ *
+ ****************************************************************/
+
+/**
+ * LifterLMS Admin Panel Metabox Functions
+ *
+ * @since 3.0.0
+ * @version 7.1.1
+ */
+ ( function( $ ) {
+
+ $( document ).ready( function() {
+ // Avoid confusion by hiding the visibility option for coupons and vouchers if currently set to public.
+ if ( $( 'input[name="visibility"]:checked' ).val() === 'public' ) {
+ $( 'body.post-type-llms_coupon #visibility, body.post-type-llms_voucher #visibility' ).hide();
+ }
+ } );
+
+ /**
+ * jQuery plugin to allow "collapsible" sections
+ *
+ * @return jQuery object
+ * @since 3.0.0
+ * @version 3.29.0
+ */
+ $.fn.llmsCollapsible = function() {
+
+ var $group = this;
+
+ this.on( 'click', '.llms-collapsible-header', function() {
+
+ var $parent = $( this ).closest( '.llms-collapsible' ),
+ $siblings = $parent.siblings( '.llms-collapsible' );
+
+ $parent.toggleClass( 'opened' ).trigger( 'llms-collapsible-toggled' );
+
+ $parent.find( '.llms-collapsible-body' ).slideToggle( 400 );
+
+ $siblings.each( function() {
+ $( this ).removeClass( 'opened' );
+ $( this ).find( '.llms-collapsible-body' ).slideUp( 400 );
+ } );
+
+ } );
+
+ return this;
+
+ };
+
+ window.llms = window.llms || {};
+
+ var Metaboxes = function() {
+
+ /**
+ * load all partials
+ */
+ /**
+ * LifterLMS Admin Metabox Repeater Field
+ *
+ * @package LifterLMS/Scripts/Partials
+ *
+ * @since 3.11.0
+ * @version 5.3.2
+ */
+
+ this.repeaters = {
+
+ /**
+ * Reference to the parent metabox class
+ *
+ * @type {Object}
+ */
+ metaboxes: this,
+
+ /**
+ * A jQuery selector for all repeater elements on the current screen
+ *
+ * @type {Object}
+ */
+ $repeaters: null,
+
+ /**
+ * Init
+ *
+ * @since 3.11.0
+ * @since 3.23.0 Unknown.
+ *
+ * @return {void}
+ */
+ init: function() {
+
+ var self = this;
+
+ self.$repeaters = $( '.llms-mb-list.repeater' );
+
+ if ( self.$repeaters.length ) {
+
+ // Wait for tinyMCE just in case their editors in the repeaters.
+ LLMS.wait_for(
+ function() {
+ return ( 'undefined' !== typeof tinyMCE );
+ },
+ function() {
+ self.load();
+ self.bind();
+ }
+ );
+
+ /**
+ * On click of any post submit buttons add some data to the submit button
+ * so we can see which button to trigger after repeaters are finished.
+ */
+ $( '#post input[type="submit"], #post-preview' ).on( 'click', function() {
+ $( this ).attr( 'data-llms-clicked', 'yes' );
+ } );
+
+ // Handle post submission.
+ $( '#post' ).on( 'submit', self.handle_submit );
+
+ }
+
+ },
+
+ /**
+ * Bind DOM Events
+ *
+ * @since 3.11.0
+ * @since 3.13.0 Unknown.
+ * @since 5.3.2 Don't remove the model's mceEditor instance (it's removed before cloning a row now).
+ *
+ * @return {void}
+ */
+ bind: function() {
+
+ var self = this;
+
+ self.$repeaters.each( function() {
+
+ var $repeater = $( this ),
+ $rows = $repeater.find( '.llms-repeater-rows' );
+
+ // For the repeater + button.
+ $repeater.find( '.llms-repeater-new-btn' ).on( 'click', function() {
+ self.add_row( $repeater, null, true );
+ } );
+
+ // Make repeater rows sortable.
+ $rows.sortable( {
+ handle: '.llms-drag-handle',
+ items: '.llms-repeater-row',
+ start: function( event, ui ) {
+ $rows.addClass( 'dragging' );
+ },
+ stop: function( event, ui ) {
+ $rows.removeClass( 'dragging' );
+
+ var $eds = ui.item.find( 'textarea.wp-editor-area' );
+ $eds.each( function() {
+ var ed_id = $( this ).attr( 'id' );
+ tinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, ed_id );
+ tinyMCE.EditorManager.execCommand( 'mceAddEditor', true, ed_id );
+ } );
+
+ self.save( $repeater );
+ },
+ } );
+
+ $repeater.on( 'click', '.llms-repeater-remove', function( e ) {
+ e.stopPropagation();
+ var $row = $( this ).closest( '.llms-repeater-row' );
+ if ( window.confirm( LLMS.l10n.translate( 'Are you sure you want to delete this row? This cannot be undone.' ) ) ) {
+ $row.remove();
+ setTimeout( function() {
+ self.save( $repeater );
+ }, 1 );
+ }
+ } );
+
+ } );
+
+ },
+
+ /**
+ * Add a new row to a repeater rows group
+ *
+ * @since 3.11.0
+ * @since 5.3.2 Use `self.clone_row()` to retrieve the model's base HTML for the row to be added.
+ *
+ * @param {Object} $repeater A jQuery selector for the repeater to add a row to.
+ * @param {Object} data Optional object of data to fill fields in the row with.
+ * @param {Boolean} expand If true, will automatically open the row after adding it to the dom.
+ * @return {void}
+ */
+ add_row: function( $repeater, data, expand ) {
+
+ var self = this,
+ $rows = $repeater.find( '.llms-repeater-rows' ),
+ $model = $repeater.find( '.llms-repeater-model' ),
+ $row = self.clone_row( $model.find( '.llms-repeater-row' ) ),
+ new_index = $repeater.find( '.llms-repeater-row' ).length,
+ editor = self.reindex( $row, new_index );
+
+ if ( data ) {
+ $.each( data, function( key, val ) {
+
+ var $field = $row.find( '[name^="' + key + '"]' );
+
+ if ( $field.hasClass( 'llms-select2-student' ) ) {
+ $.each( val, function( i, data ) {
+ $field.append( '' + data.title + ' ' )
+ } );
+ $field.trigger( 'change' );
+ } else {
+ $field.val( val );
+ }
+
+ } );
+ }
+
+ setTimeout( function() {
+ self.bind_row( $row );
+ }, 1 );
+
+ $rows.append( $row );
+ if ( expand ) {
+ $row.find( '.llms-collapsible-header' ).trigger( 'click' );
+ }
+ tinyMCE.EditorManager.execCommand( 'mceAddEditor', true, editor );
+
+ $repeater.trigger( 'llms-new-repeater-row', {
+ $row: $row,
+ data: data,
+ } );
+
+ },
+
+ /**
+ * Bind DOM events for a single repeater row
+ *
+ * @since 3.11.0
+ * @since 3.13.0 Unknown.
+ *
+ * @param {Object} $row A jQuery selector for the row.
+ * @return {void}
+ */
+ bind_row: function( $row ) {
+
+ this.bind_row_header( $row );
+
+ $row.find( '.llms-select2' ).llmsSelect2( {
+ width: '100%',
+ } );
+
+ $row.find( '.llms-select2-student' ).llmsStudentsSelect2();
+
+ this.metaboxes.bind_datepickers( $row.find( '.llms-datepicker' ) );
+ this.metaboxes.bind_controllers( $row.find( '[data-is-controller]' ) );
+ // This.metaboxes.bind_merge_code_buttons( $row.find( '.llms-merge-code-wrapper' ) );.
+ },
+
+ /**
+ * Bind row header events
+ *
+ * @since 3.11.0
+ *
+ * @param {Object} $row jQuery selector for the row.
+ * @return {void}
+ */
+ bind_row_header: function( $row ) {
+
+ // Handle the title field binding.
+ var $title = $row.find( '.llms-repeater-title' ),
+ $field = $row.find( '.llms-collapsible-header-title-field' );
+
+ $title.attr( 'data-default', $title.text() );
+
+ $field.on( 'keyup focusout blur', function() {
+ var val = $( this ).val();
+ if ( ! val ) {
+ val = $title.attr( 'data-default' );
+ }
+ $title.text( val );
+ } ).trigger( 'keyup' );
+
+ },
+
+ /**
+ * Create a copy of the model's row after removing any tinyMCE editor instances present in the model.
+ *
+ * @since 5.3.2
+ *
+ * @param {Object} $row A jQuery object of the row to be cloned.
+ * @return {Object} A clone of the jQuery object.
+ */
+ clone_row: function( $row ) {
+
+ $ed = $row.find( '.editor textarea' );
+ if ( $ed.length ) {
+ tinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, $ed.attr( 'id' ) );
+ }
+
+ return $row.clone()
+
+ },
+
+ /**
+ * Handle WP Post form submission to ensure repeaters are saved before submitting the form to save/publish the post
+ *
+ * @since 3.11.0
+ * @since 3.23.0 Unknown.
+ *
+ * @param {Object} e An event object.
+ * @return {void}
+ */
+ handle_submit: function( e ) {
+
+ // Get the button used to submit the form.
+ var $btn = $( '#post [data-llms-clicked="yes"]' ),
+ $spinner = $btn.parent().find( '.spinner' );
+
+ if ( $btn.is( '#post-preview' ) ) {
+ $btn.removeAttr( 'data-llms-clicked' );
+ return;
+ }
+
+ e.preventDefault();
+
+ // Core UX to prevent multi-click/or the appearance of a delay.
+ $( '#post input[type="submit"]' ).addClass( 'disabled' ).attr( 'disabled', 'disabled' );
+ $spinner.addClass( 'is-active' );
+
+ var self = window.llms.metaboxes.repeaters,
+ i = 0,
+ wait;
+
+ self.$repeaters.each( function() {
+ self.save( $( this ) );
+ } );
+
+ wait = setInterval( function() {
+
+ if ( i >= 59 || ! $( '.llms-mb-list.repeater.processing' ).length ) {
+
+ clearInterval( wait );
+ $( '#post' ).off( 'submit', this.handle_submit );
+ $spinner.removeClass( 'is-active' );
+ $btn.removeClass( 'disabled' ).removeAttr( 'disabled' ).trigger( 'click' );
+
+ } else {
+
+ i++;
+
+ }
+
+ }, 1000 );
+
+ },
+
+ /**
+ * Load repeater data from the server and create rows in the DOM
+ *
+ * @since 3.11.0
+ * @since 3.12.1 Unknown.
+ *
+ * @return {void}
+ */
+ load: function() {
+
+ var self = this;
+
+ self.$repeaters.each( function() {
+
+ var $repeater = $( this );
+
+ // Ensure the repeater is only loaded once to prevent duplicates resulting from duplicating binding.
+ // On certain sites which I cannot quite explain...
+ if ( $repeater.hasClass( 'is-loaded' ) || $repeater.hasClass( 'processing' ) ) {
+ return;
+ }
+
+ self.store( $repeater, 'load', function( data ) {
+
+ $repeater.addClass( 'is-loaded' );
+
+ $.each( data.data, function( i, obj ) {
+ self.add_row( $repeater, obj, false );
+ } );
+
+ // For each row within the repeater.
+ $repeater.find( '.llms-repeater-rows .llms-repeater-row' ).each( function() {
+ self.bind_row( $( this ) );
+ } );
+
+ } );
+
+ } );
+
+ },
+
+ /**
+ * Reindex a row
+ *
+ * Renames ids, attrs, and etc...
+ *
+ * Used when cloning the model for new rows.
+ *
+ * @since 3.11.0
+ *
+ * @param {Object} $row jQuery selector for the row.
+ * @param {string} index The index (or id) to use when renaming.
+ * @return {string}
+ */
+ reindex: function( $row, index ) {
+
+ var old_index = $row.attr( 'data-row-order' ),
+ $ed = $row.find( '.llms-mb-list.editor textarea' );
+
+ tinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, $ed.attr( 'id' ) );
+
+ function replace_attr( $el, attr ) {
+ $el.each( function() {
+ var str = $( this ).attr( attr );
+ $( this ).attr( attr, str.replace( old_index, index ) );
+ } );
+ };
+
+ $row.attr( 'data-row-order', index );
+
+ replace_attr( $row, 'data-row-order' );
+
+ replace_attr( $row.find( 'button.insert-media' ), 'data-editor' );
+
+ replace_attr( $row.find( 'input[name^="_llms"], textarea[name^="_llms"], select[name^="_llms"]' ), 'id' );
+ replace_attr( $row.find( 'input[name^="_llms"], textarea[name^="_llms"], select[name^="_llms"]' ), 'name' );
+ replace_attr( $row.find( '[data-controller]' ), 'data-controller' );
+ replace_attr( $row.find( '[data-controller]' ), 'data-controller' );
+ replace_attr( $row.find( 'button.wp-switch-editor' ), 'data-wp-editor-id' );
+ replace_attr( $row.find( 'button.wp-switch-editor' ), 'id' );
+ replace_attr( $row.find( '.wp-editor-tools' ), 'id' );
+ replace_attr( $row.find( '.wp-editor-container' ), 'id' );
+
+ return $ed.attr( 'id' );
+
+ },
+
+ /**
+ * Save a single repeaters data to the server
+ *
+ * @since 3.11.0
+ * @since 3.13.0 Unknown.
+ *
+ * @param {Object} $repeater jQuery selector for a repeater element.
+ * @return {void}
+ */
+ save: function( $repeater ) {
+ $repeater.trigger( 'llms-repeater-before-save', { $el: $repeater } );
+ this.store( $repeater, 'save' );
+ },
+
+ /**
+ * Convert a repeater element into an array of objects that can be saved to the database
+ *
+ * @since 3.11.0
+ *
+ * @param {Object} $repeater A jQuery selector for a repeater element.
+ * @return {void}
+ */
+ serialize: function( $repeater ) {
+
+ var rows = [];
+
+ $repeater.find( '.llms-repeater-rows .llms-repeater-row' ).each( function() {
+
+ var obj = {};
+
+ // Easy...
+ $( this ).find( 'input[name^="_llms"], select[name^="_llms"]' ).each( function() {
+ obj[ $( this ).attr( 'name' ) ] = $( this ).val();
+ } );
+
+ // Check if the textarea is a tinyMCE instance.
+ $( this ).find( 'textarea[name^="_llms"]' ).each( function() {
+
+ var name = $( this ).attr( 'name' );
+
+ // If it is an editor.
+ if ( tinyMCE.editors[ name ] ) {
+ obj[ name ] = tinyMCE.editors[ name ].getContent();
+ // Grab the val of the textarea.
+ } else {
+ obj[ name ] = $( this ).val();
+ }
+
+ } );
+
+ rows.push( obj );
+
+ } );
+
+ return rows;
+
+ },
+
+ /**
+ * AJAX method for interacting with the repeater's handler on the server
+ *
+ * @since 3.11.0
+ *
+ * @param {Object} $repeater jQuery selector for the repeater element.
+ * @param {string} action Action to call [save|load].
+ * @param {Function} cb Callback function.
+ * @return {void}
+ */
+ store: function( $repeater, action, cb ) {
+
+ cb = cb || function(){};
+ var self = this,
+ data = {
+ action: $repeater.find( '.llms-repeater-field-handler' ).val(),
+ store_action: action,
+ };
+
+ if ( 'save' === action ) {
+ data.rows = self.serialize( $repeater );
+ }
+
+ LLMS.Ajax.call( {
+ data: data,
+ beforeSend: function() {
+
+ $repeater.addClass( 'processing' );
+ LLMS.Spinner.start( $repeater );
+
+ },
+ success: function( r ) {
+
+ cb( r );
+ LLMS.Spinner.stop( $repeater );
+ $repeater.removeClass( 'processing' );
+
+ }
+
+ } );
+
+ }
+
+ };
+ this.repeaters.init();
+
+
+ /**
+ * Initialize
+ *
+ * @since 3.0.0
+ * @since 3.13.0 Unknown.
+ * @since 4.19.0 Add `this.bind_mce_fixes()`.
+ * @since 5.3.0 Bind editables when editable buttons are present in addition to anchors.
+ *
+ * @return void
+ */
+ this.init = function() {
+
+ var self = this;
+
+ $( '.llms-select2-post' ).each( function() {
+ self.post_select( $( this ) );
+ } );
+
+ $( '.llms-collapsible-group' ).llmsCollapsible();
+
+ this.bind_tabs();
+
+ this.bind_mce_fixes();
+
+ // bind everything better and less repetitively...
+ var bindings = [
+ {
+ selector: $( '.llms-datepicker' ),
+ func: 'bind_datepickers',
+ },
+ {
+ selector: $( '.llms-select2' ),
+ func: function( $selector ) {
+ $selector.llmsSelect2( {
+ width: '100%',
+ } );
+ },
+ },
+ {
+ selector: $( '.llms-select2-student' ),
+ func: function( $selector ) {
+ $selector.llmsStudentsSelect2();
+ }
+ },
+ {
+ selector: $( 'input[type="checkbox"][data-controls]' ),
+ func: 'bind_cb_controllers',
+ },
+ {
+ selector: $( '[data-is-controller]' ),
+ func: 'bind_controllers',
+ },
+ {
+ selector: $( '.llms-table' ),
+ func: 'bind_tables',
+ },
+ {
+ selector: $( '.llms-merge-code-wrapper' ),
+ func: 'bind_merge_code_buttons',
+ },
+ {
+ selector: $( 'a.llms-editable, button.llms-editable' ),
+ func: 'bind_editables',
+ },
+ ];
+
+ // bind all the bindables but don't bind things in repeaters
+ $.each( bindings, function( index, obj ) {
+
+ if ( obj.selector.length ) {
+
+ // reduce the selector to exclude items in a repeater
+ var reduced = obj.selector.filter( function() {
+ return ( 0 === $( this ).closest( '.llms-repeater-model' ).length );
+ } );
+
+ // bind by string
+ if ( 'string' === typeof obj.func ) {
+ self[ obj.func ]( reduced );
+ }
+ // bind by an anonymous function
+ else if ( 'function' === typeof obj.func ) {
+ obj.func( reduced );
+ }
+
+ }
+
+ } );
+
+ // if a post type is set & a bind exists for it, bind it
+ if ( window.llms.post.post_type ) {
+
+ var func = 'bind_' + window.llms.post.post_type;
+
+ if ( 'function' === typeof this[func] ) {
+
+ this[func]();
+
+ }
+
+ }
+
+ };
+
+ /**
+ * Bind checkboxes that control the display of other elements
+ *
+ * @param obj $controllers jQuery selector for checkboxes to be bound as checkbox controllers
+ * @return void
+ * @since 3.0.0
+ * @version 3.11.0
+ */
+ this.bind_cb_controllers = function( $controllers ) {
+
+ $controllers = $controllers || $( 'input[type="checkbox"][data-controls]' );
+
+ $controllers.each( function() {
+
+ var $cb = $( this ),
+ $controlled = $( $cb.attr( 'data-controls' ) ).closest( '.llms-mb-list' );
+
+ $cb.on( 'change', function() {
+
+ if ( $( this ).is( ':checked' ) ) {
+
+ $controlled.slideDown( 200 );
+
+ } else {
+
+ $controlled.slideUp( 200 );
+
+ }
+
+ } );
+
+ $cb.trigger( 'change' );
+
+ } );
+
+ };
+
+ /**
+ * Bind elements that control the display of other elements
+ *
+ * @param obj $controllers jQuery selector for elements to be bound as checkbox controllers
+ * @return void
+ * @since 3.0.0
+ * @version 3.11.0
+ */
+ this.bind_controllers = function( $controllers ) {
+
+ $controllers = $controllers || $( '[data-is-controller]' );
+
+ $controllers.each( function() {
+
+ var $el = $( this ),
+ $controlled = $( '[data-controller="#' + $el.attr( 'id' ) + '"]' ),
+ val;
+
+ $el.on( 'change', function() {
+
+ if ( 'checkbox' === $el.attr( 'type' ) ) {
+
+ val = $el.is( ':checked' ) ? $el.val() : 'false';
+
+ } else {
+
+ val = $el.val();
+
+ }
+
+ $controlled.each( function() {
+
+ var possible = $( this ).attr( 'data-controller-value' ),
+ vals = [];
+
+ if ( -1 !== possible.indexOf( ',' ) ) {
+
+ vals = possible.split( ',' );
+
+ } else {
+
+ vals.push( possible );
+
+ }
+
+ if ( -1 !== vals.indexOf( val ) ) {
+
+ $( this ).slideDown( 200 );
+
+ } else {
+
+ $( this ).slideUp( 200 );
+
+ }
+
+ } );
+
+ } );
+
+ $el.trigger( 'change' );
+
+ } );
+
+ };
+
+ /**
+ * Bind a single datepicker element
+ *
+ * @param obj $el jQuery selector for the input to bind the datepicker to
+ * @return void
+ * @since 3.0.0
+ * @version 3.10.0
+ */
+ this.bind_datepicker = function( $el ) {
+ var format = $el.attr( 'data-format' ) || 'mm/dd/yy',
+ maxDate = $el.attr( 'data-max-date' ) || null,
+ minDate = $el.attr( 'data-min-date' ) || null;
+ $el.datepicker( {
+ dateFormat: format,
+ maxDate: maxDate,
+ minDate: minDate,
+ } );
+ }
+
+ /**
+ * Bind all LifterLMS datepickers
+ *
+ * @param obj $datepickers jQuery selector for the elements to bind
+ * @return void
+ * @since 3.0.0
+ * @version 3.11.0
+ */
+ this.bind_datepickers = function( $datepickers ) {
+
+ var self = this;
+
+ $datepickers = $datepickers || $( '.llms-datepicker' );
+
+ $datepickers.each( function() {
+ self.bind_datepicker( $( this ) );
+ } );
+
+ };
+
+ /**
+ * Bind llms-editable metabox fields and related dom interactions
+ *
+ * @since 3.10.0
+ * @since 3.28.0 Unknown.
+ * @since 5.3.0 Bind editables when editable buttons are present in addition to anchors.
+ *
+ * @return void
+ */
+ this.bind_editables = function() {
+
+ var self = this;
+
+ function make_editable( $field ) {
+
+ var $label = $field.find( 'label' ).clone(),
+ name = $field.attr( 'data-llms-editable' ),
+ type = $field.attr( 'data-llms-editable-type' ),
+ required = $field.attr( 'data-llms-editable-required' ) || 'no',
+ val = $field.attr( 'data-llms-editable-value' ),
+ $input;
+
+ required = ( 'yes' === required ) ? ' required="required"' : '';
+
+ if ( 'select' === type ) {
+
+ var options = JSON.parse( $field.attr( 'data-llms-editable-options' ) ),
+ selected;
+
+ $input = $( ' ' );
+ for ( var key in options ) {
+ selected = val === key ? ' selected="selected"' : '';
+ $input.append( '' + options[ key ] + ' ' );
+ }
+
+ } else if ( 'datetime' === type ) {
+
+ $input = $( '
' );
+
+ val = JSON.parse( val );
+ var format = $field.attr( 'data-llms-editable-date-format' ) || '',
+ min_date = $field.attr( 'data-llms-editable-date-min' ) || '',
+ max_date = $field.attr( 'data-llms-editable-date-max' ) || '';
+
+ $picker = $( ' ' );
+ self.bind_datepicker( $picker );
+ $input.append( $picker );
+ $input.append( '@ ' );
+
+ $input.append( ' ' );
+ $input.append( ': ' );
+ $input.append( ' ' );
+
+ } else {
+
+ $input = $( ' ' );
+ }
+
+ $field.empty().append( $label ).append( $input );
+ if ( 'select' === type ) {
+ setTimeout( function() {
+ $input.trigger( 'change' );
+ }, 100 );
+ }
+
+ };
+
+ $( 'a.llms-editable, button.llms-editable' ).on( 'click', function( e ) {
+
+ e.preventDefault();
+
+ var $btn = $( this ),
+ $fields;
+
+ if ( $btn.attr( 'data-fields' ) ) {
+ $fields = $( $btn.attr( 'data-fields' ) );
+ } else {
+ $fields = $btn.closest( '.llms-metabox-section' ).find( '[data-llms-editable]' );
+ }
+
+ $btn.remove();
+
+ $fields.each( function() {
+ make_editable( $( this ) );
+ } );
+
+ } );
+
+ };
+
+ /**
+ * Bind Engagement post type JS
+ *
+ * @return void
+ * @since 3.1.0
+ * @version 3.1.0
+ */
+ this.bind_llms_engagement = function() {
+
+ var self = this;
+
+ // when the engagement type changes we need to do some things to the UI
+ $( '#_llms_engagement_type' ).on( 'change', function() {
+
+ $( '#_llms_engagement' ).trigger( 'llms-engagement-type-change', $( this ).val() );
+
+ } );
+
+ // custom trigger when called when the engagement type changes
+ $( '#_llms_engagement' ).on( 'llms-engagement-type-change', function( e, engagement_type ) {
+
+ var $select = $( this );
+
+ switch ( engagement_type ) {
+
+ /**
+ * core engagements related to a CPT
+ */
+ case 'achievement':
+ case 'certificate':
+ case 'email':
+
+ var cpt = 'llms_' + engagement_type;
+
+ $select.val( null ).attr( 'data-post-type', cpt ).trigger( 'change' );
+ self.post_select( $select );
+
+ break;
+
+ /**
+ * Allow other plugins and developers to hook into the engagement type change action
+ */
+ default:
+
+ $select.trigger( 'llms-engagement-type-change-external', engagement_type );
+
+ }
+
+ } );
+
+ };
+
+ /**
+ * Actions for memberships
+ *
+ * @since 3.0.0
+ * @since 3.30.0 Made autoenroll table sortable, added AJAX save for adding new courses.
+ * @version 3.30.0
+ *
+ * @return void
+ */
+ this.bind_llms_membership = function() {
+
+ var $table = $( '.llms-mb-list._llms_content_table' );
+
+ /**
+ * Hide/Show empty message header row depending on the number of rows in the tbody
+ *
+ * @since 3.30.0
+ * @version 3.30.0
+ *
+ * @return void
+ */
+ function toggle_header_row() {
+
+ var $rows = $table.find( 'tbody tr' );
+ if ( 1 === $rows.length ) {
+ $rows.first().show();
+ } else {
+ $rows.first().hide();
+ }
+ }
+
+ /**
+ * Retrieve an array of course IDs in the table.
+ *
+ * @since 3.30.0
+ * @version 3.30.0
+ *
+ * @return array
+ */
+ function get_course_ids() {
+
+ var courses = [];
+ $table.find( 'tbody tr a[href="#llms-course-remove"]' ).each( function() {
+ courses.push( $( this ).attr( 'data-id' ) );
+ } );
+ return courses;
+
+ }
+
+ // On init, toggle the header row visibility.
+ toggle_header_row();
+
+ // remove auto-enroll course
+ $table.on( 'click', 'a[href="#llms-course-remove"]', function( e ) {
+
+ e.preventDefault();
+
+ var $el = $( this ),
+ $row = $el.closest( 'tr' ),
+ $container = $el.closest( '.llms-mb-list' );
+
+ LLMS.Spinner.start( $container );
+
+ window.LLMS.Ajax.call( {
+ data: {
+ action: 'membership_remove_auto_enroll_course',
+ course_id: $el.attr( 'data-id' ),
+ },
+ beforeSend: function() {
+
+ $container.find( 'p.error' ).remove();
+
+ },
+ success: function( r ) {
+
+ if ( r.success ) {
+
+ $row.fadeOut( 200 );
+ setTimeout( function() {
+ $row.remove();
+ toggle_header_row();
+ }, 400 );
+
+ } else {
+
+ $container.prepend( '' + r.message + '
' );
+
+ }
+
+ LLMS.Spinner.stop( $container );
+ },
+ } );
+
+ } );
+
+ // bulk enroll all members into a course
+ $table.on( 'click', 'a[href="#llms-course-bulk-enroll"]', function( e ) {
+
+ e.preventDefault();
+
+ var $el = $( this ),
+ $row = $el.closest( 'tr' ),
+ $container = $el.closest( '.llms-mb-list' );
+
+ if ( ! window.confirm( LLMS.l10n.translate( 'Click okay to enroll all active members into the selected course. Enrollment will take place in the background and you may leave your site after confirmation. This action cannot be undone!' ) ) ) {
+ return;
+ }
+
+ LLMS.Spinner.start( $container );
+
+ window.LLMS.Ajax.call( {
+ data: {
+ action: 'bulk_enroll_membership_into_course',
+ course_id: $el.attr( 'data-id' ),
+ },
+ beforeSend: function() {
+ $container.find( 'p.error' ).remove();
+ },
+ success: function( r ) {
+
+ if ( r.success ) {
+
+ $el.replaceWith( '' + r.data.message + ' ' );
+
+ } else {
+
+ $container.prepend( '' + r.message + '
' );
+
+ }
+
+ LLMS.Spinner.stop( $container );
+ },
+ } );
+
+ } );
+
+ // Add an item to the autoenroll table on select.
+ $( '#_llms_auto_enroll' ).on( 'change', function() {
+
+ var id = $( this ).val(),
+ title = $( this ).find( 'option[value="' + $( this ).val() + '"]' ).text();
+
+ // If there's no ID
+ if ( ! id ) {
+ return;
+ // Prevent Dupes.
+ } else if ( -1 !== get_course_ids().indexOf( id ) ) {
+
+ alert( LLMS.l10n.replace( '"%s" is already in the course list.', { '%s': title } ) )
+
+ // reset the select field.
+ $( this ).val( '' ).trigger( 'change' );
+
+ return;
+
+ }
+
+ var $table = $( '.llms-mb-list._llms_content_table' );
+ $tr = $( ' ' );
+
+ $tr.append( ' ' );
+ $tr.append( '' + title + ' ' );
+ $tr.append( '' + LLMS.l10n.translate( 'Remove course' ) + ' ' + LLMS.l10n.translate( 'Enroll All Members' ) + ' ' );
+
+ // append the element to the table.
+ $table.find( 'table tbody' ).append( $tr );
+
+ // reset the select field.
+ $( this ).val( '' ).trigger( 'change' );
+
+ // Show the header row.
+ toggle_header_row();
+
+ // trigger a save event.
+ $table.trigger( 'llms-save-autoenroll-courses' );
+
+ } );
+
+ // Make autoenrollment table sortable.
+ $table.find( 'table tbody' ).sortable( {
+ handle: '.llms-drag-handle',
+ // Save order on stop.
+ stop: function( event, ui ) {
+ ui.item.closest( '.llms-mb-list' ).trigger( 'llms-save-autoenroll-courses' );
+ },
+ } );
+
+ // Save courses & course order.
+ $table.on( 'llms-save-autoenroll-courses', function() {
+
+ var $container = $( this );
+
+ LLMS.Spinner.start( $container );
+
+ window.LLMS.Ajax.call( {
+ data: {
+ action: 'llms_save_membership_autoenroll_courses',
+ courses: get_course_ids(),
+ },
+ error: function( jqxhr, code, error_msg ) {
+ alert( error_msg );
+ },
+ complete: function() {
+ LLMS.Spinner.stop( $container );
+ },
+ } );
+
+ } );
+
+ };
+
+ /**
+ * Actions for ORDERS
+ *
+ * @return void
+ * @since 3.0.0
+ * @version 3.28.0
+ */
+ this.bind_llms_order = function() {
+
+ $( 'button[name="llms-refund-toggle"]' ).on( 'click', function() {
+
+ var $btn = $( this ),
+ $row = $btn.closest( 'tr' ),
+ txn_id = $row.attr( 'data-transaction-id' ),
+ refundable_amount = $btn.attr( 'data-refundable' ),
+ gateway_supports = ( '1' === $btn.attr( 'data-gateway-supports' ) ) ? true : false,
+ gateway_title = $btn.attr( 'data-gateway' ),
+ $new_row = $( '#llms-txn-refund-model .llms-txn-refund-form' ).clone(),
+ $gateway_btn = $new_row.find( '.gateway-btn' );
+
+ // configure and add the form
+ if ( 'remove' !== $btn.attr( 'data-action' ) ) {
+
+ $btn.text( LLMS.l10n.translate( 'Cancel' ) );
+ $btn.attr( 'data-action', 'remove' );
+ $new_row.find( 'input' ).removeAttr( 'disabled' );
+ $new_row.find( 'input[name="llms_refund_amount"]' ).attr( 'max', refundable_amount );
+ $new_row.find( 'input[name="llms_refund_txn_id"]' ).val( txn_id );
+
+ if ( gateway_supports ) {
+ $gateway_btn.find( '.llms-gateway-title' ).text( gateway_title );
+ $gateway_btn.show();
+ }
+
+ $row.after( $new_row );
+
+ } else {
+
+ $btn.text( LLMS.l10n.translate( 'Refund' ) );
+ $btn.attr( 'data-action', '' );
+ $row.next( 'tr' ).remove();
+
+ }
+
+ } );
+
+ $( 'button[name="llms-manual-txn-toggle"]' ).on( 'click', function() {
+
+ var $btn = $( this ),
+ $row = $btn.closest( 'tr' ),
+ $new_row = $( '#llms-manual-txn-model .llms-manual-txn-form' ).clone();
+
+ // configure and add the form
+ if ( 'remove' !== $btn.attr( 'data-action' ) ) {
+
+ $btn.text( LLMS.l10n.translate( 'Cancel' ) );
+ $btn.attr( 'data-action', 'remove' );
+ $new_row.find( 'input' ).removeAttr( 'disabled' );
+
+ $row.after( $new_row );
+
+ } else {
+
+ $btn.text( LLMS.l10n.translate( 'Record a Manual Payment' ) );
+ $btn.attr( 'data-action', '' );
+ $row.next( 'tr' ).remove();
+
+ }
+
+ } );
+
+ // cache the original value when focusing on a payment gateway select
+ // used below so the original field related data can be restored when switching back to the originally selected gateway
+ $( '.llms-metabox' ).one( 'focus', '.llms-metabox-field[data-llms-editable="payment_gateway"] select', function() {
+
+ if ( ! $( this ).attr( 'data-original-value' ) ) {
+ $( this ).attr( 'data-original-value', $( this ).val() );
+ }
+
+ } );
+
+ // when selecting a new payment gateway get field data and update the dom to only display the fields
+ // supported/needed by the newly selected gateway
+ $( '.llms-metabox' ).on( 'change', '.llms-metabox-field[data-llms-editable="payment_gateway"] select', function() {
+
+ var $select = $( this ),
+ gateway = $select.val(),
+ data = JSON.parse( $select.closest( '.llms-metabox-field' ).attr( 'data-gateway-fields' ) ),
+ gateway_data = data[ gateway ];
+
+ for ( var field in gateway_data ) {
+
+ var $field = $( 'input[name="' + gateway_data[ field ].name + '"]' ),
+ $wrap = $field.closest( '.llms-metabox-field' );
+
+ // if the field is enabled show it the field and, if we're switching back to the originally selected
+ // gateway, reload the value from the dom
+ if ( gateway_data[ field ].enabled ) {
+
+ $wrap.show();
+ $field.attr( 'required', 'required' );
+ $field.removeAttr( 'disabled' );
+
+ if ( gateway === $select.attr( 'data-original-value' ) ) {
+ $field.val( $wrap.attr( 'data-llms-editable-value' ) );
+ }
+
+ // otherwise hide the field
+ // this will ensure it gets updated in the database
+ } else {
+
+ // always clear the value when switching
+ // ensures that outdated data is removed from the DB
+ $field.attr( 'value', '' );
+
+ $field.removeAttr( 'required' );
+ // $field.attr( 'disabled', 'disabled' );
+ $wrap.hide();
+
+ }
+
+ }
+
+ } );
+
+ };
+
+ /**
+ * Re-initializes TinyMCE Editors found within metaboxes
+ *
+ * @since 4.19.0
+ * @since 4.21.2 Improve early return dependency check.
+ * @since 7.0.1 Add `undefined` condition on early return check.
+ *
+ * @link https://github.com/gocodebox/lifterlms/issues/1553
+ * @link https://github.com/gocodebox/lifterlms/pull/1618
+ * @link https://github.com/gocodebox/lifterlms/issues/2298
+ *
+ * @return {void}
+ */
+ this.bind_mce_fixes = function() {
+
+ // We need `wp.data` to proceed.
+ if ( undefined === wp.data || [ null, undefined ].includes( wp.data.select( 'core/edit-post' ) ) ) {
+ return;
+ }
+
+ LLMS.wait_for(
+ function() {
+ return undefined !== wp.data.select( 'core/edit-post' ).getMetaBoxesPerLocation( 'normal' );
+ },
+ function() {
+
+ var shouldRun = false;
+ find = [ 'lifterlms-product', 'lifterlms-membership', 'lifterlms-course-options' ];
+ metaboxes = wp.data.select( 'core/edit-post' ).getMetaBoxesPerLocation( 'normal' );
+
+ // Determine if we should run the fixer.
+ for ( var key in metaboxes ) {
+ if ( -1 !== find.indexOf( metaboxes[ key ].id ) ) {
+ shouldRun = true;
+ break;
+ }
+ }
+
+ if ( ! shouldRun ) {
+ return;
+ }
+
+ // Fix them.
+ var toFix = {};
+
+ /**
+ * Determines if the TinyMCE instance should be fixed.
+ *
+ * @since 4.19.0
+ *
+ * @param {string} key Editor Key. This is the HTML id attribute of the textarea powering the editor instance.
+ * @return {Boolean} Returns `true` if the editor should be fixed.
+ */
+ function llmsShouldFixTinyMCEEditor( key ) {
+ return ( 'excerpt' === key || -1 !== key.indexOf( 'llms' ) || -1 !== key.indexOf( 'lifterlms' ) )
+ };
+
+ // Loop through all the loaded editors.
+ for ( var key in tinyMCE.EditorManager.editors ) {
+
+ // Mark LifterLMS editors to be fixed & de-init the editor.
+ if ( llmsShouldFixTinyMCEEditor( key ) ) {
+
+ toFix[ key ] = tinyMCE.EditorManager.get( key );
+ tinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, key );
+
+ }
+
+ }
+
+ // If we remove and re-init immediately it doesn't work, so we'll wait a bit and then re-init them all.
+ setTimeout( function() {
+ for ( var key in toFix ) {
+ tinyMCE.EditorManager.init( toFix[ key ].settings || tinyMCE.EditorManager.settings );
+ }
+ }, 500 );
+
+ }
+ );
+
+ };
+
+ /**
+ * Binds custom llms merge code buttons
+ *
+ * @return void
+ * @since 3.1.0
+ * @version 3.9.2
+ */
+ this.bind_merge_code_buttons = function( $wrappers ) {
+
+ $wrappers = $wrappers || $( '.llms-merge-code-wrapper' );
+
+ $wrappers.find( '.llms-merge-code-button' ).on( 'click', function() {
+
+ $( this ).next( '.llms-merge-codes' ).toggleClass( 'active' );
+
+ } );
+
+ $wrappers.find( '.llms-merge-codes li' ).on( 'click', function() {
+
+ var $el = $( this ),
+ $parent = $el.closest( '.llms-merge-codes' ),
+ target = $parent.attr( 'data-target' ),
+ code = $el.attr( 'data-code' );
+
+ // dealing with a tinymce instance
+ if ( -1 === target.indexOf( '#' ) ) {
+
+ var editor = window.tinymce.editors[ target ];
+ if ( editor ) {
+ editor.insertContent( code );
+ } // fallback in case we can't access the editor directly
+ else {
+ alert( LLMS.l10n.translate( 'Copy this code and paste it into the desired area' ) + ': ' + code );
+ }
+
+ }
+ // dealing with a DOM id
+ else {
+
+ $( target ).val( $( target ).val() + code );
+
+ }
+
+ $parent.removeClass( 'active' );
+
+ } );
+
+ };
+
+ /**
+ * Bind metabox tabs
+ *
+ * @return void
+ * @since 3.0.0
+ * @version 3.0.0
+ */
+ this.bind_tabs = function() {
+ $( '.llms-nav-tab-wrapper .tabs li' ).on( 'click', function() {
+
+ var $btn = $( this ),
+ $metabox = $btn.closest( '.llms-mb-container' ),
+ tab_id = $btn.attr( 'data-tab' );
+
+ $btn.siblings().removeClass( 'llms-active' );
+
+ $metabox.find( '.tab-content' ).removeClass( 'llms-active' );
+
+ $btn.addClass( 'llms-active' );
+ $( '#' + tab_id ).addClass( 'llms-active' );
+
+ } );
+ };
+
+ /**
+ * Enable WP Post Table searches for applicable select2 boxes
+ *
+ * @since 3.0.0
+ * @since 3.21.0 Unknown.
+ * @since 6.0.0 Show element at 100% width if not displaying a view button.
+ * @since 7.1.1 Fixed `home_url` for view button.
+ *
+ * @return void
+ */
+ this.post_select = function( $el ) {
+
+ var multi = 'multiple' === $el.attr( 'multiple' ),
+ noViewBtn = $el.attr( 'data-no-view-button' );
+
+ $el.llmsPostsSelect2( {
+ width: multi || noViewBtn ? '100%' : '65%',
+ } );
+
+ if ( multi || noViewBtn ) {
+ return;
+ }
+
+ // add a "View" button to see what the selected page looks like
+ var msg = LLMS.l10n.translate( 'View' ),
+ $btn = $( '' + msg + ' ' );
+ $el.next( '.select2' ).after( $btn );
+
+ $el.on( 'change', function() {
+ var id = $( this ).val();
+ if ( id ) {
+ $btn.attr( 'href', window.llms.home_url + '/?p=' + id ).show();
+ } else {
+ $btn.hide();
+ }
+ } ).trigger( 'change' );
+
+ };
+
+ /**
+ * Bind dom events for .llms-tables
+ *
+ * @return void
+ * @since 3.0.0
+ * @version 3.0.0
+ */
+ this.bind_tables = function() {
+
+ $( '.llms-table button[name="llms-expand-table"]' ).on( 'click', function() {
+
+ var $btn = $( this ),
+ $table = $btn.closest( '.llms-table' )
+
+ // switch the text on the button if alt text is found
+ if ( $btn.attr( 'data-text' ) ) {
+ var text = $btn.text();
+ $btn.text( $btn.attr( 'data-text' ) );
+ $btn.attr( 'data-text', text );
+ }
+
+ // switch classes on all expandable elements
+ $table.find( '.expandable' ).each( function() {
+
+ if ( $( this ).hasClass( 'closed' ) ) {
+ $( this ).addClass( 'opened' ).removeClass( 'closed' );
+ } else {
+ $( this ).addClass( 'closed' ).removeClass( 'opened' );
+ }
+
+ } );
+
+ } );
+
+ };
+
+ // go
+ this.init();
+
+ };
+
+ // initialize the object
+ window.llms.metaboxes = new Metaboxes();
+
+} )( jQuery );
+
+//# sourceMappingURL=../maps/js/llms-metaboxes.js.map
diff --git a/assets/js/llms-metaboxes.min.js b/assets/js/llms-metaboxes.min.js
new file mode 100644
index 0000000000..8baa72114e
--- /dev/null
+++ b/assets/js/llms-metaboxes.min.js
@@ -0,0 +1,2 @@
+!function(f){f(document).ready(function(){"public"===f('input[name="visibility"]:checked').val()&&f("body.post-type-llms_coupon #visibility, body.post-type-llms_voucher #visibility").hide()}),f.fn.llmsCollapsible=function(){return this.on("click",".llms-collapsible-header",function(){var e=f(this).closest(".llms-collapsible"),t=e.siblings(".llms-collapsible");e.toggleClass("opened").trigger("llms-collapsible-toggled"),e.find(".llms-collapsible-body").slideToggle(400),t.each(function(){f(this).removeClass("opened"),f(this).find(".llms-collapsible-body").slideUp(400)})}),this},window.llms=window.llms||{};window.llms.metaboxes=new function(){this.repeaters={metaboxes:this,$repeaters:null,init:function(){var e=this;e.$repeaters=f(".llms-mb-list.repeater"),e.$repeaters.length&&(LLMS.wait_for(function(){return"undefined"!=typeof tinyMCE},function(){e.load(),e.bind()}),f('#post input[type="submit"], #post-preview').on("click",function(){f(this).attr("data-llms-clicked","yes")}),f("#post").on("submit",e.handle_submit))},bind:function(){var n=this;n.$repeaters.each(function(){var a=f(this),l=a.find(".llms-repeater-rows");a.find(".llms-repeater-new-btn").on("click",function(){n.add_row(a,null,!0)}),l.sortable({handle:".llms-drag-handle",items:".llms-repeater-row",start:function(e,t){l.addClass("dragging")},stop:function(e,t){l.removeClass("dragging"),t.item.find("textarea.wp-editor-area").each(function(){var e=f(this).attr("id");tinyMCE.EditorManager.execCommand("mceRemoveEditor",!0,e),tinyMCE.EditorManager.execCommand("mceAddEditor",!0,e)}),n.save(a)}}),a.on("click",".llms-repeater-remove",function(e){e.stopPropagation();e=f(this).closest(".llms-repeater-row");window.confirm(LLMS.l10n.translate("Are you sure you want to delete this row? This cannot be undone."))&&(e.remove(),setTimeout(function(){n.save(a)},1))})})},add_row:function(e,t,a){var l=this,n=e.find(".llms-repeater-rows"),i=e.find(".llms-repeater-model"),s=l.clone_row(i.find(".llms-repeater-row")),i=e.find(".llms-repeater-row").length,i=l.reindex(s,i);t&&f.each(t,function(e,t){var a=s.find('[name^="'+e+'"]');a.hasClass("llms-select2-student")?(f.each(t,function(e,t){a.append(''+t.title+" ")}),a.trigger("change")):a.val(t)}),setTimeout(function(){l.bind_row(s)},1),n.append(s),a&&s.find(".llms-collapsible-header").trigger("click"),tinyMCE.EditorManager.execCommand("mceAddEditor",!0,i),e.trigger("llms-new-repeater-row",{$row:s,data:t})},bind_row:function(e){this.bind_row_header(e),e.find(".llms-select2").llmsSelect2({width:"100%"}),e.find(".llms-select2-student").llmsStudentsSelect2(),this.metaboxes.bind_datepickers(e.find(".llms-datepicker")),this.metaboxes.bind_controllers(e.find("[data-is-controller]"))},bind_row_header:function(e){var t=e.find(".llms-repeater-title"),e=e.find(".llms-collapsible-header-title-field");t.attr("data-default",t.text()),e.on("keyup focusout blur",function(){var e=(e=f(this).val())||t.attr("data-default");t.text(e)}).trigger("keyup")},clone_row:function(e){return($ed=e.find(".editor textarea")).length&&tinyMCE.EditorManager.execCommand("mceRemoveEditor",!0,$ed.attr("id")),e.clone()},handle_submit:function(e){var t,a,l,n=f('#post [data-llms-clicked="yes"]'),i=n.parent().find(".spinner");n.is("#post-preview")?n.removeAttr("data-llms-clicked"):(e.preventDefault(),f('#post input[type="submit"]').addClass("disabled").attr("disabled","disabled"),i.addClass("is-active"),t=window.llms.metaboxes.repeaters,a=0,t.$repeaters.each(function(){t.save(f(this))}),l=setInterval(function(){59<=a||!f(".llms-mb-list.repeater.processing").length?(clearInterval(l),f("#post").off("submit",this.handle_submit),i.removeClass("is-active"),n.removeClass("disabled").removeAttr("disabled").trigger("click")):a++},1e3))},load:function(){var l=this;l.$repeaters.each(function(){var a=f(this);a.hasClass("is-loaded")||a.hasClass("processing")||l.store(a,"load",function(e){a.addClass("is-loaded"),f.each(e.data,function(e,t){l.add_row(a,t,!1)}),a.find(".llms-repeater-rows .llms-repeater-row").each(function(){l.bind_row(f(this))})})})},reindex:function(e,a){var l=e.attr("data-row-order"),t=e.find(".llms-mb-list.editor textarea");function n(e,t){e.each(function(){var e=f(this).attr(t);f(this).attr(t,e.replace(l,a))})}return tinyMCE.EditorManager.execCommand("mceRemoveEditor",!0,t.attr("id")),e.attr("data-row-order",a),n(e,"data-row-order"),n(e.find("button.insert-media"),"data-editor"),n(e.find('input[name^="_llms"], textarea[name^="_llms"], select[name^="_llms"]'),"id"),n(e.find('input[name^="_llms"], textarea[name^="_llms"], select[name^="_llms"]'),"name"),n(e.find("[data-controller]"),"data-controller"),n(e.find("[data-controller]"),"data-controller"),n(e.find("button.wp-switch-editor"),"data-wp-editor-id"),n(e.find("button.wp-switch-editor"),"id"),n(e.find(".wp-editor-tools"),"id"),n(e.find(".wp-editor-container"),"id"),t.attr("id")},save:function(e){e.trigger("llms-repeater-before-save",{$el:e}),this.store(e,"save")},serialize:function(e){var a=[];return e.find(".llms-repeater-rows .llms-repeater-row").each(function(){var t={};f(this).find('input[name^="_llms"], select[name^="_llms"]').each(function(){t[f(this).attr("name")]=f(this).val()}),f(this).find('textarea[name^="_llms"]').each(function(){var e=f(this).attr("name");tinyMCE.editors[e]?t[e]=tinyMCE.editors[e].getContent():t[e]=f(this).val()}),a.push(t)}),a},store:function(t,e,a){a=a||function(){};var l={action:t.find(".llms-repeater-field-handler").val(),store_action:e};"save"===e&&(l.rows=this.serialize(t)),LLMS.Ajax.call({data:l,beforeSend:function(){t.addClass("processing"),LLMS.Spinner.start(t)},success:function(e){a(e),LLMS.Spinner.stop(t),t.removeClass("processing")}})}},this.repeaters.init(),this.init=function(){var l=this,e=(f(".llms-select2-post").each(function(){l.post_select(f(this))}),f(".llms-collapsible-group").llmsCollapsible(),this.bind_tabs(),this.bind_mce_fixes(),[{selector:f(".llms-datepicker"),func:"bind_datepickers"},{selector:f(".llms-select2"),func:function(e){e.llmsSelect2({width:"100%"})}},{selector:f(".llms-select2-student"),func:function(e){e.llmsStudentsSelect2()}},{selector:f('input[type="checkbox"][data-controls]'),func:"bind_cb_controllers"},{selector:f("[data-is-controller]"),func:"bind_controllers"},{selector:f(".llms-table"),func:"bind_tables"},{selector:f(".llms-merge-code-wrapper"),func:"bind_merge_code_buttons"},{selector:f("a.llms-editable, button.llms-editable"),func:"bind_editables"}]);f.each(e,function(e,t){var a;t.selector.length&&(a=t.selector.filter(function(){return 0===f(this).closest(".llms-repeater-model").length}),"string"==typeof t.func?l[t.func](a):"function"==typeof t.func&&t.func(a))}),window.llms.post.post_type&&"function"==typeof this[e="bind_"+window.llms.post.post_type]&&this[e]()},this.bind_cb_controllers=function(e){(e=e||f('input[type="checkbox"][data-controls]')).each(function(){var e=f(this),t=f(e.attr("data-controls")).closest(".llms-mb-list");e.on("change",function(){f(this).is(":checked")?t.slideDown(200):t.slideUp(200)}),e.trigger("change")})},this.bind_controllers=function(e){(e=e||f("[data-is-controller]")).each(function(){var a,e=f(this),t=f('[data-controller="#'+e.attr("id")+'"]');e.on("change",function(){a="checkbox"!==e.attr("type")||e.is(":checked")?e.val():"false",t.each(function(){var e=f(this).attr("data-controller-value"),t=[];-1!==e.indexOf(",")?t=e.split(","):t.push(e),-1!==t.indexOf(a)?f(this).slideDown(200):f(this).slideUp(200)})}),e.trigger("change")})},this.bind_datepicker=function(e){var t=e.attr("data-format")||"mm/dd/yy",a=e.attr("data-max-date")||null,l=e.attr("data-min-date")||null;e.datepicker({dateFormat:t,maxDate:a,minDate:l})},this.bind_datepickers=function(e){var t=this;(e=e||f(".llms-datepicker")).each(function(){t.bind_datepicker(f(this))})},this.bind_editables=function(){var u=this;f("a.llms-editable, button.llms-editable").on("click",function(e){e.preventDefault();var e=f(this),t=e.attr("data-fields")?f(e.attr("data-fields")):e.closest(".llms-metabox-section").find("[data-llms-editable]");e.remove(),t.each(function(){var e,t,a,l=f(this),n=l.find("label").clone(),i=l.attr("data-llms-editable"),s=l.attr("data-llms-editable-type"),r=l.attr("data-llms-editable-required")||"no",o=l.attr("data-llms-editable-value"),r="yes"===r?' required="required"':"";if("select"===s){var d,c=JSON.parse(l.attr("data-llms-editable-options")),m=f(' ");for(d in c)m.append('"+c[d]+" ")}else"datetime"===s?(m=f('
'),o=JSON.parse(o),e=l.attr("data-llms-editable-date-format")||"",t=l.attr("data-llms-editable-date-min")||"",a=l.attr("data-llms-editable-date-max")||"",$picker=f(' '),u.bind_datepicker($picker),m.append($picker),m.append("@ "),m.append(' '),m.append(": "),m.append(' ')):m=f(' ");l.empty().append(n).append(m),"select"===s&&setTimeout(function(){m.trigger("change")},100)})})},this.bind_llms_engagement=function(){var n=this;f("#_llms_engagement_type").on("change",function(){f("#_llms_engagement").trigger("llms-engagement-type-change",f(this).val())}),f("#_llms_engagement").on("llms-engagement-type-change",function(e,t){var a=f(this);switch(t){case"achievement":case"certificate":case"email":var l="llms_"+t;a.val(null).attr("data-post-type",l).trigger("change"),n.post_select(a);break;default:a.trigger("llms-engagement-type-change-external",t)}})},this.bind_llms_membership=function(){var t=f(".llms-mb-list._llms_content_table");function l(){var e=t.find("tbody tr");1===e.length?e.first().show():e.first().hide()}function n(){var e=[];return t.find('tbody tr a[href="#llms-course-remove"]').each(function(){e.push(f(this).attr("data-id"))}),e}l(),t.on("click",'a[href="#llms-course-remove"]',function(e){e.preventDefault();var e=f(this),t=e.closest("tr"),a=e.closest(".llms-mb-list");LLMS.Spinner.start(a),window.LLMS.Ajax.call({data:{action:"membership_remove_auto_enroll_course",course_id:e.attr("data-id")},beforeSend:function(){a.find("p.error").remove()},success:function(e){e.success?(t.fadeOut(200),setTimeout(function(){t.remove(),l()},400)):a.prepend(''+e.message+"
"),LLMS.Spinner.stop(a)}})}),t.on("click",'a[href="#llms-course-bulk-enroll"]',function(e){e.preventDefault();var t=f(this),a=(t.closest("tr"),t.closest(".llms-mb-list"));window.confirm(LLMS.l10n.translate("Click okay to enroll all active members into the selected course. Enrollment will take place in the background and you may leave your site after confirmation. This action cannot be undone!"))&&(LLMS.Spinner.start(a),window.LLMS.Ajax.call({data:{action:"bulk_enroll_membership_into_course",course_id:t.attr("data-id")},beforeSend:function(){a.find("p.error").remove()},success:function(e){e.success?t.replaceWith(''+e.data.message+" "):a.prepend(''+e.message+"
"),LLMS.Spinner.stop(a)}}))}),f("#_llms_auto_enroll").on("change",function(){var e,t=f(this).val(),a=f(this).find('option[value="'+f(this).val()+'"]').text();t&&(-1!==n().indexOf(t)?(alert(LLMS.l10n.replace('"%s" is already in the course list.',{"%s":a})),f(this).val("").trigger("change")):(e=f(".llms-mb-list._llms_content_table"),($tr=f(" ")).append(' '),$tr.append(''+a+" "),$tr.append(''+LLMS.l10n.translate("Remove course")+' '+LLMS.l10n.translate("Enroll All Members")+" "),e.find("table tbody").append($tr),f(this).val("").trigger("change"),l(),e.trigger("llms-save-autoenroll-courses")))}),t.find("table tbody").sortable({handle:".llms-drag-handle",stop:function(e,t){t.item.closest(".llms-mb-list").trigger("llms-save-autoenroll-courses")}}),t.on("llms-save-autoenroll-courses",function(){var e=f(this);LLMS.Spinner.start(e),window.LLMS.Ajax.call({data:{action:"llms_save_membership_autoenroll_courses",courses:n()},error:function(e,t,a){alert(a)},complete:function(){LLMS.Spinner.stop(e)}})})},this.bind_llms_order=function(){f('button[name="llms-refund-toggle"]').on("click",function(){var e=f(this),t=e.closest("tr"),a=t.attr("data-transaction-id"),l=e.attr("data-refundable"),n="1"===e.attr("data-gateway-supports"),i=e.attr("data-gateway"),s=f("#llms-txn-refund-model .llms-txn-refund-form").clone(),r=s.find(".gateway-btn");"remove"!==e.attr("data-action")?(e.text(LLMS.l10n.translate("Cancel")),e.attr("data-action","remove"),s.find("input").removeAttr("disabled"),s.find('input[name="llms_refund_amount"]').attr("max",l),s.find('input[name="llms_refund_txn_id"]').val(a),n&&(r.find(".llms-gateway-title").text(i),r.show()),t.after(s)):(e.text(LLMS.l10n.translate("Refund")),e.attr("data-action",""),t.next("tr").remove())}),f('button[name="llms-manual-txn-toggle"]').on("click",function(){var e=f(this),t=e.closest("tr"),a=f("#llms-manual-txn-model .llms-manual-txn-form").clone();"remove"!==e.attr("data-action")?(e.text(LLMS.l10n.translate("Cancel")),e.attr("data-action","remove"),a.find("input").removeAttr("disabled"),t.after(a)):(e.text(LLMS.l10n.translate("Record a Manual Payment")),e.attr("data-action",""),t.next("tr").remove())}),f(".llms-metabox").one("focus",'.llms-metabox-field[data-llms-editable="payment_gateway"] select',function(){f(this).attr("data-original-value")||f(this).attr("data-original-value",f(this).val())}),f(".llms-metabox").on("change",'.llms-metabox-field[data-llms-editable="payment_gateway"] select',function(){var e,t=f(this),a=t.val(),l=JSON.parse(t.closest(".llms-metabox-field").attr("data-gateway-fields"))[a];for(e in l){var n=f('input[name="'+l[e].name+'"]'),i=n.closest(".llms-metabox-field");l[e].enabled?(i.show(),n.attr("required","required"),n.removeAttr("disabled"),a===t.attr("data-original-value")&&n.val(i.attr("data-llms-editable-value"))):(n.attr("value",""),n.removeAttr("required"),i.hide())}})},this.bind_mce_fixes=function(){void 0===wp.data||[null,void 0].includes(wp.data.select("core/edit-post"))||LLMS.wait_for(function(){return void 0!==wp.data.select("core/edit-post").getMetaBoxesPerLocation("normal")},function(){var e=!1;for(t in find=["lifterlms-product","lifterlms-membership","lifterlms-course-options"],metaboxes=wp.data.select("core/edit-post").getMetaBoxesPerLocation("normal"))if(-1!==find.indexOf(metaboxes[t].id)){e=!0;break}if(e){var t,a,l={};for(t in tinyMCE.EditorManager.editors)"excerpt"!==(a=t)&&-1===a.indexOf("llms")&&-1===a.indexOf("lifterlms")||(l[t]=tinyMCE.EditorManager.get(t),tinyMCE.EditorManager.execCommand("mceRemoveEditor",!0,t));setTimeout(function(){for(var e in l)tinyMCE.EditorManager.init(l[e].settings||tinyMCE.EditorManager.settings)},500)}})},this.bind_merge_code_buttons=function(e){(e=e||f(".llms-merge-code-wrapper")).find(".llms-merge-code-button").on("click",function(){f(this).next(".llms-merge-codes").toggleClass("active")}),e.find(".llms-merge-codes li").on("click",function(){var e,t=f(this),a=t.closest(".llms-merge-codes"),l=a.attr("data-target"),t=t.attr("data-code");-1===l.indexOf("#")?(e=window.tinymce.editors[l])?e.insertContent(t):alert(LLMS.l10n.translate("Copy this code and paste it into the desired area")+": "+t):f(l).val(f(l).val()+t),a.removeClass("active")})},this.bind_tabs=function(){f(".llms-nav-tab-wrapper .tabs li").on("click",function(){var e=f(this),t=e.closest(".llms-mb-container"),a=e.attr("data-tab");e.siblings().removeClass("llms-active"),t.find(".tab-content").removeClass("llms-active"),e.addClass("llms-active"),f("#"+a).addClass("llms-active")})},this.post_select=function(e){var t,a="multiple"===e.attr("multiple"),l=e.attr("data-no-view-button");e.llmsPostsSelect2({width:a||l?"100%":"65%"}),a||l||(a=LLMS.l10n.translate("View"),t=f(''+a+' '),e.next(".select2").after(t),e.on("change",function(){var e=f(this).val();e?t.attr("href",window.llms.home_url+"/?p="+e).show():t.hide()}).trigger("change"))},this.bind_tables=function(){f('.llms-table button[name="llms-expand-table"]').on("click",function(){var e,t=f(this),a=t.closest(".llms-table");t.attr("data-text")&&(e=t.text(),t.text(t.attr("data-text")),t.attr("data-text",e)),a.find(".expandable").each(function(){f(this).hasClass("closed")?f(this).addClass("opened").removeClass("closed"):f(this).addClass("closed").removeClass("opened")})})},this.init()}}(jQuery);
+//# sourceMappingURL=../maps/js/llms-metaboxes.min.js.map
diff --git a/assets/js/llms-quill-wordcount.js.map b/assets/js/llms-quill-wordcount.js.map
new file mode 100644
index 0000000000..fdf91537c0
--- /dev/null
+++ b/assets/js/llms-quill-wordcount.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"js/llms-quill-wordcount.js","mappings":"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","sources":["webpack://lifterlms/./packages/quill-wordcount-module/src/create-container.js","webpack://lifterlms/./packages/quill-wordcount-module/src/format-number.js","webpack://lifterlms/./packages/quill-wordcount-module/src/get-counter-text-color.js","webpack://lifterlms/./packages/quill-wordcount-module/src/index.js","webpack://lifterlms/./packages/quill-wordcount-module/src/module.js","webpack://lifterlms/./node_modules/words-count/dist/index.js","webpack://lifterlms/webpack/bootstrap","webpack://lifterlms/webpack/runtime/compat get default export","webpack://lifterlms/webpack/runtime/define property getters","webpack://lifterlms/webpack/runtime/hasOwnProperty shorthand","webpack://lifterlms/webpack/runtime/make namespace object","webpack://lifterlms/./src/js/quill-wordcount.js"],"sourcesContent":["import formatNumber from './format-number';\n\n/**\n * Creates a new DOM node for the min or max count display.\n *\n * @since 2.0.0\n *\n * @param {string} classNameSuffix Suffix to add to the element's classname.\n * @param {string} text Text to display.\n * @param {number} limit Word count limit.\n * @return {Element} A DOM node element.\n */\nfunction createCounterNode( classNameSuffix, text, limit ) {\n\tconst node = document.createElement( 'i' );\n\n\tnode.className = `ql-wordcount-${ classNameSuffix }`;\n\n\tnode.style.opacity = '0.5';\n\tnode.style.marginRight = '10px';\n\n\tnode.innerHTML = `${ text }: ${ formatNumber( limit ) }`;\n\n\treturn node;\n}\n\n/**\n * Creates a container element to house the wordcount module UI.\n *\n * @since 2.0.0\n *\n * @param {Object} options A `WordCountModuleOptions` options object.\n * @return {Element} The container DOM node element.\n */\nexport default function( options ) {\n\tconst { l10n, min, max } = options,\n\t\tcontainer = document.createElement( 'div' );\n\n\tcontainer.className = 'ql-wordcount ql-toolbar ql-snow';\n\tcontainer.style.marginTop = '-1px';\n\tcontainer.style.fontSize = '85%';\n\n\tif ( min ) {\n\t\tcontainer.appendChild( createCounterNode( 'min', l10n.min, min ) );\n\t}\n\n\tif ( max ) {\n\t\tcontainer.appendChild( createCounterNode( 'max', l10n.max, max ) );\n\t}\n\n\treturn container;\n}\n","/**\n * Formats a number using the builtin {@see Intl.NumberFormat}.\n *\n * @since 2.0.0\n *\n * @param {number} number An integer, float, or numerical string.\n * @return {string} The formatted number string.\n */\nexport default function( number ) {\n\treturn new Intl.NumberFormat().format( number );\n}\n","/**\n * Retrieves the text-color to use to denote word count errors or warnings.\n *\n * @since 2.0.0\n *\n * @param {number} wordCount The current word count in the Quill editor instance.\n * @param {Object} options A `WordCountModuleOptions` options object.\n * @return {string} The CSS color code to use.\n */\nexport default function( wordCount, options ) {\n\tconst { min, max, colorWarning, colorError } = options;\n\n\tlet color = 'initial';\n\n\tif ( ( min && wordCount < min ) || ( max && wordCount > max ) ) {\n\t\tcolor = colorError;\n\t} else if ( max && wordCount >= max * 0.9 ) {\n\t\tcolor = colorWarning;\n\t}\n\n\treturn color;\n}\n","import wordCountModule from './module';\n\n/**\n * Registers the Word Count module with Quill.\n *\n * @since 2.0.0\n *\n * @return {boolean} Returns `true` when registered and `false` if Quill is not available.\n */\nexport default function() {\n\tconst { Quill } = window;\n\tif ( undefined === Quill ) {\n\t\treturn false;\n\t}\n\n\tQuill.register( 'modules/wordcount', wordCountModule );\n\treturn true;\n}\n","import wordsCount from 'words-count';\n\nimport createContainer from './create-container';\nimport getCounterTextColor from './get-counter-text-color';\nimport formatNumber from './format-number';\n\n/**\n * The modules options object.\n *\n * @typedef {Object} WordCountModuleOptions\n *\n * @property {?number} min The minimum required words. If `null` no minimum will be enforced.\n * @property {?number} max The maximum required words. If `null` no maximum will be enforced.\n * @property {string} colorWarning A CSS color code used when approaching the maximum word count.\n * @property {string} colorError A CSS color code used when below the minimum or above the maximum word count.\n * @property {Function} onChange Callback function invoked when the quill text changes. This function is passed\n * 3 parameters: the `quill` object, the module options object, and the current number of words.\n * @property {Object} l10n An object of language strings used in the module's UI.\n * @property {string} l10n.singular The singular unit, default \"word\".\n * @property {string} l10n.plural The plurarl unit, default \"words\".\n * @property {string} l10n.min Text to display for minimum count, default \"Minimum\".\n * @property {string} l10n.max Text to display for maximum count, default \"Maximum\".\n */\n\n/**\n * Merges default options into the supplied options ensuring all necessary options in exist in the resulting object.\n *\n * @since 2.0.0\n *\n * @param {WordCountModuleOptions} options A full or partial options object.\n * @return {WordCountModuleOptions} A full options object.\n */\nexport function setOptions( options = {} ) {\n\toptions = {\n\t\t...{\n\t\t\tmin: null,\n\t\t\tmax: null,\n\t\t\tcolorWarning: '#ff922b', // Orange.\n\t\t\tcolorError: '#e5554e', // Red.\n\t\t\tonChange: () => {},\n\t\t\tl10n: {},\n\t\t},\n\t\t...options,\n\t};\n\n\toptions.l10n = {\n\t\t...{\n\t\t\tsingular: 'word',\n\t\t\tplural: 'words',\n\t\t\tmin: 'Minimum',\n\t\t\tmax: 'Maximum',\n\t\t},\n\t\t...options.l10n,\n\t};\n\n\treturn options;\n}\n\n/**\n * The Quill Word Count Module.\n *\n * @since 2.0.0\n *\n * @param {Object} quill A `Quill` editor instance.\n * @param {WordCountModuleOptions} options A full or partial options object.\n * @return {void}\n */\nexport default function( quill, options = {} ) {\n\toptions = setOptions( options );\n\n\tconst container = createContainer( options ),\n\t\tcounter = document.createElement( 'span' );\n\n\tcounter.className = 'ql-wordcount-counter';\n\tcounter.style.float = 'right';\n\n\tcontainer.appendChild( counter );\n\n\tconst updateCounter = () => {\n\t\tconst wordCount = wordsCount( quill.getText() );\n\n\t\tcounter.style.color = getCounterTextColor( wordCount, options );\n\n\t\tconst unit = 1 === wordCount ? options.l10n.singular : options.l10n.plural;\n\t\tcounter.innerHTML = formatNumber( wordCount ) + ' ' + unit;\n\n\t\toptions.onChange( quill, options, wordCount );\n\t};\n\n\tupdateCounter();\n\n\tquill.container.parentNode.insertBefore( container, quill.container.nextSibling );\n\n\tquill.on( 'text-change', updateCounter );\n}\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"words-count\",[],t):\"object\"==typeof exports?exports[\"words-count\"]=t():e[\"words-count\"]=t()}(this,(function(){return(()=>{\"use strict\";var e={314:(e,t,r)=>{r.r(t),r.d(t,{default:()=>a,wordsCount:()=>c,wordsSplit:()=>i,wordsDetect:()=>u});var o=[\",\",\",\",\".\",\"。\",\":\",\":\",\";\",\";\",\"[\",\"]\",\"【\",\"]\",\"】\",\"{\",\"{\",\"}\",\"}\",\"(\",\"(\",\")\",\")\",\"<\",\"《\",\">\",\"》\",\"$\",\"¥\",\"!\",\"!\",\"?\",\"?\",\"~\",\"~\",\"'\",\"’\",'\"',\"“\",\"”\",\"*\",\"/\",\"\\\\\",\"&\",\"%\",\"@\",\"#\",\"^\",\"、\",\"、\",\"、\",\"、\"],n={words:[],count:0},u=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return n;var r=String(e);if(\"\"===r.trim())return n;var u=t.punctuationAsBreaker?\" \":\"\",c=t.disableDefaultPunctuation?[]:o,i=t.punctuation||[],a=c.concat(i);a.forEach((function(e){var t=new RegExp(\"\\\\\"+e,\"g\");r=r.replace(t,u)})),r=(r=(r=(r=r.replace(/[\\uFF00-\\uFFEF\\u2000-\\u206F]/g,\"\")).replace(/\\s+/,\" \")).split(\" \")).filter((function(e){return e.trim()}));var d=\"(\\\\d+)|[a-zA-ZÀ-ÿĀ-ſƀ-ɏɐ-ʯḀ-ỿЀ-ӿԀ-ԯഀ-ൿ]+|\",f=\"⺀-⼀- -〿㇀-㈀-㋿㌀-㏿㐀-㿿䀀-䶿一-俿倀-忿怀-濿瀀-翿耀-迿退-鿿豈-\",p=\"-ゟ゠-ヿㇰ-ㇿ㆐-㆟\",s=\"ᄀ-ᇿ-ꥠ-가-꿿뀀-뿿쀀-쿿퀀-ힰ-\",l=new RegExp(d+\"[\"+f+p+s+\"]\",\"g\"),v=[];return r.forEach((function(e){var t,r=[];do{(t=l.exec(e))&&r.push(t[0])}while(t);0===r.length?v.push(e):v=v.concat(r)})),{words:v,count:v.length}},c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=u(e,t),o=r.count;return o},i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=u(e,t),o=r.words;return o};const a=c}},t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}return r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r(314)})()}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import quillWordcountModule from '../../packages/quill-wordcount-module/src';\n\n/**\n * Registers the wordcount module with Quill.\n *\n * @since 6.10.0\n */\n( function() {\n\tquillWordcountModule();\n}() );\n"],"names":["formatNumber","createCounterNode","classNameSuffix","text","limit","node","document","createElement","className","style","opacity","marginRight","innerHTML","options","l10n","min","max","container","marginTop","fontSize","appendChild","number","Intl","NumberFormat","format","wordCount","colorWarning","colorError","color","wordCountModule","Quill","window","undefined","register","wordsCount","createContainer","getCounterTextColor","setOptions","arguments","length","onChange","singular","plural","quill","counter","float","updateCounter","getText","unit","parentNode","insertBefore","nextSibling","on","quillWordcountModule"],"sourceRoot":""}
\ No newline at end of file
diff --git a/assets/js/llms-spinner.js.map b/assets/js/llms-spinner.js.map
new file mode 100644
index 0000000000..123a10a296
--- /dev/null
+++ b/assets/js/llms-spinner.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"js/llms-spinner.js","mappings":"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","sources":["webpack://lifterlms/./packages/components/src/spinner/constants.js","webpack://lifterlms/./packages/components/src/spinner/index.js","webpack://lifterlms/./packages/components/src/spinner/styles.js","webpack://lifterlms/./packages/components/src/spinner/utils.js","webpack://lifterlms/external window [\"wp\",\"i18n\"]","webpack://lifterlms/webpack/bootstrap","webpack://lifterlms/webpack/runtime/compat get default export","webpack://lifterlms/webpack/runtime/define property getters","webpack://lifterlms/webpack/runtime/hasOwnProperty shorthand","webpack://lifterlms/webpack/runtime/make namespace object","webpack://lifterlms/./src/js/spinner.js"],"sourcesContent":["/**\n * Spinner wrapper element class name.\n *\n * @type {string}\n */\nexport const WRAPPER_CLASSNAME = 'llms-spinning';\n\n/**\n * Spinner element class name.\n *\n * @type {string}\n */\nexport const CLASSNAME = 'llms-spinner';\n\n/**\n * Small-sized spinner identifier / class name.\n *\n * @type {string}\n */\nexport const SIZE_SMALL = 'small';\n\n/**\n * Default-sized spinner identifier / class name.\n *\n * @type {string}\n */\nexport const SIZE_DEFAULT = 'default';\n","/* eslint-env jquery */\n\n// Internal deps.\nimport { SIZE_DEFAULT } from './constants';\nimport { create, ensureElementList, find, loadStyles } from './utils';\n\n/**\n * This module was originally included in the LifterLMS Core Javascript in the `LLMS` global object as `LLMS.Spinner`.\n *\n * It has since been relocated here as a module in the `@lifterlms/components` package. During the move it was upgraded\n * to enable usage without the requirement of passing in jQuery selectors.\n *\n * In the future, passing native jQuery selectors into any of these modules will be deprecated in favor of native/vanilla Javascript\n * Elements or selector strings that can be passed into `document.querySelector()` or `document.querySelectorAll()`.\n */\n\n/**\n * Retrieves spinner(s) inside a given element.\n *\n * If the spinner element doesn't already exist it will be created.\n *\n * @since 1.1.0\n *\n * @param {jQuery|Element|string} selector A selector to be parsed by `jQuery()`, an existing `jQuery()` selection, a DOM Element. The first spinner\n * found within the element will be returned. If none found it will be created, appended to the element, and\n * then returned.\n * @param {string} size Size or the spinner element. Accepts \"default\" (40px) or \"small\" (20px).\n * @param {boolean} useJQuery If `true`, the return value will be a jQuery selection as opposed to an Element. This is the default behavior\n * for backwards compatibility but will be removed in a future version.\n * @return {null|Element|jQuery} Returns `null` when the selector cannot be located, otherwise returns an `Element` or `jQuery` selection based on the value\n * of `useJQuery`.\n */\nexport function get( selector, size = SIZE_DEFAULT, useJQuery = true ) {\n\tloadStyles();\n\n\tconst nodeList = ensureElementList( selector );\n\tif ( ! nodeList.length ) {\n\t\treturn null;\n\t}\n\n\tconst wrapper = nodeList[ 0 ],\n\t\t// Find an existing spinner and create it if one doesn't exist.\n\t\tspinner = find( wrapper ) || create( wrapper, size );\n\n\t// Return it.\n\treturn useJQuery && typeof jQuery !== 'undefined'\n\t\t? jQuery( spinner )\n\t\t: spinner;\n}\n\n/**\n * Starts spinner(s) inside a given element or element list.\n *\n * If the spinner element doesn't already exist it will be created.\n *\n * @since 1.1.0\n *\n * @param {jQuery|Element|NodeList|string} selector A selector to be parsed by `jQuery()`, an existing `jQuery()` selection, a DOM Element, or an\n * array of DOM Elements. Each element in the list will have it's spinner started. If a spinner doesn't\n * exist within the element, it will be appended and then started.\n * @param {string} size Size or the spinner element. Accepts \"default\" (40px) or \"small\" (20px).\n * @return {void}\n */\nexport function start( selector, size = SIZE_DEFAULT ) {\n\tensureElementList( selector ).forEach( ( el ) => {\n\t\tconst spinner = get( el, size, false );\n\t\tif ( spinner ) {\n\t\t\tspinner.style.display = 'block';\n\t\t}\n\t} );\n}\n\n/**\n * Stops spinner(s) inside a given element or element list.\n *\n * @since 1.1.0\n *\n * @param {jQuery|Element|NodeList|string} selector A selector to be parsed by `jQuery()`, an existing `jQuery()` selection, a DOM Element, or an\n * array of DOM Elements. Each element in the list will have it's spinner stopped.\n * @return {void}\n */\nexport function stop( selector ) {\n\tensureElementList( selector ).forEach( ( el ) => {\n\t\tconst spinner = get( el, SIZE_DEFAULT, false );\n\t\tif ( spinner ) {\n\t\t\tspinner.style.display = 'none';\n\t\t}\n\t} );\n}\n","import { WRAPPER_CLASSNAME, CLASSNAME, SIZE_SMALL } from './constants';\n\n/**\n * CSS Styles for the components.\n *\n * @type {string}\n */\nexport const STYLES = `\n\t.${ WRAPPER_CLASSNAME } {\n\t\tbackground: rgba( 250, 250, 250, 0.7 );\n\t\tbottom: 0;\n\t\tdisplay: none;\n\t\tleft: 0;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\ttop: 0;\n\t\tz-index: 2;\n\t}\n\n\t.${ CLASSNAME } {\n\t\tanimation: llms-spinning 1.5s linear infinite;\n\t\tbox-sizing: border-box;\n\t\tborder: 4px solid #313131;\n\t\tborder-radius: 50%;\n\t\theight: 40px;\n\t\tleft: 50%;\n\t\tmargin-left: -20px;\n\t\tmargin-top: -20px;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\twidth: 40px;\n\n\t}\n\n\t.${ CLASSNAME }.${ SIZE_SMALL } {\n\t\tborder-width: 2px;\n\t\theight: 20px;\n\t\tmargin-left: -10px;\n\t\tmargin-top: -10px;\n\t\twidth: 20px;\n\t}\n\n\t@keyframes llms-spinning {\n\t\t0% {\n\t\t\ttransform: rotate( 0deg )\n\t\t}\n\t\t50% {\n\t\t\tborder-radius: 5%;\n\t\t}\n\t\t100% {\n\t\t\ttransform: rotate( 220deg) \n\t\t}\n\t}\n`;\n","// WP deps.\nimport { __ } from '@wordpress/i18n';\n\n// Internal deps.\nimport { WRAPPER_CLASSNAME, CLASSNAME, SIZE_DEFAULT } from './constants';\nimport { STYLES } from './styles';\n\n/**\n * Creates a spinner element inside the specified wrapper Element.\n *\n * @since 1.1.0\n *\n * @param {Element} wrapper DOM node to append the created spinner element to.\n * @param {string} size Spinner element size.\n * @return {Element} Returns the created spinner node.\n */\nexport function create( wrapper, size = SIZE_DEFAULT ) {\n\tconst spinner = document.createElement( 'div' ),\n\t\tloadingMsg = __( 'Loading…', 'lifterlms' );\n\n\tspinner.innerHTML = `${ loadingMsg } `;\n\tspinner.classList.add( WRAPPER_CLASSNAME );\n\n\twrapper.appendChild( spinner );\n\n\treturn spinner;\n}\n\n/**\n * Normalizes accepted selector inputs and returns a `NodeList`.\n *\n * When jQuery selection is detected, adds a console deprecation warning as well.\n *\n * @since 1.1.0\n *\n * @param {NodeList|Element|string|jQuery} selector The input selector.\n * @return {Element[]} An array of `Element` objects derived from the selector input.\n */\nexport function ensureElementList( selector ) {\n\tselector =\n\t\ttypeof selector === 'string'\n\t\t\t? document.querySelectorAll( selector )\n\t\t\t: selector;\n\n\t// Already a NodeList.\n\tif ( selector instanceof NodeList ) {\n\t\treturn Array.from( selector );\n\t}\n\n\tconst list = [];\n\tif ( selector instanceof Element ) {\n\t\tlist.push( selector );\n\t} else if ( typeof jQuery !== 'undefined' && selector instanceof jQuery ) {\n\t\tselector.toArray().forEach( ( el ) => list.push( el ) );\n\t}\n\n\treturn list;\n}\n\n/**\n * Locates an existing spinner element which is a direct child of the specified wrapper element.\n *\n * @since 1.1.0\n *\n * @param {Element} wrapper Node element for the wrapper.\n * @return {null|undefined|Element} Returns `null` if no spinners exist within the wrapper, undefined if no spinners are\n * direct descendants of the wrapper, otherwise returns the spinner element.\n */\nexport function find( wrapper ) {\n\tconst spinners = wrapper.querySelectorAll( `.${ WRAPPER_CLASSNAME }` );\n\tif ( ! spinners.length ) {\n\t\treturn null;\n\t}\n\n\treturn Array.from( spinners ).find( ( el ) => wrapper === el.parentNode );\n}\n\n/**\n * Loads CSS styles and appends them to the document's .\n *\n * Attaching CSS directly to the `get()` method means that we don't have to worry about loading CSS files (or relying on CSS) included\n * by the LifterLMS core plugin in order to use this styled component.\n *\n * @since 1.1.0\n *\n * @return {void}\n */\nexport function loadStyles() {\n\tconst STYLE_ID = 'llms-spinner-styles';\n\n\tif ( ! document.getElementById( STYLE_ID ) ) {\n\t\tconst style = document.createElement( 'style' );\n\t\tstyle.textContent = STYLES.replace( /\\n/g, '' )\n\t\t\t.replace( /\\t/g, ' ' )\n\t\t\t.replace( /\\s\\s+/g, ' ' );\n\t\tstyle.id = STYLE_ID;\n\t\tdocument.head.appendChild( style );\n\t}\n}\n","module.exports = window[\"wp\"][\"i18n\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Loading the Spinner component file(s) directly so that we don't load other unneeded dependencies (like WPElement/React).\nimport * as Spinner from '../../packages/components/src/spinner/';\n\n/**\n * Expose the components Spinner module via the global `window.LLMS.Spinner` object for backwards compatibility.\n *\n * This is automatically included in the `llms.js` script file so you likely do not need to include this script directly.\n *\n * @since 7.0.0\n */\nwindow.LLMS = window.LLMS || {};\nwindow.LLMS.Spinner = Spinner;\n"],"names":["WRAPPER_CLASSNAME","CLASSNAME","SIZE_SMALL","SIZE_DEFAULT","create","ensureElementList","find","loadStyles","get","selector","size","arguments","length","undefined","useJQuery","nodeList","wrapper","spinner","jQuery","start","forEach","el","style","display","stop","STYLES","__","document","createElement","loadingMsg","innerHTML","classList","add","appendChild","querySelectorAll","NodeList","Array","from","list","Element","push","toArray","spinners","parentNode","STYLE_ID","getElementById","textContent","replace","id","head","Spinner","window","LLMS"],"sourceRoot":""}
\ No newline at end of file
diff --git a/assets/js/llms-utils.js.map b/assets/js/llms-utils.js.map
new file mode 100644
index 0000000000..560e1f5c4b
--- /dev/null
+++ b/assets/js/llms-utils.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"js/llms-utils.js","mappings":";;;;;;;;;;;;;;;;;AAAsD;;;;;;;;;;;;;;;;ACAI;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,eAAeA,CAAEE,GAAG,EAAG;EACtC,OAAQ,GAAGD,uEAAiB,CAAEC,GAAI,CAAG,GAAE;AACxC;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASD,iBAAiBA,CAAEC,GAAG,EAAG;EACxC,OAAOA,GAAG,CAACC,QAAQ,CAAE,GAAI,CAAC,GAAGD,GAAG,CAACE,KAAK,CAAE,CAAC,EAAE,CAAC,CAAE,CAAC,GAAGF,GAAG;AACtD;;;;;;;;;;;;;;;;;;ACV6B;;;;;;;;;;;;;;;;ACAqB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,WAAWA,CAAA,EAAG;EAC7B,MAAM;IAAEC,SAAS,EAAEC,GAAG,GAAG;EAAY,CAAC,GAAGC,MAAM,CAACC,IAAI,IAAI,CAAC,CAAC;EAC1D,OAAOR,8DAAiB,CAAEM,GAAI,CAAC;AAChC;;;;;;;;;;;;;;;;;;;;;UEhBA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;ACNkD;;AAElD;AACA;AACA;AACA;AACA;AACAC,MAAM,CAACC,IAAI,GAAGD,MAAM,CAACC,IAAI,IAAI,CAAC,CAAC;AAC/BD,MAAM,CAACC,IAAI,CAACC,KAAK,GAAGA,gDAAK,C","sources":["webpack://lifterlms/./packages/utils/src/formatting/index.js","webpack://lifterlms/./packages/utils/src/formatting/trailing-slash-it.js","webpack://lifterlms/./packages/utils/src/formatting/untrailing-slash-it.js","webpack://lifterlms/./packages/utils/src/index.js","webpack://lifterlms/./packages/utils/src/url/get-admin-url.js","webpack://lifterlms/./packages/utils/src/url/index.js","webpack://lifterlms/webpack/bootstrap","webpack://lifterlms/webpack/runtime/define property getters","webpack://lifterlms/webpack/runtime/hasOwnProperty shorthand","webpack://lifterlms/webpack/runtime/make namespace object","webpack://lifterlms/./src/js/utils.js"],"sourcesContent":["export { trailingSlashIt } from './trailing-slash-it';\nexport { untrailingSlashIt } from './untrailing-slash-it';\n","import { untrailingSlashIt } from './untrailing-slash-it';\n\n/**\n * Adds a trailing forward slash to a given string.\n *\n * @since 1.0.0\n *\n * @param {string} str A string with or without a trailing forward slash.\n * @return {string} The original string with a trailing forward slash added.\n */\nexport function trailingSlashIt( str ) {\n\treturn `${ untrailingSlashIt( str ) }/`;\n}\n","/**\n * Remove trailing forward slash from a given string.\n *\n * @since 1.0.0\n *\n * @param {string} str A string with or without a trailing forward slash.\n * @return {string} The original string with the trailing forward slash removed.\n */\nexport function untrailingSlashIt( str ) {\n\treturn str.endsWith( '/' ) ? str.slice( 0, -1 ) : str;\n}\n","export * from './formatting';\nexport * from './url';\n","import { untrailingSlashIt } from '../formatting';\n\n/**\n * Retrieves the WordPress admin URL.\n *\n * This function relies on the presence of localized data from the LifterLMS plugin which is only\n * present on the WordPress admin panel. If used out of context a default partial path url, `/wp-admin`\n * will be returned.\n *\n * @since 1.0.0\n *\n * @return {string} The WP Admin URL.\n */\nexport function getAdminUrl() {\n\tconst { admin_url: url = '/wp-admin' } = window.llms || {};\n\treturn untrailingSlashIt( url );\n}\n","export { getAdminUrl } from './get-admin-url';\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import * as utils from '../../packages/utils/src';\n\n/**\n * Expose @lifterlms/utils via the global `window.llms` object.\n *\n * @since 6.0.0\n */\nwindow.llms = window.llms || {};\nwindow.llms.utils = utils;\n"],"names":["trailingSlashIt","untrailingSlashIt","str","endsWith","slice","getAdminUrl","admin_url","url","window","llms","utils"],"sourceRoot":""}
\ No newline at end of file
diff --git a/assets/maps/css/admin-importer.css.map b/assets/maps/css/admin-importer.css.map
new file mode 100644
index 0000000000..b4a9d4af37
--- /dev/null
+++ b/assets/maps/css/admin-importer.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["admin-importer.scss","admin-importer.css"],"names":[],"mappings":"AAGA;EACI,mBAAA;EACA,yBAAA;EACA,aAAA;EACA,iBAAA;EACA,2BAAA;EAAA,2BAAA;EAAA,oBAAA;EACA,yBAAA;MAAA,sBAAA;UAAA,8BAAA;EACA,yBAAA;MAAA,sBAAA;UAAA,mBAAA;ACFJ;;ADKA;EACC,cAAA;EACA,mBAAA;EACA,qBAAA;ACFD;;ADOC;EACC,oBAAA;EAAA,oBAAA;EAAA,aAAA;EACA,4BAAA;EAAA,6BAAA;MAAA,0BAAA;UAAA,sBAAA;EACA,mBAAA;MAAA,eAAA;EACA,SAAA;ACJF;ADME;EAND;IAOE,8BAAA;IAAA,6BAAA;QAAA,uBAAA;YAAA,mBAAA;ECHD;AACF;ADKE;EACC,sBAAA;EACA,yBAAA;EACA,mBAAA;EACA,yFAAA;UAAA,iFAAA;EACA,gBAAA;EACA,cAAA;EACA,gBAAA;ACHH;ADKG;EATD;IAUE,mBAAA;IACA,oBAAA;QAAA,YAAA;IACA,oBAAA;QAAA,cAAA;IACA,4BAAA;QAAA,eAAA;ECFF;AACF;ADIG;EACC,cAAA;EACA,eAAA;ACFJ;ADKG;EACC,cAAA;EACA,eAAA;EACA,gBAAA;EACA,sBAAA;ACHJ;ADMG;EACC,eAAA;EACA,gBAAA;EACA,mBAAA;ACJJ;ADOG;EACC,oBAAA;EACA,kBAAA;ACLJ;ADMI;EACC,YAAA;EACA,WAAA;EACA,kBAAA;ACJL;ADYC;EACC;IACC,oBAAA;IAAA,oBAAA;IAAA,aAAA;IACA,mBAAA;QAAA,eAAA;ECVD;AACF;ADaC;EAEE;IACC,mBAAA;QAAA,8BAAA;YAAA,0BAAA;IACA,2BAAA;ECZF;AACF;ADgBC;EAEE;IACC,mBAAA;QAAA,8BAAA;YAAA,0BAAA;IACA,2BAAA;ECfF;AACF","file":"../../css/admin-importer.css","sourcesContent":["@import \"_includes/vars\";\n@import \"_includes/mixins\";\n\n.llms-import-file-wrap {\n background: #fafafa;\n border: 1px solid #ccd0d4;\n padding: 10px;\n margin: 20px auto;\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.llms-cloud-import-help.button-link {\n\tcolor: inherit;\n\tvertical-align: top;\n\ttext-decoration: none;\n}\n\n.wrap.llms-import-export {\n\n\tul.llms-importable-courses {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tflex-wrap: wrap;\n\t\tgap: 20px;\n\n\t\t@media only screen and ( min-width: 680px ) {\n\t\t\tflex-direction: row;\n\t\t}\n\n\t\t.llms-importable-course {\n\t\t\tbackground-color: #FFF;\n\t\t\tborder: 1px solid #dedede;\n\t\t\tborder-radius: 12px;\n\t\t\tbox-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n\t\t\tlist-style: none;\n\t\t\tmargin: 20px 0;\n\t\t\toverflow: hidden;\n\n\t\t\t@media only screen and ( min-width: 680px ) {\n\t\t\t\t-webkit-box-flex: 0;\n\t\t\t\tflex-grow: 0;\n\t\t\t\tflex-shrink: 1;\n\t\t\t\tflex-basis: calc(31%);\n\t\t\t}\n\n\t\t\timg {\n\t\t\t\tdisplay: block;\n\t\t\t\tmax-width: 100%;\n\t\t\t}\n\n\t\t\th3 {\n\t\t\t\tcolor: #1d2327;\n\t\t\t\tfont-size: 20px;\n\t\t\t\tline-height: 1.5;\n\t\t\t\tmargin: 30px 20px 15px;\n\t\t\t}\n\n\t\t\tp {\n\t\t\t\tfont-size: 15px;\n\t\t\t\tline-height: 1.5;\n\t\t\t\tmargin: 0 20px 15px;\n\t\t\t}\n\n\t\t\t&.has-action-button {\n\t\t\t\tpadding-bottom: 10px;\n\t\t\t\tposition: relative;\n\t\t\t\t.button {\n\t\t\t\t\tbottom: 20px;\n\t\t\t\t\tright: 20px;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t@media only screen and (min-width: 600px) {\n\t\tul.llms-importable-courses {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t}\n\t}\n\n\t@media only screen and (min-width: 600px) and (max-width: 767px) {\n\t\tul.llms-importable-courses {\n\t\t\tli.llms-importable-course {\n\t\t\t\tflex: 1 0 calc( 50% - 20px );\n\t\t\t\tmax-width: calc( 50% - 20px );\n\t\t\t}\n\t\t}\n\t}\n\n\t@media only screen and (min-width: 768px) {\n\t\tul.llms-importable-courses {\n\t\t\tli.llms-importable-course {\n\t\t\t\tflex: 1 0 calc( 33% - 20px );\n\t\t\t\tmax-width: calc( 33% - 20px );\n\t\t\t}\n\t\t}\n\t}\n\n}\n",".llms-import-file-wrap {\n background: #fafafa;\n border: 1px solid #ccd0d4;\n padding: 10px;\n margin: 20px auto;\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.llms-cloud-import-help.button-link {\n color: inherit;\n vertical-align: top;\n text-decoration: none;\n}\n\n.wrap.llms-import-export ul.llms-importable-courses {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n gap: 20px;\n}\n@media only screen and (min-width: 680px) {\n .wrap.llms-import-export ul.llms-importable-courses {\n flex-direction: row;\n }\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course {\n background-color: #FFF;\n border: 1px solid #dedede;\n border-radius: 12px;\n box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n list-style: none;\n margin: 20px 0;\n overflow: hidden;\n}\n@media only screen and (min-width: 680px) {\n .wrap.llms-import-export ul.llms-importable-courses .llms-importable-course {\n -webkit-box-flex: 0;\n flex-grow: 0;\n flex-shrink: 1;\n flex-basis: 31%;\n }\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course img {\n display: block;\n max-width: 100%;\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course h3 {\n color: #1d2327;\n font-size: 20px;\n line-height: 1.5;\n margin: 30px 20px 15px;\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course p {\n font-size: 15px;\n line-height: 1.5;\n margin: 0 20px 15px;\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button {\n padding-bottom: 10px;\n position: relative;\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button .button {\n bottom: 20px;\n right: 20px;\n position: absolute;\n}\n@media only screen and (min-width: 600px) {\n .wrap.llms-import-export ul.llms-importable-courses {\n display: flex;\n flex-wrap: wrap;\n }\n}\n@media only screen and (min-width: 600px) and (max-width: 767px) {\n .wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course {\n flex: 1 0 calc(50% - 20px);\n max-width: calc(50% - 20px);\n }\n}\n@media only screen and (min-width: 768px) {\n .wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course {\n flex: 1 0 calc(33% - 20px);\n max-width: calc(33% - 20px);\n }\n}"],"sourceRoot":"../../scss"}
\ No newline at end of file
diff --git a/assets/maps/css/admin-importer.min.css.map b/assets/maps/css/admin-importer.min.css.map
new file mode 100644
index 0000000000..6967fcf737
--- /dev/null
+++ b/assets/maps/css/admin-importer.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["admin-importer.css"],"names":[],"mappings":"AAAA,uBACE,kBAAA,CACA,wBAAA,CACA,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,0BAAA,CACA,mBAAA,CACA,wBAAA,CACI,qBAAA,CACI,6BAAA,CACR,wBAAA,CACI,qBAAA,CACI,kBAAA,CAGV,oCACE,aAAA,CACA,kBAAA,CACA,oBAAA,CAGF,oDACE,mBAAA,CACA,mBAAA,CACA,YAAA,CACA,2BAAA,CACA,4BAAA,CACI,yBAAA,CACI,qBAAA,CACR,kBAAA,CACI,cAAA,CACJ,QAAA,CAEF,0CACE,oDACE,6BAAA,CACA,4BAAA,CACI,sBAAA,CACI,kBAAA,CAAA,CAGZ,4EACE,qBAAA,CACA,wBAAA,CACA,kBAAA,CACA,+EAAA,CACQ,uEAAA,CACR,eAAA,CACA,aAAA,CACA,eAAA,CAEF,0CACE,4EACE,kBAAA,CACA,mBAAA,CACI,WAAA,CACJ,mBAAA,CACI,aAAA,CACJ,2BAAA,CACI,cAAA,CAAA,CAGR,gFACE,aAAA,CACA,cAAA,CAEF,+EACE,aAAA,CACA,cAAA,CACA,eAAA,CACA,qBAAA,CAEF,8EACE,cAAA,CACA,eAAA,CACA,kBAAA,CAEF,8FACE,mBAAA,CACA,iBAAA,CAEF,sGACE,WAAA,CACA,UAAA,CACA,iBAAA,CAEF,0CACE,oDACE,mBAAA,CACA,mBAAA,CACA,YAAA,CACA,kBAAA,CACI,cAAA,CAAA,CAGR,gEACE,8EACE,kBAAA,CACI,6BAAA,CACI,yBAAA,CACR,0BAAA,CAAA,CAGJ,0CACE,8EACE,kBAAA,CACI,6BAAA,CACI,yBAAA,CACR,0BAAA,CAAA","file":"../../css/admin-importer.min.css","sourcesContent":[".llms-import-file-wrap {\n background: #fafafa;\n border: 1px solid #ccd0d4;\n padding: 10px;\n margin: 20px auto;\n display: -webkit-inline-box;\n display: -ms-inline-flexbox;\n display: inline-flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.llms-cloud-import-help.button-link {\n color: inherit;\n vertical-align: top;\n text-decoration: none;\n}\n\n.wrap.llms-import-export ul.llms-importable-courses {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n gap: 20px;\n}\n@media only screen and (min-width: 680px) {\n .wrap.llms-import-export ul.llms-importable-courses {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n }\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course {\n background-color: #FFF;\n border: 1px solid #dedede;\n border-radius: 12px;\n -webkit-box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n list-style: none;\n margin: 20px 0;\n overflow: hidden;\n}\n@media only screen and (min-width: 680px) {\n .wrap.llms-import-export ul.llms-importable-courses .llms-importable-course {\n -webkit-box-flex: 0;\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 1;\n flex-shrink: 1;\n -ms-flex-preferred-size: 31%;\n flex-basis: 31%;\n }\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course img {\n display: block;\n max-width: 100%;\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course h3 {\n color: #1d2327;\n font-size: 20px;\n line-height: 1.5;\n margin: 30px 20px 15px;\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course p {\n font-size: 15px;\n line-height: 1.5;\n margin: 0 20px 15px;\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button {\n padding-bottom: 10px;\n position: relative;\n}\n.wrap.llms-import-export ul.llms-importable-courses .llms-importable-course.has-action-button .button {\n bottom: 20px;\n right: 20px;\n position: absolute;\n}\n@media only screen and (min-width: 600px) {\n .wrap.llms-import-export ul.llms-importable-courses {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n }\n}\n@media only screen and (min-width: 600px) and (max-width: 767px) {\n .wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course {\n -webkit-box-flex: 1;\n -ms-flex: 1 0 calc(50% - 20px);\n flex: 1 0 calc(50% - 20px);\n max-width: calc(50% - 20px);\n }\n}\n@media only screen and (min-width: 768px) {\n .wrap.llms-import-export ul.llms-importable-courses li.llms-importable-course {\n -webkit-box-flex: 1;\n -ms-flex: 1 0 calc(33% - 20px);\n flex: 1 0 calc(33% - 20px);\n max-width: calc(33% - 20px);\n }\n}\n/*# sourceMappingURL=../maps/css/admin-importer.css.map */\n"],"sourceRoot":"../../css"}
\ No newline at end of file
diff --git a/assets/maps/css/admin-wizard.css.map b/assets/maps/css/admin-wizard.css.map
new file mode 100644
index 0000000000..1f958afbd6
--- /dev/null
+++ b/assets/maps/css/admin-wizard.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["admin-wizard.scss","admin-wizard.css","_includes/_vars.scss"],"names":[],"mappings":"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","file":"../../css/admin-wizard.css","sourcesContent":["@import \"_includes/vars\";\n\n$input_padding: 0.3em 0.6em;\n\n#wpadminbar, #adminmenumain, #wpfooter {\n\tdisplay: none;\n}\n\n#llms-setup-wizard {\n\n\tbackground-color: #F0F0F1;\n\theight: 100%;\n\tleft: 0;\n\toverflow: scroll;\n\tposition: fixed;\n\ttop: 0;\n\twidth: 100%;\n\n}\n\n.llms-setup-wrapper {\n\tmargin: 30px auto;\n\tmax-width: 640px;\n}\n\n#llms-logo {\n\ttext-align: center;\n\n\ta {\n\t\tdisplay: inline-block;\n\t}\n\n\timg {\n\t\tmax-width: 200px;\n\t}\n\n}\n\n.llms-setup-content {\n\tbackground-color: #FFF;\n\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n\tpadding: 30px;\n\n\th1, h2, h3, h4, h5, h6 {\n\t\tcolor: #3C434A;\n\t}\n\n\ta:not( .llms-button-primary ):not( .llms-button-secondary ) {\n\t\tcolor: $color-brand-blue;\n\t}\n\n\tp, li {\n\t\tcolor: #3C434A;\n\t\tfont-size: 16px;\n\t}\n\n\tp.error {\n\t\tcolor: $color-red;\n\t\tbackground: rgba($color-red,0.1);\n\t\tborder: 1px solid currentColor;\n\t\tpadding: 1em;\n\t\tborder-radius: 4px;\n\t\tmargin: 1.5em 0 0;\n\t\tfont-size: 15px;\n\t\ttext-align: left;\n\t}\n\n\tlabel {\n\t\tfont-weight: 500;\n\t}\n\n\ttable {\n\t\tborder-bottom: 1px solid #f1f1f1;\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid #f1f1f1;\n\n\t\t&:first-child {\n\t\t\tpadding-right: 10px;\n\t\t\twidth: 33%;\n\n\t\t\ta {\n\t\t\t\tfont-size: 16px;\n\t\t\t\tfont-weight: 500;\n\t\t\t}\n\n\t\t\ti {\n\t\t\t\tdisplay: block;\n\t\t\t\tfont-size: 13px;\n\t\t\t\tmargin-top: 10px;\n\n\t\t\t\ta {\n\t\t\t\t\tfont-size: 13px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsmall {\n\t\tfont-size: small;\n\t}\n\n\t.has-checkbox-field {\n\t\tdisplay: flex;\n\t\tflex-direction: row-reverse;\n\t\tjustify-content: flex-end;\n\t\talign-items: center;\n\t\talign-content: center;\n\t\tgap: 0.5em;\n\t\tfont-weight: normal;\n\t\tfont-size: 16px;\n\n\t\tinput {\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\n\tlabel {\n\t\tfont-size: 16px;\n\t\tdisplay: block;\n\t\tmargin-bottom: 0.5em;\n\t}\n\n\tsmall + label {\n\t\tmargin-top: 1em;\n\t}\n\n\t[type=text] {\n\t\twidth: 100%;\n\t\tclear: both;\n\t\tmargin: 0;\n\t\tpadding: $input_padding;\n\t}\n\n\t.has-date-field {\n\t\tfont-size: 16px;\n\t\tdisplay: flex;\n\t\tmargin-bottom: 0.5em;\n\t\tflex-wrap: wrap;\n\t\tflex-direction: column;\n\t\tgap: 0.5em;\n\t}\n\n\t[type=date] {\n\t\tpadding: $input_padding;\n\t}\n\n\t.is-hidden {\n\t\tdisplay: none;\n\t}\n}\n\n.llms-setup-date-fields {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tgap: 1em;\n\tpadding-top: 2em;\n}\n\n.llms-setup-date-field {\n\tflex: 1;\n}\n\n.llms-setup-actions {\n\tmargin-top: 2em;\n\ttext-align: right;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tgap: 1em;\n\n\t.llms-button-primary {\n\t\tdisplay: inline-block;\n\n\t\t&:after {\n\t\t\tcontent: \"\\f054\";\n\t\t\tfont-family: 'FontAwesome';\n\t\t\tfont-weight: 900;\n\t\t\tpadding-left: 10px;\n\t\t}\n\n\t}\n}\n\n.llms-exit-setup {\n\tcolor: inherit !important;\n\tmargin-right: 10px;\n\n\t+ .llms-button-primary,\n\t+ .llms-button-secondary {\n\t\tmargin-left: auto;\n\t}\n}\n\n.llms-importing-msgs {\n\ta {\n\t\tcolor: $color-brand-blue;\n\t}\n\n\t.llms-importing-msg {\n\t\tdisplay: none;\n\t\tfont-size: 14px;\n\t\tfont-style: italic;\n\t\ttext-align: right;\n\t}\n}\n\nul.llms-importable-courses {\n\tborder-bottom: 1px solid #f1f1f1;\n\tdisplay: block;\n\n\tli.llms-importable-course {\n\t\tborder-top: 1px solid #f1f1f1;\n\t\tdisplay: block;\n\t\tmargin: 0;\n\t\tmax-width: 100%;\n\t\tpadding: 20px 40px 20px 0;\n\n\t\th3 {\n\t\t\tmargin: 0;\n\t\t}\n\n\t\tp {\n\t\t\tmargin: 10px 0 0 0;\n\t\t}\n\n\t\tlabel {\n\t\t\tfont-weight: 400;\n\t\t}\n\n\t\timg {\n\t\t\tfloat: left;\n\t\t\tmargin-right: 15px;\n\t\t\twidth: 22%;\n\t\t}\n\n\t\t.llms-switch {\n\t\t\tfloat: right;\n\t\t\tright: -40px;\n\n\t\t\tinput.llms-toggle-round:checked + label {\n\t\t\t\tborder-color: $color-brand-blue;\n\t\t\t\tbackground-color: $color-brand-blue;\n\t\t\t}\n\n\t\t}\n\n\t}\n}\n\n.llms-setup-progress {\n\tdisplay: flex;\n\tmargin: 20px 0;\n\n\tli {\n\t\tborder-bottom: 4px solid $color-brand-blue;\n\t\tdisplay: inline-block;\n\t\tfont-size: 14px;\n\t\tpadding-bottom: 10px;\n\t\tposition: relative;\n\t\ttext-align: center;\n\t\tflex: 1;\n\n\t\ta {\n\t\t\tcolor: $color-brand-blue;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t&:after {\n\t\t\tbackground: $color-brand-blue;\n\t\t\tbottom: 0;\n\t\t\tcontent: '';\n\t\t\tborder: 4px solid $color-brand-blue;\n\t\t\tborder-radius: 100%;\n\t\t\theight: 4px;\n\t\t\tposition: absolute;\n\t\t\tleft: 50%;\n\t\t\tmargin-left: -6px;\n\t\t\tmargin-bottom: -8px;\n\t\t\twidth: 4px;\n\t\t}\n\n\t\t&.current {\n\t\t\tfont-weight: 700;\n\n\t\t\t&:after {\n\t\t\t\tbackground: #fff;\n\t\t\t}\n\t\t}\n\n\t\t&.current ~ li {\n\t\t\tborder-bottom-color: #ccc;\n\n\t\t\t&:after {\n\t\t\t\tbackground: #ccc;\n\t\t\t\tborder-color: #ccc;\n\t\t\t}\n\n\t\t\ta {\n\t\t\t\tcolor: #bbb;\n\t\t\t}\n\t\t}\n\n\t}\n}\n\n.llms-setup-wrapper {\n\n\t// Calendar icon for custom date fields.\n\t[type=\"text\"].llms-datepicker {\n\t\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ccc'%3E%3Cpath d='M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H64C28.7 64 0 92.7 0 128v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64h-40V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152V24zM48 192h352v256c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z'/%3E%3C/svg%3E\");\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: right 8px center;\n\t\tbackground-size: 16px 16px;\n\t\tpadding-right: 40px;\n\t}\n}\n","#wpadminbar, #adminmenumain, #wpfooter {\n display: none;\n}\n\n#llms-setup-wizard {\n background-color: #F0F0F1;\n height: 100%;\n left: 0;\n overflow: scroll;\n position: fixed;\n top: 0;\n width: 100%;\n}\n\n.llms-setup-wrapper {\n margin: 30px auto;\n max-width: 640px;\n}\n\n#llms-logo {\n text-align: center;\n}\n#llms-logo a {\n display: inline-block;\n}\n#llms-logo img {\n max-width: 200px;\n}\n\n.llms-setup-content {\n background-color: #FFF;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n padding: 30px;\n}\n.llms-setup-content h1, .llms-setup-content h2, .llms-setup-content h3, .llms-setup-content h4, .llms-setup-content h5, .llms-setup-content h6 {\n color: #3C434A;\n}\n.llms-setup-content a:not(.llms-button-primary):not(.llms-button-secondary) {\n color: #466dd8;\n}\n.llms-setup-content p, .llms-setup-content li {\n color: #3C434A;\n font-size: 16px;\n}\n.llms-setup-content p.error {\n color: #bb231c;\n background: rgba(187, 35, 28, 0.1);\n border: 1px solid currentColor;\n padding: 1em;\n border-radius: 4px;\n margin: 1.5em 0 0;\n font-size: 15px;\n text-align: left;\n}\n.llms-setup-content label {\n font-weight: 500;\n}\n.llms-setup-content table {\n border-bottom: 1px solid #f1f1f1;\n border-collapse: collapse;\n width: 100%;\n}\n.llms-setup-content td {\n border-top: 1px solid #f1f1f1;\n}\n.llms-setup-content td:first-child {\n padding-right: 10px;\n width: 33%;\n}\n.llms-setup-content td:first-child a {\n font-size: 16px;\n font-weight: 500;\n}\n.llms-setup-content td:first-child i {\n display: block;\n font-size: 13px;\n margin-top: 10px;\n}\n.llms-setup-content td:first-child i a {\n font-size: 13px;\n}\n.llms-setup-content small {\n font-size: small;\n}\n.llms-setup-content .has-checkbox-field {\n display: flex;\n flex-direction: row-reverse;\n justify-content: flex-end;\n align-items: center;\n align-content: center;\n gap: 0.5em;\n font-weight: normal;\n font-size: 16px;\n}\n.llms-setup-content .has-checkbox-field input {\n margin: 0;\n}\n.llms-setup-content label {\n font-size: 16px;\n display: block;\n margin-bottom: 0.5em;\n}\n.llms-setup-content small + label {\n margin-top: 1em;\n}\n.llms-setup-content [type=text] {\n width: 100%;\n clear: both;\n margin: 0;\n padding: 0.3em 0.6em;\n}\n.llms-setup-content .has-date-field {\n font-size: 16px;\n display: flex;\n margin-bottom: 0.5em;\n flex-wrap: wrap;\n flex-direction: column;\n gap: 0.5em;\n}\n.llms-setup-content [type=date] {\n padding: 0.3em 0.6em;\n}\n.llms-setup-content .is-hidden {\n display: none;\n}\n\n.llms-setup-date-fields {\n display: flex;\n justify-content: space-between;\n gap: 1em;\n padding-top: 2em;\n}\n\n.llms-setup-date-field {\n flex: 1;\n}\n\n.llms-setup-actions {\n margin-top: 2em;\n text-align: right;\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 1em;\n}\n.llms-setup-actions .llms-button-primary {\n display: inline-block;\n}\n.llms-setup-actions .llms-button-primary:after {\n content: \"\\f054\";\n font-family: \"FontAwesome\";\n font-weight: 900;\n padding-left: 10px;\n}\n\n.llms-exit-setup {\n color: inherit !important;\n margin-right: 10px;\n}\n.llms-exit-setup + .llms-button-primary,\n.llms-exit-setup + .llms-button-secondary {\n margin-left: auto;\n}\n\n.llms-importing-msgs a {\n color: #466dd8;\n}\n.llms-importing-msgs .llms-importing-msg {\n display: none;\n font-size: 14px;\n font-style: italic;\n text-align: right;\n}\n\nul.llms-importable-courses {\n border-bottom: 1px solid #f1f1f1;\n display: block;\n}\nul.llms-importable-courses li.llms-importable-course {\n border-top: 1px solid #f1f1f1;\n display: block;\n margin: 0;\n max-width: 100%;\n padding: 20px 40px 20px 0;\n}\nul.llms-importable-courses li.llms-importable-course h3 {\n margin: 0;\n}\nul.llms-importable-courses li.llms-importable-course p {\n margin: 10px 0 0 0;\n}\nul.llms-importable-courses li.llms-importable-course label {\n font-weight: 400;\n}\nul.llms-importable-courses li.llms-importable-course img {\n float: left;\n margin-right: 15px;\n width: 22%;\n}\nul.llms-importable-courses li.llms-importable-course .llms-switch {\n float: right;\n right: -40px;\n}\nul.llms-importable-courses li.llms-importable-course .llms-switch input.llms-toggle-round:checked + label {\n border-color: #466dd8;\n background-color: #466dd8;\n}\n\n.llms-setup-progress {\n display: flex;\n margin: 20px 0;\n}\n.llms-setup-progress li {\n border-bottom: 4px solid #466dd8;\n display: inline-block;\n font-size: 14px;\n padding-bottom: 10px;\n position: relative;\n text-align: center;\n flex: 1;\n}\n.llms-setup-progress li a {\n color: #466dd8;\n text-decoration: none;\n}\n.llms-setup-progress li:after {\n background: #466dd8;\n bottom: 0;\n content: \"\";\n border: 4px solid #466dd8;\n border-radius: 100%;\n height: 4px;\n position: absolute;\n left: 50%;\n margin-left: -6px;\n margin-bottom: -8px;\n width: 4px;\n}\n.llms-setup-progress li.current {\n font-weight: 700;\n}\n.llms-setup-progress li.current:after {\n background: #fff;\n}\n.llms-setup-progress li.current ~ li {\n border-bottom-color: #ccc;\n}\n.llms-setup-progress li.current ~ li:after {\n background: #ccc;\n border-color: #ccc;\n}\n.llms-setup-progress li.current ~ li a {\n color: #bbb;\n}\n\n.llms-setup-wrapper [type=text].llms-datepicker {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ccc'%3E%3Cpath d='M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H64C28.7 64 0 92.7 0 128v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64h-40V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152V24zM48 192h352v256c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n background-size: 16px 16px;\n padding-right: 40px;\n}","// ----- LifterLMS Brand Colors ----- \\\\\n$color-brand-dark-blue: #243c56;\n\n$color-brand-blue: #466dd8;\n$color-brand-blue-dark: darken( $color-brand-blue, 12 ); // #0077e4\n$color-brand-blue-light: lighten( $color-brand-blue, 8 );\n\n$color-brand-orange: #f8954f;\n$color-brand-orange-dark: #f67d28;\n$color-brand-orange-light: lighten( $color-brand-orange, 8 );\n\n$color-brand-aqua: #17bebb;\n\n$color-brand-pink: #ef476f;\n\n\n\n// ----- name our versions of common colors ----- \\\\\n$color-black: #010101;\n$color-green: #4d8d3c;\n$color-blue: $color-brand-blue;\n$color-red: #bb231c;\n$color-white: #fefefe;\n$color-aqua: #35bbaa;\n$color-purple: #845ef7;\n$color-orange: #c05621;\n\n$color-red-hover: darken($color-red,5);\n\n\n// ----- state / action names ----- \\\\\n$color-success: $color-green;\n$color-danger: $color-red;\n\n\n\n\n\n\n\n\n$color-lightgrey:\t\t#ccc;\n$color-grey: \t\t\t#999;\n$color-darkgrey:\t\t#666;\n$color-cinder:\t\t\t#444;\n$color-lightblue:\t\t#33b1cb;\n$color-darkblue:\t\t#0185a3;\n\n\n\n\n\n\n\n\n\n\n\n\n$color-border: #dedede;\n\n$el-box-shadow: 0 1px 2px 0 rgba($color-black,0.4);\n$el-background: #f1f1f1;\n$el-background-hover: #eaeaea;\n\n$break-xsmall: 320px;\n$break-small: 641px;\n$break-medium: 768px;\n$break-large: 1024px;\n\n$radius-small: 6px;\n$radius-medium: 12px;\n"],"sourceRoot":"../../scss"}
\ No newline at end of file
diff --git a/assets/maps/css/admin-wizard.min.css.map b/assets/maps/css/admin-wizard.min.css.map
new file mode 100644
index 0000000000..8ff4b2415f
--- /dev/null
+++ b/assets/maps/css/admin-wizard.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["admin-wizard.css"],"names":[],"mappings":"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","file":"../../css/admin-wizard.min.css","sourcesContent":["#wpadminbar, #adminmenumain, #wpfooter {\n display: none;\n}\n\n#llms-setup-wizard {\n background-color: #F0F0F1;\n height: 100%;\n left: 0;\n overflow: scroll;\n position: fixed;\n top: 0;\n width: 100%;\n}\n\n.llms-setup-wrapper {\n margin: 30px auto;\n max-width: 640px;\n}\n\n#llms-logo {\n text-align: center;\n}\n#llms-logo a {\n display: inline-block;\n}\n#llms-logo img {\n max-width: 200px;\n}\n\n.llms-setup-content {\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n padding: 30px;\n}\n.llms-setup-content h1, .llms-setup-content h2, .llms-setup-content h3, .llms-setup-content h4, .llms-setup-content h5, .llms-setup-content h6 {\n color: #3C434A;\n}\n.llms-setup-content a:not(.llms-button-primary):not(.llms-button-secondary) {\n color: #466dd8;\n}\n.llms-setup-content p, .llms-setup-content li {\n color: #3C434A;\n font-size: 16px;\n}\n.llms-setup-content p.error {\n color: #bb231c;\n background: rgba(187, 35, 28, 0.1);\n border: 1px solid currentColor;\n padding: 1em;\n border-radius: 4px;\n margin: 1.5em 0 0;\n font-size: 15px;\n text-align: left;\n}\n.llms-setup-content label {\n font-weight: 500;\n}\n.llms-setup-content table {\n border-bottom: 1px solid #f1f1f1;\n border-collapse: collapse;\n width: 100%;\n}\n.llms-setup-content td {\n border-top: 1px solid #f1f1f1;\n}\n.llms-setup-content td:first-child {\n padding-right: 10px;\n width: 33%;\n}\n.llms-setup-content td:first-child a {\n font-size: 16px;\n font-weight: 500;\n}\n.llms-setup-content td:first-child i {\n display: block;\n font-size: 13px;\n margin-top: 10px;\n}\n.llms-setup-content td:first-child i a {\n font-size: 13px;\n}\n.llms-setup-content small {\n font-size: small;\n}\n.llms-setup-content .has-checkbox-field {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-line-pack: center;\n align-content: center;\n gap: 0.5em;\n font-weight: normal;\n font-size: 16px;\n}\n.llms-setup-content .has-checkbox-field input {\n margin: 0;\n}\n.llms-setup-content label {\n font-size: 16px;\n display: block;\n margin-bottom: 0.5em;\n}\n.llms-setup-content small + label {\n margin-top: 1em;\n}\n.llms-setup-content [type=text] {\n width: 100%;\n clear: both;\n margin: 0;\n padding: 0.3em 0.6em;\n}\n.llms-setup-content .has-date-field {\n font-size: 16px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin-bottom: 0.5em;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n gap: 0.5em;\n}\n.llms-setup-content [type=date] {\n padding: 0.3em 0.6em;\n}\n.llms-setup-content .is-hidden {\n display: none;\n}\n\n.llms-setup-date-fields {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n gap: 1em;\n padding-top: 2em;\n}\n\n.llms-setup-date-field {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.llms-setup-actions {\n margin-top: 2em;\n text-align: right;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n gap: 1em;\n}\n.llms-setup-actions .llms-button-primary {\n display: inline-block;\n}\n.llms-setup-actions .llms-button-primary:after {\n content: \"\\f054\";\n font-family: \"FontAwesome\";\n font-weight: 900;\n padding-left: 10px;\n}\n\n.llms-exit-setup {\n color: inherit !important;\n margin-right: 10px;\n}\n.llms-exit-setup + .llms-button-primary,\n.llms-exit-setup + .llms-button-secondary {\n margin-left: auto;\n}\n\n.llms-importing-msgs a {\n color: #466dd8;\n}\n.llms-importing-msgs .llms-importing-msg {\n display: none;\n font-size: 14px;\n font-style: italic;\n text-align: right;\n}\n\nul.llms-importable-courses {\n border-bottom: 1px solid #f1f1f1;\n display: block;\n}\nul.llms-importable-courses li.llms-importable-course {\n border-top: 1px solid #f1f1f1;\n display: block;\n margin: 0;\n max-width: 100%;\n padding: 20px 40px 20px 0;\n}\nul.llms-importable-courses li.llms-importable-course h3 {\n margin: 0;\n}\nul.llms-importable-courses li.llms-importable-course p {\n margin: 10px 0 0 0;\n}\nul.llms-importable-courses li.llms-importable-course label {\n font-weight: 400;\n}\nul.llms-importable-courses li.llms-importable-course img {\n float: left;\n margin-right: 15px;\n width: 22%;\n}\nul.llms-importable-courses li.llms-importable-course .llms-switch {\n float: right;\n right: -40px;\n}\nul.llms-importable-courses li.llms-importable-course .llms-switch input.llms-toggle-round:checked + label {\n border-color: #466dd8;\n background-color: #466dd8;\n}\n\n.llms-setup-progress {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin: 20px 0;\n}\n.llms-setup-progress li {\n border-bottom: 4px solid #466dd8;\n display: inline-block;\n font-size: 14px;\n padding-bottom: 10px;\n position: relative;\n text-align: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.llms-setup-progress li a {\n color: #466dd8;\n text-decoration: none;\n}\n.llms-setup-progress li:after {\n background: #466dd8;\n bottom: 0;\n content: \"\";\n border: 4px solid #466dd8;\n border-radius: 100%;\n height: 4px;\n position: absolute;\n left: 50%;\n margin-left: -6px;\n margin-bottom: -8px;\n width: 4px;\n}\n.llms-setup-progress li.current {\n font-weight: 700;\n}\n.llms-setup-progress li.current:after {\n background: #fff;\n}\n.llms-setup-progress li.current ~ li {\n border-bottom-color: #ccc;\n}\n.llms-setup-progress li.current ~ li:after {\n background: #ccc;\n border-color: #ccc;\n}\n.llms-setup-progress li.current ~ li a {\n color: #bbb;\n}\n\n.llms-setup-wrapper [type=text].llms-datepicker {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ccc'%3E%3Cpath d='M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H64C28.7 64 0 92.7 0 128v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64h-40V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152V24zM48 192h352v256c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n background-size: 16px 16px;\n padding-right: 40px;\n}\n/*# sourceMappingURL=../maps/css/admin-wizard.css.map */\n"],"sourceRoot":"../../css"}
\ No newline at end of file
diff --git a/assets/maps/css/admin.css.map b/assets/maps/css/admin.css.map
new file mode 100644
index 0000000000..370e990cda
--- /dev/null
+++ b/assets/maps/css/admin.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["admin.css","_includes/_extends.scss","_includes/_buttons.scss","_includes/_vars.scss","_includes/_vars-brand-colors.scss","_includes/_tooltip.scss","admin/_wp-menu.scss","admin/partials/_grid.scss","admin/modules/_forms.scss","admin/modules/_voucher.scss","admin/modules/_widgets.scss","_includes/_mixins.scss","admin/modules/_icons.scss","admin/modules/_mb-tabs.scss","admin/modules/_top-modal.scss","admin/modules/_merge-codes.scss","admin/breakpoints/_base.scss","admin.scss","admin/breakpoints/_481up.scss","admin/breakpoints/_768up.scss","admin/breakpoints/_1030up.scss","admin/breakpoints/_1240up.scss","admin/_main.scss","admin/_llms-table.scss","admin/modules/_llms-order-note.scss","admin/metaboxes/_llms-metabox.scss","admin/metaboxes/_metabox-instructors.scss","admin/metaboxes/_metabox-orders.scss","admin/metaboxes/_metabox-engagements-type.scss","admin/metaboxes/_metabox-product.scss","admin/metaboxes/_metabox-students.scss","admin/metaboxes/_metabox-field-repeater.scss","admin/metaboxes/_builder-launcher.scss","admin/post-tables/_llms_orders.scss","admin/post-tables/_post-tables.scss","admin/_tabs.scss","admin/_fonts.scss","admin/_reporting.scss","_includes/_quiz-result-question-list.scss","admin/_settings.scss","admin/_dashboard.scss","admin/_dashboard-widget.scss","admin/_resources.scss","admin/_quiz-attempt-review.scss","_includes/_llms-form-field.scss","_includes/vendor/_font-awesome.scss"],"names":[],"mappings":"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A7Co3IF;;A6Cl3IA;EACE,oBAAA;A7Cq3IF;;A6Cn3IA;EACE,cAAA;A7Cs3IF;;A6Cp3IA;EACE,cAAA;A7Cu3IF;;A6Cr3IA;mEAAA;AAEA;EACE,gBAAA;A7Cw3IF;;A6Ct3IA;EACE,gBAAA;A7Cy3IF;;A6Cv3IA;EACE,gBAAA;A7C03IF;;A6Cx3IA;EACE,gBAAA;A7C23IF;;A6Cz3IA;EACE,gBAAA;A7C43IF;;A6C13IA;EACE,gBAAA;A7C63IF;;A6C33IA;EACE,gBAAA;A7C83IF;;A6C53IA;EACE,gBAAA;A7C+3IF;;A6C73IA;EACE,gBAAA;A7Cg4IF;;A6C93IA;EACE,gBAAA;A7Ci4IF;;A6C/3IA;EACE,gBAAA;A7Ck4IF;;A6Ch4IA;EACE,gBAAA;A7Cm4IF;;A6Cj4IA;EACE,gBAAA;A7Co4IF;;A6Cl4IA;;;EAGE,gBAAA;A7Cq4IF;;A6Cn4IA;EACE,gBAAA;A7Cs4IF;;A6Cp4IA;EACE,gBAAA;A7Cu4IF;;A6Cr4IA;EACE,gBAAA;A7Cw4IF;;A6Ct4IA;EACE,gBAAA;A7Cy4IF;;A6Cv4IA;;EAEE,gBAAA;A7C04IF;;A6Cx4IA;EACE,gBAAA;A7C24IF;;A6Cz4IA;EACE,gBAAA;A7C44IF;;A6C14IA;EACE,gBAAA;A7C64IF;;A6C34IA;EACE,gBAAA;A7C84IF;;A6C54IA;EACE,gBAAA;A7C+4IF;;A6C74IA;EACE,gBAAA;A7Cg5IF;;A6C94IA;EACE,gBAAA;A7Ci5IF;;A6C/4IA;EACE,gBAAA;A7Ck5IF;;A6Ch5IA;EACE,gBAAA;A7Cm5IF;;A6Cj5IA;EACE,gBAAA;A7Co5IF;;A6Cl5IA;;EAEE,gBAAA;A7Cq5IF;;A6Cn5IA;EACE,gBAAA;A7Cs5IF;;A6Cp5IA;EACE,gBAAA;A7Cu5IF;;A6Cr5IA;EACE,gBAAA;A7Cw5IF;;A6Ct5IA;EACE,gBAAA;A7Cy5IF;;A6Cv5IA;EACE,gBAAA;A7C05IF;;A6Cx5IA;EACE,gBAAA;A7C25IF;;A6Cz5IA;EACE,gBAAA;A7C45IF;;A6C15IA;EACE,gBAAA;A7C65IF;;A6C35IA;EACE,gBAAA;A7C85IF;;A6C55IA;EACE,gBAAA;A7C+5IF;;A6C75IA;EACE,gBAAA;A7Cg6IF;;A6C95IA;EACE,gBAAA;A7Ci6IF;;A6C/5IA;EACE,gBAAA;A7Ck6IF;;A6Ch6IA;EACE,gBAAA;A7Cm6IF;;A6Cj6IA;EACE,gBAAA;A7Co6IF;;A6Cl6IA;EACE,gBAAA;A7Cq6IF;;A6Cn6IA;EACE,gBAAA;A7Cs6IF;;A6Cp6IA;EACE,gBAAA;A7Cu6IF;;A6Cr6IA;EACE,gBAAA;A7Cw6IF;;A6Ct6IA;EACE,gBAAA;A7Cy6IF;;A6Cv6IA;EACE,gBAAA;A7C06IF;;A6Cx6IA;EACE,gBAAA;A7C26IF;;A6Cz6IA;EACE,gBAAA;A7C46IF;;A6C16IA;EACE,gBAAA;A7C66IF;;A6C36IA;EACE,gBAAA;A7C86IF;;A6C56IA;EACE,gBAAA;A7C+6IF;;A6C76IA;;EAEE,gBAAA;A7Cg7IF;;A6C96IA;EACE,gBAAA;A7Ci7IF;;A6C/6IA;EACE,gBAAA;A7Ck7IF;;A6Ch7IA;;;EAGE,gBAAA;A7Cm7IF;;A6Cj7IA;EACE,gBAAA;A7Co7IF;;A6Cl7IA;EACE,gBAAA;A7Cq7IF;;A6Cn7IA;EACE,gBAAA;A7Cs7IF;;A6Cp7IA;EACE,gBAAA;A7Cu7IF;;A6Cr7IA;;EAEE,gBAAA;A7Cw7IF;;A6Ct7IA;EACE,gBAAA;A7Cy7IF;;A6Cv7IA;EACE,gBAAA;A7C07IF;;A6Cx7IA;EACE,gBAAA;A7C27IF;;A6Cz7IA;EACE,gBAAA;A7C47IF;;A6C17IA;EACE,gBAAA;A7C67IF;;A6C37IA;EACE,gBAAA;A7C87IF;;A6C57IA;EACE,gBAAA;A7C+7IF;;A6C77IA;EACE,gBAAA;A7Cg8IF;;A6C97IA;EACE,gBAAA;A7Ci8IF;;A6C/7IA;EACE,gBAAA;A7Ck8IF;;A6Ch8IA;EACE,gBAAA;A7Cm8IF;;A6Cj8IA;EACE,gBAAA;A7Co8IF;;A6Cl8IA;EACE,gBAAA;A7Cq8IF;;A6Cn8IA;EACE,gBAAA;A7Cs8IF;;A6Cp8IA;EACE,gBAAA;A7Cu8IF;;A6Cr8IA;EACE,gBAAA;A7Cw8IF;;A6Ct8IA;EACE,gBAAA;A7Cy8IF;;A6Cv8IA;EACE,gBAAA;A7C08IF;;A6Cx8IA;EACE,gBAAA;A7C28IF;;A6Cz8IA;EACE,gBAAA;A7C48IF;;A6C18IA;EACE,gBAAA;A7C68IF;;A6C38IA;EACE,gBAAA;A7C88IF;;A6C58IA;EACE,gBAAA;A7C+8IF;;A6C78IA;EACE,gBAAA;A7Cg9IF;;A6C98IA;EACE,gBAAA;A7Ci9IF;;A6C/8IA;EACE,gBAAA;A7Ck9IF;;A6Ch9IA;EACE,gBAAA;A7Cm9IF;;A6Cj9IA;EACE,gBAAA;A7Co9IF;;A6Cl9IA;EACE,gBAAA;A7Cq9IF;;A6Cn9IA;;EAEE,gBAAA;A7Cs9IF;;A6Cp9IA;EACE,gBAAA;A7Cu9IF;;A6Cr9IA;EACE,gBAAA;A7Cw9IF;;A6Ct9IA;EACE,gBAAA;A7Cy9IF;;A6Cv9IA;EACE,gBAAA;A7C09IF;;A6Cx9IA;EACE,gBAAA;A7C29IF;;A6Cz9IA;EACE,gBAAA;A7C49IF;;A6C19IA;EACE,gBAAA;A7C69IF;;A6C39IA;EACE,gBAAA;A7C89IF;;A6C59IA;EACE,gBAAA;A7C+9IF;;A6C79IA;EACE,gBAAA;A7Cg+IF;;A6C99IA;EACE,gBAAA;A7Ci+IF;;A6C/9IA;;EAEE,gBAAA;A7Ck+IF;;A6Ch+IA;EACE,gBAAA;A7Cm+IF;;A6Cj+IA;EACE,gBAAA;A7Co+IF;;A6Cl+IA;EACE,gBAAA;A7Cq+IF;;A6Cn+IA;EACE,gBAAA;A7Cs+IF;;A6Cp+IA;EACE,gBAAA;A7Cu+IF;;A6Cr+IA;EACE,gBAAA;A7Cw+IF;;A6Ct+IA;EACE,gBAAA;A7Cy+IF;;A6Cv+IA;EACE,gBAAA;A7C0+IF;;A6Cx+IA;EACE,gBAAA;A7C2+IF;;A6Cz+IA;EACE,gBAAA;A7C4+IF;;A6C1+IA;EACE,gBAAA;A7C6+IF;;A6C3+IA;EACE,gBAAA;A7C8+IF;;A6C5+IA;EACE,gBAAA;A7C++IF;;A6C7+IA;;EAEE,gBAAA;A7Cg/IF;;A6C9+IA;EACE,gBAAA;A7Ci/IF;;A6C/+IA;EACE,gBAAA;A7Ck/IF;;A6Ch/IA;EACE,gBAAA;A7Cm/IF;;A6Cj/IA;EACE,gBAAA;A7Co/IF;;A6Cl/IA;;EAEE,gBAAA;A7Cq/IF;;A6Cn/IA;EACE,gBAAA;A7Cs/IF;;A6Cp/IA;EACE,gBAAA;A7Cu/IF;;A6Cr/IA;EACE,gBAAA;A7Cw/IF;;A6Ct/IA;EACE,gBAAA;A7Cy/IF;;A6Cv/IA;EACE,gBAAA;A7C0/IF;;A6Cx/IA;EACE,gBAAA;A7C2/IF;;A6Cz/IA;EACE,gBAAA;A7C4/IF;;A6C1/IA;EACE,gBAAA;A7C6/IF;;A6C3/IA;EACE,gBAAA;A7C8/IF;;A6C5/IA;EACE,gBAAA;A7C+/IF;;A6C7/IA;EACE,gBAAA;A7CggJF;;A6C9/IA;EACE,gBAAA;A7CigJF;;A6C//IA;EACE,gBAAA;A7CkgJF;;A6ChgJA;EACE,gBAAA;A7CmgJF;;A6CjgJA;EACE,gBAAA;A7CogJF;;A6ClgJA;EACE,gBAAA;A7CqgJF;;A6CngJA;EACE,gBAAA;A7CsgJF;;A6CpgJA;EACE,gBAAA;A7CugJF;;A6CrgJA;EACE,gBAAA;A7CwgJF;;A6CtgJA;;EAEE,gBAAA;A7CygJF;;A6CvgJA;EACE,gBAAA;A7C0gJF;;A6CxgJA;EACE,gBAAA;A7C2gJF;;A6CzgJA;EACE,gBAAA;A7C4gJF;;A6C1gJA;;EAEE,gBAAA;A7C6gJF;;A6C3gJA;EACE,gBAAA;A7C8gJF;;A6C5gJA;EACE,gBAAA;A7C+gJF;;A6C7gJA;EACE,gBAAA;A7CghJF;;A6C9gJA;EACE,gBAAA;A7CihJF;;A6C/gJA;EACE,gBAAA;A7CkhJF;;A6ChhJA;EACE,gBAAA;A7CmhJF;;A6CjhJA;EACE,gBAAA;A7CohJF;;A6ClhJA;EACE,gBAAA;A7CqhJF;;A6CnhJA;EACE,gBAAA;A7CshJF;;A6CphJA;EACE,gBAAA;A7CuhJF;;A6CrhJA;EACE,gBAAA;A7CwhJF;;A6CthJA;EACE,gBAAA;A7CyhJF;;A6CvhJA;EACE,gBAAA;A7C0hJF;;A6CxhJA;EACE,gBAAA;A7C2hJF;;A6CzhJA;EACE,gBAAA;A7C4hJF;;A6C1hJA;EACE,gBAAA;A7C6hJF;;A6C3hJA;EACE,gBAAA;A7C8hJF;;A6C5hJA;EACE,gBAAA;A7C+hJF;;A6C7hJA;;EAEE,gBAAA;A7CgiJF;;A6C9hJA;;EAEE,gBAAA;A7CiiJF;;A6C/hJA;EACE,gBAAA;A7CkiJF;;A6ChiJA;EACE,gBAAA;A7CmiJF;;A6CjiJA;;EAEE,gBAAA;A7CoiJF;;A6CliJA;;EAEE,gBAAA;A7CqiJF;;A6CniJA;EACE,gBAAA;A7CsiJF;;A6CpiJA;;EAEE,gBAAA;A7CuiJF;;A6CriJA;EACE,gBAAA;A7CwiJF;;A6CtiJA;;;EAGE,gBAAA;A7CyiJF;;A6CviJA;EACE,gBAAA;A7C0iJF;;A6CxiJA;EACE,gBAAA;A7C2iJF;;A6CziJA;EACE,gBAAA;A7C4iJF;;A6C1iJA;EACE,gBAAA;A7C6iJF;;A6C3iJA;EACE,gBAAA;A7C8iJF;;A6C5iJA;EACE,gBAAA;A7C+iJF;;A6C7iJA;EACE,gBAAA;A7CgjJF;;A6C9iJA;EACE,gBAAA;A7CijJF;;A6C/iJA;EACE,gBAAA;A7CkjJF;;A6ChjJA;EACE,gBAAA;A7CmjJF;;A6CjjJA;EACE,gBAAA;A7CojJF;;A6CljJA;EACE,gBAAA;A7CqjJF;;A6CnjJA;EACE,gBAAA;A7CsjJF;;A6CpjJA;EACE,gBAAA;A7CujJF;;A6CrjJA;EACE,gBAAA;A7CwjJF;;A6CtjJA;EACE,gBAAA;A7CyjJF;;A6CvjJA;EACE,gBAAA;A7C0jJF;;A6CxjJA;;EAEE,gBAAA;A7C2jJF;;A6CzjJA;;EAEE,gBAAA;A7C4jJF;;A6C1jJA;;EAEE,gBAAA;A7C6jJF;;A6C3jJA;EACE,gBAAA;A7C8jJF;;A6C5jJA;EACE,gBAAA;A7C+jJF;;A6C7jJA;;EAEE,gBAAA;A7CgkJF;;A6C9jJA;;EAEE,gBAAA;A7CikJF;;A6C/jJA;;EAEE,gBAAA;A7CkkJF;;A6ChkJA;EACE,gBAAA;A7CmkJF;;A6CjkJA;EACE,gBAAA;A7CokJF;;A6ClkJA;;EAEE,gBAAA;A7CqkJF;;A6CnkJA;EACE,gBAAA;A7CskJF;;A6CpkJA;EACE,gBAAA;A7CukJF;;A6CrkJA;;EAEE,gBAAA;A7CwkJF;;A6CtkJA;EACE,gBAAA;A7CykJF;;A6CvkJA;EACE,gBAAA;A7C0kJF;;A6CxkJA;EACE,gBAAA;A7C2kJF;;A6CzkJA;EACE,gBAAA;A7C4kJF;;A6C1kJA;EACE,gBAAA;A7C6kJF;;A6C3kJA;EACE,gBAAA;A7C8kJF;;A6C5kJA;EACE,gBAAA;A7C+kJF;;A6C7kJA;EACE,gBAAA;A7CglJF;;A6C9kJA;EACE,gBAAA;A7CilJF;;A6C/kJA;EACE,gBAAA;A7CklJF;;A6ChlJA;EACE,gBAAA;A7CmlJF;;A6CjlJA;EACE,gBAAA;A7ColJF;;A6CllJA;EACE,gBAAA;A7CqlJF;;A6CnlJA;EACE,gBAAA;A7CslJF;;A6CplJA;EACE,gBAAA;A7CulJF;;A6CrlJA;EACE,gBAAA;A7CwlJF;;A6CtlJA;EACE,gBAAA;A7CylJF;;A6CvlJA;EACE,gBAAA;A7C0lJF;;A6CxlJA;EACE,gBAAA;A7C2lJF;;A6CzlJA;EACE,gBAAA;A7C4lJF;;A6C1lJA;EACE,gBAAA;A7C6lJF;;A6C3lJA;EACE,gBAAA;A7C8lJF;;A6C5lJA;EACE,gBAAA;A7C+lJF;;A6C7lJA;EACE,gBAAA;A7CgmJF;;A6C9lJA;EACE,gBAAA;A7CimJF;;A6C/lJA;EACE,gBAAA;A7CkmJF;;A6ChmJA;EACE,gBAAA;A7CmmJF;;A6CjmJA;EACE,gBAAA;A7ComJF;;A6ClmJA;EACE,gBAAA;A7CqmJF;;A6CnmJA;EACE,gBAAA;A7CsmJF;;A6CpmJA;;EAEE,gBAAA;A7CumJF;;A6CrmJA;EACE,gBAAA;A7CwmJF;;A6CtmJA;EACE,gBAAA;A7CymJF;;A6CvmJA;EACE,gBAAA;A7C0mJF;;A6CxmJA;EACE,gBAAA;A7C2mJF;;A6CzmJA;EACE,gBAAA;A7C4mJF;;A6C1mJA;;EAEE,gBAAA;A7C6mJF;;A6C3mJA;EACE,gBAAA;A7C8mJF;;A6C5mJA;EACE,gBAAA;A7C+mJF;;A6C7mJA;EACE,gBAAA;A7CgnJF;;A6C9mJA;EACE,gBAAA;A7CinJF;;A6C/mJA;EACE,gBAAA;A7CknJF;;A6ChnJA;EACE,gBAAA;A7CmnJF;;A6CjnJA;EACE,gBAAA;A7ConJF;;A6ClnJA;EACE,gBAAA;A7CqnJF;;A6CnnJA;EACE,gBAAA;A7CsnJF;;A6CpnJA;EACE,gBAAA;A7CunJF;;A6CrnJA;EACE,gBAAA;A7CwnJF;;A6CtnJA;EACE,gBAAA;A7CynJF;;A6CvnJA;;EAEE,gBAAA;A7C0nJF;;A6CxnJA;;;EAGE,gBAAA;A7C2nJF;;A6CznJA;EACE,gBAAA;A7C4nJF;;A6C1nJA;EACE,gBAAA;A7C6nJF;;A6C3nJA;EACE,gBAAA;A7C8nJF;;A6C5nJA;;EAEE,gBAAA;A7C+nJF;;A6C7nJA;EACE,gBAAA;A7CgoJF;;A6C9nJA;EACE,gBAAA;A7CioJF;;A6C/nJA;EACE,gBAAA;A7CkoJF;;A6ChoJA;EACE,gBAAA;A7CmoJF;;A6CjoJA;EACE,gBAAA;A7CooJF;;A6CloJA;EACE,gBAAA;A7CqoJF;;A6CnoJA;EACE,gBAAA;A7CsoJF;;A6CpoJA;EACE,gBAAA;A7CuoJF;;A6CroJA;EACE,gBAAA;A7CwoJF;;A6CtoJA;EACE,gBAAA;A7CyoJF;;A6CvoJA;EACE,gBAAA;A7C0oJF;;A6CxoJA;EACE,gBAAA;A7C2oJF;;A6CzoJA;EACE,gBAAA;A7C4oJF;;A6C1oJA;EACE,gBAAA;A7C6oJF;;A6C3oJA;EACE,gBAAA;A7C8oJF;;A6C5oJA;EACE,gBAAA;A7C+oJF;;A6C7oJA;EACE,gBAAA;A7CgpJF;;A6C9oJA;EACE,gBAAA;A7CipJF;;A6C/oJA;EACE,gBAAA;A7CkpJF;;A6ChpJA;EACE,gBAAA;A7CmpJF;;A6CjpJA;EACE,gBAAA;A7CopJF;;A6ClpJA;EACE,gBAAA;A7CqpJF;;A6CnpJA;EACE,gBAAA;A7CspJF;;A6CppJA;EACE,gBAAA;A7CupJF;;A6CrpJA;EACE,gBAAA;A7CwpJF;;A6CtpJA;EACE,gBAAA;A7CypJF;;A6CvpJA;EACE,gBAAA;A7C0pJF;;A6CxpJA;EACE,gBAAA;A7C2pJF;;A6CzpJA;EACE,gBAAA;A7C4pJF;;A6C1pJA;EACE,gBAAA;A7C6pJF;;A6C3pJA;EACE,gBAAA;A7C8pJF;;A6C5pJA;EACE,gBAAA;A7C+pJF;;A6C7pJA;EACE,gBAAA;A7CgqJF;;A6C9pJA;EACE,gBAAA;A7CiqJF;;A6C/pJA;EACE,gBAAA;A7CkqJF;;A6ChqJA;EACE,gBAAA;A7CmqJF;;A6CjqJA;EACE,gBAAA;A7CoqJF;;A6ClqJA;;EAEE,gBAAA;A7CqqJF;;A6CnqJA;;EAEE,gBAAA;A7CsqJF;;A6CpqJA;;EAEE,gBAAA;A7CuqJF;;A6CrqJA;;EAEE,gBAAA;A7CwqJF;;A6CtqJA;EACE,gBAAA;A7CyqJF;;A6CvqJA;;EAEE,gBAAA;A7C0qJF;;A6CxqJA;;EAEE,gBAAA;A7C2qJF;;A6CzqJA;;;;EAIE,gBAAA;A7C4qJF;;A6C1qJA;;;EAGE,gBAAA;A7C6qJF;;A6C3qJA;;EAEE,gBAAA;A7C8qJF;;A6C5qJA;;EAEE,gBAAA;A7C+qJF;;A6C7qJA;EACE,gBAAA;A7CgrJF;;A6C9qJA;EACE,gBAAA;A7CirJF;;A6C/qJA;EACE,gBAAA;A7CkrJF;;A6ChrJA;EACE,gBAAA;A7CmrJF;;A6CjrJA;EACE,gBAAA;A7CorJF;;A6ClrJA;EACE,gBAAA;A7CqrJF;;A6CnrJA;EACE,gBAAA;A7CsrJF;;A6CprJA;EACE,gBAAA;A7CurJF;;A6CrrJA;EACE,gBAAA;A7CwrJF;;A6CtrJA;EACE,gBAAA;A7CyrJF;;A6CvrJA;EACE,gBAAA;A7C0rJF;;A6CxrJA;EACE,gBAAA;A7C2rJF;;A6CzrJA;EACE,gBAAA;A7C4rJF;;A6C1rJA;EACE,gBAAA;A7C6rJF;;A6C3rJA;EACE,gBAAA;A7C8rJF;;A6C5rJA;EACE,gBAAA;A7C+rJF;;A6C7rJA;EACE,gBAAA;A7CgsJF;;A6C9rJA;EACE,gBAAA;A7CisJF;;A6C/rJA;EACE,gBAAA;A7CksJF;;A6ChsJA;EACE,gBAAA;A7CmsJF;;A6CjsJA;EACE,gBAAA;A7CosJF;;A6ClsJA;EACE,gBAAA;A7CqsJF;;A6CnsJA;EACE,gBAAA;A7CssJF;;A6CpsJA;EACE,gBAAA;A7CusJF;;A6CrsJA;EACE,gBAAA;A7CwsJF;;A6CtsJA;EACE,gBAAA;A7CysJF;;A6CvsJA;EACE,gBAAA;A7C0sJF;;A6CxsJA;EACE,gBAAA;A7C2sJF;;A6CzsJA;EACE,gBAAA;A7C4sJF;;A6C1sJA;EACE,gBAAA;A7C6sJF;;A6C3sJA;EACE,gBAAA;A7C8sJF;;A6C5sJA;EACE,gBAAA;A7C+sJF;;A6C7sJA;EACE,gBAAA;A7CgtJF;;A6C9sJA;EACE,gBAAA;A7CitJF;;A6C/sJA;EACE,gBAAA;A7CktJF;;A6ChtJA;EACE,gBAAA;A7CmtJF;;A6CjtJA;EACE,gBAAA;A7CotJF;;A6CltJA;EACE,gBAAA;A7CqtJF;;A6CntJA;;EAEE,gBAAA;A7CstJF;;A6CptJA;EACE,gBAAA;A7CutJF;;A6CrtJA;EACE,gBAAA;A7CwtJF;;A6CttJA;EACE,gBAAA;A7CytJF;;A6CvtJA;EACE,gBAAA;A7C0tJF;;A6CxtJA;EACE,gBAAA;A7C2tJF;;A6CztJA;EACE,gBAAA;A7C4tJF;;A6C1tJA;EACE,gBAAA;A7C6tJF;;A6C3tJA;EACE,gBAAA;A7C8tJF;;A6C5tJA;EACE,gBAAA;A7C+tJF;;A6C7tJA;EACE,gBAAA;A7CguJF;;A6C9tJA;EACE,gBAAA;A7CiuJF;;A6C/tJA;;EAEE,gBAAA;A7CkuJF;;A6ChuJA;EACE,gBAAA;A7CmuJF;;A6CjuJA;EACE,gBAAA;A7CouJF;;A6CluJA;EACE,gBAAA;A7CquJF;;A6CnuJA;;EAEE,gBAAA;A7CsuJF;;A6CpuJA;EACE,gBAAA;A7CuuJF;;A6CruJA;EACE,gBAAA;A7CwuJF;;A6CtuJA;EACE,gBAAA;A7CyuJF;;A6CvuJA;EACE,gBAAA;A7C0uJF;;A6CxuJA;EACE,gBAAA;A7C2uJF;;A6CzuJA;EACE,gBAAA;A7C4uJF;;A6C1uJA;;;EAGE,gBAAA;A7C6uJF;;A6C3uJA;;EAEE,gBAAA;A7C8uJF;;A6C5uJA;EACE,gBAAA;A7C+uJF;;A6C7uJA;EACE,gBAAA;A7CgvJF;;A6C9uJA;EACE,gBAAA;A7CivJF;;A6C/uJA;EACE,gBAAA;A7CkvJF;;A6ChvJA;EACE,gBAAA;A7CmvJF;;A6CjvJA;EACE,gBAAA;A7CovJF;;A6ClvJA;EACE,gBAAA;A7CqvJF;;A6CnvJA;EACE,gBAAA;A7CsvJF;;A6CpvJA;EACE,gBAAA;A7CuvJF;;A6CrvJA;EACE,gBAAA;A7CwvJF;;A6CtvJA;EACE,gBAAA;A7CyvJF;;A6CvvJA;EACE,gBAAA;A7C0vJF;;A6CxvJA;EACE,gBAAA;A7C2vJF;;A6CzvJA;EACE,gBAAA;A7C4vJF;;A6C1vJA;EACE,gBAAA;A7C6vJF;;A6C3vJA;EACE,gBAAA;A7C8vJF;;A6C5vJA;EACE,gBAAA;A7C+vJF;;A6C7vJA;EACE,gBAAA;A7CgwJF;;A6C9vJA;EACE,gBAAA;A7CiwJF;;A6C/vJA;EACE,gBAAA;A7CkwJF;;A6ChwJA;EACE,gBAAA;A7CmwJF;;A6CjwJA;EACE,gBAAA;A7CowJF;;A6ClwJA;EACE,gBAAA;A7CqwJF;;A6CnwJA;EACE,gBAAA;A7CswJF;;A6CpwJA;EACE,gBAAA;A7CuwJF;;A6CrwJA;;EAEE,gBAAA;A7CwwJF;;A6CtwJA;;EAEE,gBAAA;A7CywJF;;A6CvwJA;EACE,gBAAA;A7C0wJF;;A6CxwJA;EACE,gBAAA;A7C2wJF;;A6CzwJA;EACE,gBAAA;A7C4wJF;;A6C1wJA;EACE,gBAAA;A7C6wJF;;A6C3wJA;EACE,gBAAA;A7C8wJF;;A6C5wJA;EACE,gBAAA;A7C+wJF;;A6C7wJA;EACE,gBAAA;A7CgxJF;;A6C9wJA;EACE,gBAAA;A7CixJF;;A6C/wJA;EACE,gBAAA;A7CkxJF;;A6ChxJA;;;EAGE,gBAAA;A7CmxJF;;A6CjxJA;;EAEE,gBAAA;A7CoxJF;;A6ClxJA;;EAEE,gBAAA;A7CqxJF;;A6CnxJA;;EAEE,gBAAA;A7CsxJF;;A6CpxJA;EACE,gBAAA;A7CuxJF;;A6CrxJA;EACE,gBAAA;A7CwxJF;;A6CtxJA;EACE,gBAAA;A7CyxJF;;A6CvxJA;EACE,gBAAA;A7C0xJF;;A6CxxJA;;;;;EAKE,gBAAA;A7C2xJF;;A6CzxJA;EACE,gBAAA;A7C4xJF;;A6C1xJA;;;EAGE,gBAAA;A7C6xJF;;A6C3xJA;;EAEE,gBAAA;A7C8xJF;;A6C5xJA;EACE,gBAAA;A7C+xJF;;A6C7xJA;EACE,gBAAA;A7CgyJF;;A6C9xJA;;;EAGE,gBAAA;A7CiyJF;;A6C/xJA;EACE,gBAAA;A7CkyJF;;A6ChyJA;EACE,gBAAA;A7CmyJF;;A6CjyJA;;EAEE,gBAAA;A7CoyJF;;A6ClyJA;;EAEE,gBAAA;A7CqyJF;;A6CnyJA;;EAEE,gBAAA;A7CsyJF;;A6CpyJA;EACE,gBAAA;A7CuyJF;;A6CryJA;EACE,gBAAA;A7CwyJF;;A6CtyJA;EACE,gBAAA;A7CyyJF;;A6CvyJA;EACE,gBAAA;A7C0yJF;;A6CxyJA;EACE,gBAAA;A7C2yJF;;A6CzyJA;EACE,gBAAA;A7C4yJF;;A6C1yJA;EACE,gBAAA;A7C6yJF;;A6C3yJA;EACE,gBAAA;A7C8yJF;;A6C5yJA;;EAEE,gBAAA;A7C+yJF;;A6C7yJA;EACE,gBAAA;A7CgzJF;;A6C9yJA;EACE,gBAAA;A7CizJF;;A6C/yJA;EACE,gBAAA;A7CkzJF;;A6ChzJA;EACE,gBAAA;A7CmzJF;;A6CjzJA;EACE,gBAAA;A7CozJF;;A6ClzJA;EACE,gBAAA;A7CqzJF;;A6CnzJA;EACE,gBAAA;A7CszJF;;A6CpzJA;EACE,gBAAA;A7CuzJF;;A6CrzJA;EACE,gBAAA;A7CwzJF;;A6CtzJA;EACE,gBAAA;A7CyzJF;;A6CvzJA;EACE,gBAAA;A7C0zJF;;A6CxzJA;EACE,gBAAA;A7C2zJF;;A6CzzJA;EACE,gBAAA;A7C4zJF;;A6C1zJA;EACE,gBAAA;A7C6zJF;;A6C3zJA;EACE,gBAAA;A7C8zJF;;A6C5zJA;EACE,gBAAA;A7C+zJF;;A6C7zJA;EACE,gBAAA;A7Cg0JF;;A6C9zJA;EACE,gBAAA;A7Ci0JF;;A6C/zJA;EACE,gBAAA;A7Ck0JF;;A6Ch0JA;EACE,gBAAA;A7Cm0JF;;A6Cj0JA;EACE,gBAAA;A7Co0JF;;A6Cl0JA;EACE,gBAAA;A7Cq0JF;;A6Cn0JA;EACE,gBAAA;A7Cs0JF;;A6Cp0JA;EACE,gBAAA;A7Cu0JF;;A6Cr0JA;EACE,gBAAA;A7Cw0JF;;A6Ct0JA;EACE,gBAAA;A7Cy0JF;;A6Cv0JA;EACE,gBAAA;A7C00JF;;A6Cx0JA;EACE,gBAAA;A7C20JF;;A6Cz0JA;EACE,gBAAA;A7C40JF;;A6C10JA;EACE,gBAAA;A7C60JF;;A6C30JA;EACE,gBAAA;A7C80JF;;A6C50JA;EACE,gBAAA;A7C+0JF;;A6C70JA;EACE,gBAAA;A7Cg1JF;;A6C90JA;EACE,gBAAA;A7Ci1JF;;A6C/0JA;EACE,gBAAA;A7Ck1JF;;A6Ch1JA;EACE,gBAAA;A7Cm1JF;;A6Cj1JA;EACE,gBAAA;A7Co1JF;;A6Cl1JA;;;EAGE,gBAAA;A7Cq1JF;;A6Cn1JA;EACE,gBAAA;A7Cs1JF;;A6Cp1JA;EACE,gBAAA;A7Cu1JF;;A6Cr1JA;EACE,gBAAA;A7Cw1JF;;A6Ct1JA;EACE,gBAAA;A7Cy1JF;;A6Cv1JA;EACE,gBAAA;A7C01JF;;A6Cx1JA;EACE,gBAAA;A7C21JF;;A6Cz1JA;EACE,gBAAA;A7C41JF;;A6C11JA;EACE,gBAAA;A7C61JF;;A6C31JA;EACE,gBAAA;A7C81JF;;A6C51JA;EACE,gBAAA;A7C+1JF;;A6C71JA;EACE,gBAAA;A7Cg2JF;;A6C91JA;EACE,gBAAA;A7Ci2JF;;A6C/1JA;EACE,gBAAA;A7Ck2JF;;A6Ch2JA;EACE,gBAAA;A7Cm2JF;;A6Cj2JA;EACE,gBAAA;A7Co2JF;;A6Cl2JA;EACE,gBAAA;A7Cq2JF;;A6Cn2JA;EACE,gBAAA;A7Cs2JF;;A6Cp2JA;EACE,gBAAA;A7Cu2JF;;A6Cr2JA;EACE,gBAAA;A7Cw2JF;;A6Ct2JA;EACE,gBAAA;A7Cy2JF;;A6Cv2JA;EACE,gBAAA;A7C02JF;;A6Cx2JA;;EAEE,gBAAA;A7C22JF;;A6Cz2JA;EACE,gBAAA;A7C42JF;;A6C12JA;EACE,gBAAA;A7C62JF;;A6C32JA;EACE,gBAAA;A7C82JF;;A6C52JA;EACE,gBAAA;A7C+2JF;;A6C72JA;EACE,gBAAA;A7Cg3JF;;A6C92JA;EACE,gBAAA;A7Ci3JF;;A6C/2JA;EACE,gBAAA;A7Ck3JF;;A6Ch3JA;EACE,gBAAA;A7Cm3JF;;A6Cj3JA;EACE,gBAAA;A7Co3JF;;A6Cl3JA;EACE,gBAAA;A7Cq3JF;;A6Cn3JA;EACE,gBAAA;A7Cs3JF;;A6Cp3JA;EACE,gBAAA;A7Cu3JF;;A6Cr3JA;EACE,gBAAA;A7Cw3JF;;A6Ct3JA;EACE,gBAAA;A7Cy3JF;;A6Cv3JA;EACE,gBAAA;A7C03JF;;A6Cx3JA;;EAEE,gBAAA;A7C23JF;;A6Cz3JA;EACE,gBAAA;A7C43JF;;A6C13JA;EACE,gBAAA;A7C63JF;;A6C33JA;EACE,gBAAA;A7C83JF;;A6C53JA;EACE,gBAAA;A7C+3JF;;A6C73JA;;EAEE,gBAAA;A7Cg4JF;;A6C93JA;EACE,gBAAA;A7Ci4JF;;A6C/3JA;EACE,gBAAA;A7Ck4JF;;A6Ch4JA;EACE,gBAAA;A7Cm4JF;;A6Cj4JA;;;EAGE,gBAAA;A7Co4JF;;A6Cl4JA;;EAEE,gBAAA;A7Cq4JF;;A6Cn4JA;;EAEE,gBAAA;A7Cs4JF;;A6Cp4JA;;EAEE,gBAAA;A7Cu4JF;;A6Cr4JA;;EAEE,gBAAA;A7Cw4JF;;A6Ct4JA;EACE,gBAAA;A7Cy4JF;;A6Cv4JA;EACE,gBAAA;A7C04JF;;A6Cx4JA;EACE,gBAAA;A7C24JF;;A6Cz4JA;EACE,gBAAA;A7C44JF;;A6C14JA;EACE,gBAAA;A7C64JF;;A6C34JA;EACE,gBAAA;A7C84JF;;A6C54JA;EACE,gBAAA;A7C+4JF;;A6C74JA;EACE,gBAAA;A7Cg5JF;;A6C94JA;EACE,gBAAA;A7Ci5JF;;A6C/4JA;EACE,gBAAA;A7Ck5JF;;A6Ch5JA;EACE,gBAAA;A7Cm5JF;;A6Cj5JA;;EAEE,gBAAA;A7Co5JF;;A6Cl5JA;;EAEE,gBAAA;A7Cq5JF;;A6Cn5JA;;EAEE,gBAAA;A7Cs5JF;;A6Cp5JA;EACE,gBAAA;A7Cu5JF;;A6Cr5JA;;EAEE,gBAAA;A7Cw5JF;;A6Ct5JA;;EAEE,gBAAA;A7Cy5JF;;A6Cv5JA;EACE,gBAAA;A7C05JF;;A6Cx5JA;EACE,gBAAA;A7C25JF;;A6Cz5JA;EACE,gBAAA;A7C45JF;;A6C15JA;EACE,gBAAA;A7C65JF;;A6C35JA;EACE,gBAAA;A7C85JF;;A6C55JA;EACE,gBAAA;A7C+5JF;;A6C75JA;EACE,gBAAA;A7Cg6JF;;A6C95JA;EACE,gBAAA;A7Ci6JF;;A6C/5JA;EACE,gBAAA;A7Ck6JF;;A6Ch6JA;EACE,gBAAA;A7Cm6JF;;A6Cj6JA;EACE,gBAAA;A7Co6JF;;A6Cl6JA;EACE,gBAAA;A7Cq6JF;;A6Cn6JA;EACE,gBAAA;A7Cs6JF;;A6Cp6JA;EACE,gBAAA;A7Cu6JF;;A6Cr6JA;EACE,gBAAA;A7Cw6JF;;A6Ct6JA;EACE,gBAAA;A7Cy6JF;;A6Cv6JA;EACE,gBAAA;A7C06JF;;A6Cx6JA;EACE,gBAAA;A7C26JF;;A6Cz6JA;EACE,gBAAA;A7C46JF;;A6C16JA;EACE,gBAAA;A7C66JF;;A6C36JA;;EAEE,gBAAA;A7C86JF;;A6C56JA;EACE,gBAAA;A7C+6JF;;A6C76JA;EACE,gBAAA;A7Cg7JF;;A6C96JA;EACE,gBAAA;A7Ci7JF;;A6C/6JA;EACE,gBAAA;A7Ck7JF;;A6Ch7JA;EACE,gBAAA;A7Cm7JF;;A6Cj7JA;EACE,gBAAA;A7Co7JF;;A6Cl7JA;EACE,gBAAA;A7Cq7JF;;A6Cn7JA;EACE,gBAAA;A7Cs7JF;;A6Cp7JA;EACE,gBAAA;A7Cu7JF;;A6Cr7JA;EACE,gBAAA;A7Cw7JF;;A6Ct7JA;EACE,gBAAA;A7Cy7JF;;A6Cv7JA;EACE,gBAAA;A7C07JF;;A6Cx7JA;EACE,gBAAA;A7C27JF;;A6Cz7JA;EACE,gBAAA;A7C47JF;;A6C17JA;EACE,gBAAA;A7C67JF;;A6C37JA;EACE,gBAAA;A7C87JF;;A6C57JA;EACE,gBAAA;A7C+7JF;;A6C77JA;EACE,gBAAA;A7Cg8JF;;A6C97JA;EACE,gBAAA;A7Ci8JF;;A6C/7JA;EACE,gBAAA;A7Ck8JF;;A6Ch8JA;EACE,gBAAA;A7Cm8JF;;A6Cj8JA;EACE,gBAAA;A7Co8JF;;A6Cl8JA;EACE,gBAAA;A7Cq8JF;;A6Cn8JA;EACE,gBAAA;A7Cs8JF;;A6Cp8JA;EACE,gBAAA;A7Cu8JF;;A6Cr8JA;EACE,gBAAA;A7Cw8JF;;A6Ct8JA;EACE,gBAAA;A7Cy8JF;;A6Cv8JA;EACE,gBAAA;A7C08JF;;A6Cx8JA;EACE,gBAAA;A7C28JF;;A6Cz8JA;EACE,gBAAA;A7C48JF;;A6C18JA;EACE,gBAAA;A7C68JF;;A6C38JA;EACE,gBAAA;A7C88JF;;A6C58JA;EACE,gBAAA;A7C+8JF;;A6C78JA;EACE,gBAAA;A7Cg9JF;;A6C98JA;EACE,gBAAA;A7Ci9JF;;A6C/8JA;EACE,gBAAA;A7Ck9JF;;A6Ch9JA;EACE,gBAAA;A7Cm9JF;;A6Cj9JA;EACE,gBAAA;A7Co9JF;;A6Cl9JA;EACE,gBAAA;A7Cq9JF;;A6Cn9JA;EACE,gBAAA;A7Cs9JF;;A6Cp9JA;EACE,gBAAA;A7Cu9JF;;A6Cr9JA;EACE,gBAAA;A7Cw9JF;;A6Ct9JA;EACE,gBAAA;A7Cy9JF;;A6Cv9JA;EACE,gBAAA;A7C09JF;;A6Cx9JA;EACE,gBAAA;A7C29JF;;A6Cz9JA;EACE,gBAAA;A7C49JF;;A6C19JA;EACE,gBAAA;A7C69JF;;A6C39JA;EACE,gBAAA;A7C89JF;;A6C59JA;EACE,gBAAA;A7C+9JF;;A6C79JA;EACE,gBAAA;A7Cg+JF;;A6C99JA;;EAEE,gBAAA;A7Ci+JF;;A6C/9JA;;;EAGE,gBAAA;A7Ck+JF;;A6Ch+JA;EACE,gBAAA;A7Cm+JF;;A6Cj+JA;EACE,gBAAA;A7Co+JF;;A6Cl+JA;;EAEE,gBAAA;A7Cq+JF;;A6Cn+JA;EACE,gBAAA;A7Cs+JF;;A6Cp+JA;EACE,gBAAA;A7Cu+JF;;A6Cr+JA;EACE,gBAAA;A7Cw+JF;;A6Ct+JA;EACE,gBAAA;A7Cy+JF;;A6Cv+JA;EACE,gBAAA;A7C0+JF;;A6Cx+JA;EACE,gBAAA;A7C2+JF;;A6Cz+JA;EACE,gBAAA;A7C4+JF;;A6C1+JA;EACE,gBAAA;A7C6+JF;;A6C3+JA;EACE,gBAAA;A7C8+JF;;A6C5+JA;EACE,gBAAA;A7C++JF;;A6C7+JA;;EAEE,gBAAA;A7Cg/JF;;A6C9+JA;;EAEE,gBAAA;A7Ci/JF;;A6C/+JA;EACE,gBAAA;A7Ck/JF;;A6Ch/JA;EACE,gBAAA;A7Cm/JF;;A6Cj/JA;EACE,gBAAA;A7Co/JF;;A6Cl/JA;EACE,gBAAA;A7Cq/JF;;A6Cn/JA;EACE,gBAAA;A7Cs/JF;;A6Cp/JA;EACE,gBAAA;A7Cu/JF;;A6Cr/JA;;EAEE,gBAAA;A7Cw/JF;;A6Ct/JA;;EAEE,gBAAA;A7Cy/JF;;A6Cv/JA;EACE,gBAAA;A7C0/JF;;A6Cx/JA;EACE,gBAAA;A7C2/JF;;A6Cz/JA;EACE,gBAAA;A7C4/JF;;A6C1/JA;EACE,gBAAA;A7C6/JF;;A6C3/JA;;EAEE,gBAAA;A7C8/JF;;A6C5/JA;;EAEE,gBAAA;A7C+/JF;;A6C7/JA;EACE,gBAAA;A7CggKF;;A6C9/JA;EACE,gBAAA;A7CigKF;;A6C//JA;EACE,gBAAA;A7CkgKF;;A6ChgKA;;;EAGE,gBAAA;A7CmgKF;;A6CjgKA;;EAEE,gBAAA;A7CogKF;;A6ClgKA;;EAEE,gBAAA;A7CqgKF;;A6CngKA;;EAEE,gBAAA;A7CsgKF;;A6CpgKA;;EAEE,gBAAA;A7CugKF;;A6CrgKA;EACE,gBAAA;A7CwgKF;;A6CtgKA;;;EAGE,gBAAA;A7CygKF;;A6CvgKA;EACE,gBAAA;A7C0gKF;;A6CxgKA;EACE,gBAAA;A7C2gKF;;A6CzgKA;EACE,gBAAA;A7C4gKF;;A6C1gKA;EACE,gBAAA;A7C6gKF;;A6C3gKA;;EAEE,gBAAA;A7C8gKF;;A6C5gKA;;EAEE,gBAAA;A7C+gKF;;A6C7gKA;EACE,gBAAA;A7CghKF;;A6C9gKA;EACE,gBAAA;A7CihKF;;A6C/gKA;EACE,gBAAA;A7CkhKF;;A6ChhKA;EACE,gBAAA;A7CmhKF;;A6CjhKA;EACE,gBAAA;A7CohKF;;A6ClhKA;EACE,gBAAA;A7CqhKF;;A6CnhKA;EACE,gBAAA;A7CshKF;;A6CphKA;EACE,gBAAA;A7CuhKF;;A6CrhKA;EACE,gBAAA;A7CwhKF;;A6CthKA;EACE,gBAAA;A7CyhKF;;A6CvhKA;EACE,gBAAA;A7C0hKF;;A6CxhKA;EACE,kBAAA;EACA,UAAA;EACA,WAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,sBAAA;EACA,SAAA;A7C2hKF;;A6CzhKA;;EAEE,gBAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,iBAAA;EACA,UAAA;A7C4hKF","file":"../../css/admin.css","sourcesContent":["@charset \"UTF-8\";\n#poststuff .llms-metabox:before, #poststuff .llms-metabox:after,\n.llms-form-fields:before,\n.llms-metabox .llms-access-plans:before,\n.llms-collapsible .llms-collapsible-body:before,\n.llms-collapsible .llms-collapsible-header:before,\n.llms-collapsible:before,\n.llms-form-fields:after,\n.llms-metabox .llms-access-plans:after,\n.llms-collapsible .llms-collapsible-body:after,\n.llms-collapsible .llms-collapsible-header:after,\n.llms-collapsible:after {\n content: \" \";\n display: table;\n}\n#poststuff .llms-metabox:after,\n.llms-form-fields:after,\n.llms-metabox .llms-access-plans:after,\n.llms-collapsible .llms-collapsible-body:after,\n.llms-collapsible .llms-collapsible-header:after,\n.llms-collapsible:after {\n clear: both;\n}\n\n.llms-button-action,\n.llms-button-danger,\n.llms-button-primary,\n.llms-button-secondary {\n border: none;\n border-radius: 8px;\n color: #fefefe;\n cursor: pointer;\n display: inline-block;\n font-size: 18px;\n font-weight: 700;\n text-decoration: none;\n text-shadow: none;\n line-height: 1;\n margin: 0;\n max-width: 100%;\n padding: 12px 24px;\n position: relative;\n transition: all 0.5s ease;\n}\n.llms-button-action:disabled,\n.llms-button-danger:disabled,\n.llms-button-primary:disabled,\n.llms-button-secondary:disabled {\n opacity: 0.5;\n}\n.llms-button-action:hover, .llms-button-action:active,\n.llms-button-danger:hover,\n.llms-button-danger:active,\n.llms-button-primary:hover,\n.llms-button-primary:active,\n.llms-button-secondary:hover,\n.llms-button-secondary:active {\n color: #fefefe;\n}\n.llms-button-action:focus,\n.llms-button-danger:focus,\n.llms-button-primary:focus,\n.llms-button-secondary:focus {\n color: #fefefe;\n}\n.llms-button-action.auto,\n.llms-button-danger.auto,\n.llms-button-primary.auto,\n.llms-button-secondary.auto {\n width: auto;\n}\n.llms-button-action.full,\n.llms-button-danger.full,\n.llms-button-primary.full,\n.llms-button-secondary.full {\n display: block;\n text-align: center;\n width: 100%;\n}\n.llms-button-action.square,\n.llms-button-danger.square,\n.llms-button-primary.square,\n.llms-button-secondary.square {\n padding: 12px;\n}\n.llms-button-action.small,\n.llms-button-danger.small,\n.llms-button-primary.small,\n.llms-button-secondary.small {\n font-size: 13px;\n padding: 8px 14px;\n}\n.llms-button-action.small.square,\n.llms-button-danger.small.square,\n.llms-button-primary.small.square,\n.llms-button-secondary.small.square {\n padding: 8px;\n}\n.llms-button-action.large,\n.llms-button-danger.large,\n.llms-button-primary.large,\n.llms-button-secondary.large {\n font-size: 18px;\n line-height: 1.2;\n padding: 16px 32px;\n}\n.llms-button-action.large.square,\n.llms-button-danger.large.square,\n.llms-button-primary.large.square,\n.llms-button-secondary.large.square {\n padding: 16px;\n}\n.llms-button-action.large .fa,\n.llms-button-danger.large .fa,\n.llms-button-primary.large .fa,\n.llms-button-secondary.large .fa {\n left: -7px;\n position: relative;\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-action,\na.llms-button-danger,\na.llms-button-primary {\n color: #fefefe;\n}\n\n.llms-button-primary {\n background: #466dd8;\n}\n.llms-button-primary:hover, .llms-button-primary.clicked {\n background: #2b55cb;\n}\n.llms-button-primary:focus, .llms-button-primary:active {\n background: #6888df;\n}\n\n.llms-button-secondary {\n background: #e1e1e1;\n color: #444;\n}\n.llms-button-secondary:hover {\n color: #414141;\n background: #cdcdcd;\n}\n.llms-button-secondary:focus, .llms-button-secondary:active {\n color: #414141;\n background: #ebebeb;\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-secondary {\n color: #444;\n}\n\n.llms-button-action {\n background: #c05621;\n}\n.llms-button-action:hover, .llms-button-action.clicked {\n background: #f67d28;\n}\n.llms-button-action:focus, .llms-button-action:active {\n background: #faad76;\n}\n\n.llms-button-danger {\n background: #bb231c;\n}\n.llms-button-danger:hover {\n background: #981c17;\n}\n.llms-button-danger:focus, .llms-button-danger:active {\n background: #cd261f;\n}\n\n.llms-button-outline {\n background: transparent;\n border: 3px solid #1D2327;\n border-radius: 8px;\n color: #1D2327;\n cursor: pointer;\n font-size: 16px;\n font-weight: 700;\n text-decoration: none;\n text-shadow: none;\n line-height: 1;\n margin: 0;\n max-width: 100%;\n padding: 12px 24px;\n position: relative;\n transition: all 0.5s ease;\n}\n.llms-button-outline:disabled {\n opacity: 0.5;\n}\n.llms-button-outline:hover, .llms-button-outline:active {\n color: #1D2327;\n}\n.llms-button-outline:focus {\n color: #1D2327;\n}\n.llms-button-outline.auto {\n width: auto;\n}\n.llms-button-outline.full {\n display: block;\n text-align: center;\n width: 100%;\n}\n.llms-button-outline.square {\n padding: 12px;\n}\n\n.llms-course-continue-button {\n display: inline-block;\n}\n\n.lifterlms [data-tip],\n.lifterlms [data-title-default],\n.lifterlms [data-title-active],\n.llms-metabox [data-tip],\n.llms-metabox [data-title-default],\n.llms-metabox [data-title-active],\n.llms-mb-container [data-tip],\n.llms-mb-container [data-title-default],\n.llms-mb-container [data-title-active],\n.llms-quiz-wrapper [data-tip],\n.llms-quiz-wrapper [data-title-default],\n.llms-quiz-wrapper [data-title-active] {\n position: relative;\n}\n.lifterlms [data-tip].tip--top-right:before,\n.lifterlms [data-title-default].tip--top-right:before,\n.lifterlms [data-title-active].tip--top-right:before,\n.llms-metabox [data-tip].tip--top-right:before,\n.llms-metabox [data-title-default].tip--top-right:before,\n.llms-metabox [data-title-active].tip--top-right:before,\n.llms-mb-container [data-tip].tip--top-right:before,\n.llms-mb-container [data-title-default].tip--top-right:before,\n.llms-mb-container [data-title-active].tip--top-right:before,\n.llms-quiz-wrapper [data-tip].tip--top-right:before,\n.llms-quiz-wrapper [data-title-default].tip--top-right:before,\n.llms-quiz-wrapper [data-title-active].tip--top-right:before {\n bottom: 100%;\n left: -10px;\n}\n.lifterlms [data-tip].tip--top-right:hover:before,\n.lifterlms [data-title-default].tip--top-right:hover:before,\n.lifterlms [data-title-active].tip--top-right:hover:before,\n.llms-metabox [data-tip].tip--top-right:hover:before,\n.llms-metabox [data-title-default].tip--top-right:hover:before,\n.llms-metabox [data-title-active].tip--top-right:hover:before,\n.llms-mb-container [data-tip].tip--top-right:hover:before,\n.llms-mb-container [data-title-default].tip--top-right:hover:before,\n.llms-mb-container [data-title-active].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before {\n bottom: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--top-right:after,\n.lifterlms [data-title-default].tip--top-right:after,\n.lifterlms [data-title-active].tip--top-right:after,\n.llms-metabox [data-tip].tip--top-right:after,\n.llms-metabox [data-title-default].tip--top-right:after,\n.llms-metabox [data-title-active].tip--top-right:after,\n.llms-mb-container [data-tip].tip--top-right:after,\n.llms-mb-container [data-title-default].tip--top-right:after,\n.llms-mb-container [data-title-active].tip--top-right:after,\n.llms-quiz-wrapper [data-tip].tip--top-right:after,\n.llms-quiz-wrapper [data-title-default].tip--top-right:after,\n.llms-quiz-wrapper [data-title-active].tip--top-right:after {\n border-top-color: #444;\n left: 6px;\n top: 0;\n}\n.lifterlms [data-tip].tip--top-right:hover:after,\n.lifterlms [data-title-default].tip--top-right:hover:after,\n.lifterlms [data-title-active].tip--top-right:hover:after,\n.llms-metabox [data-tip].tip--top-right:hover:after,\n.llms-metabox [data-title-default].tip--top-right:hover:after,\n.llms-metabox [data-title-active].tip--top-right:hover:after,\n.llms-mb-container [data-tip].tip--top-right:hover:after,\n.llms-mb-container [data-title-default].tip--top-right:hover:after,\n.llms-mb-container [data-title-active].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after {\n top: -6px;\n}\n.lifterlms [data-tip].tip--top-left:before,\n.lifterlms [data-title-default].tip--top-left:before,\n.lifterlms [data-title-active].tip--top-left:before,\n.llms-metabox [data-tip].tip--top-left:before,\n.llms-metabox [data-title-default].tip--top-left:before,\n.llms-metabox [data-title-active].tip--top-left:before,\n.llms-mb-container [data-tip].tip--top-left:before,\n.llms-mb-container [data-title-default].tip--top-left:before,\n.llms-mb-container [data-title-active].tip--top-left:before,\n.llms-quiz-wrapper [data-tip].tip--top-left:before,\n.llms-quiz-wrapper [data-title-default].tip--top-left:before,\n.llms-quiz-wrapper [data-title-active].tip--top-left:before {\n bottom: 100%;\n right: -10px;\n}\n.lifterlms [data-tip].tip--top-left:hover:before,\n.lifterlms [data-title-default].tip--top-left:hover:before,\n.lifterlms [data-title-active].tip--top-left:hover:before,\n.llms-metabox [data-tip].tip--top-left:hover:before,\n.llms-metabox [data-title-default].tip--top-left:hover:before,\n.llms-metabox [data-title-active].tip--top-left:hover:before,\n.llms-mb-container [data-tip].tip--top-left:hover:before,\n.llms-mb-container [data-title-default].tip--top-left:hover:before,\n.llms-mb-container [data-title-active].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before {\n bottom: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--top-left:after,\n.lifterlms [data-title-default].tip--top-left:after,\n.lifterlms [data-title-active].tip--top-left:after,\n.llms-metabox [data-tip].tip--top-left:after,\n.llms-metabox [data-title-default].tip--top-left:after,\n.llms-metabox [data-title-active].tip--top-left:after,\n.llms-mb-container [data-tip].tip--top-left:after,\n.llms-mb-container [data-title-default].tip--top-left:after,\n.llms-mb-container [data-title-active].tip--top-left:after,\n.llms-quiz-wrapper [data-tip].tip--top-left:after,\n.llms-quiz-wrapper [data-title-default].tip--top-left:after,\n.llms-quiz-wrapper [data-title-active].tip--top-left:after {\n border-top-color: #444;\n right: 6px;\n top: 0;\n}\n.lifterlms [data-tip].tip--top-left:hover:after,\n.lifterlms [data-title-default].tip--top-left:hover:after,\n.lifterlms [data-title-active].tip--top-left:hover:after,\n.llms-metabox [data-tip].tip--top-left:hover:after,\n.llms-metabox [data-title-default].tip--top-left:hover:after,\n.llms-metabox [data-title-active].tip--top-left:hover:after,\n.llms-mb-container [data-tip].tip--top-left:hover:after,\n.llms-mb-container [data-title-default].tip--top-left:hover:after,\n.llms-mb-container [data-title-active].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after {\n top: -6px;\n}\n.lifterlms [data-tip].tip--bottom-left:before,\n.lifterlms [data-title-default].tip--bottom-left:before,\n.lifterlms [data-title-active].tip--bottom-left:before,\n.llms-metabox [data-tip].tip--bottom-left:before,\n.llms-metabox [data-title-default].tip--bottom-left:before,\n.llms-metabox [data-title-active].tip--bottom-left:before,\n.llms-mb-container [data-tip].tip--bottom-left:before,\n.llms-mb-container [data-title-default].tip--bottom-left:before,\n.llms-mb-container [data-title-active].tip--bottom-left:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:before {\n top: 100%;\n right: -10px;\n}\n.lifterlms [data-tip].tip--bottom-left:hover:before,\n.lifterlms [data-title-default].tip--bottom-left:hover:before,\n.lifterlms [data-title-active].tip--bottom-left:hover:before,\n.llms-metabox [data-tip].tip--bottom-left:hover:before,\n.llms-metabox [data-title-default].tip--bottom-left:hover:before,\n.llms-metabox [data-title-active].tip--bottom-left:hover:before,\n.llms-mb-container [data-tip].tip--bottom-left:hover:before,\n.llms-mb-container [data-title-default].tip--bottom-left:hover:before,\n.llms-mb-container [data-title-active].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before {\n top: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--bottom-left:after,\n.lifterlms [data-title-default].tip--bottom-left:after,\n.lifterlms [data-title-active].tip--bottom-left:after,\n.llms-metabox [data-tip].tip--bottom-left:after,\n.llms-metabox [data-title-default].tip--bottom-left:after,\n.llms-metabox [data-title-active].tip--bottom-left:after,\n.llms-mb-container [data-tip].tip--bottom-left:after,\n.llms-mb-container [data-title-default].tip--bottom-left:after,\n.llms-mb-container [data-title-active].tip--bottom-left:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:after {\n border-bottom-color: #444;\n right: 6px;\n bottom: 0;\n}\n.lifterlms [data-tip].tip--bottom-left:hover:after,\n.lifterlms [data-title-default].tip--bottom-left:hover:after,\n.lifterlms [data-title-active].tip--bottom-left:hover:after,\n.llms-metabox [data-tip].tip--bottom-left:hover:after,\n.llms-metabox [data-title-default].tip--bottom-left:hover:after,\n.llms-metabox [data-title-active].tip--bottom-left:hover:after,\n.llms-mb-container [data-tip].tip--bottom-left:hover:after,\n.llms-mb-container [data-title-default].tip--bottom-left:hover:after,\n.llms-mb-container [data-title-active].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after {\n bottom: -6px;\n}\n.lifterlms [data-tip].tip--bottom-right:before,\n.lifterlms [data-title-default].tip--bottom-right:before,\n.lifterlms [data-title-active].tip--bottom-right:before,\n.llms-metabox [data-tip].tip--bottom-right:before,\n.llms-metabox [data-title-default].tip--bottom-right:before,\n.llms-metabox [data-title-active].tip--bottom-right:before,\n.llms-mb-container [data-tip].tip--bottom-right:before,\n.llms-mb-container [data-title-default].tip--bottom-right:before,\n.llms-mb-container [data-title-active].tip--bottom-right:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:before {\n top: 100%;\n left: -10px;\n}\n.lifterlms [data-tip].tip--bottom-right:hover:before,\n.lifterlms [data-title-default].tip--bottom-right:hover:before,\n.lifterlms [data-title-active].tip--bottom-right:hover:before,\n.llms-metabox [data-tip].tip--bottom-right:hover:before,\n.llms-metabox [data-title-default].tip--bottom-right:hover:before,\n.llms-metabox [data-title-active].tip--bottom-right:hover:before,\n.llms-mb-container [data-tip].tip--bottom-right:hover:before,\n.llms-mb-container [data-title-default].tip--bottom-right:hover:before,\n.llms-mb-container [data-title-active].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before {\n top: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--bottom-right:after,\n.lifterlms [data-title-default].tip--bottom-right:after,\n.lifterlms [data-title-active].tip--bottom-right:after,\n.llms-metabox [data-tip].tip--bottom-right:after,\n.llms-metabox [data-title-default].tip--bottom-right:after,\n.llms-metabox [data-title-active].tip--bottom-right:after,\n.llms-mb-container [data-tip].tip--bottom-right:after,\n.llms-mb-container [data-title-default].tip--bottom-right:after,\n.llms-mb-container [data-title-active].tip--bottom-right:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:after {\n border-bottom-color: #444;\n left: 6px;\n bottom: 0;\n}\n.lifterlms [data-tip].tip--bottom-right:hover:after,\n.lifterlms [data-title-default].tip--bottom-right:hover:after,\n.lifterlms [data-title-active].tip--bottom-right:hover:after,\n.llms-metabox [data-tip].tip--bottom-right:hover:after,\n.llms-metabox [data-title-default].tip--bottom-right:hover:after,\n.llms-metabox [data-title-active].tip--bottom-right:hover:after,\n.llms-mb-container [data-tip].tip--bottom-right:hover:after,\n.llms-mb-container [data-title-default].tip--bottom-right:hover:after,\n.llms-mb-container [data-title-active].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after {\n bottom: -6px;\n}\n.lifterlms [data-tip]:before,\n.lifterlms [data-title-default]:before,\n.lifterlms [data-title-active]:before,\n.llms-metabox [data-tip]:before,\n.llms-metabox [data-title-default]:before,\n.llms-metabox [data-title-active]:before,\n.llms-mb-container [data-tip]:before,\n.llms-mb-container [data-title-default]:before,\n.llms-mb-container [data-title-active]:before,\n.llms-quiz-wrapper [data-tip]:before,\n.llms-quiz-wrapper [data-title-default]:before,\n.llms-quiz-wrapper [data-title-active]:before {\n background: #444;\n border-radius: 4px;\n color: #fff;\n font-size: 13px;\n line-height: 1.2;\n padding: 8px;\n max-width: 300px;\n width: max-content;\n}\n.lifterlms [data-tip]:after,\n.lifterlms [data-title-default]:after,\n.lifterlms [data-title-active]:after,\n.llms-metabox [data-tip]:after,\n.llms-metabox [data-title-default]:after,\n.llms-metabox [data-title-active]:after,\n.llms-mb-container [data-tip]:after,\n.llms-mb-container [data-title-default]:after,\n.llms-mb-container [data-title-active]:after,\n.llms-quiz-wrapper [data-tip]:after,\n.llms-quiz-wrapper [data-title-default]:after,\n.llms-quiz-wrapper [data-title-active]:after {\n content: \"\";\n border: 6px solid transparent;\n height: 0;\n width: 0;\n}\n.lifterlms [data-tip]:before, .lifterlms [data-tip]:after,\n.lifterlms [data-title-default]:before,\n.lifterlms [data-title-default]:after,\n.lifterlms [data-title-active]:before,\n.lifterlms [data-title-active]:after,\n.llms-metabox [data-tip]:before,\n.llms-metabox [data-tip]:after,\n.llms-metabox [data-title-default]:before,\n.llms-metabox [data-title-default]:after,\n.llms-metabox [data-title-active]:before,\n.llms-metabox [data-title-active]:after,\n.llms-mb-container [data-tip]:before,\n.llms-mb-container [data-tip]:after,\n.llms-mb-container [data-title-default]:before,\n.llms-mb-container [data-title-default]:after,\n.llms-mb-container [data-title-active]:before,\n.llms-mb-container [data-title-active]:after,\n.llms-quiz-wrapper [data-tip]:before,\n.llms-quiz-wrapper [data-tip]:after,\n.llms-quiz-wrapper [data-title-default]:before,\n.llms-quiz-wrapper [data-title-default]:after,\n.llms-quiz-wrapper [data-title-active]:before,\n.llms-quiz-wrapper [data-title-active]:after {\n opacity: 0;\n transition: all 0.2s 0.1s ease;\n position: absolute;\n pointer-events: none;\n visibility: hidden;\n}\n.lifterlms [data-tip]:hover:before, .lifterlms [data-tip]:hover:after,\n.lifterlms [data-title-default]:hover:before,\n.lifterlms [data-title-default]:hover:after,\n.lifterlms [data-title-active]:hover:before,\n.lifterlms [data-title-active]:hover:after,\n.llms-metabox [data-tip]:hover:before,\n.llms-metabox [data-tip]:hover:after,\n.llms-metabox [data-title-default]:hover:before,\n.llms-metabox [data-title-default]:hover:after,\n.llms-metabox [data-title-active]:hover:before,\n.llms-metabox [data-title-active]:hover:after,\n.llms-mb-container [data-tip]:hover:before,\n.llms-mb-container [data-tip]:hover:after,\n.llms-mb-container [data-title-default]:hover:before,\n.llms-mb-container [data-title-default]:hover:after,\n.llms-mb-container [data-title-active]:hover:before,\n.llms-mb-container [data-title-active]:hover:after,\n.llms-quiz-wrapper [data-tip]:hover:before,\n.llms-quiz-wrapper [data-tip]:hover:after,\n.llms-quiz-wrapper [data-title-default]:hover:before,\n.llms-quiz-wrapper [data-title-default]:hover:after,\n.llms-quiz-wrapper [data-title-active]:hover:before,\n.llms-quiz-wrapper [data-title-active]:hover:after {\n opacity: 1;\n transition: all 0 0.1s ease;\n visibility: visible;\n z-index: 99999999;\n}\n.lifterlms [data-tip]:before,\n.llms-metabox [data-tip]:before,\n.llms-mb-container [data-tip]:before,\n.llms-quiz-wrapper [data-tip]:before {\n content: attr(data-tip);\n}\n.lifterlms [data-tip].active:before,\n.llms-metabox [data-tip].active:before,\n.llms-mb-container [data-tip].active:before,\n.llms-quiz-wrapper [data-tip].active:before {\n content: attr(data-tip-active);\n}\n\n#adminmenu .toplevel_page_lifterlms .wp-menu-image img {\n padding-top: 6px;\n width: 20px;\n}\n#adminmenu .toplevel_page_lifterlms a[href*=\"page=llms-add-ons\"],\n#adminmenu .opensub .wp-submenu li.current a[href*=\"page=llms-add-ons\"],\n#adminmenu .wp-submenu li.current a[href*=\"page=llms-add-ons\"],\n#adminmenu .wp-submenu li.current a[href*=\"page=llms-add-ons\"],\n#adminmenu .wp-submenu li.current a[href*=\"page=llms-add-ons\"],\n#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a[href*=\"page=llms-add-ons\"] {\n color: #f8954f;\n}\n\n/******************************************************************\n\nGrids for Breakpoints\n\n******************************************************************/\n.last-col {\n float: right;\n padding-right: 0 !important;\n}\n\n.last-col:after {\n clear: both;\n}\n\n/*\nMobile Grid Styles\nThese are the widths for the mobile grid.\nThere are four types, but you can add or customize\nthem however you see fit.\n*/\n@media (max-width: 767px) {\n .m-all {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 100%;\n padding-right: 0;\n }\n .m-1of2 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 50%;\n }\n .m-1of3 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 33.33%;\n }\n .m-2of3 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 66.66%;\n }\n .m-1of4 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 25%;\n }\n .m-3of4 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 75%;\n }\n .m-right {\n text-align: center;\n }\n .m-center {\n text-align: center;\n }\n .m-left {\n text-align: center;\n }\n .d-right {\n text-align: right;\n }\n .d-center {\n text-align: center;\n }\n .d-left {\n text-align: left;\n }\n}\n/* Portrait tablet to landscape */\n@media (min-width: 768px) and (max-width: 1029px) {\n .t-all {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 100%;\n padding-right: 0;\n }\n .t-1of2 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 50%;\n }\n .t-1of3 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 33.33%;\n }\n .t-2of3 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 66.66%;\n }\n .t-1of4 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 25%;\n }\n .t-3of4 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 75%;\n }\n .t-1of5 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 20%;\n }\n .t-2of5 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 40%;\n }\n .t-3of5 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 60%;\n }\n .t-4of5 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 80%;\n }\n .d-right {\n text-align: right;\n }\n .d-center {\n text-align: center;\n }\n .d-left {\n text-align: left;\n }\n}\n/* Landscape to small desktop */\n@media (min-width: 1030px) {\n .d-all {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 100%;\n padding-right: 0;\n }\n .d-1of2 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 50%;\n }\n .d-1of3 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 33.33%;\n }\n .d-2of3 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 66.66%;\n }\n .d-1of4 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 25%;\n }\n .d-3of4 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 75%;\n }\n .d-1of5 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 20%;\n }\n .d-2of5 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 40%;\n }\n .d-3of5 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 60%;\n }\n .d-4of5 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 80%;\n }\n .d-1of6 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 16.6666666667%;\n }\n .d-1of7 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 14.2857142857%;\n }\n .d-2of7 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 28.5714286%;\n }\n .d-3of7 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 42.8571429%;\n }\n .d-4of7 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 57.1428572%;\n }\n .d-5of7 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 71.4285715%;\n }\n .d-6of7 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 85.7142857%;\n }\n .d-1of8 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 12.5%;\n }\n .d-1of9 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 11.1111111111%;\n }\n .d-1of10 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 10%;\n }\n .d-1of11 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 9.0909090909%;\n }\n .d-1of12 {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n width: 8.33%;\n }\n .d-right {\n text-align: right;\n }\n .d-center {\n text-align: center;\n }\n .d-left {\n text-align: left;\n }\n}\n/******************************************************************\n\nForm Styles\n\n******************************************************************/\n#llms-form-wrapper .llms-search-form-wrapper {\n border-bottom: 1px solid #999;\n margin: 20px 0;\n}\n#llms-form-wrapper #llms_analytics_search {\n border: none !important;\n text-shadow: none !important;\n border: none !important;\n outline: none !important;\n box-shadow: none !important;\n margin: 0 !important;\n color: #fefefe !important;\n background: #466dd8 !important;\n border-radius: 0;\n transition: 0.5s;\n}\n#llms-form-wrapper #llms_analytics_search:hover {\n background: #0185a3 !important;\n}\n#llms-form-wrapper #llms_analytics_search:active {\n background: #33b1cb !important;\n}\n\n#llms-skip-setup-form .llms-admin-link {\n background: none !important;\n border: none;\n padding: 0 !important;\n color: #0074a2;\n cursor: pointer;\n}\n#llms-skip-setup-form .llms-admin-link:hover {\n color: #2ea2cc;\n}\n#llms-skip-setup-form .llms-admin-link:focus {\n color: #124964;\n}\n\n/**\n * Toggle Switch ( replaces checkbox on admin panels )\n */\n.llms-switch {\n position: relative;\n}\n.llms-switch .llms-toggle {\n position: absolute;\n margin-left: -9999px;\n visibility: hidden;\n}\n.llms-switch .llms-toggle + label {\n box-sizing: border-box;\n display: block;\n position: relative;\n cursor: pointer;\n outline: none;\n user-select: none;\n}\n.llms-switch input.llms-toggle-round + label {\n border: 2px solid #6c7781;\n border-radius: 10px;\n height: 20px;\n width: 36px;\n}\n.llms-switch input.llms-toggle-round + label:before,\n.llms-switch input.llms-toggle-round + label:after {\n box-sizing: border-box;\n content: \"\";\n display: block;\n position: absolute;\n transition: background 0.4s;\n}\n.llms-switch input.llms-toggle-round:checked + label {\n border-color: #11a0d2;\n background-color: #11a0d2;\n}\n.llms-switch input.llms-toggle-round + label:after {\n height: 12px;\n left: 2px;\n top: 2px;\n background-color: #6c7781;\n border-radius: 50%;\n transition: margin 0.4s;\n width: 12px;\n z-index: 3;\n}\n.llms-switch input.llms-toggle-round:checked + label:after {\n background-color: #fefefe;\n margin-left: 16px;\n}\n.llms-switch input.llms-toggle-round + label:before {\n height: 8px;\n top: 4px;\n border: 1px solid #6c7781;\n border-radius: 50%;\n right: 4px;\n width: 8px;\n z-index: 2;\n}\n.llms-switch input.llms-toggle-round:checked + label:before {\n border-color: #fefefe;\n border-radius: 0;\n left: 6px;\n right: auto;\n width: 2px;\n}\n\n#llms-profile-fields {\n margin: 50px 0;\n}\n#llms-profile-fields .llms-form-field {\n padding-left: 0;\n}\n#llms-profile-fields label {\n display: block;\n font-weight: bold;\n padding: 8px 0 2px;\n}\n#llms-profile-fields .type-checkbox .type-checkbox label {\n display: initial;\n font-weight: initial;\n padding: 0;\n}\n#llms-profile-fields .type-checkbox .type-checkbox input {\n display: inline-block;\n margin-bottom: 0;\n width: 1rem;\n}\n#llms-profile-fields select {\n max-width: 100%;\n}\n\na.llms-voucher-delete {\n background: #bb231c;\n color: #fefefe;\n display: block;\n padding: 4px 2px;\n text-decoration: none;\n transition: ease 0.3s all;\n}\na.llms-voucher-delete:hover {\n background: #af3a26;\n}\n\n.llms-voucher-codes-wrapper table,\n.llms-voucher-redemption-wrapper table {\n width: 100%;\n border-collapse: collapse;\n}\n.llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td,\n.llms-voucher-redemption-wrapper table th,\n.llms-voucher-redemption-wrapper table td {\n border: none;\n}\n.llms-voucher-codes-wrapper table thead,\n.llms-voucher-redemption-wrapper table thead {\n background-color: #466dd8;\n color: #fff;\n}\n.llms-voucher-codes-wrapper table thead th,\n.llms-voucher-redemption-wrapper table thead th {\n padding: 10px 10px;\n}\n.llms-voucher-codes-wrapper table tr,\n.llms-voucher-redemption-wrapper table tr {\n counter-increment: row-counter;\n}\n.llms-voucher-codes-wrapper table tr:nth-child(even),\n.llms-voucher-redemption-wrapper table tr:nth-child(even) {\n background-color: #F1F1F1;\n}\n.llms-voucher-codes-wrapper table tr td,\n.llms-voucher-redemption-wrapper table tr td {\n padding: 5px;\n}\n.llms-voucher-codes-wrapper table tr td:first-child:before,\n.llms-voucher-redemption-wrapper table tr td:first-child:before {\n content: counter(row-counter);\n}\n\n.llms-voucher-codes-wrapper table {\n width: 100%;\n border-collapse: collapse;\n}\n.llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td {\n border: none;\n}\n.llms-voucher-codes-wrapper table thead {\n background-color: #466dd8;\n color: #fff;\n}\n.llms-voucher-codes-wrapper table tr:nth-child(even) {\n background-color: #F1F1F1;\n}\n.llms-voucher-codes-wrapper table tr td span {\n display: inline-block;\n min-width: 30px;\n}\n.llms-voucher-codes-wrapper button {\n cursor: pointer;\n}\n.llms-voucher-codes-wrapper .llms-voucher-delete {\n float: right;\n margin-right: 15px;\n}\n.llms-voucher-codes-wrapper .llms-voucher-uses {\n width: 50px;\n}\n.llms-voucher-codes-wrapper .llms-voucher-add-codes {\n float: right;\n}\n.llms-voucher-codes-wrapper .llms-voucher-add-codes input[type=text] {\n width: 30px;\n}\n\n.llms-voucher-export-wrapper .llms-voucher-export-type {\n width: 100%;\n}\n.llms-voucher-export-wrapper .llms-voucher-export-type p {\n margin: 0 0 0 15px;\n}\n.llms-voucher-export-wrapper .llms-voucher-email-wrapper {\n width: 100%;\n margin: 25px 0;\n}\n.llms-voucher-export-wrapper .llms-voucher-email-wrapper input[type=text] {\n width: 100%;\n}\n.llms-voucher-export-wrapper .llms-voucher-email-wrapper p {\n margin: 0;\n}\n.llms-voucher-export-wrapper > button {\n float: right;\n}\n\n.postbox .inside {\n overflow: auto;\n}\n\n.llms-widget {\n background-color: #FFF;\n border: 1px solid #dedede;\n border-radius: 12px;\n box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n box-sizing: border-box;\n margin-bottom: 20px;\n padding: 20px;\n position: relative;\n width: 100%;\n}\n.llms-widget.alt {\n border: 1px solid #ccc;\n background-color: #efefef;\n margin-bottom: 10px;\n}\n.llms-widget.alt .llms-label {\n color: #777;\n font-size: 14px;\n margin-bottom: 10px;\n padding-bottom: 5px;\n}\n.llms-widget.alt h2 {\n color: #444;\n font-weight: 300;\n}\n.llms-widget a {\n border-bottom: 1px dotted #466dd8;\n display: inline-block;\n text-decoration: none;\n}\n.llms-widget a:hover {\n border-bottom: 1px dotted #2b55cb;\n}\n.llms-widget .llms-widget-content {\n margin: 0.67em 0;\n color: #466dd8;\n font-size: 2.4em;\n font-weight: 700;\n line-height: 1;\n word-break: break-all;\n}\n.llms-widget h2 {\n font-size: 1.8em;\n}\n.llms-widget .llms-label {\n box-sizing: border-box;\n font-size: 18px;\n font-weight: 400;\n margin: 0 0 10px 0;\n text-align: center;\n}\n.llms-widget .llms-chart {\n width: 100%;\n padding: 10px;\n box-sizing: border-box;\n}\n.llms-widget mark.yes {\n background-color: #7ad03a;\n}\n.llms-widget .llms-subtitle {\n margin-bottom: 0;\n}\n.llms-widget .spinner {\n float: none;\n left: 50%;\n margin: -10px 0 0 -10px;\n position: absolute;\n top: 50%;\n z-index: 2;\n}\n.llms-widget.is-loading:before {\n background: #fefefe;\n bottom: 0;\n content: \"\";\n left: 0;\n opacity: 0.9;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 1;\n}\n.llms-widget.is-loading .spinner {\n visibility: visible;\n}\n.llms-widget td[colspan=\"2\"] {\n padding-left: 0;\n}\n.llms-widget tr.llms-disabled-field {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.llms-widget-1-3,\n.llms-widget-1-4,\n.llms-widget-1-5 {\n text-align: center;\n}\n\n.llms-widget .llms-widget-info-toggle {\n color: #AAA;\n cursor: pointer;\n font-size: 16px;\n position: absolute;\n right: 20px;\n top: 20px;\n}\n.llms-widget.info-showing .llms-widget-info {\n display: block;\n}\n\n.llms-widget-info {\n background: #444;\n color: #fefefe;\n bottom: -50px;\n display: none;\n padding: 15px;\n position: absolute;\n text-align: center;\n left: 10px;\n right: 15px;\n z-index: 3;\n}\n.llms-widget-info:before {\n content: \"\";\n border: 12px solid transparent;\n border-bottom-color: #444;\n left: 50%;\n margin-left: -12px;\n position: absolute;\n top: -24px;\n}\n.llms-widget-info p {\n margin: 0;\n}\n\n.llms-widget-row:before, .llms-widget-row:after {\n content: \" \";\n display: table;\n}\n.llms-widget-row:after {\n clear: both;\n}\n\n.llms-widget-row .no-padding {\n padding: 0 !important;\n}\n\n/******************************************************************\n\nSVG Styles\n\n******************************************************************/\nsvg.icon {\n height: 24px;\n width: 24px;\n display: inline-block;\n fill: currentColor;\n vertical-align: baseline;\n}\nbutton svg.icon {\n height: 18px;\n width: 18px;\n margin: 4px -4px 0 4px;\n filter: drop-shadow(0 1px #eee);\n float: right;\n}\nsvg.icon.menu-icon {\n height: 20px;\n width: 20px;\n display: inline-block;\n fill: currentColor;\n vertical-align: text-bottom;\n margin-right: 10px;\n}\nsvg.icon.tree-icon {\n height: 13px;\n width: 13px;\n vertical-align: middle;\n}\nsvg.icon.section-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n}\nsvg.icon.button-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n}\nsvg.icon.button-icon-attr {\n height: 10px;\n width: 10px;\n vertical-align: middle;\n}\nsvg.icon.list-icon {\n height: 12px;\n width: 12px;\n vertical-align: middle;\n}\nsvg.icon.list-icon.on {\n color: #466dd8;\n}\nsvg.icon.list-icon.off {\n color: #444;\n}\nsvg.icon.detail-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n cursor: default;\n}\nsvg.icon.detail-icon.on {\n color: #466dd8;\n}\nsvg.icon.detail-icon.off {\n color: #ccc;\n}\nsvg.icon-ion-arrow-up {\n transform: rotate(90deg);\n}\nsvg use {\n pointer-events: none;\n}\n\n/******************************************************************\n\nMetabox Tabs\n\n******************************************************************/\n#side-sortables .tab-content {\n padding: 0;\n}\n\n.llms-mb-container .tab-content {\n display: none;\n background-color: #FFF;\n padding: 0 20px;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) {\n margin: 0 0 15px 0;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li {\n padding: 20px 0;\n margin: 0;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.select:not([class*=d-]) {\n width: 100%;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li:last-child {\n border: 0;\n padding-bottom: 0;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.top {\n border-bottom: 0;\n padding-bottom: 0;\n}\n.llms-mb-container .tab-content .full-width {\n width: 100%;\n}\n.llms-mb-container .tab-content #wp-content-editor-tools {\n background: none;\n}\n\n.llms-mb-container .tab-content.llms-active {\n display: inherit;\n}\n\n.llms-mb-container .tab-content .no-border {\n border-bottom: 0px;\n}\n\n/******************************************************************\n\nStyles for topModal modal\n\n******************************************************************/\n/**\n * Base modal styles\n */\n.topModal {\n display: none;\n position: relative;\n border: 4px solid #808080;\n background: #fff;\n z-index: 1000001;\n padding: 2px;\n max-width: 500px;\n margin: 34px auto 0;\n box-sizing: border-box;\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-color: #ffffff;\n border-radius: 2px;\n border: 1px solid #dddddd;\n}\n\n.topModalClose {\n float: right;\n cursor: pointer;\n margin-right: 10px;\n margin-top: 10px;\n}\n\n.topModalContainer {\n display: none;\n overflow: auto;\n overflow-y: hidden;\n position: fixed;\n top: 0 !important;\n right: 0;\n bottom: 0;\n left: 0;\n -webkit-overflow-scrolling: touch;\n width: auto !important;\n margin-left: 0 !important;\n background-color: transparent !important;\n z-index: 100002 !important;\n}\n\n.topModalBackground {\n display: none;\n background: #000;\n position: fixed;\n height: 100%;\n width: 100%;\n top: 0 !important;\n left: 0;\n margin-left: 0 !important;\n z-index: 100002 !important;\n box-sizing: border-box;\n overflow: auto;\n overflow-y: hidden;\n}\n\nbody.modal-open {\n overflow: hidden;\n}\n\n.llms-modal-header {\n border-top-right-radius: 1px;\n border-top-left-radius: 1px;\n background: #466dd8;\n color: #eeeeee;\n padding: 10px 15px;\n font-size: 18px;\n}\n\n#llms-icon-modal-close {\n width: 16px;\n height: 16px;\n fill: #fefefe;\n}\n\n.llms-modal-content {\n padding: 20px;\n}\n.llms-modal-content h3 {\n margin-top: 0;\n}\n\n/**\n * Custom Modal Styles for LifterLMS\n */\n.llms-modal-form h1 {\n margin-top: 0;\n}\n.llms-modal-form input[type=text] {\n width: 100%;\n}\n.llms-modal-form textarea,\n.llms-modal-form input[type=text],\n.llms-modal-form input[type=password],\n.llms-modal-form input[type=file],\n.llms-modal-form input[type=datetime],\n.llms-modal-form input[type=datetime-local],\n.llms-modal-form input[type=date],\n.llms-modal-form input[type=month],\n.llms-modal-form input[type=time],\n.llms-modal-form input[type=week],\n.llms-modal-form input[type=number],\n.llms-modal-form input[type=email],\n.llms-modal-form input[type=url],\n.llms-modal-form input[type=search],\n.llms-modal-form input[type=tel],\n.llms-modal-form input[type=color] {\n padding: 0 0.4em 0 0.4em;\n margin-bottom: 2em;\n vertical-align: middle;\n border-radius: 3px;\n min-width: 50px;\n max-width: 635px;\n width: 100%;\n min-height: 32px;\n background-color: #fff;\n border: 1px solid #ccc;\n margin: 0 0 24px 0;\n outline: none;\n transition: border 0.3s ease-in-out 0s;\n}\n.llms-modal-form textarea:focus,\n.llms-modal-form input[type=text]:focus,\n.llms-modal-form input[type=password]:focus,\n.llms-modal-form input[type=file]:focus,\n.llms-modal-form input[type=datetime]:focus,\n.llms-modal-form input[type=datetime-local]:focus,\n.llms-modal-form input[type=date]:focus,\n.llms-modal-form input[type=month]:focus,\n.llms-modal-form input[type=time]:focus,\n.llms-modal-form input[type=week]:focus,\n.llms-modal-form input[type=number]:focus,\n.llms-modal-form input[type=email]:focus,\n.llms-modal-form input[type=url]:focus,\n.llms-modal-form input[type=search]:focus,\n.llms-modal-form input[type=tel]:focus,\n.llms-modal-form input[type=color]:focus {\n background: #fefefe;\n border: 1px solid #466dd8;\n}\n.llms-modal-form textarea {\n padding: 0.4em !important;\n height: 100px !important;\n border-radius: 3px;\n vertical-align: middle;\n min-height: 32px;\n outline: none;\n box-sizing: border-box;\n}\n.llms-modal-form textarea:focus {\n background: #fefefe;\n border: 1px solid #466dd8;\n}\n.llms-modal-form .chosen-container-single .chosen-single {\n border-radius: 3px;\n vertical-align: middle;\n min-height: 32px;\n border: 1px solid #ccc;\n width: 100%;\n background: #fefefe !important;\n outline: none;\n box-sizing: border-box;\n box-shadow: 0 0 0 #fff;\n line-height: 32px;\n margin: 0 0 24px 0;\n}\n.llms-modal-form .chosen-container-single .chosen-single:focus {\n background: #fefefe;\n border: 1px solid #466dd8;\n}\n.llms-modal-form .chosen-container-single .chosen-single div b {\n margin-top: 4px;\n}\n.llms-modal-form .chosen-search input[type=text] {\n border: 1px solid #ccc;\n}\n.llms-modal-form .chosen-search input[type=text]:focus {\n background-color: #fefefe;\n border: 1px solid #466dd8;\n}\n.llms-modal-form .chosen-container-single .chosen-drop {\n margin-top: -28px;\n}\n.llms-modal-form .llms-button-primary, .llms-modal-form .llms-button-secondary {\n padding: 10px 10px;\n border-radius: 0;\n transition: 0.5s;\n box-shadow: 0 1px 1px #ccc;\n}\n.llms-modal-form .llms-button-primary.full, .llms-modal-form .llms-button-secondary.full {\n width: 100%;\n}\n\n.modal-open .select2-dropdown {\n z-index: 1000005;\n}\n\n.button.llms-merge-code-button {\n vertical-align: middle;\n}\n.button.llms-merge-code-button svg {\n margin-right: 2px;\n position: relative;\n top: 4px;\n width: 16px;\n}\n.button.llms-merge-code-button svg g {\n fill: currentColor;\n}\n\n.llms-mb-container .llms-merge-code-wrapper {\n float: right;\n top: -5px;\n}\n\n.llms-merge-code-wrapper {\n display: inline;\n position: relative;\n}\n\n.llms-merge-codes {\n background: #f7f7f7;\n border: 1px solid #ccc;\n border-radius: 3px;\n box-shadow: 0 1px 0 #ccc;\n color: #555;\n display: none;\n left: 1px;\n overflow: hidden;\n position: absolute;\n top: 30px;\n width: 200px;\n}\n.llms-merge-codes ul {\n margin: 0;\n padding: 0;\n}\n.llms-merge-codes li {\n cursor: pointer;\n margin: 0;\n padding: 4px 8px !important;\n border-bottom: 1px solid #ccc;\n}\n.llms-merge-codes li:hover {\n color: #23282d;\n background: #fefefe;\n}\n.llms-merge-codes.active {\n display: block;\n z-index: 777;\n}\n\n/******************************************************************\n\nBase Mobile\n\n******************************************************************/\n.llms-nav-tab,\n.llms-nav-tab-filters {\n display: block;\n width: 100%;\n}\n\nform.llms-nav-tab-filters.full-width {\n width: 100%;\n}\nform.llms-nav-tab-filters.full-width label {\n display: inline-block;\n width: 10%;\n text-align: left;\n}\nform.llms-nav-tab-filters.full-width .select2-container {\n width: 85% !important;\n}\n\n.llms-nav-tab-settings {\n display: block;\n width: 100%;\n}\n\n#llms-form-wrapper .llms-select {\n width: 100%;\n margin-bottom: 20px;\n}\n#llms-form-wrapper .llms-checkbox {\n display: inline-block;\n width: 100%;\n text-align: left;\n}\n#llms-form-wrapper .llms-filter-options {\n width: 100%;\n}\n#llms-form-wrapper .llms-date-select {\n width: 100%;\n display: inline-block;\n margin-bottom: 20px;\n}\n#llms-form-wrapper .llms-date-select input[type=text] {\n width: 100%;\n}\nul.tabs li {\n display: block;\n}\n\n@media only screen and (min-width: 481px) {\n /******************************************************************\n\n Larger Phones\n\n ******************************************************************/\n #llms-form-wrapper .llms-checkbox {\n width: 33%;\n }\n}\n@media only screen and (min-width: 768px) {\n /******************************************************************\n\n Tablets and small computers\n\n ******************************************************************/\n ul.tabs li {\n display: inline-block;\n }\n .llms-nav-tab {\n display: inline-block;\n width: 33%;\n }\n .llms-nav-tab-settings {\n display: inline-block;\n width: 25%;\n }\n #llms-form-wrapper .llms-select {\n width: 50%;\n max-width: 500px;\n }\n #llms-form-wrapper .llms-filter-options {\n width: 50%;\n max-width: 500px;\n }\n #llms-form-wrapper .llms-date-select {\n width: 47.5%;\n }\n #llms-form-wrapper .llms-date-select:first-child {\n margin-right: 5%;\n }\n .llms-widget input[type=text],\n.llms-widget input[type=password],\n.llms-widget input[type=datetime],\n.llms-widget input[type=datetime-local],\n.llms-widget input[type=date],\n.llms-widget input[type=month],\n.llms-widget input[type=time],\n.llms-widget input[type=week],\n.llms-widget input[type=number],\n.llms-widget input[type=email],\n.llms-widget input[type=url],\n.llms-widget input[type=search],\n.llms-widget input[type=tel],\n.llms-widget input[type=color],\n.llms-widget select,\n.llms-widget textarea {\n width: 50%;\n }\n .llms-widget input[type=text].medium,\n.llms-widget input[type=password].medium,\n.llms-widget input[type=datetime].medium,\n.llms-widget input[type=datetime-local].medium,\n.llms-widget input[type=date].medium,\n.llms-widget input[type=month].medium,\n.llms-widget input[type=time].medium,\n.llms-widget input[type=week].medium,\n.llms-widget input[type=number].medium,\n.llms-widget input[type=email].medium,\n.llms-widget input[type=url].medium,\n.llms-widget input[type=search].medium,\n.llms-widget input[type=tel].medium,\n.llms-widget input[type=color].medium,\n.llms-widget select.medium,\n.llms-widget textarea.medium {\n width: 30%;\n }\n .llms-widget input[type=text].small,\n.llms-widget input[type=password].small,\n.llms-widget input[type=datetime].small,\n.llms-widget input[type=datetime-local].small,\n.llms-widget input[type=date].small,\n.llms-widget input[type=month].small,\n.llms-widget input[type=time].small,\n.llms-widget input[type=week].small,\n.llms-widget input[type=number].small,\n.llms-widget input[type=email].small,\n.llms-widget input[type=url].small,\n.llms-widget input[type=search].small,\n.llms-widget input[type=tel].small,\n.llms-widget input[type=color].small,\n.llms-widget select.small,\n.llms-widget textarea.small {\n width: 20%;\n }\n .llms-widget input[type=text].tiny,\n.llms-widget input[type=password].tiny,\n.llms-widget input[type=datetime].tiny,\n.llms-widget input[type=datetime-local].tiny,\n.llms-widget input[type=date].tiny,\n.llms-widget input[type=month].tiny,\n.llms-widget input[type=time].tiny,\n.llms-widget input[type=week].tiny,\n.llms-widget input[type=number].tiny,\n.llms-widget input[type=email].tiny,\n.llms-widget input[type=url].tiny,\n.llms-widget input[type=search].tiny,\n.llms-widget input[type=tel].tiny,\n.llms-widget input[type=color].tiny,\n.llms-widget select.tiny,\n.llms-widget textarea.tiny {\n width: 10%;\n }\n}\n@media only screen and (min-width: 1030px) {\n /******************************************************************\n\n Desktop Stylesheet\n\n ******************************************************************/\n .llms-nav-tab {\n display: inline-block;\n width: 33.333%;\n }\n .llms-nav-tab-settings {\n display: inline-block;\n width: 25%;\n }\n #llms-form-wrapper .llms-select {\n display: inline-block;\n width: 47.5%;\n }\n #llms-form-wrapper .llms-select:first-child {\n margin-right: 5%;\n }\n #llms-form-wrapper .llms-filter-options {\n display: inline-block;\n width: 47.5%;\n }\n #llms-form-wrapper .llms-filter-options.date-filter {\n margin-right: 5%;\n }\n #llms-form-wrapper .llms-filter-options .llms-date-select {\n margin-bottom: 0;\n }\n #llms-form-wrapper .llms-date-select {\n width: 47.5%;\n }\n #llms-form-wrapper .llms-date-select:first-child {\n margin-right: 5%;\n }\n .llms-widget-row:before, .llms-widget-row:after {\n content: \" \";\n display: table;\n }\n .llms-widget-row:after {\n clear: both;\n }\n .llms-widget-row .llms-widget-1-5 {\n vertical-align: top;\n width: 20%;\n float: left;\n box-sizing: border-box;\n padding: 0 5px;\n }\n .llms-widget-row .llms-widget-1-4 {\n vertical-align: top;\n width: 25%;\n float: left;\n box-sizing: border-box;\n padding: 0 5px;\n }\n .llms-widget-row .llms-widget-1-3 {\n width: 33.3%;\n float: left;\n box-sizing: border-box;\n padding: 0 5px;\n }\n .llms-widget-row .llms-widget-1-2 {\n width: 50%;\n float: left;\n box-sizing: border-box;\n padding: 0 5px;\n vertical-align: top;\n }\n}\n@media only screen and (min-width: 1240px) {\n /******************************************************************\n\n large Monitor Stylesheet\n\n ******************************************************************/\n .llms-nav-tab-filters,\n.llms-nav-tab-settings {\n float: left;\n width: 12.5%;\n }\n}\n.wrap.lifterlms {\n margin-top: 0;\n}\n\n.llms-header {\n background-color: #FFF;\n margin: 0 0 0 -20px;\n padding: 20px 10px;\n position: relative;\n z-index: 1;\n}\n.llms-header .llms-inside-wrap {\n display: flex;\n padding: 0 10px;\n}\n.llms-header .lifterlms-logo {\n flex: 0 0 190px;\n max-height: 52px;\n margin-right: 10px;\n}\n.llms-header .llms-meta {\n align-self: center;\n display: flex;\n flex: 1;\n font-size: 16px;\n justify-content: space-between;\n line-height: 1.5;\n}\n.llms-header .llms-meta .llms-version {\n background-color: #1d2327;\n color: #FFF;\n border-radius: 999px;\n font-size: 13px;\n font-weight: 700;\n padding: 6px 12px;\n}\n.llms-header .llms-meta a {\n display: inline-block;\n}\n.llms-header .llms-meta .llms-license {\n border-right: 1px solid #CCC;\n font-weight: 700;\n margin-right: 12px;\n padding-right: 12px;\n}\n.llms-header .llms-meta .llms-license a {\n text-decoration: none;\n}\n.llms-header .llms-meta .llms-license a:before {\n content: \"\\f534\";\n display: inline-block;\n font: 400 16px/1 dashicons;\n left: 0;\n padding-right: 3px;\n position: relative;\n text-decoration: none;\n vertical-align: text-bottom;\n}\n.llms-header .llms-meta .llms-license a.llms-license-none {\n color: #888;\n}\n.llms-header .llms-meta .llms-license a.llms-license-none:before {\n content: \"\\f335\";\n}\n.llms-header .llms-meta .llms-license a.llms-license-active {\n color: #008a20;\n}\n.llms-header .llms-meta .llms-license a.llms-license-active:before {\n content: \"\\f112\";\n}\n.llms-header .llms-meta .llms-support {\n font-weight: 700;\n}\n.llms-header .llms-meta .llms-support a {\n color: #1d2327;\n text-decoration: none;\n}\n\n.llms-subheader {\n align-items: center;\n background-color: #FFF;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: row;\n margin-left: -20px;\n padding: 10px 20px;\n width: 100%;\n z-index: 1;\n}\n.llms-subheader h1 {\n font-weight: 700;\n padding: 0;\n}\n.llms-subheader h1 a {\n color: inherit;\n text-decoration: none;\n}\n\n#post_course_difficulty {\n min-width: 200px;\n}\n\n#_video-embed, #_audio-embed {\n width: 100%;\n}\n\nhr {\n background-color: #CCC;\n border: none;\n height: 1px;\n margin: 30px 0;\n padding: 0;\n}\n\n.llms_certificate_default_image, .llms_certificate_image {\n width: 300px;\n}\n\n.llms_achievement_default_image, .llms_achievement_image {\n width: 120px;\n}\n\ndiv[id^=lifterlms-] .inside {\n overflow: visible;\n}\n\n.notice.llms-admin-notice {\n background-color: #FFF;\n border: 1px solid #ccd0d4;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);\n display: flex;\n padding: 0 !important;\n position: relative;\n}\n.notice.llms-admin-notice .notice-dismiss {\n text-decoration: none;\n}\n.notice.llms-admin-notice.notice-warning {\n border-left: 4px solid #F8954F;\n}\n.notice.llms-admin-notice.notice-warning .llms-admin-notice-icon {\n background-color: #FEF4ED;\n}\n.notice.llms-admin-notice.notice-info {\n border-left: 4px solid #466DD8;\n}\n.notice.llms-admin-notice.notice-info h3 {\n color: #466DD8;\n}\n.notice.llms-admin-notice.notice-info .llms-admin-notice-icon {\n background-color: #EDF0FB;\n}\n.notice.llms-admin-notice.notice-success {\n border-left: 4px solid #18A957;\n}\n.notice.llms-admin-notice.notice-success h3 {\n color: #18A957;\n}\n.notice.llms-admin-notice.notice-success .llms-admin-notice-icon {\n background-color: #E8F6EE;\n}\n.notice.llms-admin-notice.notice-error {\n border-left: 4px solid #DF1642;\n}\n.notice.llms-admin-notice.notice-error h3 {\n color: #9C0F2E;\n}\n.notice.llms-admin-notice.notice-error .llms-admin-notice-icon {\n background-color: #FCE8EC;\n}\n.notice.llms-admin-notice .llms-admin-notice-icon {\n background-image: url(../../assets/images/lifterlms-icon-color.png);\n background-position: center center;\n background-repeat: no-repeat;\n background-size: 30px;\n min-width: 70px;\n}\n.notice.llms-admin-notice .llms-admin-notice-content {\n color: #111;\n padding: 20px;\n}\n.notice.llms-admin-notice h3 {\n font-size: 18px;\n font-weight: 700;\n line-height: 25px;\n margin: 0 0 15px 0;\n}\n.notice.llms-admin-notice button,\n.notice.llms-admin-notice .llms-button-primary {\n display: inline-block;\n}\n.notice.llms-admin-notice p {\n font-size: 14px;\n line-height: 22px;\n margin: 0 0 15px 0;\n max-width: 65em;\n padding: 0;\n}\n.notice.llms-admin-notice p:last-of-type {\n margin-bottom: 0;\n}\n\n.llms-button-action.small .dashicons,\n.llms-button-danger.small .dashicons,\n.llms-button-primary.small .dashicons,\n.llms-button-secondary.small .dashicons {\n font-size: 13px;\n height: 13px;\n width: 13px;\n}\n.llms-button-action:hover,\n.llms-button-danger:hover,\n.llms-button-primary:hover,\n.llms-button-secondary:hover {\n box-shadow: none;\n}\n\na.llms-view-as {\n line-height: 2;\n margin-right: 8px;\n}\n\n.llms-image-field-preview {\n max-height: 80px;\n vertical-align: middle;\n width: auto;\n}\n\n.llms-image-field-remove.hidden {\n display: none;\n}\n\n.llms-log-viewer {\n background: #fff;\n border: 1px solid #e5e5e5;\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);\n margin: 20px 0;\n padding: 25px;\n}\n.llms-log-viewer pre {\n font-family: monospace;\n margin: 0;\n padding: 0;\n white-space: pre-wrap;\n}\n\n.llms-status--tools .llms-table {\n background: #fff;\n border: 1px solid #e5e5e5;\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);\n}\n.llms-status--tools .llms-table td, .llms-status--tools .llms-table th {\n padding: 10px;\n vertical-align: top;\n}\n.llms-status--tools .llms-table th {\n width: 28%;\n}\n.llms-status--tools .llms-table p {\n margin: 0 0 10px;\n}\n\n.llms-error {\n color: #bb231c;\n font-style: italic;\n}\n\n.llms-rating-stars {\n color: #ffb900;\n text-decoration: none;\n}\n\n@media screen and (max-width: 782px) {\n .llms-header {\n top: 46px;\n }\n .llms-header .llms-inside-wrap {\n flex-direction: column;\n gap: 20px;\n }\n .llms-header .llms-inside-wrap .lifterlms-logo {\n align-self: center;\n flex: inherit;\n max-height: initial;\n max-width: 200px;\n }\n .llms-header .llms-inside-wrap .llms-meta {\n column-gap: 10px;\n }\n}\n.llms-table-wrap {\n position: relative;\n}\n\n.llms-table-header {\n padding: 0;\n}\n.llms-table-header:before, .llms-table-header:after {\n content: \" \";\n display: table;\n}\n.llms-table-header:after {\n clear: both;\n}\n.llms-table-header h2 {\n font-size: 20px;\n padding: 0;\n display: inline-block;\n line-height: 1.5;\n margin: 0 0 20px 0;\n vertical-align: middle;\n}\n.llms-table-header .llms-table-search,\n.llms-table-header .llms-table-filters {\n float: right;\n padding-left: 10px;\n}\n.llms-table-header .llms-table-search input {\n margin: 0;\n padding: 0 8px;\n}\n\n.llms-table {\n border: 1px solid #c3c4c7;\n border-collapse: collapse;\n width: 100%;\n}\n.llms-table a:not(.small) {\n color: #466dd8;\n}\n.llms-table a:not(.small):hover {\n color: #2b55cb;\n}\n.llms-table td, .llms-table th {\n border-bottom: 1px solid #c3c4c7;\n padding: 10px 12px;\n text-align: center;\n}\n.llms-table td.expandable.closed, .llms-table th.expandable.closed {\n display: none;\n}\n.llms-table td .llms-button-primary,\n.llms-table td .llms-button-secondary,\n.llms-table td .llms-button-action,\n.llms-table td .llms-button-danger, .llms-table th .llms-button-primary,\n.llms-table th .llms-button-secondary,\n.llms-table th .llms-button-action,\n.llms-table th .llms-button-danger {\n display: inline-block;\n}\n.llms-table tr.llms-quiz-pending td {\n font-weight: 700;\n}\n.llms-table thead th,\n.llms-table tfoot th {\n background-color: #FFF;\n font-weight: 700;\n}\n.llms-table thead th a.llms-sortable,\n.llms-table tfoot th a.llms-sortable {\n padding-right: 16px;\n position: relative;\n text-decoration: none;\n width: 100%;\n}\n.llms-table thead th a.llms-sortable.active[data-order=DESC] .asc,\n.llms-table tfoot th a.llms-sortable.active[data-order=DESC] .asc {\n opacity: 1;\n}\n.llms-table thead th a.llms-sortable.active[data-order=ASC] .desc,\n.llms-table tfoot th a.llms-sortable.active[data-order=ASC] .desc {\n opacity: 1;\n}\n.llms-table thead th a.llms-sortable:hover[data-order=DESC] .asc,\n.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .asc {\n opacity: 0;\n}\n.llms-table thead th a.llms-sortable:hover[data-order=DESC] .desc,\n.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .desc {\n opacity: 1;\n}\n.llms-table thead th a.llms-sortable:hover[data-order=ASC] .asc,\n.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .asc {\n opacity: 1;\n}\n.llms-table thead th a.llms-sortable:hover[data-order=ASC] .desc,\n.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .desc {\n opacity: 0;\n}\n.llms-table thead th a.llms-sortable .dashicons,\n.llms-table tfoot th a.llms-sortable .dashicons {\n color: #444;\n font-size: 16px;\n height: 16px;\n opacity: 0;\n position: absolute;\n width: 16px;\n}\n.llms-table tfoot th {\n border-bottom: none;\n}\n.llms-table tfoot th .llms-table-export {\n float: left;\n}\n.llms-table tfoot th .llms-table-export .llms-table-progress {\n background: #efefef;\n display: none;\n margin-left: 8px;\n vertical-align: middle;\n width: 100px;\n}\n.llms-table tfoot th .llms-table-pagination {\n float: right;\n}\n.llms-table.zebra tbody tr:nth-child(even) th, .llms-table.zebra tbody tr:nth-child(even) td {\n background-color: #fff;\n}\n.llms-table.zebra tbody tr:nth-child(odd) th, .llms-table.zebra tbody tr:nth-child(odd) td {\n background-color: #f6f7f7;\n}\n.llms-table.text-left td, .llms-table.text-left th {\n text-align: left;\n}\n.llms-table.size-large td, .llms-table.size-large th {\n font-size: 14px;\n padding: 10px 12px;\n}\n.llms-table .llms-drag-handle {\n color: #777;\n cursor: pointer;\n -webkit-transition: color 0.4s ease;\n transition: color 0.4s ease;\n}\n.llms-table .llms-action-icon {\n color: #777;\n text-decoration: none;\n}\n.llms-table .llms-action-icon .tooltip {\n cursor: pointer;\n}\n.llms-table .llms-action-icon:hover {\n color: #466dd8;\n}\n.llms-table .llms-action-icon.danger:hover {\n color: #bb231c;\n}\n.llms-table .llms-table-page-count {\n font-size: 12px;\n padding: 0 5px;\n}\n\n.llms-table-progress {\n text-align: center;\n}\n.llms-table-progress .llms-table-progress-bar {\n background: #eee;\n border-radius: 10px;\n height: 16px;\n overflow: hidden;\n position: relative;\n}\n.llms-table-progress .llms-table-progress-bar .llms-table-progress-inner {\n background: #466dd8;\n height: 100%;\n transition: width 0.2s ease;\n}\n.llms-table-progress .llms-table-progress-text {\n color: #466dd8;\n font-size: 12px;\n font-weight: 700;\n line-height: 16px;\n}\n\n.llms-table.llms-gateway-table .status .fa,\n.llms-table.llms-integrations-table .status .fa {\n color: #466dd8;\n font-size: 22px;\n}\n.llms-table.llms-gateway-table .sort,\n.llms-table.llms-integrations-table .sort {\n cursor: move;\n text-align: center;\n width: 10px;\n}\n\n.llms-gb-table-notifications th, .llms-gb-table-notifications td {\n text-align: left;\n}\n\n.llms-order-note .llms-order-note-content {\n background: #efefef;\n margin-bottom: 10px;\n padding: 10px;\n position: relative;\n}\n.llms-order-note .llms-order-note-content:after {\n border-style: solid;\n border-color: #efefef transparent;\n border-width: 10px 10px 0 0;\n bottom: -10px;\n content: \"\";\n display: block;\n height: 0;\n left: 20px;\n position: absolute;\n width: 0;\n}\n.llms-order-note .llms-order-note-content p {\n font-size: 13px;\n margin: 0;\n line-height: 1.5;\n}\n.llms-order-note .llms-order-note-meta {\n color: #999;\n font-size: 11px;\n margin-left: 10px;\n}\n\n.llms-mb-list label {\n font-size: 15px;\n font-weight: 700;\n line-height: 1.5;\n display: block;\n width: 100%;\n}\n.llms-mb-list .description {\n margin-bottom: 8px;\n}\n.llms-mb-list .input-full {\n width: 100%;\n}\n\n#poststuff .llms-metabox h2, #poststuff .llms-metabox h3, #poststuff .llms-metabox h6 {\n margin: 0;\n padding: 0;\n}\n#poststuff .llms-metabox h2 {\n font-size: 18px;\n font-weight: 700;\n}\n#poststuff .llms-metabox h3 {\n color: #777;\n font-size: 16px;\n}\n#poststuff .llms-metabox h4 {\n border-bottom: 1px solid #e5e5e5;\n padding: 0;\n margin: 0;\n}\n#poststuff .llms-metabox .llms-transaction-test-mode {\n background: #ffffd7;\n font-style: italic;\n left: 0;\n padding: 2px;\n position: absolute;\n right: 0;\n top: 0;\n text-align: center;\n}\n#poststuff .llms-metabox a.llms-editable,\n#poststuff .llms-metabox .llms-metabox-icon,\n#poststuff .llms-metabox button.llms-editable {\n color: #999;\n text-decoration: none;\n}\n#poststuff .llms-metabox a.llms-editable:hover,\n#poststuff .llms-metabox .llms-metabox-icon:hover,\n#poststuff .llms-metabox button.llms-editable:hover {\n color: #466dd8;\n}\n#poststuff .llms-metabox button.llms-editable {\n border: none;\n background: none;\n cursor: pointer;\n padding: 0;\n vertical-align: top;\n}\n#poststuff .llms-metabox h4 button.llms-editable {\n float: right;\n}\n#poststuff .llms-metabox .llms-table {\n margin-top: 10px;\n}\n\n.llms-metabox-section {\n background: #fff;\n margin-top: 25px;\n position: relative;\n}\n.llms-metabox-section.no-top-margin {\n margin-top: 0;\n}\n.llms-metabox-section .llms-metabox-field {\n margin: 15px 0;\n position: relative;\n}\n.llms-metabox-section .llms-metabox-field label {\n color: #777;\n display: block;\n margin-bottom: 5px;\n font-weight: 500;\n vertical-align: baseline;\n}\n.llms-metabox-section .llms-metabox-field select,\n.llms-metabox-section .llms-metabox-field textarea,\n.llms-metabox-section .llms-metabox-field input[type=text],\n.llms-metabox-section .llms-metabox-field input[type=number] {\n width: 100%;\n}\n.llms-metabox-section .llms-metabox-field input.md-text {\n width: 105px;\n}\n.llms-metabox-section .llms-metabox-field input.sm-text {\n width: 45px;\n}\n.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-date-input {\n width: 95px;\n}\n.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-time-input {\n width: 45px;\n}\n.llms-metabox-section .llms-metabox-field .llms-datetime-field em {\n font-style: normal;\n padding: 0 3px;\n}\n\n.llms-collapsible {\n border: 1px solid #e5e5e5;\n position: relative;\n margin-top: 0;\n margin-bottom: -1px;\n}\n.llms-collapsible:last-child {\n margin-bottom: 0;\n}\n.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-down {\n display: none;\n}\n.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-up {\n display: inline;\n}\n.llms-collapsible .llms-collapsible-header {\n padding: 10px;\n}\n.llms-collapsible .llms-collapsible-header h3 {\n color: #777;\n margin: 0;\n font-size: 16px;\n}\n.llms-collapsible .llms-collapsible-header .dashicons-arrow-up {\n display: inline;\n}\n.llms-collapsible .llms-collapsible-header .dashicons-arrow-up {\n display: none;\n}\n.llms-collapsible .llms-collapsible-header a {\n text-decoration: none;\n}\n.llms-collapsible .llms-collapsible-header .dashicons {\n color: #777;\n cursor: pointer;\n transition: color 0.4s ease;\n}\n.llms-collapsible .llms-collapsible-header .dashicons:hover {\n color: #466dd8;\n}\n.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning:hover, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-trash:hover, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-no:hover {\n color: #bb231c;\n}\n.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger:hover {\n color: #c05621;\n}\n.llms-collapsible .llms-collapsible-body {\n display: none;\n padding: 10px;\n}\n\n._llms_instructors_data.repeater .llms-repeater-rows .llms-repeater-row:first-child .llms-repeater-remove {\n display: none;\n}\n._llms_instructors_data.repeater .llms-mb-list {\n padding: 0 5px !important;\n}\n\n.post-type-llms_order #post-body-content {\n display: none;\n}\n\n#lifterlms-order-details .handlediv,\n#lifterlms-order-details .handlediv.button-link,\n#lifterlms-order-details .postbox-header {\n display: none;\n}\n#lifterlms-order-details .inside {\n padding: 20px;\n margin-top: 0;\n}\n\n.llms-table tbody tr.llms-txn-failed td {\n background-color: rgba(187, 35, 28, 0.5);\n border-bottom-color: rgba(187, 35, 28, 0.5);\n}\n\n.llms-table tbody tr.llms-txn-refunded td {\n background-color: rgba(255, 165, 0, 0.5);\n border-bottom-color: rgba(255, 165, 0, 0.5);\n}\n\n.llms-txn-refund-form .llms-metabox-section,\n.llms-manual-txn-form .llms-metabox-section {\n margin-top: 0;\n}\n.llms-txn-refund-form .llms-metabox-field,\n.llms-manual-txn-form .llms-metabox-field {\n text-align: right;\n}\n.llms-txn-refund-form .llms-metabox-field input[type=number],\n.llms-manual-txn-form .llms-metabox-field input[type=number] {\n max-width: 100px;\n}\n.llms-txn-refund-form .llms-metabox-field input[type=text],\n.llms-manual-txn-form .llms-metabox-field input[type=text] {\n max-width: 340px;\n}\n\n.llms-manual-txn-form {\n background-color: #eaeaea;\n}\n.llms-manual-txn-form .llms-metabox-section {\n background-color: #eaeaea;\n}\n\n#llms-remaining-edit {\n display: none;\n}\n\n.llms-remaining-edit--content label, .llms-remaining-edit--content span, .llms-remaining-edit--content textarea {\n display: block;\n}\n.llms-remaining-edit--content label {\n margin-bottom: 20px;\n}\n.llms-remaining-edit--content textarea, .llms-remaining-edit--content input {\n width: 100%;\n}\n\n.submitbox .llms-mb-section,\n.llms-award-engagement-submitbox .llms-mb-list {\n margin-bottom: 12px;\n}\n.submitbox .llms-mb-section:last-of-type,\n.llms-award-engagement-submitbox .llms-mb-list:last-of-type {\n margin-bottom: 0;\n}\n.sync-action:before, .submitbox .llms-mb-section.student-info:before, .submitbox .llms-mb-section.post_author_override label:before,\n.llms-award-engagement-submitbox .llms-mb-list.student-info:before,\n.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {\n font: normal 20px/1 dashicons;\n speak: never;\n display: inline-block;\n margin-left: -1px;\n padding-right: 3px;\n vertical-align: top;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n position: relative;\n top: -1px;\n color: #8c8f94;\n}\nbody:not(.admin-color-fresh) .sync-action:before, body:not(.admin-color-fresh) .submitbox .llms-mb-section.student-info:before, body:not(.admin-color-fresh) .submitbox .llms-mb-section.post_author_override label:before,\nbody:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.student-info:before,\nbody:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {\n color: currentColor;\n}\n\n.submitbox .llms-mb-section.student-info:before, .submitbox .llms-mb-section.post_author_override label:before,\n.llms-award-engagement-submitbox .llms-mb-list.student-info:before,\n.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {\n content: \"\\f110\";\n}\n.sync-action:before {\n content: \"\\f113\";\n color: white;\n}\n\n.submitbox .llms-mb-section.post_author_override label,\n.llms-award-engagement-submitbox .llms-mb-list.post_author_override label {\n display: inline-block;\n width: auto;\n}\n\n.llms-metabox #llms-new-access-plan-model {\n display: none;\n}\n.llms-metabox .llms-access-plans {\n margin-top: 10px;\n}\n.llms-metabox .llms-access-plans > .llms-no-plans-msg {\n display: none;\n}\n.llms-metabox .llms-access-plans > .llms-no-plans-msg:last-child {\n box-shadow: inset 0 0 0 1px #e5e5e5;\n display: block;\n text-align: center;\n padding: 10px;\n}\n.llms-metabox .llms-access-plans.dragging {\n background: #efefef;\n box-shadow: inset 0 0 0 1px #e5e5e5;\n}\n.llms-metabox .llms-access-plans .llms-spinning {\n z-index: 1;\n}\n.llms-metabox .llms-access-plans .llms-invalid {\n border-color: #bb231c;\n}\n.llms-metabox .llms-access-plans .llms-invalid .dashicons-warning {\n display: inline;\n}\n.llms-metabox .llms-access-plans .llms-needs-attention .dashicons-warning.medium-danger {\n display: inline;\n}\n.llms-metabox .llms-access-plans .dashicons-warning {\n display: none;\n}\n.llms-metabox .llms-access-plan {\n text-align: left;\n}\n.llms-metabox .llms-access-plan [data-tip]:before {\n text-align: center;\n}\n.llms-metabox .llms-access-plan .llms-plan-link,\n.llms-metabox .llms-access-plan [data-controller] {\n display: none;\n}\n.llms-metabox .llms-access-plan:hover .llms-plan-link, .llms-metabox .llms-access-plan.opened .llms-plan-link {\n display: inline-block;\n}\n.llms-metabox .llms-access-plan .llms-metabox-field {\n margin: 5px 0;\n}\n.llms-metabox .llms-access-plan .llms-required {\n color: #bb231c;\n margin-left: 3px;\n}\n.llms-metabox .llms-access-plan .notice {\n margin-left: 0;\n}\n\n.llms-metabox-students .llms-table tr .name {\n text-align: left;\n}\n.llms-metabox-students .llms-add-student:hover {\n color: #4d8d3c;\n}\n.llms-metabox-students .llms-remove-student:hover {\n color: #bb231c;\n}\n\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered).llms-mb-repeater-fields > li.llms-mb-list {\n border-bottom: none;\n padding: 0 0 10px;\n}\n\n.llms-mb-list.repeater .llms-repeater-rows {\n position: relative;\n margin-top: 10px;\n min-height: 10px;\n}\n.llms-mb-list.repeater .llms-repeater-rows.dragging {\n background: #efefef;\n box-shadow: inset 0 0 0 1px #e5e5e5;\n}\n.llms-mb-list.repeater .llms-repeater-row {\n background: #fff;\n}\n.llms-mb-list.repeater .llms-mb-repeater-footer {\n text-align: right;\n margin-top: 20px;\n}\n.llms-mb-list.repeater .tmce-active .wp-editor-area {\n color: #32373c;\n}\n\n.llms-builder-launcher p {\n margin-top: 0;\n}\n.llms-builder-launcher ol {\n margin-top: -6px;\n}\n.llms-builder-launcher .llms-button-primary {\n box-sizing: border-box;\n}\n\n.wp-list-table .llms-status {\n border-radius: 6px;\n display: inline-block;\n font-size: 13px;\n font-weight: 700;\n line-height: 1.4;\n padding: 2px 6px;\n vertical-align: middle;\n}\n.wp-list-table .llms-status.llms-size--large {\n font-size: 105%;\n padding: 6px 12px;\n}\n.wp-list-table .llms-status.llms-active, .wp-list-table .llms-status.llms-completed, .wp-list-table .llms-status.llms-pass, .wp-list-table .llms-status.llms-txn-succeeded {\n color: #4d8d3c;\n background-color: rgba(77, 141, 60, 0.15);\n}\n.wp-list-table .llms-status.llms-fail, .wp-list-table .llms-status.llms-failed, .wp-list-table .llms-status.llms-expired, .wp-list-table .llms-status.llms-cancelled, .wp-list-table .llms-status.llms-txn-failed {\n color: #bb231c;\n background-color: rgba(187, 35, 28, 0.15);\n}\n.wp-list-table .llms-status.llms-incomplete, .wp-list-table .llms-status.llms-on-hold, .wp-list-table .llms-status.llms-pending, .wp-list-table .llms-status.llms-pending-cancel, .wp-list-table .llms-status.llms-refunded, .wp-list-table .llms-status.llms-txn-pending, .wp-list-table .llms-status.llms-txn-refunded {\n color: #c05621;\n background-color: rgba(192, 86, 33, 0.15);\n}\n\n#lifterlms-order-transactions .llms-table tfoot th {\n text-align: right;\n}\n\n.llms-post-table-post-filter {\n display: inline-block;\n margin-right: 6px;\n max-width: 100%;\n width: 220px;\n}\n\n.llms-nav-tab-wrapper {\n background: #466dd8;\n margin: 20px 0;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary {\n background: #e1e1e1;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item {\n margin: 0;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover, .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #cdcdcd;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {\n color: #414141;\n font-size: 15px;\n padding: 8px 14px;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link .dashicons {\n font-size: 15px;\n height: 15px;\n width: 15px;\n}\n.llms-nav-tab-wrapper.llms-nav-text {\n background: inherit;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-items {\n padding-left: 0;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item {\n background: inherit;\n color: #646970;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:last-child:after {\n display: none;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:after {\n content: \"|\";\n display: inline-block;\n margin: 0 8px 0 6px;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link:hover {\n background: inherit;\n color: #466dd8;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item.llms-active .llms-nav-link {\n background: inherit;\n color: #000;\n font-weight: 600;\n text-decoration: none;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link {\n color: #466dd8;\n display: inline-block;\n letter-spacing: 0;\n margin: 0;\n padding: 0;\n text-decoration: underline;\n text-transform: none;\n}\n.llms-nav-tab-wrapper.llms-nav-style-tabs {\n background-color: #1c3987;\n margin: 0;\n padding-top: 8px;\n}\n.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item {\n margin: 0 3px;\n}\n.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item .llms-nav-link {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item.llms-active .llms-nav-link {\n background-color: #FFF;\n color: #466dd8;\n font-weight: 700;\n}\n.llms-nav-tab-wrapper.llms-nav-style-filters {\n background-color: #466dd8;\n border-radius: 12px;\n margin: 20px 0;\n overflow: hidden;\n padding: 0;\n}\n.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding-left: 0;\n}\n@media only screen and (min-width: 782px) {\n .llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items {\n flex-direction: row;\n }\n}\n.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item {\n float: none;\n}\n.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item .llms-nav-link {\n padding: 14px;\n}\n.llms-nav-tab-wrapper .llms-nav-items {\n margin: 0;\n padding-left: 10px;\n}\n.llms-nav-tab-wrapper .llms-nav-items:before, .llms-nav-tab-wrapper .llms-nav-items:after {\n content: \" \";\n display: table;\n}\n.llms-nav-tab-wrapper .llms-nav-items:after {\n clear: both;\n}\n.llms-nav-tab-wrapper .llms-nav-item {\n margin: 0;\n}\n.llms-nav-tab-wrapper .llms-nav-item .llms-nav-link:hover {\n background: #466dd8;\n}\n.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {\n background: #1c3987;\n}\n.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {\n font-weight: 400;\n}\n@media only screen and (min-width: 768px) {\n .llms-nav-tab-wrapper .llms-nav-item {\n float: left;\n }\n .llms-nav-tab-wrapper .llms-nav-item.llms-nav-item-right {\n float: right;\n }\n}\n.llms-nav-tab-wrapper .llms-nav-link {\n color: #fff;\n cursor: pointer;\n display: block;\n font-weight: 400;\n font-size: 15px;\n padding: 9px 18px;\n text-align: center;\n text-decoration: none;\n transition: all 0.3s ease;\n}\n\n#llms-options-page-contents h2 {\n color: #999;\n font-weight: 500;\n letter-spacing: 2px;\n border-bottom: 1px solid #999;\n}\n\n.llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n margin: 0;\n padding: 0;\n}\n.llms-reporting.wrap .llms-stab-title {\n color: #1c3987;\n font-size: 36px;\n font-weight: 300;\n margin-bottom: 20px;\n}\n.llms-reporting.wrap td.id a {\n text-decoration: none;\n}\n.llms-reporting.wrap th.id, .llms-reporting.wrap td.id,\n.llms-reporting.wrap th.name, .llms-reporting.wrap td.name,\n.llms-reporting.wrap th.registered, .llms-reporting.wrap td.registered,\n.llms-reporting.wrap th.last_seen, .llms-reporting.wrap td.last_seen,\n.llms-reporting.wrap th.overall_progress, .llms-reporting.wrap td.overall_progress,\n.llms-reporting.wrap th.title, .llms-reporting.wrap td.title,\n.llms-reporting.wrap th.course, .llms-reporting.wrap td.course,\n.llms-reporting.wrap th.lesson, .llms-reporting.wrap td.lesson {\n text-align: left;\n}\n.llms-reporting.wrap td.section-title {\n background: #eaeaea;\n text-align: left;\n font-weight: 700;\n padding: 16px 4px;\n}\n.llms-reporting.wrap td.questions-table {\n text-align: left;\n}\n.llms-reporting.wrap td.questions-table .correct,\n.llms-reporting.wrap td.questions-table .question,\n.llms-reporting.wrap td.questions-table .selected {\n text-align: left;\n max-width: 300px;\n}\n.llms-reporting.wrap td.questions-table .correct img,\n.llms-reporting.wrap td.questions-table .question img,\n.llms-reporting.wrap td.questions-table .selected img {\n height: auto;\n max-width: 64px;\n}\n.llms-reporting.wrap table.quiz-attempts {\n margin-bottom: 40px;\n}\n.llms-reporting.wrap.tab--students .llms-options-page-contents #llms-award-certificate-wrapper .components-button.is-secondary {\n background: #e1e1e1;\n border-radius: 8px;\n box-shadow: none;\n color: #414141;\n font-size: 13px;\n font-weight: 700;\n height: auto;\n padding: 8px 14px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-tab-wrapper.llms-nav-secondary, .llms-reporting.wrap.tab--sales .llms-nav-tab-wrapper.llms-nav-secondary {\n margin-bottom: 0;\n}\n.llms-reporting.wrap.tab--enrollments .llms-options-page-contents, .llms-reporting.wrap.tab--sales .llms-options-page-contents {\n box-shadow: none;\n background: none;\n margin-top: 20px;\n padding: 0;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form {\n align-items: center;\n align-self: center;\n color: #FFF;\n display: flex;\n font-size: 13px;\n gap: 5px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form label, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form label {\n font-weight: 700;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form input, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form input {\n border: 0;\n font-size: 13px;\n margin: 0;\n padding: 0 4px;\n vertical-align: middle;\n width: 110px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form .select2-container input, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form .select2-container input {\n width: 100% !important;\n}\n.llms-reporting.wrap.tab--enrollments .button.small, .llms-reporting.wrap.tab--sales .button.small {\n height: 23px;\n line-height: 23px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters, .llms-reporting.wrap.tab--sales .llms-analytics-filters {\n display: none;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-inside-wrap, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-inside-wrap {\n background-color: #FFF;\n background-color: #FFF;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n margin: -20px 10px 20px 10px;\n padding: 20px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items {\n display: flex;\n flex-direction: column;\n gap: 20px;\n justify-content: space-between;\n margin: 0;\n}\n@media only screen and (min-width: 782px) {\n .llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items {\n flex-direction: row;\n }\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item {\n box-sizing: border-box;\n width: 100%;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item label, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item label {\n display: block;\n font-weight: 700;\n margin: 0 0 5px 0;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item .select2-selection__rendered, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item .select2-selection__rendered {\n word-wrap: break-word;\n text-overflow: inherit;\n white-space: normal;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p, .llms-reporting.wrap.tab--sales .llms-analytics-filters p {\n margin: 0;\n text-align: right;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p .llms-button-primary, .llms-reporting.wrap.tab--sales .llms-analytics-filters p .llms-button-primary {\n display: inline-block;\n}\n.llms-reporting.wrap .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap {\n width: 160px;\n}\n\n.llms-charts-wrapper {\n background-color: #FFF;\n border: 1px solid #dedede;\n border-radius: 12px;\n box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n padding: 20px;\n}\n\n.llms-reporting-tab h1, .llms-reporting-tab h2, .llms-reporting-tab h3, .llms-reporting-tab h4, .llms-reporting-tab h5, .llms-reporting-tab h6 {\n margin: 0;\n}\n.llms-reporting-tab h1 a, .llms-reporting-tab h2 a, .llms-reporting-tab h3 a, .llms-reporting-tab h4 a, .llms-reporting-tab h5 a, .llms-reporting-tab h6 a {\n color: #466dd8;\n text-decoration: none;\n}\n.llms-reporting-tab h1 a:hover, .llms-reporting-tab h2 a:hover, .llms-reporting-tab h3 a:hover, .llms-reporting-tab h4 a:hover, .llms-reporting-tab h5 a:hover, .llms-reporting-tab h6 a:hover {\n color: #466dd8;\n}\n.llms-reporting-tab h2 {\n font-size: 22px;\n line-height: 1.5;\n}\n.llms-reporting-tab h2.llms-table-title {\n margin-bottom: 20px;\n}\n.llms-reporting-tab h5 {\n font-size: 15px;\n line-height: 1.5;\n}\n.llms-reporting-tab .llms-reporting-body {\n background-color: #FFF;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n margin: 20px auto;\n padding: 0;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-stab {\n padding: 30px;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-stab .llms-table-header {\n margin: 0;\n}\n.llms-reporting-tab .llms-reporting-body .llms-gb-tab {\n padding: 30px;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-header {\n padding: 30px;\n margin: 0;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img {\n border-radius: 50%;\n display: inline-block;\n margin-right: 10px;\n overflow: hidden;\n vertical-align: middle;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img img {\n display: block;\n max-height: 64px;\n width: auto;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-info {\n display: inline-block;\n vertical-align: middle;\n}\n\n.llms-reporting-breadcrumbs {\n margin: 0;\n padding: 0;\n}\n.llms-reporting-breadcrumbs a {\n color: #466dd8;\n font-size: 15px;\n text-decoration: none;\n}\n.llms-reporting-breadcrumbs a:hover {\n color: #2b55cb;\n}\n.llms-reporting-breadcrumbs a:after {\n content: \" > \";\n color: #646970;\n}\n.llms-reporting-breadcrumbs a:last-child {\n color: #000;\n font-weight: 700;\n}\n.llms-reporting-breadcrumbs a:last-child:after {\n display: none;\n}\n\n#llms-students-table .name {\n text-align: left;\n}\n\n.llms-reporting-tab-content {\n display: flex;\n}\n.llms-reporting-tab-content > header:before, .llms-reporting-tab-content > header:after {\n content: \" \";\n display: table;\n}\n.llms-reporting-tab-content > header:after {\n clear: both;\n}\n.llms-reporting-tab-content h3 {\n margin-bottom: 20px;\n}\n.llms-reporting-tab-content .llms-reporting-tab-filter {\n float: right;\n position: relative;\n margin-right: 0.75em;\n width: 180px;\n top: -3px;\n}\n.llms-reporting-tab-content .llms-reporting-tab-main {\n flex: 3;\n max-width: 75%;\n}\n.llms-reporting-tab-content .llms-reporting-tab-side {\n flex: 1;\n margin-left: 20px;\n}\n.llms-reporting-tab-content > .llms-table-wrap {\n flex: 1;\n}\n\n.llms-reporting-widgets:before, .llms-reporting-widgets:after {\n content: \" \";\n display: table;\n}\n.llms-reporting-widgets:after {\n clear: both;\n}\n\n.llms-reporting-widget {\n border-top: 4px solid #466dd8;\n background: #fafafa;\n margin-bottom: 10px;\n padding: 30px;\n}\n.llms-reporting-widget:before, .llms-reporting-widget:after {\n content: \" \";\n display: table;\n}\n.llms-reporting-widget:after {\n clear: both;\n}\n.llms-reporting-widget .fa {\n color: #999;\n float: left;\n font-size: 32px;\n margin-right: 10px;\n}\n.llms-reporting-widget strong {\n color: #333;\n font-size: 20px;\n line-height: 1.2;\n}\n.llms-reporting-widget.llms-reporting-student-address strong {\n line-height: 1.1;\n}\n.llms-reporting-widget sup,\n.llms-reporting-widget .llms-price-currency-symbol {\n font-size: 75%;\n position: relative;\n top: -4px;\n vertical-align: baseline;\n}\n.llms-reporting-widget small {\n font-size: 13px;\n}\n.llms-reporting-widget small.compare {\n margin-left: 5px;\n}\n.llms-reporting-widget small.compare.positive {\n color: #4d8d3c;\n}\n.llms-reporting-widget small.compare.negative {\n color: #bb231c;\n}\n\n.llms-reporting-event {\n border-left: 4px solid #555;\n background: #fafafa;\n font-size: 11px;\n line-height: 1.2;\n margin-bottom: 0.75em;\n padding: 10px;\n}\n.llms-reporting-event:before, .llms-reporting-event:after {\n content: \" \";\n display: table;\n}\n.llms-reporting-event:after {\n clear: both;\n}\n.llms-reporting-event.color--blue {\n border-left-color: #466dd8;\n}\n.llms-reporting-event.color--green, .llms-reporting-event._enrollment_trigger, .llms-reporting-event._is_complete.yes {\n border-left-color: #4d8d3c;\n}\n.llms-reporting-event.color--purple, .llms-reporting-event._status.enrolled {\n border-left-color: #845ef7;\n}\n.llms-reporting-event.color--red, .llms-reporting-event._status.expired, .llms-reporting-event._status.cancelled {\n border-left-color: #bb231c;\n}\n.llms-reporting-event.color--orange, .llms-reporting-event._achievement_earned, .llms-reporting-event._certificate_earned, .llms-reporting-event._email_sent {\n border-left-color: #c05621;\n}\n.llms-reporting-event time {\n color: #888;\n}\n.llms-reporting-event .llms-student-avatar {\n margin-left: 10px;\n float: right;\n}\n.llms-reporting-event a {\n text-decoration: none;\n color: inherit;\n}\n\n@media only screen and (min-width: 782px) {\n .llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {\n margin-left: 0;\n margin-right: 0;\n }\n}\n.llms-quiz-attempt-results {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question {\n background: #efefef;\n border-radius: 6px;\n margin: 0 0 15px;\n position: relative;\n list-style-type: none;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {\n color: inherit;\n display: flex;\n gap: 10px;\n justify-content: space-between;\n padding: 15px 35px 15px 15px;\n text-decoration: none;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct, .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect {\n background: rgba(192, 86, 33, 0.2);\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon, .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon {\n background-color: #c05621;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {\n background: rgba(77, 141, 60, 0.15);\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {\n background-color: #4d8d3c;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {\n background: rgba(187, 35, 28, 0.15);\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {\n background-color: #bb231c;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question pre {\n overflow: auto;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {\n font-size: 22px;\n margin: 0;\n line-height: 1.4;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {\n line-height: 1.4;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {\n position: absolute;\n right: -12px;\n top: -2px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon {\n color: rgba(255, 255, 255, 0.65);\n border-radius: 50%;\n font-size: 30px;\n height: 40px;\n line-height: 40px;\n text-align: center;\n width: 40px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {\n display: none;\n padding: 0 15px 15px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {\n font-weight: 700;\n margin: 0 0 10px;\n padding: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers {\n margin: 0;\n padding: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {\n padding: 0;\n margin: 0 0 0 30px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child {\n list-style-type: none;\n margin-left: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {\n height: auto;\n max-width: 200px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section {\n border-top: 2px solid rgba(255, 255, 255, 0.5);\n margin-top: 20px;\n padding-top: 20px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child {\n border-top: none;\n margin-top: 0;\n padding-top: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers, .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer, .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {\n display: inline-block;\n list-style-type: none;\n margin: 0;\n padding: 5px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {\n opacity: 0.5;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {\n font-style: italic;\n font-weight: normal;\n}\n\n.wrap.llms-reporting .llms-inside-wrap,\n.wrap.lifterlms-settings .llms-inside-wrap,\n.wrap.llms-status .llms-inside-wrap {\n box-sizing: border-box;\n margin: 0 auto;\n}\n.wrap.llms-reporting .llms-inside-wrap .llms-nav-text,\n.wrap.lifterlms-settings .llms-inside-wrap .llms-nav-text,\n.wrap.llms-status .llms-inside-wrap .llms-nav-text {\n margin: 0 auto;\n}\n.wrap.llms-reporting .llms-subheader .llms-save,\n.wrap.lifterlms-settings .llms-subheader .llms-save,\n.wrap.llms-status .llms-subheader .llms-save {\n flex: auto;\n text-align: right;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary {\n background-color: #FFF;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n margin: 0 -20px 20px -10px;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {\n padding-left: 0;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover {\n background: #f0f0f1;\n color: #222222;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #fafafa;\n color: #466dd8;\n border-top-color: #466dd8;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n font-weight: 700;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {\n border-top: 2px solid transparent;\n padding: 14px;\n}\n.wrap.llms-reporting .llms-setting-group,\n.wrap.lifterlms-settings .llms-setting-group,\n.wrap.llms-status .llms-setting-group {\n background-color: #FFF;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n margin: 20px auto;\n padding: 20px;\n}\n.wrap.llms-reporting .llms-setting-group .llms-label,\n.wrap.lifterlms-settings .llms-setting-group .llms-label,\n.wrap.llms-status .llms-setting-group .llms-label {\n border-bottom: 1px solid #efefef;\n font-weight: 700;\n font-size: 20px;\n padding: 20px;\n margin: -20px -20px 20px;\n}\n.wrap.llms-reporting .llms-setting-group .llms-label .llms-button-primary,\n.wrap.lifterlms-settings .llms-setting-group .llms-label .llms-button-primary,\n.wrap.llms-status .llms-setting-group .llms-label .llms-button-primary {\n margin-left: 10px;\n}\n.wrap.llms-reporting .llms-setting-group .llms-help-tooltip .dashicons,\n.wrap.lifterlms-settings .llms-setting-group .llms-help-tooltip .dashicons,\n.wrap.llms-status .llms-setting-group .llms-help-tooltip .dashicons {\n color: #444;\n cursor: help;\n}\n.wrap.llms-reporting .llms-setting-group .form-table,\n.wrap.lifterlms-settings .llms-setting-group .form-table,\n.wrap.llms-status .llms-setting-group .form-table {\n margin: 0;\n}\n.wrap.llms-reporting .llms-setting-group .form-table tr:first-child .llms-subtitle,\n.wrap.lifterlms-settings .llms-setting-group .form-table tr:first-child .llms-subtitle,\n.wrap.llms-status .llms-setting-group .form-table tr:first-child .llms-subtitle {\n margin-top: 0;\n}\n.wrap.llms-reporting .llms-setting-group td[colspan=\"2\"],\n.wrap.lifterlms-settings .llms-setting-group td[colspan=\"2\"],\n.wrap.llms-status .llms-setting-group td[colspan=\"2\"] {\n padding-top: 0;\n padding-left: 0;\n}\n.wrap.llms-reporting .llms-setting-group tr.llms-disabled-field,\n.wrap.lifterlms-settings .llms-setting-group tr.llms-disabled-field,\n.wrap.llms-status .llms-setting-group tr.llms-disabled-field {\n opacity: 0.5;\n pointer-events: none;\n}\n.wrap.llms-reporting .llms-setting-group p,\n.wrap.lifterlms-settings .llms-setting-group p,\n.wrap.llms-status .llms-setting-group p {\n font-size: 14px;\n}\n.wrap.llms-reporting .llms-setting-group input[type=text],\n.wrap.llms-reporting .llms-setting-group input[type=password],\n.wrap.llms-reporting .llms-setting-group input[type=datetime],\n.wrap.llms-reporting .llms-setting-group input[type=datetime-local],\n.wrap.llms-reporting .llms-setting-group input[type=date],\n.wrap.llms-reporting .llms-setting-group input[type=month],\n.wrap.llms-reporting .llms-setting-group input[type=time],\n.wrap.llms-reporting .llms-setting-group input[type=week],\n.wrap.llms-reporting .llms-setting-group input[type=number],\n.wrap.llms-reporting .llms-setting-group input[type=email],\n.wrap.llms-reporting .llms-setting-group input[type=url],\n.wrap.llms-reporting .llms-setting-group input[type=search],\n.wrap.llms-reporting .llms-setting-group input[type=tel],\n.wrap.llms-reporting .llms-setting-group input[type=color],\n.wrap.llms-reporting .llms-setting-group select,\n.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area),\n.wrap.lifterlms-settings .llms-setting-group input[type=text],\n.wrap.lifterlms-settings .llms-setting-group input[type=password],\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime],\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local],\n.wrap.lifterlms-settings .llms-setting-group input[type=date],\n.wrap.lifterlms-settings .llms-setting-group input[type=month],\n.wrap.lifterlms-settings .llms-setting-group input[type=time],\n.wrap.lifterlms-settings .llms-setting-group input[type=week],\n.wrap.lifterlms-settings .llms-setting-group input[type=number],\n.wrap.lifterlms-settings .llms-setting-group input[type=email],\n.wrap.lifterlms-settings .llms-setting-group input[type=url],\n.wrap.lifterlms-settings .llms-setting-group input[type=search],\n.wrap.lifterlms-settings .llms-setting-group input[type=tel],\n.wrap.lifterlms-settings .llms-setting-group input[type=color],\n.wrap.lifterlms-settings .llms-setting-group select,\n.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area),\n.wrap.llms-status .llms-setting-group input[type=text],\n.wrap.llms-status .llms-setting-group input[type=password],\n.wrap.llms-status .llms-setting-group input[type=datetime],\n.wrap.llms-status .llms-setting-group input[type=datetime-local],\n.wrap.llms-status .llms-setting-group input[type=date],\n.wrap.llms-status .llms-setting-group input[type=month],\n.wrap.llms-status .llms-setting-group input[type=time],\n.wrap.llms-status .llms-setting-group input[type=week],\n.wrap.llms-status .llms-setting-group input[type=number],\n.wrap.llms-status .llms-setting-group input[type=email],\n.wrap.llms-status .llms-setting-group input[type=url],\n.wrap.llms-status .llms-setting-group input[type=search],\n.wrap.llms-status .llms-setting-group input[type=tel],\n.wrap.llms-status .llms-setting-group input[type=color],\n.wrap.llms-status .llms-setting-group select,\n.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area) {\n width: 50%;\n}\n.wrap.llms-reporting .llms-setting-group input[type=text].medium,\n.wrap.llms-reporting .llms-setting-group input[type=password].medium,\n.wrap.llms-reporting .llms-setting-group input[type=datetime].medium,\n.wrap.llms-reporting .llms-setting-group input[type=datetime-local].medium,\n.wrap.llms-reporting .llms-setting-group input[type=date].medium,\n.wrap.llms-reporting .llms-setting-group input[type=month].medium,\n.wrap.llms-reporting .llms-setting-group input[type=time].medium,\n.wrap.llms-reporting .llms-setting-group input[type=week].medium,\n.wrap.llms-reporting .llms-setting-group input[type=number].medium,\n.wrap.llms-reporting .llms-setting-group input[type=email].medium,\n.wrap.llms-reporting .llms-setting-group input[type=url].medium,\n.wrap.llms-reporting .llms-setting-group input[type=search].medium,\n.wrap.llms-reporting .llms-setting-group input[type=tel].medium,\n.wrap.llms-reporting .llms-setting-group input[type=color].medium,\n.wrap.llms-reporting .llms-setting-group select.medium,\n.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=text].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=password].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=date].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=month].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=time].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=week].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=number].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=email].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=url].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=search].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=tel].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=color].medium,\n.wrap.lifterlms-settings .llms-setting-group select.medium,\n.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).medium,\n.wrap.llms-status .llms-setting-group input[type=text].medium,\n.wrap.llms-status .llms-setting-group input[type=password].medium,\n.wrap.llms-status .llms-setting-group input[type=datetime].medium,\n.wrap.llms-status .llms-setting-group input[type=datetime-local].medium,\n.wrap.llms-status .llms-setting-group input[type=date].medium,\n.wrap.llms-status .llms-setting-group input[type=month].medium,\n.wrap.llms-status .llms-setting-group input[type=time].medium,\n.wrap.llms-status .llms-setting-group input[type=week].medium,\n.wrap.llms-status .llms-setting-group input[type=number].medium,\n.wrap.llms-status .llms-setting-group input[type=email].medium,\n.wrap.llms-status .llms-setting-group input[type=url].medium,\n.wrap.llms-status .llms-setting-group input[type=search].medium,\n.wrap.llms-status .llms-setting-group input[type=tel].medium,\n.wrap.llms-status .llms-setting-group input[type=color].medium,\n.wrap.llms-status .llms-setting-group select.medium,\n.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).medium {\n width: 30%;\n}\n.wrap.llms-reporting .llms-setting-group input[type=text].small,\n.wrap.llms-reporting .llms-setting-group input[type=password].small,\n.wrap.llms-reporting .llms-setting-group input[type=datetime].small,\n.wrap.llms-reporting .llms-setting-group input[type=datetime-local].small,\n.wrap.llms-reporting .llms-setting-group input[type=date].small,\n.wrap.llms-reporting .llms-setting-group input[type=month].small,\n.wrap.llms-reporting .llms-setting-group input[type=time].small,\n.wrap.llms-reporting .llms-setting-group input[type=week].small,\n.wrap.llms-reporting .llms-setting-group input[type=number].small,\n.wrap.llms-reporting .llms-setting-group input[type=email].small,\n.wrap.llms-reporting .llms-setting-group input[type=url].small,\n.wrap.llms-reporting .llms-setting-group input[type=search].small,\n.wrap.llms-reporting .llms-setting-group input[type=tel].small,\n.wrap.llms-reporting .llms-setting-group input[type=color].small,\n.wrap.llms-reporting .llms-setting-group select.small,\n.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).small,\n.wrap.lifterlms-settings .llms-setting-group input[type=text].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=password].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=date].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=month].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=time].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=week].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=number].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=email].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=url].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=search].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=tel].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=color].small,\n.wrap.lifterlms-settings .llms-setting-group select.small,\n.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).small,\n.wrap.llms-status .llms-setting-group input[type=text].small,\n.wrap.llms-status .llms-setting-group input[type=password].small,\n.wrap.llms-status .llms-setting-group input[type=datetime].small,\n.wrap.llms-status .llms-setting-group input[type=datetime-local].small,\n.wrap.llms-status .llms-setting-group input[type=date].small,\n.wrap.llms-status .llms-setting-group input[type=month].small,\n.wrap.llms-status .llms-setting-group input[type=time].small,\n.wrap.llms-status .llms-setting-group input[type=week].small,\n.wrap.llms-status .llms-setting-group input[type=number].small,\n.wrap.llms-status .llms-setting-group input[type=email].small,\n.wrap.llms-status .llms-setting-group input[type=url].small,\n.wrap.llms-status .llms-setting-group input[type=search].small,\n.wrap.llms-status .llms-setting-group input[type=tel].small,\n.wrap.llms-status .llms-setting-group input[type=color].small,\n.wrap.llms-status .llms-setting-group select.small,\n.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).small {\n width: 20%;\n}\n.wrap.llms-reporting .llms-setting-group input[type=text].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=password].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=datetime].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=datetime-local].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=date].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=month].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=time].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=week].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=number].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=email].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=url].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=search].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=tel].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=color].tiny,\n.wrap.llms-reporting .llms-setting-group select.tiny,\n.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=text].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=password].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=date].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=month].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=time].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=week].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=number].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=email].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=url].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=search].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=tel].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=color].tiny,\n.wrap.lifterlms-settings .llms-setting-group select.tiny,\n.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).tiny,\n.wrap.llms-status .llms-setting-group input[type=text].tiny,\n.wrap.llms-status .llms-setting-group input[type=password].tiny,\n.wrap.llms-status .llms-setting-group input[type=datetime].tiny,\n.wrap.llms-status .llms-setting-group input[type=datetime-local].tiny,\n.wrap.llms-status .llms-setting-group input[type=date].tiny,\n.wrap.llms-status .llms-setting-group input[type=month].tiny,\n.wrap.llms-status .llms-setting-group input[type=time].tiny,\n.wrap.llms-status .llms-setting-group input[type=week].tiny,\n.wrap.llms-status .llms-setting-group input[type=number].tiny,\n.wrap.llms-status .llms-setting-group input[type=email].tiny,\n.wrap.llms-status .llms-setting-group input[type=url].tiny,\n.wrap.llms-status .llms-setting-group input[type=search].tiny,\n.wrap.llms-status .llms-setting-group input[type=tel].tiny,\n.wrap.llms-status .llms-setting-group input[type=color].tiny,\n.wrap.llms-status .llms-setting-group select.tiny,\n.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).tiny {\n width: 10%;\n}\n@media only screen and (min-width: 782px) {\n .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #fff;\n }\n}\n.wrap.llms-reporting #llms-mailhawk-connect,\n.wrap.lifterlms-settings #llms-mailhawk-connect,\n.wrap.llms-status #llms-mailhawk-connect {\n height: auto;\n margin: 0 0 6px;\n position: relative;\n}\n.wrap.llms-reporting #llms-mailhawk-connect .dashicons,\n.wrap.lifterlms-settings #llms-mailhawk-connect .dashicons,\n.wrap.llms-status #llms-mailhawk-connect .dashicons {\n margin: -4px 4px 0 0;\n vertical-align: middle;\n}\n.wrap.llms-reporting #llms-sendwp-connect,\n.wrap.lifterlms-settings #llms-sendwp-connect,\n.wrap.llms-status #llms-sendwp-connect {\n height: auto;\n margin: 0 0 6px;\n position: relative;\n}\n.wrap.llms-reporting #llms-sendwp-connect .fa,\n.wrap.lifterlms-settings #llms-sendwp-connect .fa,\n.wrap.llms-status #llms-sendwp-connect .fa {\n margin-right: 4px;\n}\n\n@media only screen and (min-width: 782px) {\n .wrap.lifterlms-settings .llms-subheader {\n height: 40px;\n position: sticky;\n top: 32px;\n }\n .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary {\n margin: 0 -20px 20px -22px;\n }\n .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {\n padding-left: 10px;\n }\n .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary {\n margin: 0 -20px 20px -22px;\n }\n .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {\n padding-left: 10px;\n }\n .wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary {\n margin: 0 -20px 20px -22px;\n }\n .wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {\n padding-left: 10px;\n }\n}\n.wrap.llms-dashboard .llms-inside-wrap {\n padding-top: 30px;\n}\n.wrap.llms-dashboard #poststuff h2 {\n padding: 12px 20px;\n}\n.wrap.llms-dashboard .llms-dashboard-activity h2 {\n font-size: 20px;\n font-weight: 700;\n line-height: 1.5;\n margin-top: 0;\n text-align: center;\n}\n.wrap.llms-dashboard .postbox {\n background-color: #FFF;\n border: none;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n}\n.wrap.llms-dashboard .postbox .postbox-header {\n border-bottom-color: #efefef;\n}\n.wrap.llms-dashboard .postbox .inside {\n padding: 20px;\n}\n.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap {\n margin-top: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item {\n margin-top: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item p {\n text-align: left;\n}\n.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item footer.llms-actions {\n padding-top: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_addons p {\n text-align: center;\n}\n.wrap.llms-dashboard #llms_dashboard_addons p .llms-button-primary {\n display: inline-block;\n margin-top: 15px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links ul {\n list-style: disc;\n margin: 5px 0 0 20px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links ul li {\n font-size: 15px;\n line-height: 1.5;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links {\n display: grid;\n grid-template-columns: 1fr;\n grid-gap: 30px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links a {\n display: inline-block;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list h3 {\n margin: 0 0 10px 0;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul {\n margin-bottom: 20px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul.llms-checklist {\n list-style: none;\n margin-left: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa {\n text-align: center;\n width: 16px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-check {\n color: #008a20;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-times {\n color: #d63638;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-primary,\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-secondary,\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-action {\n display: block;\n text-align: center;\n}\n@media only screen and (min-width: 782px) {\n .wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links {\n grid-template-columns: 1fr 1fr 1fr;\n }\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: 20px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 {\n margin: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 .dashicons {\n color: #AAA;\n}\n@media only screen and (min-width: 782px) {\n .wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n.wrap.llms-dashboard #llms_dashboard_blog ul,\n.wrap.llms-dashboard #llms_dashboard_podcast ul {\n margin: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_blog ul li,\n.wrap.llms-dashboard #llms_dashboard_podcast ul li {\n margin: 0 0 15px 0;\n}\n.wrap.llms-dashboard #llms_dashboard_blog ul li a,\n.wrap.llms-dashboard #llms_dashboard_podcast ul li a {\n display: block;\n}\n.wrap.llms-dashboard #llms_dashboard_blog p,\n.wrap.llms-dashboard #llms_dashboard_podcast p {\n margin: 15px 0;\n text-align: center;\n}\n.wrap.llms-dashboard #llms_dashboard_blog p a,\n.wrap.llms-dashboard #llms_dashboard_podcast p a {\n display: inline-block;\n}\n\n#llms_dashboard_widget .inside {\n margin: 0;\n padding-bottom: 8px;\n}\n#llms_dashboard_widget .llms-dashboard-widget-wrap {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-top: 12px;\n}\n#llms_dashboard_widget .activity-block {\n padding-bottom: 8px;\n border-color: #e8e8e8;\n}\n#llms_dashboard_widget h3 {\n margin-bottom: 0;\n}\n#llms_dashboard_widget .llms-charts-wrapper {\n display: none;\n}\n#llms_dashboard_widget .llms-widget-row {\n display: flex;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n align-items: stretch;\n padding: 4px 0;\n}\n#llms_dashboard_widget .llms-widget-row:before, #llms_dashboard_widget .llms-widget-row:after {\n display: none;\n}\n#llms_dashboard_widget .llms-widget-1-4 {\n padding: 0;\n flex: 1;\n}\n#llms_dashboard_widget .llms-widget {\n padding: 8px 8px 12px;\n margin: 0;\n border-radius: 6px;\n border: 1px solid #e8e8e8;\n box-shadow: 0px 2px 4px rgb(246, 247, 247);\n height: 100%;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-items: flex-end;\n}\n#llms_dashboard_widget .llms-label {\n font-size: 14px;\n width: 100%;\n align-self: flex-start;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n#llms_dashboard_widget .llms-widget-content {\n font-size: 20px;\n margin: 0;\n}\n#llms_dashboard_widget .llms-widget-info-toggle {\n display: none;\n}\n#llms_dashboard_widget a {\n border: 0;\n}\n#llms_dashboard_widget .subsubsub {\n color: #dcdcde;\n}\n\n.llms-dashboard-widget-feed {\n margin: 0 -12px;\n padding: 0;\n background-color: #f6f7f7;\n}\n.llms-dashboard-widget-feed li {\n margin: 0;\n padding: 8px 12px;\n border-bottom: 1px solid #e8e8e8;\n}\n.llms-dashboard-widget-feed span {\n display: block;\n}\n\n.wrap.llms-resources .llms-inside-wrap {\n padding-top: 30px;\n}\n.wrap.llms-resources #poststuff #post-body.columns-2 {\n margin-right: 350px;\n}\n.wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables {\n width: 330px;\n}\n@media only screen and (max-width: 850px) {\n .wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables {\n width: auto;\n }\n}\n.wrap.llms-resources #poststuff #postbox-container-1 {\n float: right;\n margin-right: -350px;\n width: 330px;\n}\n.wrap.llms-resources #poststuff h2 {\n padding: 12px 20px;\n}\n.wrap.llms-resources #poststuff .postbox {\n background-color: #FFF;\n border: none;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n}\n.wrap.llms-resources #poststuff .postbox .postbox-header {\n border-bottom-color: #efefef;\n}\n.wrap.llms-resources #poststuff .postbox .inside {\n margin: 0;\n padding: 20px;\n}\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video p {\n font-size: 15px;\n line-height: 1.5;\n margin: 0 0 40px 0;\n}\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container {\n height: 0;\n overflow: hidden;\n padding-top: 30px;\n padding-bottom: 56.25%;\n position: relative;\n}\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container iframe,\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container object,\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container embed {\n left: 0;\n height: 100%;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.wrap.llms-resources #llms_dashboard_getting_started ul {\n margin: 0 0 20px 0;\n}\n.wrap.llms-resources #llms_dashboard_getting_started ul li {\n font-size: 15px;\n line-height: 1.5;\n margin-bottom: 15px;\n}\n.wrap.llms-resources #llms_dashboard_getting_started .llms-button-primary {\n display: block;\n margin-top: auto;\n max-width: 300px;\n text-align: center;\n}\n.wrap.llms-resources #llms_dashboard_resource_links ul {\n list-style: disc;\n margin: 5px 0 0 20px;\n}\n.wrap.llms-resources #llms_dashboard_resource_links ul li {\n font-size: 15px;\n line-height: 1.5;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links {\n display: grid;\n grid-template-columns: 1fr;\n grid-gap: 60px;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links a {\n display: inline-block;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list {\n display: flex;\n flex-direction: column;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 {\n margin: 0 0 10px 0;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 .dashicons {\n color: #AAA;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list ul {\n margin-bottom: 20px;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-primary,\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-secondary,\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-action {\n display: block;\n margin-top: auto;\n max-width: 300px;\n text-align: center;\n}\n@media only screen and (min-width: 782px) {\n .wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links {\n grid-template-columns: 1fr 1fr 1fr;\n }\n}\n\n.llms-remarks .llms-remarks-field {\n height: 120px;\n width: 100%;\n}\n.llms-remarks input[type=number] {\n width: 60px;\n}\n\nbutton[name=llms_quiz_attempt_action] .save {\n display: none;\n}\nbutton[name=llms_quiz_attempt_action].grading .default {\n display: none;\n}\nbutton[name=llms_quiz_attempt_action].grading .save {\n display: inline;\n}\n\n.llms-form-fields {\n box-sizing: border-box;\n}\n.llms-form-fields * {\n box-sizing: border-box;\n}\n.llms-form-fields.flush .llms-form-field {\n padding: 0 0 20px;\n}\n.llms-form-fields label:not(.llms-field-html label) {\n font-weight: 700;\n}\n.llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {\n margin-bottom: 0;\n}\n\n.llms-form-heading {\n padding: 0 10px 10px;\n}\n\n.llms-form-field {\n float: left;\n padding: 0 10px 20px;\n position: relative;\n width: 100%;\n}\n.llms-form-field label:empty:after {\n content: \" \";\n}\n.llms-form-field [type=text],\n.llms-form-field [type=password],\n.llms-form-field [type=email],\n.llms-form-field [type=url],\n.llms-form-field [type=tel],\n.llms-form-field [type=number] {\n background-color: #fefefe;\n background-clip: padding-box;\n border: 1px solid #999;\n border-radius: 6px;\n box-sizing: border-box;\n font-size: 16px;\n line-height: 1;\n padding: 8px 12px;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n width: 100%;\n}\n.llms-form-field input:focus,\n.llms-form-field input:focus-visible {\n border-color: #6888df;\n outline: thin solid;\n}\n.llms-form-field select {\n -webkit-appearance: none;\n -moz-appearance: none;\n -ms-appearance: none;\n appearance: none;\n background-color: #fefefe;\n border: 1px solid #999;\n border-radius: 6px;\n box-sizing: border-box;\n color: #010101;\n padding: 8px 12px;\n margin: 0;\n width: 100%;\n font-family: inherit;\n font-size: 16px;\n cursor: inherit;\n line-height: 1.6;\n z-index: 1;\n outline: none;\n background-repeat: no-repeat;\n background-image: linear-gradient(45deg, transparent 50%, currentcolor 50%), linear-gradient(135deg, currentcolor 50%, transparent 50%);\n background-position: right 15px top 1.3rem, right 10px top 1.3rem;\n background-size: 5px 5px, 5px 5px;\n}\n.llms-form-field select::-ms-expand {\n display: none;\n}\n.llms-form-field select:focus {\n border: 1px solid #6888df;\n outline: thin solid;\n}\n.llms-form-field.valid input[type=date], .llms-form-field.valid input[type=time], .llms-form-field.valid input[type=datetime-local], .llms-form-field.valid input[type=week], .llms-form-field.valid input[type=month], .llms-form-field.valid input[type=text], .llms-form-field.valid input[type=email], .llms-form-field.valid input[type=url], .llms-form-field.valid input[type=password], .llms-form-field.valid input[type=search], .llms-form-field.valid input[type=tel], .llms-form-field.valid input[type=number], .llms-form-field.valid textarea, .llms-form-field.valid select {\n background: rgba(131, 195, 115, 0.3);\n border-color: #83c373;\n}\n.llms-form-field.error input[type=date], .llms-form-field.error input[type=time], .llms-form-field.error input[type=datetime-local], .llms-form-field.error input[type=week], .llms-form-field.error input[type=month], .llms-form-field.error input[type=text], .llms-form-field.error input[type=email], .llms-form-field.error input[type=url], .llms-form-field.error input[type=password], .llms-form-field.error input[type=search], .llms-form-field.error input[type=tel], .llms-form-field.error input[type=number], .llms-form-field.error textarea, .llms-form-field.error select, .llms-form-field.invalid input[type=date], .llms-form-field.invalid input[type=time], .llms-form-field.invalid input[type=datetime-local], .llms-form-field.invalid input[type=week], .llms-form-field.invalid input[type=month], .llms-form-field.invalid input[type=text], .llms-form-field.invalid input[type=email], .llms-form-field.invalid input[type=url], .llms-form-field.invalid input[type=password], .llms-form-field.invalid input[type=search], .llms-form-field.invalid input[type=tel], .llms-form-field.invalid input[type=number], .llms-form-field.invalid textarea, .llms-form-field.invalid select {\n background: rgba(187, 35, 28, 0.3);\n border-color: #bb231c;\n}\n.llms-form-field.llms-visually-hidden-field {\n display: none;\n}\n.llms-form-field.align-right {\n text-align: right;\n}\n@media screen and (min-width: 600px) {\n .llms-form-field.llms-cols-1 {\n width: 8.3333333333%;\n }\n .llms-form-field.llms-cols-2 {\n width: 16.6666666667%;\n }\n .llms-form-field.llms-cols-3 {\n width: 25%;\n }\n .llms-form-field.llms-cols-4 {\n width: 33.3333333333%;\n }\n .llms-form-field.llms-cols-5 {\n width: 41.6666666667%;\n }\n .llms-form-field.llms-cols-6 {\n width: 50%;\n }\n .llms-form-field.llms-cols-7 {\n width: 58.3333333333%;\n }\n .llms-form-field.llms-cols-8 {\n width: 66.6666666667%;\n }\n .llms-form-field.llms-cols-9 {\n width: 75%;\n }\n .llms-form-field.llms-cols-10 {\n width: 83.3333333333%;\n }\n .llms-form-field.llms-cols-11 {\n width: 91.6666666667%;\n }\n .llms-form-field.llms-cols-12 {\n width: 100%;\n }\n}\n.llms-form-field.type-hidden {\n padding: 0;\n}\n.llms-form-field.type-radio input,\n.llms-form-field.type-radio label, .llms-form-field.type-checkbox input,\n.llms-form-field.type-checkbox label {\n display: inline-block;\n width: auto;\n}\n.llms-form-field.type-radio input, .llms-form-field.type-checkbox input {\n margin-right: 10px;\n}\n.llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {\n display: block;\n}\n.llms-form-field.type-radio:not(.is-group) input[type=radio] {\n position: absolute;\n opacity: 0;\n visibility: none;\n}\n.llms-form-field.type-radio:not(.is-group) label:before {\n background: #fafafa;\n background-position: -24px 0;\n background-repeat: no-repeat;\n border-radius: 50%;\n box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;\n content: \"\";\n cursor: pointer;\n display: inline-block;\n height: 22px;\n margin-right: 5px;\n position: relative;\n transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);\n top: -3px;\n vertical-align: middle;\n width: 22px;\n z-index: 2;\n}\n.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked + label:before {\n transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);\n background-position: 0 0;\n background-image: radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%);\n}\n.llms-form-field .llms-input-group {\n margin-top: 5px;\n}\n.llms-form-field .llms-input-group .llms-form-field {\n padding: 0 0 5px 5px;\n}\n.llms-form-field.type-reset button:not(.auto), .llms-form-field.type-button button:not(.auto), .llms-form-field.type-submit button:not(.auto) {\n width: 100%;\n}\n.llms-form-field .llms-description {\n font-size: 14px;\n font-style: italic;\n line-height: 18px;\n}\n.llms-form-field .llms-required {\n color: #bb231c;\n margin-left: 4px;\n}\n.llms-form-field input, .llms-form-field textarea, .llms-form-field select {\n width: 100%;\n margin-bottom: 5px;\n}\n.llms-form-field .select2-container .select2-selection--single {\n height: auto;\n padding: 4px 6px;\n}\n.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {\n height: 100%;\n}\n\n.llms-password-strength-meter {\n border: 1px solid #dadada;\n display: none;\n font-size: 10px;\n margin-top: -10px;\n padding: 1px;\n position: relative;\n text-align: center;\n}\n.llms-password-strength-meter:before {\n bottom: 0;\n content: \"\";\n left: 0;\n position: absolute;\n top: 0;\n transition: width 0.4s ease;\n}\n.llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {\n border-color: #e35b5b;\n}\n.llms-password-strength-meter.mismatch:before, .llms-password-strength-meter.too-short:before, .llms-password-strength-meter.very-weak:before {\n background: rgba(227, 91, 91, 0.25);\n width: 25%;\n}\n.llms-password-strength-meter.too-short:before {\n width: 0;\n}\n.llms-password-strength-meter.weak {\n border-color: #f78b53;\n}\n.llms-password-strength-meter.weak:before {\n background: rgba(247, 139, 83, 0.25);\n width: 50%;\n}\n.llms-password-strength-meter.medium {\n border-color: #ffc733;\n}\n.llms-password-strength-meter.medium:before {\n background: rgba(255, 199, 51, 0.25);\n width: 75%;\n}\n.llms-password-strength-meter.strong {\n border-color: #83c373;\n}\n.llms-password-strength-meter.strong:before {\n background: rgba(131, 195, 115, 0.25);\n width: 100%;\n}\n.llms-password-strength-meter + .llms-description {\n display: block;\n}\n\n/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n font-family: \"FontAwesome\";\n src: url(\"../fonts/fontawesome-webfont.eot?v=4.7.0\");\n src: url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0\") format(\"embedded-opentype\"), url(\"../fonts/fontawesome-webfont.woff2?v=4.7.0\") format(\"woff2\"), url(\"../fonts/fontawesome-webfont.woff?v=4.7.0\") format(\"woff\"), url(\"../fonts/fontawesome-webfont.ttf?v=4.7.0\") format(\"truetype\"), url(\"../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n.fa {\n display: inline-block;\n font: normal normal normal 14px/1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n font-size: 1.33333333em;\n line-height: 0.75em;\n vertical-align: -15%;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-fw {\n width: 1.28571429em;\n text-align: center;\n}\n\n.fa-ul {\n padding-left: 0;\n margin-left: 2.14285714em;\n list-style-type: none;\n}\n\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n position: absolute;\n left: -2.14285714em;\n width: 2.14285714em;\n top: 0.14285714em;\n text-align: center;\n}\n\n.fa-li.fa-lg {\n left: -1.85714286em;\n}\n\n.fa-border {\n padding: 0.2em 0.25em 0.15em;\n border: solid 0.08em #eeeeee;\n border-radius: 0.1em;\n}\n\n.fa-pull-left {\n float: left;\n}\n\n.fa-pull-right {\n float: right;\n}\n\n.fa.fa-pull-left {\n margin-right: 0.3em;\n}\n\n.fa.fa-pull-right {\n margin-left: 0.3em;\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right {\n float: right;\n}\n\n.pull-left {\n float: left;\n}\n\n.fa.pull-left {\n margin-right: 0.3em;\n}\n\n.fa.pull-right {\n margin-left: 0.3em;\n}\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n -ms-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n -ms-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n -ms-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n -ms-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n filter: none;\n}\n\n.fa-stack {\n position: relative;\n display: inline-block;\n width: 2em;\n height: 2em;\n line-height: 2em;\n vertical-align: middle;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n position: absolute;\n left: 0;\n width: 100%;\n text-align: center;\n}\n\n.fa-stack-1x {\n line-height: inherit;\n}\n\n.fa-stack-2x {\n font-size: 2em;\n}\n\n.fa-inverse {\n color: #ffffff;\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters that represent icons */\n.fa-glass:before {\n content: \"\\f000\";\n}\n\n.fa-music:before {\n content: \"\\f001\";\n}\n\n.fa-search:before {\n content: \"\\f002\";\n}\n\n.fa-envelope-o:before {\n content: \"\\f003\";\n}\n\n.fa-heart:before {\n content: \"\\f004\";\n}\n\n.fa-star:before {\n content: \"\\f005\";\n}\n\n.fa-star-o:before {\n content: \"\\f006\";\n}\n\n.fa-user:before {\n content: \"\\f007\";\n}\n\n.fa-film:before {\n content: \"\\f008\";\n}\n\n.fa-th-large:before {\n content: \"\\f009\";\n}\n\n.fa-th:before {\n content: \"\\f00a\";\n}\n\n.fa-th-list:before {\n content: \"\\f00b\";\n}\n\n.fa-check:before {\n content: \"\\f00c\";\n}\n\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n content: \"\\f00d\";\n}\n\n.fa-search-plus:before {\n content: \"\\f00e\";\n}\n\n.fa-search-minus:before {\n content: \"\\f010\";\n}\n\n.fa-power-off:before {\n content: \"\\f011\";\n}\n\n.fa-signal:before {\n content: \"\\f012\";\n}\n\n.fa-gear:before,\n.fa-cog:before {\n content: \"\\f013\";\n}\n\n.fa-trash-o:before {\n content: \"\\f014\";\n}\n\n.fa-home:before {\n content: \"\\f015\";\n}\n\n.fa-file-o:before {\n content: \"\\f016\";\n}\n\n.fa-clock-o:before {\n content: \"\\f017\";\n}\n\n.fa-road:before {\n content: \"\\f018\";\n}\n\n.fa-download:before {\n content: \"\\f019\";\n}\n\n.fa-arrow-circle-o-down:before {\n content: \"\\f01a\";\n}\n\n.fa-arrow-circle-o-up:before {\n content: \"\\f01b\";\n}\n\n.fa-inbox:before {\n content: \"\\f01c\";\n}\n\n.fa-play-circle-o:before {\n content: \"\\f01d\";\n}\n\n.fa-rotate-right:before,\n.fa-repeat:before {\n content: \"\\f01e\";\n}\n\n.fa-refresh:before {\n content: \"\\f021\";\n}\n\n.fa-list-alt:before {\n content: \"\\f022\";\n}\n\n.fa-lock:before {\n content: \"\\f023\";\n}\n\n.fa-flag:before {\n content: \"\\f024\";\n}\n\n.fa-headphones:before {\n content: \"\\f025\";\n}\n\n.fa-volume-off:before {\n content: \"\\f026\";\n}\n\n.fa-volume-down:before {\n content: \"\\f027\";\n}\n\n.fa-volume-up:before {\n content: \"\\f028\";\n}\n\n.fa-qrcode:before {\n content: \"\\f029\";\n}\n\n.fa-barcode:before {\n content: \"\\f02a\";\n}\n\n.fa-tag:before {\n content: \"\\f02b\";\n}\n\n.fa-tags:before {\n content: \"\\f02c\";\n}\n\n.fa-book:before {\n content: \"\\f02d\";\n}\n\n.fa-bookmark:before {\n content: \"\\f02e\";\n}\n\n.fa-print:before {\n content: \"\\f02f\";\n}\n\n.fa-camera:before {\n content: \"\\f030\";\n}\n\n.fa-font:before {\n content: \"\\f031\";\n}\n\n.fa-bold:before {\n content: \"\\f032\";\n}\n\n.fa-italic:before {\n content: \"\\f033\";\n}\n\n.fa-text-height:before {\n content: \"\\f034\";\n}\n\n.fa-text-width:before {\n content: \"\\f035\";\n}\n\n.fa-align-left:before {\n content: \"\\f036\";\n}\n\n.fa-align-center:before {\n content: \"\\f037\";\n}\n\n.fa-align-right:before {\n content: \"\\f038\";\n}\n\n.fa-align-justify:before {\n content: \"\\f039\";\n}\n\n.fa-list:before {\n content: \"\\f03a\";\n}\n\n.fa-dedent:before,\n.fa-outdent:before {\n content: \"\\f03b\";\n}\n\n.fa-indent:before {\n content: \"\\f03c\";\n}\n\n.fa-video-camera:before {\n content: \"\\f03d\";\n}\n\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n content: \"\\f03e\";\n}\n\n.fa-pencil:before {\n content: \"\\f040\";\n}\n\n.fa-map-marker:before {\n content: \"\\f041\";\n}\n\n.fa-adjust:before {\n content: \"\\f042\";\n}\n\n.fa-tint:before {\n content: \"\\f043\";\n}\n\n.fa-edit:before,\n.fa-pencil-square-o:before {\n content: \"\\f044\";\n}\n\n.fa-share-square-o:before {\n content: \"\\f045\";\n}\n\n.fa-check-square-o:before {\n content: \"\\f046\";\n}\n\n.fa-arrows:before {\n content: \"\\f047\";\n}\n\n.fa-step-backward:before {\n content: \"\\f048\";\n}\n\n.fa-fast-backward:before {\n content: \"\\f049\";\n}\n\n.fa-backward:before {\n content: \"\\f04a\";\n}\n\n.fa-play:before {\n content: \"\\f04b\";\n}\n\n.fa-pause:before {\n content: \"\\f04c\";\n}\n\n.fa-stop:before {\n content: \"\\f04d\";\n}\n\n.fa-forward:before {\n content: \"\\f04e\";\n}\n\n.fa-fast-forward:before {\n content: \"\\f050\";\n}\n\n.fa-step-forward:before {\n content: \"\\f051\";\n}\n\n.fa-eject:before {\n content: \"\\f052\";\n}\n\n.fa-chevron-left:before {\n content: \"\\f053\";\n}\n\n.fa-chevron-right:before {\n content: \"\\f054\";\n}\n\n.fa-plus-circle:before {\n content: \"\\f055\";\n}\n\n.fa-minus-circle:before {\n content: \"\\f056\";\n}\n\n.fa-times-circle:before {\n content: \"\\f057\";\n}\n\n.fa-check-circle:before {\n content: \"\\f058\";\n}\n\n.fa-question-circle:before {\n content: \"\\f059\";\n}\n\n.fa-info-circle:before {\n content: \"\\f05a\";\n}\n\n.fa-crosshairs:before {\n content: \"\\f05b\";\n}\n\n.fa-times-circle-o:before {\n content: \"\\f05c\";\n}\n\n.fa-check-circle-o:before {\n content: \"\\f05d\";\n}\n\n.fa-ban:before {\n content: \"\\f05e\";\n}\n\n.fa-arrow-left:before {\n content: \"\\f060\";\n}\n\n.fa-arrow-right:before {\n content: \"\\f061\";\n}\n\n.fa-arrow-up:before {\n content: \"\\f062\";\n}\n\n.fa-arrow-down:before {\n content: \"\\f063\";\n}\n\n.fa-mail-forward:before,\n.fa-share:before {\n content: \"\\f064\";\n}\n\n.fa-expand:before {\n content: \"\\f065\";\n}\n\n.fa-compress:before {\n content: \"\\f066\";\n}\n\n.fa-plus:before {\n content: \"\\f067\";\n}\n\n.fa-minus:before {\n content: \"\\f068\";\n}\n\n.fa-asterisk:before {\n content: \"\\f069\";\n}\n\n.fa-exclamation-circle:before {\n content: \"\\f06a\";\n}\n\n.fa-gift:before {\n content: \"\\f06b\";\n}\n\n.fa-leaf:before {\n content: \"\\f06c\";\n}\n\n.fa-fire:before {\n content: \"\\f06d\";\n}\n\n.fa-eye:before {\n content: \"\\f06e\";\n}\n\n.fa-eye-slash:before {\n content: \"\\f070\";\n}\n\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n content: \"\\f071\";\n}\n\n.fa-plane:before {\n content: \"\\f072\";\n}\n\n.fa-calendar:before {\n content: \"\\f073\";\n}\n\n.fa-random:before {\n content: \"\\f074\";\n}\n\n.fa-comment:before {\n content: \"\\f075\";\n}\n\n.fa-magnet:before {\n content: \"\\f076\";\n}\n\n.fa-chevron-up:before {\n content: \"\\f077\";\n}\n\n.fa-chevron-down:before {\n content: \"\\f078\";\n}\n\n.fa-retweet:before {\n content: \"\\f079\";\n}\n\n.fa-shopping-cart:before {\n content: \"\\f07a\";\n}\n\n.fa-folder:before {\n content: \"\\f07b\";\n}\n\n.fa-folder-open:before {\n content: \"\\f07c\";\n}\n\n.fa-arrows-v:before {\n content: \"\\f07d\";\n}\n\n.fa-arrows-h:before {\n content: \"\\f07e\";\n}\n\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n content: \"\\f080\";\n}\n\n.fa-twitter-square:before {\n content: \"\\f081\";\n}\n\n.fa-facebook-square:before {\n content: \"\\f082\";\n}\n\n.fa-camera-retro:before {\n content: \"\\f083\";\n}\n\n.fa-key:before {\n content: \"\\f084\";\n}\n\n.fa-gears:before,\n.fa-cogs:before {\n content: \"\\f085\";\n}\n\n.fa-comments:before {\n content: \"\\f086\";\n}\n\n.fa-thumbs-o-up:before {\n content: \"\\f087\";\n}\n\n.fa-thumbs-o-down:before {\n content: \"\\f088\";\n}\n\n.fa-star-half:before {\n content: \"\\f089\";\n}\n\n.fa-heart-o:before {\n content: \"\\f08a\";\n}\n\n.fa-sign-out:before {\n content: \"\\f08b\";\n}\n\n.fa-linkedin-square:before {\n content: \"\\f08c\";\n}\n\n.fa-thumb-tack:before {\n content: \"\\f08d\";\n}\n\n.fa-external-link:before {\n content: \"\\f08e\";\n}\n\n.fa-sign-in:before {\n content: \"\\f090\";\n}\n\n.fa-trophy:before {\n content: \"\\f091\";\n}\n\n.fa-github-square:before {\n content: \"\\f092\";\n}\n\n.fa-upload:before {\n content: \"\\f093\";\n}\n\n.fa-lemon-o:before {\n content: \"\\f094\";\n}\n\n.fa-phone:before {\n content: \"\\f095\";\n}\n\n.fa-square-o:before {\n content: \"\\f096\";\n}\n\n.fa-bookmark-o:before {\n content: \"\\f097\";\n}\n\n.fa-phone-square:before {\n content: \"\\f098\";\n}\n\n.fa-twitter:before {\n content: \"\\f099\";\n}\n\n.fa-facebook-f:before,\n.fa-facebook:before {\n content: \"\\f09a\";\n}\n\n.fa-github:before {\n content: \"\\f09b\";\n}\n\n.fa-unlock:before {\n content: \"\\f09c\";\n}\n\n.fa-credit-card:before {\n content: \"\\f09d\";\n}\n\n.fa-feed:before,\n.fa-rss:before {\n content: \"\\f09e\";\n}\n\n.fa-hdd-o:before {\n content: \"\\f0a0\";\n}\n\n.fa-bullhorn:before {\n content: \"\\f0a1\";\n}\n\n.fa-bell:before {\n content: \"\\f0f3\";\n}\n\n.fa-certificate:before {\n content: \"\\f0a3\";\n}\n\n.fa-hand-o-right:before {\n content: \"\\f0a4\";\n}\n\n.fa-hand-o-left:before {\n content: \"\\f0a5\";\n}\n\n.fa-hand-o-up:before {\n content: \"\\f0a6\";\n}\n\n.fa-hand-o-down:before {\n content: \"\\f0a7\";\n}\n\n.fa-arrow-circle-left:before {\n content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-right:before {\n content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-up:before {\n content: \"\\f0aa\";\n}\n\n.fa-arrow-circle-down:before {\n content: \"\\f0ab\";\n}\n\n.fa-globe:before {\n content: \"\\f0ac\";\n}\n\n.fa-wrench:before {\n content: \"\\f0ad\";\n}\n\n.fa-tasks:before {\n content: \"\\f0ae\";\n}\n\n.fa-filter:before {\n content: \"\\f0b0\";\n}\n\n.fa-briefcase:before {\n content: \"\\f0b1\";\n}\n\n.fa-arrows-alt:before {\n content: \"\\f0b2\";\n}\n\n.fa-group:before,\n.fa-users:before {\n content: \"\\f0c0\";\n}\n\n.fa-chain:before,\n.fa-link:before {\n content: \"\\f0c1\";\n}\n\n.fa-cloud:before {\n content: \"\\f0c2\";\n}\n\n.fa-flask:before {\n content: \"\\f0c3\";\n}\n\n.fa-cut:before,\n.fa-scissors:before {\n content: \"\\f0c4\";\n}\n\n.fa-copy:before,\n.fa-files-o:before {\n content: \"\\f0c5\";\n}\n\n.fa-paperclip:before {\n content: \"\\f0c6\";\n}\n\n.fa-save:before,\n.fa-floppy-o:before {\n content: \"\\f0c7\";\n}\n\n.fa-square:before {\n content: \"\\f0c8\";\n}\n\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n content: \"\\f0c9\";\n}\n\n.fa-list-ul:before {\n content: \"\\f0ca\";\n}\n\n.fa-list-ol:before {\n content: \"\\f0cb\";\n}\n\n.fa-strikethrough:before {\n content: \"\\f0cc\";\n}\n\n.fa-underline:before {\n content: \"\\f0cd\";\n}\n\n.fa-table:before {\n content: \"\\f0ce\";\n}\n\n.fa-magic:before {\n content: \"\\f0d0\";\n}\n\n.fa-truck:before {\n content: \"\\f0d1\";\n}\n\n.fa-pinterest:before {\n content: \"\\f0d2\";\n}\n\n.fa-pinterest-square:before {\n content: \"\\f0d3\";\n}\n\n.fa-google-plus-square:before {\n content: \"\\f0d4\";\n}\n\n.fa-google-plus:before {\n content: \"\\f0d5\";\n}\n\n.fa-money:before {\n content: \"\\f0d6\";\n}\n\n.fa-caret-down:before {\n content: \"\\f0d7\";\n}\n\n.fa-caret-up:before {\n content: \"\\f0d8\";\n}\n\n.fa-caret-left:before {\n content: \"\\f0d9\";\n}\n\n.fa-caret-right:before {\n content: \"\\f0da\";\n}\n\n.fa-columns:before {\n content: \"\\f0db\";\n}\n\n.fa-unsorted:before,\n.fa-sort:before {\n content: \"\\f0dc\";\n}\n\n.fa-sort-down:before,\n.fa-sort-desc:before {\n content: \"\\f0dd\";\n}\n\n.fa-sort-up:before,\n.fa-sort-asc:before {\n content: \"\\f0de\";\n}\n\n.fa-envelope:before {\n content: \"\\f0e0\";\n}\n\n.fa-linkedin:before {\n content: \"\\f0e1\";\n}\n\n.fa-rotate-left:before,\n.fa-undo:before {\n content: \"\\f0e2\";\n}\n\n.fa-legal:before,\n.fa-gavel:before {\n content: \"\\f0e3\";\n}\n\n.fa-dashboard:before,\n.fa-tachometer:before {\n content: \"\\f0e4\";\n}\n\n.fa-comment-o:before {\n content: \"\\f0e5\";\n}\n\n.fa-comments-o:before {\n content: \"\\f0e6\";\n}\n\n.fa-flash:before,\n.fa-bolt:before {\n content: \"\\f0e7\";\n}\n\n.fa-sitemap:before {\n content: \"\\f0e8\";\n}\n\n.fa-umbrella:before {\n content: \"\\f0e9\";\n}\n\n.fa-paste:before,\n.fa-clipboard:before {\n content: \"\\f0ea\";\n}\n\n.fa-lightbulb-o:before {\n content: \"\\f0eb\";\n}\n\n.fa-exchange:before {\n content: \"\\f0ec\";\n}\n\n.fa-cloud-download:before {\n content: \"\\f0ed\";\n}\n\n.fa-cloud-upload:before {\n content: \"\\f0ee\";\n}\n\n.fa-user-md:before {\n content: \"\\f0f0\";\n}\n\n.fa-stethoscope:before {\n content: \"\\f0f1\";\n}\n\n.fa-suitcase:before {\n content: \"\\f0f2\";\n}\n\n.fa-bell-o:before {\n content: \"\\f0a2\";\n}\n\n.fa-coffee:before {\n content: \"\\f0f4\";\n}\n\n.fa-cutlery:before {\n content: \"\\f0f5\";\n}\n\n.fa-file-text-o:before {\n content: \"\\f0f6\";\n}\n\n.fa-building-o:before {\n content: \"\\f0f7\";\n}\n\n.fa-hospital-o:before {\n content: \"\\f0f8\";\n}\n\n.fa-ambulance:before {\n content: \"\\f0f9\";\n}\n\n.fa-medkit:before {\n content: \"\\f0fa\";\n}\n\n.fa-fighter-jet:before {\n content: \"\\f0fb\";\n}\n\n.fa-beer:before {\n content: \"\\f0fc\";\n}\n\n.fa-h-square:before {\n content: \"\\f0fd\";\n}\n\n.fa-plus-square:before {\n content: \"\\f0fe\";\n}\n\n.fa-angle-double-left:before {\n content: \"\\f100\";\n}\n\n.fa-angle-double-right:before {\n content: \"\\f101\";\n}\n\n.fa-angle-double-up:before {\n content: \"\\f102\";\n}\n\n.fa-angle-double-down:before {\n content: \"\\f103\";\n}\n\n.fa-angle-left:before {\n content: \"\\f104\";\n}\n\n.fa-angle-right:before {\n content: \"\\f105\";\n}\n\n.fa-angle-up:before {\n content: \"\\f106\";\n}\n\n.fa-angle-down:before {\n content: \"\\f107\";\n}\n\n.fa-desktop:before {\n content: \"\\f108\";\n}\n\n.fa-laptop:before {\n content: \"\\f109\";\n}\n\n.fa-tablet:before {\n content: \"\\f10a\";\n}\n\n.fa-mobile-phone:before,\n.fa-mobile:before {\n content: \"\\f10b\";\n}\n\n.fa-circle-o:before {\n content: \"\\f10c\";\n}\n\n.fa-quote-left:before {\n content: \"\\f10d\";\n}\n\n.fa-quote-right:before {\n content: \"\\f10e\";\n}\n\n.fa-spinner:before {\n content: \"\\f110\";\n}\n\n.fa-circle:before {\n content: \"\\f111\";\n}\n\n.fa-mail-reply:before,\n.fa-reply:before {\n content: \"\\f112\";\n}\n\n.fa-github-alt:before {\n content: \"\\f113\";\n}\n\n.fa-folder-o:before {\n content: \"\\f114\";\n}\n\n.fa-folder-open-o:before {\n content: \"\\f115\";\n}\n\n.fa-smile-o:before {\n content: \"\\f118\";\n}\n\n.fa-frown-o:before {\n content: \"\\f119\";\n}\n\n.fa-meh-o:before {\n content: \"\\f11a\";\n}\n\n.fa-gamepad:before {\n content: \"\\f11b\";\n}\n\n.fa-keyboard-o:before {\n content: \"\\f11c\";\n}\n\n.fa-flag-o:before {\n content: \"\\f11d\";\n}\n\n.fa-flag-checkered:before {\n content: \"\\f11e\";\n}\n\n.fa-terminal:before {\n content: \"\\f120\";\n}\n\n.fa-code:before {\n content: \"\\f121\";\n}\n\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n content: \"\\f122\";\n}\n\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n content: \"\\f123\";\n}\n\n.fa-location-arrow:before {\n content: \"\\f124\";\n}\n\n.fa-crop:before {\n content: \"\\f125\";\n}\n\n.fa-code-fork:before {\n content: \"\\f126\";\n}\n\n.fa-unlink:before,\n.fa-chain-broken:before {\n content: \"\\f127\";\n}\n\n.fa-question:before {\n content: \"\\f128\";\n}\n\n.fa-info:before {\n content: \"\\f129\";\n}\n\n.fa-exclamation:before {\n content: \"\\f12a\";\n}\n\n.fa-superscript:before {\n content: \"\\f12b\";\n}\n\n.fa-subscript:before {\n content: \"\\f12c\";\n}\n\n.fa-eraser:before {\n content: \"\\f12d\";\n}\n\n.fa-puzzle-piece:before {\n content: \"\\f12e\";\n}\n\n.fa-microphone:before {\n content: \"\\f130\";\n}\n\n.fa-microphone-slash:before {\n content: \"\\f131\";\n}\n\n.fa-shield:before {\n content: \"\\f132\";\n}\n\n.fa-calendar-o:before {\n content: \"\\f133\";\n}\n\n.fa-fire-extinguisher:before {\n content: \"\\f134\";\n}\n\n.fa-rocket:before {\n content: \"\\f135\";\n}\n\n.fa-maxcdn:before {\n content: \"\\f136\";\n}\n\n.fa-chevron-circle-left:before {\n content: \"\\f137\";\n}\n\n.fa-chevron-circle-right:before {\n content: \"\\f138\";\n}\n\n.fa-chevron-circle-up:before {\n content: \"\\f139\";\n}\n\n.fa-chevron-circle-down:before {\n content: \"\\f13a\";\n}\n\n.fa-html5:before {\n content: \"\\f13b\";\n}\n\n.fa-css3:before {\n content: \"\\f13c\";\n}\n\n.fa-anchor:before {\n content: \"\\f13d\";\n}\n\n.fa-unlock-alt:before {\n content: \"\\f13e\";\n}\n\n.fa-bullseye:before {\n content: \"\\f140\";\n}\n\n.fa-ellipsis-h:before {\n content: \"\\f141\";\n}\n\n.fa-ellipsis-v:before {\n content: \"\\f142\";\n}\n\n.fa-rss-square:before {\n content: \"\\f143\";\n}\n\n.fa-play-circle:before {\n content: \"\\f144\";\n}\n\n.fa-ticket:before {\n content: \"\\f145\";\n}\n\n.fa-minus-square:before {\n content: \"\\f146\";\n}\n\n.fa-minus-square-o:before {\n content: \"\\f147\";\n}\n\n.fa-level-up:before {\n content: \"\\f148\";\n}\n\n.fa-level-down:before {\n content: \"\\f149\";\n}\n\n.fa-check-square:before {\n content: \"\\f14a\";\n}\n\n.fa-pencil-square:before {\n content: \"\\f14b\";\n}\n\n.fa-external-link-square:before {\n content: \"\\f14c\";\n}\n\n.fa-share-square:before {\n content: \"\\f14d\";\n}\n\n.fa-compass:before {\n content: \"\\f14e\";\n}\n\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n content: \"\\f150\";\n}\n\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n content: \"\\f151\";\n}\n\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n content: \"\\f152\";\n}\n\n.fa-euro:before,\n.fa-eur:before {\n content: \"\\f153\";\n}\n\n.fa-gbp:before {\n content: \"\\f154\";\n}\n\n.fa-dollar:before,\n.fa-usd:before {\n content: \"\\f155\";\n}\n\n.fa-rupee:before,\n.fa-inr:before {\n content: \"\\f156\";\n}\n\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n content: \"\\f157\";\n}\n\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n content: \"\\f158\";\n}\n\n.fa-won:before,\n.fa-krw:before {\n content: \"\\f159\";\n}\n\n.fa-bitcoin:before,\n.fa-btc:before {\n content: \"\\f15a\";\n}\n\n.fa-file:before {\n content: \"\\f15b\";\n}\n\n.fa-file-text:before {\n content: \"\\f15c\";\n}\n\n.fa-sort-alpha-asc:before {\n content: \"\\f15d\";\n}\n\n.fa-sort-alpha-desc:before {\n content: \"\\f15e\";\n}\n\n.fa-sort-amount-asc:before {\n content: \"\\f160\";\n}\n\n.fa-sort-amount-desc:before {\n content: \"\\f161\";\n}\n\n.fa-sort-numeric-asc:before {\n content: \"\\f162\";\n}\n\n.fa-sort-numeric-desc:before {\n content: \"\\f163\";\n}\n\n.fa-thumbs-up:before {\n content: \"\\f164\";\n}\n\n.fa-thumbs-down:before {\n content: \"\\f165\";\n}\n\n.fa-youtube-square:before {\n content: \"\\f166\";\n}\n\n.fa-youtube:before {\n content: \"\\f167\";\n}\n\n.fa-xing:before {\n content: \"\\f168\";\n}\n\n.fa-xing-square:before {\n content: \"\\f169\";\n}\n\n.fa-youtube-play:before {\n content: \"\\f16a\";\n}\n\n.fa-dropbox:before {\n content: \"\\f16b\";\n}\n\n.fa-stack-overflow:before {\n content: \"\\f16c\";\n}\n\n.fa-instagram:before {\n content: \"\\f16d\";\n}\n\n.fa-flickr:before {\n content: \"\\f16e\";\n}\n\n.fa-adn:before {\n content: \"\\f170\";\n}\n\n.fa-bitbucket:before {\n content: \"\\f171\";\n}\n\n.fa-bitbucket-square:before {\n content: \"\\f172\";\n}\n\n.fa-tumblr:before {\n content: \"\\f173\";\n}\n\n.fa-tumblr-square:before {\n content: \"\\f174\";\n}\n\n.fa-long-arrow-down:before {\n content: \"\\f175\";\n}\n\n.fa-long-arrow-up:before {\n content: \"\\f176\";\n}\n\n.fa-long-arrow-left:before {\n content: \"\\f177\";\n}\n\n.fa-long-arrow-right:before {\n content: \"\\f178\";\n}\n\n.fa-apple:before {\n content: \"\\f179\";\n}\n\n.fa-windows:before {\n content: \"\\f17a\";\n}\n\n.fa-android:before {\n content: \"\\f17b\";\n}\n\n.fa-linux:before {\n content: \"\\f17c\";\n}\n\n.fa-dribbble:before {\n content: \"\\f17d\";\n}\n\n.fa-skype:before {\n content: \"\\f17e\";\n}\n\n.fa-foursquare:before {\n content: \"\\f180\";\n}\n\n.fa-trello:before {\n content: \"\\f181\";\n}\n\n.fa-female:before {\n content: \"\\f182\";\n}\n\n.fa-male:before {\n content: \"\\f183\";\n}\n\n.fa-gittip:before,\n.fa-gratipay:before {\n content: \"\\f184\";\n}\n\n.fa-sun-o:before {\n content: \"\\f185\";\n}\n\n.fa-moon-o:before {\n content: \"\\f186\";\n}\n\n.fa-archive:before {\n content: \"\\f187\";\n}\n\n.fa-bug:before {\n content: \"\\f188\";\n}\n\n.fa-vk:before {\n content: \"\\f189\";\n}\n\n.fa-weibo:before {\n content: \"\\f18a\";\n}\n\n.fa-renren:before {\n content: \"\\f18b\";\n}\n\n.fa-pagelines:before {\n content: \"\\f18c\";\n}\n\n.fa-stack-exchange:before {\n content: \"\\f18d\";\n}\n\n.fa-arrow-circle-o-right:before {\n content: \"\\f18e\";\n}\n\n.fa-arrow-circle-o-left:before {\n content: \"\\f190\";\n}\n\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n content: \"\\f191\";\n}\n\n.fa-dot-circle-o:before {\n content: \"\\f192\";\n}\n\n.fa-wheelchair:before {\n content: \"\\f193\";\n}\n\n.fa-vimeo-square:before {\n content: \"\\f194\";\n}\n\n.fa-turkish-lira:before,\n.fa-try:before {\n content: \"\\f195\";\n}\n\n.fa-plus-square-o:before {\n content: \"\\f196\";\n}\n\n.fa-space-shuttle:before {\n content: \"\\f197\";\n}\n\n.fa-slack:before {\n content: \"\\f198\";\n}\n\n.fa-envelope-square:before {\n content: \"\\f199\";\n}\n\n.fa-wordpress:before {\n content: \"\\f19a\";\n}\n\n.fa-openid:before {\n content: \"\\f19b\";\n}\n\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n content: \"\\f19c\";\n}\n\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n content: \"\\f19d\";\n}\n\n.fa-yahoo:before {\n content: \"\\f19e\";\n}\n\n.fa-google:before {\n content: \"\\f1a0\";\n}\n\n.fa-reddit:before {\n content: \"\\f1a1\";\n}\n\n.fa-reddit-square:before {\n content: \"\\f1a2\";\n}\n\n.fa-stumbleupon-circle:before {\n content: \"\\f1a3\";\n}\n\n.fa-stumbleupon:before {\n content: \"\\f1a4\";\n}\n\n.fa-delicious:before {\n content: \"\\f1a5\";\n}\n\n.fa-digg:before {\n content: \"\\f1a6\";\n}\n\n.fa-pied-piper-pp:before {\n content: \"\\f1a7\";\n}\n\n.fa-pied-piper-alt:before {\n content: \"\\f1a8\";\n}\n\n.fa-drupal:before {\n content: \"\\f1a9\";\n}\n\n.fa-joomla:before {\n content: \"\\f1aa\";\n}\n\n.fa-language:before {\n content: \"\\f1ab\";\n}\n\n.fa-fax:before {\n content: \"\\f1ac\";\n}\n\n.fa-building:before {\n content: \"\\f1ad\";\n}\n\n.fa-child:before {\n content: \"\\f1ae\";\n}\n\n.fa-paw:before {\n content: \"\\f1b0\";\n}\n\n.fa-spoon:before {\n content: \"\\f1b1\";\n}\n\n.fa-cube:before {\n content: \"\\f1b2\";\n}\n\n.fa-cubes:before {\n content: \"\\f1b3\";\n}\n\n.fa-behance:before {\n content: \"\\f1b4\";\n}\n\n.fa-behance-square:before {\n content: \"\\f1b5\";\n}\n\n.fa-steam:before {\n content: \"\\f1b6\";\n}\n\n.fa-steam-square:before {\n content: \"\\f1b7\";\n}\n\n.fa-recycle:before {\n content: \"\\f1b8\";\n}\n\n.fa-automobile:before,\n.fa-car:before {\n content: \"\\f1b9\";\n}\n\n.fa-cab:before,\n.fa-taxi:before {\n content: \"\\f1ba\";\n}\n\n.fa-tree:before {\n content: \"\\f1bb\";\n}\n\n.fa-spotify:before {\n content: \"\\f1bc\";\n}\n\n.fa-deviantart:before {\n content: \"\\f1bd\";\n}\n\n.fa-soundcloud:before {\n content: \"\\f1be\";\n}\n\n.fa-database:before {\n content: \"\\f1c0\";\n}\n\n.fa-file-pdf-o:before {\n content: \"\\f1c1\";\n}\n\n.fa-file-word-o:before {\n content: \"\\f1c2\";\n}\n\n.fa-file-excel-o:before {\n content: \"\\f1c3\";\n}\n\n.fa-file-powerpoint-o:before {\n content: \"\\f1c4\";\n}\n\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n content: \"\\f1c5\";\n}\n\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n content: \"\\f1c6\";\n}\n\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n content: \"\\f1c7\";\n}\n\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n content: \"\\f1c8\";\n}\n\n.fa-file-code-o:before {\n content: \"\\f1c9\";\n}\n\n.fa-vine:before {\n content: \"\\f1ca\";\n}\n\n.fa-codepen:before {\n content: \"\\f1cb\";\n}\n\n.fa-jsfiddle:before {\n content: \"\\f1cc\";\n}\n\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n content: \"\\f1cd\";\n}\n\n.fa-circle-o-notch:before {\n content: \"\\f1ce\";\n}\n\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n content: \"\\f1d0\";\n}\n\n.fa-ge:before,\n.fa-empire:before {\n content: \"\\f1d1\";\n}\n\n.fa-git-square:before {\n content: \"\\f1d2\";\n}\n\n.fa-git:before {\n content: \"\\f1d3\";\n}\n\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n content: \"\\f1d4\";\n}\n\n.fa-tencent-weibo:before {\n content: \"\\f1d5\";\n}\n\n.fa-qq:before {\n content: \"\\f1d6\";\n}\n\n.fa-wechat:before,\n.fa-weixin:before {\n content: \"\\f1d7\";\n}\n\n.fa-send:before,\n.fa-paper-plane:before {\n content: \"\\f1d8\";\n}\n\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n content: \"\\f1d9\";\n}\n\n.fa-history:before {\n content: \"\\f1da\";\n}\n\n.fa-circle-thin:before {\n content: \"\\f1db\";\n}\n\n.fa-header:before {\n content: \"\\f1dc\";\n}\n\n.fa-paragraph:before {\n content: \"\\f1dd\";\n}\n\n.fa-sliders:before {\n content: \"\\f1de\";\n}\n\n.fa-share-alt:before {\n content: \"\\f1e0\";\n}\n\n.fa-share-alt-square:before {\n content: \"\\f1e1\";\n}\n\n.fa-bomb:before {\n content: \"\\f1e2\";\n}\n\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n content: \"\\f1e3\";\n}\n\n.fa-tty:before {\n content: \"\\f1e4\";\n}\n\n.fa-binoculars:before {\n content: \"\\f1e5\";\n}\n\n.fa-plug:before {\n content: \"\\f1e6\";\n}\n\n.fa-slideshare:before {\n content: \"\\f1e7\";\n}\n\n.fa-twitch:before {\n content: \"\\f1e8\";\n}\n\n.fa-yelp:before {\n content: \"\\f1e9\";\n}\n\n.fa-newspaper-o:before {\n content: \"\\f1ea\";\n}\n\n.fa-wifi:before {\n content: \"\\f1eb\";\n}\n\n.fa-calculator:before {\n content: \"\\f1ec\";\n}\n\n.fa-paypal:before {\n content: \"\\f1ed\";\n}\n\n.fa-google-wallet:before {\n content: \"\\f1ee\";\n}\n\n.fa-cc-visa:before {\n content: \"\\f1f0\";\n}\n\n.fa-cc-mastercard:before {\n content: \"\\f1f1\";\n}\n\n.fa-cc-discover:before {\n content: \"\\f1f2\";\n}\n\n.fa-cc-amex:before {\n content: \"\\f1f3\";\n}\n\n.fa-cc-paypal:before {\n content: \"\\f1f4\";\n}\n\n.fa-cc-stripe:before {\n content: \"\\f1f5\";\n}\n\n.fa-bell-slash:before {\n content: \"\\f1f6\";\n}\n\n.fa-bell-slash-o:before {\n content: \"\\f1f7\";\n}\n\n.fa-trash:before {\n content: \"\\f1f8\";\n}\n\n.fa-copyright:before {\n content: \"\\f1f9\";\n}\n\n.fa-at:before {\n content: \"\\f1fa\";\n}\n\n.fa-eyedropper:before {\n content: \"\\f1fb\";\n}\n\n.fa-paint-brush:before {\n content: \"\\f1fc\";\n}\n\n.fa-birthday-cake:before {\n content: \"\\f1fd\";\n}\n\n.fa-area-chart:before {\n content: \"\\f1fe\";\n}\n\n.fa-pie-chart:before {\n content: \"\\f200\";\n}\n\n.fa-line-chart:before {\n content: \"\\f201\";\n}\n\n.fa-lastfm:before {\n content: \"\\f202\";\n}\n\n.fa-lastfm-square:before {\n content: \"\\f203\";\n}\n\n.fa-toggle-off:before {\n content: \"\\f204\";\n}\n\n.fa-toggle-on:before {\n content: \"\\f205\";\n}\n\n.fa-bicycle:before {\n content: \"\\f206\";\n}\n\n.fa-bus:before {\n content: \"\\f207\";\n}\n\n.fa-ioxhost:before {\n content: \"\\f208\";\n}\n\n.fa-angellist:before {\n content: \"\\f209\";\n}\n\n.fa-cc:before {\n content: \"\\f20a\";\n}\n\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n content: \"\\f20b\";\n}\n\n.fa-meanpath:before {\n content: \"\\f20c\";\n}\n\n.fa-buysellads:before {\n content: \"\\f20d\";\n}\n\n.fa-connectdevelop:before {\n content: \"\\f20e\";\n}\n\n.fa-dashcube:before {\n content: \"\\f210\";\n}\n\n.fa-forumbee:before {\n content: \"\\f211\";\n}\n\n.fa-leanpub:before {\n content: \"\\f212\";\n}\n\n.fa-sellsy:before {\n content: \"\\f213\";\n}\n\n.fa-shirtsinbulk:before {\n content: \"\\f214\";\n}\n\n.fa-simplybuilt:before {\n content: \"\\f215\";\n}\n\n.fa-skyatlas:before {\n content: \"\\f216\";\n}\n\n.fa-cart-plus:before {\n content: \"\\f217\";\n}\n\n.fa-cart-arrow-down:before {\n content: \"\\f218\";\n}\n\n.fa-diamond:before {\n content: \"\\f219\";\n}\n\n.fa-ship:before {\n content: \"\\f21a\";\n}\n\n.fa-user-secret:before {\n content: \"\\f21b\";\n}\n\n.fa-motorcycle:before {\n content: \"\\f21c\";\n}\n\n.fa-street-view:before {\n content: \"\\f21d\";\n}\n\n.fa-heartbeat:before {\n content: \"\\f21e\";\n}\n\n.fa-venus:before {\n content: \"\\f221\";\n}\n\n.fa-mars:before {\n content: \"\\f222\";\n}\n\n.fa-mercury:before {\n content: \"\\f223\";\n}\n\n.fa-intersex:before,\n.fa-transgender:before {\n content: \"\\f224\";\n}\n\n.fa-transgender-alt:before {\n content: \"\\f225\";\n}\n\n.fa-venus-double:before {\n content: \"\\f226\";\n}\n\n.fa-mars-double:before {\n content: \"\\f227\";\n}\n\n.fa-venus-mars:before {\n content: \"\\f228\";\n}\n\n.fa-mars-stroke:before {\n content: \"\\f229\";\n}\n\n.fa-mars-stroke-v:before {\n content: \"\\f22a\";\n}\n\n.fa-mars-stroke-h:before {\n content: \"\\f22b\";\n}\n\n.fa-neuter:before {\n content: \"\\f22c\";\n}\n\n.fa-genderless:before {\n content: \"\\f22d\";\n}\n\n.fa-facebook-official:before {\n content: \"\\f230\";\n}\n\n.fa-pinterest-p:before {\n content: \"\\f231\";\n}\n\n.fa-whatsapp:before {\n content: \"\\f232\";\n}\n\n.fa-server:before {\n content: \"\\f233\";\n}\n\n.fa-user-plus:before {\n content: \"\\f234\";\n}\n\n.fa-user-times:before {\n content: \"\\f235\";\n}\n\n.fa-hotel:before,\n.fa-bed:before {\n content: \"\\f236\";\n}\n\n.fa-viacoin:before {\n content: \"\\f237\";\n}\n\n.fa-train:before {\n content: \"\\f238\";\n}\n\n.fa-subway:before {\n content: \"\\f239\";\n}\n\n.fa-medium:before {\n content: \"\\f23a\";\n}\n\n.fa-yc:before,\n.fa-y-combinator:before {\n content: \"\\f23b\";\n}\n\n.fa-optin-monster:before {\n content: \"\\f23c\";\n}\n\n.fa-opencart:before {\n content: \"\\f23d\";\n}\n\n.fa-expeditedssl:before {\n content: \"\\f23e\";\n}\n\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n content: \"\\f240\";\n}\n\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n content: \"\\f241\";\n}\n\n.fa-battery-2:before,\n.fa-battery-half:before {\n content: \"\\f242\";\n}\n\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n content: \"\\f243\";\n}\n\n.fa-battery-0:before,\n.fa-battery-empty:before {\n content: \"\\f244\";\n}\n\n.fa-mouse-pointer:before {\n content: \"\\f245\";\n}\n\n.fa-i-cursor:before {\n content: \"\\f246\";\n}\n\n.fa-object-group:before {\n content: \"\\f247\";\n}\n\n.fa-object-ungroup:before {\n content: \"\\f248\";\n}\n\n.fa-sticky-note:before {\n content: \"\\f249\";\n}\n\n.fa-sticky-note-o:before {\n content: \"\\f24a\";\n}\n\n.fa-cc-jcb:before {\n content: \"\\f24b\";\n}\n\n.fa-cc-diners-club:before {\n content: \"\\f24c\";\n}\n\n.fa-clone:before {\n content: \"\\f24d\";\n}\n\n.fa-balance-scale:before {\n content: \"\\f24e\";\n}\n\n.fa-hourglass-o:before {\n content: \"\\f250\";\n}\n\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n content: \"\\f251\";\n}\n\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n content: \"\\f252\";\n}\n\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n content: \"\\f253\";\n}\n\n.fa-hourglass:before {\n content: \"\\f254\";\n}\n\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n content: \"\\f255\";\n}\n\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n content: \"\\f256\";\n}\n\n.fa-hand-scissors-o:before {\n content: \"\\f257\";\n}\n\n.fa-hand-lizard-o:before {\n content: \"\\f258\";\n}\n\n.fa-hand-spock-o:before {\n content: \"\\f259\";\n}\n\n.fa-hand-pointer-o:before {\n content: \"\\f25a\";\n}\n\n.fa-hand-peace-o:before {\n content: \"\\f25b\";\n}\n\n.fa-trademark:before {\n content: \"\\f25c\";\n}\n\n.fa-registered:before {\n content: \"\\f25d\";\n}\n\n.fa-creative-commons:before {\n content: \"\\f25e\";\n}\n\n.fa-gg:before {\n content: \"\\f260\";\n}\n\n.fa-gg-circle:before {\n content: \"\\f261\";\n}\n\n.fa-tripadvisor:before {\n content: \"\\f262\";\n}\n\n.fa-odnoklassniki:before {\n content: \"\\f263\";\n}\n\n.fa-odnoklassniki-square:before {\n content: \"\\f264\";\n}\n\n.fa-get-pocket:before {\n content: \"\\f265\";\n}\n\n.fa-wikipedia-w:before {\n content: \"\\f266\";\n}\n\n.fa-safari:before {\n content: \"\\f267\";\n}\n\n.fa-chrome:before {\n content: \"\\f268\";\n}\n\n.fa-firefox:before {\n content: \"\\f269\";\n}\n\n.fa-opera:before {\n content: \"\\f26a\";\n}\n\n.fa-internet-explorer:before {\n content: \"\\f26b\";\n}\n\n.fa-tv:before,\n.fa-television:before {\n content: \"\\f26c\";\n}\n\n.fa-contao:before {\n content: \"\\f26d\";\n}\n\n.fa-500px:before {\n content: \"\\f26e\";\n}\n\n.fa-amazon:before {\n content: \"\\f270\";\n}\n\n.fa-calendar-plus-o:before {\n content: \"\\f271\";\n}\n\n.fa-calendar-minus-o:before {\n content: \"\\f272\";\n}\n\n.fa-calendar-times-o:before {\n content: \"\\f273\";\n}\n\n.fa-calendar-check-o:before {\n content: \"\\f274\";\n}\n\n.fa-industry:before {\n content: \"\\f275\";\n}\n\n.fa-map-pin:before {\n content: \"\\f276\";\n}\n\n.fa-map-signs:before {\n content: \"\\f277\";\n}\n\n.fa-map-o:before {\n content: \"\\f278\";\n}\n\n.fa-map:before {\n content: \"\\f279\";\n}\n\n.fa-commenting:before {\n content: \"\\f27a\";\n}\n\n.fa-commenting-o:before {\n content: \"\\f27b\";\n}\n\n.fa-houzz:before {\n content: \"\\f27c\";\n}\n\n.fa-vimeo:before {\n content: \"\\f27d\";\n}\n\n.fa-black-tie:before {\n content: \"\\f27e\";\n}\n\n.fa-fonticons:before {\n content: \"\\f280\";\n}\n\n.fa-reddit-alien:before {\n content: \"\\f281\";\n}\n\n.fa-edge:before {\n content: \"\\f282\";\n}\n\n.fa-credit-card-alt:before {\n content: \"\\f283\";\n}\n\n.fa-codiepie:before {\n content: \"\\f284\";\n}\n\n.fa-modx:before {\n content: \"\\f285\";\n}\n\n.fa-fort-awesome:before {\n content: \"\\f286\";\n}\n\n.fa-usb:before {\n content: \"\\f287\";\n}\n\n.fa-product-hunt:before {\n content: \"\\f288\";\n}\n\n.fa-mixcloud:before {\n content: \"\\f289\";\n}\n\n.fa-scribd:before {\n content: \"\\f28a\";\n}\n\n.fa-pause-circle:before {\n content: \"\\f28b\";\n}\n\n.fa-pause-circle-o:before {\n content: \"\\f28c\";\n}\n\n.fa-stop-circle:before {\n content: \"\\f28d\";\n}\n\n.fa-stop-circle-o:before {\n content: \"\\f28e\";\n}\n\n.fa-shopping-bag:before {\n content: \"\\f290\";\n}\n\n.fa-shopping-basket:before {\n content: \"\\f291\";\n}\n\n.fa-hashtag:before {\n content: \"\\f292\";\n}\n\n.fa-bluetooth:before {\n content: \"\\f293\";\n}\n\n.fa-bluetooth-b:before {\n content: \"\\f294\";\n}\n\n.fa-percent:before {\n content: \"\\f295\";\n}\n\n.fa-gitlab:before {\n content: \"\\f296\";\n}\n\n.fa-wpbeginner:before {\n content: \"\\f297\";\n}\n\n.fa-wpforms:before {\n content: \"\\f298\";\n}\n\n.fa-envira:before {\n content: \"\\f299\";\n}\n\n.fa-universal-access:before {\n content: \"\\f29a\";\n}\n\n.fa-wheelchair-alt:before {\n content: \"\\f29b\";\n}\n\n.fa-question-circle-o:before {\n content: \"\\f29c\";\n}\n\n.fa-blind:before {\n content: \"\\f29d\";\n}\n\n.fa-audio-description:before {\n content: \"\\f29e\";\n}\n\n.fa-volume-control-phone:before {\n content: \"\\f2a0\";\n}\n\n.fa-braille:before {\n content: \"\\f2a1\";\n}\n\n.fa-assistive-listening-systems:before {\n content: \"\\f2a2\";\n}\n\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n content: \"\\f2a3\";\n}\n\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n content: \"\\f2a4\";\n}\n\n.fa-glide:before {\n content: \"\\f2a5\";\n}\n\n.fa-glide-g:before {\n content: \"\\f2a6\";\n}\n\n.fa-signing:before,\n.fa-sign-language:before {\n content: \"\\f2a7\";\n}\n\n.fa-low-vision:before {\n content: \"\\f2a8\";\n}\n\n.fa-viadeo:before {\n content: \"\\f2a9\";\n}\n\n.fa-viadeo-square:before {\n content: \"\\f2aa\";\n}\n\n.fa-snapchat:before {\n content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n content: \"\\f2ac\";\n}\n\n.fa-snapchat-square:before {\n content: \"\\f2ad\";\n}\n\n.fa-pied-piper:before {\n content: \"\\f2ae\";\n}\n\n.fa-first-order:before {\n content: \"\\f2b0\";\n}\n\n.fa-yoast:before {\n content: \"\\f2b1\";\n}\n\n.fa-themeisle:before {\n content: \"\\f2b2\";\n}\n\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n content: \"\\f2b3\";\n}\n\n.fa-fa:before,\n.fa-font-awesome:before {\n content: \"\\f2b4\";\n}\n\n.fa-handshake-o:before {\n content: \"\\f2b5\";\n}\n\n.fa-envelope-open:before {\n content: \"\\f2b6\";\n}\n\n.fa-envelope-open-o:before {\n content: \"\\f2b7\";\n}\n\n.fa-linode:before {\n content: \"\\f2b8\";\n}\n\n.fa-address-book:before {\n content: \"\\f2b9\";\n}\n\n.fa-address-book-o:before {\n content: \"\\f2ba\";\n}\n\n.fa-vcard:before,\n.fa-address-card:before {\n content: \"\\f2bb\";\n}\n\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n content: \"\\f2bc\";\n}\n\n.fa-user-circle:before {\n content: \"\\f2bd\";\n}\n\n.fa-user-circle-o:before {\n content: \"\\f2be\";\n}\n\n.fa-user-o:before {\n content: \"\\f2c0\";\n}\n\n.fa-id-badge:before {\n content: \"\\f2c1\";\n}\n\n.fa-drivers-license:before,\n.fa-id-card:before {\n content: \"\\f2c2\";\n}\n\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n content: \"\\f2c3\";\n}\n\n.fa-quora:before {\n content: \"\\f2c4\";\n}\n\n.fa-free-code-camp:before {\n content: \"\\f2c5\";\n}\n\n.fa-telegram:before {\n content: \"\\f2c6\";\n}\n\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n content: \"\\f2c7\";\n}\n\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n content: \"\\f2c8\";\n}\n\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n content: \"\\f2c9\";\n}\n\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n content: \"\\f2ca\";\n}\n\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n content: \"\\f2cb\";\n}\n\n.fa-shower:before {\n content: \"\\f2cc\";\n}\n\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n content: \"\\f2cd\";\n}\n\n.fa-podcast:before {\n content: \"\\f2ce\";\n}\n\n.fa-window-maximize:before {\n content: \"\\f2d0\";\n}\n\n.fa-window-minimize:before {\n content: \"\\f2d1\";\n}\n\n.fa-window-restore:before {\n content: \"\\f2d2\";\n}\n\n.fa-times-rectangle:before,\n.fa-window-close:before {\n content: \"\\f2d3\";\n}\n\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n content: \"\\f2d4\";\n}\n\n.fa-bandcamp:before {\n content: \"\\f2d5\";\n}\n\n.fa-grav:before {\n content: \"\\f2d6\";\n}\n\n.fa-etsy:before {\n content: \"\\f2d7\";\n}\n\n.fa-imdb:before {\n content: \"\\f2d8\";\n}\n\n.fa-ravelry:before {\n content: \"\\f2d9\";\n}\n\n.fa-eercast:before {\n content: \"\\f2da\";\n}\n\n.fa-microchip:before {\n content: \"\\f2db\";\n}\n\n.fa-snowflake-o:before {\n content: \"\\f2dc\";\n}\n\n.fa-superpowers:before {\n content: \"\\f2dd\";\n}\n\n.fa-wpexplorer:before {\n content: \"\\f2de\";\n}\n\n.fa-meetup:before {\n content: \"\\f2e0\";\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}","%cf,\n%clearfix {\n\t&:before,\n\t&:after {\n\t content: \" \";\n\t display: table;\n\t}\n\n\t&:after {\n \tclear: both;\n\t}\n}\n\n\n\n%llms-element {\n\tbackground: $el-background;\n\tbox-shadow: $el-box-shadow;\n\tdisplay: block;\n\tcolor: #212121;\n\tmin-height: 85px;\n\tpadding: 15px;\n\ttext-decoration: none;\n\tposition: relative;\n\ttransition: background .4s ease;\n\n\t&:hover {\n\t\tbackground: $el-background-hover;\n\t}\n}\n",".llms-button-action,\n.llms-button-danger,\n.llms-button-primary,\n.llms-button-secondary {\n\tborder:none;\n\tborder-radius: 8px;\n\tcolor: $color-white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n\tfont-size: 18px;\n\tfont-weight: 700;\n\ttext-decoration: none;\n\ttext-shadow: none;\n\tline-height: 1;\n\tmargin: 0;\n\tmax-width: 100%;\n\tpadding: 12px 24px;\n\tposition: relative;\n\ttransition: all .5s ease;\n\n\t&:disabled {\n\t\topacity: 0.5;\n\t}\n\t&:hover, &:active {\n\t\tcolor: $color-white;\n\t}\n\t&:focus {\n\t\tcolor: $color-white;\n\t}\n\n\t&.auto {\n\t\twidth: auto;\n\t}\n\n\t&.full {\n\t\tdisplay: block;\n\t\ttext-align: center;\n\t\twidth: 100%;\n\t}\n\n\t&.square {\n\t\tpadding: 12px;\n\t}\n\n\t&.small {\n\t\tfont-size: 13px;\n\t\tpadding: 8px 14px;\n\t\t&.square { padding: 8px; }\n\t}\n\n\t&.large {\n\t\tfont-size: 18px;\n\t\tline-height: 1.2;\n\t\tpadding: 16px 32px;\n\t\t&.square { padding: 16px; }\n\t\t.fa {\n\t\t\tleft: -7px;\n\t\t\tposition: relative;\n\t\t}\n\t}\n\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-action,\na.llms-button-danger,\na.llms-button-primary {\n\tcolor: $color-white;\n}\n\n.llms-button-primary {\n\tbackground: $color-brand-blue;\n\t&:hover,\n\t&.clicked {\n\t\tbackground: $color-brand-blue-dark;\n\t}\n\t&:focus,\n\t&:active {\n\t\tbackground: $color-brand-blue-light;\n\t}\n}\n\n.llms-button-secondary {\n\tbackground: #e1e1e1;\n\tcolor: $color-cinder;\n\t&:hover {\n\t\tcolor: #414141;\n\t\tbackground: darken( #e1e1e1, 8 );\n\t}\n\t&:focus,\n\t&:active {\n\t\tcolor: #414141;\n\t\tbackground: lighten( #e1e1e1, 4 );\n\t}\n}\n/* Fix for cases where link color overrides the button color */\na.llms-button-secondary {\n\tcolor: $color-cinder;\n}\n\n.llms-button-action {\n\tbackground: $color-orange;\n\t&:hover,\n\t&.clicked {\n\t\tbackground: $color-brand-orange-dark;\n\t}\n\t&:focus,\n\t&:active {\n\t\tbackground: $color-brand-orange-light;\n\t}\n}\n\n.llms-button-danger {\n\tbackground: $color-danger;\n\t&:hover {\n\t\tbackground: darken( $color-danger, 8 );\n\t}\n\t&:focus,\n\t&:active {\n\t\tbackground: lighten( $color-danger, 4 );\n\t}\n}\n\n.llms-button-outline {\n\tbackground: transparent;\n\tborder: 3px solid #1D2327;\n\tborder-radius: 8px;\n\tcolor: #1D2327;\n\tcursor: pointer;\n\tfont-size: 16px;\n\tfont-weight: 700;\n\ttext-decoration: none;\n\ttext-shadow: none;\n\tline-height: 1;\n\tmargin: 0;\n\tmax-width: 100%;\n\tpadding: 12px 24px;\n\tposition: relative;\n\ttransition: all .5s ease;\n\n\t&:disabled {\n\t\topacity: 0.5;\n\t}\n\t&:hover, &:active {\n\t\tcolor: #1D2327;\n\t}\n\t&:focus {\n\t\tcolor: #1D2327;\n\t}\n\n\t&.auto {\n\t\twidth: auto;\n\t}\n\n\t&.full {\n\t\tdisplay: block;\n\t\ttext-align: center;\n\t\twidth: 100%;\n\t}\n\n\t&.square {\n\t\tpadding: 12px;\n\t}\n\n}\n\n.llms-course-continue-button {\n\tdisplay: inline-block;\n}\n","// ----- LifterLMS Brand Colors ----- \\\\\n$color-brand-dark-blue: #243c56;\n\n$color-brand-blue: #466dd8;\n$color-brand-blue-dark: darken( $color-brand-blue, 12 ); // #0077e4\n$color-brand-blue-light: lighten( $color-brand-blue, 8 );\n\n$color-brand-orange: #f8954f;\n$color-brand-orange-dark: #f67d28;\n$color-brand-orange-light: lighten( $color-brand-orange, 8 );\n\n$color-brand-aqua: #17bebb;\n\n$color-brand-pink: #ef476f;\n\n\n\n// ----- name our versions of common colors ----- \\\\\n$color-black: #010101;\n$color-green: #4d8d3c;\n$color-blue: $color-brand-blue;\n$color-red: #bb231c;\n$color-white: #fefefe;\n$color-aqua: #35bbaa;\n$color-purple: #845ef7;\n$color-orange: #c05621;\n\n$color-red-hover: darken($color-red,5);\n\n\n// ----- state / action names ----- \\\\\n$color-success: $color-green;\n$color-danger: $color-red;\n\n\n\n\n\n\n\n\n$color-lightgrey:\t\t#ccc;\n$color-grey: \t\t\t#999;\n$color-darkgrey:\t\t#666;\n$color-cinder:\t\t\t#444;\n$color-lightblue:\t\t#33b1cb;\n$color-darkblue:\t\t#0185a3;\n\n\n\n\n\n\n\n\n\n\n\n\n$color-border: #dedede;\n\n$el-box-shadow: 0 1px 2px 0 rgba($color-black,0.4);\n$el-background: #f1f1f1;\n$el-background-hover: #eaeaea;\n\n$break-xsmall: 320px;\n$break-small: 641px;\n$break-medium: 768px;\n$break-large: 1024px;\n\n$radius-small: 6px;\n$radius-medium: 12px;\n","//\n// LifterLMS Brand Colors\n// Currently overrides brand colors on the admin panel\n//\n\n$color-brand-blue: #466dd8;\n$color-brand-blue-dark: darken( $color-brand-blue, 8 );\n$color-brand-dark-blue: darken( $color-brand-blue, 24 );\n$color-brand-blue-light: lighten( $color-brand-blue, 8 );\n\n$color-brand-orange: #f8954f;\n$color-brand-orange-dark: #f67d28;\n$color-brand-orange-light: lighten( $color-brand-orange, 8 );\n\n$color-brand-aqua: #17bebb;\n\n$color-brand-pink: #ef476f;\n\n$color-blue: $color-brand-blue;\n",".lifterlms, // Settings & Course Builder.\n.llms-metabox, // Some Metaboxes.\n.llms-mb-container, // Other Metaboxes.\n.llms-quiz-wrapper { // Quiz results.\n\n\t[data-tip],\n\t[data-title-default],\n\t[data-title-active] {\n\n\t\t$bgcolor: #444;\n\n\t\tposition: relative;\n\n\t\t&.tip--top-right {\n\t\t\t&:before {\n\t\t\t\tbottom: 100%;\n\t\t\t\tleft: -10px;\n\t\t\t}\n\t\t\t&:hover:before {\n\t\t\t\tbottom: calc( 100% + 6px );\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tborder-top-color: $bgcolor;\n\t\t\t\tleft: 6px;\n\t\t\t\ttop: 0;\n\t\t\t}\n\t\t\t&:hover:after {\n\t\t\t\ttop: -6px;\n\t\t\t}\n\t\t}\n\n\n\t\t&.tip--top-left {\n\t\t\t&:before {\n\t\t\t\tbottom: 100%;\n\t\t\t\tright: -10px;\n\t\t\t}\n\t\t\t&:hover:before {\n\t\t\t\tbottom: calc( 100% + 6px );\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tborder-top-color: $bgcolor;\n\t\t\t\tright: 6px;\n\t\t\t\ttop: 0;\n\t\t\t}\n\t\t\t&:hover:after {\n\t\t\t\ttop: -6px;\n\t\t\t}\n\t\t}\n\n\n\n\t\t&.tip--bottom-left {\n\t\t\t&:before {\n\t\t\t\ttop: 100%;\n\t\t\t\tright: -10px;\n\t\t\t}\n\t\t\t&:hover:before {\n\t\t\t\ttop: calc( 100% + 6px );\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tborder-bottom-color: $bgcolor;\n\t\t\t\tright: 6px;\n\t\t\t\tbottom: 0;\n\t\t\t}\n\t\t\t&:hover:after {\n\t\t\t\tbottom: -6px;\n\t\t\t}\n\t\t}\n\n\t\t&.tip--bottom-right {\n\t\t\t&:before {\n\t\t\t\ttop: 100%;\n\t\t\t\tleft: -10px;\n\t\t\t}\n\t\t\t&:hover:before {\n\t\t\t\ttop: calc( 100% + 6px );\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tborder-bottom-color: $bgcolor;\n\t\t\t\tleft: 6px;\n\t\t\t\tbottom: 0;\n\t\t\t}\n\t\t\t&:hover:after {\n\t\t\t\tbottom: -6px;\n\t\t\t}\n\t\t}\n\n\t\t&:before {\n\t\t\tbackground: $bgcolor;\n\t\t\tborder-radius: 4px;\n\t\t\tcolor: #fff;\n\t\t\tfont-size: 13px;\n\t\t\tline-height: 1.2;\n\t\t\tpadding: 8px;\n\t\t\tmax-width: 300px;\n\t\t\twidth: max-content;\n\t\t}\n\t\t&:after {\n\t\t\tcontent: '';\n\t\t\tborder: 6px solid transparent;\n\t\t\theight: 0;\n\t\t\twidth: 0;\n\t\t}\n\n\t\t&:before,\n\t\t&:after {\n\t\t\topacity: 0;\n\t\t\ttransition: all 0.2s 0.1s ease;\n\t\t\tposition: absolute;\n\t\t\tpointer-events: none;\n\t\t\tvisibility: hidden;\n\t\t}\n\t\t&:hover:before,\n\t\t&:hover:after {\n\t\t\topacity: 1;\n\t\t\ttransition: all 0 0.1s ease;\n\t\t\tvisibility: visible;\n\t\t\tz-index: 99999999;\n\t\t}\n\n\t}\n\n\t[data-tip] {\n\t\t&:before {\n\t\t\tcontent: attr(data-tip);\n\t\t}\n\t}\n\t[data-tip].active {\n\t\t&:before {\n\t\t\tcontent: attr(data-tip-active);\n\t\t}\n\t}\n\n}\n","#adminmenu {\n\n\t.toplevel_page_lifterlms .wp-menu-image img {\n\t\tpadding-top: 6px;\n\t\twidth: 20px;\n\t}\n\n\t.toplevel_page_lifterlms,\n\t.opensub .wp-submenu li.current,\n\t.wp-submenu li.current,\n\t.wp-submenu li.current,\n\t.wp-submenu li.current,\n\ta.wp-has-current-submenu:focus+.wp-submenu li.current {\n\t\ta[href*=\"page=llms-add-ons\"] {\n\t\t\tcolor: $color-brand-orange;\n\t\t}\n\t}\n\n}\n\n\n","/******************************************************************\n\nGrids for Breakpoints\n\n******************************************************************/\n\n// using a mixin since we can't use placeholder selectors\n@mixin grid-col {\n float: left;\n padding-right: 0.75em;\n box-sizing: border-box;\n\n}\n\n// the last column\n.last-col {\n float: right;\n padding-right: 0 !important;\n}\n.last-col:after {\n clear: both;\n}\n\n/*\nMobile Grid Styles\nThese are the widths for the mobile grid.\nThere are four types, but you can add or customize\nthem however you see fit.\n*/\n@media (max-width: 767px) {\n\n .m-all {\n @include grid-col;\n width: 100%;\n padding-right: 0;\n }\n\n .m-1of2 {\n @include grid-col;\n width: 50%;\n }\n\n .m-1of3 {\n @include grid-col;\n width: 33.33%;\n }\n\n .m-2of3 {\n @include grid-col;\n width: 66.66%;\n }\n\n .m-1of4 {\n @include grid-col;\n width: 25%;\n }\n\n .m-3of4 {\n @include grid-col;\n width: 75%;\n }\n\n\t.m-right {\n\t\ttext-align: center;\n\t}\n\t.m-center {\n\t\ttext-align: center;\n\t}\n\t.m-left {\n\t\ttext-align: center;\n\t}\n\n .d-right {\n text-align: right;\n }\n .d-center {\n text-align: center;\n }\n .d-left {\n text-align: left;\n }\n\n} // end mobile styles\n\n\n/* Portrait tablet to landscape */\n@media (min-width: 768px) and (max-width: 1029px) {\n\n .t-all {\n @include grid-col;\n width: 100%;\n padding-right: 0;\n }\n\n .t-1of2 {\n @include grid-col;\n width: 50%;\n }\n\n .t-1of3 {\n @include grid-col;\n width: 33.33%;\n }\n\n .t-2of3 {\n @include grid-col;\n width: 66.66%;\n }\n\n .t-1of4 {\n @include grid-col;\n width: 25%;\n }\n\n .t-3of4 {\n @include grid-col;\n width: 75%;\n }\n\n .t-1of5 {\n @include grid-col;\n width: 20%;\n }\n\n .t-2of5 {\n @include grid-col;\n width: 40%;\n }\n\n .t-3of5 {\n @include grid-col;\n width: 60%;\n }\n\n .t-4of5 {\n @include grid-col;\n width: 80%;\n }\n\n\t.d-right {\n\t\ttext-align: right;\n\t}\n\t.d-center {\n\t\ttext-align: center;\n\t}\n\t.d-left {\n\t\ttext-align: left;\n\t}\n\n} // end tablet\n\n/* Landscape to small desktop */\n@media (min-width: 1030px) {\n\n .d-all {\n @include grid-col;\n width: 100%;\n padding-right: 0;\n }\n\n .d-1of2 {\n @include grid-col;\n width: 50%;\n }\n\n .d-1of3 {\n @include grid-col;\n width: 33.33%;\n }\n\n .d-2of3 {\n @include grid-col;\n width: 66.66%;\n }\n\n .d-1of4 {\n @include grid-col;\n width: 25%;\n }\n\n .d-3of4 {\n @include grid-col;\n width: 75%;\n }\n\n .d-1of5 {\n @include grid-col;\n width: 20%;\n }\n\n .d-2of5 {\n @include grid-col;\n width: 40%;\n }\n\n .d-3of5 {\n @include grid-col;\n width: 60%;\n }\n\n .d-4of5 {\n @include grid-col;\n width: 80%;\n }\n\n .d-1of6 {\n @include grid-col;\n width: 16.6666666667%;\n }\n\n .d-1of7 {\n @include grid-col;\n width: 14.2857142857%;\n }\n\n .d-2of7 {\n @include grid-col;\n width: 28.5714286%;\n }\n\n .d-3of7 {\n @include grid-col;\n width: 42.8571429%;\n }\n\n .d-4of7 {\n @include grid-col;\n width: 57.1428572%;\n }\n\n .d-5of7 {\n @include grid-col;\n width: 71.4285715%;\n }\n\n .d-6of7 {\n @include grid-col;\n width: 85.7142857%;\n }\n\n .d-1of8 {\n @include grid-col;\n width: 12.5%;\n }\n\n .d-1of9 {\n @include grid-col;\n width: 11.1111111111%;\n }\n\n .d-1of10 {\n @include grid-col;\n width: 10%;\n }\n\n .d-1of11 {\n @include grid-col;\n width: 9.09090909091%;\n }\n\n .d-1of12 {\n @include grid-col;\n width: 8.33%;\n }\n\n\t.d-right {\n\t\ttext-align: right;\n\t}\n\t.d-center {\n\t\ttext-align: center;\n\t}\n\t.d-left {\n\t\ttext-align: left;\n\t}\n\n} // end desktop styles\n","/******************************************************************\n\nForm Styles\n\n******************************************************************/\n\n// lifterlms form wrapper\n#llms-form-wrapper {\n\n\t// setup defaults\n\tinput[type=\"text\"],\n\tinput[type=\"password\"],\n\tinput[type=\"datetime\"],\n\tinput[type=\"datetime-local\"],\n\tinput[type=\"date\"],\n\tinput[type=\"month\"],\n\tinput[type=\"time\"],\n\tinput[type=\"week\"],\n\tinput[type=\"number\"],\n\tinput[type=\"email\"],\n\tinput[type=\"url\"],\n\tinput[type=\"search\"],\n\tinput[type=\"tel\"],\n\tinput[type=\"color\"],\n\tinput[type=\"checkbox\"],\n\tselect,\n\ttextarea,\n\t.llms-field {\n\n\t\t// a focused input (or hovered on)\n\t\t&:focus,\n\t\t&:active {\n\n\t\t} // end hover or focus\n\t}\n\n\t// sub wrapper for search filter form (analytics)\n\t.llms-search-form-wrapper {\n\t\tborder-bottom: 1px solid $color-grey;\n\t\tmargin: 20px 0;\n\n\t}\n\n\n\t#llms_analytics_search {\n\t\tborder:none !important;\n\t\ttext-shadow: none !important;\n\t\tborder: none !important;\n\t\toutline: none !important;\n\t\tbox-shadow: none !important;\n\t\tmargin: 0 !important;\n\t\tcolor: $color-white !important;\n\t\tbackground: $color-blue !important;\n\t\tborder-radius: 0;\n\t\ttransition: .5s;\n\n\t\t&:hover {\n\t\t\tbackground: $color-darkblue !important;\n\n\t\t}&:active {\n\t\t\tbackground: $color-lightblue !important;\n\t\t}\n\t}\n\n} // end input defaults\n\n\n#llms-skip-setup-form {\n\t.llms-admin-link {\n\t\tbackground:none!important;\n\t\tborder:none;\n\t\tpadding:0!important;\n\t\tcolor:#0074a2;\n\t\tcursor:pointer;\n\t\t&:hover {\n\t\t\tcolor:#2ea2cc\n\t\t}&:focus{\n\t\t\tcolor:#124964;\n\t\t}\n\n\t}\n\n}\n\n/**\n * Toggle Switch ( replaces checkbox on admin panels )\n */\n.llms-switch {\n\tposition: relative;\n\n\t.llms-toggle {\n\t\tposition: absolute;\n\t\tmargin-left: -9999px;\n\t\tvisibility: hidden;\n\t}\n\n\t.llms-toggle + label {\n\t\tbox-sizing: border-box;\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tcursor: pointer;\n\t\toutline: none;\n\t\tuser-select: none;\n\t}\n\n\tinput.llms-toggle-round + label {\n\t\tborder: 2px solid #6c7781;\n\t\tborder-radius: 10px;\n\t\theight: 20px;\n\t\twidth: 36px;\n\t}\n\tinput.llms-toggle-round + label:before,\n\tinput.llms-toggle-round + label:after {\n\t\tbox-sizing: border-box;\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttransition: background 0.4s;\n\t}\n\n\tinput.llms-toggle-round:checked + label {\n\t\tborder-color: #11a0d2;\n\t \tbackground-color: #11a0d2;\n\t}\n\n\t// Primary dot (that moves.)\n\tinput.llms-toggle-round + label:after {\n\t\theight: 12px;\n\t\tleft: 2px;\n\t\ttop: 2px;\n\t\tbackground-color: #6c7781;\n\t\tborder-radius: 50%;\n\t\ttransition: margin 0.4s;\n\t\twidth: 12px;\n\t\tz-index: 3;\n\t}\n\n\t// Primary dot when toggle on.\n\tinput.llms-toggle-round:checked + label:after {\n\t\tbackground-color: $color-white;\n\t\tmargin-left: 16px;\n\t}\n\n\t// Secondary dot: empty on the right side of the toggle when toggled off.\n\tinput.llms-toggle-round + label:before {\n\t\theight: 8px;\n\t\ttop: 4px;\n\t\tborder: 1px solid #6c7781;\n\t\tborder-radius: 50%;\n\t\tright: 4px;\n\t\twidth: 8px;\n\t\tz-index: 2;\n\t}\n\n\tinput.llms-toggle-round:checked + label:before {\n\t\tborder-color: $color-white;\n\t\tborder-radius: 0;\n\t\tleft: 6px;\n\t\tright: auto;\n\t\twidth: 2px;\n\t}\n\n}\n\n#llms-profile-fields {\n\tmargin: 50px 0;\n\t.llms-form-field {\n\t\tpadding-left: 0;\n\t}\n\tlabel {\n\t\tdisplay: block;\n\t\tfont-weight: bold;\n\t\tpadding: 8px 0 2px;\n\t}\n\t.type-checkbox .type-checkbox {\n\t\tlabel {\n\t\t\tdisplay: initial;\n\t\t\tfont-weight: initial;\n\t\t\tpadding: 0;\n\t\t}\n\t\tinput {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-bottom: 0;\n\t\t\twidth: 1rem;\n\t\t}\n\t}\n\tselect {\n\t\tmax-width: 100%;\n\t}\n}\n","a.llms-voucher-delete {\n\tbackground: $color-danger;\n\tcolor: $color-white;\n\tdisplay: block;\n\tpadding: 4px 2px;\n\ttext-decoration: none;\n\ttransition: ease .3s all;\n\n\t&:hover {\n\t\tbackground: #af3a26;\n\t}\n}\n\n\n\n.llms-voucher-codes-wrapper,\n.llms-voucher-redemption-wrapper {\n\n table {\n width: 100%;\n border-collapse: collapse;\n\n th, td {\n border: none;\n }\n\n thead {\n background-color: $color-blue;\n color:#fff;\n th {\n padding: 10px 10px;\n }\n }\n\n tr {\n counter-increment: row-counter;\n &:nth-child(even) {\n background-color: #F1F1F1;\n }\n\n td {\n padding: 5px;\n &:first-child:before {\n content: counter( row-counter );\n }\n }\n }\n }\n}\n\n.llms-voucher-codes-wrapper {\n\n table {\n width: 100%;\n border-collapse: collapse;\n\n th, td {\n border: none;\n }\n\n thead {\n background-color: $color-blue;\n color:#fff;\n }\n\n tr {\n &:nth-child(even) {\n background-color: #F1F1F1;\n }\n\n td {\n\n span {\n display: inline-block;\n min-width: 30px;\n }\n }\n }\n }\n\n button {\n cursor: pointer;\n }\n\n .llms-voucher-delete {\n float: right;\n margin-right: 15px;\n }\n\n .llms-voucher-uses {\n width: 50px;\n }\n\n .llms-voucher-add-codes {\n float: right;\n\n input[type=\"text\"] {\n width: 30px;\n }\n }\n}\n\n.llms-voucher-export-wrapper {\n\n .llms-voucher-export-type {\n width: 100%;\n\n p {\n margin: 0 0 0 15px;\n }\n }\n\n .llms-voucher-email-wrapper {\n width: 100%;\n margin: 25px 0;\n\n input[type=\"text\"] {\n width: 100%;\n }\n\n p {\n margin: 0;\n }\n }\n\n > button {\n float: right;\n }\n}\n\n.postbox .inside {\n overflow: auto;\n}\n",".llms-widget {\n\tbackground-color: #FFF;\n\tborder: 1px solid #dedede;\n\tborder-radius: 12px;\n\tbox-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n\tbox-sizing: border-box;\n\tmargin-bottom: 20px;\n\tpadding: 20px;\n\tposition: relative;\n\twidth: 100%;\n\n\t&.alt {\n\n\t\tborder: 1px solid $color-lightgrey;\n\t\tbackground-color: #efefef;\n\t\tmargin-bottom: 10px;\n\n\t\t.llms-label {\n\t\t\tcolor: #777;\n\t\t\tfont-size: 14px;\n\t\t\tmargin-bottom: 10px;\n\t\t\tpadding-bottom: 5px;\n\t\t}\n\n\t\th2 {\n\t\t\tcolor: #444;\n\t\t\tfont-weight: 300;\n\t\t}\n\n\t}\n\n\ta {\n\t\tborder-bottom: 1px dotted $color-brand-blue;\n\t\tdisplay: inline-block;\n\t\ttext-decoration: none;\n\n\t\t&:hover {\n\t\t\tborder-bottom: 1px dotted $color-brand-blue-dark;\n\t\t}\n\t}\n\n\t// Nested for specificity (matches h1).\n\t.llms-widget-content {\n\t\tmargin: .67em 0;\n\t\tcolor: $color-brand-blue;\n\t\tfont-size: 2.4em;\n\t\tfont-weight: 700;\n\t\tline-height: 1;\n\t\tword-break: break-all;\n\t}\n\n\th2 {\n\t\tfont-size: 1.8em;\n\t}\n\n\t.llms-label {\n\t\tbox-sizing: border-box;\n\t\tfont-size: 18px;\n\t\tfont-weight: 400;\n\t\tmargin: 0 0 10px 0;\n\t\ttext-align: center;\n\t}\n\n\t.llms-chart {\n\t\twidth: 100%;\n\t\tpadding: 10px;\n\t\tbox-sizing: border-box;\n\t}\n\n\tmark.yes {\n\t\tbackground-color: #7ad03a;\n\t}\n\n\t.llms-subtitle {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.spinner {\n\t\tfloat: none;\n\t\tleft: 50%;\n\t\tmargin: -10px 0 0 -10px;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tz-index: 2;\n\t}\n\n\t&.is-loading {\n\n\t\t&:before {\n\t\t\tbackground: $color-white;\n\t\t\tbottom: 0;\n\t\t\tcontent: '';\n\t\t\tleft: 0;\n\t\t\topacity: 0.9;\n\t\t\tposition: absolute;\n\t\t\tright: 0;\n\t\t\ttop: 0;\n\t\t\tz-index: 1;\n\t\t}\n\n\t\t.spinner {\n\t\t\tvisibility: visible;\n\t\t}\n\n\t}\n\n\ttd[colspan=\"2\"] {\n\t\tpadding-left: 0;\n\t}\n\n\ttr.llms-disabled-field {\n\t\topacity: 0.5;\n\t\tpointer-events: none;\n\t}\n\n}\n\n.llms-widget-1-3,\n.llms-widget-1-4,\n.llms-widget-1-5 {\n\ttext-align: center;\n}\n\n\n.llms-widget {\n\t.llms-widget-info-toggle {\n\t\tcolor: #AAA;\n\t\tcursor: pointer;\n\t\tfont-size: 16px;\n\t\tposition: absolute;\n\t\tright: 20px;\n\t\ttop: 20px;\n\t}\n\n\t&.info-showing {\n\t\t.llms-widget-info {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n}\n.llms-widget-info {\n\tbackground: $color-cinder;\n\tcolor: $color-white;\n\tbottom: -50px;\n\tdisplay: none;\n\tpadding: 15px;\n\tposition: absolute;\n\ttext-align: center;\n\tleft: 10px;\n\tright: 15px;\n\tz-index: 3;\n\t&:before {\n\t\tcontent: '';\n\t\tborder: 12px solid transparent;\n\t\tborder-bottom-color: $color-cinder;\n\t\tleft: 50%;\n\t\tmargin-left: -12px;\n\t\tposition: absolute;\n\t\ttop: -24px;\n\t}\n\n\tp {\n\t\tmargin: 0;\n\t}\n\n}\n\n.llms-widget-row {\n\t@include clearfix();\n}\n\n.llms-widget-row .no-padding {\n\tpadding: 0 !important;\n}\n","\n@mixin clearfix() {\n\t&:before,\n\t&:after {\n\t content: \" \";\n\t display: table;\n\t}\n\t&:after {\n\t clear: both;\n\t}\n}\n\n//\n// Positioning mixin\n//\n// @param [string] $position: position\n// @param [list] $args (()): offsets list\n//\n// @source http://hugogiraudel.com/2013/08/05/offsets-sass-mixin/\n//\n@mixin position($position, $args: ()) {\n\t$offsets: top right bottom left;\n\tposition: $position;\n\n\t@each $offset in $offsets {\n\t\t$index: index($args, $offset);\n\n\t\t@if $index {\n\t\t\t@if $index == length($args) {\n\t\t\t\t#{$offset}: 0;\n\t\t\t}\n\t\t\t@else {\n\t\t\t\t$next: nth($args, $index + 1);\n\t\t\t\t@if is-valid-length($next) {\n\t\t\t\t\t#{$offset}: $next;\n\t\t\t\t}\n\t\t\t\t@else if index($offsets, $next) {\n\t\t\t\t\t#{$offset}: 0;\n\t\t\t\t}\n\t\t\t\t@else {\n\t\t\t\t\t@warn \"Invalid value `#{$next}` for offset `#{$offset}`.\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Function checking if $value is a valid length\n// @param [literal] $value: value to test\n// @return [bool]\n//\n@function is-valid-length($value) {\n\t$r: (type-of($value) == \"number\" and not unitless($value)) or (index(auto initial inherit 0, $value) != null);\n\t@return $r;\n}\n\n//\n// Shorthands\n//\n@mixin absolute($args: ()) {\n\t@include position(absolute, $args);\n}\n\n@mixin fixed($args: ()) {\n\t@include position(fixed, $args);\n}\n\n@mixin relative($args: ()) {\n\t@include position(relative, $args);\n}\n\n\n\n@mixin order_status_badges() {\n\n\t.llms-status {\n\t\tborder-radius: $radius-small;\n\t\tdisplay: inline-block;\n\t\tfont-size: 13px;\n\t\tfont-weight: 700;\n\t\tline-height: 1.4;\n\t\tpadding: 2px 6px;\n\t\tvertical-align: middle;\n\n\t\t&.llms-size--large {\n\t\t\tfont-size: 105%;\n\t\t\tpadding: 6px 12px;\n\t\t}\n\n\t\t&.llms-active,\n\t\t&.llms-completed,\n\t\t&.llms-pass, // quiz\n\t\t&.llms-txn-succeeded {\n\t\t\tcolor: $color-green;\n\t\t\tbackground-color: rgba( $color-green, .15 );\n\t\t}\n\n\t\t&.llms-fail, // quiz\n\t\t&.llms-failed,\n\t\t&.llms-expired,\n\t\t&.llms-cancelled,\n\t\t&.llms-txn-failed {\n\t\t\tcolor: $color-red;\n\t\t\tbackground-color: rgba( $color-red, .15 );\n\t\t}\n\n\t\t&.llms-incomplete, // assignment\n\t\t&.llms-on-hold,\n\t\t&.llms-pending,\n\t\t&.llms-pending-cancel,\n\t\t&.llms-refunded,\n\t\t&.llms-txn-pending,\n\t\t&.llms-txn-refunded {\n\t\t\tcolor: $color-orange;\n\t\t\tbackground-color: rgba( $color-orange, .15 );\n\t\t}\n\n\t}\n\n}\n","/******************************************************************\n\nSVG Styles\n\n******************************************************************/\n\nsvg {\n &.icon {\n height: 24px;\n width: 24px;\n display: inline-block;\n fill: currentColor; // Inherit color\n vertical-align: baseline; // Options: baseline, sub, super, text-top, text-bottom, middle, top, bottom\n\n // Different styling for when an icon appears in a button element\n button & {\n height: 18px;\n width: 18px;\n margin: 4px -4px 0 4px;\n filter: drop-shadow( 0 1px #eee );\n float: right;\n \n }&.menu-icon {\n height: 20px;\n width: 20px;\n display: inline-block;\n fill: currentColor;\n vertical-align: text-bottom;\n margin-right: 10px;\n \n }&.tree-icon {\n height: 13px;\n width: 13px;\n vertical-align: middle;\n \n }&.section-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n \n }&.button-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n \n }&.button-icon-attr {\n height: 10px;\n width: 10px;\n vertical-align: middle;\n \n }&.list-icon {\n height: 12px;\n width: 12px;\n vertical-align: middle;\n \n &.on {\n color: $color-blue;\n\n }&.off {\n color: $color-cinder;\n }\n \n }&.detail-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n cursor:default;\n \n &.on {\n color: $color-blue;\n\n }&.off {\n color: $color-lightgrey;\n }\n }\n\n }\n\n &.icon-ion {}\n\n &.icon-ion-edit {}\n\n // rotate for arrow tips\n &.icon-ion-arrow-up {\n transform: rotate(90deg);\n }\n\n use {\n pointer-events: none;\n }\n\n}","/******************************************************************\n\nMetabox Tabs\n\n******************************************************************/\n\n// free space up if the metabox is on the side\n#side-sortables .tab-content {\n\tpadding: 0;\n}\n\n.llms-mb-container .tab-content{\n display: none;\n background-color: #FFF;\n padding: 0 20px;\n \n ul:not(.select2-selection__rendered) {\n margin: 0 0 15px 0;\n\n > li {\n padding: 20px 0;\n margin: 0;\n\n &.select:not([class*=\"d-\"]) {\n \twidth: 100%;\n }\n\n &:last-child {\n border: 0;\n padding-bottom: 0;\n\n }\n\n &.top {\n border-bottom: 0;\n padding-bottom: 0;\n }\n\n }\n }\n\n .full-width { width: 100%; }\n\n #wp-content-editor-tools {\n background: none;\n }\n\n}\n\n.llms-mb-container .tab-content.llms-active{\n display: inherit;\n}\n\n\n.llms-mb-container .tab-content .no-border {\n border-bottom: 0px;\n}\n","/******************************************************************\n\nStyles for topModal modal\n\n******************************************************************/\n\n/**\n * Base modal styles\n */\n.topModal {\n display:none;\n position:relative;\n border:4px solid #808080;\n background:#fff;\n z-index:1000001;\n padding:2px;\n max-width:500px;\n margin: 34px auto 0;\n box-sizing: border-box;\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-color: #ffffff;\n border-radius: 2px;\n border: 1px solid #dddddd;\n\n}.topModalClose {\n float:right;\n cursor:pointer;\n margin-right: 10px;\n margin-top: 10px;\n\n}.topModalContainer {\n display: none;\n overflow: auto;\n overflow-y: hidden;\n position: fixed;\n top: 0 !important;\n right: 0;\n bottom: 0;\n left: 0;\n -webkit-overflow-scrolling: touch;\n width: auto !important;\n margin-left: 0 !important;\n background-color: transparent !important;\n z-index: 100002 !important;\n\n}.topModalBackground {\n display:none;\n background:#000;\n position:fixed;\n height:100%;\n width:100%;\n top:0 !important;\n left:0;\n margin-left: 0 !important;\n z-index: 100002 !important;\n box-sizing: border-box;\n overflow: auto;\n overflow-y: hidden;\n\n}body.modal-open {\n overflow: hidden;\n\n}.llms-modal-header {\n border-top-right-radius: 1px;\n border-top-left-radius: 1px;\n background: $color-blue;\n color: #eeeeee;\n padding: 10px 15px;\n font-size: 18px;\n\n}#llms-icon-modal-close {\n width:16px;\n height: 16px;\n fill: $color-white;\n\n}.llms-modal-content {\n padding: 20px;\n\n h3 {\n margin-top: 0;\n }\n\n}\n\n/**\n * Custom Modal Styles for LifterLMS\n */\n.llms-modal-form {\n\n h1 {\n margin-top: 0;\n }\n\n input[type=text] {\n width: 100%;\n }\n\n textarea,\n input[type=\"text\"],\n input[type=\"password\"],\n input[type=\"file\"],\n input[type=\"datetime\"],\n input[type=\"datetime-local\"],\n input[type=\"date\"],\n input[type=\"month\"],\n input[type=\"time\"],\n input[type=\"week\"],\n input[type=\"number\"],\n input[type=\"email\"],\n input[type=\"url\"],\n input[type=\"search\"],\n input[type=\"tel\"],\n input[type=\"color\"] {\n padding: 0 .4em 0 .4em;\n margin-bottom: 2em;\n vertical-align: middle;\n border-radius: 3px;\n min-width: 50px;\n max-width: 635px;\n width: 100%;\n min-height: 32px;\n background-color: #fff;\n border: 1px solid $color-lightgrey;\n margin: 0 0 24px 0;\n outline: none;\n transition: border 0.3s ease-in-out 0s;\n\n &:focus {\n background: $color-white;\n border: 1px solid $color-blue;\n\n }\n }\n\n textarea {\n padding: .4em !important;\n height: 100px !important;\n border-radius: 3px;\n vertical-align: middle;\n min-height: 32px;\n outline: none;\n box-sizing: border-box;\n\n &:focus {\n background: $color-white;\n border: 1px solid $color-blue;\n\n }\n\n }\n\n .chosen-container-single .chosen-single {\n border-radius: 3px;\n vertical-align: middle;\n min-height: 32px;\n border: 1px solid $color-lightgrey;\n width: 100%;\n background: $color-white !important;\n outline: none;\n box-sizing: border-box;\n box-shadow: 0 0 0 #fff;\n line-height: 32px;\n margin: 0 0 24px 0;\n\n &:focus {\n background: $color-white;\n border: 1px solid $color-blue;\n }\n }\n\n .chosen-container-single .chosen-single div b {\n margin-top: 4px;\n }\n\n .chosen-search input[type=text] {\n border: 1px solid $color-lightgrey;\n\n &:focus {\n background-color: $color-white;\n border: 1px solid $color-blue;\n }\n\n }\n\n .chosen-container-single .chosen-drop {\n margin-top: -28px;\n }\n\n .llms-button-primary, .llms-button-secondary {\n padding: 10px 10px;\n border-radius: 0;\n transition: .5s;\n box-shadow: 0 1px 1px #ccc;\n\n &.full {\n width: 100%;\n }\n }\n}\n\n.modal-open .select2-dropdown {\n z-index: 1000005;\n}\n",".button.llms-merge-code-button {\n\tvertical-align: middle;\n\tsvg {\n\t\tmargin-right: 2px;\n\t\tposition: relative;\n\t\ttop: 4px;\n\t\twidth: 16px;\n\t\tg {\n\t\t\tfill: currentColor;\n\t\t}\n\t}\n}\n\n.llms-mb-container {\n\t.llms-merge-code-wrapper {\n\t\tfloat: right;\n\t\ttop: -5px;\n\t}\n}\n\n.llms-merge-code-wrapper {\n\tdisplay: inline;\n\tposition: relative;\n}\n\n.llms-merge-codes {\n background: #f7f7f7;\n\tborder: 1px solid #ccc;\n\tborder-radius: 3px;\n box-shadow: 0 1px 0 #ccc;\n color: #555;\n\tdisplay: none;\n\tleft: 1px;\n\toverflow: hidden;\n\tposition: absolute;\n\ttop: 30px;\n\twidth: 200px;\n\n\tul {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\tli {\n\t\tcursor: pointer;\n\t\tmargin: 0;\n\t\tpadding: 4px 8px !important;\n\t\tborder-bottom: 1px solid #ccc;\n\t}\n\n\tli:hover {\n\t\tcolor: #23282d;\n\t\tbackground: #fefefe;\n\t}\n\n\t&.active {\n\t\tdisplay: block;\n\t\tz-index: 777;\n\t}\n\n}\n","/******************************************************************\n\nBase Mobile\n\n******************************************************************/\n\n.llms-nav-tab,\n.llms-nav-tab-filters {\n\tdisplay: block;\n\twidth: 100%;\n}\n\nform.llms-nav-tab-filters.full-width {\n\twidth: 100%;\n\n\tlabel {\n\t\tdisplay: inline-block;\n\t\twidth: 10%;\n\t\ttext-align: left;\n\t}\n\n\t.select2-container {\n\t\twidth: 85% !important;\n\t}\n}\n\n.llms-nav-tab-settings {\n\tdisplay: block;\n\twidth: 100%;\n}\n\n//select box form wrapper\n#llms-form-wrapper {\n\t.llms-select {\n\t\twidth: 100%;\n\t\tmargin-bottom: 20px;\n\n\t}.llms-checkbox {\n\t\tdisplay: inline-block;\n\t\twidth: 100%;\n\t\ttext-align: left;\n\n\t}.llms-filter-options {\n\t\twidth: 100%;\n\t\t//margin-bottom: 20px;\n\n\t}.llms-date-select {\n\t\twidth: 100%;\n\t\tdisplay: inline-block;\n\t\tmargin-bottom: 20px;\n\t\tinput[type=\"text\"] {\n\t\t\twidth: 100%;\n\t\t}\n\n\t}.llms-search-button {\n\t\t//display: inline-block;\n\t\t//width: 30%;\n\t\t#llms-search-button {\n\n\t\t//float: right;\n\t}\n\n\t}\n\n}\n\n// .llms-widget-full {\n// \t&.top {\n// \t\tmargin-top: 20px;\n// \t}\n// }\n// .llms-widget {\n// \t.form-table td {\n// \t\tpadding: 15px 0;\n// \t\tul { margin: 5px 0 0; }\n\n\n// \t\t.conditional-field {\n// \t\t\tdisplay: none;\n// \t\t\tmargin-left: 25px;\n// \t\t}\n// \t\t.conditional-radio:checked ~ .conditional-field {\n// \t\t\tdisplay: block;\n// \t\t}\n\n\n// \t}\n// }\n\nul.tabs li{\n display: block;\n }\n\n","//\n// Main Admin CSS File\n//\n\n@import \"_includes/vars\";\n@import \"_includes/vars-brand-colors\";\n\n@import \"_includes/extends\";\n@import \"_includes/buttons\";\n@import \"_includes/mixins\";\n\n@import \"_includes/tooltip\";\n\n// wp menu item\n@import \"admin/_wp-menu\";\n\n// grid layout for breakpoints\n@import \"admin/partials/grid\";\n\n// forms\n@import \"admin/modules/forms\";\n\n// voucher\n@import \"admin/modules/voucher\";\n\n// widgets\n@import \"admin/modules/widgets\";\n\n// icons\n@import \"admin/modules/icons\";\n\n// icons\n@import \"admin/modules/mb-tabs\";\n\n// icons\n@import \"admin/modules/top-modal\";\n\n@import \"admin/modules/merge-codes\";\n\n// Base (mobile)\n@import \"admin/breakpoints/base\";\n\n// Larger mobile devices\n@media only screen and (min-width: 481px) {\n\t@import \"admin/breakpoints/481up\";\n}\n\n// Tablets and smaller laptops\n@media only screen and (min-width: 768px) {\n\t@import \"admin/breakpoints/768up\";\n}\n\n// Desktops\n@media only screen and (min-width: 1030px) {\n\t@import \"admin/breakpoints/1030up\";\n}\n\n// Larger Monitors and TVs\n@media only screen and (min-width: 1240px) {\n\t@import \"admin/breakpoints/1240up\";\n}\n\n@import \"admin/main\";\n\n@import \"admin/llms-table\";\n@import \"admin/modules/llms-order-note\";\n\n// metabox related\n@import \"admin/metaboxes/llms-metabox\";\n@import \"admin/metaboxes/metabox-instructors\";\n@import \"admin/metaboxes/metabox-orders\";\n@import \"admin/metaboxes/metabox-engagements-type\";\n@import \"admin/metaboxes/metabox-product\";\n@import \"admin/metaboxes/metabox-students\";\n@import \"admin/metaboxes/metabox-field-repeater\";\n@import \"admin/metaboxes/builder-launcher\";\n\n@import \"admin/post-tables/llms_orders\";\n@import \"admin/post-tables/post-tables\";\n\n@import \"admin/tabs\";\n@import \"admin/fonts\";\n@import \"admin/reporting\";\n\n@import \"admin/settings\";\n\n@import \"admin/dashboard\";\n@import \"admin/dashboard-widget\";\n@import \"admin/resources\";\n\n@import \"admin/quiz-attempt-review\";\n\n@import \"_includes/llms-form-field\";\n@import \"_includes/vendor/_font-awesome\";\n","/******************************************************************\n\nLarger Phones\n\n******************************************************************/\n\n//select box form wrapper\n#llms-form-wrapper {\n\t\n\t.llms-checkbox {\n\t\twidth: 33%;\n\t\t//text-align: center;\n\t\t\t\n\t}\n}\n","/******************************************************************\n\nTablets and small computers\n\n******************************************************************/\n\nul.tabs li{\n display: inline-block;\n }\n\n//option page tab menu\n.llms-nav-tab {\n\tdisplay: inline-block;\n\twidth: 33%;\n}\n.llms-nav-tab-settings {\n\tdisplay: inline-block;\n\twidth: 25%;\n}\n\n//select box form wrapper\n#llms-form-wrapper {\n\t.llms-select {\n\t\twidth: 50%;\n\t\tmax-width: 500px;\n\n\t}.llms-filter-options {\n\t\twidth: 50%;\n\t\t//display: inline-block;\n\t\tmax-width: 500px;\n\n\t}.llms-date-select {\n\t\twidth: 47.5%;\n\n\t\t&:first-child {\n\t\t\tmargin-right: 5%\n\t\t}\n\n\t}\n}\n\n.llms-widget {\n\tinput[type=\"text\"],\n\tinput[type=\"password\"],\n\tinput[type=\"datetime\"],\n\tinput[type=\"datetime-local\"],\n\tinput[type=\"date\"],\n\tinput[type=\"month\"],\n\tinput[type=\"time\"],\n\tinput[type=\"week\"],\n\tinput[type=\"number\"],\n\tinput[type=\"email\"],\n\tinput[type=\"url\"],\n\tinput[type=\"search\"],\n\tinput[type=\"tel\"],\n\tinput[type=\"color\"],\n\tselect,\n\ttextarea, {\n\t\twidth: 50%;\n\n\t\t&.medium { width: 30%; }\n\t\t&.small { width: 20%; }\n\t\t&.tiny { width: 10%; }\n\t}\n\n\t// .form-table th {\n\t// \twidth: 140px;\n\t// }\n\n}\n\n\n\n","/******************************************************************\n\nDesktop Stylesheet\n\n******************************************************************/\n\n//option page tab menu\n.llms-nav-tab {\n\tdisplay: inline-block;\n\twidth: 33.333%;\n}\n.llms-nav-tab-settings {\n\tdisplay: inline-block;\n\twidth: 25%;\n}\n\n//select box form wrapper\n#llms-form-wrapper {\n\t.llms-select {\n\t\tdisplay: inline-block;\n\t\twidth: 47.5%;\n\t\t&:first-child {\n\t\t\tmargin-right: 5%;\n\t\t}\n\n\t}.llms-filter-options {\n\t\tdisplay: inline-block;\n\t\twidth: 47.5%;\n\n\t\t&.date-filter {\n\t\t\tmargin-right: 5%;\n\t\t}.llms-date-select {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t}.llms-date-select {\n\t\twidth: 47.5%;\n\n\t\t&:first-child {\n\t\t\tmargin-right: 5%\n\t\t}\n\n\t}\n}\n\n.llms-widget-row {\n\t@include clearfix;\n\t.llms-widget-1-5 {\n\t\tvertical-align: top;\n\t\twidth: 20%;\n\t\tfloat: left;\n\t\tbox-sizing: border-box;\n\t\tpadding: 0 5px;\n\t}\n\t.llms-widget-1-4 {\n\t\tvertical-align: top;\n\t\twidth: 25%;\n\t\tfloat: left;\n\t\tbox-sizing: border-box;\n\t\tpadding: 0 5px;\n\t}\n\t.llms-widget-1-3 {\n\t\twidth: 33.3%;\n\t\tfloat: left;\n\t\tbox-sizing: border-box;\n\t\tpadding: 0 5px;\n\t}\n\t.llms-widget-1-2 {\n\t\twidth: 50%;\n\t\tfloat: left;\n\t\tbox-sizing: border-box;\n\t\tpadding: 0 5px;\n\t\tvertical-align: top;\n\t}\n\n}\n","/******************************************************************\n\nlarge Monitor Stylesheet\n\n******************************************************************/\n\n.llms-nav-tab-filters,\n.llms-nav-tab-settings {\n\tfloat: left;\n\twidth: 12.5%;\n}\n",".wrap.lifterlms {\n\tmargin-top: 0;\n}\n\n.llms-header {\n\tbackground-color: #FFF;\n\tmargin: 0 0 0 -20px;\n\tpadding: 20px 10px;\n\tposition: relative;\n\tz-index: 1;\n\n\t.llms-inside-wrap {\n\t\tdisplay: flex;\n\t\tpadding: 0 10px;\n\t}\n\n\n\t.lifterlms-logo {\n\t\tflex: 0 0 190px;\n\t\tmax-height: 52px;\n\t\tmargin-right: 10px;\n\t}\n\n\t.llms-meta {\n\t\talign-self: center;\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\tfont-size: 16px;\n\t\tjustify-content: space-between;\n\t\tline-height: 1.5;\n\n\t\t.llms-version {\n\t\t\tbackground-color: #1d2327;\n\t\t\tcolor: #FFF;\n\t\t\tborder-radius: 999px;\n\t\t\tfont-size: 13px;\n\t\t\tfont-weight: 700;\n\t\t\tpadding: 6px 12px;\n\t\t}\n\n\t\ta {\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\t.llms-license {\n\t\t\tborder-right: 1px solid #CCC;\n\t\t\tfont-weight: 700;\n\t\t\tmargin-right: 12px;\n\t\t\tpadding-right: 12px;\n\n\t\t\ta {\n\t\t\t\ttext-decoration: none;\n\n\t\t\t\t&:before {\n\t\t\t\t\tcontent: \"\\f534\";\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tfont: 400 16px/1 dashicons;\n\t\t\t\t\tleft: 0;\n\t\t\t\t\tpadding-right: 3px;\n\t\t\t\t\tposition: relative;\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\tvertical-align: text-bottom;\n\t\t\t\t}\n\n\t\t\t\t&.llms-license-none {\n\t\t\t\t\tcolor: #888;\n\n\t\t\t\t\t&:before {\n\t\t\t\t\t\tcontent: \"\\f335\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&.llms-license-active {\n\t\t\t\t\tcolor: #008a20;\n\n\t\t\t\t\t&:before {\n\t\t\t\t\t\tcontent: \"\\f112\";\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\t.llms-support {\n\t\t\tfont-weight: 700;\n\n\t\t\ta {\n\t\t\t\tcolor: #1d2327;\n\t\t\t\ttext-decoration: none;\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n.llms-subheader {\n\talign-items: center;\n\tbackground-color: #FFF;\n\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, 0.15 );\n\tdisplay: flex;\n\tflex-direction: row;\n\tmargin-left: -20px;\n\tpadding: 10px 20px;\n\twidth: 100%;\n\tz-index: 1;\n\n\th1 {\n\t\tfont-weight: 700;\n\t\tpadding: 0;\n\n\t\ta {\n\t\t\tcolor: inherit;\n\t\t\ttext-decoration: none;\n\t\t}\n\t}\n\n}\n\n#post_course_difficulty {\n\tmin-width: 200px;\n}\n#_video-embed, #_audio-embed {\n\twidth: 100%;\n}\n\nhr {\n\tbackground-color: #CCC;\n\tborder: none;\n\theight: 1px;\n\tmargin: 30px 0;\n\tpadding: 0;\n}\n\n.llms_certificate_default_image, .llms_certificate_image {\n\twidth: 300px;\n}\n\n.llms_achievement_default_image, .llms_achievement_image {\n\twidth: 120px;\n}\n\ndiv[id^=\"lifterlms-\"] .inside {\n\toverflow: visible;\n}\n\n.notice.llms-admin-notice {\n\tbackground-color: #FFF;\n\tborder: 1px solid #ccd0d4;\n\tbox-shadow: 0 1px 4px rgba( 0, 0, 0, 0.15 );\n\tdisplay: flex;\n\tpadding: 0 !important;\n\tposition: relative;\n\n\t.notice-dismiss {\n\t\ttext-decoration: none;\n\t}\n\n\t&.notice-warning {\n\t\tborder-left: 4px solid #F8954F;\n\n\t\t.llms-admin-notice-icon {\n\t\t\tbackground-color: #FEF4ED;\n\t\t}\n\t}\n\n\t&.notice-info {\n\t\tborder-left: 4px solid #466DD8;\n\n\t\th3 {\n\t\t\tcolor: #466DD8;\n\t\t}\n\n\t\t.llms-admin-notice-icon {\n\t\t\tbackground-color: #EDF0FB;\n\t\t}\n\n\t}\n\n\t&.notice-success {\n\t\tborder-left: 4px solid #18A957;\n\n\t\th3 {\n\t\t\tcolor: #18A957;\n\t\t}\n\n\t\t.llms-admin-notice-icon {\n\t\t\tbackground-color: #E8F6EE;\n\t\t}\n\n\t}\n\n\t&.notice-error {\n\t\tborder-left: 4px solid #DF1642;\n\n\t\th3 {\n\t\t\tcolor: #9C0F2E;\n\t\t}\n\n\t\t.llms-admin-notice-icon {\n\t\t\tbackground-color: #FCE8EC;\n\t\t}\n\n\t}\n\n\t.llms-admin-notice-icon {\n\t\tbackground-image: url(../../assets/images/lifterlms-icon-color.png);\n\t\tbackground-position: center center;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 30px;\n\t\tmin-width: 70px;\n\n\t}\n\n\t.llms-admin-notice-content {\n\t\tcolor: #111;\n\t\tpadding: 20px;\n\t}\n\n\th3 {\n\t\tfont-size: 18px;\n\t\tfont-weight: 700;\n\t\tline-height: 25px;\n\t\tmargin: 0 0 15px 0;\n\t}\n\n\tbutton,\n\t.llms-button-primary {\n\t\tdisplay: inline-block;\n\t}\n\n\tp {\n\t\tfont-size: 14px;\n\t\tline-height: 22px;\n\t\tmargin: 0 0 15px 0;\n\t\tmax-width: 65em;\n\t\tpadding: 0;\n\t}\n\n\tp:last-of-type {\n\t\tmargin-bottom: 0;\n\t}\n}\n\n.llms-button-action,\n.llms-button-danger,\n.llms-button-primary,\n.llms-button-secondary {\n\t&.small .dashicons {\n\t\tfont-size: 13px;\n\t\theight: 13px;\n\t\twidth: 13px;\n\t}\n\n\t&:hover {\n\t\tbox-shadow: none;\n\t}\n}\n\na.llms-view-as {\n\tline-height: 2;\n\tmargin-right: 8px;\n}\n\n.llms-image-field-preview {\n\tmax-height: 80px;\n\tvertical-align: middle;\n\twidth: auto;\n}\n\n.llms-image-field-remove {\n\t&.hidden { display: none; }\n}\n\n.llms-log-viewer {\n\tbackground: #fff;\n\tborder: 1px solid #e5e5e5;\n\tbox-shadow: 0 1px 1px rgba(0,0,0,.04);\n\tmargin: 20px 0;\n\tpadding: 25px;\n\n\tpre {\n\t\tfont-family: monospace;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\twhite-space: pre-wrap;\n\t}\n}\n\n.llms-status--tools {\n\t.llms-table {\n\t\tbackground: #fff;\n\t\tborder: 1px solid #e5e5e5;\n\t\tbox-shadow: 0 1px 1px rgba(0,0,0,.04);\n\t\ttd, th {\n\t\t\tpadding: 10px;\n\t\t\tvertical-align: top;\n\t\t}\n\t\tth {\n\t\t\twidth: 28%;\n\t\t}\n\t\tp {\n\t\t\tmargin: 0 0 10px;\n\t\t}\n\t}\n}\n\n.llms-error {\n\tcolor: $color-red;\n\tfont-style: italic;\n}\n\n.llms-rating-stars {\n\tcolor: #ffb900;\n\ttext-decoration: none;\n}\n\n@media screen and (max-width: 782px) {\n\t.llms-header {\n\t\ttop: 46px;\n\n\t\t.llms-inside-wrap {\n\t\t\tflex-direction: column;\n\t\t\tgap: 20px;\n\n\t\t\t.lifterlms-logo {\n\t\t\t\talign-self: center;\n\t\t\t\tflex: inherit;\n\t\t\t\tmax-height: initial;\n\t\t\t\tmax-width: 200px;\n\t\t\t}\n\n\t\t\t.llms-meta {\n\t\t\t\tcolumn-gap: 10px;\n\t\t\t}\n\t\t}\n\t}\n}\n",".llms-table-wrap {\n\tposition: relative;\n}\n\n.llms-table-header {\n\tpadding: 0;\n\n\t@include clearfix();\n\n\th2 {\n\t\tfont-size: 20px;\n\t\tpadding: 0;\n\t\tdisplay: inline-block;\n\t\tline-height: 1.5;\n\t\tmargin: 0 0 20px 0;\n\t\tvertical-align: middle;\n\t}\n\n\t.llms-table-search,\n\t.llms-table-filters {\n\t\tfloat: right;\n\t\tpadding-left: 10px;\n\t}\n\n\t.llms-table-search input {\n\t\tmargin: 0;\n\t\tpadding: 0 8px;\n\t}\n\n}\n\n.llms-table {\n\n\tborder: 1px solid #c3c4c7;\n\tborder-collapse: collapse;\n\twidth: 100%;\n\n\ta:not(.small) {\n\t\tcolor: $color-brand-blue;\n\t\t&:hover {\n\t\t\tcolor: $color-brand-blue-dark;\n\t\t}\n\t}\n\n\ttd, th {\n\t\tborder-bottom: 1px solid #c3c4c7;\n\t\tpadding: 10px 12px;\n\t\ttext-align: center;\n\n\t\t&.expandable.closed {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.llms-button-primary,\n\t\t.llms-button-secondary,\n\t\t.llms-button-action,\n\t\t.llms-button-danger {\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t}\n\n\ttr.llms-quiz-pending {\n\t\ttd {\n\t\t\tfont-weight: 700;\n\t\t}\n\t}\n\n\tthead th,\n\ttfoot th {\n\t\tbackground-color: #FFF;\n\t\tfont-weight: 700;\n\n\t\ta.llms-sortable {\n\t\t\t// display: block;\n\t\t\tpadding-right: 16px;\n\t\t\tposition: relative;\n\t\t\ttext-decoration: none;\n\t\t\twidth: 100%;\n\t\t\t&.active {\n\t\t\t\t// show the current sorted when a sort is active\n\t\t\t\t&[data-order=\"DESC\"] .asc { opacity: 1; }\n\t\t\t\t&[data-order=\"ASC\"] .desc { opacity: 1; }\n\t\t\t}\n\t\t\t// show the opposite on hover\n\t\t\t&:hover {\n\t\t\t\t&[data-order=\"DESC\"] {\n\t\t\t\t\t.asc { opacity: 0; }\n\t\t\t\t\t.desc { opacity: 1; }\n\t\t\t\t}\n\t\t\t\t&[data-order=\"ASC\"] {\n\t\t\t\t\t.asc { opacity: 1; }\n\t\t\t\t\t.desc { opacity: 0; }\n\t\t\t\t}\n\t\t\t}\n\t\t\t.dashicons {\n\t\t\t\tcolor: #444;\n\t\t\t\tfont-size: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\topacity: 0;\n\t\t\t\tposition: absolute;\n\t\t\t\twidth: 16px;\n\t\t\t}\n\t\t}\n\t}\n\n\ttfoot th {\n\t\tborder-bottom: none;\n\n\t\t.llms-table-export {\n\t\t\tfloat: left;\n\t\t\t.llms-table-progress {\n\t\t\t\tbackground: #efefef;\n\t\t\t\tdisplay: none;\n\t\t\t\tmargin-left: 8px;\n\t\t\t\tvertical-align: middle;\n\t\t\t\twidth: 100px;\n\t\t\t}\n\t\t}\n\n\t\t.llms-table-pagination {\n\t\t\tfloat: right;\n\t\t}\n\n\t}\n\n\t&.zebra tbody tr:nth-child( even ) {\n\t\tth, td { background-color: #fff; }\n\t}\n\n\t&.zebra tbody tr:nth-child( odd ) {\n\t\tth, td { background-color: #f6f7f7; }\n\t}\n\n\t&.text-left {\n\t\ttd, th {\n\t\t\ttext-align: left;\n\t\t}\n\t}\n\n\t&.size-large {\n\t\ttd, th {\n\t\t\tfont-size: 14px;\n\t\t\tpadding: 10px 12px;\n\t\t}\n\t}\n\n\t.llms-drag-handle {\n\t\tcolor: #777;\n\t\tcursor: pointer;\n\t\t-webkit-transition: color 0.4s ease;\n\t\ttransition: color 0.4s ease;\n\t}\n\n\t.llms-action-icon {\n\t\tcolor: #777;\n\t\ttext-decoration: none;\n\n\t\t.tooltip {\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\t&:hover {\n\t\t\tcolor: $color-blue;\n\t\t}\n\n\t\t&.danger:hover {\n\t\t\tcolor: $color-danger;\n\t\t}\n\t}\n\n\t.llms-table-page-count {\n\t\tfont-size: 12px;\n\t\tpadding: 0 5px;\n\t}\n\n}\n\n// progress bars within the tables\n.llms-table-progress {\n\ttext-align: center;\n\t.llms-table-progress-bar {\n\t\tbackground: #eee;\n\t\tborder-radius: 10px;\n\t\theight: 16px;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\t\t.llms-table-progress-inner {\n\t\t\tbackground: $color-brand-blue;\n\t\t\theight: 100%;\n\t\t\ttransition: width 0.2s ease;\n\t\t}\n\t}\n\t.llms-table-progress-text {\n\t\tcolor: $color-brand-blue;\n\t\tfont-size: 12px;\n\t\tfont-weight: 700;\n\t\tline-height: 16px;\n\t}\n}\n\n\n.llms-table.llms-gateway-table,\n.llms-table.llms-integrations-table {\n\t.status {\n\t\t.fa {\n\t\t\tcolor: $color-brand-blue;\n\t\t\tfont-size: 22px;\n\t\t}\n\t}\n\t.sort {\n\t\tcursor: move;\n\t\ttext-align: center;\n\t\twidth: 10px;\n\t}\n}\n\n.llms-gb-table-notifications {\n\tth, td {\n\t\ttext-align: left;\n\t}\n}\n",".llms-order-note {\n\n\t.llms-order-note-content {\n\t\tbackground: #efefef;\n\t\tmargin-bottom: 10px;\n\t\tpadding: 10px;\n\t\tposition: relative;\n\t\t&:after {\n\t\t\tborder-style: solid;\n\t\t\tborder-color: #efefef transparent;\n\t\t\tborder-width: 10px 10px 0 0;\n\t\t\tbottom: -10px;\n\t\t\tcontent: '';\n\t\t\tdisplay: block;\n\t\t\theight: 0;\n\t\t\tleft: 20px;\n\t\t\tposition: absolute;\n\t\t\twidth: 0;\n\n\t\t}\n\t\tp {\n\t\t\tfont-size: 13px;\n\t\t\tmargin: 0;\n\t\t\tline-height: 1.5;\n\t\t}\n\t}\n\n\t.llms-order-note-meta {\n\t\tcolor: #999;\n\t\tfont-size: 11px;\n\t\tmargin-left: 10px;\n\t}\n\n\n}\n","\n// This is a \"legacy\" rule that may be removable\n.llms-mb-list {\n\n\tlabel {\n\t\tfont-size: 15px;\n\t\tfont-weight: 700;\n\t\tline-height: 1.5;\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\n\t.description {\n\t\tmargin-bottom: 8px;\n\t}\n\n\t.input-full {\n\t\twidth: 100%;\n\t}\n}\n\n\n#poststuff .llms-metabox {\n\n\t@extend %cf;\n\n\th2, h3, h6 {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\th2 {\n\t\tfont-size: 18px;\n\t\tfont-weight: 700;\n\t}\n\n\th3 {\n\t\tcolor: #777;\n\t\tfont-size: 16px;\n\t}\n\n\th4 {\n\t\tborder-bottom: 1px solid #e5e5e5;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t}\n\n\t.llms-transaction-test-mode {\n\t\tbackground: #ffffd7;\n\t\tfont-style: italic;\n\t\tleft: 0;\n\t\tpadding: 2px;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\ttop: 0;\n\t\ttext-align: center;\n\t}\n\n\ta.llms-editable,\n\t.llms-metabox-icon,\n\tbutton.llms-editable {\n\t\tcolor: $color-grey;\n\t\ttext-decoration: none;\n\t\t&:hover {\n\t\t\tcolor: $color-brand-blue;\n\t\t}\n\t}\n\n\tbutton.llms-editable {\n\t\tborder: none;\n\t\tbackground: none;\n\t\tcursor: pointer;\n\t\tpadding: 0;\n\t\tvertical-align: top;\n\t}\n\n\th4 button.llms-editable {\n\t\tfloat: right;\n\t}\n\n\t.llms-table {\n\t\tmargin-top: 10px;\n\n\t}\n}\n\n.llms-metabox-section {\n\tbackground: #fff;\n\tmargin-top: 25px;\n\tposition: relative;\n\n\t&.no-top-margin {\n\t\tmargin-top: 0;\n\t}\n\n\t.llms-metabox-field {\n\t\tmargin: 15px 0;\n\t\tposition: relative;\n\t\tlabel {\n\t\t\tcolor: #777;\n\t\t\tdisplay: block;\n\t\t\tmargin-bottom: 5px;\n\t\t\tfont-weight: 500;\n\t\t\tvertical-align: baseline;\n\t\t}\n\n\t\tselect,\n\t\ttextarea,\n\t\tinput[type=\"text\"],\n\t\tinput[type=\"number\"] {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tinput.md-text {\n\t\t\twidth: 105px;\n\t\t}\n\n\t\tinput.sm-text {\n\t\t\twidth: 45px;\n\t\t}\n\n\n\t\t.llms-datetime-field {\n\n\t\t\t.llms-date-input {\n\t\t\t\twidth: 95px;\n\t\t\t}\n\t\t\t.llms-time-input {\n\t\t\t\twidth: 45px;\n\t\t\t}\n\t\t\tem {\n\t\t\t\tfont-style: normal;\n\t\t\t\tpadding: 0 3px;\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\n}\n\n.llms-collapsible {\n\n\t@extend %clearfix;\n\n\tborder: 1px solid #e5e5e5;\n\tposition: relative;\n\tmargin-top: 0;\n\tmargin-bottom: -1px;\n\n\t&:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t&.opened .llms-collapsible-header {\n\t\t.dashicons-arrow-down {\n\t\t\tdisplay: none;\n\t\t}\n\t\t.dashicons-arrow-up {\n\t\t\tdisplay: inline;\n\t\t}\n\t}\n\n\t.llms-collapsible-header {\n\t\t@extend %clearfix;\n\t\tpadding: 10px;\n\n\t\th3 {\n\t\t\tcolor: #777;\n\t\t\tmargin: 0;\n\t\t\tfont-size: 16px;\n\t\t}\n\n\t\t.dashicons-arrow-up {\n\t\t\tdisplay: inline;\n\t\t}\n\t\t.dashicons-arrow-up {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\ta {\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t.dashicons {\n\t\t\tcolor: #777;\n\t\t\tcursor: pointer;\n\t\t\ttransition: color .4s ease;\n\t\t\t&:hover {\n\t\t\t\tcolor: $color-blue;\n\t\t\t}\n\n\t\t\t&.dashicons-warning,&.dashicons-warning:hover,\n\t\t\t&.dashicons-trash:hover,\n\t\t\t&.dashicons-no:hover {\n\t\t\t\tcolor: $color-danger;\n\t\t\t}\n\t\t\t&.dashicons-warning.medium-danger {\n\t\t\t\t&,\n\t\t\t\t&:hover {\n\t\t\t\t\tcolor: $color-orange;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t.llms-collapsible-body {\n\t\t@extend %clearfix;\n\t\tdisplay: none;\n\t\tpadding: 10px;\n\t}\n\n}\n","._llms_instructors_data.repeater {\n\t.llms-repeater-rows .llms-repeater-row:first-child {\n\t\t.llms-repeater-remove { display: none; }\n\t}\n\n\t.llms-mb-list {\n\t\tpadding: 0 5px !important;\n\t}\n}\n",".post-type-llms_order #post-body-content { display: none; }\n#lifterlms-order-details {\n\t.handlediv,\n\t.handlediv.button-link,\n\t.postbox-header { display: none;}\n\t.inside {\n\t\tpadding: 20px;\n\t\tmargin-top: 0;\n\n\t}\n}\n\n// failed transaction color\n.llms-table tbody tr.llms-txn-failed td {\n\tbackground-color: rgba( $color-red, 0.5 );\n\tborder-bottom-color: rgba( $color-red, 0.5 );\n}\n\n// refunded transaction color\n.llms-table tbody tr.llms-txn-refunded td {\n\tbackground-color: rgba( orange, 0.5 );\n\tborder-bottom-color: rgba( orange, 0.5 );\n}\n\n.llms-txn-refund-form,\n.llms-manual-txn-form {\n\t.llms-metabox-section {\n\t\tmargin-top: 0;\n\t}\n\t.llms-metabox-field {\n\t\ttext-align: right;\n\t\tinput {\n\t\t\t&[type=\"number\"] { max-width: 100px; }\n\t\t\t&[type=\"text\"] { max-width: 340px; }\n\n\t\t}\n\t}\n}\n\n.llms-manual-txn-form {\n\tbackground-color: #eaeaea;\n\t.llms-metabox-section {\n\t\tbackground-color: #eaeaea;\n\t}\n}\n\n#llms-remaining-edit {\n\tdisplay: none;\n}\n.llms-remaining-edit--content {\n\tlabel, span, textarea {\n\t\tdisplay: block;\n\t}\n\n\tlabel {\n\t\tmargin-bottom: 20px;\n\t}\n\n\ttextarea, input {\n\t\twidth: 100%;\n\t}\n}\n",".submitbox .llms-mb-section,\n.llms-award-engagement-submitbox .llms-mb-list {\n\tmargin-bottom: 12px;\n\t&:last-of-type {\n\t\tmargin-bottom: 0;\n\t}\n\t@at-root .sync-action,\n\t&.student-info,\n\t&.post_author_override label {\n\t\t&:before {\n\t\t\t// dashicons-admin-users.\n\t\t\tfont: normal 20px/1 dashicons;\n\t\t\tspeak: never;\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-left: -1px;\n\t\t\tpadding-right: 3px;\n\t\t\tvertical-align: top;\n\t\t\t-webkit-font-smoothing: antialiased;\n\t\t\t-moz-osx-font-smoothing: grayscale;\n\t\t\tposition: relative;\n\t\t\ttop: -1px;\n\t\t\tcolor: #8c8f94;\n\t\t\tbody:not(.admin-color-fresh) & {\n\t\t\t\tcolor: currentColor; // Used when selecting a different admin color scheme from the default one.\n\t\t\t}\n\t\t}\n\t}\n\t&.student-info,\n\t&.post_author_override label {\n\t\t&:before {\n\t\t\tcontent: '\\f110';\n\t\t}\n\t}\n\t@at-root .sync-action:before {\n\t\tcontent: '\\f113';\n\t\tcolor: white;\n\t}\n\t&.post_author_override label {\n\t\tdisplay: inline-block;\n\t\twidth: auto;;\n\t}\n}\n",".llms-metabox {\n\n\t#llms-new-access-plan-model {\n\t\tdisplay: none;\n\t}\n\n\t.llms-access-plans {\n\t\t@extend %clearfix;\n\t\tmargin-top: 10px;\n\n\t\t> .llms-no-plans-msg { display: none; }\n\t\t> .llms-no-plans-msg:last-child {\n\t\t\tbox-shadow: inset 0 0 0 1px #e5e5e5;\n\t\t\tdisplay: block;\n\t\t\ttext-align: center;\n\t\t\tpadding: 10px;\n\t\t}\n\n\t\t&.dragging {\n\t\t\tbackground: #efefef;\n\t\t\tbox-shadow: inset 0 0 0 1px #e5e5e5;\n\t\t}\n\n\t\t.llms-spinning {\n\t\t\tz-index: 1;\n\t\t}\n\n\t\t.llms-invalid {\n\t\t\tborder-color: $color-danger;\n\t\t\t.dashicons-warning {\n\t\t\t\tdisplay: inline;\n\t\t\t}\n\t\t}\n\t\t.llms-needs-attention .dashicons-warning.medium-danger {\n\t\t\tdisplay: inline;\n\t\t}\n\t\t.dashicons-warning {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t.llms-access-plan {\n\n\t\ttext-align: left;\n\n\t\t[data-tip]:before {\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t.llms-plan-link,\n\t\t[data-controller] {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&:hover,\n\t\t&.opened {\n\t\t\t.llms-plan-link {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t\t.llms-metabox-field {\n\t\t\tmargin: 5px 0;\n\t\t}\n\n\t\t.llms-required {\n\t\t\tcolor: $color-danger;\n\t\t\tmargin-left: 3px;\n\t\t}\n\t\t.notice {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\n}\n",".llms-metabox-students {\n\t.llms-table {\n\t\ttr .name {\n\t\t\ttext-align: left;\n\t\t}\n\t}\n\n\t.llms-add-student:hover {\n\t\tcolor: $color-green;\n\t}\n\t.llms-remove-student:hover {\n\t\tcolor: $color-red;\n\t}\n\n}\n",".llms-mb-container .tab-content ul:not(.select2-selection__rendered).llms-mb-repeater-fields > li.llms-mb-list {\n\tborder-bottom: none;\n\tpadding: 0 0 10px;\n}\n\n.llms-mb-list.repeater {\n\n\t.llms-repeater-rows {\n\t\tposition: relative;\n\t\tmargin-top: 10px;\n\t\tmin-height: 10px;\n\n\t\t&.dragging {\n\t\t\tbackground: #efefef;\n\t\t\tbox-shadow: inset 0 0 0 1px #e5e5e5;\n\t\t}\n\t}\n\n\t.llms-repeater-row {\n\t\tbackground: #fff;\n\t}\n\n\t.llms-mb-repeater-fields {\n\n\t}\n\n\t.llms-mb-repeater-footer {\n\t\ttext-align: right;\n\t\tmargin-top: 20px;\n\t}\n\n\t.tmce-active .wp-editor-area {\n\t\tcolor: #32373c; // wp core default color\n\t}\n\n}\n",".llms-builder-launcher {\n\n\tp {\n\t\tmargin-top: 0;\n\t}\n\n\tol {\n\t\tmargin-top: -6px;\n\t}\n\n\t.llms-button-primary {\n\t\tbox-sizing: border-box;\n\t}\n\n}\n",".wp-list-table {\n\t@include order_status_badges();\n}\n\n#lifterlms-order-transactions .llms-table tfoot th {\n\ttext-align: right;\n}\n",".llms-post-table-post-filter {\n\tdisplay: inline-block;\n\tmargin-right: 6px;\n\tmax-width: 100%;\n\twidth: 220px;\n}\n",".llms-nav-tab-wrapper {\n\tbackground: $color-blue;\n\tmargin: 20px 0;\n\n\t&.llms-nav-secondary {\n\t\tbackground: #e1e1e1;\n\n\t\t.llms-nav-item {\n\t\t\tmargin: 0;\n\n\t\t\t.llms-nav-link:hover,\n\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\tbackground: darken( #e1e1e1, 8 );\n\t\t\t}\n\n\t\t}\n\n\t\t.llms-nav-link {\n\t\t\tcolor: #414141;\n\t\t\tfont-size: 15px;\n\t\t\tpadding: 8px 14px;\n\n\t\t\t.dashicons {\n\t\t\t\tfont-size: 15px;\n\t\t\t\theight: 15px;\n\t\t\t\twidth: 15px;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t&.llms-nav-text {\n\t\tbackground: inherit;\n\t\t.llms-nav-items {\n\t\t\tpadding-left: 0;\n\t\t}\n\t\t.llms-nav-item {\n\t\t\tbackground: inherit;\n\t\t\tcolor: #646970;\n\t\t\t&:last-child:after {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tcontent: '|';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmargin: 0 8px 0 6px;\n\t\t\t}\n\t\t\t.llms-nav-link:hover {\n\t\t\t\tbackground: inherit;\n\t\t\t\tcolor: $color-brand-blue;\n\t\t\t}\n\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\tbackground: inherit;\n\t\t\t\tcolor: #000;\n\t\t\t\tfont-weight: 600;\n\t\t\t\ttext-decoration: none;\n\t\t\t}\n\t\t\t.llms-nav-link {\n\t\t\t\tcolor: $color-brand-blue;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tletter-spacing: 0;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\ttext-decoration: underline;\n\t\t\t\ttext-transform: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&.llms-nav-style-tabs {\n\t\tbackground-color: $color-brand-dark-blue;\n\t\tmargin: 0;\n\t\tpadding-top: 8px;\n\n\t\t.llms-nav-item {\n\t\t\tmargin: 0 3px;\n\n\t\t\t.llms-nav-link {\n\t\t\t\tborder-top-left-radius: 4px;\n\t\t\t\tborder-top-right-radius: 4px;\n\t\t\t}\n\n\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\tbackground-color: #FFF;\n\t\t\t\tcolor: $color-brand-blue;\n\t\t\t\tfont-weight: 700;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t&.llms-nav-style-filters {\n\t\tbackground-color: $color-brand-blue;\n\t\tborder-radius: 12px;\n\t\tmargin: 20px 0;\n\t\toverflow: hidden;\n\t\tpadding: 0;\n\n\t\t.llms-nav-items {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: space-between;\n\t\t\tpadding-left: 0;\n\n\t\t\t@media only screen and (min-width: 782px) {\n\t\t\t\tflex-direction: row;\n\t\t\t}\n\n\t\t\t.llms-nav-item {\n\t\t\t\tfloat: none;\n\n\t\t\t\t.llms-nav-link {\n\t\t\t\t\tpadding: 14px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t.llms-nav-items {\n\t\t@include clearfix;\n\t\tmargin: 0;\n\t\tpadding-left: 10px;\n\t}\n\n\t\t.llms-nav-item {\n\t\t\tmargin: 0;\n\n\t\t\t.llms-nav-link:hover {\n\t\t\t\tbackground: $color-brand-blue;\n\t\t\t}\n\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\tbackground: $color-brand-dark-blue;\n\t\t\t}\n\n\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\tfont-weight: 400;\n\t\t\t}\n\n\t\t\t@media only screen and (min-width: 768px) {\n\t\t\t\tfloat: left;\n\n\t\t\t\t&.llms-nav-item-right {\n\t\t\t\t\tfloat: right;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t\t.llms-nav-link {\n\n\t\t\t\tcolor: #fff;\n\t\t\t\tcursor: pointer;\n\t\t\t\tdisplay: block;\n\t\t\t\tfont-weight: 400;\n\t\t\t\tfont-size: 15px;\n\t\t\t\tpadding: 9px 18px;\n\t\t\t\ttext-align: center;\n\t\t\t\ttext-decoration: none;\n\t\t\t\ttransition: all .3s ease;\n\n\t\t\t}\n}\n","#llms-options-page-contents {\n\th2 {\n\t\tcolor: #999;\n\t\tfont-weight: 500;\n\t\tletter-spacing: 2px;\n\t\tborder-bottom: 1px solid #999;\n\t}\n}\n",".llms-reporting.wrap {\n\n\t.llms-options-page-contents {\n\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, 0.15 );\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\n\t\t}\n\t}\n\n\t.llms-stab-title {\n\t\tcolor: $color-brand-dark-blue;\n\t\tfont-size: 36px;\n\t\tfont-weight: 300;\n\t\tmargin-bottom: 20px;\n\t}\n\n\ttd.id a {\n\t\ttext-decoration: none;\n\t}\n\n\tth.id, td.id,\n\tth.name, td.name,\n\tth.registered, td.registered,\n\tth.last_seen, td.last_seen,\n\tth.overall_progress, td.overall_progress,\n\tth.title, td.title,\n\tth.course, td.course,\n\tth.lesson, td.lesson { text-align: left; }\n\n\ttd.section-title {\n\t\tbackground: #eaeaea;\n\t\ttext-align: left;\n\t\tfont-weight: 700;\n\t\tpadding: 16px 4px;\n\t}\n\n\ttd.questions-table {\n\t\ttext-align: left;\n\n\t\t.correct,\n\t\t.question,\n\t\t.selected {\n\t\t\ttext-align: left;\n\t\t\tmax-width: 300px;\n\n\t\t\timg {\n\t\t\t\theight: auto;\n\t\t\t\tmax-width: 64px;\n\t\t\t}\n\t\t}\n\t}\n\n\ttable.quiz-attempts {\n\t\tmargin-bottom: 40px;\n\t}\n\n\t&.tab--students {\n\t\t.llms-options-page-contents {\n\n\t\t\t#llms-award-certificate-wrapper .components-button.is-secondary {\n\t\t\t\tbackground: #e1e1e1;\n\t\t\t\tborder-radius: 8px;\n\t\t\t\tbox-shadow: none;\n\t\t\t\tcolor: #414141;\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: 700;\n\t\t\t\theight: auto;\n\t\t\t\tpadding: 8px 14px;\n\t\t\t}\n\n\t\t}\n\t}\n\n\t&.tab--enrollments,\n\t&.tab--sales {\n\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t.llms-options-page-contents {\n\t\t\tbox-shadow: none;\n\t\t\tbackground: none;\n\t\t\tmargin-top: 20px;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t.llms-nav-style-filters {\n\n\t\t\t.llms-analytics-form {\n\t\t\t\talign-items: center;\n\t\t\t\talign-self: center;\n\t\t\t\tcolor: #FFF;\n\t\t\t\tdisplay: flex;\n\t\t\t\tfont-size: 13px;\n\t\t\t\tgap: 5px;\n\n\t\t\t\tlabel {\n\t\t\t\t\tfont-weight: 700;\n\t\t\t\t}\n\n\t\t\t\tinput {\n\t\t\t\t\tborder: 0;\n\t\t\t\t\tfont-size: 13px;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding: 0 4px;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\twidth: 110px;\n\t\t\t\t}\n\n\t\t\t\t.select2-container {\n\t\t\t\t\tinput {\n\t\t\t\t\t\twidth: 100% !important;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t.button.small {\n\t\t\theight: 23px;\n\t\t\tline-height: 23px;\n\t\t}\n\n\t\t.llms-analytics-filters {\n\t\t\tdisplay: none;\n\n\t\t\t.llms-inside-wrap {\n\t\t\t\tbackground-color: #FFF;\n\t\t\t\tbackground-color: #FFF;\n\t\t\t\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n\t\t\t\tmargin: -20px 10px 20px 10px;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\n\t\t\t.llms-nav-items {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: 20px;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\tmargin: 0;\n\n\t\t\t\t@media only screen and (min-width: 782px) {\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t.llms-nav-item {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\twidth: 100%;\n\n\t\t\t\tlabel {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tfont-weight: 700;\n\t\t\t\t\tmargin: 0 0 5px 0;\n\t\t\t\t}\n\n\t\t\t\t.select2-selection__rendered{\n\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\ttext-overflow: inherit;\n\t\t\t\t\twhite-space: normal;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tp {\n\t\t\t\tmargin: 0;\n\t\t\t\ttext-align: right;\n\n\t\t\t\t.llms-button-primary {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\t}\n\n\t.llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap {\n\t\twidth: 160px;\n\t}\n\n\n}\n\n.llms-charts-wrapper {\n\tbackground-color: #FFF;\n\tborder: 1px solid #dedede;\n\tborder-radius: 12px;\n\tbox-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n\tpadding: 20px;\n}\n\n.llms-reporting-tab {\n\n\th1, h2, h3, h4, h5, h6 {\n\t\tmargin: 0;\n\t\ta {\n\t\t\tcolor: $color-brand-blue;\n\t\t\ttext-decoration: none;\n\t\t\t&:hover {\n\t\t\t\tcolor: $color-brand-blue;\n\t\t\t}\n\t\t}\n\t}\n\n\th2 {\n\t\tfont-size: 22px;\n\t\tline-height: 1.5;\n\n\t\t&.llms-table-title {\n\t\t\tmargin-bottom: 20px;\n\t\t}\n\n\t}\n\n\th5 {\n\t\tfont-size: 15px;\n\t\tline-height: 1.5;\n\t}\n\n\t.llms-reporting-body {\n\t\tbackground-color: #FFF;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );\n\t\tmargin: 20px auto;\n\t\tpadding: 0;\n\n\t\t.llms-reporting-stab {\n\t\t\tpadding: 30px;\n\n\t\t\t.llms-table-header {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t.llms-gb-tab {\n\t\t\tpadding: 30px;\n\t\t}\n\n\t\t.llms-reporting-header {\n\t\t\tpadding: 30px;\n\t\t\tmargin: 0;\n\n\t\t\t.llms-reporting-header-img {\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmargin-right: 10px;\n\t\t\t\toverflow: hidden;\n\t\t\t\tvertical-align: middle;\n\t\t\t\timg {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tmax-height: 64px;\n\t\t\t\t\twidth: auto;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-reporting-header-info {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tvertical-align: middle;\n\n\t\t\t}\n\n\t\t}\n\t}\n\n}\n\n.llms-reporting-breadcrumbs {\n\tmargin: 0;\n\tpadding: 0;\n\ta {\n\t\tcolor: $color-brand-blue;\n\t\tfont-size: 15px;\n\t\ttext-decoration: none;\n\t\t&:hover {\n\t\t\tcolor: $color-brand-blue-dark;\n\t\t}\n\t\t&:after {\n\t\t\tcontent: ' > ';\n\t\t\tcolor: #646970;\n\t\t}\n\n\t\t&:last-child {\n\t\t\tcolor: #000;\n\t\t\tfont-weight: 700;\n\t\t\t&:after { display: none; }\n\t\t}\n\t}\n}\n\n#llms-students-table .name {\n\ttext-align: left;\n}\n\n.llms-reporting-tab-content {\n\tdisplay: flex;\n\n\t> header {\n\t\t@include clearfix;\n\t}\n\n\th3 {\n\t\tmargin-bottom: 20px;\n\t}\n\n\t.llms-reporting-tab-filter {\n\t\tfloat: right;\n\t\tposition: relative;\n\t\tmargin-right: 0.75em;\n\t\twidth: 180px;\n\t\ttop: -3px;\n\t}\n\n\n\t.llms-reporting-tab-main {\n\t\tflex: 3;\n\t\tmax-width: 75%;\n\t}\n\t.llms-reporting-tab-side {\n\t\tflex: 1;\n\t\tmargin-left: 20px;\n\t}\n\n\t> .llms-table-wrap {\n\t\tflex: 1;\n\t}\n\n}\n\n\n.llms-reporting-widgets {\n\t@include clearfix;\n}\n\n.llms-reporting-widget {\n\n\tborder-top: 4px solid $color-brand-blue;\n\tbackground: #fafafa;\n\tmargin-bottom: 10px;\n\tpadding: 30px;\n\t@include clearfix;\n\n\t.fa {\n\t\tcolor: #999;\n\t\tfloat: left;\n\t\tfont-size: 32px;\n\t\tmargin-right: 10px;\n\t}\n\n\tstrong {\n\t\tcolor: #333;\n\t\tfont-size: 20px;\n\t\tline-height: 1.2;\n\t}\n\n\t&.llms-reporting-student-address {\n\t\tstrong {\n\t\t\tline-height: 1.1;\n\t\t}\n\t}\n\n\tsup,\n\t.llms-price-currency-symbol {\n\t\tfont-size: 75%;\n\t\tposition: relative;\n\t\ttop: -4px;\n\t\tvertical-align: baseline;\n\t}\n\n\tsmall {\n\t\tfont-size: 13px;\n\t\t&.compare {\n\t\t\tmargin-left: 5px;\n\t\t\t&.positive {\n\t\t\t\tcolor: $color-green;\n\t\t\t}\n\t\t\t&.negative {\n\t\t\t\tcolor: $color-red;\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n.llms-reporting-event {\n\tborder-left: 4px solid #555;\n\tbackground: #fafafa;\n\tfont-size: 11px;\n\tline-height: 1.2;\n\tmargin-bottom: 0.75em;\n\tpadding: 10px;\n\t@include clearfix;\n\n\t&.color--blue {\n\t\tborder-left-color: $color-blue;\n\t}\n\n\t&.color--green,\n\t&._enrollment_trigger,\n\t&._is_complete.yes {\n\t\tborder-left-color: $color-green;\n\t}\n\n\t&.color--purple,\n\t&._status.enrolled {\n\t\tborder-left-color: $color-purple;\n\t}\n\n\t&.color--red,\n\t&._status.expired,\n\t&._status.cancelled {\n\t\tborder-left-color: $color-red;\n\t}\n\t&.color--orange,\n\t&._achievement_earned,\n\t&._certificate_earned,\n\t&._email_sent {\n\t\tborder-left-color: $color-orange;\n\t}\n\n\ttime {\n\t\tcolor: #888;\n\t}\n\n\t.llms-student-avatar {\n\t\tmargin-left: 10px;\n\t\tfloat: right;\n\t}\n\n\ta {\n\t\ttext-decoration: none;\n\t\tcolor: inherit;\n\t}\n\n}\n\n@media only screen and (min-width: 782px) {\n\t.llms-reporting.wrap {\n\t\t.llms-options-page-contents {\n\t\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\t\tmargin-left: 0;\n\t\t\t\tmargin-right: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@import \"../_includes/quiz-result-question-list\";\n",".llms-quiz-attempt-results {\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style-type: none;\n\n\t.llms-quiz-attempt-question {\n\t\tbackground: #efefef;\n\t\tborder-radius: $radius-small;\n\t\tmargin: 0 0 15px;\n\t\tposition: relative;\n\t\tlist-style-type: none;\n\t\t.toggle-answer {\n\t\t\tcolor: inherit;\n\t\t\tdisplay: flex;\n\t\t\tgap: 10px;\n\t\t\tjustify-content: space-between;\n\t\t\tpadding: 15px 35px 15px 15px;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t&.status--waiting.correct,\n\t\t&.status--waiting.incorrect {\n\t\t\tbackground: rgba( $color-orange, 0.2 );\n\t\t\t.llms-status-icon {\n\t\t\t\tbackground-color: $color-orange;\n\t\t\t}\n\t\t}\n\n\t\t&.status--graded.correct {\n\t\t\tbackground: rgba( $color-green, 0.15 );\n\t\t\t.llms-status-icon {\n\t\t\t\tbackground-color: $color-green;\n\t\t\t}\n\t\t}\n\t\t&.status--graded.incorrect {\n\t\t\tbackground: rgba( $color-red, 0.15 );\n\t\t\t.llms-status-icon {\n\t\t\t\tbackground-color: $color-red;\n\t\t\t}\n\t\t}\n\t\tpre {\n\t\t\toverflow: auto;\n\t\t}\n\t\t.llms-question-title {\n\t\t\tfont-size: 22px;\n\t\t\tmargin: 0;\n\t\t\tline-height: 1.4;\n\t\t}\n\n\t\t.llms-points {\n\t\t\tline-height: 1.4;\n\t\t}\n\n\t\t.llms-status-icon-tip {\n\t\t\tposition: absolute;\n\t\t\tright: -12px;\n\t\t\ttop: -2px;\n\t\t}\n\n\t\t.llms-status-icon {\n\t\t\tcolor: rgba( 255, 255, 255, 0.65 );\n\t\t\tborder-radius: 50%;\n\t\t\tfont-size: 30px;\n\t\t\theight: 40px;\n\t\t\tline-height: 40px;\n\t\t\ttext-align: center;\n\t\t\twidth: 40px;\n\t\t}\n\n\t\t.llms-quiz-attempt-question-main {\n\t\t\tdisplay: none;\n\t\t\tpadding: 0 15px 15px;\n\n\t\t\t.llms-quiz-results-label {\n\t\t\t\tfont-weight: 700;\n\t\t\t\tmargin: 0 0 10px;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tul.llms-quiz-attempt-answers {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\tli.llms-quiz-attempt-answer {\n\t\t\t\t\tpadding: 0;\n\t\t\t\t\tmargin: 0 0 0 30px;\n\t\t\t\t\t&:only-child {\n\t\t\t\t\t\tlist-style-type: none;\n\t\t\t\t\t\tmargin-left: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\timg {\n\t\t\t\theight: auto;\n\t\t\t\tmax-width: 200px;\n\t\t\t}\n\n\t\t\t.llms-quiz-attempt-answer-section {\n\t\t\t\tborder-top: 2px solid rgba( #fff, 0.5 );\n\t\t\t\tmargin-top: 20px;\n\t\t\t\tpadding-top: 20px;\n\t\t\t\t&:first-child {\n\t\t\t\t\tborder-top: none;\n\t\t\t\t\tmargin-top: 0;\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t&.type--picture_choice,\n\t\t&.type--picture_reorder {\n\t\t\tul.llms-quiz-attempt-answers {\n\t\t\t\tlist-style-type: none;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\n\t\t\t\tli.llms-quiz-attempt-answer {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tlist-style-type: none;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding: 5px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.type--removed {\n\t\t\t.llms-question-title {\n\t\t\t\tfont-style: italic;\n\t\t\t\tfont-weight: normal;\n\t\t\t}\n\t\t\topacity: .5;\n\t\t}\n\n\t}\n}\n",".wrap.llms-reporting,\n.wrap.lifterlms-settings,\n.wrap.llms-status {\n\n\t.llms-inside-wrap {\n\t\tbox-sizing: border-box;\n\t\tmargin: 0 auto;\n\n\t\t.llms-nav-text {\n\t\t\tmargin: 0 auto;\n\t\t}\n\t}\n\n\t.llms-subheader {\n\n\t\t.llms-save {\n\t\t\tflex: auto;\n\t\t\ttext-align: right;\n\t\t}\n\n\t}\n\n\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\tbackground-color: #FFF;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, 0.15 );\n\t\tmargin: 0 -20px 20px -10px;\n\n\t\t.llms-nav-items {\n\t\t\tpadding-left: 0;\n\t\t}\n\n\t\t.llms-nav-item {\n\t\t\t.llms-nav-link:hover {\n\t\t\t\tbackground: #f0f0f1;\n\t\t\t\tcolor: #222222;\n\t\t\t}\n\n\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\tbackground: #fafafa;\n\t\t\t\tcolor: $color-blue;\n\t\t\t\tborder-top-color: $color-blue;\n\t\t\t}\n\n\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\tfont-weight: 700;\n\t\t\t}\n\t\t}\n\n\t\t.llms-nav-link {\n\t\t\tborder-top: 2px solid transparent;\n\t\t\tpadding: 14px;\n\t\t}\n\n\t}\n\n\t.llms-setting-group {\n\t\tbackground-color: #FFF;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );\n\t\tmargin: 20px auto;\n\t\tpadding: 20px;\n\n\t\t.llms-label {\n\t\t\tborder-bottom: 1px solid #efefef;\n\t\t\tfont-weight: 700;\n\t\t\tfont-size: 20px;\n\t\t\tpadding: 20px;\n\t\t\tmargin: -20px -20px 20px;\n\n\t\t\t.llms-button-primary {\n\t\t\t\tmargin-left: 10px;\n\t\t\t}\n\t\t}\n\n\t\t.llms-help-tooltip .dashicons {\n\t\t\tcolor: #444;\n\t\t\tcursor: help;\n\t\t}\n\n\t\t.form-table {\n\t\t\tmargin: 0;\n\t\t\ttr:first-child .llms-subtitle {\n\t\t\t\tmargin-top: 0;\n\t\t\t}\n\t\t}\n\n\t\ttd[colspan=\"2\"] {\n\t\t\tpadding-top: 0;\n\t\t\tpadding-left: 0;\n\t\t}\n\n\t\ttr.llms-disabled-field {\n\t\t\topacity: 0.5;\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\tp {\n\t\t\tfont-size: 14px;\n\t\t}\n\t\tinput[type=\"text\"],\n\t\tinput[type=\"password\"],\n\t\tinput[type=\"datetime\"],\n\t\tinput[type=\"datetime-local\"],\n\t\tinput[type=\"date\"],\n\t\tinput[type=\"month\"],\n\t\tinput[type=\"time\"],\n\t\tinput[type=\"week\"],\n\t\tinput[type=\"number\"],\n\t\tinput[type=\"email\"],\n\t\tinput[type=\"url\"],\n\t\tinput[type=\"search\"],\n\t\tinput[type=\"tel\"],\n\t\tinput[type=\"color\"],\n\t\tselect,\n\t\ttextarea:not(.wp-editor-area) {\n\t\t\twidth: 50%;\n\t\t\t&.medium { width: 30%; }\n\t\t\t&.small { width: 20%; }\n\t\t\t&.tiny { width: 10%; }\n\t\t}\n\t}\n\n\t@media only screen and (min-width: 782px) {\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\t.llms-nav-item {\n\t\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\t\tbackground: #fff;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Email Delivery providers.\n\t#llms-mailhawk-connect {\n\t\theight: auto;\n\t\tmargin: 0 0 6px;\n\t\tposition: relative;\n\n\t\t.dashicons {\n\t\t\tmargin: -4px 4px 0 0;\n\t\t\tvertical-align: middle;\n\t\t}\n\t}\n\t#llms-sendwp-connect {\n\t\theight: auto;\n\t\tmargin: 0 0 6px;\n\t\tposition: relative;\n\n\t\t.fa {\n\t\t\tmargin-right: 4px;\n\t\t}\n\t}\n\n}\n\n@media only screen and (min-width: 782px) {\n\t.wrap.lifterlms-settings {\n\t\t.llms-subheader {\n\t\t\theight: 40px;\n\t\t\tposition: sticky;\n\t\t\ttop: 32px;\n\t\t}\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\tmargin: 0 -20px 20px -22px;\n\n\t\t\t.llms-nav-items {\n\t\t\t\tpadding-left: 10px;\n\t\t\t}\n\n\t\t}\n\t}\n\n\t.wrap.llms-reporting {\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\tmargin: 0 -20px 20px -22px;\n\n\t\t\t.llms-nav-items {\n\t\t\t\tpadding-left: 10px;\n\t\t\t}\n\n\t\t}\n\t}\n\t\n\n\t.wrap.llms-status {\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\tmargin: 0 -20px 20px -22px;\n\n\t\t\t.llms-nav-items {\n\t\t\t\tpadding-left: 10px;\n\t\t\t}\n\n\t\t}\n\t}\n}\n",".wrap.llms-dashboard {\n\n\t.llms-inside-wrap {\n\t\tpadding-top: 30px;\n\t}\n\n\t#poststuff {\n\n\t\th2 {\n\t\t\tpadding: 12px 20px;\n\t\t}\n\n\t}\n\n\t.llms-dashboard-activity {\n\n\t\th2 {\n\t\t\tfont-size: 20px;\n\t\t\tfont-weight: 700;\n\t\t\tline-height: 1.5;\n\t\t\tmargin-top: 0;\n\t\t\ttext-align: center;\n\t\t}\n\t}\n\n\t.postbox {\n\t\tbackground-color: #FFF;\n\t\tborder: none;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, 0.13 );\n\n\t\t.postbox-header {\n\t\t\tborder-bottom-color: #efefef;\n\n\t\t}\n\n\t\t.inside {\n\t\t\tpadding: 20px;\n\t\t}\n\t}\n\n\t#llms_dashboard_addons {\n\n\t\t.llms-addons-wrap {\n\t\t\tmargin-top: 0;\n\n\t\t\t.llms-add-on-item {\n\t\t\t\tmargin-top: 0;\n\n\t\t\t\tp {\n\t\t\t\t\ttext-align: left;\n\t\t\t\t}\n\n\t\t\t\tfooter.llms-actions {\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tp {\n\t\t\ttext-align: center;\n\n\t\t\t.llms-button-primary {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmargin-top: 15px;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t#llms_dashboard_quick_links {\n\n\t\tul {\n\t\t\tlist-style: disc;\n\t\t\tmargin: 5px 0 0 20px;\n\n\t\t\tli {\n\t\t\t\tfont-size: 15px;\n\t\t\t\tline-height: 1.5;\n\t\t\t}\n\t\t}\n\n\t\t.llms-quick-links {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: 1fr;\n\t\t\tgrid-gap: 30px;\n\n\t\t\ta {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.llms-list {\n\n\t\t\t\th3 {\n\t\t\t\t\tmargin: 0 0 10px 0;\n\t\t\t\t}\n\n\t\t\t\tul {\n\t\t\t\t\tmargin-bottom: 20px;\n\n\t\t\t\t\t&.llms-checklist {\n\t\t\t\t\t\tlist-style: none;\n\t\t\t\t\t\tmargin-left: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t.fa {\n\t\t\t\t\ttext-align: center;\n\t\t\t\t\twidth: 16px;\n\t\t\t\t}\n\n\t\t\t\t.fa-check {\n\t\t\t\t\tcolor: #008a20;\n\t\t\t\t}\n\n\t\t\t\t.fa-times {\n\t\t\t\t\tcolor: #d63638;\n\t\t\t\t}\n\n\t\t\t\t.llms-button-primary,\n\t\t\t\t.llms-button-secondary,\n\t\t\t\t.llms-button-action {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t@media only screen and (min-width: 782px) {\n\t\t\t\tgrid-template-columns: 1fr 1fr 1fr;\n\t\t\t}\n\t\t}\n\n\t\t.llms-help-links {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: 1fr 1fr;\n\t\t\tgrid-gap: 20px;\n\n\t\t\t.llms-list {\n\n\t\t\t\th3 {\n\t\t\t\t\tmargin: 0;\n\n\t\t\t\t\t.dashicons {\n\t\t\t\t\t\tcolor: #AAA;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t@media only screen and (min-width: 782px) {\n\t\t\t\tgrid-template-columns: 1fr 1fr 1fr 1fr;\n\t\t\t}\n\n\t\t}\n\n\t}\n\t#llms_dashboard_blog,\n\t#llms_dashboard_podcast {\n\n\t\tul {\n\t\t\tmargin: 0;\n\n\t\t\tli {\n\t\t\t\tmargin: 0 0 15px 0;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tp {\n\t\t\tmargin: 15px 0;\n\t\t\ttext-align: center;\n\n\t\t\ta {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\t}\n\n}\n","#llms_dashboard_widget {\n\n\t.inside {\n\t\tmargin: 0;\n\t\tpadding-bottom: 8px;\n\t}\n\n\t.llms-dashboard-widget-wrap {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\tpadding-top: 12px;\n\t}\n\n\t.activity-block {\n\t\tpadding-bottom: 8px;\n\t\tborder-color: #e8e8e8;\n\t}\n\n\th3 {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.llms-charts-wrapper {\n\t\tdisplay: none;\n\t}\n\n\t.llms-widget-row {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tgap: 8px;\n\t\twidth: 100%;\n\t\talign-items: stretch;\n\t\tpadding: 4px 0;\n\n\t\t&:before,\n\t\t&:after {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t.llms-widget-1-4 {\n\t\tpadding: 0;\n\t\tflex: 1;\n\t}\n\n\t.llms-widget {\n\t\tpadding: 8px 8px 12px;\n\t\tmargin: 0;\n\t\tborder-radius: 6px;\n\t\tborder: 1px solid #e8e8e8;\n\t\tbox-shadow: 0px 2px 4px rgb(246 247 247);\n\t\theight: 100%;\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tjustify-content: center;\n\t\talign-items: flex-end;\n\t}\n\n\t.llms-label {\n\t\tfont-size: 14px;\n\t\twidth: 100%;\n\t\talign-self: flex-start;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}\n\n\t.llms-widget-content {\n\t\tfont-size: 20px;\n\t\tmargin: 0;\n\t}\n\n\t.llms-widget-info-toggle {\n\t\tdisplay: none;\n\t}\n\n\ta {\n\t\tborder: 0;\n\t}\n\n\t.subsubsub {\n\t\tcolor: #dcdcde;\n\t}\n}\n\n.llms-dashboard-widget-feed {\n\tmargin: 0 -12px;\n\tpadding: 0;\n\tbackground-color: #f6f7f7;\n\n\tli {\n\t\tmargin: 0;\n\t\tpadding: 8px 12px;\n\t\tborder-bottom: 1px solid #e8e8e8;\n\t}\n\n\tspan {\n\t\tdisplay: block;\n\t}\n}\n",".wrap.llms-resources {\n\n\t.llms-inside-wrap {\n\t\tpadding-top: 30px;\n\t}\n\n\t#poststuff {\n\n\t\t#post-body.columns-2 {\n\t\t\tmargin-right: 350px;\n\n\t\t\t#side-sortables {\n\t\t\t\twidth: 330px;\n\n\t\t\t\t@media only screen and (max-width: 850px) {\n\t\t\t\t\twidth: auto;\n\t\t\t\t}\t\n\n\t\t\t}\n\n\t\t}\n\n\t\t#postbox-container-1 {\n\t\t\tfloat: right;\n\t\t\tmargin-right: -350px;\n\t\t\twidth: 330px\n\t\t}\n\n\t\th2 {\n\t\t\tpadding: 12px 20px;\n\t\t}\n\n\t}\n\n\t#poststuff \n\t.postbox {\n\t\tbackground-color: #FFF;\n\t\tborder: none;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, 0.13 );\n\n\t\t.postbox-header {\n\t\t\tborder-bottom-color: #efefef;\n\n\t\t}\n\n\t\t.inside {\n\t\t\tmargin: 0;\n\t\t\tpadding: 20px;\n\t\t}\n\t}\n\n\t#llms_dashboard_welcome_video {\n\n\t\t.llms-welcome-video {\n\n\t\t\tp {\n\t\t\t\tfont-size: 15px;\n\t\t\t\tline-height: 1.5;\n\t\t\t\tmargin: 0 0 40px 0;\n\t\t\t}\n\n\t\t\t.llms-welcome-video-container {\n\t\t\t\theight: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\tpadding-top: 30px;\n\t\t\t\tpadding-bottom: 56.25%;\n\t\t\t\tposition: relative;\n\n\t\t\t\tiframe,\n\t\t\t\tobject,\n\t\t\t\tembed {\n\t\t\t\t\tleft: 0;\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop: 0;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t#llms_dashboard_getting_started {\n\n\t\tul {\n\t\t\tmargin: 0 0 20px 0;\n\n\t\t\tli {\n\t\t\t\tfont-size: 15px;\n\t\t\t\tline-height: 1.5;\n\t\t\t\tmargin-bottom: 15px;\n\t\t\t}\n\t\t}\n\n\t\t.llms-button-primary {\n\t\t\tdisplay: block;\n\t\t\tmargin-top: auto;\n\t\t\tmax-width: 300px;\n\t\t\ttext-align: center;\n\t\t}\n\n\t}\n\n\t#llms_dashboard_resource_links {\n\n\t\tul {\n\t\t\tlist-style: disc;\n\t\t\tmargin: 5px 0 0 20px;\n\n\t\t\tli {\n\t\t\t\tfont-size: 15px;\n\t\t\t\tline-height: 1.5;\n\t\t\t}\n\t\t}\n\n\t\t.llms-resource-links {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: 1fr;\n\t\t\tgrid-gap: 60px;\n\n\t\t\ta {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.llms-list {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\n\t\t\t\th3 {\n\t\t\t\t\tmargin: 0 0 10px 0;\n\n\t\t\t\t\t.dashicons {\n\t\t\t\t\t\tcolor: #AAA;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tul {\n\t\t\t\t\tmargin-bottom: 20px;\n\t\t\t\t}\n\n\t\t\t\t.llms-button-primary,\n\t\t\t\t.llms-button-secondary,\n\t\t\t\t.llms-button-action {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tmargin-top: auto;\n\t\t\t\t\tmax-width: 300px;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t@media only screen and (min-width: 782px) {\n\t\t\t\tgrid-template-columns: 1fr 1fr 1fr;\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n",".llms-remarks {\n\n\t.llms-remarks-field {\n\t\theight: 120px;\n\t\twidth: 100%;\n\t}\n\n\tinput[type=\"number\"] {\n\t\twidth: 60px;\n\t}\n\n\n}\n\n\nbutton[name=\"llms_quiz_attempt_action\"] {\n\t.save { display: none; }\n\t&.grading {\n\t\t.default { display: none };\n\t\t.save { display: inline; }\n\t}\n}\n\n",".llms-form-fields {\n\t@extend %clearfix;\n\tbox-sizing: border-box;\n\t& * {\n\t\tbox-sizing: border-box;\n\t}\n\t&.flush {\n\t\t.llms-form-field {\n\t\t\tpadding: 0 0 20px;\n\t\t}\n\t}\n\n\tlabel:not(.llms-field-html label) {\n\t\tfont-weight: 700;\n\t}\n\n\t.wp-block-columns, .wp-block-column {\n\t\tmargin-bottom: 0;\n\t}\n}\n\n\t.llms-form-heading {\n\t\tpadding: 0 10px 10px;\n\t}\n\n\t.llms-form-field {\n\t\tfloat: left;\n\t\tpadding: 0 10px 20px;\n\t\tposition: relative;\n\t\twidth: 100%;\n\n\t\t// Ensure \"empty\" labels don't break the layout.\n\t\t// See the billing_address_2 field which has no label.\n\t\tlabel:empty:after {\n\t\t\tcontent: '\\00a0';\n\t\t}\n\n\t\t[type=\"text\"],\n\t\t[type=\"password\"],\n\t\t[type=\"email\"],\n\t\t[type=\"url\"],\n\t\t[type=\"tel\"],\n\t\t[type=\"number\"] {\n\t\t\tbackground-color: $color-white;\n\t\t\tbackground-clip: padding-box;\n\t\t\tborder: 1px solid $color-grey;\n\t\t\tborder-radius: $radius-small;\n\t\t\tbox-sizing: border-box;\n\t\t\tfont-size: 16px;\n\t\t\tline-height: 1;\n\t\t\tpadding: 8px 12px;\n\t\t\ttransition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tinput:focus,\n\t\tinput:focus-visible {\n\t\t\tborder-color: $color-brand-blue-light;\n\t\t\toutline: thin solid;\n\t\t}\n\n\t\tselect {\n\t\t\t-webkit-appearance: none;\n\t\t\t-moz-appearance: none;\n\t\t\t-ms-appearance: none;\n\t\t\tappearance: none;\n\t\t\tbackground-color: $color-white;\n\t\t\tborder: 1px solid $color-grey;\n\t\t\tborder-radius: $radius-small;\n\t\t\tbox-sizing: border-box;\n\t\t\tcolor: $color-black;\n\t\t\tpadding: 8px 12px;\n\t\t\tmargin: 0;\n\t\t\twidth: 100%;\n\t\t\tfont-family: inherit;\n\t\t\tfont-size: 16px;\n\t\t\tcursor: inherit;\n\t\t\tline-height: 1.6;\n\t\t\tz-index: 1;\n\t\t\toutline: none;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: linear-gradient(45deg, transparent 50%, currentcolor 50%), linear-gradient(135deg, currentcolor 50%, transparent 50%);\n\t\t\tbackground-position: right 15px top 1.3rem, right 10px top 1.3rem;\n\t\t\tbackground-size: 5px 5px, 5px 5px;\n\t\t}\n\n\t\tselect::-ms-expand {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\tselect:focus {\n\t\t\tborder: 1px solid $color-brand-blue-light;\n\t\t\toutline: thin solid;\n\t\t}\n\n\t\t&.valid {\n\t\t\tinput[type=\"date\"], input[type=\"time\"], input[type=\"datetime-local\"], input[type=\"week\"], input[type=\"month\"], input[type=\"text\"], input[type=\"email\"], input[type=\"url\"], input[type=\"password\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"number\"], textarea, select {\n\t\t\t\tbackground: rgba( #83c373, .3 );\n\t\t\t\tborder-color: #83c373;\n\t\t\t}\n\t\t}\n\n\t\t&.error,\n\t\t&.invalid {\n\t\t\tinput[type=\"date\"], input[type=\"time\"], input[type=\"datetime-local\"], input[type=\"week\"], input[type=\"month\"], input[type=\"text\"], input[type=\"email\"], input[type=\"url\"], input[type=\"password\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"number\"], textarea, select {\n\t\t\t\tbackground: rgba( $color-red, .3 );\n\t\t\t\tborder-color: $color-red;\n\t\t\t}\n\t\t}\n\n\t\t&.llms-visually-hidden-field {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&.align-right {\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t@media screen and ( min-width: 600px ) {\n\t\t\t$i: 1;\n\t\t\t@while $i <= 12 {\n\t\t\t\t&.llms-cols-#{$i} {\n\t\t\t\t\twidth: calc( $i / 12 ) * 100%;\n\t\t\t\t\t$i: $i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.type-hidden { padding: 0; }\n\n\t\t&.type-radio,\n\t\t&.type-checkbox {\n\t\t\tinput,\n\t\t\tlabel {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t\tinput {\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\t\t\tlabel + .llms-description {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t}\n\n\t\t&.type-radio:not(.is-group) {\n\n\t\t\tinput[type=\"radio\"] {\n\t\t\t\tposition: absolute;\n\t\t\t\topacity: 0;\n\t\t\t\tvisibility: none;\n\t\t\t}\n\n\t\t\tlabel:before {\n\t\t\t\tbackground: #fafafa;\n\t\t\t\tbackground-position: -24px 0;\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tbox-shadow: hsla( 0,0%,100%,.15) 0 1px 1px, inset hsla(0,0%,0%,.35) 0 0 0 1px;\n\t\t\t\tcontent: '';\n\t\t\t\tcursor: pointer;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\theight: 22px;\n\t\t\t\tmargin-right: 5px;\n\t\t\t\tposition: relative;\n\t\t\t\ttransition: background-position .15s cubic-bezier(.8, 0, 1, 1);\n\t\t\t\ttop: -3px;\n\t\t\t\tvertical-align: middle;\n\t\t\t\twidth: 22px;\n\t\t\t\tz-index: 2;\n\t\t\t}\n\n\t\t\tinput[type=\"radio\"]:checked + label:before {\n\t\t\t\ttransition: background-position .2s .15s cubic-bezier(0, 0, .2, 1);\n\t\t\t\tbackground-position: 0 0;\n\t\t\t\tbackground-image: radial-gradient(ellipse at center, $color-brand-blue 0%,$color-brand-blue 40%, #fafafa 45%);\n\t\t\t}\n\n\t\t}\n\n\t\t.llms-input-group {\n\t\t\tmargin-top: 5px;\n\t\t\t.llms-form-field {\n\t\t\t\tpadding: 0 0 5px 5px;\n\t\t\t}\n\t\t}\n\n\t\t&.type-reset,\n\t\t&.type-button,\n\t\t&.type-submit {\n\t\t\tbutton:not(.auto) { width: 100%; }\n\t\t}\n\n\t\t.llms-description {\n\t\t\tfont-size: 14px;\n\t\t\tfont-style: italic;\n\t\t\tline-height: 18px;\n\t\t}\n\n\t\t.llms-required {\n\t\t\tcolor: $color-red;\n\t\t\tmargin-left: 4px;\n\t\t}\n\n\t\tinput, textarea, select {\n\t\t\twidth: 100%;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.select2-container .select2-selection--single {\n\t\t\theight: auto;\n\t\t\tpadding: 4px 6px;\n\t\t}\n\t\t.select2-container--default .select2-selection--single .select2-selection__arrow {\n\t\t\theight: 100%;\n\t\t}\n\n\t}\n\n\n\t.llms-password-strength-meter {\n\t\tborder: 1px solid #dadada;\n\t\tdisplay: none;\n\t\tfont-size: 10px;\n\t\tmargin-top: -10px;\n\t\tpadding: 1px;\n\t\tposition: relative;\n\t\ttext-align: center;\n\n\t\t&:before {\n\t\t\tbottom: 0;\n\t\t\tcontent: '';\n\t\t\tleft: 0;\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\ttransition: width .4s ease;\n\t\t}\n\n\t\t&.mismatch,\n\t\t&.too-short,\n\t\t&.very-weak {\n\t\t\tborder-color: #e35b5b;\n\t\t\t&:before {\n\t\t\t\tbackground: rgba( #e35b5b, 0.25 );\n\t\t\t\twidth: 25%;\n\t\t\t}\n\t\t}\n\n\t\t&.too-short:before {\n\t\t\twidth: 0;\n\t\t}\n\n\t\t&.weak {\n\t\t\tborder-color: #f78b53;\n\t\t\t&:before {\n\t\t\t\tbackground: rgba( #f78b53, 0.25 );\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\t&.medium {\n\t\t\tborder-color: #ffc733;\n\t\t\t&:before {\n\t\t\t\tbackground: rgba( #ffc733, 0.25 );\n\t\t\t\twidth: 75%;\n\t\t\t}\n\t\t}\n\n\t\t&.strong {\n\t\t\tborder-color: #83c373;\n\t\t\t&:before {\n\t\t\t\tbackground: rgba( #83c373, 0.25 );\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n\t\t+ .llms-description {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n","/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n font-family: 'FontAwesome';\n src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');\n src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n.fa {\n display: inline-block;\n font: normal normal normal 14px/1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n font-size: 1.33333333em;\n line-height: 0.75em;\n vertical-align: -15%;\n}\n.fa-2x {\n font-size: 2em;\n}\n.fa-3x {\n font-size: 3em;\n}\n.fa-4x {\n font-size: 4em;\n}\n.fa-5x {\n font-size: 5em;\n}\n.fa-fw {\n width: 1.28571429em;\n text-align: center;\n}\n.fa-ul {\n padding-left: 0;\n margin-left: 2.14285714em;\n list-style-type: none;\n}\n.fa-ul > li {\n position: relative;\n}\n.fa-li {\n position: absolute;\n left: -2.14285714em;\n width: 2.14285714em;\n top: 0.14285714em;\n text-align: center;\n}\n.fa-li.fa-lg {\n left: -1.85714286em;\n}\n.fa-border {\n padding: .2em .25em .15em;\n border: solid 0.08em #eeeeee;\n border-radius: .1em;\n}\n.fa-pull-left {\n float: left;\n}\n.fa-pull-right {\n float: right;\n}\n.fa.fa-pull-left {\n margin-right: .3em;\n}\n.fa.fa-pull-right {\n margin-left: .3em;\n}\n/* Deprecated as of 4.4.0 */\n.pull-right {\n float: right;\n}\n.pull-left {\n float: left;\n}\n.fa.pull-left {\n margin-right: .3em;\n}\n.fa.pull-right {\n margin-left: .3em;\n}\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n -ms-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n -ms-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n -ms-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n -ms-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n filter: none;\n}\n.fa-stack {\n position: relative;\n display: inline-block;\n width: 2em;\n height: 2em;\n line-height: 2em;\n vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n position: absolute;\n left: 0;\n width: 100%;\n text-align: center;\n}\n.fa-stack-1x {\n line-height: inherit;\n}\n.fa-stack-2x {\n font-size: 2em;\n}\n.fa-inverse {\n color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters that represent icons */\n.fa-glass:before {\n content: \"\\f000\";\n}\n.fa-music:before {\n content: \"\\f001\";\n}\n.fa-search:before {\n content: \"\\f002\";\n}\n.fa-envelope-o:before {\n content: \"\\f003\";\n}\n.fa-heart:before {\n content: \"\\f004\";\n}\n.fa-star:before {\n content: \"\\f005\";\n}\n.fa-star-o:before {\n content: \"\\f006\";\n}\n.fa-user:before {\n content: \"\\f007\";\n}\n.fa-film:before {\n content: \"\\f008\";\n}\n.fa-th-large:before {\n content: \"\\f009\";\n}\n.fa-th:before {\n content: \"\\f00a\";\n}\n.fa-th-list:before {\n content: \"\\f00b\";\n}\n.fa-check:before {\n content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n content: \"\\f00d\";\n}\n.fa-search-plus:before {\n content: \"\\f00e\";\n}\n.fa-search-minus:before {\n content: \"\\f010\";\n}\n.fa-power-off:before {\n content: \"\\f011\";\n}\n.fa-signal:before {\n content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n content: \"\\f013\";\n}\n.fa-trash-o:before {\n content: \"\\f014\";\n}\n.fa-home:before {\n content: \"\\f015\";\n}\n.fa-file-o:before {\n content: \"\\f016\";\n}\n.fa-clock-o:before {\n content: \"\\f017\";\n}\n.fa-road:before {\n content: \"\\f018\";\n}\n.fa-download:before {\n content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n content: \"\\f01b\";\n}\n.fa-inbox:before {\n content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n content: \"\\f01e\";\n}\n.fa-refresh:before {\n content: \"\\f021\";\n}\n.fa-list-alt:before {\n content: \"\\f022\";\n}\n.fa-lock:before {\n content: \"\\f023\";\n}\n.fa-flag:before {\n content: \"\\f024\";\n}\n.fa-headphones:before {\n content: \"\\f025\";\n}\n.fa-volume-off:before {\n content: \"\\f026\";\n}\n.fa-volume-down:before {\n content: \"\\f027\";\n}\n.fa-volume-up:before {\n content: \"\\f028\";\n}\n.fa-qrcode:before {\n content: \"\\f029\";\n}\n.fa-barcode:before {\n content: \"\\f02a\";\n}\n.fa-tag:before {\n content: \"\\f02b\";\n}\n.fa-tags:before {\n content: \"\\f02c\";\n}\n.fa-book:before {\n content: \"\\f02d\";\n}\n.fa-bookmark:before {\n content: \"\\f02e\";\n}\n.fa-print:before {\n content: \"\\f02f\";\n}\n.fa-camera:before {\n content: \"\\f030\";\n}\n.fa-font:before {\n content: \"\\f031\";\n}\n.fa-bold:before {\n content: \"\\f032\";\n}\n.fa-italic:before {\n content: \"\\f033\";\n}\n.fa-text-height:before {\n content: \"\\f034\";\n}\n.fa-text-width:before {\n content: \"\\f035\";\n}\n.fa-align-left:before {\n content: \"\\f036\";\n}\n.fa-align-center:before {\n content: \"\\f037\";\n}\n.fa-align-right:before {\n content: \"\\f038\";\n}\n.fa-align-justify:before {\n content: \"\\f039\";\n}\n.fa-list:before {\n content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n content: \"\\f03b\";\n}\n.fa-indent:before {\n content: \"\\f03c\";\n}\n.fa-video-camera:before {\n content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n content: \"\\f03e\";\n}\n.fa-pencil:before {\n content: \"\\f040\";\n}\n.fa-map-marker:before {\n content: \"\\f041\";\n}\n.fa-adjust:before {\n content: \"\\f042\";\n}\n.fa-tint:before {\n content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n content: \"\\f044\";\n}\n.fa-share-square-o:before {\n content: \"\\f045\";\n}\n.fa-check-square-o:before {\n content: \"\\f046\";\n}\n.fa-arrows:before {\n content: \"\\f047\";\n}\n.fa-step-backward:before {\n content: \"\\f048\";\n}\n.fa-fast-backward:before {\n content: \"\\f049\";\n}\n.fa-backward:before {\n content: \"\\f04a\";\n}\n.fa-play:before {\n content: \"\\f04b\";\n}\n.fa-pause:before {\n content: \"\\f04c\";\n}\n.fa-stop:before {\n content: \"\\f04d\";\n}\n.fa-forward:before {\n content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n content: \"\\f050\";\n}\n.fa-step-forward:before {\n content: \"\\f051\";\n}\n.fa-eject:before {\n content: \"\\f052\";\n}\n.fa-chevron-left:before {\n content: \"\\f053\";\n}\n.fa-chevron-right:before {\n content: \"\\f054\";\n}\n.fa-plus-circle:before {\n content: \"\\f055\";\n}\n.fa-minus-circle:before {\n content: \"\\f056\";\n}\n.fa-times-circle:before {\n content: \"\\f057\";\n}\n.fa-check-circle:before {\n content: \"\\f058\";\n}\n.fa-question-circle:before {\n content: \"\\f059\";\n}\n.fa-info-circle:before {\n content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n content: \"\\f05d\";\n}\n.fa-ban:before {\n content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n content: \"\\f060\";\n}\n.fa-arrow-right:before {\n content: \"\\f061\";\n}\n.fa-arrow-up:before {\n content: \"\\f062\";\n}\n.fa-arrow-down:before {\n content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n content: \"\\f064\";\n}\n.fa-expand:before {\n content: \"\\f065\";\n}\n.fa-compress:before {\n content: \"\\f066\";\n}\n.fa-plus:before {\n content: \"\\f067\";\n}\n.fa-minus:before {\n content: \"\\f068\";\n}\n.fa-asterisk:before {\n content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n content: \"\\f06a\";\n}\n.fa-gift:before {\n content: \"\\f06b\";\n}\n.fa-leaf:before {\n content: \"\\f06c\";\n}\n.fa-fire:before {\n content: \"\\f06d\";\n}\n.fa-eye:before {\n content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n content: \"\\f071\";\n}\n.fa-plane:before {\n content: \"\\f072\";\n}\n.fa-calendar:before {\n content: \"\\f073\";\n}\n.fa-random:before {\n content: \"\\f074\";\n}\n.fa-comment:before {\n content: \"\\f075\";\n}\n.fa-magnet:before {\n content: \"\\f076\";\n}\n.fa-chevron-up:before {\n content: \"\\f077\";\n}\n.fa-chevron-down:before {\n content: \"\\f078\";\n}\n.fa-retweet:before {\n content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n content: \"\\f07a\";\n}\n.fa-folder:before {\n content: \"\\f07b\";\n}\n.fa-folder-open:before {\n content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n content: \"\\f080\";\n}\n.fa-twitter-square:before {\n content: \"\\f081\";\n}\n.fa-facebook-square:before {\n content: \"\\f082\";\n}\n.fa-camera-retro:before {\n content: \"\\f083\";\n}\n.fa-key:before {\n content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n content: \"\\f085\";\n}\n.fa-comments:before {\n content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n content: \"\\f088\";\n}\n.fa-star-half:before {\n content: \"\\f089\";\n}\n.fa-heart-o:before {\n content: \"\\f08a\";\n}\n.fa-sign-out:before {\n content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n content: \"\\f08d\";\n}\n.fa-external-link:before {\n content: \"\\f08e\";\n}\n.fa-sign-in:before {\n content: \"\\f090\";\n}\n.fa-trophy:before {\n content: \"\\f091\";\n}\n.fa-github-square:before {\n content: \"\\f092\";\n}\n.fa-upload:before {\n content: \"\\f093\";\n}\n.fa-lemon-o:before {\n content: \"\\f094\";\n}\n.fa-phone:before {\n content: \"\\f095\";\n}\n.fa-square-o:before {\n content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n content: \"\\f097\";\n}\n.fa-phone-square:before {\n content: \"\\f098\";\n}\n.fa-twitter:before {\n content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n content: \"\\f09a\";\n}\n.fa-github:before {\n content: \"\\f09b\";\n}\n.fa-unlock:before {\n content: \"\\f09c\";\n}\n.fa-credit-card:before {\n content: \"\\f09d\";\n}\n.fa-feed:before,\n.fa-rss:before {\n content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n content: \"\\f0a1\";\n}\n.fa-bell:before {\n content: \"\\f0f3\";\n}\n.fa-certificate:before {\n content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n content: \"\\f0ab\";\n}\n.fa-globe:before {\n content: \"\\f0ac\";\n}\n.fa-wrench:before {\n content: \"\\f0ad\";\n}\n.fa-tasks:before {\n content: \"\\f0ae\";\n}\n.fa-filter:before {\n content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n content: \"\\f0c1\";\n}\n.fa-cloud:before {\n content: \"\\f0c2\";\n}\n.fa-flask:before {\n content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n content: \"\\f0c7\";\n}\n.fa-square:before {\n content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n content: \"\\f0cc\";\n}\n.fa-underline:before {\n content: \"\\f0cd\";\n}\n.fa-table:before {\n content: \"\\f0ce\";\n}\n.fa-magic:before {\n content: \"\\f0d0\";\n}\n.fa-truck:before {\n content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n content: \"\\f0d5\";\n}\n.fa-money:before {\n content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n content: \"\\f0da\";\n}\n.fa-columns:before {\n content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n content: \"\\f0de\";\n}\n.fa-envelope:before {\n content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n content: \"\\f0eb\";\n}\n.fa-exchange:before {\n content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n content: \"\\f0ee\";\n}\n.fa-user-md:before {\n content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n content: \"\\f0a2\";\n}\n.fa-coffee:before {\n content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n content: \"\\f0f6\";\n}\n.fa-building-o:before {\n content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n content: \"\\f0f9\";\n}\n.fa-medkit:before {\n content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n content: \"\\f0fb\";\n}\n.fa-beer:before {\n content: \"\\f0fc\";\n}\n.fa-h-square:before {\n content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n content: \"\\f103\";\n}\n.fa-angle-left:before {\n content: \"\\f104\";\n}\n.fa-angle-right:before {\n content: \"\\f105\";\n}\n.fa-angle-up:before {\n content: \"\\f106\";\n}\n.fa-angle-down:before {\n content: \"\\f107\";\n}\n.fa-desktop:before {\n content: \"\\f108\";\n}\n.fa-laptop:before {\n content: \"\\f109\";\n}\n.fa-tablet:before {\n content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n content: \"\\f10b\";\n}\n.fa-circle-o:before {\n content: \"\\f10c\";\n}\n.fa-quote-left:before {\n content: \"\\f10d\";\n}\n.fa-quote-right:before {\n content: \"\\f10e\";\n}\n.fa-spinner:before {\n content: \"\\f110\";\n}\n.fa-circle:before {\n content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n content: \"\\f112\";\n}\n.fa-github-alt:before {\n content: \"\\f113\";\n}\n.fa-folder-o:before {\n content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n content: \"\\f115\";\n}\n.fa-smile-o:before {\n content: \"\\f118\";\n}\n.fa-frown-o:before {\n content: \"\\f119\";\n}\n.fa-meh-o:before {\n content: \"\\f11a\";\n}\n.fa-gamepad:before {\n content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n content: \"\\f11c\";\n}\n.fa-flag-o:before {\n content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n content: \"\\f11e\";\n}\n.fa-terminal:before {\n content: \"\\f120\";\n}\n.fa-code:before {\n content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n content: \"\\f123\";\n}\n.fa-location-arrow:before {\n content: \"\\f124\";\n}\n.fa-crop:before {\n content: \"\\f125\";\n}\n.fa-code-fork:before {\n content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n content: \"\\f127\";\n}\n.fa-question:before {\n content: \"\\f128\";\n}\n.fa-info:before {\n content: \"\\f129\";\n}\n.fa-exclamation:before {\n content: \"\\f12a\";\n}\n.fa-superscript:before {\n content: \"\\f12b\";\n}\n.fa-subscript:before {\n content: \"\\f12c\";\n}\n.fa-eraser:before {\n content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n content: \"\\f12e\";\n}\n.fa-microphone:before {\n content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n content: \"\\f131\";\n}\n.fa-shield:before {\n content: \"\\f132\";\n}\n.fa-calendar-o:before {\n content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n content: \"\\f134\";\n}\n.fa-rocket:before {\n content: \"\\f135\";\n}\n.fa-maxcdn:before {\n content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n content: \"\\f13a\";\n}\n.fa-html5:before {\n content: \"\\f13b\";\n}\n.fa-css3:before {\n content: \"\\f13c\";\n}\n.fa-anchor:before {\n content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n content: \"\\f13e\";\n}\n.fa-bullseye:before {\n content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n content: \"\\f142\";\n}\n.fa-rss-square:before {\n content: \"\\f143\";\n}\n.fa-play-circle:before {\n content: \"\\f144\";\n}\n.fa-ticket:before {\n content: \"\\f145\";\n}\n.fa-minus-square:before {\n content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n content: \"\\f147\";\n}\n.fa-level-up:before {\n content: \"\\f148\";\n}\n.fa-level-down:before {\n content: \"\\f149\";\n}\n.fa-check-square:before {\n content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n content: \"\\f14c\";\n}\n.fa-share-square:before {\n content: \"\\f14d\";\n}\n.fa-compass:before {\n content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n content: \"\\f153\";\n}\n.fa-gbp:before {\n content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n content: \"\\f15a\";\n}\n.fa-file:before {\n content: \"\\f15b\";\n}\n.fa-file-text:before {\n content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n content: \"\\f165\";\n}\n.fa-youtube-square:before {\n content: \"\\f166\";\n}\n.fa-youtube:before {\n content: \"\\f167\";\n}\n.fa-xing:before {\n content: \"\\f168\";\n}\n.fa-xing-square:before {\n content: \"\\f169\";\n}\n.fa-youtube-play:before {\n content: \"\\f16a\";\n}\n.fa-dropbox:before {\n content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n content: \"\\f16c\";\n}\n.fa-instagram:before {\n content: \"\\f16d\";\n}\n.fa-flickr:before {\n content: \"\\f16e\";\n}\n.fa-adn:before {\n content: \"\\f170\";\n}\n.fa-bitbucket:before {\n content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n content: \"\\f172\";\n}\n.fa-tumblr:before {\n content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n content: \"\\f178\";\n}\n.fa-apple:before {\n content: \"\\f179\";\n}\n.fa-windows:before {\n content: \"\\f17a\";\n}\n.fa-android:before {\n content: \"\\f17b\";\n}\n.fa-linux:before {\n content: \"\\f17c\";\n}\n.fa-dribbble:before {\n content: \"\\f17d\";\n}\n.fa-skype:before {\n content: \"\\f17e\";\n}\n.fa-foursquare:before {\n content: \"\\f180\";\n}\n.fa-trello:before {\n content: \"\\f181\";\n}\n.fa-female:before {\n content: \"\\f182\";\n}\n.fa-male:before {\n content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n content: \"\\f184\";\n}\n.fa-sun-o:before {\n content: \"\\f185\";\n}\n.fa-moon-o:before {\n content: \"\\f186\";\n}\n.fa-archive:before {\n content: \"\\f187\";\n}\n.fa-bug:before {\n content: \"\\f188\";\n}\n.fa-vk:before {\n content: \"\\f189\";\n}\n.fa-weibo:before {\n content: \"\\f18a\";\n}\n.fa-renren:before {\n content: \"\\f18b\";\n}\n.fa-pagelines:before {\n content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n content: \"\\f192\";\n}\n.fa-wheelchair:before {\n content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n content: \"\\f197\";\n}\n.fa-slack:before {\n content: \"\\f198\";\n}\n.fa-envelope-square:before {\n content: \"\\f199\";\n}\n.fa-wordpress:before {\n content: \"\\f19a\";\n}\n.fa-openid:before {\n content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n content: \"\\f19d\";\n}\n.fa-yahoo:before {\n content: \"\\f19e\";\n}\n.fa-google:before {\n content: \"\\f1a0\";\n}\n.fa-reddit:before {\n content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n content: \"\\f1a4\";\n}\n.fa-delicious:before {\n content: \"\\f1a5\";\n}\n.fa-digg:before {\n content: \"\\f1a6\";\n}\n.fa-pied-piper-pp:before {\n content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n content: \"\\f1a8\";\n}\n.fa-drupal:before {\n content: \"\\f1a9\";\n}\n.fa-joomla:before {\n content: \"\\f1aa\";\n}\n.fa-language:before {\n content: \"\\f1ab\";\n}\n.fa-fax:before {\n content: \"\\f1ac\";\n}\n.fa-building:before {\n content: \"\\f1ad\";\n}\n.fa-child:before {\n content: \"\\f1ae\";\n}\n.fa-paw:before {\n content: \"\\f1b0\";\n}\n.fa-spoon:before {\n content: \"\\f1b1\";\n}\n.fa-cube:before {\n content: \"\\f1b2\";\n}\n.fa-cubes:before {\n content: \"\\f1b3\";\n}\n.fa-behance:before {\n content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n content: \"\\f1b5\";\n}\n.fa-steam:before {\n content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n content: \"\\f1b7\";\n}\n.fa-recycle:before {\n content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n content: \"\\f1ba\";\n}\n.fa-tree:before {\n content: \"\\f1bb\";\n}\n.fa-spotify:before {\n content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n content: \"\\f1be\";\n}\n.fa-database:before {\n content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n content: \"\\f1c9\";\n}\n.fa-vine:before {\n content: \"\\f1ca\";\n}\n.fa-codepen:before {\n content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n content: \"\\f1d1\";\n}\n.fa-git-square:before {\n content: \"\\f1d2\";\n}\n.fa-git:before {\n content: \"\\f1d3\";\n}\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n content: \"\\f1d5\";\n}\n.fa-qq:before {\n content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n content: \"\\f1d9\";\n}\n.fa-history:before {\n content: \"\\f1da\";\n}\n.fa-circle-thin:before {\n content: \"\\f1db\";\n}\n.fa-header:before {\n content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n content: \"\\f1dd\";\n}\n.fa-sliders:before {\n content: \"\\f1de\";\n}\n.fa-share-alt:before {\n content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n content: \"\\f1e1\";\n}\n.fa-bomb:before {\n content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n content: \"\\f1e3\";\n}\n.fa-tty:before {\n content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n content: \"\\f1e5\";\n}\n.fa-plug:before {\n content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n content: \"\\f1e7\";\n}\n.fa-twitch:before {\n content: \"\\f1e8\";\n}\n.fa-yelp:before {\n content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n content: \"\\f1ea\";\n}\n.fa-wifi:before {\n content: \"\\f1eb\";\n}\n.fa-calculator:before {\n content: \"\\f1ec\";\n}\n.fa-paypal:before {\n content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n content: \"\\f1f7\";\n}\n.fa-trash:before {\n content: \"\\f1f8\";\n}\n.fa-copyright:before {\n content: \"\\f1f9\";\n}\n.fa-at:before {\n content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n content: \"\\f200\";\n}\n.fa-line-chart:before {\n content: \"\\f201\";\n}\n.fa-lastfm:before {\n content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n content: \"\\f203\";\n}\n.fa-toggle-off:before {\n content: \"\\f204\";\n}\n.fa-toggle-on:before {\n content: \"\\f205\";\n}\n.fa-bicycle:before {\n content: \"\\f206\";\n}\n.fa-bus:before {\n content: \"\\f207\";\n}\n.fa-ioxhost:before {\n content: \"\\f208\";\n}\n.fa-angellist:before {\n content: \"\\f209\";\n}\n.fa-cc:before {\n content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n content: \"\\f20b\";\n}\n.fa-meanpath:before {\n content: \"\\f20c\";\n}\n.fa-buysellads:before {\n content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n content: \"\\f20e\";\n}\n.fa-dashcube:before {\n content: \"\\f210\";\n}\n.fa-forumbee:before {\n content: \"\\f211\";\n}\n.fa-leanpub:before {\n content: \"\\f212\";\n}\n.fa-sellsy:before {\n content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n content: \"\\f215\";\n}\n.fa-skyatlas:before {\n content: \"\\f216\";\n}\n.fa-cart-plus:before {\n content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n content: \"\\f218\";\n}\n.fa-diamond:before {\n content: \"\\f219\";\n}\n.fa-ship:before {\n content: \"\\f21a\";\n}\n.fa-user-secret:before {\n content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n content: \"\\f21c\";\n}\n.fa-street-view:before {\n content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n content: \"\\f21e\";\n}\n.fa-venus:before {\n content: \"\\f221\";\n}\n.fa-mars:before {\n content: \"\\f222\";\n}\n.fa-mercury:before {\n content: \"\\f223\";\n}\n.fa-intersex:before,\n.fa-transgender:before {\n content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n content: \"\\f225\";\n}\n.fa-venus-double:before {\n content: \"\\f226\";\n}\n.fa-mars-double:before {\n content: \"\\f227\";\n}\n.fa-venus-mars:before {\n content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n content: \"\\f22b\";\n}\n.fa-neuter:before {\n content: \"\\f22c\";\n}\n.fa-genderless:before {\n content: \"\\f22d\";\n}\n.fa-facebook-official:before {\n content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n content: \"\\f231\";\n}\n.fa-whatsapp:before {\n content: \"\\f232\";\n}\n.fa-server:before {\n content: \"\\f233\";\n}\n.fa-user-plus:before {\n content: \"\\f234\";\n}\n.fa-user-times:before {\n content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n content: \"\\f236\";\n}\n.fa-viacoin:before {\n content: \"\\f237\";\n}\n.fa-train:before {\n content: \"\\f238\";\n}\n.fa-subway:before {\n content: \"\\f239\";\n}\n.fa-medium:before {\n content: \"\\f23a\";\n}\n.fa-yc:before,\n.fa-y-combinator:before {\n content: \"\\f23b\";\n}\n.fa-optin-monster:before {\n content: \"\\f23c\";\n}\n.fa-opencart:before {\n content: \"\\f23d\";\n}\n.fa-expeditedssl:before {\n content: \"\\f23e\";\n}\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n content: \"\\f240\";\n}\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n content: \"\\f241\";\n}\n.fa-battery-2:before,\n.fa-battery-half:before {\n content: \"\\f242\";\n}\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n content: \"\\f243\";\n}\n.fa-battery-0:before,\n.fa-battery-empty:before {\n content: \"\\f244\";\n}\n.fa-mouse-pointer:before {\n content: \"\\f245\";\n}\n.fa-i-cursor:before {\n content: \"\\f246\";\n}\n.fa-object-group:before {\n content: \"\\f247\";\n}\n.fa-object-ungroup:before {\n content: \"\\f248\";\n}\n.fa-sticky-note:before {\n content: \"\\f249\";\n}\n.fa-sticky-note-o:before {\n content: \"\\f24a\";\n}\n.fa-cc-jcb:before {\n content: \"\\f24b\";\n}\n.fa-cc-diners-club:before {\n content: \"\\f24c\";\n}\n.fa-clone:before {\n content: \"\\f24d\";\n}\n.fa-balance-scale:before {\n content: \"\\f24e\";\n}\n.fa-hourglass-o:before {\n content: \"\\f250\";\n}\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n content: \"\\f251\";\n}\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n content: \"\\f252\";\n}\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n content: \"\\f253\";\n}\n.fa-hourglass:before {\n content: \"\\f254\";\n}\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n content: \"\\f255\";\n}\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n content: \"\\f256\";\n}\n.fa-hand-scissors-o:before {\n content: \"\\f257\";\n}\n.fa-hand-lizard-o:before {\n content: \"\\f258\";\n}\n.fa-hand-spock-o:before {\n content: \"\\f259\";\n}\n.fa-hand-pointer-o:before {\n content: \"\\f25a\";\n}\n.fa-hand-peace-o:before {\n content: \"\\f25b\";\n}\n.fa-trademark:before {\n content: \"\\f25c\";\n}\n.fa-registered:before {\n content: \"\\f25d\";\n}\n.fa-creative-commons:before {\n content: \"\\f25e\";\n}\n.fa-gg:before {\n content: \"\\f260\";\n}\n.fa-gg-circle:before {\n content: \"\\f261\";\n}\n.fa-tripadvisor:before {\n content: \"\\f262\";\n}\n.fa-odnoklassniki:before {\n content: \"\\f263\";\n}\n.fa-odnoklassniki-square:before {\n content: \"\\f264\";\n}\n.fa-get-pocket:before {\n content: \"\\f265\";\n}\n.fa-wikipedia-w:before {\n content: \"\\f266\";\n}\n.fa-safari:before {\n content: \"\\f267\";\n}\n.fa-chrome:before {\n content: \"\\f268\";\n}\n.fa-firefox:before {\n content: \"\\f269\";\n}\n.fa-opera:before {\n content: \"\\f26a\";\n}\n.fa-internet-explorer:before {\n content: \"\\f26b\";\n}\n.fa-tv:before,\n.fa-television:before {\n content: \"\\f26c\";\n}\n.fa-contao:before {\n content: \"\\f26d\";\n}\n.fa-500px:before {\n content: \"\\f26e\";\n}\n.fa-amazon:before {\n content: \"\\f270\";\n}\n.fa-calendar-plus-o:before {\n content: \"\\f271\";\n}\n.fa-calendar-minus-o:before {\n content: \"\\f272\";\n}\n.fa-calendar-times-o:before {\n content: \"\\f273\";\n}\n.fa-calendar-check-o:before {\n content: \"\\f274\";\n}\n.fa-industry:before {\n content: \"\\f275\";\n}\n.fa-map-pin:before {\n content: \"\\f276\";\n}\n.fa-map-signs:before {\n content: \"\\f277\";\n}\n.fa-map-o:before {\n content: \"\\f278\";\n}\n.fa-map:before {\n content: \"\\f279\";\n}\n.fa-commenting:before {\n content: \"\\f27a\";\n}\n.fa-commenting-o:before {\n content: \"\\f27b\";\n}\n.fa-houzz:before {\n content: \"\\f27c\";\n}\n.fa-vimeo:before {\n content: \"\\f27d\";\n}\n.fa-black-tie:before {\n content: \"\\f27e\";\n}\n.fa-fonticons:before {\n content: \"\\f280\";\n}\n.fa-reddit-alien:before {\n content: \"\\f281\";\n}\n.fa-edge:before {\n content: \"\\f282\";\n}\n.fa-credit-card-alt:before {\n content: \"\\f283\";\n}\n.fa-codiepie:before {\n content: \"\\f284\";\n}\n.fa-modx:before {\n content: \"\\f285\";\n}\n.fa-fort-awesome:before {\n content: \"\\f286\";\n}\n.fa-usb:before {\n content: \"\\f287\";\n}\n.fa-product-hunt:before {\n content: \"\\f288\";\n}\n.fa-mixcloud:before {\n content: \"\\f289\";\n}\n.fa-scribd:before {\n content: \"\\f28a\";\n}\n.fa-pause-circle:before {\n content: \"\\f28b\";\n}\n.fa-pause-circle-o:before {\n content: \"\\f28c\";\n}\n.fa-stop-circle:before {\n content: \"\\f28d\";\n}\n.fa-stop-circle-o:before {\n content: \"\\f28e\";\n}\n.fa-shopping-bag:before {\n content: \"\\f290\";\n}\n.fa-shopping-basket:before {\n content: \"\\f291\";\n}\n.fa-hashtag:before {\n content: \"\\f292\";\n}\n.fa-bluetooth:before {\n content: \"\\f293\";\n}\n.fa-bluetooth-b:before {\n content: \"\\f294\";\n}\n.fa-percent:before {\n content: \"\\f295\";\n}\n.fa-gitlab:before {\n content: \"\\f296\";\n}\n.fa-wpbeginner:before {\n content: \"\\f297\";\n}\n.fa-wpforms:before {\n content: \"\\f298\";\n}\n.fa-envira:before {\n content: \"\\f299\";\n}\n.fa-universal-access:before {\n content: \"\\f29a\";\n}\n.fa-wheelchair-alt:before {\n content: \"\\f29b\";\n}\n.fa-question-circle-o:before {\n content: \"\\f29c\";\n}\n.fa-blind:before {\n content: \"\\f29d\";\n}\n.fa-audio-description:before {\n content: \"\\f29e\";\n}\n.fa-volume-control-phone:before {\n content: \"\\f2a0\";\n}\n.fa-braille:before {\n content: \"\\f2a1\";\n}\n.fa-assistive-listening-systems:before {\n content: \"\\f2a2\";\n}\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n content: \"\\f2a3\";\n}\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n content: \"\\f2a4\";\n}\n.fa-glide:before {\n content: \"\\f2a5\";\n}\n.fa-glide-g:before {\n content: \"\\f2a6\";\n}\n.fa-signing:before,\n.fa-sign-language:before {\n content: \"\\f2a7\";\n}\n.fa-low-vision:before {\n content: \"\\f2a8\";\n}\n.fa-viadeo:before {\n content: \"\\f2a9\";\n}\n.fa-viadeo-square:before {\n content: \"\\f2aa\";\n}\n.fa-snapchat:before {\n content: \"\\f2ab\";\n}\n.fa-snapchat-ghost:before {\n content: \"\\f2ac\";\n}\n.fa-snapchat-square:before {\n content: \"\\f2ad\";\n}\n.fa-pied-piper:before {\n content: \"\\f2ae\";\n}\n.fa-first-order:before {\n content: \"\\f2b0\";\n}\n.fa-yoast:before {\n content: \"\\f2b1\";\n}\n.fa-themeisle:before {\n content: \"\\f2b2\";\n}\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n content: \"\\f2b3\";\n}\n.fa-fa:before,\n.fa-font-awesome:before {\n content: \"\\f2b4\";\n}\n.fa-handshake-o:before {\n content: \"\\f2b5\";\n}\n.fa-envelope-open:before {\n content: \"\\f2b6\";\n}\n.fa-envelope-open-o:before {\n content: \"\\f2b7\";\n}\n.fa-linode:before {\n content: \"\\f2b8\";\n}\n.fa-address-book:before {\n content: \"\\f2b9\";\n}\n.fa-address-book-o:before {\n content: \"\\f2ba\";\n}\n.fa-vcard:before,\n.fa-address-card:before {\n content: \"\\f2bb\";\n}\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n content: \"\\f2bc\";\n}\n.fa-user-circle:before {\n content: \"\\f2bd\";\n}\n.fa-user-circle-o:before {\n content: \"\\f2be\";\n}\n.fa-user-o:before {\n content: \"\\f2c0\";\n}\n.fa-id-badge:before {\n content: \"\\f2c1\";\n}\n.fa-drivers-license:before,\n.fa-id-card:before {\n content: \"\\f2c2\";\n}\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n content: \"\\f2c3\";\n}\n.fa-quora:before {\n content: \"\\f2c4\";\n}\n.fa-free-code-camp:before {\n content: \"\\f2c5\";\n}\n.fa-telegram:before {\n content: \"\\f2c6\";\n}\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n content: \"\\f2c7\";\n}\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n content: \"\\f2c8\";\n}\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n content: \"\\f2c9\";\n}\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n content: \"\\f2ca\";\n}\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n content: \"\\f2cb\";\n}\n.fa-shower:before {\n content: \"\\f2cc\";\n}\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n content: \"\\f2cd\";\n}\n.fa-podcast:before {\n content: \"\\f2ce\";\n}\n.fa-window-maximize:before {\n content: \"\\f2d0\";\n}\n.fa-window-minimize:before {\n content: \"\\f2d1\";\n}\n.fa-window-restore:before {\n content: \"\\f2d2\";\n}\n.fa-times-rectangle:before,\n.fa-window-close:before {\n content: \"\\f2d3\";\n}\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n content: \"\\f2d4\";\n}\n.fa-bandcamp:before {\n content: \"\\f2d5\";\n}\n.fa-grav:before {\n content: \"\\f2d6\";\n}\n.fa-etsy:before {\n content: \"\\f2d7\";\n}\n.fa-imdb:before {\n content: \"\\f2d8\";\n}\n.fa-ravelry:before {\n content: \"\\f2d9\";\n}\n.fa-eercast:before {\n content: \"\\f2da\";\n}\n.fa-microchip:before {\n content: \"\\f2db\";\n}\n.fa-snowflake-o:before {\n content: \"\\f2dc\";\n}\n.fa-superpowers:before {\n content: \"\\f2dd\";\n}\n.fa-wpexplorer:before {\n content: \"\\f2de\";\n}\n.fa-meetup:before {\n content: \"\\f2e0\";\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n"],"sourceRoot":"../../scss"}
\ No newline at end of file
diff --git a/assets/maps/css/admin.min.css.map b/assets/maps/css/admin.min.css.map
new file mode 100644
index 0000000000..fb1e7efe76
--- /dev/null
+++ b/assets/maps/css/admin.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["admin.css"],"names":[],"mappings":"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","file":"../../css/admin.min.css","sourcesContent":["@charset \"UTF-8\";\n#poststuff .llms-metabox:before, #poststuff .llms-metabox:after,\n.llms-form-fields:before,\n.llms-metabox .llms-access-plans:before,\n.llms-collapsible .llms-collapsible-body:before,\n.llms-collapsible .llms-collapsible-header:before,\n.llms-collapsible:before,\n.llms-form-fields:after,\n.llms-metabox .llms-access-plans:after,\n.llms-collapsible .llms-collapsible-body:after,\n.llms-collapsible .llms-collapsible-header:after,\n.llms-collapsible:after {\n content: \" \";\n display: table;\n}\n#poststuff .llms-metabox:after,\n.llms-form-fields:after,\n.llms-metabox .llms-access-plans:after,\n.llms-collapsible .llms-collapsible-body:after,\n.llms-collapsible .llms-collapsible-header:after,\n.llms-collapsible:after {\n clear: both;\n}\n\n.llms-button-action,\n.llms-button-danger,\n.llms-button-primary,\n.llms-button-secondary {\n border: none;\n border-radius: 8px;\n color: #fefefe;\n cursor: pointer;\n display: inline-block;\n font-size: 18px;\n font-weight: 700;\n text-decoration: none;\n text-shadow: none;\n line-height: 1;\n margin: 0;\n max-width: 100%;\n padding: 12px 24px;\n position: relative;\n -webkit-transition: all 0.5s ease;\n transition: all 0.5s ease;\n}\n.llms-button-action:disabled,\n.llms-button-danger:disabled,\n.llms-button-primary:disabled,\n.llms-button-secondary:disabled {\n opacity: 0.5;\n}\n.llms-button-action:hover, .llms-button-action:active,\n.llms-button-danger:hover,\n.llms-button-danger:active,\n.llms-button-primary:hover,\n.llms-button-primary:active,\n.llms-button-secondary:hover,\n.llms-button-secondary:active {\n color: #fefefe;\n}\n.llms-button-action:focus,\n.llms-button-danger:focus,\n.llms-button-primary:focus,\n.llms-button-secondary:focus {\n color: #fefefe;\n}\n.llms-button-action.auto,\n.llms-button-danger.auto,\n.llms-button-primary.auto,\n.llms-button-secondary.auto {\n width: auto;\n}\n.llms-button-action.full,\n.llms-button-danger.full,\n.llms-button-primary.full,\n.llms-button-secondary.full {\n display: block;\n text-align: center;\n width: 100%;\n}\n.llms-button-action.square,\n.llms-button-danger.square,\n.llms-button-primary.square,\n.llms-button-secondary.square {\n padding: 12px;\n}\n.llms-button-action.small,\n.llms-button-danger.small,\n.llms-button-primary.small,\n.llms-button-secondary.small {\n font-size: 13px;\n padding: 8px 14px;\n}\n.llms-button-action.small.square,\n.llms-button-danger.small.square,\n.llms-button-primary.small.square,\n.llms-button-secondary.small.square {\n padding: 8px;\n}\n.llms-button-action.large,\n.llms-button-danger.large,\n.llms-button-primary.large,\n.llms-button-secondary.large {\n font-size: 18px;\n line-height: 1.2;\n padding: 16px 32px;\n}\n.llms-button-action.large.square,\n.llms-button-danger.large.square,\n.llms-button-primary.large.square,\n.llms-button-secondary.large.square {\n padding: 16px;\n}\n.llms-button-action.large .fa,\n.llms-button-danger.large .fa,\n.llms-button-primary.large .fa,\n.llms-button-secondary.large .fa {\n left: -7px;\n position: relative;\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-action,\na.llms-button-danger,\na.llms-button-primary {\n color: #fefefe;\n}\n\n.llms-button-primary {\n background: #466dd8;\n}\n.llms-button-primary:hover, .llms-button-primary.clicked {\n background: #2b55cb;\n}\n.llms-button-primary:focus, .llms-button-primary:active {\n background: #6888df;\n}\n\n.llms-button-secondary {\n background: #e1e1e1;\n color: #444;\n}\n.llms-button-secondary:hover {\n color: #414141;\n background: #cdcdcd;\n}\n.llms-button-secondary:focus, .llms-button-secondary:active {\n color: #414141;\n background: #ebebeb;\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-secondary {\n color: #444;\n}\n\n.llms-button-action {\n background: #c05621;\n}\n.llms-button-action:hover, .llms-button-action.clicked {\n background: #f67d28;\n}\n.llms-button-action:focus, .llms-button-action:active {\n background: #faad76;\n}\n\n.llms-button-danger {\n background: #bb231c;\n}\n.llms-button-danger:hover {\n background: #981c17;\n}\n.llms-button-danger:focus, .llms-button-danger:active {\n background: #cd261f;\n}\n\n.llms-button-outline {\n background: transparent;\n border: 3px solid #1D2327;\n border-radius: 8px;\n color: #1D2327;\n cursor: pointer;\n font-size: 16px;\n font-weight: 700;\n text-decoration: none;\n text-shadow: none;\n line-height: 1;\n margin: 0;\n max-width: 100%;\n padding: 12px 24px;\n position: relative;\n -webkit-transition: all 0.5s ease;\n transition: all 0.5s ease;\n}\n.llms-button-outline:disabled {\n opacity: 0.5;\n}\n.llms-button-outline:hover, .llms-button-outline:active {\n color: #1D2327;\n}\n.llms-button-outline:focus {\n color: #1D2327;\n}\n.llms-button-outline.auto {\n width: auto;\n}\n.llms-button-outline.full {\n display: block;\n text-align: center;\n width: 100%;\n}\n.llms-button-outline.square {\n padding: 12px;\n}\n\n.llms-course-continue-button {\n display: inline-block;\n}\n\n.lifterlms [data-tip],\n.lifterlms [data-title-default],\n.lifterlms [data-title-active],\n.llms-metabox [data-tip],\n.llms-metabox [data-title-default],\n.llms-metabox [data-title-active],\n.llms-mb-container [data-tip],\n.llms-mb-container [data-title-default],\n.llms-mb-container [data-title-active],\n.llms-quiz-wrapper [data-tip],\n.llms-quiz-wrapper [data-title-default],\n.llms-quiz-wrapper [data-title-active] {\n position: relative;\n}\n.lifterlms [data-tip].tip--top-right:before,\n.lifterlms [data-title-default].tip--top-right:before,\n.lifterlms [data-title-active].tip--top-right:before,\n.llms-metabox [data-tip].tip--top-right:before,\n.llms-metabox [data-title-default].tip--top-right:before,\n.llms-metabox [data-title-active].tip--top-right:before,\n.llms-mb-container [data-tip].tip--top-right:before,\n.llms-mb-container [data-title-default].tip--top-right:before,\n.llms-mb-container [data-title-active].tip--top-right:before,\n.llms-quiz-wrapper [data-tip].tip--top-right:before,\n.llms-quiz-wrapper [data-title-default].tip--top-right:before,\n.llms-quiz-wrapper [data-title-active].tip--top-right:before {\n bottom: 100%;\n left: -10px;\n}\n.lifterlms [data-tip].tip--top-right:hover:before,\n.lifterlms [data-title-default].tip--top-right:hover:before,\n.lifterlms [data-title-active].tip--top-right:hover:before,\n.llms-metabox [data-tip].tip--top-right:hover:before,\n.llms-metabox [data-title-default].tip--top-right:hover:before,\n.llms-metabox [data-title-active].tip--top-right:hover:before,\n.llms-mb-container [data-tip].tip--top-right:hover:before,\n.llms-mb-container [data-title-default].tip--top-right:hover:before,\n.llms-mb-container [data-title-active].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before {\n bottom: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--top-right:after,\n.lifterlms [data-title-default].tip--top-right:after,\n.lifterlms [data-title-active].tip--top-right:after,\n.llms-metabox [data-tip].tip--top-right:after,\n.llms-metabox [data-title-default].tip--top-right:after,\n.llms-metabox [data-title-active].tip--top-right:after,\n.llms-mb-container [data-tip].tip--top-right:after,\n.llms-mb-container [data-title-default].tip--top-right:after,\n.llms-mb-container [data-title-active].tip--top-right:after,\n.llms-quiz-wrapper [data-tip].tip--top-right:after,\n.llms-quiz-wrapper [data-title-default].tip--top-right:after,\n.llms-quiz-wrapper [data-title-active].tip--top-right:after {\n border-top-color: #444;\n left: 6px;\n top: 0;\n}\n.lifterlms [data-tip].tip--top-right:hover:after,\n.lifterlms [data-title-default].tip--top-right:hover:after,\n.lifterlms [data-title-active].tip--top-right:hover:after,\n.llms-metabox [data-tip].tip--top-right:hover:after,\n.llms-metabox [data-title-default].tip--top-right:hover:after,\n.llms-metabox [data-title-active].tip--top-right:hover:after,\n.llms-mb-container [data-tip].tip--top-right:hover:after,\n.llms-mb-container [data-title-default].tip--top-right:hover:after,\n.llms-mb-container [data-title-active].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after {\n top: -6px;\n}\n.lifterlms [data-tip].tip--top-left:before,\n.lifterlms [data-title-default].tip--top-left:before,\n.lifterlms [data-title-active].tip--top-left:before,\n.llms-metabox [data-tip].tip--top-left:before,\n.llms-metabox [data-title-default].tip--top-left:before,\n.llms-metabox [data-title-active].tip--top-left:before,\n.llms-mb-container [data-tip].tip--top-left:before,\n.llms-mb-container [data-title-default].tip--top-left:before,\n.llms-mb-container [data-title-active].tip--top-left:before,\n.llms-quiz-wrapper [data-tip].tip--top-left:before,\n.llms-quiz-wrapper [data-title-default].tip--top-left:before,\n.llms-quiz-wrapper [data-title-active].tip--top-left:before {\n bottom: 100%;\n right: -10px;\n}\n.lifterlms [data-tip].tip--top-left:hover:before,\n.lifterlms [data-title-default].tip--top-left:hover:before,\n.lifterlms [data-title-active].tip--top-left:hover:before,\n.llms-metabox [data-tip].tip--top-left:hover:before,\n.llms-metabox [data-title-default].tip--top-left:hover:before,\n.llms-metabox [data-title-active].tip--top-left:hover:before,\n.llms-mb-container [data-tip].tip--top-left:hover:before,\n.llms-mb-container [data-title-default].tip--top-left:hover:before,\n.llms-mb-container [data-title-active].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before {\n bottom: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--top-left:after,\n.lifterlms [data-title-default].tip--top-left:after,\n.lifterlms [data-title-active].tip--top-left:after,\n.llms-metabox [data-tip].tip--top-left:after,\n.llms-metabox [data-title-default].tip--top-left:after,\n.llms-metabox [data-title-active].tip--top-left:after,\n.llms-mb-container [data-tip].tip--top-left:after,\n.llms-mb-container [data-title-default].tip--top-left:after,\n.llms-mb-container [data-title-active].tip--top-left:after,\n.llms-quiz-wrapper [data-tip].tip--top-left:after,\n.llms-quiz-wrapper [data-title-default].tip--top-left:after,\n.llms-quiz-wrapper [data-title-active].tip--top-left:after {\n border-top-color: #444;\n right: 6px;\n top: 0;\n}\n.lifterlms [data-tip].tip--top-left:hover:after,\n.lifterlms [data-title-default].tip--top-left:hover:after,\n.lifterlms [data-title-active].tip--top-left:hover:after,\n.llms-metabox [data-tip].tip--top-left:hover:after,\n.llms-metabox [data-title-default].tip--top-left:hover:after,\n.llms-metabox [data-title-active].tip--top-left:hover:after,\n.llms-mb-container [data-tip].tip--top-left:hover:after,\n.llms-mb-container [data-title-default].tip--top-left:hover:after,\n.llms-mb-container [data-title-active].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after {\n top: -6px;\n}\n.lifterlms [data-tip].tip--bottom-left:before,\n.lifterlms [data-title-default].tip--bottom-left:before,\n.lifterlms [data-title-active].tip--bottom-left:before,\n.llms-metabox [data-tip].tip--bottom-left:before,\n.llms-metabox [data-title-default].tip--bottom-left:before,\n.llms-metabox [data-title-active].tip--bottom-left:before,\n.llms-mb-container [data-tip].tip--bottom-left:before,\n.llms-mb-container [data-title-default].tip--bottom-left:before,\n.llms-mb-container [data-title-active].tip--bottom-left:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:before {\n top: 100%;\n right: -10px;\n}\n.lifterlms [data-tip].tip--bottom-left:hover:before,\n.lifterlms [data-title-default].tip--bottom-left:hover:before,\n.lifterlms [data-title-active].tip--bottom-left:hover:before,\n.llms-metabox [data-tip].tip--bottom-left:hover:before,\n.llms-metabox [data-title-default].tip--bottom-left:hover:before,\n.llms-metabox [data-title-active].tip--bottom-left:hover:before,\n.llms-mb-container [data-tip].tip--bottom-left:hover:before,\n.llms-mb-container [data-title-default].tip--bottom-left:hover:before,\n.llms-mb-container [data-title-active].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before {\n top: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--bottom-left:after,\n.lifterlms [data-title-default].tip--bottom-left:after,\n.lifterlms [data-title-active].tip--bottom-left:after,\n.llms-metabox [data-tip].tip--bottom-left:after,\n.llms-metabox [data-title-default].tip--bottom-left:after,\n.llms-metabox [data-title-active].tip--bottom-left:after,\n.llms-mb-container [data-tip].tip--bottom-left:after,\n.llms-mb-container [data-title-default].tip--bottom-left:after,\n.llms-mb-container [data-title-active].tip--bottom-left:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:after {\n border-bottom-color: #444;\n right: 6px;\n bottom: 0;\n}\n.lifterlms [data-tip].tip--bottom-left:hover:after,\n.lifterlms [data-title-default].tip--bottom-left:hover:after,\n.lifterlms [data-title-active].tip--bottom-left:hover:after,\n.llms-metabox [data-tip].tip--bottom-left:hover:after,\n.llms-metabox [data-title-default].tip--bottom-left:hover:after,\n.llms-metabox [data-title-active].tip--bottom-left:hover:after,\n.llms-mb-container [data-tip].tip--bottom-left:hover:after,\n.llms-mb-container [data-title-default].tip--bottom-left:hover:after,\n.llms-mb-container [data-title-active].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after {\n bottom: -6px;\n}\n.lifterlms [data-tip].tip--bottom-right:before,\n.lifterlms [data-title-default].tip--bottom-right:before,\n.lifterlms [data-title-active].tip--bottom-right:before,\n.llms-metabox [data-tip].tip--bottom-right:before,\n.llms-metabox [data-title-default].tip--bottom-right:before,\n.llms-metabox [data-title-active].tip--bottom-right:before,\n.llms-mb-container [data-tip].tip--bottom-right:before,\n.llms-mb-container [data-title-default].tip--bottom-right:before,\n.llms-mb-container [data-title-active].tip--bottom-right:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:before {\n top: 100%;\n left: -10px;\n}\n.lifterlms [data-tip].tip--bottom-right:hover:before,\n.lifterlms [data-title-default].tip--bottom-right:hover:before,\n.lifterlms [data-title-active].tip--bottom-right:hover:before,\n.llms-metabox [data-tip].tip--bottom-right:hover:before,\n.llms-metabox [data-title-default].tip--bottom-right:hover:before,\n.llms-metabox [data-title-active].tip--bottom-right:hover:before,\n.llms-mb-container [data-tip].tip--bottom-right:hover:before,\n.llms-mb-container [data-title-default].tip--bottom-right:hover:before,\n.llms-mb-container [data-title-active].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before {\n top: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--bottom-right:after,\n.lifterlms [data-title-default].tip--bottom-right:after,\n.lifterlms [data-title-active].tip--bottom-right:after,\n.llms-metabox [data-tip].tip--bottom-right:after,\n.llms-metabox [data-title-default].tip--bottom-right:after,\n.llms-metabox [data-title-active].tip--bottom-right:after,\n.llms-mb-container [data-tip].tip--bottom-right:after,\n.llms-mb-container [data-title-default].tip--bottom-right:after,\n.llms-mb-container [data-title-active].tip--bottom-right:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:after {\n border-bottom-color: #444;\n left: 6px;\n bottom: 0;\n}\n.lifterlms [data-tip].tip--bottom-right:hover:after,\n.lifterlms [data-title-default].tip--bottom-right:hover:after,\n.lifterlms [data-title-active].tip--bottom-right:hover:after,\n.llms-metabox [data-tip].tip--bottom-right:hover:after,\n.llms-metabox [data-title-default].tip--bottom-right:hover:after,\n.llms-metabox [data-title-active].tip--bottom-right:hover:after,\n.llms-mb-container [data-tip].tip--bottom-right:hover:after,\n.llms-mb-container [data-title-default].tip--bottom-right:hover:after,\n.llms-mb-container [data-title-active].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after {\n bottom: -6px;\n}\n.lifterlms [data-tip]:before,\n.lifterlms [data-title-default]:before,\n.lifterlms [data-title-active]:before,\n.llms-metabox [data-tip]:before,\n.llms-metabox [data-title-default]:before,\n.llms-metabox [data-title-active]:before,\n.llms-mb-container [data-tip]:before,\n.llms-mb-container [data-title-default]:before,\n.llms-mb-container [data-title-active]:before,\n.llms-quiz-wrapper [data-tip]:before,\n.llms-quiz-wrapper [data-title-default]:before,\n.llms-quiz-wrapper [data-title-active]:before {\n background: #444;\n border-radius: 4px;\n color: #fff;\n font-size: 13px;\n line-height: 1.2;\n padding: 8px;\n max-width: 300px;\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n}\n.lifterlms [data-tip]:after,\n.lifterlms [data-title-default]:after,\n.lifterlms [data-title-active]:after,\n.llms-metabox [data-tip]:after,\n.llms-metabox [data-title-default]:after,\n.llms-metabox [data-title-active]:after,\n.llms-mb-container [data-tip]:after,\n.llms-mb-container [data-title-default]:after,\n.llms-mb-container [data-title-active]:after,\n.llms-quiz-wrapper [data-tip]:after,\n.llms-quiz-wrapper [data-title-default]:after,\n.llms-quiz-wrapper [data-title-active]:after {\n content: \"\";\n border: 6px solid transparent;\n height: 0;\n width: 0;\n}\n.lifterlms [data-tip]:before, .lifterlms [data-tip]:after,\n.lifterlms [data-title-default]:before,\n.lifterlms [data-title-default]:after,\n.lifterlms [data-title-active]:before,\n.lifterlms [data-title-active]:after,\n.llms-metabox [data-tip]:before,\n.llms-metabox [data-tip]:after,\n.llms-metabox [data-title-default]:before,\n.llms-metabox [data-title-default]:after,\n.llms-metabox [data-title-active]:before,\n.llms-metabox [data-title-active]:after,\n.llms-mb-container [data-tip]:before,\n.llms-mb-container [data-tip]:after,\n.llms-mb-container [data-title-default]:before,\n.llms-mb-container [data-title-default]:after,\n.llms-mb-container [data-title-active]:before,\n.llms-mb-container [data-title-active]:after,\n.llms-quiz-wrapper [data-tip]:before,\n.llms-quiz-wrapper [data-tip]:after,\n.llms-quiz-wrapper [data-title-default]:before,\n.llms-quiz-wrapper [data-title-default]:after,\n.llms-quiz-wrapper [data-title-active]:before,\n.llms-quiz-wrapper [data-title-active]:after {\n opacity: 0;\n -webkit-transition: all 0.2s 0.1s ease;\n transition: all 0.2s 0.1s ease;\n position: absolute;\n pointer-events: none;\n visibility: hidden;\n}\n.lifterlms [data-tip]:hover:before, .lifterlms [data-tip]:hover:after,\n.lifterlms [data-title-default]:hover:before,\n.lifterlms [data-title-default]:hover:after,\n.lifterlms [data-title-active]:hover:before,\n.lifterlms [data-title-active]:hover:after,\n.llms-metabox [data-tip]:hover:before,\n.llms-metabox [data-tip]:hover:after,\n.llms-metabox [data-title-default]:hover:before,\n.llms-metabox [data-title-default]:hover:after,\n.llms-metabox [data-title-active]:hover:before,\n.llms-metabox [data-title-active]:hover:after,\n.llms-mb-container [data-tip]:hover:before,\n.llms-mb-container [data-tip]:hover:after,\n.llms-mb-container [data-title-default]:hover:before,\n.llms-mb-container [data-title-default]:hover:after,\n.llms-mb-container [data-title-active]:hover:before,\n.llms-mb-container [data-title-active]:hover:after,\n.llms-quiz-wrapper [data-tip]:hover:before,\n.llms-quiz-wrapper [data-tip]:hover:after,\n.llms-quiz-wrapper [data-title-default]:hover:before,\n.llms-quiz-wrapper [data-title-default]:hover:after,\n.llms-quiz-wrapper [data-title-active]:hover:before,\n.llms-quiz-wrapper [data-title-active]:hover:after {\n opacity: 1;\n -webkit-transition: all 0 0.1s ease;\n transition: all 0 0.1s ease;\n visibility: visible;\n z-index: 99999999;\n}\n.lifterlms [data-tip]:before,\n.llms-metabox [data-tip]:before,\n.llms-mb-container [data-tip]:before,\n.llms-quiz-wrapper [data-tip]:before {\n content: attr(data-tip);\n}\n.lifterlms [data-tip].active:before,\n.llms-metabox [data-tip].active:before,\n.llms-mb-container [data-tip].active:before,\n.llms-quiz-wrapper [data-tip].active:before {\n content: attr(data-tip-active);\n}\n\n#adminmenu .toplevel_page_lifterlms .wp-menu-image img {\n padding-top: 6px;\n width: 20px;\n}\n#adminmenu .toplevel_page_lifterlms a[href*=\"page=llms-add-ons\"],\n#adminmenu .opensub .wp-submenu li.current a[href*=\"page=llms-add-ons\"],\n#adminmenu .wp-submenu li.current a[href*=\"page=llms-add-ons\"],\n#adminmenu .wp-submenu li.current a[href*=\"page=llms-add-ons\"],\n#adminmenu .wp-submenu li.current a[href*=\"page=llms-add-ons\"],\n#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a[href*=\"page=llms-add-ons\"] {\n color: #f8954f;\n}\n\n/******************************************************************\n\nGrids for Breakpoints\n\n******************************************************************/\n.last-col {\n float: right;\n padding-right: 0 !important;\n}\n\n.last-col:after {\n clear: both;\n}\n\n/*\nMobile Grid Styles\nThese are the widths for the mobile grid.\nThere are four types, but you can add or customize\nthem however you see fit.\n*/\n@media (max-width: 767px) {\n .m-all {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 100%;\n padding-right: 0;\n }\n .m-1of2 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 50%;\n }\n .m-1of3 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 33.33%;\n }\n .m-2of3 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 66.66%;\n }\n .m-1of4 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 25%;\n }\n .m-3of4 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 75%;\n }\n .m-right {\n text-align: center;\n }\n .m-center {\n text-align: center;\n }\n .m-left {\n text-align: center;\n }\n .d-right {\n text-align: right;\n }\n .d-center {\n text-align: center;\n }\n .d-left {\n text-align: left;\n }\n}\n/* Portrait tablet to landscape */\n@media (min-width: 768px) and (max-width: 1029px) {\n .t-all {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 100%;\n padding-right: 0;\n }\n .t-1of2 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 50%;\n }\n .t-1of3 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 33.33%;\n }\n .t-2of3 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 66.66%;\n }\n .t-1of4 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 25%;\n }\n .t-3of4 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 75%;\n }\n .t-1of5 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 20%;\n }\n .t-2of5 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 40%;\n }\n .t-3of5 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 60%;\n }\n .t-4of5 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 80%;\n }\n .d-right {\n text-align: right;\n }\n .d-center {\n text-align: center;\n }\n .d-left {\n text-align: left;\n }\n}\n/* Landscape to small desktop */\n@media (min-width: 1030px) {\n .d-all {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 100%;\n padding-right: 0;\n }\n .d-1of2 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 50%;\n }\n .d-1of3 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 33.33%;\n }\n .d-2of3 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 66.66%;\n }\n .d-1of4 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 25%;\n }\n .d-3of4 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 75%;\n }\n .d-1of5 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 20%;\n }\n .d-2of5 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 40%;\n }\n .d-3of5 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 60%;\n }\n .d-4of5 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 80%;\n }\n .d-1of6 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 16.6666666667%;\n }\n .d-1of7 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 14.2857142857%;\n }\n .d-2of7 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 28.5714286%;\n }\n .d-3of7 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 42.8571429%;\n }\n .d-4of7 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 57.1428572%;\n }\n .d-5of7 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 71.4285715%;\n }\n .d-6of7 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 85.7142857%;\n }\n .d-1of8 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 12.5%;\n }\n .d-1of9 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 11.1111111111%;\n }\n .d-1of10 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 10%;\n }\n .d-1of11 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 9.0909090909%;\n }\n .d-1of12 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 8.33%;\n }\n .d-right {\n text-align: right;\n }\n .d-center {\n text-align: center;\n }\n .d-left {\n text-align: left;\n }\n}\n/******************************************************************\n\nForm Styles\n\n******************************************************************/\n#llms-form-wrapper .llms-search-form-wrapper {\n border-bottom: 1px solid #999;\n margin: 20px 0;\n}\n#llms-form-wrapper #llms_analytics_search {\n border: none !important;\n text-shadow: none !important;\n border: none !important;\n outline: none !important;\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n margin: 0 !important;\n color: #fefefe !important;\n background: #466dd8 !important;\n border-radius: 0;\n -webkit-transition: 0.5s;\n transition: 0.5s;\n}\n#llms-form-wrapper #llms_analytics_search:hover {\n background: #0185a3 !important;\n}\n#llms-form-wrapper #llms_analytics_search:active {\n background: #33b1cb !important;\n}\n\n#llms-skip-setup-form .llms-admin-link {\n background: none !important;\n border: none;\n padding: 0 !important;\n color: #0074a2;\n cursor: pointer;\n}\n#llms-skip-setup-form .llms-admin-link:hover {\n color: #2ea2cc;\n}\n#llms-skip-setup-form .llms-admin-link:focus {\n color: #124964;\n}\n\n/**\n * Toggle Switch ( replaces checkbox on admin panels )\n */\n.llms-switch {\n position: relative;\n}\n.llms-switch .llms-toggle {\n position: absolute;\n margin-left: -9999px;\n visibility: hidden;\n}\n.llms-switch .llms-toggle + label {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: block;\n position: relative;\n cursor: pointer;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.llms-switch input.llms-toggle-round + label {\n border: 2px solid #6c7781;\n border-radius: 10px;\n height: 20px;\n width: 36px;\n}\n.llms-switch input.llms-toggle-round + label:before,\n.llms-switch input.llms-toggle-round + label:after {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n content: \"\";\n display: block;\n position: absolute;\n -webkit-transition: background 0.4s;\n transition: background 0.4s;\n}\n.llms-switch input.llms-toggle-round:checked + label {\n border-color: #11a0d2;\n background-color: #11a0d2;\n}\n.llms-switch input.llms-toggle-round + label:after {\n height: 12px;\n left: 2px;\n top: 2px;\n background-color: #6c7781;\n border-radius: 50%;\n -webkit-transition: margin 0.4s;\n transition: margin 0.4s;\n width: 12px;\n z-index: 3;\n}\n.llms-switch input.llms-toggle-round:checked + label:after {\n background-color: #fefefe;\n margin-left: 16px;\n}\n.llms-switch input.llms-toggle-round + label:before {\n height: 8px;\n top: 4px;\n border: 1px solid #6c7781;\n border-radius: 50%;\n right: 4px;\n width: 8px;\n z-index: 2;\n}\n.llms-switch input.llms-toggle-round:checked + label:before {\n border-color: #fefefe;\n border-radius: 0;\n left: 6px;\n right: auto;\n width: 2px;\n}\n\n#llms-profile-fields {\n margin: 50px 0;\n}\n#llms-profile-fields .llms-form-field {\n padding-left: 0;\n}\n#llms-profile-fields label {\n display: block;\n font-weight: bold;\n padding: 8px 0 2px;\n}\n#llms-profile-fields .type-checkbox .type-checkbox label {\n display: initial;\n font-weight: initial;\n padding: 0;\n}\n#llms-profile-fields .type-checkbox .type-checkbox input {\n display: inline-block;\n margin-bottom: 0;\n width: 1rem;\n}\n#llms-profile-fields select {\n max-width: 100%;\n}\n\na.llms-voucher-delete {\n background: #bb231c;\n color: #fefefe;\n display: block;\n padding: 4px 2px;\n text-decoration: none;\n -webkit-transition: ease 0.3s all;\n transition: ease 0.3s all;\n}\na.llms-voucher-delete:hover {\n background: #af3a26;\n}\n\n.llms-voucher-codes-wrapper table,\n.llms-voucher-redemption-wrapper table {\n width: 100%;\n border-collapse: collapse;\n}\n.llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td,\n.llms-voucher-redemption-wrapper table th,\n.llms-voucher-redemption-wrapper table td {\n border: none;\n}\n.llms-voucher-codes-wrapper table thead,\n.llms-voucher-redemption-wrapper table thead {\n background-color: #466dd8;\n color: #fff;\n}\n.llms-voucher-codes-wrapper table thead th,\n.llms-voucher-redemption-wrapper table thead th {\n padding: 10px 10px;\n}\n.llms-voucher-codes-wrapper table tr,\n.llms-voucher-redemption-wrapper table tr {\n counter-increment: row-counter;\n}\n.llms-voucher-codes-wrapper table tr:nth-child(even),\n.llms-voucher-redemption-wrapper table tr:nth-child(even) {\n background-color: #F1F1F1;\n}\n.llms-voucher-codes-wrapper table tr td,\n.llms-voucher-redemption-wrapper table tr td {\n padding: 5px;\n}\n.llms-voucher-codes-wrapper table tr td:first-child:before,\n.llms-voucher-redemption-wrapper table tr td:first-child:before {\n content: counter(row-counter);\n}\n\n.llms-voucher-codes-wrapper table {\n width: 100%;\n border-collapse: collapse;\n}\n.llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td {\n border: none;\n}\n.llms-voucher-codes-wrapper table thead {\n background-color: #466dd8;\n color: #fff;\n}\n.llms-voucher-codes-wrapper table tr:nth-child(even) {\n background-color: #F1F1F1;\n}\n.llms-voucher-codes-wrapper table tr td span {\n display: inline-block;\n min-width: 30px;\n}\n.llms-voucher-codes-wrapper button {\n cursor: pointer;\n}\n.llms-voucher-codes-wrapper .llms-voucher-delete {\n float: right;\n margin-right: 15px;\n}\n.llms-voucher-codes-wrapper .llms-voucher-uses {\n width: 50px;\n}\n.llms-voucher-codes-wrapper .llms-voucher-add-codes {\n float: right;\n}\n.llms-voucher-codes-wrapper .llms-voucher-add-codes input[type=text] {\n width: 30px;\n}\n\n.llms-voucher-export-wrapper .llms-voucher-export-type {\n width: 100%;\n}\n.llms-voucher-export-wrapper .llms-voucher-export-type p {\n margin: 0 0 0 15px;\n}\n.llms-voucher-export-wrapper .llms-voucher-email-wrapper {\n width: 100%;\n margin: 25px 0;\n}\n.llms-voucher-export-wrapper .llms-voucher-email-wrapper input[type=text] {\n width: 100%;\n}\n.llms-voucher-export-wrapper .llms-voucher-email-wrapper p {\n margin: 0;\n}\n.llms-voucher-export-wrapper > button {\n float: right;\n}\n\n.postbox .inside {\n overflow: auto;\n}\n\n.llms-widget {\n background-color: #FFF;\n border: 1px solid #dedede;\n border-radius: 12px;\n -webkit-box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n margin-bottom: 20px;\n padding: 20px;\n position: relative;\n width: 100%;\n}\n.llms-widget.alt {\n border: 1px solid #ccc;\n background-color: #efefef;\n margin-bottom: 10px;\n}\n.llms-widget.alt .llms-label {\n color: #777;\n font-size: 14px;\n margin-bottom: 10px;\n padding-bottom: 5px;\n}\n.llms-widget.alt h2 {\n color: #444;\n font-weight: 300;\n}\n.llms-widget a {\n border-bottom: 1px dotted #466dd8;\n display: inline-block;\n text-decoration: none;\n}\n.llms-widget a:hover {\n border-bottom: 1px dotted #2b55cb;\n}\n.llms-widget .llms-widget-content {\n margin: 0.67em 0;\n color: #466dd8;\n font-size: 2.4em;\n font-weight: 700;\n line-height: 1;\n word-break: break-all;\n}\n.llms-widget h2 {\n font-size: 1.8em;\n}\n.llms-widget .llms-label {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n font-size: 18px;\n font-weight: 400;\n margin: 0 0 10px 0;\n text-align: center;\n}\n.llms-widget .llms-chart {\n width: 100%;\n padding: 10px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.llms-widget mark.yes {\n background-color: #7ad03a;\n}\n.llms-widget .llms-subtitle {\n margin-bottom: 0;\n}\n.llms-widget .spinner {\n float: none;\n left: 50%;\n margin: -10px 0 0 -10px;\n position: absolute;\n top: 50%;\n z-index: 2;\n}\n.llms-widget.is-loading:before {\n background: #fefefe;\n bottom: 0;\n content: \"\";\n left: 0;\n opacity: 0.9;\n position: absolute;\n right: 0;\n top: 0;\n z-index: 1;\n}\n.llms-widget.is-loading .spinner {\n visibility: visible;\n}\n.llms-widget td[colspan=\"2\"] {\n padding-left: 0;\n}\n.llms-widget tr.llms-disabled-field {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.llms-widget-1-3,\n.llms-widget-1-4,\n.llms-widget-1-5 {\n text-align: center;\n}\n\n.llms-widget .llms-widget-info-toggle {\n color: #AAA;\n cursor: pointer;\n font-size: 16px;\n position: absolute;\n right: 20px;\n top: 20px;\n}\n.llms-widget.info-showing .llms-widget-info {\n display: block;\n}\n\n.llms-widget-info {\n background: #444;\n color: #fefefe;\n bottom: -50px;\n display: none;\n padding: 15px;\n position: absolute;\n text-align: center;\n left: 10px;\n right: 15px;\n z-index: 3;\n}\n.llms-widget-info:before {\n content: \"\";\n border: 12px solid transparent;\n border-bottom-color: #444;\n left: 50%;\n margin-left: -12px;\n position: absolute;\n top: -24px;\n}\n.llms-widget-info p {\n margin: 0;\n}\n\n.llms-widget-row:before, .llms-widget-row:after {\n content: \" \";\n display: table;\n}\n.llms-widget-row:after {\n clear: both;\n}\n\n.llms-widget-row .no-padding {\n padding: 0 !important;\n}\n\n/******************************************************************\n\nSVG Styles\n\n******************************************************************/\nsvg.icon {\n height: 24px;\n width: 24px;\n display: inline-block;\n fill: currentColor;\n vertical-align: baseline;\n}\nbutton svg.icon {\n height: 18px;\n width: 18px;\n margin: 4px -4px 0 4px;\n -webkit-filter: drop-shadow(0 1px #eee);\n filter: drop-shadow(0 1px #eee);\n float: right;\n}\nsvg.icon.menu-icon {\n height: 20px;\n width: 20px;\n display: inline-block;\n fill: currentColor;\n vertical-align: text-bottom;\n margin-right: 10px;\n}\nsvg.icon.tree-icon {\n height: 13px;\n width: 13px;\n vertical-align: middle;\n}\nsvg.icon.section-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n}\nsvg.icon.button-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n}\nsvg.icon.button-icon-attr {\n height: 10px;\n width: 10px;\n vertical-align: middle;\n}\nsvg.icon.list-icon {\n height: 12px;\n width: 12px;\n vertical-align: middle;\n}\nsvg.icon.list-icon.on {\n color: #466dd8;\n}\nsvg.icon.list-icon.off {\n color: #444;\n}\nsvg.icon.detail-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n cursor: default;\n}\nsvg.icon.detail-icon.on {\n color: #466dd8;\n}\nsvg.icon.detail-icon.off {\n color: #ccc;\n}\nsvg.icon-ion-arrow-up {\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\nsvg use {\n pointer-events: none;\n}\n\n/******************************************************************\n\nMetabox Tabs\n\n******************************************************************/\n#side-sortables .tab-content {\n padding: 0;\n}\n\n.llms-mb-container .tab-content {\n display: none;\n background-color: #FFF;\n padding: 0 20px;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) {\n margin: 0 0 15px 0;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li {\n padding: 20px 0;\n margin: 0;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.select:not([class*=d-]) {\n width: 100%;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li:last-child {\n border: 0;\n padding-bottom: 0;\n}\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.top {\n border-bottom: 0;\n padding-bottom: 0;\n}\n.llms-mb-container .tab-content .full-width {\n width: 100%;\n}\n.llms-mb-container .tab-content #wp-content-editor-tools {\n background: none;\n}\n\n.llms-mb-container .tab-content.llms-active {\n display: inherit;\n}\n\n.llms-mb-container .tab-content .no-border {\n border-bottom: 0px;\n}\n\n/******************************************************************\n\nStyles for topModal modal\n\n******************************************************************/\n/**\n * Base modal styles\n */\n.topModal {\n display: none;\n position: relative;\n border: 4px solid #808080;\n background: #fff;\n z-index: 1000001;\n padding: 2px;\n max-width: 500px;\n margin: 34px auto 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-color: #ffffff;\n border-radius: 2px;\n border: 1px solid #dddddd;\n}\n\n.topModalClose {\n float: right;\n cursor: pointer;\n margin-right: 10px;\n margin-top: 10px;\n}\n\n.topModalContainer {\n display: none;\n overflow: auto;\n overflow-y: hidden;\n position: fixed;\n top: 0 !important;\n right: 0;\n bottom: 0;\n left: 0;\n -webkit-overflow-scrolling: touch;\n width: auto !important;\n margin-left: 0 !important;\n background-color: transparent !important;\n z-index: 100002 !important;\n}\n\n.topModalBackground {\n display: none;\n background: #000;\n position: fixed;\n height: 100%;\n width: 100%;\n top: 0 !important;\n left: 0;\n margin-left: 0 !important;\n z-index: 100002 !important;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: auto;\n overflow-y: hidden;\n}\n\nbody.modal-open {\n overflow: hidden;\n}\n\n.llms-modal-header {\n border-top-right-radius: 1px;\n border-top-left-radius: 1px;\n background: #466dd8;\n color: #eeeeee;\n padding: 10px 15px;\n font-size: 18px;\n}\n\n#llms-icon-modal-close {\n width: 16px;\n height: 16px;\n fill: #fefefe;\n}\n\n.llms-modal-content {\n padding: 20px;\n}\n.llms-modal-content h3 {\n margin-top: 0;\n}\n\n/**\n * Custom Modal Styles for LifterLMS\n */\n.llms-modal-form h1 {\n margin-top: 0;\n}\n.llms-modal-form input[type=text] {\n width: 100%;\n}\n.llms-modal-form textarea,\n.llms-modal-form input[type=text],\n.llms-modal-form input[type=password],\n.llms-modal-form input[type=file],\n.llms-modal-form input[type=datetime],\n.llms-modal-form input[type=datetime-local],\n.llms-modal-form input[type=date],\n.llms-modal-form input[type=month],\n.llms-modal-form input[type=time],\n.llms-modal-form input[type=week],\n.llms-modal-form input[type=number],\n.llms-modal-form input[type=email],\n.llms-modal-form input[type=url],\n.llms-modal-form input[type=search],\n.llms-modal-form input[type=tel],\n.llms-modal-form input[type=color] {\n padding: 0 0.4em 0 0.4em;\n margin-bottom: 2em;\n vertical-align: middle;\n border-radius: 3px;\n min-width: 50px;\n max-width: 635px;\n width: 100%;\n min-height: 32px;\n background-color: #fff;\n border: 1px solid #ccc;\n margin: 0 0 24px 0;\n outline: none;\n -webkit-transition: border 0.3s ease-in-out 0s;\n transition: border 0.3s ease-in-out 0s;\n}\n.llms-modal-form textarea:focus,\n.llms-modal-form input[type=text]:focus,\n.llms-modal-form input[type=password]:focus,\n.llms-modal-form input[type=file]:focus,\n.llms-modal-form input[type=datetime]:focus,\n.llms-modal-form input[type=datetime-local]:focus,\n.llms-modal-form input[type=date]:focus,\n.llms-modal-form input[type=month]:focus,\n.llms-modal-form input[type=time]:focus,\n.llms-modal-form input[type=week]:focus,\n.llms-modal-form input[type=number]:focus,\n.llms-modal-form input[type=email]:focus,\n.llms-modal-form input[type=url]:focus,\n.llms-modal-form input[type=search]:focus,\n.llms-modal-form input[type=tel]:focus,\n.llms-modal-form input[type=color]:focus {\n background: #fefefe;\n border: 1px solid #466dd8;\n}\n.llms-modal-form textarea {\n padding: 0.4em !important;\n height: 100px !important;\n border-radius: 3px;\n vertical-align: middle;\n min-height: 32px;\n outline: none;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.llms-modal-form textarea:focus {\n background: #fefefe;\n border: 1px solid #466dd8;\n}\n.llms-modal-form .chosen-container-single .chosen-single {\n border-radius: 3px;\n vertical-align: middle;\n min-height: 32px;\n border: 1px solid #ccc;\n width: 100%;\n background: #fefefe !important;\n outline: none;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-box-shadow: 0 0 0 #fff;\n box-shadow: 0 0 0 #fff;\n line-height: 32px;\n margin: 0 0 24px 0;\n}\n.llms-modal-form .chosen-container-single .chosen-single:focus {\n background: #fefefe;\n border: 1px solid #466dd8;\n}\n.llms-modal-form .chosen-container-single .chosen-single div b {\n margin-top: 4px;\n}\n.llms-modal-form .chosen-search input[type=text] {\n border: 1px solid #ccc;\n}\n.llms-modal-form .chosen-search input[type=text]:focus {\n background-color: #fefefe;\n border: 1px solid #466dd8;\n}\n.llms-modal-form .chosen-container-single .chosen-drop {\n margin-top: -28px;\n}\n.llms-modal-form .llms-button-primary, .llms-modal-form .llms-button-secondary {\n padding: 10px 10px;\n border-radius: 0;\n -webkit-transition: 0.5s;\n transition: 0.5s;\n -webkit-box-shadow: 0 1px 1px #ccc;\n box-shadow: 0 1px 1px #ccc;\n}\n.llms-modal-form .llms-button-primary.full, .llms-modal-form .llms-button-secondary.full {\n width: 100%;\n}\n\n.modal-open .select2-dropdown {\n z-index: 1000005;\n}\n\n.button.llms-merge-code-button {\n vertical-align: middle;\n}\n.button.llms-merge-code-button svg {\n margin-right: 2px;\n position: relative;\n top: 4px;\n width: 16px;\n}\n.button.llms-merge-code-button svg g {\n fill: currentColor;\n}\n\n.llms-mb-container .llms-merge-code-wrapper {\n float: right;\n top: -5px;\n}\n\n.llms-merge-code-wrapper {\n display: inline;\n position: relative;\n}\n\n.llms-merge-codes {\n background: #f7f7f7;\n border: 1px solid #ccc;\n border-radius: 3px;\n -webkit-box-shadow: 0 1px 0 #ccc;\n box-shadow: 0 1px 0 #ccc;\n color: #555;\n display: none;\n left: 1px;\n overflow: hidden;\n position: absolute;\n top: 30px;\n width: 200px;\n}\n.llms-merge-codes ul {\n margin: 0;\n padding: 0;\n}\n.llms-merge-codes li {\n cursor: pointer;\n margin: 0;\n padding: 4px 8px !important;\n border-bottom: 1px solid #ccc;\n}\n.llms-merge-codes li:hover {\n color: #23282d;\n background: #fefefe;\n}\n.llms-merge-codes.active {\n display: block;\n z-index: 777;\n}\n\n/******************************************************************\n\nBase Mobile\n\n******************************************************************/\n.llms-nav-tab,\n.llms-nav-tab-filters {\n display: block;\n width: 100%;\n}\n\nform.llms-nav-tab-filters.full-width {\n width: 100%;\n}\nform.llms-nav-tab-filters.full-width label {\n display: inline-block;\n width: 10%;\n text-align: left;\n}\nform.llms-nav-tab-filters.full-width .select2-container {\n width: 85% !important;\n}\n\n.llms-nav-tab-settings {\n display: block;\n width: 100%;\n}\n\n#llms-form-wrapper .llms-select {\n width: 100%;\n margin-bottom: 20px;\n}\n#llms-form-wrapper .llms-checkbox {\n display: inline-block;\n width: 100%;\n text-align: left;\n}\n#llms-form-wrapper .llms-filter-options {\n width: 100%;\n}\n#llms-form-wrapper .llms-date-select {\n width: 100%;\n display: inline-block;\n margin-bottom: 20px;\n}\n#llms-form-wrapper .llms-date-select input[type=text] {\n width: 100%;\n}\nul.tabs li {\n display: block;\n}\n\n@media only screen and (min-width: 481px) {\n /******************************************************************\n\n Larger Phones\n\n ******************************************************************/\n #llms-form-wrapper .llms-checkbox {\n width: 33%;\n }\n}\n@media only screen and (min-width: 768px) {\n /******************************************************************\n\n Tablets and small computers\n\n ******************************************************************/\n ul.tabs li {\n display: inline-block;\n }\n .llms-nav-tab {\n display: inline-block;\n width: 33%;\n }\n .llms-nav-tab-settings {\n display: inline-block;\n width: 25%;\n }\n #llms-form-wrapper .llms-select {\n width: 50%;\n max-width: 500px;\n }\n #llms-form-wrapper .llms-filter-options {\n width: 50%;\n max-width: 500px;\n }\n #llms-form-wrapper .llms-date-select {\n width: 47.5%;\n }\n #llms-form-wrapper .llms-date-select:first-child {\n margin-right: 5%;\n }\n .llms-widget input[type=text],\n.llms-widget input[type=password],\n.llms-widget input[type=datetime],\n.llms-widget input[type=datetime-local],\n.llms-widget input[type=date],\n.llms-widget input[type=month],\n.llms-widget input[type=time],\n.llms-widget input[type=week],\n.llms-widget input[type=number],\n.llms-widget input[type=email],\n.llms-widget input[type=url],\n.llms-widget input[type=search],\n.llms-widget input[type=tel],\n.llms-widget input[type=color],\n.llms-widget select,\n.llms-widget textarea {\n width: 50%;\n }\n .llms-widget input[type=text].medium,\n.llms-widget input[type=password].medium,\n.llms-widget input[type=datetime].medium,\n.llms-widget input[type=datetime-local].medium,\n.llms-widget input[type=date].medium,\n.llms-widget input[type=month].medium,\n.llms-widget input[type=time].medium,\n.llms-widget input[type=week].medium,\n.llms-widget input[type=number].medium,\n.llms-widget input[type=email].medium,\n.llms-widget input[type=url].medium,\n.llms-widget input[type=search].medium,\n.llms-widget input[type=tel].medium,\n.llms-widget input[type=color].medium,\n.llms-widget select.medium,\n.llms-widget textarea.medium {\n width: 30%;\n }\n .llms-widget input[type=text].small,\n.llms-widget input[type=password].small,\n.llms-widget input[type=datetime].small,\n.llms-widget input[type=datetime-local].small,\n.llms-widget input[type=date].small,\n.llms-widget input[type=month].small,\n.llms-widget input[type=time].small,\n.llms-widget input[type=week].small,\n.llms-widget input[type=number].small,\n.llms-widget input[type=email].small,\n.llms-widget input[type=url].small,\n.llms-widget input[type=search].small,\n.llms-widget input[type=tel].small,\n.llms-widget input[type=color].small,\n.llms-widget select.small,\n.llms-widget textarea.small {\n width: 20%;\n }\n .llms-widget input[type=text].tiny,\n.llms-widget input[type=password].tiny,\n.llms-widget input[type=datetime].tiny,\n.llms-widget input[type=datetime-local].tiny,\n.llms-widget input[type=date].tiny,\n.llms-widget input[type=month].tiny,\n.llms-widget input[type=time].tiny,\n.llms-widget input[type=week].tiny,\n.llms-widget input[type=number].tiny,\n.llms-widget input[type=email].tiny,\n.llms-widget input[type=url].tiny,\n.llms-widget input[type=search].tiny,\n.llms-widget input[type=tel].tiny,\n.llms-widget input[type=color].tiny,\n.llms-widget select.tiny,\n.llms-widget textarea.tiny {\n width: 10%;\n }\n}\n@media only screen and (min-width: 1030px) {\n /******************************************************************\n\n Desktop Stylesheet\n\n ******************************************************************/\n .llms-nav-tab {\n display: inline-block;\n width: 33.333%;\n }\n .llms-nav-tab-settings {\n display: inline-block;\n width: 25%;\n }\n #llms-form-wrapper .llms-select {\n display: inline-block;\n width: 47.5%;\n }\n #llms-form-wrapper .llms-select:first-child {\n margin-right: 5%;\n }\n #llms-form-wrapper .llms-filter-options {\n display: inline-block;\n width: 47.5%;\n }\n #llms-form-wrapper .llms-filter-options.date-filter {\n margin-right: 5%;\n }\n #llms-form-wrapper .llms-filter-options .llms-date-select {\n margin-bottom: 0;\n }\n #llms-form-wrapper .llms-date-select {\n width: 47.5%;\n }\n #llms-form-wrapper .llms-date-select:first-child {\n margin-right: 5%;\n }\n .llms-widget-row:before, .llms-widget-row:after {\n content: \" \";\n display: table;\n }\n .llms-widget-row:after {\n clear: both;\n }\n .llms-widget-row .llms-widget-1-5 {\n vertical-align: top;\n width: 20%;\n float: left;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 0 5px;\n }\n .llms-widget-row .llms-widget-1-4 {\n vertical-align: top;\n width: 25%;\n float: left;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 0 5px;\n }\n .llms-widget-row .llms-widget-1-3 {\n width: 33.3%;\n float: left;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 0 5px;\n }\n .llms-widget-row .llms-widget-1-2 {\n width: 50%;\n float: left;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 0 5px;\n vertical-align: top;\n }\n}\n@media only screen and (min-width: 1240px) {\n /******************************************************************\n\n large Monitor Stylesheet\n\n ******************************************************************/\n .llms-nav-tab-filters,\n.llms-nav-tab-settings {\n float: left;\n width: 12.5%;\n }\n}\n.wrap.lifterlms {\n margin-top: 0;\n}\n\n.llms-header {\n background-color: #FFF;\n margin: 0 0 0 -20px;\n padding: 20px 10px;\n position: relative;\n z-index: 1;\n}\n.llms-header .llms-inside-wrap {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n padding: 0 10px;\n}\n.llms-header .lifterlms-logo {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 190px;\n flex: 0 0 190px;\n max-height: 52px;\n margin-right: 10px;\n}\n.llms-header .llms-meta {\n -ms-flex-item-align: center;\n align-self: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n font-size: 16px;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n line-height: 1.5;\n}\n.llms-header .llms-meta .llms-version {\n background-color: #1d2327;\n color: #FFF;\n border-radius: 999px;\n font-size: 13px;\n font-weight: 700;\n padding: 6px 12px;\n}\n.llms-header .llms-meta a {\n display: inline-block;\n}\n.llms-header .llms-meta .llms-license {\n border-right: 1px solid #CCC;\n font-weight: 700;\n margin-right: 12px;\n padding-right: 12px;\n}\n.llms-header .llms-meta .llms-license a {\n text-decoration: none;\n}\n.llms-header .llms-meta .llms-license a:before {\n content: \"\\f534\";\n display: inline-block;\n font: 400 16px/1 dashicons;\n left: 0;\n padding-right: 3px;\n position: relative;\n text-decoration: none;\n vertical-align: text-bottom;\n}\n.llms-header .llms-meta .llms-license a.llms-license-none {\n color: #888;\n}\n.llms-header .llms-meta .llms-license a.llms-license-none:before {\n content: \"\\f335\";\n}\n.llms-header .llms-meta .llms-license a.llms-license-active {\n color: #008a20;\n}\n.llms-header .llms-meta .llms-license a.llms-license-active:before {\n content: \"\\f112\";\n}\n.llms-header .llms-meta .llms-support {\n font-weight: 700;\n}\n.llms-header .llms-meta .llms-support a {\n color: #1d2327;\n text-decoration: none;\n}\n\n.llms-subheader {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n margin-left: -20px;\n padding: 10px 20px;\n width: 100%;\n z-index: 1;\n}\n.llms-subheader h1 {\n font-weight: 700;\n padding: 0;\n}\n.llms-subheader h1 a {\n color: inherit;\n text-decoration: none;\n}\n\n#post_course_difficulty {\n min-width: 200px;\n}\n\n#_video-embed, #_audio-embed {\n width: 100%;\n}\n\nhr {\n background-color: #CCC;\n border: none;\n height: 1px;\n margin: 30px 0;\n padding: 0;\n}\n\n.llms_certificate_default_image, .llms_certificate_image {\n width: 300px;\n}\n\n.llms_achievement_default_image, .llms_achievement_image {\n width: 120px;\n}\n\ndiv[id^=lifterlms-] .inside {\n overflow: visible;\n}\n\n.notice.llms-admin-notice {\n background-color: #FFF;\n border: 1px solid #ccd0d4;\n -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n padding: 0 !important;\n position: relative;\n}\n.notice.llms-admin-notice .notice-dismiss {\n text-decoration: none;\n}\n.notice.llms-admin-notice.notice-warning {\n border-left: 4px solid #F8954F;\n}\n.notice.llms-admin-notice.notice-warning .llms-admin-notice-icon {\n background-color: #FEF4ED;\n}\n.notice.llms-admin-notice.notice-info {\n border-left: 4px solid #466DD8;\n}\n.notice.llms-admin-notice.notice-info h3 {\n color: #466DD8;\n}\n.notice.llms-admin-notice.notice-info .llms-admin-notice-icon {\n background-color: #EDF0FB;\n}\n.notice.llms-admin-notice.notice-success {\n border-left: 4px solid #18A957;\n}\n.notice.llms-admin-notice.notice-success h3 {\n color: #18A957;\n}\n.notice.llms-admin-notice.notice-success .llms-admin-notice-icon {\n background-color: #E8F6EE;\n}\n.notice.llms-admin-notice.notice-error {\n border-left: 4px solid #DF1642;\n}\n.notice.llms-admin-notice.notice-error h3 {\n color: #9C0F2E;\n}\n.notice.llms-admin-notice.notice-error .llms-admin-notice-icon {\n background-color: #FCE8EC;\n}\n.notice.llms-admin-notice .llms-admin-notice-icon {\n background-image: url(../../assets/images/lifterlms-icon-color.png);\n background-position: center center;\n background-repeat: no-repeat;\n background-size: 30px;\n min-width: 70px;\n}\n.notice.llms-admin-notice .llms-admin-notice-content {\n color: #111;\n padding: 20px;\n}\n.notice.llms-admin-notice h3 {\n font-size: 18px;\n font-weight: 700;\n line-height: 25px;\n margin: 0 0 15px 0;\n}\n.notice.llms-admin-notice button,\n.notice.llms-admin-notice .llms-button-primary {\n display: inline-block;\n}\n.notice.llms-admin-notice p {\n font-size: 14px;\n line-height: 22px;\n margin: 0 0 15px 0;\n max-width: 65em;\n padding: 0;\n}\n.notice.llms-admin-notice p:last-of-type {\n margin-bottom: 0;\n}\n\n.llms-button-action.small .dashicons,\n.llms-button-danger.small .dashicons,\n.llms-button-primary.small .dashicons,\n.llms-button-secondary.small .dashicons {\n font-size: 13px;\n height: 13px;\n width: 13px;\n}\n.llms-button-action:hover,\n.llms-button-danger:hover,\n.llms-button-primary:hover,\n.llms-button-secondary:hover {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n\na.llms-view-as {\n line-height: 2;\n margin-right: 8px;\n}\n\n.llms-image-field-preview {\n max-height: 80px;\n vertical-align: middle;\n width: auto;\n}\n\n.llms-image-field-remove.hidden {\n display: none;\n}\n\n.llms-log-viewer {\n background: #fff;\n border: 1px solid #e5e5e5;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);\n margin: 20px 0;\n padding: 25px;\n}\n.llms-log-viewer pre {\n font-family: monospace;\n margin: 0;\n padding: 0;\n white-space: pre-wrap;\n}\n\n.llms-status--tools .llms-table {\n background: #fff;\n border: 1px solid #e5e5e5;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);\n}\n.llms-status--tools .llms-table td, .llms-status--tools .llms-table th {\n padding: 10px;\n vertical-align: top;\n}\n.llms-status--tools .llms-table th {\n width: 28%;\n}\n.llms-status--tools .llms-table p {\n margin: 0 0 10px;\n}\n\n.llms-error {\n color: #bb231c;\n font-style: italic;\n}\n\n.llms-rating-stars {\n color: #ffb900;\n text-decoration: none;\n}\n\n@media screen and (max-width: 782px) {\n .llms-header {\n top: 46px;\n }\n .llms-header .llms-inside-wrap {\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n gap: 20px;\n }\n .llms-header .llms-inside-wrap .lifterlms-logo {\n -ms-flex-item-align: center;\n align-self: center;\n -webkit-box-flex: inherit;\n -ms-flex: inherit;\n flex: inherit;\n max-height: initial;\n max-width: 200px;\n }\n .llms-header .llms-inside-wrap .llms-meta {\n -webkit-column-gap: 10px;\n -moz-column-gap: 10px;\n column-gap: 10px;\n }\n}\n.llms-table-wrap {\n position: relative;\n}\n\n.llms-table-header {\n padding: 0;\n}\n.llms-table-header:before, .llms-table-header:after {\n content: \" \";\n display: table;\n}\n.llms-table-header:after {\n clear: both;\n}\n.llms-table-header h2 {\n font-size: 20px;\n padding: 0;\n display: inline-block;\n line-height: 1.5;\n margin: 0 0 20px 0;\n vertical-align: middle;\n}\n.llms-table-header .llms-table-search,\n.llms-table-header .llms-table-filters {\n float: right;\n padding-left: 10px;\n}\n.llms-table-header .llms-table-search input {\n margin: 0;\n padding: 0 8px;\n}\n\n.llms-table {\n border: 1px solid #c3c4c7;\n border-collapse: collapse;\n width: 100%;\n}\n.llms-table a:not(.small) {\n color: #466dd8;\n}\n.llms-table a:not(.small):hover {\n color: #2b55cb;\n}\n.llms-table td, .llms-table th {\n border-bottom: 1px solid #c3c4c7;\n padding: 10px 12px;\n text-align: center;\n}\n.llms-table td.expandable.closed, .llms-table th.expandable.closed {\n display: none;\n}\n.llms-table td .llms-button-primary,\n.llms-table td .llms-button-secondary,\n.llms-table td .llms-button-action,\n.llms-table td .llms-button-danger, .llms-table th .llms-button-primary,\n.llms-table th .llms-button-secondary,\n.llms-table th .llms-button-action,\n.llms-table th .llms-button-danger {\n display: inline-block;\n}\n.llms-table tr.llms-quiz-pending td {\n font-weight: 700;\n}\n.llms-table thead th,\n.llms-table tfoot th {\n background-color: #FFF;\n font-weight: 700;\n}\n.llms-table thead th a.llms-sortable,\n.llms-table tfoot th a.llms-sortable {\n padding-right: 16px;\n position: relative;\n text-decoration: none;\n width: 100%;\n}\n.llms-table thead th a.llms-sortable.active[data-order=DESC] .asc,\n.llms-table tfoot th a.llms-sortable.active[data-order=DESC] .asc {\n opacity: 1;\n}\n.llms-table thead th a.llms-sortable.active[data-order=ASC] .desc,\n.llms-table tfoot th a.llms-sortable.active[data-order=ASC] .desc {\n opacity: 1;\n}\n.llms-table thead th a.llms-sortable:hover[data-order=DESC] .asc,\n.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .asc {\n opacity: 0;\n}\n.llms-table thead th a.llms-sortable:hover[data-order=DESC] .desc,\n.llms-table tfoot th a.llms-sortable:hover[data-order=DESC] .desc {\n opacity: 1;\n}\n.llms-table thead th a.llms-sortable:hover[data-order=ASC] .asc,\n.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .asc {\n opacity: 1;\n}\n.llms-table thead th a.llms-sortable:hover[data-order=ASC] .desc,\n.llms-table tfoot th a.llms-sortable:hover[data-order=ASC] .desc {\n opacity: 0;\n}\n.llms-table thead th a.llms-sortable .dashicons,\n.llms-table tfoot th a.llms-sortable .dashicons {\n color: #444;\n font-size: 16px;\n height: 16px;\n opacity: 0;\n position: absolute;\n width: 16px;\n}\n.llms-table tfoot th {\n border-bottom: none;\n}\n.llms-table tfoot th .llms-table-export {\n float: left;\n}\n.llms-table tfoot th .llms-table-export .llms-table-progress {\n background: #efefef;\n display: none;\n margin-left: 8px;\n vertical-align: middle;\n width: 100px;\n}\n.llms-table tfoot th .llms-table-pagination {\n float: right;\n}\n.llms-table.zebra tbody tr:nth-child(even) th, .llms-table.zebra tbody tr:nth-child(even) td {\n background-color: #fff;\n}\n.llms-table.zebra tbody tr:nth-child(odd) th, .llms-table.zebra tbody tr:nth-child(odd) td {\n background-color: #f6f7f7;\n}\n.llms-table.text-left td, .llms-table.text-left th {\n text-align: left;\n}\n.llms-table.size-large td, .llms-table.size-large th {\n font-size: 14px;\n padding: 10px 12px;\n}\n.llms-table .llms-drag-handle {\n color: #777;\n cursor: pointer;\n -webkit-transition: color 0.4s ease;\n transition: color 0.4s ease;\n}\n.llms-table .llms-action-icon {\n color: #777;\n text-decoration: none;\n}\n.llms-table .llms-action-icon .tooltip {\n cursor: pointer;\n}\n.llms-table .llms-action-icon:hover {\n color: #466dd8;\n}\n.llms-table .llms-action-icon.danger:hover {\n color: #bb231c;\n}\n.llms-table .llms-table-page-count {\n font-size: 12px;\n padding: 0 5px;\n}\n\n.llms-table-progress {\n text-align: center;\n}\n.llms-table-progress .llms-table-progress-bar {\n background: #eee;\n border-radius: 10px;\n height: 16px;\n overflow: hidden;\n position: relative;\n}\n.llms-table-progress .llms-table-progress-bar .llms-table-progress-inner {\n background: #466dd8;\n height: 100%;\n -webkit-transition: width 0.2s ease;\n transition: width 0.2s ease;\n}\n.llms-table-progress .llms-table-progress-text {\n color: #466dd8;\n font-size: 12px;\n font-weight: 700;\n line-height: 16px;\n}\n\n.llms-table.llms-gateway-table .status .fa,\n.llms-table.llms-integrations-table .status .fa {\n color: #466dd8;\n font-size: 22px;\n}\n.llms-table.llms-gateway-table .sort,\n.llms-table.llms-integrations-table .sort {\n cursor: move;\n text-align: center;\n width: 10px;\n}\n\n.llms-gb-table-notifications th, .llms-gb-table-notifications td {\n text-align: left;\n}\n\n.llms-order-note .llms-order-note-content {\n background: #efefef;\n margin-bottom: 10px;\n padding: 10px;\n position: relative;\n}\n.llms-order-note .llms-order-note-content:after {\n border-style: solid;\n border-color: #efefef transparent;\n border-width: 10px 10px 0 0;\n bottom: -10px;\n content: \"\";\n display: block;\n height: 0;\n left: 20px;\n position: absolute;\n width: 0;\n}\n.llms-order-note .llms-order-note-content p {\n font-size: 13px;\n margin: 0;\n line-height: 1.5;\n}\n.llms-order-note .llms-order-note-meta {\n color: #999;\n font-size: 11px;\n margin-left: 10px;\n}\n\n.llms-mb-list label {\n font-size: 15px;\n font-weight: 700;\n line-height: 1.5;\n display: block;\n width: 100%;\n}\n.llms-mb-list .description {\n margin-bottom: 8px;\n}\n.llms-mb-list .input-full {\n width: 100%;\n}\n\n#poststuff .llms-metabox h2, #poststuff .llms-metabox h3, #poststuff .llms-metabox h6 {\n margin: 0;\n padding: 0;\n}\n#poststuff .llms-metabox h2 {\n font-size: 18px;\n font-weight: 700;\n}\n#poststuff .llms-metabox h3 {\n color: #777;\n font-size: 16px;\n}\n#poststuff .llms-metabox h4 {\n border-bottom: 1px solid #e5e5e5;\n padding: 0;\n margin: 0;\n}\n#poststuff .llms-metabox .llms-transaction-test-mode {\n background: #ffffd7;\n font-style: italic;\n left: 0;\n padding: 2px;\n position: absolute;\n right: 0;\n top: 0;\n text-align: center;\n}\n#poststuff .llms-metabox a.llms-editable,\n#poststuff .llms-metabox .llms-metabox-icon,\n#poststuff .llms-metabox button.llms-editable {\n color: #999;\n text-decoration: none;\n}\n#poststuff .llms-metabox a.llms-editable:hover,\n#poststuff .llms-metabox .llms-metabox-icon:hover,\n#poststuff .llms-metabox button.llms-editable:hover {\n color: #466dd8;\n}\n#poststuff .llms-metabox button.llms-editable {\n border: none;\n background: none;\n cursor: pointer;\n padding: 0;\n vertical-align: top;\n}\n#poststuff .llms-metabox h4 button.llms-editable {\n float: right;\n}\n#poststuff .llms-metabox .llms-table {\n margin-top: 10px;\n}\n\n.llms-metabox-section {\n background: #fff;\n margin-top: 25px;\n position: relative;\n}\n.llms-metabox-section.no-top-margin {\n margin-top: 0;\n}\n.llms-metabox-section .llms-metabox-field {\n margin: 15px 0;\n position: relative;\n}\n.llms-metabox-section .llms-metabox-field label {\n color: #777;\n display: block;\n margin-bottom: 5px;\n font-weight: 500;\n vertical-align: baseline;\n}\n.llms-metabox-section .llms-metabox-field select,\n.llms-metabox-section .llms-metabox-field textarea,\n.llms-metabox-section .llms-metabox-field input[type=text],\n.llms-metabox-section .llms-metabox-field input[type=number] {\n width: 100%;\n}\n.llms-metabox-section .llms-metabox-field input.md-text {\n width: 105px;\n}\n.llms-metabox-section .llms-metabox-field input.sm-text {\n width: 45px;\n}\n.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-date-input {\n width: 95px;\n}\n.llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-time-input {\n width: 45px;\n}\n.llms-metabox-section .llms-metabox-field .llms-datetime-field em {\n font-style: normal;\n padding: 0 3px;\n}\n\n.llms-collapsible {\n border: 1px solid #e5e5e5;\n position: relative;\n margin-top: 0;\n margin-bottom: -1px;\n}\n.llms-collapsible:last-child {\n margin-bottom: 0;\n}\n.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-down {\n display: none;\n}\n.llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-up {\n display: inline;\n}\n.llms-collapsible .llms-collapsible-header {\n padding: 10px;\n}\n.llms-collapsible .llms-collapsible-header h3 {\n color: #777;\n margin: 0;\n font-size: 16px;\n}\n.llms-collapsible .llms-collapsible-header .dashicons-arrow-up {\n display: inline;\n}\n.llms-collapsible .llms-collapsible-header .dashicons-arrow-up {\n display: none;\n}\n.llms-collapsible .llms-collapsible-header a {\n text-decoration: none;\n}\n.llms-collapsible .llms-collapsible-header .dashicons {\n color: #777;\n cursor: pointer;\n -webkit-transition: color 0.4s ease;\n transition: color 0.4s ease;\n}\n.llms-collapsible .llms-collapsible-header .dashicons:hover {\n color: #466dd8;\n}\n.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning:hover, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-trash:hover, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-no:hover {\n color: #bb231c;\n}\n.llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger, .llms-collapsible .llms-collapsible-header .dashicons.dashicons-warning.medium-danger:hover {\n color: #c05621;\n}\n.llms-collapsible .llms-collapsible-body {\n display: none;\n padding: 10px;\n}\n\n._llms_instructors_data.repeater .llms-repeater-rows .llms-repeater-row:first-child .llms-repeater-remove {\n display: none;\n}\n._llms_instructors_data.repeater .llms-mb-list {\n padding: 0 5px !important;\n}\n\n.post-type-llms_order #post-body-content {\n display: none;\n}\n\n#lifterlms-order-details .handlediv,\n#lifterlms-order-details .handlediv.button-link,\n#lifterlms-order-details .postbox-header {\n display: none;\n}\n#lifterlms-order-details .inside {\n padding: 20px;\n margin-top: 0;\n}\n\n.llms-table tbody tr.llms-txn-failed td {\n background-color: rgba(187, 35, 28, 0.5);\n border-bottom-color: rgba(187, 35, 28, 0.5);\n}\n\n.llms-table tbody tr.llms-txn-refunded td {\n background-color: rgba(255, 165, 0, 0.5);\n border-bottom-color: rgba(255, 165, 0, 0.5);\n}\n\n.llms-txn-refund-form .llms-metabox-section,\n.llms-manual-txn-form .llms-metabox-section {\n margin-top: 0;\n}\n.llms-txn-refund-form .llms-metabox-field,\n.llms-manual-txn-form .llms-metabox-field {\n text-align: right;\n}\n.llms-txn-refund-form .llms-metabox-field input[type=number],\n.llms-manual-txn-form .llms-metabox-field input[type=number] {\n max-width: 100px;\n}\n.llms-txn-refund-form .llms-metabox-field input[type=text],\n.llms-manual-txn-form .llms-metabox-field input[type=text] {\n max-width: 340px;\n}\n\n.llms-manual-txn-form {\n background-color: #eaeaea;\n}\n.llms-manual-txn-form .llms-metabox-section {\n background-color: #eaeaea;\n}\n\n#llms-remaining-edit {\n display: none;\n}\n\n.llms-remaining-edit--content label, .llms-remaining-edit--content span, .llms-remaining-edit--content textarea {\n display: block;\n}\n.llms-remaining-edit--content label {\n margin-bottom: 20px;\n}\n.llms-remaining-edit--content textarea, .llms-remaining-edit--content input {\n width: 100%;\n}\n\n.submitbox .llms-mb-section,\n.llms-award-engagement-submitbox .llms-mb-list {\n margin-bottom: 12px;\n}\n.submitbox .llms-mb-section:last-of-type,\n.llms-award-engagement-submitbox .llms-mb-list:last-of-type {\n margin-bottom: 0;\n}\n.sync-action:before, .submitbox .llms-mb-section.student-info:before, .submitbox .llms-mb-section.post_author_override label:before,\n.llms-award-engagement-submitbox .llms-mb-list.student-info:before,\n.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {\n font: normal 20px/1 dashicons;\n speak: never;\n display: inline-block;\n margin-left: -1px;\n padding-right: 3px;\n vertical-align: top;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n position: relative;\n top: -1px;\n color: #8c8f94;\n}\nbody:not(.admin-color-fresh) .sync-action:before, body:not(.admin-color-fresh) .submitbox .llms-mb-section.student-info:before, body:not(.admin-color-fresh) .submitbox .llms-mb-section.post_author_override label:before,\nbody:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.student-info:before,\nbody:not(.admin-color-fresh) .llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {\n color: currentColor;\n}\n\n.submitbox .llms-mb-section.student-info:before, .submitbox .llms-mb-section.post_author_override label:before,\n.llms-award-engagement-submitbox .llms-mb-list.student-info:before,\n.llms-award-engagement-submitbox .llms-mb-list.post_author_override label:before {\n content: \"\\f110\";\n}\n.sync-action:before {\n content: \"\\f113\";\n color: white;\n}\n\n.submitbox .llms-mb-section.post_author_override label,\n.llms-award-engagement-submitbox .llms-mb-list.post_author_override label {\n display: inline-block;\n width: auto;\n}\n\n.llms-metabox #llms-new-access-plan-model {\n display: none;\n}\n.llms-metabox .llms-access-plans {\n margin-top: 10px;\n}\n.llms-metabox .llms-access-plans > .llms-no-plans-msg {\n display: none;\n}\n.llms-metabox .llms-access-plans > .llms-no-plans-msg:last-child {\n -webkit-box-shadow: inset 0 0 0 1px #e5e5e5;\n box-shadow: inset 0 0 0 1px #e5e5e5;\n display: block;\n text-align: center;\n padding: 10px;\n}\n.llms-metabox .llms-access-plans.dragging {\n background: #efefef;\n -webkit-box-shadow: inset 0 0 0 1px #e5e5e5;\n box-shadow: inset 0 0 0 1px #e5e5e5;\n}\n.llms-metabox .llms-access-plans .llms-spinning {\n z-index: 1;\n}\n.llms-metabox .llms-access-plans .llms-invalid {\n border-color: #bb231c;\n}\n.llms-metabox .llms-access-plans .llms-invalid .dashicons-warning {\n display: inline;\n}\n.llms-metabox .llms-access-plans .llms-needs-attention .dashicons-warning.medium-danger {\n display: inline;\n}\n.llms-metabox .llms-access-plans .dashicons-warning {\n display: none;\n}\n.llms-metabox .llms-access-plan {\n text-align: left;\n}\n.llms-metabox .llms-access-plan [data-tip]:before {\n text-align: center;\n}\n.llms-metabox .llms-access-plan .llms-plan-link,\n.llms-metabox .llms-access-plan [data-controller] {\n display: none;\n}\n.llms-metabox .llms-access-plan:hover .llms-plan-link, .llms-metabox .llms-access-plan.opened .llms-plan-link {\n display: inline-block;\n}\n.llms-metabox .llms-access-plan .llms-metabox-field {\n margin: 5px 0;\n}\n.llms-metabox .llms-access-plan .llms-required {\n color: #bb231c;\n margin-left: 3px;\n}\n.llms-metabox .llms-access-plan .notice {\n margin-left: 0;\n}\n\n.llms-metabox-students .llms-table tr .name {\n text-align: left;\n}\n.llms-metabox-students .llms-add-student:hover {\n color: #4d8d3c;\n}\n.llms-metabox-students .llms-remove-student:hover {\n color: #bb231c;\n}\n\n.llms-mb-container .tab-content ul:not(.select2-selection__rendered).llms-mb-repeater-fields > li.llms-mb-list {\n border-bottom: none;\n padding: 0 0 10px;\n}\n\n.llms-mb-list.repeater .llms-repeater-rows {\n position: relative;\n margin-top: 10px;\n min-height: 10px;\n}\n.llms-mb-list.repeater .llms-repeater-rows.dragging {\n background: #efefef;\n -webkit-box-shadow: inset 0 0 0 1px #e5e5e5;\n box-shadow: inset 0 0 0 1px #e5e5e5;\n}\n.llms-mb-list.repeater .llms-repeater-row {\n background: #fff;\n}\n.llms-mb-list.repeater .llms-mb-repeater-footer {\n text-align: right;\n margin-top: 20px;\n}\n.llms-mb-list.repeater .tmce-active .wp-editor-area {\n color: #32373c;\n}\n\n.llms-builder-launcher p {\n margin-top: 0;\n}\n.llms-builder-launcher ol {\n margin-top: -6px;\n}\n.llms-builder-launcher .llms-button-primary {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.wp-list-table .llms-status {\n border-radius: 6px;\n display: inline-block;\n font-size: 13px;\n font-weight: 700;\n line-height: 1.4;\n padding: 2px 6px;\n vertical-align: middle;\n}\n.wp-list-table .llms-status.llms-size--large {\n font-size: 105%;\n padding: 6px 12px;\n}\n.wp-list-table .llms-status.llms-active, .wp-list-table .llms-status.llms-completed, .wp-list-table .llms-status.llms-pass, .wp-list-table .llms-status.llms-txn-succeeded {\n color: #4d8d3c;\n background-color: rgba(77, 141, 60, 0.15);\n}\n.wp-list-table .llms-status.llms-fail, .wp-list-table .llms-status.llms-failed, .wp-list-table .llms-status.llms-expired, .wp-list-table .llms-status.llms-cancelled, .wp-list-table .llms-status.llms-txn-failed {\n color: #bb231c;\n background-color: rgba(187, 35, 28, 0.15);\n}\n.wp-list-table .llms-status.llms-incomplete, .wp-list-table .llms-status.llms-on-hold, .wp-list-table .llms-status.llms-pending, .wp-list-table .llms-status.llms-pending-cancel, .wp-list-table .llms-status.llms-refunded, .wp-list-table .llms-status.llms-txn-pending, .wp-list-table .llms-status.llms-txn-refunded {\n color: #c05621;\n background-color: rgba(192, 86, 33, 0.15);\n}\n\n#lifterlms-order-transactions .llms-table tfoot th {\n text-align: right;\n}\n\n.llms-post-table-post-filter {\n display: inline-block;\n margin-right: 6px;\n max-width: 100%;\n width: 220px;\n}\n\n.llms-nav-tab-wrapper {\n background: #466dd8;\n margin: 20px 0;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary {\n background: #e1e1e1;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item {\n margin: 0;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover, .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #cdcdcd;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {\n color: #414141;\n font-size: 15px;\n padding: 8px 14px;\n}\n.llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link .dashicons {\n font-size: 15px;\n height: 15px;\n width: 15px;\n}\n.llms-nav-tab-wrapper.llms-nav-text {\n background: inherit;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-items {\n padding-left: 0;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item {\n background: inherit;\n color: #646970;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:last-child:after {\n display: none;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:after {\n content: \"|\";\n display: inline-block;\n margin: 0 8px 0 6px;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link:hover {\n background: inherit;\n color: #466dd8;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item.llms-active .llms-nav-link {\n background: inherit;\n color: #000;\n font-weight: 600;\n text-decoration: none;\n}\n.llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link {\n color: #466dd8;\n display: inline-block;\n letter-spacing: 0;\n margin: 0;\n padding: 0;\n text-decoration: underline;\n text-transform: none;\n}\n.llms-nav-tab-wrapper.llms-nav-style-tabs {\n background-color: #1c3987;\n margin: 0;\n padding-top: 8px;\n}\n.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item {\n margin: 0 3px;\n}\n.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item .llms-nav-link {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.llms-nav-tab-wrapper.llms-nav-style-tabs .llms-nav-item.llms-active .llms-nav-link {\n background-color: #FFF;\n color: #466dd8;\n font-weight: 700;\n}\n.llms-nav-tab-wrapper.llms-nav-style-filters {\n background-color: #466dd8;\n border-radius: 12px;\n margin: 20px 0;\n overflow: hidden;\n padding: 0;\n}\n.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding-left: 0;\n}\n@media only screen and (min-width: 782px) {\n .llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n }\n}\n.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item {\n float: none;\n}\n.llms-nav-tab-wrapper.llms-nav-style-filters .llms-nav-items .llms-nav-item .llms-nav-link {\n padding: 14px;\n}\n.llms-nav-tab-wrapper .llms-nav-items {\n margin: 0;\n padding-left: 10px;\n}\n.llms-nav-tab-wrapper .llms-nav-items:before, .llms-nav-tab-wrapper .llms-nav-items:after {\n content: \" \";\n display: table;\n}\n.llms-nav-tab-wrapper .llms-nav-items:after {\n clear: both;\n}\n.llms-nav-tab-wrapper .llms-nav-item {\n margin: 0;\n}\n.llms-nav-tab-wrapper .llms-nav-item .llms-nav-link:hover {\n background: #466dd8;\n}\n.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {\n background: #1c3987;\n}\n.llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {\n font-weight: 400;\n}\n@media only screen and (min-width: 768px) {\n .llms-nav-tab-wrapper .llms-nav-item {\n float: left;\n }\n .llms-nav-tab-wrapper .llms-nav-item.llms-nav-item-right {\n float: right;\n }\n}\n.llms-nav-tab-wrapper .llms-nav-link {\n color: #fff;\n cursor: pointer;\n display: block;\n font-weight: 400;\n font-size: 15px;\n padding: 9px 18px;\n text-align: center;\n text-decoration: none;\n -webkit-transition: all 0.3s ease;\n transition: all 0.3s ease;\n}\n\n#llms-options-page-contents h2 {\n color: #999;\n font-weight: 500;\n letter-spacing: 2px;\n border-bottom: 1px solid #999;\n}\n\n.llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n margin: 0;\n padding: 0;\n}\n.llms-reporting.wrap .llms-stab-title {\n color: #1c3987;\n font-size: 36px;\n font-weight: 300;\n margin-bottom: 20px;\n}\n.llms-reporting.wrap td.id a {\n text-decoration: none;\n}\n.llms-reporting.wrap th.id, .llms-reporting.wrap td.id,\n.llms-reporting.wrap th.name, .llms-reporting.wrap td.name,\n.llms-reporting.wrap th.registered, .llms-reporting.wrap td.registered,\n.llms-reporting.wrap th.last_seen, .llms-reporting.wrap td.last_seen,\n.llms-reporting.wrap th.overall_progress, .llms-reporting.wrap td.overall_progress,\n.llms-reporting.wrap th.title, .llms-reporting.wrap td.title,\n.llms-reporting.wrap th.course, .llms-reporting.wrap td.course,\n.llms-reporting.wrap th.lesson, .llms-reporting.wrap td.lesson {\n text-align: left;\n}\n.llms-reporting.wrap td.section-title {\n background: #eaeaea;\n text-align: left;\n font-weight: 700;\n padding: 16px 4px;\n}\n.llms-reporting.wrap td.questions-table {\n text-align: left;\n}\n.llms-reporting.wrap td.questions-table .correct,\n.llms-reporting.wrap td.questions-table .question,\n.llms-reporting.wrap td.questions-table .selected {\n text-align: left;\n max-width: 300px;\n}\n.llms-reporting.wrap td.questions-table .correct img,\n.llms-reporting.wrap td.questions-table .question img,\n.llms-reporting.wrap td.questions-table .selected img {\n height: auto;\n max-width: 64px;\n}\n.llms-reporting.wrap table.quiz-attempts {\n margin-bottom: 40px;\n}\n.llms-reporting.wrap.tab--students .llms-options-page-contents #llms-award-certificate-wrapper .components-button.is-secondary {\n background: #e1e1e1;\n border-radius: 8px;\n -webkit-box-shadow: none;\n box-shadow: none;\n color: #414141;\n font-size: 13px;\n font-weight: 700;\n height: auto;\n padding: 8px 14px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-tab-wrapper.llms-nav-secondary, .llms-reporting.wrap.tab--sales .llms-nav-tab-wrapper.llms-nav-secondary {\n margin-bottom: 0;\n}\n.llms-reporting.wrap.tab--enrollments .llms-options-page-contents, .llms-reporting.wrap.tab--sales .llms-options-page-contents {\n -webkit-box-shadow: none;\n box-shadow: none;\n background: none;\n margin-top: 20px;\n padding: 0;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-item-align: center;\n align-self: center;\n color: #FFF;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n font-size: 13px;\n gap: 5px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form label, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form label {\n font-weight: 700;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form input, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form input {\n border: 0;\n font-size: 13px;\n margin: 0;\n padding: 0 4px;\n vertical-align: middle;\n width: 110px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-nav-style-filters .llms-analytics-form .select2-container input, .llms-reporting.wrap.tab--sales .llms-nav-style-filters .llms-analytics-form .select2-container input {\n width: 100% !important;\n}\n.llms-reporting.wrap.tab--enrollments .button.small, .llms-reporting.wrap.tab--sales .button.small {\n height: 23px;\n line-height: 23px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters, .llms-reporting.wrap.tab--sales .llms-analytics-filters {\n display: none;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-inside-wrap, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-inside-wrap {\n background-color: #FFF;\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n margin: -20px 10px 20px 10px;\n padding: 20px;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n gap: 20px;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n margin: 0;\n}\n@media only screen and (min-width: 782px) {\n .llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-items, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-items {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n }\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 100%;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item label, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item label {\n display: block;\n font-weight: 700;\n margin: 0 0 5px 0;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters .llms-nav-item .select2-selection__rendered, .llms-reporting.wrap.tab--sales .llms-analytics-filters .llms-nav-item .select2-selection__rendered {\n word-wrap: break-word;\n text-overflow: inherit;\n white-space: normal;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p, .llms-reporting.wrap.tab--sales .llms-analytics-filters p {\n margin: 0;\n text-align: right;\n}\n.llms-reporting.wrap.tab--enrollments .llms-analytics-filters p .llms-button-primary, .llms-reporting.wrap.tab--sales .llms-analytics-filters p .llms-button-primary {\n display: inline-block;\n}\n.llms-reporting.wrap .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap {\n width: 160px;\n}\n\n.llms-charts-wrapper {\n background-color: #FFF;\n border: 1px solid #dedede;\n border-radius: 12px;\n -webkit-box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);\n padding: 20px;\n}\n\n.llms-reporting-tab h1, .llms-reporting-tab h2, .llms-reporting-tab h3, .llms-reporting-tab h4, .llms-reporting-tab h5, .llms-reporting-tab h6 {\n margin: 0;\n}\n.llms-reporting-tab h1 a, .llms-reporting-tab h2 a, .llms-reporting-tab h3 a, .llms-reporting-tab h4 a, .llms-reporting-tab h5 a, .llms-reporting-tab h6 a {\n color: #466dd8;\n text-decoration: none;\n}\n.llms-reporting-tab h1 a:hover, .llms-reporting-tab h2 a:hover, .llms-reporting-tab h3 a:hover, .llms-reporting-tab h4 a:hover, .llms-reporting-tab h5 a:hover, .llms-reporting-tab h6 a:hover {\n color: #466dd8;\n}\n.llms-reporting-tab h2 {\n font-size: 22px;\n line-height: 1.5;\n}\n.llms-reporting-tab h2.llms-table-title {\n margin-bottom: 20px;\n}\n.llms-reporting-tab h5 {\n font-size: 15px;\n line-height: 1.5;\n}\n.llms-reporting-tab .llms-reporting-body {\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n margin: 20px auto;\n padding: 0;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-stab {\n padding: 30px;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-stab .llms-table-header {\n margin: 0;\n}\n.llms-reporting-tab .llms-reporting-body .llms-gb-tab {\n padding: 30px;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-header {\n padding: 30px;\n margin: 0;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img {\n border-radius: 50%;\n display: inline-block;\n margin-right: 10px;\n overflow: hidden;\n vertical-align: middle;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-img img {\n display: block;\n max-height: 64px;\n width: auto;\n}\n.llms-reporting-tab .llms-reporting-body .llms-reporting-header .llms-reporting-header-info {\n display: inline-block;\n vertical-align: middle;\n}\n\n.llms-reporting-breadcrumbs {\n margin: 0;\n padding: 0;\n}\n.llms-reporting-breadcrumbs a {\n color: #466dd8;\n font-size: 15px;\n text-decoration: none;\n}\n.llms-reporting-breadcrumbs a:hover {\n color: #2b55cb;\n}\n.llms-reporting-breadcrumbs a:after {\n content: \" > \";\n color: #646970;\n}\n.llms-reporting-breadcrumbs a:last-child {\n color: #000;\n font-weight: 700;\n}\n.llms-reporting-breadcrumbs a:last-child:after {\n display: none;\n}\n\n#llms-students-table .name {\n text-align: left;\n}\n\n.llms-reporting-tab-content {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.llms-reporting-tab-content > header:before, .llms-reporting-tab-content > header:after {\n content: \" \";\n display: table;\n}\n.llms-reporting-tab-content > header:after {\n clear: both;\n}\n.llms-reporting-tab-content h3 {\n margin-bottom: 20px;\n}\n.llms-reporting-tab-content .llms-reporting-tab-filter {\n float: right;\n position: relative;\n margin-right: 0.75em;\n width: 180px;\n top: -3px;\n}\n.llms-reporting-tab-content .llms-reporting-tab-main {\n -webkit-box-flex: 3;\n -ms-flex: 3;\n flex: 3;\n max-width: 75%;\n}\n.llms-reporting-tab-content .llms-reporting-tab-side {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n margin-left: 20px;\n}\n.llms-reporting-tab-content > .llms-table-wrap {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n\n.llms-reporting-widgets:before, .llms-reporting-widgets:after {\n content: \" \";\n display: table;\n}\n.llms-reporting-widgets:after {\n clear: both;\n}\n\n.llms-reporting-widget {\n border-top: 4px solid #466dd8;\n background: #fafafa;\n margin-bottom: 10px;\n padding: 30px;\n}\n.llms-reporting-widget:before, .llms-reporting-widget:after {\n content: \" \";\n display: table;\n}\n.llms-reporting-widget:after {\n clear: both;\n}\n.llms-reporting-widget .fa {\n color: #999;\n float: left;\n font-size: 32px;\n margin-right: 10px;\n}\n.llms-reporting-widget strong {\n color: #333;\n font-size: 20px;\n line-height: 1.2;\n}\n.llms-reporting-widget.llms-reporting-student-address strong {\n line-height: 1.1;\n}\n.llms-reporting-widget sup,\n.llms-reporting-widget .llms-price-currency-symbol {\n font-size: 75%;\n position: relative;\n top: -4px;\n vertical-align: baseline;\n}\n.llms-reporting-widget small {\n font-size: 13px;\n}\n.llms-reporting-widget small.compare {\n margin-left: 5px;\n}\n.llms-reporting-widget small.compare.positive {\n color: #4d8d3c;\n}\n.llms-reporting-widget small.compare.negative {\n color: #bb231c;\n}\n\n.llms-reporting-event {\n border-left: 4px solid #555;\n background: #fafafa;\n font-size: 11px;\n line-height: 1.2;\n margin-bottom: 0.75em;\n padding: 10px;\n}\n.llms-reporting-event:before, .llms-reporting-event:after {\n content: \" \";\n display: table;\n}\n.llms-reporting-event:after {\n clear: both;\n}\n.llms-reporting-event.color--blue {\n border-left-color: #466dd8;\n}\n.llms-reporting-event.color--green, .llms-reporting-event._enrollment_trigger, .llms-reporting-event._is_complete.yes {\n border-left-color: #4d8d3c;\n}\n.llms-reporting-event.color--purple, .llms-reporting-event._status.enrolled {\n border-left-color: #845ef7;\n}\n.llms-reporting-event.color--red, .llms-reporting-event._status.expired, .llms-reporting-event._status.cancelled {\n border-left-color: #bb231c;\n}\n.llms-reporting-event.color--orange, .llms-reporting-event._achievement_earned, .llms-reporting-event._certificate_earned, .llms-reporting-event._email_sent {\n border-left-color: #c05621;\n}\n.llms-reporting-event time {\n color: #888;\n}\n.llms-reporting-event .llms-student-avatar {\n margin-left: 10px;\n float: right;\n}\n.llms-reporting-event a {\n text-decoration: none;\n color: inherit;\n}\n\n@media only screen and (min-width: 782px) {\n .llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {\n margin-left: 0;\n margin-right: 0;\n }\n}\n.llms-quiz-attempt-results {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question {\n background: #efefef;\n border-radius: 6px;\n margin: 0 0 15px;\n position: relative;\n list-style-type: none;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {\n color: inherit;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 10px;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 15px 35px 15px 15px;\n text-decoration: none;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct, .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect {\n background: rgba(192, 86, 33, 0.2);\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon, .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon {\n background-color: #c05621;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {\n background: rgba(77, 141, 60, 0.15);\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {\n background-color: #4d8d3c;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {\n background: rgba(187, 35, 28, 0.15);\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {\n background-color: #bb231c;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question pre {\n overflow: auto;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {\n font-size: 22px;\n margin: 0;\n line-height: 1.4;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {\n line-height: 1.4;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {\n position: absolute;\n right: -12px;\n top: -2px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon {\n color: rgba(255, 255, 255, 0.65);\n border-radius: 50%;\n font-size: 30px;\n height: 40px;\n line-height: 40px;\n text-align: center;\n width: 40px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {\n display: none;\n padding: 0 15px 15px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {\n font-weight: 700;\n margin: 0 0 10px;\n padding: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers {\n margin: 0;\n padding: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {\n padding: 0;\n margin: 0 0 0 30px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child {\n list-style-type: none;\n margin-left: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {\n height: auto;\n max-width: 200px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section {\n border-top: 2px solid rgba(255, 255, 255, 0.5);\n margin-top: 20px;\n padding-top: 20px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child {\n border-top: none;\n margin-top: 0;\n padding-top: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers, .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer, .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {\n display: inline-block;\n list-style-type: none;\n margin: 0;\n padding: 5px;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {\n opacity: 0.5;\n}\n.llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {\n font-style: italic;\n font-weight: normal;\n}\n\n.wrap.llms-reporting .llms-inside-wrap,\n.wrap.lifterlms-settings .llms-inside-wrap,\n.wrap.llms-status .llms-inside-wrap {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n margin: 0 auto;\n}\n.wrap.llms-reporting .llms-inside-wrap .llms-nav-text,\n.wrap.lifterlms-settings .llms-inside-wrap .llms-nav-text,\n.wrap.llms-status .llms-inside-wrap .llms-nav-text {\n margin: 0 auto;\n}\n.wrap.llms-reporting .llms-subheader .llms-save,\n.wrap.lifterlms-settings .llms-subheader .llms-save,\n.wrap.llms-status .llms-subheader .llms-save {\n -webkit-box-flex: 1;\n -ms-flex: auto;\n flex: auto;\n text-align: right;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary {\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n margin: 0 -20px 20px -10px;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {\n padding-left: 0;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover {\n background: #f0f0f1;\n color: #222222;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #fafafa;\n color: #466dd8;\n border-top-color: #466dd8;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n font-weight: 700;\n}\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {\n border-top: 2px solid transparent;\n padding: 14px;\n}\n.wrap.llms-reporting .llms-setting-group,\n.wrap.lifterlms-settings .llms-setting-group,\n.wrap.llms-status .llms-setting-group {\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n margin: 20px auto;\n padding: 20px;\n}\n.wrap.llms-reporting .llms-setting-group .llms-label,\n.wrap.lifterlms-settings .llms-setting-group .llms-label,\n.wrap.llms-status .llms-setting-group .llms-label {\n border-bottom: 1px solid #efefef;\n font-weight: 700;\n font-size: 20px;\n padding: 20px;\n margin: -20px -20px 20px;\n}\n.wrap.llms-reporting .llms-setting-group .llms-label .llms-button-primary,\n.wrap.lifterlms-settings .llms-setting-group .llms-label .llms-button-primary,\n.wrap.llms-status .llms-setting-group .llms-label .llms-button-primary {\n margin-left: 10px;\n}\n.wrap.llms-reporting .llms-setting-group .llms-help-tooltip .dashicons,\n.wrap.lifterlms-settings .llms-setting-group .llms-help-tooltip .dashicons,\n.wrap.llms-status .llms-setting-group .llms-help-tooltip .dashicons {\n color: #444;\n cursor: help;\n}\n.wrap.llms-reporting .llms-setting-group .form-table,\n.wrap.lifterlms-settings .llms-setting-group .form-table,\n.wrap.llms-status .llms-setting-group .form-table {\n margin: 0;\n}\n.wrap.llms-reporting .llms-setting-group .form-table tr:first-child .llms-subtitle,\n.wrap.lifterlms-settings .llms-setting-group .form-table tr:first-child .llms-subtitle,\n.wrap.llms-status .llms-setting-group .form-table tr:first-child .llms-subtitle {\n margin-top: 0;\n}\n.wrap.llms-reporting .llms-setting-group td[colspan=\"2\"],\n.wrap.lifterlms-settings .llms-setting-group td[colspan=\"2\"],\n.wrap.llms-status .llms-setting-group td[colspan=\"2\"] {\n padding-top: 0;\n padding-left: 0;\n}\n.wrap.llms-reporting .llms-setting-group tr.llms-disabled-field,\n.wrap.lifterlms-settings .llms-setting-group tr.llms-disabled-field,\n.wrap.llms-status .llms-setting-group tr.llms-disabled-field {\n opacity: 0.5;\n pointer-events: none;\n}\n.wrap.llms-reporting .llms-setting-group p,\n.wrap.lifterlms-settings .llms-setting-group p,\n.wrap.llms-status .llms-setting-group p {\n font-size: 14px;\n}\n.wrap.llms-reporting .llms-setting-group input[type=text],\n.wrap.llms-reporting .llms-setting-group input[type=password],\n.wrap.llms-reporting .llms-setting-group input[type=datetime],\n.wrap.llms-reporting .llms-setting-group input[type=datetime-local],\n.wrap.llms-reporting .llms-setting-group input[type=date],\n.wrap.llms-reporting .llms-setting-group input[type=month],\n.wrap.llms-reporting .llms-setting-group input[type=time],\n.wrap.llms-reporting .llms-setting-group input[type=week],\n.wrap.llms-reporting .llms-setting-group input[type=number],\n.wrap.llms-reporting .llms-setting-group input[type=email],\n.wrap.llms-reporting .llms-setting-group input[type=url],\n.wrap.llms-reporting .llms-setting-group input[type=search],\n.wrap.llms-reporting .llms-setting-group input[type=tel],\n.wrap.llms-reporting .llms-setting-group input[type=color],\n.wrap.llms-reporting .llms-setting-group select,\n.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area),\n.wrap.lifterlms-settings .llms-setting-group input[type=text],\n.wrap.lifterlms-settings .llms-setting-group input[type=password],\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime],\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local],\n.wrap.lifterlms-settings .llms-setting-group input[type=date],\n.wrap.lifterlms-settings .llms-setting-group input[type=month],\n.wrap.lifterlms-settings .llms-setting-group input[type=time],\n.wrap.lifterlms-settings .llms-setting-group input[type=week],\n.wrap.lifterlms-settings .llms-setting-group input[type=number],\n.wrap.lifterlms-settings .llms-setting-group input[type=email],\n.wrap.lifterlms-settings .llms-setting-group input[type=url],\n.wrap.lifterlms-settings .llms-setting-group input[type=search],\n.wrap.lifterlms-settings .llms-setting-group input[type=tel],\n.wrap.lifterlms-settings .llms-setting-group input[type=color],\n.wrap.lifterlms-settings .llms-setting-group select,\n.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area),\n.wrap.llms-status .llms-setting-group input[type=text],\n.wrap.llms-status .llms-setting-group input[type=password],\n.wrap.llms-status .llms-setting-group input[type=datetime],\n.wrap.llms-status .llms-setting-group input[type=datetime-local],\n.wrap.llms-status .llms-setting-group input[type=date],\n.wrap.llms-status .llms-setting-group input[type=month],\n.wrap.llms-status .llms-setting-group input[type=time],\n.wrap.llms-status .llms-setting-group input[type=week],\n.wrap.llms-status .llms-setting-group input[type=number],\n.wrap.llms-status .llms-setting-group input[type=email],\n.wrap.llms-status .llms-setting-group input[type=url],\n.wrap.llms-status .llms-setting-group input[type=search],\n.wrap.llms-status .llms-setting-group input[type=tel],\n.wrap.llms-status .llms-setting-group input[type=color],\n.wrap.llms-status .llms-setting-group select,\n.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area) {\n width: 50%;\n}\n.wrap.llms-reporting .llms-setting-group input[type=text].medium,\n.wrap.llms-reporting .llms-setting-group input[type=password].medium,\n.wrap.llms-reporting .llms-setting-group input[type=datetime].medium,\n.wrap.llms-reporting .llms-setting-group input[type=datetime-local].medium,\n.wrap.llms-reporting .llms-setting-group input[type=date].medium,\n.wrap.llms-reporting .llms-setting-group input[type=month].medium,\n.wrap.llms-reporting .llms-setting-group input[type=time].medium,\n.wrap.llms-reporting .llms-setting-group input[type=week].medium,\n.wrap.llms-reporting .llms-setting-group input[type=number].medium,\n.wrap.llms-reporting .llms-setting-group input[type=email].medium,\n.wrap.llms-reporting .llms-setting-group input[type=url].medium,\n.wrap.llms-reporting .llms-setting-group input[type=search].medium,\n.wrap.llms-reporting .llms-setting-group input[type=tel].medium,\n.wrap.llms-reporting .llms-setting-group input[type=color].medium,\n.wrap.llms-reporting .llms-setting-group select.medium,\n.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=text].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=password].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=date].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=month].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=time].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=week].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=number].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=email].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=url].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=search].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=tel].medium,\n.wrap.lifterlms-settings .llms-setting-group input[type=color].medium,\n.wrap.lifterlms-settings .llms-setting-group select.medium,\n.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).medium,\n.wrap.llms-status .llms-setting-group input[type=text].medium,\n.wrap.llms-status .llms-setting-group input[type=password].medium,\n.wrap.llms-status .llms-setting-group input[type=datetime].medium,\n.wrap.llms-status .llms-setting-group input[type=datetime-local].medium,\n.wrap.llms-status .llms-setting-group input[type=date].medium,\n.wrap.llms-status .llms-setting-group input[type=month].medium,\n.wrap.llms-status .llms-setting-group input[type=time].medium,\n.wrap.llms-status .llms-setting-group input[type=week].medium,\n.wrap.llms-status .llms-setting-group input[type=number].medium,\n.wrap.llms-status .llms-setting-group input[type=email].medium,\n.wrap.llms-status .llms-setting-group input[type=url].medium,\n.wrap.llms-status .llms-setting-group input[type=search].medium,\n.wrap.llms-status .llms-setting-group input[type=tel].medium,\n.wrap.llms-status .llms-setting-group input[type=color].medium,\n.wrap.llms-status .llms-setting-group select.medium,\n.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).medium {\n width: 30%;\n}\n.wrap.llms-reporting .llms-setting-group input[type=text].small,\n.wrap.llms-reporting .llms-setting-group input[type=password].small,\n.wrap.llms-reporting .llms-setting-group input[type=datetime].small,\n.wrap.llms-reporting .llms-setting-group input[type=datetime-local].small,\n.wrap.llms-reporting .llms-setting-group input[type=date].small,\n.wrap.llms-reporting .llms-setting-group input[type=month].small,\n.wrap.llms-reporting .llms-setting-group input[type=time].small,\n.wrap.llms-reporting .llms-setting-group input[type=week].small,\n.wrap.llms-reporting .llms-setting-group input[type=number].small,\n.wrap.llms-reporting .llms-setting-group input[type=email].small,\n.wrap.llms-reporting .llms-setting-group input[type=url].small,\n.wrap.llms-reporting .llms-setting-group input[type=search].small,\n.wrap.llms-reporting .llms-setting-group input[type=tel].small,\n.wrap.llms-reporting .llms-setting-group input[type=color].small,\n.wrap.llms-reporting .llms-setting-group select.small,\n.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).small,\n.wrap.lifterlms-settings .llms-setting-group input[type=text].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=password].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=date].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=month].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=time].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=week].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=number].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=email].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=url].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=search].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=tel].small,\n.wrap.lifterlms-settings .llms-setting-group input[type=color].small,\n.wrap.lifterlms-settings .llms-setting-group select.small,\n.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).small,\n.wrap.llms-status .llms-setting-group input[type=text].small,\n.wrap.llms-status .llms-setting-group input[type=password].small,\n.wrap.llms-status .llms-setting-group input[type=datetime].small,\n.wrap.llms-status .llms-setting-group input[type=datetime-local].small,\n.wrap.llms-status .llms-setting-group input[type=date].small,\n.wrap.llms-status .llms-setting-group input[type=month].small,\n.wrap.llms-status .llms-setting-group input[type=time].small,\n.wrap.llms-status .llms-setting-group input[type=week].small,\n.wrap.llms-status .llms-setting-group input[type=number].small,\n.wrap.llms-status .llms-setting-group input[type=email].small,\n.wrap.llms-status .llms-setting-group input[type=url].small,\n.wrap.llms-status .llms-setting-group input[type=search].small,\n.wrap.llms-status .llms-setting-group input[type=tel].small,\n.wrap.llms-status .llms-setting-group input[type=color].small,\n.wrap.llms-status .llms-setting-group select.small,\n.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).small {\n width: 20%;\n}\n.wrap.llms-reporting .llms-setting-group input[type=text].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=password].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=datetime].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=datetime-local].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=date].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=month].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=time].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=week].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=number].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=email].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=url].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=search].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=tel].tiny,\n.wrap.llms-reporting .llms-setting-group input[type=color].tiny,\n.wrap.llms-reporting .llms-setting-group select.tiny,\n.wrap.llms-reporting .llms-setting-group textarea:not(.wp-editor-area).tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=text].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=password].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=datetime-local].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=date].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=month].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=time].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=week].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=number].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=email].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=url].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=search].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=tel].tiny,\n.wrap.lifterlms-settings .llms-setting-group input[type=color].tiny,\n.wrap.lifterlms-settings .llms-setting-group select.tiny,\n.wrap.lifterlms-settings .llms-setting-group textarea:not(.wp-editor-area).tiny,\n.wrap.llms-status .llms-setting-group input[type=text].tiny,\n.wrap.llms-status .llms-setting-group input[type=password].tiny,\n.wrap.llms-status .llms-setting-group input[type=datetime].tiny,\n.wrap.llms-status .llms-setting-group input[type=datetime-local].tiny,\n.wrap.llms-status .llms-setting-group input[type=date].tiny,\n.wrap.llms-status .llms-setting-group input[type=month].tiny,\n.wrap.llms-status .llms-setting-group input[type=time].tiny,\n.wrap.llms-status .llms-setting-group input[type=week].tiny,\n.wrap.llms-status .llms-setting-group input[type=number].tiny,\n.wrap.llms-status .llms-setting-group input[type=email].tiny,\n.wrap.llms-status .llms-setting-group input[type=url].tiny,\n.wrap.llms-status .llms-setting-group input[type=search].tiny,\n.wrap.llms-status .llms-setting-group input[type=tel].tiny,\n.wrap.llms-status .llms-setting-group input[type=color].tiny,\n.wrap.llms-status .llms-setting-group select.tiny,\n.wrap.llms-status .llms-setting-group textarea:not(.wp-editor-area).tiny {\n width: 10%;\n}\n@media only screen and (min-width: 782px) {\n .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link,\n.wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #fff;\n }\n}\n.wrap.llms-reporting #llms-mailhawk-connect,\n.wrap.lifterlms-settings #llms-mailhawk-connect,\n.wrap.llms-status #llms-mailhawk-connect {\n height: auto;\n margin: 0 0 6px;\n position: relative;\n}\n.wrap.llms-reporting #llms-mailhawk-connect .dashicons,\n.wrap.lifterlms-settings #llms-mailhawk-connect .dashicons,\n.wrap.llms-status #llms-mailhawk-connect .dashicons {\n margin: -4px 4px 0 0;\n vertical-align: middle;\n}\n.wrap.llms-reporting #llms-sendwp-connect,\n.wrap.lifterlms-settings #llms-sendwp-connect,\n.wrap.llms-status #llms-sendwp-connect {\n height: auto;\n margin: 0 0 6px;\n position: relative;\n}\n.wrap.llms-reporting #llms-sendwp-connect .fa,\n.wrap.lifterlms-settings #llms-sendwp-connect .fa,\n.wrap.llms-status #llms-sendwp-connect .fa {\n margin-right: 4px;\n}\n\n@media only screen and (min-width: 782px) {\n .wrap.lifterlms-settings .llms-subheader {\n height: 40px;\n position: sticky;\n top: 32px;\n }\n .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary {\n margin: 0 -20px 20px -22px;\n }\n .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {\n padding-left: 10px;\n }\n .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary {\n margin: 0 -20px 20px -22px;\n }\n .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {\n padding-left: 10px;\n }\n .wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary {\n margin: 0 -20px 20px -22px;\n }\n .wrap.llms-status .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-items {\n padding-left: 10px;\n }\n}\n.wrap.llms-dashboard .llms-inside-wrap {\n padding-top: 30px;\n}\n.wrap.llms-dashboard #poststuff h2 {\n padding: 12px 20px;\n}\n.wrap.llms-dashboard .llms-dashboard-activity h2 {\n font-size: 20px;\n font-weight: 700;\n line-height: 1.5;\n margin-top: 0;\n text-align: center;\n}\n.wrap.llms-dashboard .postbox {\n background-color: #FFF;\n border: none;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n}\n.wrap.llms-dashboard .postbox .postbox-header {\n border-bottom-color: #efefef;\n}\n.wrap.llms-dashboard .postbox .inside {\n padding: 20px;\n}\n.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap {\n margin-top: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item {\n margin-top: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item p {\n text-align: left;\n}\n.wrap.llms-dashboard #llms_dashboard_addons .llms-addons-wrap .llms-add-on-item footer.llms-actions {\n padding-top: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_addons p {\n text-align: center;\n}\n.wrap.llms-dashboard #llms_dashboard_addons p .llms-button-primary {\n display: inline-block;\n margin-top: 15px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links ul {\n list-style: disc;\n margin: 5px 0 0 20px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links ul li {\n font-size: 15px;\n line-height: 1.5;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links {\n display: grid;\n grid-template-columns: 1fr;\n grid-gap: 30px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links a {\n display: inline-block;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list h3 {\n margin: 0 0 10px 0;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul {\n margin-bottom: 20px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list ul.llms-checklist {\n list-style: none;\n margin-left: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa {\n text-align: center;\n width: 16px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-check {\n color: #008a20;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .fa-times {\n color: #d63638;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-primary,\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-secondary,\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links .llms-list .llms-button-action {\n display: block;\n text-align: center;\n}\n@media only screen and (min-width: 782px) {\n .wrap.llms-dashboard #llms_dashboard_quick_links .llms-quick-links {\n grid-template-columns: 1fr 1fr 1fr;\n }\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: 20px;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 {\n margin: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links .llms-list h3 .dashicons {\n color: #AAA;\n}\n@media only screen and (min-width: 782px) {\n .wrap.llms-dashboard #llms_dashboard_quick_links .llms-help-links {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n.wrap.llms-dashboard #llms_dashboard_blog ul,\n.wrap.llms-dashboard #llms_dashboard_podcast ul {\n margin: 0;\n}\n.wrap.llms-dashboard #llms_dashboard_blog ul li,\n.wrap.llms-dashboard #llms_dashboard_podcast ul li {\n margin: 0 0 15px 0;\n}\n.wrap.llms-dashboard #llms_dashboard_blog ul li a,\n.wrap.llms-dashboard #llms_dashboard_podcast ul li a {\n display: block;\n}\n.wrap.llms-dashboard #llms_dashboard_blog p,\n.wrap.llms-dashboard #llms_dashboard_podcast p {\n margin: 15px 0;\n text-align: center;\n}\n.wrap.llms-dashboard #llms_dashboard_blog p a,\n.wrap.llms-dashboard #llms_dashboard_podcast p a {\n display: inline-block;\n}\n\n#llms_dashboard_widget .inside {\n margin: 0;\n padding-bottom: 8px;\n}\n#llms_dashboard_widget .llms-dashboard-widget-wrap {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n padding-top: 12px;\n}\n#llms_dashboard_widget .activity-block {\n padding-bottom: 8px;\n border-color: #e8e8e8;\n}\n#llms_dashboard_widget h3 {\n margin-bottom: 0;\n}\n#llms_dashboard_widget .llms-charts-wrapper {\n display: none;\n}\n#llms_dashboard_widget .llms-widget-row {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n -webkit-box-align: stretch;\n -ms-flex-align: stretch;\n align-items: stretch;\n padding: 4px 0;\n}\n#llms_dashboard_widget .llms-widget-row:before, #llms_dashboard_widget .llms-widget-row:after {\n display: none;\n}\n#llms_dashboard_widget .llms-widget-1-4 {\n padding: 0;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n#llms_dashboard_widget .llms-widget {\n padding: 8px 8px 12px;\n margin: 0;\n border-radius: 6px;\n border: 1px solid #e8e8e8;\n -webkit-box-shadow: 0px 2px 4px rgb(246, 247, 247);\n box-shadow: 0px 2px 4px rgb(246, 247, 247);\n height: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: end;\n -ms-flex-align: end;\n align-items: flex-end;\n}\n#llms_dashboard_widget .llms-label {\n font-size: 14px;\n width: 100%;\n -ms-flex-item-align: start;\n align-self: flex-start;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n#llms_dashboard_widget .llms-widget-content {\n font-size: 20px;\n margin: 0;\n}\n#llms_dashboard_widget .llms-widget-info-toggle {\n display: none;\n}\n#llms_dashboard_widget a {\n border: 0;\n}\n#llms_dashboard_widget .subsubsub {\n color: #dcdcde;\n}\n\n.llms-dashboard-widget-feed {\n margin: 0 -12px;\n padding: 0;\n background-color: #f6f7f7;\n}\n.llms-dashboard-widget-feed li {\n margin: 0;\n padding: 8px 12px;\n border-bottom: 1px solid #e8e8e8;\n}\n.llms-dashboard-widget-feed span {\n display: block;\n}\n\n.wrap.llms-resources .llms-inside-wrap {\n padding-top: 30px;\n}\n.wrap.llms-resources #poststuff #post-body.columns-2 {\n margin-right: 350px;\n}\n.wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables {\n width: 330px;\n}\n@media only screen and (max-width: 850px) {\n .wrap.llms-resources #poststuff #post-body.columns-2 #side-sortables {\n width: auto;\n }\n}\n.wrap.llms-resources #poststuff #postbox-container-1 {\n float: right;\n margin-right: -350px;\n width: 330px;\n}\n.wrap.llms-resources #poststuff h2 {\n padding: 12px 20px;\n}\n.wrap.llms-resources #poststuff .postbox {\n background-color: #FFF;\n border: none;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n}\n.wrap.llms-resources #poststuff .postbox .postbox-header {\n border-bottom-color: #efefef;\n}\n.wrap.llms-resources #poststuff .postbox .inside {\n margin: 0;\n padding: 20px;\n}\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video p {\n font-size: 15px;\n line-height: 1.5;\n margin: 0 0 40px 0;\n}\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container {\n height: 0;\n overflow: hidden;\n padding-top: 30px;\n padding-bottom: 56.25%;\n position: relative;\n}\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container iframe,\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container object,\n.wrap.llms-resources #llms_dashboard_welcome_video .llms-welcome-video .llms-welcome-video-container embed {\n left: 0;\n height: 100%;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.wrap.llms-resources #llms_dashboard_getting_started ul {\n margin: 0 0 20px 0;\n}\n.wrap.llms-resources #llms_dashboard_getting_started ul li {\n font-size: 15px;\n line-height: 1.5;\n margin-bottom: 15px;\n}\n.wrap.llms-resources #llms_dashboard_getting_started .llms-button-primary {\n display: block;\n margin-top: auto;\n max-width: 300px;\n text-align: center;\n}\n.wrap.llms-resources #llms_dashboard_resource_links ul {\n list-style: disc;\n margin: 5px 0 0 20px;\n}\n.wrap.llms-resources #llms_dashboard_resource_links ul li {\n font-size: 15px;\n line-height: 1.5;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links {\n display: grid;\n grid-template-columns: 1fr;\n grid-gap: 60px;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links a {\n display: inline-block;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 {\n margin: 0 0 10px 0;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list h3 .dashicons {\n color: #AAA;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list ul {\n margin-bottom: 20px;\n}\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-primary,\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-secondary,\n.wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links .llms-list .llms-button-action {\n display: block;\n margin-top: auto;\n max-width: 300px;\n text-align: center;\n}\n@media only screen and (min-width: 782px) {\n .wrap.llms-resources #llms_dashboard_resource_links .llms-resource-links {\n grid-template-columns: 1fr 1fr 1fr;\n }\n}\n\n.llms-remarks .llms-remarks-field {\n height: 120px;\n width: 100%;\n}\n.llms-remarks input[type=number] {\n width: 60px;\n}\n\nbutton[name=llms_quiz_attempt_action] .save {\n display: none;\n}\nbutton[name=llms_quiz_attempt_action].grading .default {\n display: none;\n}\nbutton[name=llms_quiz_attempt_action].grading .save {\n display: inline;\n}\n\n.llms-form-fields {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.llms-form-fields * {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.llms-form-fields.flush .llms-form-field {\n padding: 0 0 20px;\n}\n.llms-form-fields label:not(.llms-field-html label) {\n font-weight: 700;\n}\n.llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {\n margin-bottom: 0;\n}\n\n.llms-form-heading {\n padding: 0 10px 10px;\n}\n\n.llms-form-field {\n float: left;\n padding: 0 10px 20px;\n position: relative;\n width: 100%;\n}\n.llms-form-field label:empty:after {\n content: \" \";\n}\n.llms-form-field [type=text],\n.llms-form-field [type=password],\n.llms-form-field [type=email],\n.llms-form-field [type=url],\n.llms-form-field [type=tel],\n.llms-form-field [type=number] {\n background-color: #fefefe;\n background-clip: padding-box;\n border: 1px solid #999;\n border-radius: 6px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n font-size: 16px;\n line-height: 1;\n padding: 8px 12px;\n -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n width: 100%;\n}\n.llms-form-field input:focus,\n.llms-form-field input:focus-visible {\n border-color: #6888df;\n outline: thin solid;\n}\n.llms-form-field select {\n -webkit-appearance: none;\n -moz-appearance: none;\n -ms-appearance: none;\n appearance: none;\n background-color: #fefefe;\n border: 1px solid #999;\n border-radius: 6px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #010101;\n padding: 8px 12px;\n margin: 0;\n width: 100%;\n font-family: inherit;\n font-size: 16px;\n cursor: inherit;\n line-height: 1.6;\n z-index: 1;\n outline: none;\n background-repeat: no-repeat;\n background-image: linear-gradient(45deg, transparent 50%, currentcolor 50%), linear-gradient(135deg, currentcolor 50%, transparent 50%);\n background-position: right 15px top 1.3rem, right 10px top 1.3rem;\n background-size: 5px 5px, 5px 5px;\n}\n.llms-form-field select::-ms-expand {\n display: none;\n}\n.llms-form-field select:focus {\n border: 1px solid #6888df;\n outline: thin solid;\n}\n.llms-form-field.valid input[type=date], .llms-form-field.valid input[type=time], .llms-form-field.valid input[type=datetime-local], .llms-form-field.valid input[type=week], .llms-form-field.valid input[type=month], .llms-form-field.valid input[type=text], .llms-form-field.valid input[type=email], .llms-form-field.valid input[type=url], .llms-form-field.valid input[type=password], .llms-form-field.valid input[type=search], .llms-form-field.valid input[type=tel], .llms-form-field.valid input[type=number], .llms-form-field.valid textarea, .llms-form-field.valid select {\n background: rgba(131, 195, 115, 0.3);\n border-color: #83c373;\n}\n.llms-form-field.error input[type=date], .llms-form-field.error input[type=time], .llms-form-field.error input[type=datetime-local], .llms-form-field.error input[type=week], .llms-form-field.error input[type=month], .llms-form-field.error input[type=text], .llms-form-field.error input[type=email], .llms-form-field.error input[type=url], .llms-form-field.error input[type=password], .llms-form-field.error input[type=search], .llms-form-field.error input[type=tel], .llms-form-field.error input[type=number], .llms-form-field.error textarea, .llms-form-field.error select, .llms-form-field.invalid input[type=date], .llms-form-field.invalid input[type=time], .llms-form-field.invalid input[type=datetime-local], .llms-form-field.invalid input[type=week], .llms-form-field.invalid input[type=month], .llms-form-field.invalid input[type=text], .llms-form-field.invalid input[type=email], .llms-form-field.invalid input[type=url], .llms-form-field.invalid input[type=password], .llms-form-field.invalid input[type=search], .llms-form-field.invalid input[type=tel], .llms-form-field.invalid input[type=number], .llms-form-field.invalid textarea, .llms-form-field.invalid select {\n background: rgba(187, 35, 28, 0.3);\n border-color: #bb231c;\n}\n.llms-form-field.llms-visually-hidden-field {\n display: none;\n}\n.llms-form-field.align-right {\n text-align: right;\n}\n@media screen and (min-width: 600px) {\n .llms-form-field.llms-cols-1 {\n width: 8.3333333333%;\n }\n .llms-form-field.llms-cols-2 {\n width: 16.6666666667%;\n }\n .llms-form-field.llms-cols-3 {\n width: 25%;\n }\n .llms-form-field.llms-cols-4 {\n width: 33.3333333333%;\n }\n .llms-form-field.llms-cols-5 {\n width: 41.6666666667%;\n }\n .llms-form-field.llms-cols-6 {\n width: 50%;\n }\n .llms-form-field.llms-cols-7 {\n width: 58.3333333333%;\n }\n .llms-form-field.llms-cols-8 {\n width: 66.6666666667%;\n }\n .llms-form-field.llms-cols-9 {\n width: 75%;\n }\n .llms-form-field.llms-cols-10 {\n width: 83.3333333333%;\n }\n .llms-form-field.llms-cols-11 {\n width: 91.6666666667%;\n }\n .llms-form-field.llms-cols-12 {\n width: 100%;\n }\n}\n.llms-form-field.type-hidden {\n padding: 0;\n}\n.llms-form-field.type-radio input,\n.llms-form-field.type-radio label, .llms-form-field.type-checkbox input,\n.llms-form-field.type-checkbox label {\n display: inline-block;\n width: auto;\n}\n.llms-form-field.type-radio input, .llms-form-field.type-checkbox input {\n margin-right: 10px;\n}\n.llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {\n display: block;\n}\n.llms-form-field.type-radio:not(.is-group) input[type=radio] {\n position: absolute;\n opacity: 0;\n visibility: none;\n}\n.llms-form-field.type-radio:not(.is-group) label:before {\n background: #fafafa;\n background-position: -24px 0;\n background-repeat: no-repeat;\n border-radius: 50%;\n -webkit-box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;\n box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;\n content: \"\";\n cursor: pointer;\n display: inline-block;\n height: 22px;\n margin-right: 5px;\n position: relative;\n -webkit-transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);\n transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);\n top: -3px;\n vertical-align: middle;\n width: 22px;\n z-index: 2;\n}\n.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked + label:before {\n -webkit-transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);\n transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);\n background-position: 0 0;\n background-image: radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%);\n}\n.llms-form-field .llms-input-group {\n margin-top: 5px;\n}\n.llms-form-field .llms-input-group .llms-form-field {\n padding: 0 0 5px 5px;\n}\n.llms-form-field.type-reset button:not(.auto), .llms-form-field.type-button button:not(.auto), .llms-form-field.type-submit button:not(.auto) {\n width: 100%;\n}\n.llms-form-field .llms-description {\n font-size: 14px;\n font-style: italic;\n line-height: 18px;\n}\n.llms-form-field .llms-required {\n color: #bb231c;\n margin-left: 4px;\n}\n.llms-form-field input, .llms-form-field textarea, .llms-form-field select {\n width: 100%;\n margin-bottom: 5px;\n}\n.llms-form-field .select2-container .select2-selection--single {\n height: auto;\n padding: 4px 6px;\n}\n.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {\n height: 100%;\n}\n\n.llms-password-strength-meter {\n border: 1px solid #dadada;\n display: none;\n font-size: 10px;\n margin-top: -10px;\n padding: 1px;\n position: relative;\n text-align: center;\n}\n.llms-password-strength-meter:before {\n bottom: 0;\n content: \"\";\n left: 0;\n position: absolute;\n top: 0;\n -webkit-transition: width 0.4s ease;\n transition: width 0.4s ease;\n}\n.llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {\n border-color: #e35b5b;\n}\n.llms-password-strength-meter.mismatch:before, .llms-password-strength-meter.too-short:before, .llms-password-strength-meter.very-weak:before {\n background: rgba(227, 91, 91, 0.25);\n width: 25%;\n}\n.llms-password-strength-meter.too-short:before {\n width: 0;\n}\n.llms-password-strength-meter.weak {\n border-color: #f78b53;\n}\n.llms-password-strength-meter.weak:before {\n background: rgba(247, 139, 83, 0.25);\n width: 50%;\n}\n.llms-password-strength-meter.medium {\n border-color: #ffc733;\n}\n.llms-password-strength-meter.medium:before {\n background: rgba(255, 199, 51, 0.25);\n width: 75%;\n}\n.llms-password-strength-meter.strong {\n border-color: #83c373;\n}\n.llms-password-strength-meter.strong:before {\n background: rgba(131, 195, 115, 0.25);\n width: 100%;\n}\n.llms-password-strength-meter + .llms-description {\n display: block;\n}\n\n/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n font-family: \"FontAwesome\";\n src: url(\"../fonts/fontawesome-webfont.eot?v=4.7.0\");\n src: url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0\") format(\"embedded-opentype\"), url(\"../fonts/fontawesome-webfont.woff2?v=4.7.0\") format(\"woff2\"), url(\"../fonts/fontawesome-webfont.woff?v=4.7.0\") format(\"woff\"), url(\"../fonts/fontawesome-webfont.ttf?v=4.7.0\") format(\"truetype\"), url(\"../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n.fa {\n display: inline-block;\n font: normal normal normal 14px/1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n font-size: 1.33333333em;\n line-height: 0.75em;\n vertical-align: -15%;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-fw {\n width: 1.28571429em;\n text-align: center;\n}\n\n.fa-ul {\n padding-left: 0;\n margin-left: 2.14285714em;\n list-style-type: none;\n}\n\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n position: absolute;\n left: -2.14285714em;\n width: 2.14285714em;\n top: 0.14285714em;\n text-align: center;\n}\n\n.fa-li.fa-lg {\n left: -1.85714286em;\n}\n\n.fa-border {\n padding: 0.2em 0.25em 0.15em;\n border: solid 0.08em #eeeeee;\n border-radius: 0.1em;\n}\n\n.fa-pull-left {\n float: left;\n}\n\n.fa-pull-right {\n float: right;\n}\n\n.fa.fa-pull-left {\n margin-right: 0.3em;\n}\n\n.fa.fa-pull-right {\n margin-left: 0.3em;\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right {\n float: right;\n}\n\n.pull-left {\n float: left;\n}\n\n.fa.pull-left {\n margin-right: 0.3em;\n}\n\n.fa.pull-right {\n margin-left: 0.3em;\n}\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n -webkit-filter: none;\n filter: none;\n}\n\n.fa-stack {\n position: relative;\n display: inline-block;\n width: 2em;\n height: 2em;\n line-height: 2em;\n vertical-align: middle;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n position: absolute;\n left: 0;\n width: 100%;\n text-align: center;\n}\n\n.fa-stack-1x {\n line-height: inherit;\n}\n\n.fa-stack-2x {\n font-size: 2em;\n}\n\n.fa-inverse {\n color: #ffffff;\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters that represent icons */\n.fa-glass:before {\n content: \"\\f000\";\n}\n\n.fa-music:before {\n content: \"\\f001\";\n}\n\n.fa-search:before {\n content: \"\\f002\";\n}\n\n.fa-envelope-o:before {\n content: \"\\f003\";\n}\n\n.fa-heart:before {\n content: \"\\f004\";\n}\n\n.fa-star:before {\n content: \"\\f005\";\n}\n\n.fa-star-o:before {\n content: \"\\f006\";\n}\n\n.fa-user:before {\n content: \"\\f007\";\n}\n\n.fa-film:before {\n content: \"\\f008\";\n}\n\n.fa-th-large:before {\n content: \"\\f009\";\n}\n\n.fa-th:before {\n content: \"\\f00a\";\n}\n\n.fa-th-list:before {\n content: \"\\f00b\";\n}\n\n.fa-check:before {\n content: \"\\f00c\";\n}\n\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n content: \"\\f00d\";\n}\n\n.fa-search-plus:before {\n content: \"\\f00e\";\n}\n\n.fa-search-minus:before {\n content: \"\\f010\";\n}\n\n.fa-power-off:before {\n content: \"\\f011\";\n}\n\n.fa-signal:before {\n content: \"\\f012\";\n}\n\n.fa-gear:before,\n.fa-cog:before {\n content: \"\\f013\";\n}\n\n.fa-trash-o:before {\n content: \"\\f014\";\n}\n\n.fa-home:before {\n content: \"\\f015\";\n}\n\n.fa-file-o:before {\n content: \"\\f016\";\n}\n\n.fa-clock-o:before {\n content: \"\\f017\";\n}\n\n.fa-road:before {\n content: \"\\f018\";\n}\n\n.fa-download:before {\n content: \"\\f019\";\n}\n\n.fa-arrow-circle-o-down:before {\n content: \"\\f01a\";\n}\n\n.fa-arrow-circle-o-up:before {\n content: \"\\f01b\";\n}\n\n.fa-inbox:before {\n content: \"\\f01c\";\n}\n\n.fa-play-circle-o:before {\n content: \"\\f01d\";\n}\n\n.fa-rotate-right:before,\n.fa-repeat:before {\n content: \"\\f01e\";\n}\n\n.fa-refresh:before {\n content: \"\\f021\";\n}\n\n.fa-list-alt:before {\n content: \"\\f022\";\n}\n\n.fa-lock:before {\n content: \"\\f023\";\n}\n\n.fa-flag:before {\n content: \"\\f024\";\n}\n\n.fa-headphones:before {\n content: \"\\f025\";\n}\n\n.fa-volume-off:before {\n content: \"\\f026\";\n}\n\n.fa-volume-down:before {\n content: \"\\f027\";\n}\n\n.fa-volume-up:before {\n content: \"\\f028\";\n}\n\n.fa-qrcode:before {\n content: \"\\f029\";\n}\n\n.fa-barcode:before {\n content: \"\\f02a\";\n}\n\n.fa-tag:before {\n content: \"\\f02b\";\n}\n\n.fa-tags:before {\n content: \"\\f02c\";\n}\n\n.fa-book:before {\n content: \"\\f02d\";\n}\n\n.fa-bookmark:before {\n content: \"\\f02e\";\n}\n\n.fa-print:before {\n content: \"\\f02f\";\n}\n\n.fa-camera:before {\n content: \"\\f030\";\n}\n\n.fa-font:before {\n content: \"\\f031\";\n}\n\n.fa-bold:before {\n content: \"\\f032\";\n}\n\n.fa-italic:before {\n content: \"\\f033\";\n}\n\n.fa-text-height:before {\n content: \"\\f034\";\n}\n\n.fa-text-width:before {\n content: \"\\f035\";\n}\n\n.fa-align-left:before {\n content: \"\\f036\";\n}\n\n.fa-align-center:before {\n content: \"\\f037\";\n}\n\n.fa-align-right:before {\n content: \"\\f038\";\n}\n\n.fa-align-justify:before {\n content: \"\\f039\";\n}\n\n.fa-list:before {\n content: \"\\f03a\";\n}\n\n.fa-dedent:before,\n.fa-outdent:before {\n content: \"\\f03b\";\n}\n\n.fa-indent:before {\n content: \"\\f03c\";\n}\n\n.fa-video-camera:before {\n content: \"\\f03d\";\n}\n\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n content: \"\\f03e\";\n}\n\n.fa-pencil:before {\n content: \"\\f040\";\n}\n\n.fa-map-marker:before {\n content: \"\\f041\";\n}\n\n.fa-adjust:before {\n content: \"\\f042\";\n}\n\n.fa-tint:before {\n content: \"\\f043\";\n}\n\n.fa-edit:before,\n.fa-pencil-square-o:before {\n content: \"\\f044\";\n}\n\n.fa-share-square-o:before {\n content: \"\\f045\";\n}\n\n.fa-check-square-o:before {\n content: \"\\f046\";\n}\n\n.fa-arrows:before {\n content: \"\\f047\";\n}\n\n.fa-step-backward:before {\n content: \"\\f048\";\n}\n\n.fa-fast-backward:before {\n content: \"\\f049\";\n}\n\n.fa-backward:before {\n content: \"\\f04a\";\n}\n\n.fa-play:before {\n content: \"\\f04b\";\n}\n\n.fa-pause:before {\n content: \"\\f04c\";\n}\n\n.fa-stop:before {\n content: \"\\f04d\";\n}\n\n.fa-forward:before {\n content: \"\\f04e\";\n}\n\n.fa-fast-forward:before {\n content: \"\\f050\";\n}\n\n.fa-step-forward:before {\n content: \"\\f051\";\n}\n\n.fa-eject:before {\n content: \"\\f052\";\n}\n\n.fa-chevron-left:before {\n content: \"\\f053\";\n}\n\n.fa-chevron-right:before {\n content: \"\\f054\";\n}\n\n.fa-plus-circle:before {\n content: \"\\f055\";\n}\n\n.fa-minus-circle:before {\n content: \"\\f056\";\n}\n\n.fa-times-circle:before {\n content: \"\\f057\";\n}\n\n.fa-check-circle:before {\n content: \"\\f058\";\n}\n\n.fa-question-circle:before {\n content: \"\\f059\";\n}\n\n.fa-info-circle:before {\n content: \"\\f05a\";\n}\n\n.fa-crosshairs:before {\n content: \"\\f05b\";\n}\n\n.fa-times-circle-o:before {\n content: \"\\f05c\";\n}\n\n.fa-check-circle-o:before {\n content: \"\\f05d\";\n}\n\n.fa-ban:before {\n content: \"\\f05e\";\n}\n\n.fa-arrow-left:before {\n content: \"\\f060\";\n}\n\n.fa-arrow-right:before {\n content: \"\\f061\";\n}\n\n.fa-arrow-up:before {\n content: \"\\f062\";\n}\n\n.fa-arrow-down:before {\n content: \"\\f063\";\n}\n\n.fa-mail-forward:before,\n.fa-share:before {\n content: \"\\f064\";\n}\n\n.fa-expand:before {\n content: \"\\f065\";\n}\n\n.fa-compress:before {\n content: \"\\f066\";\n}\n\n.fa-plus:before {\n content: \"\\f067\";\n}\n\n.fa-minus:before {\n content: \"\\f068\";\n}\n\n.fa-asterisk:before {\n content: \"\\f069\";\n}\n\n.fa-exclamation-circle:before {\n content: \"\\f06a\";\n}\n\n.fa-gift:before {\n content: \"\\f06b\";\n}\n\n.fa-leaf:before {\n content: \"\\f06c\";\n}\n\n.fa-fire:before {\n content: \"\\f06d\";\n}\n\n.fa-eye:before {\n content: \"\\f06e\";\n}\n\n.fa-eye-slash:before {\n content: \"\\f070\";\n}\n\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n content: \"\\f071\";\n}\n\n.fa-plane:before {\n content: \"\\f072\";\n}\n\n.fa-calendar:before {\n content: \"\\f073\";\n}\n\n.fa-random:before {\n content: \"\\f074\";\n}\n\n.fa-comment:before {\n content: \"\\f075\";\n}\n\n.fa-magnet:before {\n content: \"\\f076\";\n}\n\n.fa-chevron-up:before {\n content: \"\\f077\";\n}\n\n.fa-chevron-down:before {\n content: \"\\f078\";\n}\n\n.fa-retweet:before {\n content: \"\\f079\";\n}\n\n.fa-shopping-cart:before {\n content: \"\\f07a\";\n}\n\n.fa-folder:before {\n content: \"\\f07b\";\n}\n\n.fa-folder-open:before {\n content: \"\\f07c\";\n}\n\n.fa-arrows-v:before {\n content: \"\\f07d\";\n}\n\n.fa-arrows-h:before {\n content: \"\\f07e\";\n}\n\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n content: \"\\f080\";\n}\n\n.fa-twitter-square:before {\n content: \"\\f081\";\n}\n\n.fa-facebook-square:before {\n content: \"\\f082\";\n}\n\n.fa-camera-retro:before {\n content: \"\\f083\";\n}\n\n.fa-key:before {\n content: \"\\f084\";\n}\n\n.fa-gears:before,\n.fa-cogs:before {\n content: \"\\f085\";\n}\n\n.fa-comments:before {\n content: \"\\f086\";\n}\n\n.fa-thumbs-o-up:before {\n content: \"\\f087\";\n}\n\n.fa-thumbs-o-down:before {\n content: \"\\f088\";\n}\n\n.fa-star-half:before {\n content: \"\\f089\";\n}\n\n.fa-heart-o:before {\n content: \"\\f08a\";\n}\n\n.fa-sign-out:before {\n content: \"\\f08b\";\n}\n\n.fa-linkedin-square:before {\n content: \"\\f08c\";\n}\n\n.fa-thumb-tack:before {\n content: \"\\f08d\";\n}\n\n.fa-external-link:before {\n content: \"\\f08e\";\n}\n\n.fa-sign-in:before {\n content: \"\\f090\";\n}\n\n.fa-trophy:before {\n content: \"\\f091\";\n}\n\n.fa-github-square:before {\n content: \"\\f092\";\n}\n\n.fa-upload:before {\n content: \"\\f093\";\n}\n\n.fa-lemon-o:before {\n content: \"\\f094\";\n}\n\n.fa-phone:before {\n content: \"\\f095\";\n}\n\n.fa-square-o:before {\n content: \"\\f096\";\n}\n\n.fa-bookmark-o:before {\n content: \"\\f097\";\n}\n\n.fa-phone-square:before {\n content: \"\\f098\";\n}\n\n.fa-twitter:before {\n content: \"\\f099\";\n}\n\n.fa-facebook-f:before,\n.fa-facebook:before {\n content: \"\\f09a\";\n}\n\n.fa-github:before {\n content: \"\\f09b\";\n}\n\n.fa-unlock:before {\n content: \"\\f09c\";\n}\n\n.fa-credit-card:before {\n content: \"\\f09d\";\n}\n\n.fa-feed:before,\n.fa-rss:before {\n content: \"\\f09e\";\n}\n\n.fa-hdd-o:before {\n content: \"\\f0a0\";\n}\n\n.fa-bullhorn:before {\n content: \"\\f0a1\";\n}\n\n.fa-bell:before {\n content: \"\\f0f3\";\n}\n\n.fa-certificate:before {\n content: \"\\f0a3\";\n}\n\n.fa-hand-o-right:before {\n content: \"\\f0a4\";\n}\n\n.fa-hand-o-left:before {\n content: \"\\f0a5\";\n}\n\n.fa-hand-o-up:before {\n content: \"\\f0a6\";\n}\n\n.fa-hand-o-down:before {\n content: \"\\f0a7\";\n}\n\n.fa-arrow-circle-left:before {\n content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-right:before {\n content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-up:before {\n content: \"\\f0aa\";\n}\n\n.fa-arrow-circle-down:before {\n content: \"\\f0ab\";\n}\n\n.fa-globe:before {\n content: \"\\f0ac\";\n}\n\n.fa-wrench:before {\n content: \"\\f0ad\";\n}\n\n.fa-tasks:before {\n content: \"\\f0ae\";\n}\n\n.fa-filter:before {\n content: \"\\f0b0\";\n}\n\n.fa-briefcase:before {\n content: \"\\f0b1\";\n}\n\n.fa-arrows-alt:before {\n content: \"\\f0b2\";\n}\n\n.fa-group:before,\n.fa-users:before {\n content: \"\\f0c0\";\n}\n\n.fa-chain:before,\n.fa-link:before {\n content: \"\\f0c1\";\n}\n\n.fa-cloud:before {\n content: \"\\f0c2\";\n}\n\n.fa-flask:before {\n content: \"\\f0c3\";\n}\n\n.fa-cut:before,\n.fa-scissors:before {\n content: \"\\f0c4\";\n}\n\n.fa-copy:before,\n.fa-files-o:before {\n content: \"\\f0c5\";\n}\n\n.fa-paperclip:before {\n content: \"\\f0c6\";\n}\n\n.fa-save:before,\n.fa-floppy-o:before {\n content: \"\\f0c7\";\n}\n\n.fa-square:before {\n content: \"\\f0c8\";\n}\n\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n content: \"\\f0c9\";\n}\n\n.fa-list-ul:before {\n content: \"\\f0ca\";\n}\n\n.fa-list-ol:before {\n content: \"\\f0cb\";\n}\n\n.fa-strikethrough:before {\n content: \"\\f0cc\";\n}\n\n.fa-underline:before {\n content: \"\\f0cd\";\n}\n\n.fa-table:before {\n content: \"\\f0ce\";\n}\n\n.fa-magic:before {\n content: \"\\f0d0\";\n}\n\n.fa-truck:before {\n content: \"\\f0d1\";\n}\n\n.fa-pinterest:before {\n content: \"\\f0d2\";\n}\n\n.fa-pinterest-square:before {\n content: \"\\f0d3\";\n}\n\n.fa-google-plus-square:before {\n content: \"\\f0d4\";\n}\n\n.fa-google-plus:before {\n content: \"\\f0d5\";\n}\n\n.fa-money:before {\n content: \"\\f0d6\";\n}\n\n.fa-caret-down:before {\n content: \"\\f0d7\";\n}\n\n.fa-caret-up:before {\n content: \"\\f0d8\";\n}\n\n.fa-caret-left:before {\n content: \"\\f0d9\";\n}\n\n.fa-caret-right:before {\n content: \"\\f0da\";\n}\n\n.fa-columns:before {\n content: \"\\f0db\";\n}\n\n.fa-unsorted:before,\n.fa-sort:before {\n content: \"\\f0dc\";\n}\n\n.fa-sort-down:before,\n.fa-sort-desc:before {\n content: \"\\f0dd\";\n}\n\n.fa-sort-up:before,\n.fa-sort-asc:before {\n content: \"\\f0de\";\n}\n\n.fa-envelope:before {\n content: \"\\f0e0\";\n}\n\n.fa-linkedin:before {\n content: \"\\f0e1\";\n}\n\n.fa-rotate-left:before,\n.fa-undo:before {\n content: \"\\f0e2\";\n}\n\n.fa-legal:before,\n.fa-gavel:before {\n content: \"\\f0e3\";\n}\n\n.fa-dashboard:before,\n.fa-tachometer:before {\n content: \"\\f0e4\";\n}\n\n.fa-comment-o:before {\n content: \"\\f0e5\";\n}\n\n.fa-comments-o:before {\n content: \"\\f0e6\";\n}\n\n.fa-flash:before,\n.fa-bolt:before {\n content: \"\\f0e7\";\n}\n\n.fa-sitemap:before {\n content: \"\\f0e8\";\n}\n\n.fa-umbrella:before {\n content: \"\\f0e9\";\n}\n\n.fa-paste:before,\n.fa-clipboard:before {\n content: \"\\f0ea\";\n}\n\n.fa-lightbulb-o:before {\n content: \"\\f0eb\";\n}\n\n.fa-exchange:before {\n content: \"\\f0ec\";\n}\n\n.fa-cloud-download:before {\n content: \"\\f0ed\";\n}\n\n.fa-cloud-upload:before {\n content: \"\\f0ee\";\n}\n\n.fa-user-md:before {\n content: \"\\f0f0\";\n}\n\n.fa-stethoscope:before {\n content: \"\\f0f1\";\n}\n\n.fa-suitcase:before {\n content: \"\\f0f2\";\n}\n\n.fa-bell-o:before {\n content: \"\\f0a2\";\n}\n\n.fa-coffee:before {\n content: \"\\f0f4\";\n}\n\n.fa-cutlery:before {\n content: \"\\f0f5\";\n}\n\n.fa-file-text-o:before {\n content: \"\\f0f6\";\n}\n\n.fa-building-o:before {\n content: \"\\f0f7\";\n}\n\n.fa-hospital-o:before {\n content: \"\\f0f8\";\n}\n\n.fa-ambulance:before {\n content: \"\\f0f9\";\n}\n\n.fa-medkit:before {\n content: \"\\f0fa\";\n}\n\n.fa-fighter-jet:before {\n content: \"\\f0fb\";\n}\n\n.fa-beer:before {\n content: \"\\f0fc\";\n}\n\n.fa-h-square:before {\n content: \"\\f0fd\";\n}\n\n.fa-plus-square:before {\n content: \"\\f0fe\";\n}\n\n.fa-angle-double-left:before {\n content: \"\\f100\";\n}\n\n.fa-angle-double-right:before {\n content: \"\\f101\";\n}\n\n.fa-angle-double-up:before {\n content: \"\\f102\";\n}\n\n.fa-angle-double-down:before {\n content: \"\\f103\";\n}\n\n.fa-angle-left:before {\n content: \"\\f104\";\n}\n\n.fa-angle-right:before {\n content: \"\\f105\";\n}\n\n.fa-angle-up:before {\n content: \"\\f106\";\n}\n\n.fa-angle-down:before {\n content: \"\\f107\";\n}\n\n.fa-desktop:before {\n content: \"\\f108\";\n}\n\n.fa-laptop:before {\n content: \"\\f109\";\n}\n\n.fa-tablet:before {\n content: \"\\f10a\";\n}\n\n.fa-mobile-phone:before,\n.fa-mobile:before {\n content: \"\\f10b\";\n}\n\n.fa-circle-o:before {\n content: \"\\f10c\";\n}\n\n.fa-quote-left:before {\n content: \"\\f10d\";\n}\n\n.fa-quote-right:before {\n content: \"\\f10e\";\n}\n\n.fa-spinner:before {\n content: \"\\f110\";\n}\n\n.fa-circle:before {\n content: \"\\f111\";\n}\n\n.fa-mail-reply:before,\n.fa-reply:before {\n content: \"\\f112\";\n}\n\n.fa-github-alt:before {\n content: \"\\f113\";\n}\n\n.fa-folder-o:before {\n content: \"\\f114\";\n}\n\n.fa-folder-open-o:before {\n content: \"\\f115\";\n}\n\n.fa-smile-o:before {\n content: \"\\f118\";\n}\n\n.fa-frown-o:before {\n content: \"\\f119\";\n}\n\n.fa-meh-o:before {\n content: \"\\f11a\";\n}\n\n.fa-gamepad:before {\n content: \"\\f11b\";\n}\n\n.fa-keyboard-o:before {\n content: \"\\f11c\";\n}\n\n.fa-flag-o:before {\n content: \"\\f11d\";\n}\n\n.fa-flag-checkered:before {\n content: \"\\f11e\";\n}\n\n.fa-terminal:before {\n content: \"\\f120\";\n}\n\n.fa-code:before {\n content: \"\\f121\";\n}\n\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n content: \"\\f122\";\n}\n\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n content: \"\\f123\";\n}\n\n.fa-location-arrow:before {\n content: \"\\f124\";\n}\n\n.fa-crop:before {\n content: \"\\f125\";\n}\n\n.fa-code-fork:before {\n content: \"\\f126\";\n}\n\n.fa-unlink:before,\n.fa-chain-broken:before {\n content: \"\\f127\";\n}\n\n.fa-question:before {\n content: \"\\f128\";\n}\n\n.fa-info:before {\n content: \"\\f129\";\n}\n\n.fa-exclamation:before {\n content: \"\\f12a\";\n}\n\n.fa-superscript:before {\n content: \"\\f12b\";\n}\n\n.fa-subscript:before {\n content: \"\\f12c\";\n}\n\n.fa-eraser:before {\n content: \"\\f12d\";\n}\n\n.fa-puzzle-piece:before {\n content: \"\\f12e\";\n}\n\n.fa-microphone:before {\n content: \"\\f130\";\n}\n\n.fa-microphone-slash:before {\n content: \"\\f131\";\n}\n\n.fa-shield:before {\n content: \"\\f132\";\n}\n\n.fa-calendar-o:before {\n content: \"\\f133\";\n}\n\n.fa-fire-extinguisher:before {\n content: \"\\f134\";\n}\n\n.fa-rocket:before {\n content: \"\\f135\";\n}\n\n.fa-maxcdn:before {\n content: \"\\f136\";\n}\n\n.fa-chevron-circle-left:before {\n content: \"\\f137\";\n}\n\n.fa-chevron-circle-right:before {\n content: \"\\f138\";\n}\n\n.fa-chevron-circle-up:before {\n content: \"\\f139\";\n}\n\n.fa-chevron-circle-down:before {\n content: \"\\f13a\";\n}\n\n.fa-html5:before {\n content: \"\\f13b\";\n}\n\n.fa-css3:before {\n content: \"\\f13c\";\n}\n\n.fa-anchor:before {\n content: \"\\f13d\";\n}\n\n.fa-unlock-alt:before {\n content: \"\\f13e\";\n}\n\n.fa-bullseye:before {\n content: \"\\f140\";\n}\n\n.fa-ellipsis-h:before {\n content: \"\\f141\";\n}\n\n.fa-ellipsis-v:before {\n content: \"\\f142\";\n}\n\n.fa-rss-square:before {\n content: \"\\f143\";\n}\n\n.fa-play-circle:before {\n content: \"\\f144\";\n}\n\n.fa-ticket:before {\n content: \"\\f145\";\n}\n\n.fa-minus-square:before {\n content: \"\\f146\";\n}\n\n.fa-minus-square-o:before {\n content: \"\\f147\";\n}\n\n.fa-level-up:before {\n content: \"\\f148\";\n}\n\n.fa-level-down:before {\n content: \"\\f149\";\n}\n\n.fa-check-square:before {\n content: \"\\f14a\";\n}\n\n.fa-pencil-square:before {\n content: \"\\f14b\";\n}\n\n.fa-external-link-square:before {\n content: \"\\f14c\";\n}\n\n.fa-share-square:before {\n content: \"\\f14d\";\n}\n\n.fa-compass:before {\n content: \"\\f14e\";\n}\n\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n content: \"\\f150\";\n}\n\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n content: \"\\f151\";\n}\n\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n content: \"\\f152\";\n}\n\n.fa-euro:before,\n.fa-eur:before {\n content: \"\\f153\";\n}\n\n.fa-gbp:before {\n content: \"\\f154\";\n}\n\n.fa-dollar:before,\n.fa-usd:before {\n content: \"\\f155\";\n}\n\n.fa-rupee:before,\n.fa-inr:before {\n content: \"\\f156\";\n}\n\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n content: \"\\f157\";\n}\n\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n content: \"\\f158\";\n}\n\n.fa-won:before,\n.fa-krw:before {\n content: \"\\f159\";\n}\n\n.fa-bitcoin:before,\n.fa-btc:before {\n content: \"\\f15a\";\n}\n\n.fa-file:before {\n content: \"\\f15b\";\n}\n\n.fa-file-text:before {\n content: \"\\f15c\";\n}\n\n.fa-sort-alpha-asc:before {\n content: \"\\f15d\";\n}\n\n.fa-sort-alpha-desc:before {\n content: \"\\f15e\";\n}\n\n.fa-sort-amount-asc:before {\n content: \"\\f160\";\n}\n\n.fa-sort-amount-desc:before {\n content: \"\\f161\";\n}\n\n.fa-sort-numeric-asc:before {\n content: \"\\f162\";\n}\n\n.fa-sort-numeric-desc:before {\n content: \"\\f163\";\n}\n\n.fa-thumbs-up:before {\n content: \"\\f164\";\n}\n\n.fa-thumbs-down:before {\n content: \"\\f165\";\n}\n\n.fa-youtube-square:before {\n content: \"\\f166\";\n}\n\n.fa-youtube:before {\n content: \"\\f167\";\n}\n\n.fa-xing:before {\n content: \"\\f168\";\n}\n\n.fa-xing-square:before {\n content: \"\\f169\";\n}\n\n.fa-youtube-play:before {\n content: \"\\f16a\";\n}\n\n.fa-dropbox:before {\n content: \"\\f16b\";\n}\n\n.fa-stack-overflow:before {\n content: \"\\f16c\";\n}\n\n.fa-instagram:before {\n content: \"\\f16d\";\n}\n\n.fa-flickr:before {\n content: \"\\f16e\";\n}\n\n.fa-adn:before {\n content: \"\\f170\";\n}\n\n.fa-bitbucket:before {\n content: \"\\f171\";\n}\n\n.fa-bitbucket-square:before {\n content: \"\\f172\";\n}\n\n.fa-tumblr:before {\n content: \"\\f173\";\n}\n\n.fa-tumblr-square:before {\n content: \"\\f174\";\n}\n\n.fa-long-arrow-down:before {\n content: \"\\f175\";\n}\n\n.fa-long-arrow-up:before {\n content: \"\\f176\";\n}\n\n.fa-long-arrow-left:before {\n content: \"\\f177\";\n}\n\n.fa-long-arrow-right:before {\n content: \"\\f178\";\n}\n\n.fa-apple:before {\n content: \"\\f179\";\n}\n\n.fa-windows:before {\n content: \"\\f17a\";\n}\n\n.fa-android:before {\n content: \"\\f17b\";\n}\n\n.fa-linux:before {\n content: \"\\f17c\";\n}\n\n.fa-dribbble:before {\n content: \"\\f17d\";\n}\n\n.fa-skype:before {\n content: \"\\f17e\";\n}\n\n.fa-foursquare:before {\n content: \"\\f180\";\n}\n\n.fa-trello:before {\n content: \"\\f181\";\n}\n\n.fa-female:before {\n content: \"\\f182\";\n}\n\n.fa-male:before {\n content: \"\\f183\";\n}\n\n.fa-gittip:before,\n.fa-gratipay:before {\n content: \"\\f184\";\n}\n\n.fa-sun-o:before {\n content: \"\\f185\";\n}\n\n.fa-moon-o:before {\n content: \"\\f186\";\n}\n\n.fa-archive:before {\n content: \"\\f187\";\n}\n\n.fa-bug:before {\n content: \"\\f188\";\n}\n\n.fa-vk:before {\n content: \"\\f189\";\n}\n\n.fa-weibo:before {\n content: \"\\f18a\";\n}\n\n.fa-renren:before {\n content: \"\\f18b\";\n}\n\n.fa-pagelines:before {\n content: \"\\f18c\";\n}\n\n.fa-stack-exchange:before {\n content: \"\\f18d\";\n}\n\n.fa-arrow-circle-o-right:before {\n content: \"\\f18e\";\n}\n\n.fa-arrow-circle-o-left:before {\n content: \"\\f190\";\n}\n\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n content: \"\\f191\";\n}\n\n.fa-dot-circle-o:before {\n content: \"\\f192\";\n}\n\n.fa-wheelchair:before {\n content: \"\\f193\";\n}\n\n.fa-vimeo-square:before {\n content: \"\\f194\";\n}\n\n.fa-turkish-lira:before,\n.fa-try:before {\n content: \"\\f195\";\n}\n\n.fa-plus-square-o:before {\n content: \"\\f196\";\n}\n\n.fa-space-shuttle:before {\n content: \"\\f197\";\n}\n\n.fa-slack:before {\n content: \"\\f198\";\n}\n\n.fa-envelope-square:before {\n content: \"\\f199\";\n}\n\n.fa-wordpress:before {\n content: \"\\f19a\";\n}\n\n.fa-openid:before {\n content: \"\\f19b\";\n}\n\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n content: \"\\f19c\";\n}\n\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n content: \"\\f19d\";\n}\n\n.fa-yahoo:before {\n content: \"\\f19e\";\n}\n\n.fa-google:before {\n content: \"\\f1a0\";\n}\n\n.fa-reddit:before {\n content: \"\\f1a1\";\n}\n\n.fa-reddit-square:before {\n content: \"\\f1a2\";\n}\n\n.fa-stumbleupon-circle:before {\n content: \"\\f1a3\";\n}\n\n.fa-stumbleupon:before {\n content: \"\\f1a4\";\n}\n\n.fa-delicious:before {\n content: \"\\f1a5\";\n}\n\n.fa-digg:before {\n content: \"\\f1a6\";\n}\n\n.fa-pied-piper-pp:before {\n content: \"\\f1a7\";\n}\n\n.fa-pied-piper-alt:before {\n content: \"\\f1a8\";\n}\n\n.fa-drupal:before {\n content: \"\\f1a9\";\n}\n\n.fa-joomla:before {\n content: \"\\f1aa\";\n}\n\n.fa-language:before {\n content: \"\\f1ab\";\n}\n\n.fa-fax:before {\n content: \"\\f1ac\";\n}\n\n.fa-building:before {\n content: \"\\f1ad\";\n}\n\n.fa-child:before {\n content: \"\\f1ae\";\n}\n\n.fa-paw:before {\n content: \"\\f1b0\";\n}\n\n.fa-spoon:before {\n content: \"\\f1b1\";\n}\n\n.fa-cube:before {\n content: \"\\f1b2\";\n}\n\n.fa-cubes:before {\n content: \"\\f1b3\";\n}\n\n.fa-behance:before {\n content: \"\\f1b4\";\n}\n\n.fa-behance-square:before {\n content: \"\\f1b5\";\n}\n\n.fa-steam:before {\n content: \"\\f1b6\";\n}\n\n.fa-steam-square:before {\n content: \"\\f1b7\";\n}\n\n.fa-recycle:before {\n content: \"\\f1b8\";\n}\n\n.fa-automobile:before,\n.fa-car:before {\n content: \"\\f1b9\";\n}\n\n.fa-cab:before,\n.fa-taxi:before {\n content: \"\\f1ba\";\n}\n\n.fa-tree:before {\n content: \"\\f1bb\";\n}\n\n.fa-spotify:before {\n content: \"\\f1bc\";\n}\n\n.fa-deviantart:before {\n content: \"\\f1bd\";\n}\n\n.fa-soundcloud:before {\n content: \"\\f1be\";\n}\n\n.fa-database:before {\n content: \"\\f1c0\";\n}\n\n.fa-file-pdf-o:before {\n content: \"\\f1c1\";\n}\n\n.fa-file-word-o:before {\n content: \"\\f1c2\";\n}\n\n.fa-file-excel-o:before {\n content: \"\\f1c3\";\n}\n\n.fa-file-powerpoint-o:before {\n content: \"\\f1c4\";\n}\n\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n content: \"\\f1c5\";\n}\n\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n content: \"\\f1c6\";\n}\n\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n content: \"\\f1c7\";\n}\n\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n content: \"\\f1c8\";\n}\n\n.fa-file-code-o:before {\n content: \"\\f1c9\";\n}\n\n.fa-vine:before {\n content: \"\\f1ca\";\n}\n\n.fa-codepen:before {\n content: \"\\f1cb\";\n}\n\n.fa-jsfiddle:before {\n content: \"\\f1cc\";\n}\n\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n content: \"\\f1cd\";\n}\n\n.fa-circle-o-notch:before {\n content: \"\\f1ce\";\n}\n\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n content: \"\\f1d0\";\n}\n\n.fa-ge:before,\n.fa-empire:before {\n content: \"\\f1d1\";\n}\n\n.fa-git-square:before {\n content: \"\\f1d2\";\n}\n\n.fa-git:before {\n content: \"\\f1d3\";\n}\n\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n content: \"\\f1d4\";\n}\n\n.fa-tencent-weibo:before {\n content: \"\\f1d5\";\n}\n\n.fa-qq:before {\n content: \"\\f1d6\";\n}\n\n.fa-wechat:before,\n.fa-weixin:before {\n content: \"\\f1d7\";\n}\n\n.fa-send:before,\n.fa-paper-plane:before {\n content: \"\\f1d8\";\n}\n\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n content: \"\\f1d9\";\n}\n\n.fa-history:before {\n content: \"\\f1da\";\n}\n\n.fa-circle-thin:before {\n content: \"\\f1db\";\n}\n\n.fa-header:before {\n content: \"\\f1dc\";\n}\n\n.fa-paragraph:before {\n content: \"\\f1dd\";\n}\n\n.fa-sliders:before {\n content: \"\\f1de\";\n}\n\n.fa-share-alt:before {\n content: \"\\f1e0\";\n}\n\n.fa-share-alt-square:before {\n content: \"\\f1e1\";\n}\n\n.fa-bomb:before {\n content: \"\\f1e2\";\n}\n\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n content: \"\\f1e3\";\n}\n\n.fa-tty:before {\n content: \"\\f1e4\";\n}\n\n.fa-binoculars:before {\n content: \"\\f1e5\";\n}\n\n.fa-plug:before {\n content: \"\\f1e6\";\n}\n\n.fa-slideshare:before {\n content: \"\\f1e7\";\n}\n\n.fa-twitch:before {\n content: \"\\f1e8\";\n}\n\n.fa-yelp:before {\n content: \"\\f1e9\";\n}\n\n.fa-newspaper-o:before {\n content: \"\\f1ea\";\n}\n\n.fa-wifi:before {\n content: \"\\f1eb\";\n}\n\n.fa-calculator:before {\n content: \"\\f1ec\";\n}\n\n.fa-paypal:before {\n content: \"\\f1ed\";\n}\n\n.fa-google-wallet:before {\n content: \"\\f1ee\";\n}\n\n.fa-cc-visa:before {\n content: \"\\f1f0\";\n}\n\n.fa-cc-mastercard:before {\n content: \"\\f1f1\";\n}\n\n.fa-cc-discover:before {\n content: \"\\f1f2\";\n}\n\n.fa-cc-amex:before {\n content: \"\\f1f3\";\n}\n\n.fa-cc-paypal:before {\n content: \"\\f1f4\";\n}\n\n.fa-cc-stripe:before {\n content: \"\\f1f5\";\n}\n\n.fa-bell-slash:before {\n content: \"\\f1f6\";\n}\n\n.fa-bell-slash-o:before {\n content: \"\\f1f7\";\n}\n\n.fa-trash:before {\n content: \"\\f1f8\";\n}\n\n.fa-copyright:before {\n content: \"\\f1f9\";\n}\n\n.fa-at:before {\n content: \"\\f1fa\";\n}\n\n.fa-eyedropper:before {\n content: \"\\f1fb\";\n}\n\n.fa-paint-brush:before {\n content: \"\\f1fc\";\n}\n\n.fa-birthday-cake:before {\n content: \"\\f1fd\";\n}\n\n.fa-area-chart:before {\n content: \"\\f1fe\";\n}\n\n.fa-pie-chart:before {\n content: \"\\f200\";\n}\n\n.fa-line-chart:before {\n content: \"\\f201\";\n}\n\n.fa-lastfm:before {\n content: \"\\f202\";\n}\n\n.fa-lastfm-square:before {\n content: \"\\f203\";\n}\n\n.fa-toggle-off:before {\n content: \"\\f204\";\n}\n\n.fa-toggle-on:before {\n content: \"\\f205\";\n}\n\n.fa-bicycle:before {\n content: \"\\f206\";\n}\n\n.fa-bus:before {\n content: \"\\f207\";\n}\n\n.fa-ioxhost:before {\n content: \"\\f208\";\n}\n\n.fa-angellist:before {\n content: \"\\f209\";\n}\n\n.fa-cc:before {\n content: \"\\f20a\";\n}\n\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n content: \"\\f20b\";\n}\n\n.fa-meanpath:before {\n content: \"\\f20c\";\n}\n\n.fa-buysellads:before {\n content: \"\\f20d\";\n}\n\n.fa-connectdevelop:before {\n content: \"\\f20e\";\n}\n\n.fa-dashcube:before {\n content: \"\\f210\";\n}\n\n.fa-forumbee:before {\n content: \"\\f211\";\n}\n\n.fa-leanpub:before {\n content: \"\\f212\";\n}\n\n.fa-sellsy:before {\n content: \"\\f213\";\n}\n\n.fa-shirtsinbulk:before {\n content: \"\\f214\";\n}\n\n.fa-simplybuilt:before {\n content: \"\\f215\";\n}\n\n.fa-skyatlas:before {\n content: \"\\f216\";\n}\n\n.fa-cart-plus:before {\n content: \"\\f217\";\n}\n\n.fa-cart-arrow-down:before {\n content: \"\\f218\";\n}\n\n.fa-diamond:before {\n content: \"\\f219\";\n}\n\n.fa-ship:before {\n content: \"\\f21a\";\n}\n\n.fa-user-secret:before {\n content: \"\\f21b\";\n}\n\n.fa-motorcycle:before {\n content: \"\\f21c\";\n}\n\n.fa-street-view:before {\n content: \"\\f21d\";\n}\n\n.fa-heartbeat:before {\n content: \"\\f21e\";\n}\n\n.fa-venus:before {\n content: \"\\f221\";\n}\n\n.fa-mars:before {\n content: \"\\f222\";\n}\n\n.fa-mercury:before {\n content: \"\\f223\";\n}\n\n.fa-intersex:before,\n.fa-transgender:before {\n content: \"\\f224\";\n}\n\n.fa-transgender-alt:before {\n content: \"\\f225\";\n}\n\n.fa-venus-double:before {\n content: \"\\f226\";\n}\n\n.fa-mars-double:before {\n content: \"\\f227\";\n}\n\n.fa-venus-mars:before {\n content: \"\\f228\";\n}\n\n.fa-mars-stroke:before {\n content: \"\\f229\";\n}\n\n.fa-mars-stroke-v:before {\n content: \"\\f22a\";\n}\n\n.fa-mars-stroke-h:before {\n content: \"\\f22b\";\n}\n\n.fa-neuter:before {\n content: \"\\f22c\";\n}\n\n.fa-genderless:before {\n content: \"\\f22d\";\n}\n\n.fa-facebook-official:before {\n content: \"\\f230\";\n}\n\n.fa-pinterest-p:before {\n content: \"\\f231\";\n}\n\n.fa-whatsapp:before {\n content: \"\\f232\";\n}\n\n.fa-server:before {\n content: \"\\f233\";\n}\n\n.fa-user-plus:before {\n content: \"\\f234\";\n}\n\n.fa-user-times:before {\n content: \"\\f235\";\n}\n\n.fa-hotel:before,\n.fa-bed:before {\n content: \"\\f236\";\n}\n\n.fa-viacoin:before {\n content: \"\\f237\";\n}\n\n.fa-train:before {\n content: \"\\f238\";\n}\n\n.fa-subway:before {\n content: \"\\f239\";\n}\n\n.fa-medium:before {\n content: \"\\f23a\";\n}\n\n.fa-yc:before,\n.fa-y-combinator:before {\n content: \"\\f23b\";\n}\n\n.fa-optin-monster:before {\n content: \"\\f23c\";\n}\n\n.fa-opencart:before {\n content: \"\\f23d\";\n}\n\n.fa-expeditedssl:before {\n content: \"\\f23e\";\n}\n\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n content: \"\\f240\";\n}\n\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n content: \"\\f241\";\n}\n\n.fa-battery-2:before,\n.fa-battery-half:before {\n content: \"\\f242\";\n}\n\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n content: \"\\f243\";\n}\n\n.fa-battery-0:before,\n.fa-battery-empty:before {\n content: \"\\f244\";\n}\n\n.fa-mouse-pointer:before {\n content: \"\\f245\";\n}\n\n.fa-i-cursor:before {\n content: \"\\f246\";\n}\n\n.fa-object-group:before {\n content: \"\\f247\";\n}\n\n.fa-object-ungroup:before {\n content: \"\\f248\";\n}\n\n.fa-sticky-note:before {\n content: \"\\f249\";\n}\n\n.fa-sticky-note-o:before {\n content: \"\\f24a\";\n}\n\n.fa-cc-jcb:before {\n content: \"\\f24b\";\n}\n\n.fa-cc-diners-club:before {\n content: \"\\f24c\";\n}\n\n.fa-clone:before {\n content: \"\\f24d\";\n}\n\n.fa-balance-scale:before {\n content: \"\\f24e\";\n}\n\n.fa-hourglass-o:before {\n content: \"\\f250\";\n}\n\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n content: \"\\f251\";\n}\n\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n content: \"\\f252\";\n}\n\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n content: \"\\f253\";\n}\n\n.fa-hourglass:before {\n content: \"\\f254\";\n}\n\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n content: \"\\f255\";\n}\n\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n content: \"\\f256\";\n}\n\n.fa-hand-scissors-o:before {\n content: \"\\f257\";\n}\n\n.fa-hand-lizard-o:before {\n content: \"\\f258\";\n}\n\n.fa-hand-spock-o:before {\n content: \"\\f259\";\n}\n\n.fa-hand-pointer-o:before {\n content: \"\\f25a\";\n}\n\n.fa-hand-peace-o:before {\n content: \"\\f25b\";\n}\n\n.fa-trademark:before {\n content: \"\\f25c\";\n}\n\n.fa-registered:before {\n content: \"\\f25d\";\n}\n\n.fa-creative-commons:before {\n content: \"\\f25e\";\n}\n\n.fa-gg:before {\n content: \"\\f260\";\n}\n\n.fa-gg-circle:before {\n content: \"\\f261\";\n}\n\n.fa-tripadvisor:before {\n content: \"\\f262\";\n}\n\n.fa-odnoklassniki:before {\n content: \"\\f263\";\n}\n\n.fa-odnoklassniki-square:before {\n content: \"\\f264\";\n}\n\n.fa-get-pocket:before {\n content: \"\\f265\";\n}\n\n.fa-wikipedia-w:before {\n content: \"\\f266\";\n}\n\n.fa-safari:before {\n content: \"\\f267\";\n}\n\n.fa-chrome:before {\n content: \"\\f268\";\n}\n\n.fa-firefox:before {\n content: \"\\f269\";\n}\n\n.fa-opera:before {\n content: \"\\f26a\";\n}\n\n.fa-internet-explorer:before {\n content: \"\\f26b\";\n}\n\n.fa-tv:before,\n.fa-television:before {\n content: \"\\f26c\";\n}\n\n.fa-contao:before {\n content: \"\\f26d\";\n}\n\n.fa-500px:before {\n content: \"\\f26e\";\n}\n\n.fa-amazon:before {\n content: \"\\f270\";\n}\n\n.fa-calendar-plus-o:before {\n content: \"\\f271\";\n}\n\n.fa-calendar-minus-o:before {\n content: \"\\f272\";\n}\n\n.fa-calendar-times-o:before {\n content: \"\\f273\";\n}\n\n.fa-calendar-check-o:before {\n content: \"\\f274\";\n}\n\n.fa-industry:before {\n content: \"\\f275\";\n}\n\n.fa-map-pin:before {\n content: \"\\f276\";\n}\n\n.fa-map-signs:before {\n content: \"\\f277\";\n}\n\n.fa-map-o:before {\n content: \"\\f278\";\n}\n\n.fa-map:before {\n content: \"\\f279\";\n}\n\n.fa-commenting:before {\n content: \"\\f27a\";\n}\n\n.fa-commenting-o:before {\n content: \"\\f27b\";\n}\n\n.fa-houzz:before {\n content: \"\\f27c\";\n}\n\n.fa-vimeo:before {\n content: \"\\f27d\";\n}\n\n.fa-black-tie:before {\n content: \"\\f27e\";\n}\n\n.fa-fonticons:before {\n content: \"\\f280\";\n}\n\n.fa-reddit-alien:before {\n content: \"\\f281\";\n}\n\n.fa-edge:before {\n content: \"\\f282\";\n}\n\n.fa-credit-card-alt:before {\n content: \"\\f283\";\n}\n\n.fa-codiepie:before {\n content: \"\\f284\";\n}\n\n.fa-modx:before {\n content: \"\\f285\";\n}\n\n.fa-fort-awesome:before {\n content: \"\\f286\";\n}\n\n.fa-usb:before {\n content: \"\\f287\";\n}\n\n.fa-product-hunt:before {\n content: \"\\f288\";\n}\n\n.fa-mixcloud:before {\n content: \"\\f289\";\n}\n\n.fa-scribd:before {\n content: \"\\f28a\";\n}\n\n.fa-pause-circle:before {\n content: \"\\f28b\";\n}\n\n.fa-pause-circle-o:before {\n content: \"\\f28c\";\n}\n\n.fa-stop-circle:before {\n content: \"\\f28d\";\n}\n\n.fa-stop-circle-o:before {\n content: \"\\f28e\";\n}\n\n.fa-shopping-bag:before {\n content: \"\\f290\";\n}\n\n.fa-shopping-basket:before {\n content: \"\\f291\";\n}\n\n.fa-hashtag:before {\n content: \"\\f292\";\n}\n\n.fa-bluetooth:before {\n content: \"\\f293\";\n}\n\n.fa-bluetooth-b:before {\n content: \"\\f294\";\n}\n\n.fa-percent:before {\n content: \"\\f295\";\n}\n\n.fa-gitlab:before {\n content: \"\\f296\";\n}\n\n.fa-wpbeginner:before {\n content: \"\\f297\";\n}\n\n.fa-wpforms:before {\n content: \"\\f298\";\n}\n\n.fa-envira:before {\n content: \"\\f299\";\n}\n\n.fa-universal-access:before {\n content: \"\\f29a\";\n}\n\n.fa-wheelchair-alt:before {\n content: \"\\f29b\";\n}\n\n.fa-question-circle-o:before {\n content: \"\\f29c\";\n}\n\n.fa-blind:before {\n content: \"\\f29d\";\n}\n\n.fa-audio-description:before {\n content: \"\\f29e\";\n}\n\n.fa-volume-control-phone:before {\n content: \"\\f2a0\";\n}\n\n.fa-braille:before {\n content: \"\\f2a1\";\n}\n\n.fa-assistive-listening-systems:before {\n content: \"\\f2a2\";\n}\n\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n content: \"\\f2a3\";\n}\n\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n content: \"\\f2a4\";\n}\n\n.fa-glide:before {\n content: \"\\f2a5\";\n}\n\n.fa-glide-g:before {\n content: \"\\f2a6\";\n}\n\n.fa-signing:before,\n.fa-sign-language:before {\n content: \"\\f2a7\";\n}\n\n.fa-low-vision:before {\n content: \"\\f2a8\";\n}\n\n.fa-viadeo:before {\n content: \"\\f2a9\";\n}\n\n.fa-viadeo-square:before {\n content: \"\\f2aa\";\n}\n\n.fa-snapchat:before {\n content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n content: \"\\f2ac\";\n}\n\n.fa-snapchat-square:before {\n content: \"\\f2ad\";\n}\n\n.fa-pied-piper:before {\n content: \"\\f2ae\";\n}\n\n.fa-first-order:before {\n content: \"\\f2b0\";\n}\n\n.fa-yoast:before {\n content: \"\\f2b1\";\n}\n\n.fa-themeisle:before {\n content: \"\\f2b2\";\n}\n\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n content: \"\\f2b3\";\n}\n\n.fa-fa:before,\n.fa-font-awesome:before {\n content: \"\\f2b4\";\n}\n\n.fa-handshake-o:before {\n content: \"\\f2b5\";\n}\n\n.fa-envelope-open:before {\n content: \"\\f2b6\";\n}\n\n.fa-envelope-open-o:before {\n content: \"\\f2b7\";\n}\n\n.fa-linode:before {\n content: \"\\f2b8\";\n}\n\n.fa-address-book:before {\n content: \"\\f2b9\";\n}\n\n.fa-address-book-o:before {\n content: \"\\f2ba\";\n}\n\n.fa-vcard:before,\n.fa-address-card:before {\n content: \"\\f2bb\";\n}\n\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n content: \"\\f2bc\";\n}\n\n.fa-user-circle:before {\n content: \"\\f2bd\";\n}\n\n.fa-user-circle-o:before {\n content: \"\\f2be\";\n}\n\n.fa-user-o:before {\n content: \"\\f2c0\";\n}\n\n.fa-id-badge:before {\n content: \"\\f2c1\";\n}\n\n.fa-drivers-license:before,\n.fa-id-card:before {\n content: \"\\f2c2\";\n}\n\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n content: \"\\f2c3\";\n}\n\n.fa-quora:before {\n content: \"\\f2c4\";\n}\n\n.fa-free-code-camp:before {\n content: \"\\f2c5\";\n}\n\n.fa-telegram:before {\n content: \"\\f2c6\";\n}\n\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n content: \"\\f2c7\";\n}\n\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n content: \"\\f2c8\";\n}\n\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n content: \"\\f2c9\";\n}\n\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n content: \"\\f2ca\";\n}\n\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n content: \"\\f2cb\";\n}\n\n.fa-shower:before {\n content: \"\\f2cc\";\n}\n\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n content: \"\\f2cd\";\n}\n\n.fa-podcast:before {\n content: \"\\f2ce\";\n}\n\n.fa-window-maximize:before {\n content: \"\\f2d0\";\n}\n\n.fa-window-minimize:before {\n content: \"\\f2d1\";\n}\n\n.fa-window-restore:before {\n content: \"\\f2d2\";\n}\n\n.fa-times-rectangle:before,\n.fa-window-close:before {\n content: \"\\f2d3\";\n}\n\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n content: \"\\f2d4\";\n}\n\n.fa-bandcamp:before {\n content: \"\\f2d5\";\n}\n\n.fa-grav:before {\n content: \"\\f2d6\";\n}\n\n.fa-etsy:before {\n content: \"\\f2d7\";\n}\n\n.fa-imdb:before {\n content: \"\\f2d8\";\n}\n\n.fa-ravelry:before {\n content: \"\\f2d9\";\n}\n\n.fa-eercast:before {\n content: \"\\f2da\";\n}\n\n.fa-microchip:before {\n content: \"\\f2db\";\n}\n\n.fa-snowflake-o:before {\n content: \"\\f2dc\";\n}\n\n.fa-superpowers:before {\n content: \"\\f2dd\";\n}\n\n.fa-wpexplorer:before {\n content: \"\\f2de\";\n}\n\n.fa-meetup:before {\n content: \"\\f2e0\";\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n/*# sourceMappingURL=../maps/css/admin.css.map */\n"],"sourceRoot":"../../css"}
\ No newline at end of file
diff --git a/assets/maps/css/builder.css.map b/assets/maps/css/builder.css.map
new file mode 100644
index 0000000000..7227d44c37
--- /dev/null
+++ b/assets/maps/css/builder.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["builder.css","admin/_course-builder.scss","_includes/_vars-brand-colors.scss","_includes/_mixins.scss","_includes/_vars.scss"],"names":[],"mappings":"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","file":"../../css/builder.css","sourcesContent":["@charset \"UTF-8\";\nbody.admin_page_llms-course-builder {\n background: #fff;\n}\nbody.admin_page_llms-course-builder #adminmenumain {\n display: none;\n}\nbody.admin_page_llms-course-builder #wpbody-content {\n padding-bottom: 0;\n}\nbody.admin_page_llms-course-builder #wpfooter {\n display: none;\n}\nbody.admin_page_llms-course-builder #wpcontent, body.admin_page_llms-course-builder #wpfooter {\n margin-left: 0;\n}\nbody.admin_page_llms-course-builder .llms-button-secondary .fa {\n margin-right: 5px;\n}\nbody.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__group {\n font-size: 16px;\n}\nbody.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__option .select2-results__option {\n padding-left: 2em;\n}\n\n.wrap.lifterlms.llms-builder {\n margin: 0;\n padding: 0;\n position: relative;\n}\n.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n padding: 10px;\n width: calc(100% - 200px);\n z-index: 3;\n}\n@media only screen and (min-width: 1200px) {\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {\n width: 560px;\n }\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n width: calc(100% - 640px);\n }\n}\n@media only screen and (min-width: 1440px) {\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {\n width: calc(100% - 780px);\n }\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n width: 720px;\n }\n}\n@media only screen and (min-width: 1680px) {\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {\n width: calc(100% - 1000px);\n }\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n width: 940px;\n }\n}\n@media only screen and (max-width: 782px) {\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n position: absolute;\n top: 0;\n width: auto;\n }\n}\n.wrap.lifterlms.llms-builder .llms-headline {\n display: inline-block;\n font-weight: 400;\n margin: 0;\n padding: 0;\n transition: width 0.3s ease-in-out;\n vertical-align: middle;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main {\n padding: 30px 30px 30px 0;\n position: relative;\n width: calc(100% - 450px);\n z-index: 2;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons {\n display: inline-block;\n position: relative;\n vertical-align: middle;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons button {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n cursor: pointer;\n outline: inherit;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons-lesson-id {\n vertical-align: top;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n position: relative;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header .llms-button-secondary {\n margin-right: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections {\n box-shadow: 0 0 0 3px transparent;\n min-height: 60px;\n padding: 10px 0;\n transition: box-shadow 0.6s ease, min-height 0.2s ease;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections.dragging {\n box-shadow: 0 0 0 3px #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section {\n background: #fff;\n border: 1px solid #efefef;\n border-radius: 6px;\n box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.08);\n position: relative;\n margin: 0 0 20px 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header {\n align-items: center;\n display: flex;\n gap: 15px;\n justify-content: space-between;\n padding: 20px 10px 20px 30px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons {\n align-items: center;\n display: flex;\n gap: 15px;\n justify-content: space-between;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right {\n display: flex;\n gap: 0px;\n margin-top: -5px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon {\n padding: 5px 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-left {\n display: flex;\n gap: 15px;\n}\n@media only screen and (min-width: 1200px) {\n .wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-left {\n white-space: nowrap;\n }\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded .llms-lessons {\n overflow: visible;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected .llms-drag-utility.drag-section {\n border-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected > .llms-builder-header .llms-headline {\n font-weight: 400;\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-footer {\n border-top: 1px solid #efefef;\n padding: 20px 20px 20px 30px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:first-child:before {\n top: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:last-child:before {\n bottom: 55px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded:last-child:before {\n bottom: 86px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons {\n box-shadow: 0 0 0 3px transparent;\n height: 0;\n margin: 0;\n padding: 0;\n transition: box-shadow 0.6s ease, min-height 0.2s ease;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.dragging {\n box-shadow: 0 0 0 3px #466dd8;\n min-height: 60px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded, .wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded {\n height: auto;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded li.llms-lesson, .wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded li.llms-lesson {\n pointer-events: auto;\n visibility: visible;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson {\n background: #fff;\n border-top: 1px solid #efefef;\n margin: 0;\n padding: 20px 10px 20px 30px;\n position: relative;\n pointer-events: none;\n visibility: hidden;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected .llms-drag-utility.drag-lesson {\n border-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected > .llms-builder-header .llms-headline {\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n justify-content: space-between;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-headline {\n font-weight: 700;\n margin-left: 10px;\n cursor: pointer;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons {\n align-items: center;\n display: flex;\n flex: 1;\n gap: 15px;\n justify-content: space-between;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-left {\n display: flex;\n gap: 15px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right {\n display: flex;\n gap: 0;\n margin-top: -5px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon {\n padding: 5px 10px;\n}\n@media only screen and (min-width: 1200px) {\n .wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-left {\n white-space: nowrap;\n }\n}\n@media only screen and (min-width: 1200px) {\n .wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header > .llms-builder-header {\n flex-wrap: nowrap;\n }\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section .llms-drag-utility {\n background: #fff;\n border: 2px solid #ccc;\n border-radius: 50%;\n height: 10px;\n left: 13px;\n position: absolute;\n top: 24px;\n width: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson .llms-drag-utility {\n height: 6px;\n left: 14px;\n top: 25px !important;\n width: 6px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility,\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility {\n border-color: #fff;\n cursor: move;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility:hover:after,\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility:hover:after {\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility:after,\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility:after {\n background: #fff;\n content: \"··\\a··\\a··\";\n color: #ccc;\n display: block;\n font-size: 36px;\n height: 29px;\n letter-spacing: -1px;\n line-height: 8px;\n left: -7px;\n position: absolute;\n text-align: center;\n top: -12px;\n width: 23px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-sortable-helper, .wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-draggable-dragging,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-sortable-helper,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-draggable-dragging {\n border: 1px solid #ccc;\n background: #fff;\n transform: rotate(2deg);\n visibility: visible !important;\n z-index: 999;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder {\n border: 3px dashed #466dd8;\n background: rgba(70, 109, 216, 0.3);\n margin: 0 10px;\n padding: 5px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder:before,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder:before {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility {\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility:after {\n left: -35px;\n top: -28px;\n}\n.wrap.lifterlms.llms-builder .llms-input-wrapper {\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container {\n font-size: inherit;\n font-family: inherit;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor.ql-blank::before {\n color: #a0a0a0;\n left: 8px;\n right: 8px;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor p {\n font-size: inherit;\n line-height: 1;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-tooltip {\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-input,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor {\n border: none;\n border-bottom: 2px dotted transparent;\n box-shadow: none;\n cursor: text;\n display: inline-block;\n font-size: inherit;\n font-weight: 700;\n height: auto;\n line-height: 1;\n margin: 0 8px;\n min-width: 60px;\n padding: 0;\n transition: border 0.2s ease, box-shadow 0.2s ease;\n}\n.wrap.lifterlms.llms-builder .llms-input:empty:before,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:empty:before {\n color: #a0a0a0;\n content: attr(data-placeholder);\n}\n.wrap.lifterlms.llms-builder .llms-input:hover,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:hover {\n border-bottom-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-input[disabled],\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled] {\n cursor: not-allowed;\n}\n.wrap.lifterlms.llms-builder .llms-input[disabled]:hover,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled]:hover {\n border-bottom-color: transparent;\n}\n.wrap.lifterlms.llms-builder .llms-input:focus,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:focus {\n background: #fff;\n box-shadow: 0 0 0 4px #fff, 0 0 0 6px #466dd8;\n border-bottom: none;\n outline: none;\n}\n.wrap.lifterlms.llms-builder .llms-input b, .wrap.lifterlms.llms-builder .llms-input strong,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor b,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor strong {\n font-weight: 700;\n}\n.wrap.lifterlms.llms-builder .llms-input.standard,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard {\n border: 1px solid #e6e6e6;\n margin: 2px;\n padding: 5px 3px;\n}\n.wrap.lifterlms.llms-builder .llms-input.standard:hover,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:hover {\n border-color: #d6d6d6;\n}\n.wrap.lifterlms.llms-builder .llms-input.standard:focus,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:focus {\n box-shadow: 0 0 0 2px #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-input.permalink,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.permalink {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor {\n padding: 0 1px;\n}\n.wrap.lifterlms.llms-builder .llms-label {\n font-weight: 500;\n}\n.wrap.lifterlms.llms-builder .llms-label .fa {\n color: #aaa;\n padding-left: 6px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-editor .llms-label {\n float: left;\n margin-right: 10px;\n position: relative;\n top: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-editor textarea {\n border: none;\n padding: 10px;\n display: block;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image button.llms-add-image {\n width: 130px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image .llms-image {\n display: inline-block;\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image .llms-image:hover .llms-action-icon {\n opacity: 1;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image .llms-image .llms-action-icon {\n color: #fff;\n font-size: 24px;\n opacity: 0;\n padding: 0;\n position: absolute;\n transition: opacity 0.2s ease;\n right: 3px;\n top: 1px;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image .llms-image img {\n display: block;\n height: 100px;\n max-width: 100%;\n width: auto;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group {\n background: #f4f4f4;\n padding: 10px;\n position: relative;\n margin: 0 1px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label {\n min-width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-editable-input,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-editable-input {\n flex: 2;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label--after,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label--after {\n color: #888;\n min-width: auto;\n font-size: 85%;\n padding-left: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch {\n display: block;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:before, .wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:before,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch .llms-label,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch .llms-label {\n width: calc(100% - 34px);\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-image,\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-video,\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-editor,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-image,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-video,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-editor {\n margin-top: 2px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard {\n display: block;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.two-digits, .wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.three-digits, .wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.four-digits,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.two-digits,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.three-digits,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.four-digits {\n display: inline-block;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number .llms-input {\n color: #888;\n min-width: 30px;\n text-align: right;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.two-digits {\n width: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.three-digits {\n width: 40px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.four-digits {\n width: 60px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number small {\n color: #888;\n text-transform: uppercase;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings {\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n}\n.wrap.lifterlms.llms-builder .llms-model-settings:before, .wrap.lifterlms.llms-builder .llms-model-settings:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header {\n border-bottom: 1px solid #efefef;\n padding: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-up {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-down {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-up {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-down {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-body {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-header:before, .wrap.lifterlms.llms-builder .llms-settings-group-header:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-header:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-title {\n display: inline-block;\n font-size: 16px;\n font-weight: 700;\n line-height: 1.5;\n margin: 0 5px;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-toggle {\n float: right;\n font-size: 18px;\n padding: 2px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-body {\n padding: 16px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row {\n display: flex;\n flex-wrap: wrap;\n margin: 2px 0;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field,\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group {\n flex: 1;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:first-child,\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:first-child {\n margin-left: 0;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:last-child,\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:last-child {\n margin-right: 0;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-breaker {\n margin: 2px 0;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-editable-select {\n margin: 2px 0;\n}\n.wrap.lifterlms.llms-builder .llms-editable-select .select2-container--default.select2-container--focus .select2-selection--multiple {\n border-color: #aaa;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio label {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label {\n display: inline-block;\n margin: 0 3px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label > span {\n transition: background 0.2s ease;\n display: inline-block;\n padding: 3px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images img {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input:checked + span {\n background: #466dd8;\n}\n.wrap.lifterlms.llms-builder .settings-field--disabled {\n opacity: 0.5;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon {\n color: #666;\n display: inline-block;\n font-size: 13px;\n text-decoration: none;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon:hover {\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon:hover.danger {\n color: #bb231c;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon.circle {\n border: 2px solid #aaa;\n border-radius: 50%;\n font-size: 9px;\n height: 8px;\n line-height: 1;\n padding: 5px;\n text-align: center;\n width: 8px;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover {\n border-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover.danger {\n border-color: #bb231c;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list {\n display: flex;\n flex-wrap: wrap;\n gap: 15px;\n margin: 10px 0 0 8px;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item {\n color: #666;\n font-size: 13px;\n margin: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active, .wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon {\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .fa, .wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon .fa {\n margin-right: 5px;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n cursor: pointer;\n outline: inherit;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button:hover {\n text-decoration: underline;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar {\n background: #e6e6e6;\n bottom: 0;\n overflow: hidden;\n padding: 30px;\n position: fixed;\n transition: width 0.3s ease-in-out;\n top: 32px;\n right: 0;\n width: 360px;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul, .wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities li {\n margin: 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul {\n display: flex;\n gap: 15px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li {\n flex: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li:last-child {\n margin-right: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility {\n background: #efefef;\n border: 1px solid #ccc;\n border-radius: 8px;\n color: inherit;\n cursor: pointer;\n display: block;\n overflow: hidden;\n padding: 6px 12px;\n position: relative;\n text-align: center;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility:hover {\n background: #fefefe;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility .fa {\n background: #848484;\n position: absolute;\n left: 0;\n top: 0;\n padding: 7px;\n color: #fff;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-sidebar-headline {\n margin: 0 0 10px;\n font-size: 22px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list {\n margin-bottom: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list li {\n margin-bottom: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utility {\n color: #444;\n text-decoration: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button {\n background: #466dd8;\n border-radius: 8px;\n border: none;\n color: #fff;\n cursor: pointer;\n display: block;\n margin: 0;\n overflow: hidden;\n padding: 17px 20px;\n position: relative;\n transition: background 0.2s ease, color 0.2s ease;\n text-align: center;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button:hover {\n background: #2b55cb;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary {\n background: #efefef;\n color: #444;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary:hover {\n background: #fefefe;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary .fa {\n background: #848484;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button .fa {\n background: #1c3987;\n border-radius: 4px 0 0 4px;\n color: #fff;\n display: block;\n font-size: 20px;\n padding: 15px 20px;\n position: absolute;\n top: 0;\n left: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button[disabled=disabled] {\n opacity: 0.4;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small {\n padding: 8px 10px 8px 46px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small .fa {\n font-size: 15px;\n padding: 9px 10px;\n width: 20px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right.small {\n padding-left: 10px;\n padding-right: 46px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right .fa {\n border-radius: 0 4px 4px 0;\n left: auto;\n right: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor {\n height: 100%;\n min-height: 100%;\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav {\n background-color: #1c3987;\n margin: 0;\n padding: 8px 0 0 8px;\n font-size: 0;\n margin: -10px -10px 10px -10px;\n position: relative;\n z-index: 2;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu {\n list-style-type: none;\n margin: 0;\n padding: 0;\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item {\n display: inline-block;\n margin: 0 6px 0 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu:before {\n border: 8px solid transparent;\n border-left-color: #cacaca;\n content: \"\";\n position: absolute;\n top: 11px;\n left: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu .llms-editor-menu-item:hover > a,\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu .llms-editor-menu-item.active > a {\n background: #dfdfdf;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item:hover > a {\n background-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > a {\n background-color: #e6e6e6;\n color: #466dd8;\n font-weight: 700;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > a:focus {\n box-shadow: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > .llms-editor-menu {\n display: inline-block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item a {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n color: #FFF;\n display: inline-block;\n padding: 9px 18px;\n text-decoration: none;\n transition: background 0.2s ease;\n font-size: 15px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right {\n float: right;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right a, .wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right:hover {\n background: transparent;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab {\n display: none;\n height: calc(100% - 90px);\n overflow: scroll;\n position: relative;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz {\n display: flex;\n flex-direction: column;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions {\n flex: 1 0 auto;\n overflow: scroll;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions .llms-quiz-questions {\n overflow: visible;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save {\n bottom: 10px;\n left: 10px;\n position: absolute;\n right: 10px;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error {\n background: #bb231c;\n border-radius: 4px;\n color: #fff;\n display: inline-block;\n font-style: italic;\n padding: 5px 15px 7px 25px;\n margin: 0 0 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error li {\n margin: 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-save {\n width: 75%;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-exit {\n padding-left: 5px;\n padding-right: 5px;\n width: 23%;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button {\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i {\n position: absolute;\n left: 10px;\n top: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i .llms-spinner {\n border-color: #fff;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status] .llms-status-indicator {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saved] .status--saved {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] {\n background-color: #f8954f;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] .status--unsaved {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saving] .status--saving {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=error] .status--error {\n display: block;\n}\n@media only screen and (max-width: 782px) {\n .wrap.lifterlms.llms-builder .llms-builder-sidebar {\n margin-right: 10px;\n position: relative;\n top: 0;\n width: auto;\n }\n .wrap.lifterlms.llms-builder .llms-builder-main {\n padding-right: 10px;\n width: auto;\n }\n}\n.wrap.lifterlms.llms-builder .select2-container {\n z-index: 99999999;\n}\n.wrap.lifterlms.llms-builder .select2-results__option {\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] {\n background: #466dd8;\n}\n.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] .llms-existing-action {\n color: #fff;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result {\n align-items: center;\n display: flex;\n padding: 5px 5px 5px 0;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info {\n flex: 6;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4, .wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5 {\n margin: 0;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4 {\n font-weight: 400;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5 {\n font-weight: 300;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action {\n color: #466dd8;\n flex: 1;\n text-align: center;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action .fa {\n display: block;\n font-size: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action small {\n text-transform: uppercase;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-empty {\n margin: 100px auto;\n text-align: center;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-empty p {\n font-size: 18px;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-empty button.llms-element-button {\n max-width: 320px;\n margin: 0 auto;\n}\n.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-model-title {\n width: calc(100% - 310px);\n}\n.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-quiz-points {\n float: left;\n margin-right: 10px;\n width: 100px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header {\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n padding: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header:before, .wrap.lifterlms.llms-builder .llms-model-header:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder .llms-model-header:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title {\n float: left;\n margin-right: 10px;\n width: calc(100% - 200px);\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title .llms-input {\n width: calc(100% - 65px);\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-model-status.llms-switch {\n float: left;\n margin-right: 10px;\n position: relative;\n text-align: right;\n top: -2px;\n width: 100px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons {\n float: left;\n position: relative;\n text-align: right;\n width: 80px;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .llms-action-icon {\n margin-left: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .fa {\n max-width: 15px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header + .llms-model-settings.active {\n margin-top: -10px;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings {\n clear: both;\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings.active {\n display: block;\n margin-top: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer {\n display: flex;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button {\n flex: 1;\n margin: 0 5px;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:first-child {\n margin-left: 0;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:last-child {\n margin-right: 0;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button.llms-show-question-bank {\n flex: 2;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-tools {\n display: none;\n width: 100%;\n position: relative;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank:before, .wrap.lifterlms.llms-builder ul.llms-question-bank:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header {\n clear: both;\n padding-top: 20px;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header:first-child {\n padding-top: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header h4 {\n font-size: 20px;\n margin: 10px 5px;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type {\n box-sizing: border-box;\n float: left;\n margin: 0;\n padding: 3px;\n width: 33.3333%;\n transition: opacity 0.3s ease-in-out;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type.filtered {\n opacity: 0.3;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable {\n display: block;\n position: relative;\n text-decoration: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable .llms-element-button {\n opacity: 0.5;\n pointer-events: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions {\n margin: 10px 3px;\n padding: 5px;\n transition: box-shadow 0.6s ease;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions.dragging {\n box-shadow: 0 0 0 3px #466dd8;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions:empty:before {\n background: #fff;\n content: attr(data-empty-msg);\n display: block;\n font-size: 18px;\n margin: 0 auto;\n padding: 100px 0;\n text-align: center;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question {\n background: #fff;\n margin: 0 0 3px;\n padding: 15px 12px 10px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question:hover > .llms-builder-header .llms-action-icons {\n opacity: 1;\n pointer-events: auto;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions {\n margin-left: 12px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions .llms-question {\n border-bottom: 2px solid #e6e6e6;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions:empty:before {\n content: attr(data-empty-msg);\n display: block;\n font-size: 18px;\n text-align: center;\n margin: 20px auto;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder.qtype--group {\n display: none !important;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:before, .wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header > * {\n float: left;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body {\n display: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body.active {\n display: block;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp {\n background: #466dd8;\n border-radius: 4px;\n color: #fff;\n cursor: move;\n font-size: 90%;\n margin-top: -5px;\n padding: 4px 10px 6px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp small, .wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa {\n line-height: 1.2;\n vertical-align: middle;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa {\n margin-right: 4px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline {\n width: calc(100% - 110px - 90px - 55px);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline .ql-editor {\n width: calc(100% - 16px);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-action-icons {\n width: 110px;\n opacity: 0;\n pointer-events: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-points {\n width: 90px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features {\n margin: 10px 0 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features:last-child {\n margin: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features .llms-switch {\n margin-right: 15px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-editable-video {\n position: relative;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-wrapper {\n background: #f4f4f4;\n margin: 2px 1px;\n padding: 10px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header {\n margin-bottom: 10px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:before, .wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header .llms-switch {\n float: right;\n text-align: right;\n width: 260px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices {\n border: 3px solid #f4f4f4;\n margin: -3px;\n padding: 0;\n transition: box-shadow 0.6s ease;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.dragging {\n box-shadow: 0 0 0 3px #466dd8;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.multi-choices li.llms-question-choice .llms-choice-id span {\n border-radius: 4px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice {\n margin: 0 0 5px;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice:last-child {\n margin-bottom: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox] {\n display: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox]:checked + .llms-marker {\n background: #4d8d3c;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker {\n border-radius: 50%;\n background: #d0d0d0;\n box-shadow: inset 0 0 1px #848484;\n color: #444;\n display: inline-block;\n font-size: 16px;\n height: 20px;\n line-height: 20px;\n padding: 5px;\n position: relative;\n text-align: center;\n transition: background 0.1s ease;\n width: 20px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker .fa {\n left: 7px;\n opacity: 0;\n position: absolute;\n top: 7px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover b {\n opacity: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover .fa {\n opacity: 1;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input-wrapper,\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image {\n display: inline-block;\n width: calc(100% - 55px - 35px - 5px);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input {\n width: calc(100% - 16px);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image {\n vertical-align: middle;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image img {\n height: 50px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-action-icons {\n display: inline-block;\n opacity: 1;\n pointer-events: auto;\n text-align: right;\n width: 55px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.llms-sortable-placeholder {\n border: 3px dashed #466dd8 !important;\n background: rgba(70, 109, 216, 0.3);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.ui-sortable-helper {\n border: 1px solid #ccc;\n background: #fff;\n padding: 10px;\n transform: rotate(2deg);\n z-index: 999;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-sortable-helper,\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-draggable-dragging {\n border: 1px solid #ccc;\n background: #fff;\n transform: rotate(2deg);\n z-index: 999;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder {\n border: 3px dashed #466dd8 !important;\n background: rgba(70, 109, 216, 0.3);\n}\n.wrap.lifterlms.llms-builder .llms-switch {\n display: inline-block;\n float: none;\n width: auto;\n}\n.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox] {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked + .llms-switch-slider {\n background: #4d8d3c;\n}\n.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked + .llms-switch-slider:after {\n transform: translateX(14px);\n}\n.wrap.lifterlms.llms-builder .llms-switch .llms-label {\n display: inline-block;\n vertical-align: top;\n}\n.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider {\n background: #e0e0e0;\n border-radius: 8px;\n display: inline-block;\n height: 16px;\n margin-top: 2px;\n position: relative;\n transition: background 0.2s ease;\n vertical-align: top;\n width: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider:after {\n background: #fff;\n border-radius: 8px;\n content: \"\";\n display: block;\n height: 12px;\n left: 2px;\n position: relative;\n transition: transform 0.2s ease;\n top: 2px;\n width: 12px;\n}\n\n.llms-multi-input .llms-input-wrapper {\n width: 50%;\n float: left;\n margin-bottom: 6px;\n font-size: 12px;\n}\n\n.llms-multi-input .llms-input-wrapper .llms-input {\n font-size: 12px;\n padding: 5px;\n}","body.admin_page_llms-course-builder {\n\tbackground: #fff;\n\n\t#adminmenumain { display: none; }\n\t#wpbody-content { padding-bottom: 0; }\n\t#wpfooter { display: none; }\n\n\t#wpcontent, #wpfooter {\n\t\tmargin-left: 0;\n\t}\n\n\t.llms-button-secondary {\n\t\t.fa {\n\t\t\tmargin-right: 5px;\n\t\t}\n\t}\n\n\t// &.folded {\n\t// \t.llms-course-builder {\n\t// \t\tleft: 56px;\n\t// \t}\n\t// }\n\n\t.webui-popover {\n\t\t.select2-container--default {\n\t\t\t.select2-results__group {\n\t\t\t\tfont-size: 16px;\n\t\t\t}\n\t\t\t.select2-results__option .select2-results__option {\n\t\t\t\tpadding-left: 2em;\n\t\t\t}\n\t\t}\n\n\t}\n}\n\n.wrap.lifterlms.llms-builder {\n\tmargin: 0;\n\tpadding: 0;\n\tposition: relative;\n\n\n\t&.editor-active {\n\t\t.llms-builder-sidebar {\n\t\t\tpadding: 10px;\n\t\t\twidth: calc( 100% - 200px );\n\t\t\tz-index: 3;\n\t\t}\n\t\t@media only screen and ( min-width: 1200px ) {\n\t\t\t.llms-builder-main {\n\t\t\t\twidth: 560px;\n\t\t\t}\n\t\t\t.llms-builder-sidebar {\n\t\t\t\twidth: calc( 100% - 640px );\n\t\t\t}\n\t\t}\n\t\t@media only screen and ( min-width: 1440px ) {\n\t\t\t.llms-builder-main {\n\t\t\t\twidth: calc( 100% - 780px );\n\t\t\t}\n\t\t\t.llms-builder-sidebar {\n\t\t\t\twidth: 720px;\n\t\t\t}\n\t\t}\n\t\t@media only screen and ( min-width: 1680px ) {\n\t\t\t.llms-builder-main {\n\t\t\t\twidth: calc( 100% - 1000px );\n\t\t\t}\n\t\t\t.llms-builder-sidebar {\n\t\t\t\twidth: 940px;\n\t\t\t}\n\t\t}\n\t\t@media only screen and ( max-width: 782px ) {\n\t\t\t.llms-builder-sidebar {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t}\n\t}\n\n\t.llms-headline {\n\t\tdisplay: inline-block;\n\t\tfont-weight: 400;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\ttransition: width 0.3s ease-in-out;\n\t\tvertical-align: middle;\n\t}\n\n\t.llms-builder-main {\n\t\tpadding: 30px 30px 30px 0;\n\t\tposition: relative;\n\t\twidth: calc( 100% - 450px );\n\t\tz-index: 2;\n\n\t\t.llms-action-icons {\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\tvertical-align: middle;\n\t\t\tbutton {\n\t\t\t\tbackground: none;\n\t\t\t\tcolor: inherit;\n\t\t\t\tborder: none;\n\t\t\t\tpadding: 0;\n\t\t\t\tcursor: pointer;\n\t\t\t\toutline: inherit;\n\t\t\t}\n\t\t}\n\n\t\t.llms-action-icons-lesson-id {\n\t\t\tvertical-align: top;\n\t\t}\n\n\t\t// Course\n\t\t.llms-course-header {\n\t\t\talign-items: center;\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t\tgap: 15px;\n\t\t\tposition: relative;\n\t\t\tz-index: 1;\n\t\t\t.llms-button-secondary {\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\t\t}\n\n\n\t\t// Sections\n\t\tul.llms-sections {\n\t\t\tbox-shadow: 0 0 0 3px transparent;\n\t\t\tmin-height: 60px;\n\t\t\tpadding: 10px 0;\n\t\t\ttransition: box-shadow 0.6s ease, min-height 0.2s ease;\n\t\t\t&.dragging {\n\t\t\t\tbox-shadow: 0 0 0 3px $color-brand-blue;\n\t\t\t}\n\t\t}\n\n\t\t\tli.llms-section {\n\t\t\t\tbackground: #fff;\n\t\t\t\tborder: 1px solid #efefef;\n\t\t\t\tborder-radius: 6px;\n\t\t\t\tbox-shadow: 2px 2px 8px rgba( 0, 0, 0, 0.08 );\n\t\t\t\tposition: relative;\n\t\t\t\tmargin: 0 0 20px 0;\n\t\t\t\tpadding: 0;\n\n\t\t\t\t> .llms-builder-header {\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tgap: 15px;\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\tpadding: 20px 10px 20px 30px;\n\t\t\t\t\t.llms-action-icons {\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\tgap: 15px;\n\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t.llms-action-icons-right {\n\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\tgap: 0px;\n\t\t\t\t\t\t\tmargin-top: -5px;\n\t\t\t\t\t\t\t.llms-action-icon {\n\t\t\t\t\t\t\t\tpadding: 5px 10px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.llms-action-icons-left {\n\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\tgap: 15px;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@media only screen and ( min-width: 1200px ) {\n\t\t\t\t\t\t\t.llms-action-icons-right,\n\t\t\t\t\t\t\t.llms-action-icons-left {\n\t\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&.expanded {\n\t\t\t\t\t.llms-lessons { overflow: visible; }\n\t\t\t\t}\n\t\t\t\t&.selected {\n\t\t\t\t\t.llms-drag-utility.drag-section {\n\t\t\t\t\t\tborder-color: $color-brand-blue;\n\t\t\t\t\t}\n\t\t\t\t\t> .llms-builder-header .llms-headline {\n\t\t\t\t\t\tfont-weight: 400;\n\t\t\t\t\t\tcolor: $color-brand-blue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t> .llms-builder-footer {\n\t\t\t\t\tborder-top: 1px solid #efefef;\n\t\t\t\t\tpadding: 20px 20px 20px 30px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tli.llms-section:first-child:before {\n\t\t\t\ttop: 30px;\n\t\t\t}\n\n\t\t\tli.llms-section:last-child:before {\n\t\t\t\tbottom: 55px;\n\t\t\t}\n\n\t\t\tli.llms-section.expanded:last-child:before {\n\t\t\t\tbottom: 86px;\n\t\t\t}\n\n\t\t// Lessons\n\t\tul.llms-lessons {\n\t\t\tbox-shadow: 0 0 0 3px transparent;\n\t\t\theight: 0;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\ttransition: box-shadow 0.6s ease, min-height 0.2s ease;\n\t\t\t&.dragging {\n\t\t\t\tbox-shadow: 0 0 0 3px $color-brand-blue;\n\t\t\t\tmin-height: 60px;\n\t\t\t}\n\t\t\t&.expanded, // added via backbone view events\n\t\t\t&.drag-expanded { // added only during dragover events and ignores model attrs\n\t\t\t\theight: auto;\n\t\t\t\tli.llms-lesson {\n\t\t\t\t\tpointer-events: auto;\n\t\t\t\t\tvisibility: visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t\tli.llms-lesson {\n\t\t\t\tbackground: #fff;\n\t\t\t\tborder-top: 1px solid #efefef;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 20px 10px 20px 30px;\n\t\t\t\tposition: relative;\n\t\t\t\tpointer-events: none;\n\t\t\t\tvisibility: hidden;\n\n\t\t\t\t&.selected {\n\t\t\t\t\t.llms-drag-utility.drag-lesson {\n\t\t\t\t\t\tborder-color: $color-brand-blue;\n\t\t\t\t\t}\n\t\t\t\t\t> .llms-builder-header .llms-headline {\n\t\t\t\t\t\tcolor: $color-brand-blue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t> .llms-builder-header {\n\t\t\t\t\t.llms-headline {\n\t\t\t\t\t\tfont-weight: 700;\n\t\t\t\t\t\tmargin-left: 10px;\n\t\t\t\t\t\tcursor: pointer;\n\t\t\t\t\t}\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\tgap: 15px;\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t.llms-action-icons {\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\tflex: 1;\n\t\t\t\t\t\tgap: 15px;\n\t\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\t\t.llms-action-icons-left {\n\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\tgap: 15px;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.llms-action-icons-right {\n\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\tgap: 0;\n\t\t\t\t\t\t\tmargin-top: -5px;\n\t\t\t\t\t\t\t.llms-action-icon {\n\t\t\t\t\t\t\t\tpadding: 5px 10px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t@media only screen and ( min-width: 1200px ) {\n\t\t\t\t\t\t\t.llms-action-icons-right,\n\t\t\t\t\t\t\t.llms-action-icons-left {\n\t\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t@media only screen and ( min-width: 1200px ) {\n\t\t\t\t\t\t> .llms-builder-header {\n\t\t\t\t\t\t\tflex-wrap: nowrap;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t// Drag Utilities\n\t\tli.llms-section .llms-drag-utility {\n\t\t\tbackground: #fff;\n\t\t\tborder: 2px solid #ccc;\n\t\t\tborder-radius: 50%;\n\t\t\theight: 10px;\n\t\t\tleft: 13px;\n\t\t\tposition: absolute;\n\t\t\ttop: 24px;\n\t\t\twidth: 10px;\n\t\t}\n\n\t\tli.llms-lesson .llms-drag-utility {\n\t\t\theight: 6px;\n\t\t\tleft: 14px;\n\t\t\ttop: 25px !important;\n\t\t\twidth: 6px;\n\t\t}\n\n\t\t.llms-section:hover > .llms-drag-utility,\n\t\t.llms-lesson:hover > .llms-drag-utility {\n\t\t\tborder-color: #fff;\n\t\t\tcursor: move;\n\t\t\t&:hover:after {\n\t\t\t\tcolor: $color-brand-blue;\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tbackground: #fff;\n\t\t\t\tcontent: '\\00b7\\00b7\\A\\00b7\\00b7\\A\\00b7\\00b7';\n\t\t\t\tcolor: #ccc;\n\t\t\t\tdisplay: block;\n\t\t\t\tfont-size: 36px;\n\t\t\t\theight: 29px;\n\t\t\t\tletter-spacing: -1px;\n\t\t\t\tline-height: 8px;\n\t\t\t\tleft: -7px;\n\t\t\t\tposition: absolute;\n\t\t\t\ttext-align: center;\n\t\t\t\ttop: -12px;\n\t\t\t\twidth: 23px;\n\t\t\t}\n\t\t}\n\n\t\t// Sortable\n\t\tli.llms-section,\n\t\tli.llms-lesson {\n\t\t\t&.ui-sortable-helper,\n\t\t\t&.ui-draggable-dragging {\n\t\t\t\tborder: 1px solid #ccc;\n\t\t\t\tbackground: #fff;\n\t\t\t\ttransform: rotate( 2deg );\n\t\t\t\tvisibility: visible !important;\n\t\t\t\tz-index: 999;\n\t\t\t}\n\n\t\t\t&.llms-sortable-placeholder {\n\t\t\t\tborder: 3px dashed $color-brand-blue;\n\t\t\t\tbackground: rgba( $color-brand-blue, 0.3 );\n\t\t\t\tmargin: 0 10px;\n\t\t\t\tpadding: 5px;\n\t\t\t\t&:before { display: none; }\n\t\t\t}\n\t\t}\n\n\t\tul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility {\n\t\t\tposition: relative;\n\t\t\t&:after {\n\t\t\t\tleft: -35px;\n\t\t\t\ttop: -28px;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Editable\n\t.llms-input-wrapper {\n\t\tposition: relative;\n\t}\n\n\t.llms-input-formatting.ql-container {\n\t\tfont-size: inherit;\n\t\tfont-family: inherit;\n\t\t.ql-editor.ql-blank::before {\n\t\t\tcolor: #a0a0a0;\n\t\t\tleft: 8px;\n\t\t\tright: 8px;\n\t\t}\n\t\t.ql-editor {\n\t\t\tp {\n\t\t\t\tfont-size: inherit;\n\t\t\t\tline-height: 1;\n\t\t\t}\n\t\t}\n\t\t.ql-tooltip {\n\t\t\tz-index: 1;\n\t\t}\n\t}\n\n\t.llms-input,\n\t.llms-input-formatting .ql-editor {\n\t\tborder: none;\n\t\tborder-bottom: 2px dotted transparent;\n\t\tbox-shadow: none;\n\t\tcursor: text;\n\t\tdisplay: inline-block;\n\t\tfont-size: inherit;\n\t\tfont-weight: 700;\n\t\theight: auto;\n\t\tline-height: 1;\n\t\tmargin: 0 8px;\n\t\tmin-width: 60px;\n\t\tpadding: 0;\n\t\ttransition: border 0.2s ease, box-shadow 0.2s ease;\n\t\t&:empty:before {\n\t\t\tcolor: #a0a0a0;\n\t\t\tcontent: attr( data-placeholder );\n\t\t}\n\t\t&:hover {\n\t\t\tborder-bottom-color: $color-brand-blue;\n\t\t}\n\t\t&[disabled] {\n\t\t\tcursor: not-allowed;\n\t\t\t&:hover {\n\t\t\t\tborder-bottom-color: transparent;\n\t\t\t}\n\t\t}\n\t\t&:focus {\n\t\t\tbackground: #fff;\n\t\t\tbox-shadow: 0 0 0 4px #fff, 0 0 0 6px $color-brand-blue;\n\t\t\tborder-bottom: none;\n\t\t\toutline: none;\n\t\t}\n\t\tb, strong {\n\t\t\tfont-weight: 700;\n\t\t}\n\t\t&.standard {\n\t\t\tborder: 1px solid #e6e6e6;\n\t\t\tmargin: 2px;\n\t\t\tpadding: 5px 3px;\n\t\t\t&:hover {\n\t\t\t\tborder-color: #d6d6d6;\n\t\t\t}\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: 0 0 0 2px $color-brand-blue;\n\t\t\t}\n\t\t}\n\t\t&.permalink {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t.llms-input-formatting .ql-editor {\n\t\tpadding: 0 1px;\n\t}\n\n\t.llms-label {\n\t\tfont-weight: 500;\n\t\t.fa {\n\t\t\tcolor: #aaa;\n\t\t\tpadding-left: 6px;\n\t\t}\n\t}\n\n\t// .llms-editable-image,\n\t// .llms-editable-video,\n\t// .llms-editable-editor {\n\t// }\n\n\t.llms-editable-editor {\n\t\t.llms-label {\n\t\t\tfloat: left;\n\t\t\tmargin-right: 10px;\n\t\t\tposition: relative;\n\t\t\ttop: 10px;\n\t\t}\n\t\ttextarea {\n\t\t\tborder: none;\n\t\t\tpadding: 10px;\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t.llms-editable-image {\n\t\tbutton.llms-add-image {\n\t\t\twidth: 130px;\n\t\t}\n\t\t.llms-image {\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\t&:hover .llms-action-icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\t.llms-action-icon {\n\t\t\t\tcolor: #fff;\n\t\t\t\tfont-size: 24px;\n\t\t\t\topacity: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\tposition: absolute;\n\t\t\t\ttransition: opacity 0.2s ease;\n\t\t\t\tright: 3px;\n\t\t\t\ttop: 1px;\n\t\t\t\tz-index: 1;\n\t\t\t}\n\t\t\timg {\n\t\t\t\tdisplay: block;\n\t\t\t\theight: 100px;\n\t\t\t\tmax-width: 100%;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t}\n\t}\n\n\t.llms-settings-field,\n\t.llms-editable-toggle-group {\n\t\tbackground: #f4f4f4;\n\t\tpadding: 10px;\n\t\tposition: relative;\n\t\tmargin: 0 1px;\n\n\t\t&.has-label-after {\n\t\t\talign-items: center;\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\n\t\t\t.llms-label {\n\t\t\t\tmin-width: 100%;\n\t\t\t}\n\t\t\t.llms-editable-input {\n\t\t\t\tflex: 2;\n\t\t\t}\n\t\t\t.llms-label--after {\n\t\t\t\tcolor: #888;\n\t\t\t\tmin-width: auto;\n\t\t\t\tfont-size: 85%;\n\t\t\t\tpadding-left: 10px;\n\t\t\t}\n\t\t}\n\n\t\t.llms-switch {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\t@include clearfix;\n\n\t\t\t.llms-label {\n\t\t\t\twidth: calc( 100% - 34px );\n\t\t\t}\n\t\t}\n\n\t\t.llms-editable-image,\n\t\t.llms-editable-video,\n\t\t.llms-editable-editor {\n\t\t\tmargin-top: 2px;\n\t\t}\n\n\t\t.llms-input.standard {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\t&.two-digits,\n\t\t\t&.three-digits,\n\t\t\t&.four-digits {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t.llms-editable-number {\n\t\t.llms-input {\n\t\t\tcolor: #888;\n\t\t\tmin-width: 30px;\n\t\t\ttext-align: right;\n\t\t\t&.two-digits {\n\t\t\t\twidth: 30px;\n\t\t\t}\n\t\t\t&.three-digits {\n\t\t\t\twidth: 40px;\n\t\t\t}\n\t\t\t&.four-digits {\n\t\t\t\twidth: 60px;\n\t\t\t}\n\t\t}\n\t\tsmall {\n\t\t\tcolor: #888;\n\t\t\ttext-transform: uppercase;\n\t\t}\n\t}\n\n\t.llms-model-settings {\n\t\tbackground-color: #FFF;\n\t\t-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n\t\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n\t\t@include clearfix();\n\n\t\t.llms-settings-group-header {\n\t\t\tborder-bottom: 1px solid #efefef;\n\t\t\tpadding: 10px;\n\n\t\t\t.fa-caret-up { display: block; }\n\t\t\t.fa-caret-down { display: none; }\n\t\t}\n\t\t&.hidden {\n\t\t\t.llms-settings-group-header {\n\t\t\t\t.fa-caret-up { display: none; }\n\t\t\t\t.fa-caret-down { display: block; }\n\t\t\t}\n\t\t\t.llms-settings-group-body { display: none; }\n\t\t}\n\t}\n\n\t.llms-settings-group-header {\n\t\t@include clearfix();\n\t\t.llms-settings-group-title {\n\t\t\tdisplay: inline-block;\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: 700;\n\t\t\tline-height: 1.5;\n\t\t\tmargin: 0 5px;\n\t\t\tpadding: 0;\n\t\t}\n\t\t.llms-settings-group-toggle {\n\t\t\tfloat: right;\n\t\t\tfont-size: 18px;\n\t\t\tpadding: 2px;\n\t\t}\n\t}\n\n\t.llms-settings-group-body {\n\t\tpadding: 16px;\n\t}\n\n\t.llms-settings-row {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tmargin: 2px 0;\n\n\t\t.llms-settings-field,\n\t\t.llms-editable-toggle-group {\n\t\t\tflex: 1;\n\t\t\t&:first-child {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t&:last-child {\n\t\t\t\tmargin-right: 0;\n\t\t\t}\n\t\t}\n\n\t\t.llms-breaker {\n\t\t\tmargin: 2px 0;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t.llms-editable-select {\n\t\tmargin: 2px 0;\n\t\t.select2-container--default.select2-container--focus .select2-selection--multiple {\n\t\t\tborder-color: #aaa;\n\t\t}\n\t}\n\n\t.llms-editable-radio {\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t}\n\t\t&.has-images {\n\t\t\tinput { display: none; }\n\t\t\tlabel {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmargin: 0 3px;\n\t\t\t}\n\t\t\tlabel > span {\n\t\t\t\ttransition: background 0.2s ease;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tpadding: 3px;\n\t\t\t}\n\t\t\timg { display: block; }\n\t\t\tinput:checked + span {\n\t\t\t\tbackground: $color-brand-blue;\n\t\t\t}\n\t\t}\n\t}\n\n\t.settings-field--disabled {\n\t\topacity: 0.5;\n\t}\n\n\t// Icons\n\t.llms-action-icon {\n\t\tcolor: #666;\n\t\tdisplay: inline-block;\n\t\tfont-size: 13px;\n\t\ttext-decoration: none;\n\t\t&:hover {\n\t\t\tcolor: $color-brand-blue;\n\t\t\t&.danger { color: $color-danger; }\n\t\t}\n\t\t&.circle {\n\t\t\tborder: 2px solid #aaa;\n\t\t\tborder-radius: 50%;\n\t\t\tfont-size: 9px;\n\t\t\theight: 8px;\n\t\t\tline-height: 1;\n\t\t\tpadding: 5px;\n\t\t\ttext-align: center;\n\t\t\twidth: 8px;\n\t\t\t&:hover {\n\t\t\t\tborder-color: $color-brand-blue;\n\t\t\t\t&.danger {\n\t\t\t\t\tborder-color: $color-danger;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tul.llms-info-list {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 15px;\n\t\tmargin: 10px 0 0 8px;\n\t\tpadding: 0;\n\t\tli.llms-info-item {\n\t\t\tcolor: #666;\n\t\t\tfont-size: 13px;\n\t\t\tmargin: 0;\n\t\t\t&.active,\n\t\t\t&.active .llms-action-icon {\n\t\t\t\tcolor: $color-brand-blue;\n\t\t\t\t.fa {\n\t\t\t\t\tmargin-right: 5px;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbutton {\n\t\t\t\tbackground: none;\n\t\t\t\tcolor: inherit;\n\t\t\t\tborder: none;\n\t\t\t\tpadding: 0;\n\t\t\t\tcursor: pointer;\n\t\t\t\toutline: inherit;\n\t\t\t\t&:hover {\n\t\t\t\t\ttext-decoration: underline;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Sidebar\n\t.llms-builder-sidebar {\n\t\tbackground: #e6e6e6;\n\t\tbottom: 0;\n\t\toverflow: hidden;\n\t\tpadding: 30px;\n\t\tposition: fixed;\n\t\ttransition: width 0.3s ease-in-out;\n\t\ttop: 32px;\n\t\tright: 0;\n\t\twidth: 360px;\n\t\tz-index: 1;\n\n\t\t.llms-utilities {\n\n\t\t\tul, li {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tul {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 15px;\n\t\t\t\tli {\n\t\t\t\t\tflex: 1;\n\t\t\t\t\t&:last-child {\n\t\t\t\t\t\tmargin-right: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-utility {\n\t\t\t\tbackground: #efefef;\n\t\t\t\tborder: 1px solid #ccc;\n\t\t\t\tborder-radius: 8px;\n\t\t\t\tcolor: inherit;\n\t\t\t\tcursor: pointer;\n\t\t\t\tdisplay: block;\n\t\t\t\toverflow: hidden;\n\t\t\t\tpadding: 6px 12px;\n\t\t\t\tposition: relative;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 100%;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: #fefefe;\n\t\t\t\t}\n\n\t\t\t\t.fa {\n\t\t\t\t\tbackground: #848484;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tleft: 0;\n\t\t\t\t\ttop: 0;\n\t\t\t\t\tpadding: 7px;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t.llms-sidebar-headline {\n\t\t\tmargin: 0 0 10px;\n\t\t\tfont-size: 22px;\n\t\t}\n\n\t\t.llms-elements-list {\n\t\t\tmargin-bottom: 30px;\n\t\t\tli {\n\t\t\t\tmargin-bottom: 10px;\n\t\t\t}\n\t\t}\n\n\t\t.llms-utility {\n\t\t\tcolor: #444;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t.llms-element-button {\n\t\t\tbackground: $color-brand-blue;\n\t\t\tborder-radius: 8px;\n\t\t\tborder: none;\n\t\t\tcolor: #fff;\n\t\t\tcursor: pointer;\n\t\t\tdisplay: block;\n\t\t\tmargin: 0;\n\t\t\toverflow: hidden;\n\t\t\tpadding: 17px 20px;\n\t\t\tposition: relative;\n\t\t\ttransition: background 0.2s ease, color 0.2s ease;\n\t\t\ttext-align: center;\n\t\t\twidth: 100%;\n\n\t\t\t&:hover {\n\t\t\t\tbackground: $color-brand-blue-dark;\n\t\t\t}\n\n\t\t\t&.secondary {\n\t\t\t\tbackground: #efefef;\n\t\t\t\tcolor: #444;\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: #fefefe;\n\t\t\t\t}\n\t\t\t\t.fa {\n\t\t\t\t\tbackground: #848484;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.fa {\n\t\t\t\tbackground: $color-brand-dark-blue;\n\t\t\t\tborder-radius: 4px 0 0 4px;\n\t\t\t\tcolor: #fff;\n\t\t\t\tdisplay: block;\n\t\t\t\tfont-size: 20px;\n\t\t\t\tpadding: 15px 20px;\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t}\n\n\t\t\t&[disabled=\"disabled\"] {\n\t\t\t\topacity: 0.4;\n\t\t\t}\n\n\t\t\t&.small {\n\n\t\t\t\tpadding: 8px 10px 8px 46px;\n\t\t\t\t.fa {\n\t\t\t\t\tfont-size: 15px;\n\t\t\t\t\tpadding: 9px 10px;\n\t\t\t\t\twidth: 20px;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t&.right {\n\n\t\t\t\t&.small {\n\t\t\t\t\tpadding-left: 10px;\n\t\t\t\t\tpadding-right: 46px;\n\t\t\t\t}\n\n\t\t\t\t.fa {\n\t\t\t\t\tborder-radius: 0 4px 4px 0;\n\t\t\t\t\tleft: auto;\n\t\t\t\t\tright: 0;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\n\t\t.llms-editor {\n\t\t\theight: 100%;\n\t\t\tmin-height: 100%;\n\t\t\tposition: relative;\n\t\t}\n\n\t\t\t// .llms-builder-close-editor {\n\t\t\t// \tbackground: $color-brand-blue;\n\t\t\t// \tborder: none;\n\t\t\t// \tborder-radius: 50%;\n\t\t\t// \tcolor: #fff;\n\t\t\t// \tcursor: pointer;\n\t\t\t// \tdisplay: inline-block;\n\t\t\t// \tfont-size: 18px;\n\t\t\t// \theight: 30px;\n\t\t\t// \tmargin: 0;\n\t\t\t// \tposition: absolute;\n\t\t\t// \tright: 0;\n\t\t\t// \ttext-align: center;\n\t\t\t// \ttop: 3px;\n\t\t\t// \twidth: 30px;\n\t\t\t// \tz-index: 3;\n\t\t\t// }\n\n\t\t\t.llms-editor-nav {\n\t\t\t\tbackground-color: $color-brand-dark-blue;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 8px 0 0 8px;\n\t\t\t\tfont-size: 0;\n\t\t\t\tmargin: -10px -10px 10px -10px;\n\t\t\t\tposition: relative;\n\t\t\t\tz-index: 2;\n\n\t\t\t\t.llms-editor-menu {\n\t\t\t\t\tlist-style-type: none;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding: 0;\n\t\t\t\t\tposition: relative;\n\n\t\t\t\t\t.llms-editor-menu-item {\n\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\tmargin: 0 6px 0 0;\n\t\t\t\t\t\tpadding: 0;\n\n\t\t\t\t\t\t> .llms-editor-menu {\n\t\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t\t\t&:before {\n\t\t\t\t\t\t\t\tborder: 8px solid transparent;\n\t\t\t\t\t\t\t\tborder-left-color: #cacaca;\n\t\t\t\t\t\t\t\tcontent: '';\n\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\ttop: 11px;\n\t\t\t\t\t\t\t\tleft: 0;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t.llms-editor-menu-item:hover > a,\n\t\t\t\t\t\t\t.llms-editor-menu-item.active > a {\n\t\t\t\t\t\t\t\tbackground: #dfdfdf;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&:hover > a {\n\t\t\t\t\t\t\tbackground-color: $color-brand-blue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&.active > a {\n\t\t\t\t\t\t\tbackground-color: #e6e6e6;\n\t\t\t\t\t\t\tcolor: $color-brand-blue;\n\t\t\t\t\t\t\tfont-weight: 700;\n\n\t\t\t\t\t\t\t&:focus {\n\t\t\t\t\t\t\t\tbox-shadow: none;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t&.active > .llms-editor-menu {\n\t\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ta {\n\t\t\t\t\t\t\tborder-top-left-radius: 4px;\n\t\t\t\t\t\t\tborder-top-right-radius: 4px;\n\t\t\t\t\t\t\tcolor: #FFF;\n\t\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t\tpadding: 9px 18px;\n\t\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\t\ttransition: background 0.2s ease;\n\t\t\t\t\t\t\tfont-size: 15px;\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t&.right {\n\t\t\t\t\t\t\tfloat: right;\n\n\t\t\t\t\t\t\ta,\n\t\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\t\tbackground: transparent;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-editor-tab {\n\t\t\t\tdisplay: none;\n\t\t\t\theight: calc( 100% - 90px );\n\t\t\t\toverflow: scroll;\n\t\t\t\tposition: relative;\n\t\t\t\tz-index: 1;\n\t\t\t\t&.active {\n\t\t\t\t\tdisplay: block;\n\n\t\t\t\t\t&.tab--quiz {\n\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\tflex-direction: column;\n\n\t\t\t\t\t\t.llms-quiz-questions {\n\t\t\t\t\t\t\tflex: 1 0 auto;\n\t\t\t\t\t\t\toverflow: scroll;\n\n\t\t\t\t\t\t\t// groups\n\t\t\t\t\t\t\t.llms-quiz-questions {\n\t\t\t\t\t\t\t\toverflow: visible;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// .llms-builder-editor {\n\n\t\t\t// \topacity: 0;\n\t\t\t// \tmargin: 10px 0;\n\t\t\t// \ttransition: opacity 0.2s linear;\n\n\t\t\t// \t&.ready {\n\t\t\t// \t\topacity: 1;\n\t\t\t// \t}\n\n\t\t\t// \ttextarea {\n\t\t\t// \t\tborder: none;\n\t\t\t// \t\tdisplay: block;\n\t\t\t// \t\twidth: 100%;\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t.llms-builder-save {\n\n\t\t\tbottom: 10px;\n\t\t\tleft: 10px;\n\t\t\tposition: absolute;\n\t\t\tright: 10px;\n\t\t\tz-index: 1;\n\n\t\t\t.llms-builder-error {\n\t\t\t\tbackground: $color-danger;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tcolor: #fff;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont-style: italic;\n\t\t\t\tpadding: 5px 15px 7px 25px;\n\t\t\t\tmargin: 0 0 10px;\n\n\t\t\t\tli {\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding: 0;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t.llms-save {\n\t\t\t\twidth: 75%;\n\t\t\t}\n\t\t\t.llms-exit {\n\t\t\t\tpadding-left: 5px;\n\t\t\t\tpadding-right: 5px;\n\t\t\t\twidth: 23%;\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\tposition: relative;\n\t\t\t\ti {\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tleft: 10px;\n\t\t\t\t\ttop: 10px;\n\n\t\t\t\t\t.llms-spinner {\n\t\t\t\t\t\tborder-color: #fff;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbutton[data-status] .llms-status-indicator { display: none; }\n\t\t\tbutton[data-status=\"saved\"] .status--saved { display: block; }\n\t\t\tbutton[data-status=\"unsaved\"] {\n\t\t\t\tbackground-color: $color-brand-orange;\n\t\t\t\t.status--unsaved { display: block; }\n\t\t\t}\n\t\t\tbutton[data-status=\"saving\"] .status--saving { display: block; }\n\t\t\tbutton[data-status=\"error\"] .status--error { display: block; }\n\n\t\t}\n\n\t}\n\t@media only screen and ( max-width: 782px ) {\n\t\t.llms-builder-sidebar {\n\t\t\tmargin-right: 10px;\n\t\t\tposition: relative;\n\t\t\ttop: 0;\n\t\t\twidth: auto;\n\t\t}\n\t\t.llms-builder-main {\n\t\t\tpadding-right: 10px;\n\t\t\twidth: auto;\n\t\t}\n\t}\n\n\t// Search Popover\n\t .select2-container {\n\t \tz-index: 99999999;\n\t }\n\n\t.select2-results__option {\n\t\tpadding: 0;\n\t}\n\n\t.select2-container--default .select2-results__option--highlighted[aria-selected] {\n\t\tbackground: $color-brand-blue;\n\t\t.llms-existing-action {\n\t\t\tcolor: #fff;\n\t\t}\n\t}\n\n\t.llms-existing-lesson-result {\n\n\t\talign-items: center;\n\t\tdisplay: flex;\n\t\tpadding: 5px 5px 5px 0;\n\n\t\t.llms-existing-info {\n\t\t\tflex: 6;\n\n\t\t\th4, h5 {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\th4 {\n\t\t\t\tfont-weight: 400;\n\t\t\t}\n\n\t\t\th5 {\n\t\t\t\tfont-weight: 300;\n\t\t\t}\n\t\t}\n\n\t\t.llms-existing-action {\n\t\t\tcolor: $color-brand-blue;\n\t\t\tflex: 1;\n\t\t\ttext-align: center;\n\n\t\t\t.fa {\n\t\t\t\tdisplay: block;\n\t\t\t\tfont-size: 30px;\n\t\t\t}\n\n\t\t\tsmall {\n\t\t\t\ttext-transform: uppercase;\n\t\t\t}\n\n\t\t}\n\n\n\t}\n\n\n\t// Quiz\n\t .llms-quiz-empty {\n \tmargin: 100px auto;\n \ttext-align: center;\n\n \tp { font-size: 18px; }\n \tbutton.llms-element-button {\n \t\tmax-width: 320px;\n \t\tmargin: 0 auto;\n \t}\n\n\t }\n\n\t.llms-editor-tab.tab--quiz {\n\t\t.llms-model-header {\n\t\t\t.llms-model-title {\n\t\t\t\twidth: calc( 100% - 310px );\n\t\t\t}\n\t\t\t.llms-quiz-points {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-right: 10px;\n\t\t\t\twidth: 100px;\n\t\t\t}\n\t\t}\n\t}\n\n\t.llms-model-header {\n\t\tbackground-color: #FFF;\n\t\t-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n\t\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n\t\tpadding: 10px;\n\t\t@include clearfix();\n\n\t\t.llms-model-title {\n\t\t\tfloat: left;\n\t\t\tmargin-right: 10px;\n\t\t\twidth: calc( 100% - 200px );\n\t\t\t.llms-input {\n\t\t\t\twidth: calc( 100% - 65px );\n\t\t\t}\n\t\t}\n\t\t.llms-model-status.llms-switch {\n\t\t\tfloat: left;\n\t\t\tmargin-right: 10px;\n\t\t\tposition: relative;\n\t\t\ttext-align: right;\n\t\t\ttop: -2px;\n\t\t\twidth: 100px;\n\t\t}\n\t\t.llms-action-icons {\n\t\t\tfloat: left;\n\t\t\tposition: relative;\n\t\t\ttext-align: right;\n\t\t\twidth: 80px;\n\t\t\tz-index: 1;\n\t\t\t.llms-action-icon {\n\t\t\t\tmargin-left: 10px;\n\t\t\t}\n\t\t\t.fa {\n\t\t\t\tmax-width: 15px;\n\t\t\t}\n\t\t}\n\t}\n\n\t.llms-model-header + .llms-model-settings.active {\n\t\tmargin-top: -10px;\n\t}\n\n\t.llms-model-settings {\n\t\tclear: both;\n\t\tdisplay: none;\n\n\t\t&.active {\n\t\t\tdisplay: block;\n\t\t\tmargin-top: 10px;\n\t\t}\n\t}\n\n\t.llms-quiz-footer {\n\t\tdisplay: flex;\n\t\tbutton.llms-element-button {\n\t\t\tflex: 1;\n\t\t\tmargin: 0 5px;\n\t\t\t&:first-child { margin-left: 0; }\n\t\t\t&:last-child { margin-right: 0; }\n\t\t\t&.llms-show-question-bank {\n\t\t\t\tflex: 2;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Question Bank\n\t.llms-quiz-tools {\n\t\tdisplay: none;\n\t\twidth: 100%;\n\t\tposition: relative;\n\n\t\t// .llms-quiz-tools-search {\n\t\t// \tpadding: 0 10px;\n\t\t// \tmargin-bottom: 15px;\n\n\t\t// \t.fa {\n\t\t// \t\tcolor: #888;\n\t\t// \t\tfont-size: 16px;\n\t\t// \t}\n\n\t\t// \tinput[type=\"search\"] {\n\t\t// \t\tbackground: inherit;\n\t\t// \t\tborder: none;\n\t\t// \t\tborder-bottom: 1px solid #bbb;\n\t\t// \t\tbox-shadow: none;\n\t\t// \t\tfont-size: 16px;\n\t\t// \t\tmargin: 8px 0 0;\n\t\t// \t\tpadding: 2px 5px;\n\t\t// \t\twidth: calc( 100% - 200px );\n\n\t\t// \t\t&:focus {\n\t\t// \t\t\tborder-bottom-color: $color-brand-blue;\n\t\t// \t\t}\n\t\t// \t}\n\n\t\t// }\n\n\t}\n\n\tul.llms-question-bank {\n\n\t\tlist-style-type: none;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\t@include clearfix;\n\n\t\tli.llms-question-bank-header {\n\t\t\tclear: both;\n\t\t\tpadding-top: 20px;\n\t\t\t&:first-child {\n\t\t\t\tpadding-top: 0;\n\t\t\t}\n\t\t\th4 {\n\t\t\t\tfont-size: 20px;\n\t\t\t\tmargin: 10px 5px;\n\t\t\t}\n\t\t}\n\n\t\tli.llms-question-type {\n\t\t\tbox-sizing: border-box;\n\t\t\tfloat: left;\n\t\t\tmargin: 0;\n\t\t\tpadding: 3px;\n\t\t\twidth: 33.3333%;\n\t\t\ttransition: opacity 0.3s ease-in-out;\n\n\t\t\t&.filtered {\n\t\t\t\topacity: 0.3;\n\t\t\t}\n\n\t\t\t.llms-type-unavailable {\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: relative;\n\t\t\t\ttext-decoration: none;\n\t\t\t\t.llms-element-button {\n\t\t\t\t\topacity: 0.5;\n\t\t\t\t\tpointer-events: none;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Quiz Questions\n\tul.llms-quiz-questions {\n\n\t\tmargin: 10px 3px;\n\t\tpadding: 5px;\n\t\ttransition: box-shadow 0.6s ease;\n\n\t\t&.dragging {\n\t\t\tbox-shadow: 0 0 0 3px $color-brand-blue;\n\t\t}\n\n\t\t&:empty:before {\n\t\t\tbackground: #fff;\n\t\t\tcontent: attr(data-empty-msg);\n\t\t\tdisplay: block;\n\t\t\tfont-size: 18px;\n\t\t\tmargin: 0 auto;\n\t\t\tpadding: 100px 0;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\tli.llms-question {\n\n\t\t\tbackground: #fff;\n\t\t\tmargin: 0 0 3px;\n\t\t\tpadding: 15px 12px 10px;\n\n\t\t\t&:hover {\n\t\t\t\t> .llms-builder-header .llms-action-icons {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\tpointer-events: auto;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// groups\n\t\t\tul.llms-quiz-questions {\n\t\t\t\tmargin-left: 12px;\n\t\t\t\t.llms-question {\n\t\t\t\t\tborder-bottom: 2px solid #e6e6e6;\n\t\t\t\t}\n\t\t\t\t&:empty:before {\n\t\t\t\t\tcontent: attr(data-empty-msg);\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tfont-size: 18px;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t\tmargin: 20px auto;\n\t\t\t\t}\n\t\t\t\tli.llms-question.llms-sortable-placeholder.qtype--group {\n\t\t\t\t\tdisplay: none !important;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-builder-header {\n\t\t\t\t@include clearfix;\n\t\t\t\t> * {\n\t\t\t\t\tfloat: left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-question-body {\n\t\t\t\tdisplay: none;\n\t\t\t\t&.active {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-data-stamp {\n\t\t\t\tbackground: $color-brand-blue;\n\t\t\t\tborder-radius: 4px;\n\t\t\t\tcolor: #fff;\n\t\t\t\tcursor: move;\n\t\t\t\tfont-size: 90%;\n\t\t\t\tmargin-top: -5px;\n\t\t\t\tpadding: 4px 10px 6px;\n\n\t\t\t\tsmall, .fa {\n\t\t\t\t\tline-height: 1.2;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t}\n\n\t\t\t\t.fa {\n\t\t\t\t\tmargin-right: 4px;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t.llms-headline {\n\t\t\t\twidth: calc( 100% - 110px - 90px - 55px );\n\t\t\t\t.ql-editor {\n\t\t\t\t\twidth: calc( 100% - 16px );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-action-icons {\n\t\t\t\twidth: 110px;\n\t\t\t\topacity: 0;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\n\t\t\t.llms-question-points {\n\t\t\t\twidth: 90px;\n\t\t\t}\n\n\t\t\t.llms-question-features {\n\t\t\t\tmargin: 10px 0 0;\n\t\t\t\t&:last-child {\n\t\t\t\t\tmargin: 0;\n\t\t\t\t}\n\t\t\t\t.llms-switch {\n\t\t\t\t\tmargin-right: 15px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-editable-video {\n\t\t\t\tposition: relative;\n\t\t\t\tz-index: 1;\n\t\t\t}\n\n\t\t}\n\n\t\t\t.llms-question-choices-wrapper {\n\t\t\t\tbackground: #f4f4f4;\n\t\t\t\tmargin: 2px 1px;\n\t\t\t\tpadding: 10px;\n\t\t\t}\n\n\t\t\t\t.llms-question-choices-list-header {\n\t\t\t\t\t@include clearfix;\n\t\t\t\t\tmargin-bottom: 10px;\n\n\t\t\t\t\t.llms-switch {\n\t\t\t\t\t\tfloat: right;\n\t\t\t\t\t\ttext-align: right;\n\t\t\t\t\t\twidth: 260px;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tul.llms-question-choices {\n\t\t\t\tborder: 3px solid #f4f4f4;\n\t\t\t\tmargin: -3px;\n\t\t\t\tpadding: 0;\n\t\t\t\ttransition: box-shadow 0.6s ease;\n\n\t\t\t\t&.dragging {\n\t\t\t\t\tbox-shadow: 0 0 0 3px $color-brand-blue;\n\t\t\t\t}\n\n\t\t\t\t&.multi-choices li.llms-question-choice .llms-choice-id span {\n\t\t\t\t\tborder-radius: 4px;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t\tli.llms-question-choice {\n\t\t\t\t\tmargin: 0 0 5px;\n\t\t\t\t\tpadding: 0;\n\t\t\t\t\t&:last-child { margin-bottom: 0; }\n\n\t\t\t\t\t.llms-choice-id {\n\n\t\t\t\t\t\tinput[type=\"checkbox\"] {\n\t\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tinput[type=\"checkbox\"]:checked + .llms-marker {\n\t\t\t\t\t\t\tbackground: $color-green;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.llms-marker {\n\t\t\t\t\t\t\tborder-radius: 50%;\n\t\t\t\t\t\t\tbackground: #d0d0d0;\n\t\t\t\t\t\t\tbox-shadow: inset 0 0 1px #848484;\n\t\t\t\t\t\t\tcolor: #444;\n\t\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t\tfont-size: 16px;\n\t\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\t\tline-height: 20px;\n\t\t\t\t\t\t\tpadding: 5px;\n\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\ttransition: background 0.1s ease;\n\t\t\t\t\t\t\twidth: 20px;\n\n\t\t\t\t\t\t\t.fa {\n\t\t\t\t\t\t\t\tleft: 7px;\n\t\t\t\t\t\t\t\topacity: 0;\n\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\ttop: 7px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t&.selectable:hover {\n\t\t\t\t\t\t\t\tb { opacity: 0 }\n\t\t\t\t\t\t\t\t.fa { opacity: 1; }\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t.llms-input-wrapper,\n\t\t\t\t\t.llms-editable-image {\n\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t// action icons width, label width, ul margins\n\t\t\t\t\t\twidth: calc( 100% - 55px - 35px - 5px );\n\t\t\t\t\t}\n\n\t\t\t\t\t\t.llms-input {\n\t\t\t\t\t\t\twidth: calc( 100% - 16px );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t.llms-editable-image .llms-image {\n\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\timg {\n\t\t\t\t\t\t\theight: 50px;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t.llms-action-icons {\n\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\topacity: 1;\n\t\t\t\t\t\tpointer-events: auto;\n\t\t\t\t\t\ttext-align: right;\n\t\t\t\t\t\twidth: 55px;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tli.llms-question-choice.llms-sortable-placeholder {\n\t\t\t\t\tborder: 3px dashed $color-brand-blue !important;\n\t\t\t\t\tbackground: rgba( $color-brand-blue, 0.3 );\n\t\t\t\t}\n\n\t\t\t\tli.llms-question-choice.ui-sortable-helper {\n\t\t\t\t\tborder: 1px solid #ccc;\n\t\t\t\t\tbackground: #fff;\n\t\t\t\t\tpadding: 10px;\n\t\t\t\t\ttransform: rotate( 2deg );\n\t\t\t\t\tz-index: 999;\n\t\t\t\t}\n\n\t\tli.llms-question.ui-sortable-helper,\n\t\tli.llms-question.ui-draggable-dragging {\n\t\t\tborder: 1px solid #ccc;\n\t\t\tbackground: #fff;\n\t\t\ttransform: rotate( 2deg );\n\t\t\tz-index: 999;\n\t\t}\n\n\t\tli.llms-question.llms-sortable-placeholder {\n\t\t\tborder: 3px dashed $color-brand-blue !important;\n\t\t\tbackground: rgba( $color-brand-blue, 0.3 );\n\t\t}\n\n\t}\n\n\n\t.llms-switch {\n\t\tdisplay: inline-block;\n\t\tfloat: none;\n\t\twidth: auto;\n\n\t\tinput[type=\"checkbox\"] {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\tinput[type=\"checkbox\"]:checked + .llms-switch-slider {\n\t\t\tbackground: $color-green;\n\t\t}\n\n\t\tinput[type=\"checkbox\"]:checked + .llms-switch-slider:after {\n\t\t\ttransform: translateX( 14px );\n\t\t}\n\n\t\t.llms-label {\n\t\t\tdisplay: inline-block;\n\t\t\tvertical-align: top;\n\t\t}\n\n\t\t.llms-switch-slider {\n\t\t\tbackground: #e0e0e0;\n\t\t\tborder-radius: 8px;\n\t\t\tdisplay: inline-block;\n\t\t\theight: 16px;\n\t\t\tmargin-top: 2px;\n\t\t\tposition: relative;\n\t\t\ttransition: background 0.2s ease;\n\t\t\tvertical-align: top;\n\t\t\twidth: 30px;\n\n\t\t\t&:after {\n\t\t\t\tbackground: #fff;\n\t\t\t\tborder-radius: 8px;\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\theight: 12px;\n\t\t\t\tleft: 2px;\n\t\t\t\tposition: relative;\n\t\t\t\ttransition: transform 0.2s ease;\n\t\t\t\ttop: 2px;\n\t\t\t\twidth: 12px;\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n.llms-multi-input .llms-input-wrapper {\n\twidth: 50%;\n\tfloat: left;\n\tmargin-bottom: 6px;\n\tfont-size: 12px;\n}\n\n.llms-multi-input .llms-input-wrapper .llms-input {\n\tfont-size: 12px;\n padding: 5px;\n}\n","//\n// LifterLMS Brand Colors\n// Currently overrides brand colors on the admin panel\n//\n\n$color-brand-blue: #466dd8;\n$color-brand-blue-dark: darken( $color-brand-blue, 8 );\n$color-brand-dark-blue: darken( $color-brand-blue, 24 );\n$color-brand-blue-light: lighten( $color-brand-blue, 8 );\n\n$color-brand-orange: #f8954f;\n$color-brand-orange-dark: #f67d28;\n$color-brand-orange-light: lighten( $color-brand-orange, 8 );\n\n$color-brand-aqua: #17bebb;\n\n$color-brand-pink: #ef476f;\n\n$color-blue: $color-brand-blue;\n","\n@mixin clearfix() {\n\t&:before,\n\t&:after {\n\t content: \" \";\n\t display: table;\n\t}\n\t&:after {\n\t clear: both;\n\t}\n}\n\n//\n// Positioning mixin\n//\n// @param [string] $position: position\n// @param [list] $args (()): offsets list\n//\n// @source http://hugogiraudel.com/2013/08/05/offsets-sass-mixin/\n//\n@mixin position($position, $args: ()) {\n\t$offsets: top right bottom left;\n\tposition: $position;\n\n\t@each $offset in $offsets {\n\t\t$index: index($args, $offset);\n\n\t\t@if $index {\n\t\t\t@if $index == length($args) {\n\t\t\t\t#{$offset}: 0;\n\t\t\t}\n\t\t\t@else {\n\t\t\t\t$next: nth($args, $index + 1);\n\t\t\t\t@if is-valid-length($next) {\n\t\t\t\t\t#{$offset}: $next;\n\t\t\t\t}\n\t\t\t\t@else if index($offsets, $next) {\n\t\t\t\t\t#{$offset}: 0;\n\t\t\t\t}\n\t\t\t\t@else {\n\t\t\t\t\t@warn \"Invalid value `#{$next}` for offset `#{$offset}`.\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Function checking if $value is a valid length\n// @param [literal] $value: value to test\n// @return [bool]\n//\n@function is-valid-length($value) {\n\t$r: (type-of($value) == \"number\" and not unitless($value)) or (index(auto initial inherit 0, $value) != null);\n\t@return $r;\n}\n\n//\n// Shorthands\n//\n@mixin absolute($args: ()) {\n\t@include position(absolute, $args);\n}\n\n@mixin fixed($args: ()) {\n\t@include position(fixed, $args);\n}\n\n@mixin relative($args: ()) {\n\t@include position(relative, $args);\n}\n\n\n\n@mixin order_status_badges() {\n\n\t.llms-status {\n\t\tborder-radius: $radius-small;\n\t\tdisplay: inline-block;\n\t\tfont-size: 13px;\n\t\tfont-weight: 700;\n\t\tline-height: 1.4;\n\t\tpadding: 2px 6px;\n\t\tvertical-align: middle;\n\n\t\t&.llms-size--large {\n\t\t\tfont-size: 105%;\n\t\t\tpadding: 6px 12px;\n\t\t}\n\n\t\t&.llms-active,\n\t\t&.llms-completed,\n\t\t&.llms-pass, // quiz\n\t\t&.llms-txn-succeeded {\n\t\t\tcolor: $color-green;\n\t\t\tbackground-color: rgba( $color-green, .15 );\n\t\t}\n\n\t\t&.llms-fail, // quiz\n\t\t&.llms-failed,\n\t\t&.llms-expired,\n\t\t&.llms-cancelled,\n\t\t&.llms-txn-failed {\n\t\t\tcolor: $color-red;\n\t\t\tbackground-color: rgba( $color-red, .15 );\n\t\t}\n\n\t\t&.llms-incomplete, // assignment\n\t\t&.llms-on-hold,\n\t\t&.llms-pending,\n\t\t&.llms-pending-cancel,\n\t\t&.llms-refunded,\n\t\t&.llms-txn-pending,\n\t\t&.llms-txn-refunded {\n\t\t\tcolor: $color-orange;\n\t\t\tbackground-color: rgba( $color-orange, .15 );\n\t\t}\n\n\t}\n\n}\n","// ----- LifterLMS Brand Colors ----- \\\\\n$color-brand-dark-blue: #243c56;\n\n$color-brand-blue: #466dd8;\n$color-brand-blue-dark: darken( $color-brand-blue, 12 ); // #0077e4\n$color-brand-blue-light: lighten( $color-brand-blue, 8 );\n\n$color-brand-orange: #f8954f;\n$color-brand-orange-dark: #f67d28;\n$color-brand-orange-light: lighten( $color-brand-orange, 8 );\n\n$color-brand-aqua: #17bebb;\n\n$color-brand-pink: #ef476f;\n\n\n\n// ----- name our versions of common colors ----- \\\\\n$color-black: #010101;\n$color-green: #4d8d3c;\n$color-blue: $color-brand-blue;\n$color-red: #bb231c;\n$color-white: #fefefe;\n$color-aqua: #35bbaa;\n$color-purple: #845ef7;\n$color-orange: #c05621;\n\n$color-red-hover: darken($color-red,5);\n\n\n// ----- state / action names ----- \\\\\n$color-success: $color-green;\n$color-danger: $color-red;\n\n\n\n\n\n\n\n\n$color-lightgrey:\t\t#ccc;\n$color-grey: \t\t\t#999;\n$color-darkgrey:\t\t#666;\n$color-cinder:\t\t\t#444;\n$color-lightblue:\t\t#33b1cb;\n$color-darkblue:\t\t#0185a3;\n\n\n\n\n\n\n\n\n\n\n\n\n$color-border: #dedede;\n\n$el-box-shadow: 0 1px 2px 0 rgba($color-black,0.4);\n$el-background: #f1f1f1;\n$el-background-hover: #eaeaea;\n\n$break-xsmall: 320px;\n$break-small: 641px;\n$break-medium: 768px;\n$break-large: 1024px;\n\n$radius-small: 6px;\n$radius-medium: 12px;\n"],"sourceRoot":"../../scss"}
\ No newline at end of file
diff --git a/assets/maps/css/builder.min.css.map b/assets/maps/css/builder.min.css.map
new file mode 100644
index 0000000000..47be872a59
--- /dev/null
+++ b/assets/maps/css/builder.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["builder.css"],"names":[],"mappings":"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","file":"../../css/builder.min.css","sourcesContent":["@charset \"UTF-8\";\nbody.admin_page_llms-course-builder {\n background: #fff;\n}\nbody.admin_page_llms-course-builder #adminmenumain {\n display: none;\n}\nbody.admin_page_llms-course-builder #wpbody-content {\n padding-bottom: 0;\n}\nbody.admin_page_llms-course-builder #wpfooter {\n display: none;\n}\nbody.admin_page_llms-course-builder #wpcontent, body.admin_page_llms-course-builder #wpfooter {\n margin-left: 0;\n}\nbody.admin_page_llms-course-builder .llms-button-secondary .fa {\n margin-right: 5px;\n}\nbody.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__group {\n font-size: 16px;\n}\nbody.admin_page_llms-course-builder .webui-popover .select2-container--default .select2-results__option .select2-results__option {\n padding-left: 2em;\n}\n\n.wrap.lifterlms.llms-builder {\n margin: 0;\n padding: 0;\n position: relative;\n}\n.wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n padding: 10px;\n width: calc(100% - 200px);\n z-index: 3;\n}\n@media only screen and (min-width: 1200px) {\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {\n width: 560px;\n }\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n width: calc(100% - 640px);\n }\n}\n@media only screen and (min-width: 1440px) {\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {\n width: calc(100% - 780px);\n }\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n width: 720px;\n }\n}\n@media only screen and (min-width: 1680px) {\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-main {\n width: calc(100% - 1000px);\n }\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n width: 940px;\n }\n}\n@media only screen and (max-width: 782px) {\n .wrap.lifterlms.llms-builder.editor-active .llms-builder-sidebar {\n position: absolute;\n top: 0;\n width: auto;\n }\n}\n.wrap.lifterlms.llms-builder .llms-headline {\n display: inline-block;\n font-weight: 400;\n margin: 0;\n padding: 0;\n -webkit-transition: width 0.3s ease-in-out;\n transition: width 0.3s ease-in-out;\n vertical-align: middle;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main {\n padding: 30px 30px 30px 0;\n position: relative;\n width: calc(100% - 450px);\n z-index: 2;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons {\n display: inline-block;\n position: relative;\n vertical-align: middle;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons button {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n cursor: pointer;\n outline: inherit;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-action-icons-lesson-id {\n vertical-align: top;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n gap: 15px;\n position: relative;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-course-header .llms-button-secondary {\n margin-right: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections {\n -webkit-box-shadow: 0 0 0 3px transparent;\n box-shadow: 0 0 0 3px transparent;\n min-height: 60px;\n padding: 10px 0;\n -webkit-transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;\n transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;\n transition: box-shadow 0.6s ease, min-height 0.2s ease;\n transition: box-shadow 0.6s ease, min-height 0.2s ease, -webkit-box-shadow 0.6s ease;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections.dragging {\n -webkit-box-shadow: 0 0 0 3px #466dd8;\n box-shadow: 0 0 0 3px #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section {\n background: #fff;\n border: 1px solid #efefef;\n border-radius: 6px;\n -webkit-box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.08);\n box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.08);\n position: relative;\n margin: 0 0 20px 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 15px;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 20px 10px 20px 30px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 15px;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 0px;\n margin-top: -5px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon {\n padding: 5px 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-left {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 15px;\n}\n@media only screen and (min-width: 1200px) {\n .wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-right,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-header .llms-action-icons .llms-action-icons-left {\n white-space: nowrap;\n }\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded .llms-lessons {\n overflow: visible;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected .llms-drag-utility.drag-section {\n border-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.selected > .llms-builder-header .llms-headline {\n font-weight: 400;\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section > .llms-builder-footer {\n border-top: 1px solid #efefef;\n padding: 20px 20px 20px 30px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:first-child:before {\n top: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section:last-child:before {\n bottom: 55px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.expanded:last-child:before {\n bottom: 86px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons {\n -webkit-box-shadow: 0 0 0 3px transparent;\n box-shadow: 0 0 0 3px transparent;\n height: 0;\n margin: 0;\n padding: 0;\n -webkit-transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;\n transition: min-height 0.2s ease, -webkit-box-shadow 0.6s ease;\n transition: box-shadow 0.6s ease, min-height 0.2s ease;\n transition: box-shadow 0.6s ease, min-height 0.2s ease, -webkit-box-shadow 0.6s ease;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.dragging {\n -webkit-box-shadow: 0 0 0 3px #466dd8;\n box-shadow: 0 0 0 3px #466dd8;\n min-height: 60px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded, .wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded {\n height: auto;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.expanded li.llms-lesson, .wrap.lifterlms.llms-builder .llms-builder-main ul.llms-lessons.drag-expanded li.llms-lesson {\n pointer-events: auto;\n visibility: visible;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson {\n background: #fff;\n border-top: 1px solid #efefef;\n margin: 0;\n padding: 20px 10px 20px 30px;\n position: relative;\n pointer-events: none;\n visibility: hidden;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected .llms-drag-utility.drag-lesson {\n border-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.selected > .llms-builder-header .llms-headline {\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n gap: 15px;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-headline {\n font-weight: 700;\n margin-left: 10px;\n cursor: pointer;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n gap: 15px;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-left {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 15px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 0;\n margin-top: -5px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right .llms-action-icon {\n padding: 5px 10px;\n}\n@media only screen and (min-width: 1200px) {\n .wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-right,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header .llms-action-icons .llms-action-icons-left {\n white-space: nowrap;\n }\n}\n@media only screen and (min-width: 1200px) {\n .wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson > .llms-builder-header > .llms-builder-header {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section .llms-drag-utility {\n background: #fff;\n border: 2px solid #ccc;\n border-radius: 50%;\n height: 10px;\n left: 13px;\n position: absolute;\n top: 24px;\n width: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson .llms-drag-utility {\n height: 6px;\n left: 14px;\n top: 25px !important;\n width: 6px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility,\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility {\n border-color: #fff;\n cursor: move;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility:hover:after,\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility:hover:after {\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-section:hover > .llms-drag-utility:after,\n.wrap.lifterlms.llms-builder .llms-builder-main .llms-lesson:hover > .llms-drag-utility:after {\n background: #fff;\n content: \"··\\a··\\a··\";\n color: #ccc;\n display: block;\n font-size: 36px;\n height: 29px;\n letter-spacing: -1px;\n line-height: 8px;\n left: -7px;\n position: absolute;\n text-align: center;\n top: -12px;\n width: 23px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-sortable-helper, .wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.ui-draggable-dragging,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-sortable-helper,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.ui-draggable-dragging {\n border: 1px solid #ccc;\n background: #fff;\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n visibility: visible !important;\n z-index: 999;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder {\n border: 3px dashed #466dd8;\n background: rgba(70, 109, 216, 0.3);\n margin: 0 10px;\n padding: 5px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-section.llms-sortable-placeholder:before,\n.wrap.lifterlms.llms-builder .llms-builder-main li.llms-lesson.llms-sortable-placeholder:before {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility {\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-builder-main ul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility:after {\n left: -35px;\n top: -28px;\n}\n.wrap.lifterlms.llms-builder .llms-input-wrapper {\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container {\n font-size: inherit;\n font-family: inherit;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor.ql-blank::before {\n color: #a0a0a0;\n left: 8px;\n right: 8px;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-editor p {\n font-size: inherit;\n line-height: 1;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting.ql-container .ql-tooltip {\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-input,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor {\n border: none;\n border-bottom: 2px dotted transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n cursor: text;\n display: inline-block;\n font-size: inherit;\n font-weight: 700;\n height: auto;\n line-height: 1;\n margin: 0 8px;\n min-width: 60px;\n padding: 0;\n -webkit-transition: border 0.2s ease, -webkit-box-shadow 0.2s ease;\n transition: border 0.2s ease, -webkit-box-shadow 0.2s ease;\n transition: border 0.2s ease, box-shadow 0.2s ease;\n transition: border 0.2s ease, box-shadow 0.2s ease, -webkit-box-shadow 0.2s ease;\n}\n.wrap.lifterlms.llms-builder .llms-input:empty:before,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:empty:before {\n color: #a0a0a0;\n content: attr(data-placeholder);\n}\n.wrap.lifterlms.llms-builder .llms-input:hover,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:hover {\n border-bottom-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-input[disabled],\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled] {\n cursor: not-allowed;\n}\n.wrap.lifterlms.llms-builder .llms-input[disabled]:hover,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor[disabled]:hover {\n border-bottom-color: transparent;\n}\n.wrap.lifterlms.llms-builder .llms-input:focus,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor:focus {\n background: #fff;\n -webkit-box-shadow: 0 0 0 4px #fff, 0 0 0 6px #466dd8;\n box-shadow: 0 0 0 4px #fff, 0 0 0 6px #466dd8;\n border-bottom: none;\n outline: none;\n}\n.wrap.lifterlms.llms-builder .llms-input b, .wrap.lifterlms.llms-builder .llms-input strong,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor b,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor strong {\n font-weight: 700;\n}\n.wrap.lifterlms.llms-builder .llms-input.standard,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard {\n border: 1px solid #e6e6e6;\n margin: 2px;\n padding: 5px 3px;\n}\n.wrap.lifterlms.llms-builder .llms-input.standard:hover,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:hover {\n border-color: #d6d6d6;\n}\n.wrap.lifterlms.llms-builder .llms-input.standard:focus,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.standard:focus {\n -webkit-box-shadow: 0 0 0 2px #466dd8;\n box-shadow: 0 0 0 2px #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-input.permalink,\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor.permalink {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-input-formatting .ql-editor {\n padding: 0 1px;\n}\n.wrap.lifterlms.llms-builder .llms-label {\n font-weight: 500;\n}\n.wrap.lifterlms.llms-builder .llms-label .fa {\n color: #aaa;\n padding-left: 6px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-editor .llms-label {\n float: left;\n margin-right: 10px;\n position: relative;\n top: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-editor textarea {\n border: none;\n padding: 10px;\n display: block;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image button.llms-add-image {\n width: 130px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image .llms-image {\n display: inline-block;\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image .llms-image:hover .llms-action-icon {\n opacity: 1;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image .llms-image .llms-action-icon {\n color: #fff;\n font-size: 24px;\n opacity: 0;\n padding: 0;\n position: absolute;\n -webkit-transition: opacity 0.2s ease;\n transition: opacity 0.2s ease;\n right: 3px;\n top: 1px;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-editable-image .llms-image img {\n display: block;\n height: 100px;\n max-width: 100%;\n width: auto;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group {\n background: #f4f4f4;\n padding: 10px;\n position: relative;\n margin: 0 1px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label {\n min-width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-editable-input,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-editable-input {\n -webkit-box-flex: 2;\n -ms-flex: 2;\n flex: 2;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field.has-label-after .llms-label--after,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group.has-label-after .llms-label--after {\n color: #888;\n min-width: auto;\n font-size: 85%;\n padding-left: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch {\n display: block;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:before, .wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:before,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch:after,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-switch .llms-label,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-switch .llms-label {\n width: calc(100% - 34px);\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-image,\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-video,\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-editable-editor,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-image,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-video,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-editable-editor {\n margin-top: 2px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard {\n display: block;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.two-digits, .wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.three-digits, .wrap.lifterlms.llms-builder .llms-settings-field .llms-input.standard.four-digits,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.two-digits,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.three-digits,\n.wrap.lifterlms.llms-builder .llms-editable-toggle-group .llms-input.standard.four-digits {\n display: inline-block;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number .llms-input {\n color: #888;\n min-width: 30px;\n text-align: right;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.two-digits {\n width: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.three-digits {\n width: 40px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number .llms-input.four-digits {\n width: 60px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-number small {\n color: #888;\n text-transform: uppercase;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings {\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n}\n.wrap.lifterlms.llms-builder .llms-model-settings:before, .wrap.lifterlms.llms-builder .llms-model-settings:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header {\n border-bottom: 1px solid #efefef;\n padding: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-up {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings .llms-settings-group-header .fa-caret-down {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-up {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-header .fa-caret-down {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings.hidden .llms-settings-group-body {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-header:before, .wrap.lifterlms.llms-builder .llms-settings-group-header:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-header:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-title {\n display: inline-block;\n font-size: 16px;\n font-weight: 700;\n line-height: 1.5;\n margin: 0 5px;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-header .llms-settings-group-toggle {\n float: right;\n font-size: 18px;\n padding: 2px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-group-body {\n padding: 16px;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin: 2px 0;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field,\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:first-child,\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:first-child {\n margin-left: 0;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-settings-field:last-child,\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-editable-toggle-group:last-child {\n margin-right: 0;\n}\n.wrap.lifterlms.llms-builder .llms-settings-row .llms-breaker {\n margin: 2px 0;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-editable-select {\n margin: 2px 0;\n}\n.wrap.lifterlms.llms-builder .llms-editable-select .select2-container--default.select2-container--focus .select2-selection--multiple {\n border-color: #aaa;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio label {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label {\n display: inline-block;\n margin: 0 3px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images label > span {\n -webkit-transition: background 0.2s ease;\n transition: background 0.2s ease;\n display: inline-block;\n padding: 3px;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images img {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-editable-radio.has-images input:checked + span {\n background: #466dd8;\n}\n.wrap.lifterlms.llms-builder .settings-field--disabled {\n opacity: 0.5;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon {\n color: #666;\n display: inline-block;\n font-size: 13px;\n text-decoration: none;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon:hover {\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon:hover.danger {\n color: #bb231c;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon.circle {\n border: 2px solid #aaa;\n border-radius: 50%;\n font-size: 9px;\n height: 8px;\n line-height: 1;\n padding: 5px;\n text-align: center;\n width: 8px;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover {\n border-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-action-icon.circle:hover.danger {\n border-color: #bb231c;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n gap: 15px;\n margin: 10px 0 0 8px;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item {\n color: #666;\n font-size: 13px;\n margin: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active, .wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon {\n color: #466dd8;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .fa, .wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item.active .llms-action-icon .fa {\n margin-right: 5px;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n cursor: pointer;\n outline: inherit;\n}\n.wrap.lifterlms.llms-builder ul.llms-info-list li.llms-info-item button:hover {\n text-decoration: underline;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar {\n background: #e6e6e6;\n bottom: 0;\n overflow: hidden;\n padding: 30px;\n position: fixed;\n -webkit-transition: width 0.3s ease-in-out;\n transition: width 0.3s ease-in-out;\n top: 32px;\n right: 0;\n width: 360px;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul, .wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities li {\n margin: 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 15px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities ul li:last-child {\n margin-right: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility {\n background: #efefef;\n border: 1px solid #ccc;\n border-radius: 8px;\n color: inherit;\n cursor: pointer;\n display: block;\n overflow: hidden;\n padding: 6px 12px;\n position: relative;\n text-align: center;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility:hover {\n background: #fefefe;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utilities .llms-utility .fa {\n background: #848484;\n position: absolute;\n left: 0;\n top: 0;\n padding: 7px;\n color: #fff;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-sidebar-headline {\n margin: 0 0 10px;\n font-size: 22px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list {\n margin-bottom: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-elements-list li {\n margin-bottom: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-utility {\n color: #444;\n text-decoration: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button {\n background: #466dd8;\n border-radius: 8px;\n border: none;\n color: #fff;\n cursor: pointer;\n display: block;\n margin: 0;\n overflow: hidden;\n padding: 17px 20px;\n position: relative;\n -webkit-transition: background 0.2s ease, color 0.2s ease;\n transition: background 0.2s ease, color 0.2s ease;\n text-align: center;\n width: 100%;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button:hover {\n background: #2b55cb;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary {\n background: #efefef;\n color: #444;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary:hover {\n background: #fefefe;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.secondary .fa {\n background: #848484;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button .fa {\n background: #1c3987;\n border-radius: 4px 0 0 4px;\n color: #fff;\n display: block;\n font-size: 20px;\n padding: 15px 20px;\n position: absolute;\n top: 0;\n left: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button[disabled=disabled] {\n opacity: 0.4;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small {\n padding: 8px 10px 8px 46px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.small .fa {\n font-size: 15px;\n padding: 9px 10px;\n width: 20px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right.small {\n padding-left: 10px;\n padding-right: 46px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-element-button.right .fa {\n border-radius: 0 4px 4px 0;\n left: auto;\n right: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor {\n height: 100%;\n min-height: 100%;\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav {\n background-color: #1c3987;\n margin: 0;\n padding: 8px 0 0 8px;\n font-size: 0;\n margin: -10px -10px 10px -10px;\n position: relative;\n z-index: 2;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu {\n list-style-type: none;\n margin: 0;\n padding: 0;\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item {\n display: inline-block;\n margin: 0 6px 0 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu:before {\n border: 8px solid transparent;\n border-left-color: #cacaca;\n content: \"\";\n position: absolute;\n top: 11px;\n left: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu .llms-editor-menu-item:hover > a,\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item > .llms-editor-menu .llms-editor-menu-item.active > a {\n background: #dfdfdf;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item:hover > a {\n background-color: #466dd8;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > a {\n background-color: #e6e6e6;\n color: #466dd8;\n font-weight: 700;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > a:focus {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.active > .llms-editor-menu {\n display: inline-block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item a {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n color: #FFF;\n display: inline-block;\n padding: 9px 18px;\n text-decoration: none;\n -webkit-transition: background 0.2s ease;\n transition: background 0.2s ease;\n font-size: 15px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right {\n float: right;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right a, .wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-nav .llms-editor-menu .llms-editor-menu-item.right:hover {\n background: transparent;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab {\n display: none;\n height: calc(100% - 90px);\n overflow: scroll;\n position: relative;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions {\n -webkit-box-flex: 1;\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n overflow: scroll;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-editor-tab.active.tab--quiz .llms-quiz-questions .llms-quiz-questions {\n overflow: visible;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save {\n bottom: 10px;\n left: 10px;\n position: absolute;\n right: 10px;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error {\n background: #bb231c;\n border-radius: 4px;\n color: #fff;\n display: inline-block;\n font-style: italic;\n padding: 5px 15px 7px 25px;\n margin: 0 0 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-builder-error li {\n margin: 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-save {\n width: 75%;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save .llms-exit {\n padding-left: 5px;\n padding-right: 5px;\n width: 23%;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button {\n position: relative;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i {\n position: absolute;\n left: 10px;\n top: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button i .llms-spinner {\n border-color: #fff;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status] .llms-status-indicator {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saved] .status--saved {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] {\n background-color: #f8954f;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=unsaved] .status--unsaved {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=saving] .status--saving {\n display: block;\n}\n.wrap.lifterlms.llms-builder .llms-builder-sidebar .llms-builder-save button[data-status=error] .status--error {\n display: block;\n}\n@media only screen and (max-width: 782px) {\n .wrap.lifterlms.llms-builder .llms-builder-sidebar {\n margin-right: 10px;\n position: relative;\n top: 0;\n width: auto;\n }\n .wrap.lifterlms.llms-builder .llms-builder-main {\n padding-right: 10px;\n width: auto;\n }\n}\n.wrap.lifterlms.llms-builder .select2-container {\n z-index: 99999999;\n}\n.wrap.lifterlms.llms-builder .select2-results__option {\n padding: 0;\n}\n.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] {\n background: #466dd8;\n}\n.wrap.lifterlms.llms-builder .select2-container--default .select2-results__option--highlighted[aria-selected] .llms-existing-action {\n color: #fff;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n padding: 5px 5px 5px 0;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info {\n -webkit-box-flex: 6;\n -ms-flex: 6;\n flex: 6;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4, .wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5 {\n margin: 0;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h4 {\n font-weight: 400;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-info h5 {\n font-weight: 300;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action {\n color: #466dd8;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n text-align: center;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action .fa {\n display: block;\n font-size: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-existing-lesson-result .llms-existing-action small {\n text-transform: uppercase;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-empty {\n margin: 100px auto;\n text-align: center;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-empty p {\n font-size: 18px;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-empty button.llms-element-button {\n max-width: 320px;\n margin: 0 auto;\n}\n.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-model-title {\n width: calc(100% - 310px);\n}\n.wrap.lifterlms.llms-builder .llms-editor-tab.tab--quiz .llms-model-header .llms-quiz-points {\n float: left;\n margin-right: 10px;\n width: 100px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header {\n background-color: #FFF;\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);\n padding: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header:before, .wrap.lifterlms.llms-builder .llms-model-header:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder .llms-model-header:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title {\n float: left;\n margin-right: 10px;\n width: calc(100% - 200px);\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-model-title .llms-input {\n width: calc(100% - 65px);\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-model-status.llms-switch {\n float: left;\n margin-right: 10px;\n position: relative;\n text-align: right;\n top: -2px;\n width: 100px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons {\n float: left;\n position: relative;\n text-align: right;\n width: 80px;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .llms-action-icon {\n margin-left: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header .llms-action-icons .fa {\n max-width: 15px;\n}\n.wrap.lifterlms.llms-builder .llms-model-header + .llms-model-settings.active {\n margin-top: -10px;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings {\n clear: both;\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-model-settings.active {\n display: block;\n margin-top: 10px;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n margin: 0 5px;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:first-child {\n margin-left: 0;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button:last-child {\n margin-right: 0;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-footer button.llms-element-button.llms-show-question-bank {\n -webkit-box-flex: 2;\n -ms-flex: 2;\n flex: 2;\n}\n.wrap.lifterlms.llms-builder .llms-quiz-tools {\n display: none;\n width: 100%;\n position: relative;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank:before, .wrap.lifterlms.llms-builder ul.llms-question-bank:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header {\n clear: both;\n padding-top: 20px;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header:first-child {\n padding-top: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-bank-header h4 {\n font-size: 20px;\n margin: 10px 5px;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n float: left;\n margin: 0;\n padding: 3px;\n width: 33.3333%;\n -webkit-transition: opacity 0.3s ease-in-out;\n transition: opacity 0.3s ease-in-out;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type.filtered {\n opacity: 0.3;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable {\n display: block;\n position: relative;\n text-decoration: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-question-bank li.llms-question-type .llms-type-unavailable .llms-element-button {\n opacity: 0.5;\n pointer-events: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions {\n margin: 10px 3px;\n padding: 5px;\n -webkit-transition: -webkit-box-shadow 0.6s ease;\n transition: -webkit-box-shadow 0.6s ease;\n transition: box-shadow 0.6s ease;\n transition: box-shadow 0.6s ease, -webkit-box-shadow 0.6s ease;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions.dragging {\n -webkit-box-shadow: 0 0 0 3px #466dd8;\n box-shadow: 0 0 0 3px #466dd8;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions:empty:before {\n background: #fff;\n content: attr(data-empty-msg);\n display: block;\n font-size: 18px;\n margin: 0 auto;\n padding: 100px 0;\n text-align: center;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question {\n background: #fff;\n margin: 0 0 3px;\n padding: 15px 12px 10px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question:hover > .llms-builder-header .llms-action-icons {\n opacity: 1;\n pointer-events: auto;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions {\n margin-left: 12px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions .llms-question {\n border-bottom: 2px solid #e6e6e6;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions:empty:before {\n content: attr(data-empty-msg);\n display: block;\n font-size: 18px;\n text-align: center;\n margin: 20px auto;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder.qtype--group {\n display: none !important;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:before, .wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-builder-header > * {\n float: left;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body {\n display: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-body.active {\n display: block;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp {\n background: #466dd8;\n border-radius: 4px;\n color: #fff;\n cursor: move;\n font-size: 90%;\n margin-top: -5px;\n padding: 4px 10px 6px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp small, .wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa {\n line-height: 1.2;\n vertical-align: middle;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-data-stamp .fa {\n margin-right: 4px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline {\n width: calc(100% - 110px - 90px - 55px);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-headline .ql-editor {\n width: calc(100% - 16px);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-action-icons {\n width: 110px;\n opacity: 0;\n pointer-events: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-points {\n width: 90px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features {\n margin: 10px 0 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features:last-child {\n margin: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-question-features .llms-switch {\n margin-right: 15px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question .llms-editable-video {\n position: relative;\n z-index: 1;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-wrapper {\n background: #f4f4f4;\n margin: 2px 1px;\n padding: 10px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header {\n margin-bottom: 10px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:before, .wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after {\n content: \" \";\n display: table;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header:after {\n clear: both;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions .llms-question-choices-list-header .llms-switch {\n float: right;\n text-align: right;\n width: 260px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices {\n border: 3px solid #f4f4f4;\n margin: -3px;\n padding: 0;\n -webkit-transition: -webkit-box-shadow 0.6s ease;\n transition: -webkit-box-shadow 0.6s ease;\n transition: box-shadow 0.6s ease;\n transition: box-shadow 0.6s ease, -webkit-box-shadow 0.6s ease;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.dragging {\n -webkit-box-shadow: 0 0 0 3px #466dd8;\n box-shadow: 0 0 0 3px #466dd8;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions ul.llms-question-choices.multi-choices li.llms-question-choice .llms-choice-id span {\n border-radius: 4px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice {\n margin: 0 0 5px;\n padding: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice:last-child {\n margin-bottom: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox] {\n display: none;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id input[type=checkbox]:checked + .llms-marker {\n background: #4d8d3c;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker {\n border-radius: 50%;\n background: #d0d0d0;\n -webkit-box-shadow: inset 0 0 1px #848484;\n box-shadow: inset 0 0 1px #848484;\n color: #444;\n display: inline-block;\n font-size: 16px;\n height: 20px;\n line-height: 20px;\n padding: 5px;\n position: relative;\n text-align: center;\n -webkit-transition: background 0.1s ease;\n transition: background 0.1s ease;\n width: 20px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker .fa {\n left: 7px;\n opacity: 0;\n position: absolute;\n top: 7px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover b {\n opacity: 0;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-choice-id .llms-marker.selectable:hover .fa {\n opacity: 1;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input-wrapper,\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image {\n display: inline-block;\n width: calc(100% - 55px - 35px - 5px);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-input {\n width: calc(100% - 16px);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image {\n vertical-align: middle;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-editable-image .llms-image img {\n height: 50px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice .llms-action-icons {\n display: inline-block;\n opacity: 1;\n pointer-events: auto;\n text-align: right;\n width: 55px;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.llms-sortable-placeholder {\n border: 3px dashed #466dd8 !important;\n background: rgba(70, 109, 216, 0.3);\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question-choice.ui-sortable-helper {\n border: 1px solid #ccc;\n background: #fff;\n padding: 10px;\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n z-index: 999;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-sortable-helper,\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.ui-draggable-dragging {\n border: 1px solid #ccc;\n background: #fff;\n -webkit-transform: rotate(2deg);\n transform: rotate(2deg);\n z-index: 999;\n}\n.wrap.lifterlms.llms-builder ul.llms-quiz-questions li.llms-question.llms-sortable-placeholder {\n border: 3px dashed #466dd8 !important;\n background: rgba(70, 109, 216, 0.3);\n}\n.wrap.lifterlms.llms-builder .llms-switch {\n display: inline-block;\n float: none;\n width: auto;\n}\n.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox] {\n display: none;\n}\n.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked + .llms-switch-slider {\n background: #4d8d3c;\n}\n.wrap.lifterlms.llms-builder .llms-switch input[type=checkbox]:checked + .llms-switch-slider:after {\n -webkit-transform: translateX(14px);\n transform: translateX(14px);\n}\n.wrap.lifterlms.llms-builder .llms-switch .llms-label {\n display: inline-block;\n vertical-align: top;\n}\n.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider {\n background: #e0e0e0;\n border-radius: 8px;\n display: inline-block;\n height: 16px;\n margin-top: 2px;\n position: relative;\n -webkit-transition: background 0.2s ease;\n transition: background 0.2s ease;\n vertical-align: top;\n width: 30px;\n}\n.wrap.lifterlms.llms-builder .llms-switch .llms-switch-slider:after {\n background: #fff;\n border-radius: 8px;\n content: \"\";\n display: block;\n height: 12px;\n left: 2px;\n position: relative;\n -webkit-transition: -webkit-transform 0.2s ease;\n transition: -webkit-transform 0.2s ease;\n transition: transform 0.2s ease;\n transition: transform 0.2s ease, -webkit-transform 0.2s ease;\n top: 2px;\n width: 12px;\n}\n\n.llms-multi-input .llms-input-wrapper {\n width: 50%;\n float: left;\n margin-bottom: 6px;\n font-size: 12px;\n}\n\n.llms-multi-input .llms-input-wrapper .llms-input {\n font-size: 12px;\n padding: 5px;\n}\n/*# sourceMappingURL=../maps/css/builder.css.map */\n"],"sourceRoot":"../../css"}
\ No newline at end of file
diff --git a/assets/maps/css/certificates.css.map b/assets/maps/css/certificates.css.map
new file mode 100644
index 0000000000..a1725402d5
--- /dev/null
+++ b/assets/maps/css/certificates.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["certificates.scss","certificates.css"],"names":[],"mappings":"AAAA;;EAAA;AAGA;EACC,sBAAA;EACA,sBAAA;EACA,cAAA;ACCD;;ADEA;;;;EAIC,aAAA;ACCD;;ADEA;EACC,mBAAA;ACCD;;ADEA;;EAAA;AAGA;EAEC,UAAA;EACA,gBAAA;ACAD;ADEC;EACC,kBAAA;EACA,UAAA;EACA,WAAA;EACA,cAAA;ACAF;ADGC;;EAEC,YAAA;EACA,kBAAA;EACA,UAAA;ACDF;ADIC;EACC,kBAAA;ACFF;;ADOA;;EAAA;AAGA;EACC,cAAA;ACJD;;ADMA;EACC,WAAA;EACA,YAAA;EACA,qCAAA;EACA,8BAAA;UAAA,sBAAA;ACHD;ADKC;EACC,wBAAA;EACA,2BAAA;ACHF;;ADOA;;EAAA;AAGA;EACC,gBAAA;EACA,mBAAA;EACA,kBAAA;ACJD;ADMC;EACC,eAAA;ACJF;;ADUA;EAEC;IACC,4CAAA;YAAA,oCAAA;IACA,YAAA;IACA,gBAAA;ECRA;EDWD;IAAQ,UAAA;ECRP;EDUD;IACC,aAAA;ECRA;EDYD;IACC,6BAAA;IACA,qBAAA;ECVA;EDaD;IACC,iBAAA;ECXA;EDeD;IACC,wBAAA;ECbA;EDiBD;;IAEC,WAAA;ECfA;EDmBD;;IAEC,8BAAA;IACA,4BAAA;ECjBA;EDqBD;IACC,kBAAA;IACA,MAAA;IACA,OAAA;IACA,QAAA;IACA,cAAA;IACA,qBAAA;ECnBA;EDsBD;IACC,yBAAA;IACA,4CAAA;YAAA,oCAAA;IACA,8BAAA;YAAA,sBAAA;ECpBA;AACF","file":"../../css/certificates.css","sourcesContent":["/**\n * Reset.\n */\nbody {\n\tbackground-color: #fff;\n\tbackground-image: none;\n\tmargin: 0 auto;\n}\n\n.header, .footer,\n.wrap-header, .wrap-footer,\n.site-header, .site-footer,\n.nav-primary, .primary-nav {\n\tdisplay: none;\n}\n\n.llms-certificate-container {\n\tmargin: 40px auto 0;\n}\n\n/**\n * Legacy Template.\n */\n.llms-certificate-container:not(.cert-template-v2) {\n\n\tpadding: 0;\n\toverflow: hidden;\n\n\t.certificate-background {\n\t\tposition: relative;\n\t\tz-index: 1;\n\t\twidth: 100%;\n\t\tdisplay: block;\n\t}\n\n\t.llms_certificate,\n\t.llms_my_certificate {\n\t\tmargin: 80px;\n\t\tposition: relative;\n\t\tz-index: 2;\n\t}\n\n\th1:first-child {\n\t\ttext-align: center;\n\t}\n\n}\n\n/**\n * V2 Template\n */\n.llms-certificate-wrapper {\n\tmargin: 0 auto;\n}\n.llms-certificate-container.cert-template-v2 {\n\twidth: 100%;\n\theight: 100%;\n\tbackground-size: 100% 100% !important;\n\tbox-sizing: border-box; \n\n\t.wp-block-columns .wp-block-column > * {\n\t\tmargin-top: 0 !important;\n\t\tmargin-bottom: 0 !important;\n\t}\n}\n\n/**\n * Certificate Actions Footer.\n */\n.llms-print-certificate {\n\tmargin-top: 40px;\n\tmargin-bottom: 40px;\n\ttext-align: center;\n\n\tform {\n\t\tdisplay: inline;\n\t}\n}\n\n\n\n@media print {\n\n\thtml, body {\n\t\tprint-color-adjust: exact !important;\n\t\theight: 100%;\n\t\toverflow: hidden;\n\t}\n\n\t@page { size: auto; }\n\n\t.no-print {\n\t\tdisplay: none;\n\t}\n\n\t// Make everything on the page invisible.\n\tbody * {\n\t\tvisibility: hidden !important;\n\t\tbackground: #fff none;\n\t}\n\n\t.site, .site-content {\n\t\toverflow: visible;\n\t}\n\n\t// Remove all headers, menus and footers.\n\theader, aside, nav, footer {\n\t\tdisplay: none !important;\n\t}\n\n\t// Make sure a .container parent doesn't shift the certificate see: https://github.com/gocodebox/lifterlms/issues/1163.\n\t.single-llms_my_certificate .container,\n\t.single-llms_certificate .container {\n\t\twidth: 100%;\n\t}\n\n\t// Make only the certificate container and its children visible.\n\t.llms-certificate-container,\n\t.llms-certificate-container * {\n\t\tvisibility: visible !important;\n\t\tbackground: transparent none;\n\t}\n\n \t// Position certificate absolutely and center horizontally.\n\t.llms-certificate-container:not(.cert-template-v2) {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tmargin: 0 auto;\n\t\tbackground: #fff none;\n\t}\n\n\t.llms-certificate-container.cert-template-v2 {\n\t\tmargin: 0 auto !important;\n\t\tprint-color-adjust: exact !important;\n\t\ttransform: scale( 0.95 ); // Don't ram the edge of the paper.\n\t}\n\n}\n","/**\n * Reset.\n */\nbody {\n background-color: #fff;\n background-image: none;\n margin: 0 auto;\n}\n\n.header, .footer,\n.wrap-header, .wrap-footer,\n.site-header, .site-footer,\n.nav-primary, .primary-nav {\n display: none;\n}\n\n.llms-certificate-container {\n margin: 40px auto 0;\n}\n\n/**\n * Legacy Template.\n */\n.llms-certificate-container:not(.cert-template-v2) {\n padding: 0;\n overflow: hidden;\n}\n.llms-certificate-container:not(.cert-template-v2) .certificate-background {\n position: relative;\n z-index: 1;\n width: 100%;\n display: block;\n}\n.llms-certificate-container:not(.cert-template-v2) .llms_certificate,\n.llms-certificate-container:not(.cert-template-v2) .llms_my_certificate {\n margin: 80px;\n position: relative;\n z-index: 2;\n}\n.llms-certificate-container:not(.cert-template-v2) h1:first-child {\n text-align: center;\n}\n\n/**\n * V2 Template\n */\n.llms-certificate-wrapper {\n margin: 0 auto;\n}\n\n.llms-certificate-container.cert-template-v2 {\n width: 100%;\n height: 100%;\n background-size: 100% 100% !important;\n box-sizing: border-box;\n}\n.llms-certificate-container.cert-template-v2 .wp-block-columns .wp-block-column > * {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n/**\n * Certificate Actions Footer.\n */\n.llms-print-certificate {\n margin-top: 40px;\n margin-bottom: 40px;\n text-align: center;\n}\n.llms-print-certificate form {\n display: inline;\n}\n\n@media print {\n html, body {\n print-color-adjust: exact !important;\n height: 100%;\n overflow: hidden;\n }\n @page {\n size: auto;\n }\n .no-print {\n display: none;\n }\n body * {\n visibility: hidden !important;\n background: #fff none;\n }\n .site, .site-content {\n overflow: visible;\n }\n header, aside, nav, footer {\n display: none !important;\n }\n .single-llms_my_certificate .container,\n.single-llms_certificate .container {\n width: 100%;\n }\n .llms-certificate-container,\n.llms-certificate-container * {\n visibility: visible !important;\n background: transparent none;\n }\n .llms-certificate-container:not(.cert-template-v2) {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n background: #fff none;\n }\n .llms-certificate-container.cert-template-v2 {\n margin: 0 auto !important;\n print-color-adjust: exact !important;\n transform: scale(0.95);\n }\n}"],"sourceRoot":"../../scss"}
\ No newline at end of file
diff --git a/assets/maps/css/certificates.min.css.map b/assets/maps/css/certificates.min.css.map
new file mode 100644
index 0000000000..d5799c7ce1
--- /dev/null
+++ b/assets/maps/css/certificates.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["certificates.css"],"names":[],"mappings":"AAGA,KACE,qBAAA,CACA,qBAAA,CACA,aAAA,CAGF,8FAIE,YAAA,CAGF,4BACE,kBAAA,CAMF,mDACE,SAAA,CACA,eAAA,CAEF,2EACE,iBAAA,CACA,SAAA,CACA,UAAA,CACA,aAAA,CAEF,6IAEE,WAAA,CACA,iBAAA,CACA,SAAA,CAEF,kEACE,iBAAA,CAMF,0BACE,aAAA,CAGF,6CACE,UAAA,CACA,WAAA,CACA,oCAAA,CACA,6BAAA,CACQ,qBAAA,CAEV,kFACE,uBAAA,CACA,0BAAA,CAMF,wBACE,eAAA,CACA,kBAAA,CACA,iBAAA,CAEF,6BACE,cAAA,CAGF,aACE,UACE,2CAAA,CACQ,mCAAA,CACR,WAAA,CACA,eAAA,CAEF,MACE,SAAA,CAEF,UACE,YAAA,CAEF,OACE,4BAAA,CACA,oBAAA,CAEF,oBACE,gBAAA,CAEF,wBACE,uBAAA,CAEF,2EAEE,UAAA,CAEF,0DAEE,6BAAA,CACA,6BAAA,CAEF,mDACE,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,aAAA,CACA,oBAAA,CAEF,6CACE,wBAAA,CACA,2CAAA,CACQ,mCAAA,CACR,6BAAA,CACQ,qBAAA,CAAA","file":"../../css/certificates.min.css","sourcesContent":["/**\n * Reset.\n */\nbody {\n background-color: #fff;\n background-image: none;\n margin: 0 auto;\n}\n\n.header, .footer,\n.wrap-header, .wrap-footer,\n.site-header, .site-footer,\n.nav-primary, .primary-nav {\n display: none;\n}\n\n.llms-certificate-container {\n margin: 40px auto 0;\n}\n\n/**\n * Legacy Template.\n */\n.llms-certificate-container:not(.cert-template-v2) {\n padding: 0;\n overflow: hidden;\n}\n.llms-certificate-container:not(.cert-template-v2) .certificate-background {\n position: relative;\n z-index: 1;\n width: 100%;\n display: block;\n}\n.llms-certificate-container:not(.cert-template-v2) .llms_certificate,\n.llms-certificate-container:not(.cert-template-v2) .llms_my_certificate {\n margin: 80px;\n position: relative;\n z-index: 2;\n}\n.llms-certificate-container:not(.cert-template-v2) h1:first-child {\n text-align: center;\n}\n\n/**\n * V2 Template\n */\n.llms-certificate-wrapper {\n margin: 0 auto;\n}\n\n.llms-certificate-container.cert-template-v2 {\n width: 100%;\n height: 100%;\n background-size: 100% 100% !important;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.llms-certificate-container.cert-template-v2 .wp-block-columns .wp-block-column > * {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n/**\n * Certificate Actions Footer.\n */\n.llms-print-certificate {\n margin-top: 40px;\n margin-bottom: 40px;\n text-align: center;\n}\n.llms-print-certificate form {\n display: inline;\n}\n\n@media print {\n html, body {\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n height: 100%;\n overflow: hidden;\n }\n @page {\n size: auto;\n }\n .no-print {\n display: none;\n }\n body * {\n visibility: hidden !important;\n background: #fff none;\n }\n .site, .site-content {\n overflow: visible;\n }\n header, aside, nav, footer {\n display: none !important;\n }\n .single-llms_my_certificate .container,\n.single-llms_certificate .container {\n width: 100%;\n }\n .llms-certificate-container,\n.llms-certificate-container * {\n visibility: visible !important;\n background: transparent none;\n }\n .llms-certificate-container:not(.cert-template-v2) {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n background: #fff none;\n }\n .llms-certificate-container.cert-template-v2 {\n margin: 0 auto !important;\n -webkit-print-color-adjust: exact !important;\n print-color-adjust: exact !important;\n -webkit-transform: scale(0.95);\n transform: scale(0.95);\n }\n}\n/*# sourceMappingURL=../maps/css/certificates.css.map */\n"],"sourceRoot":"../../css"}
\ No newline at end of file
diff --git a/assets/maps/css/editor.css.map b/assets/maps/css/editor.css.map
new file mode 100644
index 0000000000..52b193e430
--- /dev/null
+++ b/assets/maps/css/editor.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["editor.scss","editor.css"],"names":[],"mappings":"AAAA;;EAEC,YAAA;EACA,yBAAA;EACA,eAAA;ACCD;;ADEA;EACC,kBAAA;ACCD;;ADEA;EACC,qBAAA;ACCD;;ADEA;EACC,WAAA;ACCD;;ADEA;EACC,8BAAA;UAAA,sBAAA;ACCD;;ADGC;EACC,kBAAA;EACA,kBAAA;ACAF;ADCE;EACC,WAAA;EACA,YAAA;EACA,kBAAA;EACA,OAAA;EACA,MAAA;EACA,oBAAA;KAAA,iBAAA;ACCH","file":"../../css/editor.css","sourcesContent":[".llms-block-empty,\n.llms-block-error {\n\tpadding: 1em;\n\tborder: 1px solid #e0e0e0;\n\tfont-size: 16px;\n}\n\n.llms-block-empty {\n\tfont-style: italic;\n}\n\n.wp-block .llms-button-primary {\n\ttext-decoration: none;\n}\n\n.llms-navigation-link-settings .components-panel__row > .components-base-control {\n\twidth: 100%;\n}\n\n.llms-block-icon {\n\ttransform: scale(0.75);\n}\n\n.llms-loop-item {\n\t.llms-video-wrapper {\n\t\taspect-ratio: 16/9;\n\t\tposition: relative;\n\t\tiframe {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\ttop: 0;\n\t\t\tobject-fit: cover;\n\t\t}\n\t}\n}\n",".llms-block-empty,\n.llms-block-error {\n padding: 1em;\n border: 1px solid #e0e0e0;\n font-size: 16px;\n}\n\n.llms-block-empty {\n font-style: italic;\n}\n\n.wp-block .llms-button-primary {\n text-decoration: none;\n}\n\n.llms-navigation-link-settings .components-panel__row > .components-base-control {\n width: 100%;\n}\n\n.llms-block-icon {\n transform: scale(0.75);\n}\n\n.llms-loop-item .llms-video-wrapper {\n aspect-ratio: 16/9;\n position: relative;\n}\n.llms-loop-item .llms-video-wrapper iframe {\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n object-fit: cover;\n}"],"sourceRoot":"../../scss"}
\ No newline at end of file
diff --git a/assets/maps/css/editor.min.css.map b/assets/maps/css/editor.min.css.map
new file mode 100644
index 0000000000..2335fb6a2b
--- /dev/null
+++ b/assets/maps/css/editor.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["editor.css"],"names":[],"mappings":"AAAA,oCAEE,WAAA,CACA,wBAAA,CACA,cAAA,CAGF,kBACE,iBAAA,CAGF,+BACE,oBAAA,CAGF,+EACE,UAAA,CAGF,iBACE,6BAAA,CACQ,qBAAA,CAGV,oCACE,iBAAA,CACA,iBAAA,CAEF,2CACE,UAAA,CACA,WAAA,CACA,iBAAA,CACA,MAAA,CACA,KAAA,CACA,mBAAA,CACG,gBAAA","file":"../../css/editor.min.css","sourcesContent":[".llms-block-empty,\n.llms-block-error {\n padding: 1em;\n border: 1px solid #e0e0e0;\n font-size: 16px;\n}\n\n.llms-block-empty {\n font-style: italic;\n}\n\n.wp-block .llms-button-primary {\n text-decoration: none;\n}\n\n.llms-navigation-link-settings .components-panel__row > .components-base-control {\n width: 100%;\n}\n\n.llms-block-icon {\n -webkit-transform: scale(0.75);\n transform: scale(0.75);\n}\n\n.llms-loop-item .llms-video-wrapper {\n aspect-ratio: 16/9;\n position: relative;\n}\n.llms-loop-item .llms-video-wrapper iframe {\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n -o-object-fit: cover;\n object-fit: cover;\n}\n/*# sourceMappingURL=../maps/css/editor.css.map */\n"],"sourceRoot":"../../css"}
\ No newline at end of file
diff --git a/assets/maps/css/lifterlms.css.map b/assets/maps/css/lifterlms.css.map
new file mode 100644
index 0000000000..6d2894325e
--- /dev/null
+++ b/assets/maps/css/lifterlms.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["lifterlms.css","_includes/_extends.scss","_includes/_grid.scss","_includes/_buttons.scss","_includes/_vars.scss","_includes/_llms-donut.scss","_includes/_mixins.scss","_includes/_tooltip.scss","frontend/_main.scss","frontend/_loop.scss","frontend/_course.scss","frontend/_syllabus.scss","frontend/_llms-progress.scss","frontend/_llms-author.scss","frontend/_reviews.scss","frontend/_notices.scss","frontend/_llms-achievements-certs.scss","frontend/_llms-notifications.scss","frontend/_llms-pagination.scss","frontend/_tooltip.scss","_includes/_quiz-result-question-list.scss","frontend/_llms-quizzes.scss","frontend/_voucher.scss","frontend/_llms-access-plans.scss","frontend/_checkout.scss","_includes/_llms-form-field.scss","frontend/_llms-outline-collapse.scss","frontend/_student-dashboard.scss","frontend/_llms-table.scss","_includes/vendor/_font-awesome.scss"],"names":[],"mappings":"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E,gBAAA;A7Bk/GF;;A6Bh/GA;EACE,gBAAA;A7Bm/GF;;A6Bj/GA;EACE,gBAAA;A7Bo/GF;;A6Bl/GA;;EAEE,gBAAA;A7Bq/GF;;A6Bn/GA;EACE,gBAAA;A7Bs/GF;;A6Bp/GA;EACE,gBAAA;A7Bu/GF;;A6Br/GA;EACE,gBAAA;A7Bw/GF;;A6Bt/GA;EACE,gBAAA;A7By/GF;;A6Bv/GA;EACE,gBAAA;A7B0/GF;;A6Bx/GA;EACE,gBAAA;A7B2/GF;;A6Bz/GA;EACE,gBAAA;A7B4/GF;;A6B1/GA;EACE,gBAAA;A7B6/GF;;A6B3/GA;EACE,gBAAA;A7B8/GF;;A6B5/GA;EACE,gBAAA;A7B+/GF;;A6B7/GA;EACE,gBAAA;A7BggHF;;A6B9/GA;EACE,gBAAA;A7BigHF;;A6B//GA;EACE,gBAAA;A7BkgHF;;A6BhgHA;EACE,gBAAA;A7BmgHF;;A6BjgHA;EACE,gBAAA;A7BogHF;;A6BlgHA;EACE,gBAAA;A7BqgHF;;A6BngHA;EACE,gBAAA;A7BsgHF;;A6BpgHA;EACE,gBAAA;A7BugHF;;A6BrgHA;EACE,gBAAA;A7BwgHF;;A6BtgHA;EACE,gBAAA;A7BygHF;;A6BvgHA;EACE,gBAAA;A7B0gHF;;A6BxgHA;EACE,gBAAA;A7B2gHF;;A6BzgHA;EACE,gBAAA;A7B4gHF;;A6B1gHA;EACE,gBAAA;A7B6gHF;;A6B3gHA;EACE,gBAAA;A7B8gHF;;A6B5gHA;EACE,gBAAA;A7B+gHF;;A6B7gHA;;EAEE,gBAAA;A7BghHF;;A6B9gHA;EACE,gBAAA;A7BihHF;;A6B/gHA;EACE,gBAAA;A7BkhHF;;A6BhhHA;;;EAGE,gBAAA;A7BmhHF;;A6BjhHA;EACE,gBAAA;A7BohHF;;A6BlhHA;EACE,gBAAA;A7BqhHF;;A6BnhHA;EACE,gBAAA;A7BshHF;;A6BphHA;EACE,gBAAA;A7BuhHF;;A6BrhHA;;EAEE,gBAAA;A7BwhHF;;A6BthHA;EACE,gBAAA;A7ByhHF;;A6BvhHA;EACE,gBAAA;A7B0hHF;;A6BxhHA;EACE,gBAAA;A7B2hHF;;A6BzhHA;EACE,gBAAA;A7B4hHF;;A6B1hHA;EACE,gBAAA;A7B6hHF;;A6B3hHA;EACE,gBAAA;A7B8hHF;;A6B5hHA;EACE,gBAAA;A7B+hHF;;A6B7hHA;EACE,gBAAA;A7BgiHF;;A6B9hHA;EACE,gBAAA;A7BiiHF;;A6B/hHA;EACE,gBAAA;A7BkiHF;;A6BhiHA;EACE,gBAAA;A7BmiHF;;A6BjiHA;EACE,gBAAA;A7BoiHF;;A6BliHA;EACE,gBAAA;A7BqiHF;;A6BniHA;EACE,gBAAA;A7BsiHF;;A6BpiHA;EACE,gBAAA;A7BuiHF;;A6BriHA;EACE,gBAAA;A7BwiHF;;A6BtiHA;EACE,gBAAA;A7ByiHF;;A6BviHA;EACE,gBAAA;A7B0iHF;;A6BxiHA;EACE,gBAAA;A7B2iHF;;A6BziHA;EACE,gBAAA;A7B4iHF;;A6B1iHA;EACE,gBAAA;A7B6iHF;;A6B3iHA;EACE,gBAAA;A7B8iHF;;A6B5iHA;EACE,gBAAA;A7B+iHF;;A6B7iHA;EACE,gBAAA;A7BgjHF;;A6B9iHA;EACE,gBAAA;A7BijHF;;A6B/iHA;EACE,gBAAA;A7BkjHF;;A6BhjHA;EACE,gBAAA;A7BmjHF;;A6BjjHA;EACE,gBAAA;A7BojHF;;A6BljHA;EACE,gBAAA;A7BqjHF;;A6BnjHA;;EAEE,gBAAA;A7BsjHF;;A6BpjHA;EACE,gBAAA;A7BujHF;;A6BrjHA;EACE,gBAAA;A7BwjHF;;A6BtjHA;EACE,gBAAA;A7ByjHF;;A6BvjHA;EACE,gBAAA;A7B0jHF;;A6BxjHA;EACE,gBAAA;A7B2jHF;;A6BzjHA;EACE,gBAAA;A7B4jHF;;A6B1jHA;EACE,gBAAA;A7B6jHF;;A6B3jHA;EACE,gBAAA;A7B8jHF;;A6B5jHA;EACE,gBAAA;A7B+jHF;;A6B7jHA;EACE,gBAAA;A7BgkHF;;A6B9jHA;EACE,gBAAA;A7BikHF;;A6B/jHA;;EAEE,gBAAA;A7BkkHF;;A6BhkHA;EACE,gBAAA;A7BmkHF;;A6BjkHA;EACE,gBAAA;A7BokHF;;A6BlkHA;EACE,gBAAA;A7BqkHF;;A6BnkHA;EACE,gBAAA;A7BskHF;;A6BpkHA;EACE,gBAAA;A7BukHF;;A6BrkHA;EACE,gBAAA;A7BwkHF;;A6BtkHA;EACE,gBAAA;A7BykHF;;A6BvkHA;EACE,gBAAA;A7B0kHF;;A6BxkHA;EACE,gBAAA;A7B2kHF;;A6BzkHA;EACE,gBAAA;A7B4kHF;;A6B1kHA;EACE,gBAAA;A7B6kHF;;A6B3kHA;EACE,gBAAA;A7B8kHF;;A6B5kHA;EACE,gBAAA;A7B+kHF;;A6B7kHA;;EAEE,gBAAA;A7BglHF;;A6B9kHA;EACE,gBAAA;A7BilHF;;A6B/kHA;EACE,gBAAA;A7BklHF;;A6BhlHA;EACE,gBAAA;A7BmlHF;;A6BjlHA;EACE,gBAAA;A7BolHF;;A6BllHA;;EAEE,gBAAA;A7BqlHF;;A6BnlHA;EACE,gBAAA;A7BslHF;;A6BplHA;EACE,gBAAA;A7BulHF;;A6BrlHA;EACE,gBAAA;A7BwlHF;;A6BtlHA;EACE,gBAAA;A7BylHF;;A6BvlHA;EACE,gBAAA;A7B0lHF;;A6BxlHA;EACE,gBAAA;A7B2lHF;;A6BzlHA;EACE,gBAAA;A7B4lHF;;A6B1lHA;EACE,gBAAA;A7B6lHF;;A6B3lHA;EACE,gBAAA;A7B8lHF;;A6B5lHA;EACE,gBAAA;A7B+lHF;;A6B7lHA;EACE,gBAAA;A7BgmHF;;A6B9lHA;EACE,gBAAA;A7BimHF;;A6B/lHA;EACE,gBAAA;A7BkmHF;;A6BhmHA;EACE,gBAAA;A7BmmHF;;A6BjmHA;EACE,gBAAA;A7BomHF;;A6BlmHA;EACE,gBAAA;A7BqmHF;;A6BnmHA;EACE,gBAAA;A7BsmHF;;A6BpmHA;EACE,gBAAA;A7BumHF;;A6BrmHA;EACE,gBAAA;A7BwmHF;;A6BtmHA;;EAEE,gBAAA;A7BymHF;;A6BvmHA;EACE,gBAAA;A7B0mHF;;A6BxmHA;EACE,gBAAA;A7B2mHF;;A6BzmHA;EACE,gBAAA;A7B4mHF;;A6B1mHA;;EAEE,gBAAA;A7B6mHF;;A6B3mHA;EACE,gBAAA;A7B8mHF;;A6B5mHA;EACE,gBAAA;A7B+mHF;;A6B7mHA;EACE,gBAAA;A7BgnHF;;A6B9mHA;EACE,gBAAA;A7BinHF;;A6B/mHA;EACE,gBAAA;A7BknHF;;A6BhnHA;EACE,gBAAA;A7BmnHF;;A6BjnHA;EACE,gBAAA;A7BonHF;;A6BlnHA;EACE,gBAAA;A7BqnHF;;A6BnnHA;EACE,gBAAA;A7BsnHF;;A6BpnHA;EACE,gBAAA;A7BunHF;;A6BrnHA;EACE,gBAAA;A7BwnHF;;A6BtnHA;EACE,gBAAA;A7BynHF;;A6BvnHA;EACE,gBAAA;A7B0nHF;;A6BxnHA;EACE,gBAAA;A7B2nHF;;A6BznHA;EACE,gBAAA;A7B4nHF;;A6B1nHA;EACE,gBAAA;A7B6nHF;;A6B3nHA;EACE,gBAAA;A7B8nHF;;A6B5nHA;EACE,gBAAA;A7B+nHF;;A6B7nHA;;EAEE,gBAAA;A7BgoHF;;A6B9nHA;;EAEE,gBAAA;A7BioHF;;A6B/nHA;EACE,gBAAA;A7BkoHF;;A6BhoHA;EACE,gBAAA;A7BmoHF;;A6BjoHA;;EAEE,gBAAA;A7BooHF;;A6BloHA;;EAEE,gBAAA;A7BqoHF;;A6BnoHA;EACE,gBAAA;A7BsoHF;;A6BpoHA;;EAEE,gBAAA;A7BuoHF;;A6BroHA;EACE,gBAAA;A7BwoHF;;A6BtoHA;;;EAGE,gBAAA;A7ByoHF;;A6BvoHA;EACE,gBAAA;A7B0oHF;;A6BxoHA;EACE,gBAAA;A7B2oHF;;A6BzoHA;EACE,gBAAA;A7B4oHF;;A6B1oHA;EACE,gBAAA;A7B6oHF;;A6B3oHA;EACE,gBAAA;A7B8oHF;;A6B5oHA;EACE,gBAAA;A7B+oHF;;A6B7oHA;EACE,gBAAA;A7BgpHF;;A6B9oHA;EACE,gBAAA;A7BipHF;;A6B/oHA;EACE,gBAAA;A7BkpHF;;A6BhpHA;EACE,gBAAA;A7BmpHF;;A6BjpHA;EACE,gBAAA;A7BopHF;;A6BlpHA;EACE,gBAAA;A7BqpHF;;A6BnpHA;EACE,gBAAA;A7BspHF;;A6BppHA;EACE,gBAAA;A7BupHF;;A6BrpHA;EACE,gBAAA;A7BwpHF;;A6BtpHA;EACE,gBAAA;A7BypHF;;A6BvpHA;EACE,gBAAA;A7B0pHF;;A6BxpHA;;EAEE,gBAAA;A7B2pHF;;A6BzpHA;;EAEE,gBAAA;A7B4pHF;;A6B1pHA;;EAEE,gBAAA;A7B6pHF;;A6B3pHA;EACE,gBAAA;A7B8pHF;;A6B5pHA;EACE,gBAAA;A7B+pHF;;A6B7pHA;;EAEE,gBAAA;A7BgqHF;;A6B9pHA;;EAEE,gBAAA;A7BiqHF;;A6B/pHA;;EAEE,gBAAA;A7BkqHF;;A6BhqHA;EACE,gBAAA;A7BmqHF;;A6BjqHA;EACE,gBAAA;A7BoqHF;;A6BlqHA;;EAEE,gBAAA;A7BqqHF;;A6BnqHA;EACE,gBAAA;A7BsqHF;;A6BpqHA;EACE,gBAAA;A7BuqHF;;A6BrqHA;;EAEE,gBAAA;A7BwqHF;;A6BtqHA;EACE,gBAAA;A7ByqHF;;A6BvqHA;EACE,gBAAA;A7B0qHF;;A6BxqHA;EACE,gBAAA;A7B2qHF;;A6BzqHA;EACE,gBAAA;A7B4qHF;;A6B1qHA;EACE,gBAAA;A7B6qHF;;A6B3qHA;EACE,gBAAA;A7B8qHF;;A6B5qHA;EACE,gBAAA;A7B+qHF;;A6B7qHA;EACE,gBAAA;A7BgrHF;;A6B9qHA;EACE,gBAAA;A7BirHF;;A6B/qHA;EACE,gBAAA;A7BkrHF;;A6BhrHA;EACE,gBAAA;A7BmrHF;;A6BjrHA;EACE,gBAAA;A7BorHF;;A6BlrHA;EACE,gBAAA;A7BqrHF;;A6BnrHA;EACE,gBAAA;A7BsrHF;;A6BprHA;EACE,gBAAA;A7BurHF;;A6BrrHA;EACE,gBAAA;A7BwrHF;;A6BtrHA;EACE,gBAAA;A7ByrHF;;A6BvrHA;EACE,gBAAA;A7B0rHF;;A6BxrHA;EACE,gBAAA;A7B2rHF;;A6BzrHA;EACE,gBAAA;A7B4rHF;;A6B1rHA;EACE,gBAAA;A7B6rHF;;A6B3rHA;EACE,gBAAA;A7B8rHF;;A6B5rHA;EACE,gBAAA;A7B+rHF;;A6B7rHA;EACE,gBAAA;A7BgsHF;;A6B9rHA;EACE,gBAAA;A7BisHF;;A6B/rHA;EACE,gBAAA;A7BksHF;;A6BhsHA;EACE,gBAAA;A7BmsHF;;A6BjsHA;EACE,gBAAA;A7BosHF;;A6BlsHA;EACE,gBAAA;A7BqsHF;;A6BnsHA;EACE,gBAAA;A7BssHF;;A6BpsHA;;EAEE,gBAAA;A7BusHF;;A6BrsHA;EACE,gBAAA;A7BwsHF;;A6BtsHA;EACE,gBAAA;A7BysHF;;A6BvsHA;EACE,gBAAA;A7B0sHF;;A6BxsHA;EACE,gBAAA;A7B2sHF;;A6BzsHA;EACE,gBAAA;A7B4sHF;;A6B1sHA;;EAEE,gBAAA;A7B6sHF;;A6B3sHA;EACE,gBAAA;A7B8sHF;;A6B5sHA;EACE,gBAAA;A7B+sHF;;A6B7sHA;EACE,gBAAA;A7BgtHF;;A6B9sHA;EACE,gBAAA;A7BitHF;;A6B/sHA;EACE,gBAAA;A7BktHF;;A6BhtHA;EACE,gBAAA;A7BmtHF;;A6BjtHA;EACE,gBAAA;A7BotHF;;A6BltHA;EACE,gBAAA;A7BqtHF;;A6BntHA;EACE,gBAAA;A7BstHF;;A6BptHA;EACE,gBAAA;A7ButHF;;A6BrtHA;EACE,gBAAA;A7BwtHF;;A6BttHA;EACE,gBAAA;A7BytHF;;A6BvtHA;;EAEE,gBAAA;A7B0tHF;;A6BxtHA;;;EAGE,gBAAA;A7B2tHF;;A6BztHA;EACE,gBAAA;A7B4tHF;;A6B1tHA;EACE,gBAAA;A7B6tHF;;A6B3tHA;EACE,gBAAA;A7B8tHF;;A6B5tHA;;EAEE,gBAAA;A7B+tHF;;A6B7tHA;EACE,gBAAA;A7BguHF;;A6B9tHA;EACE,gBAAA;A7BiuHF;;A6B/tHA;EACE,gBAAA;A7BkuHF;;A6BhuHA;EACE,gBAAA;A7BmuHF;;A6BjuHA;EACE,gBAAA;A7BouHF;;A6BluHA;EACE,gBAAA;A7BquHF;;A6BnuHA;EACE,gBAAA;A7BsuHF;;A6BpuHA;EACE,gBAAA;A7BuuHF;;A6BruHA;EACE,gBAAA;A7BwuHF;;A6BtuHA;EACE,gBAAA;A7ByuHF;;A6BvuHA;EACE,gBAAA;A7B0uHF;;A6BxuHA;EACE,gBAAA;A7B2uHF;;A6BzuHA;EACE,gBAAA;A7B4uHF;;A6B1uHA;EACE,gBAAA;A7B6uHF;;A6B3uHA;EACE,gBAAA;A7B8uHF;;A6B5uHA;EACE,gBAAA;A7B+uHF;;A6B7uHA;EACE,gBAAA;A7BgvHF;;A6B9uHA;EACE,gBAAA;A7BivHF;;A6B/uHA;EACE,gBAAA;A7BkvHF;;A6BhvHA;EACE,gBAAA;A7BmvHF;;A6BjvHA;EACE,gBAAA;A7BovHF;;A6BlvHA;EACE,gBAAA;A7BqvHF;;A6BnvHA;EACE,gBAAA;A7BsvHF;;A6BpvHA;EACE,gBAAA;A7BuvHF;;A6BrvHA;EACE,gBAAA;A7BwvHF;;A6BtvHA;EACE,gBAAA;A7ByvHF;;A6BvvHA;EACE,gBAAA;A7B0vHF;;A6BxvHA;EACE,gBAAA;A7B2vHF;;A6BzvHA;EACE,gBAAA;A7B4vHF;;A6B1vHA;EACE,gBAAA;A7B6vHF;;A6B3vHA;EACE,gBAAA;A7B8vHF;;A6B5vHA;EACE,gBAAA;A7B+vHF;;A6B7vHA;EACE,gBAAA;A7BgwHF;;A6B9vHA;EACE,gBAAA;A7BiwHF;;A6B/vHA;EACE,gBAAA;A7BkwHF;;A6BhwHA;EACE,gBAAA;A7BmwHF;;A6BjwHA;EACE,gBAAA;A7BowHF;;A6BlwHA;;EAEE,gBAAA;A7BqwHF;;A6BnwHA;;EAEE,gBAAA;A7BswHF;;A6BpwHA;;EAEE,gBAAA;A7BuwHF;;A6BrwHA;;EAEE,gBAAA;A7BwwHF;;A6BtwHA;EACE,gBAAA;A7BywHF;;A6BvwHA;;EAEE,gBAAA;A7B0wHF;;A6BxwHA;;EAEE,gBAAA;A7B2wHF;;A6BzwHA;;;;EAIE,gBAAA;A7B4wHF;;A6B1wHA;;;EAGE,gBAAA;A7B6wHF;;A6B3wHA;;EAEE,gBAAA;A7B8wHF;;A6B5wHA;;EAEE,gBAAA;A7B+wHF;;A6B7wHA;EACE,gBAAA;A7BgxHF;;A6B9wHA;EACE,gBAAA;A7BixHF;;A6B/wHA;EACE,gBAAA;A7BkxHF;;A6BhxHA;EACE,gBAAA;A7BmxHF;;A6BjxHA;EACE,gBAAA;A7BoxHF;;A6BlxHA;EACE,gBAAA;A7BqxHF;;A6BnxHA;EACE,gBAAA;A7BsxHF;;A6BpxHA;EACE,gBAAA;A7BuxHF;;A6BrxHA;EACE,gBAAA;A7BwxHF;;A6BtxHA;EACE,gBAAA;A7ByxHF;;A6BvxHA;EACE,gBAAA;A7B0xHF;;A6BxxHA;EACE,gBAAA;A7B2xHF;;A6BzxHA;EACE,gBAAA;A7B4xHF;;A6B1xHA;EACE,gBAAA;A7B6xHF;;A6B3xHA;EACE,gBAAA;A7B8xHF;;A6B5xHA;EACE,gBAAA;A7B+xHF;;A6B7xHA;EACE,gBAAA;A7BgyHF;;A6B9xHA;EACE,gBAAA;A7BiyHF;;A6B/xHA;EACE,gBAAA;A7BkyHF;;A6BhyHA;EACE,gBAAA;A7BmyHF;;A6BjyHA;EACE,gBAAA;A7BoyHF;;A6BlyHA;EACE,gBAAA;A7BqyHF;;A6BnyHA;EACE,gBAAA;A7BsyHF;;A6BpyHA;EACE,gBAAA;A7BuyHF;;A6BryHA;EACE,gBAAA;A7BwyHF;;A6BtyHA;EACE,gBAAA;A7ByyHF;;A6BvyHA;EACE,gBAAA;A7B0yHF;;A6BxyHA;EACE,gBAAA;A7B2yHF;;A6BzyHA;EACE,gBAAA;A7B4yHF;;A6B1yHA;EACE,gBAAA;A7B6yHF;;A6B3yHA;EACE,gBAAA;A7B8yHF;;A6B5yHA;EACE,gBAAA;A7B+yHF;;A6B7yHA;EACE,gBAAA;A7BgzHF;;A6B9yHA;EACE,gBAAA;A7BizHF;;A6B/yHA;EACE,gBAAA;A7BkzHF;;A6BhzHA;EACE,gBAAA;A7BmzHF;;A6BjzHA;EACE,gBAAA;A7BozHF;;A6BlzHA;EACE,gBAAA;A7BqzHF;;A6BnzHA;;EAEE,gBAAA;A7BszHF;;A6BpzHA;EACE,gBAAA;A7BuzHF;;A6BrzHA;EACE,gBAAA;A7BwzHF;;A6BtzHA;EACE,gBAAA;A7ByzHF;;A6BvzHA;EACE,gBAAA;A7B0zHF;;A6BxzHA;EACE,gBAAA;A7B2zHF;;A6BzzHA;EACE,gBAAA;A7B4zHF;;A6B1zHA;EACE,gBAAA;A7B6zHF;;A6B3zHA;EACE,gBAAA;A7B8zHF;;A6B5zHA;EACE,gBAAA;A7B+zHF;;A6B7zHA;EACE,gBAAA;A7Bg0HF;;A6B9zHA;EACE,gBAAA;A7Bi0HF;;A6B/zHA;;EAEE,gBAAA;A7Bk0HF;;A6Bh0HA;EACE,gBAAA;A7Bm0HF;;A6Bj0HA;EACE,gBAAA;A7Bo0HF;;A6Bl0HA;EACE,gBAAA;A7Bq0HF;;A6Bn0HA;;EAEE,gBAAA;A7Bs0HF;;A6Bp0HA;EACE,gBAAA;A7Bu0HF;;A6Br0HA;EACE,gBAAA;A7Bw0HF;;A6Bt0HA;EACE,gBAAA;A7By0HF;;A6Bv0HA;EACE,gBAAA;A7B00HF;;A6Bx0HA;EACE,gBAAA;A7B20HF;;A6Bz0HA;EACE,gBAAA;A7B40HF;;A6B10HA;;;EAGE,gBAAA;A7B60HF;;A6B30HA;;EAEE,gBAAA;A7B80HF;;A6B50HA;EACE,gBAAA;A7B+0HF;;A6B70HA;EACE,gBAAA;A7Bg1HF;;A6B90HA;EACE,gBAAA;A7Bi1HF;;A6B/0HA;EACE,gBAAA;A7Bk1HF;;A6Bh1HA;EACE,gBAAA;A7Bm1HF;;A6Bj1HA;EACE,gBAAA;A7Bo1HF;;A6Bl1HA;EACE,gBAAA;A7Bq1HF;;A6Bn1HA;EACE,gBAAA;A7Bs1HF;;A6Bp1HA;EACE,gBAAA;A7Bu1HF;;A6Br1HA;EACE,gBAAA;A7Bw1HF;;A6Bt1HA;EACE,gBAAA;A7By1HF;;A6Bv1HA;EACE,gBAAA;A7B01HF;;A6Bx1HA;EACE,gBAAA;A7B21HF;;A6Bz1HA;EACE,gBAAA;A7B41HF;;A6B11HA;EACE,gBAAA;A7B61HF;;A6B31HA;EACE,gBAAA;A7B81HF;;A6B51HA;EACE,gBAAA;A7B+1HF;;A6B71HA;EACE,gBAAA;A7Bg2HF;;A6B91HA;EACE,gBAAA;A7Bi2HF;;A6B/1HA;EACE,gBAAA;A7Bk2HF;;A6Bh2HA;EACE,gBAAA;A7Bm2HF;;A6Bj2HA;EACE,gBAAA;A7Bo2HF;;A6Bl2HA;EACE,gBAAA;A7Bq2HF;;A6Bn2HA;EACE,gBAAA;A7Bs2HF;;A6Bp2HA;EACE,gBAAA;A7Bu2HF;;A6Br2HA;;EAEE,gBAAA;A7Bw2HF;;A6Bt2HA;;EAEE,gBAAA;A7By2HF;;A6Bv2HA;EACE,gBAAA;A7B02HF;;A6Bx2HA;EACE,gBAAA;A7B22HF;;A6Bz2HA;EACE,gBAAA;A7B42HF;;A6B12HA;EACE,gBAAA;A7B62HF;;A6B32HA;EACE,gBAAA;A7B82HF;;A6B52HA;EACE,gBAAA;A7B+2HF;;A6B72HA;EACE,gBAAA;A7Bg3HF;;A6B92HA;EACE,gBAAA;A7Bi3HF;;A6B/2HA;EACE,gBAAA;A7Bk3HF;;A6Bh3HA;;;EAGE,gBAAA;A7Bm3HF;;A6Bj3HA;;EAEE,gBAAA;A7Bo3HF;;A6Bl3HA;;EAEE,gBAAA;A7Bq3HF;;A6Bn3HA;;EAEE,gBAAA;A7Bs3HF;;A6Bp3HA;EACE,gBAAA;A7Bu3HF;;A6Br3HA;EACE,gBAAA;A7Bw3HF;;A6Bt3HA;EACE,gBAAA;A7By3HF;;A6Bv3HA;EACE,gBAAA;A7B03HF;;A6Bx3HA;;;;;EAKE,gBAAA;A7B23HF;;A6Bz3HA;EACE,gBAAA;A7B43HF;;A6B13HA;;;EAGE,gBAAA;A7B63HF;;A6B33HA;;EAEE,gBAAA;A7B83HF;;A6B53HA;EACE,gBAAA;A7B+3HF;;A6B73HA;EACE,gBAAA;A7Bg4HF;;A6B93HA;;;EAGE,gBAAA;A7Bi4HF;;A6B/3HA;EACE,gBAAA;A7Bk4HF;;A6Bh4HA;EACE,gBAAA;A7Bm4HF;;A6Bj4HA;;EAEE,gBAAA;A7Bo4HF;;A6Bl4HA;;EAEE,gBAAA;A7Bq4HF;;A6Bn4HA;;EAEE,gBAAA;A7Bs4HF;;A6Bp4HA;EACE,gBAAA;A7Bu4HF;;A6Br4HA;EACE,gBAAA;A7Bw4HF;;A6Bt4HA;EACE,gBAAA;A7By4HF;;A6Bv4HA;EACE,gBAAA;A7B04HF;;A6Bx4HA;EACE,gBAAA;A7B24HF;;A6Bz4HA;EACE,gBAAA;A7B44HF;;A6B14HA;EACE,gBAAA;A7B64HF;;A6B34HA;EACE,gBAAA;A7B84HF;;A6B54HA;;EAEE,gBAAA;A7B+4HF;;A6B74HA;EACE,gBAAA;A7Bg5HF;;A6B94HA;EACE,gBAAA;A7Bi5HF;;A6B/4HA;EACE,gBAAA;A7Bk5HF;;A6Bh5HA;EACE,gBAAA;A7Bm5HF;;A6Bj5HA;EACE,gBAAA;A7Bo5HF;;A6Bl5HA;EACE,gBAAA;A7Bq5HF;;A6Bn5HA;EACE,gBAAA;A7Bs5HF;;A6Bp5HA;EACE,gBAAA;A7Bu5HF;;A6Br5HA;EACE,gBAAA;A7Bw5HF;;A6Bt5HA;EACE,gBAAA;A7By5HF;;A6Bv5HA;EACE,gBAAA;A7B05HF;;A6Bx5HA;EACE,gBAAA;A7B25HF;;A6Bz5HA;EACE,gBAAA;A7B45HF;;A6B15HA;EACE,gBAAA;A7B65HF;;A6B35HA;EACE,gBAAA;A7B85HF;;A6B55HA;EACE,gBAAA;A7B+5HF;;A6B75HA;EACE,gBAAA;A7Bg6HF;;A6B95HA;EACE,gBAAA;A7Bi6HF;;A6B/5HA;EACE,gBAAA;A7Bk6HF;;A6Bh6HA;EACE,gBAAA;A7Bm6HF;;A6Bj6HA;EACE,gBAAA;A7Bo6HF;;A6Bl6HA;EACE,gBAAA;A7Bq6HF;;A6Bn6HA;EACE,gBAAA;A7Bs6HF;;A6Bp6HA;EACE,gBAAA;A7Bu6HF;;A6Br6HA;EACE,gBAAA;A7Bw6HF;;A6Bt6HA;EACE,gBAAA;A7By6HF;;A6Bv6HA;EACE,gBAAA;A7B06HF;;A6Bx6HA;EACE,gBAAA;A7B26HF;;A6Bz6HA;EACE,gBAAA;A7B46HF;;A6B16HA;EACE,gBAAA;A7B66HF;;A6B36HA;EACE,gBAAA;A7B86HF;;A6B56HA;EACE,gBAAA;A7B+6HF;;A6B76HA;EACE,gBAAA;A7Bg7HF;;A6B96HA;EACE,gBAAA;A7Bi7HF;;A6B/6HA;EACE,gBAAA;A7Bk7HF;;A6Bh7HA;EACE,gBAAA;A7Bm7HF;;A6Bj7HA;EACE,gBAAA;A7Bo7HF;;A6Bl7HA;;;EAGE,gBAAA;A7Bq7HF;;A6Bn7HA;EACE,gBAAA;A7Bs7HF;;A6Bp7HA;EACE,gBAAA;A7Bu7HF;;A6Br7HA;EACE,gBAAA;A7Bw7HF;;A6Bt7HA;EACE,gBAAA;A7By7HF;;A6Bv7HA;EACE,gBAAA;A7B07HF;;A6Bx7HA;EACE,gBAAA;A7B27HF;;A6Bz7HA;EACE,gBAAA;A7B47HF;;A6B17HA;EACE,gBAAA;A7B67HF;;A6B37HA;EACE,gBAAA;A7B87HF;;A6B57HA;EACE,gBAAA;A7B+7HF;;A6B77HA;EACE,gBAAA;A7Bg8HF;;A6B97HA;EACE,gBAAA;A7Bi8HF;;A6B/7HA;EACE,gBAAA;A7Bk8HF;;A6Bh8HA;EACE,gBAAA;A7Bm8HF;;A6Bj8HA;EACE,gBAAA;A7Bo8HF;;A6Bl8HA;EACE,gBAAA;A7Bq8HF;;A6Bn8HA;EACE,gBAAA;A7Bs8HF;;A6Bp8HA;EACE,gBAAA;A7Bu8HF;;A6Br8HA;EACE,gBAAA;A7Bw8HF;;A6Bt8HA;EACE,gBAAA;A7By8HF;;A6Bv8HA;EACE,gBAAA;A7B08HF;;A6Bx8HA;;EAEE,gBAAA;A7B28HF;;A6Bz8HA;EACE,gBAAA;A7B48HF;;A6B18HA;EACE,gBAAA;A7B68HF;;A6B38HA;EACE,gBAAA;A7B88HF;;A6B58HA;EACE,gBAAA;A7B+8HF;;A6B78HA;EACE,gBAAA;A7Bg9HF;;A6B98HA;EACE,gBAAA;A7Bi9HF;;A6B/8HA;EACE,gBAAA;A7Bk9HF;;A6Bh9HA;EACE,gBAAA;A7Bm9HF;;A6Bj9HA;EACE,gBAAA;A7Bo9HF;;A6Bl9HA;EACE,gBAAA;A7Bq9HF;;A6Bn9HA;EACE,gBAAA;A7Bs9HF;;A6Bp9HA;EACE,gBAAA;A7Bu9HF;;A6Br9HA;EACE,gBAAA;A7Bw9HF;;A6Bt9HA;EACE,gBAAA;A7By9HF;;A6Bv9HA;EACE,gBAAA;A7B09HF;;A6Bx9HA;;EAEE,gBAAA;A7B29HF;;A6Bz9HA;EACE,gBAAA;A7B49HF;;A6B19HA;EACE,gBAAA;A7B69HF;;A6B39HA;EACE,gBAAA;A7B89HF;;A6B59HA;EACE,gBAAA;A7B+9HF;;A6B79HA;;EAEE,gBAAA;A7Bg+HF;;A6B99HA;EACE,gBAAA;A7Bi+HF;;A6B/9HA;EACE,gBAAA;A7Bk+HF;;A6Bh+HA;EACE,gBAAA;A7Bm+HF;;A6Bj+HA;;;EAGE,gBAAA;A7Bo+HF;;A6Bl+HA;;EAEE,gBAAA;A7Bq+HF;;A6Bn+HA;;EAEE,gBAAA;A7Bs+HF;;A6Bp+HA;;EAEE,gBAAA;A7Bu+HF;;A6Br+HA;;EAEE,gBAAA;A7Bw+HF;;A6Bt+HA;EACE,gBAAA;A7By+HF;;A6Bv+HA;EACE,gBAAA;A7B0+HF;;A6Bx+HA;EACE,gBAAA;A7B2+HF;;A6Bz+HA;EACE,gBAAA;A7B4+HF;;A6B1+HA;EACE,gBAAA;A7B6+HF;;A6B3+HA;EACE,gBAAA;A7B8+HF;;A6B5+HA;EACE,gBAAA;A7B++HF;;A6B7+HA;EACE,gBAAA;A7Bg/HF;;A6B9+HA;EACE,gBAAA;A7Bi/HF;;A6B/+HA;EACE,gBAAA;A7Bk/HF;;A6Bh/HA;EACE,gBAAA;A7Bm/HF;;A6Bj/HA;;EAEE,gBAAA;A7Bo/HF;;A6Bl/HA;;EAEE,gBAAA;A7Bq/HF;;A6Bn/HA;;EAEE,gBAAA;A7Bs/HF;;A6Bp/HA;EACE,gBAAA;A7Bu/HF;;A6Br/HA;;EAEE,gBAAA;A7Bw/HF;;A6Bt/HA;;EAEE,gBAAA;A7By/HF;;A6Bv/HA;EACE,gBAAA;A7B0/HF;;A6Bx/HA;EACE,gBAAA;A7B2/HF;;A6Bz/HA;EACE,gBAAA;A7B4/HF;;A6B1/HA;EACE,gBAAA;A7B6/HF;;A6B3/HA;EACE,gBAAA;A7B8/HF;;A6B5/HA;EACE,gBAAA;A7B+/HF;;A6B7/HA;EACE,gBAAA;A7BggIF;;A6B9/HA;EACE,gBAAA;A7BigIF;;A6B//HA;EACE,gBAAA;A7BkgIF;;A6BhgIA;EACE,gBAAA;A7BmgIF;;A6BjgIA;EACE,gBAAA;A7BogIF;;A6BlgIA;EACE,gBAAA;A7BqgIF;;A6BngIA;EACE,gBAAA;A7BsgIF;;A6BpgIA;EACE,gBAAA;A7BugIF;;A6BrgIA;EACE,gBAAA;A7BwgIF;;A6BtgIA;EACE,gBAAA;A7BygIF;;A6BvgIA;EACE,gBAAA;A7B0gIF;;A6BxgIA;EACE,gBAAA;A7B2gIF;;A6BzgIA;EACE,gBAAA;A7B4gIF;;A6B1gIA;EACE,gBAAA;A7B6gIF;;A6B3gIA;;EAEE,gBAAA;A7B8gIF;;A6B5gIA;EACE,gBAAA;A7B+gIF;;A6B7gIA;EACE,gBAAA;A7BghIF;;A6B9gIA;EACE,gBAAA;A7BihIF;;A6B/gIA;EACE,gBAAA;A7BkhIF;;A6BhhIA;EACE,gBAAA;A7BmhIF;;A6BjhIA;EACE,gBAAA;A7BohIF;;A6BlhIA;EACE,gBAAA;A7BqhIF;;A6BnhIA;EACE,gBAAA;A7BshIF;;A6BphIA;EACE,gBAAA;A7BuhIF;;A6BrhIA;EACE,gBAAA;A7BwhIF;;A6BthIA;EACE,gBAAA;A7ByhIF;;A6BvhIA;EACE,gBAAA;A7B0hIF;;A6BxhIA;EACE,gBAAA;A7B2hIF;;A6BzhIA;EACE,gBAAA;A7B4hIF;;A6B1hIA;EACE,gBAAA;A7B6hIF;;A6B3hIA;EACE,gBAAA;A7B8hIF;;A6B5hIA;EACE,gBAAA;A7B+hIF;;A6B7hIA;EACE,gBAAA;A7BgiIF;;A6B9hIA;EACE,gBAAA;A7BiiIF;;A6B/hIA;EACE,gBAAA;A7BkiIF;;A6BhiIA;EACE,gBAAA;A7BmiIF;;A6BjiIA;EACE,gBAAA;A7BoiIF;;A6BliIA;EACE,gBAAA;A7BqiIF;;A6BniIA;EACE,gBAAA;A7BsiIF;;A6BpiIA;EACE,gBAAA;A7BuiIF;;A6BriIA;EACE,gBAAA;A7BwiIF;;A6BtiIA;EACE,gBAAA;A7ByiIF;;A6BviIA;EACE,gBAAA;A7B0iIF;;A6BxiIA;EACE,gBAAA;A7B2iIF;;A6BziIA;EACE,gBAAA;A7B4iIF;;A6B1iIA;EACE,gBAAA;A7B6iIF;;A6B3iIA;EACE,gBAAA;A7B8iIF;;A6B5iIA;EACE,gBAAA;A7B+iIF;;A6B7iIA;EACE,gBAAA;A7BgjIF;;A6B9iIA;EACE,gBAAA;A7BijIF;;A6B/iIA;EACE,gBAAA;A7BkjIF;;A6BhjIA;EACE,gBAAA;A7BmjIF;;A6BjjIA;EACE,gBAAA;A7BojIF;;A6BljIA;EACE,gBAAA;A7BqjIF;;A6BnjIA;EACE,gBAAA;A7BsjIF;;A6BpjIA;EACE,gBAAA;A7BujIF;;A6BrjIA;EACE,gBAAA;A7BwjIF;;A6BtjIA;EACE,gBAAA;A7ByjIF;;A6BvjIA;EACE,gBAAA;A7B0jIF;;A6BxjIA;EACE,gBAAA;A7B2jIF;;A6BzjIA;EACE,gBAAA;A7B4jIF;;A6B1jIA;EACE,gBAAA;A7B6jIF;;A6B3jIA;EACE,gBAAA;A7B8jIF;;A6B5jIA;EACE,gBAAA;A7B+jIF;;A6B7jIA;EACE,gBAAA;A7BgkIF;;A6B9jIA;;EAEE,gBAAA;A7BikIF;;A6B/jIA;;;EAGE,gBAAA;A7BkkIF;;A6BhkIA;EACE,gBAAA;A7BmkIF;;A6BjkIA;EACE,gBAAA;A7BokIF;;A6BlkIA;;EAEE,gBAAA;A7BqkIF;;A6BnkIA;EACE,gBAAA;A7BskIF;;A6BpkIA;EACE,gBAAA;A7BukIF;;A6BrkIA;EACE,gBAAA;A7BwkIF;;A6BtkIA;EACE,gBAAA;A7BykIF;;A6BvkIA;EACE,gBAAA;A7B0kIF;;A6BxkIA;EACE,gBAAA;A7B2kIF;;A6BzkIA;EACE,gBAAA;A7B4kIF;;A6B1kIA;EACE,gBAAA;A7B6kIF;;A6B3kIA;EACE,gBAAA;A7B8kIF;;A6B5kIA;EACE,gBAAA;A7B+kIF;;A6B7kIA;;EAEE,gBAAA;A7BglIF;;A6B9kIA;;EAEE,gBAAA;A7BilIF;;A6B/kIA;EACE,gBAAA;A7BklIF;;A6BhlIA;EACE,gBAAA;A7BmlIF;;A6BjlIA;EACE,gBAAA;A7BolIF;;A6BllIA;EACE,gBAAA;A7BqlIF;;A6BnlIA;EACE,gBAAA;A7BslIF;;A6BplIA;EACE,gBAAA;A7BulIF;;A6BrlIA;;EAEE,gBAAA;A7BwlIF;;A6BtlIA;;EAEE,gBAAA;A7BylIF;;A6BvlIA;EACE,gBAAA;A7B0lIF;;A6BxlIA;EACE,gBAAA;A7B2lIF;;A6BzlIA;EACE,gBAAA;A7B4lIF;;A6B1lIA;EACE,gBAAA;A7B6lIF;;A6B3lIA;;EAEE,gBAAA;A7B8lIF;;A6B5lIA;;EAEE,gBAAA;A7B+lIF;;A6B7lIA;EACE,gBAAA;A7BgmIF;;A6B9lIA;EACE,gBAAA;A7BimIF;;A6B/lIA;EACE,gBAAA;A7BkmIF;;A6BhmIA;;;EAGE,gBAAA;A7BmmIF;;A6BjmIA;;EAEE,gBAAA;A7BomIF;;A6BlmIA;;EAEE,gBAAA;A7BqmIF;;A6BnmIA;;EAEE,gBAAA;A7BsmIF;;A6BpmIA;;EAEE,gBAAA;A7BumIF;;A6BrmIA;EACE,gBAAA;A7BwmIF;;A6BtmIA;;;EAGE,gBAAA;A7BymIF;;A6BvmIA;EACE,gBAAA;A7B0mIF;;A6BxmIA;EACE,gBAAA;A7B2mIF;;A6BzmIA;EACE,gBAAA;A7B4mIF;;A6B1mIA;EACE,gBAAA;A7B6mIF;;A6B3mIA;;EAEE,gBAAA;A7B8mIF;;A6B5mIA;;EAEE,gBAAA;A7B+mIF;;A6B7mIA;EACE,gBAAA;A7BgnIF;;A6B9mIA;EACE,gBAAA;A7BinIF;;A6B/mIA;EACE,gBAAA;A7BknIF;;A6BhnIA;EACE,gBAAA;A7BmnIF;;A6BjnIA;EACE,gBAAA;A7BonIF;;A6BlnIA;EACE,gBAAA;A7BqnIF;;A6BnnIA;EACE,gBAAA;A7BsnIF;;A6BpnIA;EACE,gBAAA;A7BunIF;;A6BrnIA;EACE,gBAAA;A7BwnIF;;A6BtnIA;EACE,gBAAA;A7BynIF;;A6BvnIA;EACE,gBAAA;A7B0nIF;;A6BxnIA;EACE,kBAAA;EACA,UAAA;EACA,WAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,sBAAA;EACA,SAAA;A7B2nIF;;A6BznIA;;EAEE,gBAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,iBAAA;EACA,UAAA;A7B4nIF","file":"../../css/lifterlms.css","sourcesContent":["@charset \"UTF-8\";\n.llms-pagination ul:before, .llms-pagination ul:after,\n.llms-form-fields:before,\n.llms-checkout-cols-2:before,\n.llms-access-plans:before,\n.llms-loop-list:before,\n.llms-cols:before,\n.llms-form-fields:after,\n.llms-checkout-cols-2:after,\n.llms-access-plans:after,\n.llms-loop-list:after,\n.llms-cols:after {\n content: \" \";\n display: table;\n}\n.llms-pagination ul:after,\n.llms-form-fields:after,\n.llms-checkout-cols-2:after,\n.llms-access-plans:after,\n.llms-loop-list:after,\n.llms-cols:after {\n clear: both;\n}\n\n.llms-cols .llms-col {\n width: 100%;\n}\n@media all and (min-width: 600px) {\n .llms-cols [class*=llms-col-] {\n float: left;\n }\n}\n\n.llms-flex-cols {\n display: flex;\n flex-flow: row wrap;\n}\n.llms-flex-cols [class*=llms-col] {\n flex: 0 1 auto;\n width: 100%;\n}\n\n@media all and (min-width: 600px) {\n .llms-cols .llms-col-1, .llms-flex-cols .llms-col-1 {\n width: 100%;\n }\n .llms-cols .llms-col-2, .llms-flex-cols .llms-col-2 {\n width: 50%;\n }\n .llms-cols .llms-col-3, .llms-flex-cols .llms-col-3 {\n width: 33.3333333333%;\n }\n .llms-cols .llms-col-4, .llms-flex-cols .llms-col-4 {\n width: 25%;\n }\n .llms-cols .llms-col-5, .llms-flex-cols .llms-col-5 {\n width: 20%;\n }\n .llms-cols .llms-col-6, .llms-flex-cols .llms-col-6 {\n width: 16.6666666667%;\n }\n .llms-cols .llms-col-7, .llms-flex-cols .llms-col-7 {\n width: 14.2857142857%;\n }\n .llms-cols .llms-col-8, .llms-flex-cols .llms-col-8 {\n width: 12.5%;\n }\n .llms-cols .llms-col-9, .llms-flex-cols .llms-col-9 {\n width: 11.1111111111%;\n }\n .llms-cols .llms-col-10, .llms-flex-cols .llms-col-10 {\n width: 10%;\n }\n .llms-cols .llms-col-11, .llms-flex-cols .llms-col-11 {\n width: 9.0909090909%;\n }\n .llms-cols .llms-col-12, .llms-flex-cols .llms-col-12 {\n width: 8.3333333333%;\n }\n}\n.llms-button-action,\n.llms-button-danger,\n.llms-button-primary,\n.llms-button-secondary {\n border: none;\n border-radius: 8px;\n color: #fefefe;\n cursor: pointer;\n display: inline-block;\n font-size: 18px;\n font-weight: 700;\n text-decoration: none;\n text-shadow: none;\n line-height: 1;\n margin: 0;\n max-width: 100%;\n padding: 12px 24px;\n position: relative;\n transition: all 0.5s ease;\n}\n.llms-button-action:disabled,\n.llms-button-danger:disabled,\n.llms-button-primary:disabled,\n.llms-button-secondary:disabled {\n opacity: 0.5;\n}\n.llms-button-action:hover, .llms-button-action:active,\n.llms-button-danger:hover,\n.llms-button-danger:active,\n.llms-button-primary:hover,\n.llms-button-primary:active,\n.llms-button-secondary:hover,\n.llms-button-secondary:active {\n color: #fefefe;\n}\n.llms-button-action:focus,\n.llms-button-danger:focus,\n.llms-button-primary:focus,\n.llms-button-secondary:focus {\n color: #fefefe;\n}\n.llms-button-action.auto,\n.llms-button-danger.auto,\n.llms-button-primary.auto,\n.llms-button-secondary.auto {\n width: auto;\n}\n.llms-button-action.full,\n.llms-button-danger.full,\n.llms-button-primary.full,\n.llms-button-secondary.full {\n display: block;\n text-align: center;\n width: 100%;\n}\n.llms-button-action.square,\n.llms-button-danger.square,\n.llms-button-primary.square,\n.llms-button-secondary.square {\n padding: 12px;\n}\n.llms-button-action.small,\n.llms-button-danger.small,\n.llms-button-primary.small,\n.llms-button-secondary.small {\n font-size: 13px;\n padding: 8px 14px;\n}\n.llms-button-action.small.square,\n.llms-button-danger.small.square,\n.llms-button-primary.small.square,\n.llms-button-secondary.small.square {\n padding: 8px;\n}\n.llms-button-action.large,\n.llms-button-danger.large,\n.llms-button-primary.large,\n.llms-button-secondary.large {\n font-size: 18px;\n line-height: 1.2;\n padding: 16px 32px;\n}\n.llms-button-action.large.square,\n.llms-button-danger.large.square,\n.llms-button-primary.large.square,\n.llms-button-secondary.large.square {\n padding: 16px;\n}\n.llms-button-action.large .fa,\n.llms-button-danger.large .fa,\n.llms-button-primary.large .fa,\n.llms-button-secondary.large .fa {\n left: -7px;\n position: relative;\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-action,\na.llms-button-danger,\na.llms-button-primary {\n color: #fefefe;\n}\n\n.llms-button-primary {\n background: #466dd8;\n}\n.llms-button-primary:hover, .llms-button-primary.clicked {\n background: #274eba;\n}\n.llms-button-primary:focus, .llms-button-primary:active {\n background: #6888df;\n}\n\n.llms-button-secondary {\n background: #e1e1e1;\n color: #444;\n}\n.llms-button-secondary:hover {\n color: #414141;\n background: #cdcdcd;\n}\n.llms-button-secondary:focus, .llms-button-secondary:active {\n color: #414141;\n background: #ebebeb;\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-secondary {\n color: #444;\n}\n\n.llms-button-action {\n background: #c05621;\n}\n.llms-button-action:hover, .llms-button-action.clicked {\n background: #f67d28;\n}\n.llms-button-action:focus, .llms-button-action:active {\n background: #faad76;\n}\n\n.llms-button-danger {\n background: #bb231c;\n}\n.llms-button-danger:hover {\n background: #981c17;\n}\n.llms-button-danger:focus, .llms-button-danger:active {\n background: #cd261f;\n}\n\n.llms-button-outline {\n background: transparent;\n border: 3px solid #1D2327;\n border-radius: 8px;\n color: #1D2327;\n cursor: pointer;\n font-size: 16px;\n font-weight: 700;\n text-decoration: none;\n text-shadow: none;\n line-height: 1;\n margin: 0;\n max-width: 100%;\n padding: 12px 24px;\n position: relative;\n transition: all 0.5s ease;\n}\n.llms-button-outline:disabled {\n opacity: 0.5;\n}\n.llms-button-outline:hover, .llms-button-outline:active {\n color: #1D2327;\n}\n.llms-button-outline:focus {\n color: #1D2327;\n}\n.llms-button-outline.auto {\n width: auto;\n}\n.llms-button-outline.full {\n display: block;\n text-align: center;\n width: 100%;\n}\n.llms-button-outline.square {\n padding: 12px;\n}\n\n.llms-course-continue-button {\n display: inline-block;\n}\n\n.llms-donut {\n background-color: #f1f1f1;\n background-image: none;\n border-radius: 50%;\n color: #466dd8;\n height: 200px;\n overflow: hidden;\n position: relative;\n width: 200px;\n}\n.llms-donut:before, .llms-donut:after {\n content: \" \";\n display: table;\n}\n.llms-donut:after {\n clear: both;\n}\n.llms-donut svg {\n overflow: visible !important;\n pointer-events: none;\n width: 100%;\n}\n.llms-donut svg path {\n fill: none;\n stroke-width: 35px;\n stroke: #466dd8;\n}\n.llms-donut.mini {\n height: 36px;\n width: 36px;\n}\n.llms-donut.mini .percentage {\n font-size: 10px;\n}\n.llms-donut.small {\n height: 100px;\n width: 100px;\n}\n.llms-donut.small .percentage {\n font-size: 18px;\n}\n.llms-donut.medium {\n height: 130px;\n width: 130px;\n}\n.llms-donut.medium .percentage {\n font-size: 26px;\n}\n.llms-donut.large {\n height: 260px;\n width: 260px;\n}\n.llms-donut.large .percentage {\n font-size: 48px;\n}\n.llms-donut .inside {\n align-items: center;\n background: #fff;\n border-radius: 50%;\n box-sizing: border-box;\n display: flex;\n flex-wrap: wrap;\n height: 80%;\n justify-content: center;\n left: 50%;\n position: absolute;\n text-align: center;\n transform: translate(-50%, -50%);\n width: 80%;\n top: 50%;\n z-index: 3;\n}\n.llms-donut .percentage {\n line-height: 1.2;\n font-size: 34px;\n}\n.llms-donut .caption {\n font-size: 75%;\n}\n\n.lifterlms [data-tip],\n.lifterlms [data-title-default],\n.lifterlms [data-title-active],\n.llms-metabox [data-tip],\n.llms-metabox [data-title-default],\n.llms-metabox [data-title-active],\n.llms-mb-container [data-tip],\n.llms-mb-container [data-title-default],\n.llms-mb-container [data-title-active],\n.llms-quiz-wrapper [data-tip],\n.llms-quiz-wrapper [data-title-default],\n.llms-quiz-wrapper [data-title-active] {\n position: relative;\n}\n.lifterlms [data-tip].tip--top-right:before,\n.lifterlms [data-title-default].tip--top-right:before,\n.lifterlms [data-title-active].tip--top-right:before,\n.llms-metabox [data-tip].tip--top-right:before,\n.llms-metabox [data-title-default].tip--top-right:before,\n.llms-metabox [data-title-active].tip--top-right:before,\n.llms-mb-container [data-tip].tip--top-right:before,\n.llms-mb-container [data-title-default].tip--top-right:before,\n.llms-mb-container [data-title-active].tip--top-right:before,\n.llms-quiz-wrapper [data-tip].tip--top-right:before,\n.llms-quiz-wrapper [data-title-default].tip--top-right:before,\n.llms-quiz-wrapper [data-title-active].tip--top-right:before {\n bottom: 100%;\n left: -10px;\n}\n.lifterlms [data-tip].tip--top-right:hover:before,\n.lifterlms [data-title-default].tip--top-right:hover:before,\n.lifterlms [data-title-active].tip--top-right:hover:before,\n.llms-metabox [data-tip].tip--top-right:hover:before,\n.llms-metabox [data-title-default].tip--top-right:hover:before,\n.llms-metabox [data-title-active].tip--top-right:hover:before,\n.llms-mb-container [data-tip].tip--top-right:hover:before,\n.llms-mb-container [data-title-default].tip--top-right:hover:before,\n.llms-mb-container [data-title-active].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before {\n bottom: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--top-right:after,\n.lifterlms [data-title-default].tip--top-right:after,\n.lifterlms [data-title-active].tip--top-right:after,\n.llms-metabox [data-tip].tip--top-right:after,\n.llms-metabox [data-title-default].tip--top-right:after,\n.llms-metabox [data-title-active].tip--top-right:after,\n.llms-mb-container [data-tip].tip--top-right:after,\n.llms-mb-container [data-title-default].tip--top-right:after,\n.llms-mb-container [data-title-active].tip--top-right:after,\n.llms-quiz-wrapper [data-tip].tip--top-right:after,\n.llms-quiz-wrapper [data-title-default].tip--top-right:after,\n.llms-quiz-wrapper [data-title-active].tip--top-right:after {\n border-top-color: #444;\n left: 6px;\n top: 0;\n}\n.lifterlms [data-tip].tip--top-right:hover:after,\n.lifterlms [data-title-default].tip--top-right:hover:after,\n.lifterlms [data-title-active].tip--top-right:hover:after,\n.llms-metabox [data-tip].tip--top-right:hover:after,\n.llms-metabox [data-title-default].tip--top-right:hover:after,\n.llms-metabox [data-title-active].tip--top-right:hover:after,\n.llms-mb-container [data-tip].tip--top-right:hover:after,\n.llms-mb-container [data-title-default].tip--top-right:hover:after,\n.llms-mb-container [data-title-active].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after {\n top: -6px;\n}\n.lifterlms [data-tip].tip--top-left:before,\n.lifterlms [data-title-default].tip--top-left:before,\n.lifterlms [data-title-active].tip--top-left:before,\n.llms-metabox [data-tip].tip--top-left:before,\n.llms-metabox [data-title-default].tip--top-left:before,\n.llms-metabox [data-title-active].tip--top-left:before,\n.llms-mb-container [data-tip].tip--top-left:before,\n.llms-mb-container [data-title-default].tip--top-left:before,\n.llms-mb-container [data-title-active].tip--top-left:before,\n.llms-quiz-wrapper [data-tip].tip--top-left:before,\n.llms-quiz-wrapper [data-title-default].tip--top-left:before,\n.llms-quiz-wrapper [data-title-active].tip--top-left:before {\n bottom: 100%;\n right: -10px;\n}\n.lifterlms [data-tip].tip--top-left:hover:before,\n.lifterlms [data-title-default].tip--top-left:hover:before,\n.lifterlms [data-title-active].tip--top-left:hover:before,\n.llms-metabox [data-tip].tip--top-left:hover:before,\n.llms-metabox [data-title-default].tip--top-left:hover:before,\n.llms-metabox [data-title-active].tip--top-left:hover:before,\n.llms-mb-container [data-tip].tip--top-left:hover:before,\n.llms-mb-container [data-title-default].tip--top-left:hover:before,\n.llms-mb-container [data-title-active].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before {\n bottom: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--top-left:after,\n.lifterlms [data-title-default].tip--top-left:after,\n.lifterlms [data-title-active].tip--top-left:after,\n.llms-metabox [data-tip].tip--top-left:after,\n.llms-metabox [data-title-default].tip--top-left:after,\n.llms-metabox [data-title-active].tip--top-left:after,\n.llms-mb-container [data-tip].tip--top-left:after,\n.llms-mb-container [data-title-default].tip--top-left:after,\n.llms-mb-container [data-title-active].tip--top-left:after,\n.llms-quiz-wrapper [data-tip].tip--top-left:after,\n.llms-quiz-wrapper [data-title-default].tip--top-left:after,\n.llms-quiz-wrapper [data-title-active].tip--top-left:after {\n border-top-color: #444;\n right: 6px;\n top: 0;\n}\n.lifterlms [data-tip].tip--top-left:hover:after,\n.lifterlms [data-title-default].tip--top-left:hover:after,\n.lifterlms [data-title-active].tip--top-left:hover:after,\n.llms-metabox [data-tip].tip--top-left:hover:after,\n.llms-metabox [data-title-default].tip--top-left:hover:after,\n.llms-metabox [data-title-active].tip--top-left:hover:after,\n.llms-mb-container [data-tip].tip--top-left:hover:after,\n.llms-mb-container [data-title-default].tip--top-left:hover:after,\n.llms-mb-container [data-title-active].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after {\n top: -6px;\n}\n.lifterlms [data-tip].tip--bottom-left:before,\n.lifterlms [data-title-default].tip--bottom-left:before,\n.lifterlms [data-title-active].tip--bottom-left:before,\n.llms-metabox [data-tip].tip--bottom-left:before,\n.llms-metabox [data-title-default].tip--bottom-left:before,\n.llms-metabox [data-title-active].tip--bottom-left:before,\n.llms-mb-container [data-tip].tip--bottom-left:before,\n.llms-mb-container [data-title-default].tip--bottom-left:before,\n.llms-mb-container [data-title-active].tip--bottom-left:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:before {\n top: 100%;\n right: -10px;\n}\n.lifterlms [data-tip].tip--bottom-left:hover:before,\n.lifterlms [data-title-default].tip--bottom-left:hover:before,\n.lifterlms [data-title-active].tip--bottom-left:hover:before,\n.llms-metabox [data-tip].tip--bottom-left:hover:before,\n.llms-metabox [data-title-default].tip--bottom-left:hover:before,\n.llms-metabox [data-title-active].tip--bottom-left:hover:before,\n.llms-mb-container [data-tip].tip--bottom-left:hover:before,\n.llms-mb-container [data-title-default].tip--bottom-left:hover:before,\n.llms-mb-container [data-title-active].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before {\n top: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--bottom-left:after,\n.lifterlms [data-title-default].tip--bottom-left:after,\n.lifterlms [data-title-active].tip--bottom-left:after,\n.llms-metabox [data-tip].tip--bottom-left:after,\n.llms-metabox [data-title-default].tip--bottom-left:after,\n.llms-metabox [data-title-active].tip--bottom-left:after,\n.llms-mb-container [data-tip].tip--bottom-left:after,\n.llms-mb-container [data-title-default].tip--bottom-left:after,\n.llms-mb-container [data-title-active].tip--bottom-left:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:after {\n border-bottom-color: #444;\n right: 6px;\n bottom: 0;\n}\n.lifterlms [data-tip].tip--bottom-left:hover:after,\n.lifterlms [data-title-default].tip--bottom-left:hover:after,\n.lifterlms [data-title-active].tip--bottom-left:hover:after,\n.llms-metabox [data-tip].tip--bottom-left:hover:after,\n.llms-metabox [data-title-default].tip--bottom-left:hover:after,\n.llms-metabox [data-title-active].tip--bottom-left:hover:after,\n.llms-mb-container [data-tip].tip--bottom-left:hover:after,\n.llms-mb-container [data-title-default].tip--bottom-left:hover:after,\n.llms-mb-container [data-title-active].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after {\n bottom: -6px;\n}\n.lifterlms [data-tip].tip--bottom-right:before,\n.lifterlms [data-title-default].tip--bottom-right:before,\n.lifterlms [data-title-active].tip--bottom-right:before,\n.llms-metabox [data-tip].tip--bottom-right:before,\n.llms-metabox [data-title-default].tip--bottom-right:before,\n.llms-metabox [data-title-active].tip--bottom-right:before,\n.llms-mb-container [data-tip].tip--bottom-right:before,\n.llms-mb-container [data-title-default].tip--bottom-right:before,\n.llms-mb-container [data-title-active].tip--bottom-right:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:before {\n top: 100%;\n left: -10px;\n}\n.lifterlms [data-tip].tip--bottom-right:hover:before,\n.lifterlms [data-title-default].tip--bottom-right:hover:before,\n.lifterlms [data-title-active].tip--bottom-right:hover:before,\n.llms-metabox [data-tip].tip--bottom-right:hover:before,\n.llms-metabox [data-title-default].tip--bottom-right:hover:before,\n.llms-metabox [data-title-active].tip--bottom-right:hover:before,\n.llms-mb-container [data-tip].tip--bottom-right:hover:before,\n.llms-mb-container [data-title-default].tip--bottom-right:hover:before,\n.llms-mb-container [data-title-active].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before {\n top: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--bottom-right:after,\n.lifterlms [data-title-default].tip--bottom-right:after,\n.lifterlms [data-title-active].tip--bottom-right:after,\n.llms-metabox [data-tip].tip--bottom-right:after,\n.llms-metabox [data-title-default].tip--bottom-right:after,\n.llms-metabox [data-title-active].tip--bottom-right:after,\n.llms-mb-container [data-tip].tip--bottom-right:after,\n.llms-mb-container [data-title-default].tip--bottom-right:after,\n.llms-mb-container [data-title-active].tip--bottom-right:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:after {\n border-bottom-color: #444;\n left: 6px;\n bottom: 0;\n}\n.lifterlms [data-tip].tip--bottom-right:hover:after,\n.lifterlms [data-title-default].tip--bottom-right:hover:after,\n.lifterlms [data-title-active].tip--bottom-right:hover:after,\n.llms-metabox [data-tip].tip--bottom-right:hover:after,\n.llms-metabox [data-title-default].tip--bottom-right:hover:after,\n.llms-metabox [data-title-active].tip--bottom-right:hover:after,\n.llms-mb-container [data-tip].tip--bottom-right:hover:after,\n.llms-mb-container [data-title-default].tip--bottom-right:hover:after,\n.llms-mb-container [data-title-active].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after {\n bottom: -6px;\n}\n.lifterlms [data-tip]:before,\n.lifterlms [data-title-default]:before,\n.lifterlms [data-title-active]:before,\n.llms-metabox [data-tip]:before,\n.llms-metabox [data-title-default]:before,\n.llms-metabox [data-title-active]:before,\n.llms-mb-container [data-tip]:before,\n.llms-mb-container [data-title-default]:before,\n.llms-mb-container [data-title-active]:before,\n.llms-quiz-wrapper [data-tip]:before,\n.llms-quiz-wrapper [data-title-default]:before,\n.llms-quiz-wrapper [data-title-active]:before {\n background: #444;\n border-radius: 4px;\n color: #fff;\n font-size: 13px;\n line-height: 1.2;\n padding: 8px;\n max-width: 300px;\n width: max-content;\n}\n.lifterlms [data-tip]:after,\n.lifterlms [data-title-default]:after,\n.lifterlms [data-title-active]:after,\n.llms-metabox [data-tip]:after,\n.llms-metabox [data-title-default]:after,\n.llms-metabox [data-title-active]:after,\n.llms-mb-container [data-tip]:after,\n.llms-mb-container [data-title-default]:after,\n.llms-mb-container [data-title-active]:after,\n.llms-quiz-wrapper [data-tip]:after,\n.llms-quiz-wrapper [data-title-default]:after,\n.llms-quiz-wrapper [data-title-active]:after {\n content: \"\";\n border: 6px solid transparent;\n height: 0;\n width: 0;\n}\n.lifterlms [data-tip]:before, .lifterlms [data-tip]:after,\n.lifterlms [data-title-default]:before,\n.lifterlms [data-title-default]:after,\n.lifterlms [data-title-active]:before,\n.lifterlms [data-title-active]:after,\n.llms-metabox [data-tip]:before,\n.llms-metabox [data-tip]:after,\n.llms-metabox [data-title-default]:before,\n.llms-metabox [data-title-default]:after,\n.llms-metabox [data-title-active]:before,\n.llms-metabox [data-title-active]:after,\n.llms-mb-container [data-tip]:before,\n.llms-mb-container [data-tip]:after,\n.llms-mb-container [data-title-default]:before,\n.llms-mb-container [data-title-default]:after,\n.llms-mb-container [data-title-active]:before,\n.llms-mb-container [data-title-active]:after,\n.llms-quiz-wrapper [data-tip]:before,\n.llms-quiz-wrapper [data-tip]:after,\n.llms-quiz-wrapper [data-title-default]:before,\n.llms-quiz-wrapper [data-title-default]:after,\n.llms-quiz-wrapper [data-title-active]:before,\n.llms-quiz-wrapper [data-title-active]:after {\n opacity: 0;\n transition: all 0.2s 0.1s ease;\n position: absolute;\n pointer-events: none;\n visibility: hidden;\n}\n.lifterlms [data-tip]:hover:before, .lifterlms [data-tip]:hover:after,\n.lifterlms [data-title-default]:hover:before,\n.lifterlms [data-title-default]:hover:after,\n.lifterlms [data-title-active]:hover:before,\n.lifterlms [data-title-active]:hover:after,\n.llms-metabox [data-tip]:hover:before,\n.llms-metabox [data-tip]:hover:after,\n.llms-metabox [data-title-default]:hover:before,\n.llms-metabox [data-title-default]:hover:after,\n.llms-metabox [data-title-active]:hover:before,\n.llms-metabox [data-title-active]:hover:after,\n.llms-mb-container [data-tip]:hover:before,\n.llms-mb-container [data-tip]:hover:after,\n.llms-mb-container [data-title-default]:hover:before,\n.llms-mb-container [data-title-default]:hover:after,\n.llms-mb-container [data-title-active]:hover:before,\n.llms-mb-container [data-title-active]:hover:after,\n.llms-quiz-wrapper [data-tip]:hover:before,\n.llms-quiz-wrapper [data-tip]:hover:after,\n.llms-quiz-wrapper [data-title-default]:hover:before,\n.llms-quiz-wrapper [data-title-default]:hover:after,\n.llms-quiz-wrapper [data-title-active]:hover:before,\n.llms-quiz-wrapper [data-title-active]:hover:after {\n opacity: 1;\n transition: all 0 0.1s ease;\n visibility: visible;\n z-index: 99999999;\n}\n.lifterlms [data-tip]:before,\n.llms-metabox [data-tip]:before,\n.llms-mb-container [data-tip]:before,\n.llms-quiz-wrapper [data-tip]:before {\n content: attr(data-tip);\n}\n.lifterlms [data-tip].active:before,\n.llms-metabox [data-tip].active:before,\n.llms-mb-container [data-tip].active:before,\n.llms-quiz-wrapper [data-tip].active:before {\n content: attr(data-tip-active);\n}\n\n.llms-membership-image {\n display: block;\n margin: 0 auto;\n}\n\n.llms-course-image {\n display: block;\n margin: 0 auto;\n max-width: 100%;\n}\n\n.llms-featured-image {\n display: block;\n margin: 0 auto;\n}\n\n.llms-image-thumb {\n width: 150px;\n}\n\n.llms-video-wrapper .center-video {\n height: auto;\n max-width: 100%;\n overflow: hidden;\n position: relative;\n padding-top: 56.25%;\n text-align: center;\n}\n.llms-video-wrapper .center-video > .wp-video,\n.llms-video-wrapper .center-video .fluid-width-video-wrapper,\n.llms-video-wrapper .center-video iframe, .llms-video-wrapper .center-video object, .llms-video-wrapper .center-video embed {\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.llms-video-wrapper .center-video > .wp-video {\n width: 100% !important;\n}\n.llms-video-wrapper .center-video .fluid-width-video-wrapper {\n padding-top: 0 !important;\n}\n\n.clear {\n clear: both;\n width: 100%;\n}\n\n.llms-featured-image {\n text-align: center;\n}\n\n#main-content .llms-payment-options p {\n margin: 0;\n font-size: 16px;\n}\n\n.llms-option {\n display: block;\n position: relative;\n margin: 20px 0;\n padding-left: 40px;\n font-size: 16px;\n}\n.llms-option label {\n cursor: pointer;\n position: static;\n}\n\n.llms-option:first-child {\n margin-top: 0;\n}\n\n.llms-option:last-child {\n margin-bottom: 0;\n}\n\n#main-content .llms-option:last-child {\n margin-bottom: 0;\n}\n\n.llms-option input[type=radio] {\n display: block;\n position: absolute;\n top: 3px;\n left: 0;\n z-index: 0;\n}\n\n.llms-option input[type=radio] {\n display: inline-block;\n}\n\n.llms-option input[type=radio] + label span.llms-radio {\n display: none;\n}\n\n.llms-option input[type=radio] + label span.llms-radio {\n appearance: none;\n z-index: 20;\n position: absolute;\n top: 0;\n left: -2px;\n display: inline-block;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n cursor: pointer;\n vertical-align: middle;\n box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.5) 0 0 0 1px;\n background: #efefef;\n background-image: radial-gradient(ellipse at center, #bb231c 0%, #bb231c 40%, #efefef 45%);\n background-repeat: no-repeat;\n transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);\n}\n\n.llms-option input[type=radio]:checked + label span.llms-radio {\n transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);\n}\n\n.llms-option input[type=radio] + label span.llms-radio {\n background-position: -24px 0;\n}\n\n.llms-option input[type=radio]:checked + label span.llms-radio {\n background-position: 0 0;\n}\n\n.llms-option input[type=submit] {\n border: none;\n background: #bb231c;\n color: #fff;\n font-size: 20px;\n padding: 10px 0;\n border-radius: 3px;\n cursor: pointer;\n width: 100%;\n}\n\n.llms-styled-text {\n padding: 14px 0;\n}\n\n.llms-notice-box {\n border-radius: 3px;\n z-index: 10;\n margin: 10px 0;\n padding: 15px 20px;\n border: 1px solid #ccc;\n list-style-type: none;\n width: 100%;\n overflow: auto;\n}\n.llms-notice-box input[type=text] {\n height: auto;\n}\n.llms-notice-box .col-1-1 {\n width: 100%;\n}\n.llms-notice-box .col-1-1 input[type=text] {\n width: 100%;\n}\n.llms-notice-box .col-1-2 {\n width: 50%;\n float: left;\n}\n@media screen and (max-width: 768px) {\n .llms-notice-box .col-1-2 {\n width: 100%;\n }\n}\n.llms-notice-box .col-1-3 {\n width: 33%;\n float: left;\n margin-right: 10px;\n}\n.llms-notice-box .col-1-4 {\n width: 25%;\n float: left;\n margin-right: 10px;\n}\n@media screen and (max-width: 768px) {\n .llms-notice-box .col-1-4 {\n width: 100%;\n }\n}\n.llms-notice-box .col-1-6 {\n width: 16.6%;\n float: left;\n margin-right: 10px;\n}\n.llms-notice-box .col-1-8 {\n width: 11%;\n float: right;\n}\n.llms-notice-box .llms-pad-right {\n padding-right: 10px;\n}\n@media screen and (max-width: 768px) {\n .llms-notice-box .llms-pad-right {\n padding-right: 0;\n }\n}\n\ninput[type=text].cc_cvv,\n#cc_cvv {\n margin-right: 0;\n width: 23%;\n float: right;\n}\n\n.llms-clear-box {\n border-radius: 3px;\n z-index: 10;\n margin: 10px 0;\n padding: 15px 20px;\n list-style-type: none;\n width: 100%;\n overflow: auto;\n}\n\n.llms-price-label {\n font-weight: normal;\n}\n\n.llms-final-price {\n font-weight: bold;\n float: right;\n}\n\n.llms-center-content {\n text-align: center;\n}\n\n.llms-input-text {\n background-color: #fff;\n border: 1px solid #ddd;\n color: #333;\n font-size: 18px;\n font-weight: 300;\n padding: 16px;\n width: 100%;\n}\n\n.llms-price {\n margin-bottom: 0;\n font-weight: bold;\n}\n\n.llms-price-loop {\n margin-bottom: 0;\n font-weight: bold;\n}\n\n.courses .entry {\n padding: 0;\n}\n\n.list-view .site-content .llms-course-list .hentry, .list-view .site-content .llms-membership-list .hentry {\n border-top: 0;\n padding-top: 0;\n}\n\n.llms-content {\n width: 100%;\n}\n\n.llms-lesson-button-wrapper {\n width: 100%;\n display: block;\n clear: both;\n text-align: center;\n}\n\n.llms-template-wrapper {\n width: 100%;\n display: block;\n clear: both;\n}\n\n.llms-button-wrapper {\n width: 100%;\n display: block;\n clear: both;\n text-align: center;\n}\n\n.llms-styled-select {\n border: 1px solid #ccc;\n box-sizing: border-box;\n border-radius: 3px;\n overflow: hidden;\n position: relative;\n}\n\n.llms-styled-select, .llms-styled-select select {\n width: 100%;\n}\n\nselect:focus {\n outline: none;\n}\n\n.llms-styled-select select {\n height: 34px;\n padding: 5px 0 5px 5px;\n background: transparent;\n border: none;\n -webkit-appearance: none;\n font-size: 16px;\n color: #444444;\n}\n\n@-moz-document url-prefix() {\n .--ms-styled-select select {\n width: 110%;\n }\n}\n.llms-styled-select .fa-sort-desc {\n position: absolute;\n top: 0;\n right: 12px;\n font-size: 24px;\n color: #ccc;\n}\n\nselect::-ms-expand {\n display: none;\n}\n\n_:-o-prefocus .llms-styled-select, .selector .llms-styled-select {\n background: none;\n}\n\n.llms-form-item-wrapper {\n margin-bottom: 1em;\n}\n\n/* Circle Graph */\n.llms-progress-circle {\n position: relative;\n width: 200px;\n height: 200px;\n float: left;\n}\n\n.llms-progress-circle-count {\n top: 27%;\n position: absolute;\n width: 94%;\n text-align: center;\n color: #666;\n font-size: 44px;\n}\n\n.llms-progress-circle svg {\n position: absolute;\n width: 200px;\n height: 200px;\n}\n\n.llms-progress-circle circle {\n fill: transparent;\n}\n\nsvg .llms-background-circle {\n fill: transparent;\n stroke-width: 10px;\n stroke: #f1f2f1;\n stroke-dasharray: 430;\n}\n\nsvg .llms-animated-circle {\n fill: transparent;\n stroke-width: 10px;\n stroke: #e5554e;\n stroke-dasharray: 430;\n stroke-dashoffset: 410;\n}\n\n.llms-widget-syllabus .llms-lesson.current-lesson .lesson-title {\n font-weight: 700;\n}\n.llms-widget-syllabus .section-header {\n display: flex;\n gap: 5px;\n}\n.llms-widget-syllabus .section-header .llms-collapse-caret {\n text-align: left;\n width: 14px;\n}\n.llms-widget-syllabus .llms-lesson-complete, .llms-widget-syllabus .lesson-complete-placeholder {\n font-size: 18px;\n margin-right: 5px;\n color: #ccc;\n}\n.llms-widget-syllabus .llms-lesson-complete.done, .llms-widget-syllabus .lesson-complete-placeholder.done {\n color: #466dd8;\n}\n.llms-widget-syllabus .section-title {\n font-weight: bold;\n}\n.llms-widget-syllabus .lesson-title a {\n text-decoration: underline;\n}\n.llms-widget-syllabus .lesson-title.done a {\n color: #666;\n text-decoration: line-through;\n}\n.llms-widget-syllabus ul {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-widget-syllabus ul li {\n list-style-type: none;\n margin: 0 0 10px 0;\n}\n.llms-widget-syllabus ul li ul {\n margin: 0 0 15px 0;\n}\n.llms-widget-syllabus ul li ul li {\n align-items: flex-start;\n display: flex;\n margin: 0 0 10px 0;\n padding: 0;\n}\n\n.llms-remove-coupon {\n float: right;\n}\n\n/*.llms-lesson-link-locked, .llms-lesson-link-locked:hover {\n background: #f1f1f1;\n display: block;\n color: #a6a6a6;\n min-height: 85px;\n padding: 15px;\n text-decoration: none;\n position: relative;\n}*/\n.llms-lesson-preview.is-complete .llms-lesson-link-locked {\n padding-left: 75px;\n}\n\n.llms-lesson-tooltip {\n display: none;\n position: absolute;\n color: #000000;\n background-color: #c0c0c0;\n padding: 0.25em;\n border-radius: 2px;\n z-index: 100;\n top: 0;\n left: 50%;\n text-align: center;\n -webkit-transform: translateX(-50%) translateY(-100%);\n transform: translateX(-50%) translateY(-100%);\n}\n\n/* arrows - :after */\n.llms-lesson-tooltip:after {\n content: \"\";\n width: 0;\n height: 0;\n border-top: 8px solid #c0c0c0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n position: absolute;\n bottom: -8px;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.llms-lesson-tooltip.active {\n display: inline-block;\n}\n\n.llms-favorite-wrapper {\n cursor: pointer;\n}\n.llms-favorite-wrapper .fa-heart {\n color: #EF476F;\n}\n\n.llms-has-favorite .llms-parent-course-link {\n display: inline-block;\n margin-bottom: 20px;\n}\n.llms-has-favorite .llms-parent-course-link + .llms-favorite-wrapper {\n float: right;\n margin: 0;\n}\n\n.llms-syllabus-wrapper .llms-has-favorite {\n text-align: left;\n}\n.llms-syllabus-wrapper .llms-has-favorite .llms-favorite-wrapper {\n display: inline-block;\n}\n\n.llms-loop-list {\n list-style: none;\n margin: 0 -10px;\n padding: 0;\n}\n@media all and (min-width: 600px) {\n .llms-loop-list.cols-1 .llms-loop-item {\n width: 100%;\n }\n .llms-loop-list.cols-2 .llms-loop-item {\n width: 50%;\n }\n .llms-loop-list.cols-3 .llms-loop-item {\n width: 33.3333333333%;\n }\n .llms-loop-list.cols-4 .llms-loop-item {\n width: 25%;\n }\n .llms-loop-list.cols-5 .llms-loop-item {\n width: 20%;\n }\n .llms-loop-list.cols-6 .llms-loop-item {\n width: 16.6666666667%;\n }\n}\n\n.llms-loop-item {\n float: left;\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n}\n\n.llms-loop-item-content {\n background: #fefefe;\n border: 1px solid #dedede;\n border-radius: 6px;\n overflow: hidden;\n padding-bottom: 15px;\n margin: 10px;\n}\n.llms-loop-item-content .llms-loop-link {\n color: #010101;\n display: block;\n text-decoration: none;\n}\n.llms-loop-item-content .llms-loop-link:visited {\n color: #010101;\n}\n.llms-loop-item-content .llms-featured-image {\n display: block;\n max-width: 100%;\n}\n.llms-loop-item-content .llms-loop-title {\n color: #010101;\n margin: 15px 0;\n}\n.llms-loop-item-content .llms-loop-title:hover {\n color: #466dd8;\n}\n.llms-loop-item-content .llms-meta,\n.llms-loop-item-content .llms-author,\n.llms-loop-item-content .llms-loop-title {\n padding: 0 15px;\n}\n.llms-loop-item-content .llms-meta,\n.llms-loop-item-content .llms-author {\n color: #444;\n display: block;\n font-size: 14px;\n margin-bottom: 10px;\n}\n.llms-loop-item-content .llms-meta:last-child,\n.llms-loop-item-content .llms-author:last-child {\n margin-bottom: 0;\n}\n.llms-loop-item-content .llms-author {\n align-items: center;\n display: flex;\n gap: 5px;\n}\n.llms-loop-item-content .llms-featured-img-wrap {\n overflow: hidden;\n}\n.llms-loop-item-content p {\n margin-bottom: 0;\n}\n.llms-loop-item-content .llms-progress {\n margin: 0;\n height: 0.4em;\n}\n.llms-loop-item-content .llms-progress .progress__indicator {\n display: none;\n}\n.llms-loop-item-content .llms-progress .llms-progress-bar {\n background-color: #f6f6f6;\n right: 0;\n top: 0;\n}\n\n.llms-meta-info {\n margin: 40px 0;\n}\n.llms-meta-info .llms-meta-title {\n margin: 0;\n}\n.llms-meta-info .llms-meta p {\n margin-bottom: 0;\n}\n.llms-meta-info .llms-meta span {\n font-weight: 700;\n}\n\n.llms-course-progress {\n margin: 40px auto;\n max-width: 480px;\n text-align: center;\n}\n\n.llms-syllabus-wrapper {\n margin: 20px 0;\n text-align: left;\n}\n.llms-syllabus-wrapper .llms-section-title {\n margin: 40px 0 10px;\n}\n.llms-syllabus-wrapper .llms-section-title + .llms-lesson-preview {\n border-top: 1px solid #dedede;\n}\n\n.llms-lesson-preview {\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n border-left: 1px solid #dedede;\n display: block;\n margin: 0;\n max-width: 100%;\n position: relative;\n}\n.llms-lesson-preview .llms-lesson-link {\n background: #fefefe;\n color: #010101;\n display: block;\n padding: 15px;\n text-decoration: none;\n transition: background-color 0.3s ease;\n}\n.llms-lesson-preview .llms-lesson-link:hover {\n background: #eaeaea;\n}\n.llms-lesson-preview .llms-lesson-link:visited {\n color: #212121;\n}\n.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked {\n background: #EFEFEF;\n color: #666;\n}\n.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked:hover {\n background: #dedede;\n}\n.llms-lesson-preview .llms-lesson-link .llms-lesson-preview-row {\n display: flex;\n flex-direction: row-reverse;\n}\n.llms-lesson-preview .llms-lesson-thumbnail {\n margin-bottom: 15px;\n}\n.llms-lesson-preview .llms-lesson-thumbnail img {\n display: block;\n height: auto;\n width: 100%;\n}\n.llms-lesson-preview .llms-lesson-title {\n font-weight: 700;\n margin: 0 auto 5px;\n}\n.llms-lesson-preview .llms-lesson-title:last-child {\n margin-bottom: 0;\n}\n.llms-lesson-preview .llms-lesson-excerpt {\n margin-top: 5px;\n}\n.llms-lesson-preview .llms-lesson-excerpt p {\n margin: 0 0 10px 0;\n padding: 0;\n}\n.llms-lesson-preview .llms-lesson-excerpt p:last-of-type {\n margin: 0;\n}\n.llms-lesson-preview .llms-main {\n flex-grow: 1;\n}\n.llms-lesson-preview .llms-extra {\n min-width: 50px;\n text-align: right;\n}\n.llms-lesson-preview .llms-lesson-counter,\n.llms-lesson-preview .llms-free-lesson-svg,\n.llms-lesson-preview .llms-lesson-complete,\n.llms-lesson-preview .llms-lesson-complete-placeholder {\n display: block;\n}\n.llms-lesson-preview.is-free .llms-lesson-complete, .llms-lesson-preview.is-complete .llms-lesson-complete {\n color: #466dd8;\n}\n.llms-lesson-preview.is-complete .llms-lesson-title:not(.llms-student-dashboard .llms-lesson-title):not(.llms-course-navigation .llms-lesson-title) {\n text-decoration: line-through;\n}\n.llms-lesson-preview .llms-icon-free {\n background: #466dd8;\n border-radius: 6px;\n color: #fefefe;\n display: inline-block;\n font-size: 14px;\n font-weight: bold;\n line-height: 1;\n padding: 5px 8px 4px;\n white-space: nowrap;\n}\n.llms-lesson-preview.is-incomplete .llms-lesson-complete {\n color: #cacaca;\n}\n.llms-lesson-preview .llms-lesson-counter {\n font-size: 16px;\n margin-bottom: 5px;\n}\n.llms-lesson-preview .llms-free-lesson-svg {\n fill: currentColor;\n height: 23px;\n width: 50px;\n}\n\n.llms-course-navigation {\n display: flex;\n gap: 20px;\n}\n.llms-course-navigation .llms-prev-lesson,\n.llms-course-navigation .llms-next-lesson,\n.llms-course-navigation .llms-back-to-course {\n flex: 1;\n}\n.llms-course-navigation .llms-prev-lesson + .llms-back-to-course {\n text-align: right;\n}\n.llms-course-navigation .llms-next-lesson .llms-lesson-preview .llms-lesson-link {\n text-align: right;\n}\n.llms-course-navigation .llms-lesson-preview {\n border: 1px solid #dedede;\n}\n.llms-course-navigation .llms-lesson-link {\n display: block;\n}\n\n/* progress bar */\n.llms-progress {\n clear: both;\n display: flex;\n flex-direction: row-reverse;\n position: relative;\n height: 1em;\n width: 100%;\n margin: 15px 0;\n}\n\n.llms-progress .llms-progress-bar {\n background-color: #dedede;\n position: relative;\n height: 0.4em;\n top: 0.3em;\n width: 100%;\n}\n\n.llms-progress .progress-bar-complete {\n background-color: #ef476f;\n height: 100%;\n}\n\n.progress__indicator {\n float: right;\n text-align: right;\n height: 1em;\n line-height: 1em;\n margin-left: 5px;\n white-space: nowrap;\n}\n\n.llms-author .name {\n margin-left: 5px;\n}\n.llms-author .label {\n margin-left: 5px;\n}\n.llms-author .avatar {\n border-radius: 50%;\n}\n.llms-author .bio {\n margin-top: 5px;\n}\n\n.llms-instructor-info {\n margin: 40px 0;\n}\n.llms-instructor-info .llms-meta-title {\n margin: 0;\n}\n.llms-instructor-info .llms-instructors .llms-col:first-child .llms-author {\n margin-left: 0;\n}\n.llms-instructor-info .llms-instructors .llms-col:last-child .llms-author {\n margin-right: 0;\n}\n.llms-instructor-info .llms-instructors .llms-author {\n background: #fefefe;\n border: 1px solid #dedede;\n border-top: 4px solid #466dd8;\n border-bottom-right-radius: 6px;\n border-bottom-left-radius: 6px;\n color: #010101;\n text-align: center;\n margin: 45px 0 0;\n padding: 0 20px 20px;\n}\n.llms-instructor-info .llms-instructors .llms-author .avatar {\n background: #466dd8;\n border: 4px solid #466dd8;\n display: block;\n margin: -35px auto 10px;\n}\n.llms-instructor-info .llms-instructors .llms-author .llms-author-info {\n display: block;\n}\n.llms-instructor-info .llms-instructors .llms-author .llms-author-info.name {\n font-weight: 700;\n}\n.llms-instructor-info .llms-instructors .llms-author .llms-author-info.label {\n font-size: 85%;\n}\n.llms-instructor-info .llms-instructors .llms-author .llms-author-info.bio {\n font-size: 90%;\n margin-bottom: 0;\n}\n\n.llms_review {\n margin: 20px 0px;\n padding: 10px;\n}\n.llms_review h5 {\n font-size: 17px;\n margin: 3px 0px;\n}\n.llms_review h6 {\n font-size: 13px;\n}\n.llms_review p {\n font-size: 15px;\n}\n\n.review_box [type=text] {\n margin: 10px 0px;\n}\n.review_box h5 {\n color: red;\n display: none;\n}\n.review_box + .thank_you_box {\n display: none;\n}\n\n.llms-notice {\n background: rgba(70, 109, 216, 0.3);\n border-color: #466dd8;\n border-style: solid;\n border-width: 1px;\n border-radius: 6px;\n padding: 15px;\n margin-bottom: 40px;\n}\n.llms-notice a {\n color: inherit;\n}\n.llms-notice p:last-child, .llms-notice ul:last-child {\n margin-bottom: 0;\n}\n.llms-notice li {\n list-style-type: none;\n}\n.llms-notice.llms-debug {\n background: rgba(202, 202, 202, 0.3);\n border-color: #cacaca;\n}\n.llms-notice.llms-error {\n background: rgba(187, 35, 28, 0.15);\n border-color: #bb231c;\n}\n.llms-notice.llms-success {\n background: rgba(77, 141, 60, 0.15);\n border-color: #4d8d3c;\n}\n\n.entry-content .llms-notice {\n margin: 0 0 40px;\n}\n.entry-content .llms-notice li {\n list-style-type: none;\n}\n\nul.llms-achievements-loop,\n.lifterlms ul.llms-achievements-loop,\nul.llms-certificates-loop,\n.lifterlms ul.llms-certificates-loop {\n list-style-type: none;\n margin: 0 -10px;\n padding: 0;\n}\nul.llms-achievements-loop:before, ul.llms-achievements-loop:after,\n.lifterlms ul.llms-achievements-loop:before,\n.lifterlms ul.llms-achievements-loop:after,\nul.llms-certificates-loop:before,\nul.llms-certificates-loop:after,\n.lifterlms ul.llms-certificates-loop:before,\n.lifterlms ul.llms-certificates-loop:after {\n content: \" \";\n display: table;\n}\nul.llms-achievements-loop:after,\n.lifterlms ul.llms-achievements-loop:after,\nul.llms-certificates-loop:after,\n.lifterlms ul.llms-certificates-loop:after {\n clear: both;\n}\nul.llms-achievements-loop li.llms-achievement-loop-item,\nul.llms-achievements-loop li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop li.llms-certificate-loop-item,\nul.llms-certificates-loop li.llms-achievement-loop-item,\nul.llms-certificates-loop li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop li.llms-certificate-loop-item {\n box-sizing: border-box;\n display: block;\n float: left;\n list-style-type: none;\n margin: 0;\n padding: 10px;\n width: 100%;\n}\n@media all and (min-width: 600px) {\n ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item {\n width: 100%;\n }\n ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item {\n width: 50%;\n }\n ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item {\n width: 33.3333333333%;\n }\n ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item {\n width: 25%;\n }\n ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item {\n width: 20%;\n }\n}\n\n.llms-achievement,\n.llms-certificate {\n background: #fefefe;\n border: none;\n border-radius: 12px;\n color: #010101;\n display: block;\n padding: 20px 0;\n text-decoration: none;\n width: 100%;\n}\n.llms-achievement:hover,\n.llms-certificate:hover {\n background: #eaeaea;\n}\n.llms-achievement .llms-achievement-img,\n.llms-certificate .llms-achievement-img {\n display: block;\n margin: 0 auto;\n max-width: 80%;\n}\n.llms-achievement .llms-achievement-title,\n.llms-certificate .llms-achievement-title {\n color: #010101;\n font-size: 16px;\n margin: 0;\n padding: 10px;\n text-align: center;\n}\n.llms-achievement .llms-certificate-title,\n.llms-certificate .llms-certificate-title {\n color: #010101;\n font-size: 16px;\n margin: 0;\n padding: 0 0 10px;\n}\n.llms-achievement .llms-achievement-info,\n.llms-achievement .llms-achievement-date,\n.llms-certificate .llms-achievement-info,\n.llms-certificate .llms-achievement-date {\n display: none;\n}\n.llms-achievement .llms-achievement-content,\n.llms-certificate .llms-achievement-content {\n padding: 20px;\n}\n.llms-achievement .llms-achievement-content:empty,\n.llms-certificate .llms-achievement-content:empty {\n padding: 0;\n}\n.llms-achievement .llms-achievement-content *:last-child,\n.llms-certificate .llms-achievement-content *:last-child {\n margin-bottom: 0;\n}\n\n.llms-certificate {\n border: 4px double #dedede;\n padding: 20px 10px;\n background: #fefefe;\n text-align: center;\n}\n.llms-certificate:hover {\n background: #fefefe;\n border-color: #eaeaea;\n}\n\n.llms-achievement-modal .llms-achievement {\n background: #fff;\n}\n.llms-achievement-modal .llms-achievement-info {\n display: block;\n}\n.llms-achievement-modal .llms-achievement-title {\n display: none;\n}\n\n.llms-notification {\n background: #fefefe;\n box-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;\n border-top: 4px solid #466dd8;\n color: #010101;\n opacity: 0;\n padding: 12px;\n position: fixed;\n right: -800px;\n top: 24px;\n transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out;\n visibility: hidden;\n width: auto;\n z-index: 9999999;\n}\n.llms-notification:before, .llms-notification:after {\n content: \" \";\n display: table;\n}\n.llms-notification:after {\n clear: both;\n}\n.llms-notification.visible {\n left: 12px;\n opacity: 1;\n right: 12px;\n transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, transform 0.2s ease-in-out;\n visibility: visible;\n}\n.llms-notification.visible:hover .llms-notification-dismiss {\n opacity: 1;\n}\n.llms-notification .llms-notification-content {\n align-items: center;\n display: flex;\n}\n.llms-notification .llms-notification-main {\n align-self: flex-start;\n flex: 4;\n order: 2;\n}\n.llms-notification .llms-notification-title {\n color: #010101;\n font-size: 18px;\n margin: 0;\n}\n.llms-notification .llms-notification-body {\n font-size: 14px;\n line-height: 1.4;\n}\n.llms-notification .llms-notification-body p, .llms-notification .llms-notification-body li {\n font-size: inherit;\n}\n.llms-notification .llms-notification-body p {\n margin-bottom: 8px;\n}\n.llms-notification .llms-notification-body p img {\n max-width: 100%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert {\n background: #f6f6f6;\n border: 1px solid #d0d0d0;\n box-shadow: inset 0 0 0 3px #fefefe, inset 0 0 0 4px #dedede;\n padding: 16px 16px 24px;\n margin-top: 12px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert-title {\n font-size: 16px;\n font-weight: 700;\n margin: 12px auto;\n text-align: center;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body {\n width: 100%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(1) {\n width: 65%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(2) {\n width: 35%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(3) {\n width: 85%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(4) {\n width: 75%;\n margin-top: 18px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(5) {\n width: 70%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(6) {\n margin-left: 12px;\n margin-bottom: -24px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(7) {\n width: 65%;\n margin-right: 12px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-line {\n border-radius: 2px;\n height: 8px;\n background: #b0b0b0;\n background-image: linear-gradient(to right, #b0b0b0 0%, #a0a0a0 20%, #b0b0b0 40%, #b0b0b0 100%);\n background-repeat: no-repeat;\n margin: 4px auto;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-dot {\n background: #b0b0b0;\n border-radius: 50%;\n display: inline-block;\n content: \"\";\n height: 24px;\n width: 24px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert p {\n margin-bottom: 0;\n}\n.llms-notification .llms-notification-aside {\n align-self: flex-start;\n flex: 1;\n margin-right: 12px;\n order: 1;\n}\n.llms-notification .llms-notification-icon {\n display: block;\n max-width: 64px;\n}\n.llms-notification .llms-notification-footer {\n border-top: 1px solid #e5e5e5;\n font-size: 12px;\n margin-top: 12px;\n padding: 6px 6px 0;\n text-align: right;\n}\n.llms-notification .llms-notification-footer a {\n color: #010101;\n}\n.llms-notification .llms-notification-dismiss {\n color: #bb231c;\n cursor: pointer;\n font-size: 22px;\n position: absolute;\n right: 10px;\n top: 8px;\n transition: opacity 0.4s ease-in-out;\n}\n\n.llms-sd-notification-center .llms-notification-list,\n.llms-sd-notification-center .llms-notification-list-item {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-sd-notification-center .llms-notification-list-item:hover .llms-notification {\n background: #fcfcfc;\n}\n.llms-sd-notification-center .llms-notification {\n opacity: 1;\n border-top: 1px solid #e5e5e5;\n left: auto;\n padding: 24px;\n position: relative;\n right: auto;\n top: auto;\n visibility: visible;\n width: auto;\n}\n.llms-sd-notification-center .llms-notification .llms-notification-aside {\n max-width: 64px;\n}\n.llms-sd-notification-center .llms-notification .llms-notification-footer {\n border: none;\n padding: 0;\n text-align: left;\n}\n.llms-sd-notification-center .llms-notification .llms-progress {\n display: none !important;\n}\n.llms-sd-notification-center .llms-notification .llms-notification-date {\n color: #515151;\n float: left;\n margin-right: 6px;\n}\n.llms-sd-notification-center .llms-notification .llms-mini-cert {\n margin: 0 auto;\n max-width: 380px;\n}\n\n@media all and (min-width: 480px) {\n .llms-notification {\n right: -800px;\n width: 360px;\n }\n .llms-notification.visible {\n left: auto;\n right: 24px;\n }\n .llms-notification .llms-notification-dismiss {\n opacity: 0;\n }\n}\n.llms-pagination ul {\n list-style-type: none;\n margin: 40px 0;\n padding: 0;\n}\n.llms-pagination ul li {\n float: left;\n}\n.llms-pagination ul li a {\n border-bottom: 0;\n text-decoration: none;\n}\n.llms-pagination ul li .page-numbers {\n padding: 0.5em;\n text-decoration: underline;\n}\n.llms-pagination ul li .page-numbers.current {\n text-decoration: none;\n}\n\n.llms-tooltip {\n background: #2a2a2a;\n border-radius: 4px;\n color: #fff;\n font-size: 14px;\n line-height: 1.2;\n opacity: 0;\n top: -20px;\n padding: 8px 12px;\n left: 50%;\n position: absolute;\n pointer-events: none;\n transform: translateX(-50%);\n transition: opacity 0.2s ease, top 0.2s ease;\n max-width: 320px;\n}\n.llms-tooltip.show {\n top: -28px;\n opacity: 1;\n}\n.llms-tooltip:after {\n bottom: -8px;\n border-top: 8px solid #2a2a2a;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n content: \"\";\n height: 0;\n left: 50%;\n position: absolute;\n transform: translateX(-50%);\n width: 0;\n}\n\n.webui-popover-title {\n font-size: initial;\n font-weight: initial;\n line-height: initial;\n}\n\n.webui-popover-inverse .webui-popover-inner .close {\n color: #fff;\n opacity: 0.6;\n text-shadow: none;\n}\n.webui-popover-inverse .webui-popover-inner .close:hover {\n opacity: 0.8;\n}\n.webui-popover-inverse .webui-popover-content a {\n color: #fff;\n text-decoration: underline;\n}\n.webui-popover-inverse .webui-popover-content a:hover {\n text-decoration: none;\n}\n\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question {\n background: #efefef;\n border-radius: 6px;\n margin: 0 0 15px;\n position: relative;\n list-style-type: none;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {\n color: inherit;\n display: flex;\n gap: 10px;\n justify-content: space-between;\n padding: 15px 35px 15px 15px;\n text-decoration: none;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect {\n background: rgba(192, 86, 33, 0.2);\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon {\n background-color: #c05621;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {\n background: rgba(77, 141, 60, 0.15);\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {\n background-color: #4d8d3c;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {\n background: rgba(187, 35, 28, 0.15);\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {\n background-color: #bb231c;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question pre {\n overflow: auto;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {\n font-size: 22px;\n margin: 0;\n line-height: 1.4;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {\n line-height: 1.4;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {\n position: absolute;\n right: -12px;\n top: -2px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon {\n color: rgba(255, 255, 255, 0.65);\n border-radius: 50%;\n font-size: 30px;\n height: 40px;\n line-height: 40px;\n text-align: center;\n width: 40px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {\n display: none;\n padding: 0 15px 15px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {\n font-weight: 700;\n margin: 0 0 10px;\n padding: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers {\n margin: 0;\n padding: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {\n padding: 0;\n margin: 0 0 0 30px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child {\n list-style-type: none;\n margin-left: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {\n height: auto;\n max-width: 200px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section {\n border-top: 2px solid rgba(255, 255, 255, 0.5);\n margin-top: 20px;\n padding-top: 20px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child {\n border-top: none;\n margin-top: 0;\n padding-top: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {\n display: inline-block;\n list-style-type: none;\n margin: 0;\n padding: 5px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {\n opacity: 0.5;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {\n font-style: italic;\n font-weight: normal;\n}\n.single-llms_quiz .llms-return {\n margin-bottom: 10px;\n}\n.single-llms_quiz .llms-quiz-results:before, .single-llms_quiz .llms-quiz-results:after {\n content: \" \";\n display: table;\n}\n.single-llms_quiz .llms-quiz-results:after {\n clear: both;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.passing {\n color: #4d8d3c;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.passing svg path {\n stroke: #4d8d3c;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.pending {\n color: #555;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.pending svg path {\n stroke: #555;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.failing {\n color: #bb231c;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.failing svg path {\n stroke: #bb231c;\n}\n.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside,\n.single-llms_quiz .llms-quiz-results .llms-quiz-results-main,\n.single-llms_quiz .llms-quiz-results .llms-quiz-results-history {\n margin-bottom: 20px;\n}\n@media all and (min-width: 600px) {\n .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside {\n float: left;\n width: 220px;\n }\n .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside + .llms-quiz-results-main {\n float: right;\n width: calc(100% - 300px);\n }\n .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside + .llms-quiz-results-main + .llms-quiz-results-history {\n float: right;\n width: calc(100% - 300px);\n }\n .single-llms_quiz .llms-quiz-results .llms-quiz-results-history {\n clear: right;\n }\n}\n.single-llms_quiz ul.llms-quiz-meta-info {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.single-llms_quiz ul.llms-quiz-meta-info li {\n list-style-type: none;\n margin: 10px 0 0;\n padding: 0;\n}\n.single-llms_quiz ul.llms-quiz-meta-info {\n margin-bottom: 10px;\n}\n.single-llms_quiz .llms-quiz-buttons {\n margin-top: 10px;\n text-align: left;\n}\n.single-llms_quiz .llms-quiz-buttons form {\n display: inline-block;\n}\n\n.llms-quiz-question-wrapper {\n min-height: 140px;\n position: relative;\n}\n.llms-quiz-question-wrapper .llms-quiz-loading {\n bottom: 20px;\n left: 0;\n position: absolute;\n right: 0;\n text-align: center;\n z-index: 1;\n}\n.llms-quiz-question-wrapper .llms-question-image img {\n height: auto;\n max-width: 100%;\n}\n\n.llms-quiz-ui {\n position: relative;\n}\n.llms-quiz-ui .llms-quiz-header {\n align-items: center;\n display: flex;\n margin: 0 0 40px;\n}\n.llms-quiz-ui .llms-progress {\n background-color: #dedede;\n flex-direction: row;\n height: 8px;\n margin: 0;\n overflow: hidden;\n}\n.llms-quiz-ui .llms-progress .progress-bar-complete {\n transition: width 0.3s ease-in;\n width: 0;\n}\n.llms-quiz-ui .llms-error {\n background: rgba(187, 35, 28, 0.15);\n border: 1px solid #bb231c;\n border-radius: 6px;\n margin: 20px 0;\n padding: 15px;\n}\n.llms-quiz-ui .llms-error:before, .llms-quiz-ui .llms-error:after {\n content: \" \";\n display: table;\n}\n.llms-quiz-ui .llms-error:after {\n clear: both;\n}\n.llms-quiz-ui .llms-error a {\n color: #bb231c;\n float: right;\n font-size: 22px;\n line-height: 1;\n text-decoration: none;\n}\n.llms-quiz-ui .llms-quiz-counter {\n display: none;\n color: #6a6a6a;\n float: right;\n font-size: 18px;\n}\n.llms-quiz-ui .llms-quiz-counter .llms-sep {\n margin: 0 5px;\n}\n.llms-quiz-ui .llms-quiz-nav {\n margin-top: 20px;\n}\n.llms-quiz-ui .llms-quiz-nav button {\n margin: 0 10px 0 0;\n}\n\n.llms-question-wrapper .llms-question-text {\n font-size: 30px;\n font-weight: 400;\n margin-bottom: 15px;\n}\n.llms-question-wrapper ol.llms-question-choices {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice {\n border-bottom: 1px solid #e8e8e8;\n margin: 0;\n padding: 0;\n position: relative;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice:last-child {\n border-bottom: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture {\n border-bottom: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture label {\n display: inline-block;\n padding: 0;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-marker {\n bottom: 10px;\n margin: 0;\n position: absolute;\n right: 10px;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image {\n margin: 2px;\n padding: 20px;\n transition: background 0.4s ease;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image img {\n display: block;\n height: auto;\n width: 100%;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture input:checked ~ .llms-choice-image {\n background: #efefef;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice input {\n display: none;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n visibility: hidden;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice label {\n display: block;\n margin: 0;\n padding: 10px 20px;\n position: relative;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .iterator {\n display: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .fa {\n display: inline;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker {\n background: #fefefe;\n color: #010101;\n display: inline-block;\n font-size: 20px;\n height: 40px;\n line-height: 40px;\n margin-right: 10px;\n text-align: center;\n transition: all 0.2s ease;\n vertical-align: middle;\n width: 40px;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker .fa {\n display: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--lister, .llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--checkbox {\n border-radius: 4px;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--radio {\n border-radius: 50%;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker {\n background: #ef476f;\n color: #fff;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker .iterator {\n display: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker .fa {\n display: inline;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-choice-text {\n display: inline-block;\n font-size: 18px;\n font-weight: 400;\n line-height: 1.6;\n margin: 0;\n padding: 0;\n vertical-align: middle;\n width: calc(100% - 60px);\n}\n\n.llms-quiz-timer {\n background: #fff;\n border: 1px solid #4d8d3c;\n border-radius: 4px;\n color: #4d8d3c;\n float: right;\n font-size: 18px;\n line-height: 1;\n margin-left: 20px;\n padding: 8px 12px;\n position: relative;\n white-space: nowrap;\n z-index: 1;\n}\n.llms-quiz-timer.color-half {\n border-color: #c05621;\n color: #c05621;\n}\n.llms-quiz-timer.color-empty {\n border-color: #bb231c;\n color: #bb231c;\n}\n.llms-quiz-timer .llms-tiles {\n display: inline-block;\n margin-left: 5px;\n}\n\n.voucher-expand {\n display: none;\n}\n\n@media all and (min-width: 600px) {\n .llms-access-plans.cols-1 .llms-access-plan {\n width: 100%;\n }\n .llms-access-plans.cols-2 .llms-access-plan {\n width: 50%;\n }\n .llms-access-plans.cols-3 .llms-access-plan {\n width: 33.3333333333%;\n }\n .llms-access-plans.cols-4 .llms-access-plan {\n width: 25%;\n }\n .llms-access-plans.cols-5 .llms-access-plan {\n width: 20%;\n }\n}\n\n.llms-free-enroll-form {\n margin-bottom: 0;\n}\n\n.llms-access-plan {\n box-sizing: border-box;\n float: left;\n text-align: center;\n width: 100%;\n}\n.llms-access-plan .llms-access-plan-content,\n.llms-access-plan .llms-access-plan-footer {\n background: #f1f1f1;\n}\n.llms-access-plan.featured .llms-access-plan-featured {\n background: #466dd8;\n border-top-left-radius: 6px;\n border-top-right-radius: 6px;\n}\n.llms-access-plan.featured .llms-access-plan-content {\n border-radius: 0;\n}\n.llms-access-plan.featured .llms-access-plan-title {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.llms-access-plan.featured .llms-access-plan-footer,\n.llms-access-plan.featured .llms-access-plan-content {\n border-left: 3px solid #466dd8;\n border-right: 3px solid #466dd8;\n}\n.llms-access-plan.featured .llms-access-plan-footer {\n border-bottom-color: #466dd8;\n}\n.llms-access-plan.on-sale .price-regular {\n text-decoration: line-through;\n}\n.llms-access-plan.on-sale .price-regular .lifterlms-price {\n font-weight: 400;\n}\n.llms-access-plan .stamp {\n background: #466dd8;\n border-radius: 6px;\n color: #fefefe;\n display: inline-block;\n font-size: 14px;\n font-style: normal;\n font-weight: bold;\n line-height: 1;\n padding: 5px 8px 4px;\n}\n\n.llms-access-plan-featured {\n color: #fff;\n font-size: 14px;\n font-weight: 700;\n letter-spacing: 1px;\n margin: 0 2px 0 2px;\n padding: 5px 0 0;\n}\n\n.llms-access-plan-content {\n border-top-right-radius: 6px;\n border-top-left-radius: 6px;\n margin: 0 2px 0;\n overflow: hidden;\n}\n.llms-access-plan-content .llms-access-plan-pricing {\n color: #010101;\n padding: 20px 0 0;\n}\n\n.llms-access-plan-title {\n background: #466dd8;\n color: #fefefe;\n margin: 0;\n padding: 10px 15px;\n}\n\n.llms-access-plan-pricing .llms-price-currency-symbol {\n font-size: 14px;\n vertical-align: top;\n}\n\n.llms-access-plan-price .lifterlms-price {\n font-weight: 700;\n}\n.llms-access-plan-price.sale {\n padding: 5px 0;\n border-top: 1px solid #d0d0d0;\n border-bottom: 1px solid #d0d0d0;\n}\n\n.llms-access-plan-trial,\n.llms-access-plan-schedule,\n.llms-access-plan-sale-end,\n.llms-access-plan-expiration {\n font-size: 16px;\n}\n\n.llms-access-plan-description {\n color: #010101;\n font-size: 16px;\n padding: 10px 10px 0;\n}\n.llms-access-plan-description ul {\n margin: 0;\n}\n.llms-access-plan-description ul li {\n border-bottom: 1px solid #d0d0d0;\n list-style-type: none;\n}\n.llms-access-plan-description ul li:last-child {\n border-bottom: none;\n}\n.llms-access-plan-description div:last-child, .llms-access-plan-description img:last-child, .llms-access-plan-description p:last-child, .llms-access-plan-description ul:last-child, .llms-access-plan-description li:last-child {\n margin-bottom: 0;\n}\n\n.llms-access-plan-restrictions {\n margin-top: 20px;\n}\n.llms-access-plan-restrictions .stamp {\n vertical-align: baseline;\n}\n.llms-access-plan-restrictions ul {\n margin: 5px 0 0 0;\n padding: 0;\n}\n.llms-access-plan-restrictions ul li {\n font-size: 14px;\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-access-plan-restrictions a {\n color: #c05621;\n}\n.llms-access-plan-restrictions a:hover {\n color: #f67d28;\n}\n\n.llms-access-plan-footer {\n border-bottom: 3px solid #f1f1f1;\n border-bottom-left-radius: 6px;\n border-bottom-right-radius: 6px;\n padding: 15px;\n margin: 0 2px 2px 2px;\n}\n.llms-access-plan-footer .button {\n display: inline-block;\n}\n.llms-access-plan-footer .llms-access-plan-pricing {\n padding: 0 0 10px;\n}\n\n.webui-popover-content .llms-members-only-restrictions {\n text-align: center;\n}\n.webui-popover-content .llms-members-only-restrictions ul, .webui-popover-content .llms-members-only-restrictions ol, .webui-popover-content .llms-members-only-restrictions li, .webui-popover-content .llms-members-only-restrictions p {\n margin: 0;\n padding: 0;\n}\n.webui-popover-content .llms-members-only-restrictions ul, .webui-popover-content .llms-members-only-restrictions ol, .webui-popover-content .llms-members-only-restrictions li {\n list-style-type: none;\n}\n.webui-popover-content .llms-members-only-restrictions li {\n padding: 8px 0;\n border-top: 1px solid #3b3b3b;\n}\n.webui-popover-content .llms-members-only-restrictions li:first-child {\n border-top: none;\n}\n.webui-popover-content .llms-members-only-restrictions li a {\n display: block;\n}\n\n.llms-checkout-wrapper .llms-person-login-form-wrapper {\n margin-bottom: 40px;\n}\n.llms-checkout-wrapper form.llms-login {\n display: none;\n}\n.llms-checkout-wrapper .llms-form-heading {\n margin: 0 0 20px;\n}\n\n.llms-checkout {\n position: relative;\n}\n\n.llms-checkout-cols-2.llms-col-2 section {\n background-color: #fefefe;\n border: 1px solid #ccc;\n border-radius: 12px;\n padding: 20px;\n}\n.llms-checkout-cols-2.llms-col-2 section .llms-form-heading {\n padding: 0;\n}\n@media all and (min-width: 800px) {\n .llms-checkout-cols-2 .llms-checkout-col {\n float: left;\n }\n .llms-checkout-cols-2 .llms-checkout-col.llms-col-1 {\n margin-right: 20px;\n width: calc(58% - 20px);\n }\n .llms-checkout-cols-2 .llms-checkout-col.llms-col-2 {\n margin-left: 20px;\n width: calc(42% - 20px);\n }\n .llms-checkout-cols-2 .llms-checkout-col.llms-col-2 button {\n width: 100%;\n }\n}\n\n.llms-checkout-section {\n margin-bottom: 40px;\n position: relative;\n}\n\n.llms-checkout-section-content.llms-form-fields {\n margin: 0px;\n}\n.llms-checkout-section-content .llms-label {\n font-weight: 400;\n}\n.llms-checkout-section-content .llms-order-summary {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-checkout-section-content .llms-order-summary li {\n list-style-type: none;\n margin: 0 0 15px 0;\n}\n.llms-checkout-section-content .llms-order-summary :not(.llms-label) {\n font-weight: 700;\n}\n.llms-checkout-section-content .llms-order-summary li.llms-pricing.on-sale .price-regular, .llms-checkout-section-content .llms-order-summary li.llms-pricing.has-coupon .price-regular {\n text-decoration: line-through;\n}\n.llms-checkout-section-content .llms-coupon-wrapper {\n border-top: 1px solid #dedede;\n margin-top: 20px;\n padding-top: 20px;\n}\n.llms-checkout-section-content .llms-coupon-wrapper .llms-coupon-entry {\n display: none;\n margin-top: 20px;\n}\n\n.llms-form-field.llms-payment-gateway-option {\n align-items: center;\n display: flex;\n gap: 8px;\n}\n.llms-form-field.llms-payment-gateway-option label + span.llms-description {\n display: inline-block;\n margin-left: 5px;\n}\n.llms-form-field.llms-payment-gateway-option .llms-description a {\n border: none;\n box-shadow: none;\n text-decoration: none;\n}\n.llms-form-field.llms-payment-gateway-option .llms-description img {\n display: inline;\n max-height: 22px;\n vertical-align: middle;\n}\n\n.llms-checkout-wrapper ul.llms-payment-gateways {\n margin: 5px 0 0;\n padding: 0;\n}\n\nul.llms-payment-gateways {\n list-style-type: none;\n}\nul.llms-payment-gateways li:last-child:after {\n border-bottom: 1px solid #dedede;\n content: \"\";\n display: block;\n margin: 20px 0;\n}\nul.llms-payment-gateways .llms-payment-gateway {\n margin-bottom: 30px;\n list-style-type: none;\n}\nul.llms-payment-gateways .llms-payment-gateway:last-child {\n margin-bottom: none;\n}\nul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-payment-gateway-option label {\n font-weight: 700;\n}\nul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields {\n display: block;\n}\nul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields .llms-notice {\n margin-left: 10px;\n margin-right: 10px;\n}\nul.llms-payment-gateways .llms-payment-gateway .llms-form-field {\n padding-bottom: 0;\n}\nul.llms-payment-gateways .llms-gateway-description {\n margin-left: 40px;\n}\nul.llms-payment-gateways .llms-gateway-fields {\n display: none;\n margin: 5px 0 20px;\n}\nul.llms-payment-gateways .llms-payment-gateway-error {\n padding: 0 10px;\n}\n\n.llms-checkout-confirm {\n margin: 0;\n}\n\n.llms-payment-method {\n margin: 10px 10px 0;\n}\n\n.llms-gateway-description p {\n font-size: 14px;\n font-style: italic;\n margin: 0;\n}\n\n.llms-form-fields {\n box-sizing: border-box;\n}\n.llms-form-fields * {\n box-sizing: border-box;\n}\n.llms-form-fields.flush .llms-form-field {\n padding: 0 0 20px;\n}\n.llms-form-fields label:not(.llms-field-html label) {\n font-weight: 700;\n}\n.llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {\n margin-bottom: 0;\n}\n\n.llms-form-heading {\n padding: 0 10px 10px;\n}\n\n.llms-form-field {\n float: left;\n padding: 0 10px 20px;\n position: relative;\n width: 100%;\n}\n.llms-form-field label:empty:after {\n content: \" \";\n}\n.llms-form-field [type=text],\n.llms-form-field [type=password],\n.llms-form-field [type=email],\n.llms-form-field [type=url],\n.llms-form-field [type=tel],\n.llms-form-field [type=number] {\n background-color: #fefefe;\n background-clip: padding-box;\n border: 1px solid #999;\n border-radius: 6px;\n box-sizing: border-box;\n font-size: 16px;\n line-height: 1;\n padding: 8px 12px;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n width: 100%;\n}\n.llms-form-field input:focus,\n.llms-form-field input:focus-visible {\n border-color: #6888df;\n outline: thin solid;\n}\n.llms-form-field select {\n -webkit-appearance: none;\n -moz-appearance: none;\n -ms-appearance: none;\n appearance: none;\n background-color: #fefefe;\n border: 1px solid #999;\n border-radius: 6px;\n box-sizing: border-box;\n color: #010101;\n padding: 8px 12px;\n margin: 0;\n width: 100%;\n font-family: inherit;\n font-size: 16px;\n cursor: inherit;\n line-height: 1.6;\n z-index: 1;\n outline: none;\n background-repeat: no-repeat;\n background-image: linear-gradient(45deg, transparent 50%, currentcolor 50%), linear-gradient(135deg, currentcolor 50%, transparent 50%);\n background-position: right 15px top 1.3rem, right 10px top 1.3rem;\n background-size: 5px 5px, 5px 5px;\n}\n.llms-form-field select::-ms-expand {\n display: none;\n}\n.llms-form-field select:focus {\n border: 1px solid #6888df;\n outline: thin solid;\n}\n.llms-form-field.valid input[type=date], .llms-form-field.valid input[type=time], .llms-form-field.valid input[type=datetime-local], .llms-form-field.valid input[type=week], .llms-form-field.valid input[type=month], .llms-form-field.valid input[type=text], .llms-form-field.valid input[type=email], .llms-form-field.valid input[type=url], .llms-form-field.valid input[type=password], .llms-form-field.valid input[type=search], .llms-form-field.valid input[type=tel], .llms-form-field.valid input[type=number], .llms-form-field.valid textarea, .llms-form-field.valid select {\n background: rgba(131, 195, 115, 0.3);\n border-color: #83c373;\n}\n.llms-form-field.error input[type=date], .llms-form-field.error input[type=time], .llms-form-field.error input[type=datetime-local], .llms-form-field.error input[type=week], .llms-form-field.error input[type=month], .llms-form-field.error input[type=text], .llms-form-field.error input[type=email], .llms-form-field.error input[type=url], .llms-form-field.error input[type=password], .llms-form-field.error input[type=search], .llms-form-field.error input[type=tel], .llms-form-field.error input[type=number], .llms-form-field.error textarea, .llms-form-field.error select, .llms-form-field.invalid input[type=date], .llms-form-field.invalid input[type=time], .llms-form-field.invalid input[type=datetime-local], .llms-form-field.invalid input[type=week], .llms-form-field.invalid input[type=month], .llms-form-field.invalid input[type=text], .llms-form-field.invalid input[type=email], .llms-form-field.invalid input[type=url], .llms-form-field.invalid input[type=password], .llms-form-field.invalid input[type=search], .llms-form-field.invalid input[type=tel], .llms-form-field.invalid input[type=number], .llms-form-field.invalid textarea, .llms-form-field.invalid select {\n background: rgba(187, 35, 28, 0.3);\n border-color: #bb231c;\n}\n.llms-form-field.llms-visually-hidden-field {\n display: none;\n}\n.llms-form-field.align-right {\n text-align: right;\n}\n@media screen and (min-width: 600px) {\n .llms-form-field.llms-cols-1 {\n width: 8.3333333333%;\n }\n .llms-form-field.llms-cols-2 {\n width: 16.6666666667%;\n }\n .llms-form-field.llms-cols-3 {\n width: 25%;\n }\n .llms-form-field.llms-cols-4 {\n width: 33.3333333333%;\n }\n .llms-form-field.llms-cols-5 {\n width: 41.6666666667%;\n }\n .llms-form-field.llms-cols-6 {\n width: 50%;\n }\n .llms-form-field.llms-cols-7 {\n width: 58.3333333333%;\n }\n .llms-form-field.llms-cols-8 {\n width: 66.6666666667%;\n }\n .llms-form-field.llms-cols-9 {\n width: 75%;\n }\n .llms-form-field.llms-cols-10 {\n width: 83.3333333333%;\n }\n .llms-form-field.llms-cols-11 {\n width: 91.6666666667%;\n }\n .llms-form-field.llms-cols-12 {\n width: 100%;\n }\n}\n.llms-form-field.type-hidden {\n padding: 0;\n}\n.llms-form-field.type-radio input,\n.llms-form-field.type-radio label, .llms-form-field.type-checkbox input,\n.llms-form-field.type-checkbox label {\n display: inline-block;\n width: auto;\n}\n.llms-form-field.type-radio input, .llms-form-field.type-checkbox input {\n margin-right: 10px;\n}\n.llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {\n display: block;\n}\n.llms-form-field.type-radio:not(.is-group) input[type=radio] {\n position: absolute;\n opacity: 0;\n visibility: none;\n}\n.llms-form-field.type-radio:not(.is-group) label:before {\n background: #fafafa;\n background-position: -24px 0;\n background-repeat: no-repeat;\n border-radius: 50%;\n box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;\n content: \"\";\n cursor: pointer;\n display: inline-block;\n height: 22px;\n margin-right: 5px;\n position: relative;\n transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);\n top: -3px;\n vertical-align: middle;\n width: 22px;\n z-index: 2;\n}\n.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked + label:before {\n transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);\n background-position: 0 0;\n background-image: radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%);\n}\n.llms-form-field .llms-input-group {\n margin-top: 5px;\n}\n.llms-form-field .llms-input-group .llms-form-field {\n padding: 0 0 5px 5px;\n}\n.llms-form-field.type-reset button:not(.auto), .llms-form-field.type-button button:not(.auto), .llms-form-field.type-submit button:not(.auto) {\n width: 100%;\n}\n.llms-form-field .llms-description {\n font-size: 14px;\n font-style: italic;\n line-height: 18px;\n}\n.llms-form-field .llms-required {\n color: #bb231c;\n margin-left: 4px;\n}\n.llms-form-field input, .llms-form-field textarea, .llms-form-field select {\n width: 100%;\n margin-bottom: 5px;\n}\n.llms-form-field .select2-container .select2-selection--single {\n height: auto;\n padding: 4px 6px;\n}\n.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {\n height: 100%;\n}\n\n.llms-password-strength-meter {\n border: 1px solid #dadada;\n display: none;\n font-size: 10px;\n margin-top: -10px;\n padding: 1px;\n position: relative;\n text-align: center;\n}\n.llms-password-strength-meter:before {\n bottom: 0;\n content: \"\";\n left: 0;\n position: absolute;\n top: 0;\n transition: width 0.4s ease;\n}\n.llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {\n border-color: #e35b5b;\n}\n.llms-password-strength-meter.mismatch:before, .llms-password-strength-meter.too-short:before, .llms-password-strength-meter.very-weak:before {\n background: rgba(227, 91, 91, 0.25);\n width: 25%;\n}\n.llms-password-strength-meter.too-short:before {\n width: 0;\n}\n.llms-password-strength-meter.weak {\n border-color: #f78b53;\n}\n.llms-password-strength-meter.weak:before {\n background: rgba(247, 139, 83, 0.25);\n width: 50%;\n}\n.llms-password-strength-meter.medium {\n border-color: #ffc733;\n}\n.llms-password-strength-meter.medium:before {\n background: rgba(255, 199, 51, 0.25);\n width: 75%;\n}\n.llms-password-strength-meter.strong {\n border-color: #83c373;\n}\n.llms-password-strength-meter.strong:before {\n background: rgba(131, 195, 115, 0.25);\n width: 100%;\n}\n.llms-password-strength-meter + .llms-description {\n display: block;\n}\n\n.llms-widget-syllabus--collapsible .llms-section .section-header {\n cursor: pointer;\n}\n.llms-widget-syllabus--collapsible .llms-section.llms-section--opened .llms-collapse-caret .fa-caret-right {\n display: none;\n}\n.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-collapse-caret .fa-caret-down {\n display: none;\n}\n.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-lesson {\n display: none;\n}\n.llms-widget-syllabus--collapsible .llms-syllabus-footer {\n text-align: left;\n}\n\n.llms-student-dashboard {\n /**\n * Dashboard Home\n */\n}\n.llms-student-dashboard .llms-sd-title {\n align-items: center;\n display: flex;\n gap: 15px;\n margin: 40px 0 20px 0;\n}\n.llms-student-dashboard .llms-sd-title small {\n font-size: 18px;\n}\n.llms-student-dashboard .llms-sd-title small + a {\n text-decoration: none;\n}\n.llms-student-dashboard .llms-sd-items {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-student-dashboard .llms-sd-item {\n display: inline-block;\n list-style-type: none;\n margin: 5px 0;\n padding: 0;\n}\n.llms-student-dashboard .llms-sd-item:last-child .llms-sep {\n display: none;\n}\n.llms-student-dashboard .llms-sd-item .llms-sep {\n color: #666;\n margin: 0 5px;\n}\n.llms-student-dashboard .llms-sd-section h2 {\n margin: 0 0 15px 0;\n}\n.llms-student-dashboard .llms-sd-section .llms-sd-section-title {\n margin: 0;\n padding: 0;\n}\n.llms-student-dashboard .llms-sd-section .llms-sd-section-footer {\n margin-top: 10px;\n}\n.llms-student-dashboard .llms-sd-section .llms-sd-section-footer .llms-button-secondary {\n display: inline-block;\n}\n.llms-student-dashboard .orders-table {\n border: 1px solid #dedede;\n border-spacing: 0;\n width: 100%;\n}\n.llms-student-dashboard .orders-table thead {\n display: none;\n}\n.llms-student-dashboard .orders-table thead th, .llms-student-dashboard .orders-table thead td {\n font-weight: 700;\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .orders-table thead {\n display: table-header-group;\n }\n}\n.llms-student-dashboard .orders-table tbody tr:nth-child(odd) td, .llms-student-dashboard .orders-table tbody tr:nth-child(odd) th {\n background: #f9f9f9;\n}\n.llms-student-dashboard .orders-table tbody tr:last-child {\n border-bottom-width: 0;\n}\n.llms-student-dashboard .orders-table tfoot tr {\n background: #f9f9f9;\n}\n.llms-student-dashboard .orders-table tfoot th, .llms-student-dashboard .orders-table tfoot td {\n padding: 10px;\n text-align: right;\n}\n.llms-student-dashboard .orders-table tfoot th:last-child, .llms-student-dashboard .orders-table tfoot td:last-child {\n border-bottom-width: 0;\n}\n.llms-student-dashboard .orders-table th {\n font-weight: 700;\n}\n.llms-student-dashboard .orders-table th, .llms-student-dashboard .orders-table td {\n border-color: #dedede;\n border-style: solid;\n border-width: 0;\n display: block;\n padding: 15px 20px;\n text-align: center;\n}\n.llms-student-dashboard .orders-table th .llms-button-primary, .llms-student-dashboard .orders-table td .llms-button-primary {\n display: inline-block;\n}\n.llms-student-dashboard .orders-table th:last-child, .llms-student-dashboard .orders-table td:last-child {\n border-bottom-width: 1px;\n}\n.llms-student-dashboard .orders-table th:before, .llms-student-dashboard .orders-table td:before {\n content: attr(data-label);\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .orders-table th, .llms-student-dashboard .orders-table td {\n border-bottom-width: 1px;\n display: table-cell;\n text-align: left;\n }\n .llms-student-dashboard .orders-table th:first-child, .llms-student-dashboard .orders-table td:first-child {\n width: 220px;\n }\n .llms-student-dashboard .orders-table th:before, .llms-student-dashboard .orders-table td:before {\n display: none;\n }\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .orders-table.transactions th:first-child {\n width: auto;\n }\n}\n.llms-student-dashboard .llms-status {\n border-radius: 6px;\n display: inline-block;\n font-size: 13px;\n font-weight: 700;\n line-height: 1.4;\n padding: 2px 6px;\n vertical-align: middle;\n}\n.llms-student-dashboard .llms-status.llms-size--large {\n font-size: 105%;\n padding: 6px 12px;\n}\n.llms-student-dashboard .llms-status.llms-active, .llms-student-dashboard .llms-status.llms-completed, .llms-student-dashboard .llms-status.llms-pass, .llms-student-dashboard .llms-status.llms-txn-succeeded {\n color: #4d8d3c;\n background-color: rgba(77, 141, 60, 0.15);\n}\n.llms-student-dashboard .llms-status.llms-fail, .llms-student-dashboard .llms-status.llms-failed, .llms-student-dashboard .llms-status.llms-expired, .llms-student-dashboard .llms-status.llms-cancelled, .llms-student-dashboard .llms-status.llms-txn-failed {\n color: #bb231c;\n background-color: rgba(187, 35, 28, 0.15);\n}\n.llms-student-dashboard .llms-status.llms-incomplete, .llms-student-dashboard .llms-status.llms-on-hold, .llms-student-dashboard .llms-status.llms-pending, .llms-student-dashboard .llms-status.llms-pending-cancel, .llms-student-dashboard .llms-status.llms-refunded, .llms-student-dashboard .llms-status.llms-txn-pending, .llms-student-dashboard .llms-status.llms-txn-refunded {\n color: #c05621;\n background-color: rgba(192, 86, 33, 0.15);\n}\n.llms-student-dashboard .order-title .llms-status {\n font-size: 18px;\n}\n.llms-student-dashboard .llms-person-form-wrapper .llms-change-password {\n display: none;\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .order-primary {\n float: left;\n width: 68%;\n }\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .order-secondary {\n float: left;\n width: 32%;\n }\n}\n.llms-student-dashboard .order-secondary form {\n margin-bottom: 0;\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .llms-view-order.llms-stack-cols .order-primary,\n.llms-student-dashboard .llms-view-order.llms-stack-cols .order-secondary {\n float: none;\n width: 100%;\n }\n}\n.llms-student-dashboard .llms-switch-payment-source .llms-notice,\n.llms-student-dashboard .llms-switch-payment-source .entry-content .llms-notice {\n margin-left: 10px;\n margin-right: 10px;\n}\n.llms-student-dashboard .llms-switch-payment-source-main {\n border: none;\n display: none;\n margin: 0;\n}\n.llms-student-dashboard .llms-switch-payment-source-main ul.llms-payment-gateways {\n padding: 10px 15px 0;\n margin: 0;\n}\n.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method,\n.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary {\n padding: 0 25px 10px;\n margin: 0;\n list-style-type: none;\n}\n.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method li,\n.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary li {\n list-style-type: none;\n}\n.llms-student-dashboard.dashboard .llms-sd-section {\n border: 1px solid #dedede;\n border-radius: 6px;\n padding: 20px;\n margin-bottom: 40px;\n}\n.llms-student-dashboard .llms-loop-list {\n margin: 0 -10px;\n}\n\n.llms-sd-grades .llms-table .llms-progress {\n display: block;\n margin: 0;\n}\n.llms-sd-grades .llms-table .llms-progress .llms-progress-bar {\n top: 0;\n height: 1.4em;\n}\n.llms-sd-grades .llms-table .llms-progress .progress__indicator {\n font-size: 1em;\n position: relative;\n right: 0.4em;\n top: 0.2em;\n z-index: 1;\n}\n\n.llms-table.llms-single-course-grades tbody tr:first-child td, .llms-table.llms-single-course-grades tbody tr:first-child th {\n background-color: #eaeaea;\n}\n.llms-table.llms-single-course-grades th {\n font-weight: 400;\n text-align: left;\n}\n.llms-table.llms-single-course-grades td .llms-donut {\n display: inline-block;\n vertical-align: middle;\n}\n.llms-table.llms-single-course-grades td .llms-status {\n margin-right: 4px;\n}\n.llms-table.llms-single-course-grades td .llms-donut + .llms-status {\n margin-left: 4px;\n}\n.llms-table.llms-single-course-grades th.llms-section_title {\n font-size: 110%;\n font-weight: 700;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title {\n max-width: 40%;\n}\n.llms-table.llms-single-course-grades td.llms-associated_quiz .llms-donut {\n display: inline-block;\n margin-right: 5px;\n vertical-align: middle;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title a[href=\"#\"] {\n pointer-events: none;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title a[href^=\"#\"] {\n color: inherit;\n position: relative;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title a[href^=\"#\"] .llms-tooltip {\n max-width: 380px;\n width: 380px;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title a[href^=\"#\"] .llms-tooltip.show {\n top: -54px;\n}\n\n.llms-sd-widgets {\n display: flex;\n}\n.llms-sd-widgets .llms-sd-widget {\n background: #fefefe;\n border: 1px solid #dedede;\n border-bottom-right-radius: 6px;\n border-bottom-left-radius: 6px;\n flex: 1;\n margin: 10px 10px 20px;\n padding: 0 0 20px;\n}\n.llms-sd-widgets .llms-sd-widget:first-child {\n margin-left: 0;\n}\n.llms-sd-widgets .llms-sd-widget:last-child {\n margin-right: 0;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-widget-title {\n background: #466dd8;\n color: #fff;\n font-size: 18px;\n line-height: 1;\n margin: 0 0 20px;\n padding: 10px;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-widget-empty {\n font-size: 14px;\n font-style: italic;\n opacity: 0.5;\n text-align: center;\n}\n.llms-sd-widgets .llms-sd-widget .llms-donut {\n margin: 0 auto;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-date {\n opacity: 0.8;\n text-align: center;\n font-size: 22px;\n line-height: 1.1;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-date span {\n display: block;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-date span.day {\n font-size: 52px;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-date span.diff {\n font-size: 12px;\n font-style: italic;\n margin-top: 8px;\n opacity: 0.75;\n}\n.llms-sd-widgets .llms-sd-widget .llms-achievement {\n background: transparent;\n margin: 0 auto;\n max-width: 120px;\n}\n.llms-sd-widgets .llms-sd-widget .llms-achievement .llms-achievement-title {\n display: none;\n}\n\n.redeem-voucher .form-row label {\n display: block;\n font-weight: 700;\n}\n.redeem-voucher .form-row input[type=text] {\n background-color: #fefefe;\n background-clip: padding-box;\n border: 1px solid #999;\n border-radius: 6px;\n box-sizing: border-box;\n font-size: 16px;\n line-height: 1;\n padding: 8px 12px;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n.llms-sd-pagination {\n margin-top: 24px;\n}\n.llms-sd-pagination:before, .llms-sd-pagination:after {\n content: \" \";\n display: table;\n}\n.llms-sd-pagination:after {\n clear: both;\n}\n.llms-sd-pagination .llms-button-secondary {\n display: inline-block;\n}\n.llms-sd-pagination .llms-button-secondary.prev {\n float: left;\n}\n.llms-sd-pagination .llms-button-secondary.next {\n float: right;\n}\n\n.llms-sd-notification-center {\n background: #fefefe;\n border: 1px solid #dedede;\n border-radius: 6px;\n padding: 20px;\n}\n.llms-sd-notification-center .llms-notification-list-item .llms-notification {\n z-index: 1;\n}\n.llms-sd-notification-center .llms-notification-list-item .llms-notification:hover {\n background-color: inherit;\n}\n\n.llms-table {\n border: 1px solid #dedede;\n border-spacing: 0;\n width: 100%;\n}\n.llms-table thead th, .llms-table thead td {\n font-weight: 700;\n}\n.llms-table tbody tr:nth-child(odd) td, .llms-table tbody tr:nth-child(odd) th {\n background: #f9f9f9;\n}\n.llms-table tbody tr:last-child {\n border-bottom-width: 0;\n}\n.llms-table tfoot tr {\n background: #f9f9f9;\n}\n.llms-table tfoot tr .llms-pagination .page-numbers {\n margin: 0;\n}\n.llms-table tfoot tr .llms-table-sort {\n text-align: right;\n}\n.llms-table tfoot tr .llms-table-sort form, .llms-table tfoot tr .llms-table-sort select, .llms-table tfoot tr .llms-table-sort input, .llms-table tfoot tr .llms-table-sort button {\n margin: 0;\n}\n.llms-table th {\n font-weight: 700;\n}\n.llms-table th, .llms-table td {\n border-bottom: 1px solid #dedede;\n padding: 15px 20px;\n}\n.llms-table th:first-child, .llms-table td:first-child {\n padding-left: 12px;\n}\n.llms-table th:last-child, .llms-table td:last-child {\n padding-right: 12px;\n}\n\n#page .llms-table tfoot label {\n display: inline;\n}\n\n#page .llms-table tfoot select {\n height: auto;\n}\n\n/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n font-family: \"FontAwesome\";\n src: url(\"../fonts/fontawesome-webfont.eot?v=4.7.0\");\n src: url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0\") format(\"embedded-opentype\"), url(\"../fonts/fontawesome-webfont.woff2?v=4.7.0\") format(\"woff2\"), url(\"../fonts/fontawesome-webfont.woff?v=4.7.0\") format(\"woff\"), url(\"../fonts/fontawesome-webfont.ttf?v=4.7.0\") format(\"truetype\"), url(\"../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n.fa {\n display: inline-block;\n font: normal normal normal 14px/1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n font-size: 1.33333333em;\n line-height: 0.75em;\n vertical-align: -15%;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-fw {\n width: 1.28571429em;\n text-align: center;\n}\n\n.fa-ul {\n padding-left: 0;\n margin-left: 2.14285714em;\n list-style-type: none;\n}\n\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n position: absolute;\n left: -2.14285714em;\n width: 2.14285714em;\n top: 0.14285714em;\n text-align: center;\n}\n\n.fa-li.fa-lg {\n left: -1.85714286em;\n}\n\n.fa-border {\n padding: 0.2em 0.25em 0.15em;\n border: solid 0.08em #eeeeee;\n border-radius: 0.1em;\n}\n\n.fa-pull-left {\n float: left;\n}\n\n.fa-pull-right {\n float: right;\n}\n\n.fa.fa-pull-left {\n margin-right: 0.3em;\n}\n\n.fa.fa-pull-right {\n margin-left: 0.3em;\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right {\n float: right;\n}\n\n.pull-left {\n float: left;\n}\n\n.fa.pull-left {\n margin-right: 0.3em;\n}\n\n.fa.pull-right {\n margin-left: 0.3em;\n}\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n -ms-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n -ms-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n -ms-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n -ms-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n filter: none;\n}\n\n.fa-stack {\n position: relative;\n display: inline-block;\n width: 2em;\n height: 2em;\n line-height: 2em;\n vertical-align: middle;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n position: absolute;\n left: 0;\n width: 100%;\n text-align: center;\n}\n\n.fa-stack-1x {\n line-height: inherit;\n}\n\n.fa-stack-2x {\n font-size: 2em;\n}\n\n.fa-inverse {\n color: #ffffff;\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters that represent icons */\n.fa-glass:before {\n content: \"\\f000\";\n}\n\n.fa-music:before {\n content: \"\\f001\";\n}\n\n.fa-search:before {\n content: \"\\f002\";\n}\n\n.fa-envelope-o:before {\n content: \"\\f003\";\n}\n\n.fa-heart:before {\n content: \"\\f004\";\n}\n\n.fa-star:before {\n content: \"\\f005\";\n}\n\n.fa-star-o:before {\n content: \"\\f006\";\n}\n\n.fa-user:before {\n content: \"\\f007\";\n}\n\n.fa-film:before {\n content: \"\\f008\";\n}\n\n.fa-th-large:before {\n content: \"\\f009\";\n}\n\n.fa-th:before {\n content: \"\\f00a\";\n}\n\n.fa-th-list:before {\n content: \"\\f00b\";\n}\n\n.fa-check:before {\n content: \"\\f00c\";\n}\n\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n content: \"\\f00d\";\n}\n\n.fa-search-plus:before {\n content: \"\\f00e\";\n}\n\n.fa-search-minus:before {\n content: \"\\f010\";\n}\n\n.fa-power-off:before {\n content: \"\\f011\";\n}\n\n.fa-signal:before {\n content: \"\\f012\";\n}\n\n.fa-gear:before,\n.fa-cog:before {\n content: \"\\f013\";\n}\n\n.fa-trash-o:before {\n content: \"\\f014\";\n}\n\n.fa-home:before {\n content: \"\\f015\";\n}\n\n.fa-file-o:before {\n content: \"\\f016\";\n}\n\n.fa-clock-o:before {\n content: \"\\f017\";\n}\n\n.fa-road:before {\n content: \"\\f018\";\n}\n\n.fa-download:before {\n content: \"\\f019\";\n}\n\n.fa-arrow-circle-o-down:before {\n content: \"\\f01a\";\n}\n\n.fa-arrow-circle-o-up:before {\n content: \"\\f01b\";\n}\n\n.fa-inbox:before {\n content: \"\\f01c\";\n}\n\n.fa-play-circle-o:before {\n content: \"\\f01d\";\n}\n\n.fa-rotate-right:before,\n.fa-repeat:before {\n content: \"\\f01e\";\n}\n\n.fa-refresh:before {\n content: \"\\f021\";\n}\n\n.fa-list-alt:before {\n content: \"\\f022\";\n}\n\n.fa-lock:before {\n content: \"\\f023\";\n}\n\n.fa-flag:before {\n content: \"\\f024\";\n}\n\n.fa-headphones:before {\n content: \"\\f025\";\n}\n\n.fa-volume-off:before {\n content: \"\\f026\";\n}\n\n.fa-volume-down:before {\n content: \"\\f027\";\n}\n\n.fa-volume-up:before {\n content: \"\\f028\";\n}\n\n.fa-qrcode:before {\n content: \"\\f029\";\n}\n\n.fa-barcode:before {\n content: \"\\f02a\";\n}\n\n.fa-tag:before {\n content: \"\\f02b\";\n}\n\n.fa-tags:before {\n content: \"\\f02c\";\n}\n\n.fa-book:before {\n content: \"\\f02d\";\n}\n\n.fa-bookmark:before {\n content: \"\\f02e\";\n}\n\n.fa-print:before {\n content: \"\\f02f\";\n}\n\n.fa-camera:before {\n content: \"\\f030\";\n}\n\n.fa-font:before {\n content: \"\\f031\";\n}\n\n.fa-bold:before {\n content: \"\\f032\";\n}\n\n.fa-italic:before {\n content: \"\\f033\";\n}\n\n.fa-text-height:before {\n content: \"\\f034\";\n}\n\n.fa-text-width:before {\n content: \"\\f035\";\n}\n\n.fa-align-left:before {\n content: \"\\f036\";\n}\n\n.fa-align-center:before {\n content: \"\\f037\";\n}\n\n.fa-align-right:before {\n content: \"\\f038\";\n}\n\n.fa-align-justify:before {\n content: \"\\f039\";\n}\n\n.fa-list:before {\n content: \"\\f03a\";\n}\n\n.fa-dedent:before,\n.fa-outdent:before {\n content: \"\\f03b\";\n}\n\n.fa-indent:before {\n content: \"\\f03c\";\n}\n\n.fa-video-camera:before {\n content: \"\\f03d\";\n}\n\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n content: \"\\f03e\";\n}\n\n.fa-pencil:before {\n content: \"\\f040\";\n}\n\n.fa-map-marker:before {\n content: \"\\f041\";\n}\n\n.fa-adjust:before {\n content: \"\\f042\";\n}\n\n.fa-tint:before {\n content: \"\\f043\";\n}\n\n.fa-edit:before,\n.fa-pencil-square-o:before {\n content: \"\\f044\";\n}\n\n.fa-share-square-o:before {\n content: \"\\f045\";\n}\n\n.fa-check-square-o:before {\n content: \"\\f046\";\n}\n\n.fa-arrows:before {\n content: \"\\f047\";\n}\n\n.fa-step-backward:before {\n content: \"\\f048\";\n}\n\n.fa-fast-backward:before {\n content: \"\\f049\";\n}\n\n.fa-backward:before {\n content: \"\\f04a\";\n}\n\n.fa-play:before {\n content: \"\\f04b\";\n}\n\n.fa-pause:before {\n content: \"\\f04c\";\n}\n\n.fa-stop:before {\n content: \"\\f04d\";\n}\n\n.fa-forward:before {\n content: \"\\f04e\";\n}\n\n.fa-fast-forward:before {\n content: \"\\f050\";\n}\n\n.fa-step-forward:before {\n content: \"\\f051\";\n}\n\n.fa-eject:before {\n content: \"\\f052\";\n}\n\n.fa-chevron-left:before {\n content: \"\\f053\";\n}\n\n.fa-chevron-right:before {\n content: \"\\f054\";\n}\n\n.fa-plus-circle:before {\n content: \"\\f055\";\n}\n\n.fa-minus-circle:before {\n content: \"\\f056\";\n}\n\n.fa-times-circle:before {\n content: \"\\f057\";\n}\n\n.fa-check-circle:before {\n content: \"\\f058\";\n}\n\n.fa-question-circle:before {\n content: \"\\f059\";\n}\n\n.fa-info-circle:before {\n content: \"\\f05a\";\n}\n\n.fa-crosshairs:before {\n content: \"\\f05b\";\n}\n\n.fa-times-circle-o:before {\n content: \"\\f05c\";\n}\n\n.fa-check-circle-o:before {\n content: \"\\f05d\";\n}\n\n.fa-ban:before {\n content: \"\\f05e\";\n}\n\n.fa-arrow-left:before {\n content: \"\\f060\";\n}\n\n.fa-arrow-right:before {\n content: \"\\f061\";\n}\n\n.fa-arrow-up:before {\n content: \"\\f062\";\n}\n\n.fa-arrow-down:before {\n content: \"\\f063\";\n}\n\n.fa-mail-forward:before,\n.fa-share:before {\n content: \"\\f064\";\n}\n\n.fa-expand:before {\n content: \"\\f065\";\n}\n\n.fa-compress:before {\n content: \"\\f066\";\n}\n\n.fa-plus:before {\n content: \"\\f067\";\n}\n\n.fa-minus:before {\n content: \"\\f068\";\n}\n\n.fa-asterisk:before {\n content: \"\\f069\";\n}\n\n.fa-exclamation-circle:before {\n content: \"\\f06a\";\n}\n\n.fa-gift:before {\n content: \"\\f06b\";\n}\n\n.fa-leaf:before {\n content: \"\\f06c\";\n}\n\n.fa-fire:before {\n content: \"\\f06d\";\n}\n\n.fa-eye:before {\n content: \"\\f06e\";\n}\n\n.fa-eye-slash:before {\n content: \"\\f070\";\n}\n\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n content: \"\\f071\";\n}\n\n.fa-plane:before {\n content: \"\\f072\";\n}\n\n.fa-calendar:before {\n content: \"\\f073\";\n}\n\n.fa-random:before {\n content: \"\\f074\";\n}\n\n.fa-comment:before {\n content: \"\\f075\";\n}\n\n.fa-magnet:before {\n content: \"\\f076\";\n}\n\n.fa-chevron-up:before {\n content: \"\\f077\";\n}\n\n.fa-chevron-down:before {\n content: \"\\f078\";\n}\n\n.fa-retweet:before {\n content: \"\\f079\";\n}\n\n.fa-shopping-cart:before {\n content: \"\\f07a\";\n}\n\n.fa-folder:before {\n content: \"\\f07b\";\n}\n\n.fa-folder-open:before {\n content: \"\\f07c\";\n}\n\n.fa-arrows-v:before {\n content: \"\\f07d\";\n}\n\n.fa-arrows-h:before {\n content: \"\\f07e\";\n}\n\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n content: \"\\f080\";\n}\n\n.fa-twitter-square:before {\n content: \"\\f081\";\n}\n\n.fa-facebook-square:before {\n content: \"\\f082\";\n}\n\n.fa-camera-retro:before {\n content: \"\\f083\";\n}\n\n.fa-key:before {\n content: \"\\f084\";\n}\n\n.fa-gears:before,\n.fa-cogs:before {\n content: \"\\f085\";\n}\n\n.fa-comments:before {\n content: \"\\f086\";\n}\n\n.fa-thumbs-o-up:before {\n content: \"\\f087\";\n}\n\n.fa-thumbs-o-down:before {\n content: \"\\f088\";\n}\n\n.fa-star-half:before {\n content: \"\\f089\";\n}\n\n.fa-heart-o:before {\n content: \"\\f08a\";\n}\n\n.fa-sign-out:before {\n content: \"\\f08b\";\n}\n\n.fa-linkedin-square:before {\n content: \"\\f08c\";\n}\n\n.fa-thumb-tack:before {\n content: \"\\f08d\";\n}\n\n.fa-external-link:before {\n content: \"\\f08e\";\n}\n\n.fa-sign-in:before {\n content: \"\\f090\";\n}\n\n.fa-trophy:before {\n content: \"\\f091\";\n}\n\n.fa-github-square:before {\n content: \"\\f092\";\n}\n\n.fa-upload:before {\n content: \"\\f093\";\n}\n\n.fa-lemon-o:before {\n content: \"\\f094\";\n}\n\n.fa-phone:before {\n content: \"\\f095\";\n}\n\n.fa-square-o:before {\n content: \"\\f096\";\n}\n\n.fa-bookmark-o:before {\n content: \"\\f097\";\n}\n\n.fa-phone-square:before {\n content: \"\\f098\";\n}\n\n.fa-twitter:before {\n content: \"\\f099\";\n}\n\n.fa-facebook-f:before,\n.fa-facebook:before {\n content: \"\\f09a\";\n}\n\n.fa-github:before {\n content: \"\\f09b\";\n}\n\n.fa-unlock:before {\n content: \"\\f09c\";\n}\n\n.fa-credit-card:before {\n content: \"\\f09d\";\n}\n\n.fa-feed:before,\n.fa-rss:before {\n content: \"\\f09e\";\n}\n\n.fa-hdd-o:before {\n content: \"\\f0a0\";\n}\n\n.fa-bullhorn:before {\n content: \"\\f0a1\";\n}\n\n.fa-bell:before {\n content: \"\\f0f3\";\n}\n\n.fa-certificate:before {\n content: \"\\f0a3\";\n}\n\n.fa-hand-o-right:before {\n content: \"\\f0a4\";\n}\n\n.fa-hand-o-left:before {\n content: \"\\f0a5\";\n}\n\n.fa-hand-o-up:before {\n content: \"\\f0a6\";\n}\n\n.fa-hand-o-down:before {\n content: \"\\f0a7\";\n}\n\n.fa-arrow-circle-left:before {\n content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-right:before {\n content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-up:before {\n content: \"\\f0aa\";\n}\n\n.fa-arrow-circle-down:before {\n content: \"\\f0ab\";\n}\n\n.fa-globe:before {\n content: \"\\f0ac\";\n}\n\n.fa-wrench:before {\n content: \"\\f0ad\";\n}\n\n.fa-tasks:before {\n content: \"\\f0ae\";\n}\n\n.fa-filter:before {\n content: \"\\f0b0\";\n}\n\n.fa-briefcase:before {\n content: \"\\f0b1\";\n}\n\n.fa-arrows-alt:before {\n content: \"\\f0b2\";\n}\n\n.fa-group:before,\n.fa-users:before {\n content: \"\\f0c0\";\n}\n\n.fa-chain:before,\n.fa-link:before {\n content: \"\\f0c1\";\n}\n\n.fa-cloud:before {\n content: \"\\f0c2\";\n}\n\n.fa-flask:before {\n content: \"\\f0c3\";\n}\n\n.fa-cut:before,\n.fa-scissors:before {\n content: \"\\f0c4\";\n}\n\n.fa-copy:before,\n.fa-files-o:before {\n content: \"\\f0c5\";\n}\n\n.fa-paperclip:before {\n content: \"\\f0c6\";\n}\n\n.fa-save:before,\n.fa-floppy-o:before {\n content: \"\\f0c7\";\n}\n\n.fa-square:before {\n content: \"\\f0c8\";\n}\n\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n content: \"\\f0c9\";\n}\n\n.fa-list-ul:before {\n content: \"\\f0ca\";\n}\n\n.fa-list-ol:before {\n content: \"\\f0cb\";\n}\n\n.fa-strikethrough:before {\n content: \"\\f0cc\";\n}\n\n.fa-underline:before {\n content: \"\\f0cd\";\n}\n\n.fa-table:before {\n content: \"\\f0ce\";\n}\n\n.fa-magic:before {\n content: \"\\f0d0\";\n}\n\n.fa-truck:before {\n content: \"\\f0d1\";\n}\n\n.fa-pinterest:before {\n content: \"\\f0d2\";\n}\n\n.fa-pinterest-square:before {\n content: \"\\f0d3\";\n}\n\n.fa-google-plus-square:before {\n content: \"\\f0d4\";\n}\n\n.fa-google-plus:before {\n content: \"\\f0d5\";\n}\n\n.fa-money:before {\n content: \"\\f0d6\";\n}\n\n.fa-caret-down:before {\n content: \"\\f0d7\";\n}\n\n.fa-caret-up:before {\n content: \"\\f0d8\";\n}\n\n.fa-caret-left:before {\n content: \"\\f0d9\";\n}\n\n.fa-caret-right:before {\n content: \"\\f0da\";\n}\n\n.fa-columns:before {\n content: \"\\f0db\";\n}\n\n.fa-unsorted:before,\n.fa-sort:before {\n content: \"\\f0dc\";\n}\n\n.fa-sort-down:before,\n.fa-sort-desc:before {\n content: \"\\f0dd\";\n}\n\n.fa-sort-up:before,\n.fa-sort-asc:before {\n content: \"\\f0de\";\n}\n\n.fa-envelope:before {\n content: \"\\f0e0\";\n}\n\n.fa-linkedin:before {\n content: \"\\f0e1\";\n}\n\n.fa-rotate-left:before,\n.fa-undo:before {\n content: \"\\f0e2\";\n}\n\n.fa-legal:before,\n.fa-gavel:before {\n content: \"\\f0e3\";\n}\n\n.fa-dashboard:before,\n.fa-tachometer:before {\n content: \"\\f0e4\";\n}\n\n.fa-comment-o:before {\n content: \"\\f0e5\";\n}\n\n.fa-comments-o:before {\n content: \"\\f0e6\";\n}\n\n.fa-flash:before,\n.fa-bolt:before {\n content: \"\\f0e7\";\n}\n\n.fa-sitemap:before {\n content: \"\\f0e8\";\n}\n\n.fa-umbrella:before {\n content: \"\\f0e9\";\n}\n\n.fa-paste:before,\n.fa-clipboard:before {\n content: \"\\f0ea\";\n}\n\n.fa-lightbulb-o:before {\n content: \"\\f0eb\";\n}\n\n.fa-exchange:before {\n content: \"\\f0ec\";\n}\n\n.fa-cloud-download:before {\n content: \"\\f0ed\";\n}\n\n.fa-cloud-upload:before {\n content: \"\\f0ee\";\n}\n\n.fa-user-md:before {\n content: \"\\f0f0\";\n}\n\n.fa-stethoscope:before {\n content: \"\\f0f1\";\n}\n\n.fa-suitcase:before {\n content: \"\\f0f2\";\n}\n\n.fa-bell-o:before {\n content: \"\\f0a2\";\n}\n\n.fa-coffee:before {\n content: \"\\f0f4\";\n}\n\n.fa-cutlery:before {\n content: \"\\f0f5\";\n}\n\n.fa-file-text-o:before {\n content: \"\\f0f6\";\n}\n\n.fa-building-o:before {\n content: \"\\f0f7\";\n}\n\n.fa-hospital-o:before {\n content: \"\\f0f8\";\n}\n\n.fa-ambulance:before {\n content: \"\\f0f9\";\n}\n\n.fa-medkit:before {\n content: \"\\f0fa\";\n}\n\n.fa-fighter-jet:before {\n content: \"\\f0fb\";\n}\n\n.fa-beer:before {\n content: \"\\f0fc\";\n}\n\n.fa-h-square:before {\n content: \"\\f0fd\";\n}\n\n.fa-plus-square:before {\n content: \"\\f0fe\";\n}\n\n.fa-angle-double-left:before {\n content: \"\\f100\";\n}\n\n.fa-angle-double-right:before {\n content: \"\\f101\";\n}\n\n.fa-angle-double-up:before {\n content: \"\\f102\";\n}\n\n.fa-angle-double-down:before {\n content: \"\\f103\";\n}\n\n.fa-angle-left:before {\n content: \"\\f104\";\n}\n\n.fa-angle-right:before {\n content: \"\\f105\";\n}\n\n.fa-angle-up:before {\n content: \"\\f106\";\n}\n\n.fa-angle-down:before {\n content: \"\\f107\";\n}\n\n.fa-desktop:before {\n content: \"\\f108\";\n}\n\n.fa-laptop:before {\n content: \"\\f109\";\n}\n\n.fa-tablet:before {\n content: \"\\f10a\";\n}\n\n.fa-mobile-phone:before,\n.fa-mobile:before {\n content: \"\\f10b\";\n}\n\n.fa-circle-o:before {\n content: \"\\f10c\";\n}\n\n.fa-quote-left:before {\n content: \"\\f10d\";\n}\n\n.fa-quote-right:before {\n content: \"\\f10e\";\n}\n\n.fa-spinner:before {\n content: \"\\f110\";\n}\n\n.fa-circle:before {\n content: \"\\f111\";\n}\n\n.fa-mail-reply:before,\n.fa-reply:before {\n content: \"\\f112\";\n}\n\n.fa-github-alt:before {\n content: \"\\f113\";\n}\n\n.fa-folder-o:before {\n content: \"\\f114\";\n}\n\n.fa-folder-open-o:before {\n content: \"\\f115\";\n}\n\n.fa-smile-o:before {\n content: \"\\f118\";\n}\n\n.fa-frown-o:before {\n content: \"\\f119\";\n}\n\n.fa-meh-o:before {\n content: \"\\f11a\";\n}\n\n.fa-gamepad:before {\n content: \"\\f11b\";\n}\n\n.fa-keyboard-o:before {\n content: \"\\f11c\";\n}\n\n.fa-flag-o:before {\n content: \"\\f11d\";\n}\n\n.fa-flag-checkered:before {\n content: \"\\f11e\";\n}\n\n.fa-terminal:before {\n content: \"\\f120\";\n}\n\n.fa-code:before {\n content: \"\\f121\";\n}\n\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n content: \"\\f122\";\n}\n\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n content: \"\\f123\";\n}\n\n.fa-location-arrow:before {\n content: \"\\f124\";\n}\n\n.fa-crop:before {\n content: \"\\f125\";\n}\n\n.fa-code-fork:before {\n content: \"\\f126\";\n}\n\n.fa-unlink:before,\n.fa-chain-broken:before {\n content: \"\\f127\";\n}\n\n.fa-question:before {\n content: \"\\f128\";\n}\n\n.fa-info:before {\n content: \"\\f129\";\n}\n\n.fa-exclamation:before {\n content: \"\\f12a\";\n}\n\n.fa-superscript:before {\n content: \"\\f12b\";\n}\n\n.fa-subscript:before {\n content: \"\\f12c\";\n}\n\n.fa-eraser:before {\n content: \"\\f12d\";\n}\n\n.fa-puzzle-piece:before {\n content: \"\\f12e\";\n}\n\n.fa-microphone:before {\n content: \"\\f130\";\n}\n\n.fa-microphone-slash:before {\n content: \"\\f131\";\n}\n\n.fa-shield:before {\n content: \"\\f132\";\n}\n\n.fa-calendar-o:before {\n content: \"\\f133\";\n}\n\n.fa-fire-extinguisher:before {\n content: \"\\f134\";\n}\n\n.fa-rocket:before {\n content: \"\\f135\";\n}\n\n.fa-maxcdn:before {\n content: \"\\f136\";\n}\n\n.fa-chevron-circle-left:before {\n content: \"\\f137\";\n}\n\n.fa-chevron-circle-right:before {\n content: \"\\f138\";\n}\n\n.fa-chevron-circle-up:before {\n content: \"\\f139\";\n}\n\n.fa-chevron-circle-down:before {\n content: \"\\f13a\";\n}\n\n.fa-html5:before {\n content: \"\\f13b\";\n}\n\n.fa-css3:before {\n content: \"\\f13c\";\n}\n\n.fa-anchor:before {\n content: \"\\f13d\";\n}\n\n.fa-unlock-alt:before {\n content: \"\\f13e\";\n}\n\n.fa-bullseye:before {\n content: \"\\f140\";\n}\n\n.fa-ellipsis-h:before {\n content: \"\\f141\";\n}\n\n.fa-ellipsis-v:before {\n content: \"\\f142\";\n}\n\n.fa-rss-square:before {\n content: \"\\f143\";\n}\n\n.fa-play-circle:before {\n content: \"\\f144\";\n}\n\n.fa-ticket:before {\n content: \"\\f145\";\n}\n\n.fa-minus-square:before {\n content: \"\\f146\";\n}\n\n.fa-minus-square-o:before {\n content: \"\\f147\";\n}\n\n.fa-level-up:before {\n content: \"\\f148\";\n}\n\n.fa-level-down:before {\n content: \"\\f149\";\n}\n\n.fa-check-square:before {\n content: \"\\f14a\";\n}\n\n.fa-pencil-square:before {\n content: \"\\f14b\";\n}\n\n.fa-external-link-square:before {\n content: \"\\f14c\";\n}\n\n.fa-share-square:before {\n content: \"\\f14d\";\n}\n\n.fa-compass:before {\n content: \"\\f14e\";\n}\n\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n content: \"\\f150\";\n}\n\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n content: \"\\f151\";\n}\n\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n content: \"\\f152\";\n}\n\n.fa-euro:before,\n.fa-eur:before {\n content: \"\\f153\";\n}\n\n.fa-gbp:before {\n content: \"\\f154\";\n}\n\n.fa-dollar:before,\n.fa-usd:before {\n content: \"\\f155\";\n}\n\n.fa-rupee:before,\n.fa-inr:before {\n content: \"\\f156\";\n}\n\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n content: \"\\f157\";\n}\n\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n content: \"\\f158\";\n}\n\n.fa-won:before,\n.fa-krw:before {\n content: \"\\f159\";\n}\n\n.fa-bitcoin:before,\n.fa-btc:before {\n content: \"\\f15a\";\n}\n\n.fa-file:before {\n content: \"\\f15b\";\n}\n\n.fa-file-text:before {\n content: \"\\f15c\";\n}\n\n.fa-sort-alpha-asc:before {\n content: \"\\f15d\";\n}\n\n.fa-sort-alpha-desc:before {\n content: \"\\f15e\";\n}\n\n.fa-sort-amount-asc:before {\n content: \"\\f160\";\n}\n\n.fa-sort-amount-desc:before {\n content: \"\\f161\";\n}\n\n.fa-sort-numeric-asc:before {\n content: \"\\f162\";\n}\n\n.fa-sort-numeric-desc:before {\n content: \"\\f163\";\n}\n\n.fa-thumbs-up:before {\n content: \"\\f164\";\n}\n\n.fa-thumbs-down:before {\n content: \"\\f165\";\n}\n\n.fa-youtube-square:before {\n content: \"\\f166\";\n}\n\n.fa-youtube:before {\n content: \"\\f167\";\n}\n\n.fa-xing:before {\n content: \"\\f168\";\n}\n\n.fa-xing-square:before {\n content: \"\\f169\";\n}\n\n.fa-youtube-play:before {\n content: \"\\f16a\";\n}\n\n.fa-dropbox:before {\n content: \"\\f16b\";\n}\n\n.fa-stack-overflow:before {\n content: \"\\f16c\";\n}\n\n.fa-instagram:before {\n content: \"\\f16d\";\n}\n\n.fa-flickr:before {\n content: \"\\f16e\";\n}\n\n.fa-adn:before {\n content: \"\\f170\";\n}\n\n.fa-bitbucket:before {\n content: \"\\f171\";\n}\n\n.fa-bitbucket-square:before {\n content: \"\\f172\";\n}\n\n.fa-tumblr:before {\n content: \"\\f173\";\n}\n\n.fa-tumblr-square:before {\n content: \"\\f174\";\n}\n\n.fa-long-arrow-down:before {\n content: \"\\f175\";\n}\n\n.fa-long-arrow-up:before {\n content: \"\\f176\";\n}\n\n.fa-long-arrow-left:before {\n content: \"\\f177\";\n}\n\n.fa-long-arrow-right:before {\n content: \"\\f178\";\n}\n\n.fa-apple:before {\n content: \"\\f179\";\n}\n\n.fa-windows:before {\n content: \"\\f17a\";\n}\n\n.fa-android:before {\n content: \"\\f17b\";\n}\n\n.fa-linux:before {\n content: \"\\f17c\";\n}\n\n.fa-dribbble:before {\n content: \"\\f17d\";\n}\n\n.fa-skype:before {\n content: \"\\f17e\";\n}\n\n.fa-foursquare:before {\n content: \"\\f180\";\n}\n\n.fa-trello:before {\n content: \"\\f181\";\n}\n\n.fa-female:before {\n content: \"\\f182\";\n}\n\n.fa-male:before {\n content: \"\\f183\";\n}\n\n.fa-gittip:before,\n.fa-gratipay:before {\n content: \"\\f184\";\n}\n\n.fa-sun-o:before {\n content: \"\\f185\";\n}\n\n.fa-moon-o:before {\n content: \"\\f186\";\n}\n\n.fa-archive:before {\n content: \"\\f187\";\n}\n\n.fa-bug:before {\n content: \"\\f188\";\n}\n\n.fa-vk:before {\n content: \"\\f189\";\n}\n\n.fa-weibo:before {\n content: \"\\f18a\";\n}\n\n.fa-renren:before {\n content: \"\\f18b\";\n}\n\n.fa-pagelines:before {\n content: \"\\f18c\";\n}\n\n.fa-stack-exchange:before {\n content: \"\\f18d\";\n}\n\n.fa-arrow-circle-o-right:before {\n content: \"\\f18e\";\n}\n\n.fa-arrow-circle-o-left:before {\n content: \"\\f190\";\n}\n\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n content: \"\\f191\";\n}\n\n.fa-dot-circle-o:before {\n content: \"\\f192\";\n}\n\n.fa-wheelchair:before {\n content: \"\\f193\";\n}\n\n.fa-vimeo-square:before {\n content: \"\\f194\";\n}\n\n.fa-turkish-lira:before,\n.fa-try:before {\n content: \"\\f195\";\n}\n\n.fa-plus-square-o:before {\n content: \"\\f196\";\n}\n\n.fa-space-shuttle:before {\n content: \"\\f197\";\n}\n\n.fa-slack:before {\n content: \"\\f198\";\n}\n\n.fa-envelope-square:before {\n content: \"\\f199\";\n}\n\n.fa-wordpress:before {\n content: \"\\f19a\";\n}\n\n.fa-openid:before {\n content: \"\\f19b\";\n}\n\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n content: \"\\f19c\";\n}\n\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n content: \"\\f19d\";\n}\n\n.fa-yahoo:before {\n content: \"\\f19e\";\n}\n\n.fa-google:before {\n content: \"\\f1a0\";\n}\n\n.fa-reddit:before {\n content: \"\\f1a1\";\n}\n\n.fa-reddit-square:before {\n content: \"\\f1a2\";\n}\n\n.fa-stumbleupon-circle:before {\n content: \"\\f1a3\";\n}\n\n.fa-stumbleupon:before {\n content: \"\\f1a4\";\n}\n\n.fa-delicious:before {\n content: \"\\f1a5\";\n}\n\n.fa-digg:before {\n content: \"\\f1a6\";\n}\n\n.fa-pied-piper-pp:before {\n content: \"\\f1a7\";\n}\n\n.fa-pied-piper-alt:before {\n content: \"\\f1a8\";\n}\n\n.fa-drupal:before {\n content: \"\\f1a9\";\n}\n\n.fa-joomla:before {\n content: \"\\f1aa\";\n}\n\n.fa-language:before {\n content: \"\\f1ab\";\n}\n\n.fa-fax:before {\n content: \"\\f1ac\";\n}\n\n.fa-building:before {\n content: \"\\f1ad\";\n}\n\n.fa-child:before {\n content: \"\\f1ae\";\n}\n\n.fa-paw:before {\n content: \"\\f1b0\";\n}\n\n.fa-spoon:before {\n content: \"\\f1b1\";\n}\n\n.fa-cube:before {\n content: \"\\f1b2\";\n}\n\n.fa-cubes:before {\n content: \"\\f1b3\";\n}\n\n.fa-behance:before {\n content: \"\\f1b4\";\n}\n\n.fa-behance-square:before {\n content: \"\\f1b5\";\n}\n\n.fa-steam:before {\n content: \"\\f1b6\";\n}\n\n.fa-steam-square:before {\n content: \"\\f1b7\";\n}\n\n.fa-recycle:before {\n content: \"\\f1b8\";\n}\n\n.fa-automobile:before,\n.fa-car:before {\n content: \"\\f1b9\";\n}\n\n.fa-cab:before,\n.fa-taxi:before {\n content: \"\\f1ba\";\n}\n\n.fa-tree:before {\n content: \"\\f1bb\";\n}\n\n.fa-spotify:before {\n content: \"\\f1bc\";\n}\n\n.fa-deviantart:before {\n content: \"\\f1bd\";\n}\n\n.fa-soundcloud:before {\n content: \"\\f1be\";\n}\n\n.fa-database:before {\n content: \"\\f1c0\";\n}\n\n.fa-file-pdf-o:before {\n content: \"\\f1c1\";\n}\n\n.fa-file-word-o:before {\n content: \"\\f1c2\";\n}\n\n.fa-file-excel-o:before {\n content: \"\\f1c3\";\n}\n\n.fa-file-powerpoint-o:before {\n content: \"\\f1c4\";\n}\n\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n content: \"\\f1c5\";\n}\n\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n content: \"\\f1c6\";\n}\n\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n content: \"\\f1c7\";\n}\n\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n content: \"\\f1c8\";\n}\n\n.fa-file-code-o:before {\n content: \"\\f1c9\";\n}\n\n.fa-vine:before {\n content: \"\\f1ca\";\n}\n\n.fa-codepen:before {\n content: \"\\f1cb\";\n}\n\n.fa-jsfiddle:before {\n content: \"\\f1cc\";\n}\n\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n content: \"\\f1cd\";\n}\n\n.fa-circle-o-notch:before {\n content: \"\\f1ce\";\n}\n\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n content: \"\\f1d0\";\n}\n\n.fa-ge:before,\n.fa-empire:before {\n content: \"\\f1d1\";\n}\n\n.fa-git-square:before {\n content: \"\\f1d2\";\n}\n\n.fa-git:before {\n content: \"\\f1d3\";\n}\n\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n content: \"\\f1d4\";\n}\n\n.fa-tencent-weibo:before {\n content: \"\\f1d5\";\n}\n\n.fa-qq:before {\n content: \"\\f1d6\";\n}\n\n.fa-wechat:before,\n.fa-weixin:before {\n content: \"\\f1d7\";\n}\n\n.fa-send:before,\n.fa-paper-plane:before {\n content: \"\\f1d8\";\n}\n\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n content: \"\\f1d9\";\n}\n\n.fa-history:before {\n content: \"\\f1da\";\n}\n\n.fa-circle-thin:before {\n content: \"\\f1db\";\n}\n\n.fa-header:before {\n content: \"\\f1dc\";\n}\n\n.fa-paragraph:before {\n content: \"\\f1dd\";\n}\n\n.fa-sliders:before {\n content: \"\\f1de\";\n}\n\n.fa-share-alt:before {\n content: \"\\f1e0\";\n}\n\n.fa-share-alt-square:before {\n content: \"\\f1e1\";\n}\n\n.fa-bomb:before {\n content: \"\\f1e2\";\n}\n\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n content: \"\\f1e3\";\n}\n\n.fa-tty:before {\n content: \"\\f1e4\";\n}\n\n.fa-binoculars:before {\n content: \"\\f1e5\";\n}\n\n.fa-plug:before {\n content: \"\\f1e6\";\n}\n\n.fa-slideshare:before {\n content: \"\\f1e7\";\n}\n\n.fa-twitch:before {\n content: \"\\f1e8\";\n}\n\n.fa-yelp:before {\n content: \"\\f1e9\";\n}\n\n.fa-newspaper-o:before {\n content: \"\\f1ea\";\n}\n\n.fa-wifi:before {\n content: \"\\f1eb\";\n}\n\n.fa-calculator:before {\n content: \"\\f1ec\";\n}\n\n.fa-paypal:before {\n content: \"\\f1ed\";\n}\n\n.fa-google-wallet:before {\n content: \"\\f1ee\";\n}\n\n.fa-cc-visa:before {\n content: \"\\f1f0\";\n}\n\n.fa-cc-mastercard:before {\n content: \"\\f1f1\";\n}\n\n.fa-cc-discover:before {\n content: \"\\f1f2\";\n}\n\n.fa-cc-amex:before {\n content: \"\\f1f3\";\n}\n\n.fa-cc-paypal:before {\n content: \"\\f1f4\";\n}\n\n.fa-cc-stripe:before {\n content: \"\\f1f5\";\n}\n\n.fa-bell-slash:before {\n content: \"\\f1f6\";\n}\n\n.fa-bell-slash-o:before {\n content: \"\\f1f7\";\n}\n\n.fa-trash:before {\n content: \"\\f1f8\";\n}\n\n.fa-copyright:before {\n content: \"\\f1f9\";\n}\n\n.fa-at:before {\n content: \"\\f1fa\";\n}\n\n.fa-eyedropper:before {\n content: \"\\f1fb\";\n}\n\n.fa-paint-brush:before {\n content: \"\\f1fc\";\n}\n\n.fa-birthday-cake:before {\n content: \"\\f1fd\";\n}\n\n.fa-area-chart:before {\n content: \"\\f1fe\";\n}\n\n.fa-pie-chart:before {\n content: \"\\f200\";\n}\n\n.fa-line-chart:before {\n content: \"\\f201\";\n}\n\n.fa-lastfm:before {\n content: \"\\f202\";\n}\n\n.fa-lastfm-square:before {\n content: \"\\f203\";\n}\n\n.fa-toggle-off:before {\n content: \"\\f204\";\n}\n\n.fa-toggle-on:before {\n content: \"\\f205\";\n}\n\n.fa-bicycle:before {\n content: \"\\f206\";\n}\n\n.fa-bus:before {\n content: \"\\f207\";\n}\n\n.fa-ioxhost:before {\n content: \"\\f208\";\n}\n\n.fa-angellist:before {\n content: \"\\f209\";\n}\n\n.fa-cc:before {\n content: \"\\f20a\";\n}\n\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n content: \"\\f20b\";\n}\n\n.fa-meanpath:before {\n content: \"\\f20c\";\n}\n\n.fa-buysellads:before {\n content: \"\\f20d\";\n}\n\n.fa-connectdevelop:before {\n content: \"\\f20e\";\n}\n\n.fa-dashcube:before {\n content: \"\\f210\";\n}\n\n.fa-forumbee:before {\n content: \"\\f211\";\n}\n\n.fa-leanpub:before {\n content: \"\\f212\";\n}\n\n.fa-sellsy:before {\n content: \"\\f213\";\n}\n\n.fa-shirtsinbulk:before {\n content: \"\\f214\";\n}\n\n.fa-simplybuilt:before {\n content: \"\\f215\";\n}\n\n.fa-skyatlas:before {\n content: \"\\f216\";\n}\n\n.fa-cart-plus:before {\n content: \"\\f217\";\n}\n\n.fa-cart-arrow-down:before {\n content: \"\\f218\";\n}\n\n.fa-diamond:before {\n content: \"\\f219\";\n}\n\n.fa-ship:before {\n content: \"\\f21a\";\n}\n\n.fa-user-secret:before {\n content: \"\\f21b\";\n}\n\n.fa-motorcycle:before {\n content: \"\\f21c\";\n}\n\n.fa-street-view:before {\n content: \"\\f21d\";\n}\n\n.fa-heartbeat:before {\n content: \"\\f21e\";\n}\n\n.fa-venus:before {\n content: \"\\f221\";\n}\n\n.fa-mars:before {\n content: \"\\f222\";\n}\n\n.fa-mercury:before {\n content: \"\\f223\";\n}\n\n.fa-intersex:before,\n.fa-transgender:before {\n content: \"\\f224\";\n}\n\n.fa-transgender-alt:before {\n content: \"\\f225\";\n}\n\n.fa-venus-double:before {\n content: \"\\f226\";\n}\n\n.fa-mars-double:before {\n content: \"\\f227\";\n}\n\n.fa-venus-mars:before {\n content: \"\\f228\";\n}\n\n.fa-mars-stroke:before {\n content: \"\\f229\";\n}\n\n.fa-mars-stroke-v:before {\n content: \"\\f22a\";\n}\n\n.fa-mars-stroke-h:before {\n content: \"\\f22b\";\n}\n\n.fa-neuter:before {\n content: \"\\f22c\";\n}\n\n.fa-genderless:before {\n content: \"\\f22d\";\n}\n\n.fa-facebook-official:before {\n content: \"\\f230\";\n}\n\n.fa-pinterest-p:before {\n content: \"\\f231\";\n}\n\n.fa-whatsapp:before {\n content: \"\\f232\";\n}\n\n.fa-server:before {\n content: \"\\f233\";\n}\n\n.fa-user-plus:before {\n content: \"\\f234\";\n}\n\n.fa-user-times:before {\n content: \"\\f235\";\n}\n\n.fa-hotel:before,\n.fa-bed:before {\n content: \"\\f236\";\n}\n\n.fa-viacoin:before {\n content: \"\\f237\";\n}\n\n.fa-train:before {\n content: \"\\f238\";\n}\n\n.fa-subway:before {\n content: \"\\f239\";\n}\n\n.fa-medium:before {\n content: \"\\f23a\";\n}\n\n.fa-yc:before,\n.fa-y-combinator:before {\n content: \"\\f23b\";\n}\n\n.fa-optin-monster:before {\n content: \"\\f23c\";\n}\n\n.fa-opencart:before {\n content: \"\\f23d\";\n}\n\n.fa-expeditedssl:before {\n content: \"\\f23e\";\n}\n\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n content: \"\\f240\";\n}\n\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n content: \"\\f241\";\n}\n\n.fa-battery-2:before,\n.fa-battery-half:before {\n content: \"\\f242\";\n}\n\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n content: \"\\f243\";\n}\n\n.fa-battery-0:before,\n.fa-battery-empty:before {\n content: \"\\f244\";\n}\n\n.fa-mouse-pointer:before {\n content: \"\\f245\";\n}\n\n.fa-i-cursor:before {\n content: \"\\f246\";\n}\n\n.fa-object-group:before {\n content: \"\\f247\";\n}\n\n.fa-object-ungroup:before {\n content: \"\\f248\";\n}\n\n.fa-sticky-note:before {\n content: \"\\f249\";\n}\n\n.fa-sticky-note-o:before {\n content: \"\\f24a\";\n}\n\n.fa-cc-jcb:before {\n content: \"\\f24b\";\n}\n\n.fa-cc-diners-club:before {\n content: \"\\f24c\";\n}\n\n.fa-clone:before {\n content: \"\\f24d\";\n}\n\n.fa-balance-scale:before {\n content: \"\\f24e\";\n}\n\n.fa-hourglass-o:before {\n content: \"\\f250\";\n}\n\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n content: \"\\f251\";\n}\n\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n content: \"\\f252\";\n}\n\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n content: \"\\f253\";\n}\n\n.fa-hourglass:before {\n content: \"\\f254\";\n}\n\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n content: \"\\f255\";\n}\n\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n content: \"\\f256\";\n}\n\n.fa-hand-scissors-o:before {\n content: \"\\f257\";\n}\n\n.fa-hand-lizard-o:before {\n content: \"\\f258\";\n}\n\n.fa-hand-spock-o:before {\n content: \"\\f259\";\n}\n\n.fa-hand-pointer-o:before {\n content: \"\\f25a\";\n}\n\n.fa-hand-peace-o:before {\n content: \"\\f25b\";\n}\n\n.fa-trademark:before {\n content: \"\\f25c\";\n}\n\n.fa-registered:before {\n content: \"\\f25d\";\n}\n\n.fa-creative-commons:before {\n content: \"\\f25e\";\n}\n\n.fa-gg:before {\n content: \"\\f260\";\n}\n\n.fa-gg-circle:before {\n content: \"\\f261\";\n}\n\n.fa-tripadvisor:before {\n content: \"\\f262\";\n}\n\n.fa-odnoklassniki:before {\n content: \"\\f263\";\n}\n\n.fa-odnoklassniki-square:before {\n content: \"\\f264\";\n}\n\n.fa-get-pocket:before {\n content: \"\\f265\";\n}\n\n.fa-wikipedia-w:before {\n content: \"\\f266\";\n}\n\n.fa-safari:before {\n content: \"\\f267\";\n}\n\n.fa-chrome:before {\n content: \"\\f268\";\n}\n\n.fa-firefox:before {\n content: \"\\f269\";\n}\n\n.fa-opera:before {\n content: \"\\f26a\";\n}\n\n.fa-internet-explorer:before {\n content: \"\\f26b\";\n}\n\n.fa-tv:before,\n.fa-television:before {\n content: \"\\f26c\";\n}\n\n.fa-contao:before {\n content: \"\\f26d\";\n}\n\n.fa-500px:before {\n content: \"\\f26e\";\n}\n\n.fa-amazon:before {\n content: \"\\f270\";\n}\n\n.fa-calendar-plus-o:before {\n content: \"\\f271\";\n}\n\n.fa-calendar-minus-o:before {\n content: \"\\f272\";\n}\n\n.fa-calendar-times-o:before {\n content: \"\\f273\";\n}\n\n.fa-calendar-check-o:before {\n content: \"\\f274\";\n}\n\n.fa-industry:before {\n content: \"\\f275\";\n}\n\n.fa-map-pin:before {\n content: \"\\f276\";\n}\n\n.fa-map-signs:before {\n content: \"\\f277\";\n}\n\n.fa-map-o:before {\n content: \"\\f278\";\n}\n\n.fa-map:before {\n content: \"\\f279\";\n}\n\n.fa-commenting:before {\n content: \"\\f27a\";\n}\n\n.fa-commenting-o:before {\n content: \"\\f27b\";\n}\n\n.fa-houzz:before {\n content: \"\\f27c\";\n}\n\n.fa-vimeo:before {\n content: \"\\f27d\";\n}\n\n.fa-black-tie:before {\n content: \"\\f27e\";\n}\n\n.fa-fonticons:before {\n content: \"\\f280\";\n}\n\n.fa-reddit-alien:before {\n content: \"\\f281\";\n}\n\n.fa-edge:before {\n content: \"\\f282\";\n}\n\n.fa-credit-card-alt:before {\n content: \"\\f283\";\n}\n\n.fa-codiepie:before {\n content: \"\\f284\";\n}\n\n.fa-modx:before {\n content: \"\\f285\";\n}\n\n.fa-fort-awesome:before {\n content: \"\\f286\";\n}\n\n.fa-usb:before {\n content: \"\\f287\";\n}\n\n.fa-product-hunt:before {\n content: \"\\f288\";\n}\n\n.fa-mixcloud:before {\n content: \"\\f289\";\n}\n\n.fa-scribd:before {\n content: \"\\f28a\";\n}\n\n.fa-pause-circle:before {\n content: \"\\f28b\";\n}\n\n.fa-pause-circle-o:before {\n content: \"\\f28c\";\n}\n\n.fa-stop-circle:before {\n content: \"\\f28d\";\n}\n\n.fa-stop-circle-o:before {\n content: \"\\f28e\";\n}\n\n.fa-shopping-bag:before {\n content: \"\\f290\";\n}\n\n.fa-shopping-basket:before {\n content: \"\\f291\";\n}\n\n.fa-hashtag:before {\n content: \"\\f292\";\n}\n\n.fa-bluetooth:before {\n content: \"\\f293\";\n}\n\n.fa-bluetooth-b:before {\n content: \"\\f294\";\n}\n\n.fa-percent:before {\n content: \"\\f295\";\n}\n\n.fa-gitlab:before {\n content: \"\\f296\";\n}\n\n.fa-wpbeginner:before {\n content: \"\\f297\";\n}\n\n.fa-wpforms:before {\n content: \"\\f298\";\n}\n\n.fa-envira:before {\n content: \"\\f299\";\n}\n\n.fa-universal-access:before {\n content: \"\\f29a\";\n}\n\n.fa-wheelchair-alt:before {\n content: \"\\f29b\";\n}\n\n.fa-question-circle-o:before {\n content: \"\\f29c\";\n}\n\n.fa-blind:before {\n content: \"\\f29d\";\n}\n\n.fa-audio-description:before {\n content: \"\\f29e\";\n}\n\n.fa-volume-control-phone:before {\n content: \"\\f2a0\";\n}\n\n.fa-braille:before {\n content: \"\\f2a1\";\n}\n\n.fa-assistive-listening-systems:before {\n content: \"\\f2a2\";\n}\n\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n content: \"\\f2a3\";\n}\n\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n content: \"\\f2a4\";\n}\n\n.fa-glide:before {\n content: \"\\f2a5\";\n}\n\n.fa-glide-g:before {\n content: \"\\f2a6\";\n}\n\n.fa-signing:before,\n.fa-sign-language:before {\n content: \"\\f2a7\";\n}\n\n.fa-low-vision:before {\n content: \"\\f2a8\";\n}\n\n.fa-viadeo:before {\n content: \"\\f2a9\";\n}\n\n.fa-viadeo-square:before {\n content: \"\\f2aa\";\n}\n\n.fa-snapchat:before {\n content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n content: \"\\f2ac\";\n}\n\n.fa-snapchat-square:before {\n content: \"\\f2ad\";\n}\n\n.fa-pied-piper:before {\n content: \"\\f2ae\";\n}\n\n.fa-first-order:before {\n content: \"\\f2b0\";\n}\n\n.fa-yoast:before {\n content: \"\\f2b1\";\n}\n\n.fa-themeisle:before {\n content: \"\\f2b2\";\n}\n\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n content: \"\\f2b3\";\n}\n\n.fa-fa:before,\n.fa-font-awesome:before {\n content: \"\\f2b4\";\n}\n\n.fa-handshake-o:before {\n content: \"\\f2b5\";\n}\n\n.fa-envelope-open:before {\n content: \"\\f2b6\";\n}\n\n.fa-envelope-open-o:before {\n content: \"\\f2b7\";\n}\n\n.fa-linode:before {\n content: \"\\f2b8\";\n}\n\n.fa-address-book:before {\n content: \"\\f2b9\";\n}\n\n.fa-address-book-o:before {\n content: \"\\f2ba\";\n}\n\n.fa-vcard:before,\n.fa-address-card:before {\n content: \"\\f2bb\";\n}\n\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n content: \"\\f2bc\";\n}\n\n.fa-user-circle:before {\n content: \"\\f2bd\";\n}\n\n.fa-user-circle-o:before {\n content: \"\\f2be\";\n}\n\n.fa-user-o:before {\n content: \"\\f2c0\";\n}\n\n.fa-id-badge:before {\n content: \"\\f2c1\";\n}\n\n.fa-drivers-license:before,\n.fa-id-card:before {\n content: \"\\f2c2\";\n}\n\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n content: \"\\f2c3\";\n}\n\n.fa-quora:before {\n content: \"\\f2c4\";\n}\n\n.fa-free-code-camp:before {\n content: \"\\f2c5\";\n}\n\n.fa-telegram:before {\n content: \"\\f2c6\";\n}\n\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n content: \"\\f2c7\";\n}\n\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n content: \"\\f2c8\";\n}\n\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n content: \"\\f2c9\";\n}\n\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n content: \"\\f2ca\";\n}\n\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n content: \"\\f2cb\";\n}\n\n.fa-shower:before {\n content: \"\\f2cc\";\n}\n\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n content: \"\\f2cd\";\n}\n\n.fa-podcast:before {\n content: \"\\f2ce\";\n}\n\n.fa-window-maximize:before {\n content: \"\\f2d0\";\n}\n\n.fa-window-minimize:before {\n content: \"\\f2d1\";\n}\n\n.fa-window-restore:before {\n content: \"\\f2d2\";\n}\n\n.fa-times-rectangle:before,\n.fa-window-close:before {\n content: \"\\f2d3\";\n}\n\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n content: \"\\f2d4\";\n}\n\n.fa-bandcamp:before {\n content: \"\\f2d5\";\n}\n\n.fa-grav:before {\n content: \"\\f2d6\";\n}\n\n.fa-etsy:before {\n content: \"\\f2d7\";\n}\n\n.fa-imdb:before {\n content: \"\\f2d8\";\n}\n\n.fa-ravelry:before {\n content: \"\\f2d9\";\n}\n\n.fa-eercast:before {\n content: \"\\f2da\";\n}\n\n.fa-microchip:before {\n content: \"\\f2db\";\n}\n\n.fa-snowflake-o:before {\n content: \"\\f2dc\";\n}\n\n.fa-superpowers:before {\n content: \"\\f2dd\";\n}\n\n.fa-wpexplorer:before {\n content: \"\\f2de\";\n}\n\n.fa-meetup:before {\n content: \"\\f2e0\";\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}","%cf,\n%clearfix {\n\t&:before,\n\t&:after {\n\t content: \" \";\n\t display: table;\n\t}\n\n\t&:after {\n \tclear: both;\n\t}\n}\n\n\n\n%llms-element {\n\tbackground: $el-background;\n\tbox-shadow: $el-box-shadow;\n\tdisplay: block;\n\tcolor: #212121;\n\tmin-height: 85px;\n\tpadding: 15px;\n\ttext-decoration: none;\n\tposition: relative;\n\ttransition: background .4s ease;\n\n\t&:hover {\n\t\tbackground: $el-background-hover;\n\t}\n}\n","//\n// Floated columns.\n//\n// Utilized prior to the introduction of `.llms-flex-cols`. Prefer\n// usage of flex cols for new code where possible.\n//\n.llms-cols {\n\t@extend %clearfix;\n\n\t.llms-col { width: 100%; }\n\n\t@media all and (min-width: 600px) {\n\t\t[class*=\"llms-col-\"] {\n\t\t\tfloat: left;\n\t\t}\n\t}\n\n}\n\n//\n// Flex-box columns.\n//\n// Preferred over floated `.llms-cols` wherever possible.\n//\n.llms-flex-cols {\n\tdisplay: flex;\n\tflex-flow: row wrap;\n\n\t[class*=\"llms-col\"] {\n\t\tflex: 0 1 auto;\n\t\twidth: 100%;\n\t}\n}\n\n@media all and (min-width: 600px) {\n\t.llms-cols, .llms-flex-cols {\n\t\t$cols: 1;\n\t\t@while $cols <= 12 {\n\t\t\t.llms-col-#{$cols} {\n\t\t\t\twidth: calc( 100% / $cols );\n\t\t\t}\n\t\t\t$cols: $cols + 1;\n\t\t}\n\t}\n}\n\n",".llms-button-action,\n.llms-button-danger,\n.llms-button-primary,\n.llms-button-secondary {\n\tborder:none;\n\tborder-radius: 8px;\n\tcolor: $color-white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n\tfont-size: 18px;\n\tfont-weight: 700;\n\ttext-decoration: none;\n\ttext-shadow: none;\n\tline-height: 1;\n\tmargin: 0;\n\tmax-width: 100%;\n\tpadding: 12px 24px;\n\tposition: relative;\n\ttransition: all .5s ease;\n\n\t&:disabled {\n\t\topacity: 0.5;\n\t}\n\t&:hover, &:active {\n\t\tcolor: $color-white;\n\t}\n\t&:focus {\n\t\tcolor: $color-white;\n\t}\n\n\t&.auto {\n\t\twidth: auto;\n\t}\n\n\t&.full {\n\t\tdisplay: block;\n\t\ttext-align: center;\n\t\twidth: 100%;\n\t}\n\n\t&.square {\n\t\tpadding: 12px;\n\t}\n\n\t&.small {\n\t\tfont-size: 13px;\n\t\tpadding: 8px 14px;\n\t\t&.square { padding: 8px; }\n\t}\n\n\t&.large {\n\t\tfont-size: 18px;\n\t\tline-height: 1.2;\n\t\tpadding: 16px 32px;\n\t\t&.square { padding: 16px; }\n\t\t.fa {\n\t\t\tleft: -7px;\n\t\t\tposition: relative;\n\t\t}\n\t}\n\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-action,\na.llms-button-danger,\na.llms-button-primary {\n\tcolor: $color-white;\n}\n\n.llms-button-primary {\n\tbackground: $color-brand-blue;\n\t&:hover,\n\t&.clicked {\n\t\tbackground: $color-brand-blue-dark;\n\t}\n\t&:focus,\n\t&:active {\n\t\tbackground: $color-brand-blue-light;\n\t}\n}\n\n.llms-button-secondary {\n\tbackground: #e1e1e1;\n\tcolor: $color-cinder;\n\t&:hover {\n\t\tcolor: #414141;\n\t\tbackground: darken( #e1e1e1, 8 );\n\t}\n\t&:focus,\n\t&:active {\n\t\tcolor: #414141;\n\t\tbackground: lighten( #e1e1e1, 4 );\n\t}\n}\n/* Fix for cases where link color overrides the button color */\na.llms-button-secondary {\n\tcolor: $color-cinder;\n}\n\n.llms-button-action {\n\tbackground: $color-orange;\n\t&:hover,\n\t&.clicked {\n\t\tbackground: $color-brand-orange-dark;\n\t}\n\t&:focus,\n\t&:active {\n\t\tbackground: $color-brand-orange-light;\n\t}\n}\n\n.llms-button-danger {\n\tbackground: $color-danger;\n\t&:hover {\n\t\tbackground: darken( $color-danger, 8 );\n\t}\n\t&:focus,\n\t&:active {\n\t\tbackground: lighten( $color-danger, 4 );\n\t}\n}\n\n.llms-button-outline {\n\tbackground: transparent;\n\tborder: 3px solid #1D2327;\n\tborder-radius: 8px;\n\tcolor: #1D2327;\n\tcursor: pointer;\n\tfont-size: 16px;\n\tfont-weight: 700;\n\ttext-decoration: none;\n\ttext-shadow: none;\n\tline-height: 1;\n\tmargin: 0;\n\tmax-width: 100%;\n\tpadding: 12px 24px;\n\tposition: relative;\n\ttransition: all .5s ease;\n\n\t&:disabled {\n\t\topacity: 0.5;\n\t}\n\t&:hover, &:active {\n\t\tcolor: #1D2327;\n\t}\n\t&:focus {\n\t\tcolor: #1D2327;\n\t}\n\n\t&.auto {\n\t\twidth: auto;\n\t}\n\n\t&.full {\n\t\tdisplay: block;\n\t\ttext-align: center;\n\t\twidth: 100%;\n\t}\n\n\t&.square {\n\t\tpadding: 12px;\n\t}\n\n}\n\n.llms-course-continue-button {\n\tdisplay: inline-block;\n}\n","// ----- LifterLMS Brand Colors ----- \\\\\n$color-brand-dark-blue: #243c56;\n\n$color-brand-blue: #466dd8;\n$color-brand-blue-dark: darken( $color-brand-blue, 12 ); // #0077e4\n$color-brand-blue-light: lighten( $color-brand-blue, 8 );\n\n$color-brand-orange: #f8954f;\n$color-brand-orange-dark: #f67d28;\n$color-brand-orange-light: lighten( $color-brand-orange, 8 );\n\n$color-brand-aqua: #17bebb;\n\n$color-brand-pink: #ef476f;\n\n\n\n// ----- name our versions of common colors ----- \\\\\n$color-black: #010101;\n$color-green: #4d8d3c;\n$color-blue: $color-brand-blue;\n$color-red: #bb231c;\n$color-white: #fefefe;\n$color-aqua: #35bbaa;\n$color-purple: #845ef7;\n$color-orange: #c05621;\n\n$color-red-hover: darken($color-red,5);\n\n\n// ----- state / action names ----- \\\\\n$color-success: $color-green;\n$color-danger: $color-red;\n\n\n\n\n\n\n\n\n$color-lightgrey:\t\t#ccc;\n$color-grey: \t\t\t#999;\n$color-darkgrey:\t\t#666;\n$color-cinder:\t\t\t#444;\n$color-lightblue:\t\t#33b1cb;\n$color-darkblue:\t\t#0185a3;\n\n\n\n\n\n\n\n\n\n\n\n\n$color-border: #dedede;\n\n$el-box-shadow: 0 1px 2px 0 rgba($color-black,0.4);\n$el-background: #f1f1f1;\n$el-background-hover: #eaeaea;\n\n$break-xsmall: 320px;\n$break-small: 641px;\n$break-medium: 768px;\n$break-large: 1024px;\n\n$radius-small: 6px;\n$radius-medium: 12px;\n",".llms-donut {\n\n\t@include clearfix;\n\n\tbackground-color: #f1f1f1;\n\tbackground-image: none;\n\tborder-radius: 50%;\n\tcolor: $color-brand-blue;\n\theight: 200px;\n\toverflow: hidden;\n\tposition: relative;\n\twidth: 200px;\n\n\tsvg {\n\t\toverflow: visible !important;\n\t\tpointer-events: none;\n\t\twidth: 100%;\n\t}\n\n\tsvg path {\n\t\tfill: none;\n\t\tstroke-width: 35px;\n\t\tstroke: $color-brand-blue;\n\t}\n\n\t&.mini {\n\t\theight: 36px;\n\t\twidth: 36px;\n\t\t.percentage {\n\t\t\tfont-size: 10px;\n\t\t}\n\t}\n\t&.small {\n\t\theight: 100px;\n\t\twidth: 100px;\n\t\t.percentage {\n\t\t\tfont-size: 18px;\n\t\t}\n\t}\n\t&.medium {\n\t\theight: 130px;\n\t\twidth: 130px;\n\t\t.percentage {\n\t\t\tfont-size: 26px;\n\t\t}\n\t}\n\t&.large {\n\t\theight: 260px;\n\t\twidth: 260px;\n\t\t.percentage {\n\t\t\tfont-size: 48px;\n\t\t}\n\t}\n\n\t.inside {\n\t\talign-items: center;\n\t\tbackground: #fff;\n\t\tborder-radius: 50%;\n\t\tbox-sizing: border-box;\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\theight: 80%;\n\t\tjustify-content: center;\n\t\tleft: 50%;\n\t\tposition: absolute;\n\t\ttext-align: center;\n\t\ttransform: translate(-50%, -50%);\n\t\twidth: 80%;\n\t\ttop: 50%;\n\t\tz-index: 3;\n\t}\n\n\t.percentage {\n\t\tline-height: 1.2;\n\t\tfont-size: 34px;\n\t}\n\n\t.caption {\n\t\tfont-size: 75%;\n\t}\n\n}\n","\n@mixin clearfix() {\n\t&:before,\n\t&:after {\n\t content: \" \";\n\t display: table;\n\t}\n\t&:after {\n\t clear: both;\n\t}\n}\n\n//\n// Positioning mixin\n//\n// @param [string] $position: position\n// @param [list] $args (()): offsets list\n//\n// @source http://hugogiraudel.com/2013/08/05/offsets-sass-mixin/\n//\n@mixin position($position, $args: ()) {\n\t$offsets: top right bottom left;\n\tposition: $position;\n\n\t@each $offset in $offsets {\n\t\t$index: index($args, $offset);\n\n\t\t@if $index {\n\t\t\t@if $index == length($args) {\n\t\t\t\t#{$offset}: 0;\n\t\t\t}\n\t\t\t@else {\n\t\t\t\t$next: nth($args, $index + 1);\n\t\t\t\t@if is-valid-length($next) {\n\t\t\t\t\t#{$offset}: $next;\n\t\t\t\t}\n\t\t\t\t@else if index($offsets, $next) {\n\t\t\t\t\t#{$offset}: 0;\n\t\t\t\t}\n\t\t\t\t@else {\n\t\t\t\t\t@warn \"Invalid value `#{$next}` for offset `#{$offset}`.\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n//\n// Function checking if $value is a valid length\n// @param [literal] $value: value to test\n// @return [bool]\n//\n@function is-valid-length($value) {\n\t$r: (type-of($value) == \"number\" and not unitless($value)) or (index(auto initial inherit 0, $value) != null);\n\t@return $r;\n}\n\n//\n// Shorthands\n//\n@mixin absolute($args: ()) {\n\t@include position(absolute, $args);\n}\n\n@mixin fixed($args: ()) {\n\t@include position(fixed, $args);\n}\n\n@mixin relative($args: ()) {\n\t@include position(relative, $args);\n}\n\n\n\n@mixin order_status_badges() {\n\n\t.llms-status {\n\t\tborder-radius: $radius-small;\n\t\tdisplay: inline-block;\n\t\tfont-size: 13px;\n\t\tfont-weight: 700;\n\t\tline-height: 1.4;\n\t\tpadding: 2px 6px;\n\t\tvertical-align: middle;\n\n\t\t&.llms-size--large {\n\t\t\tfont-size: 105%;\n\t\t\tpadding: 6px 12px;\n\t\t}\n\n\t\t&.llms-active,\n\t\t&.llms-completed,\n\t\t&.llms-pass, // quiz\n\t\t&.llms-txn-succeeded {\n\t\t\tcolor: $color-green;\n\t\t\tbackground-color: rgba( $color-green, .15 );\n\t\t}\n\n\t\t&.llms-fail, // quiz\n\t\t&.llms-failed,\n\t\t&.llms-expired,\n\t\t&.llms-cancelled,\n\t\t&.llms-txn-failed {\n\t\t\tcolor: $color-red;\n\t\t\tbackground-color: rgba( $color-red, .15 );\n\t\t}\n\n\t\t&.llms-incomplete, // assignment\n\t\t&.llms-on-hold,\n\t\t&.llms-pending,\n\t\t&.llms-pending-cancel,\n\t\t&.llms-refunded,\n\t\t&.llms-txn-pending,\n\t\t&.llms-txn-refunded {\n\t\t\tcolor: $color-orange;\n\t\t\tbackground-color: rgba( $color-orange, .15 );\n\t\t}\n\n\t}\n\n}\n",".lifterlms, // Settings & Course Builder.\n.llms-metabox, // Some Metaboxes.\n.llms-mb-container, // Other Metaboxes.\n.llms-quiz-wrapper { // Quiz results.\n\n\t[data-tip],\n\t[data-title-default],\n\t[data-title-active] {\n\n\t\t$bgcolor: #444;\n\n\t\tposition: relative;\n\n\t\t&.tip--top-right {\n\t\t\t&:before {\n\t\t\t\tbottom: 100%;\n\t\t\t\tleft: -10px;\n\t\t\t}\n\t\t\t&:hover:before {\n\t\t\t\tbottom: calc( 100% + 6px );\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tborder-top-color: $bgcolor;\n\t\t\t\tleft: 6px;\n\t\t\t\ttop: 0;\n\t\t\t}\n\t\t\t&:hover:after {\n\t\t\t\ttop: -6px;\n\t\t\t}\n\t\t}\n\n\n\t\t&.tip--top-left {\n\t\t\t&:before {\n\t\t\t\tbottom: 100%;\n\t\t\t\tright: -10px;\n\t\t\t}\n\t\t\t&:hover:before {\n\t\t\t\tbottom: calc( 100% + 6px );\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tborder-top-color: $bgcolor;\n\t\t\t\tright: 6px;\n\t\t\t\ttop: 0;\n\t\t\t}\n\t\t\t&:hover:after {\n\t\t\t\ttop: -6px;\n\t\t\t}\n\t\t}\n\n\n\n\t\t&.tip--bottom-left {\n\t\t\t&:before {\n\t\t\t\ttop: 100%;\n\t\t\t\tright: -10px;\n\t\t\t}\n\t\t\t&:hover:before {\n\t\t\t\ttop: calc( 100% + 6px );\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tborder-bottom-color: $bgcolor;\n\t\t\t\tright: 6px;\n\t\t\t\tbottom: 0;\n\t\t\t}\n\t\t\t&:hover:after {\n\t\t\t\tbottom: -6px;\n\t\t\t}\n\t\t}\n\n\t\t&.tip--bottom-right {\n\t\t\t&:before {\n\t\t\t\ttop: 100%;\n\t\t\t\tleft: -10px;\n\t\t\t}\n\t\t\t&:hover:before {\n\t\t\t\ttop: calc( 100% + 6px );\n\t\t\t}\n\t\t\t&:after {\n\t\t\t\tborder-bottom-color: $bgcolor;\n\t\t\t\tleft: 6px;\n\t\t\t\tbottom: 0;\n\t\t\t}\n\t\t\t&:hover:after {\n\t\t\t\tbottom: -6px;\n\t\t\t}\n\t\t}\n\n\t\t&:before {\n\t\t\tbackground: $bgcolor;\n\t\t\tborder-radius: 4px;\n\t\t\tcolor: #fff;\n\t\t\tfont-size: 13px;\n\t\t\tline-height: 1.2;\n\t\t\tpadding: 8px;\n\t\t\tmax-width: 300px;\n\t\t\twidth: max-content;\n\t\t}\n\t\t&:after {\n\t\t\tcontent: '';\n\t\t\tborder: 6px solid transparent;\n\t\t\theight: 0;\n\t\t\twidth: 0;\n\t\t}\n\n\t\t&:before,\n\t\t&:after {\n\t\t\topacity: 0;\n\t\t\ttransition: all 0.2s 0.1s ease;\n\t\t\tposition: absolute;\n\t\t\tpointer-events: none;\n\t\t\tvisibility: hidden;\n\t\t}\n\t\t&:hover:before,\n\t\t&:hover:after {\n\t\t\topacity: 1;\n\t\t\ttransition: all 0 0.1s ease;\n\t\t\tvisibility: visible;\n\t\t\tz-index: 99999999;\n\t\t}\n\n\t}\n\n\t[data-tip] {\n\t\t&:before {\n\t\t\tcontent: attr(data-tip);\n\t\t}\n\t}\n\t[data-tip].active {\n\t\t&:before {\n\t\t\tcontent: attr(data-tip-active);\n\t\t}\n\t}\n\n}\n","\n\n\n\n.llms-membership-image {\n display: block;\n margin: 0 auto;\n}\n\n\n\n.llms-course-image {\n display: block;\n margin: 0 auto;\n max-width: 100%;\n}\n.llms-featured-image {\n display: block;\n margin: 0 auto;\n}\n.llms-image-thumb {\n width: 150px;\n}\n\n// Responsive Videos.\n.llms-video-wrapper {\n\n\t.center-video {\n\t\theight: auto;\n\t\tmax-width: 100%;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\t\tpadding-top: 56.25%;\n\t\ttext-align: center;\n\n\t\t& > .wp-video,\n\t\t.fluid-width-video-wrapper,\n\t\tiframe, object, embed {\n\t\t\theight: 100%;\n\t\t\tleft: 0;\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t& > .wp-video {\n\t\t\twidth: 100% !important;\n\t\t}\n\t\t.fluid-width-video-wrapper {\n\t\t\tpadding-top: 0 !important;\n\t\t}\n\t}\n\n}\n\n\n\n\n\n\n\n\n\n\n\n.clear {\n clear: both;\n width: 100%;\n}\n.llms-featured-image {\n text-align: center;\n}\n\n#main-content .llms-payment-options p {\n margin: 0;\n font-size: 16px;\n}\n\n.llms-option {\n display: block;\n position: relative;\n margin: 20px 0;\n padding-left:40px;\n font-size: 16px;\n\n label {\n cursor: pointer;\n position: static;\n }\n}\n.llms-option:first-child {\n margin-top:0;\n}\n.llms-option:last-child {\n margin-bottom:0;\n}\n#main-content .llms-option:last-child {\n margin-bottom:0;\n}\n\n.llms-option input[type=\"radio\"] {\n display: block;\n position: absolute;\n top:3px;\n left:0;\n z-index: 0;\n}\n\n.llms-option input[type=\"radio\"] {\n display: inline-block;\n}\n.llms-option input[type=\"radio\"] + label span.llms-radio {\n display: none;\n}\n\n.llms-option input[type=\"radio\"] + label span.llms-radio {\n appearance: none;\n\n z-index: 20;\n position: absolute;\n top: 0;\n left: -2px;\n display: inline-block;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n cursor: pointer;\n vertical-align: middle;\n box-shadow: hsla(0,0%,100%,.15) 0 1px 1px, inset hsla(0,0%,0%,.5) 0 0 0 1px;\n\n background: #efefef;\n background-image: radial-gradient(ellipse at center, $color-red 0%,$color-red 40%,#efefef 45%);\n background-repeat: no-repeat;\n\n transition: background-position .15s cubic-bezier(.8, 0, 1, 1);\n}\n.llms-option input[type=\"radio\"]:checked + label span.llms-radio {\n transition: background-position .2s .15s cubic-bezier(0, 0, .2, 1);\n}\n\n.llms-option input[type=\"radio\"] + label span.llms-radio {\n background-position: -24px 0;\n}\n.llms-option input[type=\"radio\"]:checked + label span.llms-radio {\n background-position: 0 0;\n}\n\n.llms-option input[type=\"submit\"] {\n border:none;\n background:$color-red;\n color:#fff;\n font-size:20px;\n padding:10px 0;\n border-radius:3px;\n cursor:pointer;\n width:100%;\n}\n.llms-styled-text {\n padding: 14px 0;\n}\n.llms-notice-box {\n border-radius: 3px;\n z-index: 10;\n margin: 10px 0;\n padding: 15px 20px;\n //background: #fffef4;\n border: 1px solid #ccc;\n list-style-type: none;\n width: 100%;\n overflow: auto;\n input[type=\"text\"] {\n height: auto;\n }\n .col-1-1 {\n width: 100%;\n input[type=text] {\n width: 100%;\n }\n }\n .col-1-2 {\n width: 50%;\n float: left;\n @media screen and (max-width: $break-medium) {\n width: 100%;\n }\n }\n .col-1-3 {\n width: 33%;\n float: left;\n margin-right: 10px;\n }\n .col-1-4 {\n width: 25%;\n float: left;\n margin-right: 10px;\n @media screen and (max-width: $break-medium) {\n width: 100%;\n }\n }\n .col-1-6 {\n width: 16.6%;\n float: left;\n margin-right: 10px;\n }\n .col-1-8 {\n width: 11%;\n float: right;\n }\n .llms-pad-right {\n padding-right: 10px;\n @media screen and (max-width: $break-medium) {\n padding-right: 0;\n }\n }\n}\ninput[type=\"text\"].cc_cvv,\n#cc_cvv {\n margin-right: 0;\n width: 23%;\n float: right;\n}\n.llms-clear-box {\n border-radius: 3px;\n z-index: 10;\n margin: 10px 0;\n padding: 15px 20px;\n list-style-type: none;\n width: 100%;\n overflow: auto;\n}\n.llms-price-label {\n font-weight: normal;\n}\n.llms-final-price {\n font-weight: bold;\n float: right;\n}\n.llms-center-content {\n text-align: center;\n}\n.llms-input-text {\n background-color: #fff;\n border: 1px solid #ddd;\n color: #333;\n font-size: 18px;\n font-weight: 300;\n padding: 16px;\n width: 100%;\n}\n.llms-price {\n margin-bottom: 0;\n font-weight: bold;\n}\n.llms-price-loop {\n margin-bottom: 0;\n font-weight: bold;\n}\n\n// hentry overrides\n.courses .entry {\n padding: 0\n}\n.list-view .site-content .llms-course-list .hentry, .list-view .site-content .llms-membership-list .hentry {\n border-top: 0;\n padding-top: 0;\n}\n.llms-content {\n width: 100%;\n}\n\n.llms-lesson-button-wrapper {\n width: 100%;\n display: block;\n clear: both;\n text-align: center;\n}\n.llms-template-wrapper {\n width: 100%;\n display: block;\n clear: both;\n}\n.llms-button-wrapper {\n width: 100%;\n display: block;\n clear: both;\n text-align: center;\n}\n\n\n//custom select box\n.llms-styled-select {\n border: 1px solid #ccc;\n box-sizing: border-box;\n border-radius: 3px;\n overflow: hidden;\n position: relative;\n}\n.llms-styled-select, .llms-styled-select select {\n width: 100%;\n}\nselect:focus { outline: none; }\n.llms-styled-select select {\n height: 34px;\n padding: 5px 0 5px 5px;\n background: transparent;\n border: none;\n -webkit-appearance: none;\n font-size: 16px;\n color: #444444;\n}\n\n@-moz-document url-prefix(){\n .--ms-styled-select select { width: 110%; }\n}\n\n.llms-styled-select .fa-sort-desc {\n position: absolute;\n top: 0;\n right: 12px;\n font-size: 24px;\n color: #ccc;\n}\n\nselect::-ms-expand { display: none; }\n\n_:-o-prefocus, .selector {\n .llms-styled-select { background: none; }\n}\n\n.llms-form-item-wrapper {\n margin-bottom: 1em;\n}\n\n/* Circle Graph */\n.llms-progress-circle {\n position: relative;\n width: 200px;\n height: 200px;\n float: left;\n}\n\n.llms-progress-circle-count {\n top: 27%;\n position: absolute;\n width: 94%;\n text-align: center;\n color: #666;\n font-size:44px;\n}\n.llms-progress-circle svg {\n position: absolute;\n width: 200px;\n height: 200px;\n}\n.llms-progress-circle circle {\n fill: transparent;\n}\nsvg .llms-background-circle {\n fill: transparent;\n stroke-width: 10px;\n stroke: #f1f2f1;\n stroke-dasharray: 430;\n}\n\nsvg .llms-animated-circle {\n fill: transparent;\n stroke-width: 10px;\n stroke: #e5554e;\n stroke-dasharray: 430;\n stroke-dashoffset: 430 - 20\n}\n\n\n\n\n\n\n\n.llms-widget-syllabus {\n\n .llms-lesson.current-lesson .lesson-title {\n \tfont-weight: 700;\n }\n\n .section-header {\n display: flex;\n gap: 5px;\n\n .llms-collapse-caret {\n text-align: left;\n width: 14px;\n }\n }\n\n .llms-lesson-complete, .lesson-complete-placeholder {\n font-size: 18px;\n margin-right: 5px;\n color: #ccc;\n &.done {\n color: $color-brand-blue;\n }\n }.section-title {\n font-weight: bold;\n }.lesson-title {\n a {\n text-decoration: underline;\n }\n &.done {\n a {\n color: $color-darkgrey;\n text-decoration: line-through;\n }\n }\n }\n ul {\n list-style-type: none;\n margin: 0;\n padding: 0;\n li {\n list-style-type: none;\n margin: 0 0 10px 0;\n ul {\n margin: 0 0 15px 0;\n li {\n align-items: flex-start;\n display: flex;\n margin: 0 0 10px 0;\n padding: 0;\n }\n }\n }\n }\n}\n\n\n\n.llms-remove-coupon {\n float: right;\n}\n\n\n\n\n\n/*.llms-lesson-link-locked, .llms-lesson-link-locked:hover {\n background: #f1f1f1;\n display: block;\n color: #a6a6a6;\n min-height: 85px;\n padding: 15px;\n text-decoration: none;\n position: relative;\n}*/\n\n.llms-lesson-preview.is-complete .llms-lesson-link-locked {\n padding-left: 75px;\n}\n\n.llms-lesson-tooltip { \tdisplay: none;\n\t\t\t\tposition:absolute;\n\t\t\t\tcolor: #000000;\n\t\t\t\tbackground-color: #c0c0c0;\n\t\t\t\tpadding:.25em;\n\t\t\t\tborder-radius: 2px;\n\t\t\t\tz-index: 100;\n \t\t\t\ttop:0;\n \t\t\tleft:50%;\n \t\t\ttext-align: center;\n \t\t\t-webkit-transform: translateX(-50%) translateY(-100%);\n \t\t\t transform: translateX(-50%) translateY(-100%);\n\t\t\t}\n\n/* arrows - :after */\n.llms-lesson-tooltip:after {\n content: \"\";\n width: 0;\n height: 0;\n border-top: 8px solid #c0c0c0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n position:absolute;\n bottom:-8px;\n left:50%;\n transform: translateX(-50%);\n}\n\n.llms-lesson-tooltip.active {\n display: inline-block;\n}\n\n// Favorites.\n.llms-favorite-wrapper {\n cursor: pointer;\n\n .fa-heart {\n color: #EF476F;\n }\n}\n\n.llms-has-favorite .llms-parent-course-link {\n display: inline-block;\n margin-bottom: 20px;\n\n + .llms-favorite-wrapper {\n float: right;\n margin: 0;\n }\n}\n\n.llms-syllabus-wrapper .llms-has-favorite {\n text-align: left;\n\n .llms-favorite-wrapper {\n display: inline-block;\n }\n}\n",".llms-loop-list {\n\t@extend %clearfix;\n\n\tlist-style: none;\n\tmargin: 0 -10px;\n\tpadding: 0;\n\n\t@media all and (min-width: 600px) {\n\t\t$cols: 1;\n\t\t@while $cols <= 6 {\n\t\t\t&.cols-#{$cols} .llms-loop-item {\n\t\t\t\twidth: calc( 100% / $cols );\n\t\t\t}\n\t\t\t$cols: $cols + 1;\n\t\t}\n\t}\n\n\n}\n\n.llms-loop-item {\n\tfloat: left;\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n\twidth: 100%;\n}\n\n\n\t.llms-loop-item-content {\n\t\tbackground: $color-white;\n\t\tborder: 1px solid $color-border;\n\t\tborder-radius: $radius-small;\n\t\toverflow: hidden;\n\t\tpadding-bottom: 15px;\n\t\tmargin: 10px;\n\n\t\t.llms-loop-link {\n\t\t\tcolor: $color-black;\n\t\t\tdisplay: block;\n\t\t\ttext-decoration: none;\n\t\t\t&:visited {\n\t\t\t\tcolor: $color-black;\n\t\t\t}\n\t\t}\n\n\t\t.llms-featured-image {\n\t\t\tdisplay: block;\n\t\t\tmax-width: 100%;\n\t\t}\n\n\t\t.llms-loop-title {\n\t\t\tcolor: $color-black;\n\t\t\tmargin: 15px 0;\n\t\t\t&:hover {\n\t\t\t\tcolor: $color-brand-blue;\n\t\t\t}\n\t\t}\n\n\t\t.llms-meta,\n\t\t.llms-author,\n\t\t.llms-loop-title {\n\t\t\tpadding: 0 15px;\n\t\t}\n\n\t\t.llms-meta,\n\t\t.llms-author {\n\t\t\tcolor: $color-cinder;\n\t\t\tdisplay: block;\n\t\t\tfont-size: 14px;\n\t\t\tmargin-bottom: 10px;\n\t\t\t&:last-child {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t}\n\t\t}\n\n\t\t.llms-author {\n\t\t\talign-items: center;\n\t\t\tdisplay: flex;\n\t\t\tgap: 5px;\n\t\t}\n\n\t\t.llms-featured-img-wrap {\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\tp {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t.llms-progress {\n\t\t\tmargin: 0;\n\t\t\theight: .4em;\n\n\t\t\t.progress__indicator {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t.llms-progress-bar {\n\t\t\t\tbackground-color: #f6f6f6;\n\t\t\t\tright: 0;\n\t\t\t\ttop: 0;\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\n// .llms-membership-list .memberships {\n// border-top: 1px solid #f6f6f6;\n// width: 100%;\n// display: inline-block;\n// text-align: center;\n// list-style: none;\n// clear: both;\n// margin: 0;\n// padding: 0;\n// }\n\n\n\n// .llms-course-list {\n\n// .llms-membership-link {\n// @extend %llms-element;\n\n// display: block\n// }\n\n// .llms-membership-footer {\n// border-top: 3px solid $color-white;\n// margin: 15px -15px 0;\n// padding: 15px 15px 0;\n// text-align: center;\n// }\n\n// }\n\n\n\n\n// .llms-membership-list .memberships li {\n// width: 300px;\n// margin: 15px;\n// list-style: none;\n// vertical-align: top;\n// display: inline-block;\n// text-align: left;\n// }\n\n// .llms-membership-list .memberships li.first {\n// margin-left: 0;\n// }\n\n// .llms-membership-list .memberships li.last {\n// margin-right: 15px;\n// }\n\n// .llms-membership-list .memberships li .llms-title {\n// display: block;\n// font-weight: 700;\n// margin-bottom: .5em;\n// font-size: 18px;\n// text-decoration: none;\n// line-height: 30px;\n// }\n\n// .llms-membership-list .memberships li .llms-price {\n// display: block;\n// font-weight: 700;\n// // margin-bottom: .5em;\n// // font-size: 24px;\n// text-decoration: none;\n// line-height: 30px;\n// }\n\n// .llms-course-list {\n// //margin: 30px 0;\n// padding: 30px;\n// //background: #FFF;\n// // border-radius: 2px;\n// display: inline-block;\n// width: 100%;\n// box-sizing: border-box;\n\n// .llms-course-link {\n// @extend %llms-element;\n\n// display: block\n// }\n\n// .llms-course-footer {\n// border-top: 3px solid $color-white;\n// margin: 15px -15px 0;\n// padding: 15px 15px 0;\n// text-align: center;\n// }\n\n// .llms-progress {\n// margin-top: 0;\n// // .progress-bar {\n// // background-color: $color-white;\n// // }\n// }\n\n// }\n\n// .llms-course-list .courses {\n// //border-top: 1px solid #f6f6f6;\n// width: 100%;\n// display: inline-block;\n// text-align: center;\n// list-style: none;\n// clear: both;\n// margin: 0;\n// padding: 0;\n// }\n\n// .llms-course-list .courses li {\n// width: 300px;\n// padding-top: 0; // twentyfifteen compat\n// margin: 15px;\n// list-style: none;\n// vertical-align: top;\n// display: inline-block;\n// text-align: left;\n// }\n// @media screen and (max-width: $break-small) {\n// .llms-course-list {\n// padding: 30px 10px;\n\n// .courses li {\n// width: auto;\n// }\n// }\n// }\n\n// // .llms-course-list .courses li.first {\n// // \tmargin-left: 0;\n// // }\n\n// .llms-course-list .courses li.last {\n// margin-right: 15px;\n// }\n\n// .llms-course-list .courses li .llms-title {\n// display: block;\n// font-weight: 700;\n// margin-bottom: .5em;\n// font-size: 18px;\n// text-decoration: none;\n// line-height: 30px;\n// }\n\n// .llms-course-list .courses li .llms-price {\n// display: block;\n// font-weight: 700;\n// // margin-bottom: .5em;\n// // font-size: 24px;\n// text-decoration: none;\n// line-height: 30px;\n// }\n\n\n\n\n// .courses a.llms-course-link:hover {\n// text-decoration: none;\n// }\n",".llms-meta-info {\n\tmargin: 40px 0;\n\t.llms-meta-title {\n\t\tmargin: 0;\n\t}\n\t.llms-meta {\n\t\tp {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\tspan {\n\t\t\tfont-weight: 700;\n\t\t}\n\t}\n}\n.llms-course-progress {\n\tmargin: 40px auto;\n\tmax-width: 480px;\n\ttext-align: center;\n}\n",".llms-syllabus-wrapper {\n\n\tmargin: 20px 0;\n\ttext-align: left;\n\n\t.llms-section-title {\n\t\tmargin: 40px 0 10px;\n\n\t\t+ .llms-lesson-preview {\n\t\t\tborder-top: 1px solid $color-border;\n\t\t}\n\t}\n\n}\n\n.llms-lesson-preview {\n\tborder-right: 1px solid $color-border;\n\tborder-bottom: 1px solid $color-border;\n\tborder-left: 1px solid $color-border;\n\tdisplay: block;\n\tmargin: 0;\n\tmax-width: 100%;\n\tposition: relative;\n\n\t.llms-lesson-link {\n\t\tbackground: $color-white;\n\t\tcolor: $color-black;\n\t\tdisplay: block;\n\t\tpadding: 15px;\n\t\ttext-decoration: none;\n\t\ttransition: background-color 0.3s ease;\n\n\t\t&:hover {\n\t\t\tbackground: $el-background-hover;\n\t\t}\n\n\t\t&:visited {\n\t\t\tcolor: #212121;\n\t\t}\n\n\t\t&.llms-lesson-link-locked {\n\t\t\tbackground: #EFEFEF;\n\t\t\tcolor: $color-darkgrey;\n\n\t\t\t&:hover {\n\t\t\t\tbackground: $color-border;\n\t\t\t}\n\t\t\n\t\t}\n\n\t\t.llms-lesson-preview-row {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row-reverse;\t\n\t\t}\n\t}\n\n\t.llms-lesson-thumbnail {\n\t\tmargin-bottom: 15px;\n\t\timg {\n\t\t\tdisplay: block;\n\t\t\theight: auto;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t.llms-lesson-title {\n\t\tfont-weight: 700;\n\t\tmargin: 0 auto 5px;\n\t\t&:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n\t.llms-lesson-excerpt {\n\t\tmargin-top: 05px;\n\n\t\tp {\n\t\t\tmargin: 0 0 10px 0;\n\t\t\tpadding: 0;\n\t\t\t&:last-of-type {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t.llms-main {\n\t flex-grow: 1;\n\t}\n\t.llms-extra {\n\t\tmin-width: 50px;\n\t\ttext-align: right;\n\t}\n\n\t.llms-lesson-counter,\n\t.llms-free-lesson-svg,\n\t.llms-lesson-complete,\n\t.llms-lesson-complete-placeholder {\n\t\tdisplay: block;\n\t}\n\n\t&.is-free,\n\t&.is-complete {\n\t\t.llms-lesson-complete {\n\t\t\tcolor: $color-brand-blue;\n\t\t}\n\t}\n\n\t&.is-complete {\n\t\t.llms-lesson-title:not(.llms-student-dashboard .llms-lesson-title):not(.llms-course-navigation .llms-lesson-title) {\n\t\t\ttext-decoration: line-through;\n\t\t}\n\t}\n\n\t.llms-icon-free {\n\t\tbackground: $color-brand-blue;\n\t\tborder-radius: $radius-small;\n\t\tcolor: $color-white;\n\t\tdisplay: inline-block;\n\t\tfont-size: 14px;\n\t\tfont-weight: bold;\n\t\tline-height: 1;\n\t\tpadding: 5px 8px 4px;\n\t\twhite-space: nowrap;\n\t}\n\n\t&.is-incomplete {\n\t\t.llms-lesson-complete {\n\t\t\tcolor: #cacaca;\n\t\t}\n\t}\n\n\t.llms-lesson-counter {\n\t\tfont-size: 16px;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t.llms-free-lesson-svg {\n\t\tfill: currentColor;\n\t\theight: 23px;\n\t\twidth: 50px;\n\t}\n\n}\n\n.llms-course-navigation {\n\tdisplay: flex;\n\tgap: 20px;\n\t.llms-prev-lesson,\n\t.llms-next-lesson,\n\t.llms-back-to-course {\n\t\tflex: 1;\n\t}\n\n\t.llms-prev-lesson {\n\t\t& + .llms-back-to-course {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n\n\t.llms-next-lesson {\n\t\t.llms-lesson-preview {\n\t\t\t.llms-lesson-link {\n\t\t\t\ttext-align: right;\n\t\t\t}\n\t\t}\n\t}\n\n\t.llms-lesson-preview {\n\t\tborder: 1px solid $color-border;\n\t}\n\n\t.llms-lesson-link {\n\t\tdisplay: block;\n\t}\n}\n","/* progress bar */\n.llms-progress {\n\tclear: both;\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\tposition: relative;\n\theight: 1em;\n\twidth: 100%;\n\tmargin: 15px 0;\n}\n\n.llms-progress .llms-progress-bar {\n\tbackground-color: $color-border;\n\tposition: relative;\n\theight: .4em;\n\ttop: .3em;\n\twidth: 100%;\n}\n\n.llms-progress .progress-bar-complete {\n\tbackground-color: $color-brand-pink;\n\theight: 100%;\n}\n\n.progress__indicator {\n\tfloat: right;\n\ttext-align: right;\n\theight: 1em;\n\tline-height: 1em;\n\tmargin-left: 5px;\n\twhite-space: nowrap;\n}\n",".llms-author {\n\t.name {\n\t\tmargin-left: 5px;\n\t}\n\t.label {\n\t\tmargin-left: 5px;\n\t}\n\t.avatar {\n\t\tborder-radius: 50%;\n\t}\n\t.bio {\n\t\tmargin-top: 5px;\n\t}\n}\n\n\n.llms-instructor-info {\n\tmargin: 40px 0;\n\t.llms-meta-title {\n\t\tmargin: 0;\n\t}\n\t.llms-instructors {\n\n\t\t.llms-col {\n\t\t\t&:first-child .llms-author {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t&:last-child .llms-author {\n\t\t\t\tmargin-right: 0;\n\t\t\t}\n\t\t}\n\n\t\t.llms-author {\n\t\t\tbackground: $color-white;\n\t\t\tborder: 1px solid $color-border;\n\t\t\tborder-top: 4px solid $color-blue;\n\t\t\tborder-bottom-right-radius: $radius-small;\n\t\t\tborder-bottom-left-radius: $radius-small;\n\t\t\tcolor: $color-black;\n\t\t\ttext-align: center;\n\t\t\tmargin: 45px 0 0;\n\t\t\tpadding: 0 20px 20px;\n\n\t\t\t.avatar {\n\t\t\t\tbackground: $color-brand-blue;\n\t\t\t\tborder: 4px solid $color-blue;\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin: -35px auto 10px;\n\t\t\t}\n\n\t\t\t.llms-author-info {\n\t\t\t\tdisplay: block;\n\t\t\t\t// margin: 0 0 5px;\n\t\t\t\t&.name {\n\t\t\t\t\tfont-weight: 700;\n\t\t\t\t}\n\t\t\t\t&.label {\n\t\t\t\t\tfont-size: 85%;\n\t\t\t\t}\n\t\t\t\t&.bio {\n\t\t\t\t\tfont-size: 90%;\n\t\t\t\t\tmargin-bottom: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n",".llms_review {\n\tmargin: 20px 0px;\n\tpadding: 10px;\n\n\th5 {\n\t\tfont-size: 17px;\n\t\tmargin: 3px 0px;\n\t}\n\n\th6 {\n\t\tfont-size: 13px;\n\t}\n\n\tp {\n\t\tfont-size: 15px;\n\t}\n}\n\n.review_box {\n\n\t[type=text] {\n\t\tmargin: 10px 0px\n\t}\n\n\th5 {\n\t\tcolor: red;\n\t\tdisplay: none;\n\t}\n\n\t+ .thank_you_box {\n\t\tdisplay: none;\n\t}\n}\n",".llms-notice {\n\tbackground: rgba( $color-brand-blue, .3 );\n\tborder-color: $color-brand-blue;\n\tborder-style: solid;\n\tborder-width: 1px;\n\tborder-radius: $radius-small;\n\tpadding: 15px;\n\tmargin-bottom: 40px;\n\n\ta {\n\t\tcolor: inherit;\n\t}\n\n\tp, ul {\n\t\t&:last-child { margin-bottom: 0; }\n\t}\n\n\tli {\n\t\tlist-style-type: none;\n\t}\n\n\t&.llms-debug {\n\t\tbackground: rgba( #cacaca, .3 );\n\t\tborder-color: #cacaca;\n\t}\n\n\t&.llms-error {\n\t\tbackground: rgba( $color-red, .15 );\n\t\tborder-color: $color-red;\n\t}\n\n\t&.llms-success {\n\t\tbackground: rgba( $color-green, .15 );\n\t\tborder-color: $color-green;\n\t}\n\n}\n\n// this helps genesis and numerous other themes out a bit\n// by being slightly more specific\n.entry-content .llms-notice {\n\tmargin: 0 0 40px;\n\tli {\n\t\tlist-style-type: none;\n\t}\n}\n","ul.llms-achievements-loop,\n.lifterlms ul.llms-achievements-loop,\nul.llms-certificates-loop,\n.lifterlms ul.llms-certificates-loop {\n\n\t@include clearfix();\n\tlist-style-type: none;\n\tmargin: 0 -10px;\n\tpadding: 0;\n\n\tli.llms-achievement-loop-item,\n\tli.llms-certificate-loop-item {\n\t\tbox-sizing: border-box;\n\t\tdisplay: block;\n\t\tfloat: left;\n\t\tlist-style-type: none;\n\t\tmargin: 0;\n\t\tpadding: 10px;\n\t\twidth: 100%;\n\t}\n\n\t@media all and (min-width: 600px) {\n\t\t$cols: 1;\n\t\t@while $cols <= 5 {\n\t\t\t&.loop-cols-#{$cols} li.llms-achievement-loop-item,\n\t\t\t&.loop-cols-#{$cols} li.llms-certificate-loop-item {\n\t\t\t\twidth: calc( 100% / $cols );\n\t\t\t}\n\t\t\t$cols: $cols + 1;\n\t\t}\n\t}\n\n}\n\n.llms-achievement,\n.llms-certificate {\n\n\tbackground: $color-white;\n\tborder: none;\n\tborder-radius: $radius-medium;\n\tcolor: $color-black;\n\tdisplay: block;\n\tpadding: 20px 0;\n\ttext-decoration: none;\n\twidth: 100%;\n\n\t&:hover {\n\t\tbackground: #eaeaea;\n\t}\n\n\t.llms-achievement-img {\n\t\tdisplay: block;\n\t\tmargin: 0 auto;\n\t\tmax-width: 80%;\n\t}\n\n\t.llms-achievement-title {\n\t\tcolor: $color-black;\n\t\tfont-size: 16px;\n\t\tmargin: 0;\n\t\tpadding: 10px;\n\t\ttext-align: center;\n\t}\n\n\t.llms-certificate-title {\n\t\tcolor: $color-black;\n\t\tfont-size: 16px;\n\t\tmargin: 0;\n\t\tpadding: 0 0 10px;\n\t}\n\n\t.llms-achievement-info,\n\t.llms-achievement-date {\n\t\tdisplay: none;\n\t}\n\n\t.llms-achievement-content {\n\t\tpadding: 20px;\n\t\t&:empty {\n\t\t\tpadding: 0;\n\t\t}\n\t\t*:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n\n}\n\n.llms-certificate {\n\tborder: 4px double $color-border;\n\tpadding: 20px 10px;\n\tbackground: $color-white;\n\ttext-align: center;\n\t&:hover {\n\t\tbackground: $color-white;\n\t\tborder-color: #eaeaea;\n\t}\n}\n\n.llms-achievement-modal {\n\t.llms-achievement {\n\t\tbackground: #fff;\n\t}\n\t.llms-achievement-info {\n\t\tdisplay: block;\n\t}\n\t.llms-achievement-title {\n\t\tdisplay: none;\n\t}\n}\n",".llms-notification {\n\n\t@include clearfix();\n\n\tbackground: $color-white;\n\tbox-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;\n\tborder-top: 4px solid $color-blue;\n\tcolor: $color-black;\n\topacity: 0;\n\tpadding: 12px;\n\tposition: fixed;\n\tright: -800px;\n\ttop: 24px;\n\ttransition:\n\t\topacity 0.4s ease-in-out,\n\t\tright 0.4s ease-in-out,\n\t;\n\tvisibility: hidden;\n\twidth: auto;\n\tz-index: 9999999;\n\n\t&.visible {\n\t\tleft: 12px;\n\t\topacity: 1;\n\t\tright: 12px;\n\t\ttransition:\n\t\t\topacity 0.4s ease-in-out,\n\t\t\tright 0.4s ease-in-out,\n\t\t\ttop 0.1s ease-in-out,\n\t\t\tbackground 0.2s ease-in-out,\n\t\t\ttransform 0.2s ease-in-out\n\t\t;\n\t\tvisibility: visible;\n\n\t\t&:hover {\n\t\t\t.llms-notification-dismiss {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t.llms-notification-content {\n\t\talign-items: center;\n\t\tdisplay: flex;\n\n\t}\n\n\t\t.llms-notification-main {\n\t\t\talign-self: flex-start;\n\t\t\tflex: 4;\n\t\t\torder: 2;\n\t\t}\n\n\t\t\t.llms-notification-title {\n\t\t\t\tcolor: $color-black;\n\t\t\t\tfont-size: 18px;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.llms-notification-body {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tline-height: 1.4;\n\t\t\t\tp, li {\n\t\t\t\t\tfont-size: inherit;\n\t\t\t\t}\n\t\t\t\tp {\n\t\t\t\t\tmargin-bottom: 8px;\n\t\t\t\t\timg {\n\t\t\t\t\t\tmax-width: 100%;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t.llms-mini-cert {\n\t\t\t\t\tbackground: #f6f6f6;\n\t\t\t\t\tborder: 1px solid #d0d0d0;\n\t\t\t\t\tbox-shadow: inset 0 0 0 3px #fefefe, inset 0 0 0 4px #dedede;\n\t\t\t\t\tpadding: 16px 16px 24px;\n\t\t\t\t\tmargin-top: 12px;\n\t\t\t\t\t.llms-mini-cert-title {\n\t\t\t\t\t\tfont-size: 16px;\n\t\t\t\t\t\tfont-weight: 700;\n\t\t\t\t\t\tmargin: 12px auto;\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t}\n\t\t\t\t\t.llms-mini-cert--body {\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\t> div {\n\t\t\t\t\t\t\t&:nth-child(1) { width:65%; }\n\t\t\t\t\t\t\t&:nth-child(2) { width:35%; }\n\t\t\t\t\t\t\t&:nth-child(3) { width:85%; }\n\t\t\t\t\t\t\t&:nth-child(4) { width:75%; margin-top: 18px; }\n\t\t\t\t\t\t\t&:nth-child(5) { width:70%; }\n\t\t\t\t\t\t\t&:nth-child(6) { margin-left: 12px; margin-bottom:-24px; } // Dot.\n\t\t\t\t\t\t\t&:nth-child(7) { width:65%; margin-right: 12px; }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t.llms-mini-cert--mock-line {\n\t\t\t\t\t\tborder-radius: 2px;\n\t\t\t\t\t\theight: 8px;\n\t\t\t\t\t\tbackground: #b0b0b0;\n\t\t\t\t\t\tbackground-image: linear-gradient( to right, #b0b0b0 0%, #a0a0a0 20%, #b0b0b0 40%, #b0b0b0 100% );\n\t\t\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\t\t\tmargin: 4px auto;\n\t\t\t\t\t}\n\t\t\t\t\t.llms-mini-cert--mock-dot {\n\t\t\t\t\t\tbackground: #b0b0b0;\n\t\t\t\t\t\tborder-radius: 50%;\n\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\tcontent: '';\n\t\t\t\t\t\theight: 24px;\n\t\t\t\t\t\twidth: 24px;\n\t\t\t\t\t}\n\t\t\t\t\tp { margin-bottom: 0; }\n\t\t\t\t}\n\t\t\t}\n\n\t\t.llms-notification-aside {\n\t\t\talign-self: flex-start;\n\t\t\tflex: 1;\n\t\t\tmargin-right: 12px;\n\t\t\torder: 1;\n\t\t}\n\n\t\t\t.llms-notification-icon {\n\t\t\t\tdisplay: block;\n\t\t\t\tmax-width: 64px;\n\t\t\t}\n\n\t.llms-notification-footer {\n\t\tborder-top: 1px solid #e5e5e5;\n\t\tfont-size: 12px;\n\t\tmargin-top: 12px;\n\t\tpadding: 6px 6px 0;\n\t\ttext-align: right;\n\n\t\ta {\n\t\t\tcolor: $color-black;\n\t\t}\n\t}\n\n\t.llms-notification-dismiss {\n\t\tcolor: $color-danger;\n\t\tcursor: pointer;\n\t\tfont-size: 22px;\n\t\tposition: absolute;\n\t\tright: 10px;\n\t\ttop: 8px;\n\t\ttransition: opacity 0.4s ease-in-out;\n\t}\n\n}\n\n.llms-sd-notification-center {\n\n\t.llms-notification-list,\n\t.llms-notification-list-item {\n\t\tlist-style-type: none;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.llms-notification-list-item {\n\t\t&:hover .llms-notification {\n\t\t\tbackground: #fcfcfc;\n\t\t}\n\t}\n\n\t.llms-notification {\n\t\topacity: 1;\n\t\tborder-top: 1px solid #e5e5e5;\n\t\tleft: auto;\n\t\tpadding: 24px;\n\t\tposition: relative;\n\t\tright: auto;\n\t\ttop: auto;\n\t\tvisibility: visible;\n\t\twidth: auto;\n\t\t.llms-notification-aside {\n\t\t\tmax-width: 64px;\n\t\t}\n\t\t.llms-notification-footer {\n\t\t\tborder: none;\n\t\t\tpadding: 0;\n\t\t\ttext-align: left;\n\t\t}\n\t\t.llms-progress {\n\t\t\tdisplay: none !important;\n\t\t}\n\t\t.llms-notification-date {\n\t\t\tcolor: #515151;\n\t\t\tfloat: left;\n\t\t\tmargin-right: 6px;\n\t\t}\n\t\t.llms-mini-cert {\n\t\t\tmargin: 0 auto;\n\t\t\tmax-width: 380px;\n\t\t}\n\t}\n}\n\n@media all and (min-width: 480px) {\n\t.llms-notification {\n\t\tright: -800px;\n\t\twidth: 360px;\n\t\t&.visible {\n\t\t\tleft: auto;\n\t\t\tright: 24px;\n\t\t}\n\t\t.llms-notification-dismiss {\n\t\t\topacity: 0;\n\t\t}\n\t}\n}\n",".llms-pagination {\n\n\tul {\n\t\tlist-style-type: none;\n\t\tmargin: 40px 0;\n\t\tpadding: 0;\n\t\t@extend %cf;\n\n\t\tli {\n\n\t\t\tfloat: left;\n\n\t\t\ta {\n\t\t\t\tborder-bottom: 0;\n\t\t\t\ttext-decoration: none;\n\t\t\t}\n\n\t\t\t.page-numbers {\n\t\t\t\tpadding: 0.5em;\n\t\t\t\ttext-decoration: underline;\n\n\t\t\t\t&.current {\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}",".llms-tooltip {\n\n\tbackground: #2a2a2a;\n\tborder-radius: 4px;\n\tcolor: #fff;\n\tfont-size: 14px;\n\tline-height: 1.2;\n\topacity: 0;\n\ttop: -20px;\n\tpadding: 8px 12px;\n\tleft: 50%;\n\tposition: absolute;\n\tpointer-events: none;\n\ttransform: translateX( -50% );\n\ttransition: opacity .2s ease, top .2s ease;\n\tmax-width: 320px;\n\n\t&.show {\n\t\ttop: -28px;\n\t\topacity: 1;\n\t}\n\n\t&:after {\n\n\t\tbottom: -8px;\n\t\tborder-top: 8px solid #2a2a2a;\n\t\tborder-left: 8px solid transparent;\n\t\tborder-right: 8px solid transparent;\n\t\tcontent: '';\n\t\theight: 0;\n\t\tleft: 50%;\n\t\tposition: absolute;\n\t\ttransform: translateX( -50% );\n\t\twidth: 0;\n\n\t}\n\n}\n\n\n\n.webui-popover-title {\n\tfont-size: initial;\n\tfont-weight: initial;\n\tline-height: initial;\n}\n.webui-popover-inverse {\n\t.webui-popover-inner .close {\n\t\tcolor: #fff;\n\t\topacity: 0.6;\n\t\ttext-shadow: none;\n\t\t&:hover {\n\t\t\topacity: 0.8;\n\t\t}\n\t}\n\t.webui-popover-content a {\n\t\tcolor: #fff;\n\t\ttext-decoration: underline;\n\t\t&:hover {\n\t\t\ttext-decoration: none;\n\t\t}\n\t}\n}\n",".llms-quiz-attempt-results {\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style-type: none;\n\n\t.llms-quiz-attempt-question {\n\t\tbackground: #efefef;\n\t\tborder-radius: $radius-small;\n\t\tmargin: 0 0 15px;\n\t\tposition: relative;\n\t\tlist-style-type: none;\n\t\t.toggle-answer {\n\t\t\tcolor: inherit;\n\t\t\tdisplay: flex;\n\t\t\tgap: 10px;\n\t\t\tjustify-content: space-between;\n\t\t\tpadding: 15px 35px 15px 15px;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t&.status--waiting.correct,\n\t\t&.status--waiting.incorrect {\n\t\t\tbackground: rgba( $color-orange, 0.2 );\n\t\t\t.llms-status-icon {\n\t\t\t\tbackground-color: $color-orange;\n\t\t\t}\n\t\t}\n\n\t\t&.status--graded.correct {\n\t\t\tbackground: rgba( $color-green, 0.15 );\n\t\t\t.llms-status-icon {\n\t\t\t\tbackground-color: $color-green;\n\t\t\t}\n\t\t}\n\t\t&.status--graded.incorrect {\n\t\t\tbackground: rgba( $color-red, 0.15 );\n\t\t\t.llms-status-icon {\n\t\t\t\tbackground-color: $color-red;\n\t\t\t}\n\t\t}\n\t\tpre {\n\t\t\toverflow: auto;\n\t\t}\n\t\t.llms-question-title {\n\t\t\tfont-size: 22px;\n\t\t\tmargin: 0;\n\t\t\tline-height: 1.4;\n\t\t}\n\n\t\t.llms-points {\n\t\t\tline-height: 1.4;\n\t\t}\n\n\t\t.llms-status-icon-tip {\n\t\t\tposition: absolute;\n\t\t\tright: -12px;\n\t\t\ttop: -2px;\n\t\t}\n\n\t\t.llms-status-icon {\n\t\t\tcolor: rgba( 255, 255, 255, 0.65 );\n\t\t\tborder-radius: 50%;\n\t\t\tfont-size: 30px;\n\t\t\theight: 40px;\n\t\t\tline-height: 40px;\n\t\t\ttext-align: center;\n\t\t\twidth: 40px;\n\t\t}\n\n\t\t.llms-quiz-attempt-question-main {\n\t\t\tdisplay: none;\n\t\t\tpadding: 0 15px 15px;\n\n\t\t\t.llms-quiz-results-label {\n\t\t\t\tfont-weight: 700;\n\t\t\t\tmargin: 0 0 10px;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tul.llms-quiz-attempt-answers {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\tli.llms-quiz-attempt-answer {\n\t\t\t\t\tpadding: 0;\n\t\t\t\t\tmargin: 0 0 0 30px;\n\t\t\t\t\t&:only-child {\n\t\t\t\t\t\tlist-style-type: none;\n\t\t\t\t\t\tmargin-left: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\timg {\n\t\t\t\theight: auto;\n\t\t\t\tmax-width: 200px;\n\t\t\t}\n\n\t\t\t.llms-quiz-attempt-answer-section {\n\t\t\t\tborder-top: 2px solid rgba( #fff, 0.5 );\n\t\t\t\tmargin-top: 20px;\n\t\t\t\tpadding-top: 20px;\n\t\t\t\t&:first-child {\n\t\t\t\t\tborder-top: none;\n\t\t\t\t\tmargin-top: 0;\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t&.type--picture_choice,\n\t\t&.type--picture_reorder {\n\t\t\tul.llms-quiz-attempt-answers {\n\t\t\t\tlist-style-type: none;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\n\t\t\t\tli.llms-quiz-attempt-answer {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tlist-style-type: none;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding: 5px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.type--removed {\n\t\t\t.llms-question-title {\n\t\t\t\tfont-style: italic;\n\t\t\t\tfont-weight: normal;\n\t\t\t}\n\t\t\topacity: .5;\n\t\t}\n\n\t}\n}\n",".single-llms_quiz {\n\t#llms-quiz-wrapper {\n\t\t@import \"../_includes/quiz-result-question-list\";\n\t}\n\t.llms-return {\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.llms-quiz-results {\n\t\t@include clearfix();\n\n\t\t.llms-donut {\n\t\t\t&.passing {\n\t\t\t\tcolor: $color-success;\n\t\t\t\tsvg path {\n\t\t\t\t\tstroke: $color-success;\n\t\t\t\t}\n\t\t\t}\n\t\t\t&.pending {\n\t\t\t\tcolor: #555;\n\t\t\t\tsvg path {\n\t\t\t\t\tstroke: #555;\n\t\t\t\t}\n\t\t\t}\n\t\t\t&.failing {\n\t\t\t\tcolor: $color-danger;\n\t\t\t\tsvg path {\n\t\t\t\t\tstroke: $color-danger;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.llms-quiz-results-aside,\n\t\t.llms-quiz-results-main,\n\t\t.llms-quiz-results-history {\n\t\t\tmargin-bottom: 20px;\n\t\t}\n\n\n\t\t@media all and (min-width: 600px) {\n\t\t\t.llms-quiz-results-aside {\n\t\t\t\tfloat: left;\n\t\t\t\twidth: 220px;\n\n\t\t\t\t+ .llms-quiz-results-main {\n\t\t\t\t\tfloat: right;\n\t\t\t\t\twidth: calc( 100% - 300px );\n\t\t\t\t\t+ .llms-quiz-results-history {\n\t\t\t\t\t\tfloat: right;\n\t\t\t\t\t\twidth: calc( 100% - 300px );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.llms-quiz-results-history {\n\t\t\t\tclear: right;\n\t\t\t}\n\t\t}\n\n\t}\n\n\tul.llms-quiz-meta-info {\n\t\tlist-style-type: none;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\n\t\tli {\n\t\t\tlist-style-type: none;\n\t\t\tmargin: 10px 0 0;\n\t\t\tpadding: 0\n\t\t}\n\t}\n\n\tul.llms-quiz-meta-info {\n\t\tmargin-bottom: 10px;\n\t}\n\n\t.llms-quiz-buttons {\n\t\tmargin-top: 10px;\n\t\ttext-align: left;\n\n\t\tform { display: inline-block; }\n\t}\n\n}\n\n.llms-quiz-question-wrapper {\n\tmin-height: 140px;\n\tposition: relative;\n\n\t.llms-quiz-loading {\n\t\tbottom: 20px;\n\t\tleft: 0;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\ttext-align: center;\n\t\tz-index: 1;\n\t}\n\n\t.llms-question-image {\n\n\t\timg {\n\t\t\theight: auto;\n\t\t\tmax-width: 100%;\n\t\t}\n\n\t}\n}\n\n.llms-quiz-ui {\n\tposition: relative;\n\n\t.llms-quiz-header {\n\t\talign-items: center;\n\t\tdisplay: flex;\n\t\tmargin: 0 0 40px;\n\t}\n\n\t.llms-progress {\n\t\tbackground-color: $color-border;\n\t\tflex-direction: row;\n\t\theight: 8px;\n\t\tmargin: 0;\n\t\toverflow: hidden;\n\t\t.progress-bar-complete {\n\t\t\ttransition: width 0.3s ease-in;\n\t\t\twidth: 0;\n\t\t}\n\t}\n\n\t.llms-error {\n\t\t@include clearfix();\n\t\tbackground: rgba( $color-red, .15 );\n\t\tborder: 1px solid $color-red;\n\t\tborder-radius: $radius-small;\n\t\tmargin: 20px 0;\n\t\tpadding: 15px;\n\n\t\ta {\n\t\t\tcolor: $color-red;\n\t\t\tfloat: right;\n\t\t\tfont-size: 22px;\n\t\t\tline-height: 1;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t}\n\n\t.llms-quiz-counter {\n\t\tdisplay: none;\n\n\t\tcolor: #6a6a6a;\n\t\tfloat: right;\n\t\tfont-size: 18px;\n\n\t\t.llms-sep {\n\t\t\tmargin: 0 5px;\n\t\t}\n\t}\n\n\t.llms-quiz-nav {\n\t\tmargin-top: 20px;\n\t\tbutton {\n\t\t\tmargin: 0 10px 0 0;\n\t\t}\n\t}\n\n}\n\n// single question wrapper\n.llms-question-wrapper {\n\n\t.llms-question-text {\n\t\tfont-size: 30px;\n\t\tfont-weight: 400;\n\t\tmargin-bottom: 15px;\n\t}\n\n\tol.llms-question-choices {\n\t\tlist-style-type: none;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\n\t\tli.llms-choice {\n\t\t\tborder-bottom: 1px solid #e8e8e8;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tposition: relative;\n\n\t\t\t&:last-child {\n\t\t\t\tborder-bottom: none;\n\t\t\t}\n\n\t\t\t&.type--picture {\n\t\t\t\tborder-bottom: none;\n\t\t\t\tlabel {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tpadding: 0;\n\t\t\t\t}\n\t\t\t\t.llms-marker {\n\t\t\t\t\tbottom: 10px;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tright: 10px;\n\t\t\t\t}\n\t\t\t\t.llms-choice-image {\n\t\t\t\t\tmargin: 2px;\n\t\t\t\t\tpadding: 20px;\n\t\t\t\t\ttransition: background 0.4s ease;\n\t\t\t\t\timg {\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\theight: auto;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinput:checked ~ .llms-choice-image {\n\t\t\t\t\tbackground: #efefef\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\tdisplay: none;\n\t\t\t\tleft: 0;\n\t\t\t\tpointer-events: none;\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tvisibility: hidden;\n\t\t\t}\n\n\t\t\tlabel {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 10px 20px;\n\t\t\t\tposition: relative;\n\t\t\t\t// &:hover {\n\t\t\t\t&.hovered {\n\t\t\t\t\t.llms-marker:not(.type--lister) {\n\t\t\t\t\t\t.iterator {\n\t\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.fa {\n\t\t\t\t\t\t\tdisplay: inline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-marker {\n\n\t\t\t\tbackground: $color-white;\n\t\t\t\tcolor: $color-black;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont-size: 20px;\n\t\t\t\theight: 40px;\n\t\t\t\tline-height: 40px;\n\t\t\t\tmargin-right: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\ttransition: all 0.2s ease;\n\t\t\t\tvertical-align: middle;\n\t\t\t\twidth: 40px;\n\n\t\t\t\t.fa {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t&.type--lister,\n\t\t\t\t&.type--checkbox { border-radius: 4px; }\n\t\t\t\t&.type--radio { border-radius: 50%; }\n\n\t\t\t}\n\n\t\t\tinput:checked + .llms-marker {\n\t\t\t\tbackground: $color-brand-pink;\n\t\t\t\tcolor: #fff;\n\t\t\t\t.iterator {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t\t.fa {\n\t\t\t\t\tdisplay: inline;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-choice-text {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont-size: 18px;\n\t\t\t\tfont-weight: 400;\n\t\t\t\tline-height: 1.6;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\tvertical-align: middle;\n\t\t\t\twidth: calc( 100% - 60px );\n\t\t\t}\n\n\t\t}\n\t}\n\n}\n\n.llms-quiz-timer {\n\tbackground: #fff;\n\tborder: 1px solid $color-green;\n\tborder-radius: 4px;\n\tcolor: $color-green;\n\tfloat: right;\n\tfont-size: 18px;\n\tline-height: 1;\n\tmargin-left: 20px;\n\tpadding: 8px 12px;\n\tposition: relative;\n\twhite-space: nowrap;\n\tz-index: 1;\n\n\t&.color-half {\n\t\tborder-color: $color-orange;\n\t\tcolor: $color-orange\n\t}\n\n\t&.color-empty {\n\t\tborder-color: $color-danger;\n\t\tcolor: $color-danger\n\t}\n\n\t.llms-tiles {\n\t\tdisplay: inline-block;\n\t\tmargin-left: 5px;\n\t}\n}\n\n\n// /* My Quizzes */\n// .llms-quiz-results {\n// @extend %cf;\n// font-family: \"Open Sans\",Verdana,Geneva,sans-serif,sans-serif;\n// position: relative;\n// }\n// .llms-quiz-results > h3 {\n// background-color: #f5f5f5;\n// padding: 4px;\n// }\n\n// .llms-quiz-result-details {\n// float: left;\n// ul {\n// list-style-type: none;\n// float: left;\n// li {\n// list-style-type: none;\n// font-size: 20px;\n// }\n// }\n// }\n// .llms-attempts {\n// font-weight: bold;\n// }\n\n// .llms-pass-perc {\n// font-weight: bold;\n// }\n// .llms-content-block {\n// margin: 6px 0;\n// }\n// .llms-question-wrapper {\n// margin: 40px 0 20px 0;\n// }\n// .llms-question-count {\n// margin-bottom: 20px;\n// }\n\n\n",".voucher-expand {\n\tdisplay: none;\n}",".llms-access-plans {\n\t@extend %clearfix;\n\n\t@media all and (min-width: 600px) {\n\t\t$cols: 1;\n\t\t@while $cols <= 5 {\n\t\t\t&.cols-#{$cols} .llms-access-plan {\n\t\t\t\twidth: calc( 100% / $cols );\n\t\t\t}\n\t\t\t$cols: $cols + 1;\n\t\t}\n\t}\n\n}\n\n.llms-free-enroll-form {\n\tmargin-bottom: 0;\n}\n\n.llms-access-plan {\n\tbox-sizing: border-box;\n\tfloat: left;\n\ttext-align: center;\n\twidth: 100%;\n\n\t.llms-access-plan-content,\n\t.llms-access-plan-footer {\n\t\tbackground: #f1f1f1;\n\t}\n\n\t&.featured {\n\n\t\t.llms-access-plan-featured {\n\t\t\tbackground: $color-brand-blue;\n\t\t\tborder-top-left-radius: $radius-small;\n\t\t\tborder-top-right-radius: $radius-small;\n\t\t}\n\n\t\t.llms-access-plan-content {\n\t\t\tborder-radius: 0;\n\t\t}\n\n\t\t.llms-access-plan-title {\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-top-right-radius: 0;\n\t\t}\n\n\t\t.llms-access-plan-footer,\n\t\t.llms-access-plan-content {\n\t\t\tborder-left: 3px solid $color-brand-blue;\n\t\t\tborder-right: 3px solid $color-brand-blue;\n\t\t}\n\n\t\t.llms-access-plan-footer {\n\t\t\tborder-bottom-color: $color-brand-blue;\n\t\t}\n\n\t}\n\n\t&.on-sale {\n\t\t.price-regular {\n\t\t\ttext-decoration: line-through;\n\t\t\t.lifterlms-price {\n\t\t\t\tfont-weight: 400;\n\t\t\t}\n\t\t}\n\t}\n\n\t.stamp {\n\t\tbackground: $color-brand-blue;\n\t\tborder-radius: $radius-small;\n\t\tcolor: $color-white;\n\t\tdisplay: inline-block;\n\t\tfont-size: 14px;\n\t\tfont-style: normal;\n\t\tfont-weight: bold;\n\t\tline-height: 1;\n\t\tpadding: 5px 8px 4px;\n\t}\n}\n\n.llms-access-plan-featured {\n\tcolor: #fff;\n\tfont-size: 14px;\n\tfont-weight: 700;\n\tletter-spacing: 1px;\n\tmargin: 0 2px 0 2px;\n\tpadding: 5px 0 0;\n}\n\n.llms-access-plan-content {\n\tborder-top-right-radius: $radius-small;\n\tborder-top-left-radius: $radius-small;\n\tmargin: 0 2px 0;\n\toverflow: hidden;\n\n\t.llms-access-plan-pricing {\n\t\tcolor: $color-black;\n\t\tpadding: 20px 0 0;\n\t}\n}\n\n.llms-access-plan-title {\n\tbackground: $color-brand-blue;\n\tcolor: $color-white;\n\tmargin: 0;\n\tpadding: 10px 15px;\n}\n\n.llms-access-plan-pricing {\n\n\t.llms-price-currency-symbol {\n\t\tfont-size: 14px;\n\t\tvertical-align: top;\n\t}\n\n}\n\n.llms-access-plan-price {\n\n\t.lifterlms-price {\n\t\tfont-weight: 700;\n\t}\n\n\t&.sale {\n\t\tpadding: 5px 0;\n\t\tborder-top: 1px solid #d0d0d0;\n\t\tborder-bottom: 1px solid #d0d0d0;\n\t}\n}\n\n.llms-access-plan-trial,\n.llms-access-plan-schedule,\n.llms-access-plan-sale-end,\n.llms-access-plan-expiration {\n\tfont-size: 16px;\n}\n\n.llms-access-plan-description {\n\tcolor: $color-black;\n\tfont-size: 16px;\n\tpadding: 10px 10px 0;\n\n\tul {\n\t\tmargin: 0;\n\t\tli {\n\t\t\tborder-bottom: 1px solid #d0d0d0;\n\t\t\tlist-style-type: none;\n\t\t\t&:last-child {\n\t\t\t\tborder-bottom: none;\n\t\t\t}\n\t\t}\n\t}\n\n\tdiv, img, p, ul, li {\n\t\t&:last-child { margin-bottom: 0; }\n\t}\n}\n\n.llms-access-plan-restrictions {\n\tmargin-top: 20px;\n\n\t.stamp {\n\t\tvertical-align: baseline;\n\t}\n\n\tul {\n\t\tmargin: 5px 0 0 0;\n\t\tpadding: 0;\n\n\t\tli {\n\t\t\tfont-size: 14px;\n\t\t\tlist-style-type: none;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\ta {\n\t\tcolor: $color-orange;\n\t\t&:hover {\n\t\t\tcolor: $color-brand-orange-dark;\n\t\t}\n\t}\n}\n\n.llms-access-plan-footer {\n\tborder-bottom: 3px solid #f1f1f1;\n\tborder-bottom-left-radius: $radius-small;\n\tborder-bottom-right-radius: $radius-small;\n\tpadding: 15px;\n\tmargin: 0 2px 2px 2px;\n\n\t.button {\n\t\tdisplay: inline-block;\n\t}\n\n\t.llms-access-plan-pricing {\n\t\tpadding: 0 0 10px;\n\t}\n}\n\n.webui-popover-content .llms-members-only-restrictions {\n\ttext-align: center;\n\tul,ol,li,p {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\tul,ol,li {\n\t\tlist-style-type: none;\n\t}\n\tli {\n\t\tpadding: 8px 0;\n\t\tborder-top: 1px solid #3b3b3b;\n\t\t&:first-child {\n\t\t\tborder-top: none;\n\t\t}\n\t\ta {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n}\n",".llms-checkout-wrapper {\n\t.llms-person-login-form-wrapper {\n\t\tmargin-bottom: 40px;\n\t}\t\n\tform.llms-login {\n\t\tdisplay: none;\n\t}\n\t.llms-form-heading {\n\t\tmargin: 0 0 20px;\n\t}\n}\n\n.llms-checkout {\n\tposition: relative;\n}\n\n.llms-checkout-cols-2 {\n\t@extend %clearfix;\n\n\t&.llms-col-2 {\n\n\t\tsection {\n\t\t\tbackground-color: $color-white;\n\t\t\tborder: 1px solid $color-lightgrey;\n\t\t\tborder-radius: $radius-medium;\n\t\t\tpadding: 20px;\n\n\t\t\t.llms-form-heading {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t@media all and (min-width: 800px) {\n\n\t\t.llms-checkout-col {\n\t\t\tfloat: left;\n\n\t\t\t&.llms-col-1 {\n\t\t\t\tmargin-right: 20px;\n\t\t\t\twidth: calc( 58% - 20px );\n\t\t\t}\n\t\t\t&.llms-col-2 {\n\t\t\t\tmargin-left: 20px;\n\t\t\t\twidth: calc( 42% - 20px );\n\n\t\t\t\tbutton {\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n\n\t.llms-checkout-section {\n\t\tmargin-bottom: 40px;\n\t\tposition: relative;\n\t}\n\n\t\t.llms-checkout-section-content {\n\t\t\t&.llms-form-fields {\n\t\t\t\tmargin: 0px;\n\t\t\t}\n\n\t\t\t.llms-label {\n\t\t\t\tfont-weight: 400;\n\t\t\t}\n\n\t\t\t.llms-order-summary {\n\t\t\t\tlist-style-type: none;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\n\t\t\t\tli {\n\t\t\t\t\tlist-style-type: none;\n\t\t\t\t\tmargin: 0 0 15px 0;\n\n\t\t\t\t}\n\n\t\t\t\t:not(.llms-label) {\n\t\t\t\t\tfont-weight: 700;\n\t\t\t\t}\n\n\t\t\t\tli.llms-pricing {\n\t\t\t\t\t&.on-sale,\n\t\t\t\t\t&.has-coupon {\n\t\t\t\t\t\t.price-regular { text-decoration: line-through; }\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\t.llms-coupon-wrapper {\n\t\t\t\tborder-top: 1px solid $color-border;\n\t\t\t\tmargin-top: 20px;\n\t\t\t\tpadding-top: 20px;\n\n\t\t\t\t.llms-coupon-entry {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t\tmargin-top: 20px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t.llms-form-field.llms-payment-gateway-option {\n\t\t\talign-items: center;\n\t\t\tdisplay: flex;\n\t\t\tgap: 8px;\n\n\t\t\tlabel + span.llms-description {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmargin-left: 5px;\n\t\t\t}\n\n\t\t\t.llms-description {\n\t\t\t\ta {\n\t\t\t\t\tborder: none;\n\t\t\t\t\tbox-shadow: none;\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t}\n\t\t\t\timg {\n\t\t\t\t\tdisplay: inline;\n\t\t\t\t\tmax-height: 22px;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t.llms-checkout-wrapper ul.llms-payment-gateways {\n\t\t\tmargin: 5px 0 0;\n\t\t\tpadding: 0;\n\t\t}\n\t\tul.llms-payment-gateways {\n\t\t\tlist-style-type: none;\n\n\t\t\tli:last-child:after {\n\t\t\t\tborder-bottom: 1px solid $color-border;\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin: 20px 0;\n\t\t\t}\n\n\t\t\t.llms-payment-gateway {\n\t\t\t\tmargin-bottom: 30px;\n\t\t\t\tlist-style-type: none;\n\t\t\t\t&:last-child {\n\t\t\t\t\tmargin-bottom: none;\n\t\t\t\t}\n\n\t\t\t\t&.is-selected {\n\t\t\t\t\t.llms-payment-gateway-option label {\n\t\t\t\t\t\tfont-weight: 700;\n\t\t\t\t\t}\n\t\t\t\t\t.llms-gateway-fields {\n\t\t\t\t\t\tdisplay: block;\n\n\t\t\t\t\t\t.llms-notice {\n\t\t\t\t\t\t\tmargin-left: 10px;\n\t\t\t\t\t\t\tmargin-right: 10px;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t.llms-form-field {\n\t\t\t\t\tpadding-bottom: 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\t.llms-gateway-description {\n\t\t\t\t\tmargin-left: 40px;\n\t\t\t\t}\n\n\t\t\t\t.llms-gateway-fields {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t\tmargin: 5px 0 20px;\n\t\t\t\t}\n\n\t\t\t.llms-payment-gateway-error {\n\t\t\t\tpadding: 0 10px;\n\t\t\t}\n\t\t}\n\n\t\t.llms-checkout-confirm {\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t.llms-payment-method {\n\t\t\tmargin: 10px 10px 0;\n\t\t}\n\n\t\t.llms-gateway-description {\n\t\t\tp {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-style: italic;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n",".llms-form-fields {\n\t@extend %clearfix;\n\tbox-sizing: border-box;\n\t& * {\n\t\tbox-sizing: border-box;\n\t}\n\t&.flush {\n\t\t.llms-form-field {\n\t\t\tpadding: 0 0 20px;\n\t\t}\n\t}\n\n\tlabel:not(.llms-field-html label) {\n\t\tfont-weight: 700;\n\t}\n\n\t.wp-block-columns, .wp-block-column {\n\t\tmargin-bottom: 0;\n\t}\n}\n\n\t.llms-form-heading {\n\t\tpadding: 0 10px 10px;\n\t}\n\n\t.llms-form-field {\n\t\tfloat: left;\n\t\tpadding: 0 10px 20px;\n\t\tposition: relative;\n\t\twidth: 100%;\n\n\t\t// Ensure \"empty\" labels don't break the layout.\n\t\t// See the billing_address_2 field which has no label.\n\t\tlabel:empty:after {\n\t\t\tcontent: '\\00a0';\n\t\t}\n\n\t\t[type=\"text\"],\n\t\t[type=\"password\"],\n\t\t[type=\"email\"],\n\t\t[type=\"url\"],\n\t\t[type=\"tel\"],\n\t\t[type=\"number\"] {\n\t\t\tbackground-color: $color-white;\n\t\t\tbackground-clip: padding-box;\n\t\t\tborder: 1px solid $color-grey;\n\t\t\tborder-radius: $radius-small;\n\t\t\tbox-sizing: border-box;\n\t\t\tfont-size: 16px;\n\t\t\tline-height: 1;\n\t\t\tpadding: 8px 12px;\n\t\t\ttransition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tinput:focus,\n\t\tinput:focus-visible {\n\t\t\tborder-color: $color-brand-blue-light;\n\t\t\toutline: thin solid;\n\t\t}\n\n\t\tselect {\n\t\t\t-webkit-appearance: none;\n\t\t\t-moz-appearance: none;\n\t\t\t-ms-appearance: none;\n\t\t\tappearance: none;\n\t\t\tbackground-color: $color-white;\n\t\t\tborder: 1px solid $color-grey;\n\t\t\tborder-radius: $radius-small;\n\t\t\tbox-sizing: border-box;\n\t\t\tcolor: $color-black;\n\t\t\tpadding: 8px 12px;\n\t\t\tmargin: 0;\n\t\t\twidth: 100%;\n\t\t\tfont-family: inherit;\n\t\t\tfont-size: 16px;\n\t\t\tcursor: inherit;\n\t\t\tline-height: 1.6;\n\t\t\tz-index: 1;\n\t\t\toutline: none;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: linear-gradient(45deg, transparent 50%, currentcolor 50%), linear-gradient(135deg, currentcolor 50%, transparent 50%);\n\t\t\tbackground-position: right 15px top 1.3rem, right 10px top 1.3rem;\n\t\t\tbackground-size: 5px 5px, 5px 5px;\n\t\t}\n\n\t\tselect::-ms-expand {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\tselect:focus {\n\t\t\tborder: 1px solid $color-brand-blue-light;\n\t\t\toutline: thin solid;\n\t\t}\n\n\t\t&.valid {\n\t\t\tinput[type=\"date\"], input[type=\"time\"], input[type=\"datetime-local\"], input[type=\"week\"], input[type=\"month\"], input[type=\"text\"], input[type=\"email\"], input[type=\"url\"], input[type=\"password\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"number\"], textarea, select {\n\t\t\t\tbackground: rgba( #83c373, .3 );\n\t\t\t\tborder-color: #83c373;\n\t\t\t}\n\t\t}\n\n\t\t&.error,\n\t\t&.invalid {\n\t\t\tinput[type=\"date\"], input[type=\"time\"], input[type=\"datetime-local\"], input[type=\"week\"], input[type=\"month\"], input[type=\"text\"], input[type=\"email\"], input[type=\"url\"], input[type=\"password\"], input[type=\"search\"], input[type=\"tel\"], input[type=\"number\"], textarea, select {\n\t\t\t\tbackground: rgba( $color-red, .3 );\n\t\t\t\tborder-color: $color-red;\n\t\t\t}\n\t\t}\n\n\t\t&.llms-visually-hidden-field {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&.align-right {\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t@media screen and ( min-width: 600px ) {\n\t\t\t$i: 1;\n\t\t\t@while $i <= 12 {\n\t\t\t\t&.llms-cols-#{$i} {\n\t\t\t\t\twidth: calc( $i / 12 ) * 100%;\n\t\t\t\t\t$i: $i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.type-hidden { padding: 0; }\n\n\t\t&.type-radio,\n\t\t&.type-checkbox {\n\t\t\tinput,\n\t\t\tlabel {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t\tinput {\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\t\t\tlabel + .llms-description {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t}\n\n\t\t&.type-radio:not(.is-group) {\n\n\t\t\tinput[type=\"radio\"] {\n\t\t\t\tposition: absolute;\n\t\t\t\topacity: 0;\n\t\t\t\tvisibility: none;\n\t\t\t}\n\n\t\t\tlabel:before {\n\t\t\t\tbackground: #fafafa;\n\t\t\t\tbackground-position: -24px 0;\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tbox-shadow: hsla( 0,0%,100%,.15) 0 1px 1px, inset hsla(0,0%,0%,.35) 0 0 0 1px;\n\t\t\t\tcontent: '';\n\t\t\t\tcursor: pointer;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\theight: 22px;\n\t\t\t\tmargin-right: 5px;\n\t\t\t\tposition: relative;\n\t\t\t\ttransition: background-position .15s cubic-bezier(.8, 0, 1, 1);\n\t\t\t\ttop: -3px;\n\t\t\t\tvertical-align: middle;\n\t\t\t\twidth: 22px;\n\t\t\t\tz-index: 2;\n\t\t\t}\n\n\t\t\tinput[type=\"radio\"]:checked + label:before {\n\t\t\t\ttransition: background-position .2s .15s cubic-bezier(0, 0, .2, 1);\n\t\t\t\tbackground-position: 0 0;\n\t\t\t\tbackground-image: radial-gradient(ellipse at center, $color-brand-blue 0%,$color-brand-blue 40%, #fafafa 45%);\n\t\t\t}\n\n\t\t}\n\n\t\t.llms-input-group {\n\t\t\tmargin-top: 5px;\n\t\t\t.llms-form-field {\n\t\t\t\tpadding: 0 0 5px 5px;\n\t\t\t}\n\t\t}\n\n\t\t&.type-reset,\n\t\t&.type-button,\n\t\t&.type-submit {\n\t\t\tbutton:not(.auto) { width: 100%; }\n\t\t}\n\n\t\t.llms-description {\n\t\t\tfont-size: 14px;\n\t\t\tfont-style: italic;\n\t\t\tline-height: 18px;\n\t\t}\n\n\t\t.llms-required {\n\t\t\tcolor: $color-red;\n\t\t\tmargin-left: 4px;\n\t\t}\n\n\t\tinput, textarea, select {\n\t\t\twidth: 100%;\n\t\t\tmargin-bottom: 5px;\n\t\t}\n\n\t\t.select2-container .select2-selection--single {\n\t\t\theight: auto;\n\t\t\tpadding: 4px 6px;\n\t\t}\n\t\t.select2-container--default .select2-selection--single .select2-selection__arrow {\n\t\t\theight: 100%;\n\t\t}\n\n\t}\n\n\n\t.llms-password-strength-meter {\n\t\tborder: 1px solid #dadada;\n\t\tdisplay: none;\n\t\tfont-size: 10px;\n\t\tmargin-top: -10px;\n\t\tpadding: 1px;\n\t\tposition: relative;\n\t\ttext-align: center;\n\n\t\t&:before {\n\t\t\tbottom: 0;\n\t\t\tcontent: '';\n\t\t\tleft: 0;\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\ttransition: width .4s ease;\n\t\t}\n\n\t\t&.mismatch,\n\t\t&.too-short,\n\t\t&.very-weak {\n\t\t\tborder-color: #e35b5b;\n\t\t\t&:before {\n\t\t\t\tbackground: rgba( #e35b5b, 0.25 );\n\t\t\t\twidth: 25%;\n\t\t\t}\n\t\t}\n\n\t\t&.too-short:before {\n\t\t\twidth: 0;\n\t\t}\n\n\t\t&.weak {\n\t\t\tborder-color: #f78b53;\n\t\t\t&:before {\n\t\t\t\tbackground: rgba( #f78b53, 0.25 );\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\t&.medium {\n\t\t\tborder-color: #ffc733;\n\t\t\t&:before {\n\t\t\t\tbackground: rgba( #ffc733, 0.25 );\n\t\t\t\twidth: 75%;\n\t\t\t}\n\t\t}\n\n\t\t&.strong {\n\t\t\tborder-color: #83c373;\n\t\t\t&:before {\n\t\t\t\tbackground: rgba( #83c373, 0.25 );\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n\t\t+ .llms-description {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n",".llms-widget-syllabus--collapsible {\n\n\t.llms-section {\n\n\t\t.section-header {\n\n\t\t\tcursor: pointer;\n\n\t\t}\n\n\t\t&.llms-section--opened {\n\n\t\t\t.llms-collapse-caret {\n\t\t\t\t.fa-caret-right { display: none; }\n\t\t\t}\n\n\t\t}\n\n\t\t&.llms-section--closed {\n\n\t\t\t.llms-collapse-caret {\n\t\t\t\t.fa-caret-down { display: none; }\n\t\t\t}\n\n\t\t\t.llms-lesson {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t.llms-syllabus-footer {\n\n\t\ttext-align: left;\n\n\t}\n\n}\n",".llms-student-dashboard {\n\n\t.llms-sd-title {\n\t\talign-items: center;\n\t\tdisplay: flex;\n\t\tgap: 15px;\n\t\tmargin: 40px 0 20px 0;\n\n\t\tsmall {\n\t\t\tfont-size: 18px;\n\n\t\t\t+ a {\n\t\t\ttext-decoration: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t.llms-sd-items { // ul\n\t\tlist-style-type: none;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\t\t.llms-sd-item { // li\n\t\t\tdisplay: inline-block;\n\t\t\tlist-style-type: none;\n\t\t\tmargin: 5px 0;\n\t\t\tpadding: 0;\n\n\t\t\t&:last-child {\n\t\t\t\t.llms-sep {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.llms-sep {\n\t\t\t\tcolor: $color-darkgrey;\n\t\t\t\tmargin: 0 5px;\n\t\t\t}\n\t\t}\n\n\t.llms-sd-section {\n\t\th2 {\n\t\t\tmargin: 0 0 15px 0;\n\t\t}\n\n\t\t.llms-sd-section-title {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t.llms-sd-section-footer {\n\t\t\tmargin-top: 10px;\n\n\t\t\t.llms-button-secondary {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\t\t}\n\t}\n\n\t.orders-table {\n\t\tborder: 1px solid $color-border;\n\t\tborder-spacing: 0;\n\t\twidth: 100%;\n\n\t\tthead {\n\t\t\tdisplay: none;\n\t\t\tth,td {\n\t\t\t\tfont-weight: 700;\n\t\t\t}\n\t\t\t@media all and ( min-width: 600px ) {\n\t\t\t\tdisplay: table-header-group;\n\t\t\t}\n\t\t}\n\n\t\ttbody {\n\t\t\ttr:nth-child( odd ) {\n\t\t\t\ttd, th {\n\t\t\t\t\tbackground: #f9f9f9;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttr:last-child {\n\t\t\t\tborder-bottom-width: 0;\n\t\t\t}\n\t\t}\n\n\t\ttfoot {\n\t\t\ttr {\n\t\t\t\tbackground: #f9f9f9;\n\t\t\t}\n\t\t\tth, td {\n\t\t\t\tpadding: 10px;\n\t\t\t\ttext-align: right;\n\t\t\t\t&:last-child { border-bottom-width: 0; }\n\t\t\t}\n\t\t}\n\n\t\tth {\n\t\t\tfont-weight: 700;\n\t\t}\n\n\t\tth, td {\n\t\t\tborder-color: $color-border;\n\t\t\tborder-style: solid;\n\t\t\tborder-width: 0;\n\t\t\tdisplay: block;\n\t\t\tpadding: 15px 20px;\n\t\t\ttext-align: center;\n\n\t\t\t.llms-button-primary {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t&:last-child {\n\t\t\t\tborder-bottom-width: 1px;\n\t\t\t}\n\n\t\t\t&:before {\n\t\t\t\tcontent: attr( data-label );\n\t\t\t}\n\n\t\t\t@media all and ( min-width: 600px ) {\n\t\t\t\tborder-bottom-width: 1px;\n\t\t\t\tdisplay: table-cell;\n\t\t\t\ttext-align: left;\n\t\t\t\t&:first-child { width: 220px; }\n\t\t\t\t&:before { display: none; }\n\t\t\t}\n\n\t\t}\n\n\t\t@media all and ( min-width: 600px ) {\n\t\t\t&.transactions th:first-child {width: auto; }\n\t\t}\n\n\t}\n\n\t@include order_status_badges();\n\n\t.order-title {\n\t\t.llms-status {\n\t\t\tfont-size: 18px;\n\t\t}\n\t}\n\n\t.llms-person-form-wrapper {\n\t\t.llms-change-password { display: none; }\n\t}\n\n\t.order-primary {\n\n\t\t@media all and ( min-width: 600px ) {\n\t\t\tfloat: left;\n\t\t\twidth: 68%;\n\t\t}\n\n\t}\n\t.order-secondary {\n\n\t\t@media all and ( min-width: 600px ) {\n\t\t\tfloat: left;\n\t\t\twidth: 32%;\n\t\t}\n\n\t\tform {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t}\n\n\t// stack columns when alternate layout declared via filter\n\t@media all and ( min-width: 600px ) {\n\t\t.llms-view-order.llms-stack-cols {\n\t\t\t.order-primary,\n\t\t\t.order-secondary {\n\t\t\t\tfloat: none;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\t}\n\n\t.llms-switch-payment-source {\n\t\t.llms-notice,\n\t\t.entry-content .llms-notice {\n\t\t\tmargin-left: 10px;\n\t\t\tmargin-right: 10px;\n\t\t}\n\t}\n\n\t.llms-switch-payment-source-main {\n\t\tborder: none;\n\t\tdisplay: none;\n\t\tmargin: 0;\n\t\tul.llms-payment-gateways {\n\t\t\tpadding: 10px 15px 0;\n\t\t\tmargin: 0;\n\t\t}\n\t\t.llms-payment-method,\n\t\tul.llms-order-summary {\n\t\t\tpadding: 0 25px 10px;\n\t\t\tmargin: 0;\n\t\t\tlist-style-type: none;\n\t\t\tli { list-style-type: none; }\n\t\t}\n\t}\n\n\t/**\n\t * Dashboard Home\n\t */\n\t&.dashboard {\n\t\t.llms-sd-section {\n\t\t\tborder: 1px solid $color-border;\n\t\t\tborder-radius: $radius-small;\n\t\t\tpadding: 20px;\n\t\t\tmargin-bottom: 40px;\n\t\t}\n\t}\n\t.llms-loop-list {\n\t\tmargin: 0 -10px;\n\t}\n\n}\n\n// My Grades course list\n.llms-sd-grades {\n\t.llms-table {\n\t\t.llms-progress {\n\t\t\tdisplay: block;\n\t\t\tmargin: 0;\n\t\t\t.llms-progress-bar {\n\t\t\t\ttop: 0;\n\t\t\t\theight: 1.4em;\n\t\t\t}\n\t\t\t.progress__indicator {\n\t\t\t\tfont-size: 1em;\n\t\t\t\tposition: relative;\n\t\t\t\tright: 0.4em;\n\t\t\t\ttop: 0.2em;\n\t\t\t\tz-index: 1;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// grades table for a single course\n.llms-table.llms-single-course-grades {\n\n\ttbody {\n\t\ttr:first-child td, tr:first-child th {\n\t\t\tbackground-color: #eaeaea;\n\t\t}\n\t}\n\n\tth {\n\t\tfont-weight: 400;\n\t\ttext-align: left;\n\t}\n\n\ttd {\n\t\t.llms-donut {\n\t\t\tdisplay: inline-block;\n\t\t\tvertical-align: middle;\n\t\t}\n\t\t.llms-status {\n\t\t\tmargin-right: 4px;\n\t\t}\n\t\t.llms-donut + .llms-status {\n\t\t\tmargin-left: 4px;\n\t\t}\n\t}\n\n\tth.llms-section_title {\n\t\tfont-size: 110%;\n\t\tfont-weight: 700;\n\t}\n\n\ttd.llms-lesson_title {\n\t\tmax-width: 40%;\n\t}\n\ttd.llms-associated_quiz {\n\t\t.llms-donut {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-right: 5px;\n\t\t\tvertical-align: middle;\n\t\t}\n\t}\n\ttd.llms-lesson_title {\n\t\ta[href=\"#\"] {\n\t\t\tpointer-events: none;\n\t\t}\n\t\ta[href^=\"#\"] {\n\t\t\tcolor: inherit;\n\t\t\tposition: relative;\n\t\t\t.llms-tooltip {\n\t\t\t\tmax-width: 380px;\n\t\t\t\twidth: 380px;\n\t\t\t\t&.show {\n\t\t\t\t\ttop: -54px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n.llms-sd-widgets {\n\tdisplay: flex;\n\n\t.llms-sd-widget {\n\t\tbackground: $color-white;\n\t\tborder: 1px solid $color-border;\n\t\tborder-bottom-right-radius: $radius-small;\n\t\tborder-bottom-left-radius: $radius-small;\n\t\tflex: 1;\n\t\tmargin: 10px 10px 20px;\n\t\tpadding: 0 0 20px;\n\t\t&:first-child {\n\t\t\tmargin-left: 0;\n\t\t}\n\t\t&:last-child {\n\t\t\tmargin-right: 0;\n\t\t}\n\n\t\t.llms-sd-widget-title {\n\t\t\tbackground: $color-brand-blue;\n\t\t\tcolor: #fff;\n\t\t\tfont-size: 18px;\n\t\t\tline-height: 1;\n\t\t\tmargin: 0 0 20px;\n\t\t\tpadding: 10px;\n\t\t}\n\n\t\t.llms-sd-widget-empty {\n\t\t\tfont-size: 14px;\n\t\t\tfont-style: italic;\n\t\t\topacity: 0.5;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t.llms-donut {\n\t\t\tmargin: 0 auto;\n\t\t}\n\n\t\t.llms-sd-date {\n\t\t\topacity: 0.8;\n\t\t\ttext-align: center;\n\t\t\tfont-size: 22px;\n\t\t\tline-height: 1.1;\n\t\t\tspan {\n\t\t\t\tdisplay: block;\n\t\t\t\t&.day {\n\t\t\t\t\tfont-size: 52px;\n\t\t\t\t}\n\t\t\t\t&.diff {\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\tfont-style: italic;\n\t\t\t\t\tmargin-top: 8px;\n\t\t\t\t\topacity: 0.75;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.llms-achievement {\n\t\t\tbackground: transparent;\n\t\t\tmargin: 0 auto;\n\t\t\tmax-width: 120px;\n\t\t\t.llms-achievement-title {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t}\n\n\n}\n\n.redeem-voucher {\n\t.form-row {\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t\tfont-weight: 700;\n\t\t}\n\t\tinput[type=\"text\"] {\n\t\t\tbackground-color: $color-white;\n\t\t\tbackground-clip: padding-box;\n\t\t\tborder: 1px solid $color-grey;\n\t\t\tborder-radius: $radius-small;\n\t\t\tbox-sizing: border-box;\n\t\t\tfont-size: 16px;\n\t\t\tline-height: 1;\n\t\t\tpadding: 8px 12px;\n\t\t\ttransition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n\t\t}\n\t}\n}\n\n\n.llms-sd-pagination {\n\tmargin-top: 24px;\n\t@include clearfix;\n\t.llms-button-secondary {\n\t\tdisplay: inline-block;\n\t\t&.prev { float: left; }\n\t\t&.next { float: right; }\n\t}\n}\n\n\n.llms-sd-notification-center {\n\tbackground: $color-white;\n\tborder: 1px solid $color-border;\n\tborder-radius: $radius-small;\n\tpadding: 20px;\n\n\t.llms-notification-list-item {\n\t\t.llms-notification {\n\t\t\tz-index: 1;\n\t\t\t&:hover {\n\t\t\t\tbackground-color: inherit;\n\t\t\t}\t\n\t\t}\n\t}\n}\n",".llms-table {\n\tborder: 1px solid $color-border;\n\tborder-spacing: 0;\n\twidth: 100%;\n\n\tthead {\n\t\tth,td {\n\t\t\tfont-weight: 700;\n\t\t}\n\t}\n\n\ttbody {\n\t\ttr:nth-child( odd ) {\n\t\t\ttd, th {\n\t\t\t\tbackground: #f9f9f9;\n\t\t\t}\n\t\t}\n\t\ttr:last-child {\n\t\t\tborder-bottom-width: 0;\n\t\t}\n\t}\n\n\ttfoot {\n\t\ttr {\n\t\t\tbackground: #f9f9f9;\n\t\t\t.llms-pagination .page-numbers {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t\t.llms-table-sort {\n\t\t\t\ttext-align: right;\n\t\t\t\tform, select, input, button {\n\t\t\t\t\tmargin: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tth {\n\t\tfont-weight: 700;\n\t}\n\n\tth, td {\n\t\tborder-bottom: 1px solid $color-border;\n\t\tpadding: 15px 20px;\n\n\t\t// launchpad compat...\n\t\t&:first-child { padding-left: 12px; }\n\t\t&:last-child { padding-right: 12px; }\n\n\t}\n\n}\n\n// launchpad compat...\n#page .llms-table tfoot label {\n\tdisplay: inline;\n}\n#page .llms-table tfoot select {\n\theight: auto;\n}\n","/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n font-family: 'FontAwesome';\n src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');\n src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n.fa {\n display: inline-block;\n font: normal normal normal 14px/1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n font-size: 1.33333333em;\n line-height: 0.75em;\n vertical-align: -15%;\n}\n.fa-2x {\n font-size: 2em;\n}\n.fa-3x {\n font-size: 3em;\n}\n.fa-4x {\n font-size: 4em;\n}\n.fa-5x {\n font-size: 5em;\n}\n.fa-fw {\n width: 1.28571429em;\n text-align: center;\n}\n.fa-ul {\n padding-left: 0;\n margin-left: 2.14285714em;\n list-style-type: none;\n}\n.fa-ul > li {\n position: relative;\n}\n.fa-li {\n position: absolute;\n left: -2.14285714em;\n width: 2.14285714em;\n top: 0.14285714em;\n text-align: center;\n}\n.fa-li.fa-lg {\n left: -1.85714286em;\n}\n.fa-border {\n padding: .2em .25em .15em;\n border: solid 0.08em #eeeeee;\n border-radius: .1em;\n}\n.fa-pull-left {\n float: left;\n}\n.fa-pull-right {\n float: right;\n}\n.fa.fa-pull-left {\n margin-right: .3em;\n}\n.fa.fa-pull-right {\n margin-left: .3em;\n}\n/* Deprecated as of 4.4.0 */\n.pull-right {\n float: right;\n}\n.pull-left {\n float: left;\n}\n.fa.pull-left {\n margin-right: .3em;\n}\n.fa.pull-right {\n margin-left: .3em;\n}\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n -ms-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n -ms-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n -ms-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n -ms-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n filter: none;\n}\n.fa-stack {\n position: relative;\n display: inline-block;\n width: 2em;\n height: 2em;\n line-height: 2em;\n vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n position: absolute;\n left: 0;\n width: 100%;\n text-align: center;\n}\n.fa-stack-1x {\n line-height: inherit;\n}\n.fa-stack-2x {\n font-size: 2em;\n}\n.fa-inverse {\n color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters that represent icons */\n.fa-glass:before {\n content: \"\\f000\";\n}\n.fa-music:before {\n content: \"\\f001\";\n}\n.fa-search:before {\n content: \"\\f002\";\n}\n.fa-envelope-o:before {\n content: \"\\f003\";\n}\n.fa-heart:before {\n content: \"\\f004\";\n}\n.fa-star:before {\n content: \"\\f005\";\n}\n.fa-star-o:before {\n content: \"\\f006\";\n}\n.fa-user:before {\n content: \"\\f007\";\n}\n.fa-film:before {\n content: \"\\f008\";\n}\n.fa-th-large:before {\n content: \"\\f009\";\n}\n.fa-th:before {\n content: \"\\f00a\";\n}\n.fa-th-list:before {\n content: \"\\f00b\";\n}\n.fa-check:before {\n content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n content: \"\\f00d\";\n}\n.fa-search-plus:before {\n content: \"\\f00e\";\n}\n.fa-search-minus:before {\n content: \"\\f010\";\n}\n.fa-power-off:before {\n content: \"\\f011\";\n}\n.fa-signal:before {\n content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n content: \"\\f013\";\n}\n.fa-trash-o:before {\n content: \"\\f014\";\n}\n.fa-home:before {\n content: \"\\f015\";\n}\n.fa-file-o:before {\n content: \"\\f016\";\n}\n.fa-clock-o:before {\n content: \"\\f017\";\n}\n.fa-road:before {\n content: \"\\f018\";\n}\n.fa-download:before {\n content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n content: \"\\f01b\";\n}\n.fa-inbox:before {\n content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n content: \"\\f01e\";\n}\n.fa-refresh:before {\n content: \"\\f021\";\n}\n.fa-list-alt:before {\n content: \"\\f022\";\n}\n.fa-lock:before {\n content: \"\\f023\";\n}\n.fa-flag:before {\n content: \"\\f024\";\n}\n.fa-headphones:before {\n content: \"\\f025\";\n}\n.fa-volume-off:before {\n content: \"\\f026\";\n}\n.fa-volume-down:before {\n content: \"\\f027\";\n}\n.fa-volume-up:before {\n content: \"\\f028\";\n}\n.fa-qrcode:before {\n content: \"\\f029\";\n}\n.fa-barcode:before {\n content: \"\\f02a\";\n}\n.fa-tag:before {\n content: \"\\f02b\";\n}\n.fa-tags:before {\n content: \"\\f02c\";\n}\n.fa-book:before {\n content: \"\\f02d\";\n}\n.fa-bookmark:before {\n content: \"\\f02e\";\n}\n.fa-print:before {\n content: \"\\f02f\";\n}\n.fa-camera:before {\n content: \"\\f030\";\n}\n.fa-font:before {\n content: \"\\f031\";\n}\n.fa-bold:before {\n content: \"\\f032\";\n}\n.fa-italic:before {\n content: \"\\f033\";\n}\n.fa-text-height:before {\n content: \"\\f034\";\n}\n.fa-text-width:before {\n content: \"\\f035\";\n}\n.fa-align-left:before {\n content: \"\\f036\";\n}\n.fa-align-center:before {\n content: \"\\f037\";\n}\n.fa-align-right:before {\n content: \"\\f038\";\n}\n.fa-align-justify:before {\n content: \"\\f039\";\n}\n.fa-list:before {\n content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n content: \"\\f03b\";\n}\n.fa-indent:before {\n content: \"\\f03c\";\n}\n.fa-video-camera:before {\n content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n content: \"\\f03e\";\n}\n.fa-pencil:before {\n content: \"\\f040\";\n}\n.fa-map-marker:before {\n content: \"\\f041\";\n}\n.fa-adjust:before {\n content: \"\\f042\";\n}\n.fa-tint:before {\n content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n content: \"\\f044\";\n}\n.fa-share-square-o:before {\n content: \"\\f045\";\n}\n.fa-check-square-o:before {\n content: \"\\f046\";\n}\n.fa-arrows:before {\n content: \"\\f047\";\n}\n.fa-step-backward:before {\n content: \"\\f048\";\n}\n.fa-fast-backward:before {\n content: \"\\f049\";\n}\n.fa-backward:before {\n content: \"\\f04a\";\n}\n.fa-play:before {\n content: \"\\f04b\";\n}\n.fa-pause:before {\n content: \"\\f04c\";\n}\n.fa-stop:before {\n content: \"\\f04d\";\n}\n.fa-forward:before {\n content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n content: \"\\f050\";\n}\n.fa-step-forward:before {\n content: \"\\f051\";\n}\n.fa-eject:before {\n content: \"\\f052\";\n}\n.fa-chevron-left:before {\n content: \"\\f053\";\n}\n.fa-chevron-right:before {\n content: \"\\f054\";\n}\n.fa-plus-circle:before {\n content: \"\\f055\";\n}\n.fa-minus-circle:before {\n content: \"\\f056\";\n}\n.fa-times-circle:before {\n content: \"\\f057\";\n}\n.fa-check-circle:before {\n content: \"\\f058\";\n}\n.fa-question-circle:before {\n content: \"\\f059\";\n}\n.fa-info-circle:before {\n content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n content: \"\\f05d\";\n}\n.fa-ban:before {\n content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n content: \"\\f060\";\n}\n.fa-arrow-right:before {\n content: \"\\f061\";\n}\n.fa-arrow-up:before {\n content: \"\\f062\";\n}\n.fa-arrow-down:before {\n content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n content: \"\\f064\";\n}\n.fa-expand:before {\n content: \"\\f065\";\n}\n.fa-compress:before {\n content: \"\\f066\";\n}\n.fa-plus:before {\n content: \"\\f067\";\n}\n.fa-minus:before {\n content: \"\\f068\";\n}\n.fa-asterisk:before {\n content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n content: \"\\f06a\";\n}\n.fa-gift:before {\n content: \"\\f06b\";\n}\n.fa-leaf:before {\n content: \"\\f06c\";\n}\n.fa-fire:before {\n content: \"\\f06d\";\n}\n.fa-eye:before {\n content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n content: \"\\f071\";\n}\n.fa-plane:before {\n content: \"\\f072\";\n}\n.fa-calendar:before {\n content: \"\\f073\";\n}\n.fa-random:before {\n content: \"\\f074\";\n}\n.fa-comment:before {\n content: \"\\f075\";\n}\n.fa-magnet:before {\n content: \"\\f076\";\n}\n.fa-chevron-up:before {\n content: \"\\f077\";\n}\n.fa-chevron-down:before {\n content: \"\\f078\";\n}\n.fa-retweet:before {\n content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n content: \"\\f07a\";\n}\n.fa-folder:before {\n content: \"\\f07b\";\n}\n.fa-folder-open:before {\n content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n content: \"\\f080\";\n}\n.fa-twitter-square:before {\n content: \"\\f081\";\n}\n.fa-facebook-square:before {\n content: \"\\f082\";\n}\n.fa-camera-retro:before {\n content: \"\\f083\";\n}\n.fa-key:before {\n content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n content: \"\\f085\";\n}\n.fa-comments:before {\n content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n content: \"\\f088\";\n}\n.fa-star-half:before {\n content: \"\\f089\";\n}\n.fa-heart-o:before {\n content: \"\\f08a\";\n}\n.fa-sign-out:before {\n content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n content: \"\\f08d\";\n}\n.fa-external-link:before {\n content: \"\\f08e\";\n}\n.fa-sign-in:before {\n content: \"\\f090\";\n}\n.fa-trophy:before {\n content: \"\\f091\";\n}\n.fa-github-square:before {\n content: \"\\f092\";\n}\n.fa-upload:before {\n content: \"\\f093\";\n}\n.fa-lemon-o:before {\n content: \"\\f094\";\n}\n.fa-phone:before {\n content: \"\\f095\";\n}\n.fa-square-o:before {\n content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n content: \"\\f097\";\n}\n.fa-phone-square:before {\n content: \"\\f098\";\n}\n.fa-twitter:before {\n content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n content: \"\\f09a\";\n}\n.fa-github:before {\n content: \"\\f09b\";\n}\n.fa-unlock:before {\n content: \"\\f09c\";\n}\n.fa-credit-card:before {\n content: \"\\f09d\";\n}\n.fa-feed:before,\n.fa-rss:before {\n content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n content: \"\\f0a1\";\n}\n.fa-bell:before {\n content: \"\\f0f3\";\n}\n.fa-certificate:before {\n content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n content: \"\\f0ab\";\n}\n.fa-globe:before {\n content: \"\\f0ac\";\n}\n.fa-wrench:before {\n content: \"\\f0ad\";\n}\n.fa-tasks:before {\n content: \"\\f0ae\";\n}\n.fa-filter:before {\n content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n content: \"\\f0c1\";\n}\n.fa-cloud:before {\n content: \"\\f0c2\";\n}\n.fa-flask:before {\n content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n content: \"\\f0c7\";\n}\n.fa-square:before {\n content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n content: \"\\f0cc\";\n}\n.fa-underline:before {\n content: \"\\f0cd\";\n}\n.fa-table:before {\n content: \"\\f0ce\";\n}\n.fa-magic:before {\n content: \"\\f0d0\";\n}\n.fa-truck:before {\n content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n content: \"\\f0d5\";\n}\n.fa-money:before {\n content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n content: \"\\f0da\";\n}\n.fa-columns:before {\n content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n content: \"\\f0de\";\n}\n.fa-envelope:before {\n content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n content: \"\\f0eb\";\n}\n.fa-exchange:before {\n content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n content: \"\\f0ee\";\n}\n.fa-user-md:before {\n content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n content: \"\\f0a2\";\n}\n.fa-coffee:before {\n content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n content: \"\\f0f6\";\n}\n.fa-building-o:before {\n content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n content: \"\\f0f9\";\n}\n.fa-medkit:before {\n content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n content: \"\\f0fb\";\n}\n.fa-beer:before {\n content: \"\\f0fc\";\n}\n.fa-h-square:before {\n content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n content: \"\\f103\";\n}\n.fa-angle-left:before {\n content: \"\\f104\";\n}\n.fa-angle-right:before {\n content: \"\\f105\";\n}\n.fa-angle-up:before {\n content: \"\\f106\";\n}\n.fa-angle-down:before {\n content: \"\\f107\";\n}\n.fa-desktop:before {\n content: \"\\f108\";\n}\n.fa-laptop:before {\n content: \"\\f109\";\n}\n.fa-tablet:before {\n content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n content: \"\\f10b\";\n}\n.fa-circle-o:before {\n content: \"\\f10c\";\n}\n.fa-quote-left:before {\n content: \"\\f10d\";\n}\n.fa-quote-right:before {\n content: \"\\f10e\";\n}\n.fa-spinner:before {\n content: \"\\f110\";\n}\n.fa-circle:before {\n content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n content: \"\\f112\";\n}\n.fa-github-alt:before {\n content: \"\\f113\";\n}\n.fa-folder-o:before {\n content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n content: \"\\f115\";\n}\n.fa-smile-o:before {\n content: \"\\f118\";\n}\n.fa-frown-o:before {\n content: \"\\f119\";\n}\n.fa-meh-o:before {\n content: \"\\f11a\";\n}\n.fa-gamepad:before {\n content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n content: \"\\f11c\";\n}\n.fa-flag-o:before {\n content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n content: \"\\f11e\";\n}\n.fa-terminal:before {\n content: \"\\f120\";\n}\n.fa-code:before {\n content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n content: \"\\f123\";\n}\n.fa-location-arrow:before {\n content: \"\\f124\";\n}\n.fa-crop:before {\n content: \"\\f125\";\n}\n.fa-code-fork:before {\n content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n content: \"\\f127\";\n}\n.fa-question:before {\n content: \"\\f128\";\n}\n.fa-info:before {\n content: \"\\f129\";\n}\n.fa-exclamation:before {\n content: \"\\f12a\";\n}\n.fa-superscript:before {\n content: \"\\f12b\";\n}\n.fa-subscript:before {\n content: \"\\f12c\";\n}\n.fa-eraser:before {\n content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n content: \"\\f12e\";\n}\n.fa-microphone:before {\n content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n content: \"\\f131\";\n}\n.fa-shield:before {\n content: \"\\f132\";\n}\n.fa-calendar-o:before {\n content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n content: \"\\f134\";\n}\n.fa-rocket:before {\n content: \"\\f135\";\n}\n.fa-maxcdn:before {\n content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n content: \"\\f13a\";\n}\n.fa-html5:before {\n content: \"\\f13b\";\n}\n.fa-css3:before {\n content: \"\\f13c\";\n}\n.fa-anchor:before {\n content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n content: \"\\f13e\";\n}\n.fa-bullseye:before {\n content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n content: \"\\f142\";\n}\n.fa-rss-square:before {\n content: \"\\f143\";\n}\n.fa-play-circle:before {\n content: \"\\f144\";\n}\n.fa-ticket:before {\n content: \"\\f145\";\n}\n.fa-minus-square:before {\n content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n content: \"\\f147\";\n}\n.fa-level-up:before {\n content: \"\\f148\";\n}\n.fa-level-down:before {\n content: \"\\f149\";\n}\n.fa-check-square:before {\n content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n content: \"\\f14c\";\n}\n.fa-share-square:before {\n content: \"\\f14d\";\n}\n.fa-compass:before {\n content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n content: \"\\f153\";\n}\n.fa-gbp:before {\n content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n content: \"\\f15a\";\n}\n.fa-file:before {\n content: \"\\f15b\";\n}\n.fa-file-text:before {\n content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n content: \"\\f165\";\n}\n.fa-youtube-square:before {\n content: \"\\f166\";\n}\n.fa-youtube:before {\n content: \"\\f167\";\n}\n.fa-xing:before {\n content: \"\\f168\";\n}\n.fa-xing-square:before {\n content: \"\\f169\";\n}\n.fa-youtube-play:before {\n content: \"\\f16a\";\n}\n.fa-dropbox:before {\n content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n content: \"\\f16c\";\n}\n.fa-instagram:before {\n content: \"\\f16d\";\n}\n.fa-flickr:before {\n content: \"\\f16e\";\n}\n.fa-adn:before {\n content: \"\\f170\";\n}\n.fa-bitbucket:before {\n content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n content: \"\\f172\";\n}\n.fa-tumblr:before {\n content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n content: \"\\f178\";\n}\n.fa-apple:before {\n content: \"\\f179\";\n}\n.fa-windows:before {\n content: \"\\f17a\";\n}\n.fa-android:before {\n content: \"\\f17b\";\n}\n.fa-linux:before {\n content: \"\\f17c\";\n}\n.fa-dribbble:before {\n content: \"\\f17d\";\n}\n.fa-skype:before {\n content: \"\\f17e\";\n}\n.fa-foursquare:before {\n content: \"\\f180\";\n}\n.fa-trello:before {\n content: \"\\f181\";\n}\n.fa-female:before {\n content: \"\\f182\";\n}\n.fa-male:before {\n content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n content: \"\\f184\";\n}\n.fa-sun-o:before {\n content: \"\\f185\";\n}\n.fa-moon-o:before {\n content: \"\\f186\";\n}\n.fa-archive:before {\n content: \"\\f187\";\n}\n.fa-bug:before {\n content: \"\\f188\";\n}\n.fa-vk:before {\n content: \"\\f189\";\n}\n.fa-weibo:before {\n content: \"\\f18a\";\n}\n.fa-renren:before {\n content: \"\\f18b\";\n}\n.fa-pagelines:before {\n content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n content: \"\\f192\";\n}\n.fa-wheelchair:before {\n content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n content: \"\\f197\";\n}\n.fa-slack:before {\n content: \"\\f198\";\n}\n.fa-envelope-square:before {\n content: \"\\f199\";\n}\n.fa-wordpress:before {\n content: \"\\f19a\";\n}\n.fa-openid:before {\n content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n content: \"\\f19d\";\n}\n.fa-yahoo:before {\n content: \"\\f19e\";\n}\n.fa-google:before {\n content: \"\\f1a0\";\n}\n.fa-reddit:before {\n content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n content: \"\\f1a4\";\n}\n.fa-delicious:before {\n content: \"\\f1a5\";\n}\n.fa-digg:before {\n content: \"\\f1a6\";\n}\n.fa-pied-piper-pp:before {\n content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n content: \"\\f1a8\";\n}\n.fa-drupal:before {\n content: \"\\f1a9\";\n}\n.fa-joomla:before {\n content: \"\\f1aa\";\n}\n.fa-language:before {\n content: \"\\f1ab\";\n}\n.fa-fax:before {\n content: \"\\f1ac\";\n}\n.fa-building:before {\n content: \"\\f1ad\";\n}\n.fa-child:before {\n content: \"\\f1ae\";\n}\n.fa-paw:before {\n content: \"\\f1b0\";\n}\n.fa-spoon:before {\n content: \"\\f1b1\";\n}\n.fa-cube:before {\n content: \"\\f1b2\";\n}\n.fa-cubes:before {\n content: \"\\f1b3\";\n}\n.fa-behance:before {\n content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n content: \"\\f1b5\";\n}\n.fa-steam:before {\n content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n content: \"\\f1b7\";\n}\n.fa-recycle:before {\n content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n content: \"\\f1ba\";\n}\n.fa-tree:before {\n content: \"\\f1bb\";\n}\n.fa-spotify:before {\n content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n content: \"\\f1be\";\n}\n.fa-database:before {\n content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n content: \"\\f1c9\";\n}\n.fa-vine:before {\n content: \"\\f1ca\";\n}\n.fa-codepen:before {\n content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n content: \"\\f1d1\";\n}\n.fa-git-square:before {\n content: \"\\f1d2\";\n}\n.fa-git:before {\n content: \"\\f1d3\";\n}\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n content: \"\\f1d5\";\n}\n.fa-qq:before {\n content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n content: \"\\f1d9\";\n}\n.fa-history:before {\n content: \"\\f1da\";\n}\n.fa-circle-thin:before {\n content: \"\\f1db\";\n}\n.fa-header:before {\n content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n content: \"\\f1dd\";\n}\n.fa-sliders:before {\n content: \"\\f1de\";\n}\n.fa-share-alt:before {\n content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n content: \"\\f1e1\";\n}\n.fa-bomb:before {\n content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n content: \"\\f1e3\";\n}\n.fa-tty:before {\n content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n content: \"\\f1e5\";\n}\n.fa-plug:before {\n content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n content: \"\\f1e7\";\n}\n.fa-twitch:before {\n content: \"\\f1e8\";\n}\n.fa-yelp:before {\n content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n content: \"\\f1ea\";\n}\n.fa-wifi:before {\n content: \"\\f1eb\";\n}\n.fa-calculator:before {\n content: \"\\f1ec\";\n}\n.fa-paypal:before {\n content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n content: \"\\f1f7\";\n}\n.fa-trash:before {\n content: \"\\f1f8\";\n}\n.fa-copyright:before {\n content: \"\\f1f9\";\n}\n.fa-at:before {\n content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n content: \"\\f200\";\n}\n.fa-line-chart:before {\n content: \"\\f201\";\n}\n.fa-lastfm:before {\n content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n content: \"\\f203\";\n}\n.fa-toggle-off:before {\n content: \"\\f204\";\n}\n.fa-toggle-on:before {\n content: \"\\f205\";\n}\n.fa-bicycle:before {\n content: \"\\f206\";\n}\n.fa-bus:before {\n content: \"\\f207\";\n}\n.fa-ioxhost:before {\n content: \"\\f208\";\n}\n.fa-angellist:before {\n content: \"\\f209\";\n}\n.fa-cc:before {\n content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n content: \"\\f20b\";\n}\n.fa-meanpath:before {\n content: \"\\f20c\";\n}\n.fa-buysellads:before {\n content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n content: \"\\f20e\";\n}\n.fa-dashcube:before {\n content: \"\\f210\";\n}\n.fa-forumbee:before {\n content: \"\\f211\";\n}\n.fa-leanpub:before {\n content: \"\\f212\";\n}\n.fa-sellsy:before {\n content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n content: \"\\f215\";\n}\n.fa-skyatlas:before {\n content: \"\\f216\";\n}\n.fa-cart-plus:before {\n content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n content: \"\\f218\";\n}\n.fa-diamond:before {\n content: \"\\f219\";\n}\n.fa-ship:before {\n content: \"\\f21a\";\n}\n.fa-user-secret:before {\n content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n content: \"\\f21c\";\n}\n.fa-street-view:before {\n content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n content: \"\\f21e\";\n}\n.fa-venus:before {\n content: \"\\f221\";\n}\n.fa-mars:before {\n content: \"\\f222\";\n}\n.fa-mercury:before {\n content: \"\\f223\";\n}\n.fa-intersex:before,\n.fa-transgender:before {\n content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n content: \"\\f225\";\n}\n.fa-venus-double:before {\n content: \"\\f226\";\n}\n.fa-mars-double:before {\n content: \"\\f227\";\n}\n.fa-venus-mars:before {\n content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n content: \"\\f22b\";\n}\n.fa-neuter:before {\n content: \"\\f22c\";\n}\n.fa-genderless:before {\n content: \"\\f22d\";\n}\n.fa-facebook-official:before {\n content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n content: \"\\f231\";\n}\n.fa-whatsapp:before {\n content: \"\\f232\";\n}\n.fa-server:before {\n content: \"\\f233\";\n}\n.fa-user-plus:before {\n content: \"\\f234\";\n}\n.fa-user-times:before {\n content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n content: \"\\f236\";\n}\n.fa-viacoin:before {\n content: \"\\f237\";\n}\n.fa-train:before {\n content: \"\\f238\";\n}\n.fa-subway:before {\n content: \"\\f239\";\n}\n.fa-medium:before {\n content: \"\\f23a\";\n}\n.fa-yc:before,\n.fa-y-combinator:before {\n content: \"\\f23b\";\n}\n.fa-optin-monster:before {\n content: \"\\f23c\";\n}\n.fa-opencart:before {\n content: \"\\f23d\";\n}\n.fa-expeditedssl:before {\n content: \"\\f23e\";\n}\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n content: \"\\f240\";\n}\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n content: \"\\f241\";\n}\n.fa-battery-2:before,\n.fa-battery-half:before {\n content: \"\\f242\";\n}\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n content: \"\\f243\";\n}\n.fa-battery-0:before,\n.fa-battery-empty:before {\n content: \"\\f244\";\n}\n.fa-mouse-pointer:before {\n content: \"\\f245\";\n}\n.fa-i-cursor:before {\n content: \"\\f246\";\n}\n.fa-object-group:before {\n content: \"\\f247\";\n}\n.fa-object-ungroup:before {\n content: \"\\f248\";\n}\n.fa-sticky-note:before {\n content: \"\\f249\";\n}\n.fa-sticky-note-o:before {\n content: \"\\f24a\";\n}\n.fa-cc-jcb:before {\n content: \"\\f24b\";\n}\n.fa-cc-diners-club:before {\n content: \"\\f24c\";\n}\n.fa-clone:before {\n content: \"\\f24d\";\n}\n.fa-balance-scale:before {\n content: \"\\f24e\";\n}\n.fa-hourglass-o:before {\n content: \"\\f250\";\n}\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n content: \"\\f251\";\n}\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n content: \"\\f252\";\n}\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n content: \"\\f253\";\n}\n.fa-hourglass:before {\n content: \"\\f254\";\n}\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n content: \"\\f255\";\n}\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n content: \"\\f256\";\n}\n.fa-hand-scissors-o:before {\n content: \"\\f257\";\n}\n.fa-hand-lizard-o:before {\n content: \"\\f258\";\n}\n.fa-hand-spock-o:before {\n content: \"\\f259\";\n}\n.fa-hand-pointer-o:before {\n content: \"\\f25a\";\n}\n.fa-hand-peace-o:before {\n content: \"\\f25b\";\n}\n.fa-trademark:before {\n content: \"\\f25c\";\n}\n.fa-registered:before {\n content: \"\\f25d\";\n}\n.fa-creative-commons:before {\n content: \"\\f25e\";\n}\n.fa-gg:before {\n content: \"\\f260\";\n}\n.fa-gg-circle:before {\n content: \"\\f261\";\n}\n.fa-tripadvisor:before {\n content: \"\\f262\";\n}\n.fa-odnoklassniki:before {\n content: \"\\f263\";\n}\n.fa-odnoklassniki-square:before {\n content: \"\\f264\";\n}\n.fa-get-pocket:before {\n content: \"\\f265\";\n}\n.fa-wikipedia-w:before {\n content: \"\\f266\";\n}\n.fa-safari:before {\n content: \"\\f267\";\n}\n.fa-chrome:before {\n content: \"\\f268\";\n}\n.fa-firefox:before {\n content: \"\\f269\";\n}\n.fa-opera:before {\n content: \"\\f26a\";\n}\n.fa-internet-explorer:before {\n content: \"\\f26b\";\n}\n.fa-tv:before,\n.fa-television:before {\n content: \"\\f26c\";\n}\n.fa-contao:before {\n content: \"\\f26d\";\n}\n.fa-500px:before {\n content: \"\\f26e\";\n}\n.fa-amazon:before {\n content: \"\\f270\";\n}\n.fa-calendar-plus-o:before {\n content: \"\\f271\";\n}\n.fa-calendar-minus-o:before {\n content: \"\\f272\";\n}\n.fa-calendar-times-o:before {\n content: \"\\f273\";\n}\n.fa-calendar-check-o:before {\n content: \"\\f274\";\n}\n.fa-industry:before {\n content: \"\\f275\";\n}\n.fa-map-pin:before {\n content: \"\\f276\";\n}\n.fa-map-signs:before {\n content: \"\\f277\";\n}\n.fa-map-o:before {\n content: \"\\f278\";\n}\n.fa-map:before {\n content: \"\\f279\";\n}\n.fa-commenting:before {\n content: \"\\f27a\";\n}\n.fa-commenting-o:before {\n content: \"\\f27b\";\n}\n.fa-houzz:before {\n content: \"\\f27c\";\n}\n.fa-vimeo:before {\n content: \"\\f27d\";\n}\n.fa-black-tie:before {\n content: \"\\f27e\";\n}\n.fa-fonticons:before {\n content: \"\\f280\";\n}\n.fa-reddit-alien:before {\n content: \"\\f281\";\n}\n.fa-edge:before {\n content: \"\\f282\";\n}\n.fa-credit-card-alt:before {\n content: \"\\f283\";\n}\n.fa-codiepie:before {\n content: \"\\f284\";\n}\n.fa-modx:before {\n content: \"\\f285\";\n}\n.fa-fort-awesome:before {\n content: \"\\f286\";\n}\n.fa-usb:before {\n content: \"\\f287\";\n}\n.fa-product-hunt:before {\n content: \"\\f288\";\n}\n.fa-mixcloud:before {\n content: \"\\f289\";\n}\n.fa-scribd:before {\n content: \"\\f28a\";\n}\n.fa-pause-circle:before {\n content: \"\\f28b\";\n}\n.fa-pause-circle-o:before {\n content: \"\\f28c\";\n}\n.fa-stop-circle:before {\n content: \"\\f28d\";\n}\n.fa-stop-circle-o:before {\n content: \"\\f28e\";\n}\n.fa-shopping-bag:before {\n content: \"\\f290\";\n}\n.fa-shopping-basket:before {\n content: \"\\f291\";\n}\n.fa-hashtag:before {\n content: \"\\f292\";\n}\n.fa-bluetooth:before {\n content: \"\\f293\";\n}\n.fa-bluetooth-b:before {\n content: \"\\f294\";\n}\n.fa-percent:before {\n content: \"\\f295\";\n}\n.fa-gitlab:before {\n content: \"\\f296\";\n}\n.fa-wpbeginner:before {\n content: \"\\f297\";\n}\n.fa-wpforms:before {\n content: \"\\f298\";\n}\n.fa-envira:before {\n content: \"\\f299\";\n}\n.fa-universal-access:before {\n content: \"\\f29a\";\n}\n.fa-wheelchair-alt:before {\n content: \"\\f29b\";\n}\n.fa-question-circle-o:before {\n content: \"\\f29c\";\n}\n.fa-blind:before {\n content: \"\\f29d\";\n}\n.fa-audio-description:before {\n content: \"\\f29e\";\n}\n.fa-volume-control-phone:before {\n content: \"\\f2a0\";\n}\n.fa-braille:before {\n content: \"\\f2a1\";\n}\n.fa-assistive-listening-systems:before {\n content: \"\\f2a2\";\n}\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n content: \"\\f2a3\";\n}\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n content: \"\\f2a4\";\n}\n.fa-glide:before {\n content: \"\\f2a5\";\n}\n.fa-glide-g:before {\n content: \"\\f2a6\";\n}\n.fa-signing:before,\n.fa-sign-language:before {\n content: \"\\f2a7\";\n}\n.fa-low-vision:before {\n content: \"\\f2a8\";\n}\n.fa-viadeo:before {\n content: \"\\f2a9\";\n}\n.fa-viadeo-square:before {\n content: \"\\f2aa\";\n}\n.fa-snapchat:before {\n content: \"\\f2ab\";\n}\n.fa-snapchat-ghost:before {\n content: \"\\f2ac\";\n}\n.fa-snapchat-square:before {\n content: \"\\f2ad\";\n}\n.fa-pied-piper:before {\n content: \"\\f2ae\";\n}\n.fa-first-order:before {\n content: \"\\f2b0\";\n}\n.fa-yoast:before {\n content: \"\\f2b1\";\n}\n.fa-themeisle:before {\n content: \"\\f2b2\";\n}\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n content: \"\\f2b3\";\n}\n.fa-fa:before,\n.fa-font-awesome:before {\n content: \"\\f2b4\";\n}\n.fa-handshake-o:before {\n content: \"\\f2b5\";\n}\n.fa-envelope-open:before {\n content: \"\\f2b6\";\n}\n.fa-envelope-open-o:before {\n content: \"\\f2b7\";\n}\n.fa-linode:before {\n content: \"\\f2b8\";\n}\n.fa-address-book:before {\n content: \"\\f2b9\";\n}\n.fa-address-book-o:before {\n content: \"\\f2ba\";\n}\n.fa-vcard:before,\n.fa-address-card:before {\n content: \"\\f2bb\";\n}\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n content: \"\\f2bc\";\n}\n.fa-user-circle:before {\n content: \"\\f2bd\";\n}\n.fa-user-circle-o:before {\n content: \"\\f2be\";\n}\n.fa-user-o:before {\n content: \"\\f2c0\";\n}\n.fa-id-badge:before {\n content: \"\\f2c1\";\n}\n.fa-drivers-license:before,\n.fa-id-card:before {\n content: \"\\f2c2\";\n}\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n content: \"\\f2c3\";\n}\n.fa-quora:before {\n content: \"\\f2c4\";\n}\n.fa-free-code-camp:before {\n content: \"\\f2c5\";\n}\n.fa-telegram:before {\n content: \"\\f2c6\";\n}\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n content: \"\\f2c7\";\n}\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n content: \"\\f2c8\";\n}\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n content: \"\\f2c9\";\n}\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n content: \"\\f2ca\";\n}\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n content: \"\\f2cb\";\n}\n.fa-shower:before {\n content: \"\\f2cc\";\n}\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n content: \"\\f2cd\";\n}\n.fa-podcast:before {\n content: \"\\f2ce\";\n}\n.fa-window-maximize:before {\n content: \"\\f2d0\";\n}\n.fa-window-minimize:before {\n content: \"\\f2d1\";\n}\n.fa-window-restore:before {\n content: \"\\f2d2\";\n}\n.fa-times-rectangle:before,\n.fa-window-close:before {\n content: \"\\f2d3\";\n}\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n content: \"\\f2d4\";\n}\n.fa-bandcamp:before {\n content: \"\\f2d5\";\n}\n.fa-grav:before {\n content: \"\\f2d6\";\n}\n.fa-etsy:before {\n content: \"\\f2d7\";\n}\n.fa-imdb:before {\n content: \"\\f2d8\";\n}\n.fa-ravelry:before {\n content: \"\\f2d9\";\n}\n.fa-eercast:before {\n content: \"\\f2da\";\n}\n.fa-microchip:before {\n content: \"\\f2db\";\n}\n.fa-snowflake-o:before {\n content: \"\\f2dc\";\n}\n.fa-superpowers:before {\n content: \"\\f2dd\";\n}\n.fa-wpexplorer:before {\n content: \"\\f2de\";\n}\n.fa-meetup:before {\n content: \"\\f2e0\";\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n"],"sourceRoot":"../../scss"}
\ No newline at end of file
diff --git a/assets/maps/css/lifterlms.min.css.map b/assets/maps/css/lifterlms.min.css.map
new file mode 100644
index 0000000000..531bd84289
--- /dev/null
+++ b/assets/maps/css/lifterlms.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["lifterlms.css"],"names":[],"mappings":"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","file":"../../css/lifterlms.min.css","sourcesContent":["@charset \"UTF-8\";\n.llms-pagination ul:before, .llms-pagination ul:after,\n.llms-form-fields:before,\n.llms-checkout-cols-2:before,\n.llms-access-plans:before,\n.llms-loop-list:before,\n.llms-cols:before,\n.llms-form-fields:after,\n.llms-checkout-cols-2:after,\n.llms-access-plans:after,\n.llms-loop-list:after,\n.llms-cols:after {\n content: \" \";\n display: table;\n}\n.llms-pagination ul:after,\n.llms-form-fields:after,\n.llms-checkout-cols-2:after,\n.llms-access-plans:after,\n.llms-loop-list:after,\n.llms-cols:after {\n clear: both;\n}\n\n.llms-cols .llms-col {\n width: 100%;\n}\n@media all and (min-width: 600px) {\n .llms-cols [class*=llms-col-] {\n float: left;\n }\n}\n\n.llms-flex-cols {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n}\n.llms-flex-cols [class*=llms-col] {\n -webkit-box-flex: 0;\n -ms-flex: 0 1 auto;\n flex: 0 1 auto;\n width: 100%;\n}\n\n@media all and (min-width: 600px) {\n .llms-cols .llms-col-1, .llms-flex-cols .llms-col-1 {\n width: 100%;\n }\n .llms-cols .llms-col-2, .llms-flex-cols .llms-col-2 {\n width: 50%;\n }\n .llms-cols .llms-col-3, .llms-flex-cols .llms-col-3 {\n width: 33.3333333333%;\n }\n .llms-cols .llms-col-4, .llms-flex-cols .llms-col-4 {\n width: 25%;\n }\n .llms-cols .llms-col-5, .llms-flex-cols .llms-col-5 {\n width: 20%;\n }\n .llms-cols .llms-col-6, .llms-flex-cols .llms-col-6 {\n width: 16.6666666667%;\n }\n .llms-cols .llms-col-7, .llms-flex-cols .llms-col-7 {\n width: 14.2857142857%;\n }\n .llms-cols .llms-col-8, .llms-flex-cols .llms-col-8 {\n width: 12.5%;\n }\n .llms-cols .llms-col-9, .llms-flex-cols .llms-col-9 {\n width: 11.1111111111%;\n }\n .llms-cols .llms-col-10, .llms-flex-cols .llms-col-10 {\n width: 10%;\n }\n .llms-cols .llms-col-11, .llms-flex-cols .llms-col-11 {\n width: 9.0909090909%;\n }\n .llms-cols .llms-col-12, .llms-flex-cols .llms-col-12 {\n width: 8.3333333333%;\n }\n}\n.llms-button-action,\n.llms-button-danger,\n.llms-button-primary,\n.llms-button-secondary {\n border: none;\n border-radius: 8px;\n color: #fefefe;\n cursor: pointer;\n display: inline-block;\n font-size: 18px;\n font-weight: 700;\n text-decoration: none;\n text-shadow: none;\n line-height: 1;\n margin: 0;\n max-width: 100%;\n padding: 12px 24px;\n position: relative;\n -webkit-transition: all 0.5s ease;\n transition: all 0.5s ease;\n}\n.llms-button-action:disabled,\n.llms-button-danger:disabled,\n.llms-button-primary:disabled,\n.llms-button-secondary:disabled {\n opacity: 0.5;\n}\n.llms-button-action:hover, .llms-button-action:active,\n.llms-button-danger:hover,\n.llms-button-danger:active,\n.llms-button-primary:hover,\n.llms-button-primary:active,\n.llms-button-secondary:hover,\n.llms-button-secondary:active {\n color: #fefefe;\n}\n.llms-button-action:focus,\n.llms-button-danger:focus,\n.llms-button-primary:focus,\n.llms-button-secondary:focus {\n color: #fefefe;\n}\n.llms-button-action.auto,\n.llms-button-danger.auto,\n.llms-button-primary.auto,\n.llms-button-secondary.auto {\n width: auto;\n}\n.llms-button-action.full,\n.llms-button-danger.full,\n.llms-button-primary.full,\n.llms-button-secondary.full {\n display: block;\n text-align: center;\n width: 100%;\n}\n.llms-button-action.square,\n.llms-button-danger.square,\n.llms-button-primary.square,\n.llms-button-secondary.square {\n padding: 12px;\n}\n.llms-button-action.small,\n.llms-button-danger.small,\n.llms-button-primary.small,\n.llms-button-secondary.small {\n font-size: 13px;\n padding: 8px 14px;\n}\n.llms-button-action.small.square,\n.llms-button-danger.small.square,\n.llms-button-primary.small.square,\n.llms-button-secondary.small.square {\n padding: 8px;\n}\n.llms-button-action.large,\n.llms-button-danger.large,\n.llms-button-primary.large,\n.llms-button-secondary.large {\n font-size: 18px;\n line-height: 1.2;\n padding: 16px 32px;\n}\n.llms-button-action.large.square,\n.llms-button-danger.large.square,\n.llms-button-primary.large.square,\n.llms-button-secondary.large.square {\n padding: 16px;\n}\n.llms-button-action.large .fa,\n.llms-button-danger.large .fa,\n.llms-button-primary.large .fa,\n.llms-button-secondary.large .fa {\n left: -7px;\n position: relative;\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-action,\na.llms-button-danger,\na.llms-button-primary {\n color: #fefefe;\n}\n\n.llms-button-primary {\n background: #466dd8;\n}\n.llms-button-primary:hover, .llms-button-primary.clicked {\n background: #274eba;\n}\n.llms-button-primary:focus, .llms-button-primary:active {\n background: #6888df;\n}\n\n.llms-button-secondary {\n background: #e1e1e1;\n color: #444;\n}\n.llms-button-secondary:hover {\n color: #414141;\n background: #cdcdcd;\n}\n.llms-button-secondary:focus, .llms-button-secondary:active {\n color: #414141;\n background: #ebebeb;\n}\n\n/* Fix for cases where link color overrides the button color */\na.llms-button-secondary {\n color: #444;\n}\n\n.llms-button-action {\n background: #c05621;\n}\n.llms-button-action:hover, .llms-button-action.clicked {\n background: #f67d28;\n}\n.llms-button-action:focus, .llms-button-action:active {\n background: #faad76;\n}\n\n.llms-button-danger {\n background: #bb231c;\n}\n.llms-button-danger:hover {\n background: #981c17;\n}\n.llms-button-danger:focus, .llms-button-danger:active {\n background: #cd261f;\n}\n\n.llms-button-outline {\n background: transparent;\n border: 3px solid #1D2327;\n border-radius: 8px;\n color: #1D2327;\n cursor: pointer;\n font-size: 16px;\n font-weight: 700;\n text-decoration: none;\n text-shadow: none;\n line-height: 1;\n margin: 0;\n max-width: 100%;\n padding: 12px 24px;\n position: relative;\n -webkit-transition: all 0.5s ease;\n transition: all 0.5s ease;\n}\n.llms-button-outline:disabled {\n opacity: 0.5;\n}\n.llms-button-outline:hover, .llms-button-outline:active {\n color: #1D2327;\n}\n.llms-button-outline:focus {\n color: #1D2327;\n}\n.llms-button-outline.auto {\n width: auto;\n}\n.llms-button-outline.full {\n display: block;\n text-align: center;\n width: 100%;\n}\n.llms-button-outline.square {\n padding: 12px;\n}\n\n.llms-course-continue-button {\n display: inline-block;\n}\n\n.llms-donut {\n background-color: #f1f1f1;\n background-image: none;\n border-radius: 50%;\n color: #466dd8;\n height: 200px;\n overflow: hidden;\n position: relative;\n width: 200px;\n}\n.llms-donut:before, .llms-donut:after {\n content: \" \";\n display: table;\n}\n.llms-donut:after {\n clear: both;\n}\n.llms-donut svg {\n overflow: visible !important;\n pointer-events: none;\n width: 100%;\n}\n.llms-donut svg path {\n fill: none;\n stroke-width: 35px;\n stroke: #466dd8;\n}\n.llms-donut.mini {\n height: 36px;\n width: 36px;\n}\n.llms-donut.mini .percentage {\n font-size: 10px;\n}\n.llms-donut.small {\n height: 100px;\n width: 100px;\n}\n.llms-donut.small .percentage {\n font-size: 18px;\n}\n.llms-donut.medium {\n height: 130px;\n width: 130px;\n}\n.llms-donut.medium .percentage {\n font-size: 26px;\n}\n.llms-donut.large {\n height: 260px;\n width: 260px;\n}\n.llms-donut.large .percentage {\n font-size: 48px;\n}\n.llms-donut .inside {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n background: #fff;\n border-radius: 50%;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n height: 80%;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n left: 50%;\n position: absolute;\n text-align: center;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n width: 80%;\n top: 50%;\n z-index: 3;\n}\n.llms-donut .percentage {\n line-height: 1.2;\n font-size: 34px;\n}\n.llms-donut .caption {\n font-size: 75%;\n}\n\n.lifterlms [data-tip],\n.lifterlms [data-title-default],\n.lifterlms [data-title-active],\n.llms-metabox [data-tip],\n.llms-metabox [data-title-default],\n.llms-metabox [data-title-active],\n.llms-mb-container [data-tip],\n.llms-mb-container [data-title-default],\n.llms-mb-container [data-title-active],\n.llms-quiz-wrapper [data-tip],\n.llms-quiz-wrapper [data-title-default],\n.llms-quiz-wrapper [data-title-active] {\n position: relative;\n}\n.lifterlms [data-tip].tip--top-right:before,\n.lifterlms [data-title-default].tip--top-right:before,\n.lifterlms [data-title-active].tip--top-right:before,\n.llms-metabox [data-tip].tip--top-right:before,\n.llms-metabox [data-title-default].tip--top-right:before,\n.llms-metabox [data-title-active].tip--top-right:before,\n.llms-mb-container [data-tip].tip--top-right:before,\n.llms-mb-container [data-title-default].tip--top-right:before,\n.llms-mb-container [data-title-active].tip--top-right:before,\n.llms-quiz-wrapper [data-tip].tip--top-right:before,\n.llms-quiz-wrapper [data-title-default].tip--top-right:before,\n.llms-quiz-wrapper [data-title-active].tip--top-right:before {\n bottom: 100%;\n left: -10px;\n}\n.lifterlms [data-tip].tip--top-right:hover:before,\n.lifterlms [data-title-default].tip--top-right:hover:before,\n.lifterlms [data-title-active].tip--top-right:hover:before,\n.llms-metabox [data-tip].tip--top-right:hover:before,\n.llms-metabox [data-title-default].tip--top-right:hover:before,\n.llms-metabox [data-title-active].tip--top-right:hover:before,\n.llms-mb-container [data-tip].tip--top-right:hover:before,\n.llms-mb-container [data-title-default].tip--top-right:hover:before,\n.llms-mb-container [data-title-active].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-tip].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--top-right:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--top-right:hover:before {\n bottom: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--top-right:after,\n.lifterlms [data-title-default].tip--top-right:after,\n.lifterlms [data-title-active].tip--top-right:after,\n.llms-metabox [data-tip].tip--top-right:after,\n.llms-metabox [data-title-default].tip--top-right:after,\n.llms-metabox [data-title-active].tip--top-right:after,\n.llms-mb-container [data-tip].tip--top-right:after,\n.llms-mb-container [data-title-default].tip--top-right:after,\n.llms-mb-container [data-title-active].tip--top-right:after,\n.llms-quiz-wrapper [data-tip].tip--top-right:after,\n.llms-quiz-wrapper [data-title-default].tip--top-right:after,\n.llms-quiz-wrapper [data-title-active].tip--top-right:after {\n border-top-color: #444;\n left: 6px;\n top: 0;\n}\n.lifterlms [data-tip].tip--top-right:hover:after,\n.lifterlms [data-title-default].tip--top-right:hover:after,\n.lifterlms [data-title-active].tip--top-right:hover:after,\n.llms-metabox [data-tip].tip--top-right:hover:after,\n.llms-metabox [data-title-default].tip--top-right:hover:after,\n.llms-metabox [data-title-active].tip--top-right:hover:after,\n.llms-mb-container [data-tip].tip--top-right:hover:after,\n.llms-mb-container [data-title-default].tip--top-right:hover:after,\n.llms-mb-container [data-title-active].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-tip].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--top-right:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--top-right:hover:after {\n top: -6px;\n}\n.lifterlms [data-tip].tip--top-left:before,\n.lifterlms [data-title-default].tip--top-left:before,\n.lifterlms [data-title-active].tip--top-left:before,\n.llms-metabox [data-tip].tip--top-left:before,\n.llms-metabox [data-title-default].tip--top-left:before,\n.llms-metabox [data-title-active].tip--top-left:before,\n.llms-mb-container [data-tip].tip--top-left:before,\n.llms-mb-container [data-title-default].tip--top-left:before,\n.llms-mb-container [data-title-active].tip--top-left:before,\n.llms-quiz-wrapper [data-tip].tip--top-left:before,\n.llms-quiz-wrapper [data-title-default].tip--top-left:before,\n.llms-quiz-wrapper [data-title-active].tip--top-left:before {\n bottom: 100%;\n right: -10px;\n}\n.lifterlms [data-tip].tip--top-left:hover:before,\n.lifterlms [data-title-default].tip--top-left:hover:before,\n.lifterlms [data-title-active].tip--top-left:hover:before,\n.llms-metabox [data-tip].tip--top-left:hover:before,\n.llms-metabox [data-title-default].tip--top-left:hover:before,\n.llms-metabox [data-title-active].tip--top-left:hover:before,\n.llms-mb-container [data-tip].tip--top-left:hover:before,\n.llms-mb-container [data-title-default].tip--top-left:hover:before,\n.llms-mb-container [data-title-active].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-tip].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--top-left:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--top-left:hover:before {\n bottom: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--top-left:after,\n.lifterlms [data-title-default].tip--top-left:after,\n.lifterlms [data-title-active].tip--top-left:after,\n.llms-metabox [data-tip].tip--top-left:after,\n.llms-metabox [data-title-default].tip--top-left:after,\n.llms-metabox [data-title-active].tip--top-left:after,\n.llms-mb-container [data-tip].tip--top-left:after,\n.llms-mb-container [data-title-default].tip--top-left:after,\n.llms-mb-container [data-title-active].tip--top-left:after,\n.llms-quiz-wrapper [data-tip].tip--top-left:after,\n.llms-quiz-wrapper [data-title-default].tip--top-left:after,\n.llms-quiz-wrapper [data-title-active].tip--top-left:after {\n border-top-color: #444;\n right: 6px;\n top: 0;\n}\n.lifterlms [data-tip].tip--top-left:hover:after,\n.lifterlms [data-title-default].tip--top-left:hover:after,\n.lifterlms [data-title-active].tip--top-left:hover:after,\n.llms-metabox [data-tip].tip--top-left:hover:after,\n.llms-metabox [data-title-default].tip--top-left:hover:after,\n.llms-metabox [data-title-active].tip--top-left:hover:after,\n.llms-mb-container [data-tip].tip--top-left:hover:after,\n.llms-mb-container [data-title-default].tip--top-left:hover:after,\n.llms-mb-container [data-title-active].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-tip].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--top-left:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--top-left:hover:after {\n top: -6px;\n}\n.lifterlms [data-tip].tip--bottom-left:before,\n.lifterlms [data-title-default].tip--bottom-left:before,\n.lifterlms [data-title-active].tip--bottom-left:before,\n.llms-metabox [data-tip].tip--bottom-left:before,\n.llms-metabox [data-title-default].tip--bottom-left:before,\n.llms-metabox [data-title-active].tip--bottom-left:before,\n.llms-mb-container [data-tip].tip--bottom-left:before,\n.llms-mb-container [data-title-default].tip--bottom-left:before,\n.llms-mb-container [data-title-active].tip--bottom-left:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:before {\n top: 100%;\n right: -10px;\n}\n.lifterlms [data-tip].tip--bottom-left:hover:before,\n.lifterlms [data-title-default].tip--bottom-left:hover:before,\n.lifterlms [data-title-active].tip--bottom-left:hover:before,\n.llms-metabox [data-tip].tip--bottom-left:hover:before,\n.llms-metabox [data-title-default].tip--bottom-left:hover:before,\n.llms-metabox [data-title-active].tip--bottom-left:hover:before,\n.llms-mb-container [data-tip].tip--bottom-left:hover:before,\n.llms-mb-container [data-title-default].tip--bottom-left:hover:before,\n.llms-mb-container [data-title-active].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:before {\n top: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--bottom-left:after,\n.lifterlms [data-title-default].tip--bottom-left:after,\n.lifterlms [data-title-active].tip--bottom-left:after,\n.llms-metabox [data-tip].tip--bottom-left:after,\n.llms-metabox [data-title-default].tip--bottom-left:after,\n.llms-metabox [data-title-active].tip--bottom-left:after,\n.llms-mb-container [data-tip].tip--bottom-left:after,\n.llms-mb-container [data-title-default].tip--bottom-left:after,\n.llms-mb-container [data-title-active].tip--bottom-left:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:after {\n border-bottom-color: #444;\n right: 6px;\n bottom: 0;\n}\n.lifterlms [data-tip].tip--bottom-left:hover:after,\n.lifterlms [data-title-default].tip--bottom-left:hover:after,\n.lifterlms [data-title-active].tip--bottom-left:hover:after,\n.llms-metabox [data-tip].tip--bottom-left:hover:after,\n.llms-metabox [data-title-default].tip--bottom-left:hover:after,\n.llms-metabox [data-title-active].tip--bottom-left:hover:after,\n.llms-mb-container [data-tip].tip--bottom-left:hover:after,\n.llms-mb-container [data-title-default].tip--bottom-left:hover:after,\n.llms-mb-container [data-title-active].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-left:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-left:hover:after {\n bottom: -6px;\n}\n.lifterlms [data-tip].tip--bottom-right:before,\n.lifterlms [data-title-default].tip--bottom-right:before,\n.lifterlms [data-title-active].tip--bottom-right:before,\n.llms-metabox [data-tip].tip--bottom-right:before,\n.llms-metabox [data-title-default].tip--bottom-right:before,\n.llms-metabox [data-title-active].tip--bottom-right:before,\n.llms-mb-container [data-tip].tip--bottom-right:before,\n.llms-mb-container [data-title-default].tip--bottom-right:before,\n.llms-mb-container [data-title-active].tip--bottom-right:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:before {\n top: 100%;\n left: -10px;\n}\n.lifterlms [data-tip].tip--bottom-right:hover:before,\n.lifterlms [data-title-default].tip--bottom-right:hover:before,\n.lifterlms [data-title-active].tip--bottom-right:hover:before,\n.llms-metabox [data-tip].tip--bottom-right:hover:before,\n.llms-metabox [data-title-default].tip--bottom-right:hover:before,\n.llms-metabox [data-title-active].tip--bottom-right:hover:before,\n.llms-mb-container [data-tip].tip--bottom-right:hover:before,\n.llms-mb-container [data-title-default].tip--bottom-right:hover:before,\n.llms-mb-container [data-title-active].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:before,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:before {\n top: calc(100% + 6px);\n}\n.lifterlms [data-tip].tip--bottom-right:after,\n.lifterlms [data-title-default].tip--bottom-right:after,\n.lifterlms [data-title-active].tip--bottom-right:after,\n.llms-metabox [data-tip].tip--bottom-right:after,\n.llms-metabox [data-title-default].tip--bottom-right:after,\n.llms-metabox [data-title-active].tip--bottom-right:after,\n.llms-mb-container [data-tip].tip--bottom-right:after,\n.llms-mb-container [data-title-default].tip--bottom-right:after,\n.llms-mb-container [data-title-active].tip--bottom-right:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:after {\n border-bottom-color: #444;\n left: 6px;\n bottom: 0;\n}\n.lifterlms [data-tip].tip--bottom-right:hover:after,\n.lifterlms [data-title-default].tip--bottom-right:hover:after,\n.lifterlms [data-title-active].tip--bottom-right:hover:after,\n.llms-metabox [data-tip].tip--bottom-right:hover:after,\n.llms-metabox [data-title-default].tip--bottom-right:hover:after,\n.llms-metabox [data-title-active].tip--bottom-right:hover:after,\n.llms-mb-container [data-tip].tip--bottom-right:hover:after,\n.llms-mb-container [data-title-default].tip--bottom-right:hover:after,\n.llms-mb-container [data-title-active].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-tip].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-title-default].tip--bottom-right:hover:after,\n.llms-quiz-wrapper [data-title-active].tip--bottom-right:hover:after {\n bottom: -6px;\n}\n.lifterlms [data-tip]:before,\n.lifterlms [data-title-default]:before,\n.lifterlms [data-title-active]:before,\n.llms-metabox [data-tip]:before,\n.llms-metabox [data-title-default]:before,\n.llms-metabox [data-title-active]:before,\n.llms-mb-container [data-tip]:before,\n.llms-mb-container [data-title-default]:before,\n.llms-mb-container [data-title-active]:before,\n.llms-quiz-wrapper [data-tip]:before,\n.llms-quiz-wrapper [data-title-default]:before,\n.llms-quiz-wrapper [data-title-active]:before {\n background: #444;\n border-radius: 4px;\n color: #fff;\n font-size: 13px;\n line-height: 1.2;\n padding: 8px;\n max-width: 300px;\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n}\n.lifterlms [data-tip]:after,\n.lifterlms [data-title-default]:after,\n.lifterlms [data-title-active]:after,\n.llms-metabox [data-tip]:after,\n.llms-metabox [data-title-default]:after,\n.llms-metabox [data-title-active]:after,\n.llms-mb-container [data-tip]:after,\n.llms-mb-container [data-title-default]:after,\n.llms-mb-container [data-title-active]:after,\n.llms-quiz-wrapper [data-tip]:after,\n.llms-quiz-wrapper [data-title-default]:after,\n.llms-quiz-wrapper [data-title-active]:after {\n content: \"\";\n border: 6px solid transparent;\n height: 0;\n width: 0;\n}\n.lifterlms [data-tip]:before, .lifterlms [data-tip]:after,\n.lifterlms [data-title-default]:before,\n.lifterlms [data-title-default]:after,\n.lifterlms [data-title-active]:before,\n.lifterlms [data-title-active]:after,\n.llms-metabox [data-tip]:before,\n.llms-metabox [data-tip]:after,\n.llms-metabox [data-title-default]:before,\n.llms-metabox [data-title-default]:after,\n.llms-metabox [data-title-active]:before,\n.llms-metabox [data-title-active]:after,\n.llms-mb-container [data-tip]:before,\n.llms-mb-container [data-tip]:after,\n.llms-mb-container [data-title-default]:before,\n.llms-mb-container [data-title-default]:after,\n.llms-mb-container [data-title-active]:before,\n.llms-mb-container [data-title-active]:after,\n.llms-quiz-wrapper [data-tip]:before,\n.llms-quiz-wrapper [data-tip]:after,\n.llms-quiz-wrapper [data-title-default]:before,\n.llms-quiz-wrapper [data-title-default]:after,\n.llms-quiz-wrapper [data-title-active]:before,\n.llms-quiz-wrapper [data-title-active]:after {\n opacity: 0;\n -webkit-transition: all 0.2s 0.1s ease;\n transition: all 0.2s 0.1s ease;\n position: absolute;\n pointer-events: none;\n visibility: hidden;\n}\n.lifterlms [data-tip]:hover:before, .lifterlms [data-tip]:hover:after,\n.lifterlms [data-title-default]:hover:before,\n.lifterlms [data-title-default]:hover:after,\n.lifterlms [data-title-active]:hover:before,\n.lifterlms [data-title-active]:hover:after,\n.llms-metabox [data-tip]:hover:before,\n.llms-metabox [data-tip]:hover:after,\n.llms-metabox [data-title-default]:hover:before,\n.llms-metabox [data-title-default]:hover:after,\n.llms-metabox [data-title-active]:hover:before,\n.llms-metabox [data-title-active]:hover:after,\n.llms-mb-container [data-tip]:hover:before,\n.llms-mb-container [data-tip]:hover:after,\n.llms-mb-container [data-title-default]:hover:before,\n.llms-mb-container [data-title-default]:hover:after,\n.llms-mb-container [data-title-active]:hover:before,\n.llms-mb-container [data-title-active]:hover:after,\n.llms-quiz-wrapper [data-tip]:hover:before,\n.llms-quiz-wrapper [data-tip]:hover:after,\n.llms-quiz-wrapper [data-title-default]:hover:before,\n.llms-quiz-wrapper [data-title-default]:hover:after,\n.llms-quiz-wrapper [data-title-active]:hover:before,\n.llms-quiz-wrapper [data-title-active]:hover:after {\n opacity: 1;\n -webkit-transition: all 0 0.1s ease;\n transition: all 0 0.1s ease;\n visibility: visible;\n z-index: 99999999;\n}\n.lifterlms [data-tip]:before,\n.llms-metabox [data-tip]:before,\n.llms-mb-container [data-tip]:before,\n.llms-quiz-wrapper [data-tip]:before {\n content: attr(data-tip);\n}\n.lifterlms [data-tip].active:before,\n.llms-metabox [data-tip].active:before,\n.llms-mb-container [data-tip].active:before,\n.llms-quiz-wrapper [data-tip].active:before {\n content: attr(data-tip-active);\n}\n\n.llms-membership-image {\n display: block;\n margin: 0 auto;\n}\n\n.llms-course-image {\n display: block;\n margin: 0 auto;\n max-width: 100%;\n}\n\n.llms-featured-image {\n display: block;\n margin: 0 auto;\n}\n\n.llms-image-thumb {\n width: 150px;\n}\n\n.llms-video-wrapper .center-video {\n height: auto;\n max-width: 100%;\n overflow: hidden;\n position: relative;\n padding-top: 56.25%;\n text-align: center;\n}\n.llms-video-wrapper .center-video > .wp-video,\n.llms-video-wrapper .center-video .fluid-width-video-wrapper,\n.llms-video-wrapper .center-video iframe, .llms-video-wrapper .center-video object, .llms-video-wrapper .center-video embed {\n height: 100%;\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n}\n.llms-video-wrapper .center-video > .wp-video {\n width: 100% !important;\n}\n.llms-video-wrapper .center-video .fluid-width-video-wrapper {\n padding-top: 0 !important;\n}\n\n.clear {\n clear: both;\n width: 100%;\n}\n\n.llms-featured-image {\n text-align: center;\n}\n\n#main-content .llms-payment-options p {\n margin: 0;\n font-size: 16px;\n}\n\n.llms-option {\n display: block;\n position: relative;\n margin: 20px 0;\n padding-left: 40px;\n font-size: 16px;\n}\n.llms-option label {\n cursor: pointer;\n position: static;\n}\n\n.llms-option:first-child {\n margin-top: 0;\n}\n\n.llms-option:last-child {\n margin-bottom: 0;\n}\n\n#main-content .llms-option:last-child {\n margin-bottom: 0;\n}\n\n.llms-option input[type=radio] {\n display: block;\n position: absolute;\n top: 3px;\n left: 0;\n z-index: 0;\n}\n\n.llms-option input[type=radio] {\n display: inline-block;\n}\n\n.llms-option input[type=radio] + label span.llms-radio {\n display: none;\n}\n\n.llms-option input[type=radio] + label span.llms-radio {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n z-index: 20;\n position: absolute;\n top: 0;\n left: -2px;\n display: inline-block;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n cursor: pointer;\n vertical-align: middle;\n -webkit-box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.5) 0 0 0 1px;\n box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.5) 0 0 0 1px;\n background: #efefef;\n background-image: radial-gradient(ellipse at center, #bb231c 0%, #bb231c 40%, #efefef 45%);\n background-repeat: no-repeat;\n -webkit-transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);\n transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);\n}\n\n.llms-option input[type=radio]:checked + label span.llms-radio {\n -webkit-transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);\n transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);\n}\n\n.llms-option input[type=radio] + label span.llms-radio {\n background-position: -24px 0;\n}\n\n.llms-option input[type=radio]:checked + label span.llms-radio {\n background-position: 0 0;\n}\n\n.llms-option input[type=submit] {\n border: none;\n background: #bb231c;\n color: #fff;\n font-size: 20px;\n padding: 10px 0;\n border-radius: 3px;\n cursor: pointer;\n width: 100%;\n}\n\n.llms-styled-text {\n padding: 14px 0;\n}\n\n.llms-notice-box {\n border-radius: 3px;\n z-index: 10;\n margin: 10px 0;\n padding: 15px 20px;\n border: 1px solid #ccc;\n list-style-type: none;\n width: 100%;\n overflow: auto;\n}\n.llms-notice-box input[type=text] {\n height: auto;\n}\n.llms-notice-box .col-1-1 {\n width: 100%;\n}\n.llms-notice-box .col-1-1 input[type=text] {\n width: 100%;\n}\n.llms-notice-box .col-1-2 {\n width: 50%;\n float: left;\n}\n@media screen and (max-width: 768px) {\n .llms-notice-box .col-1-2 {\n width: 100%;\n }\n}\n.llms-notice-box .col-1-3 {\n width: 33%;\n float: left;\n margin-right: 10px;\n}\n.llms-notice-box .col-1-4 {\n width: 25%;\n float: left;\n margin-right: 10px;\n}\n@media screen and (max-width: 768px) {\n .llms-notice-box .col-1-4 {\n width: 100%;\n }\n}\n.llms-notice-box .col-1-6 {\n width: 16.6%;\n float: left;\n margin-right: 10px;\n}\n.llms-notice-box .col-1-8 {\n width: 11%;\n float: right;\n}\n.llms-notice-box .llms-pad-right {\n padding-right: 10px;\n}\n@media screen and (max-width: 768px) {\n .llms-notice-box .llms-pad-right {\n padding-right: 0;\n }\n}\n\ninput[type=text].cc_cvv,\n#cc_cvv {\n margin-right: 0;\n width: 23%;\n float: right;\n}\n\n.llms-clear-box {\n border-radius: 3px;\n z-index: 10;\n margin: 10px 0;\n padding: 15px 20px;\n list-style-type: none;\n width: 100%;\n overflow: auto;\n}\n\n.llms-price-label {\n font-weight: normal;\n}\n\n.llms-final-price {\n font-weight: bold;\n float: right;\n}\n\n.llms-center-content {\n text-align: center;\n}\n\n.llms-input-text {\n background-color: #fff;\n border: 1px solid #ddd;\n color: #333;\n font-size: 18px;\n font-weight: 300;\n padding: 16px;\n width: 100%;\n}\n\n.llms-price {\n margin-bottom: 0;\n font-weight: bold;\n}\n\n.llms-price-loop {\n margin-bottom: 0;\n font-weight: bold;\n}\n\n.courses .entry {\n padding: 0;\n}\n\n.list-view .site-content .llms-course-list .hentry, .list-view .site-content .llms-membership-list .hentry {\n border-top: 0;\n padding-top: 0;\n}\n\n.llms-content {\n width: 100%;\n}\n\n.llms-lesson-button-wrapper {\n width: 100%;\n display: block;\n clear: both;\n text-align: center;\n}\n\n.llms-template-wrapper {\n width: 100%;\n display: block;\n clear: both;\n}\n\n.llms-button-wrapper {\n width: 100%;\n display: block;\n clear: both;\n text-align: center;\n}\n\n.llms-styled-select {\n border: 1px solid #ccc;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border-radius: 3px;\n overflow: hidden;\n position: relative;\n}\n\n.llms-styled-select, .llms-styled-select select {\n width: 100%;\n}\n\nselect:focus {\n outline: none;\n}\n\n.llms-styled-select select {\n height: 34px;\n padding: 5px 0 5px 5px;\n background: transparent;\n border: none;\n -webkit-appearance: none;\n font-size: 16px;\n color: #444444;\n}\n\n@-moz-document url-prefix() {\n .--ms-styled-select select {\n width: 110%;\n }\n}\n.llms-styled-select .fa-sort-desc {\n position: absolute;\n top: 0;\n right: 12px;\n font-size: 24px;\n color: #ccc;\n}\n\nselect::-ms-expand {\n display: none;\n}\n\n_:-o-prefocus .llms-styled-select, .selector .llms-styled-select {\n background: none;\n}\n\n.llms-form-item-wrapper {\n margin-bottom: 1em;\n}\n\n/* Circle Graph */\n.llms-progress-circle {\n position: relative;\n width: 200px;\n height: 200px;\n float: left;\n}\n\n.llms-progress-circle-count {\n top: 27%;\n position: absolute;\n width: 94%;\n text-align: center;\n color: #666;\n font-size: 44px;\n}\n\n.llms-progress-circle svg {\n position: absolute;\n width: 200px;\n height: 200px;\n}\n\n.llms-progress-circle circle {\n fill: transparent;\n}\n\nsvg .llms-background-circle {\n fill: transparent;\n stroke-width: 10px;\n stroke: #f1f2f1;\n stroke-dasharray: 430;\n}\n\nsvg .llms-animated-circle {\n fill: transparent;\n stroke-width: 10px;\n stroke: #e5554e;\n stroke-dasharray: 430;\n stroke-dashoffset: 410;\n}\n\n.llms-widget-syllabus .llms-lesson.current-lesson .lesson-title {\n font-weight: 700;\n}\n.llms-widget-syllabus .section-header {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 5px;\n}\n.llms-widget-syllabus .section-header .llms-collapse-caret {\n text-align: left;\n width: 14px;\n}\n.llms-widget-syllabus .llms-lesson-complete, .llms-widget-syllabus .lesson-complete-placeholder {\n font-size: 18px;\n margin-right: 5px;\n color: #ccc;\n}\n.llms-widget-syllabus .llms-lesson-complete.done, .llms-widget-syllabus .lesson-complete-placeholder.done {\n color: #466dd8;\n}\n.llms-widget-syllabus .section-title {\n font-weight: bold;\n}\n.llms-widget-syllabus .lesson-title a {\n text-decoration: underline;\n}\n.llms-widget-syllabus .lesson-title.done a {\n color: #666;\n text-decoration: line-through;\n}\n.llms-widget-syllabus ul {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-widget-syllabus ul li {\n list-style-type: none;\n margin: 0 0 10px 0;\n}\n.llms-widget-syllabus ul li ul {\n margin: 0 0 15px 0;\n}\n.llms-widget-syllabus ul li ul li {\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin: 0 0 10px 0;\n padding: 0;\n}\n\n.llms-remove-coupon {\n float: right;\n}\n\n/*.llms-lesson-link-locked, .llms-lesson-link-locked:hover {\n background: #f1f1f1;\n display: block;\n color: #a6a6a6;\n min-height: 85px;\n padding: 15px;\n text-decoration: none;\n position: relative;\n}*/\n.llms-lesson-preview.is-complete .llms-lesson-link-locked {\n padding-left: 75px;\n}\n\n.llms-lesson-tooltip {\n display: none;\n position: absolute;\n color: #000000;\n background-color: #c0c0c0;\n padding: 0.25em;\n border-radius: 2px;\n z-index: 100;\n top: 0;\n left: 50%;\n text-align: center;\n -webkit-transform: translateX(-50%) translateY(-100%);\n transform: translateX(-50%) translateY(-100%);\n}\n\n/* arrows - :after */\n.llms-lesson-tooltip:after {\n content: \"\";\n width: 0;\n height: 0;\n border-top: 8px solid #c0c0c0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n position: absolute;\n bottom: -8px;\n left: 50%;\n -webkit-transform: translateX(-50%);\n transform: translateX(-50%);\n}\n\n.llms-lesson-tooltip.active {\n display: inline-block;\n}\n\n.llms-favorite-wrapper {\n cursor: pointer;\n}\n.llms-favorite-wrapper .fa-heart {\n color: #EF476F;\n}\n\n.llms-has-favorite .llms-parent-course-link {\n display: inline-block;\n margin-bottom: 20px;\n}\n.llms-has-favorite .llms-parent-course-link + .llms-favorite-wrapper {\n float: right;\n margin: 0;\n}\n\n.llms-syllabus-wrapper .llms-has-favorite {\n text-align: left;\n}\n.llms-syllabus-wrapper .llms-has-favorite .llms-favorite-wrapper {\n display: inline-block;\n}\n\n.llms-loop-list {\n list-style: none;\n margin: 0 -10px;\n padding: 0;\n}\n@media all and (min-width: 600px) {\n .llms-loop-list.cols-1 .llms-loop-item {\n width: 100%;\n }\n .llms-loop-list.cols-2 .llms-loop-item {\n width: 50%;\n }\n .llms-loop-list.cols-3 .llms-loop-item {\n width: 33.3333333333%;\n }\n .llms-loop-list.cols-4 .llms-loop-item {\n width: 25%;\n }\n .llms-loop-list.cols-5 .llms-loop-item {\n width: 20%;\n }\n .llms-loop-list.cols-6 .llms-loop-item {\n width: 16.6666666667%;\n }\n}\n\n.llms-loop-item {\n float: left;\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n}\n\n.llms-loop-item-content {\n background: #fefefe;\n border: 1px solid #dedede;\n border-radius: 6px;\n overflow: hidden;\n padding-bottom: 15px;\n margin: 10px;\n}\n.llms-loop-item-content .llms-loop-link {\n color: #010101;\n display: block;\n text-decoration: none;\n}\n.llms-loop-item-content .llms-loop-link:visited {\n color: #010101;\n}\n.llms-loop-item-content .llms-featured-image {\n display: block;\n max-width: 100%;\n}\n.llms-loop-item-content .llms-loop-title {\n color: #010101;\n margin: 15px 0;\n}\n.llms-loop-item-content .llms-loop-title:hover {\n color: #466dd8;\n}\n.llms-loop-item-content .llms-meta,\n.llms-loop-item-content .llms-author,\n.llms-loop-item-content .llms-loop-title {\n padding: 0 15px;\n}\n.llms-loop-item-content .llms-meta,\n.llms-loop-item-content .llms-author {\n color: #444;\n display: block;\n font-size: 14px;\n margin-bottom: 10px;\n}\n.llms-loop-item-content .llms-meta:last-child,\n.llms-loop-item-content .llms-author:last-child {\n margin-bottom: 0;\n}\n.llms-loop-item-content .llms-author {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 5px;\n}\n.llms-loop-item-content .llms-featured-img-wrap {\n overflow: hidden;\n}\n.llms-loop-item-content p {\n margin-bottom: 0;\n}\n.llms-loop-item-content .llms-progress {\n margin: 0;\n height: 0.4em;\n}\n.llms-loop-item-content .llms-progress .progress__indicator {\n display: none;\n}\n.llms-loop-item-content .llms-progress .llms-progress-bar {\n background-color: #f6f6f6;\n right: 0;\n top: 0;\n}\n\n.llms-meta-info {\n margin: 40px 0;\n}\n.llms-meta-info .llms-meta-title {\n margin: 0;\n}\n.llms-meta-info .llms-meta p {\n margin-bottom: 0;\n}\n.llms-meta-info .llms-meta span {\n font-weight: 700;\n}\n\n.llms-course-progress {\n margin: 40px auto;\n max-width: 480px;\n text-align: center;\n}\n\n.llms-syllabus-wrapper {\n margin: 20px 0;\n text-align: left;\n}\n.llms-syllabus-wrapper .llms-section-title {\n margin: 40px 0 10px;\n}\n.llms-syllabus-wrapper .llms-section-title + .llms-lesson-preview {\n border-top: 1px solid #dedede;\n}\n\n.llms-lesson-preview {\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n border-left: 1px solid #dedede;\n display: block;\n margin: 0;\n max-width: 100%;\n position: relative;\n}\n.llms-lesson-preview .llms-lesson-link {\n background: #fefefe;\n color: #010101;\n display: block;\n padding: 15px;\n text-decoration: none;\n -webkit-transition: background-color 0.3s ease;\n transition: background-color 0.3s ease;\n}\n.llms-lesson-preview .llms-lesson-link:hover {\n background: #eaeaea;\n}\n.llms-lesson-preview .llms-lesson-link:visited {\n color: #212121;\n}\n.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked {\n background: #EFEFEF;\n color: #666;\n}\n.llms-lesson-preview .llms-lesson-link.llms-lesson-link-locked:hover {\n background: #dedede;\n}\n.llms-lesson-preview .llms-lesson-link .llms-lesson-preview-row {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n.llms-lesson-preview .llms-lesson-thumbnail {\n margin-bottom: 15px;\n}\n.llms-lesson-preview .llms-lesson-thumbnail img {\n display: block;\n height: auto;\n width: 100%;\n}\n.llms-lesson-preview .llms-lesson-title {\n font-weight: 700;\n margin: 0 auto 5px;\n}\n.llms-lesson-preview .llms-lesson-title:last-child {\n margin-bottom: 0;\n}\n.llms-lesson-preview .llms-lesson-excerpt {\n margin-top: 5px;\n}\n.llms-lesson-preview .llms-lesson-excerpt p {\n margin: 0 0 10px 0;\n padding: 0;\n}\n.llms-lesson-preview .llms-lesson-excerpt p:last-of-type {\n margin: 0;\n}\n.llms-lesson-preview .llms-main {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.llms-lesson-preview .llms-extra {\n min-width: 50px;\n text-align: right;\n}\n.llms-lesson-preview .llms-lesson-counter,\n.llms-lesson-preview .llms-free-lesson-svg,\n.llms-lesson-preview .llms-lesson-complete,\n.llms-lesson-preview .llms-lesson-complete-placeholder {\n display: block;\n}\n.llms-lesson-preview.is-free .llms-lesson-complete, .llms-lesson-preview.is-complete .llms-lesson-complete {\n color: #466dd8;\n}\n.llms-lesson-preview.is-complete .llms-lesson-title:not(.llms-student-dashboard .llms-lesson-title):not(.llms-course-navigation .llms-lesson-title) {\n text-decoration: line-through;\n}\n.llms-lesson-preview .llms-icon-free {\n background: #466dd8;\n border-radius: 6px;\n color: #fefefe;\n display: inline-block;\n font-size: 14px;\n font-weight: bold;\n line-height: 1;\n padding: 5px 8px 4px;\n white-space: nowrap;\n}\n.llms-lesson-preview.is-incomplete .llms-lesson-complete {\n color: #cacaca;\n}\n.llms-lesson-preview .llms-lesson-counter {\n font-size: 16px;\n margin-bottom: 5px;\n}\n.llms-lesson-preview .llms-free-lesson-svg {\n fill: currentColor;\n height: 23px;\n width: 50px;\n}\n\n.llms-course-navigation {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 20px;\n}\n.llms-course-navigation .llms-prev-lesson,\n.llms-course-navigation .llms-next-lesson,\n.llms-course-navigation .llms-back-to-course {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.llms-course-navigation .llms-prev-lesson + .llms-back-to-course {\n text-align: right;\n}\n.llms-course-navigation .llms-next-lesson .llms-lesson-preview .llms-lesson-link {\n text-align: right;\n}\n.llms-course-navigation .llms-lesson-preview {\n border: 1px solid #dedede;\n}\n.llms-course-navigation .llms-lesson-link {\n display: block;\n}\n\n/* progress bar */\n.llms-progress {\n clear: both;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n position: relative;\n height: 1em;\n width: 100%;\n margin: 15px 0;\n}\n\n.llms-progress .llms-progress-bar {\n background-color: #dedede;\n position: relative;\n height: 0.4em;\n top: 0.3em;\n width: 100%;\n}\n\n.llms-progress .progress-bar-complete {\n background-color: #ef476f;\n height: 100%;\n}\n\n.progress__indicator {\n float: right;\n text-align: right;\n height: 1em;\n line-height: 1em;\n margin-left: 5px;\n white-space: nowrap;\n}\n\n.llms-author .name {\n margin-left: 5px;\n}\n.llms-author .label {\n margin-left: 5px;\n}\n.llms-author .avatar {\n border-radius: 50%;\n}\n.llms-author .bio {\n margin-top: 5px;\n}\n\n.llms-instructor-info {\n margin: 40px 0;\n}\n.llms-instructor-info .llms-meta-title {\n margin: 0;\n}\n.llms-instructor-info .llms-instructors .llms-col:first-child .llms-author {\n margin-left: 0;\n}\n.llms-instructor-info .llms-instructors .llms-col:last-child .llms-author {\n margin-right: 0;\n}\n.llms-instructor-info .llms-instructors .llms-author {\n background: #fefefe;\n border: 1px solid #dedede;\n border-top: 4px solid #466dd8;\n border-bottom-right-radius: 6px;\n border-bottom-left-radius: 6px;\n color: #010101;\n text-align: center;\n margin: 45px 0 0;\n padding: 0 20px 20px;\n}\n.llms-instructor-info .llms-instructors .llms-author .avatar {\n background: #466dd8;\n border: 4px solid #466dd8;\n display: block;\n margin: -35px auto 10px;\n}\n.llms-instructor-info .llms-instructors .llms-author .llms-author-info {\n display: block;\n}\n.llms-instructor-info .llms-instructors .llms-author .llms-author-info.name {\n font-weight: 700;\n}\n.llms-instructor-info .llms-instructors .llms-author .llms-author-info.label {\n font-size: 85%;\n}\n.llms-instructor-info .llms-instructors .llms-author .llms-author-info.bio {\n font-size: 90%;\n margin-bottom: 0;\n}\n\n.llms_review {\n margin: 20px 0px;\n padding: 10px;\n}\n.llms_review h5 {\n font-size: 17px;\n margin: 3px 0px;\n}\n.llms_review h6 {\n font-size: 13px;\n}\n.llms_review p {\n font-size: 15px;\n}\n\n.review_box [type=text] {\n margin: 10px 0px;\n}\n.review_box h5 {\n color: red;\n display: none;\n}\n.review_box + .thank_you_box {\n display: none;\n}\n\n.llms-notice {\n background: rgba(70, 109, 216, 0.3);\n border-color: #466dd8;\n border-style: solid;\n border-width: 1px;\n border-radius: 6px;\n padding: 15px;\n margin-bottom: 40px;\n}\n.llms-notice a {\n color: inherit;\n}\n.llms-notice p:last-child, .llms-notice ul:last-child {\n margin-bottom: 0;\n}\n.llms-notice li {\n list-style-type: none;\n}\n.llms-notice.llms-debug {\n background: rgba(202, 202, 202, 0.3);\n border-color: #cacaca;\n}\n.llms-notice.llms-error {\n background: rgba(187, 35, 28, 0.15);\n border-color: #bb231c;\n}\n.llms-notice.llms-success {\n background: rgba(77, 141, 60, 0.15);\n border-color: #4d8d3c;\n}\n\n.entry-content .llms-notice {\n margin: 0 0 40px;\n}\n.entry-content .llms-notice li {\n list-style-type: none;\n}\n\nul.llms-achievements-loop,\n.lifterlms ul.llms-achievements-loop,\nul.llms-certificates-loop,\n.lifterlms ul.llms-certificates-loop {\n list-style-type: none;\n margin: 0 -10px;\n padding: 0;\n}\nul.llms-achievements-loop:before, ul.llms-achievements-loop:after,\n.lifterlms ul.llms-achievements-loop:before,\n.lifterlms ul.llms-achievements-loop:after,\nul.llms-certificates-loop:before,\nul.llms-certificates-loop:after,\n.lifterlms ul.llms-certificates-loop:before,\n.lifterlms ul.llms-certificates-loop:after {\n content: \" \";\n display: table;\n}\nul.llms-achievements-loop:after,\n.lifterlms ul.llms-achievements-loop:after,\nul.llms-certificates-loop:after,\n.lifterlms ul.llms-certificates-loop:after {\n clear: both;\n}\nul.llms-achievements-loop li.llms-achievement-loop-item,\nul.llms-achievements-loop li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop li.llms-certificate-loop-item,\nul.llms-certificates-loop li.llms-achievement-loop-item,\nul.llms-certificates-loop li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop li.llms-certificate-loop-item {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: block;\n float: left;\n list-style-type: none;\n margin: 0;\n padding: 10px;\n width: 100%;\n}\n@media all and (min-width: 600px) {\n ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-1 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-1 li.llms-certificate-loop-item {\n width: 100%;\n }\n ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-2 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-2 li.llms-certificate-loop-item {\n width: 50%;\n }\n ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-3 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-3 li.llms-certificate-loop-item {\n width: 33.3333333333%;\n }\n ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-4 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-4 li.llms-certificate-loop-item {\n width: 25%;\n }\n ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item, ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-achievement-loop-item,\n.lifterlms ul.llms-achievements-loop.loop-cols-5 li.llms-certificate-loop-item,\nul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,\nul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-achievement-loop-item,\n.lifterlms ul.llms-certificates-loop.loop-cols-5 li.llms-certificate-loop-item {\n width: 20%;\n }\n}\n\n.llms-achievement,\n.llms-certificate {\n background: #fefefe;\n border: none;\n border-radius: 12px;\n color: #010101;\n display: block;\n padding: 20px 0;\n text-decoration: none;\n width: 100%;\n}\n.llms-achievement:hover,\n.llms-certificate:hover {\n background: #eaeaea;\n}\n.llms-achievement .llms-achievement-img,\n.llms-certificate .llms-achievement-img {\n display: block;\n margin: 0 auto;\n max-width: 80%;\n}\n.llms-achievement .llms-achievement-title,\n.llms-certificate .llms-achievement-title {\n color: #010101;\n font-size: 16px;\n margin: 0;\n padding: 10px;\n text-align: center;\n}\n.llms-achievement .llms-certificate-title,\n.llms-certificate .llms-certificate-title {\n color: #010101;\n font-size: 16px;\n margin: 0;\n padding: 0 0 10px;\n}\n.llms-achievement .llms-achievement-info,\n.llms-achievement .llms-achievement-date,\n.llms-certificate .llms-achievement-info,\n.llms-certificate .llms-achievement-date {\n display: none;\n}\n.llms-achievement .llms-achievement-content,\n.llms-certificate .llms-achievement-content {\n padding: 20px;\n}\n.llms-achievement .llms-achievement-content:empty,\n.llms-certificate .llms-achievement-content:empty {\n padding: 0;\n}\n.llms-achievement .llms-achievement-content *:last-child,\n.llms-certificate .llms-achievement-content *:last-child {\n margin-bottom: 0;\n}\n\n.llms-certificate {\n border: 4px double #dedede;\n padding: 20px 10px;\n background: #fefefe;\n text-align: center;\n}\n.llms-certificate:hover {\n background: #fefefe;\n border-color: #eaeaea;\n}\n\n.llms-achievement-modal .llms-achievement {\n background: #fff;\n}\n.llms-achievement-modal .llms-achievement-info {\n display: block;\n}\n.llms-achievement-modal .llms-achievement-title {\n display: none;\n}\n\n.llms-notification {\n background: #fefefe;\n -webkit-box-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;\n box-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;\n border-top: 4px solid #466dd8;\n color: #010101;\n opacity: 0;\n padding: 12px;\n position: fixed;\n right: -800px;\n top: 24px;\n -webkit-transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out;\n transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out;\n visibility: hidden;\n width: auto;\n z-index: 9999999;\n}\n.llms-notification:before, .llms-notification:after {\n content: \" \";\n display: table;\n}\n.llms-notification:after {\n clear: both;\n}\n.llms-notification.visible {\n left: 12px;\n opacity: 1;\n right: 12px;\n -webkit-transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, transform 0.2s ease-in-out;\n transition: opacity 0.4s ease-in-out, right 0.4s ease-in-out, top 0.1s ease-in-out, background 0.2s ease-in-out, transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n visibility: visible;\n}\n.llms-notification.visible:hover .llms-notification-dismiss {\n opacity: 1;\n}\n.llms-notification .llms-notification-content {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.llms-notification .llms-notification-main {\n -ms-flex-item-align: start;\n align-self: flex-start;\n -webkit-box-flex: 4;\n -ms-flex: 4;\n flex: 4;\n -webkit-box-ordinal-group: 3;\n -ms-flex-order: 2;\n order: 2;\n}\n.llms-notification .llms-notification-title {\n color: #010101;\n font-size: 18px;\n margin: 0;\n}\n.llms-notification .llms-notification-body {\n font-size: 14px;\n line-height: 1.4;\n}\n.llms-notification .llms-notification-body p, .llms-notification .llms-notification-body li {\n font-size: inherit;\n}\n.llms-notification .llms-notification-body p {\n margin-bottom: 8px;\n}\n.llms-notification .llms-notification-body p img {\n max-width: 100%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert {\n background: #f6f6f6;\n border: 1px solid #d0d0d0;\n -webkit-box-shadow: inset 0 0 0 3px #fefefe, inset 0 0 0 4px #dedede;\n box-shadow: inset 0 0 0 3px #fefefe, inset 0 0 0 4px #dedede;\n padding: 16px 16px 24px;\n margin-top: 12px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert-title {\n font-size: 16px;\n font-weight: 700;\n margin: 12px auto;\n text-align: center;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body {\n width: 100%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(1) {\n width: 65%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(2) {\n width: 35%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(3) {\n width: 85%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(4) {\n width: 75%;\n margin-top: 18px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(5) {\n width: 70%;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(6) {\n margin-left: 12px;\n margin-bottom: -24px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--body > div:nth-child(7) {\n width: 65%;\n margin-right: 12px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-line {\n border-radius: 2px;\n height: 8px;\n background: #b0b0b0;\n background-image: -webkit-gradient(linear, left top, right top, from(#b0b0b0), color-stop(20%, #a0a0a0), color-stop(40%, #b0b0b0), to(#b0b0b0));\n background-image: linear-gradient(to right, #b0b0b0 0%, #a0a0a0 20%, #b0b0b0 40%, #b0b0b0 100%);\n background-repeat: no-repeat;\n margin: 4px auto;\n}\n.llms-notification .llms-notification-body .llms-mini-cert .llms-mini-cert--mock-dot {\n background: #b0b0b0;\n border-radius: 50%;\n display: inline-block;\n content: \"\";\n height: 24px;\n width: 24px;\n}\n.llms-notification .llms-notification-body .llms-mini-cert p {\n margin-bottom: 0;\n}\n.llms-notification .llms-notification-aside {\n -ms-flex-item-align: start;\n align-self: flex-start;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n margin-right: 12px;\n -webkit-box-ordinal-group: 2;\n -ms-flex-order: 1;\n order: 1;\n}\n.llms-notification .llms-notification-icon {\n display: block;\n max-width: 64px;\n}\n.llms-notification .llms-notification-footer {\n border-top: 1px solid #e5e5e5;\n font-size: 12px;\n margin-top: 12px;\n padding: 6px 6px 0;\n text-align: right;\n}\n.llms-notification .llms-notification-footer a {\n color: #010101;\n}\n.llms-notification .llms-notification-dismiss {\n color: #bb231c;\n cursor: pointer;\n font-size: 22px;\n position: absolute;\n right: 10px;\n top: 8px;\n -webkit-transition: opacity 0.4s ease-in-out;\n transition: opacity 0.4s ease-in-out;\n}\n\n.llms-sd-notification-center .llms-notification-list,\n.llms-sd-notification-center .llms-notification-list-item {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-sd-notification-center .llms-notification-list-item:hover .llms-notification {\n background: #fcfcfc;\n}\n.llms-sd-notification-center .llms-notification {\n opacity: 1;\n border-top: 1px solid #e5e5e5;\n left: auto;\n padding: 24px;\n position: relative;\n right: auto;\n top: auto;\n visibility: visible;\n width: auto;\n}\n.llms-sd-notification-center .llms-notification .llms-notification-aside {\n max-width: 64px;\n}\n.llms-sd-notification-center .llms-notification .llms-notification-footer {\n border: none;\n padding: 0;\n text-align: left;\n}\n.llms-sd-notification-center .llms-notification .llms-progress {\n display: none !important;\n}\n.llms-sd-notification-center .llms-notification .llms-notification-date {\n color: #515151;\n float: left;\n margin-right: 6px;\n}\n.llms-sd-notification-center .llms-notification .llms-mini-cert {\n margin: 0 auto;\n max-width: 380px;\n}\n\n@media all and (min-width: 480px) {\n .llms-notification {\n right: -800px;\n width: 360px;\n }\n .llms-notification.visible {\n left: auto;\n right: 24px;\n }\n .llms-notification .llms-notification-dismiss {\n opacity: 0;\n }\n}\n.llms-pagination ul {\n list-style-type: none;\n margin: 40px 0;\n padding: 0;\n}\n.llms-pagination ul li {\n float: left;\n}\n.llms-pagination ul li a {\n border-bottom: 0;\n text-decoration: none;\n}\n.llms-pagination ul li .page-numbers {\n padding: 0.5em;\n text-decoration: underline;\n}\n.llms-pagination ul li .page-numbers.current {\n text-decoration: none;\n}\n\n.llms-tooltip {\n background: #2a2a2a;\n border-radius: 4px;\n color: #fff;\n font-size: 14px;\n line-height: 1.2;\n opacity: 0;\n top: -20px;\n padding: 8px 12px;\n left: 50%;\n position: absolute;\n pointer-events: none;\n -webkit-transform: translateX(-50%);\n transform: translateX(-50%);\n -webkit-transition: opacity 0.2s ease, top 0.2s ease;\n transition: opacity 0.2s ease, top 0.2s ease;\n max-width: 320px;\n}\n.llms-tooltip.show {\n top: -28px;\n opacity: 1;\n}\n.llms-tooltip:after {\n bottom: -8px;\n border-top: 8px solid #2a2a2a;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n content: \"\";\n height: 0;\n left: 50%;\n position: absolute;\n -webkit-transform: translateX(-50%);\n transform: translateX(-50%);\n width: 0;\n}\n\n.webui-popover-title {\n font-size: initial;\n font-weight: initial;\n line-height: initial;\n}\n\n.webui-popover-inverse .webui-popover-inner .close {\n color: #fff;\n opacity: 0.6;\n text-shadow: none;\n}\n.webui-popover-inverse .webui-popover-inner .close:hover {\n opacity: 0.8;\n}\n.webui-popover-inverse .webui-popover-content a {\n color: #fff;\n text-decoration: underline;\n}\n.webui-popover-inverse .webui-popover-content a:hover {\n text-decoration: none;\n}\n\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question {\n background: #efefef;\n border-radius: 6px;\n margin: 0 0 15px;\n position: relative;\n list-style-type: none;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {\n color: inherit;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 10px;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 15px 35px 15px 15px;\n text-decoration: none;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect {\n background: rgba(192, 86, 33, 0.2);\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.correct .llms-status-icon, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--waiting.incorrect .llms-status-icon {\n background-color: #c05621;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {\n background: rgba(77, 141, 60, 0.15);\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {\n background-color: #4d8d3c;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {\n background: rgba(187, 35, 28, 0.15);\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {\n background-color: #bb231c;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question pre {\n overflow: auto;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {\n font-size: 22px;\n margin: 0;\n line-height: 1.4;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {\n line-height: 1.4;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {\n position: absolute;\n right: -12px;\n top: -2px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon {\n color: rgba(255, 255, 255, 0.65);\n border-radius: 50%;\n font-size: 30px;\n height: 40px;\n line-height: 40px;\n text-align: center;\n width: 40px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {\n display: none;\n padding: 0 15px 15px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {\n font-weight: 700;\n margin: 0 0 10px;\n padding: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers {\n margin: 0;\n padding: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {\n padding: 0;\n margin: 0 0 0 30px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer:only-child {\n list-style-type: none;\n margin-left: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {\n height: auto;\n max-width: 200px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section {\n border-top: 2px solid rgba(255, 255, 255, 0.5);\n margin-top: 20px;\n padding-top: 20px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-attempt-answer-section:first-child {\n border-top: none;\n margin-top: 0;\n padding-top: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_choice ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer, .single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--picture_reorder ul.llms-quiz-attempt-answers li.llms-quiz-attempt-answer {\n display: inline-block;\n list-style-type: none;\n margin: 0;\n padding: 5px;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {\n opacity: 0.5;\n}\n.single-llms_quiz #llms-quiz-wrapper .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {\n font-style: italic;\n font-weight: normal;\n}\n.single-llms_quiz .llms-return {\n margin-bottom: 10px;\n}\n.single-llms_quiz .llms-quiz-results:before, .single-llms_quiz .llms-quiz-results:after {\n content: \" \";\n display: table;\n}\n.single-llms_quiz .llms-quiz-results:after {\n clear: both;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.passing {\n color: #4d8d3c;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.passing svg path {\n stroke: #4d8d3c;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.pending {\n color: #555;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.pending svg path {\n stroke: #555;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.failing {\n color: #bb231c;\n}\n.single-llms_quiz .llms-quiz-results .llms-donut.failing svg path {\n stroke: #bb231c;\n}\n.single-llms_quiz .llms-quiz-results .llms-quiz-results-aside,\n.single-llms_quiz .llms-quiz-results .llms-quiz-results-main,\n.single-llms_quiz .llms-quiz-results .llms-quiz-results-history {\n margin-bottom: 20px;\n}\n@media all and (min-width: 600px) {\n .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside {\n float: left;\n width: 220px;\n }\n .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside + .llms-quiz-results-main {\n float: right;\n width: calc(100% - 300px);\n }\n .single-llms_quiz .llms-quiz-results .llms-quiz-results-aside + .llms-quiz-results-main + .llms-quiz-results-history {\n float: right;\n width: calc(100% - 300px);\n }\n .single-llms_quiz .llms-quiz-results .llms-quiz-results-history {\n clear: right;\n }\n}\n.single-llms_quiz ul.llms-quiz-meta-info {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.single-llms_quiz ul.llms-quiz-meta-info li {\n list-style-type: none;\n margin: 10px 0 0;\n padding: 0;\n}\n.single-llms_quiz ul.llms-quiz-meta-info {\n margin-bottom: 10px;\n}\n.single-llms_quiz .llms-quiz-buttons {\n margin-top: 10px;\n text-align: left;\n}\n.single-llms_quiz .llms-quiz-buttons form {\n display: inline-block;\n}\n\n.llms-quiz-question-wrapper {\n min-height: 140px;\n position: relative;\n}\n.llms-quiz-question-wrapper .llms-quiz-loading {\n bottom: 20px;\n left: 0;\n position: absolute;\n right: 0;\n text-align: center;\n z-index: 1;\n}\n.llms-quiz-question-wrapper .llms-question-image img {\n height: auto;\n max-width: 100%;\n}\n\n.llms-quiz-ui {\n position: relative;\n}\n.llms-quiz-ui .llms-quiz-header {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin: 0 0 40px;\n}\n.llms-quiz-ui .llms-progress {\n background-color: #dedede;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n height: 8px;\n margin: 0;\n overflow: hidden;\n}\n.llms-quiz-ui .llms-progress .progress-bar-complete {\n -webkit-transition: width 0.3s ease-in;\n transition: width 0.3s ease-in;\n width: 0;\n}\n.llms-quiz-ui .llms-error {\n background: rgba(187, 35, 28, 0.15);\n border: 1px solid #bb231c;\n border-radius: 6px;\n margin: 20px 0;\n padding: 15px;\n}\n.llms-quiz-ui .llms-error:before, .llms-quiz-ui .llms-error:after {\n content: \" \";\n display: table;\n}\n.llms-quiz-ui .llms-error:after {\n clear: both;\n}\n.llms-quiz-ui .llms-error a {\n color: #bb231c;\n float: right;\n font-size: 22px;\n line-height: 1;\n text-decoration: none;\n}\n.llms-quiz-ui .llms-quiz-counter {\n display: none;\n color: #6a6a6a;\n float: right;\n font-size: 18px;\n}\n.llms-quiz-ui .llms-quiz-counter .llms-sep {\n margin: 0 5px;\n}\n.llms-quiz-ui .llms-quiz-nav {\n margin-top: 20px;\n}\n.llms-quiz-ui .llms-quiz-nav button {\n margin: 0 10px 0 0;\n}\n\n.llms-question-wrapper .llms-question-text {\n font-size: 30px;\n font-weight: 400;\n margin-bottom: 15px;\n}\n.llms-question-wrapper ol.llms-question-choices {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice {\n border-bottom: 1px solid #e8e8e8;\n margin: 0;\n padding: 0;\n position: relative;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice:last-child {\n border-bottom: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture {\n border-bottom: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture label {\n display: inline-block;\n padding: 0;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-marker {\n bottom: 10px;\n margin: 0;\n position: absolute;\n right: 10px;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image {\n margin: 2px;\n padding: 20px;\n -webkit-transition: background 0.4s ease;\n transition: background 0.4s ease;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture .llms-choice-image img {\n display: block;\n height: auto;\n width: 100%;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice.type--picture input:checked ~ .llms-choice-image {\n background: #efefef;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice input {\n display: none;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n visibility: hidden;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice label {\n display: block;\n margin: 0;\n padding: 10px 20px;\n position: relative;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .iterator {\n display: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice label.hovered .llms-marker:not(.type--lister) .fa {\n display: inline;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker {\n background: #fefefe;\n color: #010101;\n display: inline-block;\n font-size: 20px;\n height: 40px;\n line-height: 40px;\n margin-right: 10px;\n text-align: center;\n -webkit-transition: all 0.2s ease;\n transition: all 0.2s ease;\n vertical-align: middle;\n width: 40px;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker .fa {\n display: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--lister, .llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--checkbox {\n border-radius: 4px;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-marker.type--radio {\n border-radius: 50%;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker {\n background: #ef476f;\n color: #fff;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker .iterator {\n display: none;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice input:checked + .llms-marker .fa {\n display: inline;\n}\n.llms-question-wrapper ol.llms-question-choices li.llms-choice .llms-choice-text {\n display: inline-block;\n font-size: 18px;\n font-weight: 400;\n line-height: 1.6;\n margin: 0;\n padding: 0;\n vertical-align: middle;\n width: calc(100% - 60px);\n}\n\n.llms-quiz-timer {\n background: #fff;\n border: 1px solid #4d8d3c;\n border-radius: 4px;\n color: #4d8d3c;\n float: right;\n font-size: 18px;\n line-height: 1;\n margin-left: 20px;\n padding: 8px 12px;\n position: relative;\n white-space: nowrap;\n z-index: 1;\n}\n.llms-quiz-timer.color-half {\n border-color: #c05621;\n color: #c05621;\n}\n.llms-quiz-timer.color-empty {\n border-color: #bb231c;\n color: #bb231c;\n}\n.llms-quiz-timer .llms-tiles {\n display: inline-block;\n margin-left: 5px;\n}\n\n.voucher-expand {\n display: none;\n}\n\n@media all and (min-width: 600px) {\n .llms-access-plans.cols-1 .llms-access-plan {\n width: 100%;\n }\n .llms-access-plans.cols-2 .llms-access-plan {\n width: 50%;\n }\n .llms-access-plans.cols-3 .llms-access-plan {\n width: 33.3333333333%;\n }\n .llms-access-plans.cols-4 .llms-access-plan {\n width: 25%;\n }\n .llms-access-plans.cols-5 .llms-access-plan {\n width: 20%;\n }\n}\n\n.llms-free-enroll-form {\n margin-bottom: 0;\n}\n\n.llms-access-plan {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n float: left;\n text-align: center;\n width: 100%;\n}\n.llms-access-plan .llms-access-plan-content,\n.llms-access-plan .llms-access-plan-footer {\n background: #f1f1f1;\n}\n.llms-access-plan.featured .llms-access-plan-featured {\n background: #466dd8;\n border-top-left-radius: 6px;\n border-top-right-radius: 6px;\n}\n.llms-access-plan.featured .llms-access-plan-content {\n border-radius: 0;\n}\n.llms-access-plan.featured .llms-access-plan-title {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.llms-access-plan.featured .llms-access-plan-footer,\n.llms-access-plan.featured .llms-access-plan-content {\n border-left: 3px solid #466dd8;\n border-right: 3px solid #466dd8;\n}\n.llms-access-plan.featured .llms-access-plan-footer {\n border-bottom-color: #466dd8;\n}\n.llms-access-plan.on-sale .price-regular {\n text-decoration: line-through;\n}\n.llms-access-plan.on-sale .price-regular .lifterlms-price {\n font-weight: 400;\n}\n.llms-access-plan .stamp {\n background: #466dd8;\n border-radius: 6px;\n color: #fefefe;\n display: inline-block;\n font-size: 14px;\n font-style: normal;\n font-weight: bold;\n line-height: 1;\n padding: 5px 8px 4px;\n}\n\n.llms-access-plan-featured {\n color: #fff;\n font-size: 14px;\n font-weight: 700;\n letter-spacing: 1px;\n margin: 0 2px 0 2px;\n padding: 5px 0 0;\n}\n\n.llms-access-plan-content {\n border-top-right-radius: 6px;\n border-top-left-radius: 6px;\n margin: 0 2px 0;\n overflow: hidden;\n}\n.llms-access-plan-content .llms-access-plan-pricing {\n color: #010101;\n padding: 20px 0 0;\n}\n\n.llms-access-plan-title {\n background: #466dd8;\n color: #fefefe;\n margin: 0;\n padding: 10px 15px;\n}\n\n.llms-access-plan-pricing .llms-price-currency-symbol {\n font-size: 14px;\n vertical-align: top;\n}\n\n.llms-access-plan-price .lifterlms-price {\n font-weight: 700;\n}\n.llms-access-plan-price.sale {\n padding: 5px 0;\n border-top: 1px solid #d0d0d0;\n border-bottom: 1px solid #d0d0d0;\n}\n\n.llms-access-plan-trial,\n.llms-access-plan-schedule,\n.llms-access-plan-sale-end,\n.llms-access-plan-expiration {\n font-size: 16px;\n}\n\n.llms-access-plan-description {\n color: #010101;\n font-size: 16px;\n padding: 10px 10px 0;\n}\n.llms-access-plan-description ul {\n margin: 0;\n}\n.llms-access-plan-description ul li {\n border-bottom: 1px solid #d0d0d0;\n list-style-type: none;\n}\n.llms-access-plan-description ul li:last-child {\n border-bottom: none;\n}\n.llms-access-plan-description div:last-child, .llms-access-plan-description img:last-child, .llms-access-plan-description p:last-child, .llms-access-plan-description ul:last-child, .llms-access-plan-description li:last-child {\n margin-bottom: 0;\n}\n\n.llms-access-plan-restrictions {\n margin-top: 20px;\n}\n.llms-access-plan-restrictions .stamp {\n vertical-align: baseline;\n}\n.llms-access-plan-restrictions ul {\n margin: 5px 0 0 0;\n padding: 0;\n}\n.llms-access-plan-restrictions ul li {\n font-size: 14px;\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-access-plan-restrictions a {\n color: #c05621;\n}\n.llms-access-plan-restrictions a:hover {\n color: #f67d28;\n}\n\n.llms-access-plan-footer {\n border-bottom: 3px solid #f1f1f1;\n border-bottom-left-radius: 6px;\n border-bottom-right-radius: 6px;\n padding: 15px;\n margin: 0 2px 2px 2px;\n}\n.llms-access-plan-footer .button {\n display: inline-block;\n}\n.llms-access-plan-footer .llms-access-plan-pricing {\n padding: 0 0 10px;\n}\n\n.webui-popover-content .llms-members-only-restrictions {\n text-align: center;\n}\n.webui-popover-content .llms-members-only-restrictions ul, .webui-popover-content .llms-members-only-restrictions ol, .webui-popover-content .llms-members-only-restrictions li, .webui-popover-content .llms-members-only-restrictions p {\n margin: 0;\n padding: 0;\n}\n.webui-popover-content .llms-members-only-restrictions ul, .webui-popover-content .llms-members-only-restrictions ol, .webui-popover-content .llms-members-only-restrictions li {\n list-style-type: none;\n}\n.webui-popover-content .llms-members-only-restrictions li {\n padding: 8px 0;\n border-top: 1px solid #3b3b3b;\n}\n.webui-popover-content .llms-members-only-restrictions li:first-child {\n border-top: none;\n}\n.webui-popover-content .llms-members-only-restrictions li a {\n display: block;\n}\n\n.llms-checkout-wrapper .llms-person-login-form-wrapper {\n margin-bottom: 40px;\n}\n.llms-checkout-wrapper form.llms-login {\n display: none;\n}\n.llms-checkout-wrapper .llms-form-heading {\n margin: 0 0 20px;\n}\n\n.llms-checkout {\n position: relative;\n}\n\n.llms-checkout-cols-2.llms-col-2 section {\n background-color: #fefefe;\n border: 1px solid #ccc;\n border-radius: 12px;\n padding: 20px;\n}\n.llms-checkout-cols-2.llms-col-2 section .llms-form-heading {\n padding: 0;\n}\n@media all and (min-width: 800px) {\n .llms-checkout-cols-2 .llms-checkout-col {\n float: left;\n }\n .llms-checkout-cols-2 .llms-checkout-col.llms-col-1 {\n margin-right: 20px;\n width: calc(58% - 20px);\n }\n .llms-checkout-cols-2 .llms-checkout-col.llms-col-2 {\n margin-left: 20px;\n width: calc(42% - 20px);\n }\n .llms-checkout-cols-2 .llms-checkout-col.llms-col-2 button {\n width: 100%;\n }\n}\n\n.llms-checkout-section {\n margin-bottom: 40px;\n position: relative;\n}\n\n.llms-checkout-section-content.llms-form-fields {\n margin: 0px;\n}\n.llms-checkout-section-content .llms-label {\n font-weight: 400;\n}\n.llms-checkout-section-content .llms-order-summary {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-checkout-section-content .llms-order-summary li {\n list-style-type: none;\n margin: 0 0 15px 0;\n}\n.llms-checkout-section-content .llms-order-summary :not(.llms-label) {\n font-weight: 700;\n}\n.llms-checkout-section-content .llms-order-summary li.llms-pricing.on-sale .price-regular, .llms-checkout-section-content .llms-order-summary li.llms-pricing.has-coupon .price-regular {\n text-decoration: line-through;\n}\n.llms-checkout-section-content .llms-coupon-wrapper {\n border-top: 1px solid #dedede;\n margin-top: 20px;\n padding-top: 20px;\n}\n.llms-checkout-section-content .llms-coupon-wrapper .llms-coupon-entry {\n display: none;\n margin-top: 20px;\n}\n\n.llms-form-field.llms-payment-gateway-option {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 8px;\n}\n.llms-form-field.llms-payment-gateway-option label + span.llms-description {\n display: inline-block;\n margin-left: 5px;\n}\n.llms-form-field.llms-payment-gateway-option .llms-description a {\n border: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n text-decoration: none;\n}\n.llms-form-field.llms-payment-gateway-option .llms-description img {\n display: inline;\n max-height: 22px;\n vertical-align: middle;\n}\n\n.llms-checkout-wrapper ul.llms-payment-gateways {\n margin: 5px 0 0;\n padding: 0;\n}\n\nul.llms-payment-gateways {\n list-style-type: none;\n}\nul.llms-payment-gateways li:last-child:after {\n border-bottom: 1px solid #dedede;\n content: \"\";\n display: block;\n margin: 20px 0;\n}\nul.llms-payment-gateways .llms-payment-gateway {\n margin-bottom: 30px;\n list-style-type: none;\n}\nul.llms-payment-gateways .llms-payment-gateway:last-child {\n margin-bottom: none;\n}\nul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-payment-gateway-option label {\n font-weight: 700;\n}\nul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields {\n display: block;\n}\nul.llms-payment-gateways .llms-payment-gateway.is-selected .llms-gateway-fields .llms-notice {\n margin-left: 10px;\n margin-right: 10px;\n}\nul.llms-payment-gateways .llms-payment-gateway .llms-form-field {\n padding-bottom: 0;\n}\nul.llms-payment-gateways .llms-gateway-description {\n margin-left: 40px;\n}\nul.llms-payment-gateways .llms-gateway-fields {\n display: none;\n margin: 5px 0 20px;\n}\nul.llms-payment-gateways .llms-payment-gateway-error {\n padding: 0 10px;\n}\n\n.llms-checkout-confirm {\n margin: 0;\n}\n\n.llms-payment-method {\n margin: 10px 10px 0;\n}\n\n.llms-gateway-description p {\n font-size: 14px;\n font-style: italic;\n margin: 0;\n}\n\n.llms-form-fields {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.llms-form-fields * {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.llms-form-fields.flush .llms-form-field {\n padding: 0 0 20px;\n}\n.llms-form-fields label:not(.llms-field-html label) {\n font-weight: 700;\n}\n.llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {\n margin-bottom: 0;\n}\n\n.llms-form-heading {\n padding: 0 10px 10px;\n}\n\n.llms-form-field {\n float: left;\n padding: 0 10px 20px;\n position: relative;\n width: 100%;\n}\n.llms-form-field label:empty:after {\n content: \" \";\n}\n.llms-form-field [type=text],\n.llms-form-field [type=password],\n.llms-form-field [type=email],\n.llms-form-field [type=url],\n.llms-form-field [type=tel],\n.llms-form-field [type=number] {\n background-color: #fefefe;\n background-clip: padding-box;\n border: 1px solid #999;\n border-radius: 6px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n font-size: 16px;\n line-height: 1;\n padding: 8px 12px;\n -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n width: 100%;\n}\n.llms-form-field input:focus,\n.llms-form-field input:focus-visible {\n border-color: #6888df;\n outline: thin solid;\n}\n.llms-form-field select {\n -webkit-appearance: none;\n -moz-appearance: none;\n -ms-appearance: none;\n appearance: none;\n background-color: #fefefe;\n border: 1px solid #999;\n border-radius: 6px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #010101;\n padding: 8px 12px;\n margin: 0;\n width: 100%;\n font-family: inherit;\n font-size: 16px;\n cursor: inherit;\n line-height: 1.6;\n z-index: 1;\n outline: none;\n background-repeat: no-repeat;\n background-image: linear-gradient(45deg, transparent 50%, currentcolor 50%), linear-gradient(135deg, currentcolor 50%, transparent 50%);\n background-position: right 15px top 1.3rem, right 10px top 1.3rem;\n background-size: 5px 5px, 5px 5px;\n}\n.llms-form-field select::-ms-expand {\n display: none;\n}\n.llms-form-field select:focus {\n border: 1px solid #6888df;\n outline: thin solid;\n}\n.llms-form-field.valid input[type=date], .llms-form-field.valid input[type=time], .llms-form-field.valid input[type=datetime-local], .llms-form-field.valid input[type=week], .llms-form-field.valid input[type=month], .llms-form-field.valid input[type=text], .llms-form-field.valid input[type=email], .llms-form-field.valid input[type=url], .llms-form-field.valid input[type=password], .llms-form-field.valid input[type=search], .llms-form-field.valid input[type=tel], .llms-form-field.valid input[type=number], .llms-form-field.valid textarea, .llms-form-field.valid select {\n background: rgba(131, 195, 115, 0.3);\n border-color: #83c373;\n}\n.llms-form-field.error input[type=date], .llms-form-field.error input[type=time], .llms-form-field.error input[type=datetime-local], .llms-form-field.error input[type=week], .llms-form-field.error input[type=month], .llms-form-field.error input[type=text], .llms-form-field.error input[type=email], .llms-form-field.error input[type=url], .llms-form-field.error input[type=password], .llms-form-field.error input[type=search], .llms-form-field.error input[type=tel], .llms-form-field.error input[type=number], .llms-form-field.error textarea, .llms-form-field.error select, .llms-form-field.invalid input[type=date], .llms-form-field.invalid input[type=time], .llms-form-field.invalid input[type=datetime-local], .llms-form-field.invalid input[type=week], .llms-form-field.invalid input[type=month], .llms-form-field.invalid input[type=text], .llms-form-field.invalid input[type=email], .llms-form-field.invalid input[type=url], .llms-form-field.invalid input[type=password], .llms-form-field.invalid input[type=search], .llms-form-field.invalid input[type=tel], .llms-form-field.invalid input[type=number], .llms-form-field.invalid textarea, .llms-form-field.invalid select {\n background: rgba(187, 35, 28, 0.3);\n border-color: #bb231c;\n}\n.llms-form-field.llms-visually-hidden-field {\n display: none;\n}\n.llms-form-field.align-right {\n text-align: right;\n}\n@media screen and (min-width: 600px) {\n .llms-form-field.llms-cols-1 {\n width: 8.3333333333%;\n }\n .llms-form-field.llms-cols-2 {\n width: 16.6666666667%;\n }\n .llms-form-field.llms-cols-3 {\n width: 25%;\n }\n .llms-form-field.llms-cols-4 {\n width: 33.3333333333%;\n }\n .llms-form-field.llms-cols-5 {\n width: 41.6666666667%;\n }\n .llms-form-field.llms-cols-6 {\n width: 50%;\n }\n .llms-form-field.llms-cols-7 {\n width: 58.3333333333%;\n }\n .llms-form-field.llms-cols-8 {\n width: 66.6666666667%;\n }\n .llms-form-field.llms-cols-9 {\n width: 75%;\n }\n .llms-form-field.llms-cols-10 {\n width: 83.3333333333%;\n }\n .llms-form-field.llms-cols-11 {\n width: 91.6666666667%;\n }\n .llms-form-field.llms-cols-12 {\n width: 100%;\n }\n}\n.llms-form-field.type-hidden {\n padding: 0;\n}\n.llms-form-field.type-radio input,\n.llms-form-field.type-radio label, .llms-form-field.type-checkbox input,\n.llms-form-field.type-checkbox label {\n display: inline-block;\n width: auto;\n}\n.llms-form-field.type-radio input, .llms-form-field.type-checkbox input {\n margin-right: 10px;\n}\n.llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {\n display: block;\n}\n.llms-form-field.type-radio:not(.is-group) input[type=radio] {\n position: absolute;\n opacity: 0;\n visibility: none;\n}\n.llms-form-field.type-radio:not(.is-group) label:before {\n background: #fafafa;\n background-position: -24px 0;\n background-repeat: no-repeat;\n border-radius: 50%;\n -webkit-box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;\n box-shadow: hsla(0deg, 0%, 100%, 0.15) 0 1px 1px, inset hsla(0deg, 0%, 0%, 0.35) 0 0 0 1px;\n content: \"\";\n cursor: pointer;\n display: inline-block;\n height: 22px;\n margin-right: 5px;\n position: relative;\n -webkit-transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);\n transition: background-position 0.15s cubic-bezier(0.8, 0, 1, 1);\n top: -3px;\n vertical-align: middle;\n width: 22px;\n z-index: 2;\n}\n.llms-form-field.type-radio:not(.is-group) input[type=radio]:checked + label:before {\n -webkit-transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);\n transition: background-position 0.2s 0.15s cubic-bezier(0, 0, 0.2, 1);\n background-position: 0 0;\n background-image: radial-gradient(ellipse at center, #466dd8 0%, #466dd8 40%, #fafafa 45%);\n}\n.llms-form-field .llms-input-group {\n margin-top: 5px;\n}\n.llms-form-field .llms-input-group .llms-form-field {\n padding: 0 0 5px 5px;\n}\n.llms-form-field.type-reset button:not(.auto), .llms-form-field.type-button button:not(.auto), .llms-form-field.type-submit button:not(.auto) {\n width: 100%;\n}\n.llms-form-field .llms-description {\n font-size: 14px;\n font-style: italic;\n line-height: 18px;\n}\n.llms-form-field .llms-required {\n color: #bb231c;\n margin-left: 4px;\n}\n.llms-form-field input, .llms-form-field textarea, .llms-form-field select {\n width: 100%;\n margin-bottom: 5px;\n}\n.llms-form-field .select2-container .select2-selection--single {\n height: auto;\n padding: 4px 6px;\n}\n.llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {\n height: 100%;\n}\n\n.llms-password-strength-meter {\n border: 1px solid #dadada;\n display: none;\n font-size: 10px;\n margin-top: -10px;\n padding: 1px;\n position: relative;\n text-align: center;\n}\n.llms-password-strength-meter:before {\n bottom: 0;\n content: \"\";\n left: 0;\n position: absolute;\n top: 0;\n -webkit-transition: width 0.4s ease;\n transition: width 0.4s ease;\n}\n.llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {\n border-color: #e35b5b;\n}\n.llms-password-strength-meter.mismatch:before, .llms-password-strength-meter.too-short:before, .llms-password-strength-meter.very-weak:before {\n background: rgba(227, 91, 91, 0.25);\n width: 25%;\n}\n.llms-password-strength-meter.too-short:before {\n width: 0;\n}\n.llms-password-strength-meter.weak {\n border-color: #f78b53;\n}\n.llms-password-strength-meter.weak:before {\n background: rgba(247, 139, 83, 0.25);\n width: 50%;\n}\n.llms-password-strength-meter.medium {\n border-color: #ffc733;\n}\n.llms-password-strength-meter.medium:before {\n background: rgba(255, 199, 51, 0.25);\n width: 75%;\n}\n.llms-password-strength-meter.strong {\n border-color: #83c373;\n}\n.llms-password-strength-meter.strong:before {\n background: rgba(131, 195, 115, 0.25);\n width: 100%;\n}\n.llms-password-strength-meter + .llms-description {\n display: block;\n}\n\n.llms-widget-syllabus--collapsible .llms-section .section-header {\n cursor: pointer;\n}\n.llms-widget-syllabus--collapsible .llms-section.llms-section--opened .llms-collapse-caret .fa-caret-right {\n display: none;\n}\n.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-collapse-caret .fa-caret-down {\n display: none;\n}\n.llms-widget-syllabus--collapsible .llms-section.llms-section--closed .llms-lesson {\n display: none;\n}\n.llms-widget-syllabus--collapsible .llms-syllabus-footer {\n text-align: left;\n}\n\n.llms-student-dashboard {\n /**\n * Dashboard Home\n */\n}\n.llms-student-dashboard .llms-sd-title {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n gap: 15px;\n margin: 40px 0 20px 0;\n}\n.llms-student-dashboard .llms-sd-title small {\n font-size: 18px;\n}\n.llms-student-dashboard .llms-sd-title small + a {\n text-decoration: none;\n}\n.llms-student-dashboard .llms-sd-items {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n.llms-student-dashboard .llms-sd-item {\n display: inline-block;\n list-style-type: none;\n margin: 5px 0;\n padding: 0;\n}\n.llms-student-dashboard .llms-sd-item:last-child .llms-sep {\n display: none;\n}\n.llms-student-dashboard .llms-sd-item .llms-sep {\n color: #666;\n margin: 0 5px;\n}\n.llms-student-dashboard .llms-sd-section h2 {\n margin: 0 0 15px 0;\n}\n.llms-student-dashboard .llms-sd-section .llms-sd-section-title {\n margin: 0;\n padding: 0;\n}\n.llms-student-dashboard .llms-sd-section .llms-sd-section-footer {\n margin-top: 10px;\n}\n.llms-student-dashboard .llms-sd-section .llms-sd-section-footer .llms-button-secondary {\n display: inline-block;\n}\n.llms-student-dashboard .orders-table {\n border: 1px solid #dedede;\n border-spacing: 0;\n width: 100%;\n}\n.llms-student-dashboard .orders-table thead {\n display: none;\n}\n.llms-student-dashboard .orders-table thead th, .llms-student-dashboard .orders-table thead td {\n font-weight: 700;\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .orders-table thead {\n display: table-header-group;\n }\n}\n.llms-student-dashboard .orders-table tbody tr:nth-child(odd) td, .llms-student-dashboard .orders-table tbody tr:nth-child(odd) th {\n background: #f9f9f9;\n}\n.llms-student-dashboard .orders-table tbody tr:last-child {\n border-bottom-width: 0;\n}\n.llms-student-dashboard .orders-table tfoot tr {\n background: #f9f9f9;\n}\n.llms-student-dashboard .orders-table tfoot th, .llms-student-dashboard .orders-table tfoot td {\n padding: 10px;\n text-align: right;\n}\n.llms-student-dashboard .orders-table tfoot th:last-child, .llms-student-dashboard .orders-table tfoot td:last-child {\n border-bottom-width: 0;\n}\n.llms-student-dashboard .orders-table th {\n font-weight: 700;\n}\n.llms-student-dashboard .orders-table th, .llms-student-dashboard .orders-table td {\n border-color: #dedede;\n border-style: solid;\n border-width: 0;\n display: block;\n padding: 15px 20px;\n text-align: center;\n}\n.llms-student-dashboard .orders-table th .llms-button-primary, .llms-student-dashboard .orders-table td .llms-button-primary {\n display: inline-block;\n}\n.llms-student-dashboard .orders-table th:last-child, .llms-student-dashboard .orders-table td:last-child {\n border-bottom-width: 1px;\n}\n.llms-student-dashboard .orders-table th:before, .llms-student-dashboard .orders-table td:before {\n content: attr(data-label);\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .orders-table th, .llms-student-dashboard .orders-table td {\n border-bottom-width: 1px;\n display: table-cell;\n text-align: left;\n }\n .llms-student-dashboard .orders-table th:first-child, .llms-student-dashboard .orders-table td:first-child {\n width: 220px;\n }\n .llms-student-dashboard .orders-table th:before, .llms-student-dashboard .orders-table td:before {\n display: none;\n }\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .orders-table.transactions th:first-child {\n width: auto;\n }\n}\n.llms-student-dashboard .llms-status {\n border-radius: 6px;\n display: inline-block;\n font-size: 13px;\n font-weight: 700;\n line-height: 1.4;\n padding: 2px 6px;\n vertical-align: middle;\n}\n.llms-student-dashboard .llms-status.llms-size--large {\n font-size: 105%;\n padding: 6px 12px;\n}\n.llms-student-dashboard .llms-status.llms-active, .llms-student-dashboard .llms-status.llms-completed, .llms-student-dashboard .llms-status.llms-pass, .llms-student-dashboard .llms-status.llms-txn-succeeded {\n color: #4d8d3c;\n background-color: rgba(77, 141, 60, 0.15);\n}\n.llms-student-dashboard .llms-status.llms-fail, .llms-student-dashboard .llms-status.llms-failed, .llms-student-dashboard .llms-status.llms-expired, .llms-student-dashboard .llms-status.llms-cancelled, .llms-student-dashboard .llms-status.llms-txn-failed {\n color: #bb231c;\n background-color: rgba(187, 35, 28, 0.15);\n}\n.llms-student-dashboard .llms-status.llms-incomplete, .llms-student-dashboard .llms-status.llms-on-hold, .llms-student-dashboard .llms-status.llms-pending, .llms-student-dashboard .llms-status.llms-pending-cancel, .llms-student-dashboard .llms-status.llms-refunded, .llms-student-dashboard .llms-status.llms-txn-pending, .llms-student-dashboard .llms-status.llms-txn-refunded {\n color: #c05621;\n background-color: rgba(192, 86, 33, 0.15);\n}\n.llms-student-dashboard .order-title .llms-status {\n font-size: 18px;\n}\n.llms-student-dashboard .llms-person-form-wrapper .llms-change-password {\n display: none;\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .order-primary {\n float: left;\n width: 68%;\n }\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .order-secondary {\n float: left;\n width: 32%;\n }\n}\n.llms-student-dashboard .order-secondary form {\n margin-bottom: 0;\n}\n@media all and (min-width: 600px) {\n .llms-student-dashboard .llms-view-order.llms-stack-cols .order-primary,\n.llms-student-dashboard .llms-view-order.llms-stack-cols .order-secondary {\n float: none;\n width: 100%;\n }\n}\n.llms-student-dashboard .llms-switch-payment-source .llms-notice,\n.llms-student-dashboard .llms-switch-payment-source .entry-content .llms-notice {\n margin-left: 10px;\n margin-right: 10px;\n}\n.llms-student-dashboard .llms-switch-payment-source-main {\n border: none;\n display: none;\n margin: 0;\n}\n.llms-student-dashboard .llms-switch-payment-source-main ul.llms-payment-gateways {\n padding: 10px 15px 0;\n margin: 0;\n}\n.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method,\n.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary {\n padding: 0 25px 10px;\n margin: 0;\n list-style-type: none;\n}\n.llms-student-dashboard .llms-switch-payment-source-main .llms-payment-method li,\n.llms-student-dashboard .llms-switch-payment-source-main ul.llms-order-summary li {\n list-style-type: none;\n}\n.llms-student-dashboard.dashboard .llms-sd-section {\n border: 1px solid #dedede;\n border-radius: 6px;\n padding: 20px;\n margin-bottom: 40px;\n}\n.llms-student-dashboard .llms-loop-list {\n margin: 0 -10px;\n}\n\n.llms-sd-grades .llms-table .llms-progress {\n display: block;\n margin: 0;\n}\n.llms-sd-grades .llms-table .llms-progress .llms-progress-bar {\n top: 0;\n height: 1.4em;\n}\n.llms-sd-grades .llms-table .llms-progress .progress__indicator {\n font-size: 1em;\n position: relative;\n right: 0.4em;\n top: 0.2em;\n z-index: 1;\n}\n\n.llms-table.llms-single-course-grades tbody tr:first-child td, .llms-table.llms-single-course-grades tbody tr:first-child th {\n background-color: #eaeaea;\n}\n.llms-table.llms-single-course-grades th {\n font-weight: 400;\n text-align: left;\n}\n.llms-table.llms-single-course-grades td .llms-donut {\n display: inline-block;\n vertical-align: middle;\n}\n.llms-table.llms-single-course-grades td .llms-status {\n margin-right: 4px;\n}\n.llms-table.llms-single-course-grades td .llms-donut + .llms-status {\n margin-left: 4px;\n}\n.llms-table.llms-single-course-grades th.llms-section_title {\n font-size: 110%;\n font-weight: 700;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title {\n max-width: 40%;\n}\n.llms-table.llms-single-course-grades td.llms-associated_quiz .llms-donut {\n display: inline-block;\n margin-right: 5px;\n vertical-align: middle;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title a[href=\"#\"] {\n pointer-events: none;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title a[href^=\"#\"] {\n color: inherit;\n position: relative;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title a[href^=\"#\"] .llms-tooltip {\n max-width: 380px;\n width: 380px;\n}\n.llms-table.llms-single-course-grades td.llms-lesson_title a[href^=\"#\"] .llms-tooltip.show {\n top: -54px;\n}\n\n.llms-sd-widgets {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.llms-sd-widgets .llms-sd-widget {\n background: #fefefe;\n border: 1px solid #dedede;\n border-bottom-right-radius: 6px;\n border-bottom-left-radius: 6px;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n margin: 10px 10px 20px;\n padding: 0 0 20px;\n}\n.llms-sd-widgets .llms-sd-widget:first-child {\n margin-left: 0;\n}\n.llms-sd-widgets .llms-sd-widget:last-child {\n margin-right: 0;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-widget-title {\n background: #466dd8;\n color: #fff;\n font-size: 18px;\n line-height: 1;\n margin: 0 0 20px;\n padding: 10px;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-widget-empty {\n font-size: 14px;\n font-style: italic;\n opacity: 0.5;\n text-align: center;\n}\n.llms-sd-widgets .llms-sd-widget .llms-donut {\n margin: 0 auto;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-date {\n opacity: 0.8;\n text-align: center;\n font-size: 22px;\n line-height: 1.1;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-date span {\n display: block;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-date span.day {\n font-size: 52px;\n}\n.llms-sd-widgets .llms-sd-widget .llms-sd-date span.diff {\n font-size: 12px;\n font-style: italic;\n margin-top: 8px;\n opacity: 0.75;\n}\n.llms-sd-widgets .llms-sd-widget .llms-achievement {\n background: transparent;\n margin: 0 auto;\n max-width: 120px;\n}\n.llms-sd-widgets .llms-sd-widget .llms-achievement .llms-achievement-title {\n display: none;\n}\n\n.redeem-voucher .form-row label {\n display: block;\n font-weight: 700;\n}\n.redeem-voucher .form-row input[type=text] {\n background-color: #fefefe;\n background-clip: padding-box;\n border: 1px solid #999;\n border-radius: 6px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n font-size: 16px;\n line-height: 1;\n padding: 8px 12px;\n -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n}\n\n.llms-sd-pagination {\n margin-top: 24px;\n}\n.llms-sd-pagination:before, .llms-sd-pagination:after {\n content: \" \";\n display: table;\n}\n.llms-sd-pagination:after {\n clear: both;\n}\n.llms-sd-pagination .llms-button-secondary {\n display: inline-block;\n}\n.llms-sd-pagination .llms-button-secondary.prev {\n float: left;\n}\n.llms-sd-pagination .llms-button-secondary.next {\n float: right;\n}\n\n.llms-sd-notification-center {\n background: #fefefe;\n border: 1px solid #dedede;\n border-radius: 6px;\n padding: 20px;\n}\n.llms-sd-notification-center .llms-notification-list-item .llms-notification {\n z-index: 1;\n}\n.llms-sd-notification-center .llms-notification-list-item .llms-notification:hover {\n background-color: inherit;\n}\n\n.llms-table {\n border: 1px solid #dedede;\n border-spacing: 0;\n width: 100%;\n}\n.llms-table thead th, .llms-table thead td {\n font-weight: 700;\n}\n.llms-table tbody tr:nth-child(odd) td, .llms-table tbody tr:nth-child(odd) th {\n background: #f9f9f9;\n}\n.llms-table tbody tr:last-child {\n border-bottom-width: 0;\n}\n.llms-table tfoot tr {\n background: #f9f9f9;\n}\n.llms-table tfoot tr .llms-pagination .page-numbers {\n margin: 0;\n}\n.llms-table tfoot tr .llms-table-sort {\n text-align: right;\n}\n.llms-table tfoot tr .llms-table-sort form, .llms-table tfoot tr .llms-table-sort select, .llms-table tfoot tr .llms-table-sort input, .llms-table tfoot tr .llms-table-sort button {\n margin: 0;\n}\n.llms-table th {\n font-weight: 700;\n}\n.llms-table th, .llms-table td {\n border-bottom: 1px solid #dedede;\n padding: 15px 20px;\n}\n.llms-table th:first-child, .llms-table td:first-child {\n padding-left: 12px;\n}\n.llms-table th:last-child, .llms-table td:last-child {\n padding-right: 12px;\n}\n\n#page .llms-table tfoot label {\n display: inline;\n}\n\n#page .llms-table tfoot select {\n height: auto;\n}\n\n/*!\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n font-family: \"FontAwesome\";\n src: url(\"../fonts/fontawesome-webfont.eot?v=4.7.0\");\n src: url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0\") format(\"embedded-opentype\"), url(\"../fonts/fontawesome-webfont.woff2?v=4.7.0\") format(\"woff2\"), url(\"../fonts/fontawesome-webfont.woff?v=4.7.0\") format(\"woff\"), url(\"../fonts/fontawesome-webfont.ttf?v=4.7.0\") format(\"truetype\"), url(\"../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n.fa {\n display: inline-block;\n font: normal normal normal 14px/1 FontAwesome;\n font-size: inherit;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n font-size: 1.33333333em;\n line-height: 0.75em;\n vertical-align: -15%;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-fw {\n width: 1.28571429em;\n text-align: center;\n}\n\n.fa-ul {\n padding-left: 0;\n margin-left: 2.14285714em;\n list-style-type: none;\n}\n\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n position: absolute;\n left: -2.14285714em;\n width: 2.14285714em;\n top: 0.14285714em;\n text-align: center;\n}\n\n.fa-li.fa-lg {\n left: -1.85714286em;\n}\n\n.fa-border {\n padding: 0.2em 0.25em 0.15em;\n border: solid 0.08em #eeeeee;\n border-radius: 0.1em;\n}\n\n.fa-pull-left {\n float: left;\n}\n\n.fa-pull-right {\n float: right;\n}\n\n.fa.fa-pull-left {\n margin-right: 0.3em;\n}\n\n.fa.fa-pull-right {\n margin-left: 0.3em;\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right {\n float: right;\n}\n\n.pull-left {\n float: left;\n}\n\n.fa.pull-left {\n margin-right: 0.3em;\n}\n\n.fa.pull-right {\n margin-left: 0.3em;\n}\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n -webkit-filter: none;\n filter: none;\n}\n\n.fa-stack {\n position: relative;\n display: inline-block;\n width: 2em;\n height: 2em;\n line-height: 2em;\n vertical-align: middle;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n position: absolute;\n left: 0;\n width: 100%;\n text-align: center;\n}\n\n.fa-stack-1x {\n line-height: inherit;\n}\n\n.fa-stack-2x {\n font-size: 2em;\n}\n\n.fa-inverse {\n color: #ffffff;\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n readers do not read off random characters that represent icons */\n.fa-glass:before {\n content: \"\\f000\";\n}\n\n.fa-music:before {\n content: \"\\f001\";\n}\n\n.fa-search:before {\n content: \"\\f002\";\n}\n\n.fa-envelope-o:before {\n content: \"\\f003\";\n}\n\n.fa-heart:before {\n content: \"\\f004\";\n}\n\n.fa-star:before {\n content: \"\\f005\";\n}\n\n.fa-star-o:before {\n content: \"\\f006\";\n}\n\n.fa-user:before {\n content: \"\\f007\";\n}\n\n.fa-film:before {\n content: \"\\f008\";\n}\n\n.fa-th-large:before {\n content: \"\\f009\";\n}\n\n.fa-th:before {\n content: \"\\f00a\";\n}\n\n.fa-th-list:before {\n content: \"\\f00b\";\n}\n\n.fa-check:before {\n content: \"\\f00c\";\n}\n\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n content: \"\\f00d\";\n}\n\n.fa-search-plus:before {\n content: \"\\f00e\";\n}\n\n.fa-search-minus:before {\n content: \"\\f010\";\n}\n\n.fa-power-off:before {\n content: \"\\f011\";\n}\n\n.fa-signal:before {\n content: \"\\f012\";\n}\n\n.fa-gear:before,\n.fa-cog:before {\n content: \"\\f013\";\n}\n\n.fa-trash-o:before {\n content: \"\\f014\";\n}\n\n.fa-home:before {\n content: \"\\f015\";\n}\n\n.fa-file-o:before {\n content: \"\\f016\";\n}\n\n.fa-clock-o:before {\n content: \"\\f017\";\n}\n\n.fa-road:before {\n content: \"\\f018\";\n}\n\n.fa-download:before {\n content: \"\\f019\";\n}\n\n.fa-arrow-circle-o-down:before {\n content: \"\\f01a\";\n}\n\n.fa-arrow-circle-o-up:before {\n content: \"\\f01b\";\n}\n\n.fa-inbox:before {\n content: \"\\f01c\";\n}\n\n.fa-play-circle-o:before {\n content: \"\\f01d\";\n}\n\n.fa-rotate-right:before,\n.fa-repeat:before {\n content: \"\\f01e\";\n}\n\n.fa-refresh:before {\n content: \"\\f021\";\n}\n\n.fa-list-alt:before {\n content: \"\\f022\";\n}\n\n.fa-lock:before {\n content: \"\\f023\";\n}\n\n.fa-flag:before {\n content: \"\\f024\";\n}\n\n.fa-headphones:before {\n content: \"\\f025\";\n}\n\n.fa-volume-off:before {\n content: \"\\f026\";\n}\n\n.fa-volume-down:before {\n content: \"\\f027\";\n}\n\n.fa-volume-up:before {\n content: \"\\f028\";\n}\n\n.fa-qrcode:before {\n content: \"\\f029\";\n}\n\n.fa-barcode:before {\n content: \"\\f02a\";\n}\n\n.fa-tag:before {\n content: \"\\f02b\";\n}\n\n.fa-tags:before {\n content: \"\\f02c\";\n}\n\n.fa-book:before {\n content: \"\\f02d\";\n}\n\n.fa-bookmark:before {\n content: \"\\f02e\";\n}\n\n.fa-print:before {\n content: \"\\f02f\";\n}\n\n.fa-camera:before {\n content: \"\\f030\";\n}\n\n.fa-font:before {\n content: \"\\f031\";\n}\n\n.fa-bold:before {\n content: \"\\f032\";\n}\n\n.fa-italic:before {\n content: \"\\f033\";\n}\n\n.fa-text-height:before {\n content: \"\\f034\";\n}\n\n.fa-text-width:before {\n content: \"\\f035\";\n}\n\n.fa-align-left:before {\n content: \"\\f036\";\n}\n\n.fa-align-center:before {\n content: \"\\f037\";\n}\n\n.fa-align-right:before {\n content: \"\\f038\";\n}\n\n.fa-align-justify:before {\n content: \"\\f039\";\n}\n\n.fa-list:before {\n content: \"\\f03a\";\n}\n\n.fa-dedent:before,\n.fa-outdent:before {\n content: \"\\f03b\";\n}\n\n.fa-indent:before {\n content: \"\\f03c\";\n}\n\n.fa-video-camera:before {\n content: \"\\f03d\";\n}\n\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n content: \"\\f03e\";\n}\n\n.fa-pencil:before {\n content: \"\\f040\";\n}\n\n.fa-map-marker:before {\n content: \"\\f041\";\n}\n\n.fa-adjust:before {\n content: \"\\f042\";\n}\n\n.fa-tint:before {\n content: \"\\f043\";\n}\n\n.fa-edit:before,\n.fa-pencil-square-o:before {\n content: \"\\f044\";\n}\n\n.fa-share-square-o:before {\n content: \"\\f045\";\n}\n\n.fa-check-square-o:before {\n content: \"\\f046\";\n}\n\n.fa-arrows:before {\n content: \"\\f047\";\n}\n\n.fa-step-backward:before {\n content: \"\\f048\";\n}\n\n.fa-fast-backward:before {\n content: \"\\f049\";\n}\n\n.fa-backward:before {\n content: \"\\f04a\";\n}\n\n.fa-play:before {\n content: \"\\f04b\";\n}\n\n.fa-pause:before {\n content: \"\\f04c\";\n}\n\n.fa-stop:before {\n content: \"\\f04d\";\n}\n\n.fa-forward:before {\n content: \"\\f04e\";\n}\n\n.fa-fast-forward:before {\n content: \"\\f050\";\n}\n\n.fa-step-forward:before {\n content: \"\\f051\";\n}\n\n.fa-eject:before {\n content: \"\\f052\";\n}\n\n.fa-chevron-left:before {\n content: \"\\f053\";\n}\n\n.fa-chevron-right:before {\n content: \"\\f054\";\n}\n\n.fa-plus-circle:before {\n content: \"\\f055\";\n}\n\n.fa-minus-circle:before {\n content: \"\\f056\";\n}\n\n.fa-times-circle:before {\n content: \"\\f057\";\n}\n\n.fa-check-circle:before {\n content: \"\\f058\";\n}\n\n.fa-question-circle:before {\n content: \"\\f059\";\n}\n\n.fa-info-circle:before {\n content: \"\\f05a\";\n}\n\n.fa-crosshairs:before {\n content: \"\\f05b\";\n}\n\n.fa-times-circle-o:before {\n content: \"\\f05c\";\n}\n\n.fa-check-circle-o:before {\n content: \"\\f05d\";\n}\n\n.fa-ban:before {\n content: \"\\f05e\";\n}\n\n.fa-arrow-left:before {\n content: \"\\f060\";\n}\n\n.fa-arrow-right:before {\n content: \"\\f061\";\n}\n\n.fa-arrow-up:before {\n content: \"\\f062\";\n}\n\n.fa-arrow-down:before {\n content: \"\\f063\";\n}\n\n.fa-mail-forward:before,\n.fa-share:before {\n content: \"\\f064\";\n}\n\n.fa-expand:before {\n content: \"\\f065\";\n}\n\n.fa-compress:before {\n content: \"\\f066\";\n}\n\n.fa-plus:before {\n content: \"\\f067\";\n}\n\n.fa-minus:before {\n content: \"\\f068\";\n}\n\n.fa-asterisk:before {\n content: \"\\f069\";\n}\n\n.fa-exclamation-circle:before {\n content: \"\\f06a\";\n}\n\n.fa-gift:before {\n content: \"\\f06b\";\n}\n\n.fa-leaf:before {\n content: \"\\f06c\";\n}\n\n.fa-fire:before {\n content: \"\\f06d\";\n}\n\n.fa-eye:before {\n content: \"\\f06e\";\n}\n\n.fa-eye-slash:before {\n content: \"\\f070\";\n}\n\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n content: \"\\f071\";\n}\n\n.fa-plane:before {\n content: \"\\f072\";\n}\n\n.fa-calendar:before {\n content: \"\\f073\";\n}\n\n.fa-random:before {\n content: \"\\f074\";\n}\n\n.fa-comment:before {\n content: \"\\f075\";\n}\n\n.fa-magnet:before {\n content: \"\\f076\";\n}\n\n.fa-chevron-up:before {\n content: \"\\f077\";\n}\n\n.fa-chevron-down:before {\n content: \"\\f078\";\n}\n\n.fa-retweet:before {\n content: \"\\f079\";\n}\n\n.fa-shopping-cart:before {\n content: \"\\f07a\";\n}\n\n.fa-folder:before {\n content: \"\\f07b\";\n}\n\n.fa-folder-open:before {\n content: \"\\f07c\";\n}\n\n.fa-arrows-v:before {\n content: \"\\f07d\";\n}\n\n.fa-arrows-h:before {\n content: \"\\f07e\";\n}\n\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n content: \"\\f080\";\n}\n\n.fa-twitter-square:before {\n content: \"\\f081\";\n}\n\n.fa-facebook-square:before {\n content: \"\\f082\";\n}\n\n.fa-camera-retro:before {\n content: \"\\f083\";\n}\n\n.fa-key:before {\n content: \"\\f084\";\n}\n\n.fa-gears:before,\n.fa-cogs:before {\n content: \"\\f085\";\n}\n\n.fa-comments:before {\n content: \"\\f086\";\n}\n\n.fa-thumbs-o-up:before {\n content: \"\\f087\";\n}\n\n.fa-thumbs-o-down:before {\n content: \"\\f088\";\n}\n\n.fa-star-half:before {\n content: \"\\f089\";\n}\n\n.fa-heart-o:before {\n content: \"\\f08a\";\n}\n\n.fa-sign-out:before {\n content: \"\\f08b\";\n}\n\n.fa-linkedin-square:before {\n content: \"\\f08c\";\n}\n\n.fa-thumb-tack:before {\n content: \"\\f08d\";\n}\n\n.fa-external-link:before {\n content: \"\\f08e\";\n}\n\n.fa-sign-in:before {\n content: \"\\f090\";\n}\n\n.fa-trophy:before {\n content: \"\\f091\";\n}\n\n.fa-github-square:before {\n content: \"\\f092\";\n}\n\n.fa-upload:before {\n content: \"\\f093\";\n}\n\n.fa-lemon-o:before {\n content: \"\\f094\";\n}\n\n.fa-phone:before {\n content: \"\\f095\";\n}\n\n.fa-square-o:before {\n content: \"\\f096\";\n}\n\n.fa-bookmark-o:before {\n content: \"\\f097\";\n}\n\n.fa-phone-square:before {\n content: \"\\f098\";\n}\n\n.fa-twitter:before {\n content: \"\\f099\";\n}\n\n.fa-facebook-f:before,\n.fa-facebook:before {\n content: \"\\f09a\";\n}\n\n.fa-github:before {\n content: \"\\f09b\";\n}\n\n.fa-unlock:before {\n content: \"\\f09c\";\n}\n\n.fa-credit-card:before {\n content: \"\\f09d\";\n}\n\n.fa-feed:before,\n.fa-rss:before {\n content: \"\\f09e\";\n}\n\n.fa-hdd-o:before {\n content: \"\\f0a0\";\n}\n\n.fa-bullhorn:before {\n content: \"\\f0a1\";\n}\n\n.fa-bell:before {\n content: \"\\f0f3\";\n}\n\n.fa-certificate:before {\n content: \"\\f0a3\";\n}\n\n.fa-hand-o-right:before {\n content: \"\\f0a4\";\n}\n\n.fa-hand-o-left:before {\n content: \"\\f0a5\";\n}\n\n.fa-hand-o-up:before {\n content: \"\\f0a6\";\n}\n\n.fa-hand-o-down:before {\n content: \"\\f0a7\";\n}\n\n.fa-arrow-circle-left:before {\n content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-right:before {\n content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-up:before {\n content: \"\\f0aa\";\n}\n\n.fa-arrow-circle-down:before {\n content: \"\\f0ab\";\n}\n\n.fa-globe:before {\n content: \"\\f0ac\";\n}\n\n.fa-wrench:before {\n content: \"\\f0ad\";\n}\n\n.fa-tasks:before {\n content: \"\\f0ae\";\n}\n\n.fa-filter:before {\n content: \"\\f0b0\";\n}\n\n.fa-briefcase:before {\n content: \"\\f0b1\";\n}\n\n.fa-arrows-alt:before {\n content: \"\\f0b2\";\n}\n\n.fa-group:before,\n.fa-users:before {\n content: \"\\f0c0\";\n}\n\n.fa-chain:before,\n.fa-link:before {\n content: \"\\f0c1\";\n}\n\n.fa-cloud:before {\n content: \"\\f0c2\";\n}\n\n.fa-flask:before {\n content: \"\\f0c3\";\n}\n\n.fa-cut:before,\n.fa-scissors:before {\n content: \"\\f0c4\";\n}\n\n.fa-copy:before,\n.fa-files-o:before {\n content: \"\\f0c5\";\n}\n\n.fa-paperclip:before {\n content: \"\\f0c6\";\n}\n\n.fa-save:before,\n.fa-floppy-o:before {\n content: \"\\f0c7\";\n}\n\n.fa-square:before {\n content: \"\\f0c8\";\n}\n\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n content: \"\\f0c9\";\n}\n\n.fa-list-ul:before {\n content: \"\\f0ca\";\n}\n\n.fa-list-ol:before {\n content: \"\\f0cb\";\n}\n\n.fa-strikethrough:before {\n content: \"\\f0cc\";\n}\n\n.fa-underline:before {\n content: \"\\f0cd\";\n}\n\n.fa-table:before {\n content: \"\\f0ce\";\n}\n\n.fa-magic:before {\n content: \"\\f0d0\";\n}\n\n.fa-truck:before {\n content: \"\\f0d1\";\n}\n\n.fa-pinterest:before {\n content: \"\\f0d2\";\n}\n\n.fa-pinterest-square:before {\n content: \"\\f0d3\";\n}\n\n.fa-google-plus-square:before {\n content: \"\\f0d4\";\n}\n\n.fa-google-plus:before {\n content: \"\\f0d5\";\n}\n\n.fa-money:before {\n content: \"\\f0d6\";\n}\n\n.fa-caret-down:before {\n content: \"\\f0d7\";\n}\n\n.fa-caret-up:before {\n content: \"\\f0d8\";\n}\n\n.fa-caret-left:before {\n content: \"\\f0d9\";\n}\n\n.fa-caret-right:before {\n content: \"\\f0da\";\n}\n\n.fa-columns:before {\n content: \"\\f0db\";\n}\n\n.fa-unsorted:before,\n.fa-sort:before {\n content: \"\\f0dc\";\n}\n\n.fa-sort-down:before,\n.fa-sort-desc:before {\n content: \"\\f0dd\";\n}\n\n.fa-sort-up:before,\n.fa-sort-asc:before {\n content: \"\\f0de\";\n}\n\n.fa-envelope:before {\n content: \"\\f0e0\";\n}\n\n.fa-linkedin:before {\n content: \"\\f0e1\";\n}\n\n.fa-rotate-left:before,\n.fa-undo:before {\n content: \"\\f0e2\";\n}\n\n.fa-legal:before,\n.fa-gavel:before {\n content: \"\\f0e3\";\n}\n\n.fa-dashboard:before,\n.fa-tachometer:before {\n content: \"\\f0e4\";\n}\n\n.fa-comment-o:before {\n content: \"\\f0e5\";\n}\n\n.fa-comments-o:before {\n content: \"\\f0e6\";\n}\n\n.fa-flash:before,\n.fa-bolt:before {\n content: \"\\f0e7\";\n}\n\n.fa-sitemap:before {\n content: \"\\f0e8\";\n}\n\n.fa-umbrella:before {\n content: \"\\f0e9\";\n}\n\n.fa-paste:before,\n.fa-clipboard:before {\n content: \"\\f0ea\";\n}\n\n.fa-lightbulb-o:before {\n content: \"\\f0eb\";\n}\n\n.fa-exchange:before {\n content: \"\\f0ec\";\n}\n\n.fa-cloud-download:before {\n content: \"\\f0ed\";\n}\n\n.fa-cloud-upload:before {\n content: \"\\f0ee\";\n}\n\n.fa-user-md:before {\n content: \"\\f0f0\";\n}\n\n.fa-stethoscope:before {\n content: \"\\f0f1\";\n}\n\n.fa-suitcase:before {\n content: \"\\f0f2\";\n}\n\n.fa-bell-o:before {\n content: \"\\f0a2\";\n}\n\n.fa-coffee:before {\n content: \"\\f0f4\";\n}\n\n.fa-cutlery:before {\n content: \"\\f0f5\";\n}\n\n.fa-file-text-o:before {\n content: \"\\f0f6\";\n}\n\n.fa-building-o:before {\n content: \"\\f0f7\";\n}\n\n.fa-hospital-o:before {\n content: \"\\f0f8\";\n}\n\n.fa-ambulance:before {\n content: \"\\f0f9\";\n}\n\n.fa-medkit:before {\n content: \"\\f0fa\";\n}\n\n.fa-fighter-jet:before {\n content: \"\\f0fb\";\n}\n\n.fa-beer:before {\n content: \"\\f0fc\";\n}\n\n.fa-h-square:before {\n content: \"\\f0fd\";\n}\n\n.fa-plus-square:before {\n content: \"\\f0fe\";\n}\n\n.fa-angle-double-left:before {\n content: \"\\f100\";\n}\n\n.fa-angle-double-right:before {\n content: \"\\f101\";\n}\n\n.fa-angle-double-up:before {\n content: \"\\f102\";\n}\n\n.fa-angle-double-down:before {\n content: \"\\f103\";\n}\n\n.fa-angle-left:before {\n content: \"\\f104\";\n}\n\n.fa-angle-right:before {\n content: \"\\f105\";\n}\n\n.fa-angle-up:before {\n content: \"\\f106\";\n}\n\n.fa-angle-down:before {\n content: \"\\f107\";\n}\n\n.fa-desktop:before {\n content: \"\\f108\";\n}\n\n.fa-laptop:before {\n content: \"\\f109\";\n}\n\n.fa-tablet:before {\n content: \"\\f10a\";\n}\n\n.fa-mobile-phone:before,\n.fa-mobile:before {\n content: \"\\f10b\";\n}\n\n.fa-circle-o:before {\n content: \"\\f10c\";\n}\n\n.fa-quote-left:before {\n content: \"\\f10d\";\n}\n\n.fa-quote-right:before {\n content: \"\\f10e\";\n}\n\n.fa-spinner:before {\n content: \"\\f110\";\n}\n\n.fa-circle:before {\n content: \"\\f111\";\n}\n\n.fa-mail-reply:before,\n.fa-reply:before {\n content: \"\\f112\";\n}\n\n.fa-github-alt:before {\n content: \"\\f113\";\n}\n\n.fa-folder-o:before {\n content: \"\\f114\";\n}\n\n.fa-folder-open-o:before {\n content: \"\\f115\";\n}\n\n.fa-smile-o:before {\n content: \"\\f118\";\n}\n\n.fa-frown-o:before {\n content: \"\\f119\";\n}\n\n.fa-meh-o:before {\n content: \"\\f11a\";\n}\n\n.fa-gamepad:before {\n content: \"\\f11b\";\n}\n\n.fa-keyboard-o:before {\n content: \"\\f11c\";\n}\n\n.fa-flag-o:before {\n content: \"\\f11d\";\n}\n\n.fa-flag-checkered:before {\n content: \"\\f11e\";\n}\n\n.fa-terminal:before {\n content: \"\\f120\";\n}\n\n.fa-code:before {\n content: \"\\f121\";\n}\n\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n content: \"\\f122\";\n}\n\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n content: \"\\f123\";\n}\n\n.fa-location-arrow:before {\n content: \"\\f124\";\n}\n\n.fa-crop:before {\n content: \"\\f125\";\n}\n\n.fa-code-fork:before {\n content: \"\\f126\";\n}\n\n.fa-unlink:before,\n.fa-chain-broken:before {\n content: \"\\f127\";\n}\n\n.fa-question:before {\n content: \"\\f128\";\n}\n\n.fa-info:before {\n content: \"\\f129\";\n}\n\n.fa-exclamation:before {\n content: \"\\f12a\";\n}\n\n.fa-superscript:before {\n content: \"\\f12b\";\n}\n\n.fa-subscript:before {\n content: \"\\f12c\";\n}\n\n.fa-eraser:before {\n content: \"\\f12d\";\n}\n\n.fa-puzzle-piece:before {\n content: \"\\f12e\";\n}\n\n.fa-microphone:before {\n content: \"\\f130\";\n}\n\n.fa-microphone-slash:before {\n content: \"\\f131\";\n}\n\n.fa-shield:before {\n content: \"\\f132\";\n}\n\n.fa-calendar-o:before {\n content: \"\\f133\";\n}\n\n.fa-fire-extinguisher:before {\n content: \"\\f134\";\n}\n\n.fa-rocket:before {\n content: \"\\f135\";\n}\n\n.fa-maxcdn:before {\n content: \"\\f136\";\n}\n\n.fa-chevron-circle-left:before {\n content: \"\\f137\";\n}\n\n.fa-chevron-circle-right:before {\n content: \"\\f138\";\n}\n\n.fa-chevron-circle-up:before {\n content: \"\\f139\";\n}\n\n.fa-chevron-circle-down:before {\n content: \"\\f13a\";\n}\n\n.fa-html5:before {\n content: \"\\f13b\";\n}\n\n.fa-css3:before {\n content: \"\\f13c\";\n}\n\n.fa-anchor:before {\n content: \"\\f13d\";\n}\n\n.fa-unlock-alt:before {\n content: \"\\f13e\";\n}\n\n.fa-bullseye:before {\n content: \"\\f140\";\n}\n\n.fa-ellipsis-h:before {\n content: \"\\f141\";\n}\n\n.fa-ellipsis-v:before {\n content: \"\\f142\";\n}\n\n.fa-rss-square:before {\n content: \"\\f143\";\n}\n\n.fa-play-circle:before {\n content: \"\\f144\";\n}\n\n.fa-ticket:before {\n content: \"\\f145\";\n}\n\n.fa-minus-square:before {\n content: \"\\f146\";\n}\n\n.fa-minus-square-o:before {\n content: \"\\f147\";\n}\n\n.fa-level-up:before {\n content: \"\\f148\";\n}\n\n.fa-level-down:before {\n content: \"\\f149\";\n}\n\n.fa-check-square:before {\n content: \"\\f14a\";\n}\n\n.fa-pencil-square:before {\n content: \"\\f14b\";\n}\n\n.fa-external-link-square:before {\n content: \"\\f14c\";\n}\n\n.fa-share-square:before {\n content: \"\\f14d\";\n}\n\n.fa-compass:before {\n content: \"\\f14e\";\n}\n\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n content: \"\\f150\";\n}\n\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n content: \"\\f151\";\n}\n\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n content: \"\\f152\";\n}\n\n.fa-euro:before,\n.fa-eur:before {\n content: \"\\f153\";\n}\n\n.fa-gbp:before {\n content: \"\\f154\";\n}\n\n.fa-dollar:before,\n.fa-usd:before {\n content: \"\\f155\";\n}\n\n.fa-rupee:before,\n.fa-inr:before {\n content: \"\\f156\";\n}\n\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n content: \"\\f157\";\n}\n\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n content: \"\\f158\";\n}\n\n.fa-won:before,\n.fa-krw:before {\n content: \"\\f159\";\n}\n\n.fa-bitcoin:before,\n.fa-btc:before {\n content: \"\\f15a\";\n}\n\n.fa-file:before {\n content: \"\\f15b\";\n}\n\n.fa-file-text:before {\n content: \"\\f15c\";\n}\n\n.fa-sort-alpha-asc:before {\n content: \"\\f15d\";\n}\n\n.fa-sort-alpha-desc:before {\n content: \"\\f15e\";\n}\n\n.fa-sort-amount-asc:before {\n content: \"\\f160\";\n}\n\n.fa-sort-amount-desc:before {\n content: \"\\f161\";\n}\n\n.fa-sort-numeric-asc:before {\n content: \"\\f162\";\n}\n\n.fa-sort-numeric-desc:before {\n content: \"\\f163\";\n}\n\n.fa-thumbs-up:before {\n content: \"\\f164\";\n}\n\n.fa-thumbs-down:before {\n content: \"\\f165\";\n}\n\n.fa-youtube-square:before {\n content: \"\\f166\";\n}\n\n.fa-youtube:before {\n content: \"\\f167\";\n}\n\n.fa-xing:before {\n content: \"\\f168\";\n}\n\n.fa-xing-square:before {\n content: \"\\f169\";\n}\n\n.fa-youtube-play:before {\n content: \"\\f16a\";\n}\n\n.fa-dropbox:before {\n content: \"\\f16b\";\n}\n\n.fa-stack-overflow:before {\n content: \"\\f16c\";\n}\n\n.fa-instagram:before {\n content: \"\\f16d\";\n}\n\n.fa-flickr:before {\n content: \"\\f16e\";\n}\n\n.fa-adn:before {\n content: \"\\f170\";\n}\n\n.fa-bitbucket:before {\n content: \"\\f171\";\n}\n\n.fa-bitbucket-square:before {\n content: \"\\f172\";\n}\n\n.fa-tumblr:before {\n content: \"\\f173\";\n}\n\n.fa-tumblr-square:before {\n content: \"\\f174\";\n}\n\n.fa-long-arrow-down:before {\n content: \"\\f175\";\n}\n\n.fa-long-arrow-up:before {\n content: \"\\f176\";\n}\n\n.fa-long-arrow-left:before {\n content: \"\\f177\";\n}\n\n.fa-long-arrow-right:before {\n content: \"\\f178\";\n}\n\n.fa-apple:before {\n content: \"\\f179\";\n}\n\n.fa-windows:before {\n content: \"\\f17a\";\n}\n\n.fa-android:before {\n content: \"\\f17b\";\n}\n\n.fa-linux:before {\n content: \"\\f17c\";\n}\n\n.fa-dribbble:before {\n content: \"\\f17d\";\n}\n\n.fa-skype:before {\n content: \"\\f17e\";\n}\n\n.fa-foursquare:before {\n content: \"\\f180\";\n}\n\n.fa-trello:before {\n content: \"\\f181\";\n}\n\n.fa-female:before {\n content: \"\\f182\";\n}\n\n.fa-male:before {\n content: \"\\f183\";\n}\n\n.fa-gittip:before,\n.fa-gratipay:before {\n content: \"\\f184\";\n}\n\n.fa-sun-o:before {\n content: \"\\f185\";\n}\n\n.fa-moon-o:before {\n content: \"\\f186\";\n}\n\n.fa-archive:before {\n content: \"\\f187\";\n}\n\n.fa-bug:before {\n content: \"\\f188\";\n}\n\n.fa-vk:before {\n content: \"\\f189\";\n}\n\n.fa-weibo:before {\n content: \"\\f18a\";\n}\n\n.fa-renren:before {\n content: \"\\f18b\";\n}\n\n.fa-pagelines:before {\n content: \"\\f18c\";\n}\n\n.fa-stack-exchange:before {\n content: \"\\f18d\";\n}\n\n.fa-arrow-circle-o-right:before {\n content: \"\\f18e\";\n}\n\n.fa-arrow-circle-o-left:before {\n content: \"\\f190\";\n}\n\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n content: \"\\f191\";\n}\n\n.fa-dot-circle-o:before {\n content: \"\\f192\";\n}\n\n.fa-wheelchair:before {\n content: \"\\f193\";\n}\n\n.fa-vimeo-square:before {\n content: \"\\f194\";\n}\n\n.fa-turkish-lira:before,\n.fa-try:before {\n content: \"\\f195\";\n}\n\n.fa-plus-square-o:before {\n content: \"\\f196\";\n}\n\n.fa-space-shuttle:before {\n content: \"\\f197\";\n}\n\n.fa-slack:before {\n content: \"\\f198\";\n}\n\n.fa-envelope-square:before {\n content: \"\\f199\";\n}\n\n.fa-wordpress:before {\n content: \"\\f19a\";\n}\n\n.fa-openid:before {\n content: \"\\f19b\";\n}\n\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n content: \"\\f19c\";\n}\n\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n content: \"\\f19d\";\n}\n\n.fa-yahoo:before {\n content: \"\\f19e\";\n}\n\n.fa-google:before {\n content: \"\\f1a0\";\n}\n\n.fa-reddit:before {\n content: \"\\f1a1\";\n}\n\n.fa-reddit-square:before {\n content: \"\\f1a2\";\n}\n\n.fa-stumbleupon-circle:before {\n content: \"\\f1a3\";\n}\n\n.fa-stumbleupon:before {\n content: \"\\f1a4\";\n}\n\n.fa-delicious:before {\n content: \"\\f1a5\";\n}\n\n.fa-digg:before {\n content: \"\\f1a6\";\n}\n\n.fa-pied-piper-pp:before {\n content: \"\\f1a7\";\n}\n\n.fa-pied-piper-alt:before {\n content: \"\\f1a8\";\n}\n\n.fa-drupal:before {\n content: \"\\f1a9\";\n}\n\n.fa-joomla:before {\n content: \"\\f1aa\";\n}\n\n.fa-language:before {\n content: \"\\f1ab\";\n}\n\n.fa-fax:before {\n content: \"\\f1ac\";\n}\n\n.fa-building:before {\n content: \"\\f1ad\";\n}\n\n.fa-child:before {\n content: \"\\f1ae\";\n}\n\n.fa-paw:before {\n content: \"\\f1b0\";\n}\n\n.fa-spoon:before {\n content: \"\\f1b1\";\n}\n\n.fa-cube:before {\n content: \"\\f1b2\";\n}\n\n.fa-cubes:before {\n content: \"\\f1b3\";\n}\n\n.fa-behance:before {\n content: \"\\f1b4\";\n}\n\n.fa-behance-square:before {\n content: \"\\f1b5\";\n}\n\n.fa-steam:before {\n content: \"\\f1b6\";\n}\n\n.fa-steam-square:before {\n content: \"\\f1b7\";\n}\n\n.fa-recycle:before {\n content: \"\\f1b8\";\n}\n\n.fa-automobile:before,\n.fa-car:before {\n content: \"\\f1b9\";\n}\n\n.fa-cab:before,\n.fa-taxi:before {\n content: \"\\f1ba\";\n}\n\n.fa-tree:before {\n content: \"\\f1bb\";\n}\n\n.fa-spotify:before {\n content: \"\\f1bc\";\n}\n\n.fa-deviantart:before {\n content: \"\\f1bd\";\n}\n\n.fa-soundcloud:before {\n content: \"\\f1be\";\n}\n\n.fa-database:before {\n content: \"\\f1c0\";\n}\n\n.fa-file-pdf-o:before {\n content: \"\\f1c1\";\n}\n\n.fa-file-word-o:before {\n content: \"\\f1c2\";\n}\n\n.fa-file-excel-o:before {\n content: \"\\f1c3\";\n}\n\n.fa-file-powerpoint-o:before {\n content: \"\\f1c4\";\n}\n\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n content: \"\\f1c5\";\n}\n\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n content: \"\\f1c6\";\n}\n\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n content: \"\\f1c7\";\n}\n\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n content: \"\\f1c8\";\n}\n\n.fa-file-code-o:before {\n content: \"\\f1c9\";\n}\n\n.fa-vine:before {\n content: \"\\f1ca\";\n}\n\n.fa-codepen:before {\n content: \"\\f1cb\";\n}\n\n.fa-jsfiddle:before {\n content: \"\\f1cc\";\n}\n\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n content: \"\\f1cd\";\n}\n\n.fa-circle-o-notch:before {\n content: \"\\f1ce\";\n}\n\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n content: \"\\f1d0\";\n}\n\n.fa-ge:before,\n.fa-empire:before {\n content: \"\\f1d1\";\n}\n\n.fa-git-square:before {\n content: \"\\f1d2\";\n}\n\n.fa-git:before {\n content: \"\\f1d3\";\n}\n\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n content: \"\\f1d4\";\n}\n\n.fa-tencent-weibo:before {\n content: \"\\f1d5\";\n}\n\n.fa-qq:before {\n content: \"\\f1d6\";\n}\n\n.fa-wechat:before,\n.fa-weixin:before {\n content: \"\\f1d7\";\n}\n\n.fa-send:before,\n.fa-paper-plane:before {\n content: \"\\f1d8\";\n}\n\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n content: \"\\f1d9\";\n}\n\n.fa-history:before {\n content: \"\\f1da\";\n}\n\n.fa-circle-thin:before {\n content: \"\\f1db\";\n}\n\n.fa-header:before {\n content: \"\\f1dc\";\n}\n\n.fa-paragraph:before {\n content: \"\\f1dd\";\n}\n\n.fa-sliders:before {\n content: \"\\f1de\";\n}\n\n.fa-share-alt:before {\n content: \"\\f1e0\";\n}\n\n.fa-share-alt-square:before {\n content: \"\\f1e1\";\n}\n\n.fa-bomb:before {\n content: \"\\f1e2\";\n}\n\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n content: \"\\f1e3\";\n}\n\n.fa-tty:before {\n content: \"\\f1e4\";\n}\n\n.fa-binoculars:before {\n content: \"\\f1e5\";\n}\n\n.fa-plug:before {\n content: \"\\f1e6\";\n}\n\n.fa-slideshare:before {\n content: \"\\f1e7\";\n}\n\n.fa-twitch:before {\n content: \"\\f1e8\";\n}\n\n.fa-yelp:before {\n content: \"\\f1e9\";\n}\n\n.fa-newspaper-o:before {\n content: \"\\f1ea\";\n}\n\n.fa-wifi:before {\n content: \"\\f1eb\";\n}\n\n.fa-calculator:before {\n content: \"\\f1ec\";\n}\n\n.fa-paypal:before {\n content: \"\\f1ed\";\n}\n\n.fa-google-wallet:before {\n content: \"\\f1ee\";\n}\n\n.fa-cc-visa:before {\n content: \"\\f1f0\";\n}\n\n.fa-cc-mastercard:before {\n content: \"\\f1f1\";\n}\n\n.fa-cc-discover:before {\n content: \"\\f1f2\";\n}\n\n.fa-cc-amex:before {\n content: \"\\f1f3\";\n}\n\n.fa-cc-paypal:before {\n content: \"\\f1f4\";\n}\n\n.fa-cc-stripe:before {\n content: \"\\f1f5\";\n}\n\n.fa-bell-slash:before {\n content: \"\\f1f6\";\n}\n\n.fa-bell-slash-o:before {\n content: \"\\f1f7\";\n}\n\n.fa-trash:before {\n content: \"\\f1f8\";\n}\n\n.fa-copyright:before {\n content: \"\\f1f9\";\n}\n\n.fa-at:before {\n content: \"\\f1fa\";\n}\n\n.fa-eyedropper:before {\n content: \"\\f1fb\";\n}\n\n.fa-paint-brush:before {\n content: \"\\f1fc\";\n}\n\n.fa-birthday-cake:before {\n content: \"\\f1fd\";\n}\n\n.fa-area-chart:before {\n content: \"\\f1fe\";\n}\n\n.fa-pie-chart:before {\n content: \"\\f200\";\n}\n\n.fa-line-chart:before {\n content: \"\\f201\";\n}\n\n.fa-lastfm:before {\n content: \"\\f202\";\n}\n\n.fa-lastfm-square:before {\n content: \"\\f203\";\n}\n\n.fa-toggle-off:before {\n content: \"\\f204\";\n}\n\n.fa-toggle-on:before {\n content: \"\\f205\";\n}\n\n.fa-bicycle:before {\n content: \"\\f206\";\n}\n\n.fa-bus:before {\n content: \"\\f207\";\n}\n\n.fa-ioxhost:before {\n content: \"\\f208\";\n}\n\n.fa-angellist:before {\n content: \"\\f209\";\n}\n\n.fa-cc:before {\n content: \"\\f20a\";\n}\n\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n content: \"\\f20b\";\n}\n\n.fa-meanpath:before {\n content: \"\\f20c\";\n}\n\n.fa-buysellads:before {\n content: \"\\f20d\";\n}\n\n.fa-connectdevelop:before {\n content: \"\\f20e\";\n}\n\n.fa-dashcube:before {\n content: \"\\f210\";\n}\n\n.fa-forumbee:before {\n content: \"\\f211\";\n}\n\n.fa-leanpub:before {\n content: \"\\f212\";\n}\n\n.fa-sellsy:before {\n content: \"\\f213\";\n}\n\n.fa-shirtsinbulk:before {\n content: \"\\f214\";\n}\n\n.fa-simplybuilt:before {\n content: \"\\f215\";\n}\n\n.fa-skyatlas:before {\n content: \"\\f216\";\n}\n\n.fa-cart-plus:before {\n content: \"\\f217\";\n}\n\n.fa-cart-arrow-down:before {\n content: \"\\f218\";\n}\n\n.fa-diamond:before {\n content: \"\\f219\";\n}\n\n.fa-ship:before {\n content: \"\\f21a\";\n}\n\n.fa-user-secret:before {\n content: \"\\f21b\";\n}\n\n.fa-motorcycle:before {\n content: \"\\f21c\";\n}\n\n.fa-street-view:before {\n content: \"\\f21d\";\n}\n\n.fa-heartbeat:before {\n content: \"\\f21e\";\n}\n\n.fa-venus:before {\n content: \"\\f221\";\n}\n\n.fa-mars:before {\n content: \"\\f222\";\n}\n\n.fa-mercury:before {\n content: \"\\f223\";\n}\n\n.fa-intersex:before,\n.fa-transgender:before {\n content: \"\\f224\";\n}\n\n.fa-transgender-alt:before {\n content: \"\\f225\";\n}\n\n.fa-venus-double:before {\n content: \"\\f226\";\n}\n\n.fa-mars-double:before {\n content: \"\\f227\";\n}\n\n.fa-venus-mars:before {\n content: \"\\f228\";\n}\n\n.fa-mars-stroke:before {\n content: \"\\f229\";\n}\n\n.fa-mars-stroke-v:before {\n content: \"\\f22a\";\n}\n\n.fa-mars-stroke-h:before {\n content: \"\\f22b\";\n}\n\n.fa-neuter:before {\n content: \"\\f22c\";\n}\n\n.fa-genderless:before {\n content: \"\\f22d\";\n}\n\n.fa-facebook-official:before {\n content: \"\\f230\";\n}\n\n.fa-pinterest-p:before {\n content: \"\\f231\";\n}\n\n.fa-whatsapp:before {\n content: \"\\f232\";\n}\n\n.fa-server:before {\n content: \"\\f233\";\n}\n\n.fa-user-plus:before {\n content: \"\\f234\";\n}\n\n.fa-user-times:before {\n content: \"\\f235\";\n}\n\n.fa-hotel:before,\n.fa-bed:before {\n content: \"\\f236\";\n}\n\n.fa-viacoin:before {\n content: \"\\f237\";\n}\n\n.fa-train:before {\n content: \"\\f238\";\n}\n\n.fa-subway:before {\n content: \"\\f239\";\n}\n\n.fa-medium:before {\n content: \"\\f23a\";\n}\n\n.fa-yc:before,\n.fa-y-combinator:before {\n content: \"\\f23b\";\n}\n\n.fa-optin-monster:before {\n content: \"\\f23c\";\n}\n\n.fa-opencart:before {\n content: \"\\f23d\";\n}\n\n.fa-expeditedssl:before {\n content: \"\\f23e\";\n}\n\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n content: \"\\f240\";\n}\n\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n content: \"\\f241\";\n}\n\n.fa-battery-2:before,\n.fa-battery-half:before {\n content: \"\\f242\";\n}\n\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n content: \"\\f243\";\n}\n\n.fa-battery-0:before,\n.fa-battery-empty:before {\n content: \"\\f244\";\n}\n\n.fa-mouse-pointer:before {\n content: \"\\f245\";\n}\n\n.fa-i-cursor:before {\n content: \"\\f246\";\n}\n\n.fa-object-group:before {\n content: \"\\f247\";\n}\n\n.fa-object-ungroup:before {\n content: \"\\f248\";\n}\n\n.fa-sticky-note:before {\n content: \"\\f249\";\n}\n\n.fa-sticky-note-o:before {\n content: \"\\f24a\";\n}\n\n.fa-cc-jcb:before {\n content: \"\\f24b\";\n}\n\n.fa-cc-diners-club:before {\n content: \"\\f24c\";\n}\n\n.fa-clone:before {\n content: \"\\f24d\";\n}\n\n.fa-balance-scale:before {\n content: \"\\f24e\";\n}\n\n.fa-hourglass-o:before {\n content: \"\\f250\";\n}\n\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n content: \"\\f251\";\n}\n\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n content: \"\\f252\";\n}\n\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n content: \"\\f253\";\n}\n\n.fa-hourglass:before {\n content: \"\\f254\";\n}\n\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n content: \"\\f255\";\n}\n\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n content: \"\\f256\";\n}\n\n.fa-hand-scissors-o:before {\n content: \"\\f257\";\n}\n\n.fa-hand-lizard-o:before {\n content: \"\\f258\";\n}\n\n.fa-hand-spock-o:before {\n content: \"\\f259\";\n}\n\n.fa-hand-pointer-o:before {\n content: \"\\f25a\";\n}\n\n.fa-hand-peace-o:before {\n content: \"\\f25b\";\n}\n\n.fa-trademark:before {\n content: \"\\f25c\";\n}\n\n.fa-registered:before {\n content: \"\\f25d\";\n}\n\n.fa-creative-commons:before {\n content: \"\\f25e\";\n}\n\n.fa-gg:before {\n content: \"\\f260\";\n}\n\n.fa-gg-circle:before {\n content: \"\\f261\";\n}\n\n.fa-tripadvisor:before {\n content: \"\\f262\";\n}\n\n.fa-odnoklassniki:before {\n content: \"\\f263\";\n}\n\n.fa-odnoklassniki-square:before {\n content: \"\\f264\";\n}\n\n.fa-get-pocket:before {\n content: \"\\f265\";\n}\n\n.fa-wikipedia-w:before {\n content: \"\\f266\";\n}\n\n.fa-safari:before {\n content: \"\\f267\";\n}\n\n.fa-chrome:before {\n content: \"\\f268\";\n}\n\n.fa-firefox:before {\n content: \"\\f269\";\n}\n\n.fa-opera:before {\n content: \"\\f26a\";\n}\n\n.fa-internet-explorer:before {\n content: \"\\f26b\";\n}\n\n.fa-tv:before,\n.fa-television:before {\n content: \"\\f26c\";\n}\n\n.fa-contao:before {\n content: \"\\f26d\";\n}\n\n.fa-500px:before {\n content: \"\\f26e\";\n}\n\n.fa-amazon:before {\n content: \"\\f270\";\n}\n\n.fa-calendar-plus-o:before {\n content: \"\\f271\";\n}\n\n.fa-calendar-minus-o:before {\n content: \"\\f272\";\n}\n\n.fa-calendar-times-o:before {\n content: \"\\f273\";\n}\n\n.fa-calendar-check-o:before {\n content: \"\\f274\";\n}\n\n.fa-industry:before {\n content: \"\\f275\";\n}\n\n.fa-map-pin:before {\n content: \"\\f276\";\n}\n\n.fa-map-signs:before {\n content: \"\\f277\";\n}\n\n.fa-map-o:before {\n content: \"\\f278\";\n}\n\n.fa-map:before {\n content: \"\\f279\";\n}\n\n.fa-commenting:before {\n content: \"\\f27a\";\n}\n\n.fa-commenting-o:before {\n content: \"\\f27b\";\n}\n\n.fa-houzz:before {\n content: \"\\f27c\";\n}\n\n.fa-vimeo:before {\n content: \"\\f27d\";\n}\n\n.fa-black-tie:before {\n content: \"\\f27e\";\n}\n\n.fa-fonticons:before {\n content: \"\\f280\";\n}\n\n.fa-reddit-alien:before {\n content: \"\\f281\";\n}\n\n.fa-edge:before {\n content: \"\\f282\";\n}\n\n.fa-credit-card-alt:before {\n content: \"\\f283\";\n}\n\n.fa-codiepie:before {\n content: \"\\f284\";\n}\n\n.fa-modx:before {\n content: \"\\f285\";\n}\n\n.fa-fort-awesome:before {\n content: \"\\f286\";\n}\n\n.fa-usb:before {\n content: \"\\f287\";\n}\n\n.fa-product-hunt:before {\n content: \"\\f288\";\n}\n\n.fa-mixcloud:before {\n content: \"\\f289\";\n}\n\n.fa-scribd:before {\n content: \"\\f28a\";\n}\n\n.fa-pause-circle:before {\n content: \"\\f28b\";\n}\n\n.fa-pause-circle-o:before {\n content: \"\\f28c\";\n}\n\n.fa-stop-circle:before {\n content: \"\\f28d\";\n}\n\n.fa-stop-circle-o:before {\n content: \"\\f28e\";\n}\n\n.fa-shopping-bag:before {\n content: \"\\f290\";\n}\n\n.fa-shopping-basket:before {\n content: \"\\f291\";\n}\n\n.fa-hashtag:before {\n content: \"\\f292\";\n}\n\n.fa-bluetooth:before {\n content: \"\\f293\";\n}\n\n.fa-bluetooth-b:before {\n content: \"\\f294\";\n}\n\n.fa-percent:before {\n content: \"\\f295\";\n}\n\n.fa-gitlab:before {\n content: \"\\f296\";\n}\n\n.fa-wpbeginner:before {\n content: \"\\f297\";\n}\n\n.fa-wpforms:before {\n content: \"\\f298\";\n}\n\n.fa-envira:before {\n content: \"\\f299\";\n}\n\n.fa-universal-access:before {\n content: \"\\f29a\";\n}\n\n.fa-wheelchair-alt:before {\n content: \"\\f29b\";\n}\n\n.fa-question-circle-o:before {\n content: \"\\f29c\";\n}\n\n.fa-blind:before {\n content: \"\\f29d\";\n}\n\n.fa-audio-description:before {\n content: \"\\f29e\";\n}\n\n.fa-volume-control-phone:before {\n content: \"\\f2a0\";\n}\n\n.fa-braille:before {\n content: \"\\f2a1\";\n}\n\n.fa-assistive-listening-systems:before {\n content: \"\\f2a2\";\n}\n\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n content: \"\\f2a3\";\n}\n\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n content: \"\\f2a4\";\n}\n\n.fa-glide:before {\n content: \"\\f2a5\";\n}\n\n.fa-glide-g:before {\n content: \"\\f2a6\";\n}\n\n.fa-signing:before,\n.fa-sign-language:before {\n content: \"\\f2a7\";\n}\n\n.fa-low-vision:before {\n content: \"\\f2a8\";\n}\n\n.fa-viadeo:before {\n content: \"\\f2a9\";\n}\n\n.fa-viadeo-square:before {\n content: \"\\f2aa\";\n}\n\n.fa-snapchat:before {\n content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n content: \"\\f2ac\";\n}\n\n.fa-snapchat-square:before {\n content: \"\\f2ad\";\n}\n\n.fa-pied-piper:before {\n content: \"\\f2ae\";\n}\n\n.fa-first-order:before {\n content: \"\\f2b0\";\n}\n\n.fa-yoast:before {\n content: \"\\f2b1\";\n}\n\n.fa-themeisle:before {\n content: \"\\f2b2\";\n}\n\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n content: \"\\f2b3\";\n}\n\n.fa-fa:before,\n.fa-font-awesome:before {\n content: \"\\f2b4\";\n}\n\n.fa-handshake-o:before {\n content: \"\\f2b5\";\n}\n\n.fa-envelope-open:before {\n content: \"\\f2b6\";\n}\n\n.fa-envelope-open-o:before {\n content: \"\\f2b7\";\n}\n\n.fa-linode:before {\n content: \"\\f2b8\";\n}\n\n.fa-address-book:before {\n content: \"\\f2b9\";\n}\n\n.fa-address-book-o:before {\n content: \"\\f2ba\";\n}\n\n.fa-vcard:before,\n.fa-address-card:before {\n content: \"\\f2bb\";\n}\n\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n content: \"\\f2bc\";\n}\n\n.fa-user-circle:before {\n content: \"\\f2bd\";\n}\n\n.fa-user-circle-o:before {\n content: \"\\f2be\";\n}\n\n.fa-user-o:before {\n content: \"\\f2c0\";\n}\n\n.fa-id-badge:before {\n content: \"\\f2c1\";\n}\n\n.fa-drivers-license:before,\n.fa-id-card:before {\n content: \"\\f2c2\";\n}\n\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n content: \"\\f2c3\";\n}\n\n.fa-quora:before {\n content: \"\\f2c4\";\n}\n\n.fa-free-code-camp:before {\n content: \"\\f2c5\";\n}\n\n.fa-telegram:before {\n content: \"\\f2c6\";\n}\n\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n content: \"\\f2c7\";\n}\n\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n content: \"\\f2c8\";\n}\n\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n content: \"\\f2c9\";\n}\n\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n content: \"\\f2ca\";\n}\n\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n content: \"\\f2cb\";\n}\n\n.fa-shower:before {\n content: \"\\f2cc\";\n}\n\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n content: \"\\f2cd\";\n}\n\n.fa-podcast:before {\n content: \"\\f2ce\";\n}\n\n.fa-window-maximize:before {\n content: \"\\f2d0\";\n}\n\n.fa-window-minimize:before {\n content: \"\\f2d1\";\n}\n\n.fa-window-restore:before {\n content: \"\\f2d2\";\n}\n\n.fa-times-rectangle:before,\n.fa-window-close:before {\n content: \"\\f2d3\";\n}\n\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n content: \"\\f2d4\";\n}\n\n.fa-bandcamp:before {\n content: \"\\f2d5\";\n}\n\n.fa-grav:before {\n content: \"\\f2d6\";\n}\n\n.fa-etsy:before {\n content: \"\\f2d7\";\n}\n\n.fa-imdb:before {\n content: \"\\f2d8\";\n}\n\n.fa-ravelry:before {\n content: \"\\f2d9\";\n}\n\n.fa-eercast:before {\n content: \"\\f2da\";\n}\n\n.fa-microchip:before {\n content: \"\\f2db\";\n}\n\n.fa-snowflake-o:before {\n content: \"\\f2dc\";\n}\n\n.fa-superpowers:before {\n content: \"\\f2dd\";\n}\n\n.fa-wpexplorer:before {\n content: \"\\f2de\";\n}\n\n.fa-meetup:before {\n content: \"\\f2e0\";\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n/*# sourceMappingURL=../maps/css/lifterlms.css.map */\n"],"sourceRoot":"../../css"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-admin-elementor-editor.min.js.map b/assets/maps/js/llms-admin-elementor-editor.min.js.map
new file mode 100644
index 0000000000..8b1b452d83
--- /dev/null
+++ b/assets/maps/js/llms-admin-elementor-editor.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-admin-elementor-editor.min.js","sources":["llms-admin-elementor-editor.js"],"sourcesContent":["jQuery(document).ready((function(e){\"undefined\"!=typeof elementor&&elementor.modules.layouts.panel.pages.menu.Menu.addItem({name:\"Course Builder\",title:\"Launch Course Builder\",icon:\"wp-menu-image dashicons-before dashicons-welcome-learn-more\",callback:function(){window.location.href=llms_elementor.builder_url}},\"navigate_from_page\",\"finder\")}));"],"names":["jQuery","document","ready","e","elementor","modules","layouts","panel","pages","menu","Menu","addItem","name","title","icon","callback","window","location","href","llms_elementor","builder_url"],"mappings":"AAAAA,OAAOC,QAAQ,EAAEC,MAAM,SAAUC,GAAG,aAAa,OAAOC,WAAWA,UAAUC,QAAQC,QAAQC,MAAMC,MAAMC,KAAKC,KAAKC,QAAQ,CAACC,KAAK,iBAAiBC,MAAM,wBAAwBC,KAAK,8DAA8DC,SAAS,WAAWC,OAAOC,SAASC,KAAKC,eAAeC,WAAW,CAAC,EAAE,qBAAqB,QAAQ,CAAE,CAAC","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-admin-forms.min.js.map b/assets/maps/js/llms-admin-forms.min.js.map
new file mode 100644
index 0000000000..137578a0e9
--- /dev/null
+++ b/assets/maps/js/llms-admin-forms.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-admin-forms.min.js","sources":["llms-admin-forms.js"],"sourcesContent":["/**\n * Show an upgrade to custom fields notice when viewing the forms post type table\n *\n * @since 5.0.0\n * @version 5.0.0\n */\n\n( function() {\n\n\tvar __ = window.wp.i18n.__,\n\t\tBTN_CLASS = 'page-title-action',\n\t\tHELP_CLASS = 'llms-forms-help-text',\n\t\taddNewBtn = document.querySelector( '.' + BTN_CLASS );\n\n\t// Don't do anything if the button already exists.\n\tif ( addNewBtn ) {\n\t\treturn;\n\t}\n\n\t/**\n\t * Create the disabled \"Add New Form\" button\n\t *\n\t * @since 5.0.0\n\t *\n\t * @return {Element} Button DOM node.\n\t */\n\tfunction createNewButton() {\n\n\t\tvar btn = document.createElement( 'button' );\n\n\t\tbtn.className = BTN_CLASS + ' button';\n\t\tbtn.innerHTML = __( 'Add New Form', 'lifterlms' );\n\t\tbtn.disabled = 'disabled';\n\t\tbtn.style = 'vertical-align: inherit';\n\n\t\treturn btn;\n\n\t}\n\n\t/**\n\t * Create the toggle \"Help\" icon button\n\t *\n\t * @since 5.0.0\n\t *\n\t * @return {Element} Button DOM node.\n\t */\n\tfunction createHelpIcon() {\n\n\t\tvar btn = document.createElement( 'button' ),\n\t\t\ttxt = __( 'Help', 'lifterlms' );\n\n\t\tbtn.className = 'button dashicons dashicons-editor-help';\n\t\tbtn.style = [\n\t\t\t'background-color: #466dd8',\n\t\t\t'border-radius: 50%;',\n\t\t\t'border-color: #466dd8',\n\t\t\t'color: #FFF',\n\t\t\t'font-size: 23px;',\n\t\t\t'height: 30px;',\n\t\t\t'line-height: 1;',\n\t\t\t'margin-left: 5px;',\n\t\t\t'padding: 0;',\n\t\t\t'position: relative;',\n\t\t\t'top: 3px',\n\t\t\t'vertical-align: baseline;',\n\t\t\t'width: 30px;',\n\t\t].join( ';' );\n\n\t\tbtn.innerHTML = '' + txt + ' ';\n\t\tbtn.title = __( 'Help', 'lifterlms' );\n\n\t\tbtn.addEventListener( 'click', toggleHelpNode );\n\n\t\treturn btn;\n\n\t}\n\n\t/**\n\t * Create the help notice node\n\t *\n\t * @since 5.0.0\n\t *\n\t * @return {Element} Notice div DOM node.\n\t */\n\tfunction createHelpNode() {\n\n\t\tvar div = document.createElement( 'div' );\n\n\t\tdiv.className = HELP_CLASS;\n\t\tdiv.style = 'display:none';\n\n\t\tdiv.innerHTML = '
Create Custom Forms and Fields Create unique student information forms for specific courses and memberships. Also unlock the power of custom fields so you can collect and display any form field data you can imagine.
Learn More
';\n\n\t\treturn div;\n\n\t}\n\n\t/**\n\t * Callback function for toggling the help notice dispaly\n\t *\n\t * @since 5.0.0\n\t *\n\t * @return {void}\n\t */\n\tfunction toggleHelpNode() {\n\n\t\tvar el = document.querySelector( '.' + HELP_CLASS );\n\n\t\tif ( 'none' === el.style.display ) {\n\t\t\tel.style.display = 'flex';\n\t\t\tel.className += ' notice notice-info llms-admin-notice';\n\t\t} else {\n\t\t\tel.style.display = 'none';\n\t\t}\n\n\t}\n\n\t/**\n\t * Initialize\n\t *\n\t * Creates and add elements to the dom and binds UI events.\n\t *\n\t * @since 5.0.0\n\t *\n\t * @return {void}\n\t */\n\tfunction init() {\n\n\t\tvar title = document.querySelector( '.wp-heading-inline' ),\n\t\t\tbtn = createNewButton();\n\n\t\ttitle.after( btn );\n\t\tbtn.after( createHelpIcon() );\n\n\t\tdocument.querySelector( '.wrap' ).insertBefore( createHelpNode(), document.querySelector( '.wp-header-end' ) );\n\n\t}\n\n\t// Go.\n\tinit();\n\n} )();\n\n\n"],"names":["btn","title","__","window","wp","i18n","BTN_CLASS","HELP_CLASS","toggleHelpNode","el","document","querySelector","style","display","className","createElement","innerHTML","disabled","after","txt","join","addEventListener","insertBefore","div"],"mappings":"AAOA,CAAA,WAEC,IAwHEA,EADGC,EAvHDC,EAAaC,OAAOC,GAAGC,KAAKH,GAC/BI,EAAa,oBACbC,EAAa,uBA6Fd,SAASC,IAER,IAAIC,EAAKC,SAASC,cAAe,IAAMJ,CAAW,EAE7C,SAAWE,EAAGG,MAAMC,SACxBJ,EAAGG,MAAMC,QAAU,OACnBJ,EAAGK,WAAa,yCAEhBL,EAAGG,MAAMC,QAAU,MAGrB,CAvGaH,SAASC,cAAe,IAAML,CAAU,IAoHhDL,EAAQS,SAASC,cAAe,oBAAqB,GApGrDX,EAAMU,SAASK,cAAe,QAAS,GAEvCD,UAAYR,EAAY,UAC5BN,EAAIgB,UAAYd,EAAI,eAAgB,WAAY,EAChDF,EAAIiB,SAAY,WAChBjB,EAAIY,MAAY,0BAkGhBX,EAAMiB,MAAOlB,CAAI,EACjBA,EAAIkB,OApFAlB,EAAMU,SAASK,cAAe,QAAS,EAC1CI,EAAMjB,EAAI,OAAQ,WAAY,EAE/BF,EAAIc,UAAY,yCAChBd,EAAIY,MAAY,CACf,4BACA,sBACA,wBACA,cACA,mBACA,gBACA,kBACA,oBACA,cACA,sBACA,WACA,4BACA,gBACCQ,KAAM,GAAI,EAEZpB,EAAIgB,UAAY,mCAAqCG,EAAM,UAC3DnB,EAAIC,MAAYC,EAAI,OAAQ,WAAY,EAExCF,EAAIqB,iBAAkB,QAASb,CAAe,EAEvCR,EA2DqB,EAE5BU,SAASC,cAAe,OAAQ,EAAEW,eAhD9BC,EAAMb,SAASK,cAAe,KAAM,GAEpCD,UAAYP,EAChBgB,EAAIX,MAAY,eAEhBW,EAAIP,UAAY,wjBAETO,GAyC2Db,SAASC,cAAe,gBAAiB,CAAE,EAO7G,EAAE","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-admin-settings.min.js.map b/assets/maps/js/llms-admin-settings.min.js.map
new file mode 100644
index 0000000000..1267217ff0
--- /dev/null
+++ b/assets/maps/js/llms-admin-settings.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-admin-settings.min.js","sources":["llms-admin-settings.js"],"sourcesContent":[";/**\n * LifterLMS Settings Pages UI / UX\n *\n * @since 3.7.3\n * @version 3.18.0\n */( function( $, undefined ) {\n\n\twindow.llms = window.llms || {};\n\twindow.llms.admin_settings = function() {\n\n\t\tthis.file_frame = null;\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t * @since 3.7.3\n\t\t * @version 3.18.0\n\t\t */\n\t\tthis.init = function() {\n\t\t\tthis.bind();\n\t\t\tthis.bind_conditionals();\n\t\t};\n\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.7.3\n\t\t * @version 3.17.5\n\t\t */\n\t\tthis.bind = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tif ( $( '.llms-image-field-upload' ).length ) {\n\t\t\t\t$( '.llms-image-field-upload' ).on( 'click', function( e ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.image_upload_click( $( this ), e );\n\t\t\t\t} );\n\n\t\t\t\t$( '.llms-image-field-remove' ).on( 'click', function( e ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.update_image( $( this ), '', '' );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( $( '.llms-gateway-table' ).length ) {\n\t\t\t\t$( '.llms-gateway-table tbody' ).sortable( {\n\t\t\t\t\taxis: 'y',\n\t\t\t\t\tcursor: 'move',\n\t\t\t\t\titems: 'tr',\n\t\t\t\t\t// containment: 'parent',\n\t\t\t\t\thandle: 'td.sort',\n\t\t\t\t\thelper: function( event, ui ) {\n\t\t\t\t\t\tui.children().each( function() {\n\t\t\t\t\t\t\t$( this ).width( $( this ).width() );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\t// ui.css( 'left', '0' );\n\t\t\t\t\t\treturn ui;\n\t\t\t\t\t},\n\t\t\t\t\tupdate: function( event, ui ) {\n\t\t\t\t\t\t$( this ).find( 'td.sort input' ).each( function( i ) {\n\t\t\t\t\t\t\t$( this ).val( i );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Allow checkboxes to conditionally display other settings\n\t\t *\n\t\t * @return void\n\t\t * @since 3.18.0\n\t\t * @version 3.18.0\n\t\t */\n\t\tthis.bind_conditionals = function() {\n\n\t\t\t$( '.llms-conditional-controller' ).each( function() {\n\n\t\t\t\tvar $controls = $( $( this ).attr( 'data-controls' ) ).closest( 'tr' );\n\n\t\t\t\t$( this ).on( 'change', function() {\n\n\t\t\t\t\tvar val;\n\n\t\t\t\t\tif ( 'checkbox' === $( this ).attr( 'type' ) ) {\n\t\t\t\t\t\tval = $( this ).is( ':checked' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\t$controls.show();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$controls.hide();\n\t\t\t\t\t}\n\n\t\t\t\t} ).trigger( 'change' );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Click event for image upload fields\n\t\t *\n\t\t * @param obj $btn jQuery object for clicked button\n\t\t * @param obj e JS event object\n\t\t * @return void\n\t\t * @since 3.7.3\n\t\t * @version 3.7.3\n\t\t */\n\t\tthis.image_upload_click = function( $btn, e ) {\n\n\t\t\tvar self = this,\n\t\t\t\tframe = null;\n\n\t\t\tif ( ! frame ) {\n\t\t\t\tvar title = $btn.attr( 'data-frame-title' ) || LLMS.l10n.translate( 'Select an Image' ),\n\t\t\t\t\tbutton_text = $btn.attr( 'data-frame-button' ) || LLMS.l10n.translate( 'Select Image' );\n\t\t\t\tframe = wp.media.frames.file_frame = wp.media({\n\t\t\t\t\ttitle: title,\n\t\t\t\t\tbutton: {\n\t\t\t\t\t\ttext: button_text,\n\t\t\t\t\t},\n\t\t\t\t\tmultiple: false\t// Set to true to allow multiple files to be selected\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tframe.on( 'select', function() {\n\n\t\t\t\t// We set multiple to false so only get one image from the uploader\n\t\t\t\tvar attachment = frame.state().get( 'selection' ).first().toJSON();\n\n\t\t\t\tself.update_image( $btn, attachment.id, attachment.url );\n\n\t\t\t});\n\n\t\t\tframe.open();\n\n\t\t};\n\n\t\t/**\n\t\t * Update the DOM with a selected image\n\t\t *\n\t\t * @param obj $btn jQuery object of the clicked button\n\t\t * @param int id WP Attachment ID of the image\n\t\t * @param string src src of the selected image\n\t\t * @return void\n\t\t * @since 3.7.3\n\t\t * @version 3.7.3\n\t\t */\n\t\tthis.update_image = function( $btn, id, src ) {\n\n\t\t\tvar $input = $( '#' + $btn.attr( 'data-id' ) ),\n\t\t\t\t$preview = $btn.prevAll( 'img.llms-image-field-preview' )\n\t\t\t\t$remove = $btn.hasClass( 'llms-image-field-remove' ) ? $btn : $btn.next( 'input.llms-image-field-remove' );\n\n\t\t\t$input.val( id );\n\t\t\t$preview.attr( 'src', src );\n\n\t\t\tif ( '' !== id ) {\n\t\t\t\t$remove.removeClass( 'hidden' );\n\t\t\t} else {\n\t\t\t\t$remove.addClass( 'hidden' );\n\t\t\t}\n\n\t\t}\n\n\t\t// go\n\t\tthis.init();\n\n\t};\n\n\tvar a = new window.llms.admin_settings();\n\n} )( jQuery );\n"],"names":["$","window","llms","admin_settings","this","file_frame","init","bind","bind_conditionals","self","length","on","e","preventDefault","image_upload_click","update_image","sortable","axis","cursor","items","handle","helper","event","ui","children","each","width","update","find","i","val","$controls","attr","closest","is","show","hide","trigger","$btn","title","button_text","frame","LLMS","l10n","translate","wp","media","frames","button","text","multiple","attachment","state","get","first","toJSON","id","url","open","src","$input","$preview","prevAll","$remove","hasClass","next","removeClass","addClass","jQuery"],"mappings":"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","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-admin-tables.min.js.map b/assets/maps/js/llms-admin-tables.min.js.map
new file mode 100644
index 0000000000..7021945476
--- /dev/null
+++ b/assets/maps/js/llms-admin-tables.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-admin-tables.min.js","sources":["llms-admin-tables.js"],"sourcesContent":["/**\n * LifterLMS Admin Tables\n * @since 3.2.0\n * @version 3.28.1\n */\n;( function( $, undefined ) {\n\n\twindow.llms = window.llms || {};\n\n\tvar AdminTables = function() {\n\n\t\tthis.$tables = null;\n\n\t\t/**\n\t\t * Initialize\n\t\t * @return void\n\t\t * @since 3.2.0\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tself.$tables = $( '.llms-gb-table' );\n\n\t\t\tif ( self.$tables.length ) {\n\t\t\t\tself.bind();\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Bind DOM events\n\t\t * @return void\n\t\t * @since 2.3.0\n\t\t * @version 3.28.0\n\t\t */\n\t\tthis.bind = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.$tables.each( function() {\n\n\t\t\t\tvar $table = $( this );\n\n\t\t\t\t$table.on( 'click', 'button[name=\"llms-table-paging\"]', function( e ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.change_page( $table, $( this ) );\n\t\t\t\t} );\n\n\t\t\t\t$table.on( 'click', 'button[name=\"llms-table-export\"]', function( e ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.export( $table, $( this ) );\n\t\t\t\t} );\n\n\t\t\t\t$table.on( 'click', 'a.llms-sortable', function( e ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.change_order( $table, $( this ) );\n\t\t\t\t} );\n\n\t\t\t\t$table.parent().find( '.llms-table-filters' ).on( 'change', 'select.llms-table-filter', function( e ) {\n\t\t\t\t\tself.change_filter( $table, $( this ) );\n\t\t\t\t} );\n\n\t\t\t\t$table.parent().find( '.llms-table-search' ).on( 'keyup', 'input', debounce( function( e ) {\n\n\t\t\t\t\tswitch ( e.keyCode ) {\n\n\t\t\t\t\t\tcase 37:\n\t\t\t\t\t\tcase 38:\n\t\t\t\t\t\tcase 39:\n\t\t\t\t\t\tcase 40:\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tself.search( $table, $( this ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, 250 ) );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Handle clicks on sortable column headers\n\t\t * @param obj $table jQuery selector for the current table\n\t\t * @param obj $anchor jQuery selector for the clicked column head anchor\n\t\t * @return void\n\t\t * @since 3.2.0\n\t\t * @version 3.2.0\n\t\t */\n\t\tthis.change_order = function( $table, $anchor ) {\n\n\t\t\tthis.reload( $table, {\n\t\t\t\torder: $anchor.attr( 'data-order' ),\n\t\t\t\torderby: $anchor.attr( 'data-orderby' ),\n\t\t\t\tpage: 1,\n\t\t\t} );\n\n\t\t};\n\n\t\tthis.change_filter = function( $table, $select ) {\n\n\t\t\tthis.reload( $table, {\n\t\t\t\tfilter: $select.val(),\n\t\t\t\tfilterby: $select.attr( 'name' ),\n\t\t\t\tpage: 1,\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Change the current page of the table on a next/back click\n\t\t * @param obj $table jQuery selector for the current table\n\t\t * @param obj $btn jQuery selector for the clicked button\n\t\t * @return void\n\t\t * @since 3.2.0\n\t\t * @version 3.4.0\n\t\t */\n\t\tthis.change_page = function( $table, $btn ) {\n\n\t\t\tthis.reload( $table, {\n\t\t\t\torder: this.get_args( $table, 'order' ),\n\t\t\t\torderby: this.get_args( $table, 'orderby' ),\n\t\t\t\tpage: $btn.attr( 'data-page' ),\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Handle\n\t\t * @param obj $table jQuery object for the table\n\t\t * @param obj $btn jQuery object for the clicked button\n\t\t * @param string filename filename of the export in progress.\n\t\t * @return void\n\t\t * @since 3.15.0\n\t\t * @version 3.28.1\n\t\t */\n\t\tthis.export = function( $table, $btn, filename ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$msg = $table.find( '.llms-table-export .llms-table-export-msg' ),\n\t\t\t\t$progress = $table.find( '.llms-table-export .llms-table-progress' );\n\n\t\t\tfunction activate_button() {\n\t\t\t\tLLMS.Spinner.stop( $btn, 'small' );\n\t\t\t\t$btn.removeAttr( 'disabled' );\n\t\t\t}\n\n\t\t\tLLMS.Ajax.call( {\n\t\t\t\tdata: $.extend( {\n\t\t\t\t\taction: 'export_admin_table',\n\t\t\t\t\thandler: $table.attr( 'data-handler' ),\n\t\t\t\t\tfilename: filename,\n\t\t\t\t}, JSON.parse( $table.attr( 'data-args' ) ) ),\n\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\tif ( ! $btn.attr( 'disabled' ) ) {\n\t\t\t\t\t\t$btn.attr( 'disabled', 'disabled' );\n\t\t\t\t\t\tLLMS.Spinner.start( $btn, 'small' );\n\t\t\t\t\t}\n\n\t\t\t\t},\n\t\t\t\terror: function( jqXHR, status, error ) {\n\n\t\t\t\t\tvar msg = LLMS.l10n.translate( 'An error was encountered generating the export' );\n\t\t\t\t\tactivate_button();\n\t\t\t\t\t$progress.hide();\n\t\t\t\t\t$msg.html( '' + msg + ': ' + error + ' ' );\n\t\t\t\t\tconsole.error( jqXHR );\n\n\t\t\t\t},\n\t\t\t\tsuccess: function( res ) {\n\n\t\t\t\t\tif ( ! res.success && res.message ) {\n\n\t\t\t\t\t\tactivate_button();\n\t\t\t\t\t\t$progress.hide();\n\t\t\t\t\t\t$msg.html( '' + res.message + ' ' );\n\n\t\t\t\t\t} else if ( res.success && res.data && res.data.progress ) {\n\n\t\t\t\t\t\t$msg.html( '' );\n\n\t\t\t\t\t\t// only show a progress bar if it's going to take more than one request.\n\t\t\t\t\t\tif ( ! $progress.is( 'visible' ) && res.data.progress !== 100 ) {\n\t\t\t\t\t\t\t$progress.css( 'display', 'inline-block' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$progress.find( '.llms-table-progress-text' ).text( res.data.progress + '%' );\n\t\t\t\t\t\t$progress.find( '.llms-table-progress-inner' ).css( 'width', res.data.progress + '%' );\n\n\t\t\t\t\t\t// if we're not finished, make another request.\n\t\t\t\t\t\tif ( 100 !== res.data.progress ) {\n\t\t\t\t\t\t\tself.export( $table, $btn, res.data.filename );\n\n\t\t\t\t\t\t// finished, download the file and cleanup the interface.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\t\tvar id = 'llms-dl-export';\n\t\t\t\t\t\t\t\t$( '#' + id ).remove();\n\t\t\t\t\t\t\t\t$( ' ', {\n\t\t\t\t\t\t\t\t\tid: id,\n\t\t\t\t\t\t\t\t\thref: res.data.url,\n\t\t\t\t\t\t\t\t\tstyle: 'display: hidden;',\n\t\t\t\t\t\t\t\t\tdownload: '',\n\t\t\t\t\t\t\t\t} ).appendTo( 'body' );\n\t\t\t\t\t\t\t\t$( '#' + id )[0].click();\n\t\t\t\t\t\t\t\tactivate_button();\n\t\t\t\t\t\t\t\t$progress.hide();\n\t\t\t\t\t\t\t}, 1000 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\t/**\n\t\t * Retrieve arguments stored in the table and parse into a readable object\n\t\t * @param obj $table jQuery selector for the current table\n\t\t * @param string item key to grab a specific value from the args object\n\t\t * @return mixed\n\t\t * @since 3.2.0\n\t\t * @version 3.2.0\n\t\t */\n\t\tthis.get_args = function( $table, item ) {\n\n\t\t\tvar args = JSON.parse( $table.attr( 'data-args' ) );\n\n\t\t\tif ( item ) {\n\t\t\t\treturn ( args[ item ] ) ? args[ item ] : false;\n\t\t\t} else {\n\t\t\t\treturn args;\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Reload a table\n\t\t * @param obj $table jQuery selector for the current table\n\t\t * @param obj args arguments to pass with the ajax query\n\t\t * @return void\n\t\t * @since 3.2.0\n\t\t * @version 3.2.0\n\t\t */\n\t\tthis.reload = function( $table, args ) {\n\n\t\t\targs = $.extend( {\n\t\t\t\taction: 'get_admin_table_data',\n\t\t\t\thandler: $table.attr( 'data-handler' ),\n\t\t\t}, JSON.parse( $table.attr( 'data-args' ) ), args );\n\n\t\t\tLLMS.Ajax.call( {\n\t\t\t\tdata: args,\n\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\tLLMS.Spinner.start( $table.closest( '.llms-table-wrap' ) );\n\n\t\t\t\t},\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\tLLMS.Spinner.stop( $table.closest( '.llms-table-wrap' ) )\n\n\t\t\t\t\tif ( r.success ) {\n\n\t\t\t\t\t\t$table.attr( 'data-args', r.data.args );\n\n\t\t\t\t\t\t$table.find( 'thead' ).replaceWith( r.data.thead );\n\t\t\t\t\t\t$table.find( 'tbody' ).replaceWith( r.data.tbody );\n\t\t\t\t\t\t$table.find( 'tfoot' ).replaceWith( r.data.tfoot );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Executes an AJAX search query\n\t\t * @param obj $table jQuery selector for the current table\n\t\t * @param obj $input jQuery selector for the search input\n\t\t * @return void\n\t\t * @since 3.2.0\n\t\t * @version 3.2.0\n\t\t */\n\t\tthis.search = function( $table, $input ) {\n\n\t\t\tvar val = $input.val()\n\t\t\t\tlen = val.length;\n\n\t\t\tif ( 0 === len || len >= 3 ) {\n\t\t\t\tthis.reload( $table, {\n\t\t\t\t\tpage: 1,\n\t\t\t\t\tsearch: $input.val(),\n\t\t\t\t} );\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Throttle function by a delay in ms\n\t\t * @param Function fn callback function\n\t\t * @param int delay delay in millisecond\n\t\t * @return function\n\t\t * @since 3.2.0\n\t\t * @version 3.2.0\n\t\t */\n\t\tfunction debounce( fn, delay ) {\n\t\t\tvar timer = null;\n\t\t\treturn function () {\n\t\t\t\tvar context = this,\n\t\t\t\t\targs = arguments;\n\t\t\t\twindow.clearTimeout( timer );\n\t\t\t\ttimer = window.setTimeout( function () {\n\t\t\t\t\tfn.apply( context, args );\n\t\t\t\t}, delay );\n\t\t\t};\n\t\t}\n\n\t\t// go\n\t\tthis.init();\n\n\t};\n\n\t// initialize the object\n\twindow.llms.admin_tables = new AdminTables();\n\n} )( jQuery );\n"],"names":["$","window","llms","admin_tables","this","$tables","init","self","length","bind","each","fn","delay","timer","$table","on","e","preventDefault","change_page","export","change_order","parent","find","change_filter","keyCode","search","context","args","arguments","clearTimeout","setTimeout","apply","$anchor","reload","order","attr","orderby","page","$select","filter","val","filterby","$btn","get_args","filename","$msg","$progress","activate_button","LLMS","Spinner","stop","removeAttr","Ajax","call","data","extend","action","handler","JSON","parse","beforeSend","start","error","jqXHR","status","msg","l10n","translate","hide","html","console","success","res","message","progress","is","css","text","id","remove","href","url","style","download","appendTo","click","item","closest","r","replaceWith","thead","tbody","tfoot","$input","len","jQuery"],"mappings":"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","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-admin-wizard.min.js.map b/assets/maps/js/llms-admin-wizard.min.js.map
new file mode 100644
index 0000000000..bf18abd5a7
--- /dev/null
+++ b/assets/maps/js/llms-admin-wizard.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-admin-wizard.min.js","sources":["llms-admin-wizard.js"],"sourcesContent":["/**\n * JS from the admin setup wizard\n *\n * @since 4.8.0\n * @version 4.8.0\n */\n\n( function() {\n\tconst\n\t\tcurrStep = document.getElementById( 'llms-setup-current-step' ),\n\t\texitLink = document.querySelector( '.llms-exit-setup' ),\n\t\timports = document.querySelectorAll( 'input[name=\"llms_setup_course_import_ids[]\"]' ),\n\t\tcheckboxToggle = document.getElementsByClassName( 'llms-checkbox-toggle' )[ 0 ] ?? null;\n\n\tif ( imports.length ) {\n\t\tconst\n\t\t\tsubmit = document.getElementById( 'llms-setup-submit' ),\n\t\t\tmsgs = document.querySelectorAll( '.llms-importing-msgs .llms-importing-msg' );\n\n\t\t/**\n\t\t * Retrieve the number of courses to be imported\n\t\t *\n\t\t * @since 4.8.0\n\t\t *\n\t\t * @return {Number} The number of courses to be imported.\n\t\t */\n\t\tfunction getSelectedImportCount() {\n\t\t\tlet count = 0;\n\n\t\t\timports.forEach( function( el ) {\n\t\t\t\tif ( el.checked ) {\n\t\t\t\t\t++count;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn count;\n\t\t}\n\n\t\t/**\n\t\t * Update UI when a user toggles an import on or off.\n\t\t *\n\t\t * @since 4.8.0\n\t\t */\n\t\timports.forEach( function( el ) {\n\t\t\tel.addEventListener( 'change', function() {\n\t\t\t\t// Hide all messages.\n\t\t\t\tmsgs.forEach( function( msg ) {\n\t\t\t\t\tmsg.style.display = 'none';\n\t\t\t\t} );\n\n\t\t\t\tconst selectedCount = getSelectedImportCount();\n\n\t\t\t\t// If there's no courses to be imported, disable the submit button.\n\t\t\t\tsubmit.disabled = 0 === getSelectedImportCount() ? 'disabled' : null;\n\n\t\t\t\t// Show messages where applicable.\n\t\t\t\tif ( 1 === selectedCount ) {\n\t\t\t\t\tmsgs[0].style.display = 'block';\n\t\t\t\t} else if ( selectedCount >= 2 ) {\n\t\t\t\t\tmsgs[1].style.display = 'block';\n\t\t\t\t\tdocument.getElementById( 'llms-importing-number' ).textContent = selectedCount;\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// Trigger a change event so the UI displays properly on page load.\n\t\timports[0].dispatchEvent( new Event( 'change' ) );\n\n\t\t/**\n\t\t * Start a spinner when the \"Import Courses\" button is clicked.\n\t\t *\n\t\t * @since 4.8.0\n\t\t */\n\t\tsubmit.addEventListener( 'click', function() {\n\t\t\tLLMS.Spinner.start( jQuery( submit ), 'small' );\n\t\t} );\n\t}\n\n\tif ( exitLink && 'finish' !== currStep.value ) {\n\t\t/**\n\t\t * When users click \"Exit Setup\" prior to setup completion, open a confirmation dialog\n\t\t *\n\t\t * @since 4.8.0\n\t\t */\n\t\texitLink.addEventListener( 'click', function( e ) {\n\t\t\tif ( ! window.confirm( exitLink.dataset.confirm ) ) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t} );\n\t}\n\n\tif ( checkboxToggle ) {\n\t\tcheckboxToggle.addEventListener( 'click', function() {\n\t\t\tconst hiddenFields = this.parentNode.parentNode.querySelectorAll( '.is-hidden,.is-visible' );\n\n\t\t\tfor ( let i = 0; i < hiddenFields.length; i++ ) {\n\t\t\t\thiddenFields[ i ].classList.toggle( 'is-visible' );\n\t\t\t\thiddenFields[ i ].classList.toggle( 'is-hidden' );\n\t\t\t}\n\t\t} );\n\t}\n}() );\n"],"names":["currStep","document","getElementById","exitLink","querySelector","imports","querySelectorAll","checkboxToggle","getElementsByClassName","length","submit","msgs","getSelectedImportCount","let","count","forEach","el","checked","addEventListener","msg","style","display","selectedCount","disabled","textContent","dispatchEvent","Event","LLMS","Spinner","start","jQuery","value","e","window","confirm","dataset","preventDefault","hiddenFields","this","parentNode","i","classList","toggle"],"mappings":"AAOA,CAAE,WACD,MACCA,EAAiBC,SAASC,eAAgB,yBAA0B,EACpEC,EAAiBF,SAASG,cAAe,kBAAmB,EAC5DC,EAAiBJ,SAASK,iBAAkB,8CAA+C,EAC3FC,EAAiBN,SAASO,uBAAwB,sBAAuB,EAAG,IAAO,KAEpF,GAAKH,EAAQI,OAAS,CACrB,MACCC,EAAST,SAASC,eAAgB,mBAAoB,EACtDS,EAASV,SAASK,iBAAkB,0CAA2C,EAShF,SAASM,IACRC,IAAIC,EAAQ,EAQZ,OANAT,EAAQU,QAAS,SAAUC,GACrBA,EAAGC,SACP,EAAEH,CAEJ,CAAE,EAEKA,CACR,CAOAT,EAAQU,QAAS,SAAUC,GAC1BA,EAAGE,iBAAkB,SAAU,WAE9BP,EAAKI,QAAS,SAAUI,GACvBA,EAAIC,MAAMC,QAAU,MACrB,CAAE,EAEF,IAAMC,EAAgBV,EAAuB,EAG7CF,EAAOa,SAAW,IAAMX,EAAuB,EAAI,WAAa,KAG3D,IAAMU,EACVX,EAAK,GAAGS,MAAMC,QAAU,QACI,GAAjBC,IACXX,EAAK,GAAGS,MAAMC,QAAU,QACxBpB,SAASC,eAAgB,uBAAwB,EAAEsB,YAAcF,EAEnE,CAAE,CACH,CAAE,EAGFjB,EAAQ,GAAGoB,cAAe,IAAIC,MAAO,QAAS,CAAE,EAOhDhB,EAAOQ,iBAAkB,QAAS,WACjCS,KAAKC,QAAQC,MAAOC,OAAQpB,CAAO,EAAG,OAAQ,CAC/C,CAAE,CACH,CAEKP,GAAY,WAAaH,EAAS+B,OAMtC5B,EAASe,iBAAkB,QAAS,SAAUc,GACtCC,OAAOC,QAAS/B,EAASgC,QAAQD,OAAQ,GAC/CF,EAAEI,eAAe,CAEnB,CAAE,EAGE7B,GACJA,EAAeW,iBAAkB,QAAS,WACzC,IAAMmB,EAAeC,KAAKC,WAAWA,WAAWjC,iBAAkB,wBAAyB,EAE3F,IAAMO,IAAI2B,EAAI,EAAGA,EAAIH,EAAa5B,OAAQ+B,CAAC,GAC1CH,EAAcG,GAAIC,UAAUC,OAAQ,YAAa,EACjDL,EAAcG,GAAIC,UAAUC,OAAQ,WAAY,CAElD,CAAE,CAEJ,EAAI","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-admin.min.js.map b/assets/maps/js/llms-admin.min.js.map
new file mode 100644
index 0000000000..f7c4f5067e
--- /dev/null
+++ b/assets/maps/js/llms-admin.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-admin.min.js","sources":["llms-admin.js"],"sourcesContent":["/**\n * LifterLMS Admin Panel Javascript\n *\n * @since Unknown\n * @version 7.3.0\n *\n * @param obj $ Traditional jQuery reference.\n * @return void\n */\n;( function( $ ) {\n\n\twindow.llms = window.llms || {};\n\n\twindow.llms.widgets = function() {\n\n\t\tthis.$widgets = $( '.llms-widget' );\n\t\tthis.$info_toggles = $( '.llms-widget-info-toggle' );\n\n\t\tthis.init = function() {\n\t\t\tthis.bind();\n\t\t};\n\n\t\tthis.bind = function() {\n\n\t\t\tthis.$info_toggles.on( 'mouseenter mouseleave', function( evt ) {\n\t\t\t\t$(this).closest( '.llms-widget' )\n\t\t\t\t\t.toggleClass( 'info-showing', 'mouseenter' === evt.type );\n\t\t\t} );\n\n\t\t};\n\n\t\t// Go.\n\t\tthis.init();\n\n\t\treturn this;\n\n\t};\n\n\tvar llms_widgets = new window.llms.widgets();\n\n\t/**\n\t * Simple jQuery plugin to transform select elements into Select2-powered elements to query for Courses/Memberships via AJAX.\n\t *\n\t * @since 3.19.4\n\t * @since 3.32.0 Added ability to fetch posts based on their post status.\n\t * @since 3.37.2 Added ability to fetch posts (llms posts) filtered by their instructor id.\n\t * @since 4.4.0 Update ajax nonce source.\n\t *\n\t * @param obj options Options passed to Select2.\n\t * Each default option will pulled from the elements data-attributes.\n\t * @return void\n\t */\n\t$.fn.llmsPostsSelect2 = function( options ) {\n\n\t\tvar self = this,\n\t\t\toptions = options || {},\n\t\t\tdefaults = {\n\t\t\t\tmultiple: false,\n\t\t\t\tplaceholder: undefined !== LLMS.l10n ? LLMS.l10n.translate( 'Select a Course/Membership' ) : 'Select a Course/Membership',\n\t\t\t\tpost_type: self.attr( 'data-post-type' ) || 'post',\n\t\t\t\tpost_statuses: self.attr( 'data-post-statuses' ) || 'publish',\n\t\t\t\tinstructor_id: null,\n\t\t\t\tallow_clear: self.attr( 'data-post-type' ) || false,\n\t\t\t\twidth: null,\n\t\t\t};\n\n\t\t$.each( defaults, function( setting ) {\n\t\t\tif ( self.attr( 'data-' + setting ) ) {\n\t\t\t\toptions[ setting ] = self.attr( 'data-' + setting );\n\t\t\t}\n\t\t} );\n\n\t\tif ( 'multiple' === self.attr( 'multiple' ) ) {\n\t\t\toptions.multiple = true;\n\t\t}\n\n\t\toptions = $.extend( defaults, options );\n\n\t\tthis.llmsSelect2( {\n\t\t\tallowClear: options.allow_clear,\n\t\t\tajax: {\n\t\t\t\tdataType: 'JSON',\n\t\t\t\tdelay: 250,\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tdata: function( params ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: 'select2_query_posts',\n\t\t\t\t\t\tpage: ( params.page ) ? params.page - 1 : 0, // 0 index the pages to make it simpler for the database query\n\t\t\t\t\t\tpost_type: options.post_type,\n\t\t\t\t\t\tinstructor_id : options.instructor_id,\n\t\t\t\t\t\tpost_statuses: options.post_statuses,\n\t\t\t\t\t\tterm: params.term,\n\t\t\t\t\t\t_ajax_nonce: window.llms.ajax_nonce,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tprocessResults: function( data, params ) {\n\n\t\t\t\t\t// recursive function for creating\n\t\t\t\t\tfunction map_data( items ) {\n\n\t\t\t\t\t\t// this is a flat array of results\n\t\t\t\t\t\t// used when only one post type is selected\n\t\t\t\t\t\t// and to format children when using optgroups with multiple post types\n\t\t\t\t\t\tif ( Array.isArray( items ) ) {\n\t\t\t\t\t\t\treturn $.map( items, function( item ) {\n\t\t\t\t\t\t\t\treturn format_item( item );\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t// this sets up the top level optgroups when using multiple post types\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn $.map( items, function( item ) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttext: item.label,\n\t\t\t\t\t\t\t\t\tchildren: map_data( item.items ),\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// format a single result (option)\n\t\t\t\t\tfunction format_item( item ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttext: item.name,\n\t\t\t\t\t\t\tid: item.id,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresults: map_data( data.items ),\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tmore: data.more\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t},\n\t\t\t},\n\t\t\tcache: true,\n\t\t\tplaceholder: options.placeholder,\n\t\t\tmultiple: options.multiple,\n\t\t\twidth: options.width,\n\t\t} );\n\n\t};\n\n\t// automatically setup any select with the `llms-posts-select2` class\n\t$( 'select.llms-posts-select2' ).llmsPostsSelect2();\n\n\t/**\n\t * Simple jQuery plugin to transform select elements into Select2-powered elements to query for Students via AJAX\n\t *\n\t * @since Unknown\n\t * @since 3.17.5 Unknown.\n\t * @since 4.4.0 Update ajax nonce source.\n\t * @since 6.2.0 Use the LifterLMS REST API \"list students\" endpoint\n\t * instead of the `LLMS_AJAX_Handler::query_students()` PHP function.\n\t * @since 6.3.0 Fixed student's REST API URL.\n\t * @since 7.3.0 Early bail when the element doesn't exist.\n\t *\n\t * @param {Object} options Options passed to Select2. Each default option will be pulled from the elements data-attributes.\n\t * @return {jQuery}\n\t */\n\t$.fn.llmsStudentsSelect2 = function( options ) {\n\n\t\tif ( ! this.length ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar self = this,\n\t\t\toptions = options || {},\n\t\t\tdefaults = {\n\t\t\t\tallow_clear: false,\n\t\t\t\tenrolled_in: '',\n\t\t\t\tmultiple: false,\n\t\t\t\tnot_enrolled_in: '',\n\t\t\t\tplaceholder: undefined !== LLMS.l10n ? LLMS.l10n.translate( 'Select a student' ) : 'Select a student',\n\t\t\t\troles: '',\n\t\t\t\twidth: '100%',\n\t\t\t};\n\n\t\t$.each( defaults, function( setting ) {\n\t\t\tif ( self.attr( 'data-' + setting ) ) {\n\t\t\t\toptions[ setting ] = self.attr( 'data-' + setting );\n\t\t\t}\n\t\t} );\n\n\t\toptions = $.extend( defaults, options );\n\n\t\tthis.llmsSelect2({\n\t\t\tallowClear: options.allow_clear,\n\t\t\tajax: {\n\t\t\t\tdataType: 'JSON',\n\t\t\t\tdelay: 250,\n\t\t\t\tmethod: 'GET',\n\t\t\t\turl: window.wpApiSettings.root + 'wp/v2/users',\n\t\t\t\tdata: function( params ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t_wpnonce: window.wpApiSettings.nonce,\n\t\t\t\t\t\tcontext: 'edit',\n\t\t\t\t\t\tpage: params.page || 1,\n\t\t\t\t\t\tper_page: 10,\n\t\t\t\t\t\tnot_enrolled_in: params.not_enrolled_in || options.not_enrolled_in,\n\t\t\t\t\t\tenrolled_in: params.enrolled_in || options.enrolled_in,\n\t\t\t\t\t\troles: params.roles || options.roles,\n\t\t\t\t\t\tsearch: params.term,\n\t\t\t\t\t\tsearch_columns: 'email,name,username',\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tprocessResults: function( data, params ) {\n\t\t\t\t\tvar page = params.page || 1;\n\t\t\t\t\tvar totalPages = this._request.getResponseHeader( 'X-WP-TotalPages' );\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresults: $.map( data, function( item ) {\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttext: item.name + ' <' + item.email + '>',\n\t\t\t\t\t\t\t\tid: item.id,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t} ),\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\tmore: page < totalPages\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t\tcache: true,\n\t\t\tplaceholder: options.placeholder,\n\t\t\tmultiple: options.multiple,\n\t\t\twidth: options.width,\n\t\t});\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * Scripts for use on the engagements settings tab for email provider connector plugins\n\t *\n\t * @since 3.40.0\n\t */\n\twindow.llms.emailConnectors = {\n\n\t\t/**\n\t\t * Register a client\n\t\t *\n\t\t * Builds and submits a form used to direct the user to the connector's oAuth\n\t\t * authorization endpoint.\n\t\t *\n\t\t * @since 3.40.0\n\t\t *\n\t\t * @param {String} url Redirect URL.\n\t\t * @param {Object} fields Hash of fields where the key is the field name and the value if the field value.\n\t\t * @return {Void}\n\t\t */\n\t\tregisterClient: function( url, fields ) {\n\n\t\t\tvar form = document.createElement( 'form' );\n\t\t\tform.setAttribute( 'method', 'POST' );\n\t\t\tform.setAttribute( 'action', url );\n\n\t\t\tfunction appendInput( name, value ) {\n\t\t\t\tvar input = document.createElement( 'input' );\n\t\t\t\tinput.setAttribute( 'type', 'hidden' );\n\t\t\t\tinput.setAttribute( 'name', name );\n\t\t\t\tinput.setAttribute( 'value', value );\n\t\t\t\tform.appendChild( input );\n\t\t\t}\n\n\t\t\t$.each( fields, function( key, val ) {\n\t\t\t\tappendInput( key, val );\n\t\t\t} );\n\n\t\t\tdocument.body.appendChild( form );\n\t\t\tform.submit();\n\n\t\t},\n\n\t\t/**\n\t\t * Performs an AJAX request to perform remote installation of the connector plugin\n\t\t *\n\t\t * The callback will more than likely use `registerClient()` on success.\n\t\t *\n\t\t * @since 3.40.0\n\t\t *\n\t\t * @param {Object} $btn jQuery object for the connector button.\n\t\t * @param {Object} data Hash of data used for the ajax request.\n\t\t * @param {Function} callback Success callback function.\n\t\t * @return {Void}\n\t\t */\n\t\tremoteInstall: function( $btn, data, callback ) {\n\n\t\t\t$btn.parent().find( '.llms-error' ).remove();\n\t\t\t$.post( ajaxurl, data, callback ).fail( function( jqxhr ) {\n\t\t\t\tLLMS.Spinner.stop( $btn );\n\t\t\t\tvar msg = jqxhr.responseJSON && jqxhr.responseJSON.message ? jqxhr.responseJSON.message : jqxhr.responseText;\n\t\t\t\tif ( msg ) {\n\t\t\t\t\t$( '' + LLMS.l10n.replace( 'Error: %s', { '%s': msg } ) + '
' ).insertAfter( $btn );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t};\n\n} )( jQuery );\n"],"names":["$","window","llms","widgets","this","$widgets","$info_toggles","init","bind","on","evt","closest","toggleClass","type","fn","llmsPostsSelect2","options","self","defaults","multiple","placeholder","undefined","LLMS","l10n","translate","post_type","attr","post_statuses","instructor_id","allow_clear","width","each","setting","extend","llmsSelect2","allowClear","ajax","dataType","delay","method","url","ajaxurl","data","params","action","page","term","_ajax_nonce","ajax_nonce","processResults","results","map_data","items","Array","isArray","map","item","text","name","id","label","children","pagination","more","cache","llmsStudentsSelect2","length","enrolled_in","not_enrolled_in","roles","wpApiSettings","root","_wpnonce","nonce","context","per_page","search","search_columns","totalPages","_request","getResponseHeader","email","emailConnectors","registerClient","fields","form","document","createElement","setAttribute","key","val","input","value","appendChild","body","submit","remoteInstall","$btn","callback","parent","find","remove","post","fail","jqxhr","Spinner","stop","msg","responseJSON","message","responseText","replace","%s","insertAfter","jQuery"],"mappings":"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","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-ajax.min.js.map b/assets/maps/js/llms-ajax.min.js.map
new file mode 100644
index 0000000000..a817a008c7
--- /dev/null
+++ b/assets/maps/js/llms-ajax.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-ajax.min.js","sources":["llms-ajax.js"],"sourcesContent":["function Ajax ( type, data, cache ) {\n\n\tthis.type = type;\n\tthis.data = data;\n\tthis.cache = cache;\n\tthis.dataType = 'json';\n\tthis.url = window.ajaxurl || window.llms.ajaxurl;\n\n}\n\nAjax.prototype.check_voucher_duplicate = function () {\n\n\tjQuery.ajax({\n\t\ttype \t\t: this.type,\n\t\turl\t\t\t: this.url,\n\t\tdata \t\t: this.data,\n\t\tcache\t\t: this.cache,\n\t\tdataType\t: this.dataType,\n\t\tsuccess\t\t: function( response ) {\n\t\t\tllms_on_voucher_duplicate( response.duplicates );\n\t\t}\n\t});\n};\n"],"names":["Ajax","type","data","cache","this","dataType","url","window","ajaxurl","llms","prototype","check_voucher_duplicate","jQuery","ajax","success","response","llms_on_voucher_duplicate","duplicates"],"mappings":"AAAA,SAASA,KAAOC,EAAMC,EAAMC,GAE3BC,KAAKH,KAAWA,EAChBG,KAAKF,KAAWA,EAChBE,KAAKD,MAAWA,EAChBC,KAAKC,SAAW,OAChBD,KAAKE,IAAWC,OAAOC,SAAWD,OAAOE,KAAKD,OAE/C,CAEAR,KAAKU,UAAUC,wBAA0B,WAExCC,OAAOC,KAAK,CACXZ,KAASG,KAAKH,KACdK,IAAQF,KAAKE,IACbJ,KAASE,KAAKF,KACdC,MAASC,KAAKD,MACdE,SAAWD,KAAKC,SAChBS,QAAW,SAAUC,GACpBC,0BAA2BD,EAASE,UAAW,CAChD,CACD,CAAC,CACF","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-analytics.min.js.map b/assets/maps/js/llms-analytics.min.js.map
new file mode 100644
index 0000000000..d33b907a20
--- /dev/null
+++ b/assets/maps/js/llms-analytics.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-analytics.min.js","sources":["llms-analytics.js"],"sourcesContent":[";/**\n * LifterLMS Admin Reporting Widgets & Charts\n *\n * @since 3.0.0\n * @since 3.17.2 Unknown.\n * @since 3.33.1 Fix issue that produced series options not aligned with the chart data.\n * @since 3.36.3 Added the `allow_clear` paramater when initializiing the `llmsStudentSelect2`.\n * @since 4.3.3 Legends will automatically display on top of the chart.\n * @since 4.5.1 Show sales reporting currency symbol based on LifterLMS site options.\n * @version 7.3.0\n *\n */( function( $, undefined ) {\n\n\twindow.llms = window.llms || {};\n\n\t/**\n\t * LifterLMS Admin Analytics.\n\t *\n\t * @since 3.0.0\n\t * @since 3.5.0 Unknown\n\t * @since 4.5.1 Added `opts` parameter.\n\t * @since [verison] Early bail if no `#llms-analytics-json` is available.\n\t *\n\t * @param {Object} options Options object.\n\t * @return {Object} Class instance.\n\t */\n\tvar Analytics = function( opts ) {\n\n\t\tif ( ! $( '#llms-analytics-json' ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.charts_loaded = false;\n\t\tthis.data = {};\n\t\tthis.query = $.parseJSON( $( '#llms-analytics-json' ).text() );\n\t\tthis.timeout = 8000;\n\t\tthis.options = opts;\n\n\t\tthis.$widgets = $( '.llms-widget[data-method]' );\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\tgoogle.charts.load( 'current', {\n\t\t\t\tpackages: [\n\t\t\t\t\t'corechart'\n\t\t\t\t]\n\t\t\t} );\n\t\t\tgoogle.charts.setOnLoadCallback( this.charts_ready );\n\n\t\t\tthis.bind();\n\t\t\tthis.load_widgets();\n\n\t\t};\n\n\t\t/**\n\t\t * Bind DOM events.\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.36.3 Added the `allow_clear` paramater when initializiing the `llmsStudentSelect2`.\n\t\t * @since 7.2.0 Added check for datepicker before initializing.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tthis.bind = function() {\n\n\t\t\tif ( $( '.llms-datepicker' ).length && $.fn.datepicker ) {\n\t\t\t\t$( '.llms-datepicker' ).datepicker( {\n\t\t\t\t\tdateFormat: 'yy-mm-dd',\n\t\t\t\t\tmaxDate: 0,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t$( '#llms-students-ids-filter' ).llmsStudentsSelect2( {\n\t\t\t\tmultiple: true,\n\t\t\t\tplaceholder: LLMS.l10n.translate( 'Filter by Student(s)' ),\n\t\t\t\tallow_clear: true,\n\t\t\t} );\n\n\t\t\t$( 'a[href=\"#llms-toggle-filters\"]' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$( '.llms-analytics-filters' ).slideToggle( 100 );\n\t\t\t} );\n\n\t\t\t$( '#llms-custom-date-submit' ).on( 'click', function() {\n\t\t\t\t$( 'input[name=\"range\"]' ).val( 'custom' );\n\t\t\t} );\n\n\t\t\t$( '#llms-date-quick-filters a.llms-nav-link[data-range]' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\t$( 'input[name=\"range\"]' ).val( $( this ).attr( 'data-range' ) );\n\n\t\t\t\t$( 'form.llms-reporting-nav' ).submit();\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Called by Google Charts when the library is loaded and ready\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.charts_ready = function() {\n\n\t\t\twindow.llms.analytics.charts_loaded = true;\n\t\t\twindow.llms.analytics.draw_chart();\n\n\t\t};\n\n\t\t/**\n\t\t * Render the chart\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.17.6 Unknown\n\t\t * @since 4.3.3 Force the legend to appear on top of the chart.\n\t\t * @since 4.5.1 Display sales numbers according to the site's currency settings instead of the browser's locale.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tthis.draw_chart = function() {\n\n\t\t\tif ( ! this.charts_loaded || ! this.is_loading_finished() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar el = document.getElementById( 'llms-charts-wrapper' );\n\n\t\t\tif ( ! el ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar self = this,\n\t\t\t\tchart = new google.visualization.ComboChart( el ),\n\t\t\t\tdata = self.get_chart_data(),\n\t\t\t\toptions = {\n\t\t\t\t\tlegend: 'top',\n\t\t\t\t\tchartArea: {\n\t\t\t\t\t\theight: '75%',\n\t\t\t\t\t\twidth: '85%',\n\t\t\t\t\t},\n\t\t\t\t\tcolors: ['#606C38','#E85D75','#EF8354','#C64191','#731963'],\n\t\t\t\t\theight: 560,\n\t\t\t\t\tlineWidth: 4,\n\t\t\t\t\tseriesType: 'bars',\n\t\t\t\t\tseries: self.get_chart_series_options(),\n\t\t\t\t\tvAxes: {\n\t\t\t\t\t\t0: {\n\t\t\t\t\t\t\tformat: this.options.currency_format || 'currency',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t1: {\n\t\t\t\t\t\t\tformat: '',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t};\n\n\t\t\tif ( data.length ) {\n\n\t\t\t\tdata = google.visualization.arrayToDataTable( data );\n\t\t\t\tdata.sort( [{column: 0}] );\n\t\t\t\tchart.draw( data, options );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Check if a widget is still loading\n\t\t *\n\t\t * @return bool\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.is_loading_finished = function() {\n\t\t\tif ( $( '.llms-widget.is-loading' ).length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * Start loading all widgets on the current screen\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.load_widgets = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.$widgets.each( function() {\n\t\t\t\tself.load_widget( $( this ) );\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Load a specific widget.\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 7.2.0 Change h1 tag to .llms-widget-content.\n\t\t * @since 7.3.0 Append `_ajax_nonce` to the ajax data packet.\n\t\t *\n\t\t * @param {Object} $widget The jQuery selector of the widget element.\n\t\t * @return {Void}\n\t\t */\n\t\tthis.load_widget = function( $widget ) {\n\n\t\t\tvar self = this,\n\t\t\t\tmethod = $widget.attr( 'data-method' ),\n\t\t\t\t$content = $widget.find( '.llms-widget-content' ),\n\t\t\t\t$retry = $widget.find( '.llms-reload-widget' ),\n\t\t\t\tcontent_text = LLMS.l10n.translate( 'Error' ),\n\t\t\t\tstatus;\n\n\t\t\t$widget.addClass( 'is-loading' );\n\n\t\t\t$.ajax( {\n\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'llms_widget_' + method,\n\t\t\t\t\tdates: self.query.dates,\n\t\t\t\t\tcourses: self.query.current_courses,\n\t\t\t\t\tmemberships: self.query.current_memberships,\n\t\t\t\t\tstudents: self.query.current_students,\n\t\t\t\t\t_ajax_nonce: window.llms.ajax_nonce,\n\t\t\t\t},\n\t\t\t\tmethod: 'POST',\n\t\t\t\ttimeout: self.timeout,\n\t\t\t\turl: window.ajaxurl,\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\tstatus = 'success';\n\n\t\t\t\t\tif ( 'undefined' !== typeof r.response ) {\n\n\t\t\t\t\t\tcontent_text = r.response;\n\n\t\t\t\t\t\tself.data[method] = {\n\t\t\t\t\t\t\tchart_data: r.chart_data,\n\t\t\t\t\t\t\tresponse: r.response,\n\t\t\t\t\t\t\tresults: r.results,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t$retry.remove();\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\t\t\t\terror: function( r ) {\n\n\t\t\t\t\tstatus = 'error';\n\n\t\t\t\t},\n\t\t\t\tcomplete: function( r ) {\n\n\t\t\t\t\tif ( 'error' === status ) {\n\n\t\t\t\t\t\tif ( 'timeout' === r.statusText ) {\n\n\t\t\t\t\t\t\tcontent_text = LLMS.l10n.translate( 'Request timed out' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tcontent_text = LLMS.l10n.translate( 'Error' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! $retry.length ) {\n\n\t\t\t\t\t\t\t$retry = $( '' + LLMS.l10n.translate( 'Retry' ) + ' ' );\n\t\t\t\t\t\t\t$retry.on( 'click', function( e ) {\n\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tself.load_widget( $widget );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t$widget.append( $retry );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t$widget.removeClass( 'is-loading' );\n\t\t\t\t\t$content.html( content_text );\n\n\t\t\t\t\tself.widget_finished( $widget );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Get the time in seconds between the queried dates\n\t\t *\n\t\t * @return int\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.get_date_diff = function() {\n\n\t\t\tvar end = new Date( this.query.dates.end ),\n\t\t\t\tstart = new Date( this.query.dates.start );\n\n\t\t\treturn Math.abs( end.getTime() - start.getTime() );\n\n\t\t};\n\n\t\t/**\n\t\t * Builds an object of data that can be used to, ultimately, draw the screen's chart\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.0.0\n\t\t * @version 3.1.6\n\t\t */\n\t\tthis.get_chart_data_object = function() {\n\n\t\t\tvar self = this,\n\t\t\t\tmax_for_days = ( ( 1000 * 3600 * 24 ) * 30 ) * 4, // 4 months in seconds\n\t\t\t\tdiff = this.get_date_diff(),\n\t\t\t\tdata = {},\n\t\t\t\tres, i, d, date;\n\n\t\t\tfor ( var method in self.data ) {\n\n\t\t\t\tif ( ! self.data.hasOwnProperty( method ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( 'object' !== typeof self.data[ method ].chart_data || 'object' !== typeof self.data[ method ].results ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tres = self.data[ method ].results;\n\n\t\t\t\tif ( res ) {\n\n\t\t\t\t\tfor ( i = 0; i < res.length; i++ ) {\n\n\t\t\t\t\t\td = this.init_date( res[i].date );\n\n\t\t\t\t\t\t// group by days\n\t\t\t\t\t\tif ( diff <= max_for_days ) {\n\t\t\t\t\t\t\tdate = new Date( d.getFullYear(), d.getMonth(), d.getDate() );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// group by months\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tdate = new Date( d.getFullYear(), d.getMonth(), 1 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! data[ date ] ) {\n\t\t\t\t\t\t\tdata[ date ] = this.get_empty_data_object( date )\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch ( self.data[ method ].chart_data.type ) {\n\n\t\t\t\t\t\t\tcase 'amount':\n\t\t\t\t\t\t\t\tdata[ date ][ method ] = data[ date ][ method ] + ( res[i][ self.data[ method ].chart_data.key ] * 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'count':\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tdata[ date ][ method ]++;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t};\n\n\t\t/**\n\t\t * Get the data google charts needs to initiate the current chart\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.get_chart_data = function() {\n\n\t\t\tvar self = this,\n\t\t\t\tobj = self.get_chart_data_object(),\n\t\t\t\tdata = self.get_chart_headers();\n\n\t\t\tfor ( var date in obj ) {\n\n\t\t\t\tif ( ! obj.hasOwnProperty( date ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar row = [ obj[ date ]._date ];\n\n\t\t\t\tfor ( var item in obj[ date ] ) {\n\t\t\t\t\tif ( ! obj[ date ].hasOwnProperty( item ) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// skip meta items\n\t\t\t\t\tif ( 0 === item.indexOf( '_' ) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\trow.push( obj[ date ][ item ] );\n\t\t\t\t}\n\n\t\t\t\tdata.push( row );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t};\n\n\t\t/**\n\t\t * Get a stub of the data object used by this.get_data_object\n\t\t *\n\t\t * @param string date date to instantiate the object with\n\t\t * @return obj\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.get_empty_data_object = function( date ) {\n\n\t\t\tvar self = this,\n\t\t\t\tobj = {\n\t\t\t\t\t_date: date,\n\t\t\t};\n\n\t\t\tfor ( var method in self.data ) {\n\t\t\t\tif ( ! self.data.hasOwnProperty( method ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( self.data[ method ].chart_data ) {\n\t\t\t\t\tobj[ method ] = 0;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn obj;\n\n\t\t};\n\n\t\t/**\n\t\t * Builds an array of chart header data\n\t\t *\n\t\t * @return array\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.get_chart_headers = function() {\n\n\t\t\tvar self = this,\n\t\t\t\th = [];\n\n\t\t\t// date headers go first\n\t\t\th.push( {\n\t\t\t\tlabel: LLMS.l10n.translate( 'Date' ),\n\t\t\t\tid: 'date',\n\t\t\t\ttype: 'date',\n\t\t\t} );\n\n\t\t\tfor ( var method in self.data ) {\n\t\t\t\tif ( ! self.data.hasOwnProperty( method ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( self.data[ method ].chart_data ) {\n\t\t\t\t\th.push( self.data[ method ].chart_data.header );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn [ h ];\n\n\t\t};\n\n\t\t/**\n\t\t * Get a object of series options needed to draw the chart.\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since Fix issue that produced series options not aligned with the chart data.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.get_chart_series_options = function() {\n\n\t\t\tvar self = this,\n\t\t\t\toptions = {}\n\t\t\t\ti = 0;\n\n\t\t\tfor ( var method in self.data ) {\n\t\t\t\tif ( ! self.data.hasOwnProperty( method ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( self.data[ method ].chart_data ) {\n\n\t\t\t\t\tvar type = self.data[ method ].chart_data.type;\n\n\t\t\t\t\toptions[ i ] = {\n\t\t\t\t\t\ttype: ( 'count' === type ) ? 'bars' : 'line',\n\t\t\t\t\t\ttargetAxisIndex: ( 'count' === type ) ? 1 : 0,\n\t\t\t\t\t};\n\n\t\t\t\t\ti++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn options;\n\n\t\t};\n\n\t\t/**\n\t\t * Instantiate a Date instance via a date string\n\t\t *\n\t\t * @param string string date string, expected format should be from php date( 'Y-m-d H:i:s' )\n\t\t * @return obj\n\t\t * @since 3.1.4\n\t\t * @version 3.1.5\n\t\t */\n\t\tthis.init_date = function( string ) {\n\n\t\t\tvar parts, date, time;\n\n\t\t\tparts = string.split( ' ' );\n\n\t\t\tdate = parts[0].split( '-' );\n\t\t\ttime = parts[1].split( ':' );\n\n\t\t\treturn new Date( date[0], date[1] - 1, date[2], time[0], time[1], time[2] );\n\n\t\t};\n\n\t\t/**\n\t\t * Called when a widget is finished loading\n\t\t * Updates the current chart with the new data from the widget\n\t\t *\n\t\t * @param obj $widget jQuery selector of the widget element\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.widget_finished = function( $widget ) {\n\n\t\t\tif ( this.is_loading_finished() ) {\n\t\t\t\tthis.draw_chart();\n\t\t\t}\n\n\t\t};\n\n\t\t// go\n\t\tthis.init();\n\n\t\t// return\n\t\treturn this;\n\n\t};\n\n\twindow.llms.analytics = new Analytics( window.llms.analytics || {} );\n\n} )( jQuery );\n"],"names":["$","window","llms","analytics","opts","length","this","charts_loaded","data","query","parseJSON","text","timeout","options","$widgets","init","google","charts","load","packages","setOnLoadCallback","charts_ready","bind","load_widgets","fn","datepicker","dateFormat","maxDate","llmsStudentsSelect2","multiple","placeholder","LLMS","l10n","translate","allow_clear","on","e","preventDefault","slideToggle","val","attr","submit","draw_chart","chart","is_loading_finished","el","document","getElementById","visualization","ComboChart","get_chart_data","legend","chartArea","height","width","colors","lineWidth","seriesType","series","get_chart_series_options","vAxes","0","format","currency_format","1","arrayToDataTable","sort","column","draw","self","each","load_widget","$widget","status","method","$content","find","$retry","content_text","addClass","ajax","action","dates","courses","current_courses","memberships","current_memberships","students","current_students","_ajax_nonce","ajax_nonce","url","ajaxurl","success","r","response","chart_data","results","remove","error","complete","statusText","append","removeClass","html","widget_finished","get_date_diff","end","Date","start","Math","abs","getTime","get_chart_data_object","res","i","date","diff","hasOwnProperty","d","init_date","getFullYear","getMonth","getDate","get_empty_data_object","type","key","obj","get_chart_headers","item","row","_date","indexOf","push","h","label","id","header","targetAxisIndex","string","parts","split","time","jQuery"],"mappings":"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","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-builder.js.map b/assets/maps/js/llms-builder.js.map
new file mode 100644
index 0000000000..2ce8ec9a78
--- /dev/null
+++ b/assets/maps/js/llms-builder.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../../../config-wrap-start-default.js","vendor/almond.js","vendor/wp-hooks.js","underscore.js","backbone.js","jquery.js","vendor/backbone.collectionView.js","vendor/backbone.trackit.js","Models/Image.js","Models/_Relationships.js","Models/QuestionChoice.js","Collections/QuestionChoices.js","Models/QuestionType.js","Models/_Utilities.js","Models/Question.js","Collections/Questions.js","Schemas/Quiz.js","Models/Quiz.js","Schemas/Lesson.js","Models/Lesson.js","Collections/Lessons.js","Collections/QuestionTypes.js","Models/Section.js","Collections/Sections.js","Collections/loader.js","Models/Abstract.js","Models/Course.js","Models/loader.js","Views/_Detachable.js","Views/_Editable.js","Views/_Receivable.js","Views/_Shiftable.js","Views/_Subview.js","Views/_Trashable.js","Views/_loader.js","Controllers/Construct.js","Controllers/Debug.js","Controllers/Schemas.js","Controllers/Sync.js","Views/Lesson.js","Views/LessonList.js","Views/Section.js","Views/SectionList.js","Views/Course.js","Views/SettingsFields.js","Views/LessonEditor.js","Views/Popover.js","Views/PostSearch.js","Views/QuestionType.js","Views/QuestionBank.js","Views/QuestionChoice.js","Views/QuestionChoiceList.js","Views/Question.js","Views/QuestionList.js","Views/Quiz.js","Views/Assignment.js","Views/Editor.js","Views/Elements.js","Views/Utilities.js","Views/Sidebar.js","main.js","../../../config-wrap-end-default.js"],"names":[],"mappings":"AAAA;AACA,ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC72CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC1YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACnOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC9pBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AChwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACxQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACxRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACpTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACnaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACjUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACtWA;AACA","file":"../../js/llms-builder.js","sourcesContent":["(function($){\n","/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n\tvar main, req, makeMap, handlers,\n\t\tdefined = {},\n\t\twaiting = {},\n\t\tconfig = {},\n\t\tdefining = {},\n\t\thasOwn = Object.prototype.hasOwnProperty,\n\t\taps = [].slice,\n\t\tjsSuffixRegExp = /\\.js$/;\n\n\tfunction hasProp(obj, prop) {\n\t\treturn hasOwn.call(obj, prop);\n\t}\n\n\t/**\n\t * Given a relative module name, like ./something, normalize it to\n\t * a real name that can be mapped to a path.\n\t * @param {String} name the relative name\n\t * @param {String} baseName a real name that the name arg is relative\n\t * to.\n\t * @returns {String} normalized name\n\t */\n\tfunction normalize(name, baseName) {\n\t\tvar nameParts, nameSegment, mapValue, foundMap, lastIndex,\n\t\t\tfoundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n\t\t\tbaseParts = baseName && baseName.split(\"/\"),\n\t\t\tmap = config.map,\n\t\t\tstarMap = (map && map['*']) || {};\n\n\t\t//Adjust any relative paths.\n\t\tif (name) {\n\t\t\tname = name.split('/');\n\t\t\tlastIndex = name.length - 1;\n\n\t\t\t// If wanting node ID compatibility, strip .js from end\n\t\t\t// of IDs. Have to do this here, and not in nameToUrl\n\t\t\t// because node allows either .js or non .js to map\n\t\t\t// to same file.\n\t\t\tif (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n\t\t\t\tname[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n\t\t\t}\n\n\t\t\t// Starts with a '.' so need the baseName\n\t\t\tif (name[0].charAt(0) === '.' && baseParts) {\n\t\t\t\t//Convert baseName to array, and lop off the last part,\n\t\t\t\t//so that . matches that 'directory' and not name of the baseName's\n\t\t\t\t//module. For instance, baseName of 'one/two/three', maps to\n\t\t\t\t//'one/two/three.js', but we want the directory, 'one/two' for\n\t\t\t\t//this normalization.\n\t\t\t\tnormalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n\t\t\t\tname = normalizedBaseParts.concat(name);\n\t\t\t}\n\n\t\t\t//start trimDots\n\t\t\tfor (i = 0; i < name.length; i++) {\n\t\t\t\tpart = name[i];\n\t\t\t\tif (part === '.') {\n\t\t\t\t\tname.splice(i, 1);\n\t\t\t\t\ti -= 1;\n\t\t\t\t} else if (part === '..') {\n\t\t\t\t\t// If at the start, or previous value is still ..,\n\t\t\t\t\t// keep them so that when converted to a path it may\n\t\t\t\t\t// still work when converted to a path, even though\n\t\t\t\t\t// as an ID it is less than ideal. In larger point\n\t\t\t\t\t// releases, may be better to just kick out an error.\n\t\t\t\t\tif (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (i > 0) {\n\t\t\t\t\t\tname.splice(i - 1, 2);\n\t\t\t\t\t\ti -= 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t//end trimDots\n\n\t\t\tname = name.join('/');\n\t\t}\n\n\t\t//Apply map config if available.\n\t\tif ((baseParts || starMap) && map) {\n\t\t\tnameParts = name.split('/');\n\n\t\t\tfor (i = nameParts.length; i > 0; i -= 1) {\n\t\t\t\tnameSegment = nameParts.slice(0, i).join(\"/\");\n\n\t\t\t\tif (baseParts) {\n\t\t\t\t\t//Find the longest baseName segment match in the config.\n\t\t\t\t\t//So, do joins on the biggest to smallest lengths of baseParts.\n\t\t\t\t\tfor (j = baseParts.length; j > 0; j -= 1) {\n\t\t\t\t\t\tmapValue = map[baseParts.slice(0, j).join('/')];\n\n\t\t\t\t\t\t//baseName segment has config, find if it has one for\n\t\t\t\t\t\t//this name.\n\t\t\t\t\t\tif (mapValue) {\n\t\t\t\t\t\t\tmapValue = mapValue[nameSegment];\n\t\t\t\t\t\t\tif (mapValue) {\n\t\t\t\t\t\t\t\t//Match, update name to the new value.\n\t\t\t\t\t\t\t\tfoundMap = mapValue;\n\t\t\t\t\t\t\t\tfoundI = i;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (foundMap) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t//Check for a star map match, but just hold on to it,\n\t\t\t\t//if there is a shorter segment match later in a matching\n\t\t\t\t//config, then favor over this star map.\n\t\t\t\tif (!foundStarMap && starMap && starMap[nameSegment]) {\n\t\t\t\t\tfoundStarMap = starMap[nameSegment];\n\t\t\t\t\tstarI = i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!foundMap && foundStarMap) {\n\t\t\t\tfoundMap = foundStarMap;\n\t\t\t\tfoundI = starI;\n\t\t\t}\n\n\t\t\tif (foundMap) {\n\t\t\t\tnameParts.splice(0, foundI, foundMap);\n\t\t\t\tname = nameParts.join('/');\n\t\t\t}\n\t\t}\n\n\t\treturn name;\n\t}\n\n\tfunction makeRequire(relName, forceSync) {\n\t\treturn function () {\n\t\t\t//A version of a require function that passes a moduleName\n\t\t\t//value for items that may need to\n\t\t\t//look up paths relative to the moduleName\n\t\t\tvar args = aps.call(arguments, 0);\n\n\t\t\t//If first arg is not require('string'), and there is only\n\t\t\t//one arg, it is the array form without a callback. Insert\n\t\t\t//a null so that the following concat is correct.\n\t\t\tif (typeof args[0] !== 'string' && args.length === 1) {\n\t\t\t\targs.push(null);\n\t\t\t}\n\t\t\treturn req.apply(undef, args.concat([relName, forceSync]));\n\t\t};\n\t}\n\n\tfunction makeNormalize(relName) {\n\t\treturn function (name) {\n\t\t\treturn normalize(name, relName);\n\t\t};\n\t}\n\n\tfunction makeLoad(depName) {\n\t\treturn function (value) {\n\t\t\tdefined[depName] = value;\n\t\t};\n\t}\n\n\tfunction callDep(name) {\n\t\tif (hasProp(waiting, name)) {\n\t\t\tvar args = waiting[name];\n\t\t\tdelete waiting[name];\n\t\t\tdefining[name] = true;\n\t\t\tmain.apply(undef, args);\n\t\t}\n\n\t\tif (!hasProp(defined, name) && !hasProp(defining, name)) {\n\t\t\tthrow new Error('No ' + name);\n\t\t}\n\t\treturn defined[name];\n\t}\n\n\t//Turns a plugin!resource to [plugin, resource]\n\t//with the plugin being undefined if the name\n\t//did not have a plugin prefix.\n\tfunction splitPrefix(name) {\n\t\tvar prefix,\n\t\t\tindex = name ? name.indexOf('!') : -1;\n\t\tif (index > -1) {\n\t\t\tprefix = name.substring(0, index);\n\t\t\tname = name.substring(index + 1, name.length);\n\t\t}\n\t\treturn [prefix, name];\n\t}\n\n\t//Creates a parts array for a relName where first part is plugin ID,\n\t//second part is resource ID. Assumes relName has already been normalized.\n\tfunction makeRelParts(relName) {\n\t\treturn relName ? splitPrefix(relName) : [];\n\t}\n\n\t/**\n\t * Makes a name map, normalizing the name, and using a plugin\n\t * for normalization if necessary. Grabs a ref to plugin\n\t * too, as an optimization.\n\t */\n\tmakeMap = function (name, relParts) {\n\t\tvar plugin,\n\t\t\tparts = splitPrefix(name),\n\t\t\tprefix = parts[0],\n\t\t\trelResourceName = relParts[1];\n\n\t\tname = parts[1];\n\n\t\tif (prefix) {\n\t\t\tprefix = normalize(prefix, relResourceName);\n\t\t\tplugin = callDep(prefix);\n\t\t}\n\n\t\t//Normalize according\n\t\tif (prefix) {\n\t\t\tif (plugin && plugin.normalize) {\n\t\t\t\tname = plugin.normalize(name, makeNormalize(relResourceName));\n\t\t\t} else {\n\t\t\t\tname = normalize(name, relResourceName);\n\t\t\t}\n\t\t} else {\n\t\t\tname = normalize(name, relResourceName);\n\t\t\tparts = splitPrefix(name);\n\t\t\tprefix = parts[0];\n\t\t\tname = parts[1];\n\t\t\tif (prefix) {\n\t\t\t\tplugin = callDep(prefix);\n\t\t\t}\n\t\t}\n\n\t\t//Using ridiculous property names for space reasons\n\t\treturn {\n\t\t\tf: prefix ? prefix + '!' + name : name, //fullName\n\t\t\tn: name,\n\t\t\tpr: prefix,\n\t\t\tp: plugin\n\t\t};\n\t};\n\n\tfunction makeConfig(name) {\n\t\treturn function () {\n\t\t\treturn (config && config.config && config.config[name]) || {};\n\t\t};\n\t}\n\n\thandlers = {\n\t\trequire: function (name) {\n\t\t\treturn makeRequire(name);\n\t\t},\n\t\texports: function (name) {\n\t\t\tvar e = defined[name];\n\t\t\tif (typeof e !== 'undefined') {\n\t\t\t\treturn e;\n\t\t\t} else {\n\t\t\t\treturn (defined[name] = {});\n\t\t\t}\n\t\t},\n\t\tmodule: function (name) {\n\t\t\treturn {\n\t\t\t\tid: name,\n\t\t\t\turi: '',\n\t\t\t\texports: defined[name],\n\t\t\t\tconfig: makeConfig(name)\n\t\t\t};\n\t\t}\n\t};\n\n\tmain = function (name, deps, callback, relName) {\n\t\tvar cjsModule, depName, ret, map, i, relParts,\n\t\t\targs = [],\n\t\t\tcallbackType = typeof callback,\n\t\t\tusingExports;\n\n\t\t//Use name if no relName\n\t\trelName = relName || name;\n\t\trelParts = makeRelParts(relName);\n\n\t\t//Call the callback to define the module, if necessary.\n\t\tif (callbackType === 'undefined' || callbackType === 'function') {\n\t\t\t//Pull out the defined dependencies and pass the ordered\n\t\t\t//values to the callback.\n\t\t\t//Default to [require, exports, module] if no deps\n\t\t\tdeps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n\t\t\tfor (i = 0; i < deps.length; i += 1) {\n\t\t\t\tmap = makeMap(deps[i], relParts);\n\t\t\t\tdepName = map.f;\n\n\t\t\t\t//Fast path CommonJS standard dependencies.\n\t\t\t\tif (depName === \"require\") {\n\t\t\t\t\targs[i] = handlers.require(name);\n\t\t\t\t} else if (depName === \"exports\") {\n\t\t\t\t\t//CommonJS module spec 1.1\n\t\t\t\t\targs[i] = handlers.exports(name);\n\t\t\t\t\tusingExports = true;\n\t\t\t\t} else if (depName === \"module\") {\n\t\t\t\t\t//CommonJS module spec 1.1\n\t\t\t\t\tcjsModule = args[i] = handlers.module(name);\n\t\t\t\t} else if (hasProp(defined, depName) ||\n\t\t\t\t\t\t hasProp(waiting, depName) ||\n\t\t\t\t\t\t hasProp(defining, depName)) {\n\t\t\t\t\targs[i] = callDep(depName);\n\t\t\t\t} else if (map.p) {\n\t\t\t\t\tmap.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n\t\t\t\t\targs[i] = defined[depName];\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(name + ' missing ' + depName);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tret = callback ? callback.apply(defined[name], args) : undefined;\n\n\t\t\tif (name) {\n\t\t\t\t//If setting exports via \"module\" is in play,\n\t\t\t\t//favor that over return value and exports. After that,\n\t\t\t\t//favor a non-undefined return value over exports use.\n\t\t\t\tif (cjsModule && cjsModule.exports !== undef &&\n\t\t\t\t\t\tcjsModule.exports !== defined[name]) {\n\t\t\t\t\tdefined[name] = cjsModule.exports;\n\t\t\t\t} else if (ret !== undef || !usingExports) {\n\t\t\t\t\t//Use the return value from the function.\n\t\t\t\t\tdefined[name] = ret;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (name) {\n\t\t\t//May just be an object definition for the module. Only\n\t\t\t//worry about defining if have a module name.\n\t\t\tdefined[name] = callback;\n\t\t}\n\t};\n\n\trequirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n\t\tif (typeof deps === \"string\") {\n\t\t\tif (handlers[deps]) {\n\t\t\t\t//callback in this case is really relName\n\t\t\t\treturn handlers[deps](callback);\n\t\t\t}\n\t\t\t//Just return the module wanted. In this scenario, the\n\t\t\t//deps arg is the module name, and second arg (if passed)\n\t\t\t//is just the relName.\n\t\t\t//Normalize module name, if it contains . or ..\n\t\t\treturn callDep(makeMap(deps, makeRelParts(callback)).f);\n\t\t} else if (!deps.splice) {\n\t\t\t//deps is a config object, not an array.\n\t\t\tconfig = deps;\n\t\t\tif (config.deps) {\n\t\t\t\treq(config.deps, config.callback);\n\t\t\t}\n\t\t\tif (!callback) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (callback.splice) {\n\t\t\t\t//callback is an array, which means it is a dependency list.\n\t\t\t\t//Adjust args if there are dependencies\n\t\t\t\tdeps = callback;\n\t\t\t\tcallback = relName;\n\t\t\t\trelName = null;\n\t\t\t} else {\n\t\t\t\tdeps = undef;\n\t\t\t}\n\t\t}\n\n\t\t//Support require(['a'])\n\t\tcallback = callback || function () {};\n\n\t\t//If relName is a function, it is an errback handler,\n\t\t//so remove it.\n\t\tif (typeof relName === 'function') {\n\t\t\trelName = forceSync;\n\t\t\tforceSync = alt;\n\t\t}\n\n\t\t//Simulate async callback;\n\t\tif (forceSync) {\n\t\t\tmain(undef, deps, callback, relName);\n\t\t} else {\n\t\t\t//Using a non-zero value because of concern for what old browsers\n\t\t\t//do, and latest browsers \"upgrade\" to 4 if lower value is used:\n\t\t\t//http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n\t\t\t//If want a value immediately, use require('id') instead -- something\n\t\t\t//that works in almond on the global level, but not guaranteed and\n\t\t\t//unlikely to work in other AMD implementations.\n\t\t\tsetTimeout(function () {\n\t\t\t\tmain(undef, deps, callback, relName);\n\t\t\t}, 4);\n\t\t}\n\n\t\treturn req;\n\t};\n\n\t/**\n\t * Just drops the config on the floor, but returns req in case\n\t * the config return value is used.\n\t */\n\treq.config = function (cfg) {\n\t\treturn req(cfg);\n\t};\n\n\t/**\n\t * Expose module registry for debugging and tooling\n\t */\n\trequirejs._defined = defined;\n\n\tdefine = function (name, deps, callback) {\n\t\tif (typeof name !== 'string') {\n\t\t\tthrow new Error('See almond README: incorrect module build, no module name');\n\t\t}\n\n\t\t//This module may not have dependencies\n\t\tif (!deps.splice) {\n\t\t\t//deps is not an array, so probably means\n\t\t\t//an object literal or factory function for\n\t\t\t//the value. Adjust args.\n\t\t\tcallback = deps;\n\t\t\tdeps = [];\n\t\t}\n\n\t\tif (!hasProp(defined, name) && !hasProp(waiting, name)) {\n\t\t\twaiting[name] = [name, deps, callback];\n\t\t}\n\t};\n\n\tdefine.amd = {\n\t\tjQuery: true\n\t};\n}());\n\ndefine(\"vendor/almond\", function(){});\n\n","/**\n * This is a slightly modified and forward compatible version of the @wordpress/hooks package\n * as included in the Gutenberg feature plugin version 3.8.0\n */\nwindow.llms=window.llms||{};\n// use the core hooks if available\nif ( 'undefined' !== typeof window.wp && 'undefined' !== typeof window.wp.hooks ) {\n\twindow.llms.hooks = window.wp.hooks;\n// otherwise load our own\n} else {\n\twindow.llms.hooks=function(n){var r={};function e(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=n,e.c=r,e.d=function(n,r,t){e.o(n,r)||Object.defineProperty(n,r,{configurable:!1,enumerable:!0,get:t})},e.r=function(n){Object.defineProperty(n,\"__esModule\",{value:!0})},e.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(r,\"a\",r),r},e.o=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},e.p=\"\",e(e.s=209)}({209:function(n,r,e){\"use strict\";e.r(r);var t=function(n){return\"string\"!=typeof n||\"\"===n?(console.error(\"The namespace must be a non-empty string.\"),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\\-\\/]*$/.test(n)||(console.error(\"The namespace can only contain numbers, letters, dashes, periods, underscores and slashes.\"),!1)};var o=function(n){return\"string\"!=typeof n||\"\"===n?(console.error(\"The hook name must be a non-empty string.\"),!1):/^__/.test(n)?(console.error(\"The hook name cannot begin with `__`.\"),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(n)||(console.error(\"The hook name can only contain numbers, letters, dashes, periods and underscores.\"),!1)};var i=function(n){return function(r,e,i){var u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;if(o(r)&&t(e))if(\"function\"==typeof i)if(\"number\"==typeof u){var c={callback:i,priority:u,namespace:e};if(n[r]){for(var a=n[r].handlers,l=0;lu);)l++;a.splice(l,0,c),(n.__current||[]).forEach(function(n){n.name===r&&n.currentIndex>=l&&n.currentIndex++})}else n[r]={handlers:[c],runs:0};\"hookAdded\"!==r&&b(\"hookAdded\",r,e,i,u)}else console.error(\"If specified, the hook priority must be a number.\");else console.error(\"The hook callback must be a function.\")}};var u=function(n,r){return function(e,i){if(o(e)&&(r||t(i))){if(!n[e])return 0;var u=0;if(r)u=n[e].handlers.length,n[e]={runs:n[e].runs,handlers:[]};else for(var c=n[e].handlers,a=function(r){c[r].namespace===i&&(c.splice(r,1),u++,(n.__current||[]).forEach(function(n){n.name===e&&n.currentIndex>=r&&n.currentIndex--}))},l=c.length-1;l>=0;l--)a(l);return\"hookRemoved\"!==e&&b(\"hookRemoved\",e,i),u}}};var c=function(n){return function(r){return r in n}};var a=function(n,r){return function(e){n[e]||(n[e]={handlers:[],runs:0}),n[e].runs++;for(var t=n[e].handlers,o=arguments.length,i=new Array(o>1?o-1:0),u=1;u li, tbody > tr > td\" : \"_listItem_onMousedown\",\n\t\t\t\"dblclick > li, tbody > tr > td\" : \"_listItem_onDoubleClick\",\n\t\t\t\"click\" : \"_listBackground_onClick\",\n\t\t\t\"click ul.collection-view, table.collection-view\" : \"_listBackground_onClick\",\n\t\t\t\"keydown\" : \"_onKeydown\"\n\t\t},\n\n\t\t// only used if Backbone.Courier is available\n\t\tspawnMessages : {\n\t\t\t\"focus\" : \"focus\"\n\t\t},\n\n\t\t//only used if Backbone.Courier is available\n\t\tpassMessages : { \"*\" : \".\" },\n\n\t\t// viewOption definitions with default values.\n\t\tinitializationOptions : [\n\t\t\t{ \"collection\" : null },\n\t\t\t{ \"modelView\" : null },\n\t\t\t{ \"modelViewOptions\" : {} },\n\t\t\t{ \"itemTemplate\" : null },\n\t\t\t{ \"itemTemplateFunction\" : null },\n\t\t\t{ \"selectable\" : true },\n\t\t\t{ \"clickToSelect\" : true },\n\t\t\t{ \"selectableModelsFilter\" : null },\n\t\t\t{ \"visibleModelsFilter\" : null },\n\t\t\t{ \"sortableModelsFilter\" : null },\n\t\t\t{ \"selectMultiple\" : false },\n\t\t\t{ \"clickToToggle\" : false },\n\t\t\t{ \"processKeyEvents\" : true },\n\t\t\t{ \"sortable\" : false },\n\t\t\t{ \"sortableOptions\" : null },\n\t\t\t{ \"reuseModelViews\" : true },\n\t\t\t{ \"detachedRendering\" : false },\n\t\t\t{ \"emptyListCaption\" : null }\n\t\t],\n\n\t\tinitialize : function( options ) {\n\t\t\tBackbone.ViewOptions.add( this, \"initializationOptions\" ); // setup the ViewOptions functionality.\n\t\t\tthis.setOptions( options ); // and make use of any provided options\n\n\t\t\tif( ! this.collection ) this.collection = new Backbone.Collection();\n\n\t\t\tthis._hasBeenRendered = false;\n\n\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\tBackbone.Courier.add( this );\n\t\t\t}\n\n\t\t\tthis.$el.data( \"view\", this ); // needed for connected sortable lists\n\t\t\tthis.$el.addClass( \"collection-view collection-list\" ); // collection-list is in there for legacy purposes\n\t\t\tif( this.selectable ) this.$el.addClass( \"selectable\" );\n\n\t\t\tif( this.selectable && this.processKeyEvents )\n\t\t\t\tthis.$el.attr( \"tabindex\", 0 ); // so we get keyboard events\n\n\t\t\tthis.selectedItems = [];\n\n\t\t\tthis._updateItemTemplate();\n\n\t\t\tif( this.collection )\n\t\t\t\tthis._registerCollectionEvents();\n\n\t\t\tthis.viewManager = new ChildViewContainer();\n\t\t},\n\n\t\t_onOptionsChanged : function( changedOptions, originalOptions ) {\n\t\t\tvar _this = this;\n\t\t\tvar rerender = false;\n\n\t\t\t_.each( _.keys( changedOptions ), function( changedOptionKey ) {\n\t\t\t\tvar newVal = changedOptions[ changedOptionKey ];\n\t\t\t\tvar oldVal = originalOptions[ changedOptionKey ];\n\t\t\t\tswitch( changedOptionKey ) {\n\t\t\t\t\tcase \"collection\" :\n\t\t\t\t\t\tif ( newVal !== oldVal ) {\n\t\t\t\t\t\t\t_this.stopListening( oldVal );\n\t\t\t\t\t\t\t_this._registerCollectionEvents();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"selectMultiple\" :\n\t\t\t\t\t\tif( ! newVal && _this.selectedItems.length > 1 )\n\t\t\t\t\t\t\t_this.setSelectedModel( _.first( _this.selectedItems ), { by : \"cid\" } );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"selectable\" :\n\t\t\t\t\t\tif( ! newVal && _this.selectedItems.length > 0 )\n\t\t\t\t\t\t\t_this.setSelectedModels( [] );\n\n\t\t\t\t\t\tif( newVal && this.processKeyEvents ) _this.$el.attr( \"tabindex\", 0 ); // so we get keyboard events\n\t\t\t\t\t\telse _this.$el.removeAttr( \"tabindex\", 0 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sortable\" :\n\t\t\t\t\t\tchangedOptions.sortable ? _this._setupSortable() : _this.$el.sortable( \"destroy\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"selectableModelsFilter\" :\n\t\t\t\t\t\t_this.reapplyFilter( 'selectableModels' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sortableOptions\" :\n\t\t\t\t\t\t_this.$el.sortable( \"destroy\" );\n\t\t\t\t\t\t_this._setupSortable();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sortableModelsFilter\" :\n\t\t\t\t\t\t_this.reapplyFilter( 'sortableModels' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"visibleModelsFilter\" :\n\t\t\t\t\t\t_this.reapplyFilter( 'visibleModels' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"itemTemplate\" :\n\t\t\t\t\t\t_this._updateItemTemplate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"processKeyEvents\" :\n\t\t\t\t\t\tif( newVal && this.selectable ) _this.$el.attr( \"tabindex\", 0 ); // so we get keyboard events\n\t\t\t\t\t\telse _this.$el.removeAttr( \"tabindex\", 0 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"modelView\" :\n\t\t\t\t\t\t//need to remove all old view instances\n\t\t\t\t\t\t_this.viewManager.each( function( view ) {\n\t\t\t\t\t\t\t_this.viewManager.remove( view );\n\t\t\t\t\t\t\t// destroy the View itself\n\t\t\t\t\t\t\tview.remove();\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif( _.contains( kOptionsRequiringRerendering, changedOptionKey ) ) rerender = true;\n\t\t\t} );\n\n\t\t\tif( this._hasBeenRendered && rerender ) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t},\n\n\t\tsetOption : function( optionName, optionValue ) { // now is merely a wrapper around backbone.viewOptions' setOptions()\n\t\t\tvar optionHash = {};\n\t\t\toptionHash[ optionName ] = optionValue;\n\t\t\tthis.setOptions( optionHash );\n\t\t},\n\n\t\tgetSelectedModel : function( options ) {\n\t\t\treturn this.selectedItems.length ? _.first( this.getSelectedModels( options ) ) : null;\n\t\t},\n\n\t\tgetSelectedModels : function ( options ) {\n\t\t\tvar _this = this;\n\n\t\t\toptions = _.extend( {}, {\n\t\t\t\tby : kDefaultReferenceBy\n\t\t\t}, options );\n\n\t\t\tvar referenceBy = options.by;\n\t\t\tvar items = [];\n\n\t\t\tswitch( referenceBy ) {\n\t\t\t\tcase \"id\" :\n\t\t\t\t\t_.each( this.selectedItems, function ( item ) {\n\t\t\t\t\t\titems.push( _this.collection.get( item ).id );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cid\" :\n\t\t\t\t\titems = items.concat( this.selectedItems );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"offset\" :\n\t\t\t\t\tvar curLineNumber = 0;\n\n\t\t\t\t\tvar itemElements = this._getVisibleItemEls();\n\n\t\t\t\t\titemElements.each( function() {\n\t\t\t\t\t\tvar thisItemEl = $( this );\n\t\t\t\t\t\tif( thisItemEl.is( \".selected\" ) )\n\t\t\t\t\t\t\titems.push( curLineNumber );\n\t\t\t\t\t\tcurLineNumber++;\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"model\" :\n\t\t\t\t\t_.each( this.selectedItems, function ( item ) {\n\t\t\t\t\t\titems.push( _this.collection.get( item ) );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"view\" :\n\t\t\t\t\t_.each( this.selectedItems, function ( item ) {\n\t\t\t\t\t\titems.push( _this.viewManager.findByModel( _this.collection.get( item ) ) );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault :\n\t\t\t\t\tthrow new Error( \"Invalid referenceBy option: \" + referenceBy );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn items;\n\n\t\t},\n\n\t\tsetSelectedModels : function( newSelectedItems, options ) {\n\t\t\tif( ! _.isArray( newSelectedItems ) ) throw \"Invalid parameter value\";\n\t\t\tif( ! this.selectable && newSelectedItems.length > 0 ) return; // used to throw error, but there are some circumstances in which a list can be selectable at times and not at others, don't want to have to worry about catching errors\n\n\t\t\toptions = _.extend( {}, {\n\t\t\t\tsilent : false,\n\t\t\t\tby : kDefaultReferenceBy\n\t\t\t}, options );\n\n\t\t\tvar referenceBy = options.by;\n\t\t\tvar newSelectedCids = [];\n\n\t\t\tswitch( referenceBy ) {\n\t\t\t\tcase \"cid\" :\n\t\t\t\t\tnewSelectedCids = newSelectedItems;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"id\" :\n\t\t\t\t\tthis.collection.each( function( thisModel ) {\n\t\t\t\t\t\tif( _.contains( newSelectedItems, thisModel.id ) ) newSelectedCids.push( thisModel.cid );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"model\" :\n\t\t\t\t\tnewSelectedCids = _.pluck( newSelectedItems, \"cid\" );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"view\" :\n\t\t\t\t\t_.each( newSelectedItems, function( item ) {\n\t\t\t\t\t\tnewSelectedCids.push( item.model.cid );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"offset\" :\n\t\t\t\t\tvar curLineNumber = 0;\n\t\t\t\t\tvar selectedItems = [];\n\n\t\t\t\t\tvar itemElements = this._getVisibleItemEls();\n\t\t\t\t\titemElements.each( function() {\n\t\t\t\t\t\tvar thisItemEl = $( this );\n\t\t\t\t\t\tif( _.contains( newSelectedItems, curLineNumber ) )\n\t\t\t\t\t\t\tnewSelectedCids.push( thisItemEl.attr( \"data-model-cid\" ) );\n\t\t\t\t\t\tcurLineNumber++;\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault :\n\t\t\t\t\tthrow new Error( \"Invalid referenceBy option: \" + referenceBy );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar oldSelectedModels = this.getSelectedModels();\n\t\t\tvar oldSelectedCids = _.clone( this.selectedItems );\n\n\t\t\tthis.selectedItems = this._convertStringsToInts( newSelectedCids );\n\t\t\tthis._validateSelection();\n\n\t\t\tvar newSelectedModels = this.getSelectedModels();\n\n\t\t\tif( ! this._containSameElements( oldSelectedCids, this.selectedItems ) )\n\t\t\t{\n\t\t\t\tthis._addSelectedClassToSelectedItems( oldSelectedCids );\n\n\t\t\t\tif( ! options.silent )\n\t\t\t\t{\n\t\t\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\t\t\tthis.spawn( \"selectionChanged\", {\n\t\t\t\t\t\t\tselectedModels : newSelectedModels,\n\t\t\t\t\t\t\toldSelectedModels : oldSelectedModels\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else this.trigger( \"selectionChanged\", newSelectedModels, oldSelectedModels );\n\t\t\t\t}\n\n\t\t\t\tthis.updateDependentControls();\n\t\t\t}\n\t\t},\n\n\t\tsetSelectedModel : function( newSelectedItem, options ) {\n\t\t\tif( ! newSelectedItem && newSelectedItem !== 0 )\n\t\t\t\tthis.setSelectedModels( [], options );\n\t\t\telse\n\t\t\t\tthis.setSelectedModels( [ newSelectedItem ], options );\n\t\t},\n\n\t\tgetView : function( reference, options ) {\n\t\t\toptions = _.extend( {}, {\n\t\t\t\tby : kDefaultReferenceBy\n\t\t\t}, options );\n\n\t\t\tswitch( options.by ) {\n\t\t\t\tcase \"id\" :\n\t\t\t\tcase \"cid\" :\n\t\t\t\t\tvar model = this.collection.get( reference ) || null;\n\t\t\t\t\treturn model && this.viewManager.findByModel( model );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"offset\" :\n\t\t\t\t\tvar itemElements = this._getVisibleItemEls();\n\t\t\t\t\treturn $( itemElements.get( reference ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"model\" :\n\t\t\t\t\treturn this.viewManager.findByModel( reference );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault :\n\t\t\t\t\tthrow new Error( \"Invalid referenceBy option: \" + referenceBy );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\trender : function() {\n\t\t\tvar _this = this;\n\n\t\t\tthis._hasBeenRendered = true;\n\n\t\t\tif( this.selectable ) this._saveSelection();\n\n\t\t\tvar modelViewContainerEl;\n\n\t\t\t// If collection view element is a table and it has a tbody\n\t\t\t// within it, render the model views inside of the tbody\n\t\t\tmodelViewContainerEl = this._getContainerEl();\n\n\t\t\tvar oldViewManager = this.viewManager;\n\t\t\tthis.viewManager = new ChildViewContainer();\n\n\t\t\t// detach each of our subviews that we have already created to represent models\n\t\t\t// in the collection. We are going to re-use the ones that represent models that\n\t\t\t// are still here, instead of creating new ones, so that we don't loose state\n\t\t\t// information in the views.\n\t\t\toldViewManager.each( function( thisModelView ) {\n\t\t\t\t// to boost performance, only detach those views that will be sticking around.\n\t\t\t\t// we won't need the other ones later, so no need to detach them individually.\n\t\t\t\tif( this.reuseModelViews && this.collection.get( thisModelView.model.cid ) ) {\n\t\t\t\t\tthisModelView.$el.detach();\n\t\t\t\t} else thisModelView.remove();\n\t\t\t}, this );\n\n\t\t\tmodelViewContainerEl.empty();\n\t\t\tvar fragmentContainer;\n\n\t\t\tif( this.detachedRendering )\n\t\t\t\tfragmentContainer = document.createDocumentFragment();\n\n\t\t\tthis.collection.each( function( thisModel ) {\n\t\t\t\tvar thisModelView = oldViewManager.findByModelCid( thisModel.cid );\n\t\t\t\tif( ! this.reuseModelViews || _.isUndefined( thisModelView ) ) {\n\t\t\t\t\t// if the model view has not already been created on a\n\t\t\t\t\t// previous render then create and initialize it now.\n\t\t\t\t\tthisModelView = this._createNewModelView( thisModel, this._getModelViewOptions( thisModel ) );\n\t\t\t\t}\n\n\t\t\t\tthis._insertAndRenderModelView( thisModelView, fragmentContainer || modelViewContainerEl );\n\t\t\t}, this );\n\n\t\t\tif( this.detachedRendering )\n\t\t\t\tmodelViewContainerEl.append( fragmentContainer );\n\n\t\t\tif( this.sortable ) this._setupSortable();\n\n\t\t\tthis._showEmptyListCaptionIfAppropriate();\n\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"render\" );\n\t\t\telse this.trigger( \"render\" );\n\n\t\t\tif( this.selectable ) {\n\t\t\t\tthis._restoreSelection();\n\t\t\t\tthis.updateDependentControls();\n\t\t\t}\n\n\t\t\tthis.forceRerenderOnNextSortEvent = false;\n\t\t},\n\n\t\t_showEmptyListCaptionIfAppropriate : function ( ) {\n\t\t\tthis._removeEmptyListCaption();\n\n\t\t\tif( this.emptyListCaption ) {\n\t\t\t\tvar visibleEls = this._getVisibleItemEls();\n\n\t\t\t\tif( visibleEls.length === 0 ) {\n\t\t\t\t\tvar emptyListString;\n\n\t\t\t\t\tif( _.isFunction( this.emptyListCaption ) )\n\t\t\t\t\t\temptyListString = this.emptyListCaption();\n\t\t\t\t\telse\n\t\t\t\t\t\temptyListString = this.emptyListCaption;\n\n\t\t\t\t\tvar $emptyListCaptionEl;\n\t\t\t\t\tvar $varEl = $( \"\" + emptyListString + \" \" );\n\n\t\t\t\t\t// need to wrap the empty caption to make it fit the rendered list structure (either with an li or a tr td)\n\t\t\t\t\tif( this._isRenderedAsList() )\n\t\t\t\t\t\t$emptyListCaptionEl = $varEl.wrapAll( \" \" ).parent().css( kStylesForEmptyListCaption );\n\t\t\t\t\telse\n\t\t\t\t\t\t$emptyListCaptionEl = $varEl.wrapAll( \" \" ).parent().parent().css( kStylesForEmptyListCaption );\n\n\t\t\t\t\tthis._getContainerEl().append( $emptyListCaptionEl );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_removeEmptyListCaption : function( ) {\n\t\t\tif( this._isRenderedAsList() )\n\t\t\t\tthis._getContainerEl().find( \"> li > var.empty-list-caption\" ).parent().remove();\n\t\t\telse\n\t\t\t\tthis._getContainerEl().find( \"> tr > td > var.empty-list-caption\" ).parent().parent().remove();\n\t\t},\n\n\t\t// Render a single model view in container object \"parentElOrDocumentFragment\", which is either\n\t\t// a documentFragment or a jquery object. optional arg atIndex is not support for document fragments.\n\t\t_insertAndRenderModelView : function( modelView, parentElOrDocumentFragment, atIndex ) {\n\t\t\tvar thisModelViewWrapped = this._wrapModelView( modelView );\n\n\t\t\tif( parentElOrDocumentFragment.nodeType === 11 ) // if we are inserting into a document fragment, we need to use the DOM appendChild method\n\t\t\t\tparentElOrDocumentFragment.appendChild( thisModelViewWrapped.get( 0 ) );\n\t\t\telse {\n\t\t\t\tvar numberOfModelViewsCurrentlyInDOM = parentElOrDocumentFragment.children().length;\n\t\t\t\tif( ! _.isUndefined( atIndex ) && atIndex >= 0 && atIndex < numberOfModelViewsCurrentlyInDOM )\n\t\t\t\t\t// note this.collection.length might be greater than parentElOrDocumentFragment.children().length here\n\t\t\t\t\tparentElOrDocumentFragment.children().eq( atIndex ).before( thisModelViewWrapped );\n\t\t\t\telse {\n\t\t\t\t\t// if we are attempting to insert a modelView in an position that is beyond what is currently in the\n\t\t\t\t\t// DOM, then make a note that we need to re-render the collection view on the next sort event. If we dont\n\t\t\t\t\t// force this re-render, we can end up with modelViews in the wrong order when the collection defines\n\t\t\t\t\t// a comparator and multiple models are added at once. See https://github.com/rotundasoftware/backbone.collectionView/issues/69\n\t\t\t\t\tif( ! _.isUndefined( atIndex ) && atIndex > numberOfModelViewsCurrentlyInDOM ) this.forceRerenderOnNextSortEvent = true;\n\n\t\t\t\t\tparentElOrDocumentFragment.append( thisModelViewWrapped );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.viewManager.add( modelView );\n\n\t\t\t// we have to render the modelView after it has been put in context, as opposed to in the\n\t\t\t// initialize function of the modelView, because some rendering might be dependent on\n\t\t\t// the modelView's context in the DOM tree. For example, if the modelView stretch()'s itself,\n\t\t\t// it must be in full context in the DOM tree or else the stretch will not behave as intended.\n\t\t\tvar renderResult = modelView.render();\n\n\t\t\t// return false from the view's render function to hide this item\n\t\t\tif( renderResult === false ) {\n\t\t\t\tthisModelViewWrapped.hide();\n\t\t\t\tthisModelViewWrapped.addClass( \"not-visible\" );\n\t\t\t}\n\n\t\t\tvar hideThisModelView = false;\n\t\t\tif( _.isFunction( this.visibleModelsFilter ) )\n\t\t\t\thideThisModelView = ! this.visibleModelsFilter( modelView.model );\n\n\t\t\tif( thisModelViewWrapped.children().length === 1 )\n\t\t\t\tthisModelViewWrapped.toggle( ! hideThisModelView );\n\t\t\telse modelView.$el.toggle( ! hideThisModelView );\n\n\t\t\tthisModelViewWrapped.toggleClass( \"not-visible\", hideThisModelView );\n\n\t\t\tif( ! hideThisModelView && this.emptyListCaption ) this._removeEmptyListCaption();\n\t\t},\n\n\t\tupdateDependentControls : function() {\n\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\tthis.spawn( \"updateDependentControls\", {\n\t\t\t\t\tselectedModels : this.getSelectedModels()\n\t\t\t\t} );\n\t\t\t} else this.trigger( \"updateDependentControls\", this.getSelectedModels() );\n\t\t},\n\n\t\t// Override `Backbone.View.remove` to also destroy all Views in `viewManager`\n\t\tremove : function() {\n\t\t\tthis.viewManager.each( function( view ) {\n\t\t\t\tview.remove();\n\t\t\t} );\n\n\t\t\tBackbone.View.prototype.remove.apply( this, arguments );\n\t\t},\n\n\t\treapplyFilter : function( whichFilter ) {\n\t\t\tvar _this = this;\n\n\t\t\tif( ! _.contains( [ \"selectableModels\", \"sortableModels\", \"visibleModels\" ], whichFilter ) ) {\n\t\t\t\tthrow new Error( \"Invalid filter identifier supplied to reapplyFilter: \" + whichFilter );\n\t\t\t}\n\n\t\t\tswitch( whichFilter ) {\n\t\t\t\tcase \"visibleModels\":\n\t\t\t\t\t_this.viewManager.each( function( thisModelView ) {\n\t\t\t\t\t\tvar notVisible = _this.visibleModelsFilter && ! _this.visibleModelsFilter.call( _this, thisModelView.model );\n\n\t\t\t\t\t\tthisModelView.$el.toggleClass( \"not-visible\", notVisible );\n\t\t\t\t\t\tif( _this._modelViewHasWrapperLI( thisModelView ) ) {\n\t\t\t\t\t\t\tthisModelView.$el.closest( \"li\" ).toggleClass( \"not-visible\", notVisible ).toggle( ! notVisible );\n\t\t\t\t\t\t} else thisModelView.$el.toggle( ! notVisible );\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis._showEmptyListCaptionIfAppropriate();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sortableModels\":\n\t\t\t\t\t_this.$el.sortable( \"destroy\" );\n\n\t\t\t\t\t_this.viewManager.each( function( thisModelView ) {\n\t\t\t\t\t\tvar notSortable = _this.sortableModelsFilter && ! _this.sortableModelsFilter.call( _this, thisModelView.model );\n\n\t\t\t\t\t\tthisModelView.$el.toggleClass( \"not-sortable\", notSortable );\n\t\t\t\t\t\tif( _this._modelViewHasWrapperLI( thisModelView ) ) {\n\t\t\t\t\t\t\tthisModelView.$el.closest( \"li\" ).toggleClass( \"not-sortable\", notSortable );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\t_this._setupSortable();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"selectableModels\":\n\t\t\t\t\t_this.viewManager.each( function( thisModelView ) {\n\t\t\t\t\t\tvar notSelectable = _this.selectableModelsFilter && ! _this.selectableModelsFilter.call( _this, thisModelView.model );\n\n\t\t\t\t\t\tthisModelView.$el.toggleClass( \"not-selectable\", notSelectable );\n\t\t\t\t\t\tif( _this._modelViewHasWrapperLI( thisModelView ) ) {\n\t\t\t\t\t\t\tthisModelView.$el.closest( \"li\" ).toggleClass( \"not-selectable\", notSelectable );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\t_this._validateSelection();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\t// A method to remove the view relating to model.\n\t\t_removeModelView : function( modelView ) {\n\t\t\tif( this.selectable ) this._saveSelection();\n\n\t\t\tthis.viewManager.remove( modelView ); // Remove the view from the viewManager\n\t\t\tif( this._modelViewHasWrapperLI( modelView ) ) modelView.$el.parent().remove(); // Remove the li wrapper from the DOM\n\t\t\tmodelView.remove(); // Remove the view from the DOM and stop listening to events\n\n\t\t\tif( this.selectable ) this._restoreSelection();\n\n\t\t\tthis._showEmptyListCaptionIfAppropriate();\n\t\t},\n\n\t\t_validateSelectionAndRender : function() {\n\t\t\tthis._validateSelection();\n\t\t\tthis.render();\n\t\t},\n\n\t\t_registerCollectionEvents : function() {\n\n\t\t\tthis.listenTo( this.collection, \"add\", function( model ) {\n\t\t\t\tvar modelView;\n\t\t\t\tif( this._hasBeenRendered ) {\n\t\t\t\t\tmodelView = this._createNewModelView( model, this._getModelViewOptions( model ) );\n\t\t\t\t\tthis._insertAndRenderModelView( modelView, this._getContainerEl(), this.collection.indexOf( model ) );\n\t\t\t\t}\n\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"add\", modelView );\n\t\t\t\telse this.trigger( \"add\", modelView );\n\t\t\t} );\n\n\t\t\tthis.listenTo( this.collection, \"remove\", function( model ) {\n\t\t\t\tvar modelView;\n\n\t\t\t\tif( this._hasBeenRendered ) {\n\t\t\t\t\tmodelView = this.viewManager.findByModelCid( model.cid );\n\t\t\t\t\tthis._removeModelView( modelView );\n\t\t\t\t}\n\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"remove\" );\n\t\t\t\telse this.trigger( \"remove\" );\n\t\t\t} );\n\n\t\t\tthis.listenTo( this.collection, \"reset\", function() {\n\t\t\t\tif( this._hasBeenRendered ) this.render();\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"reset\" );\n\t\t\t\telse this.trigger( \"reset\" );\n\t\t\t} );\n\n\t\t\t// we should not be listening to change events on the model as a default behavior. the models\n\t\t\t// should be responsible for re-rendering themselves if necessary, and if the collection does\n\t\t\t// also need to re-render as a result of a model change, this should be handled by overriding\n\t\t\t// this method. by default the collection view should not re-render in response to model changes\n\t\t\t// this.listenTo( this.collection, \"change\", function( model ) {\n\t\t\t// \tif( this._hasBeenRendered ) this.viewManager.findByModel( model ).render();\n\t\t\t// \tif( this._isBackboneCourierAvailable() )\n\t\t\t// \t\tthis.spawn( \"change\", { model : model } );\n\t\t\t// } );\n\n\t\t\tthis.listenTo( this.collection, \"sort\", function( collection, options ) {\n\t\t\t\tif( this._hasBeenRendered && ( options.add !== true || this.forceRerenderOnNextSortEvent ) ) this.render();\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"sort\" );\n\t\t\t\telse this.trigger( \"sort\" );\n\t\t\t} );\n\t\t},\n\n\t\t_getContainerEl : function() {\n\t\t\tif ( this._isRenderedAsTable() ) {\n\t\t\t\t// not all tables have a tbody, so we test\n\t\t\t\tvar tbody = this.$el.find( \"> tbody\" );\n\t\t\t\tif ( tbody.length > 0 )\n\t\t\t\t\treturn tbody;\n\t\t\t}\n\t\t\treturn this.$el;\n\t\t},\n\n\t\t_getClickedItemId : function( theEvent ) {\n\t\t\tvar clickedItemId = null;\n\n\t\t\t// important to use currentTarget as opposed to target, since we could be bubbling\n\t\t\t// an event that took place within another collectionList\n\t\t\tvar clickedItemEl = $( theEvent.currentTarget );\n\t\t\tif( clickedItemEl.closest( \".collection-view\" ).get(0) !== this.$el.get(0) ) return;\n\n\t\t\t// determine which list item was clicked. If we clicked in the blank area\n\t\t\t// underneath all the elements, we want to know that too, since in this\n\t\t\t// case we will want to deselect all elements. so check to see if the clicked\n\t\t\t// DOM element is the list itself to find that out.\n\t\t\tvar clickedItem = clickedItemEl.closest( \"[data-model-cid]\" );\n\t\t\tif( clickedItem.length > 0 )\n\t\t\t{\n\t\t\t\tclickedItemId = clickedItem.attr( \"data-model-cid\" );\n\t\t\t\tif( $.isNumeric( clickedItemId ) ) clickedItemId = parseInt( clickedItemId, 10 );\n\t\t\t}\n\n\t\t\treturn clickedItemId;\n\t\t},\n\n\t\t_updateItemTemplate : function() {\n\t\t\tvar itemTemplateHtml;\n\t\t\tif( this.itemTemplate )\n\t\t\t{\n\t\t\t\tif( $( this.itemTemplate ).length === 0 )\n\t\t\t\t\tthrow \"Could not find item template from selector: \" + this.itemTemplate;\n\n\t\t\t\titemTemplateHtml = $( this.itemTemplate ).html();\n\t\t\t}\n\t\t\telse\n\t\t\t\titemTemplateHtml = this.$( \".item-template\" ).html();\n\n\t\t\tif( itemTemplateHtml ) this.itemTemplateFunction = _.template( itemTemplateHtml );\n\n\t\t},\n\n\t\t_validateSelection : function() {\n\t\t\t// note can't use the collection's proxy to underscore because \"cid\" is not an attribute,\n\t\t\t// but an element of the model object itself.\n\t\t\tvar modelReferenceIds = _.pluck( this.collection.models, \"cid\" );\n\t\t\tthis.selectedItems = _.intersection( modelReferenceIds, this.selectedItems );\n\n\t\t\tif( _.isFunction( this.selectableModelsFilter ) )\n\t\t\t{\n\t\t\t\tthis.selectedItems = _.filter( this.selectedItems, function( thisItemId ) {\n\t\t\t\t\treturn this.selectableModelsFilter.call( this, this.collection.get( thisItemId ) );\n\t\t\t\t}, this );\n\t\t\t}\n\t\t},\n\n\t\t_saveSelection : function() {\n\t\t\t// save the current selection. use restoreSelection() to restore the selection to the state it was in the last time saveSelection() was called.\n\t\t\tif( ! this.selectable ) throw \"Attempt to save selection on non-selectable list\";\n\t\t\tthis.savedSelection = {\n\t\t\t\titems : _.clone( this.selectedItems ),\n\t\t\t\toffset : this.getSelectedModel( { by : \"offset\" } )\n\t\t\t};\n\t\t},\n\n\t\t_restoreSelection : function() {\n\t\t\tif( ! this.savedSelection ) throw \"Attempt to restore selection but no selection has been saved!\";\n\n\t\t\t// reset selectedItems to empty so that we \"redraw\" all \"selected\" classes\n\t\t\t// when we set our new selection. We do this because it is likely that our\n\t\t\t// contents have been refreshed, and we have thus lost all old \"selected\" classes.\n\t\t\tthis.setSelectedModels( [], { silent : true } );\n\n\t\t\tif( this.savedSelection.items.length > 0 )\n\t\t\t{\n\t\t\t\t// first try to restore the old selected items using their reference ids.\n\t\t\t\tthis.setSelectedModels( this.savedSelection.items, { by : \"cid\", silent : true } );\n\n\t\t\t\t// all the items with the saved reference ids have been removed from the list.\n\t\t\t\t// ok. try to restore the selection based on the offset that used to be selected.\n\t\t\t\t// this is the expected behavior after a item is deleted from a list (i.e. select\n\t\t\t\t// the line that immediately follows the deleted line).\n\t\t\t\tif( this.selectedItems.length === 0 )\n\t\t\t\t\tthis.setSelectedModel( this.savedSelection.offset, { by : \"offset\" } );\n\n\t\t\t\t// Trigger a selection changed if the previously selected items were not all found\n\t\t\t\tif (this.selectedItems.length !== this.savedSelection.items.length)\n\t\t\t\t{\n\t\t\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\t\t\tthis.spawn( \"selectionChanged\", {\n\t\t\t\t\t\t\tselectedModels : this.getSelectedModels(),\n\t\t\t\t\t\t\toldSelectedModels : []\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else this.trigger( \"selectionChanged\", this.getSelectedModels(), [] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_addSelectedClassToSelectedItems : function( oldItemsIdsWithSelectedClass ) {\n\t\t\tif( _.isUndefined( oldItemsIdsWithSelectedClass ) ) oldItemsIdsWithSelectedClass = [];\n\n\t\t\t// oldItemsIdsWithSelectedClass is used for optimization purposes only. If this info is supplied then we\n\t\t\t// only have to add / remove the \"selected\" class from those items that \"selected\" state has changed.\n\n\t\t\tvar itemsIdsFromWhichSelectedClassNeedsToBeRemoved = oldItemsIdsWithSelectedClass;\n\t\t\titemsIdsFromWhichSelectedClassNeedsToBeRemoved = _.without( itemsIdsFromWhichSelectedClassNeedsToBeRemoved, this.selectedItems );\n\n\t\t\t_.each( itemsIdsFromWhichSelectedClassNeedsToBeRemoved, function( thisItemId ) {\n\t\t\t\tthis._getContainerEl().find( \"[data-model-cid=\" + thisItemId + \"]\" ).removeClass( \"selected\" );\n\n\t\t\t\tif( this._isRenderedAsList() ) {\n\t\t\t\t\tthis._getContainerEl().find( \"li[data-model-cid=\" + thisItemId + \"] > *\" ).removeClass( \"selected\" );\n\t\t\t\t}\n\t\t\t}, this );\n\n\t\t\tvar itemsIdsFromWhichSelectedClassNeedsToBeAdded = this.selectedItems;\n\t\t\titemsIdsFromWhichSelectedClassNeedsToBeAdded = _.without( itemsIdsFromWhichSelectedClassNeedsToBeAdded, oldItemsIdsWithSelectedClass );\n\n\t\t\t_.each( itemsIdsFromWhichSelectedClassNeedsToBeAdded, function( thisItemId ) {\n\t\t\t\tthis._getContainerEl().find( \"[data-model-cid=\" + thisItemId + \"]\" ).addClass( \"selected\" );\n\n\t\t\t\tif( this._isRenderedAsList() ) {\n\t\t\t\t\tthis._getContainerEl().find( \"li[data-model-cid=\" + thisItemId + \"] > *\" ).addClass( \"selected\" );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t},\n\n\t\t_reorderCollectionBasedOnHTML : function() {\n\n\t\t\tvar _this = this;\n\n\t\t\tthis._getContainerEl().children().each( function() {\n\t\t\t\tvar thisModelCid = $( this ).attr( \"data-model-cid\" );\n\n\t\t\t\tif( thisModelCid )\n\t\t\t\t{\n\t\t\t\t\t// remove the current model and then add it back (at the end of the collection).\n\t\t\t\t\t// When we are done looping through all models, they will be in the correct order.\n\t\t\t\t\tvar thisModel = _this.collection.get( thisModelCid );\n\t\t\t\t\tif( thisModel )\n\t\t\t\t\t{\n\t\t\t\t\t\t_this.collection.remove( thisModel, { silent : true } );\n\t\t\t\t\t\t_this.collection.add( thisModel, { silent : true, sort : ! _this.collection.comparator } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif( this._isBackboneCourierAvailable() ) this.spawn( \"reorder\" );\n\t\t\telse this.collection.trigger( \"reorder\" );\n\n\t\t\tif( this.collection.comparator ) this.collection.sort();\n\n\t\t},\n\n\t\t_getModelViewConstructor : function( thisModel ) {\n\t\t\treturn this.modelView || mDefaultModelViewConstructor;\n\t\t},\n\n\t\t_getModelViewOptions : function( thisModel ) {\n\t\t\tvar modelViewOptions = this.modelViewOptions;\n\t\t\tif( _.isFunction( modelViewOptions ) ) modelViewOptions = modelViewOptions( thisModel );\n\n\t\t\treturn _.extend( { model : thisModel }, modelViewOptions );\n\t\t},\n\n\t\t_createNewModelView : function( model, modelViewOptions ) {\n\t\t\tvar modelViewConstructor = this._getModelViewConstructor( model );\n\t\t\tif( _.isUndefined( modelViewConstructor ) ) throw \"Could not find modelView constructor for model\";\n\n\t\t\tvar newModelView = new( modelViewConstructor )( modelViewOptions );\n\t\t\tnewModelView.collectionListView = newModelView.collectionView = this; // collectionListView for legacy\n\n\t\t\treturn newModelView;\n\t\t},\n\n\t\t_wrapModelView : function( modelView ) {\n\t\t\tvar _this = this;\n\n\t\t\t// we use items client ids as opposed to real ids, since we may not have a representation\n\t\t\t// of these models on the server\n\t\t\tvar modelViewWrapperEl;\n\n\t\t\tif( this._isRenderedAsTable() ) {\n\t\t\t\t// if we are rendering the collection in a table, the template $el is a tr so we just need to set the data-model-cid\n\t\t\t\tmodelViewWrapperEl = modelView.$el;\n\t\t\t\tmodelView.$el.attr( \"data-model-cid\", modelView.model.cid );\n\t\t\t}\n\t\t\telse if( this._isRenderedAsList() ) {\n\t\t\t\t// if we are rendering the collection in a list, we need wrap each item in an (if its not already an )\n\t\t\t\t// and set the data-model-cid\n\t\t\t\tif( modelView.$el.is( \"li\" ) ) {\n\t\t\t\t\tmodelViewWrapperEl = modelView.$el;\n\t\t\t\t\tmodelView.$el.attr( \"data-model-cid\", modelView.model.cid );\n\t\t\t\t} else {\n\t\t\t\t\tmodelViewWrapperEl = modelView.$el.wrapAll( \" \" ).parent();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif( _.isFunction( this.sortableModelsFilter ) )\n\t\t\t\tif( ! this.sortableModelsFilter.call( _this, modelView.model ) ) {\n\t\t\t\t\tmodelViewWrapperEl.addClass( \"not-sortable\" );\n\t\t\t\t\tmodelView.$el.addClass( \"not-selectable\" );\n\t\t\t\t}\n\n\t\t\tif( _.isFunction( this.selectableModelsFilter ) )\n\t\t\t\tif( ! this.selectableModelsFilter.call( _this, modelView.model ) ) {\n\t\t\t\t\tmodelViewWrapperEl.addClass( \"not-selectable\" );\n\t\t\t\t\tmodelView.$el.addClass( \"not-selectable\" );\n\t\t\t\t}\n\n\t\t\treturn modelViewWrapperEl;\n\t\t},\n\n\t\t_convertStringsToInts : function( theArray ) {\n\t\t\treturn _.map( theArray, function( thisEl ) {\n\t\t\t\tif( ! _.isString( thisEl ) ) return thisEl;\n\t\t\t\tvar thisElAsNumber = parseInt( thisEl, 10 );\n\t\t\t\treturn( thisElAsNumber == thisEl ? thisElAsNumber : thisEl );\n\t\t\t} );\n\t\t},\n\n\t\t_containSameElements : function( arrayA, arrayB ) {\n\t\t\tif( arrayA.length != arrayB.length ) return false;\n\t\t\tvar intersectionSize = _.intersection( arrayA, arrayB ).length;\n\t\t\treturn intersectionSize == arrayA.length; // and must also equal arrayB.length, since arrayA.length == arrayB.length\n\t\t},\n\n\t\t_isRenderedAsTable : function() {\n\t\t\treturn this.$el.prop( \"tagName\" ).toLowerCase() === \"table\";\n\t\t},\n\n\t\t_isRenderedAsList : function() {\n\t\t\treturn ! this._isRenderedAsTable();\n\t\t},\n\n\t\t_modelViewHasWrapperLI : function( modelView ) {\n\t\t\treturn this._isRenderedAsList() && ! modelView.$el.is( \"li\" );\n\t\t},\n\n\t\t// Returns the wrapper HTML element for each visible modelView.\n\t\t// When rendering in a table context, the returned elements are the $el of each modelView.\n\t\t// When rendering in a list context,\n\t\t// If the $el of the modelView is an , the returned elements are the $el of each modelView.\n\t\t// Otherwise, the returned elements are the 's the collectionView wrapped around each modelView $el.\n\t\t_getVisibleItemEls : function() {\n\t\t\tvar itemElements = [];\n\t\t\titemElements = this._getContainerEl().find( \"> [data-model-cid]:not(.not-visible)\" );\n\n\t\t\treturn itemElements;\n\t\t},\n\n\t\t_charCodes : {\n\t\t\tupArrow : 38,\n\t\t\tdownArrow : 40\n\t\t},\n\n\t\t_isBackboneCourierAvailable : function() {\n\t\t\treturn !_.isUndefined( Backbone.Courier );\n\t\t},\n\n\t\t_setupSortable : function() {\n\t\t\tvar sortableOptions = _.extend( {\n\t\t\t\taxis : \"y\",\n\t\t\t\tdistance : 10,\n\t\t\t\tforcePlaceholderSize : true,\n\t\t\t\titems : this._isRenderedAsTable() ? \"> tbody > tr:not(.not-sortable)\" : \"> li:not(.not-sortable)\",\n\t\t\t\tstart : _.bind( this._sortStart, this ),\n\t\t\t\tchange : _.bind( this._sortChange, this ),\n\t\t\t\tstop : _.bind( this._sortStop, this ),\n\t\t\t\treceive : _.bind( this._receive, this ),\n\t\t\t\tover : _.bind( this._over, this )\n\t\t\t}, _.result( this, \"sortableOptions\" ) );\n\n\t\t\tthis.$el = this.$el.sortable( sortableOptions );\n\t\t\t//this.$el.sortable( \"enable\" ); // in case it was disabled previously\n\t\t},\n\n\t\t_sortStart : function( event, ui ) {\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"sortStart\", { modelBeingSorted : modelBeingSorted } );\n\t\t\telse this.trigger( \"sortStart\", modelBeingSorted );\n\t\t},\n\n\t\t_sortChange : function( event, ui ) {\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"sortChange\", { modelBeingSorted : modelBeingSorted } );\n\t\t\telse this.trigger( \"sortChange\", modelBeingSorted );\n\t\t},\n\n\t\t_sortStop : function( event, ui ) {\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\t\t\tvar modelViewContainerEl = this._getContainerEl();\n\t\t\tvar newIndex = modelViewContainerEl.children().index( ui.item );\n\n\t\t\tif( newIndex == -1 && modelBeingSorted ) {\n\t\t\t\t// the element was removed from this list. can happen if this sortable is connected\n\t\t\t\t// to another sortable, and the item was dropped into the other sortable.\n\t\t\t\tthis.collection.remove( modelBeingSorted );\n\t\t\t}\n\n\t\t\tif( ! modelBeingSorted ) return; // something is wacky. we don't mess with this case, preferring to guarantee that we can always provide a reference to the model\n\n\t\t\tthis._reorderCollectionBasedOnHTML();\n\t\t\tthis.updateDependentControls();\n\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"sortStop\", { modelBeingSorted : modelBeingSorted, newIndex : newIndex } );\n\t\t\telse this.trigger( \"sortStop\", modelBeingSorted, newIndex );\n\t\t},\n\n\t\t_receive : function( event, ui ) {\n\n\t\t\tvar senderListEl = ui.sender;\n\t\t\tvar senderCollectionListView = senderListEl.data( \"view\" );\n\t\t\tif( ! senderCollectionListView || ! senderCollectionListView.collection ) return;\n\n\t\t\tvar newIndex = this._getContainerEl().children().index( ui.item );\n\t\t\tvar modelReceived = senderCollectionListView.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\t\t\tsenderCollectionListView.collection.remove( modelReceived );\n\t\t\tthis.collection.add( modelReceived, { at : newIndex } );\n\t\t\tmodelReceived.collection = this.collection; // otherwise will not get properly set, since modelReceived.collection might already have a value.\n\t\t\tthis.setSelectedModel( modelReceived );\n\t\t},\n\n\t\t_over : function( event, ui ) {\n\t\t\t// when an item is being dragged into the sortable,\n\t\t\t// hide the empty list caption if it exists\n\t\t\tthis._getContainerEl().find( \"> var.empty-list-caption\" ).hide();\n\t\t},\n\n\t\t_onKeydown : function( event ) {\n\t\t\tif( ! this.processKeyEvents ) return true;\n\n\t\t\tvar trap = false;\n\n\t\t\tif( this.getSelectedModels( { by : \"offset\" } ).length == 1 )\n\t\t\t{\n\t\t\t\t// need to trap down and up arrows or else the browser\n\t\t\t\t// will end up scrolling a autoscroll div.\n\n\t\t\t\tvar currentOffset = this.getSelectedModel( { by : \"offset\" } );\n\t\t\t\tif( event.which === this._charCodes.upArrow && currentOffset !== 0 )\n\t\t\t\t{\n\t\t\t\t\tthis.setSelectedModel( currentOffset - 1, { by : \"offset\" } );\n\t\t\t\t\ttrap = true;\n\t\t\t\t}\n\t\t\t\telse if( event.which === this._charCodes.downArrow && currentOffset !== this.collection.length - 1 )\n\t\t\t\t{\n\t\t\t\t\tthis.setSelectedModel( currentOffset + 1, { by : \"offset\" } );\n\t\t\t\t\ttrap = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ! trap;\n\t\t},\n\n\t\t_listItem_onMousedown : function( theEvent ) {\n\t\t\tvar clickedItemId = this._getClickedItemId( theEvent );\n\n\t\t\tif( clickedItemId ) {\n\t\t\t\tvar clickedModel = this.collection.get( clickedItemId );\n\t\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\tclickedModel : clickedModel,\n\t\t\t\t\t\tmetaKeyPressed : theEvent.ctrlKey || theEvent.metaKey\n\t\t\t\t\t};\n\n\t\t\t\t\t_.each( [ 'preventDefault', 'stopPropagation', 'stopImmediatePropagation' ], function( thisMethod ) {\n\t\t\t\t\t\tdata[ thisMethod ] = function() {\n\t\t\t\t\t\t\ttheEvent[ thisMethod ]();\n\t\t\t\t\t\t};\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis.spawn( \"click\", data );\n\t\t\t\t}\n\t\t\t\telse this.trigger( \"click\", clickedModel );\n\t\t\t}\n\n\t\t\tif( ! this.selectable || ! this.clickToSelect ) return;\n\n\t\t\tif( clickedItemId )\n\t\t\t{\n\t\t\t\t// Exit if an unselectable item was clicked\n\t\t\t\tif( _.isFunction( this.selectableModelsFilter ) &&\n\t\t\t\t\t! this.selectableModelsFilter.call( this, this.collection.get( clickedItemId ) ) )\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// a selectable list item was clicked\n\t\t\t\tif( this.selectMultiple && theEvent.shiftKey )\n\t\t\t\t{\n\t\t\t\t\tvar firstSelectedItemIndex = -1;\n\n\t\t\t\t\tif( this.selectedItems.length > 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.collection.find( function( thisItemModel ) {\n\t\t\t\t\t\t\tfirstSelectedItemIndex++;\n\n\t\t\t\t\t\t\t// exit when we find our first selected element\n\t\t\t\t\t\t\treturn _.contains( this.selectedItems, thisItemModel.cid );\n\t\t\t\t\t\t}, this );\n\t\t\t\t\t}\n\n\t\t\t\t\tvar clickedItemIndex = -1;\n\t\t\t\t\tthis.collection.find( function( thisItemModel ) {\n\t\t\t\t\t\tclickedItemIndex++;\n\n\t\t\t\t\t\t// exit when we find the clicked element\n\t\t\t\t\t\treturn thisItemModel.cid == clickedItemId;\n\t\t\t\t\t}, this );\n\n\t\t\t\t\tvar shiftKeyRootSelectedItemIndex = firstSelectedItemIndex == -1 ? clickedItemIndex : firstSelectedItemIndex;\n\t\t\t\t\tvar minSelectedItemIndex = Math.min( clickedItemIndex, shiftKeyRootSelectedItemIndex );\n\t\t\t\t\tvar maxSelectedItemIndex = Math.max( clickedItemIndex, shiftKeyRootSelectedItemIndex );\n\n\t\t\t\t\tvar newSelectedItems = [];\n\t\t\t\t\tfor( var thisIndex = minSelectedItemIndex; thisIndex <= maxSelectedItemIndex; thisIndex ++ )\n\t\t\t\t\t\tnewSelectedItems.push( this.collection.at( thisIndex ).cid );\n\t\t\t\t\tthis.setSelectedModels( newSelectedItems, { by : \"cid\" } );\n\n\t\t\t\t\t// shift clicking will usually highlight selectable text, which we do not want.\n\t\t\t\t\t// this is a cross browser (hopefully) snippet that deselects all text selection.\n\t\t\t\t\tif( document.selection && document.selection.empty )\n\t\t\t\t\t\tdocument.selection.empty();\n\t\t\t\t\telse if(window.getSelection) {\n\t\t\t\t\t\tvar sel = window.getSelection();\n\t\t\t\t\t\tif( sel && sel.removeAllRanges )\n\t\t\t\t\t\t\tsel.removeAllRanges();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( ( this.selectMultiple || _.contains( this.selectedItems, clickedItemId ) ) && ( this.clickToToggle || theEvent.metaKey || theEvent.ctrlKey ) )\n\t\t\t\t{\n\t\t\t\t\tif( _.contains( this.selectedItems, clickedItemId ) )\n\t\t\t\t\t\tthis.setSelectedModels( _.without( this.selectedItems, clickedItemId ), { by : \"cid\" } );\n\t\t\t\t\telse this.setSelectedModels( _.union( this.selectedItems, [clickedItemId] ), { by : \"cid\" } );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tthis.setSelectedModels( [ clickedItemId ], { by : \"cid\" } );\n\t\t\t}\n\t\t\telse\n\t\t\t\t// the blank area of the list was clicked\n\t\t\t\tthis.setSelectedModels( [] );\n\n\t\t},\n\n\t\t_listItem_onDoubleClick : function( theEvent ) {\n\n\t\t\tvar clickedItemId = this._getClickedItemId( theEvent );\n\n\t\t\tif( clickedItemId )\n\t\t\t{\n\t\t\t\tvar clickedModel = this.collection.get( clickedItemId );\n\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"doubleClick\", { clickedModel : clickedModel, metaKeyPressed : theEvent.ctrlKey || theEvent.metaKey } );\n\t\t\t\telse this.trigger( \"doubleClick\", clickedModel );\n\t\t\t}\n\t\t},\n\n\t\t_listBackground_onClick : function( theEvent ) {\n\t\t\tif( ! this.selectable || ! this.clickToSelect ) return;\n\t\t\tif( ! $( theEvent.target ).is( \".collection-view\" ) ) return;\n\n\t\t\tthis.setSelectedModels( [] );\n\t\t}\n\n\t}, {\n\t\tsetDefaultModelViewConstructor : function( theConstructor ) {\n\t\t\tmDefaultModelViewConstructor = theConstructor;\n\t\t}\n\t});\n\n\t/*\n\t* Backbone.ViewOptions, v0.2.4\n\t* Copyright (c)2014 Rotunda Software, LLC.\n\t* Distributed under MIT license\n\t* http://github.com/rotundasoftware/backbone.viewOptions\n\t*/\n\n\tBackbone.ViewOptions = {};\n\n\tBackbone.ViewOptions.add = function( view, optionsDeclarationsProperty ) {\n\t\tif( _.isUndefined( optionsDeclarationsProperty ) ) optionsDeclarationsProperty = \"options\";\n\n\t\t// ****************** Public methods added to view ******************\n\n\t\tview.setOptions = function( options ) {\n\t\t\tvar _this = this;\n\t\t\tvar optionsThatWereChanged = {};\n\t\t\tvar optionsThatWereChangedPreviousValues = {};\n\n\t\t\tvar optionDeclarations = _.result( this, optionsDeclarationsProperty );\n\n\t\t\tif( ! _.isUndefined( optionDeclarations ) ) {\n\t\t\t\tvar normalizedOptionDeclarations = _normalizeOptionDeclarations( optionDeclarations );\n\n\t\t\t\t_.each( normalizedOptionDeclarations, function( thisOptionProperties, thisOptionName ) {\n\t\t\t\t\tvar thisOptionRequired = thisOptionProperties.required;\n\t\t\t\t\tvar thisOptionDefaultValue = thisOptionProperties.defaultValue;\n\n\t\t\t\t\tif( thisOptionRequired ) {\n\t\t\t\t\t\t// note we do not throw an error if a required option is not supplied, but it is\n\t\t\t\t\t\t// found on the object itself (due to a prior call of view.setOptions, most likely)\n\n\t\t\t\t\t\tif( ( ! options || ! _.contains( _.keys( options ), thisOptionName ) ) && _.isUndefined( _this[ thisOptionName ] ) )\n\t\t\t\t\t\t\tthrow new Error( \"Required option \\\"\" + thisOptionName + \"\\\" was not supplied.\" );\n\n\t\t\t\t\t\tif( options && _.contains( _.keys( options ), thisOptionName ) && _.isUndefined( options[ thisOptionName ] ) )\n\t\t\t\t\t\t\tthrow new Error( \"Required option \\\"\" + thisOptionName + \"\\\" can not be set to undefined.\" );\n\t\t\t\t\t}\n\n\t\t\t\t\t// attach the supplied value of this option, or the appropriate default value, to the view object\n\t\t\t\t\tif( options && thisOptionName in options && ! _.isUndefined( options[ thisOptionName ] ) ) {\n\t\t\t\t\t\tvar oldValue = _this[ thisOptionName ];\n\t\t\t\t\t\tvar newValue = options[ thisOptionName ];\n\t\t\t\t\t\t// if this option already exists on the view, and the new value is different,\n\t\t\t\t\t\t// make a note that we will be changing it\n\t\t\t\t\t\tif( ! _.isUndefined( oldValue ) && oldValue !== newValue ) {\n\t\t\t\t\t\t\toptionsThatWereChangedPreviousValues[ thisOptionName ] = oldValue;\n\t\t\t\t\t\t\toptionsThatWereChanged[ thisOptionName ] = newValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this[ thisOptionName ] = newValue;\n\t\t\t\t\t\t// note we do NOT delete the option off the options object here so that\n\t\t\t\t\t\t// multiple views can be passed the same options object without issue.\n\t\t\t\t\t}\n\t\t\t\t\telse if( _.isUndefined( _this[ thisOptionName ] ) ) {\n\t\t\t\t\t\t// note defaults do not write over any existing properties on the view itself.\n\t\t\t\t\t\t_this[ thisOptionName ] = thisOptionDefaultValue;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif( _.keys( optionsThatWereChanged ).length > 0 ) {\n\t\t\t\tif( _.isFunction( _this.onOptionsChanged ) )\n\t\t\t\t\t_this.onOptionsChanged( optionsThatWereChanged, optionsThatWereChangedPreviousValues );\n\t\t\t\telse if( _.isFunction( _this._onOptionsChanged ) )\n\t\t\t\t\t_this._onOptionsChanged( optionsThatWereChanged, optionsThatWereChangedPreviousValues );\n\t\t\t}\n\t\t};\n\n\t\tview.getOptions = function() {\n\t\t\tvar optionDeclarations = _.result( this, optionsDeclarationsProperty );\n\t\t\tif( _.isUndefined( optionDeclarations ) ) return {};\n\n\t\t\tvar normalizedOptionDeclarations = _normalizeOptionDeclarations( optionDeclarations );\n\t\t\tvar optionsNames = _.keys( normalizedOptionDeclarations );\n\n\t\t\treturn _.pick( this, optionsNames );\n\t\t};\n\t};\n\n\t// ****************** Private Utility Functions ******************\n\n\tfunction _normalizeOptionDeclarations( optionDeclarations ) {\n\t\t// convert our short-hand option syntax (with exclamation marks, etc.)\n\t\t// to a simple array of standard option declaration objects.\n\n\t\tvar normalizedOptionDeclarations = {};\n\n\t\tif( ! _.isArray( optionDeclarations ) ) throw new Error( \"Option declarations must be an array.\" );\n\n\t\t_.each( optionDeclarations, function( thisOptionDeclaration ) {\n\t\t\tvar thisOptionName, thisOptionRequired, thisOptionDefaultValue;\n\n\t\t\tthisOptionRequired = false;\n\t\t\tthisOptionDefaultValue = undefined;\n\n\t\t\tif( _.isString( thisOptionDeclaration ) )\n\t\t\t\tthisOptionName = thisOptionDeclaration;\n\t\t\telse if( _.isObject( thisOptionDeclaration ) ) {\n\t\t\t\tthisOptionName = _.first( _.keys( thisOptionDeclaration ) );\n\t\t\t\tif( _.isFunction( thisOptionDeclaration[ thisOptionName ] ) )\n\t\t\t\t\tthisOptionDefaultValue = thisOptionDeclaration[ thisOptionName ];\n\t\t\t\telse\n\t\t\t\t\tthisOptionDefaultValue = _.clone( thisOptionDeclaration[ thisOptionName ] );\n\t\t\t}\n\t\t\telse throw new Error( \"Each element in the option declarations array must be either a string or an object.\" );\n\n\t\t\tif( thisOptionName[ thisOptionName.length - 1 ] === \"!\" ) {\n\t\t\t\tthisOptionRequired = true;\n\t\t\t\tthisOptionName = thisOptionName.slice( 0, thisOptionName.length - 1 );\n\t\t\t}\n\n\t\t\tnormalizedOptionDeclarations[ thisOptionName ] = normalizedOptionDeclarations[ thisOptionName ] || {};\n\t\t\tnormalizedOptionDeclarations[ thisOptionName ].required = thisOptionRequired;\n\t\t\tif( ! _.isUndefined( thisOptionDefaultValue ) ) normalizedOptionDeclarations[ thisOptionName ].defaultValue = thisOptionDefaultValue;\n\t\t} );\n\n\t\treturn normalizedOptionDeclarations;\n\t}\n\n\n\t// Backbone.BabySitter\n\t// -------------------\n\t// v0.0.6\n\t//\n\t// Copyright (c)2013 Derick Bailey, Muted Solutions, LLC.\n\t// Distributed under MIT license\n\t//\n\t// http://github.com/babysitterjs/backbone.babysitter\n\n\t// Backbone.ChildViewContainer\n\t// ---------------------------\n\t//\n\t// Provide a container to store, retrieve and\n\t// shut down child views.\n\n\tChildViewContainer = (function(Backbone, _){\n\n\t\t// Container Constructor\n\t\t// ---------------------\n\n\t\tvar Container = function(views){\n\t\t\tthis._views = {};\n\t\t\tthis._indexByModel = {};\n\t\t\tthis._indexByCustom = {};\n\t\t\tthis._updateLength();\n\n\t\t\t_.each(views, this.add, this);\n\t\t};\n\n\t\t// Container Methods\n\t\t// -----------------\n\n\t\t_.extend(Container.prototype, {\n\n\t\t\t// Add a view to this container. Stores the view\n\t\t\t// by `cid` and makes it searchable by the model\n\t\t\t// cid (and model itself). Optionally specify\n\t\t\t// a custom key to store an retrieve the view.\n\t\t\tadd: function(view, customIndex){\n\t\t\t\tvar viewCid = view.cid;\n\n\t\t\t\t// store the view\n\t\t\t\tthis._views[viewCid] = view;\n\n\t\t\t\t// index it by model\n\t\t\t\tif (view.model){\n\t\t\t\t\tthis._indexByModel[view.model.cid] = viewCid;\n\t\t\t\t}\n\n\t\t\t\t// index by custom\n\t\t\t\tif (customIndex){\n\t\t\t\t\tthis._indexByCustom[customIndex] = viewCid;\n\t\t\t\t}\n\n\t\t\t\tthis._updateLength();\n\t\t\t},\n\n\t\t\t// Find a view by the model that was attached to\n\t\t\t// it. Uses the model's `cid` to find it.\n\t\t\tfindByModel: function(model){\n\t\t\t\treturn this.findByModelCid(model.cid);\n\t\t\t},\n\n\t\t\t// Find a view by the `cid` of the model that was attached to\n\t\t\t// it. Uses the model's `cid` to find the view `cid` and\n\t\t\t// retrieve the view using it.\n\t\t\tfindByModelCid: function(modelCid){\n\t\t\t\tvar viewCid = this._indexByModel[modelCid];\n\t\t\t\treturn this.findByCid(viewCid);\n\t\t\t},\n\n\t\t\t// Find a view by a custom indexer.\n\t\t\tfindByCustom: function(index){\n\t\t\t\tvar viewCid = this._indexByCustom[index];\n\t\t\t\treturn this.findByCid(viewCid);\n\t\t\t},\n\n\t\t\t// Find by index. This is not guaranteed to be a\n\t\t\t// stable index.\n\t\t\tfindByIndex: function(index){\n\t\t\t\treturn _.values(this._views)[index];\n\t\t\t},\n\n\t\t\t// retrieve a view by it's `cid` directly\n\t\t\tfindByCid: function(cid){\n\t\t\t\treturn this._views[cid];\n\t\t\t},\n\n\t\t\tfindIndexByCid : function( cid ) {\n\t\t\t\tvar index = -1;\n\t\t\t\tvar view = _.find( this._views, function ( view ) {\n\t\t\t\t\tindex++;\n\t\t\t\t\tif( view.model.cid == cid )\n\t\t\t\t\t\treturn view;\n\t\t\t\t} );\n\t\t\t\treturn ( view ) ? index : -1;\n\t\t\t},\n\n\t\t\t// Remove a view\n\t\t\tremove: function(view){\n\t\t\t\tvar viewCid = view.cid;\n\n\t\t\t\t// delete model index\n\t\t\t\tif (view.model){\n\t\t\t\t\tdelete this._indexByModel[view.model.cid];\n\t\t\t\t}\n\n\t\t\t\t// delete custom index\n\t\t\t\t_.any(this._indexByCustom, function(cid, key) {\n\t\t\t\t\tif (cid === viewCid) {\n\t\t\t\t\t\tdelete this._indexByCustom[key];\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\t// remove the view from the container\n\t\t\t\tdelete this._views[viewCid];\n\n\t\t\t\t// update the length\n\t\t\t\tthis._updateLength();\n\t\t\t},\n\n\t\t\t// Call a method on every view in the container,\n\t\t\t// passing parameters to the call method one at a\n\t\t\t// time, like `function.call`.\n\t\t\tcall: function(method){\n\t\t\t\tthis.apply(method, _.tail(arguments));\n\t\t\t},\n\n\t\t\t// Apply a method on every view in the container,\n\t\t\t// passing parameters to the call method one at a\n\t\t\t// time, like `function.apply`.\n\t\t\tapply: function(method, args){\n\t\t\t\t_.each(this._views, function(view){\n\t\t\t\t\tif (_.isFunction(view[method])){\n\t\t\t\t\t\tview[method].apply(view, args || []);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t// Update the `.length` attribute on this container\n\t\t\t_updateLength: function(){\n\t\t\t\tthis.length = _.size(this._views);\n\t\t\t}\n\t\t});\n\n\t\t// Borrowing this code from Backbone.Collection:\n\t\t// http://backbonejs.org/docs/backbone.html#section-106\n\t\t//\n\t\t// Mix in methods from Underscore, for iteration, and other\n\t\t// collection related features.\n\t\tvar methods = ['forEach', 'each', 'map', 'find', 'detect', 'filter',\n\t\t\t 'select', 'reject', 'every', 'all', 'some', 'any', 'include',\n\t\t\t 'contains', 'invoke', 'toArray', 'first', 'initial', 'rest',\n\t\t\t 'last', 'without', 'isEmpty', 'pluck'];\n\n\t\t_.each(methods, function(method) {\n\t\t\tContainer.prototype[method] = function() {\n\t\t\t\tvar views = _.values(this._views);\n\t\t\t\tvar args = [views].concat(_.toArray(arguments));\n\t\t\t\treturn _[method].apply(_, args);\n\t\t\t};\n\t\t});\n\n\t\t// return the public API\n\t\treturn Container;\n\t})(Backbone, _);\n\n\treturn Backbone.CollectionView;\n} ) );\n\n","/**\n * backbone.trackit - 0.1.0\n *\n * The MIT License\n * Copyright (c) 2013 The New York Times, CMS Group, Matthew DeLambo \n *\n * @since 7.4.0 Added support for deep models (attributes that are objects themselves).\n */\n(function() {\n\n\t// Unsaved Record Keeping\n\t// ----------------------\n\n\t// Collection of all models in an app that have unsaved changes.\n\tvar unsavedModels = [];\n\n\t// If the given model has unsaved changes then add it to\n\t// the `unsavedModels` collection, otherwise remove it.\n\tvar updateUnsavedModels = function(model) {\n\t\tif (!_.isEmpty(model._unsavedChanges)) {\n\t\t\tif (!_.findWhere(unsavedModels, {cid:model.cid})) unsavedModels.push(model);\n\t\t} else {\n\t\t\tunsavedModels = _.filter(unsavedModels, function(m) { return model.cid != m.cid; });\n\t\t}\n\t};\n\n\t// Unload Handlers\n\t// ---------------\n\n\t// Helper which returns a prompt message for an unload handler.\n\t// Uses the given function name (one of the callback names\n\t// from the `model.unsaved` configuration hash) to evaluate\n\t// whether a prompt is needed/returned.\n\tvar getPrompt = function(fnName) {\n\t\tvar prompt, args = _.rest(arguments);\n\t\t// Evaluate and return a boolean result. The given `fn` may be a\n\t\t// boolean value, a function, or the name of a function on the model.\n\t\tvar evaluateModelFn = function(model, fn) {\n\t\t\tif (_.isBoolean(fn)) return fn;\n\t\t\treturn (_.isString(fn) ? model[fn] : fn).apply(model, args);\n\t\t};\n\t\t_.each(unsavedModels, function(model) {\n\t\t\tif (!prompt && evaluateModelFn(model, model._unsavedConfig[fnName]))\n\t\t\t\tprompt = model._unsavedConfig.prompt;\n\t\t});\n\t\treturn prompt;\n\t};\n\n\t// Wrap Backbone.History.navigate so that in-app routing\n\t// (`router.navigate('/path')`) can be intercepted with a\n\t// confirmation if there are any unsaved models.\n\tBackbone.History.prototype.navigate = _.wrap(Backbone.History.prototype.navigate, function(oldNav, fragment, options) {\n\t\tvar prompt = getPrompt('unloadRouterPrompt', fragment, options);\n\t\tif (prompt) {\n\t\t\tif (confirm(prompt + ' \\n\\nAre you sure you want to leave this page?')) {\n\t\t\t\toldNav.call(this, fragment, options);\n\t\t\t}\n\t\t} else {\n\t\t\toldNav.call(this, fragment, options);\n\t\t}\n\t});\n\n\t// Create a browser unload handler which is triggered\n\t// on the refresh, back, or forward button.\n\twindow.onbeforeunload = function(e) {\n\t\treturn getPrompt('unloadWindowPrompt', e);\n\t};\n\n\t// Backbone.Model API\n\t// ------------------\n\n\t_.extend(Backbone.Model.prototype, {\n\n\t\tunsaved: {},\n\t\t_trackingChanges: false,\n\t\t_originalAttrs: {},\n\t\t_unsavedChanges: {},\n\n\t\t// Opt in to tracking attribute changes\n\t\t// between saves.\n\t\tstartTracking: function() {\n\t\t\tthis._unsavedConfig = _.extend({}, {\n\t\t\t\tprompt: 'You have unsaved changes!',\n\t\t\t\tunloadRouterPrompt: false,\n\t\t\t\tunloadWindowPrompt: false\n\t\t\t}, this.unsaved || {});\n\t\t\tthis._trackingChanges = true;\n\t\t\tthis._resetTracking();\n\t\t\tthis._triggerUnsavedChanges();\n\t\t\treturn this;\n\t\t},\n\n\t\t// Resets the default tracking values\n\t\t// and stops tracking attribute changes.\n\t\tstopTracking: function() {\n\t\t\tthis._trackingChanges = false;\n\t\t\tthis._originalAttrs = {};\n\t\t\tthis._unsavedChanges = {};\n\t\t\tthis._triggerUnsavedChanges();\n\t\t\treturn this;\n\t\t},\n\n\t\t// Gets rid of accrued changes and\n\t\t// resets state.\n\t\trestartTracking: function() {\n\t\t\tthis._resetTracking();\n\t\t\tthis._triggerUnsavedChanges();\n\t\t\treturn this;\n\t\t},\n\n\t\t// Restores this model's attributes to\n\t\t// their original values since tracking\n\t\t// started, the last save, or last restart.\n\t\tresetAttributes: function() {\n\t\t\tif (!this._trackingChanges) return;\n\t\t\tthis.attributes = this._originalAttrs;\n\t\t\tthis._resetTracking();\n\t\t\tthis._triggerUnsavedChanges();\n\t\t\treturn this;\n\t\t},\n\n\t\t// Symmetric to Backbone's `model.changedAttributes()`,\n\t\t// except that this returns a hash of the model's attributes that\n\t\t// have changed since the last save, or `false` if there are none.\n\t\t// Like `changedAttributes`, an external attributes hash can be\n\t\t// passed in, returning the attributes in that hash which differ\n\t\t// from the model.\n\t\tunsavedAttributes: function(attrs) {\n\t\t\tif (!attrs) return _.isEmpty(this._unsavedChanges) ? false : _.clone(this._unsavedChanges);\n\t\t\tvar val, changed = false, old = this._unsavedChanges;\n\t\t\tfor (var attr in attrs) {\n\t\t\t\tif (_.isEqual(old[attr], (val = attrs[attr]))) continue;\n\t\t\t\t(changed || (changed = {}))[attr] = val;\n\t\t\t}\n\t\t\treturn changed;\n\t\t},\n\n\t\t/**\n\t\t * Reset tracking.\n\t\t *\n\t\t * @since 7.4.0 Added support for deep models (attributes that are objects themselves),\n\t\t * by using `_.deepClone` in place of `_.clone`.\n\t\t */\n\t\t_resetTracking: function() {\n\t\t\tthis._originalAttrs = _.deepClone(this.attributes);\n\t\t\tthis._unsavedChanges = {};\n\t\t},\n\n\t\t// Trigger an `unsavedChanges` event on this model,\n\t\t// supplying the result of whether there are unsaved\n\t\t// changes and a changed attributes hash.\n\t\t_triggerUnsavedChanges: function() {\n\t\t\tthis.trigger('unsavedChanges', !_.isEmpty(this._unsavedChanges), _.clone(this._unsavedChanges));\n\t\t\tif (this.unsaved) updateUnsavedModels(this);\n\t\t}\n\t});\n\n\t// Wrap `model.set()` and update the internal\n\t// unsaved changes record keeping.\n\tBackbone.Model.prototype.set = _.wrap(Backbone.Model.prototype.set, function(oldSet, key, val, options) {\n\t\tvar attrs, ret;\n\t\tif (key == null) return this;\n\t\t// Handle both `\"key\", value` and `{key: value}` -style arguments.\n\t\tif (typeof key === 'object') {\n\t\t\tattrs = key;\n\t\t\toptions = val;\n\t\t} else {\n\t\t\t(attrs = {})[key] = val;\n\t\t}\n\t\toptions || (options = {});\n\n\t\t// Delegate to Backbone's set.\n\t\tret = oldSet.call(this, attrs, options);\n\n\t\tif (this._trackingChanges && !options.silent) {\n\t\t\t_.each(attrs, _.bind(function(val, key) {\n\t\t\t\tif (_.isEqual(this._originalAttrs[key], val))\n\t\t\t\t\tdelete this._unsavedChanges[key];\n\t\t\t\telse\n\t\t\t\t\tthis._unsavedChanges[key] = val;\n\t\t\t}, this));\n\t\t\tthis._triggerUnsavedChanges();\n\t\t}\n\t\treturn ret;\n\t});\n\n\t// Intercept `model.save()` and reset tracking/unsaved\n\t// changes if it was successful.\n\tBackbone.sync = _.wrap(Backbone.sync, function(oldSync, method, model, options) {\n\t\toptions || (options = {});\n\n\t\tif (method == 'update') {\n\t\t\toptions.success = _.wrap(options.success, _.bind(function(oldSuccess, data, textStatus, jqXHR) {\n\t\t\t\tvar ret;\n\t\t\t\tif (oldSuccess) ret = oldSuccess.call(this, data, textStatus, jqXHR);\n\t\t\t\tif (model._trackingChanges) {\n\t\t\t\t\tmodel._resetTracking();\n\t\t\t\t\tmodel._triggerUnsavedChanges();\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}, this));\n\t\t}\n\t\treturn oldSync(method, model, options);\n\t});\n\n})();\n\ndefine(\"vendor/backbone.trackit\", function(){});\n\n","/**\n * Image object model for use in various models for the 'image' attribute\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Models/Image',[], function() {\n\n\treturn Backbone.Model.extend( {\n\n\t\tdefaults: {\n\t\t\tenabled: 'no',\n\t\t\tid: '',\n\t\t\tsize: 'full',\n\t\t\tsrc: '',\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tthis.startTracking();\n\t\t},\n\n\t} );\n} );\n\n","/**\n * Model relationships mixin\n *\n * @since 3.16.0\n * @version 3.16.11\n */\ndefine( 'Models/_Relationships',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * Default relationship settings object\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\trelationship_defaults: {\n\t\t\tparent: {},\n\t\t\tchildren: {},\n\t\t},\n\n\t\t/**\n\t\t * Relationship settings object\n\t\t * Should be overridden in the model\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\trelationships: {},\n\n\t\t/**\n\t\t * Initialize all parent and child relationships\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinit_relationships: function( options ) {\n\n\t\t\tvar rels = this.get_relationships();\n\n\t\t\t// initialize parent relationships\n\t\t\t// useful when adding a model to ensure parent is initialized\n\t\t\tif ( rels.parent && options && options.parent ) {\n\t\t\t\tthis.set_parent( options.parent );\n\t\t\t}\n\n\t\t\t// initialize all children relationships\n\t\t\t_.each( rels.children, function( child_data, child_key ) {\n\n\t\t\t\tif ( ! child_data.conditional || true === child_data.conditional( this ) ) {\n\n\t\t\t\t\tvar child_val = this.get( child_key ),\n\t\t\t\t\t\tchild;\n\n\t\t\t\t\tif ( child_data.lookup ) {\n\t\t\t\t\t\tchild = child_data.lookup( child_val );\n\t\t\t\t\t} else if ( 'model' === child_data.type ) {\n\t\t\t\t\t\tchild = window.llms_builder.construct.get_model( child_data.class, child_val );\n\t\t\t\t\t} else if ( 'collection' === child_data.type ) {\n\t\t\t\t\t\tchild = window.llms_builder.construct.get_collection( child_data.class, child_val );\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.set( child_key, child );\n\n\t\t\t\t\t// if the child defines a parent, save a reference to the parent on the child\n\t\t\t\t\tif ( 'model' === child_data.type ) {\n\t\t\t\t\t\tthis._maybe_set_parent_reference( child );\n\n\t\t\t\t\t\t// save directly to each model in the collection\n\t\t\t\t\t} else if ( 'collection' === child_data.type ) {\n\n\t\t\t\t\t\tchild.parent = this;\n\t\t\t\t\t\tchild.each( function( child_model ) {\n\n\t\t\t\t\t\t\tthis._maybe_set_parent_reference( child_model );\n\n\t\t\t\t\t\t}, this );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the property names for all children of the model\n\t\t *\n\t\t * @return array\n\t\t * @since 3.16.11\n\t\t * @version 3.16.11\n\t\t */\n\t\tget_child_props: function() {\n\n\t\t\tvar props = [];\n\n\t\t\t_.each( this.get_relationships().children, function( data, key ) {\n\n\t\t\t\tif ( ! data.conditional || true === data.conditional( this ) ) {\n\t\t\t\t\tprops.push( key );\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t\treturn props;\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the model's parent (if set)\n\t\t *\n\t\t * @return obj|false\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_parent: function() {\n\n\t\t\tvar rels = this.get_relationships();\n\n\t\t\tif ( rels.parent ) {\n\t\t\t\treturn rels.parent.reference;\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve relationships for the model\n\t\t * Extends with defaults\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_relationships: function() {\n\n\t\t\treturn $.extend( true, this.relationships, this.relationship_defaults );\n\n\t\t},\n\n\t\t/**\n\t\t * Set the parent reference for the given model\n\t\t *\n\t\t * @param obj obj parent model obj\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tset_parent: function( obj ) {\n\t\t\tthis.relationships.parent.reference = obj;\n\t\t},\n\n\t\t/**\n\t\t * Set up the parent relationships for qualifying children during relationship initialization\n\t\t *\n\t\t * @param obj model child model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_maybe_set_parent_reference: function( model ) {\n\n\t\t\tif ( ! model || ! model.get_relationships ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar rels = model.get_relationships();\n\t\t\tif ( rels.parent && rels.parent.model === this.get( 'type' ) ) {\n\t\t\t\tmodel.set_parent( this );\n\t\t\t}\n\n\t\t},\n\n\t};\n\n} );\n\n","/**\n * Quiz Question Choice\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Models/QuestionChoice',[ 'Models/Image', 'Models/_Relationships' ], function( Image, Relationships ) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\t/**\n\t\t * Model relationships\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\trelationships: {\n\t\t\tparent: {\n\t\t\t\tmodel: 'llms_question',\n\t\t\t\ttype: 'model',\n\t\t\t},\n\t\t\tchildren: {\n\t\t\t\tchoice: {\n\t\t\t\t\tconditional: function( model ) {\n\t\t\t\t\t\treturn ( 'image' === model.get( 'choice_type' ) );\n\t\t\t\t\t},\n\t\t\t\t\tclass: 'Image',\n\t\t\t\t\tmodel: 'image',\n\t\t\t\t\ttype: 'model',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Model defaults\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\tchoice: '',\n\t\t\t\tchoice_type: 'text',\n\t\t\t\tcorrect: false,\n\t\t\t\tmarker: 'A',\n\t\t\t\tquestion_id: '',\n\t\t\t\ttype: 'choice',\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @param obj data object of model attributes\n\t\t * @param obj options additional options\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function( data, options ) {\n\n\t\t\tthis.startTracking();\n\t\t\tthis.init_relationships( options );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the choice's parent question\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_parent: function() {\n\t\t\treturn this.collection.parent;\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the ID used when trashing the model\n\t\t *\n\t\t * @return string\n\t\t * @since 3.17.1\n\t\t * @version 3.17.1\n\t\t */\n\t\tget_trash_id: function() {\n\t\t\treturn this.get( 'question_id' ) + ':' + this.get( 'id' );\n\t\t},\n\n\t\t/**\n\t\t * Determine if \"selection\" is enabled for the question type\n\t\t * Choice type questions are selectable by reorder type questions are not but still use choices\n\t\t *\n\t\t * @return {Boolean}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tis_selectable: function() {\n\t\t\treturn this.get_parent().get( 'question_type' ).get_choice_selectable();\n\t\t},\n\n\t}, Relationships ) );\n\n} );\n\n","/**\n * Question Choice Collection\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Collections/QuestionChoices',[ 'Models/QuestionChoice' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\tinitialize: function() {\n\n\t\t\t// reorder called by QuestionList view when sortable drops occur\n\t\t\tthis.on( 'reorder', this.update_order );\n\n\t\t\t// when a choice is added or removed, update order\n\t\t\tthis.on( 'add', this.update_order );\n\t\t\tthis.on( 'remove', this.update_order );\n\n\t\t\t// when a choice is added or remove, ensure min/max correct answers exist\n\t\t\tthis.on( 'add', this.update_correct );\n\t\t\tthis.on( 'remove', this.update_correct );\n\n\t\t\t// when a choice is toggled, ensure min/max correct exist\n\t\t\tthis.on( 'correct-update', this.update_correct );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the number of correct choices in the collection\n\t\t *\n\t\t * @return int\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tcount_correct: function() {\n\n\t\t\treturn _.size( this.get_correct() );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the collection reduced to only correct choices\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_correct: function() {\n\t\t\treturn this.filter( function( choice ) {\n\t\t\t\treturn choice.get( 'correct' );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Ensure min/max correct choices exist in the collection based on the question's settings\n\t\t *\n\t\t * @param obj choice model of the choice that was toggled\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_correct: function( choice ) {\n\n\t\t\tif ( ! this.parent.get( 'question_type' ).get_choice_selectable() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar siblings = this.without( choice ), // exclude the toggled choice from loops\n\t\t\t\tquestion = this.parent;\n\n\t\t\t// if multiple choices aren't enabled turn all other choices to incorrect\n\t\t\tif ( 'no' === question.get( 'multi_choices' ) ) {\n\t\t\t\t_.each( siblings, function( model ) {\n\t\t\t\t\tmodel.set( 'correct', false );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// if we don't have a single correct answer & the question has points, set one\n\t\t\t// allows users to create quizzes / questions with no points and therefore no correct answers are allowed\n\t\t\tif ( 0 === this.count_correct() && question.get( 'points' ) > 0 ) {\n\t\t\t\tvar models = 1 === this.size() ? this.models : siblings;\n\t\t\t\t_.first( models ).set( 'correct', true );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Update the marker attr of each choice in the list to reflect the order of the collection\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_order: function() {\n\n\t\t\tvar self = this,\n\t\t\t\tquestion = this.parent;\n\n\t\t\tthis.each( function( choice ) {\n\t\t\t\tchoice.set( 'marker', question.get( 'question_type' ).get_choice_markers()[ self.indexOf( choice ) ] );\n\t\t\t} );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Quiz Question Type\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Models/QuestionType',[], function() {\n\n\treturn Backbone.Model.extend( {\n\n\t\t/**\n\t\t * Get model default attributes\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tchoices: false,\n\t\t\t\tclarifications: true,\n\t\t\t\tdefault_choices: [],\n\t\t\t\tdescription: true,\n\t\t\t\ticon: 'question',\n\t\t\t\tid: 'generic',\n\t\t\t\timage: true,\n\t\t\t\tkeywords: [],\n\t\t\t\tname: 'Generic',\n\t\t\t\tplaceholder: '',\n\t\t\t\tpoints: true,\n\t\t\t\tvideo: true,\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Retrieve an array of keywords for the question type\n\t\t * Used for filtering questions by search term in the quiz builder\n\t\t *\n\t\t * @return array\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_keywords: function() {\n\n\t\t\tvar name = this.get( 'name' ),\n\t\t\t\twords = [ name ];\n\n\t\t\treturn words.concat( this.get( 'keywords' ) ).concat( name.split( ' ' ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Get marker array for the question choices\n\t\t *\n\t\t * @return array\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_choice_markers: function() {\n\n\t\t\treturn this._get_choice_option( 'markers' );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if the question's choices are selectable\n\t\t *\n\t\t * @return bool\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_choice_selectable: function() {\n\n\t\t\treturn this._get_choice_option( 'selectable' );\n\n\t\t},\n\n\t\t/**\n\t\t * Get the choice type (text,image)\n\t\t *\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_choice_type: function() {\n\n\t\t\treturn this._get_choice_option( 'type' );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve defined min. choices\n\t\t *\n\t\t * @return int\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_min_choices: function() {\n\n\t\t\treturn this._get_choice_option( 'min' );\n\n\t\t},\n\n\t\t/**\n\t\t * Get type-defined max choices\n\t\t *\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_max_choices: function() {\n\n\t\t\treturn this._get_choice_option( 'max' );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if multi-choice selection is enabled\n\t\t *\n\t\t * @return bool\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_multi_choices: function() {\n\n\t\t\tvar choices = this.get( 'choices' );\n\n\t\t\tif ( ! choices ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this._get_choice_option( 'multi' );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve data from the type's \"choices\" attribute\n\t\t * Allows quick handling of types with no choice definitions w/o additional checks\n\t\t *\n\t\t * @param string option name of the choice option to retrieve\n\t\t * @return mixed\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_get_choice_option: function( option ) {\n\n\t\t\tvar choices = this.get( 'choices' );\n\n\t\t\tif ( ! choices || ! choices[ option ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn choices[ option ];\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Utility functions for Models.\n *\n * @since 3.16.0\n * @version 7.4.0\n */\ndefine( 'Models/_Utilities',[], function() {\n\n\treturn {\n\n\t\tfields: [],\n\n\t\t/**\n\t\t * Override Backbone `set` method.\n\t\t *\n\t\t * Takes into account attributes of the form object[prop].\n\t\t *\n\t\t * @since 7.4.0\n\t\t *\n\t\t * @param {Mixed} attr The attribute to be set.\n\t\t * @param {Mixed} val The value to set.\n\t\t */\n\t\tset: function ( attr, val ) {\n\n\t\t\tif ( 'string' === typeof attr ) {\n\n\t\t\t\tconst matches = attr.match( /(.*?)\\[(.*?)\\]/ );\n\t\t\t\tif ( matches && 3 === matches.length ) {\n\n\t\t\t\t\tconst\n\t\t\t\t\t\trealAttr = matches[1],\n\t\t\t\t\t\tcurrentVal = Backbone.Model.prototype.get.call( this, realAttr );\n\n\t\t\t\t\tvar newVal = undefined !== currentVal ? currentVal : {};\n\n\t\t\t\t\tnewVal[ matches[2] ] = val;\n\n\t\t\t\t\targuments[0] = realAttr;\n\t\t\t\t\targuments[1] = newVal;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Continue with Backbone default `set` behavior.\n\t\t\tBackbone.Model.prototype.set.apply( this, arguments );\n\n\t\t},\n\n\t\t/**\n\t\t * Override Backbone `get` method.\n\t\t *\n\t\t * Takes into account attributes of the form object[prop].\n\t\t *\n\t\t * @since 7.4.0\n\t\t *\n\t\t * @param {Mixed} attr The attribute name.\n\t\t */\n\t\tget: function( attr ) {\n\n\t\t\tconst matches = attr.match( /(.*?)\\[(.*?)\\]/ );\n\t\t\tif ( matches && 3 === matches.length ) {\n\t\t\t\tconst val = Backbone.Model.prototype.get.call( this, matches[1] );\n\t\t\t\tif ( val && undefined !== val[ matches[2] ] ) {\n\t\t\t\t\treturn val[ matches[2] ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Continue with Backbone default `get` behavior.\n\t\t\treturn Backbone.Model.prototype.get.call( this, attr );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the edit post link for the current model.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return string\n\t\t */\n\t\tget_edit_post_link: function() {\n\n\t\t\tif ( this.has_temp_id() ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn window.llms_builder.admin_url + 'post.php?post=' + this.get( 'id' ) + '&action=edit';\n\n\t\t},\n\n\t\tget_view_post_link: function() {\n\t\t\tif ( this.has_temp_id() ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif ( this.get( 'permalink' ) ) {\n\t\t\t\treturn this.get( 'permalink' );\n\t\t\t}\n\n\t\t\tif ( this.get( 'status' ) === 'publish' ) {\n\t\t\t\treturn window.llms_builder.home_url + '?p=' + this.get( 'id' );\n\t\t\t}\n\n\t\t\treturn window.llms_builder.home_url + '?p=' + this.get( 'id' ) + '&preview=true&post_type=' + this.get( 'type' );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve schema fields defined for the model\n\t\t *\n\t\t * @return object\n\t\t * @since 3.17.0\n\t\t * @version 3.17.1\n\t\t */\n\t\tget_settings_fields: function() {\n\n\t\t\tvar schema = this.schema || {};\n\t\t\treturn window.llms_builder.schemas.get( schema, this.get( 'type' ).replace( 'llms_', '' ), this );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if the model has a temporary ID\n\t\t *\n\t\t * @return {Boolean}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\thas_temp_id: function() {\n\n\t\t\treturn ( ! _.isNumber( this.get( 'id' ) ) && 0 === this.get( 'id' ).indexOf( 'temp_' ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Initializes 3rd party custom schema (field) data for a model\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tinit_custom_schema: function() {\n\n\t\t\tvar groups = _.filter( this.get_settings_fields(), function( group ) {\n\t\t\t\treturn ( group.custom );\n\t\t\t} );\n\n\t\t\t_.each( groups, function( group ) {\n\t\t\t\t_.each( _.flatten( group.fields ), function( field ) {\n\n\t\t\t\t\tvar keys = [ field.attribute ],\n\t\t\t\t\t\tcustoms = this.get( 'custom' );\n\n\t\t\t\t\tif ( field.switch_attribute ) {\n\t\t\t\t\t\tkeys.push( field.switch_attribute );\n\t\t\t\t\t}\n\n\t\t\t\t\t_.each( keys, function( key ) {\n\t\t\t\t\t\tvar attr = field.attribute_prefix ? field.attribute_prefix + key : key;\n\t\t\t\t\t\tif ( customs && customs[ attr ] ) {\n\t\t\t\t\t\t\tthis.set( key, customs[ attr ][0] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this );\n\n\t\t\t\t}, this );\n\t\t\t}, this );\n\n\t\t},\n\n\t};\n\n} );\n\n","/**\n * Quiz Question\n *\n * @since 3.16.0\n * @version 3.27.0\n */\ndefine( 'Models/Question',[\n\t\t'Models/Image',\n\t\t'Collections/Questions',\n\t\t'Collections/QuestionChoices',\n\t\t'Models/QuestionType',\n\t\t'Models/_Relationships',\n\t\t'Models/_Utilities'\n\t], function(\n\t\tImage,\n\t\tQuestions,\n\t\tQuestionChoices,\n\t\tQuestionType,\n\t\tRelationships,\n\t\tUtilities\n\t) {\n\n\t\treturn Backbone.Model.extend( _.defaults( {\n\n\t\t\t/**\n\t\t\t * Model relationships\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\trelationships: {\n\t\t\t\tparent: {\n\t\t\t\t\tmodel: 'llms_quiz',\n\t\t\t\t\ttype: 'model',\n\t\t\t\t},\n\t\t\t\tchildren: {\n\t\t\t\t\tchoices: {\n\t\t\t\t\t\tclass: 'QuestionChoices',\n\t\t\t\t\t\tmodel: 'choice',\n\t\t\t\t\t\ttype: 'collection',\n\t\t\t\t\t},\n\t\t\t\t\timage: {\n\t\t\t\t\t\tclass: 'Image',\n\t\t\t\t\t\tmodel: 'image',\n\t\t\t\t\t\ttype: 'model',\n\t\t\t\t\t},\n\t\t\t\t\tquestions: {\n\t\t\t\t\t\tclass: 'Questions',\n\t\t\t\t\t\tconditional: function( model ) {\n\t\t\t\t\t\t\tvar type = model.get( 'question_type' ),\n\t\t\t\t\t\t\ttype_id = _.isString( type ) ? type : type.get( 'id' );\n\t\t\t\t\t\t\treturn ( 'group' === type_id );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmodel: 'llms_question',\n\t\t\t\t\t\ttype: 'collection',\n\t\t\t\t\t},\n\t\t\t\t\tquestion_type: {\n\t\t\t\t\t\tclass: 'QuestionType',\n\t\t\t\t\t\tlookup: function( val ) {\n\t\t\t\t\t\t\tif ( _.isString( val ) ) {\n\t\t\t\t\t\t\t\treturn window.llms_builder.questions.get( val );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn val;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmodel: 'question_type',\n\t\t\t\t\t\ttype: 'model',\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Model defaults\n\t\t\t *\n\t\t\t * @return obj\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tdefaults: function() {\n\t\t\t\treturn {\n\t\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\t\tchoices: [],\n\t\t\t\t\tcontent: '',\n\t\t\t\t\tdescription_enabled: 'no',\n\t\t\t\t\timage: {},\n\t\t\t\t\tmulti_choices: 'no',\n\t\t\t\t\tmenu_order: 1,\n\t\t\t\t\tpoints: 1,\n\t\t\t\t\tquestion_type: 'generic',\n\t\t\t\t\tquestions: [], // for question groups\n\t\t\t\t\tparent_id: '',\n\t\t\t\t\ttitle: '',\n\t\t\t\t\ttype: 'llms_question',\n\t\t\t\t\tvideo_enabled: 'no',\n\t\t\t\t\tvideo_src: '',\n\n\t\t\t\t\t_expanded: false,\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Initializer\n\t\t\t *\n\t\t\t * @param obj data object of data for the model\n\t\t\t * @param obj options additional options\n\t\t\t * @return void\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tinitialize: function( data, options ) {\n\n\t\t\t\tvar self = this;\n\n\t\t\t\tthis.startTracking();\n\t\t\t\tthis.init_relationships( options );\n\n\t\t\t\tif ( false !== this.get( 'question_type' ).choices ) {\n\n\t\t\t\t\tthis._ensure_min_choices();\n\n\t\t\t\t\t// when a choice is removed, maybe add back some defaults so we always have the minimum\n\t\t\t\t\tthis.listenTo( this.get( 'choices' ), 'remove', function() {\n\t\t\t\t\t\t// new items are added at index 0 when there's only 1 item in the collection, not sure why exactly...\n\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\tself._ensure_min_choices();\n\t\t\t\t\t\t}, 0 );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t// ensure question types that don't support points don't record default 1 point in database\n\t\t\t\tif ( ! this.get( 'question_type' ).get( 'points' ) ) {\n\t\t\t\t\tthis.set( 'points', 0 );\n\t\t\t\t}\n\n\t\t\t\t_.delay( function( self ) {\n\t\t\t\t\tself.on( 'change:points', self.get_parent().update_points, self.get_parent() );\n\t\t\t\t}, 1, this );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Add a new question choice\n\t\t\t *\n\t\t\t * @param obj data object of choice data\n\t\t\t * @param obj options additional options\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tadd_choice: function( data, options ) {\n\n\t\t\t\tvar max = this.get( 'question_type' ).get_max_choices();\n\t\t\t\tif ( this.get( 'choices' ).size() >= max ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdata = data || {};\n\t\t\t\toptions = options || {};\n\n\t\t\t\tdata.choice_type = this.get( 'question_type' ).get_choice_type();\n\t\t\t\tdata.question_id = this.get( 'id' );\n\t\t\t\toptions.parent = this;\n\n\t\t\t\tvar choice = this.get( 'choices' ).add( data, options );\n\n\t\t\t\tBackbone.pubSub.trigger( 'question-add-choice', choice, this );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Collapse question_type attribute during full syncs to save to database\n\t\t\t * Not needed because question types cannot be adjusted after question creation\n\t\t\t * Called from sync controller\n\t\t\t *\n\t\t\t * @param obj atts flat object of attributes to be saved to db\n\t\t\t * @param string sync_type full or partial\n\t\t\t * full indicates a force resync or that the model isn't persisted yet\n\t\t\t * @return obj\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tbefore_save: function( atts, sync_type ) {\n\t\t\t\tif ( 'full' === sync_type ) {\n\t\t\t\t\tatts.question_type = this.get( 'question_type' ).get( 'id' );\n\t\t\t\t}\n\t\t\t\treturn atts;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the model's parent (if set)\n\t\t\t *\n\t\t\t * @return obj|false\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_parent: function() {\n\n\t\t\t\tvar rels = this.get_relationships();\n\n\t\t\t\tif ( rels.parent ) {\n\t\t\t\t\tif ( this.collection && this.collection.parent ) {\n\t\t\t\t\t\treturn this.collection.parent;\n\t\t\t\t\t} else if ( rels.parent.reference ) {\n\t\t\t\t\t\treturn rels.parent.reference;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the translated post type name for the model's type\n\t\t\t *\n\t\t\t * @param bool plural if true, returns the plural, otherwise returns singular\n\t\t\t * @return string\n\t\t\t * @since 3.27.0\n\t\t\t * @version 3.27.0\n\t\t\t */\n\t\t\tget_l10n_type: function( plural ) {\n\n\t\t\t\tif ( plural ) {\n\t\t\t\t\treturn LLMS.l10n.translate( 'questions' );\n\t\t\t\t}\n\n\t\t\t\treturn LLMS.l10n.translate( 'question' );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Gets the index of the question within it's parent\n\t\t\t * Question numbers skip content elements\n\t\t\t * & content elements skip questions\n\t\t\t *\n\t\t\t * @return int\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_type_index: function() {\n\n\t\t\t\t// current models type, used to check the predicate in the filter function below\n\t\t\t\tvar curr_type = this.get( 'question_type' ).get( 'id' ),\n\t\t\t\tquestions;\n\n\t\t\t\tquestions = this.collection.filter( function( question ) {\n\n\t\t\t\t\tvar type = question.get( 'question_type' ).get( 'id' );\n\n\t\t\t\t\t// if current model is not content, return all non-content questions\n\t\t\t\t\tif ( curr_type !== 'content' ) {\n\t\t\t\t\t\treturn ( 'content' !== type );\n\t\t\t\t\t}\n\n\t\t\t\t\t// current model is content, return only content questions\n\t\t\t\t\treturn 'content' === type;\n\n\t\t\t\t} );\n\n\t\t\t\treturn questions.indexOf( this );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Gets iterator for the given type\n\t\t\t * Questions use numbers and content uses alphabet\n\t\t\t *\n\t\t\t * @return mixed\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_type_iterator: function() {\n\n\t\t\t\tvar index = this.get_type_index();\n\n\t\t\t\tif ( -1 === index ) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\n\t\t\t\tif ( 'content' === this.get( 'question_type' ).get( 'id' ) ) {\n\t\t\t\t\tvar alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );\n\t\t\t\t\treturn alphabet[ index ];\n\t\t\t\t}\n\n\t\t\t\treturn index + 1;\n\n\t\t\t},\n\n\t\t\tget_qid: function() {\n\n\t\t\t\tvar parent = this.get_parent_question(),\n\t\t\t\tprefix = '';\n\n\t\t\t\tif ( parent ) {\n\n\t\t\t\t\tprefix = parent.get_qid() + '.';\n\n\t\t\t\t}\n\n\t\t\t\t// return short_id + this.get_type_iterator();\n\t\t\t\treturn prefix + this.get_type_iterator();\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the parent question (if the question is in a question group)\n\t\t\t *\n\t\t\t * @return obj|false\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_parent_question: function() {\n\n\t\t\t\tif ( this.is_in_group() ) {\n\n\t\t\t\t\treturn this.collection.parent;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the parent quiz\n\t\t\t *\n\t\t\t * @return obj\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_parent_quiz: function() {\n\t\t\t\treturn this.get_parent();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Points getter\n\t\t\t * ensures that 0 is always returned if the question type doesn't support points\n\t\t\t *\n\t\t\t * @return int\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_points: function() {\n\n\t\t\t\tif ( ! this.get( 'question_type' ).get( 'points' ) ) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn this.get( 'points' );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the questions percentage value within the quiz\n\t\t\t *\n\t\t\t * @return string\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_points_percentage: function() {\n\n\t\t\t\tvar total = this.get_parent().get( '_points' ),\n\t\t\t\tpoints = this.get( 'points' );\n\n\t\t\t\tif ( 0 === total ) {\n\t\t\t\t\treturn '0%';\n\t\t\t\t}\n\n\t\t\t\treturn ( ( points / total ) * 100 ).toFixed( 2 ) + '%';\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Determine if the question belongs to a question group\n\t\t\t *\n\t\t\t * @return {Boolean}\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tis_in_group: function() {\n\n\t\t\t\treturn ( 'question' === this.collection.parent.get( 'type' ) );\n\n\t\t\t},\n\n\t\t\t_ensure_min_choices: function() {\n\n\t\t\t\tvar choices = this.get( 'choices' );\n\t\t\t\twhile ( choices.size() < this.get( 'question_type' ).get_min_choices() ) {\n\t\t\t\t\tthis.add_choice();\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Questions Collection\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Collections/Questions',[ 'Models/Question' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\t// reorder called by QuestionList view when sortable drops occur\n\t\t\tthis.on( 'reorder', this.update_order );\n\n\t\t\t// when a question is added or removed, update order\n\t\t\tthis.on( 'add', this.update_order );\n\t\t\tthis.on( 'remove', this.update_order );\n\n\t\t\tthis.on( 'add', this.update_parent );\n\n\t\t},\n\n\t\t/**\n\t\t * Update the order attr of each question in the list to reflect the order of the collection\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_order: function() {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.each( function( question ) {\n\n\t\t\t\tquestion.set( 'menu_order', self.indexOf( question ) + 1 );\n\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * When adding a question to a question list, update the question's parent\n\t\t * Will ensure that questions moved into and out of groups always have the correct parent_id\n\t\t *\n\t\t * @param obj model instance of the question model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_parent: function( model ) {\n\n\t\t\tmodel.set( 'parent_id', this.parent.get( 'id' ) );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Quiz Schema.\n *\n * @since 3.17.6\n * @since 7.4.0 Added upsell for Question Bank and condition in `random_questions` schema.\n * @since 7.6.2 Added `disable_retake` schema.\n * @version 7.6.2\n */\ndefine( 'Schemas/Quiz',[], function() {\n\n\treturn window.llms.hooks.applyFilters( 'llms_define_quiz_schema', {\n\n\t\tdefault: {\n\t\t\ttitle: LLMS.l10n.translate( 'General Settings' ),\n\t\t\ttoggleable: true,\n\t\t\tfields: [\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'permalink',\n\t\t\t\t\t\tid: 'permalink',\n\t\t\t\t\t\ttype: 'permalink',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'content',\n\t\t\t\t\t\tid: 'description',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Description' ),\n\t\t\t\t\t\ttype: 'editor',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'passing_percent',\n\t\t\t\t\t\tid: 'passing-percent',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Passing Percentage' ),\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Minimum percentage of total points required to pass the quiz' ),\n\t\t\t\t\t\ttype: 'number',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'allowed_attempts',\n\t\t\t\t\t\tid: 'allowed-attempts',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Limit Attempts' ),\n\t\t\t\t\t\tswitch_attribute: 'limit_attempts',\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Limit the maximum number of times a student can take this quiz' ),\n\t\t\t\t\t\ttype: 'switch-number',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'time_limit',\n\t\t\t\t\t\tid: 'time-limit',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Time Limit' ),\n\t\t\t\t\t\tmin: 1,\n\t\t\t\t\t\tmax: 360,\n\t\t\t\t\t\tswitch_attribute: 'limit_time',\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Enforce a maximum number of minutes a student can spend on each attempt' ),\n\t\t\t\t\t\ttype: 'switch-number',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'show_correct_answer',\n\t\t\t\t\t\tid: 'show-correct-answer',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Show Correct Answers' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'When enabled, students will be shown the correct answer to any question they answered incorrectly.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'random_questions',\n\t\t\t\t\t\tid: 'random-questions',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Randomize Question Order' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Display questions in a random order for each attempt. Content questions are locked into their defined positions.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn 'yes' === this.get( 'question_bank' ) ? false : true;\n\t\t\t\t\t\t}\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'disable_retake',\n\t\t\t\t\t\tid: 'disable-retake',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Disable Retake' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Prevent quiz retake after student passed the quiz.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'question-bank',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Question Bank' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'A question bank helps prevent cheating and reinforces learning by allowing instructors to create assessments with randomized questions pulled from a bank of questions. (Available in Advanced Quizzes addon)' ),\n\t\t\t\t\t\ttype: 'upsell',\n\t\t\t\t\t\ttext: LLMS.l10n.translate( 'Get LifterLMS Advanced Quizzes' ),\n\t\t\t\t\t\turl: 'https://lifterlms.com/product/advanced-quizzes/?utm_source=LifterLMS%20Plugin&utm_medium=Quiz%20Builder%20Button&utm_campaign=Advanced%20Question%20Upsell&utm_content=3.16.0&utm_term=Questions%20Bank'\n\t\t\t\t\t}\n\t\t\t\t]\n\n\t\t\t],\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Quiz Model.\n *\n * @since 3.16.0\n * @version 7.5.0\n */\ndefine( 'Models/Quiz',[\n\t\t'Collections/Questions',\n\t\t'Models/Lesson',\n\t\t'Models/Question',\n\t\t'Models/_Relationships',\n\t\t'Models/_Utilities',\n\t\t'Schemas/Quiz',\n\t], function(\n\t\tQuestions,\n\t\tLesson,\n\t\tQuestion,\n\t\tRelationships,\n\t\tUtilities,\n\t\tQuizSchema\n\t) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\t/**\n\t\t * model relationships\n\t\t * @type {Object}\n\t\t */\n\t\trelationships: {\n\t\t\tparent: {\n\t\t\t\tmodel: 'lesson',\n\t\t\t\ttype: 'model',\n\t\t\t},\n\t\t\tchildren: {\n\t\t\t\tquestions: {\n\t\t\t\t\tclass: 'Questions',\n\t\t\t\t\tmodel: 'llms_question',\n\t\t\t\t\ttype: 'collection',\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Lesson Settings Schema\n\t\t * @type {Object}\n\t\t */\n\t\tschema: QuizSchema,\n\n\t\t/**\n\t\t * New quiz defaults.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 7.4.0 Added filter for filtering defaults.\n\t\t * @since 7.5.0 Replaced unused `random_answers` property with `random_questions`.\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\tdefaults: function() {\n\n\t\t\treturn window.llms.hooks.applyFilters( 'llms_quiz_model_defaults', {\n\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\ttitle: LLMS.l10n.translate( 'New Quiz' ),\n\t\t\t\ttype: 'llms_quiz',\n\t\t\t\tlesson_id: '',\n\n\t\t\t\tstatus: 'draft',\n\n\t\t\t\t// editable fields.\n\t\t\t\tcontent: '',\n\t\t\t\tallowed_attempts: 5,\n\t\t\t\tlimit_attempts: 'no',\n\t\t\t\tlimit_time: 'no',\n\t\t\t\tpassing_percent: 65,\n\t\t\t\tname: '',\n\t\t\t\trandom_questions: 'no',\n\t\t\t\ttime_limit: 30,\n\t\t\t\tshow_correct_answer: 'no',\n\t\t\t\tdisable_retake: 'no',\n\n\t\t\t\tquestions: [],\n\n\t\t\t\t// calculated.\n\t\t\t\t_points: 0,\n\n\t\t\t\t// display.\n\t\t\t\tpermalink: '',\n\t\t\t\t_show_settings: false,\n\t\t\t\t_questions_loaded: false,\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Initializer\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.24.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.init_custom_schema();\n\t\t\tthis.startTracking();\n\t\t\tthis.init_relationships();\n\n\t\t\tthis.listenTo( this.get( 'questions' ), 'add', this.update_points );\n\t\t\tthis.listenTo( this.get( 'questions' ), 'remove', this.update_points );\n\n\t\t\tthis.set( '_points', this.get_total_points() );\n\n\t\t\t// when a quiz is published, ensure the parent lesson is marked as \"Enabled\" for quizzing\n\t\t\tthis.on( 'change:status', function() {\n\t\t\t\tif ( 'publish' === this.get( 'status' ) ) {\n\t\t\t\t\tthis.get_parent().set( 'quiz_enabled', 'yes' );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\twindow.llms.hooks.doAction( 'llms_quiz_model_init', this );\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new question to the quiz\n\t\t * @param obj data question data\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tadd_question: function( data ) {\n\n\t\t\tdata.parent_id = this.get( 'id' );\n\t\t\tvar question = this.get( 'questions' ).add( data, {\n\t\t\t\tparent: this,\n\t\t\t} );\n\t\t\tBackbone.pubSub.trigger( 'quiz-add-question', question, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the translated post type name for the model's type\n\t\t * @param bool plural if true, returns the plural, otherwise returns singular\n\t\t * @return string\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tget_l10n_type: function( plural ) {\n\n\t\t\tif ( plural ) {\n\t\t\t\treturn LLMS.l10n.translate( 'quizzes' );\n\t\t\t}\n\n\t\t\treturn LLMS.l10n.translate( 'quiz' );\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the quiz's total points\n\t\t * @return int\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_total_points: function() {\n\n\t\t\tvar points = 0;\n\n\t\t\tthis.get( 'questions' ).each( function( question ) {\n\t\t\t\tpoints += question.get_points();\n\t\t\t} );\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\t/**\n\t\t * Lazy load questions via AJAX\n\t\t * @param {Function} cb callback function\n\t\t * @return void\n\t\t * @since 3.19.2\n\t\t * @version 3.19.2\n\t\t */\n\t\tload_questions: function( cb ) {\n\n\t\t\tif ( this.get( '_questions_loaded' ) ) {\n\n\t\t\t\tcb();\n\n\t\t\t} else {\n\n\t\t\t\tvar self = this;\n\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'llms_builder',\n\t\t\t\t\t\taction_type: 'lazy_load',\n\t\t\t\t\t\tcourse_id: window.llms_builder.CourseModel.get( 'id' ),\n\t\t\t\t\t\tload_id: this.get( 'id' ),\n\t\t\t\t\t},\n\t\t\t\t\terror: function( xhr, status, error ) {\n\n\t\t\t\t\t\tconsole.log( xhr, status, error );\n\t\t\t\t\t\twindow.llms_builder.debug.log( '==== start load_questions error ====', xhr, status, error, '==== finish load_questions error ====' );\n\t\t\t\t\t\tcb( true );\n\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( res ) {\n\t\t\t\t\t\tif ( res && res.questions ) {\n\t\t\t\t\t\t\tself.set( '_questions_loaded', true );\n\t\t\t\t\t\t\tif ( res.questions ) {\n\t\t\t\t\t\t\t\t_.each( res.questions, self.add_question, self );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcb();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcb( true );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\n\t\t},\n\n\t\t/**\n\t\t * Update total number of points calculated property\n\t\t * @return int\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_points: function() {\n\n\t\t\tthis.set( '_points', this.get_total_points() );\n\n\t\t},\n\n\t}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Lesson Schemas\n *\n * @since 3.17.0\n * @version 3.25.4\n */\ndefine( 'Schemas/Lesson',[], function() {\n\n\treturn window.llms.hooks.applyFilters( 'llms_define_lesson_schema', {\n\n\t\tdefault: {\n\t\t\ttitle: LLMS.l10n.translate( 'General Settings' ),\n\t\t\ttoggleable: true,\n\t\t\tfields: [\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'permalink',\n\t\t\t\t\t\tid: 'permalink',\n\t\t\t\t\t\ttype: 'permalink',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'video_embed',\n\t\t\t\t\t\tid: 'video-embed',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Video Embed URL' ),\n\t\t\t\t\t\ttype: 'video_embed',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'audio_embed',\n\t\t\t\t\t\tid: 'audio-embed',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Audio Embed URL' ),\n\t\t\t\t\t\ttype: 'audio_embed',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'free_lesson',\n\t\t\t\t\t\tid: 'free-lesson',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Free Lesson' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Free lessons can be accessed without enrollment.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'require_passing_grade',\n\t\t\t\t\t\tid: 'require-passing-grade',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Require Passing Grade on Quiz' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'When enabled, students must pass this quiz before the lesson can be completed.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( 'yes' === this.get( 'quiz_enabled' ) );\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'require_assignment_passing_grade',\n\t\t\t\t\t\tid: 'require-assignment-passing-grade',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Require Passing Grade on Assignment' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'When enabled, students must pass this assignment before the lesson can be completed.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( 'undefined' !== window.llms_builder.assignments && 'yes' === this.get( 'assignment_enabled' ) );\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'points',\n\t\t\t\t\t\tid: 'points',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Lesson Weight' ),\n\t\t\t\t\t\tlabel_after: LLMS.l10n.translate( 'POINTS' ),\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 99,\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Determines the weight of the lesson when calculating the overall grade of the course.' ),\n\t\t\t\t\t\ttip_position: 'top-left',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( ( 'yes' === this.get( 'quiz_enabled' ) ) || ( 'undefined' !== window.llms_builder.assignments && 'yes' === this.get( 'assignment_enabled' ) ) );\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'prerequisite',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( false === this.is_first_in_course() );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tid: 'prerequisite',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Prerequisite' ),\n\t\t\t\t\t\tswitch_attribute: 'has_prerequisite',\n\t\t\t\t\t\ttype: 'switch-select',\n\t\t\t\t\t\toptions: function() {\n\t\t\t\t\t\t\treturn this.get_available_prereq_options();\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Course Drip Method' ),\n\t\t\t\t\t\tid: 'course-drip',\n\t\t\t\t\t\ttype: 'heading',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdetail: LLMS.l10n.translate( 'Drip settings are currently set at the course level, under the Restrictions settings tab. Disable to allow lesson level drip settings.' ) + ' ' + LLMS.l10n.translate( 'Edit Course' ) + ' ',\n\t\t\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Course Drip Method' ),\n\t\t\t\t\t\tid: 'course-drip',\n\t\t\t\t\t\ttype: 'heading',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( ! this.get_course() || 'yes' !== this.get_course().get( 'lesson_drip' ) || ! this.get_course().get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdetail: LLMS.l10n.translate( 'Drip settings can be set at the course level to release course content at a specified interval, in the Restrictions settings tab.' ) + ' ' + LLMS.l10n.translate( 'Edit Course' ) + ' ',\n\t\t\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'drip_method',\n\t\t\t\t\t\tid: 'drip-method',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Drip Method' ),\n\t\t\t\t\t\tswitch_attribute: 'drip_method',\n\t\t\t\t\t\ttype: 'select',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( ! this.get_course() || 'yes' !== this.get_course().get( 'lesson_drip' ) || ! this.get_course().get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions: function() {\n\n\t\t\t\t\t\t\tvar options = [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkey: '',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( 'None' ),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkey: 'date',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( 'On a specific date' ),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkey: 'enrollment',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( '# of days after course enrollment' ),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tif ( this.get_course() && this.get_course().get( 'start_date' ) ) {\n\t\t\t\t\t\t\t\toptions.push( {\n\t\t\t\t\t\t\t\t\tkey: 'start',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( '# of days after course start date' ),\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( 'yes' === this.get( 'has_prerequisite' ) ) {\n\t\t\t\t\t\t\t\toptions.push( {\n\t\t\t\t\t\t\t\t\tkey: 'prerequisite',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( '# of days after prerequisite lesson completion' ),\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn options;\n\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'days_before_available',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\tif ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ( -1 !== [ 'enrollment', 'start', 'prerequisite' ].indexOf( this.get( 'drip_method' ) ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tid: 'days-before-available',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( '# of days' ),\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\ttype: 'number',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'date_available',\n\t\t\t\t\t\tdate_format: 'Y-m-d',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\tif ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ( 'date' === this.get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tid: 'date-available',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Date' ),\n\t\t\t\t\t\ttimepicker: 'false',\n\t\t\t\t\t\ttype: 'datepicker',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'time_available',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\tif ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ( 'date' === this.get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdatepicker: 'false',\n\t\t\t\t\t\tdate_format: 'h:i A',\n\t\t\t\t\t\tid: 'time-available',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Time' ),\n\t\t\t\t\t\ttype: 'datepicker',\n\t\t\t},\n\t\t\t\t],\n\t\t\t],\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Lesson Model\n *\n * @since 3.13.0\n * @version 4.20.0\n */\ndefine( 'Models/Lesson',[ 'Models/Quiz', 'Models/_Relationships', 'Models/_Utilities', 'Schemas/Lesson' ], function( Quiz, Relationships, Utilities, LessonSchema ) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\t/**\n\t\t * Model relationships\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\trelationships: {\n\t\t\tparents: {\n\t\t\t\tmodel: 'section',\n\t\t\t\ttype: 'model',\n\t\t\t},\n\t\t\tchildren: {\n\t\t\t\tquiz: {\n\t\t\t\t\tclass: 'Quiz',\n\t\t\t\t\tconditional: function( model ) {\n\t\t\t\t\t\t// if quiz is enabled OR not enabled but we have some quiz data as an obj\n\t\t\t\t\t\treturn ( 'yes' === model.get( 'quiz_enabled' ) || ! _.isEmpty( model.get( 'quiz' ) ) );\n\t\t\t\t\t},\n\t\t\t\t\tmodel: 'llms_quiz',\n\t\t\t\t\ttype: 'model',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Lesson Settings Schema\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tschema: LessonSchema,\n\n\t\t/**\n\t\t * New lesson defaults\n\t\t *\n\t\t * @since 3.13.0\n\t\t * @since 3.24.0 Unknown.\n\t\t *\n\t\t * @return {Object} Default options associative array (js object).\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\ttitle: LLMS.l10n.translate( 'New Lesson' ),\n\t\t\t\ttype: 'lesson',\n\t\t\t\torder: this.collection ? this.collection.length + 1 : 1,\n\t\t\t\tparent_course: window.llms_builder.course.id,\n\t\t\t\tparent_section: '',\n\n\t\t\t\t// Urls.\n\t\t\t\tedit_url: '',\n\t\t\t\tview_url: '',\n\n\t\t\t\t// Editable fields.\n\t\t\t\tcontent: '',\n\t\t\t\taudio_embed: '',\n\t\t\t\thas_prerequisite: 'no',\n\t\t\t\trequire_passing_grade: 'yes',\n\t\t\t\trequire_assignment_passing_grade: 'yes',\n\t\t\t\tvideo_embed: '',\n\t\t\t\tfree_lesson: '',\n\t\t\t\tpoints: 1,\n\n\t\t\t\t// Other fields.\n\t\t\t\tassignment: {}, // Assignment model/data.\n\t\t\t\tassignment_enabled: 'no',\n\n\t\t\t\tquiz: {}, // Quiz model/data.\n\t\t\t\tquiz_enabled: 'no',\n\n\t\t\t\t_forceSync: false,\n\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.17.0 Unknown\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.init_custom_schema();\n\t\t\tthis.startTracking();\n\t\t\tthis.maybe_init_assignments();\n\t\t\tthis.init_relationships();\n\n\t\t\t// If the lesson ID isn't set on a quiz, set it.\n\t\t\tvar quiz = this.get( 'quiz' );\n\t\t\tif ( ! _.isEmpty( quiz ) && ! quiz.get( 'lesson_id' ) ) {\n\t\t\t\tquiz.set( 'lesson_id', this.get( 'id' ) );\n\t\t\t}\n\n\t\t\twindow.llms.hooks.doAction( 'llms_lesson_model_init', this );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve a reference to the parent course of the lesson\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 4.14.0 Use Section.get_course() in favor of Section.get_parent().\n\t\t *\n\t\t * @return {Object} The parent course model of the lesson.\n\t\t */\n\t\tget_course: function() {\n\t\t\treturn this.get_parent().get_course();\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the translated post type name for the model's type\n\t\t *\n\t\t * @since 3.16.12\n\t\t *\n\t\t * @param bool plural If true, returns the plural, otherwise returns singular.\n\t\t * @return string The translated post type name.\n\t\t */\n\t\tget_l10n_type: function( plural ) {\n\n\t\t\tif ( plural ) {\n\t\t\t\treturn LLMS.l10n.translate( 'lessons' );\n\t\t\t}\n\n\t\t\treturn LLMS.l10n.translate( 'lesson' );\n\t\t},\n\n\t\t/**\n\t\t * Override default get_parent to grab from collection if models parent isn't set\n\t\t *\n\t\t * @since 3.17.0\n\t\t *\n\t\t * @return {Object}|false The parent model or false if not available.\n\t\t */\n\t\tget_parent: function() {\n\n\t\t\tvar rels = this.get_relationships();\n\t\t\tif ( rels.parent && rels.parent.reference ) {\n\t\t\t\treturn rels.parent.reference;\n\t\t\t} else if ( this.collection && this.collection.parent ) {\n\t\t\t\treturn this.collection.parent;\n\t\t\t}\n\t\t\treturn false;\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the questions percentage value within the quiz\n\t\t *\n\t\t * @since 3.24.0\n\t\t *\n\t\t * @return {String} Questions percentage value within the quiz.\n\t\t */\n\t\tget_points_percentage: function() {\n\n\t\t\tvar total = this.get_course().get_total_points(),\n\t\t\t\tpoints = this.get( 'points' ) * 1;\n\n\t\t\tif ( ! _.isNumber( points ) ) {\n\t\t\t\tpoints = 0;\n\t\t\t}\n\n\t\t\tif ( 0 === total ) {\n\t\t\t\treturn '0%';\n\t\t\t}\n\n\t\t\treturn ( ( points / total ) * 100 ).toFixed( 2 ) + '%';\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve an array of prerequisite options available for the current lesson\n\t\t *\n\t\t * @since 3.17.0\n\t\t *\n\t\t * @return {Object} Prerequisite options.\n\t\t */\n\t\tget_available_prereq_options: function() {\n\n\t\t\tvar parent_section_index = this.get_parent().collection.indexOf( this.get_parent() ),\n\t\t\t\tlesson_index_in_section = this.collection.indexOf( this ),\n\t\t\t\toptions = [];\n\n\t\t\tthis.get_course().get( 'sections' ).each( function( section, curr_sec_index ) {\n\t\t\t\tif ( curr_sec_index <= parent_section_index ) {\n\t\t\t\t\tvar group = {\n\t\t\t\t\t\t\t// Translators: %1$d = section order number, %2$s = section title.\n\t\t\t\t\t\tlabel: LLMS.l10n.replace( 'Section %1$d: %2$s', {\n\t\t\t\t\t\t\t'%1$d': section.get( 'order' ),\n\t\t\t\t\t\t\t'%2$s': section.get( 'title' )\n\t\t\t\t\t\t} ),\n\t\t\t\t\toptions: [],\n\t\t\t\t\t};\n\n\t\t\t\t\tsection.get( 'lessons' ).each( function( lesson, curr_les_index ) {\n\t\t\t\t\t\tif ( curr_sec_index !== parent_section_index || curr_les_index < lesson_index_in_section ) {\n\t\t\t\t\t\t\t// Translators: %1$d = lesson order number, %2$s = lesson title.\n\t\t\t\t\t\t\tgroup.options.push( {\n\t\t\t\t\t\t\t\tkey: lesson.get( 'id' ),\n\t\t\t\t\t\t\t\tval: LLMS.l10n.replace( 'Lesson %1$d: %2$s', {\n\t\t\t\t\t\t\t\t\t'%1$d': lesson.get( 'order' ),\n\t\t\t\t\t\t\t\t\t'%2$s': lesson.get( 'title' )\n\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this );\n\n\t\t\t\t\toptions.push( group );\n\t\t\t\t}\n\t\t\t}, this );\n\n\t\t\treturn options;\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new quiz to the lesson\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.27.0 Unknown.\n\t\t *\n\t\t * @param {Object} data Object of quiz data used to construct a new quiz model.\n\t\t * @return {Object} Model for the created quiz.\n\t\t */\n\t\tadd_quiz: function( data ) {\n\n\t\t\tdata = data || {};\n\n\t\t\tdata.lesson_id = this.id;\n\t\t\tdata._questions_loaded = true;\n\n\t\t\tif ( ! data.title ) {\n\n\t\t\t\tdata.title = LLMS.l10n.replace( '%1$s Quiz', {\n\t\t\t\t\t'%1$s': this.get( 'title' ),\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tthis.set( 'quiz', data );\n\t\t\tthis.init_relationships();\n\n\t\t\tvar quiz = this.get( 'quiz' );\n\t\t\tthis.set( 'quiz_enabled', 'yes' );\n\n\t\t\twindow.llms.hooks.doAction( 'llms_lesson_add_quiz', quiz, this );\n\n\t\t\treturn quiz;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if this is the first lesson\n\t\t *\n\t\t * @since 3.17.0\n\t\t * @since 4.20.0 Use is_first_in_section() new method.\n\t\t *\n\t\t * @return {Boolean} Whether this is the first lesson of its course.\n\t\t */\n\t\tis_first_in_course: function() {\n\n\t\t\t// If it's not the first item in the section it cant be the first lesson.\n\t\t\tif ( ! this.is_first_in_section() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// If it's not the first section it cant' be first lesson.\n\t\t\tvar section = this.get_parent();\n\t\t\tif ( section.collection.indexOf( section ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// It's first lesson in first section.\n\t\t\treturn true;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if this is the last lesson of the course\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @return {Boolean} Whether this is the last lesson of its course.\n\t\t */\n\t\t is_last_in_course: function() {\n\n\t\t\t// If it's not last item in the section it cant be the last lesson.\n\t\t\tif ( ! this.is_last_in_section() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// If it's not the last section it cant' be last lesson.\n\t\t\tvar section = this.get_parent();\n\t\t\tif ( section.collection.indexOf( section ) < ( section.collection.size() - 1 ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// It's last lesson in last section.\n\t\t\treturn true;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if this is the first lesson within its section\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @return {Boolean} Whether this is the first lesson of its section.\n\t\t */\n\t\tis_first_in_section: function() {\n\t\t\treturn 0 === this.collection.indexOf( this );\n\t\t},\n\n\t\t/**\n\t\t * Determine if this is the last lesson within its section\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @return {Boolean} Whether this is the last lesson of its section.\n\t\t */\n\t\tis_last_in_section: function() {\n\t\t\treturn this.collection.indexOf( this ) === ( this.collection.size() - 1 );\n\t\t},\n\n\t\t/**\n\t\t * Get prev lesson in a course\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @param {String} status Prev lesson post status. If not specified any status will be taken into account.\n\t\t * @return {Object}|false Previous lesson model or `false` if no previous lesson could be found.\n\t\t */\n\t\tget_prev: function( status ) {\n\t\t\treturn this.get_sibling( 'prev', status );\n\t\t},\n\n\t\t/**\n\t\t * Get next lesson in a course\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @param {String} status Next lesson post status. If not specified any status will be taken into account.\n\t\t * @return {Object}|false Next lesson model or `false` if no next lesson could be found.\n\t\t */\n\t\tget_next: function( status ) {\n\t\t\treturn this.get_sibling( 'next', status );\n\t\t},\n\n\t\t/**\n\t\t * Get a sibling lesson\n\t\t *\n\t\t * @param {String} direction Siblings direction [next|prev]. If not specified will fall back on 'prev'.\n\t\t * @param {String} status Sibling lesson post status. If not specified any status will be taken into account.\n\t\t * @return {Object}|false Sibling lesson model, in the specified direction, or `false` if no sibling lesson could be found.\n\t\t */\n\t\tget_sibling: function( direction, status ) {\n\n\t\t\tdirection = 'next' === direction ? direction : 'prev';\n\n\t\t\t// Functions and vars to use when direction is 'prev' (default).\n\t\t\tvar is_course_limit_reached_f = 'is_first_in_course',\n\t\t\t\tis_section_limit_reached_f = 'is_first_in_section',\n\t\t\t\tsibling_index_increment = -1,\n\t\t\t\tget_sibling_lesson_in_sibling_section_f = 'last';\n\n\t\t\tif ( 'next' === direction ) {\n\t\t\t\tis_course_limit_reached_f = 'is_last_in_course';\n\t\t\t\tis_section_limit_reached_f = 'is_last_in_section';\n\t\t\t\tsibling_index_increment = 1,\n\t\t\t\tget_sibling_lesson_in_sibling_section_f = 'first';\n\t\t\t}\n\n\t\t\tif ( this[ is_course_limit_reached_f ]() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar sibling_index = this.collection.indexOf( this ) + sibling_index_increment,\n\t\t\t\tsibling_lesson = this.collection.at( sibling_index );\n\n\t\t\tif ( this[ 'next' === direction ? 'is_last_in_section' : 'is_first_in_section' ]() ) {\n\t\t\t\tvar cur_section = this.get_parent(),\n\t\t\t\t\tsibling_section = cur_section[ 'get_' + direction ]( false );\n\n\t\t\t\t// Skip sibling empty sections.\n\t\t\t\twhile ( sibling_section && ! sibling_section.get( 'lessons' ).size() ) {\n\t\t\t\t\tsibling_section = sibling_section[ 'get_' + direction ]( false );\n\t\t\t\t}\n\n\t\t\t\t// Couldn't find any suitable lesson.\n\t\t\t\tif ( ! sibling_section || ! sibling_section.get( 'lessons' ).size() ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tsibling_lesson = sibling_section.get( 'lessons' )[ get_sibling_lesson_in_sibling_section_f ]();\n\n\t\t\t}\n\n\t\t\t// If we need a specific lesson status.\n\t\t\tif ( status && status !== sibling_lesson.get( 'status' ) ) {\n\t\t\t\treturn sibling_lesson.get_sibling( direction, status );\n\t\t\t}\n\n\t\t\treturn sibling_lesson;\n\n\t\t},\n\n\t\t/**\n\t\t * Initialize lesson assignments *if* the assignments addon is available and enabled\n\t\t *\n\t\t * @since 3.17.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tmaybe_init_assignments: function() {\n\n\t\t\tif ( ! window.llms_builder.assignments ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.relationships.children.assignment = {\n\t\t\t\tclass: 'Assignment',\n\t\t\t\tconditional: function( model ) {\n\t\t\t\t\t// If assignment is enabled OR not enabled but we have some assignment data as an obj.\n\t\t\t\t\treturn ( 'yes' === model.get( 'assignment_enabled' ) || ! _.isEmpty( model.get( 'assignment' ) ) );\n\t\t\t\t},\n\t\t\t\tmodel: 'llms_assignment',\n\t\t\t\ttype: 'model',\n\t\t\t};\n\n\t\t},\n\n\t}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Lessons Collection\n *\n * @since 3.13.0\n * @version 3.17.0\n */\ndefine( 'Collections/Lessons',[ 'Models/Lesson' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\t// reorder called by LessonList view when sortable drops occur\n\t\t\tthis.on( 'reorder', this.on_reorder );\n\n\t\t\t// when a lesson is added or removed, update order\n\t\t\tthis.on( 'add', this.on_reorder );\n\t\t\tthis.on( 'remove', this.on_reorder );\n\n\t\t},\n\n\t\t/**\n\t\t * On lesson reorder callback\n\t\t *\n\t\t * Update the order attr of each lesson to reflect the new lesson order\n\t\t * Validate prerequisite (if set) and unset it if it's no longer a valid prereq\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\ton_reorder: function() {\n\t\t\tthis.update_order();\n\t\t\tthis.validate_prereqs();\n\t\t},\n\n\t\t/**\n\t\t * Update lesson order attribute of all lessons when lessons are reordered\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tupdate_order: function() {\n\n\t\t\tthis.each( function( lesson ) {\n\t\t\t\tlesson.set( 'order', this.indexOf( lesson ) + 1 );\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Validate prerequisite (if set) and unset it if it's no longer a valid prereq\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tvalidate_prereqs: function() {\n\n\t\t\tthis.each( function( lesson ) {\n\n\t\t\t\t// validate prereqs\n\t\t\t\tif ( 'yes' === lesson.get( 'has_prerequisite' ) ) {\n\t\t\t\t\tvar valid = _.pluck( _.flatten( _.pluck( lesson.get_available_prereq_options(), 'options' ) ), 'key' );\n\t\t\t\t\tif ( -1 === valid.indexOf( lesson.get( 'prerequisite' ) * 1 ) ) {\n\t\t\t\t\t\tlesson.set( {\n\t\t\t\t\t\t\tprerequisite: 0,\n\t\t\t\t\t\t\thas_prerequisite: 'no',\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Quiz Question Type Collection\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Collections/QuestionTypes',[ 'Models/QuestionType' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.on( 'add', this.comparator );\n\t\t\tthis.on( 'remove', this.comparator );\n\n\t\t},\n\n\t\t/**\n\t\t * Comparator (sorts collection)\n\t\t *\n\t\t * @param obj model QuestionType model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tcomparator: function( model ) {\n\n\t\t\treturn model.get( 'group' ).order;\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Section Model\n *\n * @since 3.16.0\n * @version 4.20.0\n */\ndefine( 'Models/Section',[ 'Collections/Lessons', 'Models/_Relationships' ], function( Lessons, Relationships ) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\trelationships: {\n\t\t\tparent: {\n\t\t\t\tmodel: 'course',\n\t\t\t\ttype: 'model',\n\t\t\t},\n\t\t\tchildren: {\n\t\t\t\tlessons: {\n\t\t\t\t\tclass: 'Lessons',\n\t\t\t\t\tmodel: 'lesson',\n\t\t\t\t\ttype: 'collection',\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * New section defaults\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\tlessons: [],\n\t\t\t\torder: this.collection ? this.collection.length + 1 : 1,\n\t\t\t\tparent_course: window.llms_builder.course.id,\n\t\t\t\ttitle: LLMS.l10n.translate( 'New Section' ),\n\t\t\t\ttype: 'section',\n\n\t\t\t\t// Expand the first 100 sections by default to avoid timeout issues.\n\t\t\t\t_expanded: ! this.collection || this.collection.length <= 100 ? true : false,\n\t\t\t\t_selected: false,\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.startTracking();\n\t\t\tthis.init_relationships();\n\n\t\t},\n\n\t\t/**\n\t\t * Add a lesson to the section\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.11 Unknown.\n\t\t *\n\t\t * @param {Object} data Hash of lesson data (creates new lesson)\n\t\t * or existing lesson as a Backbone.Model.\n\t\t * @param {Object} options Hash of options.\n\t\t * @return {Object} Backbone.Model of the new/updated lesson.\n\t\t */\n\t\tadd_lesson: function( data, options ) {\n\n\t\t\tdata = data || {};\n\t\t\toptions = options || {};\n\n\t\t\tif ( data instanceof Backbone.Model ) {\n\t\t\t\tdata.set( 'status', 'publish' );\n\t\t\t\tdata.set( 'parent_section', this.get( 'id' ) );\n\t\t\t\tdata.set_parent( this );\n\t\t\t} else {\n\t\t\t\tdata.status = 'publish';\n\t\t\t\tdata.parent_section = this.get( 'id' );\n\t\t\t}\n\n\t\t\treturn this.get( 'lessons' ).add( data, options );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the translated post type name for the model's type\n\t\t *\n\t\t * @since 3.16.12\n\t\t *\n\t\t * @param {Boolean} plural If true, returns the plural, otherwise returns singular.\n\t\t * @return {String}\n\t\t */\n\t\tget_l10n_type: function( plural ) {\n\n\t\t\tif ( plural ) {\n\t\t\t\treturn LLMS.l10n.translate( 'sections' );\n\t\t\t}\n\n\t\t\treturn LLMS.l10n.translate( 'section' );\n\t\t},\n\n\t\t/**\n\t\t * Get next section in the collection\n\t\t *\n\t\t * @since 3.16.11\n\t\t *\n\t\t * @param {boolean} circular If true handles the collection in a circle.\n\t\t * If current is the last section, returns the first section.\n\t\t * @return {Object}|false\n\t\t */\n\t\tget_next: function( circular ) {\n\t\t\treturn this._get_sibling( 'next', circular );\n\t\t},\n\n\t\t/**\n\t\t * Retrieve a reference to the parent course of the section\n\t\t *\n\t\t * @since 4.14.0\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\tget_course: function() {\n\n\t\t\t// When working with an unsaved draft course the parent isn't properly set on the creation of a section.\n\t\t\tif ( ! this.get_parent() ) {\n\t\t\t\tthis.set_parent( window.llms_builder.CourseModel );\n\t\t\t}\n\n\t\t\treturn this.get_parent();\n\n\t\t},\n\n\t\t/**\n\t\t * Get prev section in the collection\n\t\t *\n\t\t * @since 3.16.11\n\t\t *\n\t\t * @param {Boolean} circular If true handles the collection in a circle.\n\t\t * If current is the first section, returns the last section.\n\t\t * @return {Object}|false\n\t\t */\n\t\tget_prev: function( circular ) {\n\t\t\treturn this._get_sibling( 'prev', circular );\n\t\t},\n\n\t\t/**\n\t\t * Get a sibling section\n\t\t *\n\t\t * @since 3.16.11\n\t\t * @since 4.20.0 Fix case when the last section was returned when looking for the prev of the first section and not `circular`.\n\t\t *\n\t\t * @param {String} direction Siblings direction [next|prev].\n\t\t * @param {Boolean} circular If true handles the collection in a circle.\n\t\t * If current is the last section, returns the first section.\n\t\t * If current is the first section, returns the last section.\n\t\t * @return {Object}|false\n\t\t */\n\t\t_get_sibling: function( direction, circular ) {\n\n\t\t\tcircular = ( 'undefined' === circular ) ? true : circular;\n\n\t\t\tvar max = this.collection.size() - 1,\n\t\t\t\tindex = this.collection.indexOf( this ),\n\t\t\t\tsibling_index;\n\n\t\t\tif ( 'next' === direction ) {\n\t\t\t\tsibling_index = index + 1;\n\t\t\t} else if ( 'prev' === direction ) {\n\t\t\t\tsibling_index = index - 1;\n\t\t\t}\n\n\t\t\t// Don't retrieve greater than max or less than min.\n\t\t\tif ( sibling_index <= max || sibling_index >= 0 ) {\n\n\t\t\t\treturn this.collection.at( sibling_index );\n\n\t\t\t} else if ( circular ) {\n\n\t\t\t\tif ( 'next' === direction ) {\n\t\t\t\t\treturn this.collection.first();\n\t\t\t\t} else if ( 'prev' === direction ) {\n\t\t\t\t\treturn this.collection.last();\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t},\n\n\t}, Relationships ) );\n\n} );\n\n","/**\n * Sections Collection\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Collections/Sections',[ 'Models/Section' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// reorder called by SectionList view when sortable drops occur\n\t\t\tthis.on( 'reorder', this.update_order );\n\n\t\t\t// when a section is added or removed, update order\n\t\t\tthis.on( 'add', this.update_order );\n\t\t\tthis.on( 'remove', this.update_order );\n\n\t\t},\n\n\t\t/**\n\t\t * Update the order attr of each section in the list to reflect the order of the collection\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_order: function() {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.each( function( section ) {\n\n\t\t\t\tsection.set( 'order', self.indexOf( section ) + 1 );\n\n\t\t\t} );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Lessons Collection\n *\n * @since 3.13.0\n * @version 3.16.0\n */\ndefine( 'Collections/loader',[\n\t\t'Collections/Lessons',\n\t\t'Collections/QuestionChoices',\n\t\t'Collections/Questions',\n\t\t'Collections/QuestionTypes',\n\t\t'Collections/Sections'\n\t], function(\n\t\tLessons,\n\t\tQuestionChoices,\n\t\tQuestions,\n\t\tQuestionTypes,\n\t\tSections\n\t) {\n\n\t\treturn {\n\t\t\tLessons: Lessons,\n\t\t\tQuestionChoices: QuestionChoices,\n\t\t\tQuestions: Questions,\n\t\t\tQuestionTypes: QuestionTypes,\n\t\t\tSections: Sections,\n\t\t};\n\n} );\n\n","/**\n * Abstract LifterLMS Model\n *\n * @since 3.17.0\n * @version 3.17.0\n */\ndefine( 'Models/Abstract',[ 'Models/_Relationships', 'Models/_Utilities' ], function( Relationships, Utilities ) {\n\n\treturn Backbone.Model.extend( _.defaults( {}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Course Model.\n *\n * @since 3.16.0\n * @since 3.24.0 Added `get_total_points()` method.\n * @since 3.37.11 Use lesson author ID instead of author object when adding existing lessons to a course.\n * @version 5.4.0\n */\ndefine( 'Models/Course',[ 'Collections/Sections', 'Models/_Relationships', 'Models/_Utilities' ], function( Sections, Relationships, Utilities ) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\trelationships: {\n\t\t\tchildren: {\n\t\t\t\tsections: {\n\t\t\t\t\tclass: 'Sections',\n\t\t\t\t\tmodel: 'section',\n\t\t\t\t\ttype: 'collection',\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * New Course Defaults.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tedit_url: '',\n\t\t\t\tsections: [],\n\t\t\t\ttitle: 'New Course',\n\t\t\t\ttype: 'course',\n\t\t\t\tview_url: '',\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Init.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.startTracking();\n\t\t\tthis.init_relationships();\n\n\t\t\t// Sidebar \"New Section\" button broadcast.\n\t\t\tBackbone.pubSub.on( 'add-new-section', this.add_section, this );\n\n\t\t\t// Sidebar \"New Lesson\" button broadcast.\n\t\t\tBackbone.pubSub.on( 'add-new-lesson', this.add_lesson, this );\n\n\t\t\tBackbone.pubSub.on( 'lesson-search-select', this.add_existing_lesson, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Add an existing lesson to the course.\n\t\t *\n\t\t * Duplicate a lesson from this or another course or attach an orphaned lesson.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.24.0 Unknown.\n\t\t * @since 3.37.11 Use the author id instead of the author object.\n\t\t * @since 5.4.0 Added filter hook 'llms_adding_existing_lesson_data'.\n\t\t * On cloning, duplicate assignments too, if assignment add-on active and assignment attached.\n\t\t *\n\t\t * @param {Object} lesson Lesson data obj.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_lesson: function( lesson ) {\n\n\t\t\tvar data = lesson.data;\n\n\t\t\tif ( 'clone' === lesson.action ) {\n\n\t\t\t\tdelete data.id;\n\n\t\t\t\t// If a quiz is attached, duplicate the quiz also.\n\t\t\t\tif ( data.quiz ) {\n\t\t\t\t\tdata.quiz = _.prepareQuizObjectForCloning( data.quiz );\n\t\t\t\t\tdata.quiz._questions_loaded = true;\n\t\t\t\t}\n\n\t\t\t\t// If assignment add-on active and assignment attached, duplicate the assignment too.\n\t\t\t\tif ( window.llms_builder.assignments && data.assignment ) {\n\t\t\t\t\tdata.assignment = _.prepareAssignmentObjectForCloning( data.assignment );\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tdata._forceSync = true;\n\n\t\t\t}\n\n\t\t\tdelete data.order;\n\t\t\tdelete data.parent_course;\n\t\t\tdelete data.parent_section;\n\n\t\t\t// Use author id instead of the lesson author object.\n\t\t\tdata = _.prepareExistingPostObjectDataForAddingOrCloning( data );\n\n\t\t\t/**\n\t\t\t * Filters the data of the existing lesson being added.\n\t\t\t *\n\t\t\t * @since 5.4.0\n\t\t\t *\n\t\t\t * @param {Object} data Lesson data.\n\t\t\t * @param {String} action Action being performed. [clone|attach].\n\t\t\t * @param {Object} course The lesson's course parent model.\n\t\t\t */\n\t\t\tdata = window.llms.hooks.applyFilters( 'llms_adding_existing_lesson_data', data, lesson.action, this );\n\n\t\t\tthis.add_lesson( data );\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new lesson to the course.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @param {Object} data Lesson data.\n\t\t * @return {Object} Backbone.Model of the lesson.\n\t\t */\n\t\tadd_lesson: function( data ) {\n\n\t\t\tdata = data || {};\n\t\t\tvar options = {},\n\t\t\t\tsection;\n\n\t\t\tif ( ! data.parent_section ) {\n\t\t\t\tsection = this.get_selected_section();\n\t\t\t\tif ( ! section ) {\n\t\t\t\t\tsection = this.get( 'sections' ).last();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsection = this.get( 'sections' ).get( data.parent_section );\n\t\t\t}\n\n\t\t\tdata._selected = true;\n\n\t\t\tdata.parent_course = this.get( 'id' );\n\n\t\t\tvar lesson = section.add_lesson( data, options );\n\t\t\tBackbone.pubSub.trigger( 'new-lesson-added', lesson );\n\n\t\t\t// Expand the section.\n\t\t\tsection.set( '_expanded', true );\n\n\t\t\treturn lesson;\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new section to the course.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @param {Object} data Section data.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_section: function( data ) {\n\n\t\t\tdata = data || {};\n\t\t\tvar sections = this.get( 'sections' ),\n\t\t\t\toptions = {},\n\t\t\t\tselected = this.get_selected_section();\n\n\t\t\t// If a section is selected, add the new section after the currently selected one.\n\t\t\tif ( selected ) {\n\t\t\t\toptions.at = sections.indexOf( selected ) + 1;\n\t\t\t}\n\n\t\t\tsections.add( data, options );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the currently selected section in the course.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Object|undefined}\n\t\t */\n\t\tget_selected_section: function() {\n\n\t\t\treturn this.get( 'sections' ).find( function( model ) {\n\t\t\t\treturn model.get( '_selected' );\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the total number of points in the course.\n\t\t *\n\t\t * @since 3.24.0\n\t\t *\n\t\t * @return {Integer}\n\t\t */\n\t\tget_total_points: function() {\n\n\t\t\tvar points = 0;\n\n\t\t\tthis.get( 'sections' ).each( function( section ) {\n\t\t\t\tsection.get( 'lessons' ).each( function( lesson ) {\n\t\t\t\t\tvar lesson_points = lesson.get( 'points' );\n\t\t\t\t\tif ( ! _.isNumber( lesson_points ) ) {\n\t\t\t\t\t\tlesson_points = 0;\n\t\t\t\t\t}\n\t\t\t\t\tpoints += lesson_points * 1;\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\treturn points;\n\n\t\t},\n\n\t}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Load all models\n *\n * @return obj\n * @since 3.16.0\n * @version 3.17.0\n */\ndefine( 'Models/loader',[\n\t\t'Models/Abstract',\n\t\t'Models/Course',\n\t\t'Models/Image',\n\t\t'Models/Lesson',\n\t\t'Models/Question',\n\t\t'Models/QuestionChoice',\n\t\t'Models/QuestionType',\n\t\t'Models/Quiz',\n\t\t'Models/Section'\n\t],\n\tfunction(\n\t\tAbstract,\n\t\tCourse,\n\t\tImage,\n\t\tLesson,\n\t\tQuestion,\n\t\tQuestionChoice,\n\t\tQuestionType,\n\t\tQuiz,\n\t\tSection\n\t) {\n\n\t\treturn {\n\t\t\tAbstract: Abstract,\n\t\t\tCourse: Course,\n\t\t\tImage: Image,\n\t\t\tLesson: Lesson,\n\t\t\tQuestion: Question,\n\t\t\tQuestionChoice: QuestionChoice,\n\t\t\tQuestionType: QuestionType,\n\t\t\tQuiz: Quiz,\n\t\t\tSection: Section,\n\t\t};\n\n} );\n\n","/**\n * Detachable model\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.16.12\n * @version 3.16.12\n */\n\ndefine( 'Views/_Detachable',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * DOM Events\n\t\t *\n\t\t * @type {Object}\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tevents: {\n\t\t\t'click a[href=\"#llms-detach-model\"]': 'detach_model',\n\t\t\t'click button.llms-detach-model': 'detach_model',\n\t\t},\n\n\t\t/**\n\t\t * Detaches a model from it's parent (doesn't delete)\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tdetach_model: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\n\t\t\tvar msg = LLMS.l10n.replace( 'Are you sure you want to detach this %s?', {\n\t\t\t\t'%s': this.model.get_l10n_type(),\n\t\t\t} );\n\n\t\t\tif ( window.confirm( msg ) ) {\n\n\t\t\t\tif ( this.model.collection ) {\n\t\t\t\t\tthis.model.collection.remove( this.model );\n\t\t\t\t}\n\n\t\t\t\t// publish global event\n\t\t\t\tBackbone.pubSub.trigger( 'model-detached', this.model );\n\n\t\t\t\t// trigger local event so extending views can run other actions where necessary\n\t\t\t\tthis.trigger( 'model-trashed', this.model );\n\n\t\t\t}\n\n\t\t},\n\n\t}\n\n} );\n\n","/**\n * Handles UX and Events for inline editing of views\n *\n * Use with a Model's View\n * Allows editing model.title field via .llms-editable-title elements\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.16.0\n * @since 3.25.4 Unknown\n * @since 3.37.11 Replace reference to `wp.editor` with `_.getEditor()` helper.\n * @version 3.37.11\n */\ndefine( 'Views/_Editable',[], function() {\n\n\treturn {\n\n\t\tmedia_lib: null,\n\n\t\t/**\n\t\t * DOM Events\n\t\t *\n\t\t * @type {Object}\n\t\t * @since 3.16.0\n\t\t * @version 3.17.8\n\t\t */\n\t\tevents: {\n\t\t\t'click .llms-add-image': 'open_media_lib',\n\t\t\t'click a[href=\"#llms-edit-slug\"]': 'make_slug_editable',\n\t\t\t'click a[href=\"#llms-remove-image\"]': 'remove_image',\n\t\t\t'change .llms-editable-select select': 'on_select',\n\t\t\t'change .llms-switch input[type=\"checkbox\"]': 'toggle_switch',\n\t\t\t'change .llms-editable-radio input': 'on_radio_select',\n\t\t\t'focusin .llms-input': 'on_focus',\n\t\t\t'focusout .llms-input': 'on_blur',\n\t\t\t'keydown .llms-input': 'on_keydown',\n\t\t\t'input .llms-input[type=\"number\"]': 'on_blur',\n\t\t\t'paste .llms-input[data-formatting]': 'on_paste',\n\t\t},\n\n\t\t/**\n\t\t * Retrieve a list of allowed tags for a given element\n\t\t *\n\t\t * @param obj $el jQuery selector for the element\n\t\t * @return array\n\t\t * @since 3.16.0\n\t\t * @version 3.17.8\n\t\t */\n\t\tget_allowed_tags: function( $el ) {\n\n\t\t\tif ( $el.attr( 'data-formatting' ) ) {\n\t\t\t\treturn _.map( $el.attr( 'data-formatting' ).split( ',' ), function( tag ) {\n\t\t\t\t\treturn tag.trim();\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn [ 'b', 'i', 'u', 'strong', 'em' ];\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the content of an element\n\t\t *\n\t\t * @param obj $el jQuery object of the element\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.17.8\n\t\t */\n\t\tget_content: function( $el ) {\n\n\t\t\tif ( 'INPUT' === $el[0].tagName ) {\n\t\t\t\treturn $el.val();\n\t\t\t}\n\n\t\t\tif ( ! $el.attr( 'data-formatting' ) && ! $el.hasClass( 'ql-editor' ) ) {\n\t\t\t\treturn $el.text();\n\t\t\t}\n\n\t\t\treturn _.stripFormatting( $el.html(), this.get_allowed_tags( $el ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if changes have been made to the element\n\t\t *\n\t\t * @param {[obj]} event js event object\n\t\t * @return {Boolean} true when changes have been made, false otherwise\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\thas_changed: function( event ) {\n\t\t\tvar $el = $( event.target );\n\t\t\treturn ( $el.attr( 'data-original-content' ) !== this.get_content( $el ) );\n\t\t},\n\n\t\t/**\n\t\t * Ensure that new content is at least 1 character long\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return boolean\n\t\t * @since 3.16.0\n\t\t * @version 3.17.2\n\t\t */\n\t\tis_valid: function( event ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$el = $( event.target ),\n\t\t\t\tcontent = this.get_content( $el ),\n\t\t\t\ttype = $el.attr( 'data-type' );\n\n\t\t\tif ( ( $el.attr( 'required' ) || $el.attr( 'data-required' ) ) && content.length < 1 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 'url' === type || 'video' === type ) {\n\t\t\t\tif ( ! this._validate_url( this.get_content( $el ) ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t} else if ( 'permalink' === type ) {\n\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'llms_builder',\n\t\t\t\t\t\taction_type: 'get_permalink',\n\t\t\t\t\t\tcourse_id: window.llms_builder.CourseModel.get( 'id' ),\n\t\t\t\t\t\tid: self.model.get( 'id' ),\n\t\t\t\t\t\ttitle: self.model.get( 'title' ),\n\t\t\t\t\t\tslug: content,\n\t\t\t\t\t},\n\t\t\t\t\tbeforeSend: function() {\n\t\t\t\t\t\tLLMS.Spinner.start( $el.closest( '.llms-editable-toggle-group' ), 'small' );\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\t\tif ( r.permalink && r.slug ) {\n\t\t\t\t\t\t\tself.model.set( 'permalink', r.permalink );\n\t\t\t\t\t\t\tself.model.set( 'name', r.slug );\n\t\t\t\t\t\t\tself.render();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t},\n\n\t\t/**\n\t\t * Initialize datepicker elements\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tinit_datepickers: function() {\n\n\t\t\tthis.$el.find( '.llms-editable-date input' ).each( function() {\n\n\t\t\t\t$( this ).datetimepicker( {\n\t\t\t\t\tformat: $( this ).attr( 'data-date-format' ) || 'Y-m-d h:i A',\n\t\t\t\t\tdatepicker: ( undefined === $( this ).attr( 'data-date-datepicker' ) ) ? true : ( 'true' == $( this ).attr( 'data-date-datepicker' ) ),\n\t\t\t\t\ttimepicker: ( undefined === $( this ).attr( 'data-date-timepicker' ) ) ? true : ( 'true' == $( this ).attr( 'data-date-timepicker' ) ),\n\t\t\t\t\tonClose: function( current_time, $input ) {\n\t\t\t\t\t\t$input.blur();\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Initialize elements that allow inline formatting\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinit_formatting_els: function() {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.$el.find( '.llms-input-formatting[data-formatting]' ).each( function() {\n\n\t\t\t\tvar formatting = $( this ).attr( 'data-formatting' ).split( ',' ),\n\t\t\t\t\tattr = $( this ).attr( 'data-attribute' );\n\n\t\t\t\tvar ed = new Quill( this, {\n\t\t\t\t\tmodules: {\n\t\t\t\t\t\ttoolbar: [ formatting ],\n\t\t\t\t\t\tkeyboard: {\n\t\t\t\t\t\t\tbindings: {\n\t\t\t\t\t\t\t\ttab: {\n\t\t\t\t\t\t\t\t\tkey: 9,\n\t\t\t\t\t\t\t\t\thandler: function( range, context ) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t13: {\n\t\t\t\t\t\t\t\t\tkey: 13,\n\t\t\t\t\t\t\t\t\thandler: function( range, context ) {\n\t\t\t\t\t\t\t\t\t\ted.root.blur();\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder: $( this ).attr( 'data-placeholder' ),\n\t\t\t\t\ttheme: 'bubble',\n\t\t\t\t} );\n\n\t\t\t\ted.on( 'text-change', function( delta, oldDelta, source ) {\n\t\t\t\t\tself.model.set( attr, self.get_content( $( ed.root ) ) );\n\t\t\t\t} );\n\n\t\t\t\tBackbone.pubSub.trigger( 'formatting-ed-init', ed, $( this ), self );\n\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Initialize editable select elements\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.25.4\n\t\t */\n\t\tinit_selects: function() {\n\n\t\t\tthis.$el.find( '.llms-editable-select select' ).llmsSelect2( {\n\t\t\t\twidth: '100%',\n\t\t\t} ).trigger( 'change' );\n\n\t\t},\n\n\t\t/**\n\t\t * Blur/focusout function for .llms-editable-title elements\n\t\t * Automatically saves changes if changes have been made\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.6\n\t\t */\n\t\ton_blur: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tthis.model.set( '_has_focus', false, { silent: true } );\n\n\t\t\tvar self = this,\n\t\t\t\t$el = $( event.target ),\n\t\t\t\tchanged = this.has_changed( event );\n\n\t\t\tif ( changed ) {\n\n\t\t\t\tif ( ! self.is_valid( event ) ) {\n\t\t\t\t\tself.revert_edits( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis.save_edits( event );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Focus event for editable inputs\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.6\n\t\t * @version 3.16.6\n\t\t */\n\t\ton_focus: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\t\t\tthis.model.set( '_has_focus', true, { silent: true } );\n\n\t\t},\n\n\t\t/**\n\t\t * Handle content pasted into contenteditable fields\n\t\t * This will ensure that HTML from RTF editors isn't pasted into the dom\n\t\t *\n\t\t * @param obj event js event obj\n\t\t * @return void\n\t\t * @since 3.17.8\n\t\t * @version 3.17.8\n\t\t */\n\t\ton_paste: function( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar text = ( event.originalEvent || event ).clipboardData.getData( 'text/plain' );\n\t\t\twindow.document.execCommand( 'insertText', false, text );\n\n\t\t},\n\n\t\t/**\n\t\t * Change event for selectables\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_select: function( event ) {\n\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tmulti = ( $el.attr( 'multiple' ) ),\n\t\t\t\tattr = $el.attr( 'name' ),\n\t\t\t\t$selected = $el.find( 'option:selected' ),\n\t\t\t\tval;\n\n\t\t\tif ( multi ) {\n\t\t\t\tval = [];\n\t\t\t\tval = $selected.map( function() {\n\t\t\t\t\treturn this.value;\n\t\t\t\t} ).get();\n\t\t\t} else {\n\t\t\t\tval = $selected[0].value;\n\t\t\t}\n\n\t\t\tthis.model.set( attr, val );\n\n\t\t},\n\n\t\t/**\n\t\t * Change event for radio element groups\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.17.6\n\t\t * @version 3.17.6\n\t\t */\n\t\ton_radio_select: function( event ) {\n\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tattr = $el.attr( 'name' ),\n\t\t\t\tval = $el.val();\n\n\t\t\tthis.model.set( attr, val );\n\n\t\t},\n\n\t\t/**\n\t\t * Keydown function for .llms-editable-title elements\n\t\t * Blurs\n\t\t *\n\t\t * @param {obj} event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.17.8\n\t\t */\n\t\ton_keydown: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar self = this,\n\t\t\t\tkey = event.which || event.keyCode,\n\t\t\t\tshift = event.shiftKey;\n\t\t\t\t// ctrl = event.metaKey || event.ctrlKey;\n\n\t\t\tswitch ( key ) {\n\n\t\t\t\tcase 13: // enter\n\t\t\t\t\t// shift + enter should add a return\n\t\t\t\t\tif ( ! shift ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.target.blur();\n\t\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.revert_edits( event );\n\t\t\t\t\tevent.target.blur();\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Open the WP media lib\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.6\n\t\t */\n\t\topen_media_lib: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar self = this,\n\t\t\t\t$el = $( event.currentTarget );\n\n\t\t\tif ( self.media_lib ) {\n\n\t\t\t\tself.media_lib.uploader.uploader.param( 'post_id' );\n\n\t\t\t} else {\n\n\t\t\t\tself.media_lib = wp.media.frames.file_frame = wp.media( {\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Select an image' ),\n\t\t\t\t\tbutton: {\n\t\t\t\t\t\ttext: LLMS.l10n.translate( 'Use this image' ),\n\t\t\t\t\t},\n\t\t\t\t\tmultiple: false\t// Set to true to allow multiple files to be selected\n\t\t\t\t} );\n\n\t\t\t\tself.media_lib.on( 'select', function() {\n\n\t\t\t\t\tvar size = $el.attr( 'data-image-size' ),\n\t\t\t\t\t\tattachment = self.media_lib.state().get( 'selection' ).first().toJSON(),\n\t\t\t\t\t\timage = self.model.get( $el.attr( 'data-attribute' ) ),\n\t\t\t\t\t\turl;\n\n\t\t\t\t\tif ( size && attachment.sizes[ size ] ) {\n\t\t\t\t\t\turl = attachment.sizes[ size ].url;\n\t\t\t\t\t} else {\n\t\t\t\t\t\turl = attachment.url;\n\t\t\t\t\t}\n\n\t\t\t\t\timage.set( {\n\t\t\t\t\t\tid: attachment.id,\n\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\t// This flag is used to protect the media files uploaded via places like the Quiz questions (Picture type)\n\t\t\tself.media_lib.uploader.options.uploader.params.llms = 1;\n\n\t\t\tself.media_lib.open();\n\n\t\t},\n\n\t\t/**\n\t\t * Click event to remove an image\n\t\t *\n\t\t * @param obj event js event obj\n\t\t * @return voids\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tremove_image: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.model.get( $( event.currentTarget ).attr( 'data-attribute' ) ).set( {\n\t\t\t\tid: '',\n\t\t\t\tsrc: '',\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Helper to undo changes\n\t\t * Bound to \"escape\" key via on_keydown function\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trevert_edits: function( event ) {\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tval = $el.attr( 'data-original-content' );\n\t\t\t$el.html( val );\n\t\t},\n\n\t\t/**\n\t\t * Sync changes to the model and DB\n\t\t *\n\t\t * @param {obj} event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tsave_edits: function( event ) {\n\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tval = this.get_content( $el );\n\n\t\t\tthis.model.set( $el.attr( 'data-attribute' ), val );\n\n\t\t},\n\n\t\t/**\n\t\t * Change event for a switch element\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.17.0\n\t\t */\n\t\ttoggle_switch: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tattr = $el.attr( 'name' ),\n\t\t\t\trerender = $el.attr( 'data-rerender' ),\n\t\t\t\tval;\n\n\t\t\tif ( $el.is( ':checked' ) ) {\n\t\t\t\tval = $el.attr( 'data-on' ) ? $el.attr( 'data-on' ) : 'yes';\n\t\t\t} else {\n\t\t\t\tval = $el.attr( 'data-off' ) ? $el.attr( 'data-off' ) : 'no';\n\t\t\t}\n\n\t\t\tif ( -1 !== attr.indexOf( '.' ) ) {\n\n\t\t\t\tvar split = attr.split( '.' );\n\n\t\t\t\tif ( 'parent' === split[0] ) {\n\t\t\t\t\tthis.model.get_parent().set( split[1], val );\n\t\t\t\t} else {\n\t\t\t\t\tthis.model.get( split[0] ).set( split[1], val );\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.model.set( attr, val );\n\n\t\t\t}\n\n\t\t\tthis.trigger( attr.replace( '.', '-' ) + '_toggle', val );\n\n\t\t\tif ( ! rerender || 'yes' === rerender ) {\n\t\t\t\tvar self = this;\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.render();\n\t\t\t\t}, 100 );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Initializes a WP Editor on a textarea\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.37.11 Replace reference to `wp.editor` with `_.getEditor()` helper.\n\t\t *\n\t\t * @param {String} id CSS ID of the editor (don't include #).\n\t\t * @param {Object} settings Optional object of settings to pass to wp.oldEditor.initialize().\n\t\t * @return {Void}\n\t\t */\n\t\tinit_editor: function( id, settings ) {\n\n\t\t\tsettings = settings || {};\n\n\t\t\tvar editor = _.getEditor();\n\n\t\t\teditor.remove( id );\n\n\t\t\teditor.initialize( id, $.extend( true, editor.getDefaultSettings(), {\n\t\t\t\tmediaButtons: true,\n\t\t\t\ttinymce: {\n\t\t\t\t\ttoolbar1: 'bold,italic,strikethrough,bullist,numlist,blockquote,hr,alignleft,aligncenter,alignright,link,unlink,wp_adv',\n\t\t\t\t\ttoolbar2: 'formatselect,underline,alignjustify,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help',\n\t\t\t\t\tsetup: _.bind( this.on_editor_ready, this ),\n\t\t\t\t}\n\t\t\t}, settings ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Setup a permalink editor to allow editing of a permalink\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.6\n\t\t * @version 3.16.6\n\t\t */\n\t\tmake_slug_editable: function( event ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$btn = $( event.currentTarget ),\n\t\t\t\t$link = $btn.prevAll( 'a' ),\n\t\t\t\t$input = $btn.prev( 'input.permalink' ),\n\t\t\t\tfull_url = $link.attr( 'href' ),\n\t\t\t\tslug = $input.val(),\n\t\t\t\tshort_url = full_url.replace( slug, '' );\n\n\t\t\t// hide the button\n\t\t\t$btn.hide();\n\n\t\t\t// make the link not clickable\n\t\t\t$link.css( {\n\t\t\t\tcolor: '#999',\n\t\t\t\t'pointer-events': 'none',\n\t\t\t\t'text-decoration': 'none',\n\t\t\t} );\n\n\t\t\t// remove the current slug & trailing slash from the URL\n\t\t\t$link.text( short_url.substring( 0, short_url.length - 1 ) );\n\n\t\t\t// focus in on the field\n\t\t\t$input.show().focus();\n\n\t\t},\n\n\t\t/**\n\t\t * Callback function called after initialization of an editor\n\t\t *\n\t\t * Updates UI if a label is present.\n\t\t *\n\t\t * Binds a change event to ensure editor changes are saved to the model.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.17.1 Uknown.\n\t\t * @since 3.37.11 Replace references to `wp.editor` with `_.getEditor()` helper.\n\t\t *\n\t\t * @param {Object} editor TinyMCE Editor instance.\n\t\t * @return {Void}\n\t\t */\n\t\ton_editor_ready: function( editor ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$ed = $( '#' + editor.id ),\n\t\t\t\t$parent = $ed.closest( '.llms-editable-editor' ),\n\t\t\t\t$label = $parent.find( '.llms-label' ),\n\t\t\t\tprop = $ed.attr( 'data-attribute' )\n\n\t\t\tif ( $label.length ) {\n\t\t\t\t$label.prependTo( $parent.find( '.wp-editor-tools' ) );\n\t\t\t}\n\n\t\t\t// save changes to the model via Visual ed\n\t\t\teditor.on( 'change', function( event ) {\n\t\t\t\tself.model.set( prop, _.getEditor().getContent( editor.id ) );\n\t\t\t} );\n\n\t\t\t// save changes via Text ed\n\t\t\t$ed.on( 'input', function( event ) {\n\t\t\t\tself.model.set( prop, $ed.val() );\n\t\t\t} );\n\n\t\t\t// trigger an input on the Text ed when quicktags buttons are clicked\n\t\t\t$parent.on( 'click', '.quicktags-toolbar .ed_button', function() {\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t$ed.trigger( 'input' );\n\t\t\t\t}, 10 );\n\t\t\t} );\n\n\t\t},\n\n\t\t_validate_url: function( str ) {\n\n\t\t\tvar a = document.createElement( 'a' );\n\t\t\ta.href = str;\n\t\t\treturn ( a.host && a.host !== window.location.host );\n\n\t\t}\n\n\t};\n\n} );\n\n","/**\n * _receive override for Backbone.CollectionView core\n * enables connection with jQuery UI draggable buttons\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/_Receivable',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * Overloads the function from Backbone.CollectionView core because it doesn't properly handle\n\t\t * receives from a jQuery UI draggable object\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @param obj ui jQuery UI object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_receive : function( event, ui ) {\n\n\t\t\t// came from sidebar drag\n\t\t\tif ( ui.sender.hasClass( 'ui-draggable' ) ) {\n\t\t\t\tvar index = this._getContainerEl().children().index( ui.helper );\n\t\t\t\tui.helper.remove(); // remove the helper\n\t\t\t\tthis.collection.add( {}, { at: index } );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar senderListEl = ui.sender;\n\t\t\tvar senderCollectionListView = senderListEl.data( 'view' );\n\t\t\tif ( ! senderCollectionListView || ! senderCollectionListView.collection ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar newIndex = this._getContainerEl().children().index( ui.item );\n\t\t\tvar modelReceived = senderCollectionListView.collection.get( ui.item.attr( 'data-model-cid' ) );\n\t\t\tsenderCollectionListView.collection.remove( modelReceived );\n\t\t\tthis.collection.add( modelReceived, { at : newIndex } );\n\t\t\tmodelReceived.collection = this.collection; // otherwise will not get properly set, since modelReceived.collection might already have a value.\n\t\t\tthis.setSelectedModel( modelReceived );\n\t\t},\n\n\t}\n\n} );\n\n","/**\n * Shiftable view mixin function\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/_Shiftable',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * Conditionally hide action buttons based on section position in collection\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tmaybe_hide_shiftable_buttons: function() {\n\n\t\t\tif ( ! this.model.collection ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar type = this.model.get( 'type' );\n\n\t\t\tif ( this.model.collection.first() === this.model ) {\n\t\t\t\tthis.$el.find( '.shift-up--' + type ).hide();\n\t\t\t} else if ( this.model.collection.last() === this.model ) {\n\t\t\t\tthis.$el.find( '.shift-down--' + type ).hide();\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Move an item in a collection from one position to another\n\t\t *\n\t\t * @param int old_index current (old) index within the collection\n\t\t * @param int new_index desired (new) index within the collection\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tshift: function( old_index, new_index ) {\n\n\t\t\tvar collection = this.model.collection;\n\n\t\t\tcollection.remove( this.model );\n\t\t\tcollection.add( this.model, { at: new_index } );\n\t\t\tcollection.trigger( 'reorder' );\n\n\t\t},\n\n\t\t/**\n\t\t * Move an item down the tree one position\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tshift_down: function( e ) {\n\n\t\t\te.preventDefault();\n\t\t\tvar index = this.model.collection.indexOf( this.model );\n\t\t\tthis.shift( index, index + 1 );\n\n\t\t},\n\n\t\t/**\n\t\t * Move an item up the tree one position\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tshift_up: function( e ) {\n\n\t\t\te.preventDefault();\n\t\t\tvar index = this.model.collection.indexOf( this.model );\n\t\t\tthis.shift( index, index - 1 );\n\n\t\t},\n\n\t};\n\n} );\n\n","/**\n * Subview utility mixin\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/_Subview',[], function() {\n\n\treturn {\n\n\t\tsubscriptions: {},\n\n\t\t/**\n\t\t * Name of the current subview\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tstate: '',\n\n\t\t/**\n\t\t * Object of subview data\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tviews: {},\n\n\t\t/**\n\t\t * Retrieve a subview by name from this.views\n\t\t *\n\t\t * @param string name name of the subview\n\t\t * @return obl|false\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_subview: function( name ) {\n\n\t\t\tif ( this.views[ name ] ) {\n\t\t\t\treturn this.views[ name ];\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t},\n\n\t\tevents_subscribe: function( events ) {\n\n\t\t\t_.each( events, function( func, event ) {\n\n\t\t\t\tthis.subscriptions[ event ] = func;\n\t\t\t\tBackbone.pubSub.on( event, func, this );\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\tevents_unsubscribe: function() {\n\n\t\t\t_.each( this.subscriptions, function( func, event ) {\n\n\t\t\t\tBackbone.pubSub.off( event, func, this );\n\t\t\t\tdelete this.subscriptions[ event ];\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Remove a single subview (and all it's subviews) by name\n\t\t *\n\t\t * @param string name name of the subview\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tremove_subview: function( name ) {\n\n\t\t\tvar view = this.get_subview( name );\n\n\t\t\tif ( ! view ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( view.instance ) {\n\n\t\t\t\t// remove the subviews if the view has subviews\n\t\t\t\tif ( ! _.isEmpty( view.instance.views ) ) {\n\t\t\t\t\tview.instance.events_unsubscribe();\n\t\t\t\t\tview.instance.remove_subviews();\n\t\t\t\t}\n\n\t\t\t\tview.instance.off();\n\t\t\t\tview.instance.off( null, null, null );\n\t\t\t\tview.instance.remove();\n\t\t\t\tview.instance.undelegateEvents();\n\n\t\t\t\t// _.each( view.instance, function( val, key ) {\n\t\t\t\t// delete view.instance[ key ];\n\t\t\t\t// } );\n\n\t\t\t\tview.instance = null;\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Remove all subviews (and all the subviews of those subviews)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tremove_subviews: function() {\n\n\t\t\t_.each( this.views, function( data, name ) {\n\n\t\t\t\tthis.remove_subview( name );\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Render subviews based on current state\n\t\t *\n\t\t * @param obj view_data additional data to pass to the subviews\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender_subviews: function( view_data ) {\n\n\t\t\tview_data = view_data || {};\n\n\t\t\t_.each( this.views, function( data, name ) {\n\n\t\t\t\tif ( this.state === data.state ) {\n\n\t\t\t\t\tthis.render_subview( name, view_data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.remove_subview( name );\n\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Render a single subview by name\n\t\t *\n\t\t * @param string name name of the subview\n\t\t * @param obj view_data additional data to pass to the subview initializer\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender_subview: function( name, view_data ) {\n\n\t\t\tvar view = this.get_subview( name );\n\n\t\t\tif ( ! view ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.remove_subview( name );\n\n\t\t\tif ( ! view.instance ) {\n\t\t\t\tview.instance = new view.class( view_data );\n\t\t\t}\n\n\t\t\tview.instance.render();\n\n\t\t},\n\n\t\t/**\n\t\t * Set the current subview\n\t\t * Must call render after!\n\t\t *\n\t\t * @param string state name of the state [builder|editor]\n\t\t * @return obj this for chaining\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tset_state: function ( state ) {\n\n\t\t\tthis.state = state;\n\t\t\treturn this;\n\n\t\t},\n\n\t}\n\n} );\n\n","/**\n * Trashable model\n *\n * @type {Object}\n * @since 3.16.12\n * @version 3.16.12\n */\ndefine( 'Views/_Trashable',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * DOM Events\n\t\t *\n\t\t * @type {Object}\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tevents: {\n\t\t\t'click a[href=\"#llms-trash-model\"]': 'trash_model',\n\t\t\t'click button.llms-trash-model': 'trash_model',\n\t\t},\n\n\t\t/**\n\t\t * Remove a model from it's parent and delete it\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\ttrash_model: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\n\t\t\tvar msg = LLMS.l10n.replace( 'Are you sure you want to move this %s to the trash?', {\n\t\t\t\t'%s': this.model.get_l10n_type(),\n\t\t\t} );\n\n\t\t\tif ( window.confirm( msg ) ) {\n\n\t\t\t\tif ( this.model.collection ) {\n\t\t\t\t\tthis.model.collection.remove( this.model );\n\t\t\t\t}\n\n\t\t\t\t// publish event\n\t\t\t\tBackbone.pubSub.trigger( 'model-trashed', this.model );\n\n\t\t\t\t// trigger local event so extending views can run other actions where necessary\n\t\t\t\tthis.trigger( 'model-trashed', this.model );\n\n\t\t\t}\n\n\t\t},\n\n\t}\n\n} );\n\n","/**\n * Load view mixins\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.17.1\n * @version 3.17.1\n */\n\ndefine( 'Views/_loader',[\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Receivable',\n\t\t'Views/_Shiftable',\n\t\t'Views/_Subview',\n\t\t'Views/_Trashable'\n\t],\n\tfunction(\n\t\tDetachable,\n\t\tEditable,\n\t\tReceivable,\n\t\tShiftable,\n\t\tSubview,\n\t\tTrashable\n\t) {\n\n\t\treturn {\n\t\t\tDetachable: Detachable,\n\t\t\tEditable: Editable,\n\t\t\tReceivable: Receivable,\n\t\t\tShiftable: Shiftable,\n\t\t\tSubview: Subview,\n\t\t\tTrashable: Trashable,\n\t\t};\n\n} );\n\n","/**\n * Constructor functions for constructing models, views, and collections\n *\n * @since 3.16.0\n * @version 3.17.1\n */\ndefine( 'Controllers/Construct',[\n\t\t'Collections/loader',\n\t\t'Models/loader',\n\t\t'Views/_loader'\n\t], function(\n\t\tCollections,\n\t\tModels,\n\t\tViews\n\t) {\n\n\t\treturn function() {\n\n\t\t\t/**\n\t\t\t * Internal getter\n\t\t\t * Constructs new Collections, Models, and Views\n\t\t\t *\n\t\t\t * @param obj type type of object to construct [Collection,Model,View]\n\t\t\t * @param string name name of the object to construct\n\t\t\t * @param obj data object data to pass into the object's constructor\n\t\t\t * @param obj options object options to pass into the constructor\n\t\t\t * @return obj\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tfunction get( type, name, data, options ) {\n\n\t\t\t\tif ( ! type[ name ] ) {\n\t\t\t\t\tconsole.log( '\"' + name + '\" not found.' );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn new type[ name ]( data, options );\n\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Instantiate a collection\n\t\t *\n\t\t\t * @param string name Collection class name (EG: \"Sections\")\n\t\t\t * @param array data Array of model objects to pass to the constructor\n\t\t\t * @param obj options Object of options to pass to the constructor\n\t\t\t * @return obj\n\t\t\t * @since 3.17.0\n\t\t\t * @version 3.17.0\n\t\t\t */\n\t\t\tthis.get_collection = function( name, data, options ) {\n\n\t\t\t\treturn get( Collections, name, data, options );\n\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Instantiate a model\n\t\t\t *\n\t\t\t * @param string name Model class name (EG: \"Section\")\n\t\t\t * @param obj data Object of model attributes to pass to the constructor\n\t\t\t * @param obj options Object of options to pass to the constructor\n\t\t\t * @return obj\n\t\t\t * @since 3.17.0\n\t\t\t * @version 3.17.0\n\t\t\t */\n\t\t\tthis.get_model = function( name, data, options ) {\n\n\t\t\t\treturn get( Models, name, data, options );\n\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Let 3rd parties extend a view using any of the mixin (_) views\n\t\t\t *\n\t\t\t * @param {obj} view base object used for the view\n\t\t\t * @param... {string} extends any number of strings that should be mixed into the view\n\t\t\t * @return obj\n\t\t\t * @since 3.17.1\n\t\t\t * @version 3.17.1\n\t\t\t */\n\t\t\tthis.extend_view = function() {\n\n\t\t\t\tvar view = arguments[0],\n\t\t\t\ti = 1;\n\n\t\t\t\twhile ( arguments[ i ] ) {\n\n\t\t\t\t\tvar classname = arguments[ i ];\n\t\t\t\t\tif ( Views[ classname ] ) {\n\n\t\t\t\t\t\tif ( view.events && Views[ classname ].events ) {\n\t\t\t\t\t\t\tview.events = _.defaults( view.events, Views[ classname ].events );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tview = _.defaults( view, Views[ classname ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\treturn Backbone.View.extend( view );\n\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Allows custom collection registration by extending the default BackBone collection\n\t\t\t *\n\t\t\t * @param string name model name\n\t\t\t * @param obj props properties to extend the collection with\n\t\t\t * @return void\n\t\t\t * @since 3.17.1\n\t\t\t * @version 3.17.1\n\t\t\t */\n\t\t\tthis.register_collection = function( name, props ) {\n\n\t\t\t\tCollections[ name ] = Backbone.Collection.extend( props );\n\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Allows custom model registration by extending the default abstract model\n\t\t\t *\n\t\t\t * @param string name model name\n\t\t\t * @param obj props properties to extend the abstract model with\n\t\t\t * @return void\n\t\t\t * @since 3.17.0\n\t\t\t * @version 3.17.0\n\t\t\t */\n\t\t\tthis.register_model = function( name, props ) {\n\n\t\t\t\tModels[ name ] = Models['Abstract'].extend( props );\n\n\t\t\t};\n\n\t\t\treturn this;\n\n\t\t};\n\n} );\n\n","/**\n * LifterLMS Builder Debugging suite\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Controllers/Debug',[], function() {\n\n\treturn function( settings ) {\n\n\t\tvar self = this,\n\t\t\tenabled = settings.enabled || false;\n\n\t\t/**\n\t\t * Disable debugging\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.disable = function() {\n\n\t\t\tself.log( 'LifterLMS Builder debugging disabled' );\n\t\t\tenabled = false;\n\n\t\t};\n\n\t\t/**\n\t\t * Enable debugging\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.enable = function() {\n\n\t\t\tenabled = true;\n\t\t\tself.log( 'LifterLMS Builder debugging enabled' );\n\n\t\t};\n\n\t\t/**\n\t\t * General logging function\n\t\t * Logs to the js console only if logging is enabled\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.log = function() {\n\n\t\t\tif ( ! enabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.each( arguments, function( data ) {\n\t\t\t\tconsole.log( data );\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Toggles current state of the logger on or off\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.toggle = function() {\n\n\t\t\tif ( enabled ) {\n\t\t\t\tself.disable();\n\t\t\t} else {\n\t\t\t\tself.enable();\n\t\t\t}\n\n\t\t};\n\n\t\t// on startup, log a message if logging is enabled\n\t\tif ( enabled ) {\n\t\t\tself.enable();\n\t\t}\n\n\t}\n\n} );\n\n","/**\n * Model schema functions\n *\n * @since 3.17.0\n * @version 3.17.0\n */\ndefine( 'Controllers/Schemas',[], function() {\n\n\t/**\n\t * Main Schemas class\n\t *\n\t * @param obj schemas schemas definitions initialized via PHP filters\n\t * @return obj\n\t * @since 3.17.0\n\t * @version 3.17.0\n\t */\n\treturn function( schemas ) {\n\n\t\t// initialize any custom schemas defined via PHP\n\t\tvar custom_schemas = schemas;\n\t\t_.each( custom_schemas, function( type ) {\n\t\t\t_.each( type, function( schema ) {\n\t\t\t\tschema.custom = true;\n\t\t\t} );\n\t\t} );\n\n\t\t/**\n\t\t * Retrieve a schema for a given model by type\n\t\t * Extends default schemas definitions with custom 3rd party definitions\n\t\t *\n\t\t * @param obj schema default schema definition from the model (or empty object if none defined)\n\t\t * @param string model_type the model type ('lesson', 'quiz', etc)\n\t\t * @param obj model Instance of the Backbone.Model for the given model\n\t\t * @return obj\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tthis.get = function( schema, model_type, model ) {\n\n\t\t\t// extend the default schema with custom php schemas for the type if they exist\n\t\t\tif ( custom_schemas[ model_type ] ) {\n\t\t\t\tschema = _.extend( schema, custom_schemas[ model_type ] );\n\t\t\t}\n\n\t\t\treturn schema;\n\n\t\t};\n\n\t\treturn this;\n\n\t};\n\n} );\n\n","/**\n * Sync builder data to the server\n *\n * @since 3.16.0\n * @version 4.17.0\n */\ndefine( 'Controllers/Sync',[], function() {\n\n\treturn function( Course, settings ) {\n\n\t\tthis.saving = false;\n\n\t\tvar self = this,\n\t\t\tautosave = ( 'yes' === window.llms_builder.autosave ),\n\t\t\tcheck_interval = null,\n\t\t\tcheck_interval_ms = settings.check_interval_ms || ( ( 'yes' === window.llms_builder.autosave ) ? 10000 : 1000 ),\n\t\t\tdetached = new Backbone.Collection(),\n\t\t\ttrashed = new Backbone.Collection();\n\n\t\t/**\n\t\t * init\n\t\t *\n\t\t * @since 3.16.7\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tfunction init() {\n\n\t\t\t// determine if autosaving is possible\n\t\t\tif ( 'undefined' === typeof wp.heartbeat ) {\n\n\t\t\t\twindow.llms_builder.debug.log( 'WordPress Heartbeat disabled. Autosaving is disabled!' );\n\t\t\t\tautosave = false;\n\n\t\t\t}\n\n\t\t\t// setup the check interval\n\t\t\tif ( check_interval_ms ) {\n\t\t\t\tself.set_check_interval( check_interval_ms );\n\t\t\t}\n\n\t\t\t// warn when users attempt to leave the page\n\t\t\t$( window ).on( 'beforeunload', function() {\n\n\t\t\t\tif ( self.has_unsaved_changes() ) {\n\t\t\t\t\tcheck_for_changes();\n\t\t\t\t\treturn 'Are you sure you want to abandon your changes?';\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/*\n\t\t\t /$$ /$$ /$$ /$$\n\t\t\t |__/ | $$ | $$ |__/\n\t\t\t /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ | $$ /$$$$$$ /$$$$$$ /$$\n\t\t\t | $$| $$__ $$|_ $$_/ /$$__ $$ /$$__ $$| $$__ $$ |____ $$| $$ |____ $$ /$$__ $$| $$\n\t\t\t | $$| $$ \\ $$ | $$ | $$$$$$$$| $$ \\__/| $$ \\ $$ /$$$$$$$| $$ /$$$$$$$| $$ \\ $$| $$\n\t\t\t | $$| $$ | $$ | $$ /$$| $$_____/| $$ | $$ | $$ /$$__ $$| $$ /$$__ $$| $$ | $$| $$\n\t\t\t | $$| $$ | $$ | $$$$/| $$$$$$$| $$ | $$ | $$| $$$$$$$| $$ | $$$$$$$| $$$$$$$/| $$\n\t\t\t |__/|__/ |__/ \\___/ \\_______/|__/ |__/ |__/ \\_______/|__/ \\_______/| $$____/ |__/\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | $$\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | $$\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t |__/\n\t\t */\n\n\t\t/**\n\t\t * Adds error message(s) to the data object returned by heartbeat-tick\n\t\t *\n\t\t * @param obj data llms_builder data object from heartbeat-tick\n\t\t * @param string|array err error messages array or string\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tfunction add_error_msg( data, err ) {\n\n\t\t\tif ( 'success' === data.status ) {\n\t\t\t\tdata.message = [];\n\t\t\t}\n\n\t\t\tdata.status = 'error';\n\t\t\tif ( 'string' === typeof err ) {\n\t\t\t\terr = [ err ];\n\t\t\t}\n\t\t\tdata.message = data.message.concat( err );\n\n\t\t\treturn data;\n\n\t\t};\n\n\t\t/**\n\t\t * Publish sync status so other areas of the application can see what's happening here\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tfunction check_for_changes() {\n\n\t\t\tvar data = {};\n\t\t\tdata.changes = self.get_unsaved_changes();\n\t\t\tdata.has_unsaved_changes = self.has_unsaved_changes( data.changes );\n\t\t\tdata.saving = self.saving;\n\n\t\t\twindow.llms_builder.debug.log( '==== start changes check ====', data, '==== finish changes check ====' );\n\n\t\t\tBackbone.pubSub.trigger( 'current-save-status', data );\n\n\t\t};\n\n\t\t/**\n\t\t * Manually Save data via Admin AJAX when the heartbeat API has been disabled\n\t\t *\n\t\t * @since 3.16.7\n\t\t * @since 4.17.0 Fixed undefined variable error when logging an error response.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tfunction do_ajax_save() {\n\n\t\t\t// prevent simultaneous saves\n\t\t\tif ( self.saving ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar changes = self.get_unsaved_changes();\n\n\t\t\t// only send data if we have data to send\n\t\t\tif ( self.has_unsaved_changes( changes ) ) {\n\n\t\t\t\tchanges.id = Course.get( 'id' );\n\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'llms_builder',\n\t\t\t\t\t\taction_type: 'ajax_save',\n\t\t\t\t\t\tcourse_id: changes.id,\n\t\t\t\t\t\tllms_builder: JSON.stringify( changes ),\n\t\t\t\t\t},\n\t\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\t\twindow.llms_builder.debug.log( '==== start do_ajax_save before ====', changes, '==== finish do_ajax_save before ====' );\n\n\t\t\t\t\t\tself.saving = true;\n\n\t\t\t\t\t\tBackbone.pubSub.trigger( 'heartbeat-send', self );\n\n\t\t\t\t\t},\n\t\t\t\t\terror: function( xhr, status, error ) {\n\n\t\t\t\t\t\twindow.llms_builder.debug.log( '==== start do_ajax_save error ====', xhr, '==== finish do_ajax_save error ====' );\n\n\t\t\t\t\t\tself.saving = false;\n\n\t\t\t\t\t\tBackbone.pubSub.trigger( 'heartbeat-tick', self, {\n\t\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\t\tmessage: xhr.responseText + ' (' + error + ' ' + status + ')',\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( res ) {\n\n\t\t\t\t\t\tif ( ! res.llms_builder ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twindow.llms_builder.debug.log( '==== start do_ajax_save success ====', res, '==== finish do_ajax_save success ====' );\n\n\t\t\t\t\t\tres.llms_builder = process_removals( res.llms_builder );\n\t\t\t\t\t\tres.llms_builder = process_updates( res.llms_builder );\n\n\t\t\t\t\t\tself.saving = false;\n\n\t\t\t\t\t\tBackbone.pubSub.trigger( 'heartbeat-tick', self, res.llms_builder );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Retrieve all the attributes changed on a model since the last sync\n\t\t *\n\t\t * For a new model (a model with a temp ID) or a model where _forceSync has been defined ALL atts will be returned\n\t\t * For an existing model (without a temp ID) only retrieves changed attributes as tracked by Backbone.TrackIt\n\t\t *\n\t\t * This function excludes any attributes defined as child attributes via the models relationship settings\n\t\t *\n\t\t * @param obj model instance of a Backbone.Model\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.6\n\t\t */\n\t\tfunction get_changed_attributes( model ) {\n\n\t\t\tvar atts = {},\n\t\t\t\tsync_type;\n\n\t\t\t// don't save mid editing\n\t\t\tif ( model.get( '_has_focus' ) ) {\n\t\t\t\treturn atts;\n\t\t\t}\n\n\t\t\t// model hasn't been persisted to the database to get a real ID yet\n\t\t\t// send *all* of it's atts\n\t\t\tif ( has_temp_id( model ) || true === model.get( '_forceSync' ) ) {\n\n\t\t\t\tatts = _.clone( model.attributes );\n\t\t\t\tsync_type = 'full';\n\n\t\t\t\t// only send the changed atts\n\t\t\t} else {\n\n\t\t\t\tatts = model.unsavedAttributes();\n\t\t\t\tsync_type = 'partial';\n\n\t\t\t}\n\n\t\t\tvar exclude = ( model.get_relationships ) ? model.get_child_props() : [];\n\t\t\tatts = _.omit( atts, function( val, key ) {\n\n\t\t\t\t// exclude keys that start with an underscore which are used by the\n\t\t\t\t// application but don't need to be stored in the database\n\t\t\t\tif ( 0 === key.indexOf( '_' ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else if ( -1 !== exclude.indexOf( key ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\n\t\t\t} );\n\n\t\t\tif ( model.before_save ) {\n\t\t\t\tatts = model.before_save( atts, sync_type );\n\t\t\t}\n\n\t\t\treturn atts;\n\n\t\t};\n\n\t\t/**\n\t\t * Get all the changes to an object (either a Model or a Collection of models)\n\t\t * Returns only changes to models and the IDs of that model (should changes exist)\n\t\t * Uses get_changed_attributes() to determine if all atts or only changed atts are needed\n\t\t * Processes children intelligently to only return changed children rather than the entire collection of children\n\t\t *\n\t\t * @param obj object instance of a Backbone.Model or Backbone.Collection\n\t\t * @return obj|array\t \t\tif object is a model, returns an object\n\t\t * \tif object is a collection, returns an array of objects\n\t\t * @since 3.16.0\n\t\t * @version 3.16.11\n\t\t */\n\t\tfunction get_changes_to_object( object ) {\n\n\t\t\tvar changed_atts;\n\n\t\t\tif ( object instanceof Backbone.Model ) {\n\n\t\t\t\tchanged_atts = get_changed_attributes( object );\n\n\t\t\t\tif ( object.get_relationships ) {\n\n\t\t\t\t\t_.each( object.get_child_props(), function( prop ) {\n\n\t\t\t\t\t\tvar children = get_changes_to_object( object.get( prop ) );\n\t\t\t\t\t\tif ( ! _.isEmpty( children ) ) {\n\t\t\t\t\t\t\tchanged_atts[ prop ] = children;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t// if we have any data, add the id to the model\n\t\t\t\tif ( ! _.isEmpty( changed_atts ) ) {\n\t\t\t\t\tchanged_atts.id = object.get( 'id' );\n\t\t\t\t}\n\n\t\t\t} else if ( object instanceof Backbone.Collection ) {\n\n\t\t\t\tchanged_atts = [];\n\t\t\t\tobject.each( function( model ) {\n\t\t\t\t\tvar model_changes = get_changes_to_object( model );\n\t\t\t\t\tif ( ! _.isEmpty( model_changes ) ) {\n\t\t\t\t\t\tchanged_atts.push( model_changes );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn changed_atts;\n\n\t\t};\n\n\t\t/**\n\t\t * Determines if a model has a temporary ID or a real persisted ID\n\t\t *\n\t\t * @param obj model instance of a model\n\t\t * @return boolean\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tfunction has_temp_id( model ) {\n\n\t\t\treturn ( ! _.isNumber( model.id ) && 0 === model.id.indexOf( 'temp_' ) );\n\n\t\t};\n\n\t\t/**\n\t\t * Compares changes synced to the server against current model and restarts\n\t\t * tracking on elements that haven't changed since the last sync\n\t\t *\n\t\t * @param obj model instance of a Backbone.Model\n\t\t * @param obj data data set that was processed by the server\n\t\t * @return void\n\t\t * @since 3.16.11\n\t\t * @version 3.19.4\n\t\t */\n\t\tfunction maybe_restart_tracking( model, data ) {\n\n\t\t\tBackbone.pubSub.trigger( model.get( 'type' ) + '-maybe-restart-tracking', model, data );\n\n\t\t\tvar omit = [ 'id', 'orig_id' ];\n\n\t\t\tif ( model.get_relationships ) {\n\t\t\t\tomit.concat( model.get_child_props() );\n\t\t\t}\n\n\t\t\t_.each( _.omit( data, omit ), function( val, prop ) {\n\n\t\t\t\tif ( _.isEqual( model.get( prop ), val ) ) {\n\t\t\t\t\tdelete model._unsavedChanges[ prop ];\n\t\t\t\t\tmodel._originalAttrs[ prop ] = val;\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// if syncing was forced, allow tracking to move forward as normal moving forward\n\t\t\tmodel.unset( '_forceSync' );\n\n\t\t};\n\n\t\t/**\n\t\t * Processes response data from heartbeat-tick related to trashing & detaching models\n\t\t * On success, removes from local removal collection\n\t\t * On error, appends error messages to the data object returned to UI for on-screen feedback\n\t\t *\n\t\t * @param obj data data.llms_builder object from heartbeat-tick response\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.17.1\n\t\t */\n\t\tfunction process_removals( data ) {\n\n\t\t\t// check removals for errors\n\t\t\tvar removals = {\n\t\t\t\tdetach: detached,\n\t\t\t\ttrash: trashed,\n\t\t\t};\n\n\t\t\t_.each( removals, function( coll, key ) {\n\n\t\t\t\tif ( data[ key ] ) {\n\n\t\t\t\t\tvar errors = [];\n\n\t\t\t\t\t_.each( data[ key ] , function( info ) {\n\n\t\t\t\t\t\t// successfully detached, remove it from the detached collection\n\t\t\t\t\t\tif ( ! info.error ) {\n\n\t\t\t\t\t\t\tcoll.remove( info.id );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\terrors.push( info.error );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( errors.length ) {\n\t\t\t\t\t\t_.extend( data, add_error_msg( data, errors ) );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn data;\n\t\t}\n\n\t\t/**\n\t\t * Processes response data from heartbeat-tick related to creating / updating a single object\n\t\t * Handles both collections and models as a recursive function\n\t\t *\n\t\t * @param {[type]} data [description]\n\t\t * @param {[type]} type [description]\n\t\t * @param {[type]} parent [description]\n\t\t * @param {[type]} main_data [description]\n\t\t * @return {[type]}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.11\n\t\t */\n\t\tfunction process_object_updates( data, type, parent, main_data ) {\n\n\t\t\tif ( ! data[ type ] ) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tif ( parent.get( type ) instanceof Backbone.Model ) {\n\n\t\t\t\tvar info = data[ type ];\n\n\t\t\t\tif ( info.error ) {\n\n\t\t\t\t\t_.extend( main_data, add_error_msg( main_data, info.error ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar model = parent.get( type );\n\n\t\t\t\t\t// update temp ids with the real id\n\t\t\t\t\tif ( info.id != info.orig_id ) {\n\t\t\t\t\t\tmodel.set( 'id', info.id );\n\t\t\t\t\t\tdelete model._unsavedChanges.id;\n\t\t\t\t\t}\n\t\t\t\t\tmaybe_restart_tracking( model, info );\n\n\t\t\t\t\t// check children\n\t\t\t\t\tif ( model.get_relationships ) {\n\n\t\t\t\t\t\t_.each( model.get_child_props(), function( child_key ) {\n\t\t\t\t\t\t\t_.extend( data[ type ], process_object_updates( data[ type ], child_key, model, main_data ) );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( parent.get( type ) instanceof Backbone.Collection ) {\n\n\t\t\t\t_.each( data[ type ], function( info, index ) {\n\n\t\t\t\t\tif ( info.error ) {\n\n\t\t\t\t\t\t_.extend( main_data, add_error_msg( main_data, info.error ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar model = parent.get( type ).get( info.orig_id );\n\n\t\t\t\t\t\t// update temp ids with the real id\n\t\t\t\t\t\tif ( info.id != info.orig_id ) {\n\t\t\t\t\t\t\tmodel.set( 'id', info.id );\n\t\t\t\t\t\t\tdelete model._unsavedChanges.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmaybe_restart_tracking( model, info );\n\n\t\t\t\t\t\t// check children\n\t\t\t\t\t\tif ( model.get_relationships ) {\n\n\t\t\t\t\t\t\t_.each( model.get_child_props(), function( child_key ) {\n\t\t\t\t\t\t\t\t_.extend( data[ type ], process_object_updates( data[ type ][ index ], child_key, model, main_data ) );\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn main_data;\n\n\t\t};\n\n\t\t/**\n\t\t * Processes response data from heartbeat-tick related to updating & creating new models\n\t\t * On success, removes from local removal collection\n\t\t * On error, appends error messages to the data object returned to UI for on-screen feedback\n\t\t *\n\t\t * @param obj data data.llms_builder object from heartbeat-tick response\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tfunction process_updates( data ) {\n\n\t\t\t// only mess with updates data\n\t\t\tif ( ! data.updates ) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tif ( data.updates ) {\n\t\t\t\tdata = process_object_updates( data.updates, 'sections', Course, data );\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t};\n\n\t\t/*\n\t\t\t\t\t\t\t\t /$$ /$$ /$$ /$$\n\t\t\t\t\t\t\t\t| $$ | $$|__/ |__/\n\t\t\t /$$$$$$ /$$ /$$| $$$$$$$ | $$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$\n\t\t\t /$$__ $$| $$ | $$| $$__ $$| $$| $$ /$$_____/ |____ $$ /$$__ $$| $$\n\t\t\t| $$ \\ $$| $$ | $$| $$ \\ $$| $$| $$| $$ /$$$$$$$| $$ \\ $$| $$\n\t\t\t| $$ | $$| $$ | $$| $$ | $$| $$| $$| $$ /$$__ $$| $$ | $$| $$\n\t\t\t| $$$$$$$/| $$$$$$/| $$$$$$$/| $$| $$| $$$$$$$ | $$$$$$$| $$$$$$$/| $$\n\t\t\t| $$____/ \\______/ |_______/ |__/|__/ \\_______/ \\_______/| $$____/ |__/\n\t\t\t| $$ | $$\n\t\t\t| $$ | $$\n\t\t\t|__/ |__/\n\t\t*/\n\n\t\t/**\n\t\t * Retrieve all unsaved changes for the builder instance\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.17.1\n\t\t */\n\t\tthis.get_unsaved_changes = function() {\n\n\t\t\treturn {\n\t\t\t\tdetach: detached.pluck( 'id' ),\n\t\t\t\ttrash: trashed.pluck( 'id' ),\n\t\t\t\tupdates: get_changes_to_object( Course ),\n\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Check if the builder instance has unsaved changes\n\t\t *\n\t\t * @param obj changes optionally pass in an object from the return of this.get_unsaved_changes()\n\t\t * save some resources by not running the check twice during heartbeats\n\t\t * @return boolean\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.has_unsaved_changes = function( changes ) {\n\n\t\t\tif ( 'undefined' === typeof changes ) {\n\t\t\t\tchanges = self.get_unsaved_changes();\n\t\t\t}\n\n\t\t\t// check all possible keys, once we find one with content we have some changes to persist\n\t\t\tvar found = _.find( changes, function( data ) {\n\n\t\t\t\treturn ( false === _.isEmpty( data ) );\n\n\t\t\t} );\n\n\t\t\treturn found ? true : false;\n\n\t\t};\n\n\t\t/**\n\t\t * Save changes right now.\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.7\n\t\t */\n\t\tthis.save_now = function() {\n\t\t\tif ( autosave ) {\n\t\t\t\twp.heartbeat.connectNow();\n\t\t\t} else {\n\t\t\t\tdo_ajax_save();\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Update the interval that checks for changes to the builder instance\n\t\t *\n\t\t * @param int ms time (in milliseconds) to run the check on\n\t\t * pass 0 to disable the check\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.set_check_interval = function( ms ) {\n\t\t\tcheck_interval_ms = ms;\n\t\t\tif ( check_interval ) {\n\t\t\t\tclearInterval( check_interval );\n\t\t\t}\n\t\t\tif ( check_interval_ms ) {\n\t\t\t\tcheck_interval = setInterval( check_for_changes, check_interval_ms );\n\t\t\t}\n\t\t};\n\n\t\t/*\n\t\t\t /$$ /$$ /$$\n\t\t\t| $$|__/ | $$\n\t\t\t| $$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$\n\t\t\t| $$| $$ /$$_____/|_ $$_/ /$$__ $$| $$__ $$ /$$__ $$ /$$__ $$ /$$_____/\n\t\t\t| $$| $$| $$$$$$ | $$ | $$$$$$$$| $$ \\ $$| $$$$$$$$| $$ \\__/| $$$$$$\n\t\t\t| $$| $$ \\____ $$ | $$ /$$| $$_____/| $$ | $$| $$_____/| $$ \\____ $$\n\t\t\t| $$| $$ /$$$$$$$/ | $$$$/| $$$$$$$| $$ | $$| $$$$$$$| $$ /$$$$$$$/\n\t\t\t|__/|__/|_______/ \\___/ \\_______/|__/ |__/ \\_______/|__/ |_______/\n\t\t*/\n\n\t\t/**\n\t\t * Listen for detached models and send them to the server for persistence\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tBackbone.pubSub.on( 'model-detached', function( model ) {\n\n\t\t\t// detached models with temp ids haven't been persisted so we don't care\n\t\t\tif ( has_temp_id( model ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdetached.add( _.clone( model.attributes ) );\n\n\t\t} );\n\n\t\t/**\n\t\t * Listen for trashed models and send them to the server for deletion\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @version 3.17.1\n\t\t */\n\t\tBackbone.pubSub.on( 'model-trashed', function( model ) {\n\n\t\t\t// if the model has a temp ID we don't have to persist the deletion\n\t\t\tif ( has_temp_id( model ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar data = _.clone( model.attributes );\n\n\t\t\tif ( model.get_trash_id ) {\n\t\t\t\tdata.id = model.get_trash_id();\n\t\t\t}\n\n\t\t\ttrashed.add( data );\n\n\t\t} );\n\n\t\t/*\n\t\t\t /$$ /$$ /$$ /$$\n\t\t\t| $$ | $$ | $$ | $$\n\t\t\t| $$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$\n\t\t\t| $$__ $$ /$$__ $$ |____ $$ /$$__ $$|_ $$_/ | $$__ $$ /$$__ $$ |____ $$|_ $$_/\n\t\t\t| $$ \\ $$| $$$$$$$$ /$$$$$$$| $$ \\__/ | $$ | $$ \\ $$| $$$$$$$$ /$$$$$$$ | $$\n\t\t\t| $$ | $$| $$_____/ /$$__ $$| $$ | $$ /$$| $$ | $$| $$_____/ /$$__ $$ | $$ /$$\n\t\t\t| $$ | $$| $$$$$$$| $$$$$$$| $$ | $$$$/| $$$$$$$/| $$$$$$$| $$$$$$$ | $$$$/\n\t\t\t|__/ |__/ \\_______/ \\_______/|__/ \\___/ |_______/ \\_______/ \\_______/ \\___/\n\t\t*/\n\n\n\t\t/**\n\t\t * Add data to the WP heartbeat to persist new models, changes, and deletions to the DB\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.7 Unknown\n\t\t * @since 4.14.0 Return early when autosaving is disabled.\n\t\t */\n\t\t$( document ).on( 'heartbeat-send', function( event, data ) {\n\n\t\t\t// Autosaving is disabled.\n\t\t\tif ( ! autosave ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// prevent simultaneous saves\n\t\t\tif ( self.saving ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar changes = self.get_unsaved_changes();\n\n\t\t\t// only send data if we have data to send\n\t\t\tif ( self.has_unsaved_changes( changes ) ) {\n\n\t\t\t\tchanges.id = Course.get( 'id' );\n\t\t\t\tself.saving = true;\n\t\t\t\tdata.llms_builder = JSON.stringify( changes );\n\n\t\t\t}\n\n\t\t\twindow.llms_builder.debug.log( '==== start heartbeat-send ====', data, '==== finish heartbeat-send ====' );\n\n\t\t\tBackbone.pubSub.trigger( 'heartbeat-send', self );\n\n\t\t} );\n\n\t\t/**\n\t\t * Confirm detachments & deletions and replace temp IDs with new persisted IDs\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 4.14.0 Return early when autosaving is disabled.\n\t\t */\n\t\t$( document ).on( 'heartbeat-tick', function( event, data ) {\n\n\t\t\t// Autosaving is disabled.\n\t\t\tif ( ! autosave ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! data.llms_builder ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.llms_builder.debug.log( '==== start heartbeat-tick ====', data, '==== finish heartbeat-tick ====' );\n\n\t\t\tdata.llms_builder = process_removals( data.llms_builder );\n\t\t\tdata.llms_builder = process_updates( data.llms_builder );\n\n\t\t\tself.saving = false;\n\n\t\t\tBackbone.pubSub.trigger( 'heartbeat-tick', self, data.llms_builder );\n\n\t\t} );\n\n\t\t/**\n\t\t * On heartbeat errors publish an error to the main builder application\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 4.14.0 Return early when autosaving is disabled.\n\t\t */\n\t\t$( document ).on( 'heartbeat-error', function( event, data ) {\n\n\t\t\t// Autosaving is disabled.\n\t\t\tif ( ! autosave ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.llms_builder.debug.log( '==== start heartbeat-error ====', data, '==== finish heartbeat-error ====' );\n\n\t\t\tself.saving = false;\n\n\t\t\tBackbone.pubSub.trigger( 'heartbeat-tick', self, {\n\t\t\t\tstatus: 'error',\n\t\t\t\tmessage: data.responseText + ' (' + data.status + ' ' + data.statusText + ')',\n\t\t\t} );\n\n\t\t} );\n\n\t\t/*\n\t\t\t /$$ /$$ /$$\n\t\t\t|__/ |__/ | $$\n\t\t\t /$$ /$$$$$$$ /$$ /$$$$$$\n\t\t\t| $$| $$__ $$| $$|_ $$_/\n\t\t\t| $$| $$ \\ $$| $$ | $$\n\t\t\t| $$| $$ | $$| $$ | $$ /$$\n\t\t\t| $$| $$ | $$| $$ | $$$$/\n\t\t\t|__/|__/ |__/|__/ \\___/\n\t\t*/\n\t\tinit();\n\n\t\treturn this;\n\n\t};\n\n} );\n\n","/**\n * Single Lesson View\n * @since 3.16.0\n * @version 3.27.0\n */\ndefine( 'Views/Lesson',[\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Shiftable',\n\t\t'Views/_Trashable'\n\t], function(\n\t\tDetachable,\n\t\tEditable,\n\t\tShiftable,\n\t\tTrashable\n\t) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Get default attributes for the html wrapper element\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tattributes: function() {\n\t\t\treturn {\n\t\t\t\t'data-id': this.model.id,\n\t\t\t\t'data-section-id': this.model.get( 'parent_section' ),\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * HTML class names\n\t\t * @type {String}\n\t\t */\n\t\tclassName: 'llms-builder-item llms-lesson',\n\n\t\t/**\n\t\t * Events\n\t\t * @type {Object}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.12\n\t\t */\n\t\tevents: _.defaults( {\n\t\t\t'click .edit-lesson': 'open_lesson_editor',\n\t\t\t'click .llms-headline': 'open_lesson_editor',\n\t\t\t'click .edit-quiz': 'open_quiz_editor',\n\t\t\t'click .edit-assignment': 'open_assignment_editor',\n\t\t\t'click .section-prev': 'section_prev',\n\t\t\t'click .section-next': 'section_next',\n\t\t\t'click .shift-up--lesson': 'shift_up',\n\t\t\t'click .shift-down--lesson': 'shift_down',\n\t\t}, Detachable.events, Editable.events, Trashable.events ),\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-lesson-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-lesson-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.14.1\n\t\t * @version 3.14.1\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.render();\n\n\t\t\tthis.listenTo( this.model, 'change', this.render );\n\n\t\t\tBackbone.pubSub.on( 'lesson-selected', this.on_select, this );\n\t\t\tBackbone.pubSub.on( 'new-lesson-added', this.on_select, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this.model ) );\n\t\t\tthis.maybe_hide_shiftable_buttons();\n\t\t\tif ( this.model.get( '_selected' ) ) {\n\t\t\t\tthis.$el.addClass( 'selected' );\n\t\t\t} else {\n\t\t\t\tthis.$el.removeClass( 'selected' );\n\t\t\t}\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for the assignment editor action icon\n\t\t * Opens sidebar to the assignment editor tab\n\t\t * @param obj event JS Event obj.\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.27.0\n\t\t */\n\t\topen_assignment_editor: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tBackbone.pubSub.trigger( 'lesson-selected', this.model, 'assignment' );\n\t\t\tthis.model.set( '_selected', true );\n\t\t\tthis.set_hash( 'assignment' );\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for lesson settings action icon\n\t\t * Opens sidebar to the lesson editor tab\n\t\t * @param obj event JS Event obj.\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.27.0\n\t\t */\n\t\topen_lesson_editor: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tBackbone.pubSub.trigger( 'lesson-selected', this.model, 'lesson' );\n\t\t\tthis.model.set( '_selected', true );\n\t\t\tthis.set_hash( false );\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for the quiz editor action icon\n\t\t * Opens sidebar to the quiz editor tab\n\t\t * @param obj event JS Event obj.\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.27.0\n\t\t */\n\t\topen_quiz_editor: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tBackbone.pubSub.trigger( 'lesson-selected', this.model, 'quiz' );\n\t\t\tthis.model.set( '_selected', true );\n\t\t\tthis.set_hash( 'quiz' );\n\n\t\t},\n\n\t\t/**\n\t\t * When a lesson is selected mark it as selected in the hidden prop\n\t\t * Allows views to re-render and reflect current state properly\n\t\t * @param obj model lesson model that's been selected\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_select: function( model ) {\n\n\t\t\tif ( this.model.id !== model.id ) {\n\t\t\t\tthis.model.set( '_selected', false );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for the \"Next Section\" button\n\t\t * @param obj event js event obj\n\t\t * @return void\n\t\t * @since 3.16.11\n\t\t * @version 3.16.11\n\t\t */\n\t\tsection_next: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._move_to_section( 'next' );\n\t\t},\n\n\t\t/**\n\t\t * Click event for the \"Previous Section\" button\n\t\t * @param obj event js event obj\n\t\t * @return void\n\t\t * @since 3.16.11\n\t\t * @version 3.16.11\n\t\t */\n\t\tsection_prev: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._move_to_section( 'prev' );\n\t\t},\n\n\t\t/**\n\t\t * Adds a hash for deep linking to a specific lesson tab\n\t\t * @param string subtab subtab [quiz|assignment]\n\t\t * @return void\n\t\t * @since 3.27.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tset_hash: function( subtab ) {\n\n\t\t\tvar hash = 'lesson:' + this.model.get( 'id' );\n\n\t\t\tif ( subtab ) {\n\t\t\t\thash += ':' + subtab;\n\t\t\t}\n\n\t\t\twindow.location.hash = hash;\n\n\t\t},\n\n\t\t/**\n\t\t * Move the lesson into a new section\n\t\t * @param string direction direction [prev|next]\n\t\t * @return void\n\t\t * @since 3.16.11\n\t\t * @version 3.16.11\n\t\t */\n\t\t_move_to_section: function( direction ) {\n\n\t\t\tvar from_coll = this.model.collection,\n\t\t\t\tto_section;\n\n\t\t\tif ( 'next' === direction ) {\n\t\t\t\tto_section = from_coll.parent.get_next();\n\t\t\t} else if ( 'prev' === direction ) {\n\t\t\t\tto_section = from_coll.parent.get_prev();\n\t\t\t}\n\n\t\t\tif ( to_section ) {\n\n\t\t\t\tfrom_coll.remove( this.model );\n\t\t\t\tto_section.add_lesson( this.model );\n\t\t\t\tto_section.set( '_expanded', true );\n\n\t\t\t}\n\n\t\t},\n\n\t}, Detachable, Editable, Shiftable, Trashable ) );\n\n} );\n\n","/**\n * Single Section View\n *\n * @since 3.13.0\n * @version 3.16.0\n */\ndefine( 'Views/LessonList',[ 'Views/Lesson', 'Views/_Receivable' ], function( LessonView, Receivable ) {\n\n\treturn Backbone.CollectionView.extend( _.defaults( {\n\n\t\tclassName: 'llms-lessons',\n\n\t\t/**\n\t\t * Section model\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: LessonView,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: false,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: true,\n\n\t\tsortableOptions: {\n\t\t\taxis: false,\n\t\t\tconnectWith: '.llms-lessons',\n\t\t\tcursor: 'move',\n\t\t\thandle: '.drag-lesson',\n\t\t\titems: '.llms-lesson',\n\t\t\tplaceholder: 'llms-lesson llms-sortable-placeholder',\n\t\t},\n\n\t\tsortable_start: function( collection ) {\n\t\t\t$( '.llms-lessons' ).addClass( 'dragging' );\n\t\t},\n\n\t\tsortable_stop: function( collection ) {\n\t\t\t$( '.llms-lessons' ).removeClass( 'dragging' );\n\t\t},\n\n\t\t/**\n\t\t * Overloads the function from Backbone.CollectionView core because it doesn't send stop events\n\t\t * if moving from one sortable to another... :-(\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @param obj ui jQuery UI object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_sortStop : function( event, ui ) {\n\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( 'data-model-cid' ) ),\n\t\t\t\tmodelViewContainerEl = this._getContainerEl(),\n\t\t\t\tnewIndex = modelViewContainerEl.children().index( ui.item );\n\n\t\t\tif ( newIndex == -1 && modelBeingSorted ) {\n\t\t\t\tthis.collection.remove( modelBeingSorted );\n\t\t\t}\n\n\t\t\tthis._reorderCollectionBasedOnHTML();\n\t\t\tthis.updateDependentControls();\n\n\t\t\tif ( this._isBackboneCourierAvailable() ) {\n\t\t\t\tthis.spawn( 'sortStop', { modelBeingSorted : modelBeingSorted, newIndex : newIndex } );\n\t\t\t} else {\n\t\t\t\tthis.trigger( 'sortStop', modelBeingSorted, newIndex );\n\t\t\t}\n\n\t\t},\n\n\t}, Receivable ) );\n\n} );\n\n","/**\n * Single Section View\n * @since 3.13.0\n * @version 3.16.12\n */\ndefine( 'Views/Section',[\n\t\t'Views/LessonList',\n\t\t'Views/_Editable',\n\t\t'Views/_Shiftable',\n\t\t'Views/_Trashable'\n\t], function(\n\t\tLessonListView,\n\t\tEditable,\n\t\tShiftable,\n\t\tTrashable\n\t) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Get default attributes for the html wrapper element\n\t\t * @return obj\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\tattributes: function() {\n\t\t\treturn {\n\t\t\t\t'data-id': this.model.id,\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Element class names\n\t\t * @type {String}\n\t\t */\n\t\tclassName: 'llms-builder-item llms-section',\n\n\t\t/**\n\t\t * Events\n\t\t * @type {Object}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.12\n\t\t */\n\t\tevents: _.defaults( {\n\n\t\t\t'click': 'select',\n\t\t\t'click .expand': 'expand',\n\t\t\t'click .collapse': 'collapse',\n\t\t\t'click .shift-up--section': 'shift_up',\n\t\t\t'click .shift-down--section': 'shift_down',\n\t\t\t'click .new-lesson': 'add_new_lesson',\n\t\t\t'click .llms-builder-header': 'toggle',\n\t\t\t'mouseenter .llms-lessons': 'on_mouseenter',\n\n\t\t}, Editable.events, Trashable.events ),\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute\n\t\t * @return string\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-section-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-section-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.13.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.render();\n\t\t\tthis.listenTo( this.model, 'change', this.render );\n\t\t\tthis.listenTo( this.model, 'change:_expanded', this.toggle_expanded );\n\t\t\tthis.lessonListView.collection.on( 'add', this.on_lesson_add, this );\n\n\t\t\tthis.dragTimeout = null;\n\n\t\t\tBackbone.pubSub.on( 'expand-all', this.expand, this );\n\t\t\tBackbone.pubSub.on( 'collapse-all', this.collapse, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Render the section\n\t\t * Initializes a new collection and views for all lessons in the section\n\t\t * @return void\n\t\t * @since 3.13.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this.model.toJSON() ) );\n\n\t\t\tthis.maybe_hide_shiftable_buttons();\n\n\t\t\tthis.lessonListView = new LessonListView( {\n\t\t\t\tel: this.$el.find( '.llms-lessons' ),\n\t\t\t\tcollection: this.model.get( 'lessons' ),\n\t\t\t} );\n\t\t\tthis.lessonListView.render();\n\t\t\tthis.lessonListView.on( 'sortStart', this.lessonListView.sortable_start );\n\t\t\tthis.lessonListView.on( 'sortStop', this.lessonListView.sortable_stop );\n\n\t\t\t// selection changes\n\t\t\tthis.lessonListView.on( 'selectionChanged', this.active_lesson_change, this );\n\n\t\t\tthis.maybe_hide_trash_button();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd_new_lesson: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tBackbone.pubSub.trigger( 'section-select', this.model );\n\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\n\t\t},\n\n\t\tactive_lesson_change: function( current, previous ) {\n\n\t\t\tBackbone.pubSub.trigger( 'active-lesson-change', {\n\t\t\t\tcurrent: current,\n\t\t\t\tprevious: previous,\n\t\t\t} );\n\n\t\t},\n\n\t\ttoggle: function( event, update ) {\n\n\t\t\t// We only want to expand/collapse when the actual header div is clicked, not an element inside it.\n\t\t\tif ( 'llms-builder-header' !== event.target.className ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.model.get( '_expanded' ) ) {\n\t\t\t\tthis.collapse( event, update );\n\t\t\t} else {\n\t\t\t\tthis.expand( event, update );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Collapse lessons within the section\n\t\t * @param obj event js event object\n\t\t * @param bool update if true, updates the model to reflect the new state\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tcollapse: function( event, update ) {\n\n\t\t\tif ( 'undefined' === typeof update ) {\n\t\t\t\tupdate = true;\n\t\t\t}\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis.$el.removeClass( 'expanded' ).find( '.drag-expanded' ).removeClass( 'drag-expanded' );\n\t\t\tif ( update ) {\n\t\t\t\tthis.model.set( '_expanded', false );\n\t\t\t}\n\t\t\tBackbone.pubSub.trigger( 'section-toggle', this.model );\n\n\t\t},\n\n\t\t/**\n\t\t * Expand lessons within the section\n\t\t * @param obj event js event object\n\t\t * @param bool update if true, updates the model to reflect the new state\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\texpand: function( event, update ) {\n\n\t\t\tif ( 'undefined' === typeof update ) {\n\t\t\t\tupdate = true;\n\t\t\t}\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis.$el.addClass( 'expanded' );\n\t\t\tif ( update ) {\n\t\t\t\tthis.model.set( '_expanded', true );\n\t\t\t}\n\t\t\tBackbone.pubSub.trigger( 'section-toggle', this.model );\n\n\t\t},\n\n\t\tmaybe_hide_trash_button: function() {\n\n\t\t\tvar $btn = this.$el.find( '.trash--section' );\n\n\t\t\tif ( this.model.get( 'lessons' ).isEmpty() ) {\n\n\t\t\t\t$btn.show();\n\n\t\t\t} else {\n\n\t\t\t\t$btn.hide()\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * When a lesson is added to the section trigger a collection reorder & update the lesson's id\n\t\t * @param obj model Lesson model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_lesson_add: function( model ) {\n\n\t\t\tthis.lessonListView.collection.trigger( 'reorder' );\n\t\t\tmodel.set( 'parent_section', this.model.get( 'id' ) );\n\t\t\tthis.expand();\n\n\t\t},\n\n\t\ton_mouseenter: function( event ) {\n\n\n\t\t\tif ( $( event.target ).hasClass( 'dragging' ) ) {\n\n\t\t\t\t$( '.drag-expanded' ).removeClass( 'drag-expanded' );\n\t\t\t\t$( event.target ).addClass( 'drag-expanded' );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Expand\n\t\t * @param {[type]} model [description]\n\t\t * @param {[type]} value [description]\n\t\t * @return {[type]}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ttoggle_expanded: function( model, value ) {\n\n\t\t\tif ( value ) {\n\t\t\t\tthis.expand( null, false );\n\t\t\t} else {\n\t\t\t\tthis.collapse( null, false );\n\t\t\t}\n\n\t\t},\n\n\t}, Editable, Shiftable, Trashable ) );\n\n} );\n\n","/**\n * Single Section View\n *\n * @since 3.13.0\n * @version 3.16.0\n */\ndefine( 'Views/SectionList',[ 'Views/Section', 'Views/_Receivable' ], function( SectionView, Receivable ) {\n\n\treturn Backbone.CollectionView.extend( _.defaults( {\n\n\t\t/**\n\t\t * Parent element\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-sections',\n\n\t\tevents : {\n\t\t\t'mousedown > li.llms-section > .llms-builder-header .llms-headline' : '_listItem_onMousedown',\n\t\t\t// 'dblclick > li, tbody > tr > td' : '_listItem_onDoubleClick',\n\t\t\t'click' : '_listBackground_onClick',\n\t\t\t'click ul.collection-view' : '_listBackground_onClick',\n\t\t\t'keydown' : '_onKeydown'\n\t\t},\n\n\t\t/**\n\t\t * Section model\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: SectionView,\n\n\t\t/**\n\t\t * Enable keyboard events\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tprocessKeyEvents: false,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: true,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: true,\n\n\t\tsortableOptions: {\n\t\t\taxis: false,\n\t\t\tcursor: 'move',\n\t\t\thandle: '.drag-section',\n\t\t\titems: '.llms-section',\n\t\t\tplaceholder: 'llms-section llms-sortable-placeholder',\n\t\t},\n\n\t\tsortable_start: function( collection ) {\n\t\t\tthis.$el.addClass( 'dragging' );\n\t\t},\n\n\t\tsortable_stop: function( collection ) {\n\t\t\tthis.$el.removeClass( 'dragging' );\n\t\t},\n\n\t}, Receivable ) );\n\n} );\n\n","/**\n * Single Course View\n *\n * @since 3.13.0\n * @version 3.16.0\n */\ndefine( 'Views/Course',[\n\t'Views/SectionList',\n\t'Views/_Detachable',\n\t'Views/_Editable',\n\t'Views/_Shiftable',\n\t'Views/_Trashable'\n], function(\n\t SectionListView,\n\t Detachable,\n\t Editable,\n\t Shiftable,\n\t Trashable\n) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Get default attributes for the html wrapper element\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\tattributes: function() {\n\t\t\treturn {\n\t\t\t\t'data-id': this.model.id,\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * HTML element selector\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-builder-main',\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-course-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// this.listenTo( this.model, 'sync', this.render );\n\t\t\tthis.render();\n\n\t\t\tthis.sectionListView = new SectionListView( {\n\t\t\t\tcollection: this.model.get( 'sections' ),\n\t\t\t} );\n\t\t\tthis.sectionListView.render();\n\t\t\t// drag and drop start\n\t\t\tthis.sectionListView.on( 'sortStart', this.sectionListView.sortable_start );\n\t\t\t// drag and drop stop\n\t\t\tthis.sectionListView.on( 'sortStop', this.sectionListView.sortable_stop );\n\t\t\t// selection changes\n\t\t\tthis.sectionListView.on( 'selectionChanged', this.active_section_change );\n\t\t\t// \"select\" a section when it's added to the course\n\t\t\tthis.listenTo( this.model.get( 'sections' ), 'add', this.on_section_add );\n\n\t\t\tBackbone.pubSub.on( 'section-toggle', this.on_section_toggle, this );\n\n\t\t\tBackbone.pubSub.on( 'section-select', this.on_section_select, this );\n\n\t\t\tBackbone.pubSub.on( 'expand-section', this.expand_section, this );\n\n\t\t\tBackbone.pubSub.on( 'lesson-selected', this.active_lesson_change, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Events\n\t\t * @type {Object}\n\t\t * @version 7.6.0\n\t\t */\n\t\tevents: _.defaults( {\n\t\t\t'click .new-section': 'add_new_section',\n\t\t}, Detachable.events, Editable.events, Trashable.events ),\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @return self (for chaining)\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\trender: function() {\n\t\t\tthis.$el.html( this.template( this.model ) );\n\t\t\treturn this;\n\t\t},\n\n\t\tactive_lesson_change: function( model ) {\n\n\t\t\t// set parent section to be active\n\t\t\tvar section = this.model.get( 'sections' ).get( model.get( 'parent_section' ) );\n\t\t\tthis.sectionListView.setSelectedModel( section );\n\n\t\t},\n\n\t\t/**\n\t\t * When a section \"selection\" changes in the list\n\t\t * Update each section model so we can figure out which one is selected from other views\n\t\t *\n\t\t * @param array current array of selected models\n\t\t * @param array previous array of previously selected models\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tactive_section_change: function( current, previous ) {\n\n\t\t\t_.each( current, function( model ) {\n\t\t\t\tmodel.set( '_selected', true );\n\t\t\t} );\n\n\t\t\t_.each( previous, function( model ) {\n\t\t\t\tmodel.set( '_selected', false );\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * \"Selects\" the new section when it's added to the course\n\t\t *\n\t\t * @param obj model Section model that's just been added\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_section_add: function( model ) {\n\n\t\t\tthis.sectionListView.setSelectedModel( model );\n\n\t\t},\n\n\t\t/**\n\t\t * When expanding/collapsing sections\n\t\t * if collapsing, unselect, if expanding, select\n\t\t *\n\t\t * @param obj model toggled section\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_section_toggle: function( model ) {\n\n\t\t\tvar selected = model.get( '_expanded' ) ? [ model ] : [];\n\t\t\tthis.sectionListView.setSelectedModels( selected );\n\n\t\t},\n\n\n\t\t/**\n\t\t * When doing things like adding a lesson, seelct the section.\n\t\t *\n\t\t * @param obj model toggled section\n\t\t * @return void\n\t\t * @since 7.6.0\n\t\t * @version 7.6.0\n\t\t */\n\t\ton_section_select: function( model ) {\n\n\t\t\tthis.sectionListView.setSelectedModel( model );\n\n\t\t},\n\n\t\tadd_new_section: function( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'add-new-section' );\n\t\t},\n\n\n\t}, Editable ) );\n\n} );\n\n","/**\n * Model settings fields view\n *\n * @since 3.17.0\n * @version 4.7.0\n */\ndefine( 'Views/SettingsFields',[], function() {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * DOM events\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tevents: {\n\t\t\t'click .llms-settings-group-toggle': 'toggle_group',\n\t\t},\n\n\t\t/**\n\t\t * Processed fields data\n\t\t * Allows access by ID without traversing the schema\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tfields: {},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-settings-fields-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\t// initialize: function() {},\n\n\t\t/**\n\t\t * Retrieve an array of all editor fields in all groups\n\t\t *\n\t\t * @return array\n\t\t * @since 3.17.1\n\t\t * @version 3.17.1\n\t\t */\n\t\tget_editor_fields: function() {\n\t\t\treturn _.filter( this.fields, function( field ) {\n\t\t\t\treturn this.is_editor_field( field.type );\n\t\t\t}, this );\n\t\t},\n\n\t\t/**\n\t\t * Get settings group data from a model\n\t\t *\n\t\t * @return {[type]}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tget_groups: function() {\n\n\t\t\treturn this.model.get_settings_fields();\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if a settings group is hidden in localStorage\n\t\t *\n\t\t * @param string group_id id of the group\n\t\t * @return {Boolean}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tis_group_hidden: function( group_id ) {\n\n\t\t\tvar id = 'llms-' + this.model.get( 'type' ) + '-settings-group--' + group_id;\n\n\t\t\tif ( 'undefined' !== window.localStorage ) {\n\t\t\t\treturn ( 'hidden' === window.localStorage.getItem( id ) );\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t},\n\n\t\t/**\n\t\t * Get the switch attribute for a field with switches\n\t\t *\n\t\t * @param obj field field data obj\n\t\t * @return string\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tget_switch_attribute: function( field ) {\n\n\t\t\treturn field.switch_attribute ? field.switch_attribute : field.attribute;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if a field has a switch\n\t\t *\n\t\t * @param string type field type string\n\t\t * @return {Boolean}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\thas_switch: function( type ) {\n\t\t\treturn ( -1 !== type.indexOf( 'switch' ) );\n\t\t},\n\n\t\t/**\n\t\t * Determine if a field is a default (text) field\n\t\t *\n\t\t * @param string type field type string\n\t\t * @return {Boolean}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tis_default_field: function( type ) {\n\n\t\t\tvar types = [ 'audio_embed', 'datepicker', 'number', 'text', 'video_embed' ];\n\t\t\treturn ( -1 !== types.indexOf( type.replace( 'switch-', '' ) ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if a field is a WYSIWYG editor field\n\t\t *\n\t\t * @param string type field type string\n\t\t * @return {Boolean}\n\t\t * @since 3.17.1\n\t\t * @version 3.17.1\n\t\t */\n\t\tis_editor_field: function( type ) {\n\n\t\t\tvar types = [ 'editor', 'switch-editor' ];\n\t\t\treturn ( -1 !== types.indexOf( type.replace( 'switch-', '' ) ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if a switch is enabled for a field\n\t\t *\n\t\t * @param obj field field data object\n\t\t * @return {Boolean}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.6\n\t\t */\n\t\tis_switch_condition_met: function( field ) {\n\n\t\t\treturn ( field.switch_on === this.model.get( field.switch_attribute ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @return self (for chaining)\n\t\t * @since 3.17.0\n\t\t * @version 3.17.1\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this ) );\n\n\t\t\t// if editors exist, render them\n\t\t\t_.each( this.get_editor_fields(), function( field ) {\n\t\t\t\tthis.render_editor( field );\n\t\t\t}, this );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Renders an editor field\n\t\t *\n\t\t * @since 3.17.1\n\t\t * @since 3.37.11 Replace references to `wp.editor` with `_.getEditor()` helper.\n\t\t *\n\t\t * @param {Object} field Field data object.\n\t\t * @return {Void}\n\t\t */\n\t\trender_editor: function( field ) {\n\n\t\t\tvar self = this,\n\t\t\t\twpEditor = _.getEditor();\n\n\t\t\t// Exit early if there's no editor to work with.\n\t\t\tif ( undefined === wpEditor ) {\n\t\t\t\tconsole.error( 'Unable to access `wp.oldEditor` or `wp.editor`.' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twpEditor.remove( field.id );\n\t\t\tfield.settings.tinymce.setup = function( editor ) {\n\n\t\t\t\tvar $ed = $( '#' + editor.id ),\n\t\t\t\t\t$parent = $ed.closest( '.llms-editable-editor' ),\n\t\t\t\t\t$label = $parent.find( '.llms-label' ),\n\t\t\t\t\tprop = $ed.attr( 'data-attribute' )\n\n\t\t\t\tif ( $label.length ) {\n\t\t\t\t\t$label.prependTo( $parent.find( '.wp-editor-tools' ) );\n\t\t\t\t}\n\n\t\t\t\t// save changes to the model via Visual ed\n\t\t\t\teditor.on( 'change', function( event ) {\n\t\t\t\t\tself.model.set( prop, wpEditor.getContent( editor.id ) );\n\t\t\t\t} );\n\n\t\t\t\t// save changes via Text ed\n\t\t\t\t$ed.on( 'input', function( event ) {\n\t\t\t\t\tself.model.set( prop, $ed.val() );\n\t\t\t\t} );\n\n\t\t\t\t// trigger an input on the Text ed when quicktags buttons are clicked\n\t\t\t\t$parent.on( 'click', '.quicktags-toolbar .ed_button', function() {\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t$ed.trigger( 'input' );\n\t\t\t\t\t}, 10 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\twpEditor.initialize( field.id, field.settings );\n\n\t\t},\n\n\t\t/**\n\t\t * Get the HTML for a select field\n\t\t *\n\t\t * @param obj options flat or multi-dimensional options object\n\t\t * @param string attribute name of the select field's attribute\n\t\t * @return string\n\t\t * @since 3.17.0\n\t\t * @version 3.17.2\n\t\t */\n\t\trender_select_options: function( options, attribute ) {\n\n\t\t\tvar html = '',\n\t\t\t\tselected = this.model.get( attribute );\n\n\t\t\tfunction option_html( label, val ) {\n\n\t\t\t\treturn '' + label.substring( 0, 100 ) + ( label.length > 100 ? '...' : '' ) + ' ';\n\n\t\t\t}\n\n\t\t\t_.each( options, function( option, index ) {\n\n\t\t\t\t// this will be an key:val object\n\t\t\t\tif ( 'string' === typeof option ) {\n\t\t\t\t\thtml += option_html( option, index );\n\t\t\t\t\t// either option group or array of key,val objects\n\t\t\t\t} else if ( 'object' === typeof option ) {\n\t\t\t\t\t// option group\n\t\t\t\t\tif ( option.label && option.options ) {\n\t\t\t\t\t\thtml += '';\n\t\t\t\t\t\thtml += this.render_select_options( option.options, attribute );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml += option_html( option.val, option.key );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t\treturn html;\n\n\t\t},\n\n\t\t/**\n\t\t * Setup and fill fields with default data based on field type\n\t\t *\n\t\t * @since 3.17.0\n\t\t * @since 3.24.0 Unknown.\n\t\t * @since 3.37.11 Replace reference to `wp.editor` with `_.getEditor()` helper.\n\t\t * @since 4.7.0 Ensure `switch-number` fields are set with the `number` type attribute.\n\t\t *\n\t\t * @param {Object} orig_field Original field as defined in the settings.\n\t\t * @param {Integer} field_index Index of the field in the current row.\n\t\t * @return {Object}\n\t\t */\n\t\tsetup_field: function( orig_field, field_index ) {\n\n\t\t\tvar defaults = {\n\t\t\t\tclasses: [],\n\t\t\t\tid: _.uniqueId( orig_field.attribute + '_' ),\n\t\t\t\tinput_type: 'text',\n\t\t\t\tlabel: '',\n\t\t\t\toptions: {},\n\t\t\t\tplaceholder: '',\n\t\t\t\ttip: '',\n\t\t\t\ttip_position: 'top-right',\n\t\t\t\tsettings: {},\n\t\t\t};\n\n\t\t\t// check the field condition if set\n\t\t\tif ( orig_field.condition && false === _.bind( orig_field.condition, this.model )() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tswitch ( orig_field.type ) {\n\n\t\t\t\tcase 'audio_embed':\n\t\t\t\t\tdefaults.classes.push( 'llms-editable-audio' );\n\t\t\t\t\tdefaults.placeholder = 'https://';\n\t\t\t\t\tdefaults.tip = LLMS.l10n.translate( 'Use SoundCloud or Spotify audio URLS.' );\n\t\t\t\t\tdefaults.input_type = 'url';\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'datepicker':\n\t\t\t\t\tdefaults.classes.push( 'llms-editable-date' );\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'editor':\n\t\t\t\tcase 'switch-editor':\n\t\t\t\t\tvar orig_settings = orig_field.settings || {};\n\t\t\t\t\tdefaults.settings = $.extend( true, _.getEditor().getDefaultSettings(), {\n\t\t\t\t\t\tmediaButtons: true,\n\t\t\t\t\t\ttinymce: {\n\t\t\t\t\t\t\ttoolbar1: 'bold,italic,strikethrough,bullist,numlist,blockquote,hr,alignleft,aligncenter,alignright,link,unlink,wp_adv',\n\t\t\t\t\t\t\ttoolbar2: 'formatselect,underline,alignjustify,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, orig_settings );\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'switch-number':\n\t\t\t\t\tdefaults.input_type = 'number';\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'permalink':\n\t\t\t\t\tdefaults.label = LLMS.l10n.translate( 'Permalink' );\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'video_embed':\n\t\t\t\t\tdefaults.classes.push( 'llms-editable-video' );\n\t\t\t\t\tdefaults.placeholder = 'https://';\n\t\t\t\t\tdefaults.tip = LLMS.l10n.translate( 'Use YouTube, Vimeo, or Wistia video URLS.' );\n\t\t\t\t\tdefaults.input_type = 'url';\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( this.has_switch( orig_field.type ) ) {\n\t\t\t\tdefaults.switch_on = 'yes';\n\t\t\t\tdefaults.switch_off = 'no';\n\t\t\t}\n\n\t\t\tvar field = _.defaults( _.deepClone( orig_field ), defaults );\n\n\t\t\t// if options is a function run it\n\t\t\tif ( _.isFunction( field.options ) ) {\n\t\t\t\tfield.options = _.bind( field.options, this.model )();\n\t\t\t}\n\n\t\t\t// if it's a radio field options values can be submitted as images\n\t\t\t// this will transform those images into html\n\t\t\tif ( -1 !== [ 'radio', 'switch-radio' ].indexOf( orig_field.type ) ) {\n\n\t\t\t\tvar has_images = false;\n\t\t\t\t_.each( orig_field.options, function( val, key ) {\n\t\t\t\t\tif ( -1 !== val.indexOf( '.png' ) || -1 !== val.indexOf( '.jpg' ) ) {\n\t\t\t\t\t\tfield.options[key] = ' ';\n\t\t\t\t\t\thas_images = true;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( has_images ) {\n\t\t\t\t\tfield.classes.push( 'has-images' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// transform classes array to a css class string\n\t\t\tif ( field.classes.length ) {\n\t\t\t\tfield.classes = ' ' + field.classes.join( ' ' );\n\t\t\t}\n\n\t\t\tthis.fields[ field.id ] = field;\n\n\t\t\treturn field;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if toggling a switch select should rerender the view\n\t\t *\n\t\t * @param string field_type field type string\n\t\t * @return boolean\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tshould_rerender_on_toggle: function( field_type ) {\n\n\t\t\treturn ( -1 !== field_type.indexOf( 'switch-' ) ) ? 'yes' : 'no';\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for toggling visibility of settings groups\n\t\t * If localStorage is available, persist state\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\ttoggle_group: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tvar $el = $( event.currentTarget ),\n\t\t\t\t$group = $el.closest( '.llms-model-settings' );\n\n\t\t\t$group.toggleClass( 'hidden' );\n\n\t\t\tif ( 'undefined' !== window.localStorage ) {\n\n\t\t\t\tvar id = $group.attr( 'id' );\n\t\t\t\tif ( $group.hasClass( 'hidden' ) ) {\n\t\t\t\t\twindow.localStorage.setItem( id, 'hidden' );\n\t\t\t\t} else {\n\t\t\t\t\twindow.localStorage.removeItem( id );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t} ) );\n\n} );\n\n","/**\n * Lesson Editor (Sidebar) View\n *\n * @package LifterLMS/Scripts/Builder\n *\n * @since 3.17.0\n * @since 3.35.2 Added filter `llms_lesson_rerender_change_events` to view re-render change events.\n * @version 3.35.2\n */\ndefine( 'Views/LessonEditor',[\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Trashable',\n\t\t'Views/_Subview',\n\t\t'Views/SettingsFields'\n\t], function(\n\t\tDetachable,\n\t\tEditable,\n\t\tTrashable,\n\t\tSubview,\n\t\tSettingsFields\n\t) {\n\n\t\treturn Backbone.View.extend( _.defaults( {\n\n\t\t\t/**\n\t\t\t * Current view state\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tstate: 'default',\n\n\t\t\t/**\n\t\t\t * Current Subviews\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tviews: {\n\t\t\t\tsettings: {\n\t\t\t\t\tclass: SettingsFields,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'default',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tel: '#llms-editor-lesson',\n\n\t\t\t/**\n\t\t\t * Events\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tevents: _.defaults( {}, Detachable.events, Editable.events, Trashable.events ),\n\n\t\t\t/**\n\t\t\t * Template function\n\t\t\t *\n\t\t\t * @type {[type]}\n\t\t\t */\n\t\t\ttemplate: wp.template( 'llms-lesson-settings-template' ),\n\n\t\t\t/**\n\t\t\t * Init\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.24.0 Unknown\n\t\t\t * @since 3.35.2 Added filter to change events.\n\t\t\t *\n\t\t\t * @param {obj} data Parent template data.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tinitialize: function( data ) {\n\n\t\t\t\tthis.model = data.lesson;\n\n\t\t\t\tvar change_events = window.llms.hooks.applyFilters( 'llms_lesson_rerender_change_events', [\n\t\t\t\t\t'change:date_available',\n\t\t\t\t\t'change:drip_method',\n\t\t\t\t\t'change:time_available',\n\t\t\t\t] );\n\t\t\t\t_.each( change_events, function( event ) {\n\t\t\t\t\tthis.listenTo( this.model, event, this.render );\n\t\t\t\t}, this );\n\n\t\t\t\t// render only the tooltip for points percentage when points change\n\t\t\t\tthis.listenTo( this.model, 'change:points', this.render_points_percentage );\n\n\t\t\t\t// when the \"has_prerequisite\" attr is toggled ON\n\t\t\t\t// trigger the prereq select object to set the default (first available) prereq for the lesson\n\t\t\t\tthis.listenTo( this.model, 'change:has_prerequisite', function( lesson, val ) {\n\t\t\t\t\tif ( 'yes' === val ) {\n\t\t\t\t\t\tthis.$el.find( 'select[name=\"prerequisite\"]' ).trigger( 'change' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Render the view\n\t\t\t *\n\t\t\t * @return obj\n\t\t\t * @since 3.17.0\n\t\t\t * @version 3.24.0\n\t\t\t */\n\t\t\trender: function() {\n\n\t\t\t\tthis.$el.html( this.template( this.model ) );\n\n\t\t\t\tthis.remove_subview( 'settings' );\n\n\t\t\t\tthis.render_subview( 'settings', {\n\t\t\t\t\tel: '#llms-lesson-settings-fields',\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t} );\n\n\t\t\t\tthis.init_datepickers();\n\t\t\t\tthis.init_selects();\n\n\t\t\t\tthis.render_points_percentage();\n\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Render the portion of the template which displays the points percentage\n\t\t\t *\n\t\t\t * @return void\n\t\t\t * @since 3.24.0\n\t\t\t * @version 3.24.0\n\t\t\t */\n\t\t\trender_points_percentage: function() {\n\t\t\t\tthis.$el.find( '#llms-model-settings-field--points .llms-editable-input' )\n\t\t\t\t.addClass( 'tip--top-left' )\n\t\t\t\t.attr( 'data-tip', this.model.get_points_percentage() );\n\t\t\t}\n\n\t\t}, Detachable, Editable, Trashable, Subview, SettingsFields ) );\n\n} );\n\n","/**\n * Popover View\n *\n * @since 3.16.0\n * @version 4.0.0\n */\ndefine( 'Views/Popover',[], function() {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * Default Properties\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tdefaults: {\n\t\t\tplacement: 'auto',\n\t\t\t// container: document.body,\n\t\t\twidth: 'auto',\n\t\t\ttrigger: 'manual',\n\t\t\tstyle: 'light',\n\t\t\tanimation: 'pop',\n\t\t\ttitle: '',\n\t\t\tcontent: '',\n\t\t\tcloseable: false,\n\t\t\tbackdrop: false,\n\t\t\tonShow: function( $el ) {},\n\t\t\tonHide: function( $el ) {},\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @since 3.14.1\n\t\t * @since 4.0.0 Add RTL support for popovers.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\tif ( this.$el.length ) {\n\t\t\t\tthis.defaults.container = this.$el.parent();\n\t\t\t}\n\n\t\t\tthis.args = _.defaults( data.args, this.defaults );\n\n\t\t\t// Reverse directions for RTL sites.\n\t\t\tif ( $( 'body' ).hasClass( 'rtl' ) ) {\n\n\t\t\t\tif ( -1 !== this.args.placement.indexOf( 'left' ) ) {\n\t\t\t\t\tthis.args.placement = this.args.placement.replace( 'left', 'right' );\n\t\t\t\t} else if ( -1 !== this.args.placement.indexOf( 'right' ) ) {\n\t\t\t\t\tthis.args.placement = this.args.placement.replace( 'right', 'left' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.render();\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Object} Instance of the Backbone.view.\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.webuiPopover( this.args );\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Hide the popover\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.12 Unknown.\n\t\t *\n\t\t * @return {Object} Instance of the Backbone.view.\n\t\t */\n\t\thide: function() {\n\n\t\t\tthis.$el.webuiPopover( 'hide' );\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Show the popover\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.12 Unknown.\n\t\t *\n\t\t * @return {Object} Instance of the Backbone.view.\n\t\t */\n\t\tshow: function() {\n\n\t\t\tthis.$el.webuiPopover( 'show' );\n\t\t\treturn this;\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Post Popover Search content View\n *\n * @since 3.16.0\n * @version 4.4.0\n */\ndefine( 'Views/PostSearch',[], function() {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * DOM Events\n\t\t *\n\t\t * @type obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tevents: {\n\t\t\t'select2:select': 'add_post',\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'select',\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @param obj data customize the search box with data\n\t\t * @return void\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\tthis.post_type = data.post_type;\n\t\t\tthis.searching_message = data.searching_message || LLMS.l10n.translate( 'Searching...' );\n\n\t\t},\n\n\t\t/**\n\t\t * Select event, adds the existing lesson to the course\n\t\t *\n\t\t * @param obj event select2:select event object\n\t\t * @since 3.16.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tadd_post: function( event ) {\n\n\t\t\tvar type = this.$el.attr( 'data-post-type' );\n\n\t\t\tBackbone.pubSub.trigger( type.replace( 'llms_', '' ) + '-search-select', event.params.data, event );\n\t\t\tthis.$el.val( null ).trigger( 'change' );\n\n\t\t},\n\n\t\t/**\n\t\t * Render the section\n\t\t *\n\t\t * Initializes a new collection and views for all lessons in the section.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.12 Unknown.\n\t\t * @since 4.4.0 Update ajax nonce source.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\trender: function() {\n\t\t\tvar self = this;\n\t\t\tsetTimeout( function () {\n\t\t\t\tself.$el.llmsSelect2( {\n\t\t\t\t\tajax: {\n\t\t\t\t\t\tdataType: 'JSON',\n\t\t\t\t\t\tdelay: 250,\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: window.ajaxurl,\n\t\t\t\t\t\tdata: function( params ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\taction: 'llms_builder',\n\t\t\t\t\t\t\t\taction_type: 'search',\n\t\t\t\t\t\t\t\tcourse_id: window.llms_builder.course.id,\n\t\t\t\t\t\t\t\tpost_type: self.post_type,\n\t\t\t\t\t\t\t\tterm: params.term,\n\t\t\t\t\t\t\t\tpage: params.page,\n\t\t\t\t\t\t\t\t_ajax_nonce: window.llms.ajax_nonce,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tdropdownParent: $( '.wrap.lifterlms.llms-builder' ),\n\t\t\t\t\t// Don't escape html from render_result.\n\t\t\t\t\tescapeMarkup: function( markup ) {\n\t\t\t\t\t\treturn markup;\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder: self.searching_message,\n\t\t\t\t\ttemplateResult: self.render_result,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} );\n\t\t\t\tself.$el.attr( 'data-post-type', self.post_type );\n\t\t\t}, 0 );\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Render a nicer UI for each search result in the in the Select2 search results\n\t\t *\n\t\t * @param object res result data\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.12\n\t\t */\n\t\trender_result: function( res ) {\n\n\t\t\tvar $html = $( '
' );\n\n\t\t\tif ( res.loading ) {\n\t\t\t\treturn $html.append( res.text );\n\t\t\t}\n\n\t\t\tvar $side = $( '' ),\n\t\t\t\t$main = $( '
' );\n\t\t\t\ticon = ( 'attach' === res.action ) ? 'paperclip' : 'clone',\n\t\t\t\ttext = ( 'attach' === res.action ) ? LLMS.l10n.translate( 'Attach' ) : LLMS.l10n.translate( 'Clone' );\n\n\t\t\t$side.append( '' + text + ' ' );\n\n\t\t\t$main.append( '' + res.data.title + ' ' );\n\t\t\t$main.append( '' + LLMS.l10n.translate( 'ID' ) + ': ' + res.data.id + ' ' );\n\n\t\t\t_.each( res.parents, function( parent ) {\n\t\t\t\t$main.append( '' + parent + ' ' );\n\t\t\t} );\n\n\t\t\treturn $html.append( $side ).append( $main );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Question Type View\n *\n * @since 3.16.0\n * @since 3.30.1 Fixed issue causing multiple binds for add_existing_question events.\n * @version 5.4.0\n */\ndefine( 'Views/QuestionType',[ 'Views/Popover', 'Views/PostSearch' ], function( Popover, QuestionSearch ) {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * HTML class names.\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tclassName: 'llms-question-type',\n\n\t\tevents: {\n\t\t\t'click .llms-add-question': 'add_question',\n\t\t},\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {String}\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-question-type-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name.\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template.\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-question-type-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen).\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.render();\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Self} For chaining.\n\t\t */\n\t\trender: function() {\n\t\t\tthis.$el.html( this.template( this.model ) );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Add a question of the selected type to the current quiz.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.27.0 Unknown.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tadd_question: function() {\n\n\t\t\tif ( 'existing' === this.model.get( 'id' ) ) {\n\t\t\t\tthis.add_existing_question_click();\n\t\t\t} else {\n\t\t\t\tthis.add_new_question();\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new question to the quiz.\n\t\t *\n\t\t * @since 3.27.0\n\t\t * @since 3.30.1 Fixed issue causing multiple binds.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_question_click: function() {\n\n\t\t\tvar pop = new Popover( {\n\t\t\t\tel: '#llms-add-question--existing',\n\t\t\t\targs: {\n\t\t\t\t\tbackdrop: true,\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontainer: '#llms-builder-sidebar',\n\t\t\t\t\tdismissible: true,\n\t\t\t\t\tplacement: 'top-left',\n\t\t\t\t\twidth: 'calc( 100% - 40px )',\n\t\t\t\t\toffsetLeft: 250,\n\t\t\t\t\toffsetTop: 60,\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add Existing Question' ),\n\t\t\t\t\tcontent: new QuestionSearch( {\n\t\t\t\t\t\tpost_type: 'llms_question',\n\t\t\t\t\t\tsearching_message: LLMS.l10n.translate( 'Search for existing questions...' ),\n\t\t\t\t\t} ).render().$el,\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tpop.show();\n\t\t\tBackbone.pubSub.on( 'question-search-select', this.add_existing_question, this );\n\t\t\tBackbone.pubSub.on( 'question-search-select', function( event ) {\n\t\t\t\tpop.hide();\n\t\t\t\tBackbone.pubSub.off( 'question-search-select', this.add_existing_question, this );\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Callback event fired when a question is selected from the Add Existing Question popover interface.\n\t\t *\n\t\t * @since 3.27.0\n\t\t * @since 5.4.0 Use author id instead of the question author object.\n\t\t *\n\t\t * @param {Object} event JS event object.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_question: function( event ) {\n\n\t\t\tvar question = event.data;\n\n\t\t\tif ( 'clone' === event.action ) {\n\t\t\t\tquestion = _.prepareQuestionObjectForCloning( question );\n\t\t\t} else {\n\t\t\t\t// Use author id instead of the question author object.\n\t\t\t\tquestion = _.prepareExistingPostObjectDataForAddingOrCloning( question );\n\t\t\t\tquestion._forceSync = true;\n\t\t\t}\n\n\t\t\tquestion._expanded = true;\n\t\t\tthis.quiz.add_question( question );\n\n\t\t\tthis.quiz.trigger( 'new-question-added' );\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new question to the quiz.\n\t\t *\n\t\t * @since 3.27.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tadd_new_question: function() {\n\n\t\t\tthis.quiz.add_question( {\n\t\t\t\t_expanded: true,\n\t\t\t\tchoices: this.model.get( 'default_choices' ) ? this.model.get( 'default_choices' ) : null,\n\t\t\t\tquestion_type: this.model,\n\t\t\t} );\n\n\t\t\tthis.quiz.trigger( 'new-question-added' );\n\n\t\t},\n\n\t\t// filter: function( term ) {\n\n\t\t// var words = this.model.get_keywords().map( function( word ) {\n\t\t// return word.toLowerCase();\n\t\t// } );\n\n\t\t// term = term.toLowerCase();\n\n\t\t// if ( -1 === words.indexOf( term ) ) {\n\t\t// this.$el.addClass( 'filtered' );\n\t\t// } else {\n\t\t// this.$el.removeClass( 'filtered' );\n\t\t// }\n\n\t\t// },\n\n\t\t// clear_filter: function() {\n\t\t// this.$el.removeClass( 'filtered' );\n\t\t// }\n\n\t} );\n\n} );\n\n","/**\n * Quiz question bank view\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/QuestionBank',[ 'Views/QuestionType' ], function( QuestionView ) {\n\n\treturn Backbone.CollectionView.extend( {\n\n\t\tclassName: 'llms-question',\n\n\t\t/**\n\t\t * Parent element\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-question-bank',\n\n\t\t/**\n\t\t * Section model\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: QuestionView,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: false,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: false,\n\n\t} );\n\n} );\n\n","/**\n * Single Question Choice View\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/QuestionChoice',[ 'Views/_Editable', ], function( Editable ) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * HTML class names\n\t\t * @type {String}\n\t\t */\n\t\tclassName: 'llms-question-choice',\n\n\t\tevents: _.defaults( {\n\t\t\t'change input[name=\"correct\"]': 'toggle_correct',\n\t\t\t'click .llms-action-icon[href=\"#llms-add-choice\"]': 'add_choice',\n\t\t\t'click .llms-action-icon[href=\"#llms-del-choice\"]': 'del_choice',\n\t\t}, Editable.events ),\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-question-choice-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-question-choice-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.14.1\n\t\t * @version 3.14.1\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.render();\n\n\t\t\tthis.listenTo( this.model.collection, 'add', this.maybe_disable_buttons );\n\t\t\tthis.listenTo( this.model, 'change', this.render );\n\n\t\t\tif ( 'image' === this.model.get( 'choice_type' ) ) {\n\t\t\t\tthis.listenTo( this.model.get( 'choice' ), 'change', this.render );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\t\t\tthis.$el.html( this.template( this.model ) );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Add a new choice to the current choice list\n\t\t * Adds *after* the clicked choice\n\t\t * @param obj event JS event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tadd_choice: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\tvar index = this.model.collection.indexOf( this.model );\n\t\t\tthis.model.collection.parent.add_choice( {}, {\n\t\t\t\tat: index + 1,\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Delete the choice from the choice list & ensure there's at least one correct choice\n\t\t * @param obj event js event obj\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tdel_choice: function( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'model-trashed', this.model );\n\t\t\tthis.model.collection.remove( this.model );\n\n\t\t},\n\n\t\t/**\n\t\t * When the correct answer input changes sync status to model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ttoggle_correct: function() {\n\n\t\t\tvar correct = this.$el.find( 'input[name=\"correct\"]' ).is( ':checked' );\n\t\t\tthis.model.set( 'correct', correct );\n\t\t\tthis.model.collection.trigger( 'correct-update', this.model );\n\n\t\t},\n\n\t}, Editable ) );\n\n} );\n\n","/**\n * Quiz question bank view\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/QuestionChoiceList',[ 'Views/QuestionChoice' ], function( ChoiceView ) {\n\n\treturn Backbone.CollectionView.extend( {\n\n\t\tclassName: 'llms-quiz-questions',\n\n\t\t/**\n\t\t * Choice model view\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: ChoiceView,\n\n\t\t/**\n\t\t * Enable keyboard events\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tprocessKeyEvents: false,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: false,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: true,\n\n\t\tsortableOptions: {\n\t\t\taxis: false,\n\t\t\t// connectWith: '.llms-lessons',\n\t\t\tcursor: 'move',\n\t\t\thandle: '.llms-choice-id',\n\t\t\titems: '.llms-question-choice',\n\t\t\tplaceholder: 'llms-question-choice llms-sortable-placeholder',\n\t\t},\n\n\t\tsortable_start: function( model ) {\n\t\t\tthis.$el.addClass( 'dragging' );\n\t\t},\n\n\t\tsortable_stop: function( model ) {\n\t\t\tthis.$el.removeClass( 'dragging' );\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Single Question View\n * @since 3.16.0\n * @version 3.27.0\n */\ndefine( 'Views/Question',[\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/QuestionChoiceList'\n\t], function(\n\t\tDetachable,\n\t\tEditable,\n\t\tChoiceListView\n\t) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Generate CSS classes for the question\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tclassName: function() {\n\t\t\treturn 'llms-question qtype--' + this.model.get( 'question_type' ).get( 'id' );\n\t\t},\n\n\t\tevents: _.defaults( {\n\t\t\t'click .clone--question': 'clone',\n\t\t\t'click .delete--question': 'delete',\n\t\t\t'click .expand--question': 'expand',\n\t\t\t'click .collapse--question': 'collapse',\n\t\t\t'change input[name=\"question_points\"]': 'update_points',\n\t\t}, Detachable.events, Editable.events ),\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-question-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-question-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tvar change_events = [\n\t\t\t\t'change:_expanded',\n\t\t\t\t'change:menu_order',\n\t\t\t];\n\t\t\t_.each( change_events, function( event ) {\n\t\t\t\tthis.listenTo( this.model, event, this.render );\n\t\t\t}, this );\n\n\t\t\tthis.listenTo( this.model.get( 'image' ), 'change', this.render );\n\n\t\t\tthis.listenTo( this.model.get_parent(), 'change:_points', this.render_points_percentage );\n\n\t\t\tthis.on( 'multi_choices_toggle', this.multi_choices_toggle, this );\n\n\t\t\tBackbone.pubSub.on( 'del-question-choice', this.del_choice, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this.model ) );\n\n\t\t\tif ( this.model.get( 'question_type').get( 'choices' ) ) {\n\n\t\t\t\tthis.choiceListView = new ChoiceListView( {\n\t\t\t\t\tel: this.$el.find( '.llms-question-choices' ),\n\t\t\t\t\tcollection: this.model.get( 'choices' ),\n\t\t\t\t} );\n\t\t\t\tthis.choiceListView.render();\n\t\t\t\tthis.choiceListView.on( 'sortStart', this.choiceListView.sortable_start );\n\t\t\t\tthis.choiceListView.on( 'sortStop', this.choiceListView.sortable_stop );\n\n\t\t\t}\n\n\t\t\tif ( 'group' === this.model.get( 'question_type' ).get( 'id' ) ) {\n\n\t\t\t\tvar self = this;\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.questionListView = self.collectionListView.quiz.get_question_list( {\n\t\t\t\t\t\tel: self.$el.find( '.llms-quiz-questions' ),\n\t\t\t\t\t\tcollection: self.model.get( 'questions' ),\n\t\t\t\t\t} );\n\t\t\t\t\tself.questionListView.render();\n\t\t\t\t\tself.questionListView.on( 'sortStart', self.questionListView.sortable_start );\n\t\t\t\t\tself.questionListView.on( 'sortStop', self.questionListView.sortable_stop );\n\t\t\t\t}, 1 );\n\n\t\t\t}\n\n\t\t\tif ( this.model.get( 'description_enabled' ) ) {\n\t\t\t\tthis.init_editor( 'question-desc--' + this.model.get( 'id' ) );\n\t\t\t}\n\n\t\t\tif ( this.model.get( 'clarifications_enabled' ) ) {\n\t\t\t\tthis.init_editor( 'question-clarifications--' + this.model.get( 'id' ), {\n\t\t\t\t\tmediaButtons: false,\n\t\t\t\t\ttinymce: {\n\t\t\t\t\t\ttoolbar1: 'bold,italic,strikethrough,bullist,numlist,alignleft,aligncenter,alignright',\n\t\t\t\t\t\ttoolbar2: '',\n\t\t\t\t\t\tsetup: _.bind( this.on_editor_ready, this ),\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tthis.init_formatting_els();\n\t\t\tthis.init_selects();\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * rerender points percentage when question points are updated\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender_points_percentage: function() {\n\n\t\t\tthis.$el.find( '.llms-question-points' ).attr( 'data-tip', this.model.get_points_percentage() );\n\n\t\t},\n\n\t\t/**\n\t\t * Click event to duplicate a question within a quiz\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tclone: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tthis.model.collection.add( this._get_question_clone( this.model ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Recursive clone function which will correctly clone children of a question\n\t\t * @param obj question question model\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_get_question_clone: function( question ) {\n\n\t\t\t// create a duplicate\n\t\t\tvar clone = _.clone( question.attributes );\n\n\t\t\t// remove id (we want the duplicate to have a temp id)\n\t\t\tdelete clone.id;\n\n\t\t\tclone.parent_id = question.get( 'id' );\n\n\t\t\t// set the question type ID\n\t\t\tclone.question_type = question.get( 'question_type' ).get( 'id' );\n\n\t\t\t// clone the image attributes separately\n\t\t\tclone.image = _.clone( question.get( 'image' ).attributes );\n\n\t\t\t// if it has choices clone all the choices\n\t\t\tif ( question.get( 'choices' ) ) {\n\n\t\t\t\tclone.choices = [];\n\n\t\t\t\tquestion.get( 'choices' ).each( function ( choice ) {\n\n\t\t\t\t\tvar choice_clone = _.clone( choice.attributes );\n\t\t\t\t\tdelete choice_clone.id;\n\t\t\t\t\tdelete choice_clone.question_id;\n\n\t\t\t\t\tclone.choices.push( choice_clone );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( 'group' === question.get( 'question_type' ).get( 'id' ) ) {\n\n\t\t\t\tclone.questions = [];\n\t\t\t\tquestion.get( 'questions' ).each( function( child ) {\n\t\t\t\t\tclone.questions.push( this._get_question_clone( child ) );\n\t\t\t\t}, this );\n\n\t\t\t}\n\n\t\t\treturn clone;\n\n\t\t},\n\n\t\t/**\n\t\t * Collapse a question and hide it's settings\n\t\t * @param obj event js event obj.\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tcollapse: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis.model.set( '_expanded', false );\n\n\t\t},\n\n\t\t/**\n\t\t * Delete the question from a quiz / question group\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tdelete: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( window.confirm( LLMS.l10n.translate( 'Are you sure you want to delete this question?' ) ) ) {\n\n\t\t\t\tthis.model.collection.remove( this.model );\n\t\t\t\tBackbone.pubSub.trigger( 'model-trashed', this.model );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Click event to reveal a question's settings & choices\n\t\t * @param obj event js event obj.\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.27.0\n\t\t */\n\t\texpand: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis.model.set( '_expanded', true );\n\n\t\t},\n\n\t\t/**\n\t\t * When toggling multiple correct answers *off* remove all correct choices except the first correct choice in the list\n\t\t * @param string val value of the question's `multi_choice` attr [yes|no]\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tmulti_choices_toggle: function( val ) {\n\n\t\t\tif ( 'yes' === val ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.model.get( 'choices' ).update_correct( _.first( this.model.get( 'choices' ).get_correct() ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Update the model's points when the value of the points input is updated\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_points: function() {\n\n\t\t\tthis.model.set( 'points', this.$el.find( 'input[name=\"question_points\"]' ).val() * 1 );\n\n\t\t}\n\n\t}, Detachable, Editable ) );\n\n} );\n\n","/**\n * Quiz question bank view\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/QuestionList',[ 'Views/Question' ], function( QuestionView ) {\n\n\treturn Backbone.CollectionView.extend( {\n\n\t\tclassName: 'llms-quiz-questions',\n\n\t\t/**\n\t\t * Parent element\n\t\t * @type {String}\n\t\t */\n\t\t// el: '#llms-quiz-questions',\n\n\t\t/**\n\t\t * Section model\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: QuestionView,\n\n\t\t/**\n\t\t * Enable keyboard events\n\t\t * @type {Bool}\n\t\t */\n\t\tprocessKeyEvents: false,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: false,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: true,\n\n\t\tsortableOptions: {\n\t\t\taxis: false,\n\t\t\tconnectWith: '.llms-quiz-questions',\n\t\t\tcursor: 'move',\n\t\t\thandle: '.llms-data-stamp',\n\t\t\titems: '.llms-question',\n\t\t\tplaceholder: 'llms-question llms-sortable-placeholder',\n\t\t},\n\n\t\t/**\n\t\t * Highlight drop areas when dragging starts\n\t\t * @param obj model model being sorted\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tsortable_start: function( model ) {\n\t\t\tvar selector = 'group' === model.get( 'question_type' ).get( 'id' ) ? '.llms-editor-tab > .llms-quiz-questions' : '.llms-quiz-questions';\n\t\t\t$( selector ).addClass( 'dragging' );\n\t\t},\n\n\t\t/**\n\t\t * Remove highlights when dragging stops\n\t\t * @param obj model model being sorted\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tsortable_stop: function() {\n\t\t\t$( '.llms-quiz-questions' ).removeClass( 'dragging' );\n\t\t},\n\n\t\t/**\n\t\t * Overrides receive to ensure that question groups can't be moved into question groups\n\t\t * @param obj event js event object\n\t\t * @param obj ui jQuery UI Sortable ui object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_receive : function( event, ui ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\t// prevent moving a question group into a question group\n\t\t\tif ( ui.item.hasClass( 'qtype--group' ) && $( event.target ).closest( '.qtype--group' ).length ) {;\n\t\t\t\tui.sender.sortable( 'cancel' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar senderListEl = ui.sender;\n\t\t\tvar senderCollectionListView = senderListEl.data( \"view\" );\n\t\t\tif( ! senderCollectionListView || ! senderCollectionListView.collection ) return;\n\n\t\t\tvar newIndex = this._getContainerEl().children().index( ui.item );\n\t\t\tvar modelReceived = senderCollectionListView.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\t\t\tsenderCollectionListView.collection.remove( modelReceived );\n\t\t\tthis.collection.add( modelReceived, { at : newIndex } );\n\t\t\tmodelReceived.collection = this.collection; // otherwise will not get properly set, since modelReceived.collection might already have a value.\n\t\t\tthis.setSelectedModel( modelReceived );\n\t\t},\n\n\t\t/**\n\t\t * Override to allow manipulation of placeholder element\n\t\t * @param {[type]} event [description]\n\t\t * @param {[type]} ui [description]\n\t\t * @return {[type]}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_sortStart : function( event, ui ) {\n\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\n\t\t\tui.placeholder.addClass( 'qtype--' + modelBeingSorted.get( 'question_type' ).get( 'id' ) );\n\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"sortStart\", { modelBeingSorted : modelBeingSorted } );\n\t\t\telse this.trigger( \"sortStart\", modelBeingSorted );\n\t\t},\n\n\t\t/**\n\t\t * Overloads the function from Backbone.CollectionView core because it doesn't send stop events\n\t\t * if moving from one sortable to another... :-(\n\t\t * @param obj event js event object\n\t\t * @param obj ui jQuery UI object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_sortStop : function( event, ui ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( 'data-model-cid' ) ),\n\t\t\t\tmodelViewContainerEl = this._getContainerEl(),\n\t\t\t\tnewIndex = modelViewContainerEl.children().index( ui.item );\n\n\t\t\tif ( newIndex == -1 && modelBeingSorted ) {\n\t\t\t\tthis.collection.remove( modelBeingSorted );\n\t\t\t}\n\n\t\t\tthis._reorderCollectionBasedOnHTML();\n\t\t\tthis.updateDependentControls();\n\n\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\tthis.spawn( 'sortStop', { modelBeingSorted : modelBeingSorted, newIndex : newIndex } );\n\t\t\t} else {\n\t\t\t\tthis.trigger( 'sortStop', modelBeingSorted, newIndex );\n\t\t\t}\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Single Quiz View.\n *\n * @since 3.16.0\n * @version 5.4.0\n */\ndefine( 'Views/Quiz',[\n\t\t'Models/Quiz',\n\t\t'Views/Popover',\n\t\t'Views/PostSearch',\n\t\t'Views/QuestionBank',\n\t\t'Views/QuestionList',\n\t\t'Views/SettingsFields',\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Subview',\n\t\t'Views/_Trashable'\n\t], function(\n\t\tQuizModel,\n\t\tPopover,\n\t\tPostSearch,\n\t\tQuestionBank,\n\t\tQuestionList,\n\t\tSettingsFields,\n\t\tDetachable,\n\t\tEditable,\n\t\tSubview,\n\t\tTrashable\n\t) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Current view state.\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tstate: 'default',\n\n\t\t/**\n\t\t * Current Subviews.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tviews: {\n\t\t\tsettings: {\n\t\t\t\tclass: SettingsFields,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'default',\n\t\t\t},\n\t\t\tbank: {\n\t\t\t\tclass: QuestionBank,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'default',\n\t\t\t},\n\t\t\tlist: {\n\t\t\t\tclass: QuestionList,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'default',\n\t\t\t},\n\t\t},\n\n\t\tel: '#llms-editor-quiz',\n\n\t\t/**\n\t\t * Events.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tevents: _.defaults( {\n\t\t\t'click #llms-existing-quiz': 'add_existing_quiz_click',\n\t\t\t'click #llms-new-quiz': 'add_new_quiz',\n\t\t\t'click #llms-show-question-bank': 'show_tools',\n\t\t\t'click .bulk-toggle': 'bulk_toggle',\n\t\t\t// 'keyup #llms-question-bank-filter': 'filter_question_types',\n\t\t\t// 'search #llms-question-bank-filter': 'filter_question_types',\n\t\t}, Detachable.events, Editable.events, Trashable.events ),\n\n\t\t/**\n\t\t * Wrapper Tag name.\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-quiz-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen).\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.19.2 Unknown.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\tthis.lesson = data.lesson;\n\n\t\t\t// Initialize the model if the quiz is enabled or it's disabled but we still have data for a quiz.\n\t\t\tif ( 'yes' === this.lesson.get( 'quiz_enabled' ) || ! _.isEmpty( this.lesson.get( 'quiz' ) ) ) {\n\n\t\t\t\tthis.model = this.lesson.get( 'quiz' );\n\n\t\t\t\t/**\n\t\t\t\t * @todo this is a terrible terrible patch\n\t\t\t\t * I've spent nearly 3 days trying to figure out how to not use this line of code\n\t\t\t\t * ISSUE REPRODUCTION:\n\t\t\t\t * Open course builder\n\t\t\t\t * Open a lesson (A) and add a quiz\n\t\t\t\t * Switch to a new lesson (B)\n\t\t\t\t * Add a new quiz\n\t\t\t\t * Return to lesson A and the quizzes parent will be set to LESSON B\n\t\t\t\t * This will happen for *every* quiz in the builder...\n\t\t\t\t * Adding this set_parent on init guarantees that the quizzes correct parent is set\n\t\t\t\t * after adding new quizzes to other lessons\n\t\t\t\t * it's awful and it's gross...\n\t\t\t\t * I'm confused and tired and going to miss release dates again because of it\n\t\t\t\t */\n\t\t\t\tthis.model.set_parent( this.lesson );\n\n\t\t\t\tthis.listenTo( this.model, 'change:_points', this.render_points );\n\n\t\t\t}\n\n\t\t\tthis.on( 'model-trashed', this.on_trashed );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.19.2 Unknown.\n\t\t *\n\t\t * @return {Self} For chaining.\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this.model ) );\n\n\t\t\t// Render the quiz builder.\n\t\t\tif ( this.model ) {\n\n\t\t\t\t// Don't allow interaction until questions are lazy loaded.\n\t\t\t\tLLMS.Spinner.start( this.$el );\n\n\t\t\t\tthis.render_subview( 'settings', {\n\t\t\t\t\tel: '#llms-quiz-settings-fields',\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t} );\n\n\t\t\t\tthis.init_datepickers();\n\t\t\t\tthis.init_selects();\n\n\t\t\t\tthis.render_subview( 'bank', {\n\t\t\t\t\tcollection: window.llms_builder.questions,\n\t\t\t\t} );\n\n\t\t\t\tvar last_group = null,\n\t\t\t\t\tgroup = null;\n\t\t\t\t// Let all the question types reference the quiz for adding questions quickly.\n\t\t\t\tthis.get_subview( 'bank' ).instance.viewManager.each( function( view ) {\n\n\t\t\t\t\tview.quiz = this.model;\n\n\t\t\t\t\tgroup = view.model.get( 'group' ).name;\n\n\t\t\t\t\tif ( last_group !== group ) {\n\t\t\t\t\t\tlast_group = group;\n\t\t\t\t\t\tview.$el.before( '' );\n\t\t\t\t\t}\n\n\t\t\t\t}, this );\n\n\t\t\t\tthis.model.load_questions( _.bind( function( err ) {\n\n\t\t\t\t\tif ( err ) {\n\t\t\t\t\t\talert( LLMS.l10n.translate( 'An error occurred while trying to load the questions. Please refresh the page and try again.' ) );\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\tLLMS.Spinner.stop( this.$el );\n\t\t\t\t\tthis.render_subview( 'list', {\n\t\t\t\t\t\tel: '#llms-quiz-questions',\n\t\t\t\t\t\tcollection: this.model.get( 'questions' ),\n\t\t\t\t\t} );\n\t\t\t\t\tvar list = this.get_subview( 'list' ).instance;\n\t\t\t\t\tlist.quiz = this;\n\t\t\t\t\tlist.collection.on( 'add', function() {\n\t\t\t\t\t\tlist.collection.trigger( 'reorder' );\n\t\t\t\t\t}, this );\n\t\t\t\t\tlist.on( 'sortStart', list.sortable_start );\n\t\t\t\t\tlist.on( 'sortStop', list.sortable_stop );\n\n\t\t\t\t}, this ) );\n\n\t\t\t\tthis.model.on( 'new-question-added', function() {\n\t\t\t\t\tvar $questions = this.$el.find( '#llms-quiz-questions' );\n\t\t\t\t\t$questions.animate( { scrollTop: $questions.prop( 'scrollHeight' ) }, 200 );\n\t\t\t\t}, this );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * On quiz points update, update the value of the Total Points area in the header.\n\t\t *\n\t\t * @since 3.17.6\n\t\t *\n\t\t * @param {Object} quiz Instance of the quiz model.\n\t\t * @param {Int} points Updated number of points.\n\t\t * @return {Void}\n\t\t */\n\t\trender_points: function( quiz, points ) {\n\n\t\t\tthis.$el.find( '#llms-quiz-total-points' ).text( points );\n\n\t\t},\n\n\t\t/**\n\t\t * Bulk expand / collapse question buttons.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @param {Object} Event JS event object.\n\t\t * @return {Void}\n\t\t */\n\t\tbulk_toggle: function( event ) {\n\n\t\t\tvar expanded = ( 'expand' === $( event.target ).attr( 'data-action' ) );\n\n\t\t\tthis.model.get( 'questions' ).each( function( question ) {\n\t\t\t\tquestion.set( '_expanded', expanded );\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Adds a new quiz to a lesson which currently has no quiz associated with it.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tadd_new_quiz: function() {\n\n\t\t\tvar quiz = this.lesson.get( 'quiz' );\n\t\t\tif ( _.isEmpty( quiz ) ) {\n\t\t\t\tquiz = this.lesson.add_quiz();\n\t\t\t} else {\n\t\t\t\tthis.lesson.set( 'quiz_enabled', 'yes' );\n\t\t\t}\n\n\t\t\tthis.model = quiz;\n\t\t\tthis.render();\n\n\t\t},\n\n\n\t\t/**\n\t\t * Add an existing quiz to a lesson.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.24.0 Unknown.\n\t\t * @since 5.4.0 Use author id instead of the quiz author object.\n\t\t *\n\t\t * @param {Object} event JS event object.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_quiz: function( event ) {\n\n\t\t\tthis.post_search_popover.hide();\n\n\t\t\tvar quiz = event.data;\n\n\t\t\tif ( 'clone' === event.action ) {\n\n\t\t\t\tquiz = _.prepareQuizObjectForCloning( quiz );\n\n\t\t\t} else {\n\n\t\t\t\t// Use author id instead of the quiz author object.\n\t\t\t\tquiz = _.prepareExistingPostObjectDataForAddingOrCloning( quiz );\n\t\t\t\tquiz._forceSync = true;\n\n\t\t\t}\n\n\t\t\tdelete quiz.lesson_id;\n\n\t\t\tthis.lesson.add_quiz( quiz );\n\t\t\tthis.model = this.lesson.get( 'quiz' );\n\t\t\tthis.render();\n\n\t\t},\n\n\t\t/**\n\t\t * Open add existing quiz popover.\n\t\t *\n\t\t * @since 3.16.12\n\t\t *\n\t\t * @param {Object} event JS event object.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_quiz_click: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.post_search_popover = new Popover( {\n\t\t\t\tel: '#llms-existing-quiz',\n\t\t\t\targs: {\n\t\t\t\t\tbackdrop: true,\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontainer: '.wrap.lifterlms.llms-builder',\n\t\t\t\t\tdismissible: true,\n\t\t\t\t\tplacement: 'left',\n\t\t\t\t\twidth: 480,\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add Existing Quiz' ),\n\t\t\t\t\tcontent: new PostSearch( {\n\t\t\t\t\t\tpost_type: 'llms_quiz',\n\t\t\t\t\t\tsearching_message: LLMS.l10n.translate( 'Search for existing quizzes...' ),\n\t\t\t\t\t} ).render().$el,\n\t\t\t\t\tonHide: function() {\n\t\t\t\t\t\tBackbone.pubSub.off( 'quiz-search-select' );\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.post_search_popover.show();\n\t\t\tBackbone.pubSub.once( 'quiz-search-select', this.add_existing_quiz, this );\n\n\t\t},\n\n\t\t// filter_question_types: _.debounce( function( event ) {\n\n\t\t// \tvar term = $( event.target ).val();\n\n\t\t// \tthis.QuestionBankView.viewManager.each( function( view ) {\n\t\t// \t\tif ( ! term ) {\n\t\t// \t\t\tview.clear_filter();\n\t\t// \t\t} else {\n\t\t// \t\t\tview.filter( term );\n\t\t// \t\t}\n\t\t// \t} );\n\n\n\t\t// }, 300 ),\n\n\t\t/**\n\t\t * Callback function when the quiz has been deleted.\n\t\t *\n\t\t * @since 3.16.6\n\t\t *\n\t\t * @param {Oject} quiz Quiz Model.\n\t\t * @return {Void}\n\t\t */\n\t\ton_trashed: function( quiz ) {\n\n\t\t\tthis.lesson.set( 'quiz_enabled', 'no' );\n\t\t\tthis.lesson.set( 'quiz', '' );\n\n\t\t\tdelete this.model;\n\n\t\t\tthis.render();\n\n\t\t},\n\n\t\t/**\n\t\t * \"Add Question\" button click event.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * Creates a popover with question type list interface.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tshow_tools: function() {\n\n\t\t\t// Create popover,\n\t\t\tvar pop = new Popover( {\n\t\t\t\tel: '#llms-show-question-bank',\n\t\t\t\targs: {\n\t\t\t\t\tbackdrop: true,\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontainer: '#llms-builder-sidebar',\n\t\t\t\t\tdismissible: true,\n\t\t\t\t\tplacement: 'top-left',\n\t\t\t\t\twidth: 'calc( 100% - 40px )',\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add a Question' ),\n\t\t\t\t\turl: '#llms-quiz-tools',\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Show it.\n\t\t\tpop.show();\n\n\t\t\t// If a question is added, hide the popover.\n\t\t\tthis.model.on( 'new-question-added', function() {\n\t\t\t\tpop.hide();\n\t\t\t} );\n\n\t\t},\n\n\t\tget_question_list: function( options ) {\n\t\t\treturn new QuestionList( options );\n\t\t}\n\n\t}, Detachable, Editable, Subview, Trashable, SettingsFields ) );\n\n} );\n\n","/**\n * Single Assignment View.\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.17.0\n * @version 5.4.0\n */\n\ndefine( 'Views/Assignment',[\n\t\t'Views/Popover',\n\t\t'Views/PostSearch',\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Trashable',\n\t\t'Views/_Subview',\n\t\t'Views/SettingsFields'\n\t], function(\n\t\tPopover,\n\t\tPostSearch,\n\t\tDetachable,\n\t\tEditable,\n\t\tTrashable,\n\t\tSubview,\n\t\tSettingsFields\n\t) {\n\n\t\treturn Backbone.View.extend( _.defaults( {\n\n\t\t\t/**\n\t\t\t * Current view state.\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tstate: 'default',\n\n\t\t\t/**\n\t\t\t * Current Subviews.\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tviews: {\n\t\t\t\tsettings: {\n\t\t\t\t\tclass: SettingsFields,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'default',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tel: '#llms-editor-assignment',\n\n\t\t\t/**\n\t\t\t * DOM Events.\n\t\t\t *\n\t\t\t * @since 3.17.1\n\t\t\t *\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tevents: function() {\n\t\t\t\tvar addon_events = this.is_addon_available() ? window.llms_builder.assignments.get_view_events() : {};\n\t\t\t\treturn _.defaults( {\n\t\t\t\t\t'click #llms-existing-assignment': 'add_existing_assignment_click',\n\t\t\t\t\t'click #llms-new-assignment': 'add_new_assignment',\n\t\t\t\t}, Detachable.events, Editable.events, Trashable.events, addon_events );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Wrapper Tag name.\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\ttagName: 'div',\n\n\t\t\t/**\n\t\t\t * Get the underscore template.\n\t\t\t *\n\t\t\t * @type {[type]}\n\t\t\t */\n\t\t\ttemplate: wp.template( 'llms-assignment-template' ),\n\n\t\t\t/**\n\t\t\t * Initialization callback func (renders the element on screen).\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.17.2 Unknown.\n\t\t\t *\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tinitialize: function( data ) {\n\n\t\t\t\tthis.lesson = data.lesson;\n\n\t\t\t\t// initialize the model if the assignment is enabled or it's disabled but we still have data for a assignment\n\t\t\t\tif ( 'yes' === this.lesson.get( 'assignment_enabled' ) || ! _.isEmpty( this.lesson.get( 'assignment' ) ) ) {\n\n\t\t\t\t\tthis.model = this.lesson.get( 'assignment' );\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Todo Item.\n\t\t\t\t\t *\n\t\t\t\t\t * @todo this is a terrible terrible patch\n\t\t\t\t\t * I've spent nearly 3 days trying to figure out how to not use this line of code\n\t\t\t\t\t * ISSUE REPRODUCTION:\n\t\t\t\t\t * Open course builder\n\t\t\t\t\t * Open a lesson (A) and add a assignment\n\t\t\t\t\t * Switch to a new lesson (B)\n\t\t\t\t\t * Add a new assignment\n\t\t\t\t\t * Return to lesson A and the assignment's parent will be set to LESSON B\n\t\t\t\t\t * This will happen for *every* assignment in the builder...\n\t\t\t\t\t * Adding this set_parent on init guarantees that the assignment's correct parent is set\n\t\t\t\t\t * after adding new assignment's to other lessons\n\t\t\t\t\t * it's awful and it's gross...\n\t\t\t\t\t * I'm confused and tired and going to miss release dates again because of it\n\t\t\t\t\t */\n\t\t\t\t\tthis.model.set_parent( this.lesson );\n\n\t\t\t\t}\n\n\t\t\t\tthis.on( 'model-trashed', this.on_trashed );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Compiles the template and renders the view.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.17.7 Unknown.\n\t\t\t *\n\t\t\t * @return {Self} For chaining.\n\t\t\t */\n\t\t\trender: function() {\n\n\t\t\t\tthis.$el.html( this.template( this.model ) );\n\n\t\t\t\tif ( this.model && this.is_addon_available() ) {\n\n\t\t\t\t\tthis.stopListening( this.model, 'change:assignment_type', this.render );\n\n\t\t\t\t\tthis.render_subview( 'settings', {\n\t\t\t\t\t\tel: '#llms-assignment-settings-fields',\n\t\t\t\t\t\tmodel: this.model,\n\t\t\t\t\t} );\n\n\t\t\t\t\t// this.init_datepickers();\n\t\t\t\t\tthis.init_selects();\n\n\t\t\t\t\twindow.llms_builder.assignments.render_editor( this );\n\n\t\t\t\t\tthis.listenTo( this.model, 'change:assignment_type', this.render );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Adds a new assignment to a lesson which currently has no assignment associated with it.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tadd_new_assignment: function() {\n\n\t\t\t\tif ( this.is_addon_available() ) {\n\n\t\t\t\t\tthis.model = window.llms_builder.assignments.get_assignment( {\n\t\t\t\t\t\t/* Translators: %1$s = associated lesson title */\n\t\t\t\t\t\ttitle: LLMS.l10n.replace( '%1$s Assignment', {\n\t\t\t\t\t\t\t'%1$s': this.lesson.get( 'title' ),\n\t\t\t\t\t\t} ),\n lesson_id: this.lesson.get( 'id' ),\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis.lesson.set( 'assignment_enabled', 'yes' );\n\t\t\t\t\tthis.lesson.set( 'assignment', this.model );\n\n\t\t\t\t\tthis.render();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.show_ad_popover( '#llms-new-assignment' );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * When an assignment is selected from the post select popover\n\t\t\t * instantiate it and add it to the current lesson.\n\t\t\t *\n\t\t\t * @param {Object} event Data from the select2 select event.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 5.4.0 Prepare assignment object for cloning and use author id instead of the quiz author object.\n\t\t\t */\n\t\t\tadd_existing_assignment: function( event ) {\n\n\t\t\t\tthis.post_search_popover.hide();\n\n\t\t\t\tvar assignment = event.data;\n\n\t\t\t\tif ( 'clone' === event.action ) {\n\n\t\t\t\t\tassignment = _.prepareAssignmentObjectForCloning( assignment );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Use author id instead of the assignment author object.\n\t\t\t\t\tassignment = _.prepareExistingPostObjectDataForAddingOrCloning( assignment );\n\t\t\t\t\tassignment._forceSync = true;\n\n\t\t\t\t}\n\n\t\t\t\tassignment.lesson_id = this.lesson.get( 'id' )\n\n\t\t\t\tassignment = window.llms_builder.construct.get_model( 'Assignment', assignment );\n\n\t\t\t\tthis.lesson.set( 'assignment_enabled', 'yes' );\n\t\t\t\tthis.lesson.set( 'assignment', assignment );\n\t\t\t\tthis.model = assignment;\n\n\t\t\t\tthis.render();\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Open add existing assignment popover.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @param {Object} event JS event object.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tadd_existing_assignment_click: function( event ) {\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( this.is_addon_available() ) {\n\n\t\t\t\t\tthis.post_search_popover = new Popover( {\n\t\t\t\t\t\tel: '#llms-existing-assignment',\n\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\tbackdrop: true,\n\t\t\t\t\t\t\tcloseable: true,\n\t\t\t\t\t\t\tcontainer: '.wrap.lifterlms.llms-builder',\n\t\t\t\t\t\t\tdismissible: true,\n\t\t\t\t\t\t\tplacement: 'left',\n\t\t\t\t\t\t\twidth: 480,\n\t\t\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add Existing Assignment' ),\n\t\t\t\t\t\t\tcontent: new PostSearch( {\n\t\t\t\t\t\t\t\tpost_type: 'llms_assignment',\n\t\t\t\t\t\t\t\tsearching_message: LLMS.l10n.translate( 'Search for existing assignments...' ),\n\t\t\t\t\t\t\t} ).render().$el,\n\t\t\t\t\t\tonHide: function() {\n\t\t\t\t\t\t\tBackbone.pubSub.off( 'assignment-search-select' );\n\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis.post_search_popover.show();\n\t\t\t\t\tBackbone.pubSub.once( 'assignment-search-select', this.add_existing_assignment, this );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.show_ad_popover( '#llms-existing-assignment' );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Determine if Assignments addon is available to use.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @return {Boolean}\n\t\t\t */\n\t\t\tis_addon_available: function() {\n\n\t\t\t\treturn ( window.llms_builder.assignments );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Called when assignment is trashed.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @param {Oject} assignment Assignment Model.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\ton_trashed: function( assignment ) {\n\n\t\t\t\tthis.lesson.set( 'assignment_enabled', 'no' );\n\t\t\t\tthis.lesson.set( 'assignment', '' );\n\n\t\t\t\tdelete this.model;\n\n\t\t\t\tthis.render();\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Shows a dirty dirty ad popover for advanced assignments.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @param {Sring} el The jQuery selector string.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tshow_ad_popover: function( el ) {\n\n\t\t\t\tvar h3 = LLMS.l10n.translate( 'Get Your Students Taking Action' ),\n\t\t\t\tp = 'Great learning content is only half of teaching online. When your learners fully engage, they will take your content and move into action. Remove barriers for your learners by telling them what to do to apply what they just learned. Create graded assignments or simply give them a checklist of action items to complete before moving on.',\n\t\t\t\tbtn = LLMS.l10n.translate( 'Get Assignments Now!' ),\n\t\t\t\turl = 'https://lifterlms.com/product/lifterlms-assignments?utm_source=LifterLMS%20Plugin&utm_medium=Assignment%20Builder%20Button&utm_campaign=Assignment%20Addon%20Upsell&utm_content=3.17.0';\n\n\t\t\t\tthis.ad_popover = new Popover( {\n\t\t\t\t\tel: el,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tbackdrop: true,\n\t\t\t\t\t\tcloseable: true,\n\t\t\t\t\t\tcontainer: '.wrap.lifterlms.llms-builder',\n\t\t\t\t\t\tdismissible: true,\n\t\t\t\t\t\t// placement: 'left',\n\t\t\t\t\t\twidth: 380,\n\t\t\t\t\t\ttitle: LLMS.l10n.translate( 'Unlock LifterLMS Assignments' ),\n\t\t\t\t\t\t// This is here for translation but not actually used by the popover.\n\t\t\t\t\t\tcloseLabel: LLMS.l10n.translate( 'Close' ),\n\t\t\t\t\t\tcontent: '' + h3 + ' ' + p + '
' + btn + '
'\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tthis.ad_popover.show();\n\n\t\t\t},\n\n\t\t}, Detachable, Editable, Trashable, Subview, SettingsFields ) );\n\n\t} );\n\n","/**\n * Sidebar Editor View\n *\n * @since 3.16.0\n * @version 3.27.0\n */\ndefine( 'Views/Editor',[\n\t\t'Views/LessonEditor',\n\t\t'Views/Quiz',\n\t\t'Views/Assignment',\n\t\t'Views/_Subview'\n\t], function(\n\t\tLessonEditor,\n\t\tQuiz,\n\t\tAssignment,\n\t\tSubview\n\t) {\n\n\t\treturn Backbone.View.extend( _.defaults( {\n\n\t\t\t/**\n\t\t\t * Current view state\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tstate: 'lesson', // [lesson|quiz]\n\n\t\t\t/**\n\t\t\t * Current Subviews\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tviews: {\n\t\t\t\tlesson: {\n\t\t\t\t\tclass: LessonEditor,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'lesson',\n\t\t\t\t},\n\t\t\t\tassignment: {\n\t\t\t\t\tclass: Assignment,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'assignment',\n\t\t\t\t},\n\t\t\t\tquiz: {\n\t\t\t\t\tclass: Quiz,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'quiz',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * HTML element selector\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tel: '#llms-editor',\n\n\t\t\tevents: {\n\t\t\t\t'click .llms-editor-nav a[href=\"#llms-editor-close\"]': 'close_editor',\n\t\t\t\t'click .llms-editor-nav a:not([href=\"#llms-editor-close\"])': 'switch_tab',\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Wrapper Tag name\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\ttagName: 'div',\n\n\t\t\t/**\n\t\t\t * Get the underscore template\n\t\t\t *\n\t\t\t * @type {[type]}\n\t\t\t */\n\t\t\ttemplate: wp.template( 'llms-editor-template' ),\n\n\t\t\t/**\n\t\t\t * Initialization callback func (renders the element on screen)\n\t\t\t *\n\t\t\t * @return void\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tinitialize: function( data ) {\n\n\t\t\t\tthis.SidebarView = data.SidebarView;\n\t\t\t\tif ( data.tab ) {\n\t\t\t\t\tthis.state = data.tab;\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Compiles the template and renders the view\n\t\t\t *\n\t\t\t * @return self (for chaining)\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\trender: function( view_data ) {\n\n\t\t\t\tview_data = view_data || {};\n\n\t\t\t\tthis.$el.html( this.template( this ) );\n\n\t\t\t\tthis.render_subviews( _.extend( view_data, {\n\t\t\t\t\tlesson: this.model,\n\t\t\t\t} ) );\n\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Click event for close sidebar editor button\n\t\t\t * Sends event to main SidebarView to trigger editor closing events\n\t\t\t *\n\t\t\t * @param obj event js event obj\n\t\t\t * @return void\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.27.0\n\t\t\t */\n\t\t\tclose_editor: function( event ) {\n\n\t\t\t\tevent.preventDefault();\n\t\t\t\tBackbone.pubSub.trigger( 'sidebar-editor-close' );\n\t\t\t\twindow.location.hash = '';\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Click event for switching tabs in the editor navigation\n\t\t\t *\n\t\t\t * @param object event js event object\n\t\t\t * @return void\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.27.0\n\t\t\t */\n\t\t\tswitch_tab: function( event ) {\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tvar $btn = $( event.target ),\n\t\t\t\tview = $btn.attr( 'data-view' ),\n\t\t\t\t$tab = this.$el.find( $btn.attr( 'href' ) );\n\n\t\t\t\tthis.set_state( view ).render();\n\t\t\t\tthis.set_hash( view );\n\n\t\t\t\t// Backbone.pubSub.trigger( 'editor-tab-activated', $btn.attr( 'href' ).substring( 1 ) );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Adds a hash for deep linking to a specific lesson tab\n\t\t\t *\n\t\t\t * @param string subtab subtab [quiz|assignment]\n\t\t\t * @return void\n\t\t\t * @since 3.27.0\n\t\t\t * @version 3.27.0\n\t\t\t */\n\t\t\tset_hash: function( subtab ) {\n\n\t\t\t\tvar hash = 'lesson:' + this.model.get( 'id' );\n\n\t\t\t\tif ( 'lesson' !== subtab ) {\n\t\t\t\t\thash += ':' + subtab;\n\t\t\t\t}\n\n\t\t\t\twindow.location.hash = hash;\n\n\t\t\t},\n\n\t\t}, Subview ) );\n\n} );\n\n","/**\n * Sidebar Elements View\n *\n * @since 3.16.0\n * @version 3.16.12\n */\ndefine( 'Views/Elements',[ 'Models/Section', 'Views/Section', 'Models/Lesson', 'Views/Lesson', 'Views/Popover', 'Views/PostSearch' ], function( Section, SectionView, Lesson, LessonView, Popover, LessonSearch ) {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * HTML element selector\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-elements',\n\n\t\tevents: {\n\t\t\t'click #llms-new-section': 'add_new_section',\n\t\t\t'click #llms-new-lesson': 'add_new_lesson',\n\t\t\t'click #llms-existing-lesson': 'add_existing_lesson',\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-elements-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\t// save a reference to the main Course view\n\t\t\tthis.SidebarView = data.SidebarView;\n\n\t\t\t// watch course sections and enable/disable lesson buttons conditionally\n\t\t\tthis.listenTo( this.SidebarView.CourseView.model.get( 'sections' ), 'add', this.maybe_disable_buttons );\n\t\t\tthis.listenTo( this.SidebarView.CourseView.model.get( 'sections' ), 'remove', this.maybe_disable_buttons );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template() );\n\t\t\tthis.draggable();\n\t\t\tthis.maybe_add_initial_section();\n\n\t\t\treturn this;\n\t\t},\n\n\t\tdraggable: function() {\n\n\t\t\t$( '#llms-new-section' ).draggable( {\n\t\t\t\tappendTo: '#llms-sections',\n\t\t\t\tcancel: false,\n\t\t\t\tconnectToSortable: '.llms-sections',\n\t\t\t\thelper: function() {\n\t\t\t\t\treturn new SectionView( { model: new Section() } ).render().$el;\n\t\t\t\t},\n\t\t\t\tstart: function() {\n\t\t\t\t\t$( '.llms-sections' ).addClass( 'dragging' );\n\t\t\t\t},\n\t\t\t\tstop: function() {\n\t\t\t\t\t$( '.llms-sections' ).removeClass( 'dragging' );\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t$( '#llms-new-lesson' ).draggable( {\n\t\t\t\t// appendTo: '#llms-sections .llms-section:first-child .llms-lessons',\n\t\t\t\tappendTo: '#llms-sections',\n\t\t\t\tcancel: false,\n\t\t\t\tconnectToSortable: '.llms-lessons',\n\t\t\t\thelper: function() {\n\t\t\t\t\treturn new LessonView( { model: new Lesson() } ).render().$el;\n\t\t\t\t},\n\t\t\t\tstart: function() {\n\n\t\t\t\t\t$( '.llms-lessons' ).addClass( 'dragging' );\n\n\t\t\t\t},\n\t\t\t\tstop: function() {\n\t\t\t\t\t$( '.llms-lessons' ).removeClass( 'dragging' );\n\t\t\t\t\t$( '.drag-expanded' ).removeClass( '.drag-expanded' );\n\t\t\t\t},\n\t\t\t} );\n\n\t\t},\n\n\t\tadd_new_section: function( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'add-new-section' );\n\t\t},\n\n\t\tadd_new_lesson: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\t\t},\n\n\t\t/**\n\t\t * Show the popover to add an existing lessons\n\t\t *\n\t\t * @param object event JS Event Object\n\t\t * @return void\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tadd_existing_lesson: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tvar pop = new Popover( {\n\t\t\t\tel: '#llms-existing-lesson',\n\t\t\t\targs: {\n\t\t\t\t\tbackdrop: true,\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontainer: '.wrap.lifterlms.llms-builder',\n\t\t\t\t\tdismissible: true,\n\t\t\t\t\tplacement: 'left',\n\t\t\t\t\twidth: 480,\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add Existing Lesson' ),\n\t\t\t\t\tcontent: new LessonSearch( {\n\t\t\t\t\t\tpost_type: 'lesson',\n\t\t\t\t\t\tsearching_message: LLMS.l10n.translate( 'Search for existing lessons...' ),\n\t\t\t\t\t} ).render().$el,\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tpop.show();\n\t\t\tBackbone.pubSub.on( 'lesson-search-select', function() {\n\t\t\t\tpop.hide()\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Disables lesson add buttons if no sections are available to add a lesson to\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tmaybe_add_initial_section: function() {\n\n\t\t\tvar $els = $( '#llms-new-lesson, #llms-existing-lesson' );\n\n\t\t\tif ( ! this.SidebarView.CourseView.model.get( 'sections' ).length ) {\n\t\t\t\tBackbone.pubSub.trigger( 'add-new-section' );\n\t\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\t\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\t\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\t\t\t} else {\n\t\t\t\t$els.removeAttr( 'disabled' );\n\t\t\t}\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Sidebar Utilities View\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/Utilities',[], function() {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * HTML element selector\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-utilities',\n\n\t\tevents: {\n\t\t\t'click #llms-collapse-all': 'collapse_all',\n\t\t\t'click #llms-expand-all': 'expand_all'\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-utilities-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\t// this.render();\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\t\t\tthis.$el.html( this.template() );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Collapse all sections\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tcollapse_all: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'collapse-all' );\n\t\t},\n\n\t\t/**\n\t\t * Expand all sections\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\texpand_all: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'expand-all' );\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Main sidebar view\n *\n * @since 3.16.0\n * @version 7.2.0\n */\ndefine( 'Views/Sidebar',[\n\t'Views/Editor',\n\t'Views/Elements',\n\t'Views/Utilities',\n\t'Views/_Subview'\n], function(\n\tEditor,\n\tElements,\n\tUtilities,\n\tSubview\n) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Current builder state\n\t\t * @type {String}\n\t\t */\n\t\tstate: 'builder', // [builder|editor]\n\n\t\t/**\n\t\t * Current Subviews\n\t\t * @type {Object}\n\t\t */\n\t\tviews: {\n\t\t\telements: {\n\t\t\t\tclass: Elements,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'builder',\n\t\t\t},\n\t\t\tutilities: {\n\t\t\t\tclass: Utilities,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'builder',\n\t\t\t},\n\t\t\teditor: {\n\t\t\t\tclass: Editor,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'editor',\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * HTML element selector\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-builder-sidebar',\n\n\t\t/**\n\t\t * DOM events\n\t\t * @type {Object}\n\t\t */\n\t\tevents: {\n\t\t\t'click #llms-save-button': 'save_now',\n\t\t\t'click #llms-exit-button': 'exit_now',\n\t\t\t'click .llms-builder-error': 'clear_errors',\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'aside',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-sidebar-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\t// save a reference to the main Course view\n\t\t\tthis.CourseView = data.CourseView;\n\n\t\t\tthis.render();\n\n\t\t\tBackbone.pubSub.on( 'current-save-status', this.changes_made, this );\n\n\t\t\tBackbone.pubSub.on( 'heartbeat-send', this.heartbeat_send, this );\n\t\t\tBackbone.pubSub.on( 'heartbeat-tick', this.heartbeat_tick, this );\n\n\t\t\tBackbone.pubSub.on( 'lesson-selected', this.on_lesson_select, this );\n\t\t\tBackbone.pubSub.on( 'sidebar-editor-close', this.on_editor_close, this );\n\n\t\t\tthis.$saveButton = $( '#llms-save-button' );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function( view_data ) {\n\n\t\t\tview_data = view_data || {};\n\n\t\t\tthis.$el.html( this.template() );\n\n\t\t\tthis.render_subviews( _.extend( view_data, {\n\t\t\t\tSidebarView: this,\n\t\t\t} ) );\n\n\t\t\tvar $el = $( '.wrap.lifterlms.llms-builder' );\n\t\t\tif ( 'builder' === this.state ) {\n\t\t\t\t$el.removeClass( 'editor-active' );\n\t\t\t} else {\n\t\t\t\t$el.addClass( 'editor-active' );\n\t\t\t}\n\n\t\t\tthis.$saveButton = this.$el.find( '#llms-save-button' );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Adds error message element\n\t\t * @param {[type]} $err [description]\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tadd_error: function( $err ) {\n\n\t\t\tthis.$el.find( '.llms-builder-save' ).prepend( $err );\n\n\t\t},\n\n\t\t/**\n\t\t * Clear any existing error message elements\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tclear_errors: function() {\n\n\t\t\tthis.$el.find( '.llms-builder-save .llms-builder-error' ).remove();\n\n\t\t},\n\n\t\t/**\n\t\t * Update save status button when changes are detected\n\t\t * runs on an interval to check status of course regularly for unsaved changes\n\t\t * @param obj sync instance of the sync controller\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tchanges_made: function( sync ) {\n\n\t\t\t// if a save is currently running, don't do anything\n\t\t\tif ( sync.saving ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( sync.has_unsaved_changes ) {\n\n\t\t\t\tthis.$saveButton.attr( 'data-status', 'unsaved' );\n\t\t\t\tthis.$saveButton.removeAttr( 'disabled' );\n\n\t\t\t} else {\n\n\t\t\t\tthis.$saveButton.attr( 'data-status', 'saved' );\n\t\t\t\tthis.$saveButton.attr( 'disabled', 'disabled' );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Exit the builder and return to the WP Course Editor\n\t\t * @return void\n\t\t * @since 3.16.7\n\t\t * @version 3.16.7\n\t\t */\n\t\texit_now: function() {\n\n\t\t\twindow.location.href = window.llms_builder.CourseModel.get_edit_post_link();\n\n\t\t},\n\n\t\t/**\n\t\t * Triggered when a heartbeat send event starts containing builder information\n\t\t * @param obj sync instance of the sync controller\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\theartbeat_send: function( sync ) {\n\n\t\t\tif ( sync.saving ) {\n\t\t\t\tLLMS.Spinner.start( this.$saveButton.find( 'i' ), 'small' );\n\t\t\t\tthis.$saveButton.attr( {\n\t\t\t\t\t'data-status': 'saving',\n\t\t\t\t\tdisabled: 'disabled',\n\t\t\t\t} );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Triggered when a heartbeat tick completes and updates save status or appends errors\n\t\t * @param obj sync instance of the sync controller\n\t\t * @param obj data updated data\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\theartbeat_tick: function( sync, data ) {\n\n\t\t\tif ( ! sync.saving ) {\n\n\t\t\t\tvar status = 'saved';\n\n\t\t\t\tthis.clear_errors();\n\n\t\t\t\tif ( 'error' === data.status ) {\n\n\t\t\t\t\tstatus = 'error';\n\n\t\t\t\t\tvar msg = data.message,\n\t\t\t\t\t\t$err = $( ' ' );\n\n\t\t\t\t\tif ( 'object' === typeof msg ) {\n\t\t\t\t\t\t_.each( msg, function( txt ) {\n\t\t\t\t\t\t\t$err.append( '' + txt + ' ' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$err = $err.append( '' + msg + ' ' );;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.add_error( $err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.$saveButton.find( '.llms-spinning' ).remove();\n\t\t\t\tthis.$saveButton.attr( {\n\t\t\t\t\t'data-status': status,\n\t\t\t\t\tdisabled: 'disabled',\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if the editor is the currently active state\n\t\t * @return boolean\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tis_editor_active: function() {\n\n\t\t\treturn ( 'editor' === this.state );\n\n\t\t},\n\n\t\t/**\n\t\t * Triggered when the editor closes, updates state to be the course builder view\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_editor_close: function() {\n\n\t\t\tthis.set_state( 'builder' ).render();\n\n\t\t},\n\n\t\t/**\n\t\t * When a lesson is selected, opens the sidebar to the editor view\n\t\t * @param obj lesson_model instance of the lesson model which was selected\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_lesson_select: function( lesson_model, tab ) {\n\n\t\t\tif ( 'editor' !== this.state ) {\n\t\t\t\tthis.set_state( 'editor' );\n\t\t\t} else {\n\t\t\t\tthis.remove_subview( 'editor' );\n\t\t\t}\n\n\t\t\tthis.render( {\n\t\t\t\tmodel: lesson_model,\n\t\t\t\ttab: tab,\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Save button click event\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tsave_now: function() {\n\n\t\t\twindow.llms_builder.sync.save_now();\n\n\t\t},\n\n\t}, Subview ) );\n\n} );\n\n","/**\n * LifterLMS JS Builder App Bootstrap\n *\n * @since 3.16.0\n * @since 3.37.11 Added `_.getEditor()` helper.\n * @version 5.4.0\n */\nrequire( [\n\t'vendor/wp-hooks',\n\t'vendor/backbone.collectionView',\n\t'vendor/backbone.trackit',\n\t'Controllers/Construct',\n\t'Controllers/Debug',\n\t'Controllers/Schemas',\n\t'Controllers/Sync',\n\t'Models/loader',\n\t'Views/Course',\n\t'Views/Sidebar'\n\t], function(\n\tHooks,\n\tCV,\n\tTrackIt,\n\tConstruct,\n\tDebug,\n\tSchemas,\n\tSync,\n\tModels,\n\tCourseView,\n\tSidebarView\n\t) {\n\n\t\twindow.llms_builder.debug = new Debug( window.llms_builder.debug );\n\t\twindow.llms_builder.construct = new Construct();\n\t\twindow.llms_builder.schemas = new Schemas( window.llms_builder.schemas );\n\n\t\t/**\n\t\t * Compare values, used by _.checked & _.selected mixins.\n\t\t *\n\t\t * @since 3.17.2\n\t\t *\n\t\t * @param {Mixed} expected expected Value, probably a string (the value of a select option or checkbox element).\n\t\t * @param {Mixed} mixed actual Actual value, probably a string (the return of model.get( 'something' ) )\n\t\t * but could be an array like a multiselect.\n\t\t * @return {Bool}\n\t\t */\n\t\tfunction value_compare( expected, actual ) {\n\t\t\treturn ( ( _.isArray( actual ) && -1 !== actual.indexOf( expected ) ) || expected == actual );\n\t\t};\n\n\t\t/**\n\t\t * Underscores templating utilities\n\t\t *\n\t\t * @since 3.17.0\n\t\t * @version 3.27.0\n\t\t */\n\t\t_.mixin( {\n\n\t\t\t/**\n\t\t\t * Determine if two values are equal and output checked attribute if they are.\n\t\t\t *\n\t\t\t * Useful for templating checkboxes & radio elements\n\t\t\t * like WP Core PHP checked() but in JS.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.17.2 Unknown.\n\t\t\t *\n\t\t\t * @param {Mixed} expected Expected element value.\n\t\t\t * @param {Mixed} actual Actual element value.\n\t\t\t * @return {String}\n\t\t\t */\n\t\t\tchecked: function( expected, actual ) {\n\t\t\t\tif ( value_compare( expected, actual ) ) {\n\t\t\t\t\treturn ' checked=\"checked\"';\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Recursively clone an object via _.clone().\n\t\t\t *\n\t\t\t * @since 3.17.7\n\t\t\t *\n\t\t\t * @param {Object} obj Object to clone.\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tdeepClone: function( obj ) {\n\n\t\t\t\tvar clone = _.clone( obj );\n\n\t\t\t\t_.each( clone, function( val, key ) {\n\t\t\t\t\tif ( ! _.isFunction( val ) && _.isObject( val ) ) {\n\t\t\t\t\t\tclone[ key ] = _.deepClone( val );\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\treturn clone;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the wp.editor instance.\n\t\t\t *\n\t\t\t * Uses `wp.oldEditor` (when available) which was added in WordPress 5.0.\n\t\t\t *\n\t\t\t * Falls back to `wp.editor()` which will usually be the same as `wp.oldEditor` unless\n\t\t\t * the `@wordpress/editor` module has been loaded by another plugin or a theme.\n\t\t\t *\n\t\t\t * @since 3.37.11\n\t\t\t *\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tgetEditor: function() {\n\n\t\t\t\tif ( undefined !== wp.oldEditor ) {\n\n\t\t\t\t\tvar ed = wp.oldEditor;\n\n\t\t\t\t\t// Inline scripts added by WordPress are not ported to `wp.oldEditor`, see https://github.com/WordPress/WordPress/blob/641c632b0c9fde4e094b217f50749984ca43a2fa/wp-includes/class-wp-editor.php#L977.\n\t\t\t\t\tif ( undefined !== wp.editor && undefined !== wp.editor.getDefaultSettings ) {\n\t\t\t\t\t\ted.getDefaultSettings = wp.editor.getDefaultSettings;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ed;\n\n\t\t\t\t} else if ( undefined !== wp.editor && undefined !== wp.editor.autop ){\n\n\t\t\t\t\treturn wp.editor;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Strips IDs & Parent References from quizzes and all quiz questions.\n\t\t\t *\n\t\t\t * @since 3.24.0\n\t\t\t * @since 3.27.0 Unknown.\n\t\t\t * @since 5.4.0 Use author id instead of the question author object.\n\t\t\t *\n\t\t\t * @param {Object} quiz Raw quiz object (not a model).\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tprepareQuizObjectForCloning: function( quiz ) {\n\n\t\t\t\tdelete quiz.id;\n\t\t\t\tdelete quiz.lesson_id;\n\n\t\t\t\t_.each( quiz.questions, function( question ) {\n\n\t\t\t\t\tquestion = _.prepareQuestionObjectForCloning( question );\n\n\t\t\t\t} );\n\n\t\t\t\t// Use author id instead of the quiz author object.\n\t\t\t\tquiz = _.prepareExistingPostObjectDataForAddingOrCloning( quiz );\n\n\t\t\t\treturn quiz;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Strips IDs & Parent References from a question.\n\t\t\t *\n\t\t\t * @since 3.27.0\n\t\t\t * @since 5.4.0 Use author id instead of the question author object.\n\t\t\t *\n\t\t\t * @param {Object} question Raw question object (not a model).\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tprepareQuestionObjectForCloning: function( question ) {\n\n\t\t\t\tdelete question.id;\n\t\t\t\tdelete question.parent_id;\n\n\t\t\t\tif ( question.image && _.isObject( question.image ) ) {\n\t\t\t\t\tquestion.image._forceSync = true;\n\t\t\t\t}\n\n\t\t\t\tif ( question.choices ) {\n\n\t\t\t\t\t_.each( question.choices, function( choice ) {\n\n\t\t\t\t\t\tdelete choice.question_id;\n\t\t\t\t\t\tdelete choice.id;\n\t\t\t\t\t\tif ( 'image' === choice.choice_type && _.isObject( choice.choice ) ) {\n\t\t\t\t\t\t\tchoice.choice._forceSync = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t// Use author id instead of the question author object.\n\t\t\t\tquestion = _.prepareExistingPostObjectDataForAddingOrCloning( question );\n\n\t\t\t\treturn question;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Strips IDs & Parent References from assignments and all assignment tasks.\n\t\t\t *\n\t\t\t * @since 5.4.0\n\t\t\t *\n\t\t\t * @param {Object} assignment Raw assignment object (not a model).\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\t prepareAssignmentObjectForCloning: function( assignment ) {\n\n\t\t\t\tdelete assignment.id;\n\t\t\t\tdelete assignment.lesson_id;\n\n\t\t\t\t// Clone tasks.\n\t\t\t\tif ( 'tasklist' === assignment.assignment_type ) {\n\t\t\t\t\t_.each( assignment.tasks, function( task ) {\n\t\t\t\t\t\tdelete task.id;\n\t\t\t\t\t\tdelete task.assignment_id;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Use author id instead of the quiz author object.\n\t\t\t\tassignment = _.prepareExistingPostObjectDataForAddingOrCloning( assignment );\n\n\t\t\t\treturn assignment;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Prepare post object data for adding or cloning.\n\t\t\t *\n\t\t\t * Use author id instead of the post type author object.\n\t\t\t *\n\t\t\t * @since 5.4.0\n\t\t\t *\n\t\t\t * @param {Object} quiz Raw post object (not a model).\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tprepareExistingPostObjectDataForAddingOrCloning: function( post_data ) {\n\n\t\t\t\tif ( post_data.author && _.isObject( post_data.author ) && post_data.author.id ) {\n\t\t\t\t\tpost_data.author = post_data.author.id;\n\t\t\t\t}\n\n\t\t\t\treturn post_data;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Determine if two values are equal and output selected attribute if they are.\n\t\t\t *\n\t\t\t * Useful for templating select elements\n\t\t\t * like WP Core PHP selected() but in JS.\n\t\t\t *\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.17.2 Unknown.\n\t\t\t *\n\t\t\t * @param {Mixed} expected Expected element value.\n\t\t\t * @param {Mixed} actual Actual element value.\n\t\t\t * @return {String}\n\t\t\t */\n\t\t\tselected: function( expected, actual ) {\n\t\t\t\tif ( value_compare( expected, actual ) ) {\n\t\t\t\t\treturn ' selected=\"selected\"';\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Generic function for stripping HTML tags from a string.\n\t\t\t *\n\t\t\t * @since 3.17.8\n\t\t\t *\n\t\t\t * @param {String} content Raw string.\n\t\t\t * @param {Array} allowed_tags Array of allowed HTML tags.\n\t\t\t * @return {String}\n\t\t\t */\n\t\t\tstripFormatting: function( content, allowed_tags ) {\n\n\t\t\t\tif ( ! allowed_tags ) {\n\t\t\t\t\tallowed_tags = [ 'b', 'i', 'u', 'strong', 'em' ];\n\t\t\t\t}\n\n\t\t\t\tvar $html = $( '' + content + '
' );\n\n\t\t\t\t$html.find( '*' ).not( allowed_tags.join( ',' ) ).each( function( ) {\n\n\t\t\t\t\t$( this ).replaceWith( this.innerHTML );\n\n\t\t\t\t} );\n\n\t\t\t\treturn $html.html();\n\n\t\t\t},\n\n\t\t} );\n\n\t\tBackbone.pubSub = _.extend( {}, Backbone.Events );\n\n\t\t$( document ).trigger( 'llms-builder-pre-init' );\n\n\t\twindow.llms_builder.questions = window.llms_builder.construct.get_collection( 'QuestionTypes', window.llms_builder.questions );\n\n\t\tvar CourseModel = window.llms_builder.construct.get_model( 'Course', window.llms_builder.course );\n\t\twindow.llms_builder.CourseModel = CourseModel;\n\n\t\twindow.llms_builder.sync = new Sync( CourseModel, window.llms_builder.sync );\n\n\t\tvar Course = new CourseView( {\n\t\t\tmodel: CourseModel,\n\t\t} );\n\n\t\tvar Sidebar = new SidebarView( {\n\t\t\tCourseView: Course\n\t\t} );\n\n\t\t$( document ).trigger( 'llms-builder-init', {\n\t\t\tcourse: Course,\n\t\t\tsidebar: Sidebar,\n\t\t} );\n\n\t\t/**\n\t\t * Do deep linking to Lesson / Quiz / Assignments.\n\t\t *\n\t\t * Hash should be in the form of #lesson:{lesson_id}:{subtab}\n\t\t * subtab can be either \"quiz\" or \"assignment\". If none found assumes the \"lesson\" tab.\n\t\t *\n\t\t * @since 3.27.0\n\t\t * @since 3.30.1 Wait for wp.editor & window.tinymce to load before opening deep link tabs.\n\t\t * @since 3.37.11 Use `_.getEditor()` helper when checking for the presence of `wp.editor`.\n\t\t */\n\t\tif ( window.location.hash ) {\n\n\t\t\tvar hash = window.location.hash;\n\t\t\tif ( -1 === hash.indexOf( '#lesson:' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar parts = hash.replace( '#lesson:', '' ).split( ':' ),\n\t\t\t$lesson = $( '#llms-lesson-' + parts[0] );\n\n\t\t\tif ( $lesson.length ) {\n\n\t\t\t\tLLMS.wait_for( function() {\n\t\t\t\t\treturn ( undefined !== _.getEditor() && undefined !== window.tinymce );\n }, function() {\n\t\t\t\t\t$lesson.closest( '.llms-builder-item.llms-section' ).find( 'a.llms-action-icon.expand' ).trigger( 'click' );\n\t\t\t\t\tvar subtab = parts[1] ? parts[1] : 'lesson';\n\t\t\t\t\t$( '#llms-lesson-' + parts[0] ).find( 'a.llms-action-icon.edit-' + subtab ).trigger( 'click' );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\ndefine(\"main\", function(){});\n\n","}(jQuery));\n"],"sourceRoot":"../../.."}
\ No newline at end of file
diff --git a/assets/maps/js/llms-builder.min.js.map b/assets/maps/js/llms-builder.min.js.map
new file mode 100644
index 0000000000..79b3fa5dd6
--- /dev/null
+++ b/assets/maps/js/llms-builder.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../../../config-wrap-start-default.js","vendor/almond.js","vendor/wp-hooks.js","underscore.js","backbone.js","jquery.js","vendor/backbone.collectionView.js","vendor/backbone.trackit.js","Models/Image.js","Models/_Relationships.js","Models/QuestionChoice.js","Collections/QuestionChoices.js","Models/QuestionType.js","Models/_Utilities.js","Models/Question.js","Collections/Questions.js","Schemas/Quiz.js","Models/Quiz.js","Schemas/Lesson.js","Models/Lesson.js","Collections/Lessons.js","Collections/QuestionTypes.js","Models/Section.js","Collections/Sections.js","Collections/loader.js","Models/Abstract.js","Models/Course.js","Models/loader.js","Views/_Detachable.js","Views/_Editable.js","Views/_Receivable.js","Views/_Shiftable.js","Views/_Subview.js","Views/_Trashable.js","Views/_loader.js","Controllers/Construct.js","Controllers/Debug.js","Controllers/Schemas.js","Controllers/Sync.js","Views/Lesson.js","Views/LessonList.js","Views/Section.js","Views/SectionList.js","Views/Course.js","Views/SettingsFields.js","Views/LessonEditor.js","Views/Popover.js","Views/PostSearch.js","Views/QuestionType.js","Views/QuestionBank.js","Views/QuestionChoice.js","Views/QuestionChoiceList.js","Views/Question.js","Views/QuestionList.js","Views/Quiz.js","Views/Assignment.js","Views/Editor.js","Views/Elements.js","Views/Utilities.js","Views/Sidebar.js","main.js"],"names":["$","requirejs","require","define","undef","hasProp","obj","prop","hasOwn","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","normalizedBaseParts","baseParts","split","map","config","starMap","length","nodeIdCompat","jsSuffixRegExp","test","replace","charAt","slice","concat","splice","join","makeRequire","relName","forceSync","args","aps","arguments","push","req","apply","makeNormalize","makeLoad","depName","value","defined","callDep","waiting","defining","main","Error","splitPrefix","prefix","index","indexOf","substring","makeRelParts","makeConfig","makeMap","handlers","Object","prototype","hasOwnProperty","relParts","plugin","parts","relResourceName","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","window","llms","wp","hooks","t","r","o","l","m","c","d","defineProperty","configurable","enumerable","get","__esModule","default","s","209","console","error","u","priority","namespace","a","__current","forEach","currentIndex","runs","b","Array","pop","create","addAction","addFilter","removeAction","removeFilter","hasAction","hasFilter","removeAllActions","removeAllFilters","doAction","applyFilters","currentAction","currentFilter","doingAction","doingFilter","didAction","didFilter","actions","filters","v","A","_","F","g","y","k","x","I","w","O","T","z","Z","h","Backbone","root","factory","Zepto","this","_normalizeOptionDeclarations","optionDeclarations","normalizedOptionDeclarations","isArray","each","thisOptionDeclaration","thisOptionName","thisOptionRequired","thisOptionDefaultValue","isString","isObject","first","keys","isFunction","clone","required","isUndefined","defaultValue","mDefaultModelViewConstructor","View","kOptionsRequiringRerendering","kStylesForEmptyListCaption","background","border","box-shadow","CollectionView","extend","tagName","events","mousedown > li, tbody > tr > td","dblclick > li, tbody > tr > td","click","click ul.collection-view, table.collection-view","keydown","spawnMessages","focus","passMessages","*","initializationOptions","collection","modelView","modelViewOptions","itemTemplate","itemTemplateFunction","selectable","clickToSelect","selectableModelsFilter","visibleModelsFilter","sortableModelsFilter","selectMultiple","clickToToggle","processKeyEvents","sortable","sortableOptions","reuseModelViews","detachedRendering","emptyListCaption","initialize","options","ViewOptions","add","setOptions","Collection","_hasBeenRendered","_isBackboneCourierAvailable","Courier","$el","data","addClass","attr","selectedItems","_updateItemTemplate","_registerCollectionEvents","viewManager","ChildViewContainer","_onOptionsChanged","changedOptions","originalOptions","_this","rerender","changedOptionKey","newVal","oldVal","stopListening","setSelectedModel","by","setSelectedModels","removeAttr","_setupSortable","reapplyFilter","view","remove","contains","render","setOption","optionName","optionValue","optionHash","getSelectedModel","getSelectedModels","referenceBy","items","item","curLineNumber","_getVisibleItemEls","is","findByModel","newSelectedItems","silent","newSelectedCids","thisModel","cid","pluck","model","thisItemEl","oldSelectedModels","oldSelectedCids","_convertStringsToInts","_validateSelection","newSelectedModels","_containSameElements","_addSelectedClassToSelectedItems","spawn","selectedModels","trigger","updateDependentControls","newSelectedItem","getView","reference","itemElements","_saveSelection","modelViewContainerEl","_getContainerEl","oldViewManager","thisModelView","detach","empty","fragmentContainer","document","createDocumentFragment","findByModelCid","_createNewModelView","_getModelViewOptions","_insertAndRenderModelView","append","_showEmptyListCaptionIfAppropriate","_restoreSelection","forceRerenderOnNextSortEvent","_removeEmptyListCaption","emptyListString","$emptyListCaptionEl","$varEl","_isRenderedAsList","wrapAll","parent","css","find","parentElOrDocumentFragment","atIndex","thisModelViewWrapped","_wrapModelView","nodeType","appendChild","numberOfModelViewsCurrentlyInDOM","children","eq","before","hide","hideThisModelView","toggle","toggleClass","whichFilter","notVisible","_modelViewHasWrapperLI","closest","notSortable","notSelectable","_removeModelView","_validateSelectionAndRender","listenTo","_isRenderedAsTable","tbody","_getClickedItemId","theEvent","clickedItemId","clickedItemEl","currentTarget","clickedItem","isNumeric","parseInt","itemTemplateHtml","html","template","modelReferenceIds","models","intersection","filter","thisItemId","savedSelection","offset","oldItemsIdsWithSelectedClass","itemsIdsFromWhichSelectedClassNeedsToBeRemoved","without","removeClass","itemsIdsFromWhichSelectedClassNeedsToBeAdded","_reorderCollectionBasedOnHTML","thisModelCid","sort","comparator","_getModelViewConstructor","modelViewConstructor","newModelView","collectionListView","collectionView","modelViewWrapperEl","theArray","thisEl","thisElAsNumber","arrayA","arrayB","toLowerCase","_charCodes","upArrow","downArrow","axis","distance","forcePlaceholderSize","start","bind","_sortStart","change","_sortChange","stop","_sortStop","receive","_receive","over","_over","result","event","ui","modelBeingSorted","newIndex","senderListEl","sender","senderCollectionListView","modelReceived","at","_onKeydown","trap","currentOffset","which","_listItem_onMousedown","clickedModel","metaKeyPressed","ctrlKey","metaKey","thisMethod","shiftKey","firstSelectedItemIndex","thisItemModel","clickedItemIndex","shiftKeyRootSelectedItemIndex","minSelectedItemIndex","Math","min","maxSelectedItemIndex","max","thisIndex","selection","getSelection","sel","removeAllRanges","union","_listItem_onDoubleClick","_listBackground_onClick","target","setDefaultModelViewConstructor","theConstructor","optionsDeclarationsProperty","optionsThatWereChanged","optionsThatWereChangedPreviousValues","thisOptionProperties","oldValue","newValue","onOptionsChanged","getOptions","optionsNames","pick","Container","views","_views","_indexByModel","_indexByCustom","_updateLength","customIndex","viewCid","modelCid","findByCid","findByCustom","findByIndex","values","findIndexByCid","any","key","method","tail","size","methods","toArray","unsavedModels","updateUnsavedModels","isEmpty","_unsavedChanges","findWhere","getPrompt","fnName","prompt","rest","evaluateModelFn","fn","isBoolean","_unsavedConfig","History","navigate","wrap","oldNav","fragment","confirm","onbeforeunload","Model","unsaved","_trackingChanges","_originalAttrs","startTracking","unloadRouterPrompt","unloadWindowPrompt","_resetTracking","_triggerUnsavedChanges","stopTracking","restartTracking","resetAttributes","attributes","unsavedAttributes","attrs","val","changed","old","isEqual","deepClone","set","oldSet","sync","oldSync","success","oldSuccess","textStatus","jqXHR","defaults","enabled","src","relationship_defaults","relationships","init_relationships","rels","get_relationships","set_parent","child_data","child_key","conditional","child","child_val","lookup","type","llms_builder","construct","get_model","class","get_collection","_maybe_set_parent_reference","child_model","get_child_props","props","get_parent","Image","Relationships","choice","uniqueId","choice_type","correct","marker","question_id","get_trash_id","is_selectable","get_choice_selectable","on","update_order","update_correct","count_correct","get_correct","siblings","question","self","get_choice_markers","choices","clarifications","default_choices","description","icon","image","keywords","placeholder","points","video","get_keywords","_get_choice_option","get_choice_type","get_min_choices","get_max_choices","get_multi_choices","option","fields","matches","match","realAttr","currentVal","get_edit_post_link","has_temp_id","admin_url","get_view_post_link","home_url","get_settings_fields","schema","schemas","isNumber","init_custom_schema","groups","group","flatten","field","attribute","customs","switch_attribute","attribute_prefix","Questions","QuestionChoices","QuestionType","Utilities","questions","question_type","content","description_enabled","multi_choices","menu_order","parent_id","title","video_enabled","video_src","_expanded","_ensure_min_choices","delay","update_points","add_choice","pubSub","before_save","atts","sync_type","get_l10n_type","plural","LLMS","l10n","translate","get_type_index","curr_type","get_type_iterator","get_qid","get_parent_question","is_in_group","get_parent_quiz","get_points","get_points_percentage","total","toFixed","update_parent","toggleable","label","tip","condition","text","url","Lesson","Question","QuizSchema","lesson_id","status","allowed_attempts","limit_attempts","limit_time","passing_percent","random_questions","time_limit","show_correct_answer","disable_retake","_points","permalink","_show_settings","_questions_loaded","get_total_points","add_question","load_questions","cb","Ajax","action","action_type","course_id","CourseModel","load_id","xhr","log","debug","res","assignments","label_after","tip_position","is_first_in_course","get_available_prereq_options","get_course","detail","date_format","timepicker","datepicker","Quiz","LessonSchema","parents","quiz","order","parent_course","course","parent_section","edit_url","view_url","audio_embed","has_prerequisite","require_passing_grade","require_assignment_passing_grade","video_embed","free_lesson","assignment","assignment_enabled","quiz_enabled","_forceSync","maybe_init_assignments","parent_section_index","lesson_index_in_section","section","curr_sec_index","%1$d","%2$s","lesson","curr_les_index","add_quiz","%1$s","is_first_in_section","is_last_in_course","is_last_in_section","get_prev","get_sibling","get_next","direction","is_course_limit_reached_f","sibling_index_increment","get_sibling_lesson_in_sibling_section_f","sibling_index","sibling_lesson","cur_section","sibling_section","on_reorder","validate_prereqs","prerequisite","Lessons","lessons","_selected","add_lesson","circular","_get_sibling","last","QuestionTypes","Sections","sections","add_section","add_existing_lesson","prepareQuizObjectForCloning","prepareAssignmentObjectForCloning","prepareExistingPostObjectDataForAddingOrCloning","get_selected_section","selected","lesson_points","Abstract","Course","QuestionChoice","Section","click a[href=\"#llms-detach-model\"]","click button.llms-detach-model","detach_model","preventDefault","stopPropagation","msg","%s","media_lib","click .llms-add-image","click a[href=\"#llms-edit-slug\"]","click a[href=\"#llms-remove-image\"]","change .llms-editable-select select","change .llms-switch input[type=\"checkbox\"]","change .llms-editable-radio input","focusin .llms-input","focusout .llms-input","keydown .llms-input","input .llms-input[type=\"number\"]","paste .llms-input[data-formatting]","get_allowed_tags","tag","trim","get_content","hasClass","stripFormatting","has_changed","is_valid","_validate_url","slug","beforeSend","Spinner","init_datepickers","datetimepicker","format","onClose","current_time","$input","blur","init_formatting_els","formatting","ed","Quill","modules","toolbar","keyboard","bindings","tab","handler","range","context","13","theme","delta","oldDelta","source","init_selects","llmsSelect2","width","on_blur","save_edits","revert_edits","on_focus","on_paste","originalEvent","clipboardData","getData","execCommand","on_select","multi","$selected","on_radio_select","on_keydown","keyCode","shift","open_media_lib","uploader","param","media","frames","file_frame","button","multiple","attachment","state","toJSON","sizes","params","open","remove_image","toggle_switch","init_editor","settings","editor","getEditor","getDefaultSettings","mediaButtons","tinymce","toolbar1","toolbar2","setup","on_editor_ready","make_slug_editable","$btn","$link","prevAll","prev","full_url","short_url","color","pointer-events","text-decoration","show","$ed","$parent","$label","prependTo","getContent","str","createElement","href","host","location","helper","maybe_hide_shiftable_buttons","old_index","new_index","shift_down","shift_up","subscriptions","get_subview","events_subscribe","func","events_unsubscribe","off","remove_subview","instance","remove_subviews","undelegateEvents","render_subviews","view_data","render_subview","set_state","click a[href=\"#llms-trash-model\"]","click button.llms-trash-model","trash_model","Detachable","Editable","Receivable","Shiftable","Subview","Trashable","Collections","Models","Views","extend_view","classname","register_collection","register_model","disable","enable","custom_schemas","custom","model_type","add_error_msg","err","message","check_for_changes","changes","get_unsaved_changes","has_unsaved_changes","saving","do_ajax_save","JSON","stringify","responseText","process_removals","process_updates","get_changed_attributes","exclude","omit","get_changes_to_object","object","changed_atts","model_changes","maybe_restart_tracking","unset","removals","detached","trash","trashed","coll","errors","info","process_object_updates","main_data","orig_id","updates","autosave","check_interval","check_interval_ms","save_now","heartbeat","connectNow","set_check_interval","ms","clearInterval","setInterval","statusText","data-id","data-section-id","className","click .edit-lesson","click .llms-headline","click .edit-quiz","click .edit-assignment","click .section-prev","click .section-next","click .shift-up--lesson","click .shift-down--lesson","open_assignment_editor","set_hash","open_lesson_editor","open_quiz_editor","section_next","_move_to_section","section_prev","subtab","hash","to_section","from_coll","LessonView","connectWith","cursor","handle","sortable_start","sortable_stop","LessonListView","click .expand","click .collapse","click .shift-up--section","click .shift-down--section","click .new-lesson","click .llms-builder-header","mouseenter .llms-lessons","toggle_expanded","lessonListView","on_lesson_add","dragTimeout","expand","collapse","el","active_lesson_change","maybe_hide_trash_button","add_new_lesson","current","previous","update","on_mouseenter","SectionView","mousedown > li.llms-section > .llms-builder-header .llms-headline","click ul.collection-view","SectionListView","sectionListView","active_section_change","on_section_add","on_section_toggle","on_section_select","expand_section","click .new-section","add_new_section","click .llms-settings-group-toggle","get_editor_fields","is_editor_field","get_groups","is_group_hidden","group_id","localStorage","getItem","get_switch_attribute","has_switch","is_default_field","is_switch_condition_met","switch_on","render_editor","wpEditor","render_select_options","option_html","setup_field","orig_field","field_index","classes","input_type","orig_settings","switch_off","has_images","should_rerender_on_toggle","field_type","toggle_group","$group","setItem","removeItem","SettingsFields","change_events","render_points_percentage","placement","style","animation","closeable","backdrop","onShow","onHide","container","webuiPopover","select2:select","post_type","searching_message","add_post","ajax","dataType","ajaxurl","term","page","_ajax_nonce","ajax_nonce","dropdownParent","escapeMarkup","markup","templateResult","render_result","$html","loading","$side","$main","Popover","QuestionSearch","click .llms-add-question","add_existing_question_click","add_new_question","dismissible","offsetLeft","offsetTop","add_existing_question","prepareQuestionObjectForCloning","QuestionView","change input[name=\"correct\"]","click .llms-action-icon[href=\"#llms-add-choice\"]","click .llms-action-icon[href=\"#llms-del-choice\"]","maybe_disable_buttons","del_choice","toggle_correct","ChoiceView","ChoiceListView","click .clone--question","click .delete--question","click .expand--question","click .collapse--question","change input[name=\"question_points\"]","multi_choices_toggle","choiceListView","questionListView","get_question_list","_get_question_clone","choice_clone","delete","selector","QuizModel","PostSearch","QuestionBank","QuestionList","bank","list","click #llms-existing-quiz","click #llms-new-quiz","click #llms-show-question-bank","click .bulk-toggle","render_points","on_trashed","last_group","alert","$questions","animate","scrollTop","bulk_toggle","expanded","add_new_quiz","add_existing_quiz","post_search_popover","add_existing_quiz_click","once","show_tools","addon_events","is_addon_available","get_view_events","click #llms-existing-assignment","click #llms-new-assignment","add_new_assignment","get_assignment","show_ad_popover","add_existing_assignment","add_existing_assignment_click","h3","btn","ad_popover","closeLabel","LessonEditor","Assignment","click .llms-editor-nav a[href=\"#llms-editor-close\"]","click .llms-editor-nav a:not([href=\"#llms-editor-close\"])","SidebarView","close_editor","switch_tab","LessonSearch","click #llms-new-section","click #llms-new-lesson","click #llms-existing-lesson","CourseView","draggable","maybe_add_initial_section","appendTo","cancel","connectToSortable","$els","click #llms-collapse-all","click #llms-expand-all","collapse_all","expand_all","Editor","Elements","elements","utilities","click #llms-save-button","click #llms-exit-button","click .llms-builder-error","changes_made","heartbeat_send","heartbeat_tick","on_lesson_select","on_editor_close","$saveButton","add_error","$err","prepend","clear_errors","exit_now","data-status","disabled","txt","is_editor_active","lesson_model","Hooks","CV","TrackIt","Construct","Debug","Schemas","Sync","value_compare","expected","actual","mixin","checked","oldEditor","autop","assignment_type","tasks","task","assignment_id","post_data","author","allowed_tags","not","replaceWith","innerHTML","Events","Sidebar","sidebar","$lesson","wait_for"],"mappings":"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","file":"../../js/llms-builder.min.js","sourcesContent":["(function($){\n","/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n\tvar main, req, makeMap, handlers,\n\t\tdefined = {},\n\t\twaiting = {},\n\t\tconfig = {},\n\t\tdefining = {},\n\t\thasOwn = Object.prototype.hasOwnProperty,\n\t\taps = [].slice,\n\t\tjsSuffixRegExp = /\\.js$/;\n\n\tfunction hasProp(obj, prop) {\n\t\treturn hasOwn.call(obj, prop);\n\t}\n\n\t/**\n\t * Given a relative module name, like ./something, normalize it to\n\t * a real name that can be mapped to a path.\n\t * @param {String} name the relative name\n\t * @param {String} baseName a real name that the name arg is relative\n\t * to.\n\t * @returns {String} normalized name\n\t */\n\tfunction normalize(name, baseName) {\n\t\tvar nameParts, nameSegment, mapValue, foundMap, lastIndex,\n\t\t\tfoundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n\t\t\tbaseParts = baseName && baseName.split(\"/\"),\n\t\t\tmap = config.map,\n\t\t\tstarMap = (map && map['*']) || {};\n\n\t\t//Adjust any relative paths.\n\t\tif (name) {\n\t\t\tname = name.split('/');\n\t\t\tlastIndex = name.length - 1;\n\n\t\t\t// If wanting node ID compatibility, strip .js from end\n\t\t\t// of IDs. Have to do this here, and not in nameToUrl\n\t\t\t// because node allows either .js or non .js to map\n\t\t\t// to same file.\n\t\t\tif (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n\t\t\t\tname[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n\t\t\t}\n\n\t\t\t// Starts with a '.' so need the baseName\n\t\t\tif (name[0].charAt(0) === '.' && baseParts) {\n\t\t\t\t//Convert baseName to array, and lop off the last part,\n\t\t\t\t//so that . matches that 'directory' and not name of the baseName's\n\t\t\t\t//module. For instance, baseName of 'one/two/three', maps to\n\t\t\t\t//'one/two/three.js', but we want the directory, 'one/two' for\n\t\t\t\t//this normalization.\n\t\t\t\tnormalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n\t\t\t\tname = normalizedBaseParts.concat(name);\n\t\t\t}\n\n\t\t\t//start trimDots\n\t\t\tfor (i = 0; i < name.length; i++) {\n\t\t\t\tpart = name[i];\n\t\t\t\tif (part === '.') {\n\t\t\t\t\tname.splice(i, 1);\n\t\t\t\t\ti -= 1;\n\t\t\t\t} else if (part === '..') {\n\t\t\t\t\t// If at the start, or previous value is still ..,\n\t\t\t\t\t// keep them so that when converted to a path it may\n\t\t\t\t\t// still work when converted to a path, even though\n\t\t\t\t\t// as an ID it is less than ideal. In larger point\n\t\t\t\t\t// releases, may be better to just kick out an error.\n\t\t\t\t\tif (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (i > 0) {\n\t\t\t\t\t\tname.splice(i - 1, 2);\n\t\t\t\t\t\ti -= 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t//end trimDots\n\n\t\t\tname = name.join('/');\n\t\t}\n\n\t\t//Apply map config if available.\n\t\tif ((baseParts || starMap) && map) {\n\t\t\tnameParts = name.split('/');\n\n\t\t\tfor (i = nameParts.length; i > 0; i -= 1) {\n\t\t\t\tnameSegment = nameParts.slice(0, i).join(\"/\");\n\n\t\t\t\tif (baseParts) {\n\t\t\t\t\t//Find the longest baseName segment match in the config.\n\t\t\t\t\t//So, do joins on the biggest to smallest lengths of baseParts.\n\t\t\t\t\tfor (j = baseParts.length; j > 0; j -= 1) {\n\t\t\t\t\t\tmapValue = map[baseParts.slice(0, j).join('/')];\n\n\t\t\t\t\t\t//baseName segment has config, find if it has one for\n\t\t\t\t\t\t//this name.\n\t\t\t\t\t\tif (mapValue) {\n\t\t\t\t\t\t\tmapValue = mapValue[nameSegment];\n\t\t\t\t\t\t\tif (mapValue) {\n\t\t\t\t\t\t\t\t//Match, update name to the new value.\n\t\t\t\t\t\t\t\tfoundMap = mapValue;\n\t\t\t\t\t\t\t\tfoundI = i;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (foundMap) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t//Check for a star map match, but just hold on to it,\n\t\t\t\t//if there is a shorter segment match later in a matching\n\t\t\t\t//config, then favor over this star map.\n\t\t\t\tif (!foundStarMap && starMap && starMap[nameSegment]) {\n\t\t\t\t\tfoundStarMap = starMap[nameSegment];\n\t\t\t\t\tstarI = i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!foundMap && foundStarMap) {\n\t\t\t\tfoundMap = foundStarMap;\n\t\t\t\tfoundI = starI;\n\t\t\t}\n\n\t\t\tif (foundMap) {\n\t\t\t\tnameParts.splice(0, foundI, foundMap);\n\t\t\t\tname = nameParts.join('/');\n\t\t\t}\n\t\t}\n\n\t\treturn name;\n\t}\n\n\tfunction makeRequire(relName, forceSync) {\n\t\treturn function () {\n\t\t\t//A version of a require function that passes a moduleName\n\t\t\t//value for items that may need to\n\t\t\t//look up paths relative to the moduleName\n\t\t\tvar args = aps.call(arguments, 0);\n\n\t\t\t//If first arg is not require('string'), and there is only\n\t\t\t//one arg, it is the array form without a callback. Insert\n\t\t\t//a null so that the following concat is correct.\n\t\t\tif (typeof args[0] !== 'string' && args.length === 1) {\n\t\t\t\targs.push(null);\n\t\t\t}\n\t\t\treturn req.apply(undef, args.concat([relName, forceSync]));\n\t\t};\n\t}\n\n\tfunction makeNormalize(relName) {\n\t\treturn function (name) {\n\t\t\treturn normalize(name, relName);\n\t\t};\n\t}\n\n\tfunction makeLoad(depName) {\n\t\treturn function (value) {\n\t\t\tdefined[depName] = value;\n\t\t};\n\t}\n\n\tfunction callDep(name) {\n\t\tif (hasProp(waiting, name)) {\n\t\t\tvar args = waiting[name];\n\t\t\tdelete waiting[name];\n\t\t\tdefining[name] = true;\n\t\t\tmain.apply(undef, args);\n\t\t}\n\n\t\tif (!hasProp(defined, name) && !hasProp(defining, name)) {\n\t\t\tthrow new Error('No ' + name);\n\t\t}\n\t\treturn defined[name];\n\t}\n\n\t//Turns a plugin!resource to [plugin, resource]\n\t//with the plugin being undefined if the name\n\t//did not have a plugin prefix.\n\tfunction splitPrefix(name) {\n\t\tvar prefix,\n\t\t\tindex = name ? name.indexOf('!') : -1;\n\t\tif (index > -1) {\n\t\t\tprefix = name.substring(0, index);\n\t\t\tname = name.substring(index + 1, name.length);\n\t\t}\n\t\treturn [prefix, name];\n\t}\n\n\t//Creates a parts array for a relName where first part is plugin ID,\n\t//second part is resource ID. Assumes relName has already been normalized.\n\tfunction makeRelParts(relName) {\n\t\treturn relName ? splitPrefix(relName) : [];\n\t}\n\n\t/**\n\t * Makes a name map, normalizing the name, and using a plugin\n\t * for normalization if necessary. Grabs a ref to plugin\n\t * too, as an optimization.\n\t */\n\tmakeMap = function (name, relParts) {\n\t\tvar plugin,\n\t\t\tparts = splitPrefix(name),\n\t\t\tprefix = parts[0],\n\t\t\trelResourceName = relParts[1];\n\n\t\tname = parts[1];\n\n\t\tif (prefix) {\n\t\t\tprefix = normalize(prefix, relResourceName);\n\t\t\tplugin = callDep(prefix);\n\t\t}\n\n\t\t//Normalize according\n\t\tif (prefix) {\n\t\t\tif (plugin && plugin.normalize) {\n\t\t\t\tname = plugin.normalize(name, makeNormalize(relResourceName));\n\t\t\t} else {\n\t\t\t\tname = normalize(name, relResourceName);\n\t\t\t}\n\t\t} else {\n\t\t\tname = normalize(name, relResourceName);\n\t\t\tparts = splitPrefix(name);\n\t\t\tprefix = parts[0];\n\t\t\tname = parts[1];\n\t\t\tif (prefix) {\n\t\t\t\tplugin = callDep(prefix);\n\t\t\t}\n\t\t}\n\n\t\t//Using ridiculous property names for space reasons\n\t\treturn {\n\t\t\tf: prefix ? prefix + '!' + name : name, //fullName\n\t\t\tn: name,\n\t\t\tpr: prefix,\n\t\t\tp: plugin\n\t\t};\n\t};\n\n\tfunction makeConfig(name) {\n\t\treturn function () {\n\t\t\treturn (config && config.config && config.config[name]) || {};\n\t\t};\n\t}\n\n\thandlers = {\n\t\trequire: function (name) {\n\t\t\treturn makeRequire(name);\n\t\t},\n\t\texports: function (name) {\n\t\t\tvar e = defined[name];\n\t\t\tif (typeof e !== 'undefined') {\n\t\t\t\treturn e;\n\t\t\t} else {\n\t\t\t\treturn (defined[name] = {});\n\t\t\t}\n\t\t},\n\t\tmodule: function (name) {\n\t\t\treturn {\n\t\t\t\tid: name,\n\t\t\t\turi: '',\n\t\t\t\texports: defined[name],\n\t\t\t\tconfig: makeConfig(name)\n\t\t\t};\n\t\t}\n\t};\n\n\tmain = function (name, deps, callback, relName) {\n\t\tvar cjsModule, depName, ret, map, i, relParts,\n\t\t\targs = [],\n\t\t\tcallbackType = typeof callback,\n\t\t\tusingExports;\n\n\t\t//Use name if no relName\n\t\trelName = relName || name;\n\t\trelParts = makeRelParts(relName);\n\n\t\t//Call the callback to define the module, if necessary.\n\t\tif (callbackType === 'undefined' || callbackType === 'function') {\n\t\t\t//Pull out the defined dependencies and pass the ordered\n\t\t\t//values to the callback.\n\t\t\t//Default to [require, exports, module] if no deps\n\t\t\tdeps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n\t\t\tfor (i = 0; i < deps.length; i += 1) {\n\t\t\t\tmap = makeMap(deps[i], relParts);\n\t\t\t\tdepName = map.f;\n\n\t\t\t\t//Fast path CommonJS standard dependencies.\n\t\t\t\tif (depName === \"require\") {\n\t\t\t\t\targs[i] = handlers.require(name);\n\t\t\t\t} else if (depName === \"exports\") {\n\t\t\t\t\t//CommonJS module spec 1.1\n\t\t\t\t\targs[i] = handlers.exports(name);\n\t\t\t\t\tusingExports = true;\n\t\t\t\t} else if (depName === \"module\") {\n\t\t\t\t\t//CommonJS module spec 1.1\n\t\t\t\t\tcjsModule = args[i] = handlers.module(name);\n\t\t\t\t} else if (hasProp(defined, depName) ||\n\t\t\t\t\t\t hasProp(waiting, depName) ||\n\t\t\t\t\t\t hasProp(defining, depName)) {\n\t\t\t\t\targs[i] = callDep(depName);\n\t\t\t\t} else if (map.p) {\n\t\t\t\t\tmap.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n\t\t\t\t\targs[i] = defined[depName];\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(name + ' missing ' + depName);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tret = callback ? callback.apply(defined[name], args) : undefined;\n\n\t\t\tif (name) {\n\t\t\t\t//If setting exports via \"module\" is in play,\n\t\t\t\t//favor that over return value and exports. After that,\n\t\t\t\t//favor a non-undefined return value over exports use.\n\t\t\t\tif (cjsModule && cjsModule.exports !== undef &&\n\t\t\t\t\t\tcjsModule.exports !== defined[name]) {\n\t\t\t\t\tdefined[name] = cjsModule.exports;\n\t\t\t\t} else if (ret !== undef || !usingExports) {\n\t\t\t\t\t//Use the return value from the function.\n\t\t\t\t\tdefined[name] = ret;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (name) {\n\t\t\t//May just be an object definition for the module. Only\n\t\t\t//worry about defining if have a module name.\n\t\t\tdefined[name] = callback;\n\t\t}\n\t};\n\n\trequirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n\t\tif (typeof deps === \"string\") {\n\t\t\tif (handlers[deps]) {\n\t\t\t\t//callback in this case is really relName\n\t\t\t\treturn handlers[deps](callback);\n\t\t\t}\n\t\t\t//Just return the module wanted. In this scenario, the\n\t\t\t//deps arg is the module name, and second arg (if passed)\n\t\t\t//is just the relName.\n\t\t\t//Normalize module name, if it contains . or ..\n\t\t\treturn callDep(makeMap(deps, makeRelParts(callback)).f);\n\t\t} else if (!deps.splice) {\n\t\t\t//deps is a config object, not an array.\n\t\t\tconfig = deps;\n\t\t\tif (config.deps) {\n\t\t\t\treq(config.deps, config.callback);\n\t\t\t}\n\t\t\tif (!callback) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (callback.splice) {\n\t\t\t\t//callback is an array, which means it is a dependency list.\n\t\t\t\t//Adjust args if there are dependencies\n\t\t\t\tdeps = callback;\n\t\t\t\tcallback = relName;\n\t\t\t\trelName = null;\n\t\t\t} else {\n\t\t\t\tdeps = undef;\n\t\t\t}\n\t\t}\n\n\t\t//Support require(['a'])\n\t\tcallback = callback || function () {};\n\n\t\t//If relName is a function, it is an errback handler,\n\t\t//so remove it.\n\t\tif (typeof relName === 'function') {\n\t\t\trelName = forceSync;\n\t\t\tforceSync = alt;\n\t\t}\n\n\t\t//Simulate async callback;\n\t\tif (forceSync) {\n\t\t\tmain(undef, deps, callback, relName);\n\t\t} else {\n\t\t\t//Using a non-zero value because of concern for what old browsers\n\t\t\t//do, and latest browsers \"upgrade\" to 4 if lower value is used:\n\t\t\t//http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n\t\t\t//If want a value immediately, use require('id') instead -- something\n\t\t\t//that works in almond on the global level, but not guaranteed and\n\t\t\t//unlikely to work in other AMD implementations.\n\t\t\tsetTimeout(function () {\n\t\t\t\tmain(undef, deps, callback, relName);\n\t\t\t}, 4);\n\t\t}\n\n\t\treturn req;\n\t};\n\n\t/**\n\t * Just drops the config on the floor, but returns req in case\n\t * the config return value is used.\n\t */\n\treq.config = function (cfg) {\n\t\treturn req(cfg);\n\t};\n\n\t/**\n\t * Expose module registry for debugging and tooling\n\t */\n\trequirejs._defined = defined;\n\n\tdefine = function (name, deps, callback) {\n\t\tif (typeof name !== 'string') {\n\t\t\tthrow new Error('See almond README: incorrect module build, no module name');\n\t\t}\n\n\t\t//This module may not have dependencies\n\t\tif (!deps.splice) {\n\t\t\t//deps is not an array, so probably means\n\t\t\t//an object literal or factory function for\n\t\t\t//the value. Adjust args.\n\t\t\tcallback = deps;\n\t\t\tdeps = [];\n\t\t}\n\n\t\tif (!hasProp(defined, name) && !hasProp(waiting, name)) {\n\t\t\twaiting[name] = [name, deps, callback];\n\t\t}\n\t};\n\n\tdefine.amd = {\n\t\tjQuery: true\n\t};\n}());\n\ndefine(\"vendor/almond\", function(){});\n\n","/**\n * This is a slightly modified and forward compatible version of the @wordpress/hooks package\n * as included in the Gutenberg feature plugin version 3.8.0\n */\nwindow.llms=window.llms||{};\n// use the core hooks if available\nif ( 'undefined' !== typeof window.wp && 'undefined' !== typeof window.wp.hooks ) {\n\twindow.llms.hooks = window.wp.hooks;\n// otherwise load our own\n} else {\n\twindow.llms.hooks=function(n){var r={};function e(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=n,e.c=r,e.d=function(n,r,t){e.o(n,r)||Object.defineProperty(n,r,{configurable:!1,enumerable:!0,get:t})},e.r=function(n){Object.defineProperty(n,\"__esModule\",{value:!0})},e.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(r,\"a\",r),r},e.o=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},e.p=\"\",e(e.s=209)}({209:function(n,r,e){\"use strict\";e.r(r);var t=function(n){return\"string\"!=typeof n||\"\"===n?(console.error(\"The namespace must be a non-empty string.\"),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\\-\\/]*$/.test(n)||(console.error(\"The namespace can only contain numbers, letters, dashes, periods, underscores and slashes.\"),!1)};var o=function(n){return\"string\"!=typeof n||\"\"===n?(console.error(\"The hook name must be a non-empty string.\"),!1):/^__/.test(n)?(console.error(\"The hook name cannot begin with `__`.\"),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(n)||(console.error(\"The hook name can only contain numbers, letters, dashes, periods and underscores.\"),!1)};var i=function(n){return function(r,e,i){var u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;if(o(r)&&t(e))if(\"function\"==typeof i)if(\"number\"==typeof u){var c={callback:i,priority:u,namespace:e};if(n[r]){for(var a=n[r].handlers,l=0;lu);)l++;a.splice(l,0,c),(n.__current||[]).forEach(function(n){n.name===r&&n.currentIndex>=l&&n.currentIndex++})}else n[r]={handlers:[c],runs:0};\"hookAdded\"!==r&&b(\"hookAdded\",r,e,i,u)}else console.error(\"If specified, the hook priority must be a number.\");else console.error(\"The hook callback must be a function.\")}};var u=function(n,r){return function(e,i){if(o(e)&&(r||t(i))){if(!n[e])return 0;var u=0;if(r)u=n[e].handlers.length,n[e]={runs:n[e].runs,handlers:[]};else for(var c=n[e].handlers,a=function(r){c[r].namespace===i&&(c.splice(r,1),u++,(n.__current||[]).forEach(function(n){n.name===e&&n.currentIndex>=r&&n.currentIndex--}))},l=c.length-1;l>=0;l--)a(l);return\"hookRemoved\"!==e&&b(\"hookRemoved\",e,i),u}}};var c=function(n){return function(r){return r in n}};var a=function(n,r){return function(e){n[e]||(n[e]={handlers:[],runs:0}),n[e].runs++;for(var t=n[e].handlers,o=arguments.length,i=new Array(o>1?o-1:0),u=1;u li, tbody > tr > td\" : \"_listItem_onMousedown\",\n\t\t\t\"dblclick > li, tbody > tr > td\" : \"_listItem_onDoubleClick\",\n\t\t\t\"click\" : \"_listBackground_onClick\",\n\t\t\t\"click ul.collection-view, table.collection-view\" : \"_listBackground_onClick\",\n\t\t\t\"keydown\" : \"_onKeydown\"\n\t\t},\n\n\t\t// only used if Backbone.Courier is available\n\t\tspawnMessages : {\n\t\t\t\"focus\" : \"focus\"\n\t\t},\n\n\t\t//only used if Backbone.Courier is available\n\t\tpassMessages : { \"*\" : \".\" },\n\n\t\t// viewOption definitions with default values.\n\t\tinitializationOptions : [\n\t\t\t{ \"collection\" : null },\n\t\t\t{ \"modelView\" : null },\n\t\t\t{ \"modelViewOptions\" : {} },\n\t\t\t{ \"itemTemplate\" : null },\n\t\t\t{ \"itemTemplateFunction\" : null },\n\t\t\t{ \"selectable\" : true },\n\t\t\t{ \"clickToSelect\" : true },\n\t\t\t{ \"selectableModelsFilter\" : null },\n\t\t\t{ \"visibleModelsFilter\" : null },\n\t\t\t{ \"sortableModelsFilter\" : null },\n\t\t\t{ \"selectMultiple\" : false },\n\t\t\t{ \"clickToToggle\" : false },\n\t\t\t{ \"processKeyEvents\" : true },\n\t\t\t{ \"sortable\" : false },\n\t\t\t{ \"sortableOptions\" : null },\n\t\t\t{ \"reuseModelViews\" : true },\n\t\t\t{ \"detachedRendering\" : false },\n\t\t\t{ \"emptyListCaption\" : null }\n\t\t],\n\n\t\tinitialize : function( options ) {\n\t\t\tBackbone.ViewOptions.add( this, \"initializationOptions\" ); // setup the ViewOptions functionality.\n\t\t\tthis.setOptions( options ); // and make use of any provided options\n\n\t\t\tif( ! this.collection ) this.collection = new Backbone.Collection();\n\n\t\t\tthis._hasBeenRendered = false;\n\n\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\tBackbone.Courier.add( this );\n\t\t\t}\n\n\t\t\tthis.$el.data( \"view\", this ); // needed for connected sortable lists\n\t\t\tthis.$el.addClass( \"collection-view collection-list\" ); // collection-list is in there for legacy purposes\n\t\t\tif( this.selectable ) this.$el.addClass( \"selectable\" );\n\n\t\t\tif( this.selectable && this.processKeyEvents )\n\t\t\t\tthis.$el.attr( \"tabindex\", 0 ); // so we get keyboard events\n\n\t\t\tthis.selectedItems = [];\n\n\t\t\tthis._updateItemTemplate();\n\n\t\t\tif( this.collection )\n\t\t\t\tthis._registerCollectionEvents();\n\n\t\t\tthis.viewManager = new ChildViewContainer();\n\t\t},\n\n\t\t_onOptionsChanged : function( changedOptions, originalOptions ) {\n\t\t\tvar _this = this;\n\t\t\tvar rerender = false;\n\n\t\t\t_.each( _.keys( changedOptions ), function( changedOptionKey ) {\n\t\t\t\tvar newVal = changedOptions[ changedOptionKey ];\n\t\t\t\tvar oldVal = originalOptions[ changedOptionKey ];\n\t\t\t\tswitch( changedOptionKey ) {\n\t\t\t\t\tcase \"collection\" :\n\t\t\t\t\t\tif ( newVal !== oldVal ) {\n\t\t\t\t\t\t\t_this.stopListening( oldVal );\n\t\t\t\t\t\t\t_this._registerCollectionEvents();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"selectMultiple\" :\n\t\t\t\t\t\tif( ! newVal && _this.selectedItems.length > 1 )\n\t\t\t\t\t\t\t_this.setSelectedModel( _.first( _this.selectedItems ), { by : \"cid\" } );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"selectable\" :\n\t\t\t\t\t\tif( ! newVal && _this.selectedItems.length > 0 )\n\t\t\t\t\t\t\t_this.setSelectedModels( [] );\n\n\t\t\t\t\t\tif( newVal && this.processKeyEvents ) _this.$el.attr( \"tabindex\", 0 ); // so we get keyboard events\n\t\t\t\t\t\telse _this.$el.removeAttr( \"tabindex\", 0 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sortable\" :\n\t\t\t\t\t\tchangedOptions.sortable ? _this._setupSortable() : _this.$el.sortable( \"destroy\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"selectableModelsFilter\" :\n\t\t\t\t\t\t_this.reapplyFilter( 'selectableModels' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sortableOptions\" :\n\t\t\t\t\t\t_this.$el.sortable( \"destroy\" );\n\t\t\t\t\t\t_this._setupSortable();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"sortableModelsFilter\" :\n\t\t\t\t\t\t_this.reapplyFilter( 'sortableModels' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"visibleModelsFilter\" :\n\t\t\t\t\t\t_this.reapplyFilter( 'visibleModels' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"itemTemplate\" :\n\t\t\t\t\t\t_this._updateItemTemplate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"processKeyEvents\" :\n\t\t\t\t\t\tif( newVal && this.selectable ) _this.$el.attr( \"tabindex\", 0 ); // so we get keyboard events\n\t\t\t\t\t\telse _this.$el.removeAttr( \"tabindex\", 0 );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"modelView\" :\n\t\t\t\t\t\t//need to remove all old view instances\n\t\t\t\t\t\t_this.viewManager.each( function( view ) {\n\t\t\t\t\t\t\t_this.viewManager.remove( view );\n\t\t\t\t\t\t\t// destroy the View itself\n\t\t\t\t\t\t\tview.remove();\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif( _.contains( kOptionsRequiringRerendering, changedOptionKey ) ) rerender = true;\n\t\t\t} );\n\n\t\t\tif( this._hasBeenRendered && rerender ) {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t},\n\n\t\tsetOption : function( optionName, optionValue ) { // now is merely a wrapper around backbone.viewOptions' setOptions()\n\t\t\tvar optionHash = {};\n\t\t\toptionHash[ optionName ] = optionValue;\n\t\t\tthis.setOptions( optionHash );\n\t\t},\n\n\t\tgetSelectedModel : function( options ) {\n\t\t\treturn this.selectedItems.length ? _.first( this.getSelectedModels( options ) ) : null;\n\t\t},\n\n\t\tgetSelectedModels : function ( options ) {\n\t\t\tvar _this = this;\n\n\t\t\toptions = _.extend( {}, {\n\t\t\t\tby : kDefaultReferenceBy\n\t\t\t}, options );\n\n\t\t\tvar referenceBy = options.by;\n\t\t\tvar items = [];\n\n\t\t\tswitch( referenceBy ) {\n\t\t\t\tcase \"id\" :\n\t\t\t\t\t_.each( this.selectedItems, function ( item ) {\n\t\t\t\t\t\titems.push( _this.collection.get( item ).id );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"cid\" :\n\t\t\t\t\titems = items.concat( this.selectedItems );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"offset\" :\n\t\t\t\t\tvar curLineNumber = 0;\n\n\t\t\t\t\tvar itemElements = this._getVisibleItemEls();\n\n\t\t\t\t\titemElements.each( function() {\n\t\t\t\t\t\tvar thisItemEl = $( this );\n\t\t\t\t\t\tif( thisItemEl.is( \".selected\" ) )\n\t\t\t\t\t\t\titems.push( curLineNumber );\n\t\t\t\t\t\tcurLineNumber++;\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"model\" :\n\t\t\t\t\t_.each( this.selectedItems, function ( item ) {\n\t\t\t\t\t\titems.push( _this.collection.get( item ) );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"view\" :\n\t\t\t\t\t_.each( this.selectedItems, function ( item ) {\n\t\t\t\t\t\titems.push( _this.viewManager.findByModel( _this.collection.get( item ) ) );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault :\n\t\t\t\t\tthrow new Error( \"Invalid referenceBy option: \" + referenceBy );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn items;\n\n\t\t},\n\n\t\tsetSelectedModels : function( newSelectedItems, options ) {\n\t\t\tif( ! _.isArray( newSelectedItems ) ) throw \"Invalid parameter value\";\n\t\t\tif( ! this.selectable && newSelectedItems.length > 0 ) return; // used to throw error, but there are some circumstances in which a list can be selectable at times and not at others, don't want to have to worry about catching errors\n\n\t\t\toptions = _.extend( {}, {\n\t\t\t\tsilent : false,\n\t\t\t\tby : kDefaultReferenceBy\n\t\t\t}, options );\n\n\t\t\tvar referenceBy = options.by;\n\t\t\tvar newSelectedCids = [];\n\n\t\t\tswitch( referenceBy ) {\n\t\t\t\tcase \"cid\" :\n\t\t\t\t\tnewSelectedCids = newSelectedItems;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"id\" :\n\t\t\t\t\tthis.collection.each( function( thisModel ) {\n\t\t\t\t\t\tif( _.contains( newSelectedItems, thisModel.id ) ) newSelectedCids.push( thisModel.cid );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"model\" :\n\t\t\t\t\tnewSelectedCids = _.pluck( newSelectedItems, \"cid\" );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"view\" :\n\t\t\t\t\t_.each( newSelectedItems, function( item ) {\n\t\t\t\t\t\tnewSelectedCids.push( item.model.cid );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"offset\" :\n\t\t\t\t\tvar curLineNumber = 0;\n\t\t\t\t\tvar selectedItems = [];\n\n\t\t\t\t\tvar itemElements = this._getVisibleItemEls();\n\t\t\t\t\titemElements.each( function() {\n\t\t\t\t\t\tvar thisItemEl = $( this );\n\t\t\t\t\t\tif( _.contains( newSelectedItems, curLineNumber ) )\n\t\t\t\t\t\t\tnewSelectedCids.push( thisItemEl.attr( \"data-model-cid\" ) );\n\t\t\t\t\t\tcurLineNumber++;\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault :\n\t\t\t\t\tthrow new Error( \"Invalid referenceBy option: \" + referenceBy );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar oldSelectedModels = this.getSelectedModels();\n\t\t\tvar oldSelectedCids = _.clone( this.selectedItems );\n\n\t\t\tthis.selectedItems = this._convertStringsToInts( newSelectedCids );\n\t\t\tthis._validateSelection();\n\n\t\t\tvar newSelectedModels = this.getSelectedModels();\n\n\t\t\tif( ! this._containSameElements( oldSelectedCids, this.selectedItems ) )\n\t\t\t{\n\t\t\t\tthis._addSelectedClassToSelectedItems( oldSelectedCids );\n\n\t\t\t\tif( ! options.silent )\n\t\t\t\t{\n\t\t\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\t\t\tthis.spawn( \"selectionChanged\", {\n\t\t\t\t\t\t\tselectedModels : newSelectedModels,\n\t\t\t\t\t\t\toldSelectedModels : oldSelectedModels\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else this.trigger( \"selectionChanged\", newSelectedModels, oldSelectedModels );\n\t\t\t\t}\n\n\t\t\t\tthis.updateDependentControls();\n\t\t\t}\n\t\t},\n\n\t\tsetSelectedModel : function( newSelectedItem, options ) {\n\t\t\tif( ! newSelectedItem && newSelectedItem !== 0 )\n\t\t\t\tthis.setSelectedModels( [], options );\n\t\t\telse\n\t\t\t\tthis.setSelectedModels( [ newSelectedItem ], options );\n\t\t},\n\n\t\tgetView : function( reference, options ) {\n\t\t\toptions = _.extend( {}, {\n\t\t\t\tby : kDefaultReferenceBy\n\t\t\t}, options );\n\n\t\t\tswitch( options.by ) {\n\t\t\t\tcase \"id\" :\n\t\t\t\tcase \"cid\" :\n\t\t\t\t\tvar model = this.collection.get( reference ) || null;\n\t\t\t\t\treturn model && this.viewManager.findByModel( model );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"offset\" :\n\t\t\t\t\tvar itemElements = this._getVisibleItemEls();\n\t\t\t\t\treturn $( itemElements.get( reference ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"model\" :\n\t\t\t\t\treturn this.viewManager.findByModel( reference );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault :\n\t\t\t\t\tthrow new Error( \"Invalid referenceBy option: \" + referenceBy );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\trender : function() {\n\t\t\tvar _this = this;\n\n\t\t\tthis._hasBeenRendered = true;\n\n\t\t\tif( this.selectable ) this._saveSelection();\n\n\t\t\tvar modelViewContainerEl;\n\n\t\t\t// If collection view element is a table and it has a tbody\n\t\t\t// within it, render the model views inside of the tbody\n\t\t\tmodelViewContainerEl = this._getContainerEl();\n\n\t\t\tvar oldViewManager = this.viewManager;\n\t\t\tthis.viewManager = new ChildViewContainer();\n\n\t\t\t// detach each of our subviews that we have already created to represent models\n\t\t\t// in the collection. We are going to re-use the ones that represent models that\n\t\t\t// are still here, instead of creating new ones, so that we don't loose state\n\t\t\t// information in the views.\n\t\t\toldViewManager.each( function( thisModelView ) {\n\t\t\t\t// to boost performance, only detach those views that will be sticking around.\n\t\t\t\t// we won't need the other ones later, so no need to detach them individually.\n\t\t\t\tif( this.reuseModelViews && this.collection.get( thisModelView.model.cid ) ) {\n\t\t\t\t\tthisModelView.$el.detach();\n\t\t\t\t} else thisModelView.remove();\n\t\t\t}, this );\n\n\t\t\tmodelViewContainerEl.empty();\n\t\t\tvar fragmentContainer;\n\n\t\t\tif( this.detachedRendering )\n\t\t\t\tfragmentContainer = document.createDocumentFragment();\n\n\t\t\tthis.collection.each( function( thisModel ) {\n\t\t\t\tvar thisModelView = oldViewManager.findByModelCid( thisModel.cid );\n\t\t\t\tif( ! this.reuseModelViews || _.isUndefined( thisModelView ) ) {\n\t\t\t\t\t// if the model view has not already been created on a\n\t\t\t\t\t// previous render then create and initialize it now.\n\t\t\t\t\tthisModelView = this._createNewModelView( thisModel, this._getModelViewOptions( thisModel ) );\n\t\t\t\t}\n\n\t\t\t\tthis._insertAndRenderModelView( thisModelView, fragmentContainer || modelViewContainerEl );\n\t\t\t}, this );\n\n\t\t\tif( this.detachedRendering )\n\t\t\t\tmodelViewContainerEl.append( fragmentContainer );\n\n\t\t\tif( this.sortable ) this._setupSortable();\n\n\t\t\tthis._showEmptyListCaptionIfAppropriate();\n\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"render\" );\n\t\t\telse this.trigger( \"render\" );\n\n\t\t\tif( this.selectable ) {\n\t\t\t\tthis._restoreSelection();\n\t\t\t\tthis.updateDependentControls();\n\t\t\t}\n\n\t\t\tthis.forceRerenderOnNextSortEvent = false;\n\t\t},\n\n\t\t_showEmptyListCaptionIfAppropriate : function ( ) {\n\t\t\tthis._removeEmptyListCaption();\n\n\t\t\tif( this.emptyListCaption ) {\n\t\t\t\tvar visibleEls = this._getVisibleItemEls();\n\n\t\t\t\tif( visibleEls.length === 0 ) {\n\t\t\t\t\tvar emptyListString;\n\n\t\t\t\t\tif( _.isFunction( this.emptyListCaption ) )\n\t\t\t\t\t\temptyListString = this.emptyListCaption();\n\t\t\t\t\telse\n\t\t\t\t\t\temptyListString = this.emptyListCaption;\n\n\t\t\t\t\tvar $emptyListCaptionEl;\n\t\t\t\t\tvar $varEl = $( \"\" + emptyListString + \" \" );\n\n\t\t\t\t\t// need to wrap the empty caption to make it fit the rendered list structure (either with an li or a tr td)\n\t\t\t\t\tif( this._isRenderedAsList() )\n\t\t\t\t\t\t$emptyListCaptionEl = $varEl.wrapAll( \" \" ).parent().css( kStylesForEmptyListCaption );\n\t\t\t\t\telse\n\t\t\t\t\t\t$emptyListCaptionEl = $varEl.wrapAll( \" \" ).parent().parent().css( kStylesForEmptyListCaption );\n\n\t\t\t\t\tthis._getContainerEl().append( $emptyListCaptionEl );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_removeEmptyListCaption : function( ) {\n\t\t\tif( this._isRenderedAsList() )\n\t\t\t\tthis._getContainerEl().find( \"> li > var.empty-list-caption\" ).parent().remove();\n\t\t\telse\n\t\t\t\tthis._getContainerEl().find( \"> tr > td > var.empty-list-caption\" ).parent().parent().remove();\n\t\t},\n\n\t\t// Render a single model view in container object \"parentElOrDocumentFragment\", which is either\n\t\t// a documentFragment or a jquery object. optional arg atIndex is not support for document fragments.\n\t\t_insertAndRenderModelView : function( modelView, parentElOrDocumentFragment, atIndex ) {\n\t\t\tvar thisModelViewWrapped = this._wrapModelView( modelView );\n\n\t\t\tif( parentElOrDocumentFragment.nodeType === 11 ) // if we are inserting into a document fragment, we need to use the DOM appendChild method\n\t\t\t\tparentElOrDocumentFragment.appendChild( thisModelViewWrapped.get( 0 ) );\n\t\t\telse {\n\t\t\t\tvar numberOfModelViewsCurrentlyInDOM = parentElOrDocumentFragment.children().length;\n\t\t\t\tif( ! _.isUndefined( atIndex ) && atIndex >= 0 && atIndex < numberOfModelViewsCurrentlyInDOM )\n\t\t\t\t\t// note this.collection.length might be greater than parentElOrDocumentFragment.children().length here\n\t\t\t\t\tparentElOrDocumentFragment.children().eq( atIndex ).before( thisModelViewWrapped );\n\t\t\t\telse {\n\t\t\t\t\t// if we are attempting to insert a modelView in an position that is beyond what is currently in the\n\t\t\t\t\t// DOM, then make a note that we need to re-render the collection view on the next sort event. If we dont\n\t\t\t\t\t// force this re-render, we can end up with modelViews in the wrong order when the collection defines\n\t\t\t\t\t// a comparator and multiple models are added at once. See https://github.com/rotundasoftware/backbone.collectionView/issues/69\n\t\t\t\t\tif( ! _.isUndefined( atIndex ) && atIndex > numberOfModelViewsCurrentlyInDOM ) this.forceRerenderOnNextSortEvent = true;\n\n\t\t\t\t\tparentElOrDocumentFragment.append( thisModelViewWrapped );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.viewManager.add( modelView );\n\n\t\t\t// we have to render the modelView after it has been put in context, as opposed to in the\n\t\t\t// initialize function of the modelView, because some rendering might be dependent on\n\t\t\t// the modelView's context in the DOM tree. For example, if the modelView stretch()'s itself,\n\t\t\t// it must be in full context in the DOM tree or else the stretch will not behave as intended.\n\t\t\tvar renderResult = modelView.render();\n\n\t\t\t// return false from the view's render function to hide this item\n\t\t\tif( renderResult === false ) {\n\t\t\t\tthisModelViewWrapped.hide();\n\t\t\t\tthisModelViewWrapped.addClass( \"not-visible\" );\n\t\t\t}\n\n\t\t\tvar hideThisModelView = false;\n\t\t\tif( _.isFunction( this.visibleModelsFilter ) )\n\t\t\t\thideThisModelView = ! this.visibleModelsFilter( modelView.model );\n\n\t\t\tif( thisModelViewWrapped.children().length === 1 )\n\t\t\t\tthisModelViewWrapped.toggle( ! hideThisModelView );\n\t\t\telse modelView.$el.toggle( ! hideThisModelView );\n\n\t\t\tthisModelViewWrapped.toggleClass( \"not-visible\", hideThisModelView );\n\n\t\t\tif( ! hideThisModelView && this.emptyListCaption ) this._removeEmptyListCaption();\n\t\t},\n\n\t\tupdateDependentControls : function() {\n\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\tthis.spawn( \"updateDependentControls\", {\n\t\t\t\t\tselectedModels : this.getSelectedModels()\n\t\t\t\t} );\n\t\t\t} else this.trigger( \"updateDependentControls\", this.getSelectedModels() );\n\t\t},\n\n\t\t// Override `Backbone.View.remove` to also destroy all Views in `viewManager`\n\t\tremove : function() {\n\t\t\tthis.viewManager.each( function( view ) {\n\t\t\t\tview.remove();\n\t\t\t} );\n\n\t\t\tBackbone.View.prototype.remove.apply( this, arguments );\n\t\t},\n\n\t\treapplyFilter : function( whichFilter ) {\n\t\t\tvar _this = this;\n\n\t\t\tif( ! _.contains( [ \"selectableModels\", \"sortableModels\", \"visibleModels\" ], whichFilter ) ) {\n\t\t\t\tthrow new Error( \"Invalid filter identifier supplied to reapplyFilter: \" + whichFilter );\n\t\t\t}\n\n\t\t\tswitch( whichFilter ) {\n\t\t\t\tcase \"visibleModels\":\n\t\t\t\t\t_this.viewManager.each( function( thisModelView ) {\n\t\t\t\t\t\tvar notVisible = _this.visibleModelsFilter && ! _this.visibleModelsFilter.call( _this, thisModelView.model );\n\n\t\t\t\t\t\tthisModelView.$el.toggleClass( \"not-visible\", notVisible );\n\t\t\t\t\t\tif( _this._modelViewHasWrapperLI( thisModelView ) ) {\n\t\t\t\t\t\t\tthisModelView.$el.closest( \"li\" ).toggleClass( \"not-visible\", notVisible ).toggle( ! notVisible );\n\t\t\t\t\t\t} else thisModelView.$el.toggle( ! notVisible );\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis._showEmptyListCaptionIfAppropriate();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sortableModels\":\n\t\t\t\t\t_this.$el.sortable( \"destroy\" );\n\n\t\t\t\t\t_this.viewManager.each( function( thisModelView ) {\n\t\t\t\t\t\tvar notSortable = _this.sortableModelsFilter && ! _this.sortableModelsFilter.call( _this, thisModelView.model );\n\n\t\t\t\t\t\tthisModelView.$el.toggleClass( \"not-sortable\", notSortable );\n\t\t\t\t\t\tif( _this._modelViewHasWrapperLI( thisModelView ) ) {\n\t\t\t\t\t\t\tthisModelView.$el.closest( \"li\" ).toggleClass( \"not-sortable\", notSortable );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\t_this._setupSortable();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"selectableModels\":\n\t\t\t\t\t_this.viewManager.each( function( thisModelView ) {\n\t\t\t\t\t\tvar notSelectable = _this.selectableModelsFilter && ! _this.selectableModelsFilter.call( _this, thisModelView.model );\n\n\t\t\t\t\t\tthisModelView.$el.toggleClass( \"not-selectable\", notSelectable );\n\t\t\t\t\t\tif( _this._modelViewHasWrapperLI( thisModelView ) ) {\n\t\t\t\t\t\t\tthisModelView.$el.closest( \"li\" ).toggleClass( \"not-selectable\", notSelectable );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\t_this._validateSelection();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\t// A method to remove the view relating to model.\n\t\t_removeModelView : function( modelView ) {\n\t\t\tif( this.selectable ) this._saveSelection();\n\n\t\t\tthis.viewManager.remove( modelView ); // Remove the view from the viewManager\n\t\t\tif( this._modelViewHasWrapperLI( modelView ) ) modelView.$el.parent().remove(); // Remove the li wrapper from the DOM\n\t\t\tmodelView.remove(); // Remove the view from the DOM and stop listening to events\n\n\t\t\tif( this.selectable ) this._restoreSelection();\n\n\t\t\tthis._showEmptyListCaptionIfAppropriate();\n\t\t},\n\n\t\t_validateSelectionAndRender : function() {\n\t\t\tthis._validateSelection();\n\t\t\tthis.render();\n\t\t},\n\n\t\t_registerCollectionEvents : function() {\n\n\t\t\tthis.listenTo( this.collection, \"add\", function( model ) {\n\t\t\t\tvar modelView;\n\t\t\t\tif( this._hasBeenRendered ) {\n\t\t\t\t\tmodelView = this._createNewModelView( model, this._getModelViewOptions( model ) );\n\t\t\t\t\tthis._insertAndRenderModelView( modelView, this._getContainerEl(), this.collection.indexOf( model ) );\n\t\t\t\t}\n\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"add\", modelView );\n\t\t\t\telse this.trigger( \"add\", modelView );\n\t\t\t} );\n\n\t\t\tthis.listenTo( this.collection, \"remove\", function( model ) {\n\t\t\t\tvar modelView;\n\n\t\t\t\tif( this._hasBeenRendered ) {\n\t\t\t\t\tmodelView = this.viewManager.findByModelCid( model.cid );\n\t\t\t\t\tthis._removeModelView( modelView );\n\t\t\t\t}\n\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"remove\" );\n\t\t\t\telse this.trigger( \"remove\" );\n\t\t\t} );\n\n\t\t\tthis.listenTo( this.collection, \"reset\", function() {\n\t\t\t\tif( this._hasBeenRendered ) this.render();\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"reset\" );\n\t\t\t\telse this.trigger( \"reset\" );\n\t\t\t} );\n\n\t\t\t// we should not be listening to change events on the model as a default behavior. the models\n\t\t\t// should be responsible for re-rendering themselves if necessary, and if the collection does\n\t\t\t// also need to re-render as a result of a model change, this should be handled by overriding\n\t\t\t// this method. by default the collection view should not re-render in response to model changes\n\t\t\t// this.listenTo( this.collection, \"change\", function( model ) {\n\t\t\t// \tif( this._hasBeenRendered ) this.viewManager.findByModel( model ).render();\n\t\t\t// \tif( this._isBackboneCourierAvailable() )\n\t\t\t// \t\tthis.spawn( \"change\", { model : model } );\n\t\t\t// } );\n\n\t\t\tthis.listenTo( this.collection, \"sort\", function( collection, options ) {\n\t\t\t\tif( this._hasBeenRendered && ( options.add !== true || this.forceRerenderOnNextSortEvent ) ) this.render();\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"sort\" );\n\t\t\t\telse this.trigger( \"sort\" );\n\t\t\t} );\n\t\t},\n\n\t\t_getContainerEl : function() {\n\t\t\tif ( this._isRenderedAsTable() ) {\n\t\t\t\t// not all tables have a tbody, so we test\n\t\t\t\tvar tbody = this.$el.find( \"> tbody\" );\n\t\t\t\tif ( tbody.length > 0 )\n\t\t\t\t\treturn tbody;\n\t\t\t}\n\t\t\treturn this.$el;\n\t\t},\n\n\t\t_getClickedItemId : function( theEvent ) {\n\t\t\tvar clickedItemId = null;\n\n\t\t\t// important to use currentTarget as opposed to target, since we could be bubbling\n\t\t\t// an event that took place within another collectionList\n\t\t\tvar clickedItemEl = $( theEvent.currentTarget );\n\t\t\tif( clickedItemEl.closest( \".collection-view\" ).get(0) !== this.$el.get(0) ) return;\n\n\t\t\t// determine which list item was clicked. If we clicked in the blank area\n\t\t\t// underneath all the elements, we want to know that too, since in this\n\t\t\t// case we will want to deselect all elements. so check to see if the clicked\n\t\t\t// DOM element is the list itself to find that out.\n\t\t\tvar clickedItem = clickedItemEl.closest( \"[data-model-cid]\" );\n\t\t\tif( clickedItem.length > 0 )\n\t\t\t{\n\t\t\t\tclickedItemId = clickedItem.attr( \"data-model-cid\" );\n\t\t\t\tif( $.isNumeric( clickedItemId ) ) clickedItemId = parseInt( clickedItemId, 10 );\n\t\t\t}\n\n\t\t\treturn clickedItemId;\n\t\t},\n\n\t\t_updateItemTemplate : function() {\n\t\t\tvar itemTemplateHtml;\n\t\t\tif( this.itemTemplate )\n\t\t\t{\n\t\t\t\tif( $( this.itemTemplate ).length === 0 )\n\t\t\t\t\tthrow \"Could not find item template from selector: \" + this.itemTemplate;\n\n\t\t\t\titemTemplateHtml = $( this.itemTemplate ).html();\n\t\t\t}\n\t\t\telse\n\t\t\t\titemTemplateHtml = this.$( \".item-template\" ).html();\n\n\t\t\tif( itemTemplateHtml ) this.itemTemplateFunction = _.template( itemTemplateHtml );\n\n\t\t},\n\n\t\t_validateSelection : function() {\n\t\t\t// note can't use the collection's proxy to underscore because \"cid\" is not an attribute,\n\t\t\t// but an element of the model object itself.\n\t\t\tvar modelReferenceIds = _.pluck( this.collection.models, \"cid\" );\n\t\t\tthis.selectedItems = _.intersection( modelReferenceIds, this.selectedItems );\n\n\t\t\tif( _.isFunction( this.selectableModelsFilter ) )\n\t\t\t{\n\t\t\t\tthis.selectedItems = _.filter( this.selectedItems, function( thisItemId ) {\n\t\t\t\t\treturn this.selectableModelsFilter.call( this, this.collection.get( thisItemId ) );\n\t\t\t\t}, this );\n\t\t\t}\n\t\t},\n\n\t\t_saveSelection : function() {\n\t\t\t// save the current selection. use restoreSelection() to restore the selection to the state it was in the last time saveSelection() was called.\n\t\t\tif( ! this.selectable ) throw \"Attempt to save selection on non-selectable list\";\n\t\t\tthis.savedSelection = {\n\t\t\t\titems : _.clone( this.selectedItems ),\n\t\t\t\toffset : this.getSelectedModel( { by : \"offset\" } )\n\t\t\t};\n\t\t},\n\n\t\t_restoreSelection : function() {\n\t\t\tif( ! this.savedSelection ) throw \"Attempt to restore selection but no selection has been saved!\";\n\n\t\t\t// reset selectedItems to empty so that we \"redraw\" all \"selected\" classes\n\t\t\t// when we set our new selection. We do this because it is likely that our\n\t\t\t// contents have been refreshed, and we have thus lost all old \"selected\" classes.\n\t\t\tthis.setSelectedModels( [], { silent : true } );\n\n\t\t\tif( this.savedSelection.items.length > 0 )\n\t\t\t{\n\t\t\t\t// first try to restore the old selected items using their reference ids.\n\t\t\t\tthis.setSelectedModels( this.savedSelection.items, { by : \"cid\", silent : true } );\n\n\t\t\t\t// all the items with the saved reference ids have been removed from the list.\n\t\t\t\t// ok. try to restore the selection based on the offset that used to be selected.\n\t\t\t\t// this is the expected behavior after a item is deleted from a list (i.e. select\n\t\t\t\t// the line that immediately follows the deleted line).\n\t\t\t\tif( this.selectedItems.length === 0 )\n\t\t\t\t\tthis.setSelectedModel( this.savedSelection.offset, { by : \"offset\" } );\n\n\t\t\t\t// Trigger a selection changed if the previously selected items were not all found\n\t\t\t\tif (this.selectedItems.length !== this.savedSelection.items.length)\n\t\t\t\t{\n\t\t\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\t\t\tthis.spawn( \"selectionChanged\", {\n\t\t\t\t\t\t\tselectedModels : this.getSelectedModels(),\n\t\t\t\t\t\t\toldSelectedModels : []\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else this.trigger( \"selectionChanged\", this.getSelectedModels(), [] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_addSelectedClassToSelectedItems : function( oldItemsIdsWithSelectedClass ) {\n\t\t\tif( _.isUndefined( oldItemsIdsWithSelectedClass ) ) oldItemsIdsWithSelectedClass = [];\n\n\t\t\t// oldItemsIdsWithSelectedClass is used for optimization purposes only. If this info is supplied then we\n\t\t\t// only have to add / remove the \"selected\" class from those items that \"selected\" state has changed.\n\n\t\t\tvar itemsIdsFromWhichSelectedClassNeedsToBeRemoved = oldItemsIdsWithSelectedClass;\n\t\t\titemsIdsFromWhichSelectedClassNeedsToBeRemoved = _.without( itemsIdsFromWhichSelectedClassNeedsToBeRemoved, this.selectedItems );\n\n\t\t\t_.each( itemsIdsFromWhichSelectedClassNeedsToBeRemoved, function( thisItemId ) {\n\t\t\t\tthis._getContainerEl().find( \"[data-model-cid=\" + thisItemId + \"]\" ).removeClass( \"selected\" );\n\n\t\t\t\tif( this._isRenderedAsList() ) {\n\t\t\t\t\tthis._getContainerEl().find( \"li[data-model-cid=\" + thisItemId + \"] > *\" ).removeClass( \"selected\" );\n\t\t\t\t}\n\t\t\t}, this );\n\n\t\t\tvar itemsIdsFromWhichSelectedClassNeedsToBeAdded = this.selectedItems;\n\t\t\titemsIdsFromWhichSelectedClassNeedsToBeAdded = _.without( itemsIdsFromWhichSelectedClassNeedsToBeAdded, oldItemsIdsWithSelectedClass );\n\n\t\t\t_.each( itemsIdsFromWhichSelectedClassNeedsToBeAdded, function( thisItemId ) {\n\t\t\t\tthis._getContainerEl().find( \"[data-model-cid=\" + thisItemId + \"]\" ).addClass( \"selected\" );\n\n\t\t\t\tif( this._isRenderedAsList() ) {\n\t\t\t\t\tthis._getContainerEl().find( \"li[data-model-cid=\" + thisItemId + \"] > *\" ).addClass( \"selected\" );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t},\n\n\t\t_reorderCollectionBasedOnHTML : function() {\n\n\t\t\tvar _this = this;\n\n\t\t\tthis._getContainerEl().children().each( function() {\n\t\t\t\tvar thisModelCid = $( this ).attr( \"data-model-cid\" );\n\n\t\t\t\tif( thisModelCid )\n\t\t\t\t{\n\t\t\t\t\t// remove the current model and then add it back (at the end of the collection).\n\t\t\t\t\t// When we are done looping through all models, they will be in the correct order.\n\t\t\t\t\tvar thisModel = _this.collection.get( thisModelCid );\n\t\t\t\t\tif( thisModel )\n\t\t\t\t\t{\n\t\t\t\t\t\t_this.collection.remove( thisModel, { silent : true } );\n\t\t\t\t\t\t_this.collection.add( thisModel, { silent : true, sort : ! _this.collection.comparator } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif( this._isBackboneCourierAvailable() ) this.spawn( \"reorder\" );\n\t\t\telse this.collection.trigger( \"reorder\" );\n\n\t\t\tif( this.collection.comparator ) this.collection.sort();\n\n\t\t},\n\n\t\t_getModelViewConstructor : function( thisModel ) {\n\t\t\treturn this.modelView || mDefaultModelViewConstructor;\n\t\t},\n\n\t\t_getModelViewOptions : function( thisModel ) {\n\t\t\tvar modelViewOptions = this.modelViewOptions;\n\t\t\tif( _.isFunction( modelViewOptions ) ) modelViewOptions = modelViewOptions( thisModel );\n\n\t\t\treturn _.extend( { model : thisModel }, modelViewOptions );\n\t\t},\n\n\t\t_createNewModelView : function( model, modelViewOptions ) {\n\t\t\tvar modelViewConstructor = this._getModelViewConstructor( model );\n\t\t\tif( _.isUndefined( modelViewConstructor ) ) throw \"Could not find modelView constructor for model\";\n\n\t\t\tvar newModelView = new( modelViewConstructor )( modelViewOptions );\n\t\t\tnewModelView.collectionListView = newModelView.collectionView = this; // collectionListView for legacy\n\n\t\t\treturn newModelView;\n\t\t},\n\n\t\t_wrapModelView : function( modelView ) {\n\t\t\tvar _this = this;\n\n\t\t\t// we use items client ids as opposed to real ids, since we may not have a representation\n\t\t\t// of these models on the server\n\t\t\tvar modelViewWrapperEl;\n\n\t\t\tif( this._isRenderedAsTable() ) {\n\t\t\t\t// if we are rendering the collection in a table, the template $el is a tr so we just need to set the data-model-cid\n\t\t\t\tmodelViewWrapperEl = modelView.$el;\n\t\t\t\tmodelView.$el.attr( \"data-model-cid\", modelView.model.cid );\n\t\t\t}\n\t\t\telse if( this._isRenderedAsList() ) {\n\t\t\t\t// if we are rendering the collection in a list, we need wrap each item in an (if its not already an )\n\t\t\t\t// and set the data-model-cid\n\t\t\t\tif( modelView.$el.is( \"li\" ) ) {\n\t\t\t\t\tmodelViewWrapperEl = modelView.$el;\n\t\t\t\t\tmodelView.$el.attr( \"data-model-cid\", modelView.model.cid );\n\t\t\t\t} else {\n\t\t\t\t\tmodelViewWrapperEl = modelView.$el.wrapAll( \" \" ).parent();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif( _.isFunction( this.sortableModelsFilter ) )\n\t\t\t\tif( ! this.sortableModelsFilter.call( _this, modelView.model ) ) {\n\t\t\t\t\tmodelViewWrapperEl.addClass( \"not-sortable\" );\n\t\t\t\t\tmodelView.$el.addClass( \"not-selectable\" );\n\t\t\t\t}\n\n\t\t\tif( _.isFunction( this.selectableModelsFilter ) )\n\t\t\t\tif( ! this.selectableModelsFilter.call( _this, modelView.model ) ) {\n\t\t\t\t\tmodelViewWrapperEl.addClass( \"not-selectable\" );\n\t\t\t\t\tmodelView.$el.addClass( \"not-selectable\" );\n\t\t\t\t}\n\n\t\t\treturn modelViewWrapperEl;\n\t\t},\n\n\t\t_convertStringsToInts : function( theArray ) {\n\t\t\treturn _.map( theArray, function( thisEl ) {\n\t\t\t\tif( ! _.isString( thisEl ) ) return thisEl;\n\t\t\t\tvar thisElAsNumber = parseInt( thisEl, 10 );\n\t\t\t\treturn( thisElAsNumber == thisEl ? thisElAsNumber : thisEl );\n\t\t\t} );\n\t\t},\n\n\t\t_containSameElements : function( arrayA, arrayB ) {\n\t\t\tif( arrayA.length != arrayB.length ) return false;\n\t\t\tvar intersectionSize = _.intersection( arrayA, arrayB ).length;\n\t\t\treturn intersectionSize == arrayA.length; // and must also equal arrayB.length, since arrayA.length == arrayB.length\n\t\t},\n\n\t\t_isRenderedAsTable : function() {\n\t\t\treturn this.$el.prop( \"tagName\" ).toLowerCase() === \"table\";\n\t\t},\n\n\t\t_isRenderedAsList : function() {\n\t\t\treturn ! this._isRenderedAsTable();\n\t\t},\n\n\t\t_modelViewHasWrapperLI : function( modelView ) {\n\t\t\treturn this._isRenderedAsList() && ! modelView.$el.is( \"li\" );\n\t\t},\n\n\t\t// Returns the wrapper HTML element for each visible modelView.\n\t\t// When rendering in a table context, the returned elements are the $el of each modelView.\n\t\t// When rendering in a list context,\n\t\t// If the $el of the modelView is an , the returned elements are the $el of each modelView.\n\t\t// Otherwise, the returned elements are the 's the collectionView wrapped around each modelView $el.\n\t\t_getVisibleItemEls : function() {\n\t\t\tvar itemElements = [];\n\t\t\titemElements = this._getContainerEl().find( \"> [data-model-cid]:not(.not-visible)\" );\n\n\t\t\treturn itemElements;\n\t\t},\n\n\t\t_charCodes : {\n\t\t\tupArrow : 38,\n\t\t\tdownArrow : 40\n\t\t},\n\n\t\t_isBackboneCourierAvailable : function() {\n\t\t\treturn !_.isUndefined( Backbone.Courier );\n\t\t},\n\n\t\t_setupSortable : function() {\n\t\t\tvar sortableOptions = _.extend( {\n\t\t\t\taxis : \"y\",\n\t\t\t\tdistance : 10,\n\t\t\t\tforcePlaceholderSize : true,\n\t\t\t\titems : this._isRenderedAsTable() ? \"> tbody > tr:not(.not-sortable)\" : \"> li:not(.not-sortable)\",\n\t\t\t\tstart : _.bind( this._sortStart, this ),\n\t\t\t\tchange : _.bind( this._sortChange, this ),\n\t\t\t\tstop : _.bind( this._sortStop, this ),\n\t\t\t\treceive : _.bind( this._receive, this ),\n\t\t\t\tover : _.bind( this._over, this )\n\t\t\t}, _.result( this, \"sortableOptions\" ) );\n\n\t\t\tthis.$el = this.$el.sortable( sortableOptions );\n\t\t\t//this.$el.sortable( \"enable\" ); // in case it was disabled previously\n\t\t},\n\n\t\t_sortStart : function( event, ui ) {\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"sortStart\", { modelBeingSorted : modelBeingSorted } );\n\t\t\telse this.trigger( \"sortStart\", modelBeingSorted );\n\t\t},\n\n\t\t_sortChange : function( event, ui ) {\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"sortChange\", { modelBeingSorted : modelBeingSorted } );\n\t\t\telse this.trigger( \"sortChange\", modelBeingSorted );\n\t\t},\n\n\t\t_sortStop : function( event, ui ) {\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\t\t\tvar modelViewContainerEl = this._getContainerEl();\n\t\t\tvar newIndex = modelViewContainerEl.children().index( ui.item );\n\n\t\t\tif( newIndex == -1 && modelBeingSorted ) {\n\t\t\t\t// the element was removed from this list. can happen if this sortable is connected\n\t\t\t\t// to another sortable, and the item was dropped into the other sortable.\n\t\t\t\tthis.collection.remove( modelBeingSorted );\n\t\t\t}\n\n\t\t\tif( ! modelBeingSorted ) return; // something is wacky. we don't mess with this case, preferring to guarantee that we can always provide a reference to the model\n\n\t\t\tthis._reorderCollectionBasedOnHTML();\n\t\t\tthis.updateDependentControls();\n\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"sortStop\", { modelBeingSorted : modelBeingSorted, newIndex : newIndex } );\n\t\t\telse this.trigger( \"sortStop\", modelBeingSorted, newIndex );\n\t\t},\n\n\t\t_receive : function( event, ui ) {\n\n\t\t\tvar senderListEl = ui.sender;\n\t\t\tvar senderCollectionListView = senderListEl.data( \"view\" );\n\t\t\tif( ! senderCollectionListView || ! senderCollectionListView.collection ) return;\n\n\t\t\tvar newIndex = this._getContainerEl().children().index( ui.item );\n\t\t\tvar modelReceived = senderCollectionListView.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\t\t\tsenderCollectionListView.collection.remove( modelReceived );\n\t\t\tthis.collection.add( modelReceived, { at : newIndex } );\n\t\t\tmodelReceived.collection = this.collection; // otherwise will not get properly set, since modelReceived.collection might already have a value.\n\t\t\tthis.setSelectedModel( modelReceived );\n\t\t},\n\n\t\t_over : function( event, ui ) {\n\t\t\t// when an item is being dragged into the sortable,\n\t\t\t// hide the empty list caption if it exists\n\t\t\tthis._getContainerEl().find( \"> var.empty-list-caption\" ).hide();\n\t\t},\n\n\t\t_onKeydown : function( event ) {\n\t\t\tif( ! this.processKeyEvents ) return true;\n\n\t\t\tvar trap = false;\n\n\t\t\tif( this.getSelectedModels( { by : \"offset\" } ).length == 1 )\n\t\t\t{\n\t\t\t\t// need to trap down and up arrows or else the browser\n\t\t\t\t// will end up scrolling a autoscroll div.\n\n\t\t\t\tvar currentOffset = this.getSelectedModel( { by : \"offset\" } );\n\t\t\t\tif( event.which === this._charCodes.upArrow && currentOffset !== 0 )\n\t\t\t\t{\n\t\t\t\t\tthis.setSelectedModel( currentOffset - 1, { by : \"offset\" } );\n\t\t\t\t\ttrap = true;\n\t\t\t\t}\n\t\t\t\telse if( event.which === this._charCodes.downArrow && currentOffset !== this.collection.length - 1 )\n\t\t\t\t{\n\t\t\t\t\tthis.setSelectedModel( currentOffset + 1, { by : \"offset\" } );\n\t\t\t\t\ttrap = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ! trap;\n\t\t},\n\n\t\t_listItem_onMousedown : function( theEvent ) {\n\t\t\tvar clickedItemId = this._getClickedItemId( theEvent );\n\n\t\t\tif( clickedItemId ) {\n\t\t\t\tvar clickedModel = this.collection.get( clickedItemId );\n\t\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\tclickedModel : clickedModel,\n\t\t\t\t\t\tmetaKeyPressed : theEvent.ctrlKey || theEvent.metaKey\n\t\t\t\t\t};\n\n\t\t\t\t\t_.each( [ 'preventDefault', 'stopPropagation', 'stopImmediatePropagation' ], function( thisMethod ) {\n\t\t\t\t\t\tdata[ thisMethod ] = function() {\n\t\t\t\t\t\t\ttheEvent[ thisMethod ]();\n\t\t\t\t\t\t};\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis.spawn( \"click\", data );\n\t\t\t\t}\n\t\t\t\telse this.trigger( \"click\", clickedModel );\n\t\t\t}\n\n\t\t\tif( ! this.selectable || ! this.clickToSelect ) return;\n\n\t\t\tif( clickedItemId )\n\t\t\t{\n\t\t\t\t// Exit if an unselectable item was clicked\n\t\t\t\tif( _.isFunction( this.selectableModelsFilter ) &&\n\t\t\t\t\t! this.selectableModelsFilter.call( this, this.collection.get( clickedItemId ) ) )\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// a selectable list item was clicked\n\t\t\t\tif( this.selectMultiple && theEvent.shiftKey )\n\t\t\t\t{\n\t\t\t\t\tvar firstSelectedItemIndex = -1;\n\n\t\t\t\t\tif( this.selectedItems.length > 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.collection.find( function( thisItemModel ) {\n\t\t\t\t\t\t\tfirstSelectedItemIndex++;\n\n\t\t\t\t\t\t\t// exit when we find our first selected element\n\t\t\t\t\t\t\treturn _.contains( this.selectedItems, thisItemModel.cid );\n\t\t\t\t\t\t}, this );\n\t\t\t\t\t}\n\n\t\t\t\t\tvar clickedItemIndex = -1;\n\t\t\t\t\tthis.collection.find( function( thisItemModel ) {\n\t\t\t\t\t\tclickedItemIndex++;\n\n\t\t\t\t\t\t// exit when we find the clicked element\n\t\t\t\t\t\treturn thisItemModel.cid == clickedItemId;\n\t\t\t\t\t}, this );\n\n\t\t\t\t\tvar shiftKeyRootSelectedItemIndex = firstSelectedItemIndex == -1 ? clickedItemIndex : firstSelectedItemIndex;\n\t\t\t\t\tvar minSelectedItemIndex = Math.min( clickedItemIndex, shiftKeyRootSelectedItemIndex );\n\t\t\t\t\tvar maxSelectedItemIndex = Math.max( clickedItemIndex, shiftKeyRootSelectedItemIndex );\n\n\t\t\t\t\tvar newSelectedItems = [];\n\t\t\t\t\tfor( var thisIndex = minSelectedItemIndex; thisIndex <= maxSelectedItemIndex; thisIndex ++ )\n\t\t\t\t\t\tnewSelectedItems.push( this.collection.at( thisIndex ).cid );\n\t\t\t\t\tthis.setSelectedModels( newSelectedItems, { by : \"cid\" } );\n\n\t\t\t\t\t// shift clicking will usually highlight selectable text, which we do not want.\n\t\t\t\t\t// this is a cross browser (hopefully) snippet that deselects all text selection.\n\t\t\t\t\tif( document.selection && document.selection.empty )\n\t\t\t\t\t\tdocument.selection.empty();\n\t\t\t\t\telse if(window.getSelection) {\n\t\t\t\t\t\tvar sel = window.getSelection();\n\t\t\t\t\t\tif( sel && sel.removeAllRanges )\n\t\t\t\t\t\t\tsel.removeAllRanges();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( ( this.selectMultiple || _.contains( this.selectedItems, clickedItemId ) ) && ( this.clickToToggle || theEvent.metaKey || theEvent.ctrlKey ) )\n\t\t\t\t{\n\t\t\t\t\tif( _.contains( this.selectedItems, clickedItemId ) )\n\t\t\t\t\t\tthis.setSelectedModels( _.without( this.selectedItems, clickedItemId ), { by : \"cid\" } );\n\t\t\t\t\telse this.setSelectedModels( _.union( this.selectedItems, [clickedItemId] ), { by : \"cid\" } );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tthis.setSelectedModels( [ clickedItemId ], { by : \"cid\" } );\n\t\t\t}\n\t\t\telse\n\t\t\t\t// the blank area of the list was clicked\n\t\t\t\tthis.setSelectedModels( [] );\n\n\t\t},\n\n\t\t_listItem_onDoubleClick : function( theEvent ) {\n\n\t\t\tvar clickedItemId = this._getClickedItemId( theEvent );\n\n\t\t\tif( clickedItemId )\n\t\t\t{\n\t\t\t\tvar clickedModel = this.collection.get( clickedItemId );\n\n\t\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\t\tthis.spawn( \"doubleClick\", { clickedModel : clickedModel, metaKeyPressed : theEvent.ctrlKey || theEvent.metaKey } );\n\t\t\t\telse this.trigger( \"doubleClick\", clickedModel );\n\t\t\t}\n\t\t},\n\n\t\t_listBackground_onClick : function( theEvent ) {\n\t\t\tif( ! this.selectable || ! this.clickToSelect ) return;\n\t\t\tif( ! $( theEvent.target ).is( \".collection-view\" ) ) return;\n\n\t\t\tthis.setSelectedModels( [] );\n\t\t}\n\n\t}, {\n\t\tsetDefaultModelViewConstructor : function( theConstructor ) {\n\t\t\tmDefaultModelViewConstructor = theConstructor;\n\t\t}\n\t});\n\n\t/*\n\t* Backbone.ViewOptions, v0.2.4\n\t* Copyright (c)2014 Rotunda Software, LLC.\n\t* Distributed under MIT license\n\t* http://github.com/rotundasoftware/backbone.viewOptions\n\t*/\n\n\tBackbone.ViewOptions = {};\n\n\tBackbone.ViewOptions.add = function( view, optionsDeclarationsProperty ) {\n\t\tif( _.isUndefined( optionsDeclarationsProperty ) ) optionsDeclarationsProperty = \"options\";\n\n\t\t// ****************** Public methods added to view ******************\n\n\t\tview.setOptions = function( options ) {\n\t\t\tvar _this = this;\n\t\t\tvar optionsThatWereChanged = {};\n\t\t\tvar optionsThatWereChangedPreviousValues = {};\n\n\t\t\tvar optionDeclarations = _.result( this, optionsDeclarationsProperty );\n\n\t\t\tif( ! _.isUndefined( optionDeclarations ) ) {\n\t\t\t\tvar normalizedOptionDeclarations = _normalizeOptionDeclarations( optionDeclarations );\n\n\t\t\t\t_.each( normalizedOptionDeclarations, function( thisOptionProperties, thisOptionName ) {\n\t\t\t\t\tvar thisOptionRequired = thisOptionProperties.required;\n\t\t\t\t\tvar thisOptionDefaultValue = thisOptionProperties.defaultValue;\n\n\t\t\t\t\tif( thisOptionRequired ) {\n\t\t\t\t\t\t// note we do not throw an error if a required option is not supplied, but it is\n\t\t\t\t\t\t// found on the object itself (due to a prior call of view.setOptions, most likely)\n\n\t\t\t\t\t\tif( ( ! options || ! _.contains( _.keys( options ), thisOptionName ) ) && _.isUndefined( _this[ thisOptionName ] ) )\n\t\t\t\t\t\t\tthrow new Error( \"Required option \\\"\" + thisOptionName + \"\\\" was not supplied.\" );\n\n\t\t\t\t\t\tif( options && _.contains( _.keys( options ), thisOptionName ) && _.isUndefined( options[ thisOptionName ] ) )\n\t\t\t\t\t\t\tthrow new Error( \"Required option \\\"\" + thisOptionName + \"\\\" can not be set to undefined.\" );\n\t\t\t\t\t}\n\n\t\t\t\t\t// attach the supplied value of this option, or the appropriate default value, to the view object\n\t\t\t\t\tif( options && thisOptionName in options && ! _.isUndefined( options[ thisOptionName ] ) ) {\n\t\t\t\t\t\tvar oldValue = _this[ thisOptionName ];\n\t\t\t\t\t\tvar newValue = options[ thisOptionName ];\n\t\t\t\t\t\t// if this option already exists on the view, and the new value is different,\n\t\t\t\t\t\t// make a note that we will be changing it\n\t\t\t\t\t\tif( ! _.isUndefined( oldValue ) && oldValue !== newValue ) {\n\t\t\t\t\t\t\toptionsThatWereChangedPreviousValues[ thisOptionName ] = oldValue;\n\t\t\t\t\t\t\toptionsThatWereChanged[ thisOptionName ] = newValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this[ thisOptionName ] = newValue;\n\t\t\t\t\t\t// note we do NOT delete the option off the options object here so that\n\t\t\t\t\t\t// multiple views can be passed the same options object without issue.\n\t\t\t\t\t}\n\t\t\t\t\telse if( _.isUndefined( _this[ thisOptionName ] ) ) {\n\t\t\t\t\t\t// note defaults do not write over any existing properties on the view itself.\n\t\t\t\t\t\t_this[ thisOptionName ] = thisOptionDefaultValue;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif( _.keys( optionsThatWereChanged ).length > 0 ) {\n\t\t\t\tif( _.isFunction( _this.onOptionsChanged ) )\n\t\t\t\t\t_this.onOptionsChanged( optionsThatWereChanged, optionsThatWereChangedPreviousValues );\n\t\t\t\telse if( _.isFunction( _this._onOptionsChanged ) )\n\t\t\t\t\t_this._onOptionsChanged( optionsThatWereChanged, optionsThatWereChangedPreviousValues );\n\t\t\t}\n\t\t};\n\n\t\tview.getOptions = function() {\n\t\t\tvar optionDeclarations = _.result( this, optionsDeclarationsProperty );\n\t\t\tif( _.isUndefined( optionDeclarations ) ) return {};\n\n\t\t\tvar normalizedOptionDeclarations = _normalizeOptionDeclarations( optionDeclarations );\n\t\t\tvar optionsNames = _.keys( normalizedOptionDeclarations );\n\n\t\t\treturn _.pick( this, optionsNames );\n\t\t};\n\t};\n\n\t// ****************** Private Utility Functions ******************\n\n\tfunction _normalizeOptionDeclarations( optionDeclarations ) {\n\t\t// convert our short-hand option syntax (with exclamation marks, etc.)\n\t\t// to a simple array of standard option declaration objects.\n\n\t\tvar normalizedOptionDeclarations = {};\n\n\t\tif( ! _.isArray( optionDeclarations ) ) throw new Error( \"Option declarations must be an array.\" );\n\n\t\t_.each( optionDeclarations, function( thisOptionDeclaration ) {\n\t\t\tvar thisOptionName, thisOptionRequired, thisOptionDefaultValue;\n\n\t\t\tthisOptionRequired = false;\n\t\t\tthisOptionDefaultValue = undefined;\n\n\t\t\tif( _.isString( thisOptionDeclaration ) )\n\t\t\t\tthisOptionName = thisOptionDeclaration;\n\t\t\telse if( _.isObject( thisOptionDeclaration ) ) {\n\t\t\t\tthisOptionName = _.first( _.keys( thisOptionDeclaration ) );\n\t\t\t\tif( _.isFunction( thisOptionDeclaration[ thisOptionName ] ) )\n\t\t\t\t\tthisOptionDefaultValue = thisOptionDeclaration[ thisOptionName ];\n\t\t\t\telse\n\t\t\t\t\tthisOptionDefaultValue = _.clone( thisOptionDeclaration[ thisOptionName ] );\n\t\t\t}\n\t\t\telse throw new Error( \"Each element in the option declarations array must be either a string or an object.\" );\n\n\t\t\tif( thisOptionName[ thisOptionName.length - 1 ] === \"!\" ) {\n\t\t\t\tthisOptionRequired = true;\n\t\t\t\tthisOptionName = thisOptionName.slice( 0, thisOptionName.length - 1 );\n\t\t\t}\n\n\t\t\tnormalizedOptionDeclarations[ thisOptionName ] = normalizedOptionDeclarations[ thisOptionName ] || {};\n\t\t\tnormalizedOptionDeclarations[ thisOptionName ].required = thisOptionRequired;\n\t\t\tif( ! _.isUndefined( thisOptionDefaultValue ) ) normalizedOptionDeclarations[ thisOptionName ].defaultValue = thisOptionDefaultValue;\n\t\t} );\n\n\t\treturn normalizedOptionDeclarations;\n\t}\n\n\n\t// Backbone.BabySitter\n\t// -------------------\n\t// v0.0.6\n\t//\n\t// Copyright (c)2013 Derick Bailey, Muted Solutions, LLC.\n\t// Distributed under MIT license\n\t//\n\t// http://github.com/babysitterjs/backbone.babysitter\n\n\t// Backbone.ChildViewContainer\n\t// ---------------------------\n\t//\n\t// Provide a container to store, retrieve and\n\t// shut down child views.\n\n\tChildViewContainer = (function(Backbone, _){\n\n\t\t// Container Constructor\n\t\t// ---------------------\n\n\t\tvar Container = function(views){\n\t\t\tthis._views = {};\n\t\t\tthis._indexByModel = {};\n\t\t\tthis._indexByCustom = {};\n\t\t\tthis._updateLength();\n\n\t\t\t_.each(views, this.add, this);\n\t\t};\n\n\t\t// Container Methods\n\t\t// -----------------\n\n\t\t_.extend(Container.prototype, {\n\n\t\t\t// Add a view to this container. Stores the view\n\t\t\t// by `cid` and makes it searchable by the model\n\t\t\t// cid (and model itself). Optionally specify\n\t\t\t// a custom key to store an retrieve the view.\n\t\t\tadd: function(view, customIndex){\n\t\t\t\tvar viewCid = view.cid;\n\n\t\t\t\t// store the view\n\t\t\t\tthis._views[viewCid] = view;\n\n\t\t\t\t// index it by model\n\t\t\t\tif (view.model){\n\t\t\t\t\tthis._indexByModel[view.model.cid] = viewCid;\n\t\t\t\t}\n\n\t\t\t\t// index by custom\n\t\t\t\tif (customIndex){\n\t\t\t\t\tthis._indexByCustom[customIndex] = viewCid;\n\t\t\t\t}\n\n\t\t\t\tthis._updateLength();\n\t\t\t},\n\n\t\t\t// Find a view by the model that was attached to\n\t\t\t// it. Uses the model's `cid` to find it.\n\t\t\tfindByModel: function(model){\n\t\t\t\treturn this.findByModelCid(model.cid);\n\t\t\t},\n\n\t\t\t// Find a view by the `cid` of the model that was attached to\n\t\t\t// it. Uses the model's `cid` to find the view `cid` and\n\t\t\t// retrieve the view using it.\n\t\t\tfindByModelCid: function(modelCid){\n\t\t\t\tvar viewCid = this._indexByModel[modelCid];\n\t\t\t\treturn this.findByCid(viewCid);\n\t\t\t},\n\n\t\t\t// Find a view by a custom indexer.\n\t\t\tfindByCustom: function(index){\n\t\t\t\tvar viewCid = this._indexByCustom[index];\n\t\t\t\treturn this.findByCid(viewCid);\n\t\t\t},\n\n\t\t\t// Find by index. This is not guaranteed to be a\n\t\t\t// stable index.\n\t\t\tfindByIndex: function(index){\n\t\t\t\treturn _.values(this._views)[index];\n\t\t\t},\n\n\t\t\t// retrieve a view by it's `cid` directly\n\t\t\tfindByCid: function(cid){\n\t\t\t\treturn this._views[cid];\n\t\t\t},\n\n\t\t\tfindIndexByCid : function( cid ) {\n\t\t\t\tvar index = -1;\n\t\t\t\tvar view = _.find( this._views, function ( view ) {\n\t\t\t\t\tindex++;\n\t\t\t\t\tif( view.model.cid == cid )\n\t\t\t\t\t\treturn view;\n\t\t\t\t} );\n\t\t\t\treturn ( view ) ? index : -1;\n\t\t\t},\n\n\t\t\t// Remove a view\n\t\t\tremove: function(view){\n\t\t\t\tvar viewCid = view.cid;\n\n\t\t\t\t// delete model index\n\t\t\t\tif (view.model){\n\t\t\t\t\tdelete this._indexByModel[view.model.cid];\n\t\t\t\t}\n\n\t\t\t\t// delete custom index\n\t\t\t\t_.any(this._indexByCustom, function(cid, key) {\n\t\t\t\t\tif (cid === viewCid) {\n\t\t\t\t\t\tdelete this._indexByCustom[key];\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\t// remove the view from the container\n\t\t\t\tdelete this._views[viewCid];\n\n\t\t\t\t// update the length\n\t\t\t\tthis._updateLength();\n\t\t\t},\n\n\t\t\t// Call a method on every view in the container,\n\t\t\t// passing parameters to the call method one at a\n\t\t\t// time, like `function.call`.\n\t\t\tcall: function(method){\n\t\t\t\tthis.apply(method, _.tail(arguments));\n\t\t\t},\n\n\t\t\t// Apply a method on every view in the container,\n\t\t\t// passing parameters to the call method one at a\n\t\t\t// time, like `function.apply`.\n\t\t\tapply: function(method, args){\n\t\t\t\t_.each(this._views, function(view){\n\t\t\t\t\tif (_.isFunction(view[method])){\n\t\t\t\t\t\tview[method].apply(view, args || []);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\t// Update the `.length` attribute on this container\n\t\t\t_updateLength: function(){\n\t\t\t\tthis.length = _.size(this._views);\n\t\t\t}\n\t\t});\n\n\t\t// Borrowing this code from Backbone.Collection:\n\t\t// http://backbonejs.org/docs/backbone.html#section-106\n\t\t//\n\t\t// Mix in methods from Underscore, for iteration, and other\n\t\t// collection related features.\n\t\tvar methods = ['forEach', 'each', 'map', 'find', 'detect', 'filter',\n\t\t\t 'select', 'reject', 'every', 'all', 'some', 'any', 'include',\n\t\t\t 'contains', 'invoke', 'toArray', 'first', 'initial', 'rest',\n\t\t\t 'last', 'without', 'isEmpty', 'pluck'];\n\n\t\t_.each(methods, function(method) {\n\t\t\tContainer.prototype[method] = function() {\n\t\t\t\tvar views = _.values(this._views);\n\t\t\t\tvar args = [views].concat(_.toArray(arguments));\n\t\t\t\treturn _[method].apply(_, args);\n\t\t\t};\n\t\t});\n\n\t\t// return the public API\n\t\treturn Container;\n\t})(Backbone, _);\n\n\treturn Backbone.CollectionView;\n} ) );\n\n","/**\n * backbone.trackit - 0.1.0\n *\n * The MIT License\n * Copyright (c) 2013 The New York Times, CMS Group, Matthew DeLambo \n *\n * @since 7.4.0 Added support for deep models (attributes that are objects themselves).\n */\n(function() {\n\n\t// Unsaved Record Keeping\n\t// ----------------------\n\n\t// Collection of all models in an app that have unsaved changes.\n\tvar unsavedModels = [];\n\n\t// If the given model has unsaved changes then add it to\n\t// the `unsavedModels` collection, otherwise remove it.\n\tvar updateUnsavedModels = function(model) {\n\t\tif (!_.isEmpty(model._unsavedChanges)) {\n\t\t\tif (!_.findWhere(unsavedModels, {cid:model.cid})) unsavedModels.push(model);\n\t\t} else {\n\t\t\tunsavedModels = _.filter(unsavedModels, function(m) { return model.cid != m.cid; });\n\t\t}\n\t};\n\n\t// Unload Handlers\n\t// ---------------\n\n\t// Helper which returns a prompt message for an unload handler.\n\t// Uses the given function name (one of the callback names\n\t// from the `model.unsaved` configuration hash) to evaluate\n\t// whether a prompt is needed/returned.\n\tvar getPrompt = function(fnName) {\n\t\tvar prompt, args = _.rest(arguments);\n\t\t// Evaluate and return a boolean result. The given `fn` may be a\n\t\t// boolean value, a function, or the name of a function on the model.\n\t\tvar evaluateModelFn = function(model, fn) {\n\t\t\tif (_.isBoolean(fn)) return fn;\n\t\t\treturn (_.isString(fn) ? model[fn] : fn).apply(model, args);\n\t\t};\n\t\t_.each(unsavedModels, function(model) {\n\t\t\tif (!prompt && evaluateModelFn(model, model._unsavedConfig[fnName]))\n\t\t\t\tprompt = model._unsavedConfig.prompt;\n\t\t});\n\t\treturn prompt;\n\t};\n\n\t// Wrap Backbone.History.navigate so that in-app routing\n\t// (`router.navigate('/path')`) can be intercepted with a\n\t// confirmation if there are any unsaved models.\n\tBackbone.History.prototype.navigate = _.wrap(Backbone.History.prototype.navigate, function(oldNav, fragment, options) {\n\t\tvar prompt = getPrompt('unloadRouterPrompt', fragment, options);\n\t\tif (prompt) {\n\t\t\tif (confirm(prompt + ' \\n\\nAre you sure you want to leave this page?')) {\n\t\t\t\toldNav.call(this, fragment, options);\n\t\t\t}\n\t\t} else {\n\t\t\toldNav.call(this, fragment, options);\n\t\t}\n\t});\n\n\t// Create a browser unload handler which is triggered\n\t// on the refresh, back, or forward button.\n\twindow.onbeforeunload = function(e) {\n\t\treturn getPrompt('unloadWindowPrompt', e);\n\t};\n\n\t// Backbone.Model API\n\t// ------------------\n\n\t_.extend(Backbone.Model.prototype, {\n\n\t\tunsaved: {},\n\t\t_trackingChanges: false,\n\t\t_originalAttrs: {},\n\t\t_unsavedChanges: {},\n\n\t\t// Opt in to tracking attribute changes\n\t\t// between saves.\n\t\tstartTracking: function() {\n\t\t\tthis._unsavedConfig = _.extend({}, {\n\t\t\t\tprompt: 'You have unsaved changes!',\n\t\t\t\tunloadRouterPrompt: false,\n\t\t\t\tunloadWindowPrompt: false\n\t\t\t}, this.unsaved || {});\n\t\t\tthis._trackingChanges = true;\n\t\t\tthis._resetTracking();\n\t\t\tthis._triggerUnsavedChanges();\n\t\t\treturn this;\n\t\t},\n\n\t\t// Resets the default tracking values\n\t\t// and stops tracking attribute changes.\n\t\tstopTracking: function() {\n\t\t\tthis._trackingChanges = false;\n\t\t\tthis._originalAttrs = {};\n\t\t\tthis._unsavedChanges = {};\n\t\t\tthis._triggerUnsavedChanges();\n\t\t\treturn this;\n\t\t},\n\n\t\t// Gets rid of accrued changes and\n\t\t// resets state.\n\t\trestartTracking: function() {\n\t\t\tthis._resetTracking();\n\t\t\tthis._triggerUnsavedChanges();\n\t\t\treturn this;\n\t\t},\n\n\t\t// Restores this model's attributes to\n\t\t// their original values since tracking\n\t\t// started, the last save, or last restart.\n\t\tresetAttributes: function() {\n\t\t\tif (!this._trackingChanges) return;\n\t\t\tthis.attributes = this._originalAttrs;\n\t\t\tthis._resetTracking();\n\t\t\tthis._triggerUnsavedChanges();\n\t\t\treturn this;\n\t\t},\n\n\t\t// Symmetric to Backbone's `model.changedAttributes()`,\n\t\t// except that this returns a hash of the model's attributes that\n\t\t// have changed since the last save, or `false` if there are none.\n\t\t// Like `changedAttributes`, an external attributes hash can be\n\t\t// passed in, returning the attributes in that hash which differ\n\t\t// from the model.\n\t\tunsavedAttributes: function(attrs) {\n\t\t\tif (!attrs) return _.isEmpty(this._unsavedChanges) ? false : _.clone(this._unsavedChanges);\n\t\t\tvar val, changed = false, old = this._unsavedChanges;\n\t\t\tfor (var attr in attrs) {\n\t\t\t\tif (_.isEqual(old[attr], (val = attrs[attr]))) continue;\n\t\t\t\t(changed || (changed = {}))[attr] = val;\n\t\t\t}\n\t\t\treturn changed;\n\t\t},\n\n\t\t/**\n\t\t * Reset tracking.\n\t\t *\n\t\t * @since 7.4.0 Added support for deep models (attributes that are objects themselves),\n\t\t * by using `_.deepClone` in place of `_.clone`.\n\t\t */\n\t\t_resetTracking: function() {\n\t\t\tthis._originalAttrs = _.deepClone(this.attributes);\n\t\t\tthis._unsavedChanges = {};\n\t\t},\n\n\t\t// Trigger an `unsavedChanges` event on this model,\n\t\t// supplying the result of whether there are unsaved\n\t\t// changes and a changed attributes hash.\n\t\t_triggerUnsavedChanges: function() {\n\t\t\tthis.trigger('unsavedChanges', !_.isEmpty(this._unsavedChanges), _.clone(this._unsavedChanges));\n\t\t\tif (this.unsaved) updateUnsavedModels(this);\n\t\t}\n\t});\n\n\t// Wrap `model.set()` and update the internal\n\t// unsaved changes record keeping.\n\tBackbone.Model.prototype.set = _.wrap(Backbone.Model.prototype.set, function(oldSet, key, val, options) {\n\t\tvar attrs, ret;\n\t\tif (key == null) return this;\n\t\t// Handle both `\"key\", value` and `{key: value}` -style arguments.\n\t\tif (typeof key === 'object') {\n\t\t\tattrs = key;\n\t\t\toptions = val;\n\t\t} else {\n\t\t\t(attrs = {})[key] = val;\n\t\t}\n\t\toptions || (options = {});\n\n\t\t// Delegate to Backbone's set.\n\t\tret = oldSet.call(this, attrs, options);\n\n\t\tif (this._trackingChanges && !options.silent) {\n\t\t\t_.each(attrs, _.bind(function(val, key) {\n\t\t\t\tif (_.isEqual(this._originalAttrs[key], val))\n\t\t\t\t\tdelete this._unsavedChanges[key];\n\t\t\t\telse\n\t\t\t\t\tthis._unsavedChanges[key] = val;\n\t\t\t}, this));\n\t\t\tthis._triggerUnsavedChanges();\n\t\t}\n\t\treturn ret;\n\t});\n\n\t// Intercept `model.save()` and reset tracking/unsaved\n\t// changes if it was successful.\n\tBackbone.sync = _.wrap(Backbone.sync, function(oldSync, method, model, options) {\n\t\toptions || (options = {});\n\n\t\tif (method == 'update') {\n\t\t\toptions.success = _.wrap(options.success, _.bind(function(oldSuccess, data, textStatus, jqXHR) {\n\t\t\t\tvar ret;\n\t\t\t\tif (oldSuccess) ret = oldSuccess.call(this, data, textStatus, jqXHR);\n\t\t\t\tif (model._trackingChanges) {\n\t\t\t\t\tmodel._resetTracking();\n\t\t\t\t\tmodel._triggerUnsavedChanges();\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}, this));\n\t\t}\n\t\treturn oldSync(method, model, options);\n\t});\n\n})();\n\ndefine(\"vendor/backbone.trackit\", function(){});\n\n","/**\n * Image object model for use in various models for the 'image' attribute\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Models/Image',[], function() {\n\n\treturn Backbone.Model.extend( {\n\n\t\tdefaults: {\n\t\t\tenabled: 'no',\n\t\t\tid: '',\n\t\t\tsize: 'full',\n\t\t\tsrc: '',\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tthis.startTracking();\n\t\t},\n\n\t} );\n} );\n\n","/**\n * Model relationships mixin\n *\n * @since 3.16.0\n * @version 3.16.11\n */\ndefine( 'Models/_Relationships',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * Default relationship settings object\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\trelationship_defaults: {\n\t\t\tparent: {},\n\t\t\tchildren: {},\n\t\t},\n\n\t\t/**\n\t\t * Relationship settings object\n\t\t * Should be overridden in the model\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\trelationships: {},\n\n\t\t/**\n\t\t * Initialize all parent and child relationships\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinit_relationships: function( options ) {\n\n\t\t\tvar rels = this.get_relationships();\n\n\t\t\t// initialize parent relationships\n\t\t\t// useful when adding a model to ensure parent is initialized\n\t\t\tif ( rels.parent && options && options.parent ) {\n\t\t\t\tthis.set_parent( options.parent );\n\t\t\t}\n\n\t\t\t// initialize all children relationships\n\t\t\t_.each( rels.children, function( child_data, child_key ) {\n\n\t\t\t\tif ( ! child_data.conditional || true === child_data.conditional( this ) ) {\n\n\t\t\t\t\tvar child_val = this.get( child_key ),\n\t\t\t\t\t\tchild;\n\n\t\t\t\t\tif ( child_data.lookup ) {\n\t\t\t\t\t\tchild = child_data.lookup( child_val );\n\t\t\t\t\t} else if ( 'model' === child_data.type ) {\n\t\t\t\t\t\tchild = window.llms_builder.construct.get_model( child_data.class, child_val );\n\t\t\t\t\t} else if ( 'collection' === child_data.type ) {\n\t\t\t\t\t\tchild = window.llms_builder.construct.get_collection( child_data.class, child_val );\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.set( child_key, child );\n\n\t\t\t\t\t// if the child defines a parent, save a reference to the parent on the child\n\t\t\t\t\tif ( 'model' === child_data.type ) {\n\t\t\t\t\t\tthis._maybe_set_parent_reference( child );\n\n\t\t\t\t\t\t// save directly to each model in the collection\n\t\t\t\t\t} else if ( 'collection' === child_data.type ) {\n\n\t\t\t\t\t\tchild.parent = this;\n\t\t\t\t\t\tchild.each( function( child_model ) {\n\n\t\t\t\t\t\t\tthis._maybe_set_parent_reference( child_model );\n\n\t\t\t\t\t\t}, this );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the property names for all children of the model\n\t\t *\n\t\t * @return array\n\t\t * @since 3.16.11\n\t\t * @version 3.16.11\n\t\t */\n\t\tget_child_props: function() {\n\n\t\t\tvar props = [];\n\n\t\t\t_.each( this.get_relationships().children, function( data, key ) {\n\n\t\t\t\tif ( ! data.conditional || true === data.conditional( this ) ) {\n\t\t\t\t\tprops.push( key );\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t\treturn props;\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the model's parent (if set)\n\t\t *\n\t\t * @return obj|false\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_parent: function() {\n\n\t\t\tvar rels = this.get_relationships();\n\n\t\t\tif ( rels.parent ) {\n\t\t\t\treturn rels.parent.reference;\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve relationships for the model\n\t\t * Extends with defaults\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_relationships: function() {\n\n\t\t\treturn $.extend( true, this.relationships, this.relationship_defaults );\n\n\t\t},\n\n\t\t/**\n\t\t * Set the parent reference for the given model\n\t\t *\n\t\t * @param obj obj parent model obj\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tset_parent: function( obj ) {\n\t\t\tthis.relationships.parent.reference = obj;\n\t\t},\n\n\t\t/**\n\t\t * Set up the parent relationships for qualifying children during relationship initialization\n\t\t *\n\t\t * @param obj model child model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_maybe_set_parent_reference: function( model ) {\n\n\t\t\tif ( ! model || ! model.get_relationships ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar rels = model.get_relationships();\n\t\t\tif ( rels.parent && rels.parent.model === this.get( 'type' ) ) {\n\t\t\t\tmodel.set_parent( this );\n\t\t\t}\n\n\t\t},\n\n\t};\n\n} );\n\n","/**\n * Quiz Question Choice\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Models/QuestionChoice',[ 'Models/Image', 'Models/_Relationships' ], function( Image, Relationships ) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\t/**\n\t\t * Model relationships\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\trelationships: {\n\t\t\tparent: {\n\t\t\t\tmodel: 'llms_question',\n\t\t\t\ttype: 'model',\n\t\t\t},\n\t\t\tchildren: {\n\t\t\t\tchoice: {\n\t\t\t\t\tconditional: function( model ) {\n\t\t\t\t\t\treturn ( 'image' === model.get( 'choice_type' ) );\n\t\t\t\t\t},\n\t\t\t\t\tclass: 'Image',\n\t\t\t\t\tmodel: 'image',\n\t\t\t\t\ttype: 'model',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Model defaults\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\tchoice: '',\n\t\t\t\tchoice_type: 'text',\n\t\t\t\tcorrect: false,\n\t\t\t\tmarker: 'A',\n\t\t\t\tquestion_id: '',\n\t\t\t\ttype: 'choice',\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @param obj data object of model attributes\n\t\t * @param obj options additional options\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function( data, options ) {\n\n\t\t\tthis.startTracking();\n\t\t\tthis.init_relationships( options );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the choice's parent question\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_parent: function() {\n\t\t\treturn this.collection.parent;\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the ID used when trashing the model\n\t\t *\n\t\t * @return string\n\t\t * @since 3.17.1\n\t\t * @version 3.17.1\n\t\t */\n\t\tget_trash_id: function() {\n\t\t\treturn this.get( 'question_id' ) + ':' + this.get( 'id' );\n\t\t},\n\n\t\t/**\n\t\t * Determine if \"selection\" is enabled for the question type\n\t\t * Choice type questions are selectable by reorder type questions are not but still use choices\n\t\t *\n\t\t * @return {Boolean}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tis_selectable: function() {\n\t\t\treturn this.get_parent().get( 'question_type' ).get_choice_selectable();\n\t\t},\n\n\t}, Relationships ) );\n\n} );\n\n","/**\n * Question Choice Collection\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Collections/QuestionChoices',[ 'Models/QuestionChoice' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\tinitialize: function() {\n\n\t\t\t// reorder called by QuestionList view when sortable drops occur\n\t\t\tthis.on( 'reorder', this.update_order );\n\n\t\t\t// when a choice is added or removed, update order\n\t\t\tthis.on( 'add', this.update_order );\n\t\t\tthis.on( 'remove', this.update_order );\n\n\t\t\t// when a choice is added or remove, ensure min/max correct answers exist\n\t\t\tthis.on( 'add', this.update_correct );\n\t\t\tthis.on( 'remove', this.update_correct );\n\n\t\t\t// when a choice is toggled, ensure min/max correct exist\n\t\t\tthis.on( 'correct-update', this.update_correct );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the number of correct choices in the collection\n\t\t *\n\t\t * @return int\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tcount_correct: function() {\n\n\t\t\treturn _.size( this.get_correct() );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the collection reduced to only correct choices\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_correct: function() {\n\t\t\treturn this.filter( function( choice ) {\n\t\t\t\treturn choice.get( 'correct' );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Ensure min/max correct choices exist in the collection based on the question's settings\n\t\t *\n\t\t * @param obj choice model of the choice that was toggled\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_correct: function( choice ) {\n\n\t\t\tif ( ! this.parent.get( 'question_type' ).get_choice_selectable() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar siblings = this.without( choice ), // exclude the toggled choice from loops\n\t\t\t\tquestion = this.parent;\n\n\t\t\t// if multiple choices aren't enabled turn all other choices to incorrect\n\t\t\tif ( 'no' === question.get( 'multi_choices' ) ) {\n\t\t\t\t_.each( siblings, function( model ) {\n\t\t\t\t\tmodel.set( 'correct', false );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// if we don't have a single correct answer & the question has points, set one\n\t\t\t// allows users to create quizzes / questions with no points and therefore no correct answers are allowed\n\t\t\tif ( 0 === this.count_correct() && question.get( 'points' ) > 0 ) {\n\t\t\t\tvar models = 1 === this.size() ? this.models : siblings;\n\t\t\t\t_.first( models ).set( 'correct', true );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Update the marker attr of each choice in the list to reflect the order of the collection\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_order: function() {\n\n\t\t\tvar self = this,\n\t\t\t\tquestion = this.parent;\n\n\t\t\tthis.each( function( choice ) {\n\t\t\t\tchoice.set( 'marker', question.get( 'question_type' ).get_choice_markers()[ self.indexOf( choice ) ] );\n\t\t\t} );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Quiz Question Type\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Models/QuestionType',[], function() {\n\n\treturn Backbone.Model.extend( {\n\n\t\t/**\n\t\t * Get model default attributes\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tchoices: false,\n\t\t\t\tclarifications: true,\n\t\t\t\tdefault_choices: [],\n\t\t\t\tdescription: true,\n\t\t\t\ticon: 'question',\n\t\t\t\tid: 'generic',\n\t\t\t\timage: true,\n\t\t\t\tkeywords: [],\n\t\t\t\tname: 'Generic',\n\t\t\t\tplaceholder: '',\n\t\t\t\tpoints: true,\n\t\t\t\tvideo: true,\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Retrieve an array of keywords for the question type\n\t\t * Used for filtering questions by search term in the quiz builder\n\t\t *\n\t\t * @return array\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_keywords: function() {\n\n\t\t\tvar name = this.get( 'name' ),\n\t\t\t\twords = [ name ];\n\n\t\t\treturn words.concat( this.get( 'keywords' ) ).concat( name.split( ' ' ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Get marker array for the question choices\n\t\t *\n\t\t * @return array\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_choice_markers: function() {\n\n\t\t\treturn this._get_choice_option( 'markers' );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if the question's choices are selectable\n\t\t *\n\t\t * @return bool\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_choice_selectable: function() {\n\n\t\t\treturn this._get_choice_option( 'selectable' );\n\n\t\t},\n\n\t\t/**\n\t\t * Get the choice type (text,image)\n\t\t *\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_choice_type: function() {\n\n\t\t\treturn this._get_choice_option( 'type' );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve defined min. choices\n\t\t *\n\t\t * @return int\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_min_choices: function() {\n\n\t\t\treturn this._get_choice_option( 'min' );\n\n\t\t},\n\n\t\t/**\n\t\t * Get type-defined max choices\n\t\t *\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_max_choices: function() {\n\n\t\t\treturn this._get_choice_option( 'max' );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if multi-choice selection is enabled\n\t\t *\n\t\t * @return bool\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_multi_choices: function() {\n\n\t\t\tvar choices = this.get( 'choices' );\n\n\t\t\tif ( ! choices ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this._get_choice_option( 'multi' );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve data from the type's \"choices\" attribute\n\t\t * Allows quick handling of types with no choice definitions w/o additional checks\n\t\t *\n\t\t * @param string option name of the choice option to retrieve\n\t\t * @return mixed\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_get_choice_option: function( option ) {\n\n\t\t\tvar choices = this.get( 'choices' );\n\n\t\t\tif ( ! choices || ! choices[ option ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn choices[ option ];\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Utility functions for Models.\n *\n * @since 3.16.0\n * @version 7.4.0\n */\ndefine( 'Models/_Utilities',[], function() {\n\n\treturn {\n\n\t\tfields: [],\n\n\t\t/**\n\t\t * Override Backbone `set` method.\n\t\t *\n\t\t * Takes into account attributes of the form object[prop].\n\t\t *\n\t\t * @since 7.4.0\n\t\t *\n\t\t * @param {Mixed} attr The attribute to be set.\n\t\t * @param {Mixed} val The value to set.\n\t\t */\n\t\tset: function ( attr, val ) {\n\n\t\t\tif ( 'string' === typeof attr ) {\n\n\t\t\t\tconst matches = attr.match( /(.*?)\\[(.*?)\\]/ );\n\t\t\t\tif ( matches && 3 === matches.length ) {\n\n\t\t\t\t\tconst\n\t\t\t\t\t\trealAttr = matches[1],\n\t\t\t\t\t\tcurrentVal = Backbone.Model.prototype.get.call( this, realAttr );\n\n\t\t\t\t\tvar newVal = undefined !== currentVal ? currentVal : {};\n\n\t\t\t\t\tnewVal[ matches[2] ] = val;\n\n\t\t\t\t\targuments[0] = realAttr;\n\t\t\t\t\targuments[1] = newVal;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Continue with Backbone default `set` behavior.\n\t\t\tBackbone.Model.prototype.set.apply( this, arguments );\n\n\t\t},\n\n\t\t/**\n\t\t * Override Backbone `get` method.\n\t\t *\n\t\t * Takes into account attributes of the form object[prop].\n\t\t *\n\t\t * @since 7.4.0\n\t\t *\n\t\t * @param {Mixed} attr The attribute name.\n\t\t */\n\t\tget: function( attr ) {\n\n\t\t\tconst matches = attr.match( /(.*?)\\[(.*?)\\]/ );\n\t\t\tif ( matches && 3 === matches.length ) {\n\t\t\t\tconst val = Backbone.Model.prototype.get.call( this, matches[1] );\n\t\t\t\tif ( val && undefined !== val[ matches[2] ] ) {\n\t\t\t\t\treturn val[ matches[2] ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Continue with Backbone default `get` behavior.\n\t\t\treturn Backbone.Model.prototype.get.call( this, attr );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the edit post link for the current model.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return string\n\t\t */\n\t\tget_edit_post_link: function() {\n\n\t\t\tif ( this.has_temp_id() ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn window.llms_builder.admin_url + 'post.php?post=' + this.get( 'id' ) + '&action=edit';\n\n\t\t},\n\n\t\tget_view_post_link: function() {\n\t\t\tif ( this.has_temp_id() ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif ( this.get( 'permalink' ) ) {\n\t\t\t\treturn this.get( 'permalink' );\n\t\t\t}\n\n\t\t\tif ( this.get( 'status' ) === 'publish' ) {\n\t\t\t\treturn window.llms_builder.home_url + '?p=' + this.get( 'id' );\n\t\t\t}\n\n\t\t\treturn window.llms_builder.home_url + '?p=' + this.get( 'id' ) + '&preview=true&post_type=' + this.get( 'type' );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve schema fields defined for the model\n\t\t *\n\t\t * @return object\n\t\t * @since 3.17.0\n\t\t * @version 3.17.1\n\t\t */\n\t\tget_settings_fields: function() {\n\n\t\t\tvar schema = this.schema || {};\n\t\t\treturn window.llms_builder.schemas.get( schema, this.get( 'type' ).replace( 'llms_', '' ), this );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if the model has a temporary ID\n\t\t *\n\t\t * @return {Boolean}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\thas_temp_id: function() {\n\n\t\t\treturn ( ! _.isNumber( this.get( 'id' ) ) && 0 === this.get( 'id' ).indexOf( 'temp_' ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Initializes 3rd party custom schema (field) data for a model\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tinit_custom_schema: function() {\n\n\t\t\tvar groups = _.filter( this.get_settings_fields(), function( group ) {\n\t\t\t\treturn ( group.custom );\n\t\t\t} );\n\n\t\t\t_.each( groups, function( group ) {\n\t\t\t\t_.each( _.flatten( group.fields ), function( field ) {\n\n\t\t\t\t\tvar keys = [ field.attribute ],\n\t\t\t\t\t\tcustoms = this.get( 'custom' );\n\n\t\t\t\t\tif ( field.switch_attribute ) {\n\t\t\t\t\t\tkeys.push( field.switch_attribute );\n\t\t\t\t\t}\n\n\t\t\t\t\t_.each( keys, function( key ) {\n\t\t\t\t\t\tvar attr = field.attribute_prefix ? field.attribute_prefix + key : key;\n\t\t\t\t\t\tif ( customs && customs[ attr ] ) {\n\t\t\t\t\t\t\tthis.set( key, customs[ attr ][0] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this );\n\n\t\t\t\t}, this );\n\t\t\t}, this );\n\n\t\t},\n\n\t};\n\n} );\n\n","/**\n * Quiz Question\n *\n * @since 3.16.0\n * @version 3.27.0\n */\ndefine( 'Models/Question',[\n\t\t'Models/Image',\n\t\t'Collections/Questions',\n\t\t'Collections/QuestionChoices',\n\t\t'Models/QuestionType',\n\t\t'Models/_Relationships',\n\t\t'Models/_Utilities'\n\t], function(\n\t\tImage,\n\t\tQuestions,\n\t\tQuestionChoices,\n\t\tQuestionType,\n\t\tRelationships,\n\t\tUtilities\n\t) {\n\n\t\treturn Backbone.Model.extend( _.defaults( {\n\n\t\t\t/**\n\t\t\t * Model relationships\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\trelationships: {\n\t\t\t\tparent: {\n\t\t\t\t\tmodel: 'llms_quiz',\n\t\t\t\t\ttype: 'model',\n\t\t\t\t},\n\t\t\t\tchildren: {\n\t\t\t\t\tchoices: {\n\t\t\t\t\t\tclass: 'QuestionChoices',\n\t\t\t\t\t\tmodel: 'choice',\n\t\t\t\t\t\ttype: 'collection',\n\t\t\t\t\t},\n\t\t\t\t\timage: {\n\t\t\t\t\t\tclass: 'Image',\n\t\t\t\t\t\tmodel: 'image',\n\t\t\t\t\t\ttype: 'model',\n\t\t\t\t\t},\n\t\t\t\t\tquestions: {\n\t\t\t\t\t\tclass: 'Questions',\n\t\t\t\t\t\tconditional: function( model ) {\n\t\t\t\t\t\t\tvar type = model.get( 'question_type' ),\n\t\t\t\t\t\t\ttype_id = _.isString( type ) ? type : type.get( 'id' );\n\t\t\t\t\t\t\treturn ( 'group' === type_id );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmodel: 'llms_question',\n\t\t\t\t\t\ttype: 'collection',\n\t\t\t\t\t},\n\t\t\t\t\tquestion_type: {\n\t\t\t\t\t\tclass: 'QuestionType',\n\t\t\t\t\t\tlookup: function( val ) {\n\t\t\t\t\t\t\tif ( _.isString( val ) ) {\n\t\t\t\t\t\t\t\treturn window.llms_builder.questions.get( val );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn val;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmodel: 'question_type',\n\t\t\t\t\t\ttype: 'model',\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Model defaults\n\t\t\t *\n\t\t\t * @return obj\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tdefaults: function() {\n\t\t\t\treturn {\n\t\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\t\tchoices: [],\n\t\t\t\t\tcontent: '',\n\t\t\t\t\tdescription_enabled: 'no',\n\t\t\t\t\timage: {},\n\t\t\t\t\tmulti_choices: 'no',\n\t\t\t\t\tmenu_order: 1,\n\t\t\t\t\tpoints: 1,\n\t\t\t\t\tquestion_type: 'generic',\n\t\t\t\t\tquestions: [], // for question groups\n\t\t\t\t\tparent_id: '',\n\t\t\t\t\ttitle: '',\n\t\t\t\t\ttype: 'llms_question',\n\t\t\t\t\tvideo_enabled: 'no',\n\t\t\t\t\tvideo_src: '',\n\n\t\t\t\t\t_expanded: false,\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Initializer\n\t\t\t *\n\t\t\t * @param obj data object of data for the model\n\t\t\t * @param obj options additional options\n\t\t\t * @return void\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tinitialize: function( data, options ) {\n\n\t\t\t\tvar self = this;\n\n\t\t\t\tthis.startTracking();\n\t\t\t\tthis.init_relationships( options );\n\n\t\t\t\tif ( false !== this.get( 'question_type' ).choices ) {\n\n\t\t\t\t\tthis._ensure_min_choices();\n\n\t\t\t\t\t// when a choice is removed, maybe add back some defaults so we always have the minimum\n\t\t\t\t\tthis.listenTo( this.get( 'choices' ), 'remove', function() {\n\t\t\t\t\t\t// new items are added at index 0 when there's only 1 item in the collection, not sure why exactly...\n\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\tself._ensure_min_choices();\n\t\t\t\t\t\t}, 0 );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t// ensure question types that don't support points don't record default 1 point in database\n\t\t\t\tif ( ! this.get( 'question_type' ).get( 'points' ) ) {\n\t\t\t\t\tthis.set( 'points', 0 );\n\t\t\t\t}\n\n\t\t\t\t_.delay( function( self ) {\n\t\t\t\t\tself.on( 'change:points', self.get_parent().update_points, self.get_parent() );\n\t\t\t\t}, 1, this );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Add a new question choice\n\t\t\t *\n\t\t\t * @param obj data object of choice data\n\t\t\t * @param obj options additional options\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tadd_choice: function( data, options ) {\n\n\t\t\t\tvar max = this.get( 'question_type' ).get_max_choices();\n\t\t\t\tif ( this.get( 'choices' ).size() >= max ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdata = data || {};\n\t\t\t\toptions = options || {};\n\n\t\t\t\tdata.choice_type = this.get( 'question_type' ).get_choice_type();\n\t\t\t\tdata.question_id = this.get( 'id' );\n\t\t\t\toptions.parent = this;\n\n\t\t\t\tvar choice = this.get( 'choices' ).add( data, options );\n\n\t\t\t\tBackbone.pubSub.trigger( 'question-add-choice', choice, this );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Collapse question_type attribute during full syncs to save to database\n\t\t\t * Not needed because question types cannot be adjusted after question creation\n\t\t\t * Called from sync controller\n\t\t\t *\n\t\t\t * @param obj atts flat object of attributes to be saved to db\n\t\t\t * @param string sync_type full or partial\n\t\t\t * full indicates a force resync or that the model isn't persisted yet\n\t\t\t * @return obj\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tbefore_save: function( atts, sync_type ) {\n\t\t\t\tif ( 'full' === sync_type ) {\n\t\t\t\t\tatts.question_type = this.get( 'question_type' ).get( 'id' );\n\t\t\t\t}\n\t\t\t\treturn atts;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the model's parent (if set)\n\t\t\t *\n\t\t\t * @return obj|false\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_parent: function() {\n\n\t\t\t\tvar rels = this.get_relationships();\n\n\t\t\t\tif ( rels.parent ) {\n\t\t\t\t\tif ( this.collection && this.collection.parent ) {\n\t\t\t\t\t\treturn this.collection.parent;\n\t\t\t\t\t} else if ( rels.parent.reference ) {\n\t\t\t\t\t\treturn rels.parent.reference;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the translated post type name for the model's type\n\t\t\t *\n\t\t\t * @param bool plural if true, returns the plural, otherwise returns singular\n\t\t\t * @return string\n\t\t\t * @since 3.27.0\n\t\t\t * @version 3.27.0\n\t\t\t */\n\t\t\tget_l10n_type: function( plural ) {\n\n\t\t\t\tif ( plural ) {\n\t\t\t\t\treturn LLMS.l10n.translate( 'questions' );\n\t\t\t\t}\n\n\t\t\t\treturn LLMS.l10n.translate( 'question' );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Gets the index of the question within it's parent\n\t\t\t * Question numbers skip content elements\n\t\t\t * & content elements skip questions\n\t\t\t *\n\t\t\t * @return int\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_type_index: function() {\n\n\t\t\t\t// current models type, used to check the predicate in the filter function below\n\t\t\t\tvar curr_type = this.get( 'question_type' ).get( 'id' ),\n\t\t\t\tquestions;\n\n\t\t\t\tquestions = this.collection.filter( function( question ) {\n\n\t\t\t\t\tvar type = question.get( 'question_type' ).get( 'id' );\n\n\t\t\t\t\t// if current model is not content, return all non-content questions\n\t\t\t\t\tif ( curr_type !== 'content' ) {\n\t\t\t\t\t\treturn ( 'content' !== type );\n\t\t\t\t\t}\n\n\t\t\t\t\t// current model is content, return only content questions\n\t\t\t\t\treturn 'content' === type;\n\n\t\t\t\t} );\n\n\t\t\t\treturn questions.indexOf( this );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Gets iterator for the given type\n\t\t\t * Questions use numbers and content uses alphabet\n\t\t\t *\n\t\t\t * @return mixed\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_type_iterator: function() {\n\n\t\t\t\tvar index = this.get_type_index();\n\n\t\t\t\tif ( -1 === index ) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\n\t\t\t\tif ( 'content' === this.get( 'question_type' ).get( 'id' ) ) {\n\t\t\t\t\tvar alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );\n\t\t\t\t\treturn alphabet[ index ];\n\t\t\t\t}\n\n\t\t\t\treturn index + 1;\n\n\t\t\t},\n\n\t\t\tget_qid: function() {\n\n\t\t\t\tvar parent = this.get_parent_question(),\n\t\t\t\tprefix = '';\n\n\t\t\t\tif ( parent ) {\n\n\t\t\t\t\tprefix = parent.get_qid() + '.';\n\n\t\t\t\t}\n\n\t\t\t\t// return short_id + this.get_type_iterator();\n\t\t\t\treturn prefix + this.get_type_iterator();\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the parent question (if the question is in a question group)\n\t\t\t *\n\t\t\t * @return obj|false\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_parent_question: function() {\n\n\t\t\t\tif ( this.is_in_group() ) {\n\n\t\t\t\t\treturn this.collection.parent;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the parent quiz\n\t\t\t *\n\t\t\t * @return obj\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_parent_quiz: function() {\n\t\t\t\treturn this.get_parent();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Points getter\n\t\t\t * ensures that 0 is always returned if the question type doesn't support points\n\t\t\t *\n\t\t\t * @return int\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_points: function() {\n\n\t\t\t\tif ( ! this.get( 'question_type' ).get( 'points' ) ) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn this.get( 'points' );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the questions percentage value within the quiz\n\t\t\t *\n\t\t\t * @return string\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tget_points_percentage: function() {\n\n\t\t\t\tvar total = this.get_parent().get( '_points' ),\n\t\t\t\tpoints = this.get( 'points' );\n\n\t\t\t\tif ( 0 === total ) {\n\t\t\t\t\treturn '0%';\n\t\t\t\t}\n\n\t\t\t\treturn ( ( points / total ) * 100 ).toFixed( 2 ) + '%';\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Determine if the question belongs to a question group\n\t\t\t *\n\t\t\t * @return {Boolean}\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tis_in_group: function() {\n\n\t\t\t\treturn ( 'question' === this.collection.parent.get( 'type' ) );\n\n\t\t\t},\n\n\t\t\t_ensure_min_choices: function() {\n\n\t\t\t\tvar choices = this.get( 'choices' );\n\t\t\t\twhile ( choices.size() < this.get( 'question_type' ).get_min_choices() ) {\n\t\t\t\t\tthis.add_choice();\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Questions Collection\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Collections/Questions',[ 'Models/Question' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\t// reorder called by QuestionList view when sortable drops occur\n\t\t\tthis.on( 'reorder', this.update_order );\n\n\t\t\t// when a question is added or removed, update order\n\t\t\tthis.on( 'add', this.update_order );\n\t\t\tthis.on( 'remove', this.update_order );\n\n\t\t\tthis.on( 'add', this.update_parent );\n\n\t\t},\n\n\t\t/**\n\t\t * Update the order attr of each question in the list to reflect the order of the collection\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_order: function() {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.each( function( question ) {\n\n\t\t\t\tquestion.set( 'menu_order', self.indexOf( question ) + 1 );\n\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * When adding a question to a question list, update the question's parent\n\t\t * Will ensure that questions moved into and out of groups always have the correct parent_id\n\t\t *\n\t\t * @param obj model instance of the question model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_parent: function( model ) {\n\n\t\t\tmodel.set( 'parent_id', this.parent.get( 'id' ) );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Quiz Schema.\n *\n * @since 3.17.6\n * @since 7.4.0 Added upsell for Question Bank and condition in `random_questions` schema.\n * @since 7.6.2 Added `disable_retake` schema.\n * @version 7.6.2\n */\ndefine( 'Schemas/Quiz',[], function() {\n\n\treturn window.llms.hooks.applyFilters( 'llms_define_quiz_schema', {\n\n\t\tdefault: {\n\t\t\ttitle: LLMS.l10n.translate( 'General Settings' ),\n\t\t\ttoggleable: true,\n\t\t\tfields: [\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'permalink',\n\t\t\t\t\t\tid: 'permalink',\n\t\t\t\t\t\ttype: 'permalink',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'content',\n\t\t\t\t\t\tid: 'description',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Description' ),\n\t\t\t\t\t\ttype: 'editor',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'passing_percent',\n\t\t\t\t\t\tid: 'passing-percent',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Passing Percentage' ),\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Minimum percentage of total points required to pass the quiz' ),\n\t\t\t\t\t\ttype: 'number',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'allowed_attempts',\n\t\t\t\t\t\tid: 'allowed-attempts',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Limit Attempts' ),\n\t\t\t\t\t\tswitch_attribute: 'limit_attempts',\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Limit the maximum number of times a student can take this quiz' ),\n\t\t\t\t\t\ttype: 'switch-number',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'time_limit',\n\t\t\t\t\t\tid: 'time-limit',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Time Limit' ),\n\t\t\t\t\t\tmin: 1,\n\t\t\t\t\t\tmax: 360,\n\t\t\t\t\t\tswitch_attribute: 'limit_time',\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Enforce a maximum number of minutes a student can spend on each attempt' ),\n\t\t\t\t\t\ttype: 'switch-number',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'show_correct_answer',\n\t\t\t\t\t\tid: 'show-correct-answer',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Show Correct Answers' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'When enabled, students will be shown the correct answer to any question they answered incorrectly.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'random_questions',\n\t\t\t\t\t\tid: 'random-questions',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Randomize Question Order' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Display questions in a random order for each attempt. Content questions are locked into their defined positions.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn 'yes' === this.get( 'question_bank' ) ? false : true;\n\t\t\t\t\t\t}\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'disable_retake',\n\t\t\t\t\t\tid: 'disable-retake',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Disable Retake' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Prevent quiz retake after student passed the quiz.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'question-bank',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Question Bank' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'A question bank helps prevent cheating and reinforces learning by allowing instructors to create assessments with randomized questions pulled from a bank of questions. (Available in Advanced Quizzes addon)' ),\n\t\t\t\t\t\ttype: 'upsell',\n\t\t\t\t\t\ttext: LLMS.l10n.translate( 'Get LifterLMS Advanced Quizzes' ),\n\t\t\t\t\t\turl: 'https://lifterlms.com/product/advanced-quizzes/?utm_source=LifterLMS%20Plugin&utm_medium=Quiz%20Builder%20Button&utm_campaign=Advanced%20Question%20Upsell&utm_content=3.16.0&utm_term=Questions%20Bank'\n\t\t\t\t\t}\n\t\t\t\t]\n\n\t\t\t],\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Quiz Model.\n *\n * @since 3.16.0\n * @version 7.5.0\n */\ndefine( 'Models/Quiz',[\n\t\t'Collections/Questions',\n\t\t'Models/Lesson',\n\t\t'Models/Question',\n\t\t'Models/_Relationships',\n\t\t'Models/_Utilities',\n\t\t'Schemas/Quiz',\n\t], function(\n\t\tQuestions,\n\t\tLesson,\n\t\tQuestion,\n\t\tRelationships,\n\t\tUtilities,\n\t\tQuizSchema\n\t) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\t/**\n\t\t * model relationships\n\t\t * @type {Object}\n\t\t */\n\t\trelationships: {\n\t\t\tparent: {\n\t\t\t\tmodel: 'lesson',\n\t\t\t\ttype: 'model',\n\t\t\t},\n\t\t\tchildren: {\n\t\t\t\tquestions: {\n\t\t\t\t\tclass: 'Questions',\n\t\t\t\t\tmodel: 'llms_question',\n\t\t\t\t\ttype: 'collection',\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Lesson Settings Schema\n\t\t * @type {Object}\n\t\t */\n\t\tschema: QuizSchema,\n\n\t\t/**\n\t\t * New quiz defaults.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 7.4.0 Added filter for filtering defaults.\n\t\t * @since 7.5.0 Replaced unused `random_answers` property with `random_questions`.\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\tdefaults: function() {\n\n\t\t\treturn window.llms.hooks.applyFilters( 'llms_quiz_model_defaults', {\n\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\ttitle: LLMS.l10n.translate( 'New Quiz' ),\n\t\t\t\ttype: 'llms_quiz',\n\t\t\t\tlesson_id: '',\n\n\t\t\t\tstatus: 'draft',\n\n\t\t\t\t// editable fields.\n\t\t\t\tcontent: '',\n\t\t\t\tallowed_attempts: 5,\n\t\t\t\tlimit_attempts: 'no',\n\t\t\t\tlimit_time: 'no',\n\t\t\t\tpassing_percent: 65,\n\t\t\t\tname: '',\n\t\t\t\trandom_questions: 'no',\n\t\t\t\ttime_limit: 30,\n\t\t\t\tshow_correct_answer: 'no',\n\t\t\t\tdisable_retake: 'no',\n\n\t\t\t\tquestions: [],\n\n\t\t\t\t// calculated.\n\t\t\t\t_points: 0,\n\n\t\t\t\t// display.\n\t\t\t\tpermalink: '',\n\t\t\t\t_show_settings: false,\n\t\t\t\t_questions_loaded: false,\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Initializer\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.24.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.init_custom_schema();\n\t\t\tthis.startTracking();\n\t\t\tthis.init_relationships();\n\n\t\t\tthis.listenTo( this.get( 'questions' ), 'add', this.update_points );\n\t\t\tthis.listenTo( this.get( 'questions' ), 'remove', this.update_points );\n\n\t\t\tthis.set( '_points', this.get_total_points() );\n\n\t\t\t// when a quiz is published, ensure the parent lesson is marked as \"Enabled\" for quizzing\n\t\t\tthis.on( 'change:status', function() {\n\t\t\t\tif ( 'publish' === this.get( 'status' ) ) {\n\t\t\t\t\tthis.get_parent().set( 'quiz_enabled', 'yes' );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\twindow.llms.hooks.doAction( 'llms_quiz_model_init', this );\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new question to the quiz\n\t\t * @param obj data question data\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tadd_question: function( data ) {\n\n\t\t\tdata.parent_id = this.get( 'id' );\n\t\t\tvar question = this.get( 'questions' ).add( data, {\n\t\t\t\tparent: this,\n\t\t\t} );\n\t\t\tBackbone.pubSub.trigger( 'quiz-add-question', question, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the translated post type name for the model's type\n\t\t * @param bool plural if true, returns the plural, otherwise returns singular\n\t\t * @return string\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tget_l10n_type: function( plural ) {\n\n\t\t\tif ( plural ) {\n\t\t\t\treturn LLMS.l10n.translate( 'quizzes' );\n\t\t\t}\n\n\t\t\treturn LLMS.l10n.translate( 'quiz' );\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the quiz's total points\n\t\t * @return int\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_total_points: function() {\n\n\t\t\tvar points = 0;\n\n\t\t\tthis.get( 'questions' ).each( function( question ) {\n\t\t\t\tpoints += question.get_points();\n\t\t\t} );\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\t/**\n\t\t * Lazy load questions via AJAX\n\t\t * @param {Function} cb callback function\n\t\t * @return void\n\t\t * @since 3.19.2\n\t\t * @version 3.19.2\n\t\t */\n\t\tload_questions: function( cb ) {\n\n\t\t\tif ( this.get( '_questions_loaded' ) ) {\n\n\t\t\t\tcb();\n\n\t\t\t} else {\n\n\t\t\t\tvar self = this;\n\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'llms_builder',\n\t\t\t\t\t\taction_type: 'lazy_load',\n\t\t\t\t\t\tcourse_id: window.llms_builder.CourseModel.get( 'id' ),\n\t\t\t\t\t\tload_id: this.get( 'id' ),\n\t\t\t\t\t},\n\t\t\t\t\terror: function( xhr, status, error ) {\n\n\t\t\t\t\t\tconsole.log( xhr, status, error );\n\t\t\t\t\t\twindow.llms_builder.debug.log( '==== start load_questions error ====', xhr, status, error, '==== finish load_questions error ====' );\n\t\t\t\t\t\tcb( true );\n\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( res ) {\n\t\t\t\t\t\tif ( res && res.questions ) {\n\t\t\t\t\t\t\tself.set( '_questions_loaded', true );\n\t\t\t\t\t\t\tif ( res.questions ) {\n\t\t\t\t\t\t\t\t_.each( res.questions, self.add_question, self );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcb();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcb( true );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\n\t\t},\n\n\t\t/**\n\t\t * Update total number of points calculated property\n\t\t * @return int\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_points: function() {\n\n\t\t\tthis.set( '_points', this.get_total_points() );\n\n\t\t},\n\n\t}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Lesson Schemas\n *\n * @since 3.17.0\n * @version 3.25.4\n */\ndefine( 'Schemas/Lesson',[], function() {\n\n\treturn window.llms.hooks.applyFilters( 'llms_define_lesson_schema', {\n\n\t\tdefault: {\n\t\t\ttitle: LLMS.l10n.translate( 'General Settings' ),\n\t\t\ttoggleable: true,\n\t\t\tfields: [\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'permalink',\n\t\t\t\t\t\tid: 'permalink',\n\t\t\t\t\t\ttype: 'permalink',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'video_embed',\n\t\t\t\t\t\tid: 'video-embed',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Video Embed URL' ),\n\t\t\t\t\t\ttype: 'video_embed',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'audio_embed',\n\t\t\t\t\t\tid: 'audio-embed',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Audio Embed URL' ),\n\t\t\t\t\t\ttype: 'audio_embed',\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'free_lesson',\n\t\t\t\t\t\tid: 'free-lesson',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Free Lesson' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Free lessons can be accessed without enrollment.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'require_passing_grade',\n\t\t\t\t\t\tid: 'require-passing-grade',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Require Passing Grade on Quiz' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'When enabled, students must pass this quiz before the lesson can be completed.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( 'yes' === this.get( 'quiz_enabled' ) );\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'require_assignment_passing_grade',\n\t\t\t\t\t\tid: 'require-assignment-passing-grade',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Require Passing Grade on Assignment' ),\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'When enabled, students must pass this assignment before the lesson can be completed.' ),\n\t\t\t\t\t\ttype: 'switch',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( 'undefined' !== window.llms_builder.assignments && 'yes' === this.get( 'assignment_enabled' ) );\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'points',\n\t\t\t\t\t\tid: 'points',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Lesson Weight' ),\n\t\t\t\t\t\tlabel_after: LLMS.l10n.translate( 'POINTS' ),\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 99,\n\t\t\t\t\t\ttip: LLMS.l10n.translate( 'Determines the weight of the lesson when calculating the overall grade of the course.' ),\n\t\t\t\t\t\ttip_position: 'top-left',\n\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( ( 'yes' === this.get( 'quiz_enabled' ) ) || ( 'undefined' !== window.llms_builder.assignments && 'yes' === this.get( 'assignment_enabled' ) ) );\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'prerequisite',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( false === this.is_first_in_course() );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tid: 'prerequisite',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Prerequisite' ),\n\t\t\t\t\t\tswitch_attribute: 'has_prerequisite',\n\t\t\t\t\t\ttype: 'switch-select',\n\t\t\t\t\t\toptions: function() {\n\t\t\t\t\t\t\treturn this.get_available_prereq_options();\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Course Drip Method' ),\n\t\t\t\t\t\tid: 'course-drip',\n\t\t\t\t\t\ttype: 'heading',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdetail: LLMS.l10n.translate( 'Drip settings are currently set at the course level, under the Restrictions settings tab. Disable to allow lesson level drip settings.' ) + ' ' + LLMS.l10n.translate( 'Edit Course' ) + ' ',\n\t\t\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Course Drip Method' ),\n\t\t\t\t\t\tid: 'course-drip',\n\t\t\t\t\t\ttype: 'heading',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( ! this.get_course() || 'yes' !== this.get_course().get( 'lesson_drip' ) || ! this.get_course().get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdetail: LLMS.l10n.translate( 'Drip settings can be set at the course level to release course content at a specified interval, in the Restrictions settings tab.' ) + ' ' + LLMS.l10n.translate( 'Edit Course' ) + ' ',\n\t\t\t\t\t},\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'drip_method',\n\t\t\t\t\t\tid: 'drip-method',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Drip Method' ),\n\t\t\t\t\t\tswitch_attribute: 'drip_method',\n\t\t\t\t\t\ttype: 'select',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\treturn ( ! this.get_course() || 'yes' !== this.get_course().get( 'lesson_drip' ) || ! this.get_course().get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions: function() {\n\n\t\t\t\t\t\t\tvar options = [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkey: '',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( 'None' ),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkey: 'date',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( 'On a specific date' ),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkey: 'enrollment',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( '# of days after course enrollment' ),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tif ( this.get_course() && this.get_course().get( 'start_date' ) ) {\n\t\t\t\t\t\t\t\toptions.push( {\n\t\t\t\t\t\t\t\t\tkey: 'start',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( '# of days after course start date' ),\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( 'yes' === this.get( 'has_prerequisite' ) ) {\n\t\t\t\t\t\t\t\toptions.push( {\n\t\t\t\t\t\t\t\t\tkey: 'prerequisite',\n\t\t\t\t\t\t\t\t\tval: LLMS.l10n.translate( '# of days after prerequisite lesson completion' ),\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn options;\n\n\t\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'days_before_available',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\tif ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ( -1 !== [ 'enrollment', 'start', 'prerequisite' ].indexOf( this.get( 'drip_method' ) ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tid: 'days-before-available',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( '# of days' ),\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\ttype: 'number',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'date_available',\n\t\t\t\t\t\tdate_format: 'Y-m-d',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\tif ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ( 'date' === this.get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tid: 'date-available',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Date' ),\n\t\t\t\t\t\ttimepicker: 'false',\n\t\t\t\t\t\ttype: 'datepicker',\n\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tattribute: 'time_available',\n\t\t\t\t\t\tcondition: function() {\n\t\t\t\t\t\t\tif ( this.get_course() && 'yes' === this.get_course().get( 'lesson_drip' ) && this.get_course().get( 'drip_method' ) ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ( 'date' === this.get( 'drip_method' ) );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdatepicker: 'false',\n\t\t\t\t\t\tdate_format: 'h:i A',\n\t\t\t\t\t\tid: 'time-available',\n\t\t\t\t\t\tlabel: LLMS.l10n.translate( 'Time' ),\n\t\t\t\t\t\ttype: 'datepicker',\n\t\t\t},\n\t\t\t\t],\n\t\t\t],\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Lesson Model\n *\n * @since 3.13.0\n * @version 4.20.0\n */\ndefine( 'Models/Lesson',[ 'Models/Quiz', 'Models/_Relationships', 'Models/_Utilities', 'Schemas/Lesson' ], function( Quiz, Relationships, Utilities, LessonSchema ) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\t/**\n\t\t * Model relationships\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\trelationships: {\n\t\t\tparents: {\n\t\t\t\tmodel: 'section',\n\t\t\t\ttype: 'model',\n\t\t\t},\n\t\t\tchildren: {\n\t\t\t\tquiz: {\n\t\t\t\t\tclass: 'Quiz',\n\t\t\t\t\tconditional: function( model ) {\n\t\t\t\t\t\t// if quiz is enabled OR not enabled but we have some quiz data as an obj\n\t\t\t\t\t\treturn ( 'yes' === model.get( 'quiz_enabled' ) || ! _.isEmpty( model.get( 'quiz' ) ) );\n\t\t\t\t\t},\n\t\t\t\t\tmodel: 'llms_quiz',\n\t\t\t\t\ttype: 'model',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Lesson Settings Schema\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tschema: LessonSchema,\n\n\t\t/**\n\t\t * New lesson defaults\n\t\t *\n\t\t * @since 3.13.0\n\t\t * @since 3.24.0 Unknown.\n\t\t *\n\t\t * @return {Object} Default options associative array (js object).\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\ttitle: LLMS.l10n.translate( 'New Lesson' ),\n\t\t\t\ttype: 'lesson',\n\t\t\t\torder: this.collection ? this.collection.length + 1 : 1,\n\t\t\t\tparent_course: window.llms_builder.course.id,\n\t\t\t\tparent_section: '',\n\n\t\t\t\t// Urls.\n\t\t\t\tedit_url: '',\n\t\t\t\tview_url: '',\n\n\t\t\t\t// Editable fields.\n\t\t\t\tcontent: '',\n\t\t\t\taudio_embed: '',\n\t\t\t\thas_prerequisite: 'no',\n\t\t\t\trequire_passing_grade: 'yes',\n\t\t\t\trequire_assignment_passing_grade: 'yes',\n\t\t\t\tvideo_embed: '',\n\t\t\t\tfree_lesson: '',\n\t\t\t\tpoints: 1,\n\n\t\t\t\t// Other fields.\n\t\t\t\tassignment: {}, // Assignment model/data.\n\t\t\t\tassignment_enabled: 'no',\n\n\t\t\t\tquiz: {}, // Quiz model/data.\n\t\t\t\tquiz_enabled: 'no',\n\n\t\t\t\t_forceSync: false,\n\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.17.0 Unknown\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.init_custom_schema();\n\t\t\tthis.startTracking();\n\t\t\tthis.maybe_init_assignments();\n\t\t\tthis.init_relationships();\n\n\t\t\t// If the lesson ID isn't set on a quiz, set it.\n\t\t\tvar quiz = this.get( 'quiz' );\n\t\t\tif ( ! _.isEmpty( quiz ) && ! quiz.get( 'lesson_id' ) ) {\n\t\t\t\tquiz.set( 'lesson_id', this.get( 'id' ) );\n\t\t\t}\n\n\t\t\twindow.llms.hooks.doAction( 'llms_lesson_model_init', this );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve a reference to the parent course of the lesson\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 4.14.0 Use Section.get_course() in favor of Section.get_parent().\n\t\t *\n\t\t * @return {Object} The parent course model of the lesson.\n\t\t */\n\t\tget_course: function() {\n\t\t\treturn this.get_parent().get_course();\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the translated post type name for the model's type\n\t\t *\n\t\t * @since 3.16.12\n\t\t *\n\t\t * @param bool plural If true, returns the plural, otherwise returns singular.\n\t\t * @return string The translated post type name.\n\t\t */\n\t\tget_l10n_type: function( plural ) {\n\n\t\t\tif ( plural ) {\n\t\t\t\treturn LLMS.l10n.translate( 'lessons' );\n\t\t\t}\n\n\t\t\treturn LLMS.l10n.translate( 'lesson' );\n\t\t},\n\n\t\t/**\n\t\t * Override default get_parent to grab from collection if models parent isn't set\n\t\t *\n\t\t * @since 3.17.0\n\t\t *\n\t\t * @return {Object}|false The parent model or false if not available.\n\t\t */\n\t\tget_parent: function() {\n\n\t\t\tvar rels = this.get_relationships();\n\t\t\tif ( rels.parent && rels.parent.reference ) {\n\t\t\t\treturn rels.parent.reference;\n\t\t\t} else if ( this.collection && this.collection.parent ) {\n\t\t\t\treturn this.collection.parent;\n\t\t\t}\n\t\t\treturn false;\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the questions percentage value within the quiz\n\t\t *\n\t\t * @since 3.24.0\n\t\t *\n\t\t * @return {String} Questions percentage value within the quiz.\n\t\t */\n\t\tget_points_percentage: function() {\n\n\t\t\tvar total = this.get_course().get_total_points(),\n\t\t\t\tpoints = this.get( 'points' ) * 1;\n\n\t\t\tif ( ! _.isNumber( points ) ) {\n\t\t\t\tpoints = 0;\n\t\t\t}\n\n\t\t\tif ( 0 === total ) {\n\t\t\t\treturn '0%';\n\t\t\t}\n\n\t\t\treturn ( ( points / total ) * 100 ).toFixed( 2 ) + '%';\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve an array of prerequisite options available for the current lesson\n\t\t *\n\t\t * @since 3.17.0\n\t\t *\n\t\t * @return {Object} Prerequisite options.\n\t\t */\n\t\tget_available_prereq_options: function() {\n\n\t\t\tvar parent_section_index = this.get_parent().collection.indexOf( this.get_parent() ),\n\t\t\t\tlesson_index_in_section = this.collection.indexOf( this ),\n\t\t\t\toptions = [];\n\n\t\t\tthis.get_course().get( 'sections' ).each( function( section, curr_sec_index ) {\n\t\t\t\tif ( curr_sec_index <= parent_section_index ) {\n\t\t\t\t\tvar group = {\n\t\t\t\t\t\t\t// Translators: %1$d = section order number, %2$s = section title.\n\t\t\t\t\t\tlabel: LLMS.l10n.replace( 'Section %1$d: %2$s', {\n\t\t\t\t\t\t\t'%1$d': section.get( 'order' ),\n\t\t\t\t\t\t\t'%2$s': section.get( 'title' )\n\t\t\t\t\t\t} ),\n\t\t\t\t\toptions: [],\n\t\t\t\t\t};\n\n\t\t\t\t\tsection.get( 'lessons' ).each( function( lesson, curr_les_index ) {\n\t\t\t\t\t\tif ( curr_sec_index !== parent_section_index || curr_les_index < lesson_index_in_section ) {\n\t\t\t\t\t\t\t// Translators: %1$d = lesson order number, %2$s = lesson title.\n\t\t\t\t\t\t\tgroup.options.push( {\n\t\t\t\t\t\t\t\tkey: lesson.get( 'id' ),\n\t\t\t\t\t\t\t\tval: LLMS.l10n.replace( 'Lesson %1$d: %2$s', {\n\t\t\t\t\t\t\t\t\t'%1$d': lesson.get( 'order' ),\n\t\t\t\t\t\t\t\t\t'%2$s': lesson.get( 'title' )\n\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this );\n\n\t\t\t\t\toptions.push( group );\n\t\t\t\t}\n\t\t\t}, this );\n\n\t\t\treturn options;\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new quiz to the lesson\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.27.0 Unknown.\n\t\t *\n\t\t * @param {Object} data Object of quiz data used to construct a new quiz model.\n\t\t * @return {Object} Model for the created quiz.\n\t\t */\n\t\tadd_quiz: function( data ) {\n\n\t\t\tdata = data || {};\n\n\t\t\tdata.lesson_id = this.id;\n\t\t\tdata._questions_loaded = true;\n\n\t\t\tif ( ! data.title ) {\n\n\t\t\t\tdata.title = LLMS.l10n.replace( '%1$s Quiz', {\n\t\t\t\t\t'%1$s': this.get( 'title' ),\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tthis.set( 'quiz', data );\n\t\t\tthis.init_relationships();\n\n\t\t\tvar quiz = this.get( 'quiz' );\n\t\t\tthis.set( 'quiz_enabled', 'yes' );\n\n\t\t\twindow.llms.hooks.doAction( 'llms_lesson_add_quiz', quiz, this );\n\n\t\t\treturn quiz;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if this is the first lesson\n\t\t *\n\t\t * @since 3.17.0\n\t\t * @since 4.20.0 Use is_first_in_section() new method.\n\t\t *\n\t\t * @return {Boolean} Whether this is the first lesson of its course.\n\t\t */\n\t\tis_first_in_course: function() {\n\n\t\t\t// If it's not the first item in the section it cant be the first lesson.\n\t\t\tif ( ! this.is_first_in_section() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// If it's not the first section it cant' be first lesson.\n\t\t\tvar section = this.get_parent();\n\t\t\tif ( section.collection.indexOf( section ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// It's first lesson in first section.\n\t\t\treturn true;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if this is the last lesson of the course\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @return {Boolean} Whether this is the last lesson of its course.\n\t\t */\n\t\t is_last_in_course: function() {\n\n\t\t\t// If it's not last item in the section it cant be the last lesson.\n\t\t\tif ( ! this.is_last_in_section() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// If it's not the last section it cant' be last lesson.\n\t\t\tvar section = this.get_parent();\n\t\t\tif ( section.collection.indexOf( section ) < ( section.collection.size() - 1 ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// It's last lesson in last section.\n\t\t\treturn true;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if this is the first lesson within its section\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @return {Boolean} Whether this is the first lesson of its section.\n\t\t */\n\t\tis_first_in_section: function() {\n\t\t\treturn 0 === this.collection.indexOf( this );\n\t\t},\n\n\t\t/**\n\t\t * Determine if this is the last lesson within its section\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @return {Boolean} Whether this is the last lesson of its section.\n\t\t */\n\t\tis_last_in_section: function() {\n\t\t\treturn this.collection.indexOf( this ) === ( this.collection.size() - 1 );\n\t\t},\n\n\t\t/**\n\t\t * Get prev lesson in a course\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @param {String} status Prev lesson post status. If not specified any status will be taken into account.\n\t\t * @return {Object}|false Previous lesson model or `false` if no previous lesson could be found.\n\t\t */\n\t\tget_prev: function( status ) {\n\t\t\treturn this.get_sibling( 'prev', status );\n\t\t},\n\n\t\t/**\n\t\t * Get next lesson in a course\n\t\t *\n\t\t * @since 4.20.0\n\t\t *\n\t\t * @param {String} status Next lesson post status. If not specified any status will be taken into account.\n\t\t * @return {Object}|false Next lesson model or `false` if no next lesson could be found.\n\t\t */\n\t\tget_next: function( status ) {\n\t\t\treturn this.get_sibling( 'next', status );\n\t\t},\n\n\t\t/**\n\t\t * Get a sibling lesson\n\t\t *\n\t\t * @param {String} direction Siblings direction [next|prev]. If not specified will fall back on 'prev'.\n\t\t * @param {String} status Sibling lesson post status. If not specified any status will be taken into account.\n\t\t * @return {Object}|false Sibling lesson model, in the specified direction, or `false` if no sibling lesson could be found.\n\t\t */\n\t\tget_sibling: function( direction, status ) {\n\n\t\t\tdirection = 'next' === direction ? direction : 'prev';\n\n\t\t\t// Functions and vars to use when direction is 'prev' (default).\n\t\t\tvar is_course_limit_reached_f = 'is_first_in_course',\n\t\t\t\tis_section_limit_reached_f = 'is_first_in_section',\n\t\t\t\tsibling_index_increment = -1,\n\t\t\t\tget_sibling_lesson_in_sibling_section_f = 'last';\n\n\t\t\tif ( 'next' === direction ) {\n\t\t\t\tis_course_limit_reached_f = 'is_last_in_course';\n\t\t\t\tis_section_limit_reached_f = 'is_last_in_section';\n\t\t\t\tsibling_index_increment = 1,\n\t\t\t\tget_sibling_lesson_in_sibling_section_f = 'first';\n\t\t\t}\n\n\t\t\tif ( this[ is_course_limit_reached_f ]() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar sibling_index = this.collection.indexOf( this ) + sibling_index_increment,\n\t\t\t\tsibling_lesson = this.collection.at( sibling_index );\n\n\t\t\tif ( this[ 'next' === direction ? 'is_last_in_section' : 'is_first_in_section' ]() ) {\n\t\t\t\tvar cur_section = this.get_parent(),\n\t\t\t\t\tsibling_section = cur_section[ 'get_' + direction ]( false );\n\n\t\t\t\t// Skip sibling empty sections.\n\t\t\t\twhile ( sibling_section && ! sibling_section.get( 'lessons' ).size() ) {\n\t\t\t\t\tsibling_section = sibling_section[ 'get_' + direction ]( false );\n\t\t\t\t}\n\n\t\t\t\t// Couldn't find any suitable lesson.\n\t\t\t\tif ( ! sibling_section || ! sibling_section.get( 'lessons' ).size() ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tsibling_lesson = sibling_section.get( 'lessons' )[ get_sibling_lesson_in_sibling_section_f ]();\n\n\t\t\t}\n\n\t\t\t// If we need a specific lesson status.\n\t\t\tif ( status && status !== sibling_lesson.get( 'status' ) ) {\n\t\t\t\treturn sibling_lesson.get_sibling( direction, status );\n\t\t\t}\n\n\t\t\treturn sibling_lesson;\n\n\t\t},\n\n\t\t/**\n\t\t * Initialize lesson assignments *if* the assignments addon is available and enabled\n\t\t *\n\t\t * @since 3.17.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tmaybe_init_assignments: function() {\n\n\t\t\tif ( ! window.llms_builder.assignments ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.relationships.children.assignment = {\n\t\t\t\tclass: 'Assignment',\n\t\t\t\tconditional: function( model ) {\n\t\t\t\t\t// If assignment is enabled OR not enabled but we have some assignment data as an obj.\n\t\t\t\t\treturn ( 'yes' === model.get( 'assignment_enabled' ) || ! _.isEmpty( model.get( 'assignment' ) ) );\n\t\t\t\t},\n\t\t\t\tmodel: 'llms_assignment',\n\t\t\t\ttype: 'model',\n\t\t\t};\n\n\t\t},\n\n\t}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Lessons Collection\n *\n * @since 3.13.0\n * @version 3.17.0\n */\ndefine( 'Collections/Lessons',[ 'Models/Lesson' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\t// reorder called by LessonList view when sortable drops occur\n\t\t\tthis.on( 'reorder', this.on_reorder );\n\n\t\t\t// when a lesson is added or removed, update order\n\t\t\tthis.on( 'add', this.on_reorder );\n\t\t\tthis.on( 'remove', this.on_reorder );\n\n\t\t},\n\n\t\t/**\n\t\t * On lesson reorder callback\n\t\t *\n\t\t * Update the order attr of each lesson to reflect the new lesson order\n\t\t * Validate prerequisite (if set) and unset it if it's no longer a valid prereq\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\ton_reorder: function() {\n\t\t\tthis.update_order();\n\t\t\tthis.validate_prereqs();\n\t\t},\n\n\t\t/**\n\t\t * Update lesson order attribute of all lessons when lessons are reordered\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tupdate_order: function() {\n\n\t\t\tthis.each( function( lesson ) {\n\t\t\t\tlesson.set( 'order', this.indexOf( lesson ) + 1 );\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Validate prerequisite (if set) and unset it if it's no longer a valid prereq\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tvalidate_prereqs: function() {\n\n\t\t\tthis.each( function( lesson ) {\n\n\t\t\t\t// validate prereqs\n\t\t\t\tif ( 'yes' === lesson.get( 'has_prerequisite' ) ) {\n\t\t\t\t\tvar valid = _.pluck( _.flatten( _.pluck( lesson.get_available_prereq_options(), 'options' ) ), 'key' );\n\t\t\t\t\tif ( -1 === valid.indexOf( lesson.get( 'prerequisite' ) * 1 ) ) {\n\t\t\t\t\t\tlesson.set( {\n\t\t\t\t\t\t\tprerequisite: 0,\n\t\t\t\t\t\t\thas_prerequisite: 'no',\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Quiz Question Type Collection\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Collections/QuestionTypes',[ 'Models/QuestionType' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.on( 'add', this.comparator );\n\t\t\tthis.on( 'remove', this.comparator );\n\n\t\t},\n\n\t\t/**\n\t\t * Comparator (sorts collection)\n\t\t *\n\t\t * @param obj model QuestionType model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tcomparator: function( model ) {\n\n\t\t\treturn model.get( 'group' ).order;\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Section Model\n *\n * @since 3.16.0\n * @version 4.20.0\n */\ndefine( 'Models/Section',[ 'Collections/Lessons', 'Models/_Relationships' ], function( Lessons, Relationships ) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\trelationships: {\n\t\t\tparent: {\n\t\t\t\tmodel: 'course',\n\t\t\t\ttype: 'model',\n\t\t\t},\n\t\t\tchildren: {\n\t\t\t\tlessons: {\n\t\t\t\t\tclass: 'Lessons',\n\t\t\t\t\tmodel: 'lesson',\n\t\t\t\t\ttype: 'collection',\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * New section defaults\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tid: _.uniqueId( 'temp_' ),\n\t\t\t\tlessons: [],\n\t\t\t\torder: this.collection ? this.collection.length + 1 : 1,\n\t\t\t\tparent_course: window.llms_builder.course.id,\n\t\t\t\ttitle: LLMS.l10n.translate( 'New Section' ),\n\t\t\t\ttype: 'section',\n\n\t\t\t\t// Expand the first 100 sections by default to avoid timeout issues.\n\t\t\t\t_expanded: ! this.collection || this.collection.length <= 100 ? true : false,\n\t\t\t\t_selected: false,\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.startTracking();\n\t\t\tthis.init_relationships();\n\n\t\t},\n\n\t\t/**\n\t\t * Add a lesson to the section\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.11 Unknown.\n\t\t *\n\t\t * @param {Object} data Hash of lesson data (creates new lesson)\n\t\t * or existing lesson as a Backbone.Model.\n\t\t * @param {Object} options Hash of options.\n\t\t * @return {Object} Backbone.Model of the new/updated lesson.\n\t\t */\n\t\tadd_lesson: function( data, options ) {\n\n\t\t\tdata = data || {};\n\t\t\toptions = options || {};\n\n\t\t\tif ( data instanceof Backbone.Model ) {\n\t\t\t\tdata.set( 'status', 'publish' );\n\t\t\t\tdata.set( 'parent_section', this.get( 'id' ) );\n\t\t\t\tdata.set_parent( this );\n\t\t\t} else {\n\t\t\t\tdata.status = 'publish';\n\t\t\t\tdata.parent_section = this.get( 'id' );\n\t\t\t}\n\n\t\t\treturn this.get( 'lessons' ).add( data, options );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the translated post type name for the model's type\n\t\t *\n\t\t * @since 3.16.12\n\t\t *\n\t\t * @param {Boolean} plural If true, returns the plural, otherwise returns singular.\n\t\t * @return {String}\n\t\t */\n\t\tget_l10n_type: function( plural ) {\n\n\t\t\tif ( plural ) {\n\t\t\t\treturn LLMS.l10n.translate( 'sections' );\n\t\t\t}\n\n\t\t\treturn LLMS.l10n.translate( 'section' );\n\t\t},\n\n\t\t/**\n\t\t * Get next section in the collection\n\t\t *\n\t\t * @since 3.16.11\n\t\t *\n\t\t * @param {boolean} circular If true handles the collection in a circle.\n\t\t * If current is the last section, returns the first section.\n\t\t * @return {Object}|false\n\t\t */\n\t\tget_next: function( circular ) {\n\t\t\treturn this._get_sibling( 'next', circular );\n\t\t},\n\n\t\t/**\n\t\t * Retrieve a reference to the parent course of the section\n\t\t *\n\t\t * @since 4.14.0\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\tget_course: function() {\n\n\t\t\t// When working with an unsaved draft course the parent isn't properly set on the creation of a section.\n\t\t\tif ( ! this.get_parent() ) {\n\t\t\t\tthis.set_parent( window.llms_builder.CourseModel );\n\t\t\t}\n\n\t\t\treturn this.get_parent();\n\n\t\t},\n\n\t\t/**\n\t\t * Get prev section in the collection\n\t\t *\n\t\t * @since 3.16.11\n\t\t *\n\t\t * @param {Boolean} circular If true handles the collection in a circle.\n\t\t * If current is the first section, returns the last section.\n\t\t * @return {Object}|false\n\t\t */\n\t\tget_prev: function( circular ) {\n\t\t\treturn this._get_sibling( 'prev', circular );\n\t\t},\n\n\t\t/**\n\t\t * Get a sibling section\n\t\t *\n\t\t * @since 3.16.11\n\t\t * @since 4.20.0 Fix case when the last section was returned when looking for the prev of the first section and not `circular`.\n\t\t *\n\t\t * @param {String} direction Siblings direction [next|prev].\n\t\t * @param {Boolean} circular If true handles the collection in a circle.\n\t\t * If current is the last section, returns the first section.\n\t\t * If current is the first section, returns the last section.\n\t\t * @return {Object}|false\n\t\t */\n\t\t_get_sibling: function( direction, circular ) {\n\n\t\t\tcircular = ( 'undefined' === circular ) ? true : circular;\n\n\t\t\tvar max = this.collection.size() - 1,\n\t\t\t\tindex = this.collection.indexOf( this ),\n\t\t\t\tsibling_index;\n\n\t\t\tif ( 'next' === direction ) {\n\t\t\t\tsibling_index = index + 1;\n\t\t\t} else if ( 'prev' === direction ) {\n\t\t\t\tsibling_index = index - 1;\n\t\t\t}\n\n\t\t\t// Don't retrieve greater than max or less than min.\n\t\t\tif ( sibling_index <= max || sibling_index >= 0 ) {\n\n\t\t\t\treturn this.collection.at( sibling_index );\n\n\t\t\t} else if ( circular ) {\n\n\t\t\t\tif ( 'next' === direction ) {\n\t\t\t\t\treturn this.collection.first();\n\t\t\t\t} else if ( 'prev' === direction ) {\n\t\t\t\t\treturn this.collection.last();\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t},\n\n\t}, Relationships ) );\n\n} );\n\n","/**\n * Sections Collection\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Collections/Sections',[ 'Models/Section' ], function( model ) {\n\n\treturn Backbone.Collection.extend( {\n\n\t\t/**\n\t\t * Model for collection items\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tmodel: model,\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// reorder called by SectionList view when sortable drops occur\n\t\t\tthis.on( 'reorder', this.update_order );\n\n\t\t\t// when a section is added or removed, update order\n\t\t\tthis.on( 'add', this.update_order );\n\t\t\tthis.on( 'remove', this.update_order );\n\n\t\t},\n\n\t\t/**\n\t\t * Update the order attr of each section in the list to reflect the order of the collection\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_order: function() {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.each( function( section ) {\n\n\t\t\t\tsection.set( 'order', self.indexOf( section ) + 1 );\n\n\t\t\t} );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Lessons Collection\n *\n * @since 3.13.0\n * @version 3.16.0\n */\ndefine( 'Collections/loader',[\n\t\t'Collections/Lessons',\n\t\t'Collections/QuestionChoices',\n\t\t'Collections/Questions',\n\t\t'Collections/QuestionTypes',\n\t\t'Collections/Sections'\n\t], function(\n\t\tLessons,\n\t\tQuestionChoices,\n\t\tQuestions,\n\t\tQuestionTypes,\n\t\tSections\n\t) {\n\n\t\treturn {\n\t\t\tLessons: Lessons,\n\t\t\tQuestionChoices: QuestionChoices,\n\t\t\tQuestions: Questions,\n\t\t\tQuestionTypes: QuestionTypes,\n\t\t\tSections: Sections,\n\t\t};\n\n} );\n\n","/**\n * Abstract LifterLMS Model\n *\n * @since 3.17.0\n * @version 3.17.0\n */\ndefine( 'Models/Abstract',[ 'Models/_Relationships', 'Models/_Utilities' ], function( Relationships, Utilities ) {\n\n\treturn Backbone.Model.extend( _.defaults( {}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Course Model.\n *\n * @since 3.16.0\n * @since 3.24.0 Added `get_total_points()` method.\n * @since 3.37.11 Use lesson author ID instead of author object when adding existing lessons to a course.\n * @version 5.4.0\n */\ndefine( 'Models/Course',[ 'Collections/Sections', 'Models/_Relationships', 'Models/_Utilities' ], function( Sections, Relationships, Utilities ) {\n\n\treturn Backbone.Model.extend( _.defaults( {\n\n\t\trelationships: {\n\t\t\tchildren: {\n\t\t\t\tsections: {\n\t\t\t\t\tclass: 'Sections',\n\t\t\t\t\tmodel: 'section',\n\t\t\t\t\ttype: 'collection',\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * New Course Defaults.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Object}\n\t\t */\n\t\tdefaults: function() {\n\t\t\treturn {\n\t\t\t\tedit_url: '',\n\t\t\t\tsections: [],\n\t\t\t\ttitle: 'New Course',\n\t\t\t\ttype: 'course',\n\t\t\t\tview_url: '',\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Init.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.startTracking();\n\t\t\tthis.init_relationships();\n\n\t\t\t// Sidebar \"New Section\" button broadcast.\n\t\t\tBackbone.pubSub.on( 'add-new-section', this.add_section, this );\n\n\t\t\t// Sidebar \"New Lesson\" button broadcast.\n\t\t\tBackbone.pubSub.on( 'add-new-lesson', this.add_lesson, this );\n\n\t\t\tBackbone.pubSub.on( 'lesson-search-select', this.add_existing_lesson, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Add an existing lesson to the course.\n\t\t *\n\t\t * Duplicate a lesson from this or another course or attach an orphaned lesson.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.24.0 Unknown.\n\t\t * @since 3.37.11 Use the author id instead of the author object.\n\t\t * @since 5.4.0 Added filter hook 'llms_adding_existing_lesson_data'.\n\t\t * On cloning, duplicate assignments too, if assignment add-on active and assignment attached.\n\t\t *\n\t\t * @param {Object} lesson Lesson data obj.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_lesson: function( lesson ) {\n\n\t\t\tvar data = lesson.data;\n\n\t\t\tif ( 'clone' === lesson.action ) {\n\n\t\t\t\tdelete data.id;\n\n\t\t\t\t// If a quiz is attached, duplicate the quiz also.\n\t\t\t\tif ( data.quiz ) {\n\t\t\t\t\tdata.quiz = _.prepareQuizObjectForCloning( data.quiz );\n\t\t\t\t\tdata.quiz._questions_loaded = true;\n\t\t\t\t}\n\n\t\t\t\t// If assignment add-on active and assignment attached, duplicate the assignment too.\n\t\t\t\tif ( window.llms_builder.assignments && data.assignment ) {\n\t\t\t\t\tdata.assignment = _.prepareAssignmentObjectForCloning( data.assignment );\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tdata._forceSync = true;\n\n\t\t\t}\n\n\t\t\tdelete data.order;\n\t\t\tdelete data.parent_course;\n\t\t\tdelete data.parent_section;\n\n\t\t\t// Use author id instead of the lesson author object.\n\t\t\tdata = _.prepareExistingPostObjectDataForAddingOrCloning( data );\n\n\t\t\t/**\n\t\t\t * Filters the data of the existing lesson being added.\n\t\t\t *\n\t\t\t * @since 5.4.0\n\t\t\t *\n\t\t\t * @param {Object} data Lesson data.\n\t\t\t * @param {String} action Action being performed. [clone|attach].\n\t\t\t * @param {Object} course The lesson's course parent model.\n\t\t\t */\n\t\t\tdata = window.llms.hooks.applyFilters( 'llms_adding_existing_lesson_data', data, lesson.action, this );\n\n\t\t\tthis.add_lesson( data );\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new lesson to the course.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @param {Object} data Lesson data.\n\t\t * @return {Object} Backbone.Model of the lesson.\n\t\t */\n\t\tadd_lesson: function( data ) {\n\n\t\t\tdata = data || {};\n\t\t\tvar options = {},\n\t\t\t\tsection;\n\n\t\t\tif ( ! data.parent_section ) {\n\t\t\t\tsection = this.get_selected_section();\n\t\t\t\tif ( ! section ) {\n\t\t\t\t\tsection = this.get( 'sections' ).last();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsection = this.get( 'sections' ).get( data.parent_section );\n\t\t\t}\n\n\t\t\tdata._selected = true;\n\n\t\t\tdata.parent_course = this.get( 'id' );\n\n\t\t\tvar lesson = section.add_lesson( data, options );\n\t\t\tBackbone.pubSub.trigger( 'new-lesson-added', lesson );\n\n\t\t\t// Expand the section.\n\t\t\tsection.set( '_expanded', true );\n\n\t\t\treturn lesson;\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new section to the course.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @param {Object} data Section data.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_section: function( data ) {\n\n\t\t\tdata = data || {};\n\t\t\tvar sections = this.get( 'sections' ),\n\t\t\t\toptions = {},\n\t\t\t\tselected = this.get_selected_section();\n\n\t\t\t// If a section is selected, add the new section after the currently selected one.\n\t\t\tif ( selected ) {\n\t\t\t\toptions.at = sections.indexOf( selected ) + 1;\n\t\t\t}\n\n\t\t\tsections.add( data, options );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the currently selected section in the course.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Object|undefined}\n\t\t */\n\t\tget_selected_section: function() {\n\n\t\t\treturn this.get( 'sections' ).find( function( model ) {\n\t\t\t\treturn model.get( '_selected' );\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the total number of points in the course.\n\t\t *\n\t\t * @since 3.24.0\n\t\t *\n\t\t * @return {Integer}\n\t\t */\n\t\tget_total_points: function() {\n\n\t\t\tvar points = 0;\n\n\t\t\tthis.get( 'sections' ).each( function( section ) {\n\t\t\t\tsection.get( 'lessons' ).each( function( lesson ) {\n\t\t\t\t\tvar lesson_points = lesson.get( 'points' );\n\t\t\t\t\tif ( ! _.isNumber( lesson_points ) ) {\n\t\t\t\t\t\tlesson_points = 0;\n\t\t\t\t\t}\n\t\t\t\t\tpoints += lesson_points * 1;\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\treturn points;\n\n\t\t},\n\n\t}, Relationships, Utilities ) );\n\n} );\n\n","/**\n * Load all models\n *\n * @return obj\n * @since 3.16.0\n * @version 3.17.0\n */\ndefine( 'Models/loader',[\n\t\t'Models/Abstract',\n\t\t'Models/Course',\n\t\t'Models/Image',\n\t\t'Models/Lesson',\n\t\t'Models/Question',\n\t\t'Models/QuestionChoice',\n\t\t'Models/QuestionType',\n\t\t'Models/Quiz',\n\t\t'Models/Section'\n\t],\n\tfunction(\n\t\tAbstract,\n\t\tCourse,\n\t\tImage,\n\t\tLesson,\n\t\tQuestion,\n\t\tQuestionChoice,\n\t\tQuestionType,\n\t\tQuiz,\n\t\tSection\n\t) {\n\n\t\treturn {\n\t\t\tAbstract: Abstract,\n\t\t\tCourse: Course,\n\t\t\tImage: Image,\n\t\t\tLesson: Lesson,\n\t\t\tQuestion: Question,\n\t\t\tQuestionChoice: QuestionChoice,\n\t\t\tQuestionType: QuestionType,\n\t\t\tQuiz: Quiz,\n\t\t\tSection: Section,\n\t\t};\n\n} );\n\n","/**\n * Detachable model\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.16.12\n * @version 3.16.12\n */\n\ndefine( 'Views/_Detachable',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * DOM Events\n\t\t *\n\t\t * @type {Object}\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tevents: {\n\t\t\t'click a[href=\"#llms-detach-model\"]': 'detach_model',\n\t\t\t'click button.llms-detach-model': 'detach_model',\n\t\t},\n\n\t\t/**\n\t\t * Detaches a model from it's parent (doesn't delete)\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tdetach_model: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\n\t\t\tvar msg = LLMS.l10n.replace( 'Are you sure you want to detach this %s?', {\n\t\t\t\t'%s': this.model.get_l10n_type(),\n\t\t\t} );\n\n\t\t\tif ( window.confirm( msg ) ) {\n\n\t\t\t\tif ( this.model.collection ) {\n\t\t\t\t\tthis.model.collection.remove( this.model );\n\t\t\t\t}\n\n\t\t\t\t// publish global event\n\t\t\t\tBackbone.pubSub.trigger( 'model-detached', this.model );\n\n\t\t\t\t// trigger local event so extending views can run other actions where necessary\n\t\t\t\tthis.trigger( 'model-trashed', this.model );\n\n\t\t\t}\n\n\t\t},\n\n\t}\n\n} );\n\n","/**\n * Handles UX and Events for inline editing of views\n *\n * Use with a Model's View\n * Allows editing model.title field via .llms-editable-title elements\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.16.0\n * @since 3.25.4 Unknown\n * @since 3.37.11 Replace reference to `wp.editor` with `_.getEditor()` helper.\n * @version 3.37.11\n */\ndefine( 'Views/_Editable',[], function() {\n\n\treturn {\n\n\t\tmedia_lib: null,\n\n\t\t/**\n\t\t * DOM Events\n\t\t *\n\t\t * @type {Object}\n\t\t * @since 3.16.0\n\t\t * @version 3.17.8\n\t\t */\n\t\tevents: {\n\t\t\t'click .llms-add-image': 'open_media_lib',\n\t\t\t'click a[href=\"#llms-edit-slug\"]': 'make_slug_editable',\n\t\t\t'click a[href=\"#llms-remove-image\"]': 'remove_image',\n\t\t\t'change .llms-editable-select select': 'on_select',\n\t\t\t'change .llms-switch input[type=\"checkbox\"]': 'toggle_switch',\n\t\t\t'change .llms-editable-radio input': 'on_radio_select',\n\t\t\t'focusin .llms-input': 'on_focus',\n\t\t\t'focusout .llms-input': 'on_blur',\n\t\t\t'keydown .llms-input': 'on_keydown',\n\t\t\t'input .llms-input[type=\"number\"]': 'on_blur',\n\t\t\t'paste .llms-input[data-formatting]': 'on_paste',\n\t\t},\n\n\t\t/**\n\t\t * Retrieve a list of allowed tags for a given element\n\t\t *\n\t\t * @param obj $el jQuery selector for the element\n\t\t * @return array\n\t\t * @since 3.16.0\n\t\t * @version 3.17.8\n\t\t */\n\t\tget_allowed_tags: function( $el ) {\n\n\t\t\tif ( $el.attr( 'data-formatting' ) ) {\n\t\t\t\treturn _.map( $el.attr( 'data-formatting' ).split( ',' ), function( tag ) {\n\t\t\t\t\treturn tag.trim();\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn [ 'b', 'i', 'u', 'strong', 'em' ];\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the content of an element\n\t\t *\n\t\t * @param obj $el jQuery object of the element\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.17.8\n\t\t */\n\t\tget_content: function( $el ) {\n\n\t\t\tif ( 'INPUT' === $el[0].tagName ) {\n\t\t\t\treturn $el.val();\n\t\t\t}\n\n\t\t\tif ( ! $el.attr( 'data-formatting' ) && ! $el.hasClass( 'ql-editor' ) ) {\n\t\t\t\treturn $el.text();\n\t\t\t}\n\n\t\t\treturn _.stripFormatting( $el.html(), this.get_allowed_tags( $el ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if changes have been made to the element\n\t\t *\n\t\t * @param {[obj]} event js event object\n\t\t * @return {Boolean} true when changes have been made, false otherwise\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\thas_changed: function( event ) {\n\t\t\tvar $el = $( event.target );\n\t\t\treturn ( $el.attr( 'data-original-content' ) !== this.get_content( $el ) );\n\t\t},\n\n\t\t/**\n\t\t * Ensure that new content is at least 1 character long\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return boolean\n\t\t * @since 3.16.0\n\t\t * @version 3.17.2\n\t\t */\n\t\tis_valid: function( event ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$el = $( event.target ),\n\t\t\t\tcontent = this.get_content( $el ),\n\t\t\t\ttype = $el.attr( 'data-type' );\n\n\t\t\tif ( ( $el.attr( 'required' ) || $el.attr( 'data-required' ) ) && content.length < 1 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 'url' === type || 'video' === type ) {\n\t\t\t\tif ( ! this._validate_url( this.get_content( $el ) ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t} else if ( 'permalink' === type ) {\n\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'llms_builder',\n\t\t\t\t\t\taction_type: 'get_permalink',\n\t\t\t\t\t\tcourse_id: window.llms_builder.CourseModel.get( 'id' ),\n\t\t\t\t\t\tid: self.model.get( 'id' ),\n\t\t\t\t\t\ttitle: self.model.get( 'title' ),\n\t\t\t\t\t\tslug: content,\n\t\t\t\t\t},\n\t\t\t\t\tbeforeSend: function() {\n\t\t\t\t\t\tLLMS.Spinner.start( $el.closest( '.llms-editable-toggle-group' ), 'small' );\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\t\tif ( r.permalink && r.slug ) {\n\t\t\t\t\t\t\tself.model.set( 'permalink', r.permalink );\n\t\t\t\t\t\t\tself.model.set( 'name', r.slug );\n\t\t\t\t\t\t\tself.render();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t},\n\n\t\t/**\n\t\t * Initialize datepicker elements\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tinit_datepickers: function() {\n\n\t\t\tthis.$el.find( '.llms-editable-date input' ).each( function() {\n\n\t\t\t\t$( this ).datetimepicker( {\n\t\t\t\t\tformat: $( this ).attr( 'data-date-format' ) || 'Y-m-d h:i A',\n\t\t\t\t\tdatepicker: ( undefined === $( this ).attr( 'data-date-datepicker' ) ) ? true : ( 'true' == $( this ).attr( 'data-date-datepicker' ) ),\n\t\t\t\t\ttimepicker: ( undefined === $( this ).attr( 'data-date-timepicker' ) ) ? true : ( 'true' == $( this ).attr( 'data-date-timepicker' ) ),\n\t\t\t\t\tonClose: function( current_time, $input ) {\n\t\t\t\t\t\t$input.blur();\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Initialize elements that allow inline formatting\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinit_formatting_els: function() {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.$el.find( '.llms-input-formatting[data-formatting]' ).each( function() {\n\n\t\t\t\tvar formatting = $( this ).attr( 'data-formatting' ).split( ',' ),\n\t\t\t\t\tattr = $( this ).attr( 'data-attribute' );\n\n\t\t\t\tvar ed = new Quill( this, {\n\t\t\t\t\tmodules: {\n\t\t\t\t\t\ttoolbar: [ formatting ],\n\t\t\t\t\t\tkeyboard: {\n\t\t\t\t\t\t\tbindings: {\n\t\t\t\t\t\t\t\ttab: {\n\t\t\t\t\t\t\t\t\tkey: 9,\n\t\t\t\t\t\t\t\t\thandler: function( range, context ) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t13: {\n\t\t\t\t\t\t\t\t\tkey: 13,\n\t\t\t\t\t\t\t\t\thandler: function( range, context ) {\n\t\t\t\t\t\t\t\t\t\ted.root.blur();\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder: $( this ).attr( 'data-placeholder' ),\n\t\t\t\t\ttheme: 'bubble',\n\t\t\t\t} );\n\n\t\t\t\ted.on( 'text-change', function( delta, oldDelta, source ) {\n\t\t\t\t\tself.model.set( attr, self.get_content( $( ed.root ) ) );\n\t\t\t\t} );\n\n\t\t\t\tBackbone.pubSub.trigger( 'formatting-ed-init', ed, $( this ), self );\n\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Initialize editable select elements\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.25.4\n\t\t */\n\t\tinit_selects: function() {\n\n\t\t\tthis.$el.find( '.llms-editable-select select' ).llmsSelect2( {\n\t\t\t\twidth: '100%',\n\t\t\t} ).trigger( 'change' );\n\n\t\t},\n\n\t\t/**\n\t\t * Blur/focusout function for .llms-editable-title elements\n\t\t * Automatically saves changes if changes have been made\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.6\n\t\t */\n\t\ton_blur: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tthis.model.set( '_has_focus', false, { silent: true } );\n\n\t\t\tvar self = this,\n\t\t\t\t$el = $( event.target ),\n\t\t\t\tchanged = this.has_changed( event );\n\n\t\t\tif ( changed ) {\n\n\t\t\t\tif ( ! self.is_valid( event ) ) {\n\t\t\t\t\tself.revert_edits( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis.save_edits( event );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Focus event for editable inputs\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.6\n\t\t * @version 3.16.6\n\t\t */\n\t\ton_focus: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\t\t\tthis.model.set( '_has_focus', true, { silent: true } );\n\n\t\t},\n\n\t\t/**\n\t\t * Handle content pasted into contenteditable fields\n\t\t * This will ensure that HTML from RTF editors isn't pasted into the dom\n\t\t *\n\t\t * @param obj event js event obj\n\t\t * @return void\n\t\t * @since 3.17.8\n\t\t * @version 3.17.8\n\t\t */\n\t\ton_paste: function( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar text = ( event.originalEvent || event ).clipboardData.getData( 'text/plain' );\n\t\t\twindow.document.execCommand( 'insertText', false, text );\n\n\t\t},\n\n\t\t/**\n\t\t * Change event for selectables\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_select: function( event ) {\n\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tmulti = ( $el.attr( 'multiple' ) ),\n\t\t\t\tattr = $el.attr( 'name' ),\n\t\t\t\t$selected = $el.find( 'option:selected' ),\n\t\t\t\tval;\n\n\t\t\tif ( multi ) {\n\t\t\t\tval = [];\n\t\t\t\tval = $selected.map( function() {\n\t\t\t\t\treturn this.value;\n\t\t\t\t} ).get();\n\t\t\t} else {\n\t\t\t\tval = $selected[0].value;\n\t\t\t}\n\n\t\t\tthis.model.set( attr, val );\n\n\t\t},\n\n\t\t/**\n\t\t * Change event for radio element groups\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.17.6\n\t\t * @version 3.17.6\n\t\t */\n\t\ton_radio_select: function( event ) {\n\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tattr = $el.attr( 'name' ),\n\t\t\t\tval = $el.val();\n\n\t\t\tthis.model.set( attr, val );\n\n\t\t},\n\n\t\t/**\n\t\t * Keydown function for .llms-editable-title elements\n\t\t * Blurs\n\t\t *\n\t\t * @param {obj} event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.17.8\n\t\t */\n\t\ton_keydown: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar self = this,\n\t\t\t\tkey = event.which || event.keyCode,\n\t\t\t\tshift = event.shiftKey;\n\t\t\t\t// ctrl = event.metaKey || event.ctrlKey;\n\n\t\t\tswitch ( key ) {\n\n\t\t\t\tcase 13: // enter\n\t\t\t\t\t// shift + enter should add a return\n\t\t\t\t\tif ( ! shift ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tevent.target.blur();\n\t\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.revert_edits( event );\n\t\t\t\t\tevent.target.blur();\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Open the WP media lib\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.6\n\t\t */\n\t\topen_media_lib: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar self = this,\n\t\t\t\t$el = $( event.currentTarget );\n\n\t\t\tif ( self.media_lib ) {\n\n\t\t\t\tself.media_lib.uploader.uploader.param( 'post_id' );\n\n\t\t\t} else {\n\n\t\t\t\tself.media_lib = wp.media.frames.file_frame = wp.media( {\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Select an image' ),\n\t\t\t\t\tbutton: {\n\t\t\t\t\t\ttext: LLMS.l10n.translate( 'Use this image' ),\n\t\t\t\t\t},\n\t\t\t\t\tmultiple: false\t// Set to true to allow multiple files to be selected\n\t\t\t\t} );\n\n\t\t\t\tself.media_lib.on( 'select', function() {\n\n\t\t\t\t\tvar size = $el.attr( 'data-image-size' ),\n\t\t\t\t\t\tattachment = self.media_lib.state().get( 'selection' ).first().toJSON(),\n\t\t\t\t\t\timage = self.model.get( $el.attr( 'data-attribute' ) ),\n\t\t\t\t\t\turl;\n\n\t\t\t\t\tif ( size && attachment.sizes[ size ] ) {\n\t\t\t\t\t\turl = attachment.sizes[ size ].url;\n\t\t\t\t\t} else {\n\t\t\t\t\t\turl = attachment.url;\n\t\t\t\t\t}\n\n\t\t\t\t\timage.set( {\n\t\t\t\t\t\tid: attachment.id,\n\t\t\t\t\t\tsrc: url,\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\t// This flag is used to protect the media files uploaded via places like the Quiz questions (Picture type)\n\t\t\tself.media_lib.uploader.options.uploader.params.llms = 1;\n\n\t\t\tself.media_lib.open();\n\n\t\t},\n\n\t\t/**\n\t\t * Click event to remove an image\n\t\t *\n\t\t * @param obj event js event obj\n\t\t * @return voids\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tremove_image: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.model.get( $( event.currentTarget ).attr( 'data-attribute' ) ).set( {\n\t\t\t\tid: '',\n\t\t\t\tsrc: '',\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Helper to undo changes\n\t\t * Bound to \"escape\" key via on_keydown function\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trevert_edits: function( event ) {\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tval = $el.attr( 'data-original-content' );\n\t\t\t$el.html( val );\n\t\t},\n\n\t\t/**\n\t\t * Sync changes to the model and DB\n\t\t *\n\t\t * @param {obj} event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tsave_edits: function( event ) {\n\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tval = this.get_content( $el );\n\n\t\t\tthis.model.set( $el.attr( 'data-attribute' ), val );\n\n\t\t},\n\n\t\t/**\n\t\t * Change event for a switch element\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.17.0\n\t\t */\n\t\ttoggle_switch: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\t\t\tvar $el = $( event.target ),\n\t\t\t\tattr = $el.attr( 'name' ),\n\t\t\t\trerender = $el.attr( 'data-rerender' ),\n\t\t\t\tval;\n\n\t\t\tif ( $el.is( ':checked' ) ) {\n\t\t\t\tval = $el.attr( 'data-on' ) ? $el.attr( 'data-on' ) : 'yes';\n\t\t\t} else {\n\t\t\t\tval = $el.attr( 'data-off' ) ? $el.attr( 'data-off' ) : 'no';\n\t\t\t}\n\n\t\t\tif ( -1 !== attr.indexOf( '.' ) ) {\n\n\t\t\t\tvar split = attr.split( '.' );\n\n\t\t\t\tif ( 'parent' === split[0] ) {\n\t\t\t\t\tthis.model.get_parent().set( split[1], val );\n\t\t\t\t} else {\n\t\t\t\t\tthis.model.get( split[0] ).set( split[1], val );\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.model.set( attr, val );\n\n\t\t\t}\n\n\t\t\tthis.trigger( attr.replace( '.', '-' ) + '_toggle', val );\n\n\t\t\tif ( ! rerender || 'yes' === rerender ) {\n\t\t\t\tvar self = this;\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.render();\n\t\t\t\t}, 100 );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Initializes a WP Editor on a textarea\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.37.11 Replace reference to `wp.editor` with `_.getEditor()` helper.\n\t\t *\n\t\t * @param {String} id CSS ID of the editor (don't include #).\n\t\t * @param {Object} settings Optional object of settings to pass to wp.oldEditor.initialize().\n\t\t * @return {Void}\n\t\t */\n\t\tinit_editor: function( id, settings ) {\n\n\t\t\tsettings = settings || {};\n\n\t\t\tvar editor = _.getEditor();\n\n\t\t\teditor.remove( id );\n\n\t\t\teditor.initialize( id, $.extend( true, editor.getDefaultSettings(), {\n\t\t\t\tmediaButtons: true,\n\t\t\t\ttinymce: {\n\t\t\t\t\ttoolbar1: 'bold,italic,strikethrough,bullist,numlist,blockquote,hr,alignleft,aligncenter,alignright,link,unlink,wp_adv',\n\t\t\t\t\ttoolbar2: 'formatselect,underline,alignjustify,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help',\n\t\t\t\t\tsetup: _.bind( this.on_editor_ready, this ),\n\t\t\t\t}\n\t\t\t}, settings ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Setup a permalink editor to allow editing of a permalink\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.6\n\t\t * @version 3.16.6\n\t\t */\n\t\tmake_slug_editable: function( event ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$btn = $( event.currentTarget ),\n\t\t\t\t$link = $btn.prevAll( 'a' ),\n\t\t\t\t$input = $btn.prev( 'input.permalink' ),\n\t\t\t\tfull_url = $link.attr( 'href' ),\n\t\t\t\tslug = $input.val(),\n\t\t\t\tshort_url = full_url.replace( slug, '' );\n\n\t\t\t// hide the button\n\t\t\t$btn.hide();\n\n\t\t\t// make the link not clickable\n\t\t\t$link.css( {\n\t\t\t\tcolor: '#999',\n\t\t\t\t'pointer-events': 'none',\n\t\t\t\t'text-decoration': 'none',\n\t\t\t} );\n\n\t\t\t// remove the current slug & trailing slash from the URL\n\t\t\t$link.text( short_url.substring( 0, short_url.length - 1 ) );\n\n\t\t\t// focus in on the field\n\t\t\t$input.show().focus();\n\n\t\t},\n\n\t\t/**\n\t\t * Callback function called after initialization of an editor\n\t\t *\n\t\t * Updates UI if a label is present.\n\t\t *\n\t\t * Binds a change event to ensure editor changes are saved to the model.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.17.1 Uknown.\n\t\t * @since 3.37.11 Replace references to `wp.editor` with `_.getEditor()` helper.\n\t\t *\n\t\t * @param {Object} editor TinyMCE Editor instance.\n\t\t * @return {Void}\n\t\t */\n\t\ton_editor_ready: function( editor ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$ed = $( '#' + editor.id ),\n\t\t\t\t$parent = $ed.closest( '.llms-editable-editor' ),\n\t\t\t\t$label = $parent.find( '.llms-label' ),\n\t\t\t\tprop = $ed.attr( 'data-attribute' )\n\n\t\t\tif ( $label.length ) {\n\t\t\t\t$label.prependTo( $parent.find( '.wp-editor-tools' ) );\n\t\t\t}\n\n\t\t\t// save changes to the model via Visual ed\n\t\t\teditor.on( 'change', function( event ) {\n\t\t\t\tself.model.set( prop, _.getEditor().getContent( editor.id ) );\n\t\t\t} );\n\n\t\t\t// save changes via Text ed\n\t\t\t$ed.on( 'input', function( event ) {\n\t\t\t\tself.model.set( prop, $ed.val() );\n\t\t\t} );\n\n\t\t\t// trigger an input on the Text ed when quicktags buttons are clicked\n\t\t\t$parent.on( 'click', '.quicktags-toolbar .ed_button', function() {\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t$ed.trigger( 'input' );\n\t\t\t\t}, 10 );\n\t\t\t} );\n\n\t\t},\n\n\t\t_validate_url: function( str ) {\n\n\t\t\tvar a = document.createElement( 'a' );\n\t\t\ta.href = str;\n\t\t\treturn ( a.host && a.host !== window.location.host );\n\n\t\t}\n\n\t};\n\n} );\n\n","/**\n * _receive override for Backbone.CollectionView core\n * enables connection with jQuery UI draggable buttons\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/_Receivable',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * Overloads the function from Backbone.CollectionView core because it doesn't properly handle\n\t\t * receives from a jQuery UI draggable object\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @param obj ui jQuery UI object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_receive : function( event, ui ) {\n\n\t\t\t// came from sidebar drag\n\t\t\tif ( ui.sender.hasClass( 'ui-draggable' ) ) {\n\t\t\t\tvar index = this._getContainerEl().children().index( ui.helper );\n\t\t\t\tui.helper.remove(); // remove the helper\n\t\t\t\tthis.collection.add( {}, { at: index } );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar senderListEl = ui.sender;\n\t\t\tvar senderCollectionListView = senderListEl.data( 'view' );\n\t\t\tif ( ! senderCollectionListView || ! senderCollectionListView.collection ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar newIndex = this._getContainerEl().children().index( ui.item );\n\t\t\tvar modelReceived = senderCollectionListView.collection.get( ui.item.attr( 'data-model-cid' ) );\n\t\t\tsenderCollectionListView.collection.remove( modelReceived );\n\t\t\tthis.collection.add( modelReceived, { at : newIndex } );\n\t\t\tmodelReceived.collection = this.collection; // otherwise will not get properly set, since modelReceived.collection might already have a value.\n\t\t\tthis.setSelectedModel( modelReceived );\n\t\t},\n\n\t}\n\n} );\n\n","/**\n * Shiftable view mixin function\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/_Shiftable',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * Conditionally hide action buttons based on section position in collection\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tmaybe_hide_shiftable_buttons: function() {\n\n\t\t\tif ( ! this.model.collection ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar type = this.model.get( 'type' );\n\n\t\t\tif ( this.model.collection.first() === this.model ) {\n\t\t\t\tthis.$el.find( '.shift-up--' + type ).hide();\n\t\t\t} else if ( this.model.collection.last() === this.model ) {\n\t\t\t\tthis.$el.find( '.shift-down--' + type ).hide();\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Move an item in a collection from one position to another\n\t\t *\n\t\t * @param int old_index current (old) index within the collection\n\t\t * @param int new_index desired (new) index within the collection\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tshift: function( old_index, new_index ) {\n\n\t\t\tvar collection = this.model.collection;\n\n\t\t\tcollection.remove( this.model );\n\t\t\tcollection.add( this.model, { at: new_index } );\n\t\t\tcollection.trigger( 'reorder' );\n\n\t\t},\n\n\t\t/**\n\t\t * Move an item down the tree one position\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tshift_down: function( e ) {\n\n\t\t\te.preventDefault();\n\t\t\tvar index = this.model.collection.indexOf( this.model );\n\t\t\tthis.shift( index, index + 1 );\n\n\t\t},\n\n\t\t/**\n\t\t * Move an item up the tree one position\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tshift_up: function( e ) {\n\n\t\t\te.preventDefault();\n\t\t\tvar index = this.model.collection.indexOf( this.model );\n\t\t\tthis.shift( index, index - 1 );\n\n\t\t},\n\n\t};\n\n} );\n\n","/**\n * Subview utility mixin\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/_Subview',[], function() {\n\n\treturn {\n\n\t\tsubscriptions: {},\n\n\t\t/**\n\t\t * Name of the current subview\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tstate: '',\n\n\t\t/**\n\t\t * Object of subview data\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tviews: {},\n\n\t\t/**\n\t\t * Retrieve a subview by name from this.views\n\t\t *\n\t\t * @param string name name of the subview\n\t\t * @return obl|false\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_subview: function( name ) {\n\n\t\t\tif ( this.views[ name ] ) {\n\t\t\t\treturn this.views[ name ];\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t},\n\n\t\tevents_subscribe: function( events ) {\n\n\t\t\t_.each( events, function( func, event ) {\n\n\t\t\t\tthis.subscriptions[ event ] = func;\n\t\t\t\tBackbone.pubSub.on( event, func, this );\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\tevents_unsubscribe: function() {\n\n\t\t\t_.each( this.subscriptions, function( func, event ) {\n\n\t\t\t\tBackbone.pubSub.off( event, func, this );\n\t\t\t\tdelete this.subscriptions[ event ];\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Remove a single subview (and all it's subviews) by name\n\t\t *\n\t\t * @param string name name of the subview\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tremove_subview: function( name ) {\n\n\t\t\tvar view = this.get_subview( name );\n\n\t\t\tif ( ! view ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( view.instance ) {\n\n\t\t\t\t// remove the subviews if the view has subviews\n\t\t\t\tif ( ! _.isEmpty( view.instance.views ) ) {\n\t\t\t\t\tview.instance.events_unsubscribe();\n\t\t\t\t\tview.instance.remove_subviews();\n\t\t\t\t}\n\n\t\t\t\tview.instance.off();\n\t\t\t\tview.instance.off( null, null, null );\n\t\t\t\tview.instance.remove();\n\t\t\t\tview.instance.undelegateEvents();\n\n\t\t\t\t// _.each( view.instance, function( val, key ) {\n\t\t\t\t// delete view.instance[ key ];\n\t\t\t\t// } );\n\n\t\t\t\tview.instance = null;\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Remove all subviews (and all the subviews of those subviews)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tremove_subviews: function() {\n\n\t\t\t_.each( this.views, function( data, name ) {\n\n\t\t\t\tthis.remove_subview( name );\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Render subviews based on current state\n\t\t *\n\t\t * @param obj view_data additional data to pass to the subviews\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender_subviews: function( view_data ) {\n\n\t\t\tview_data = view_data || {};\n\n\t\t\t_.each( this.views, function( data, name ) {\n\n\t\t\t\tif ( this.state === data.state ) {\n\n\t\t\t\t\tthis.render_subview( name, view_data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.remove_subview( name );\n\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Render a single subview by name\n\t\t *\n\t\t * @param string name name of the subview\n\t\t * @param obj view_data additional data to pass to the subview initializer\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender_subview: function( name, view_data ) {\n\n\t\t\tvar view = this.get_subview( name );\n\n\t\t\tif ( ! view ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.remove_subview( name );\n\n\t\t\tif ( ! view.instance ) {\n\t\t\t\tview.instance = new view.class( view_data );\n\t\t\t}\n\n\t\t\tview.instance.render();\n\n\t\t},\n\n\t\t/**\n\t\t * Set the current subview\n\t\t * Must call render after!\n\t\t *\n\t\t * @param string state name of the state [builder|editor]\n\t\t * @return obj this for chaining\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tset_state: function ( state ) {\n\n\t\t\tthis.state = state;\n\t\t\treturn this;\n\n\t\t},\n\n\t}\n\n} );\n\n","/**\n * Trashable model\n *\n * @type {Object}\n * @since 3.16.12\n * @version 3.16.12\n */\ndefine( 'Views/_Trashable',[], function() {\n\n\treturn {\n\n\t\t/**\n\t\t * DOM Events\n\t\t *\n\t\t * @type {Object}\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tevents: {\n\t\t\t'click a[href=\"#llms-trash-model\"]': 'trash_model',\n\t\t\t'click button.llms-trash-model': 'trash_model',\n\t\t},\n\n\t\t/**\n\t\t * Remove a model from it's parent and delete it\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\ttrash_model: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\n\t\t\tvar msg = LLMS.l10n.replace( 'Are you sure you want to move this %s to the trash?', {\n\t\t\t\t'%s': this.model.get_l10n_type(),\n\t\t\t} );\n\n\t\t\tif ( window.confirm( msg ) ) {\n\n\t\t\t\tif ( this.model.collection ) {\n\t\t\t\t\tthis.model.collection.remove( this.model );\n\t\t\t\t}\n\n\t\t\t\t// publish event\n\t\t\t\tBackbone.pubSub.trigger( 'model-trashed', this.model );\n\n\t\t\t\t// trigger local event so extending views can run other actions where necessary\n\t\t\t\tthis.trigger( 'model-trashed', this.model );\n\n\t\t\t}\n\n\t\t},\n\n\t}\n\n} );\n\n","/**\n * Load view mixins\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.17.1\n * @version 3.17.1\n */\n\ndefine( 'Views/_loader',[\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Receivable',\n\t\t'Views/_Shiftable',\n\t\t'Views/_Subview',\n\t\t'Views/_Trashable'\n\t],\n\tfunction(\n\t\tDetachable,\n\t\tEditable,\n\t\tReceivable,\n\t\tShiftable,\n\t\tSubview,\n\t\tTrashable\n\t) {\n\n\t\treturn {\n\t\t\tDetachable: Detachable,\n\t\t\tEditable: Editable,\n\t\t\tReceivable: Receivable,\n\t\t\tShiftable: Shiftable,\n\t\t\tSubview: Subview,\n\t\t\tTrashable: Trashable,\n\t\t};\n\n} );\n\n","/**\n * Constructor functions for constructing models, views, and collections\n *\n * @since 3.16.0\n * @version 3.17.1\n */\ndefine( 'Controllers/Construct',[\n\t\t'Collections/loader',\n\t\t'Models/loader',\n\t\t'Views/_loader'\n\t], function(\n\t\tCollections,\n\t\tModels,\n\t\tViews\n\t) {\n\n\t\treturn function() {\n\n\t\t\t/**\n\t\t\t * Internal getter\n\t\t\t * Constructs new Collections, Models, and Views\n\t\t\t *\n\t\t\t * @param obj type type of object to construct [Collection,Model,View]\n\t\t\t * @param string name name of the object to construct\n\t\t\t * @param obj data object data to pass into the object's constructor\n\t\t\t * @param obj options object options to pass into the constructor\n\t\t\t * @return obj\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tfunction get( type, name, data, options ) {\n\n\t\t\t\tif ( ! type[ name ] ) {\n\t\t\t\t\tconsole.log( '\"' + name + '\" not found.' );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn new type[ name ]( data, options );\n\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Instantiate a collection\n\t\t *\n\t\t\t * @param string name Collection class name (EG: \"Sections\")\n\t\t\t * @param array data Array of model objects to pass to the constructor\n\t\t\t * @param obj options Object of options to pass to the constructor\n\t\t\t * @return obj\n\t\t\t * @since 3.17.0\n\t\t\t * @version 3.17.0\n\t\t\t */\n\t\t\tthis.get_collection = function( name, data, options ) {\n\n\t\t\t\treturn get( Collections, name, data, options );\n\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Instantiate a model\n\t\t\t *\n\t\t\t * @param string name Model class name (EG: \"Section\")\n\t\t\t * @param obj data Object of model attributes to pass to the constructor\n\t\t\t * @param obj options Object of options to pass to the constructor\n\t\t\t * @return obj\n\t\t\t * @since 3.17.0\n\t\t\t * @version 3.17.0\n\t\t\t */\n\t\t\tthis.get_model = function( name, data, options ) {\n\n\t\t\t\treturn get( Models, name, data, options );\n\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Let 3rd parties extend a view using any of the mixin (_) views\n\t\t\t *\n\t\t\t * @param {obj} view base object used for the view\n\t\t\t * @param... {string} extends any number of strings that should be mixed into the view\n\t\t\t * @return obj\n\t\t\t * @since 3.17.1\n\t\t\t * @version 3.17.1\n\t\t\t */\n\t\t\tthis.extend_view = function() {\n\n\t\t\t\tvar view = arguments[0],\n\t\t\t\ti = 1;\n\n\t\t\t\twhile ( arguments[ i ] ) {\n\n\t\t\t\t\tvar classname = arguments[ i ];\n\t\t\t\t\tif ( Views[ classname ] ) {\n\n\t\t\t\t\t\tif ( view.events && Views[ classname ].events ) {\n\t\t\t\t\t\t\tview.events = _.defaults( view.events, Views[ classname ].events );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tview = _.defaults( view, Views[ classname ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ti++;\n\t\t\t\t}\n\n\t\t\t\treturn Backbone.View.extend( view );\n\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Allows custom collection registration by extending the default BackBone collection\n\t\t\t *\n\t\t\t * @param string name model name\n\t\t\t * @param obj props properties to extend the collection with\n\t\t\t * @return void\n\t\t\t * @since 3.17.1\n\t\t\t * @version 3.17.1\n\t\t\t */\n\t\t\tthis.register_collection = function( name, props ) {\n\n\t\t\t\tCollections[ name ] = Backbone.Collection.extend( props );\n\n\t\t\t};\n\n\t\t\t/**\n\t\t\t * Allows custom model registration by extending the default abstract model\n\t\t\t *\n\t\t\t * @param string name model name\n\t\t\t * @param obj props properties to extend the abstract model with\n\t\t\t * @return void\n\t\t\t * @since 3.17.0\n\t\t\t * @version 3.17.0\n\t\t\t */\n\t\t\tthis.register_model = function( name, props ) {\n\n\t\t\t\tModels[ name ] = Models['Abstract'].extend( props );\n\n\t\t\t};\n\n\t\t\treturn this;\n\n\t\t};\n\n} );\n\n","/**\n * LifterLMS Builder Debugging suite\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Controllers/Debug',[], function() {\n\n\treturn function( settings ) {\n\n\t\tvar self = this,\n\t\t\tenabled = settings.enabled || false;\n\n\t\t/**\n\t\t * Disable debugging\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.disable = function() {\n\n\t\t\tself.log( 'LifterLMS Builder debugging disabled' );\n\t\t\tenabled = false;\n\n\t\t};\n\n\t\t/**\n\t\t * Enable debugging\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.enable = function() {\n\n\t\t\tenabled = true;\n\t\t\tself.log( 'LifterLMS Builder debugging enabled' );\n\n\t\t};\n\n\t\t/**\n\t\t * General logging function\n\t\t * Logs to the js console only if logging is enabled\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.log = function() {\n\n\t\t\tif ( ! enabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.each( arguments, function( data ) {\n\t\t\t\tconsole.log( data );\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Toggles current state of the logger on or off\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.toggle = function() {\n\n\t\t\tif ( enabled ) {\n\t\t\t\tself.disable();\n\t\t\t} else {\n\t\t\t\tself.enable();\n\t\t\t}\n\n\t\t};\n\n\t\t// on startup, log a message if logging is enabled\n\t\tif ( enabled ) {\n\t\t\tself.enable();\n\t\t}\n\n\t}\n\n} );\n\n","/**\n * Model schema functions\n *\n * @since 3.17.0\n * @version 3.17.0\n */\ndefine( 'Controllers/Schemas',[], function() {\n\n\t/**\n\t * Main Schemas class\n\t *\n\t * @param obj schemas schemas definitions initialized via PHP filters\n\t * @return obj\n\t * @since 3.17.0\n\t * @version 3.17.0\n\t */\n\treturn function( schemas ) {\n\n\t\t// initialize any custom schemas defined via PHP\n\t\tvar custom_schemas = schemas;\n\t\t_.each( custom_schemas, function( type ) {\n\t\t\t_.each( type, function( schema ) {\n\t\t\t\tschema.custom = true;\n\t\t\t} );\n\t\t} );\n\n\t\t/**\n\t\t * Retrieve a schema for a given model by type\n\t\t * Extends default schemas definitions with custom 3rd party definitions\n\t\t *\n\t\t * @param obj schema default schema definition from the model (or empty object if none defined)\n\t\t * @param string model_type the model type ('lesson', 'quiz', etc)\n\t\t * @param obj model Instance of the Backbone.Model for the given model\n\t\t * @return obj\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tthis.get = function( schema, model_type, model ) {\n\n\t\t\t// extend the default schema with custom php schemas for the type if they exist\n\t\t\tif ( custom_schemas[ model_type ] ) {\n\t\t\t\tschema = _.extend( schema, custom_schemas[ model_type ] );\n\t\t\t}\n\n\t\t\treturn schema;\n\n\t\t};\n\n\t\treturn this;\n\n\t};\n\n} );\n\n","/**\n * Sync builder data to the server\n *\n * @since 3.16.0\n * @version 4.17.0\n */\ndefine( 'Controllers/Sync',[], function() {\n\n\treturn function( Course, settings ) {\n\n\t\tthis.saving = false;\n\n\t\tvar self = this,\n\t\t\tautosave = ( 'yes' === window.llms_builder.autosave ),\n\t\t\tcheck_interval = null,\n\t\t\tcheck_interval_ms = settings.check_interval_ms || ( ( 'yes' === window.llms_builder.autosave ) ? 10000 : 1000 ),\n\t\t\tdetached = new Backbone.Collection(),\n\t\t\ttrashed = new Backbone.Collection();\n\n\t\t/**\n\t\t * init\n\t\t *\n\t\t * @since 3.16.7\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tfunction init() {\n\n\t\t\t// determine if autosaving is possible\n\t\t\tif ( 'undefined' === typeof wp.heartbeat ) {\n\n\t\t\t\twindow.llms_builder.debug.log( 'WordPress Heartbeat disabled. Autosaving is disabled!' );\n\t\t\t\tautosave = false;\n\n\t\t\t}\n\n\t\t\t// setup the check interval\n\t\t\tif ( check_interval_ms ) {\n\t\t\t\tself.set_check_interval( check_interval_ms );\n\t\t\t}\n\n\t\t\t// warn when users attempt to leave the page\n\t\t\t$( window ).on( 'beforeunload', function() {\n\n\t\t\t\tif ( self.has_unsaved_changes() ) {\n\t\t\t\t\tcheck_for_changes();\n\t\t\t\t\treturn 'Are you sure you want to abandon your changes?';\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/*\n\t\t\t /$$ /$$ /$$ /$$\n\t\t\t |__/ | $$ | $$ |__/\n\t\t\t /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ | $$ /$$$$$$ /$$$$$$ /$$\n\t\t\t | $$| $$__ $$|_ $$_/ /$$__ $$ /$$__ $$| $$__ $$ |____ $$| $$ |____ $$ /$$__ $$| $$\n\t\t\t | $$| $$ \\ $$ | $$ | $$$$$$$$| $$ \\__/| $$ \\ $$ /$$$$$$$| $$ /$$$$$$$| $$ \\ $$| $$\n\t\t\t | $$| $$ | $$ | $$ /$$| $$_____/| $$ | $$ | $$ /$$__ $$| $$ /$$__ $$| $$ | $$| $$\n\t\t\t | $$| $$ | $$ | $$$$/| $$$$$$$| $$ | $$ | $$| $$$$$$$| $$ | $$$$$$$| $$$$$$$/| $$\n\t\t\t |__/|__/ |__/ \\___/ \\_______/|__/ |__/ |__/ \\_______/|__/ \\_______/| $$____/ |__/\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | $$\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | $$\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t |__/\n\t\t */\n\n\t\t/**\n\t\t * Adds error message(s) to the data object returned by heartbeat-tick\n\t\t *\n\t\t * @param obj data llms_builder data object from heartbeat-tick\n\t\t * @param string|array err error messages array or string\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tfunction add_error_msg( data, err ) {\n\n\t\t\tif ( 'success' === data.status ) {\n\t\t\t\tdata.message = [];\n\t\t\t}\n\n\t\t\tdata.status = 'error';\n\t\t\tif ( 'string' === typeof err ) {\n\t\t\t\terr = [ err ];\n\t\t\t}\n\t\t\tdata.message = data.message.concat( err );\n\n\t\t\treturn data;\n\n\t\t};\n\n\t\t/**\n\t\t * Publish sync status so other areas of the application can see what's happening here\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tfunction check_for_changes() {\n\n\t\t\tvar data = {};\n\t\t\tdata.changes = self.get_unsaved_changes();\n\t\t\tdata.has_unsaved_changes = self.has_unsaved_changes( data.changes );\n\t\t\tdata.saving = self.saving;\n\n\t\t\twindow.llms_builder.debug.log( '==== start changes check ====', data, '==== finish changes check ====' );\n\n\t\t\tBackbone.pubSub.trigger( 'current-save-status', data );\n\n\t\t};\n\n\t\t/**\n\t\t * Manually Save data via Admin AJAX when the heartbeat API has been disabled\n\t\t *\n\t\t * @since 3.16.7\n\t\t * @since 4.17.0 Fixed undefined variable error when logging an error response.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tfunction do_ajax_save() {\n\n\t\t\t// prevent simultaneous saves\n\t\t\tif ( self.saving ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar changes = self.get_unsaved_changes();\n\n\t\t\t// only send data if we have data to send\n\t\t\tif ( self.has_unsaved_changes( changes ) ) {\n\n\t\t\t\tchanges.id = Course.get( 'id' );\n\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'llms_builder',\n\t\t\t\t\t\taction_type: 'ajax_save',\n\t\t\t\t\t\tcourse_id: changes.id,\n\t\t\t\t\t\tllms_builder: JSON.stringify( changes ),\n\t\t\t\t\t},\n\t\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\t\twindow.llms_builder.debug.log( '==== start do_ajax_save before ====', changes, '==== finish do_ajax_save before ====' );\n\n\t\t\t\t\t\tself.saving = true;\n\n\t\t\t\t\t\tBackbone.pubSub.trigger( 'heartbeat-send', self );\n\n\t\t\t\t\t},\n\t\t\t\t\terror: function( xhr, status, error ) {\n\n\t\t\t\t\t\twindow.llms_builder.debug.log( '==== start do_ajax_save error ====', xhr, '==== finish do_ajax_save error ====' );\n\n\t\t\t\t\t\tself.saving = false;\n\n\t\t\t\t\t\tBackbone.pubSub.trigger( 'heartbeat-tick', self, {\n\t\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\t\tmessage: xhr.responseText + ' (' + error + ' ' + status + ')',\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( res ) {\n\n\t\t\t\t\t\tif ( ! res.llms_builder ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\twindow.llms_builder.debug.log( '==== start do_ajax_save success ====', res, '==== finish do_ajax_save success ====' );\n\n\t\t\t\t\t\tres.llms_builder = process_removals( res.llms_builder );\n\t\t\t\t\t\tres.llms_builder = process_updates( res.llms_builder );\n\n\t\t\t\t\t\tself.saving = false;\n\n\t\t\t\t\t\tBackbone.pubSub.trigger( 'heartbeat-tick', self, res.llms_builder );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Retrieve all the attributes changed on a model since the last sync\n\t\t *\n\t\t * For a new model (a model with a temp ID) or a model where _forceSync has been defined ALL atts will be returned\n\t\t * For an existing model (without a temp ID) only retrieves changed attributes as tracked by Backbone.TrackIt\n\t\t *\n\t\t * This function excludes any attributes defined as child attributes via the models relationship settings\n\t\t *\n\t\t * @param obj model instance of a Backbone.Model\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.6\n\t\t */\n\t\tfunction get_changed_attributes( model ) {\n\n\t\t\tvar atts = {},\n\t\t\t\tsync_type;\n\n\t\t\t// don't save mid editing\n\t\t\tif ( model.get( '_has_focus' ) ) {\n\t\t\t\treturn atts;\n\t\t\t}\n\n\t\t\t// model hasn't been persisted to the database to get a real ID yet\n\t\t\t// send *all* of it's atts\n\t\t\tif ( has_temp_id( model ) || true === model.get( '_forceSync' ) ) {\n\n\t\t\t\tatts = _.clone( model.attributes );\n\t\t\t\tsync_type = 'full';\n\n\t\t\t\t// only send the changed atts\n\t\t\t} else {\n\n\t\t\t\tatts = model.unsavedAttributes();\n\t\t\t\tsync_type = 'partial';\n\n\t\t\t}\n\n\t\t\tvar exclude = ( model.get_relationships ) ? model.get_child_props() : [];\n\t\t\tatts = _.omit( atts, function( val, key ) {\n\n\t\t\t\t// exclude keys that start with an underscore which are used by the\n\t\t\t\t// application but don't need to be stored in the database\n\t\t\t\tif ( 0 === key.indexOf( '_' ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else if ( -1 !== exclude.indexOf( key ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\n\t\t\t} );\n\n\t\t\tif ( model.before_save ) {\n\t\t\t\tatts = model.before_save( atts, sync_type );\n\t\t\t}\n\n\t\t\treturn atts;\n\n\t\t};\n\n\t\t/**\n\t\t * Get all the changes to an object (either a Model or a Collection of models)\n\t\t * Returns only changes to models and the IDs of that model (should changes exist)\n\t\t * Uses get_changed_attributes() to determine if all atts or only changed atts are needed\n\t\t * Processes children intelligently to only return changed children rather than the entire collection of children\n\t\t *\n\t\t * @param obj object instance of a Backbone.Model or Backbone.Collection\n\t\t * @return obj|array\t \t\tif object is a model, returns an object\n\t\t * \tif object is a collection, returns an array of objects\n\t\t * @since 3.16.0\n\t\t * @version 3.16.11\n\t\t */\n\t\tfunction get_changes_to_object( object ) {\n\n\t\t\tvar changed_atts;\n\n\t\t\tif ( object instanceof Backbone.Model ) {\n\n\t\t\t\tchanged_atts = get_changed_attributes( object );\n\n\t\t\t\tif ( object.get_relationships ) {\n\n\t\t\t\t\t_.each( object.get_child_props(), function( prop ) {\n\n\t\t\t\t\t\tvar children = get_changes_to_object( object.get( prop ) );\n\t\t\t\t\t\tif ( ! _.isEmpty( children ) ) {\n\t\t\t\t\t\t\tchanged_atts[ prop ] = children;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t// if we have any data, add the id to the model\n\t\t\t\tif ( ! _.isEmpty( changed_atts ) ) {\n\t\t\t\t\tchanged_atts.id = object.get( 'id' );\n\t\t\t\t}\n\n\t\t\t} else if ( object instanceof Backbone.Collection ) {\n\n\t\t\t\tchanged_atts = [];\n\t\t\t\tobject.each( function( model ) {\n\t\t\t\t\tvar model_changes = get_changes_to_object( model );\n\t\t\t\t\tif ( ! _.isEmpty( model_changes ) ) {\n\t\t\t\t\t\tchanged_atts.push( model_changes );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn changed_atts;\n\n\t\t};\n\n\t\t/**\n\t\t * Determines if a model has a temporary ID or a real persisted ID\n\t\t *\n\t\t * @param obj model instance of a model\n\t\t * @return boolean\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tfunction has_temp_id( model ) {\n\n\t\t\treturn ( ! _.isNumber( model.id ) && 0 === model.id.indexOf( 'temp_' ) );\n\n\t\t};\n\n\t\t/**\n\t\t * Compares changes synced to the server against current model and restarts\n\t\t * tracking on elements that haven't changed since the last sync\n\t\t *\n\t\t * @param obj model instance of a Backbone.Model\n\t\t * @param obj data data set that was processed by the server\n\t\t * @return void\n\t\t * @since 3.16.11\n\t\t * @version 3.19.4\n\t\t */\n\t\tfunction maybe_restart_tracking( model, data ) {\n\n\t\t\tBackbone.pubSub.trigger( model.get( 'type' ) + '-maybe-restart-tracking', model, data );\n\n\t\t\tvar omit = [ 'id', 'orig_id' ];\n\n\t\t\tif ( model.get_relationships ) {\n\t\t\t\tomit.concat( model.get_child_props() );\n\t\t\t}\n\n\t\t\t_.each( _.omit( data, omit ), function( val, prop ) {\n\n\t\t\t\tif ( _.isEqual( model.get( prop ), val ) ) {\n\t\t\t\t\tdelete model._unsavedChanges[ prop ];\n\t\t\t\t\tmodel._originalAttrs[ prop ] = val;\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// if syncing was forced, allow tracking to move forward as normal moving forward\n\t\t\tmodel.unset( '_forceSync' );\n\n\t\t};\n\n\t\t/**\n\t\t * Processes response data from heartbeat-tick related to trashing & detaching models\n\t\t * On success, removes from local removal collection\n\t\t * On error, appends error messages to the data object returned to UI for on-screen feedback\n\t\t *\n\t\t * @param obj data data.llms_builder object from heartbeat-tick response\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.17.1\n\t\t */\n\t\tfunction process_removals( data ) {\n\n\t\t\t// check removals for errors\n\t\t\tvar removals = {\n\t\t\t\tdetach: detached,\n\t\t\t\ttrash: trashed,\n\t\t\t};\n\n\t\t\t_.each( removals, function( coll, key ) {\n\n\t\t\t\tif ( data[ key ] ) {\n\n\t\t\t\t\tvar errors = [];\n\n\t\t\t\t\t_.each( data[ key ] , function( info ) {\n\n\t\t\t\t\t\t// successfully detached, remove it from the detached collection\n\t\t\t\t\t\tif ( ! info.error ) {\n\n\t\t\t\t\t\t\tcoll.remove( info.id );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\terrors.push( info.error );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( errors.length ) {\n\t\t\t\t\t\t_.extend( data, add_error_msg( data, errors ) );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn data;\n\t\t}\n\n\t\t/**\n\t\t * Processes response data from heartbeat-tick related to creating / updating a single object\n\t\t * Handles both collections and models as a recursive function\n\t\t *\n\t\t * @param {[type]} data [description]\n\t\t * @param {[type]} type [description]\n\t\t * @param {[type]} parent [description]\n\t\t * @param {[type]} main_data [description]\n\t\t * @return {[type]}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.11\n\t\t */\n\t\tfunction process_object_updates( data, type, parent, main_data ) {\n\n\t\t\tif ( ! data[ type ] ) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tif ( parent.get( type ) instanceof Backbone.Model ) {\n\n\t\t\t\tvar info = data[ type ];\n\n\t\t\t\tif ( info.error ) {\n\n\t\t\t\t\t_.extend( main_data, add_error_msg( main_data, info.error ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar model = parent.get( type );\n\n\t\t\t\t\t// update temp ids with the real id\n\t\t\t\t\tif ( info.id != info.orig_id ) {\n\t\t\t\t\t\tmodel.set( 'id', info.id );\n\t\t\t\t\t\tdelete model._unsavedChanges.id;\n\t\t\t\t\t}\n\t\t\t\t\tmaybe_restart_tracking( model, info );\n\n\t\t\t\t\t// check children\n\t\t\t\t\tif ( model.get_relationships ) {\n\n\t\t\t\t\t\t_.each( model.get_child_props(), function( child_key ) {\n\t\t\t\t\t\t\t_.extend( data[ type ], process_object_updates( data[ type ], child_key, model, main_data ) );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( parent.get( type ) instanceof Backbone.Collection ) {\n\n\t\t\t\t_.each( data[ type ], function( info, index ) {\n\n\t\t\t\t\tif ( info.error ) {\n\n\t\t\t\t\t\t_.extend( main_data, add_error_msg( main_data, info.error ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar model = parent.get( type ).get( info.orig_id );\n\n\t\t\t\t\t\t// update temp ids with the real id\n\t\t\t\t\t\tif ( info.id != info.orig_id ) {\n\t\t\t\t\t\t\tmodel.set( 'id', info.id );\n\t\t\t\t\t\t\tdelete model._unsavedChanges.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmaybe_restart_tracking( model, info );\n\n\t\t\t\t\t\t// check children\n\t\t\t\t\t\tif ( model.get_relationships ) {\n\n\t\t\t\t\t\t\t_.each( model.get_child_props(), function( child_key ) {\n\t\t\t\t\t\t\t\t_.extend( data[ type ], process_object_updates( data[ type ][ index ], child_key, model, main_data ) );\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn main_data;\n\n\t\t};\n\n\t\t/**\n\t\t * Processes response data from heartbeat-tick related to updating & creating new models\n\t\t * On success, removes from local removal collection\n\t\t * On error, appends error messages to the data object returned to UI for on-screen feedback\n\t\t *\n\t\t * @param obj data data.llms_builder object from heartbeat-tick response\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tfunction process_updates( data ) {\n\n\t\t\t// only mess with updates data\n\t\t\tif ( ! data.updates ) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tif ( data.updates ) {\n\t\t\t\tdata = process_object_updates( data.updates, 'sections', Course, data );\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t};\n\n\t\t/*\n\t\t\t\t\t\t\t\t /$$ /$$ /$$ /$$\n\t\t\t\t\t\t\t\t| $$ | $$|__/ |__/\n\t\t\t /$$$$$$ /$$ /$$| $$$$$$$ | $$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$\n\t\t\t /$$__ $$| $$ | $$| $$__ $$| $$| $$ /$$_____/ |____ $$ /$$__ $$| $$\n\t\t\t| $$ \\ $$| $$ | $$| $$ \\ $$| $$| $$| $$ /$$$$$$$| $$ \\ $$| $$\n\t\t\t| $$ | $$| $$ | $$| $$ | $$| $$| $$| $$ /$$__ $$| $$ | $$| $$\n\t\t\t| $$$$$$$/| $$$$$$/| $$$$$$$/| $$| $$| $$$$$$$ | $$$$$$$| $$$$$$$/| $$\n\t\t\t| $$____/ \\______/ |_______/ |__/|__/ \\_______/ \\_______/| $$____/ |__/\n\t\t\t| $$ | $$\n\t\t\t| $$ | $$\n\t\t\t|__/ |__/\n\t\t*/\n\n\t\t/**\n\t\t * Retrieve all unsaved changes for the builder instance\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.17.1\n\t\t */\n\t\tthis.get_unsaved_changes = function() {\n\n\t\t\treturn {\n\t\t\t\tdetach: detached.pluck( 'id' ),\n\t\t\t\ttrash: trashed.pluck( 'id' ),\n\t\t\t\tupdates: get_changes_to_object( Course ),\n\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Check if the builder instance has unsaved changes\n\t\t *\n\t\t * @param obj changes optionally pass in an object from the return of this.get_unsaved_changes()\n\t\t * save some resources by not running the check twice during heartbeats\n\t\t * @return boolean\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.has_unsaved_changes = function( changes ) {\n\n\t\t\tif ( 'undefined' === typeof changes ) {\n\t\t\t\tchanges = self.get_unsaved_changes();\n\t\t\t}\n\n\t\t\t// check all possible keys, once we find one with content we have some changes to persist\n\t\t\tvar found = _.find( changes, function( data ) {\n\n\t\t\t\treturn ( false === _.isEmpty( data ) );\n\n\t\t\t} );\n\n\t\t\treturn found ? true : false;\n\n\t\t};\n\n\t\t/**\n\t\t * Save changes right now.\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.7\n\t\t */\n\t\tthis.save_now = function() {\n\t\t\tif ( autosave ) {\n\t\t\t\twp.heartbeat.connectNow();\n\t\t\t} else {\n\t\t\t\tdo_ajax_save();\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Update the interval that checks for changes to the builder instance\n\t\t *\n\t\t * @param int ms time (in milliseconds) to run the check on\n\t\t * pass 0 to disable the check\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tthis.set_check_interval = function( ms ) {\n\t\t\tcheck_interval_ms = ms;\n\t\t\tif ( check_interval ) {\n\t\t\t\tclearInterval( check_interval );\n\t\t\t}\n\t\t\tif ( check_interval_ms ) {\n\t\t\t\tcheck_interval = setInterval( check_for_changes, check_interval_ms );\n\t\t\t}\n\t\t};\n\n\t\t/*\n\t\t\t /$$ /$$ /$$\n\t\t\t| $$|__/ | $$\n\t\t\t| $$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$\n\t\t\t| $$| $$ /$$_____/|_ $$_/ /$$__ $$| $$__ $$ /$$__ $$ /$$__ $$ /$$_____/\n\t\t\t| $$| $$| $$$$$$ | $$ | $$$$$$$$| $$ \\ $$| $$$$$$$$| $$ \\__/| $$$$$$\n\t\t\t| $$| $$ \\____ $$ | $$ /$$| $$_____/| $$ | $$| $$_____/| $$ \\____ $$\n\t\t\t| $$| $$ /$$$$$$$/ | $$$$/| $$$$$$$| $$ | $$| $$$$$$$| $$ /$$$$$$$/\n\t\t\t|__/|__/|_______/ \\___/ \\_______/|__/ |__/ \\_______/|__/ |_______/\n\t\t*/\n\n\t\t/**\n\t\t * Listen for detached models and send them to the server for persistence\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tBackbone.pubSub.on( 'model-detached', function( model ) {\n\n\t\t\t// detached models with temp ids haven't been persisted so we don't care\n\t\t\tif ( has_temp_id( model ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdetached.add( _.clone( model.attributes ) );\n\n\t\t} );\n\n\t\t/**\n\t\t * Listen for trashed models and send them to the server for deletion\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @version 3.17.1\n\t\t */\n\t\tBackbone.pubSub.on( 'model-trashed', function( model ) {\n\n\t\t\t// if the model has a temp ID we don't have to persist the deletion\n\t\t\tif ( has_temp_id( model ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar data = _.clone( model.attributes );\n\n\t\t\tif ( model.get_trash_id ) {\n\t\t\t\tdata.id = model.get_trash_id();\n\t\t\t}\n\n\t\t\ttrashed.add( data );\n\n\t\t} );\n\n\t\t/*\n\t\t\t /$$ /$$ /$$ /$$\n\t\t\t| $$ | $$ | $$ | $$\n\t\t\t| $$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$\n\t\t\t| $$__ $$ /$$__ $$ |____ $$ /$$__ $$|_ $$_/ | $$__ $$ /$$__ $$ |____ $$|_ $$_/\n\t\t\t| $$ \\ $$| $$$$$$$$ /$$$$$$$| $$ \\__/ | $$ | $$ \\ $$| $$$$$$$$ /$$$$$$$ | $$\n\t\t\t| $$ | $$| $$_____/ /$$__ $$| $$ | $$ /$$| $$ | $$| $$_____/ /$$__ $$ | $$ /$$\n\t\t\t| $$ | $$| $$$$$$$| $$$$$$$| $$ | $$$$/| $$$$$$$/| $$$$$$$| $$$$$$$ | $$$$/\n\t\t\t|__/ |__/ \\_______/ \\_______/|__/ \\___/ |_______/ \\_______/ \\_______/ \\___/\n\t\t*/\n\n\n\t\t/**\n\t\t * Add data to the WP heartbeat to persist new models, changes, and deletions to the DB\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.7 Unknown\n\t\t * @since 4.14.0 Return early when autosaving is disabled.\n\t\t */\n\t\t$( document ).on( 'heartbeat-send', function( event, data ) {\n\n\t\t\t// Autosaving is disabled.\n\t\t\tif ( ! autosave ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// prevent simultaneous saves\n\t\t\tif ( self.saving ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar changes = self.get_unsaved_changes();\n\n\t\t\t// only send data if we have data to send\n\t\t\tif ( self.has_unsaved_changes( changes ) ) {\n\n\t\t\t\tchanges.id = Course.get( 'id' );\n\t\t\t\tself.saving = true;\n\t\t\t\tdata.llms_builder = JSON.stringify( changes );\n\n\t\t\t}\n\n\t\t\twindow.llms_builder.debug.log( '==== start heartbeat-send ====', data, '==== finish heartbeat-send ====' );\n\n\t\t\tBackbone.pubSub.trigger( 'heartbeat-send', self );\n\n\t\t} );\n\n\t\t/**\n\t\t * Confirm detachments & deletions and replace temp IDs with new persisted IDs\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 4.14.0 Return early when autosaving is disabled.\n\t\t */\n\t\t$( document ).on( 'heartbeat-tick', function( event, data ) {\n\n\t\t\t// Autosaving is disabled.\n\t\t\tif ( ! autosave ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! data.llms_builder ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.llms_builder.debug.log( '==== start heartbeat-tick ====', data, '==== finish heartbeat-tick ====' );\n\n\t\t\tdata.llms_builder = process_removals( data.llms_builder );\n\t\t\tdata.llms_builder = process_updates( data.llms_builder );\n\n\t\t\tself.saving = false;\n\n\t\t\tBackbone.pubSub.trigger( 'heartbeat-tick', self, data.llms_builder );\n\n\t\t} );\n\n\t\t/**\n\t\t * On heartbeat errors publish an error to the main builder application\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 4.14.0 Return early when autosaving is disabled.\n\t\t */\n\t\t$( document ).on( 'heartbeat-error', function( event, data ) {\n\n\t\t\t// Autosaving is disabled.\n\t\t\tif ( ! autosave ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twindow.llms_builder.debug.log( '==== start heartbeat-error ====', data, '==== finish heartbeat-error ====' );\n\n\t\t\tself.saving = false;\n\n\t\t\tBackbone.pubSub.trigger( 'heartbeat-tick', self, {\n\t\t\t\tstatus: 'error',\n\t\t\t\tmessage: data.responseText + ' (' + data.status + ' ' + data.statusText + ')',\n\t\t\t} );\n\n\t\t} );\n\n\t\t/*\n\t\t\t /$$ /$$ /$$\n\t\t\t|__/ |__/ | $$\n\t\t\t /$$ /$$$$$$$ /$$ /$$$$$$\n\t\t\t| $$| $$__ $$| $$|_ $$_/\n\t\t\t| $$| $$ \\ $$| $$ | $$\n\t\t\t| $$| $$ | $$| $$ | $$ /$$\n\t\t\t| $$| $$ | $$| $$ | $$$$/\n\t\t\t|__/|__/ |__/|__/ \\___/\n\t\t*/\n\t\tinit();\n\n\t\treturn this;\n\n\t};\n\n} );\n\n","/**\n * Single Lesson View\n * @since 3.16.0\n * @version 3.27.0\n */\ndefine( 'Views/Lesson',[\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Shiftable',\n\t\t'Views/_Trashable'\n\t], function(\n\t\tDetachable,\n\t\tEditable,\n\t\tShiftable,\n\t\tTrashable\n\t) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Get default attributes for the html wrapper element\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tattributes: function() {\n\t\t\treturn {\n\t\t\t\t'data-id': this.model.id,\n\t\t\t\t'data-section-id': this.model.get( 'parent_section' ),\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * HTML class names\n\t\t * @type {String}\n\t\t */\n\t\tclassName: 'llms-builder-item llms-lesson',\n\n\t\t/**\n\t\t * Events\n\t\t * @type {Object}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.12\n\t\t */\n\t\tevents: _.defaults( {\n\t\t\t'click .edit-lesson': 'open_lesson_editor',\n\t\t\t'click .llms-headline': 'open_lesson_editor',\n\t\t\t'click .edit-quiz': 'open_quiz_editor',\n\t\t\t'click .edit-assignment': 'open_assignment_editor',\n\t\t\t'click .section-prev': 'section_prev',\n\t\t\t'click .section-next': 'section_next',\n\t\t\t'click .shift-up--lesson': 'shift_up',\n\t\t\t'click .shift-down--lesson': 'shift_down',\n\t\t}, Detachable.events, Editable.events, Trashable.events ),\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-lesson-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-lesson-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.14.1\n\t\t * @version 3.14.1\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.render();\n\n\t\t\tthis.listenTo( this.model, 'change', this.render );\n\n\t\t\tBackbone.pubSub.on( 'lesson-selected', this.on_select, this );\n\t\t\tBackbone.pubSub.on( 'new-lesson-added', this.on_select, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this.model ) );\n\t\t\tthis.maybe_hide_shiftable_buttons();\n\t\t\tif ( this.model.get( '_selected' ) ) {\n\t\t\t\tthis.$el.addClass( 'selected' );\n\t\t\t} else {\n\t\t\t\tthis.$el.removeClass( 'selected' );\n\t\t\t}\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for the assignment editor action icon\n\t\t * Opens sidebar to the assignment editor tab\n\t\t * @param obj event JS Event obj.\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.27.0\n\t\t */\n\t\topen_assignment_editor: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tBackbone.pubSub.trigger( 'lesson-selected', this.model, 'assignment' );\n\t\t\tthis.model.set( '_selected', true );\n\t\t\tthis.set_hash( 'assignment' );\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for lesson settings action icon\n\t\t * Opens sidebar to the lesson editor tab\n\t\t * @param obj event JS Event obj.\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.27.0\n\t\t */\n\t\topen_lesson_editor: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tBackbone.pubSub.trigger( 'lesson-selected', this.model, 'lesson' );\n\t\t\tthis.model.set( '_selected', true );\n\t\t\tthis.set_hash( false );\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for the quiz editor action icon\n\t\t * Opens sidebar to the quiz editor tab\n\t\t * @param obj event JS Event obj.\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.27.0\n\t\t */\n\t\topen_quiz_editor: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tBackbone.pubSub.trigger( 'lesson-selected', this.model, 'quiz' );\n\t\t\tthis.model.set( '_selected', true );\n\t\t\tthis.set_hash( 'quiz' );\n\n\t\t},\n\n\t\t/**\n\t\t * When a lesson is selected mark it as selected in the hidden prop\n\t\t * Allows views to re-render and reflect current state properly\n\t\t * @param obj model lesson model that's been selected\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_select: function( model ) {\n\n\t\t\tif ( this.model.id !== model.id ) {\n\t\t\t\tthis.model.set( '_selected', false );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for the \"Next Section\" button\n\t\t * @param obj event js event obj\n\t\t * @return void\n\t\t * @since 3.16.11\n\t\t * @version 3.16.11\n\t\t */\n\t\tsection_next: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._move_to_section( 'next' );\n\t\t},\n\n\t\t/**\n\t\t * Click event for the \"Previous Section\" button\n\t\t * @param obj event js event obj\n\t\t * @return void\n\t\t * @since 3.16.11\n\t\t * @version 3.16.11\n\t\t */\n\t\tsection_prev: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis._move_to_section( 'prev' );\n\t\t},\n\n\t\t/**\n\t\t * Adds a hash for deep linking to a specific lesson tab\n\t\t * @param string subtab subtab [quiz|assignment]\n\t\t * @return void\n\t\t * @since 3.27.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tset_hash: function( subtab ) {\n\n\t\t\tvar hash = 'lesson:' + this.model.get( 'id' );\n\n\t\t\tif ( subtab ) {\n\t\t\t\thash += ':' + subtab;\n\t\t\t}\n\n\t\t\twindow.location.hash = hash;\n\n\t\t},\n\n\t\t/**\n\t\t * Move the lesson into a new section\n\t\t * @param string direction direction [prev|next]\n\t\t * @return void\n\t\t * @since 3.16.11\n\t\t * @version 3.16.11\n\t\t */\n\t\t_move_to_section: function( direction ) {\n\n\t\t\tvar from_coll = this.model.collection,\n\t\t\t\tto_section;\n\n\t\t\tif ( 'next' === direction ) {\n\t\t\t\tto_section = from_coll.parent.get_next();\n\t\t\t} else if ( 'prev' === direction ) {\n\t\t\t\tto_section = from_coll.parent.get_prev();\n\t\t\t}\n\n\t\t\tif ( to_section ) {\n\n\t\t\t\tfrom_coll.remove( this.model );\n\t\t\t\tto_section.add_lesson( this.model );\n\t\t\t\tto_section.set( '_expanded', true );\n\n\t\t\t}\n\n\t\t},\n\n\t}, Detachable, Editable, Shiftable, Trashable ) );\n\n} );\n\n","/**\n * Single Section View\n *\n * @since 3.13.0\n * @version 3.16.0\n */\ndefine( 'Views/LessonList',[ 'Views/Lesson', 'Views/_Receivable' ], function( LessonView, Receivable ) {\n\n\treturn Backbone.CollectionView.extend( _.defaults( {\n\n\t\tclassName: 'llms-lessons',\n\n\t\t/**\n\t\t * Section model\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: LessonView,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: false,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: true,\n\n\t\tsortableOptions: {\n\t\t\taxis: false,\n\t\t\tconnectWith: '.llms-lessons',\n\t\t\tcursor: 'move',\n\t\t\thandle: '.drag-lesson',\n\t\t\titems: '.llms-lesson',\n\t\t\tplaceholder: 'llms-lesson llms-sortable-placeholder',\n\t\t},\n\n\t\tsortable_start: function( collection ) {\n\t\t\t$( '.llms-lessons' ).addClass( 'dragging' );\n\t\t},\n\n\t\tsortable_stop: function( collection ) {\n\t\t\t$( '.llms-lessons' ).removeClass( 'dragging' );\n\t\t},\n\n\t\t/**\n\t\t * Overloads the function from Backbone.CollectionView core because it doesn't send stop events\n\t\t * if moving from one sortable to another... :-(\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @param obj ui jQuery UI object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_sortStop : function( event, ui ) {\n\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( 'data-model-cid' ) ),\n\t\t\t\tmodelViewContainerEl = this._getContainerEl(),\n\t\t\t\tnewIndex = modelViewContainerEl.children().index( ui.item );\n\n\t\t\tif ( newIndex == -1 && modelBeingSorted ) {\n\t\t\t\tthis.collection.remove( modelBeingSorted );\n\t\t\t}\n\n\t\t\tthis._reorderCollectionBasedOnHTML();\n\t\t\tthis.updateDependentControls();\n\n\t\t\tif ( this._isBackboneCourierAvailable() ) {\n\t\t\t\tthis.spawn( 'sortStop', { modelBeingSorted : modelBeingSorted, newIndex : newIndex } );\n\t\t\t} else {\n\t\t\t\tthis.trigger( 'sortStop', modelBeingSorted, newIndex );\n\t\t\t}\n\n\t\t},\n\n\t}, Receivable ) );\n\n} );\n\n","/**\n * Single Section View\n * @since 3.13.0\n * @version 3.16.12\n */\ndefine( 'Views/Section',[\n\t\t'Views/LessonList',\n\t\t'Views/_Editable',\n\t\t'Views/_Shiftable',\n\t\t'Views/_Trashable'\n\t], function(\n\t\tLessonListView,\n\t\tEditable,\n\t\tShiftable,\n\t\tTrashable\n\t) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Get default attributes for the html wrapper element\n\t\t * @return obj\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\tattributes: function() {\n\t\t\treturn {\n\t\t\t\t'data-id': this.model.id,\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Element class names\n\t\t * @type {String}\n\t\t */\n\t\tclassName: 'llms-builder-item llms-section',\n\n\t\t/**\n\t\t * Events\n\t\t * @type {Object}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.12\n\t\t */\n\t\tevents: _.defaults( {\n\n\t\t\t'click': 'select',\n\t\t\t'click .expand': 'expand',\n\t\t\t'click .collapse': 'collapse',\n\t\t\t'click .shift-up--section': 'shift_up',\n\t\t\t'click .shift-down--section': 'shift_down',\n\t\t\t'click .new-lesson': 'add_new_lesson',\n\t\t\t'click .llms-builder-header': 'toggle',\n\t\t\t'mouseenter .llms-lessons': 'on_mouseenter',\n\n\t\t}, Editable.events, Trashable.events ),\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute\n\t\t * @return string\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-section-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-section-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.13.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.render();\n\t\t\tthis.listenTo( this.model, 'change', this.render );\n\t\t\tthis.listenTo( this.model, 'change:_expanded', this.toggle_expanded );\n\t\t\tthis.lessonListView.collection.on( 'add', this.on_lesson_add, this );\n\n\t\t\tthis.dragTimeout = null;\n\n\t\t\tBackbone.pubSub.on( 'expand-all', this.expand, this );\n\t\t\tBackbone.pubSub.on( 'collapse-all', this.collapse, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Render the section\n\t\t * Initializes a new collection and views for all lessons in the section\n\t\t * @return void\n\t\t * @since 3.13.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this.model.toJSON() ) );\n\n\t\t\tthis.maybe_hide_shiftable_buttons();\n\n\t\t\tthis.lessonListView = new LessonListView( {\n\t\t\t\tel: this.$el.find( '.llms-lessons' ),\n\t\t\t\tcollection: this.model.get( 'lessons' ),\n\t\t\t} );\n\t\t\tthis.lessonListView.render();\n\t\t\tthis.lessonListView.on( 'sortStart', this.lessonListView.sortable_start );\n\t\t\tthis.lessonListView.on( 'sortStop', this.lessonListView.sortable_stop );\n\n\t\t\t// selection changes\n\t\t\tthis.lessonListView.on( 'selectionChanged', this.active_lesson_change, this );\n\n\t\t\tthis.maybe_hide_trash_button();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd_new_lesson: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tBackbone.pubSub.trigger( 'section-select', this.model );\n\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\n\t\t},\n\n\t\tactive_lesson_change: function( current, previous ) {\n\n\t\t\tBackbone.pubSub.trigger( 'active-lesson-change', {\n\t\t\t\tcurrent: current,\n\t\t\t\tprevious: previous,\n\t\t\t} );\n\n\t\t},\n\n\t\ttoggle: function( event, update ) {\n\n\t\t\t// We only want to expand/collapse when the actual header div is clicked, not an element inside it.\n\t\t\tif ( 'llms-builder-header' !== event.target.className ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.model.get( '_expanded' ) ) {\n\t\t\t\tthis.collapse( event, update );\n\t\t\t} else {\n\t\t\t\tthis.expand( event, update );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Collapse lessons within the section\n\t\t * @param obj event js event object\n\t\t * @param bool update if true, updates the model to reflect the new state\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tcollapse: function( event, update ) {\n\n\t\t\tif ( 'undefined' === typeof update ) {\n\t\t\t\tupdate = true;\n\t\t\t}\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis.$el.removeClass( 'expanded' ).find( '.drag-expanded' ).removeClass( 'drag-expanded' );\n\t\t\tif ( update ) {\n\t\t\t\tthis.model.set( '_expanded', false );\n\t\t\t}\n\t\t\tBackbone.pubSub.trigger( 'section-toggle', this.model );\n\n\t\t},\n\n\t\t/**\n\t\t * Expand lessons within the section\n\t\t * @param obj event js event object\n\t\t * @param bool update if true, updates the model to reflect the new state\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\texpand: function( event, update ) {\n\n\t\t\tif ( 'undefined' === typeof update ) {\n\t\t\t\tupdate = true;\n\t\t\t}\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis.$el.addClass( 'expanded' );\n\t\t\tif ( update ) {\n\t\t\t\tthis.model.set( '_expanded', true );\n\t\t\t}\n\t\t\tBackbone.pubSub.trigger( 'section-toggle', this.model );\n\n\t\t},\n\n\t\tmaybe_hide_trash_button: function() {\n\n\t\t\tvar $btn = this.$el.find( '.trash--section' );\n\n\t\t\tif ( this.model.get( 'lessons' ).isEmpty() ) {\n\n\t\t\t\t$btn.show();\n\n\t\t\t} else {\n\n\t\t\t\t$btn.hide()\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * When a lesson is added to the section trigger a collection reorder & update the lesson's id\n\t\t * @param obj model Lesson model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_lesson_add: function( model ) {\n\n\t\t\tthis.lessonListView.collection.trigger( 'reorder' );\n\t\t\tmodel.set( 'parent_section', this.model.get( 'id' ) );\n\t\t\tthis.expand();\n\n\t\t},\n\n\t\ton_mouseenter: function( event ) {\n\n\n\t\t\tif ( $( event.target ).hasClass( 'dragging' ) ) {\n\n\t\t\t\t$( '.drag-expanded' ).removeClass( 'drag-expanded' );\n\t\t\t\t$( event.target ).addClass( 'drag-expanded' );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Expand\n\t\t * @param {[type]} model [description]\n\t\t * @param {[type]} value [description]\n\t\t * @return {[type]}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ttoggle_expanded: function( model, value ) {\n\n\t\t\tif ( value ) {\n\t\t\t\tthis.expand( null, false );\n\t\t\t} else {\n\t\t\t\tthis.collapse( null, false );\n\t\t\t}\n\n\t\t},\n\n\t}, Editable, Shiftable, Trashable ) );\n\n} );\n\n","/**\n * Single Section View\n *\n * @since 3.13.0\n * @version 3.16.0\n */\ndefine( 'Views/SectionList',[ 'Views/Section', 'Views/_Receivable' ], function( SectionView, Receivable ) {\n\n\treturn Backbone.CollectionView.extend( _.defaults( {\n\n\t\t/**\n\t\t * Parent element\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-sections',\n\n\t\tevents : {\n\t\t\t'mousedown > li.llms-section > .llms-builder-header .llms-headline' : '_listItem_onMousedown',\n\t\t\t// 'dblclick > li, tbody > tr > td' : '_listItem_onDoubleClick',\n\t\t\t'click' : '_listBackground_onClick',\n\t\t\t'click ul.collection-view' : '_listBackground_onClick',\n\t\t\t'keydown' : '_onKeydown'\n\t\t},\n\n\t\t/**\n\t\t * Section model\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: SectionView,\n\n\t\t/**\n\t\t * Enable keyboard events\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tprocessKeyEvents: false,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: true,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: true,\n\n\t\tsortableOptions: {\n\t\t\taxis: false,\n\t\t\tcursor: 'move',\n\t\t\thandle: '.drag-section',\n\t\t\titems: '.llms-section',\n\t\t\tplaceholder: 'llms-section llms-sortable-placeholder',\n\t\t},\n\n\t\tsortable_start: function( collection ) {\n\t\t\tthis.$el.addClass( 'dragging' );\n\t\t},\n\n\t\tsortable_stop: function( collection ) {\n\t\t\tthis.$el.removeClass( 'dragging' );\n\t\t},\n\n\t}, Receivable ) );\n\n} );\n\n","/**\n * Single Course View\n *\n * @since 3.13.0\n * @version 3.16.0\n */\ndefine( 'Views/Course',[\n\t'Views/SectionList',\n\t'Views/_Detachable',\n\t'Views/_Editable',\n\t'Views/_Shiftable',\n\t'Views/_Trashable'\n], function(\n\t SectionListView,\n\t Detachable,\n\t Editable,\n\t Shiftable,\n\t Trashable\n) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Get default attributes for the html wrapper element\n\t\t *\n\t\t * @return obj\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\tattributes: function() {\n\t\t\treturn {\n\t\t\t\t'data-id': this.model.id,\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * HTML element selector\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-builder-main',\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-course-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// this.listenTo( this.model, 'sync', this.render );\n\t\t\tthis.render();\n\n\t\t\tthis.sectionListView = new SectionListView( {\n\t\t\t\tcollection: this.model.get( 'sections' ),\n\t\t\t} );\n\t\t\tthis.sectionListView.render();\n\t\t\t// drag and drop start\n\t\t\tthis.sectionListView.on( 'sortStart', this.sectionListView.sortable_start );\n\t\t\t// drag and drop stop\n\t\t\tthis.sectionListView.on( 'sortStop', this.sectionListView.sortable_stop );\n\t\t\t// selection changes\n\t\t\tthis.sectionListView.on( 'selectionChanged', this.active_section_change );\n\t\t\t// \"select\" a section when it's added to the course\n\t\t\tthis.listenTo( this.model.get( 'sections' ), 'add', this.on_section_add );\n\n\t\t\tBackbone.pubSub.on( 'section-toggle', this.on_section_toggle, this );\n\n\t\t\tBackbone.pubSub.on( 'section-select', this.on_section_select, this );\n\n\t\t\tBackbone.pubSub.on( 'expand-section', this.expand_section, this );\n\n\t\t\tBackbone.pubSub.on( 'lesson-selected', this.active_lesson_change, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Events\n\t\t * @type {Object}\n\t\t * @version 7.6.0\n\t\t */\n\t\tevents: _.defaults( {\n\t\t\t'click .new-section': 'add_new_section',\n\t\t}, Detachable.events, Editable.events, Trashable.events ),\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @return self (for chaining)\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\trender: function() {\n\t\t\tthis.$el.html( this.template( this.model ) );\n\t\t\treturn this;\n\t\t},\n\n\t\tactive_lesson_change: function( model ) {\n\n\t\t\t// set parent section to be active\n\t\t\tvar section = this.model.get( 'sections' ).get( model.get( 'parent_section' ) );\n\t\t\tthis.sectionListView.setSelectedModel( section );\n\n\t\t},\n\n\t\t/**\n\t\t * When a section \"selection\" changes in the list\n\t\t * Update each section model so we can figure out which one is selected from other views\n\t\t *\n\t\t * @param array current array of selected models\n\t\t * @param array previous array of previously selected models\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tactive_section_change: function( current, previous ) {\n\n\t\t\t_.each( current, function( model ) {\n\t\t\t\tmodel.set( '_selected', true );\n\t\t\t} );\n\n\t\t\t_.each( previous, function( model ) {\n\t\t\t\tmodel.set( '_selected', false );\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * \"Selects\" the new section when it's added to the course\n\t\t *\n\t\t * @param obj model Section model that's just been added\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_section_add: function( model ) {\n\n\t\t\tthis.sectionListView.setSelectedModel( model );\n\n\t\t},\n\n\t\t/**\n\t\t * When expanding/collapsing sections\n\t\t * if collapsing, unselect, if expanding, select\n\t\t *\n\t\t * @param obj model toggled section\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_section_toggle: function( model ) {\n\n\t\t\tvar selected = model.get( '_expanded' ) ? [ model ] : [];\n\t\t\tthis.sectionListView.setSelectedModels( selected );\n\n\t\t},\n\n\n\t\t/**\n\t\t * When doing things like adding a lesson, seelct the section.\n\t\t *\n\t\t * @param obj model toggled section\n\t\t * @return void\n\t\t * @since 7.6.0\n\t\t * @version 7.6.0\n\t\t */\n\t\ton_section_select: function( model ) {\n\n\t\t\tthis.sectionListView.setSelectedModel( model );\n\n\t\t},\n\n\t\tadd_new_section: function( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'add-new-section' );\n\t\t},\n\n\n\t}, Editable ) );\n\n} );\n\n","/**\n * Model settings fields view\n *\n * @since 3.17.0\n * @version 4.7.0\n */\ndefine( 'Views/SettingsFields',[], function() {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * DOM events\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tevents: {\n\t\t\t'click .llms-settings-group-toggle': 'toggle_group',\n\t\t},\n\n\t\t/**\n\t\t * Processed fields data\n\t\t * Allows access by ID without traversing the schema\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tfields: {},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-settings-fields-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\t// initialize: function() {},\n\n\t\t/**\n\t\t * Retrieve an array of all editor fields in all groups\n\t\t *\n\t\t * @return array\n\t\t * @since 3.17.1\n\t\t * @version 3.17.1\n\t\t */\n\t\tget_editor_fields: function() {\n\t\t\treturn _.filter( this.fields, function( field ) {\n\t\t\t\treturn this.is_editor_field( field.type );\n\t\t\t}, this );\n\t\t},\n\n\t\t/**\n\t\t * Get settings group data from a model\n\t\t *\n\t\t * @return {[type]}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tget_groups: function() {\n\n\t\t\treturn this.model.get_settings_fields();\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if a settings group is hidden in localStorage\n\t\t *\n\t\t * @param string group_id id of the group\n\t\t * @return {Boolean}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tis_group_hidden: function( group_id ) {\n\n\t\t\tvar id = 'llms-' + this.model.get( 'type' ) + '-settings-group--' + group_id;\n\n\t\t\tif ( 'undefined' !== window.localStorage ) {\n\t\t\t\treturn ( 'hidden' === window.localStorage.getItem( id ) );\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t},\n\n\t\t/**\n\t\t * Get the switch attribute for a field with switches\n\t\t *\n\t\t * @param obj field field data obj\n\t\t * @return string\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tget_switch_attribute: function( field ) {\n\n\t\t\treturn field.switch_attribute ? field.switch_attribute : field.attribute;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if a field has a switch\n\t\t *\n\t\t * @param string type field type string\n\t\t * @return {Boolean}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\thas_switch: function( type ) {\n\t\t\treturn ( -1 !== type.indexOf( 'switch' ) );\n\t\t},\n\n\t\t/**\n\t\t * Determine if a field is a default (text) field\n\t\t *\n\t\t * @param string type field type string\n\t\t * @return {Boolean}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tis_default_field: function( type ) {\n\n\t\t\tvar types = [ 'audio_embed', 'datepicker', 'number', 'text', 'video_embed' ];\n\t\t\treturn ( -1 !== types.indexOf( type.replace( 'switch-', '' ) ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if a field is a WYSIWYG editor field\n\t\t *\n\t\t * @param string type field type string\n\t\t * @return {Boolean}\n\t\t * @since 3.17.1\n\t\t * @version 3.17.1\n\t\t */\n\t\tis_editor_field: function( type ) {\n\n\t\t\tvar types = [ 'editor', 'switch-editor' ];\n\t\t\treturn ( -1 !== types.indexOf( type.replace( 'switch-', '' ) ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if a switch is enabled for a field\n\t\t *\n\t\t * @param obj field field data object\n\t\t * @return {Boolean}\n\t\t * @since 3.17.0\n\t\t * @version 3.17.6\n\t\t */\n\t\tis_switch_condition_met: function( field ) {\n\n\t\t\treturn ( field.switch_on === this.model.get( field.switch_attribute ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @return self (for chaining)\n\t\t * @since 3.17.0\n\t\t * @version 3.17.1\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this ) );\n\n\t\t\t// if editors exist, render them\n\t\t\t_.each( this.get_editor_fields(), function( field ) {\n\t\t\t\tthis.render_editor( field );\n\t\t\t}, this );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Renders an editor field\n\t\t *\n\t\t * @since 3.17.1\n\t\t * @since 3.37.11 Replace references to `wp.editor` with `_.getEditor()` helper.\n\t\t *\n\t\t * @param {Object} field Field data object.\n\t\t * @return {Void}\n\t\t */\n\t\trender_editor: function( field ) {\n\n\t\t\tvar self = this,\n\t\t\t\twpEditor = _.getEditor();\n\n\t\t\t// Exit early if there's no editor to work with.\n\t\t\tif ( undefined === wpEditor ) {\n\t\t\t\tconsole.error( 'Unable to access `wp.oldEditor` or `wp.editor`.' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twpEditor.remove( field.id );\n\t\t\tfield.settings.tinymce.setup = function( editor ) {\n\n\t\t\t\tvar $ed = $( '#' + editor.id ),\n\t\t\t\t\t$parent = $ed.closest( '.llms-editable-editor' ),\n\t\t\t\t\t$label = $parent.find( '.llms-label' ),\n\t\t\t\t\tprop = $ed.attr( 'data-attribute' )\n\n\t\t\t\tif ( $label.length ) {\n\t\t\t\t\t$label.prependTo( $parent.find( '.wp-editor-tools' ) );\n\t\t\t\t}\n\n\t\t\t\t// save changes to the model via Visual ed\n\t\t\t\teditor.on( 'change', function( event ) {\n\t\t\t\t\tself.model.set( prop, wpEditor.getContent( editor.id ) );\n\t\t\t\t} );\n\n\t\t\t\t// save changes via Text ed\n\t\t\t\t$ed.on( 'input', function( event ) {\n\t\t\t\t\tself.model.set( prop, $ed.val() );\n\t\t\t\t} );\n\n\t\t\t\t// trigger an input on the Text ed when quicktags buttons are clicked\n\t\t\t\t$parent.on( 'click', '.quicktags-toolbar .ed_button', function() {\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t$ed.trigger( 'input' );\n\t\t\t\t\t}, 10 );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\twpEditor.initialize( field.id, field.settings );\n\n\t\t},\n\n\t\t/**\n\t\t * Get the HTML for a select field\n\t\t *\n\t\t * @param obj options flat or multi-dimensional options object\n\t\t * @param string attribute name of the select field's attribute\n\t\t * @return string\n\t\t * @since 3.17.0\n\t\t * @version 3.17.2\n\t\t */\n\t\trender_select_options: function( options, attribute ) {\n\n\t\t\tvar html = '',\n\t\t\t\tselected = this.model.get( attribute );\n\n\t\t\tfunction option_html( label, val ) {\n\n\t\t\t\treturn '' + label.substring( 0, 100 ) + ( label.length > 100 ? '...' : '' ) + ' ';\n\n\t\t\t}\n\n\t\t\t_.each( options, function( option, index ) {\n\n\t\t\t\t// this will be an key:val object\n\t\t\t\tif ( 'string' === typeof option ) {\n\t\t\t\t\thtml += option_html( option, index );\n\t\t\t\t\t// either option group or array of key,val objects\n\t\t\t\t} else if ( 'object' === typeof option ) {\n\t\t\t\t\t// option group\n\t\t\t\t\tif ( option.label && option.options ) {\n\t\t\t\t\t\thtml += '';\n\t\t\t\t\t\thtml += this.render_select_options( option.options, attribute );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml += option_html( option.val, option.key );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}, this );\n\n\t\t\treturn html;\n\n\t\t},\n\n\t\t/**\n\t\t * Setup and fill fields with default data based on field type\n\t\t *\n\t\t * @since 3.17.0\n\t\t * @since 3.24.0 Unknown.\n\t\t * @since 3.37.11 Replace reference to `wp.editor` with `_.getEditor()` helper.\n\t\t * @since 4.7.0 Ensure `switch-number` fields are set with the `number` type attribute.\n\t\t *\n\t\t * @param {Object} orig_field Original field as defined in the settings.\n\t\t * @param {Integer} field_index Index of the field in the current row.\n\t\t * @return {Object}\n\t\t */\n\t\tsetup_field: function( orig_field, field_index ) {\n\n\t\t\tvar defaults = {\n\t\t\t\tclasses: [],\n\t\t\t\tid: _.uniqueId( orig_field.attribute + '_' ),\n\t\t\t\tinput_type: 'text',\n\t\t\t\tlabel: '',\n\t\t\t\toptions: {},\n\t\t\t\tplaceholder: '',\n\t\t\t\ttip: '',\n\t\t\t\ttip_position: 'top-right',\n\t\t\t\tsettings: {},\n\t\t\t};\n\n\t\t\t// check the field condition if set\n\t\t\tif ( orig_field.condition && false === _.bind( orig_field.condition, this.model )() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tswitch ( orig_field.type ) {\n\n\t\t\t\tcase 'audio_embed':\n\t\t\t\t\tdefaults.classes.push( 'llms-editable-audio' );\n\t\t\t\t\tdefaults.placeholder = 'https://';\n\t\t\t\t\tdefaults.tip = LLMS.l10n.translate( 'Use SoundCloud or Spotify audio URLS.' );\n\t\t\t\t\tdefaults.input_type = 'url';\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'datepicker':\n\t\t\t\t\tdefaults.classes.push( 'llms-editable-date' );\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'editor':\n\t\t\t\tcase 'switch-editor':\n\t\t\t\t\tvar orig_settings = orig_field.settings || {};\n\t\t\t\t\tdefaults.settings = $.extend( true, _.getEditor().getDefaultSettings(), {\n\t\t\t\t\t\tmediaButtons: true,\n\t\t\t\t\t\ttinymce: {\n\t\t\t\t\t\t\ttoolbar1: 'bold,italic,strikethrough,bullist,numlist,blockquote,hr,alignleft,aligncenter,alignright,link,unlink,wp_adv',\n\t\t\t\t\t\t\ttoolbar2: 'formatselect,underline,alignjustify,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, orig_settings );\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'switch-number':\n\t\t\t\t\tdefaults.input_type = 'number';\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'permalink':\n\t\t\t\t\tdefaults.label = LLMS.l10n.translate( 'Permalink' );\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'video_embed':\n\t\t\t\t\tdefaults.classes.push( 'llms-editable-video' );\n\t\t\t\t\tdefaults.placeholder = 'https://';\n\t\t\t\t\tdefaults.tip = LLMS.l10n.translate( 'Use YouTube, Vimeo, or Wistia video URLS.' );\n\t\t\t\t\tdefaults.input_type = 'url';\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( this.has_switch( orig_field.type ) ) {\n\t\t\t\tdefaults.switch_on = 'yes';\n\t\t\t\tdefaults.switch_off = 'no';\n\t\t\t}\n\n\t\t\tvar field = _.defaults( _.deepClone( orig_field ), defaults );\n\n\t\t\t// if options is a function run it\n\t\t\tif ( _.isFunction( field.options ) ) {\n\t\t\t\tfield.options = _.bind( field.options, this.model )();\n\t\t\t}\n\n\t\t\t// if it's a radio field options values can be submitted as images\n\t\t\t// this will transform those images into html\n\t\t\tif ( -1 !== [ 'radio', 'switch-radio' ].indexOf( orig_field.type ) ) {\n\n\t\t\t\tvar has_images = false;\n\t\t\t\t_.each( orig_field.options, function( val, key ) {\n\t\t\t\t\tif ( -1 !== val.indexOf( '.png' ) || -1 !== val.indexOf( '.jpg' ) ) {\n\t\t\t\t\t\tfield.options[key] = ' ';\n\t\t\t\t\t\thas_images = true;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( has_images ) {\n\t\t\t\t\tfield.classes.push( 'has-images' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// transform classes array to a css class string\n\t\t\tif ( field.classes.length ) {\n\t\t\t\tfield.classes = ' ' + field.classes.join( ' ' );\n\t\t\t}\n\n\t\t\tthis.fields[ field.id ] = field;\n\n\t\t\treturn field;\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if toggling a switch select should rerender the view\n\t\t *\n\t\t * @param string field_type field type string\n\t\t * @return boolean\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tshould_rerender_on_toggle: function( field_type ) {\n\n\t\t\treturn ( -1 !== field_type.indexOf( 'switch-' ) ) ? 'yes' : 'no';\n\n\t\t},\n\n\t\t/**\n\t\t * Click event for toggling visibility of settings groups\n\t\t * If localStorage is available, persist state\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.17.0\n\t\t * @version 3.17.0\n\t\t */\n\t\ttoggle_group: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tvar $el = $( event.currentTarget ),\n\t\t\t\t$group = $el.closest( '.llms-model-settings' );\n\n\t\t\t$group.toggleClass( 'hidden' );\n\n\t\t\tif ( 'undefined' !== window.localStorage ) {\n\n\t\t\t\tvar id = $group.attr( 'id' );\n\t\t\t\tif ( $group.hasClass( 'hidden' ) ) {\n\t\t\t\t\twindow.localStorage.setItem( id, 'hidden' );\n\t\t\t\t} else {\n\t\t\t\t\twindow.localStorage.removeItem( id );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t} ) );\n\n} );\n\n","/**\n * Lesson Editor (Sidebar) View\n *\n * @package LifterLMS/Scripts/Builder\n *\n * @since 3.17.0\n * @since 3.35.2 Added filter `llms_lesson_rerender_change_events` to view re-render change events.\n * @version 3.35.2\n */\ndefine( 'Views/LessonEditor',[\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Trashable',\n\t\t'Views/_Subview',\n\t\t'Views/SettingsFields'\n\t], function(\n\t\tDetachable,\n\t\tEditable,\n\t\tTrashable,\n\t\tSubview,\n\t\tSettingsFields\n\t) {\n\n\t\treturn Backbone.View.extend( _.defaults( {\n\n\t\t\t/**\n\t\t\t * Current view state\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tstate: 'default',\n\n\t\t\t/**\n\t\t\t * Current Subviews\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tviews: {\n\t\t\t\tsettings: {\n\t\t\t\t\tclass: SettingsFields,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'default',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tel: '#llms-editor-lesson',\n\n\t\t\t/**\n\t\t\t * Events\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tevents: _.defaults( {}, Detachable.events, Editable.events, Trashable.events ),\n\n\t\t\t/**\n\t\t\t * Template function\n\t\t\t *\n\t\t\t * @type {[type]}\n\t\t\t */\n\t\t\ttemplate: wp.template( 'llms-lesson-settings-template' ),\n\n\t\t\t/**\n\t\t\t * Init\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.24.0 Unknown\n\t\t\t * @since 3.35.2 Added filter to change events.\n\t\t\t *\n\t\t\t * @param {obj} data Parent template data.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tinitialize: function( data ) {\n\n\t\t\t\tthis.model = data.lesson;\n\n\t\t\t\tvar change_events = window.llms.hooks.applyFilters( 'llms_lesson_rerender_change_events', [\n\t\t\t\t\t'change:date_available',\n\t\t\t\t\t'change:drip_method',\n\t\t\t\t\t'change:time_available',\n\t\t\t\t] );\n\t\t\t\t_.each( change_events, function( event ) {\n\t\t\t\t\tthis.listenTo( this.model, event, this.render );\n\t\t\t\t}, this );\n\n\t\t\t\t// render only the tooltip for points percentage when points change\n\t\t\t\tthis.listenTo( this.model, 'change:points', this.render_points_percentage );\n\n\t\t\t\t// when the \"has_prerequisite\" attr is toggled ON\n\t\t\t\t// trigger the prereq select object to set the default (first available) prereq for the lesson\n\t\t\t\tthis.listenTo( this.model, 'change:has_prerequisite', function( lesson, val ) {\n\t\t\t\t\tif ( 'yes' === val ) {\n\t\t\t\t\t\tthis.$el.find( 'select[name=\"prerequisite\"]' ).trigger( 'change' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Render the view\n\t\t\t *\n\t\t\t * @return obj\n\t\t\t * @since 3.17.0\n\t\t\t * @version 3.24.0\n\t\t\t */\n\t\t\trender: function() {\n\n\t\t\t\tthis.$el.html( this.template( this.model ) );\n\n\t\t\t\tthis.remove_subview( 'settings' );\n\n\t\t\t\tthis.render_subview( 'settings', {\n\t\t\t\t\tel: '#llms-lesson-settings-fields',\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t} );\n\n\t\t\t\tthis.init_datepickers();\n\t\t\t\tthis.init_selects();\n\n\t\t\t\tthis.render_points_percentage();\n\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Render the portion of the template which displays the points percentage\n\t\t\t *\n\t\t\t * @return void\n\t\t\t * @since 3.24.0\n\t\t\t * @version 3.24.0\n\t\t\t */\n\t\t\trender_points_percentage: function() {\n\t\t\t\tthis.$el.find( '#llms-model-settings-field--points .llms-editable-input' )\n\t\t\t\t.addClass( 'tip--top-left' )\n\t\t\t\t.attr( 'data-tip', this.model.get_points_percentage() );\n\t\t\t}\n\n\t\t}, Detachable, Editable, Trashable, Subview, SettingsFields ) );\n\n} );\n\n","/**\n * Popover View\n *\n * @since 3.16.0\n * @version 4.0.0\n */\ndefine( 'Views/Popover',[], function() {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * Default Properties\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tdefaults: {\n\t\t\tplacement: 'auto',\n\t\t\t// container: document.body,\n\t\t\twidth: 'auto',\n\t\t\ttrigger: 'manual',\n\t\t\tstyle: 'light',\n\t\t\tanimation: 'pop',\n\t\t\ttitle: '',\n\t\t\tcontent: '',\n\t\t\tcloseable: false,\n\t\t\tbackdrop: false,\n\t\t\tonShow: function( $el ) {},\n\t\t\tonHide: function( $el ) {},\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @since 3.14.1\n\t\t * @since 4.0.0 Add RTL support for popovers.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\tif ( this.$el.length ) {\n\t\t\t\tthis.defaults.container = this.$el.parent();\n\t\t\t}\n\n\t\t\tthis.args = _.defaults( data.args, this.defaults );\n\n\t\t\t// Reverse directions for RTL sites.\n\t\t\tif ( $( 'body' ).hasClass( 'rtl' ) ) {\n\n\t\t\t\tif ( -1 !== this.args.placement.indexOf( 'left' ) ) {\n\t\t\t\t\tthis.args.placement = this.args.placement.replace( 'left', 'right' );\n\t\t\t\t} else if ( -1 !== this.args.placement.indexOf( 'right' ) ) {\n\t\t\t\t\tthis.args.placement = this.args.placement.replace( 'right', 'left' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.render();\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Object} Instance of the Backbone.view.\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.webuiPopover( this.args );\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Hide the popover\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.12 Unknown.\n\t\t *\n\t\t * @return {Object} Instance of the Backbone.view.\n\t\t */\n\t\thide: function() {\n\n\t\t\tthis.$el.webuiPopover( 'hide' );\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Show the popover\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.12 Unknown.\n\t\t *\n\t\t * @return {Object} Instance of the Backbone.view.\n\t\t */\n\t\tshow: function() {\n\n\t\t\tthis.$el.webuiPopover( 'show' );\n\t\t\treturn this;\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Post Popover Search content View\n *\n * @since 3.16.0\n * @version 4.4.0\n */\ndefine( 'Views/PostSearch',[], function() {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * DOM Events\n\t\t *\n\t\t * @type obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tevents: {\n\t\t\t'select2:select': 'add_post',\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'select',\n\n\t\t/**\n\t\t * Initializer\n\t\t *\n\t\t * @param obj data customize the search box with data\n\t\t * @return void\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\tthis.post_type = data.post_type;\n\t\t\tthis.searching_message = data.searching_message || LLMS.l10n.translate( 'Searching...' );\n\n\t\t},\n\n\t\t/**\n\t\t * Select event, adds the existing lesson to the course\n\t\t *\n\t\t * @param obj event select2:select event object\n\t\t * @since 3.16.0\n\t\t * @version 3.17.0\n\t\t */\n\t\tadd_post: function( event ) {\n\n\t\t\tvar type = this.$el.attr( 'data-post-type' );\n\n\t\t\tBackbone.pubSub.trigger( type.replace( 'llms_', '' ) + '-search-select', event.params.data, event );\n\t\t\tthis.$el.val( null ).trigger( 'change' );\n\n\t\t},\n\n\t\t/**\n\t\t * Render the section\n\t\t *\n\t\t * Initializes a new collection and views for all lessons in the section.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.12 Unknown.\n\t\t * @since 4.4.0 Update ajax nonce source.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\trender: function() {\n\t\t\tvar self = this;\n\t\t\tsetTimeout( function () {\n\t\t\t\tself.$el.llmsSelect2( {\n\t\t\t\t\tajax: {\n\t\t\t\t\t\tdataType: 'JSON',\n\t\t\t\t\t\tdelay: 250,\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\turl: window.ajaxurl,\n\t\t\t\t\t\tdata: function( params ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\taction: 'llms_builder',\n\t\t\t\t\t\t\t\taction_type: 'search',\n\t\t\t\t\t\t\t\tcourse_id: window.llms_builder.course.id,\n\t\t\t\t\t\t\t\tpost_type: self.post_type,\n\t\t\t\t\t\t\t\tterm: params.term,\n\t\t\t\t\t\t\t\tpage: params.page,\n\t\t\t\t\t\t\t\t_ajax_nonce: window.llms.ajax_nonce,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tdropdownParent: $( '.wrap.lifterlms.llms-builder' ),\n\t\t\t\t\t// Don't escape html from render_result.\n\t\t\t\t\tescapeMarkup: function( markup ) {\n\t\t\t\t\t\treturn markup;\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder: self.searching_message,\n\t\t\t\t\ttemplateResult: self.render_result,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} );\n\t\t\t\tself.$el.attr( 'data-post-type', self.post_type );\n\t\t\t}, 0 );\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Render a nicer UI for each search result in the in the Select2 search results\n\t\t *\n\t\t * @param object res result data\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.12\n\t\t */\n\t\trender_result: function( res ) {\n\n\t\t\tvar $html = $( '
' );\n\n\t\t\tif ( res.loading ) {\n\t\t\t\treturn $html.append( res.text );\n\t\t\t}\n\n\t\t\tvar $side = $( '' ),\n\t\t\t\t$main = $( '
' );\n\t\t\t\ticon = ( 'attach' === res.action ) ? 'paperclip' : 'clone',\n\t\t\t\ttext = ( 'attach' === res.action ) ? LLMS.l10n.translate( 'Attach' ) : LLMS.l10n.translate( 'Clone' );\n\n\t\t\t$side.append( '' + text + ' ' );\n\n\t\t\t$main.append( '' + res.data.title + ' ' );\n\t\t\t$main.append( '' + LLMS.l10n.translate( 'ID' ) + ': ' + res.data.id + ' ' );\n\n\t\t\t_.each( res.parents, function( parent ) {\n\t\t\t\t$main.append( '' + parent + ' ' );\n\t\t\t} );\n\n\t\t\treturn $html.append( $side ).append( $main );\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Question Type View\n *\n * @since 3.16.0\n * @since 3.30.1 Fixed issue causing multiple binds for add_existing_question events.\n * @version 5.4.0\n */\ndefine( 'Views/QuestionType',[ 'Views/Popover', 'Views/PostSearch' ], function( Popover, QuestionSearch ) {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * HTML class names.\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tclassName: 'llms-question-type',\n\n\t\tevents: {\n\t\t\t'click .llms-add-question': 'add_question',\n\t\t},\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {String}\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-question-type-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name.\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template.\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-question-type-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen).\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.render();\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Self} For chaining.\n\t\t */\n\t\trender: function() {\n\t\t\tthis.$el.html( this.template( this.model ) );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Add a question of the selected type to the current quiz.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.27.0 Unknown.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tadd_question: function() {\n\n\t\t\tif ( 'existing' === this.model.get( 'id' ) ) {\n\t\t\t\tthis.add_existing_question_click();\n\t\t\t} else {\n\t\t\t\tthis.add_new_question();\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new question to the quiz.\n\t\t *\n\t\t * @since 3.27.0\n\t\t * @since 3.30.1 Fixed issue causing multiple binds.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_question_click: function() {\n\n\t\t\tvar pop = new Popover( {\n\t\t\t\tel: '#llms-add-question--existing',\n\t\t\t\targs: {\n\t\t\t\t\tbackdrop: true,\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontainer: '#llms-builder-sidebar',\n\t\t\t\t\tdismissible: true,\n\t\t\t\t\tplacement: 'top-left',\n\t\t\t\t\twidth: 'calc( 100% - 40px )',\n\t\t\t\t\toffsetLeft: 250,\n\t\t\t\t\toffsetTop: 60,\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add Existing Question' ),\n\t\t\t\t\tcontent: new QuestionSearch( {\n\t\t\t\t\t\tpost_type: 'llms_question',\n\t\t\t\t\t\tsearching_message: LLMS.l10n.translate( 'Search for existing questions...' ),\n\t\t\t\t\t} ).render().$el,\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tpop.show();\n\t\t\tBackbone.pubSub.on( 'question-search-select', this.add_existing_question, this );\n\t\t\tBackbone.pubSub.on( 'question-search-select', function( event ) {\n\t\t\t\tpop.hide();\n\t\t\t\tBackbone.pubSub.off( 'question-search-select', this.add_existing_question, this );\n\t\t\t}, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Callback event fired when a question is selected from the Add Existing Question popover interface.\n\t\t *\n\t\t * @since 3.27.0\n\t\t * @since 5.4.0 Use author id instead of the question author object.\n\t\t *\n\t\t * @param {Object} event JS event object.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_question: function( event ) {\n\n\t\t\tvar question = event.data;\n\n\t\t\tif ( 'clone' === event.action ) {\n\t\t\t\tquestion = _.prepareQuestionObjectForCloning( question );\n\t\t\t} else {\n\t\t\t\t// Use author id instead of the question author object.\n\t\t\t\tquestion = _.prepareExistingPostObjectDataForAddingOrCloning( question );\n\t\t\t\tquestion._forceSync = true;\n\t\t\t}\n\n\t\t\tquestion._expanded = true;\n\t\t\tthis.quiz.add_question( question );\n\n\t\t\tthis.quiz.trigger( 'new-question-added' );\n\n\t\t},\n\n\t\t/**\n\t\t * Add a new question to the quiz.\n\t\t *\n\t\t * @since 3.27.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tadd_new_question: function() {\n\n\t\t\tthis.quiz.add_question( {\n\t\t\t\t_expanded: true,\n\t\t\t\tchoices: this.model.get( 'default_choices' ) ? this.model.get( 'default_choices' ) : null,\n\t\t\t\tquestion_type: this.model,\n\t\t\t} );\n\n\t\t\tthis.quiz.trigger( 'new-question-added' );\n\n\t\t},\n\n\t\t// filter: function( term ) {\n\n\t\t// var words = this.model.get_keywords().map( function( word ) {\n\t\t// return word.toLowerCase();\n\t\t// } );\n\n\t\t// term = term.toLowerCase();\n\n\t\t// if ( -1 === words.indexOf( term ) ) {\n\t\t// this.$el.addClass( 'filtered' );\n\t\t// } else {\n\t\t// this.$el.removeClass( 'filtered' );\n\t\t// }\n\n\t\t// },\n\n\t\t// clear_filter: function() {\n\t\t// this.$el.removeClass( 'filtered' );\n\t\t// }\n\n\t} );\n\n} );\n\n","/**\n * Quiz question bank view\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/QuestionBank',[ 'Views/QuestionType' ], function( QuestionView ) {\n\n\treturn Backbone.CollectionView.extend( {\n\n\t\tclassName: 'llms-question',\n\n\t\t/**\n\t\t * Parent element\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-question-bank',\n\n\t\t/**\n\t\t * Section model\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: QuestionView,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: false,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: false,\n\n\t} );\n\n} );\n\n","/**\n * Single Question Choice View\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/QuestionChoice',[ 'Views/_Editable', ], function( Editable ) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * HTML class names\n\t\t * @type {String}\n\t\t */\n\t\tclassName: 'llms-question-choice',\n\n\t\tevents: _.defaults( {\n\t\t\t'change input[name=\"correct\"]': 'toggle_correct',\n\t\t\t'click .llms-action-icon[href=\"#llms-add-choice\"]': 'add_choice',\n\t\t\t'click .llms-action-icon[href=\"#llms-del-choice\"]': 'del_choice',\n\t\t}, Editable.events ),\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-question-choice-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-question-choice-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.14.1\n\t\t * @version 3.14.1\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tthis.render();\n\n\t\t\tthis.listenTo( this.model.collection, 'add', this.maybe_disable_buttons );\n\t\t\tthis.listenTo( this.model, 'change', this.render );\n\n\t\t\tif ( 'image' === this.model.get( 'choice_type' ) ) {\n\t\t\t\tthis.listenTo( this.model.get( 'choice' ), 'change', this.render );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\t\t\tthis.$el.html( this.template( this.model ) );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Add a new choice to the current choice list\n\t\t * Adds *after* the clicked choice\n\t\t * @param obj event JS event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tadd_choice: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\tvar index = this.model.collection.indexOf( this.model );\n\t\t\tthis.model.collection.parent.add_choice( {}, {\n\t\t\t\tat: index + 1,\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Delete the choice from the choice list & ensure there's at least one correct choice\n\t\t * @param obj event js event obj\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tdel_choice: function( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'model-trashed', this.model );\n\t\t\tthis.model.collection.remove( this.model );\n\n\t\t},\n\n\t\t/**\n\t\t * When the correct answer input changes sync status to model\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ttoggle_correct: function() {\n\n\t\t\tvar correct = this.$el.find( 'input[name=\"correct\"]' ).is( ':checked' );\n\t\t\tthis.model.set( 'correct', correct );\n\t\t\tthis.model.collection.trigger( 'correct-update', this.model );\n\n\t\t},\n\n\t}, Editable ) );\n\n} );\n\n","/**\n * Quiz question bank view\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/QuestionChoiceList',[ 'Views/QuestionChoice' ], function( ChoiceView ) {\n\n\treturn Backbone.CollectionView.extend( {\n\n\t\tclassName: 'llms-quiz-questions',\n\n\t\t/**\n\t\t * Choice model view\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: ChoiceView,\n\n\t\t/**\n\t\t * Enable keyboard events\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tprocessKeyEvents: false,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: false,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t *\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: true,\n\n\t\tsortableOptions: {\n\t\t\taxis: false,\n\t\t\t// connectWith: '.llms-lessons',\n\t\t\tcursor: 'move',\n\t\t\thandle: '.llms-choice-id',\n\t\t\titems: '.llms-question-choice',\n\t\t\tplaceholder: 'llms-question-choice llms-sortable-placeholder',\n\t\t},\n\n\t\tsortable_start: function( model ) {\n\t\t\tthis.$el.addClass( 'dragging' );\n\t\t},\n\n\t\tsortable_stop: function( model ) {\n\t\t\tthis.$el.removeClass( 'dragging' );\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Single Question View\n * @since 3.16.0\n * @version 3.27.0\n */\ndefine( 'Views/Question',[\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/QuestionChoiceList'\n\t], function(\n\t\tDetachable,\n\t\tEditable,\n\t\tChoiceListView\n\t) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Generate CSS classes for the question\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tclassName: function() {\n\t\t\treturn 'llms-question qtype--' + this.model.get( 'question_type' ).get( 'id' );\n\t\t},\n\n\t\tevents: _.defaults( {\n\t\t\t'click .clone--question': 'clone',\n\t\t\t'click .delete--question': 'delete',\n\t\t\t'click .expand--question': 'expand',\n\t\t\t'click .collapse--question': 'collapse',\n\t\t\t'change input[name=\"question_points\"]': 'update_points',\n\t\t}, Detachable.events, Editable.events ),\n\n\t\t/**\n\t\t * HTML element wrapper ID attribute\n\t\t * @return string\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tid: function() {\n\t\t\treturn 'llms-question-' + this.model.id;\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'li',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-question-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\tvar change_events = [\n\t\t\t\t'change:_expanded',\n\t\t\t\t'change:menu_order',\n\t\t\t];\n\t\t\t_.each( change_events, function( event ) {\n\t\t\t\tthis.listenTo( this.model, event, this.render );\n\t\t\t}, this );\n\n\t\t\tthis.listenTo( this.model.get( 'image' ), 'change', this.render );\n\n\t\t\tthis.listenTo( this.model.get_parent(), 'change:_points', this.render_points_percentage );\n\n\t\t\tthis.on( 'multi_choices_toggle', this.multi_choices_toggle, this );\n\n\t\t\tBackbone.pubSub.on( 'del-question-choice', this.del_choice, this );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this.model ) );\n\n\t\t\tif ( this.model.get( 'question_type').get( 'choices' ) ) {\n\n\t\t\t\tthis.choiceListView = new ChoiceListView( {\n\t\t\t\t\tel: this.$el.find( '.llms-question-choices' ),\n\t\t\t\t\tcollection: this.model.get( 'choices' ),\n\t\t\t\t} );\n\t\t\t\tthis.choiceListView.render();\n\t\t\t\tthis.choiceListView.on( 'sortStart', this.choiceListView.sortable_start );\n\t\t\t\tthis.choiceListView.on( 'sortStop', this.choiceListView.sortable_stop );\n\n\t\t\t}\n\n\t\t\tif ( 'group' === this.model.get( 'question_type' ).get( 'id' ) ) {\n\n\t\t\t\tvar self = this;\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.questionListView = self.collectionListView.quiz.get_question_list( {\n\t\t\t\t\t\tel: self.$el.find( '.llms-quiz-questions' ),\n\t\t\t\t\t\tcollection: self.model.get( 'questions' ),\n\t\t\t\t\t} );\n\t\t\t\t\tself.questionListView.render();\n\t\t\t\t\tself.questionListView.on( 'sortStart', self.questionListView.sortable_start );\n\t\t\t\t\tself.questionListView.on( 'sortStop', self.questionListView.sortable_stop );\n\t\t\t\t}, 1 );\n\n\t\t\t}\n\n\t\t\tif ( this.model.get( 'description_enabled' ) ) {\n\t\t\t\tthis.init_editor( 'question-desc--' + this.model.get( 'id' ) );\n\t\t\t}\n\n\t\t\tif ( this.model.get( 'clarifications_enabled' ) ) {\n\t\t\t\tthis.init_editor( 'question-clarifications--' + this.model.get( 'id' ), {\n\t\t\t\t\tmediaButtons: false,\n\t\t\t\t\ttinymce: {\n\t\t\t\t\t\ttoolbar1: 'bold,italic,strikethrough,bullist,numlist,alignleft,aligncenter,alignright',\n\t\t\t\t\t\ttoolbar2: '',\n\t\t\t\t\t\tsetup: _.bind( this.on_editor_ready, this ),\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tthis.init_formatting_els();\n\t\t\tthis.init_selects();\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * rerender points percentage when question points are updated\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender_points_percentage: function() {\n\n\t\t\tthis.$el.find( '.llms-question-points' ).attr( 'data-tip', this.model.get_points_percentage() );\n\n\t\t},\n\n\t\t/**\n\t\t * Click event to duplicate a question within a quiz\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tclone: function( event ) {\n\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tthis.model.collection.add( this._get_question_clone( this.model ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Recursive clone function which will correctly clone children of a question\n\t\t * @param obj question question model\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_get_question_clone: function( question ) {\n\n\t\t\t// create a duplicate\n\t\t\tvar clone = _.clone( question.attributes );\n\n\t\t\t// remove id (we want the duplicate to have a temp id)\n\t\t\tdelete clone.id;\n\n\t\t\tclone.parent_id = question.get( 'id' );\n\n\t\t\t// set the question type ID\n\t\t\tclone.question_type = question.get( 'question_type' ).get( 'id' );\n\n\t\t\t// clone the image attributes separately\n\t\t\tclone.image = _.clone( question.get( 'image' ).attributes );\n\n\t\t\t// if it has choices clone all the choices\n\t\t\tif ( question.get( 'choices' ) ) {\n\n\t\t\t\tclone.choices = [];\n\n\t\t\t\tquestion.get( 'choices' ).each( function ( choice ) {\n\n\t\t\t\t\tvar choice_clone = _.clone( choice.attributes );\n\t\t\t\t\tdelete choice_clone.id;\n\t\t\t\t\tdelete choice_clone.question_id;\n\n\t\t\t\t\tclone.choices.push( choice_clone );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( 'group' === question.get( 'question_type' ).get( 'id' ) ) {\n\n\t\t\t\tclone.questions = [];\n\t\t\t\tquestion.get( 'questions' ).each( function( child ) {\n\t\t\t\t\tclone.questions.push( this._get_question_clone( child ) );\n\t\t\t\t}, this );\n\n\t\t\t}\n\n\t\t\treturn clone;\n\n\t\t},\n\n\t\t/**\n\t\t * Collapse a question and hide it's settings\n\t\t * @param obj event js event obj.\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tcollapse: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis.model.set( '_expanded', false );\n\n\t\t},\n\n\t\t/**\n\t\t * Delete the question from a quiz / question group\n\t\t * @param obj event js event object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tdelete: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( window.confirm( LLMS.l10n.translate( 'Are you sure you want to delete this question?' ) ) ) {\n\n\t\t\t\tthis.model.collection.remove( this.model );\n\t\t\t\tBackbone.pubSub.trigger( 'model-trashed', this.model );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Click event to reveal a question's settings & choices\n\t\t * @param obj event js event obj.\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.27.0\n\t\t */\n\t\texpand: function( event ) {\n\n\t\t\tif ( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tthis.model.set( '_expanded', true );\n\n\t\t},\n\n\t\t/**\n\t\t * When toggling multiple correct answers *off* remove all correct choices except the first correct choice in the list\n\t\t * @param string val value of the question's `multi_choice` attr [yes|no]\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tmulti_choices_toggle: function( val ) {\n\n\t\t\tif ( 'yes' === val ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.model.get( 'choices' ).update_correct( _.first( this.model.get( 'choices' ).get_correct() ) );\n\n\t\t},\n\n\t\t/**\n\t\t * Update the model's points when the value of the points input is updated\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_points: function() {\n\n\t\t\tthis.model.set( 'points', this.$el.find( 'input[name=\"question_points\"]' ).val() * 1 );\n\n\t\t}\n\n\t}, Detachable, Editable ) );\n\n} );\n\n","/**\n * Quiz question bank view\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/QuestionList',[ 'Views/Question' ], function( QuestionView ) {\n\n\treturn Backbone.CollectionView.extend( {\n\n\t\tclassName: 'llms-quiz-questions',\n\n\t\t/**\n\t\t * Parent element\n\t\t * @type {String}\n\t\t */\n\t\t// el: '#llms-quiz-questions',\n\n\t\t/**\n\t\t * Section model\n\t\t * @type {[type]}\n\t\t */\n\t\tmodelView: QuestionView,\n\n\t\t/**\n\t\t * Enable keyboard events\n\t\t * @type {Bool}\n\t\t */\n\t\tprocessKeyEvents: false,\n\n\t\t/**\n\t\t * Are sections selectable?\n\t\t * @type {Bool}\n\t\t */\n\t\tselectable: false,\n\n\t\t/**\n\t\t * Are sections sortable?\n\t\t * @type {Bool}\n\t\t */\n\t\tsortable: true,\n\n\t\tsortableOptions: {\n\t\t\taxis: false,\n\t\t\tconnectWith: '.llms-quiz-questions',\n\t\t\tcursor: 'move',\n\t\t\thandle: '.llms-data-stamp',\n\t\t\titems: '.llms-question',\n\t\t\tplaceholder: 'llms-question llms-sortable-placeholder',\n\t\t},\n\n\t\t/**\n\t\t * Highlight drop areas when dragging starts\n\t\t * @param obj model model being sorted\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tsortable_start: function( model ) {\n\t\t\tvar selector = 'group' === model.get( 'question_type' ).get( 'id' ) ? '.llms-editor-tab > .llms-quiz-questions' : '.llms-quiz-questions';\n\t\t\t$( selector ).addClass( 'dragging' );\n\t\t},\n\n\t\t/**\n\t\t * Remove highlights when dragging stops\n\t\t * @param obj model model being sorted\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tsortable_stop: function() {\n\t\t\t$( '.llms-quiz-questions' ).removeClass( 'dragging' );\n\t\t},\n\n\t\t/**\n\t\t * Overrides receive to ensure that question groups can't be moved into question groups\n\t\t * @param obj event js event object\n\t\t * @param obj ui jQuery UI Sortable ui object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_receive : function( event, ui ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\t// prevent moving a question group into a question group\n\t\t\tif ( ui.item.hasClass( 'qtype--group' ) && $( event.target ).closest( '.qtype--group' ).length ) {;\n\t\t\t\tui.sender.sortable( 'cancel' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar senderListEl = ui.sender;\n\t\t\tvar senderCollectionListView = senderListEl.data( \"view\" );\n\t\t\tif( ! senderCollectionListView || ! senderCollectionListView.collection ) return;\n\n\t\t\tvar newIndex = this._getContainerEl().children().index( ui.item );\n\t\t\tvar modelReceived = senderCollectionListView.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\t\t\tsenderCollectionListView.collection.remove( modelReceived );\n\t\t\tthis.collection.add( modelReceived, { at : newIndex } );\n\t\t\tmodelReceived.collection = this.collection; // otherwise will not get properly set, since modelReceived.collection might already have a value.\n\t\t\tthis.setSelectedModel( modelReceived );\n\t\t},\n\n\t\t/**\n\t\t * Override to allow manipulation of placeholder element\n\t\t * @param {[type]} event [description]\n\t\t * @param {[type]} ui [description]\n\t\t * @return {[type]}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_sortStart : function( event, ui ) {\n\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( \"data-model-cid\" ) );\n\n\t\t\tui.placeholder.addClass( 'qtype--' + modelBeingSorted.get( 'question_type' ).get( 'id' ) );\n\n\t\t\tif( this._isBackboneCourierAvailable() )\n\t\t\t\tthis.spawn( \"sortStart\", { modelBeingSorted : modelBeingSorted } );\n\t\t\telse this.trigger( \"sortStart\", modelBeingSorted );\n\t\t},\n\n\t\t/**\n\t\t * Overloads the function from Backbone.CollectionView core because it doesn't send stop events\n\t\t * if moving from one sortable to another... :-(\n\t\t * @param obj event js event object\n\t\t * @param obj ui jQuery UI object\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\t_sortStop : function( event, ui ) {\n\n\t\t\tevent.stopPropagation();\n\n\t\t\tvar modelBeingSorted = this.collection.get( ui.item.attr( 'data-model-cid' ) ),\n\t\t\t\tmodelViewContainerEl = this._getContainerEl(),\n\t\t\t\tnewIndex = modelViewContainerEl.children().index( ui.item );\n\n\t\t\tif ( newIndex == -1 && modelBeingSorted ) {\n\t\t\t\tthis.collection.remove( modelBeingSorted );\n\t\t\t}\n\n\t\t\tthis._reorderCollectionBasedOnHTML();\n\t\t\tthis.updateDependentControls();\n\n\t\t\tif( this._isBackboneCourierAvailable() ) {\n\t\t\t\tthis.spawn( 'sortStop', { modelBeingSorted : modelBeingSorted, newIndex : newIndex } );\n\t\t\t} else {\n\t\t\t\tthis.trigger( 'sortStop', modelBeingSorted, newIndex );\n\t\t\t}\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Single Quiz View.\n *\n * @since 3.16.0\n * @version 5.4.0\n */\ndefine( 'Views/Quiz',[\n\t\t'Models/Quiz',\n\t\t'Views/Popover',\n\t\t'Views/PostSearch',\n\t\t'Views/QuestionBank',\n\t\t'Views/QuestionList',\n\t\t'Views/SettingsFields',\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Subview',\n\t\t'Views/_Trashable'\n\t], function(\n\t\tQuizModel,\n\t\tPopover,\n\t\tPostSearch,\n\t\tQuestionBank,\n\t\tQuestionList,\n\t\tSettingsFields,\n\t\tDetachable,\n\t\tEditable,\n\t\tSubview,\n\t\tTrashable\n\t) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Current view state.\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tstate: 'default',\n\n\t\t/**\n\t\t * Current Subviews.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tviews: {\n\t\t\tsettings: {\n\t\t\t\tclass: SettingsFields,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'default',\n\t\t\t},\n\t\t\tbank: {\n\t\t\t\tclass: QuestionBank,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'default',\n\t\t\t},\n\t\t\tlist: {\n\t\t\t\tclass: QuestionList,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'default',\n\t\t\t},\n\t\t},\n\n\t\tel: '#llms-editor-quiz',\n\n\t\t/**\n\t\t * Events.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tevents: _.defaults( {\n\t\t\t'click #llms-existing-quiz': 'add_existing_quiz_click',\n\t\t\t'click #llms-new-quiz': 'add_new_quiz',\n\t\t\t'click #llms-show-question-bank': 'show_tools',\n\t\t\t'click .bulk-toggle': 'bulk_toggle',\n\t\t\t// 'keyup #llms-question-bank-filter': 'filter_question_types',\n\t\t\t// 'search #llms-question-bank-filter': 'filter_question_types',\n\t\t}, Detachable.events, Editable.events, Trashable.events ),\n\n\t\t/**\n\t\t * Wrapper Tag name.\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-quiz-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen).\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.19.2 Unknown.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\tthis.lesson = data.lesson;\n\n\t\t\t// Initialize the model if the quiz is enabled or it's disabled but we still have data for a quiz.\n\t\t\tif ( 'yes' === this.lesson.get( 'quiz_enabled' ) || ! _.isEmpty( this.lesson.get( 'quiz' ) ) ) {\n\n\t\t\t\tthis.model = this.lesson.get( 'quiz' );\n\n\t\t\t\t/**\n\t\t\t\t * @todo this is a terrible terrible patch\n\t\t\t\t * I've spent nearly 3 days trying to figure out how to not use this line of code\n\t\t\t\t * ISSUE REPRODUCTION:\n\t\t\t\t * Open course builder\n\t\t\t\t * Open a lesson (A) and add a quiz\n\t\t\t\t * Switch to a new lesson (B)\n\t\t\t\t * Add a new quiz\n\t\t\t\t * Return to lesson A and the quizzes parent will be set to LESSON B\n\t\t\t\t * This will happen for *every* quiz in the builder...\n\t\t\t\t * Adding this set_parent on init guarantees that the quizzes correct parent is set\n\t\t\t\t * after adding new quizzes to other lessons\n\t\t\t\t * it's awful and it's gross...\n\t\t\t\t * I'm confused and tired and going to miss release dates again because of it\n\t\t\t\t */\n\t\t\t\tthis.model.set_parent( this.lesson );\n\n\t\t\t\tthis.listenTo( this.model, 'change:_points', this.render_points );\n\n\t\t\t}\n\n\t\t\tthis.on( 'model-trashed', this.on_trashed );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.19.2 Unknown.\n\t\t *\n\t\t * @return {Self} For chaining.\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template( this.model ) );\n\n\t\t\t// Render the quiz builder.\n\t\t\tif ( this.model ) {\n\n\t\t\t\t// Don't allow interaction until questions are lazy loaded.\n\t\t\t\tLLMS.Spinner.start( this.$el );\n\n\t\t\t\tthis.render_subview( 'settings', {\n\t\t\t\t\tel: '#llms-quiz-settings-fields',\n\t\t\t\t\tmodel: this.model,\n\t\t\t\t} );\n\n\t\t\t\tthis.init_datepickers();\n\t\t\t\tthis.init_selects();\n\n\t\t\t\tthis.render_subview( 'bank', {\n\t\t\t\t\tcollection: window.llms_builder.questions,\n\t\t\t\t} );\n\n\t\t\t\tvar last_group = null,\n\t\t\t\t\tgroup = null;\n\t\t\t\t// Let all the question types reference the quiz for adding questions quickly.\n\t\t\t\tthis.get_subview( 'bank' ).instance.viewManager.each( function( view ) {\n\n\t\t\t\t\tview.quiz = this.model;\n\n\t\t\t\t\tgroup = view.model.get( 'group' ).name;\n\n\t\t\t\t\tif ( last_group !== group ) {\n\t\t\t\t\t\tlast_group = group;\n\t\t\t\t\t\tview.$el.before( '' );\n\t\t\t\t\t}\n\n\t\t\t\t}, this );\n\n\t\t\t\tthis.model.load_questions( _.bind( function( err ) {\n\n\t\t\t\t\tif ( err ) {\n\t\t\t\t\t\talert( LLMS.l10n.translate( 'An error occurred while trying to load the questions. Please refresh the page and try again.' ) );\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\tLLMS.Spinner.stop( this.$el );\n\t\t\t\t\tthis.render_subview( 'list', {\n\t\t\t\t\t\tel: '#llms-quiz-questions',\n\t\t\t\t\t\tcollection: this.model.get( 'questions' ),\n\t\t\t\t\t} );\n\t\t\t\t\tvar list = this.get_subview( 'list' ).instance;\n\t\t\t\t\tlist.quiz = this;\n\t\t\t\t\tlist.collection.on( 'add', function() {\n\t\t\t\t\t\tlist.collection.trigger( 'reorder' );\n\t\t\t\t\t}, this );\n\t\t\t\t\tlist.on( 'sortStart', list.sortable_start );\n\t\t\t\t\tlist.on( 'sortStop', list.sortable_stop );\n\n\t\t\t\t}, this ) );\n\n\t\t\t\tthis.model.on( 'new-question-added', function() {\n\t\t\t\t\tvar $questions = this.$el.find( '#llms-quiz-questions' );\n\t\t\t\t\t$questions.animate( { scrollTop: $questions.prop( 'scrollHeight' ) }, 200 );\n\t\t\t\t}, this );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * On quiz points update, update the value of the Total Points area in the header.\n\t\t *\n\t\t * @since 3.17.6\n\t\t *\n\t\t * @param {Object} quiz Instance of the quiz model.\n\t\t * @param {Int} points Updated number of points.\n\t\t * @return {Void}\n\t\t */\n\t\trender_points: function( quiz, points ) {\n\n\t\t\tthis.$el.find( '#llms-quiz-total-points' ).text( points );\n\n\t\t},\n\n\t\t/**\n\t\t * Bulk expand / collapse question buttons.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @param {Object} Event JS event object.\n\t\t * @return {Void}\n\t\t */\n\t\tbulk_toggle: function( event ) {\n\n\t\t\tvar expanded = ( 'expand' === $( event.target ).attr( 'data-action' ) );\n\n\t\t\tthis.model.get( 'questions' ).each( function( question ) {\n\t\t\t\tquestion.set( '_expanded', expanded );\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Adds a new quiz to a lesson which currently has no quiz associated with it.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tadd_new_quiz: function() {\n\n\t\t\tvar quiz = this.lesson.get( 'quiz' );\n\t\t\tif ( _.isEmpty( quiz ) ) {\n\t\t\t\tquiz = this.lesson.add_quiz();\n\t\t\t} else {\n\t\t\t\tthis.lesson.set( 'quiz_enabled', 'yes' );\n\t\t\t}\n\n\t\t\tthis.model = quiz;\n\t\t\tthis.render();\n\n\t\t},\n\n\n\t\t/**\n\t\t * Add an existing quiz to a lesson.\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.24.0 Unknown.\n\t\t * @since 5.4.0 Use author id instead of the quiz author object.\n\t\t *\n\t\t * @param {Object} event JS event object.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_quiz: function( event ) {\n\n\t\t\tthis.post_search_popover.hide();\n\n\t\t\tvar quiz = event.data;\n\n\t\t\tif ( 'clone' === event.action ) {\n\n\t\t\t\tquiz = _.prepareQuizObjectForCloning( quiz );\n\n\t\t\t} else {\n\n\t\t\t\t// Use author id instead of the quiz author object.\n\t\t\t\tquiz = _.prepareExistingPostObjectDataForAddingOrCloning( quiz );\n\t\t\t\tquiz._forceSync = true;\n\n\t\t\t}\n\n\t\t\tdelete quiz.lesson_id;\n\n\t\t\tthis.lesson.add_quiz( quiz );\n\t\t\tthis.model = this.lesson.get( 'quiz' );\n\t\t\tthis.render();\n\n\t\t},\n\n\t\t/**\n\t\t * Open add existing quiz popover.\n\t\t *\n\t\t * @since 3.16.12\n\t\t *\n\t\t * @param {Object} event JS event object.\n\t\t * @return {Void}\n\t\t */\n\t\tadd_existing_quiz_click: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.post_search_popover = new Popover( {\n\t\t\t\tel: '#llms-existing-quiz',\n\t\t\t\targs: {\n\t\t\t\t\tbackdrop: true,\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontainer: '.wrap.lifterlms.llms-builder',\n\t\t\t\t\tdismissible: true,\n\t\t\t\t\tplacement: 'left',\n\t\t\t\t\twidth: 480,\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add Existing Quiz' ),\n\t\t\t\t\tcontent: new PostSearch( {\n\t\t\t\t\t\tpost_type: 'llms_quiz',\n\t\t\t\t\t\tsearching_message: LLMS.l10n.translate( 'Search for existing quizzes...' ),\n\t\t\t\t\t} ).render().$el,\n\t\t\t\t\tonHide: function() {\n\t\t\t\t\t\tBackbone.pubSub.off( 'quiz-search-select' );\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.post_search_popover.show();\n\t\t\tBackbone.pubSub.once( 'quiz-search-select', this.add_existing_quiz, this );\n\n\t\t},\n\n\t\t// filter_question_types: _.debounce( function( event ) {\n\n\t\t// \tvar term = $( event.target ).val();\n\n\t\t// \tthis.QuestionBankView.viewManager.each( function( view ) {\n\t\t// \t\tif ( ! term ) {\n\t\t// \t\t\tview.clear_filter();\n\t\t// \t\t} else {\n\t\t// \t\t\tview.filter( term );\n\t\t// \t\t}\n\t\t// \t} );\n\n\n\t\t// }, 300 ),\n\n\t\t/**\n\t\t * Callback function when the quiz has been deleted.\n\t\t *\n\t\t * @since 3.16.6\n\t\t *\n\t\t * @param {Oject} quiz Quiz Model.\n\t\t * @return {Void}\n\t\t */\n\t\ton_trashed: function( quiz ) {\n\n\t\t\tthis.lesson.set( 'quiz_enabled', 'no' );\n\t\t\tthis.lesson.set( 'quiz', '' );\n\n\t\t\tdelete this.model;\n\n\t\t\tthis.render();\n\n\t\t},\n\n\t\t/**\n\t\t * \"Add Question\" button click event.\n\t\t *\n\t\t * @since 3.16.0\n\t\t *\n\t\t * Creates a popover with question type list interface.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tshow_tools: function() {\n\n\t\t\t// Create popover,\n\t\t\tvar pop = new Popover( {\n\t\t\t\tel: '#llms-show-question-bank',\n\t\t\t\targs: {\n\t\t\t\t\tbackdrop: true,\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontainer: '#llms-builder-sidebar',\n\t\t\t\t\tdismissible: true,\n\t\t\t\t\tplacement: 'top-left',\n\t\t\t\t\twidth: 'calc( 100% - 40px )',\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add a Question' ),\n\t\t\t\t\turl: '#llms-quiz-tools',\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Show it.\n\t\t\tpop.show();\n\n\t\t\t// If a question is added, hide the popover.\n\t\t\tthis.model.on( 'new-question-added', function() {\n\t\t\t\tpop.hide();\n\t\t\t} );\n\n\t\t},\n\n\t\tget_question_list: function( options ) {\n\t\t\treturn new QuestionList( options );\n\t\t}\n\n\t}, Detachable, Editable, Subview, Trashable, SettingsFields ) );\n\n} );\n\n","/**\n * Single Assignment View.\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.17.0\n * @version 5.4.0\n */\n\ndefine( 'Views/Assignment',[\n\t\t'Views/Popover',\n\t\t'Views/PostSearch',\n\t\t'Views/_Detachable',\n\t\t'Views/_Editable',\n\t\t'Views/_Trashable',\n\t\t'Views/_Subview',\n\t\t'Views/SettingsFields'\n\t], function(\n\t\tPopover,\n\t\tPostSearch,\n\t\tDetachable,\n\t\tEditable,\n\t\tTrashable,\n\t\tSubview,\n\t\tSettingsFields\n\t) {\n\n\t\treturn Backbone.View.extend( _.defaults( {\n\n\t\t\t/**\n\t\t\t * Current view state.\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tstate: 'default',\n\n\t\t\t/**\n\t\t\t * Current Subviews.\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tviews: {\n\t\t\t\tsettings: {\n\t\t\t\t\tclass: SettingsFields,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'default',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tel: '#llms-editor-assignment',\n\n\t\t\t/**\n\t\t\t * DOM Events.\n\t\t\t *\n\t\t\t * @since 3.17.1\n\t\t\t *\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tevents: function() {\n\t\t\t\tvar addon_events = this.is_addon_available() ? window.llms_builder.assignments.get_view_events() : {};\n\t\t\t\treturn _.defaults( {\n\t\t\t\t\t'click #llms-existing-assignment': 'add_existing_assignment_click',\n\t\t\t\t\t'click #llms-new-assignment': 'add_new_assignment',\n\t\t\t\t}, Detachable.events, Editable.events, Trashable.events, addon_events );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Wrapper Tag name.\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\ttagName: 'div',\n\n\t\t\t/**\n\t\t\t * Get the underscore template.\n\t\t\t *\n\t\t\t * @type {[type]}\n\t\t\t */\n\t\t\ttemplate: wp.template( 'llms-assignment-template' ),\n\n\t\t\t/**\n\t\t\t * Initialization callback func (renders the element on screen).\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.17.2 Unknown.\n\t\t\t *\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tinitialize: function( data ) {\n\n\t\t\t\tthis.lesson = data.lesson;\n\n\t\t\t\t// initialize the model if the assignment is enabled or it's disabled but we still have data for a assignment\n\t\t\t\tif ( 'yes' === this.lesson.get( 'assignment_enabled' ) || ! _.isEmpty( this.lesson.get( 'assignment' ) ) ) {\n\n\t\t\t\t\tthis.model = this.lesson.get( 'assignment' );\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Todo Item.\n\t\t\t\t\t *\n\t\t\t\t\t * @todo this is a terrible terrible patch\n\t\t\t\t\t * I've spent nearly 3 days trying to figure out how to not use this line of code\n\t\t\t\t\t * ISSUE REPRODUCTION:\n\t\t\t\t\t * Open course builder\n\t\t\t\t\t * Open a lesson (A) and add a assignment\n\t\t\t\t\t * Switch to a new lesson (B)\n\t\t\t\t\t * Add a new assignment\n\t\t\t\t\t * Return to lesson A and the assignment's parent will be set to LESSON B\n\t\t\t\t\t * This will happen for *every* assignment in the builder...\n\t\t\t\t\t * Adding this set_parent on init guarantees that the assignment's correct parent is set\n\t\t\t\t\t * after adding new assignment's to other lessons\n\t\t\t\t\t * it's awful and it's gross...\n\t\t\t\t\t * I'm confused and tired and going to miss release dates again because of it\n\t\t\t\t\t */\n\t\t\t\t\tthis.model.set_parent( this.lesson );\n\n\t\t\t\t}\n\n\t\t\t\tthis.on( 'model-trashed', this.on_trashed );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Compiles the template and renders the view.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.17.7 Unknown.\n\t\t\t *\n\t\t\t * @return {Self} For chaining.\n\t\t\t */\n\t\t\trender: function() {\n\n\t\t\t\tthis.$el.html( this.template( this.model ) );\n\n\t\t\t\tif ( this.model && this.is_addon_available() ) {\n\n\t\t\t\t\tthis.stopListening( this.model, 'change:assignment_type', this.render );\n\n\t\t\t\t\tthis.render_subview( 'settings', {\n\t\t\t\t\t\tel: '#llms-assignment-settings-fields',\n\t\t\t\t\t\tmodel: this.model,\n\t\t\t\t\t} );\n\n\t\t\t\t\t// this.init_datepickers();\n\t\t\t\t\tthis.init_selects();\n\n\t\t\t\t\twindow.llms_builder.assignments.render_editor( this );\n\n\t\t\t\t\tthis.listenTo( this.model, 'change:assignment_type', this.render );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Adds a new assignment to a lesson which currently has no assignment associated with it.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tadd_new_assignment: function() {\n\n\t\t\t\tif ( this.is_addon_available() ) {\n\n\t\t\t\t\tthis.model = window.llms_builder.assignments.get_assignment( {\n\t\t\t\t\t\t/* Translators: %1$s = associated lesson title */\n\t\t\t\t\t\ttitle: LLMS.l10n.replace( '%1$s Assignment', {\n\t\t\t\t\t\t\t'%1$s': this.lesson.get( 'title' ),\n\t\t\t\t\t\t} ),\n lesson_id: this.lesson.get( 'id' ),\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis.lesson.set( 'assignment_enabled', 'yes' );\n\t\t\t\t\tthis.lesson.set( 'assignment', this.model );\n\n\t\t\t\t\tthis.render();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.show_ad_popover( '#llms-new-assignment' );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * When an assignment is selected from the post select popover\n\t\t\t * instantiate it and add it to the current lesson.\n\t\t\t *\n\t\t\t * @param {Object} event Data from the select2 select event.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 5.4.0 Prepare assignment object for cloning and use author id instead of the quiz author object.\n\t\t\t */\n\t\t\tadd_existing_assignment: function( event ) {\n\n\t\t\t\tthis.post_search_popover.hide();\n\n\t\t\t\tvar assignment = event.data;\n\n\t\t\t\tif ( 'clone' === event.action ) {\n\n\t\t\t\t\tassignment = _.prepareAssignmentObjectForCloning( assignment );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Use author id instead of the assignment author object.\n\t\t\t\t\tassignment = _.prepareExistingPostObjectDataForAddingOrCloning( assignment );\n\t\t\t\t\tassignment._forceSync = true;\n\n\t\t\t\t}\n\n\t\t\t\tassignment.lesson_id = this.lesson.get( 'id' )\n\n\t\t\t\tassignment = window.llms_builder.construct.get_model( 'Assignment', assignment );\n\n\t\t\t\tthis.lesson.set( 'assignment_enabled', 'yes' );\n\t\t\t\tthis.lesson.set( 'assignment', assignment );\n\t\t\t\tthis.model = assignment;\n\n\t\t\t\tthis.render();\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Open add existing assignment popover.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @param {Object} event JS event object.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tadd_existing_assignment_click: function( event ) {\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tif ( this.is_addon_available() ) {\n\n\t\t\t\t\tthis.post_search_popover = new Popover( {\n\t\t\t\t\t\tel: '#llms-existing-assignment',\n\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\tbackdrop: true,\n\t\t\t\t\t\t\tcloseable: true,\n\t\t\t\t\t\t\tcontainer: '.wrap.lifterlms.llms-builder',\n\t\t\t\t\t\t\tdismissible: true,\n\t\t\t\t\t\t\tplacement: 'left',\n\t\t\t\t\t\t\twidth: 480,\n\t\t\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add Existing Assignment' ),\n\t\t\t\t\t\t\tcontent: new PostSearch( {\n\t\t\t\t\t\t\t\tpost_type: 'llms_assignment',\n\t\t\t\t\t\t\t\tsearching_message: LLMS.l10n.translate( 'Search for existing assignments...' ),\n\t\t\t\t\t\t\t} ).render().$el,\n\t\t\t\t\t\tonHide: function() {\n\t\t\t\t\t\t\tBackbone.pubSub.off( 'assignment-search-select' );\n\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis.post_search_popover.show();\n\t\t\t\t\tBackbone.pubSub.once( 'assignment-search-select', this.add_existing_assignment, this );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.show_ad_popover( '#llms-existing-assignment' );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Determine if Assignments addon is available to use.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @return {Boolean}\n\t\t\t */\n\t\t\tis_addon_available: function() {\n\n\t\t\t\treturn ( window.llms_builder.assignments );\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Called when assignment is trashed.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @param {Oject} assignment Assignment Model.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\ton_trashed: function( assignment ) {\n\n\t\t\t\tthis.lesson.set( 'assignment_enabled', 'no' );\n\t\t\t\tthis.lesson.set( 'assignment', '' );\n\n\t\t\t\tdelete this.model;\n\n\t\t\t\tthis.render();\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Shows a dirty dirty ad popover for advanced assignments.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t *\n\t\t\t * @param {Sring} el The jQuery selector string.\n\t\t\t * @return {Void}\n\t\t\t */\n\t\t\tshow_ad_popover: function( el ) {\n\n\t\t\t\tvar h3 = LLMS.l10n.translate( 'Get Your Students Taking Action' ),\n\t\t\t\tp = 'Great learning content is only half of teaching online. When your learners fully engage, they will take your content and move into action. Remove barriers for your learners by telling them what to do to apply what they just learned. Create graded assignments or simply give them a checklist of action items to complete before moving on.',\n\t\t\t\tbtn = LLMS.l10n.translate( 'Get Assignments Now!' ),\n\t\t\t\turl = 'https://lifterlms.com/product/lifterlms-assignments?utm_source=LifterLMS%20Plugin&utm_medium=Assignment%20Builder%20Button&utm_campaign=Assignment%20Addon%20Upsell&utm_content=3.17.0';\n\n\t\t\t\tthis.ad_popover = new Popover( {\n\t\t\t\t\tel: el,\n\t\t\t\t\targs: {\n\t\t\t\t\t\tbackdrop: true,\n\t\t\t\t\t\tcloseable: true,\n\t\t\t\t\t\tcontainer: '.wrap.lifterlms.llms-builder',\n\t\t\t\t\t\tdismissible: true,\n\t\t\t\t\t\t// placement: 'left',\n\t\t\t\t\t\twidth: 380,\n\t\t\t\t\t\ttitle: LLMS.l10n.translate( 'Unlock LifterLMS Assignments' ),\n\t\t\t\t\t\t// This is here for translation but not actually used by the popover.\n\t\t\t\t\t\tcloseLabel: LLMS.l10n.translate( 'Close' ),\n\t\t\t\t\t\tcontent: '' + h3 + ' ' + p + '
' + btn + '
'\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tthis.ad_popover.show();\n\n\t\t\t},\n\n\t\t}, Detachable, Editable, Trashable, Subview, SettingsFields ) );\n\n\t} );\n\n","/**\n * Sidebar Editor View\n *\n * @since 3.16.0\n * @version 3.27.0\n */\ndefine( 'Views/Editor',[\n\t\t'Views/LessonEditor',\n\t\t'Views/Quiz',\n\t\t'Views/Assignment',\n\t\t'Views/_Subview'\n\t], function(\n\t\tLessonEditor,\n\t\tQuiz,\n\t\tAssignment,\n\t\tSubview\n\t) {\n\n\t\treturn Backbone.View.extend( _.defaults( {\n\n\t\t\t/**\n\t\t\t * Current view state\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tstate: 'lesson', // [lesson|quiz]\n\n\t\t\t/**\n\t\t\t * Current Subviews\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tviews: {\n\t\t\t\tlesson: {\n\t\t\t\t\tclass: LessonEditor,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'lesson',\n\t\t\t\t},\n\t\t\t\tassignment: {\n\t\t\t\t\tclass: Assignment,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'assignment',\n\t\t\t\t},\n\t\t\t\tquiz: {\n\t\t\t\t\tclass: Quiz,\n\t\t\t\t\tinstance: null,\n\t\t\t\t\tstate: 'quiz',\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * HTML element selector\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\tel: '#llms-editor',\n\n\t\t\tevents: {\n\t\t\t\t'click .llms-editor-nav a[href=\"#llms-editor-close\"]': 'close_editor',\n\t\t\t\t'click .llms-editor-nav a:not([href=\"#llms-editor-close\"])': 'switch_tab',\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Wrapper Tag name\n\t\t\t *\n\t\t\t * @type {String}\n\t\t\t */\n\t\t\ttagName: 'div',\n\n\t\t\t/**\n\t\t\t * Get the underscore template\n\t\t\t *\n\t\t\t * @type {[type]}\n\t\t\t */\n\t\t\ttemplate: wp.template( 'llms-editor-template' ),\n\n\t\t\t/**\n\t\t\t * Initialization callback func (renders the element on screen)\n\t\t\t *\n\t\t\t * @return void\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\tinitialize: function( data ) {\n\n\t\t\t\tthis.SidebarView = data.SidebarView;\n\t\t\t\tif ( data.tab ) {\n\t\t\t\t\tthis.state = data.tab;\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Compiles the template and renders the view\n\t\t\t *\n\t\t\t * @return self (for chaining)\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.16.0\n\t\t\t */\n\t\t\trender: function( view_data ) {\n\n\t\t\t\tview_data = view_data || {};\n\n\t\t\t\tthis.$el.html( this.template( this ) );\n\n\t\t\t\tthis.render_subviews( _.extend( view_data, {\n\t\t\t\t\tlesson: this.model,\n\t\t\t\t} ) );\n\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Click event for close sidebar editor button\n\t\t\t * Sends event to main SidebarView to trigger editor closing events\n\t\t\t *\n\t\t\t * @param obj event js event obj\n\t\t\t * @return void\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.27.0\n\t\t\t */\n\t\t\tclose_editor: function( event ) {\n\n\t\t\t\tevent.preventDefault();\n\t\t\t\tBackbone.pubSub.trigger( 'sidebar-editor-close' );\n\t\t\t\twindow.location.hash = '';\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Click event for switching tabs in the editor navigation\n\t\t\t *\n\t\t\t * @param object event js event object\n\t\t\t * @return void\n\t\t\t * @since 3.16.0\n\t\t\t * @version 3.27.0\n\t\t\t */\n\t\t\tswitch_tab: function( event ) {\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tvar $btn = $( event.target ),\n\t\t\t\tview = $btn.attr( 'data-view' ),\n\t\t\t\t$tab = this.$el.find( $btn.attr( 'href' ) );\n\n\t\t\t\tthis.set_state( view ).render();\n\t\t\t\tthis.set_hash( view );\n\n\t\t\t\t// Backbone.pubSub.trigger( 'editor-tab-activated', $btn.attr( 'href' ).substring( 1 ) );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Adds a hash for deep linking to a specific lesson tab\n\t\t\t *\n\t\t\t * @param string subtab subtab [quiz|assignment]\n\t\t\t * @return void\n\t\t\t * @since 3.27.0\n\t\t\t * @version 3.27.0\n\t\t\t */\n\t\t\tset_hash: function( subtab ) {\n\n\t\t\t\tvar hash = 'lesson:' + this.model.get( 'id' );\n\n\t\t\t\tif ( 'lesson' !== subtab ) {\n\t\t\t\t\thash += ':' + subtab;\n\t\t\t\t}\n\n\t\t\t\twindow.location.hash = hash;\n\n\t\t\t},\n\n\t\t}, Subview ) );\n\n} );\n\n","/**\n * Sidebar Elements View\n *\n * @since 3.16.0\n * @version 3.16.12\n */\ndefine( 'Views/Elements',[ 'Models/Section', 'Views/Section', 'Models/Lesson', 'Views/Lesson', 'Views/Popover', 'Views/PostSearch' ], function( Section, SectionView, Lesson, LessonView, Popover, LessonSearch ) {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * HTML element selector\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-elements',\n\n\t\tevents: {\n\t\t\t'click #llms-new-section': 'add_new_section',\n\t\t\t'click #llms-new-lesson': 'add_new_lesson',\n\t\t\t'click #llms-existing-lesson': 'add_existing_lesson',\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-elements-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\t// save a reference to the main Course view\n\t\t\tthis.SidebarView = data.SidebarView;\n\n\t\t\t// watch course sections and enable/disable lesson buttons conditionally\n\t\t\tthis.listenTo( this.SidebarView.CourseView.model.get( 'sections' ), 'add', this.maybe_disable_buttons );\n\t\t\tthis.listenTo( this.SidebarView.CourseView.model.get( 'sections' ), 'remove', this.maybe_disable_buttons );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\n\t\t\tthis.$el.html( this.template() );\n\t\t\tthis.draggable();\n\t\t\tthis.maybe_add_initial_section();\n\n\t\t\treturn this;\n\t\t},\n\n\t\tdraggable: function() {\n\n\t\t\t$( '#llms-new-section' ).draggable( {\n\t\t\t\tappendTo: '#llms-sections',\n\t\t\t\tcancel: false,\n\t\t\t\tconnectToSortable: '.llms-sections',\n\t\t\t\thelper: function() {\n\t\t\t\t\treturn new SectionView( { model: new Section() } ).render().$el;\n\t\t\t\t},\n\t\t\t\tstart: function() {\n\t\t\t\t\t$( '.llms-sections' ).addClass( 'dragging' );\n\t\t\t\t},\n\t\t\t\tstop: function() {\n\t\t\t\t\t$( '.llms-sections' ).removeClass( 'dragging' );\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t$( '#llms-new-lesson' ).draggable( {\n\t\t\t\t// appendTo: '#llms-sections .llms-section:first-child .llms-lessons',\n\t\t\t\tappendTo: '#llms-sections',\n\t\t\t\tcancel: false,\n\t\t\t\tconnectToSortable: '.llms-lessons',\n\t\t\t\thelper: function() {\n\t\t\t\t\treturn new LessonView( { model: new Lesson() } ).render().$el;\n\t\t\t\t},\n\t\t\t\tstart: function() {\n\n\t\t\t\t\t$( '.llms-lessons' ).addClass( 'dragging' );\n\n\t\t\t\t},\n\t\t\t\tstop: function() {\n\t\t\t\t\t$( '.llms-lessons' ).removeClass( 'dragging' );\n\t\t\t\t\t$( '.drag-expanded' ).removeClass( '.drag-expanded' );\n\t\t\t\t},\n\t\t\t} );\n\n\t\t},\n\n\t\tadd_new_section: function( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'add-new-section' );\n\t\t},\n\n\t\tadd_new_lesson: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\t\t},\n\n\t\t/**\n\t\t * Show the popover to add an existing lessons\n\t\t *\n\t\t * @param object event JS Event Object\n\t\t * @return void\n\t\t * @since 3.16.12\n\t\t * @version 3.16.12\n\t\t */\n\t\tadd_existing_lesson: function( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tvar pop = new Popover( {\n\t\t\t\tel: '#llms-existing-lesson',\n\t\t\t\targs: {\n\t\t\t\t\tbackdrop: true,\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontainer: '.wrap.lifterlms.llms-builder',\n\t\t\t\t\tdismissible: true,\n\t\t\t\t\tplacement: 'left',\n\t\t\t\t\twidth: 480,\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Add Existing Lesson' ),\n\t\t\t\t\tcontent: new LessonSearch( {\n\t\t\t\t\t\tpost_type: 'lesson',\n\t\t\t\t\t\tsearching_message: LLMS.l10n.translate( 'Search for existing lessons...' ),\n\t\t\t\t\t} ).render().$el,\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tpop.show();\n\t\t\tBackbone.pubSub.on( 'lesson-search-select', function() {\n\t\t\t\tpop.hide()\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Disables lesson add buttons if no sections are available to add a lesson to\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tmaybe_add_initial_section: function() {\n\n\t\t\tvar $els = $( '#llms-new-lesson, #llms-existing-lesson' );\n\n\t\t\tif ( ! this.SidebarView.CourseView.model.get( 'sections' ).length ) {\n\t\t\t\tBackbone.pubSub.trigger( 'add-new-section' );\n\t\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\t\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\t\t\t\tBackbone.pubSub.trigger( 'add-new-lesson' );\n\t\t\t} else {\n\t\t\t\t$els.removeAttr( 'disabled' );\n\t\t\t}\n\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Sidebar Utilities View\n *\n * @since 3.16.0\n * @version 3.16.0\n */\ndefine( 'Views/Utilities',[], function() {\n\n\treturn Backbone.View.extend( {\n\n\t\t/**\n\t\t * HTML element selector\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-utilities',\n\n\t\tevents: {\n\t\t\t'click #llms-collapse-all': 'collapse_all',\n\t\t\t'click #llms-expand-all': 'expand_all'\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'div',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-utilities-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function() {\n\n\t\t\t// this.render();\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t *\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function() {\n\t\t\tthis.$el.html( this.template() );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Collapse all sections\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tcollapse_all: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'collapse-all' );\n\t\t},\n\n\t\t/**\n\t\t * Expand all sections\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\texpand_all: function( event ) {\n\t\t\tevent.preventDefault();\n\t\t\tBackbone.pubSub.trigger( 'expand-all' );\n\t\t},\n\n\t} );\n\n} );\n\n","/**\n * Main sidebar view\n *\n * @since 3.16.0\n * @version 7.2.0\n */\ndefine( 'Views/Sidebar',[\n\t'Views/Editor',\n\t'Views/Elements',\n\t'Views/Utilities',\n\t'Views/_Subview'\n], function(\n\tEditor,\n\tElements,\n\tUtilities,\n\tSubview\n) {\n\n\treturn Backbone.View.extend( _.defaults( {\n\n\t\t/**\n\t\t * Current builder state\n\t\t * @type {String}\n\t\t */\n\t\tstate: 'builder', // [builder|editor]\n\n\t\t/**\n\t\t * Current Subviews\n\t\t * @type {Object}\n\t\t */\n\t\tviews: {\n\t\t\telements: {\n\t\t\t\tclass: Elements,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'builder',\n\t\t\t},\n\t\t\tutilities: {\n\t\t\t\tclass: Utilities,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'builder',\n\t\t\t},\n\t\t\teditor: {\n\t\t\t\tclass: Editor,\n\t\t\t\tinstance: null,\n\t\t\t\tstate: 'editor',\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * HTML element selector\n\t\t * @type {String}\n\t\t */\n\t\tel: '#llms-builder-sidebar',\n\n\t\t/**\n\t\t * DOM events\n\t\t * @type {Object}\n\t\t */\n\t\tevents: {\n\t\t\t'click #llms-save-button': 'save_now',\n\t\t\t'click #llms-exit-button': 'exit_now',\n\t\t\t'click .llms-builder-error': 'clear_errors',\n\t\t},\n\n\t\t/**\n\t\t * Wrapper Tag name\n\t\t * @type {String}\n\t\t */\n\t\ttagName: 'aside',\n\n\t\t/**\n\t\t * Get the underscore template\n\t\t * @type {[type]}\n\t\t */\n\t\ttemplate: wp.template( 'llms-sidebar-template' ),\n\n\t\t/**\n\t\t * Initialization callback func (renders the element on screen)\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tinitialize: function( data ) {\n\n\t\t\t// save a reference to the main Course view\n\t\t\tthis.CourseView = data.CourseView;\n\n\t\t\tthis.render();\n\n\t\t\tBackbone.pubSub.on( 'current-save-status', this.changes_made, this );\n\n\t\t\tBackbone.pubSub.on( 'heartbeat-send', this.heartbeat_send, this );\n\t\t\tBackbone.pubSub.on( 'heartbeat-tick', this.heartbeat_tick, this );\n\n\t\t\tBackbone.pubSub.on( 'lesson-selected', this.on_lesson_select, this );\n\t\t\tBackbone.pubSub.on( 'sidebar-editor-close', this.on_editor_close, this );\n\n\t\t\tthis.$saveButton = $( '#llms-save-button' );\n\n\t\t},\n\n\t\t/**\n\t\t * Compiles the template and renders the view\n\t\t * @return self (for chaining)\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\trender: function( view_data ) {\n\n\t\t\tview_data = view_data || {};\n\n\t\t\tthis.$el.html( this.template() );\n\n\t\t\tthis.render_subviews( _.extend( view_data, {\n\t\t\t\tSidebarView: this,\n\t\t\t} ) );\n\n\t\t\tvar $el = $( '.wrap.lifterlms.llms-builder' );\n\t\t\tif ( 'builder' === this.state ) {\n\t\t\t\t$el.removeClass( 'editor-active' );\n\t\t\t} else {\n\t\t\t\t$el.addClass( 'editor-active' );\n\t\t\t}\n\n\t\t\tthis.$saveButton = this.$el.find( '#llms-save-button' );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Adds error message element\n\t\t * @param {[type]} $err [description]\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tadd_error: function( $err ) {\n\n\t\t\tthis.$el.find( '.llms-builder-save' ).prepend( $err );\n\n\t\t},\n\n\t\t/**\n\t\t * Clear any existing error message elements\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tclear_errors: function() {\n\n\t\t\tthis.$el.find( '.llms-builder-save .llms-builder-error' ).remove();\n\n\t\t},\n\n\t\t/**\n\t\t * Update save status button when changes are detected\n\t\t * runs on an interval to check status of course regularly for unsaved changes\n\t\t * @param obj sync instance of the sync controller\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tchanges_made: function( sync ) {\n\n\t\t\t// if a save is currently running, don't do anything\n\t\t\tif ( sync.saving ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( sync.has_unsaved_changes ) {\n\n\t\t\t\tthis.$saveButton.attr( 'data-status', 'unsaved' );\n\t\t\t\tthis.$saveButton.removeAttr( 'disabled' );\n\n\t\t\t} else {\n\n\t\t\t\tthis.$saveButton.attr( 'data-status', 'saved' );\n\t\t\t\tthis.$saveButton.attr( 'disabled', 'disabled' );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Exit the builder and return to the WP Course Editor\n\t\t * @return void\n\t\t * @since 3.16.7\n\t\t * @version 3.16.7\n\t\t */\n\t\texit_now: function() {\n\n\t\t\twindow.location.href = window.llms_builder.CourseModel.get_edit_post_link();\n\n\t\t},\n\n\t\t/**\n\t\t * Triggered when a heartbeat send event starts containing builder information\n\t\t * @param obj sync instance of the sync controller\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\theartbeat_send: function( sync ) {\n\n\t\t\tif ( sync.saving ) {\n\t\t\t\tLLMS.Spinner.start( this.$saveButton.find( 'i' ), 'small' );\n\t\t\t\tthis.$saveButton.attr( {\n\t\t\t\t\t'data-status': 'saving',\n\t\t\t\t\tdisabled: 'disabled',\n\t\t\t\t} );\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Triggered when a heartbeat tick completes and updates save status or appends errors\n\t\t * @param obj sync instance of the sync controller\n\t\t * @param obj data updated data\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\theartbeat_tick: function( sync, data ) {\n\n\t\t\tif ( ! sync.saving ) {\n\n\t\t\t\tvar status = 'saved';\n\n\t\t\t\tthis.clear_errors();\n\n\t\t\t\tif ( 'error' === data.status ) {\n\n\t\t\t\t\tstatus = 'error';\n\n\t\t\t\t\tvar msg = data.message,\n\t\t\t\t\t\t$err = $( ' ' );\n\n\t\t\t\t\tif ( 'object' === typeof msg ) {\n\t\t\t\t\t\t_.each( msg, function( txt ) {\n\t\t\t\t\t\t\t$err.append( '' + txt + ' ' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$err = $err.append( '' + msg + ' ' );;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.add_error( $err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.$saveButton.find( '.llms-spinning' ).remove();\n\t\t\t\tthis.$saveButton.attr( {\n\t\t\t\t\t'data-status': status,\n\t\t\t\t\tdisabled: 'disabled',\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Determine if the editor is the currently active state\n\t\t * @return boolean\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tis_editor_active: function() {\n\n\t\t\treturn ( 'editor' === this.state );\n\n\t\t},\n\n\t\t/**\n\t\t * Triggered when the editor closes, updates state to be the course builder view\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_editor_close: function() {\n\n\t\t\tthis.set_state( 'builder' ).render();\n\n\t\t},\n\n\t\t/**\n\t\t * When a lesson is selected, opens the sidebar to the editor view\n\t\t * @param obj lesson_model instance of the lesson model which was selected\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ton_lesson_select: function( lesson_model, tab ) {\n\n\t\t\tif ( 'editor' !== this.state ) {\n\t\t\t\tthis.set_state( 'editor' );\n\t\t\t} else {\n\t\t\t\tthis.remove_subview( 'editor' );\n\t\t\t}\n\n\t\t\tthis.render( {\n\t\t\t\tmodel: lesson_model,\n\t\t\t\ttab: tab,\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Save button click event\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tsave_now: function() {\n\n\t\t\twindow.llms_builder.sync.save_now();\n\n\t\t},\n\n\t}, Subview ) );\n\n} );\n\n","/**\n * LifterLMS JS Builder App Bootstrap\n *\n * @since 3.16.0\n * @since 3.37.11 Added `_.getEditor()` helper.\n * @version 5.4.0\n */\nrequire( [\n\t'vendor/wp-hooks',\n\t'vendor/backbone.collectionView',\n\t'vendor/backbone.trackit',\n\t'Controllers/Construct',\n\t'Controllers/Debug',\n\t'Controllers/Schemas',\n\t'Controllers/Sync',\n\t'Models/loader',\n\t'Views/Course',\n\t'Views/Sidebar'\n\t], function(\n\tHooks,\n\tCV,\n\tTrackIt,\n\tConstruct,\n\tDebug,\n\tSchemas,\n\tSync,\n\tModels,\n\tCourseView,\n\tSidebarView\n\t) {\n\n\t\twindow.llms_builder.debug = new Debug( window.llms_builder.debug );\n\t\twindow.llms_builder.construct = new Construct();\n\t\twindow.llms_builder.schemas = new Schemas( window.llms_builder.schemas );\n\n\t\t/**\n\t\t * Compare values, used by _.checked & _.selected mixins.\n\t\t *\n\t\t * @since 3.17.2\n\t\t *\n\t\t * @param {Mixed} expected expected Value, probably a string (the value of a select option or checkbox element).\n\t\t * @param {Mixed} mixed actual Actual value, probably a string (the return of model.get( 'something' ) )\n\t\t * but could be an array like a multiselect.\n\t\t * @return {Bool}\n\t\t */\n\t\tfunction value_compare( expected, actual ) {\n\t\t\treturn ( ( _.isArray( actual ) && -1 !== actual.indexOf( expected ) ) || expected == actual );\n\t\t};\n\n\t\t/**\n\t\t * Underscores templating utilities\n\t\t *\n\t\t * @since 3.17.0\n\t\t * @version 3.27.0\n\t\t */\n\t\t_.mixin( {\n\n\t\t\t/**\n\t\t\t * Determine if two values are equal and output checked attribute if they are.\n\t\t\t *\n\t\t\t * Useful for templating checkboxes & radio elements\n\t\t\t * like WP Core PHP checked() but in JS.\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.17.2 Unknown.\n\t\t\t *\n\t\t\t * @param {Mixed} expected Expected element value.\n\t\t\t * @param {Mixed} actual Actual element value.\n\t\t\t * @return {String}\n\t\t\t */\n\t\t\tchecked: function( expected, actual ) {\n\t\t\t\tif ( value_compare( expected, actual ) ) {\n\t\t\t\t\treturn ' checked=\"checked\"';\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Recursively clone an object via _.clone().\n\t\t\t *\n\t\t\t * @since 3.17.7\n\t\t\t *\n\t\t\t * @param {Object} obj Object to clone.\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tdeepClone: function( obj ) {\n\n\t\t\t\tvar clone = _.clone( obj );\n\n\t\t\t\t_.each( clone, function( val, key ) {\n\t\t\t\t\tif ( ! _.isFunction( val ) && _.isObject( val ) ) {\n\t\t\t\t\t\tclone[ key ] = _.deepClone( val );\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\treturn clone;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieve the wp.editor instance.\n\t\t\t *\n\t\t\t * Uses `wp.oldEditor` (when available) which was added in WordPress 5.0.\n\t\t\t *\n\t\t\t * Falls back to `wp.editor()` which will usually be the same as `wp.oldEditor` unless\n\t\t\t * the `@wordpress/editor` module has been loaded by another plugin or a theme.\n\t\t\t *\n\t\t\t * @since 3.37.11\n\t\t\t *\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tgetEditor: function() {\n\n\t\t\t\tif ( undefined !== wp.oldEditor ) {\n\n\t\t\t\t\tvar ed = wp.oldEditor;\n\n\t\t\t\t\t// Inline scripts added by WordPress are not ported to `wp.oldEditor`, see https://github.com/WordPress/WordPress/blob/641c632b0c9fde4e094b217f50749984ca43a2fa/wp-includes/class-wp-editor.php#L977.\n\t\t\t\t\tif ( undefined !== wp.editor && undefined !== wp.editor.getDefaultSettings ) {\n\t\t\t\t\t\ted.getDefaultSettings = wp.editor.getDefaultSettings;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ed;\n\n\t\t\t\t} else if ( undefined !== wp.editor && undefined !== wp.editor.autop ){\n\n\t\t\t\t\treturn wp.editor;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Strips IDs & Parent References from quizzes and all quiz questions.\n\t\t\t *\n\t\t\t * @since 3.24.0\n\t\t\t * @since 3.27.0 Unknown.\n\t\t\t * @since 5.4.0 Use author id instead of the question author object.\n\t\t\t *\n\t\t\t * @param {Object} quiz Raw quiz object (not a model).\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tprepareQuizObjectForCloning: function( quiz ) {\n\n\t\t\t\tdelete quiz.id;\n\t\t\t\tdelete quiz.lesson_id;\n\n\t\t\t\t_.each( quiz.questions, function( question ) {\n\n\t\t\t\t\tquestion = _.prepareQuestionObjectForCloning( question );\n\n\t\t\t\t} );\n\n\t\t\t\t// Use author id instead of the quiz author object.\n\t\t\t\tquiz = _.prepareExistingPostObjectDataForAddingOrCloning( quiz );\n\n\t\t\t\treturn quiz;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Strips IDs & Parent References from a question.\n\t\t\t *\n\t\t\t * @since 3.27.0\n\t\t\t * @since 5.4.0 Use author id instead of the question author object.\n\t\t\t *\n\t\t\t * @param {Object} question Raw question object (not a model).\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tprepareQuestionObjectForCloning: function( question ) {\n\n\t\t\t\tdelete question.id;\n\t\t\t\tdelete question.parent_id;\n\n\t\t\t\tif ( question.image && _.isObject( question.image ) ) {\n\t\t\t\t\tquestion.image._forceSync = true;\n\t\t\t\t}\n\n\t\t\t\tif ( question.choices ) {\n\n\t\t\t\t\t_.each( question.choices, function( choice ) {\n\n\t\t\t\t\t\tdelete choice.question_id;\n\t\t\t\t\t\tdelete choice.id;\n\t\t\t\t\t\tif ( 'image' === choice.choice_type && _.isObject( choice.choice ) ) {\n\t\t\t\t\t\t\tchoice.choice._forceSync = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\t// Use author id instead of the question author object.\n\t\t\t\tquestion = _.prepareExistingPostObjectDataForAddingOrCloning( question );\n\n\t\t\t\treturn question;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Strips IDs & Parent References from assignments and all assignment tasks.\n\t\t\t *\n\t\t\t * @since 5.4.0\n\t\t\t *\n\t\t\t * @param {Object} assignment Raw assignment object (not a model).\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\t prepareAssignmentObjectForCloning: function( assignment ) {\n\n\t\t\t\tdelete assignment.id;\n\t\t\t\tdelete assignment.lesson_id;\n\n\t\t\t\t// Clone tasks.\n\t\t\t\tif ( 'tasklist' === assignment.assignment_type ) {\n\t\t\t\t\t_.each( assignment.tasks, function( task ) {\n\t\t\t\t\t\tdelete task.id;\n\t\t\t\t\t\tdelete task.assignment_id;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Use author id instead of the quiz author object.\n\t\t\t\tassignment = _.prepareExistingPostObjectDataForAddingOrCloning( assignment );\n\n\t\t\t\treturn assignment;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Prepare post object data for adding or cloning.\n\t\t\t *\n\t\t\t * Use author id instead of the post type author object.\n\t\t\t *\n\t\t\t * @since 5.4.0\n\t\t\t *\n\t\t\t * @param {Object} quiz Raw post object (not a model).\n\t\t\t * @return {Object}\n\t\t\t */\n\t\t\tprepareExistingPostObjectDataForAddingOrCloning: function( post_data ) {\n\n\t\t\t\tif ( post_data.author && _.isObject( post_data.author ) && post_data.author.id ) {\n\t\t\t\t\tpost_data.author = post_data.author.id;\n\t\t\t\t}\n\n\t\t\t\treturn post_data;\n\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Determine if two values are equal and output selected attribute if they are.\n\t\t\t *\n\t\t\t * Useful for templating select elements\n\t\t\t * like WP Core PHP selected() but in JS.\n\t\t\t *\n\t\t\t *\n\t\t\t * @since 3.17.0\n\t\t\t * @since 3.17.2 Unknown.\n\t\t\t *\n\t\t\t * @param {Mixed} expected Expected element value.\n\t\t\t * @param {Mixed} actual Actual element value.\n\t\t\t * @return {String}\n\t\t\t */\n\t\t\tselected: function( expected, actual ) {\n\t\t\t\tif ( value_compare( expected, actual ) ) {\n\t\t\t\t\treturn ' selected=\"selected\"';\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Generic function for stripping HTML tags from a string.\n\t\t\t *\n\t\t\t * @since 3.17.8\n\t\t\t *\n\t\t\t * @param {String} content Raw string.\n\t\t\t * @param {Array} allowed_tags Array of allowed HTML tags.\n\t\t\t * @return {String}\n\t\t\t */\n\t\t\tstripFormatting: function( content, allowed_tags ) {\n\n\t\t\t\tif ( ! allowed_tags ) {\n\t\t\t\t\tallowed_tags = [ 'b', 'i', 'u', 'strong', 'em' ];\n\t\t\t\t}\n\n\t\t\t\tvar $html = $( '' + content + '
' );\n\n\t\t\t\t$html.find( '*' ).not( allowed_tags.join( ',' ) ).each( function( ) {\n\n\t\t\t\t\t$( this ).replaceWith( this.innerHTML );\n\n\t\t\t\t} );\n\n\t\t\t\treturn $html.html();\n\n\t\t\t},\n\n\t\t} );\n\n\t\tBackbone.pubSub = _.extend( {}, Backbone.Events );\n\n\t\t$( document ).trigger( 'llms-builder-pre-init' );\n\n\t\twindow.llms_builder.questions = window.llms_builder.construct.get_collection( 'QuestionTypes', window.llms_builder.questions );\n\n\t\tvar CourseModel = window.llms_builder.construct.get_model( 'Course', window.llms_builder.course );\n\t\twindow.llms_builder.CourseModel = CourseModel;\n\n\t\twindow.llms_builder.sync = new Sync( CourseModel, window.llms_builder.sync );\n\n\t\tvar Course = new CourseView( {\n\t\t\tmodel: CourseModel,\n\t\t} );\n\n\t\tvar Sidebar = new SidebarView( {\n\t\t\tCourseView: Course\n\t\t} );\n\n\t\t$( document ).trigger( 'llms-builder-init', {\n\t\t\tcourse: Course,\n\t\t\tsidebar: Sidebar,\n\t\t} );\n\n\t\t/**\n\t\t * Do deep linking to Lesson / Quiz / Assignments.\n\t\t *\n\t\t * Hash should be in the form of #lesson:{lesson_id}:{subtab}\n\t\t * subtab can be either \"quiz\" or \"assignment\". If none found assumes the \"lesson\" tab.\n\t\t *\n\t\t * @since 3.27.0\n\t\t * @since 3.30.1 Wait for wp.editor & window.tinymce to load before opening deep link tabs.\n\t\t * @since 3.37.11 Use `_.getEditor()` helper when checking for the presence of `wp.editor`.\n\t\t */\n\t\tif ( window.location.hash ) {\n\n\t\t\tvar hash = window.location.hash;\n\t\t\tif ( -1 === hash.indexOf( '#lesson:' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar parts = hash.replace( '#lesson:', '' ).split( ':' ),\n\t\t\t$lesson = $( '#llms-lesson-' + parts[0] );\n\n\t\t\tif ( $lesson.length ) {\n\n\t\t\t\tLLMS.wait_for( function() {\n\t\t\t\t\treturn ( undefined !== _.getEditor() && undefined !== window.tinymce );\n }, function() {\n\t\t\t\t\t$lesson.closest( '.llms-builder-item.llms-section' ).find( 'a.llms-action-icon.expand' ).trigger( 'click' );\n\t\t\t\t\tvar subtab = parts[1] ? parts[1] : 'lesson';\n\t\t\t\t\t$( '#llms-lesson-' + parts[0] ).find( 'a.llms-action-icon.edit-' + subtab ).trigger( 'click' );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\ndefine(\"main\", function(){});\n\n"],"sourceRoot":"../../.."}
\ No newline at end of file
diff --git a/assets/maps/js/llms-favorites.min.js.map b/assets/maps/js/llms-favorites.min.js.map
new file mode 100644
index 0000000000..e20d5bed3a
--- /dev/null
+++ b/assets/maps/js/llms-favorites.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-favorites.min.js","sources":["llms-favorites.js"],"sourcesContent":["/* global LLMS, $ */\n/* jshint strict: true */\n\n/**\n * Front End Favorite Class.\n *\n * @type {Object}\n *\n * @since 7.5.0\n * @version 7.5.0\n */\n( function( $ ) {\n\n\tvar favorite = {\n\n\t\t/**\n\t\t * Bind DOM events.\n\t\t *\n\t\t * @since 7.5.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tbind: function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// Favorite clicked.\n\t\t\t$( '.llms-favorite-wrapper' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tvar $btn = $( this ).find( '.llms-heart-btn' );\n\t\t\t\t$btn && self.favorite( $btn );\n\t\t\t} );\n\n\t\t\t// Adding class in Favorite's parent.\n\t\t\t$( '.llms-favorite-wrapper' ).parent().addClass( 'llms-has-favorite' );\n\n\t\t},\n\n\t\t/**\n\t\t * Favorite / Unfavorite an object.\n\t\t *\n\t\t * @since 7.5.0\n\t\t *\n\t\t * @param {Object} $btn jQuery object for the \"Favorite / Unfavorite\" button.\n\t\t * @return {Void}\n\t\t */\n\t\tfavorite: function( $btn ) {\n\n\t\t\tvar object_id \t= $btn.attr( 'data-id' ),\n\t\t\t\tobject_type = $btn.attr( 'data-type' ),\n\t\t\t\tuser_action\t= $btn.attr( 'data-action' );\n\n\t\t\tLLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'favorite_object',\n\t\t\t\t\tobject_id: object_id,\n\t\t\t\t\tobject_type: object_type,\n\t\t\t\t\tuser_action: user_action\n\t\t\t\t},\n\t\t\t\tbeforeSend: function() {},\n\t\t\t\tsuccess: function( r ) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Get all the favorite buttons on the page related to the same lesson, e.g. when the syllabus\n\t\t\t\t\t * is shown on the sidebar of a lesson or a course, in that case you will have the same favorite\n\t\t\t\t\t * button twice. The code below makes sure both the buttons are updated.\n\t\t\t\t\t */\n\t\t\t\t\tvar $fav_btns = $( '[data-id='+object_id+'][data-type='+object_type+'][data-action='+user_action+']' );\n\t\t\t\t\tif( r.success ) {\n\t\t\t\t\t\t$fav_btns.each(\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tif( 'favorite' === user_action ) {\n\t\t\t\t\t\t\t\t\t$(this).removeClass( 'fa-heart-o' ).addClass( 'fa-heart' );\n\t\t\t\t\t\t\t\t\t$(this).attr( 'data-action', 'unfavorite' );\n\t\t\t\t\t\t\t\t} else if ( 'unfavorite' === user_action ) {\n\t\t\t\t\t\t\t\t\t$(this).removeClass( 'fa-heart' ).addClass( 'fa-heart-o' );\n\t\t\t\t\t\t\t\t\t$(this).attr( 'data-action', 'favorite' );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Updating count.\n\t\t\t\t\t\t\t\t$(this).closest( '.llms-favorite-wrapper' ).find( '.llms-favorites-count' ).text( r.total_favorites );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\n\tfavorite.bind();\n\n\twindow.llms = window.llms || {};\n\twindow.llms.favorites = favorite;\n\n} )( jQuery );\n"],"names":["$","favorite","bind","self","this","on","e","preventDefault","$btn","find","parent","addClass","object_id","attr","object_type","user_action","LLMS","Ajax","call","data","action","beforeSend","success","r","$fav_btns","each","removeClass","closest","text","total_favorites","window","llms","favorites","jQuery"],"mappings":"AAWA,CAAA,SAAYA,GAEX,IAAIC,EAAW,CASdC,KAAM,WAEL,IAAIC,EAAOC,KAGXJ,EAAG,wBAAyB,EAAEK,GAAI,QAAS,SAAUC,GACpDA,EAAEC,eAAe,EACbC,EAAOR,EAAGI,IAAK,EAAEK,KAAM,iBAAkB,EAC7CD,GAAQL,EAAKF,SAAUO,CAAK,CAC7B,CAAE,EAGFR,EAAG,wBAAyB,EAAEU,OAAO,EAAEC,SAAU,mBAAoB,CAEtE,EAUAV,SAAU,SAAUO,GAEnB,IAAII,EAAaJ,EAAKK,KAAM,SAAU,EACrCC,EAAcN,EAAKK,KAAM,WAAY,EACrCE,EAAcP,EAAKK,KAAM,aAAc,EAExCG,KAAKC,KAAKC,KAAM,CACfC,KAAM,CACLC,OAAQ,kBACRR,UAAWA,EACXE,YAAaA,EACbC,YAAaA,CACd,EACAM,WAAY,aACZC,QAAS,SAAUC,GAMlB,IAAIC,EAAYxB,EAAG,YAAYY,EAAU,eAAeE,EAAY,iBAAiBC,EAAY,GAAI,EACjGQ,EAAED,SACLE,EAAUC,KACT,WACK,aAAeV,GAClBf,EAAEI,IAAI,EAAEsB,YAAa,YAAa,EAAEf,SAAU,UAAW,EACzDX,EAAEI,IAAI,EAAES,KAAM,cAAe,YAAa,GAC/B,eAAiBE,IAC5Bf,EAAEI,IAAI,EAAEsB,YAAa,UAAW,EAAEf,SAAU,YAAa,EACzDX,EAAEI,IAAI,EAAES,KAAM,cAAe,UAAW,GAGzCb,EAAEI,IAAI,EAAEuB,QAAS,wBAAyB,EAAElB,KAAM,uBAAwB,EAAEmB,KAAML,EAAEM,eAAgB,CACrG,CACD,CAEF,CACD,CAAE,CACH,CACD,EAEA5B,EAASC,KAAK,EAEd4B,OAAOC,KAAmBD,OAAOC,MAAQ,GACzCD,OAAOC,KAAKC,UAAc/B,CAEzB,EAAGgC,MAAO","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-form-checkout.min.js.map b/assets/maps/js/llms-form-checkout.min.js.map
new file mode 100644
index 0000000000..7c16ee9d16
--- /dev/null
+++ b/assets/maps/js/llms-form-checkout.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-form-checkout.min.js","sources":["llms-form-checkout.js"],"sourcesContent":["/**\n * LifterLMS Checkout Screen related events and interactions\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.0.0\n * @version 7.0.0\n */\n\n( function( $ ) {\n\n\tvar llms_checkout = function() {\n\n\t\t/**\n\t\t * Array of validation functions to call on form submission\n\t\t *\n\t\t * @type array\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tvar before_submit = [];\n\n\t\t/**\n\t\t * Array of gateways to be automatically bound when needed\n\t\t *\n\t\t * @type array\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tvar gateways = [];\n\n\t\tthis.$checkout_form = $( '#llms-product-purchase-form' );\n\t\tthis.$confirm_form = $( '#llms-product-purchase-confirm-form' );\n\t\tthis.$form_sections = false;\n\t\tthis.form_action = false;\n\n\t\t/**\n\t\t * Initialize checkout JS & bind if on the checkout screen\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.34.5 Make sure we bind click events for the Show / Hide login area at the top of the checkout screen\n\t\t * even if there's no llms product purchase form.\n\t\t * @since 7.0.0 Disable smooth scroll-behavior on checkout.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tif ( $( '.llms-checkout-wrapper' ).length ) {\n\t\t\t\tthis.bind_login();\n\t\t\t}\n\n\t\t\tif ( this.$checkout_form.length ) {\n\n\t\t\t\tthis.form_action = 'checkout';\n\t\t\t\tthis.$form_sections = this.$checkout_form.find( '.llms-checkout-section' );\n\n\t\t\t\tthis.$checkout_form.on( 'submit', this, this.submit );\n\n\t\t\t\t/**\n\t\t\t\t * Fix `HTMLFormElement.reportValidity()` when `scroll-behavior: smooth`.\n\t\t\t\t * \n\t\t\t\t * @see {@link https://github.com/gocodebox/lifterlms/issues/2206}\n\t\t\t\t */\n\t\t\t\tdocument.querySelector( 'html' ).style.scrollBehavior = 'auto';\n\n\t\t\t\t// add before submit event for password strength meter if one's found\n\t\t\t\tif ( $( '.llms-password-strength-meter' ).length ) {\n\t\t\t\t\tthis.add_before_submit_event( {\n\t\t\t\t\t\tdata: LLMS.PasswordStrength,\n\t\t\t\t\t\thandler: LLMS.PasswordStrength.checkout,\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tthis.bind_coupon();\n\n\t\t\t\tthis.bind_gateways();\n\n\t\t\t} else if ( this.$confirm_form.length ) {\n\n\t\t\t\tthis.form_action = 'confirm';\n\t\t\t\tthis.$form_sections = this.$confirm_form.find( '.llms-checkout-section' );\n\n\t\t\t\tthis.$confirm_form.on( 'submit', function() {\n\t\t\t\t\tself.processing( 'start' );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Public function which allows other classes or extensions to add\n\t\t * before submit events to llms checkout private \"before_submit\" array\n\t\t *\n\t\t * @param object obj object of data to push to the array\n\t\t * requires at least a \"handler\" key which should pass a callable function\n\t\t * \"data\" can be anything, will be passed as the first parameter to the handler function\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.add_before_submit_event = function( obj ) {\n\n\t\t\tif ( ! obj.handler || 'function' !== typeof obj.handler ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( ! obj.data ) {\n\t\t\t\tobj.data = null;\n\t\t\t}\n\n\t\t\tbefore_submit.push( obj );\n\n\t\t};\n\n\t\t/**\n\t\t * Add an error message\n\t\t *\n\t\t * @param string message error message string\n\t\t * @param mixed data optional error data to output on the console\n\t\t * @return void\n\t\t * @since 3.27.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tthis.add_error = function( message, data ) {\n\n\t\t\tvar id = 'llms-checkout-errors';\n\t\t\t\t$err = $( '#' + id );\n\n\t\t\tif ( ! $err.length ) {\n\t\t\t\t$err = $( '' );\n\t\t\t\t$( '.llms-checkout-wrapper' ).prepend( $err );\n\t\t\t}\n\n\t\t\t$err.append( '' + message + ' ' );\n\n\t\t\tif ( data ) {\n\t\t\t\tconsole.error( data );\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Public function which allows other classes or extensions to add\n\t\t * gateways classes that should be bound by this class\n\t\t *\n\t\t * @param obj gateway_class callable class object\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.add_gateway = function( gateway_class ) {\n\n\t\t\tgateways.push( gateway_class );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind coupon add & remove button events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.bind_coupon = function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// show & hide the coupon field & button\n\t\t\t$( 'a[href=\"#llms-coupon-toggle\"]' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\t$( '.llms-coupon-entry' ).slideToggle( 400 );\n\n\t\t\t} );\n\n\t\t\t// apply coupon click\n\t\t\t$( '#llms-apply-coupon' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\tself.coupon_apply( $( this ) );\n\n\t\t\t} );\n\n\t\t\t// remove coupon click\n\t\t\t$( '#llms-remove-coupon' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\tself.coupon_remove( $( this ) );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind gateway section events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.bind_gateways = function() {\n\n\t\t\tthis.load_gateways();\n\n\t\t\tif ( ! $( 'input[name=\"llms_payment_gateway\"]' ).length ) {\n\t\t\t\t$( '#llms_create_pending_order' ).removeAttr( 'disabled' );\n\t\t\t}\n\n\t\t\t// add class and trigger watchable event when gateway selection changes\n\t\t\t$( 'input[name=\"llms_payment_gateway\"]' ).on( 'change', function() {\n\n\t\t\t\t$( 'input[name=\"llms_payment_gateway\"]' ).each( function() {\n\n\t\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t\t$parent = $el.closest( '.llms-payment-gateway' ),\n\t\t\t\t\t\t$fields = $parent.find( '.llms-gateway-fields' ).find( 'input, textarea, select' ),\n\t\t\t\t\t\tchecked = $el.is( ':checked' ),\n\t\t\t\t\t\tdisplay_func = ( checked ) ? 'addClass' : 'removeClass';\n\n\t\t\t\t\t$parent[ display_func ]( 'is-selected' );\n\n\t\t\t\t\tif ( checked ) {\n\n\t\t\t\t\t\t// enable fields\n\t\t\t\t\t\t$fields.removeAttr( 'disabled' );\n\n\t\t\t\t\t\t// emit a watchable event for extensions to hook onto\n\t\t\t\t\t\t$( '.llms-payment-gateways' ).trigger( 'llms-gateway-selected', {\n\t\t\t\t\t\t\tid: $el.val(),\n\t\t\t\t\t\t\t$selector: $parent,\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// disable fields\n\t\t\t\t\t\t$fields.attr( 'disabled', 'disabled' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t\t// enable / disable buttons depending on field validation status\n\t\t\t$( '.llms-payment-gateways' ).on( 'llms-gateway-selected', function( e, data ) {\n\n\t\t\t\tvar $submit = $( '#llms_create_pending_order' );\n\n\t\t\t\tif ( data.$selector && data.$selector.find( '.llms-gateway-fields .invalid' ).length ) {\n\t\t\t\t\t$submit.attr( 'disabled', 'disabled' );\n\t\t\t\t} else {\n\t\t\t\t\t$submit.removeAttr( 'disabled' );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind click events for the Show / Hide login area at the top of the checkout screen\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.34.5 When showing the login form area make sure we slide up the `.llms-notice` link's parent too.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.bind_login = function() {\n\n\t\t\t$( 'a[href=\"#llms-show-login\"]' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\t\t\t\t$( this ).closest( '.llms-info,.llms-notice' ).slideUp( 400 );\n\t\t\t\t$( 'form.llms-login' ).slideDown( 400 );\n\n\t\t\t} );\n\t\t};\n\n\t\t/**\n\t\t * Clear error messages\n\t\t *\n\t\t * @return void\n\t\t * @since 3.27.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tthis.clear_errors = function() {\n\t\t\t$( '#llms-checkout-errors' ).remove();\n\t\t};\n\n\t\t/**\n\t\t * Triggered by clicking the \"Apply Coupon\" Button\n\t\t * Validates the coupon via JS and adds error / success messages\n\t\t * On success it will replace partials on the checkout screen with updated\n\t\t * prices and a \"remove coupon\" button\n\t\t *\n\t\t * @param obj $btn jQuery selector of the Apply button\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.coupon_apply = function ( $btn ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$code = $( '#llms_coupon_code' ),\n\t\t\t\tcode = $code.val(),\n\t\t\t\t$messages = $( '.llms-coupon-messages' ),\n\t\t\t\t$errors = $messages.find( '.llms-error' ),\n\t\t\t\t$container = $( 'form.llms-checkout' );\n\n\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'validate_coupon_code',\n\t\t\t\t\tcode: code,\n\t\t\t\t\tplan_id: $( '#llms-plan-id' ).val(),\n\t\t\t\t},\n\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\t$errors.hide();\n\n\t\t\t\t},\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\tLLMS.Spinner.stop( $container );\n\n\t\t\t\t\tif ( 'error' === r.code ) {\n\n\t\t\t\t\t\tvar $message = $( '' + r.message + ' ' );\n\n\t\t\t\t\t\tif ( ! $errors.length ) {\n\n\t\t\t\t\t\t\t$errors = $( '' );\n\t\t\t\t\t\t\t$messages.append( $errors );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t$errors.empty();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$message.appendTo( $errors );\n\t\t\t\t\t\t$errors.show();\n\n\t\t\t\t\t} else if ( r.success ) {\n\n\t\t\t\t\t\t$( '.llms-coupon-wrapper' ).replaceWith( r.data.coupon_html );\n\t\t\t\t\t\tself.bind_coupon();\n\n\t\t\t\t\t\t$( '.llms-payment-gateways' ).replaceWith( r.data.gateways_html );\n\t\t\t\t\t\tself.bind_gateways();\n\n\t\t\t\t\t\t$( '.llms-order-summary' ).replaceWith( r.data.summary_html );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Called by clicking the \"Remove Coupon\" button\n\t\t * Removes the coupon via AJAX and unsets related session data\n\t\t *\n\t\t * @param obj $btn jQuery selector of the Remove button\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.coupon_remove = function( $btn ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$container = $( 'form.llms-checkout' );\n\n\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'remove_coupon_code',\n\t\t\t\t\tplan_id: $( '#llms-plan-id' ).val(),\n\t\t\t\t},\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\tLLMS.Spinner.stop( $container );\n\n\t\t\t\t\tif ( r.success ) {\n\n\t\t\t\t\t\t$( '.llms-coupon-wrapper' ).replaceWith( r.data.coupon_html );\n\t\t\t\t\t\tself.bind_coupon();\n\n\t\t\t\t\t\t$( '.llms-order-summary' ).replaceWith( r.data.summary_html );\n\n\t\t\t\t\t\t$( '.llms-payment-gateways' ).replaceWith( r.data.gateways_html );\n\t\t\t\t\t\tself.bind_gateways();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Scroll error messages into view\n\t\t *\n\t\t * @return void\n\t\t * @since 3.27.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tthis.focus_errors = function() {\n\t\t\t$( 'html, body' ).animate( {\n\t\t\t\tscrollTop: $( '#llms-checkout-errors' ).offset().top - 50,\n\t\t\t}, 200 );\n\t\t};\n\n\t\t/**\n\t\t * Bind external gateway JS\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.load_gateways = function() {\n\n\t\t\tfor ( var i = 0; i <= gateways.length; i++ ) {\n\t\t\t\tvar g = gateways[i];\n\t\t\t\tif ( typeof g === 'object' && g !== null ) {\n\t\t\t\t\tif ( g.bind !== undefined && 'function' === typeof g.bind ) {\n\t\t\t\t\t\tg.bind();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Start or stop processing events on the checkout form\n\t\t *\n\t\t * @param string action whether to start or stop processing [start|stop]\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.24.1\n\t\t */\n\t\tthis.processing = function( action ) {\n\n\t\t\tvar func, $form;\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'stop':\n\t\t\t\t\tfunc = 'removeClass';\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'start':\n\t\t\t\tdefault:\n\t\t\t\t\tfunc = 'addClass';\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( 'checkout' === this.form_action ) {\n\t\t\t\t$form = this.$checkout_form;\n\t\t\t} else if ( 'confirm' === this.form_action ) {\n\t\t\t\t$form = this.$confirm_form;\n\t\t\t}\n\n\t\t\t$form[ func ]( 'llms-is-processing' );\n\t\t\tLLMS.Spinner[ action ]( this.$form_sections );\n\n\t\t};\n\n\t\t/**\n\t\t * Handles form submission\n\t\t * Calls all validation events in `before_submit[]`\n\t\t * waits for call backs and either displays returned errors\n\t\t * or submits the form when all are successful\n\t\t *\n\t\t * @param obj e JS event object\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.27.0\n\t\t */\n\t\tthis.submit = function( e ) {\n\n\t\t\tvar self = e.data,\n\t\t\t\tnum = before_submit.length,\n\t\t\t\tchecks = 0,\n\t\t\t\tmax_checks = 60000,\n\t\t\t\terrors = [],\n\t\t\t\tfinishes = 0,\n\t\t\t\tsuccesses = 0,\n\t\t\t\tinterval;\n\n\t\t\te.preventDefault();\n\n\t\t\t// add spinners\n\t\t\tself.processing( 'start' );\n\n\t\t\t// remove errors to prevent duplicates\n\t\t\tself.clear_errors();\n\n\t\t\t// start running all the events\n\t\t\tfor ( var i = 0; i < before_submit.length; i++ ) {\n\n\t\t\t\tvar obj = before_submit[ i ];\n\n\t\t\t\tobj.handler( obj.data, function( r ) {\n\n\t\t\t\t\tfinishes++;\n\t\t\t\t\tif ( true === r ) {\n\t\t\t\t\t\tsuccesses++;\n\t\t\t\t\t} else if ( 'string' === typeof r ) {\n\t\t\t\t\t\terrors.push( r );\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\t// run an interval to wait for finishes\n\t\t\tinterval = setInterval( function() {\n\n\t\t\t\tvar clear = false,\n\t\t\t\t\tstop = false;\n\n\t\t\t\t// timeout...\n\t\t\t\tif ( checks >= max_checks ) {\n\n\t\t\t\t\tclear = true;\n\t\t\t\t\tstop = true;\n\n\t\t\t\t} else if ( num === finishes ) {\n\t\t\t\t\t// everything has finished\n\n\t\t\t\t\t// all were successful, submit the form\n\t\t\t\t\tif ( num === successes ) {\n\n\t\t\t\t\t\tclear = true;\n\n\t\t\t\t\t\tself.$checkout_form.off( 'submit', self.submit );\n\t\t\t\t\t\tself.$checkout_form.trigger( 'submit' );\n\n\t\t\t\t\t} else if ( errors.length ) {\n\n\t\t\t\t\t\tclear = true;\n\t\t\t\t\t\tstop = true;\n\n\t\t\t\t\t\tfor ( var i = 0; i < errors.length; i++ ) {\n\t\t\t\t\t\t\tself.add_error( errors[ i ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tself.focus_errors();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( clear ) {\n\t\t\t\t\tclearInterval( interval );\n\t\t\t\t}\n\n\t\t\t\tif ( stop ) {\n\t\t\t\t\tself.processing( 'stop' );\n\t\t\t\t}\n\n\t\t\t\tchecks++;\n\n\t\t\t}, 100 );\n\n\t\t};\n\n\t\t// initialize\n\t\tthis.init();\n\n\t\treturn this;\n\n\t};\n\n\twindow.llms = window.llms || {};\n\twindow.llms.checkout = new llms_checkout();\n\n} )( jQuery );\n"],"names":["$","window","llms","checkout","before_submit","gateways","this","$checkout_form","$confirm_form","$form_sections","form_action","init","self","length","bind_login","find","on","submit","document","querySelector","style","scrollBehavior","add_before_submit_event","data","LLMS","PasswordStrength","handler","bind_coupon","bind_gateways","processing","obj","push","add_error","message","id","$err","prepend","append","console","error","add_gateway","gateway_class","e","preventDefault","slideToggle","coupon_apply","coupon_remove","load_gateways","removeAttr","each","$el","$parent","closest","$fields","checked","is","trigger","val","$selector","attr","$submit","slideUp","slideDown","clear_errors","remove","$btn","code","$messages","$errors","$container","Spinner","start","Ajax","call","action","plan_id","beforeSend","hide","success","r","$message","stop","empty","appendTo","show","replaceWith","coupon_html","gateways_html","summary_html","focus_errors","animate","scrollTop","offset","top","i","g","undefined","bind","$form","func","interval","num","checks","errors","finishes","successes","setInterval","clear","off","clearInterval","jQuery"],"mappings":"AASA,CAAA,SAAYA,GA4jBXC,OAAOC,KAAgBD,OAAOC,MAAQ,GACtCD,OAAOC,KAAKC,SAAW,IA3jBH,WASnB,IAAIC,EAAgB,GAShBC,EAAW,GAoiBf,OAliBAC,KAAKC,eAAiBP,EAAG,6BAA8B,EACvDM,KAAKE,cAAiBR,EAAG,qCAAsC,EAC/DM,KAAKG,eAAiB,CAAA,EACtBH,KAAKI,YAAiB,CAAA,EAYtBJ,KAAKK,KAAO,WAEX,IAAIC,EAAON,KAENN,EAAG,wBAAyB,EAAEa,QAClCP,KAAKQ,WAAW,EAGZR,KAAKC,eAAeM,QAExBP,KAAKI,YAAiB,WACtBJ,KAAKG,eAAiBH,KAAKC,eAAeQ,KAAM,wBAAyB,EAEzET,KAAKC,eAAeS,GAAI,SAAUV,KAAMA,KAAKW,MAAO,EAOpDC,SAASC,cAAe,MAAO,EAAEC,MAAMC,eAAiB,OAGnDrB,EAAG,+BAAgC,EAAEa,QACzCP,KAAKgB,wBAAyB,CAC7BC,KAAMC,KAAKC,iBACXC,QAASF,KAAKC,iBAAiBtB,QAChC,CAAE,EAGHG,KAAKqB,YAAY,EAEjBrB,KAAKsB,cAAc,GAERtB,KAAKE,cAAcK,SAE9BP,KAAKI,YAAiB,UACtBJ,KAAKG,eAAiBH,KAAKE,cAAcO,KAAM,wBAAyB,EAExET,KAAKE,cAAcQ,GAAI,SAAU,WAChCJ,EAAKiB,WAAY,OAAQ,CAC1B,CAAE,EAIJ,EAYAvB,KAAKgB,wBAA0B,SAAUQ,GAEjCA,EAAIJ,SAAW,YAAe,OAAOI,EAAIJ,UAIzCI,EAAIP,OACVO,EAAIP,KAAO,MAGZnB,EAAc2B,KAAMD,CAAI,EAEzB,EAWAxB,KAAK0B,UAAY,SAAUC,EAASV,GAEnC,IAAIW,EAAO,wBACVC,KAAOnC,EAAG,IAAMkC,CAAG,GAERrB,SACXsB,KAAOnC,EAAG,0CAA4CkC,EAAK,MAAO,EAClElC,EAAG,wBAAyB,EAAEoC,QAASD,IAAK,GAG7CA,KAAKE,OAAQ,OAASJ,EAAU,OAAQ,EAEnCV,GACJe,QAAQC,MAAOhB,CAAK,CAGtB,EAUAjB,KAAKkC,YAAc,SAAUC,GAE5BpC,EAAS0B,KAAMU,CAAc,CAE9B,EASAnC,KAAKqB,YAAc,WAElB,IAAIf,EAAON,KAGXN,EAAG,+BAAgC,EAAEgB,GAAI,QAAS,SAAU0B,GAE3DA,EAAEC,eAAe,EACjB3C,EAAG,oBAAqB,EAAE4C,YAAa,GAAI,CAE5C,CAAE,EAGF5C,EAAG,oBAAqB,EAAEgB,GAAI,QAAS,SAAU0B,GAEhDA,EAAEC,eAAe,EACjB/B,EAAKiC,aAAc7C,EAAGM,IAAK,CAAE,CAE9B,CAAE,EAGFN,EAAG,qBAAsB,EAAEgB,GAAI,QAAS,SAAU0B,GAEjDA,EAAEC,eAAe,EACjB/B,EAAKkC,cAAe9C,EAAGM,IAAK,CAAE,CAE/B,CAAE,CAEH,EASAA,KAAKsB,cAAgB,WAEpBtB,KAAKyC,cAAc,EAEZ/C,EAAG,oCAAqC,EAAEa,QAChDb,EAAG,4BAA6B,EAAEgD,WAAY,UAAW,EAI1DhD,EAAG,oCAAqC,EAAEgB,GAAI,SAAU,WAEvDhB,EAAG,oCAAqC,EAAEiD,KAAM,WAE/C,IAAIC,EAAelD,EAAGM,IAAK,EAC1B6C,EAAeD,EAAIE,QAAS,uBAAwB,EACpDC,EAAeF,EAAQpC,KAAM,sBAAuB,EAAEA,KAAM,yBAA0B,EACtFuC,EAAeJ,EAAIK,GAAI,UAAW,EAGnCJ,EAFgB,EAAc,WAAa,eAElB,aAAc,EAElCG,GAGJD,EAAQL,WAAY,UAAW,EAG/BhD,EAAG,wBAAyB,EAAEwD,QAAS,wBAAyB,CAC/DtB,GAAIgB,EAAIO,IAAI,EACZC,UAAWP,CACZ,CAAE,GAKFE,EAAQM,KAAM,WAAY,UAAW,CAIvC,CAAE,CAEH,CAAE,EAGF3D,EAAG,wBAAyB,EAAEgB,GAAI,wBAAyB,SAAU0B,EAAGnB,GAEvE,IAAIqC,EAAU5D,EAAG,4BAA6B,EAEzCuB,EAAKmC,WAAanC,EAAKmC,UAAU3C,KAAM,+BAAgC,EAAEF,OAC7E+C,EAAQD,KAAM,WAAY,UAAW,EAErCC,EAAQZ,WAAY,UAAW,CAGjC,CAAE,CAEH,EAUA1C,KAAKQ,WAAa,WAEjBd,EAAG,4BAA6B,EAAEgB,GAAI,QAAS,SAAU0B,GAExDA,EAAEC,eAAe,EACjB3C,EAAGM,IAAK,EAAE8C,QAAS,yBAA0B,EAAES,QAAS,GAAI,EAC5D7D,EAAG,iBAAkB,EAAE8D,UAAW,GAAI,CAEvC,CAAE,CACH,EASAxD,KAAKyD,aAAe,WACnB/D,EAAG,uBAAwB,EAAEgE,OAAO,CACrC,EAaA1D,KAAKuC,aAAe,SAAWoB,GAE9B,IAAIrD,EAAaN,KAEhB4D,EADalE,EAAG,mBAAoB,EACjByD,IAAI,EACvBU,EAAanE,EAAG,uBAAwB,EACxCoE,EAAaD,EAAUpD,KAAM,aAAc,EAC3CsD,EAAarE,EAAG,oBAAqB,EAEtCwB,KAAK8C,QAAQC,MAAOF,CAAW,EAE/BpE,OAAOuB,KAAKgD,KAAKC,KAAM,CACtBlD,KAAM,CACLmD,OAAQ,uBACRR,KAAMA,EACNS,QAAS3E,EAAG,eAAgB,EAAEyD,IAAI,CACnC,EACAmB,WAAY,WAEXR,EAAQS,KAAK,CAEd,EACAC,QAAS,SAAUC,GAIlB,IAEKC,EAJLxD,KAAK8C,QAAQW,KAAMZ,CAAW,EAEzB,UAAYU,EAAEb,MAEdc,EAAWhF,EAAG,OAAS+E,EAAE9C,QAAU,OAAQ,EAExCmC,EAAQvD,OAOduD,EAAQc,MAAM,GALdd,EAAUpE,EAAG,uCAAwC,EACrDmE,EAAU9B,OAAQ+B,CAAQ,GAQ3BY,EAASG,SAAUf,CAAQ,EAC3BA,EAAQgB,KAAK,GAEFL,EAAED,UAEb9E,EAAG,sBAAuB,EAAEqF,YAAaN,EAAExD,KAAK+D,WAAY,EAC5D1E,EAAKe,YAAY,EAEjB3B,EAAG,wBAAyB,EAAEqF,YAAaN,EAAExD,KAAKgE,aAAc,EAChE3E,EAAKgB,cAAc,EAEnB5B,EAAG,qBAAsB,EAAEqF,YAAaN,EAAExD,KAAKiE,YAAa,EAI9D,CAED,CAAE,CAEH,EAWAlF,KAAKwC,cAAgB,SAAUmB,GAE9B,IAAIrD,EAAaN,KAChB+D,EAAarE,EAAG,oBAAqB,EAEtCwB,KAAK8C,QAAQC,MAAOF,CAAW,EAE/BpE,OAAOuB,KAAKgD,KAAKC,KAAM,CACtBlD,KAAM,CACLmD,OAAQ,qBACRC,QAAS3E,EAAG,eAAgB,EAAEyD,IAAI,CACnC,EACAqB,QAAS,SAAUC,GAElBvD,KAAK8C,QAAQW,KAAMZ,CAAW,EAEzBU,EAAED,UAEN9E,EAAG,sBAAuB,EAAEqF,YAAaN,EAAExD,KAAK+D,WAAY,EAC5D1E,EAAKe,YAAY,EAEjB3B,EAAG,qBAAsB,EAAEqF,YAAaN,EAAExD,KAAKiE,YAAa,EAE5DxF,EAAG,wBAAyB,EAAEqF,YAAaN,EAAExD,KAAKgE,aAAc,EAChE3E,EAAKgB,cAAc,EAIrB,CAED,CAAE,CAEH,EASAtB,KAAKmF,aAAe,WACnBzF,EAAG,YAAa,EAAE0F,QAAS,CAC1BC,UAAW3F,EAAG,uBAAwB,EAAE4F,OAAO,EAAEC,IAAM,EACxD,EAAG,GAAI,CACR,EASAvF,KAAKyC,cAAgB,WAEpB,IAAM,IAAI+C,EAAI,EAAGA,GAAKzF,EAASQ,OAAQiF,CAAC,GAAK,CAC5C,IAAIC,EAAI1F,EAASyF,GACC,UAAb,OAAOC,GAAwB,OAANA,GACbC,KAAAA,IAAXD,EAAEE,MAAsB,YAAe,OAAOF,EAAEE,MACpDF,EAAEE,KAAK,CAGV,CACD,EAUA3F,KAAKuB,WAAa,SAAU6C,GAE3B,IAAUwB,EAKRC,EADI,SAFGzB,EAGA,cAKA,WAKJ,aAAepE,KAAKI,YACxBwF,EAAQ5F,KAAKC,eACF,YAAcD,KAAKI,cAC9BwF,EAAQ5F,KAAKE,eAGd0F,EAAOC,GAAQ,oBAAqB,EACpC3E,KAAK8C,QAASI,GAAUpE,KAAKG,cAAe,CAE7C,EAaAH,KAAKW,OAAS,SAAUyB,GAEvB,IAOC0D,EAPGxF,EAAa8B,EAAEnB,KAClB8E,EAAajG,EAAcS,OAC3ByF,EAAa,EAEbC,EAAa,GACbC,EAAa,EACbC,EAAa,EAGd/D,EAAEC,eAAe,EAGjB/B,EAAKiB,WAAY,OAAQ,EAGzBjB,EAAKmD,aAAa,EAGlB,IAAM,IAAI+B,EAAI,EAAGA,EAAI1F,EAAcS,OAAQiF,CAAC,GAAK,CAEhD,IAAIhE,EAAM1B,EAAe0F,GAEzBhE,EAAIJ,QAASI,EAAIP,KAAM,SAAUwD,GAEhCyB,CAAQ,GACH,CAAA,IAASzB,EACb0B,CAAS,GACE,UAAa,OAAO1B,GAC/BwB,EAAOxE,KAAMgD,CAAE,CAGjB,CAAE,CAEH,CAGAqB,EAAWM,YAAa,WAEvB,IAAIC,EAAQ,CAAA,EACX1B,EAAQ,CAAA,EAGT,GAvCa,KAuCRqB,EAGJrB,EADA0B,EAAQ,CAAA,OAGF,GAAKN,IAAQG,EAInB,GAAKH,IAAQI,EAEZE,EAAQ,CAAA,EAER/F,EAAKL,eAAeqG,IAAK,SAAUhG,EAAKK,MAAO,EAC/CL,EAAKL,eAAeiD,QAAS,QAAS,OAEhC,GAAK+C,EAAO1F,OAAS,CAK3B,IAAM,IAHN8F,EAAQ,CAAA,EACR1B,EAAQ,CAAA,EAEEa,EAAI,EAAGA,EAAIS,EAAO1F,OAAQiF,CAAC,GACpClF,EAAKoB,UAAWuE,EAAQT,EAAI,EAG7BlF,EAAK6E,aAAa,CAEnB,CAIIkB,GACJE,cAAeT,CAAS,EAGpBnB,GACJrE,EAAKiB,WAAY,MAAO,EAGzByE,CAAM,EAEP,EAAG,GAAI,CAER,EAGAhG,KAAKK,KAAK,EAEHL,IAER,CAKC,EAAGwG,MAAO","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-metabox-achievement.min.js.map b/assets/maps/js/llms-metabox-achievement.min.js.map
new file mode 100644
index 0000000000..e54a7699f7
--- /dev/null
+++ b/assets/maps/js/llms-metabox-achievement.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-metabox-achievement.min.js","sources":["llms-metabox-achievement.js"],"sourcesContent":["( function( $ ) {\n\n\t// Open Media Manager modal.\n\t$( '.achievement_image_button' ).click( function( e ) {\n\n\t\t// Create Media Manager On Click to allow multiple on one Page\n\t\tvar achievement_uploader;\n\n\t\te.preventDefault();\n\n\t\t// Setup the Variables based on the Button Clicked to enable multiple\n\t\tvar achievement_img_input_id = '#' + this.id + '.upload_achievement_image';\n\t\tvar achievement_img_src = 'img#' + this.id + '.llms_achievement_image';\n\n\t\t// If the uploader object has already been created, reopen the dialog\n\t\tif (achievement_uploader) {\n\t\t\tachievement_uploader.open();\n\t\t\treturn;\n\t\t}\n\n\t\t// Extend the wp.media object\n\t\tachievement_uploader = wp.media.frames.file_frame = wp.media({\n\t\t\ttitle: 'Choose Achievement Image',\n\t\t\tbutton: {\n\t\t\t\ttext: 'Choose Achievement'\n\t\t\t},\n\t\t\tmultiple: false\n\t\t});\n\n\t\t// When a file is selected, grab the URL and set it as the text field's value\n\t\tachievement_uploader.on('select', function() {\n\t\t\tattachment = achievement_uploader.state().get( 'selection' ).first().toJSON();\n\t\t\t// Set the Field with the Image ID\n\t\t\t$( achievement_img_input_id ).val( attachment.id );\n\t\t\t// Set the Sample Image with the URL\n\t\t\t$( achievement_img_src ).attr( 'src', attachment.url );\n\n\t\t});\n\n\t\t// Open the uploader dialog\n\t\tachievement_uploader.open();\n\n\t});\n\n\t// Remove Image and replace with default and Erase Image ID for achievement\n\t$( '.llms_achievement_clear_image_button' ).click(function(e) {\n\t\te.preventDefault();\n\t\tvar achievement_remove_input_id = 'input#' + this.id + '.upload_achievement_image';\n\t\tvar achievement_img_src = 'img#' + this.id + '.llms_achievement_image';\n\t\tvar achievement_default_img_src = $( 'img#' + this.id + '.llms_achievement_default_image' ).attr( \"src\" );\n\n\t\t$( achievement_remove_input_id ).val( '' );\n\t\t$( achievement_img_src ).attr( 'src', achievement_default_img_src );\n\t});\n\n} )( jQuery );\n"],"names":["$","click","e","preventDefault","achievement_img_input_id","this","id","achievement_img_src","achievement_uploader","wp","media","frames","file_frame","title","button","text","multiple","on","attachment","state","get","first","toJSON","val","attr","url","open","achievement_remove_input_id","achievement_default_img_src","jQuery"],"mappings":"AAAA,CAAA,SAAYA,GAGXA,EAAG,2BAA4B,EAAEC,MAAO,SAAUC,GAKjDA,EAAEC,eAAe,EAFjB,IAKIC,EAA2B,IAAMC,KAAKC,GAAK,4BAC3CC,EAA2B,OAASF,KAAKC,GAAK,0BASlDE,EAAuBC,GAAGC,MAAMC,OAAOC,WAAaH,GAAGC,MAAM,CAC5DG,MAAO,2BACPC,OAAQ,CACPC,KAAM,oBACP,EACAC,SAAU,CAAA,CACX,CAAC,EAGDR,EAAqBS,GAAG,SAAU,WACjCC,WAAaV,EAAqBW,MAAM,EAAEC,IAAK,WAAY,EAAEC,MAAM,EAAEC,OAAO,EAE5EtB,EAAGI,CAAyB,EAAEmB,IAAKL,WAAWZ,EAAG,EAEjDN,EAAGO,CAAoB,EAAEiB,KAAM,MAAON,WAAWO,GAAI,CAEtD,CAAC,EAGDjB,EAAqBkB,KAAK,CAE3B,CAAC,EAGD1B,EAAG,sCAAuC,EAAEC,MAAM,SAASC,GAC1DA,EAAEC,eAAe,EACjB,IAAIwB,EAA8B,SAAWtB,KAAKC,GAAK,4BACnDC,EAA8B,OAASF,KAAKC,GAAK,0BACjDsB,EAA8B5B,EAAG,OAASK,KAAKC,GAAK,iCAAkC,EAAEkB,KAAM,KAAM,EAExGxB,EAAG2B,CAA4B,EAAEJ,IAAK,EAAG,EACzCvB,EAAGO,CAAoB,EAAEiB,KAAM,MAAOI,CAA4B,CACnE,CAAC,CAEA,EAAGC,MAAO","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-metabox-certificate.min.js.map b/assets/maps/js/llms-metabox-certificate.min.js.map
new file mode 100644
index 0000000000..e2c28c7224
--- /dev/null
+++ b/assets/maps/js/llms-metabox-certificate.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-metabox-certificate.min.js","sources":["llms-metabox-certificate.js"],"sourcesContent":["jQuery( document ).ready(function($){\n\n\t$( '.certificate_image_button' ).click(function(e) {\n\n\t\t// Create Media Manager On Click to allow multiple on one Page\n\t\tvar certificate_uploader;\n\n\t\te.preventDefault();\n\n\t\t// Setup the Variables based on the Button Clicked to enable multiple\n\t\tvar certificate_img_input_id = '#' + this.id + '.upload_certificate_image';\n\t\tvar certificate_img_src = 'img#' + this.id + '.llms_certificate_image';\n\n\t\t// If the uploader object has already been created, reopen the dialog\n\t\tif (certificate_uploader) {\n\t\t\tcertificate_uploader.open();\n\t\t\treturn;\n\t\t}\n\n\t\t// Extend the wp.media object\n\t\tcertificate_uploader = wp.media.frames.file_frame = wp.media({\n\t\t\ttitle: 'Choose Certificate Image',\n\t\t\tbutton: {\n\t\t\t\ttext: 'Choose Certificate'\n\t\t\t},\n\t\t\tmultiple: false\n\t\t});\n\n\t\t// When a file is selected, grab the URL and set it as the text field's value\n\t\tcertificate_uploader.on('select', function() {\n\t\t\tattachment = certificate_uploader.state().get( 'selection' ).first().toJSON();\n\t\t\t// Set the Field with the Image ID\n\t\t\t$( certificate_img_input_id ).val( attachment.id );\n\t\t\t// Set the Sample Image with the URL\n\t\t\t$( certificate_img_src ).attr( 'src', attachment.url );\n\n\t\t});\n\n\t\t// Open the uploader dialog\n\t\tcertificate_uploader.open();\n\n\t});\n\n});\n/*\n* Media Manager 3.5\n* @version 1.70\n*/\njQuery( document ).ready(function($){\n\t// Remove Image and replace with default and Erase Image ID for Certificate\n\t$( '.llms_certificate_clear_image_button' ).click(function(e) {\n\t\te.preventDefault();\n\t\tvar certificate_remove_input_id = 'input#' + this.id + '.upload_certificate_image';\n\t\tvar certificate_img_src = 'img#' + this.id + '.llms_certificate_image';\n\t\tvar certificate_default_img_src = $( 'img#' + this.id + '.llms_certificate_default_image' ).attr( \"src\" );\n\n\t\t$( certificate_remove_input_id ).val( '' );\n\t\t$( certificate_img_src ).attr( 'src', certificate_default_img_src );\n\t});\n\n});\n"],"names":["jQuery","document","ready","$","click","e","preventDefault","certificate_img_input_id","this","id","certificate_img_src","certificate_uploader","wp","media","frames","file_frame","title","button","text","multiple","on","attachment","state","get","first","toJSON","val","attr","url","open","certificate_remove_input_id","certificate_default_img_src"],"mappings":"AAAAA,OAAQC,QAAS,EAAEC,MAAM,SAASC,GAEjCA,EAAG,2BAA4B,EAAEC,MAAM,SAASC,GAK/CA,EAAEC,eAAe,EAFjB,IAKIC,EAA2B,IAAMC,KAAKC,GAAK,4BAC3CC,EAA2B,OAASF,KAAKC,GAAK,0BASlDE,EAAuBC,GAAGC,MAAMC,OAAOC,WAAaH,GAAGC,MAAM,CAC5DG,MAAO,2BACPC,OAAQ,CACPC,KAAM,oBACP,EACAC,SAAU,CAAA,CACX,CAAC,EAGDR,EAAqBS,GAAG,SAAU,WACjCC,WAAaV,EAAqBW,MAAM,EAAEC,IAAK,WAAY,EAAEC,MAAM,EAAEC,OAAO,EAE5EtB,EAAGI,CAAyB,EAAEmB,IAAKL,WAAWZ,EAAG,EAEjDN,EAAGO,CAAoB,EAAEiB,KAAM,MAAON,WAAWO,GAAI,CAEtD,CAAC,EAGDjB,EAAqBkB,KAAK,CAE3B,CAAC,CAEF,CAAC,EAKD7B,OAAQC,QAAS,EAAEC,MAAM,SAASC,GAEjCA,EAAG,sCAAuC,EAAEC,MAAM,SAASC,GAC1DA,EAAEC,eAAe,EACjB,IAAIwB,EAA8B,SAAWtB,KAAKC,GAAK,4BACnDC,EAA8B,OAASF,KAAKC,GAAK,0BACjDsB,EAA8B5B,EAAG,OAASK,KAAKC,GAAK,iCAAkC,EAAEkB,KAAM,KAAM,EAExGxB,EAAG2B,CAA4B,EAAEJ,IAAK,EAAG,EACzCvB,EAAGO,CAAoB,EAAEiB,KAAM,MAAOI,CAA4B,CACnE,CAAC,CAEF,CAAC","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-metabox-fields.min.js.map b/assets/maps/js/llms-metabox-fields.min.js.map
new file mode 100644
index 0000000000..3ce34a311b
--- /dev/null
+++ b/assets/maps/js/llms-metabox-fields.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-metabox-fields.min.js","sources":["llms-metabox-fields.js"],"sourcesContent":["/**\n * Global admin functions.\n *\n * @since Unknown\n * @version 3.35.0\n */\n\n( function( $ ){\n\n\t// Toggle sales price settings.\n\tclear_fields = function (fields) {\n\t\tvar fields = fields;\n\n\t\t$.each( fields, function( i, val ) {\n\t\t\t$( val ).val( '' );\n\t\t});\n\t}\n\n\t// Load ajax animation functionality\n\tload_ajax_animation = function() {\n\t\t$( '#loading' ).hide();\n\n\t\t$( document ).ajaxStop(function(){\n\t\t\t$( '#loading' ).hide();\n\t\t});\n\n\t\t$( document ).ajaxStart(function(){\n\t\t\t$( '#loading' ).show();\n\t\t});\n\t}\n\n} )( jQuery );\n"],"names":["$","clear_fields","fields","each","i","val","load_ajax_animation","hide","document","ajaxStop","ajaxStart","show","jQuery"],"mappings":"AAOA,CAAA,SAAYA,GAGXC,aAAe,SAAUC,GAGxBF,EAAEG,KAAMD,EAAQ,SAAUE,EAAGC,GAC5BL,EAAGK,CAAI,EAAEA,IAAK,EAAG,CAClB,CAAC,CACF,EAGAC,oBAAsB,WACrBN,EAAG,UAAW,EAAEO,KAAK,EAErBP,EAAGQ,QAAS,EAAEC,SAAS,WACtBT,EAAG,UAAW,EAAEO,KAAK,CACtB,CAAC,EAEDP,EAAGQ,QAAS,EAAEE,UAAU,WACvBV,EAAG,UAAW,EAAEW,KAAK,CACtB,CAAC,CACF,CAEC,EAAGC,MAAO","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-metabox-instructors.min.js.map b/assets/maps/js/llms-metabox-instructors.min.js.map
new file mode 100644
index 0000000000..344cb7045a
--- /dev/null
+++ b/assets/maps/js/llms-metabox-instructors.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-metabox-instructors.min.js","sources":["llms-metabox-instructors.js"],"sourcesContent":["/**\n * Instructors Metabox\n *\n * @since 3.13.0\n * @version 3.13.0\n */\n( function( $ ) {\n\n\twindow.llms = window.llms || {};\n\n\twindow.llms.metabox_instructors = function() {\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t * @since 3.13.0\n\t\t * @version 3.13.0\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\t// before saving, update the wp core hidden field for post_author\n\t\t\t// so that the first instructor is always set as the post author\n\t\t\t$( '._llms_instructors_data.repeater' ).on( 'llms-repeater-before-save', function( e, params ) {\n\t\t\t\tvar author_id = params.$el.find( '.llms-repeater-rows .llms-repeater-row' ).first().find( 'select[name^=\"_llms_id\"]' ).val();\n\t\t\t\t$( '#post_author' ).val( author_id );\n\t\t\t} );\n\n\t\t\t$( '._llms_instructors_data.repeater' ).on( 'llms-new-repeater-row', function( e, params ) {\n\n\t\t\t\tvar $instructor = params.$row.find( 'select[name^=\"_llms_id\"]' ),\n\t\t\t\t\t$target = params.$row.find( '.llms-repeater-title' );\n\n\t\t\t\t$instructor.on( 'select2:select', function( e ) {\n\t\t\t\t\tif ( ! e.params ) {\n\t\t\t\t\t\t$target.html( $instructor.find( 'option[selected=\"selected\"]' ).html() );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$target.text( e.params.data.text );\n\t\t\t\t\t}\n\t\t\t\t} ).trigger( 'select2:select' );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// go\n\t\tthis.init();\n\n\t};\n\n\tvar a = new window.llms.metabox_instructors();\n\n} )( jQuery );\n"],"names":["$","window","llms","metabox_instructors","this","init","on","e","params","author_id","$el","find","first","val","$instructor","$row","$target","text","data","html","trigger","jQuery"],"mappings":"AAMA,CAAA,SAAYA,GAEXC,OAAOC,KAAOD,OAAOC,MAAQ,GAE7BD,OAAOC,KAAKC,oBAAsB,WASjCC,KAAKC,KAAO,WAIXL,EAAG,kCAAmC,EAAEM,GAAI,4BAA6B,SAAUC,EAAGC,GACjFC,EAAYD,EAAOE,IAAIC,KAAM,wCAAyC,EAAEC,MAAM,EAAED,KAAM,0BAA2B,EAAEE,IAAI,EAC3Hb,EAAG,cAAe,EAAEa,IAAKJ,CAAU,CACpC,CAAE,EAEFT,EAAG,kCAAmC,EAAEM,GAAI,wBAAyB,SAAUC,EAAGC,GAEjF,IAAIM,EAAcN,EAAOO,KAAKJ,KAAM,0BAA2B,EAC9DK,EAAcR,EAAOO,KAAKJ,KAAM,sBAAuB,EAExDG,EAAYR,GAAI,iBAAkB,SAAUC,GACpCA,EAAEC,OAGRQ,EAAQC,KAAMV,EAAEC,OAAOU,KAAKD,IAAK,EAFjCD,EAAQG,KAAML,EAAYH,KAAM,6BAA8B,EAAEQ,KAAK,CAAE,CAIzE,CAAE,EAAEC,QAAS,gBAAiB,CAE/B,CAAE,CAEH,EAGAhB,KAAKC,KAAK,CAEX,EAEQ,IAAIJ,OAAOC,KAAKC,mBAEvB,EAAGkB,MAAO","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-metabox-product.min.js.map b/assets/maps/js/llms-metabox-product.min.js.map
new file mode 100644
index 0000000000..734052264f
--- /dev/null
+++ b/assets/maps/js/llms-metabox-product.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-metabox-product.min.js","sources":["llms-metabox-product.js"],"sourcesContent":["/**\n * Product Options MetaBox.\n *\n * Displays on Course & Membership Post Types.\n *\n * @since 3.0.0\n * @since 3.30.3 Unknown.\n * @since 3.36.3 Fixed conflicts with the Classic Editor block.\n * @version 7.3.0\n */\n( function( $ ) {\n\n\twindow.llms = window.llms || {};\n\n\twindow.llms.metabox_product = function() {\n\n\t\t/**\n\t\t * jQuery obj for the main $( '#llms-access-plans' ) element.\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tthis.$plans = null;\n\n\t\t/**\n\t\t * jQuery obj for the main $( '#llms-save-access-plans' ) save button element.\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\tthis.$save = null;\n\n\t\t/**\n\t\t * A randomly generated temporary ID used for the tinyMCE editor's id\n\t\t * when a new plan is added\n\t\t *\n\t\t * @type int\n\t\t */\n\t\tthis.temp_id = Math.floor( ( Math.random() * 7777 ) + 777 );\n\n\t\t/**\n\t\t * CSS class name used to highlight validation errors for plan fields\n\t\t *\n\t\t * @type string\n\t\t */\n\t\tthis.validation_class = 'llms-invalid';\n\n\t\t/**\n\t\t * Initialize.\n\t\t *\n\t\t * @param bool skip_dep_checks If true, skips dependency checks.\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.29.3 Unknown.\n\t\t * @since 7.3.0 Check on whether access plans require attention.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tthis.init = function( skip_dep_checks ) {\n\n\t\t\tvar self = this;\n\n\t\t\tself.$plans = $( '#llms-access-plans' );\n\t\t\tself.$save = $( '#llms-save-access-plans' );\n\n\t\t\tself.bind_visibility();\n\n\t\t\tvar $mb = $( '#lifterlms-product #llms-product-options-access-plans' );\n\n\t\t\tif ( ! $mb.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check whether the warning icon should be displayed.\n\t\t\tself.requiresAttention();\n\n\t\t\tif ( skip_dep_checks ) {\n\t\t\t\tself.bind();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tLLMS.Spinner.start( $mb );\n\n\t\t\t// we rely on TinyMCE but WordPress doesn't register TinyMCE\n\t\t\t// like every other admin script so we'll do a little dependency check here...\n\t\t\tvar counter = 0,\n\t\t\t\tinterval;\n\n\t\t\tinterval = setInterval( function() {\n\n\t\t\t\t// if we get to 30 seconds display an error message\n\t\t\t\tif ( counter >= 300 ) {\n\n\t\t\t\t\t$mb.html( LLMS.l10n.translate( 'There was an error loading the necessary resources. Please try again.' ) );\n\n\t\t\t\t}\n\t\t\t\t// if we can't access tinyMCE, increment and wait...\n\t\t\t\telse if ( 'undefined' === typeof tinyMCE ) {\n\n\t\t\t\t\tcounter++;\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\t\t\t\t// bind the events, we're good!\n\t\t\t\telse {\n\n\t\t\t\t\tself.bind();\n\n\t\t\t\t}\n\n\t\t\t\tclearInterval( interval );\n\t\t\t\tLLMS.Spinner.stop( $mb );\n\n\t\t\t}, 100 );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind DOM Events.\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.30.0 Add checkout redirect fields events.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tthis.bind = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tsetTimeout( function() {\n\t\t\t\tif ( self.has_plan_limit_been_reached() ) {\n\t\t\t\t\tself.toggle_create_button( 'disable' );\n\t\t\t\t}\n\t\t\t}, 500 );\n\n\t\t\tif ( 0 === self.get_current_plan_count() ) {\n\t\t\t\tself.toggle_save_button( 'disable' );\n\t\t\t}\n\n\t\t\t// save access plans button.\n\t\t\tself.$save.on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.save_plans();\n\t\t\t} );\n\n\t\t\t// bind change events to form element that controls another form element\n\t\t\tself.$plans.on( 'change', '[data-controller-id]', function() {\n\t\t\t\tself.controller_change( $( this ) );\n\t\t\t} );\n\n\t\t\t// @todo Replace this with multiple data-controller functionality in llms-metaboxes.js\n\t\t\tself.$plans.on( 'change', 'select[name$=\"[availability]\"]', function() {\n\t\t\t\tvar $plan_container = $( this ).closest( '.llms-access-plan' ),\n\t\t\t\t\t$plan_redirect_forced = $plan_container.find( 'input[name$=\"[checkout_redirect_forced]\"]' ),\n\t\t\t\t\t$plan_redirect_settings = $plan_container.find( '.llms-checkout-redirect-settings' );\n\n\t\t\t\tif ( 'members' === $( this ).val() ) {\n\t\t\t\t\tif ( ! $plan_redirect_forced.prop( 'checked' ) ) {\n\t\t\t\t\t\t$plan_redirect_settings.hide();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$plan_redirect_settings.show();\n\t\t\t\t\t}\n\n\t\t\t\t\t$plan_redirect_forced.on( 'change', function() {\n\t\t\t\t\t\t$plan_redirect_settings.toggle();\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\t\t\t\t\t$plan_redirect_forced.off( 'change' );\n\t\t\t\t\t$plan_redirect_settings.show();\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t$( '#llms-access-plans .llms-access-plan-datepicker' ).datepicker( {\n\t\t\t\tdateFormat: \"mm/dd/yy\"\n\t\t\t} );\n\n\t\t\t// trigger changes on load for all existing plans\n\t\t\t$( '#llms-access-plans [data-controller-id]' ).trigger( 'change' );\n\n\t\t\t// add a new empty plan interface on new plan button click.\n\t\t\t$( '#llms-new-access-plan' ).on( 'click', function() {\n\t\t\t\tself.init_plan();\n\t\t\t\tself.toggle_create_button( 'disable' );\n\t\t\t\tself.toggle_save_button( 'enable' );\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tif ( ! self.has_plan_limit_been_reached() ) {\n\t\t\t\t\t\tself.toggle_create_button( 'enable' );\n\t\t\t\t\t}\n\t\t\t\t}, 500 );\n\t\t\t} );\n\n\t\t\tself.$plans.sortable( {\n\t\t\t\thandle: '.llms-drag-handle',\n\t\t\t\titems: '.llms-access-plan',\n\t\t\t\tstart: function( event, ui ) {\n\t\t\t\t\tself.$plans.addClass( 'dragging' );\n\t\t\t\t},\n\t\t\t\tstop: function( event, ui ) {\n\t\t\t\t\tself.$plans.removeClass( 'dragging' );\n\t\t\t\t\tself.update_plan_orders();\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t// bind text entered into the title to the displayed title for fancy fun\n\t\t\tself.$plans.on( 'keyup', 'input.llms-plan-title', function( ) {\n\n\t\t\t\tvar $input = $( this ),\n\t\t\t\t\t$plan = $input.closest( '.llms-access-plan' ),\n\t\t\t\t\t$display = $plan.find( 'span.llms-plan-title' ),\n\t\t\t\t\tval = $input.val(),\n\t\t\t\t\ttitle = ( val ) ? val : $display.attr( 'data-default' );\n\n\t\t\t\t$display.text( title );\n\n\t\t\t} );\n\n\t\t\t// Record that a field has been focused so we can tweak validation to only validate \"edited\" fields.\n\t\t\tself.$plans.on( 'focusin', 'input', function( e, data ) {\n\t\t\t\t$( this ).addClass( 'llms-has-been-focused' );\n\t\t\t} );\n\n\t\t\t// Validate a single input field\n\t\t\tself.$plans.on( 'keyup focusout llms-validate-plan-field', 'input', function( e, data ) {\n\n\t\t\t\tvar $input = $( this );\n\n\t\t\t\tif ( $input[0].checkValidity() ) {\n\t\t\t\t\t$input.removeClass( self.validation_class );\n\t\t\t\t} else {\n\t\t\t\t\t$input.addClass( self.validation_class );\n\t\t\t\t\tif ( 'keyup' === e.type ) {\n\t\t\t\t\t\t$input[0].reportValidity();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( ! data || data.cascade ) {\n\t\t\t\t\t$input.closest( '.llms-access-plan' ).trigger( 'llms-validate-plan', { original_event: e.type } );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tself.$plans.on( 'llms-validate-plan', '.llms-access-plan', function( e, data ) {\n\n\t\t\t\tdata = data || {};\n\n\t\t\t\tvar $plan = $( this ),\n\t\t\t\t\t// only validate \"edited\" fields during cascading validation from input validations.\n\t\t\t\t\tselector = data.original_event ? 'input.llms-has-been-focused' : 'input';\n\n\t\t\t\t$plan.find( selector ).each( function() {\n\t\t\t\t\t$( this ).trigger( 'llms-validate-plan-field', { cascade: false } );\n\t\t\t\t} );\n\n\t\t\t\tif ( $plan.find( '.' + self.validation_class ).length ) {\n\t\t\t\t\t$plan.addClass( self.validation_class );\n\t\t\t\t} else {\n\t\t\t\t\t$plan.removeClass( self.validation_class );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tself.$plans.on( 'llms-collapsible-toggled', '.llms-access-plan', function() {\n\n\t\t\t\tvar $plan = $( this );\n\n\t\t\t\tif ( $plan.hasClass( 'opened' ) ) {\n\t\t\t\t\t// wait for animation to complete to prevent focusable errors in the console.\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t$plan.find( 'input.llms-invalid' ).each( function() {\n\t\t\t\t\t\t\t$( this )[0].reportValidity();\n\t\t\t\t\t\t} );\n\t\t\t\t\t}, 500 );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tself.$plans.on( 'click', '.llms-plan-delete', function( e ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tself.delete_plan( $( this ) );\n\t\t\t} );\n\n\t\t\t// select2ify membership availability fields\n\t\t\twindow.llms.metaboxes.post_select( $( '#llms-access-plans .llms-availability-restrictions' ) );\n\n\t\t\t// select2ify redirection page fields\n\t\t\twindow.llms.metaboxes.post_select( $( '#llms-access-plans .llms-checkout-redirect-page' ) );\n\n\t\t\t// disable the textarea generated by the wp_editor function\n\t\t\t// can't figure out how to do this during initialization\n\t\t\t$( '#_llms_plans_content_llms-new-access-plan-model' ).attr( 'disabled', 'disabled' );\n\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, '_llms_plans_content_llms-new-access-plan-model' );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind DOM events for editing product visibility\n\t\t *\n\t\t * @return void\n\t\t * @since 3.6.0\n\t\t * @version 3.6.0\n\t\t */\n\t\tthis.bind_visibility = function() {\n\n\t\t\tvar $radios = $( '#llms-catalog-visibility-select' ),\n\t\t\t\t$toggle = $( 'a.llms-edit-catalog-visibility' ),\n\t\t\t\t$save = $( 'a.llms-save-catalog-visibility' ),\n\t\t\t\t$cancel = $( 'a.llms-cancel-catalog-visibility' );\n\n\t\t\t$toggle.on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$radios.slideDown( 'fast' );\n\t\t\t\t$toggle.hide();\n\t\t\t} );\n\n\t\t\t$save.on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$radios.slideUp( 'fast' );\n\t\t\t\t$toggle.show();\n\t\t\t\t$( '#llms-catalog-visibility-display' ).text( $( 'input[name=\"_llms_visibility\"]:checked' ).attr( 'data-label' ) );\n\t\t\t} );\n\n\t\t\t$cancel.on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$radios.slideUp( 'fast' );\n\t\t\t\t$toggle.show();\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Checks whether the access plan requires attention, e.g. because it contains notices.\n\t\t *\n\t\t * And if so adds the class `llms-needs-attention` to the access plan.\n\t\t *\n\t\t * @since 7.3.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tthis.requiresAttention = function() {\n\t\t\tvar self = this;\n\t\t\tself.$plans.find( '.llms-access-plan' ).each(\n\t\t\t\tfunction() {\n\t\t\t\t\t$(this).toggleClass( 'llms-needs-attention', $(this).find('p.notice').length > 0 );\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Handle physical deletion of a plan element\n\t\t * If the plan hasn't be persisted to the database it's removed from the dom\n\t\t * if it already exists in the database a confirm modal is displayed\n\t\t * upon confirmation AJAX call will be made to move the plan to the trash\n\t\t * and upon success the element will be removed from the dom\n\t\t *\n\t\t * @param obj $btn jQuery selector of the \"X\" button clicked to initiate deletion\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.29.1\n\t\t */\n\t\tthis.delete_plan = function( $btn ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$plan = $btn.closest( '.llms-access-plan' ),\n\t\t\t\tplan_id = $plan.attr( 'data-id' ),\n\t\t\t\twarning = LLMS.l10n.translate( 'After deleting this access plan, any students subscribed to this plan will still have access and will continue to make recurring payments according to the access plan\\'s settings. If you wish to terminate their plans you must do so manually. This action cannot be reversed.' );\n\n\t\t\t// if there's no ID just remove the element from the DOM\n\t\t\tif ( ! plan_id ) {\n\n\t\t\t\tself.remove_plan_el( $plan );\n\n\t\t\t\t// Throw a confirmation warning\n\t\t\t} else if ( window.confirm( warning ) ) {\n\n\t\t\t\tLLMS.Spinner.start( $plan );\n\t\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'delete_access_plan',\n\t\t\t\t\t\tplan_id: plan_id,\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\tLLMS.Spinner.stop( $plan );\n\t\t\t\t\t\t}, 550 );\n\t\t\t\t\t\tif ( r.success ) {\n\t\t\t\t\t\t\tself.remove_plan_el( $plan );\n\t\t\t\t\t\t\tself.trigger_update_hook();\n\t\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\t\tself.update_plan_orders();\n\t\t\t\t\t\t\t}, 500 );\n\t\t\t\t\t\t} else if ( r.message ) {\n\t\t\t\t\t\t\talert( r.message );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Handle hiding & showing various pieces of an access plan form\n\t\t * This is bound to any form element with a \"data-controller-id\" property\n\t\t *\n\t\t * @param obj $el jQuery selector for the changed form element\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t */\n\t\tthis.controller_change = function( $el ) {\n\n\t\t\tvar id = $el.attr( 'data-controller-id' ),\n\t\t\t\tval = $el.val(),\n\t\t\t\t$form = $el.closest( '.llms-access-plan' ),\n\t\t\t\t$controls = $form.find( '[data-controller=\"' + id + '\"]' );\n\n\t\t\tif ( 'checkbox' === $el.attr( 'type' ) ) {\n\t\t\t\tval = ( $el.is( ':checked' ) ) ? val : 'no';\n\t\t\t}\n\n\t\t\t$controls.each( function() {\n\n\t\t\t\tvar $c = $( this ),\n\t\t\t\t\t$els = ( 'SELECT' === $c[0].nodeName || 'INPUT' === $c[0].nodeName || 'TEXTAREA' === $c[0].nodeName ) ? $c : $c.find( 'input, select, textarea' ),\n\t\t\t\t\tequals = $c.attr( 'data-value-is' ),\n\t\t\t\t\tnot_equals = $c.attr( 'data-value-is-not' ),\n\t\t\t\t\taction, operator;\n\n\t\t\t\tif ( typeof equals !== typeof undefined && equals !== false ) {\n\n\t\t\t\t\toperator = '==';\n\n\t\t\t\t} else if ( typeof not_equals !== typeof undefined && not_equals !== false ) {\n\n\t\t\t\t\toperator = '!=';\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( operator ) {\n\n\t\t\t\t\tcase '==':\n\n\t\t\t\t\t\tif ( val == equals ) {\n\t\t\t\t\t\t\taction = 'show';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\taction = 'hide';\n\t\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase '!=':\n\n\t\t\t\t\t\tif ( val != not_equals ) {\n\t\t\t\t\t\t\taction = 'show';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\taction = 'hide';\n\t\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( 'show' === action ) {\n\t\t\t\t\t$c.show();\n\t\t\t\t\t$els.removeAttr( 'disabled' ).trigger( 'change' );\n\t\t\t\t} else if ( 'hide' === action ) {\n\t\t\t\t\t$c.hide();\n\t\t\t\t\t$els.attr( 'disabled', 'disabled' );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Retrieve the current number of access plans for the course / membership (saved or unsaved)\n\t\t *\n\t\t * @return int\n\t\t * @since 3.29.0\n\t\t * @version 3.29.0\n\t\t */\n\t\tthis.get_current_plan_count = function() {\n\t\t\treturn this.$plans.find( '.llms-access-plan' ).length;\n\t\t}\n\n\t\t/**\n\t\t * Retrieve access plan data as an array of JSON built from the dom element field values.\n\t\t *\n\t\t * @return array\n\t\t * @since 3.29.0\n\t\t * @version 3.29.0\n\t\t */\n\t\tthis.get_plans_array = function() {\n\n\t\t\t// ensure all content editors are saved properly.\n\t\t\ttinyMCE.triggerSave();\n\n\t\t\tvar self = this,\n\t\t\t\tform = self.$plans.closest( 'form' ).serializeArray(),\n\t\t\t\tplans = [];\n\n\t\t\tfor ( var i = 0; i < form.length; i++ ) {\n\n\t\t\t\t// Skip non plan data from the form.\n\t\t\t\tif ( -1 === form[ i ].name.indexOf( '_llms_plans' ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar keys = form[ i ].name.replace( '_llms_plans[', '' ).split( '][' ),\n\t\t\t\t\tindex = ( keys[0] * 1 ) - 1,\n\t\t\t\t\tname = keys[1].replace( ']', '' ),\n\t\t\t\t\ttype = 3 === keys.length ? 'array' : 'single';\n\n\t\t\t\tif ( ! plans[ index ] ) {\n\t\t\t\t\tplans[ index ] = {};\n\t\t\t\t}\n\n\t\t\t\tif ( 'array' === type ) {\n\n\t\t\t\t\tif ( ! plans[ index ][ name ] ) {\n\t\t\t\t\t\tplans[ index ][ name ] = [];\n\t\t\t\t\t}\n\t\t\t\t\tplans[ index ][ name ].push( form[ i ].value );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tplans[ index ][ name ] = form[ i ].value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn plans;\n\n\t\t};\n\n\t\t/**\n\t\t * Determine if the access plan limit has been reached\n\t\t *\n\t\t * @return Boolean\n\t\t * @since 3.0.0\n\t\t * @version 3.29.0\n\t\t */\n\t\tthis.has_plan_limit_been_reached = function() {\n\n\t\t\tvar limit = window.llms.product.access_plan_limit;\n\t\t\treturn this.get_current_plan_count() >= limit;\n\n\t\t};\n\n\t\t/**\n\t\t * Initializes a new plan and adds it to the list of plans in the DOM\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.30.0 Initialize select2 on checkout redirect fields.\n\t\t * @version 3.30.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.init_plan = function() {\n\n\t\t\t// don't do anything if we've reached the plan limit\n\t\t\tif ( this.has_plan_limit_been_reached() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $clone = $( '#llms-new-access-plan-model' ).clone()\n\t\t\t\t$existing_plans = $( '#llms-access-plans .llms-access-plan' ),\n\t\t\t\t$editor = $clone.find( '#_llms_plans_content_llms-new-access-plan-model' );\n\n\t\t\t// remove ID from the item\n\t\t\t$clone.removeAttr( 'id' );\n\n\t\t\t// give a temporary id to the editor element\n\t\t\t$editor.removeAttr( 'id' ).attr( 'id', '_llms_plans_content_' + this.temp_id );\n\t\t\tthis.temp_id++; // increment the temp_id ID so we don't use it again\n\n\t\t\t// activate all elements\n\t\t\t$clone.find( 'select, input, textarea' ).each( function() {\n\t\t\t\t$( this ).removeAttr( 'disabled' ); // enabled the field\n\t\t\t} );\n\n\t\t\t$clone.find( '.llms-access-plan-datepicker' ).datepicker( {\n\t\t\t\tdateFormat: \"mm/dd/yy\"\n\t\t\t} );\n\n\t\t\t$clone.appendTo( '#llms-access-plans' );\n\n\t\t\t// rewrite the order of all elements\n\t\t\tthis.update_plan_orders();\n\n\t\t\t$clone.find( '.llms-collapsible-header' ).trigger( 'click' );\n\n\t\t\t// check if the limit has been reached and toggle the button if it has\n\t\t\tif ( this.has_plan_limit_been_reached() ) {\n\t\t\t\tthis.toggle_create_button( 'disable' );\n\t\t\t}\n\n\t\t\t// select2ify membership availability field\n\t\t\twindow.llms.metaboxes.post_select( $clone.find( '.llms-availability-restrictions' ) );\n\n\t\t\t// select2ify redirection page fields\n\t\t\twindow.llms.metaboxes.post_select( $clone.find( '.llms-checkout-redirect-page' ) );\n\n\t\t\t$clone.find( '[data-controller-id]' ).trigger( 'change' );\n\t\t\t$( document ).trigger( 'llms-plan-init', $clone );\n\n\t\t};\n\n\t\t/**\n\t\t * Persist access plans to the DB if they pass validation\n\t\t *\n\t\t * @since 3.29.0\n\t\t * @since 3.30.3 Fixed typo in error message.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.save_plans = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tself.$plans.find( '.llms-access-plan' ).not( '#llms-new-access-plan-model' ).each( function() {\n\t\t\t\t$( this ).trigger( 'llms-validate-plan' );\n\t\t\t} );\n\n\t\t\tif ( self.$plans.find( '.' + self.validation_class ).length ) {\n\t\t\t\tself.$plans.find( '.llms-access-plan.' + self.validation_class ).not( '.opened' ).first().find( '.llms-collapsible-header' ).trigger( 'click' );\n\t\t\t\t$( document ).trigger( 'llms-access-plan-validation-errors' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tLLMS.Spinner.start( self.$plans );\n\t\t\tself.$save.attr( 'disabled', 'disabled' );\n\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'llms_update_access_plans',\n\t\t\t\t\tplans: self.get_plans_array(),\n\t\t\t\t},\n\t\t\t\tcomplete: function() {\n\t\t\t\t\tLLMS.Spinner.stop( self.$plans );\n\t\t\t\t\tself.$save.removeAttr( 'disabled' );\n\t\t\t\t},\n\t\t\t\terror: function( jqXHR, textStatus, errorThrown ) {\n\t\t\t\t\tconsole.error( 'llms access plan save error encounterd:', jqXHR );\n\t\t\t\t\talert( LLMS.l10n.translate( 'An error was encountered during the save attempt. Please try again.' ) + ' [' + textStatus + ': ' + errorThrown + ']' );\n\t\t\t\t},\n\t\t\t\tsuccess: function( res ) {\n\n\t\t\t\t\tif ( ! res.success && res.code && 'error' === res.code ) {\n\t\t\t\t\t\talert( res.message );\n\t\t\t\t\t} else if ( res.data && res.data.html ) {\n\n\t\t\t\t\t\t// replace the metabox with updated data from the server.\n\t\t\t\t\t\t$( '#llms-product-options-access-plans' ).replaceWith( res.data.html );\n\n\t\t\t\t\t\t// reinit.\n\t\t\t\t\t\tself.init( true );\n\t\t\t\t\t\twindow.llms.metaboxes.init();\n\t\t\t\t\t\tself.update_plan_orders();\n\n\t\t\t\t\t\t// notify the block editor\n\t\t\t\t\t\tself.trigger_update_hook();\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t} );\n\t\t};\n\n\t\t/**\n\t\t * Toggle the status of a button\n\t\t *\n\t\t * @param Object $btn jQuery selector of a button element\n\t\t * @param string status enable or disable\n\t\t * @return void\n\t\t * @since 3.29.0\n\t\t * @version 3.29.0\n\t\t */\n\t\tthis.toggle_button = function( $btn, status ) {\n\n\t\t\tif ( 'disable' === status ) {\n\t\t\t\t$btn.attr( 'disabled', 'disabled' );\n\t\t\t} else {\n\t\t\t\t$btn.removeAttr( 'disabled' );\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Control the status of the \"New Access Plan\" Button\n\t\t *\n\t\t * @param string status enable or disable\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @since 3.29.0\n\t\t */\n\t\tthis.toggle_create_button = function( status ) {\n\t\t\tthis.toggle_button( $( '#llms-new-access-plan' ), status );\n\t\t};\n\n\t\t/**\n\t\t * Control the status of the \"Save Access Plans\" Button\n\t\t *\n\t\t * @param string status enable or disable\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @since 3.29.0\n\t\t */\n\t\tthis.toggle_save_button = function( status ) {\n\t\t\tthis.toggle_button( this.$save, status );\n\t\t}\n\n\t\t/**\n\t\t * Visually hide and then physically remove a plan element from the DOM\n\t\t * Additionally determines if the New Plan Button should be re-enabled\n\t\t * after deletion\n\t\t *\n\t\t * @param obj $plan jQuery selector of the plan element\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.29.0\n\t\t */\n\t\tthis.remove_plan_el = function( $plan ) {\n\n\t\t\tvar self = this;\n\n\t\t\t// fade out nicely\n\t\t\t$plan.fadeOut( 400 );\n\n\t\t\t// remove from dom after it's hidden visually\n\t\t\tsetTimeout(function() {\n\n\t\t\t\t$plan.remove();\n\n\t\t\t\t// check if we need to reenable the create button and hide the message\n\t\t\t\tif ( ! self.has_plan_limit_been_reached() ) {\n\t\t\t\t\tself.toggle_create_button( 'enable' );\n\t\t\t\t}\n\n\t\t\t\tif ( 0 === self.get_current_plan_count() ) {\n\t\t\t\t\tself.toggle_save_button( 'disable' );\n\t\t\t\t}\n\n\t\t\t}, 450 );\n\n\t\t};\n\n\t\t/**\n\t\t * Trigger WP Block Editor hook so the pricing table block can be re-rendered with new plan information.\n\t\t *\n\t\t * @return void\n\t\t * @since 3.29.0\n\t\t * @version 3.29.0\n\t\t */\n\t\tthis.trigger_update_hook = function() {\n\n\t\t\t$( document ).trigger( 'llms-access-plans-updated' );\n\n\t\t};\n\n\t\t/**\n\t\t * Reorder the array indexes and the menu order hidden inputs.\n\t\t * Called by jQuery UI Sortable on sort completion.\n\t\t * Also called after adding a new plan to the DOM so the newest item is always\n\t\t * persisted as the last in the database if no UX reorders the item.\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.36.3 Fixed conflicts with the classic editor block.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.update_plan_orders = function() {\n\n\t\t\t$( '#llms-access-plans .llms-access-plan' ).each( function() {\n\n\t\t\t\tvar $p = $( this ),\n\t\t\t\t\t$order = $p.find( '.plan-order' ),\n\t\t\t\t\t$editor = $p.find( 'textarea[id^=\"_llms_plans_content_\"]' ),\n\t\t\t\t\teditor_id = $editor.attr( 'id' ),\n\t\t\t\t\torig = $order.val() * 1,\n\t\t\t\t\tcurr = $p.index(),\n\t\t\t\t\teditor = tinyMCE.EditorManager.get(editor_id),\n\t\t\t\t\tesettings = editor ? editor.settings : tinyMCE.EditorManager.settings;\n\n\t\t\t\t// make sure the editor settings have the right selector.\n\t\t\t\tesettings.selector = '#' + editor_id;\n\n\t\t\t\t// de-init tinyMCE from the editor.\n\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, editor_id );\n\n\t\t\t\t// update the order of each field in the plan.\n\t\t\t\t$p.find( 'select, input, textarea' ).each( function() {\n\n\t\t\t\t\tvar name = $( this ).attr( 'name' );\n\t\t\t\t\tif ( name ) {\n\t\t\t\t\t\t$( this ).attr( 'name', name.replace( orig, curr ) );\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t// re-init tinyMCE on the editor.\n\t\t\t\t// We used:\ttinyMCE.EditorManager.execCommand( 'mceAddEditor', true, editor_id );\n\t\t\t\t// but it turned out to create conflicts with the Classic Editor block.\n\t\t\t\ttinyMCE.EditorManager.init( esettings );\n\n\t\t\t\t$order.val( curr );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// go\n\t\tthis.init();\n\n\t};\n\n\tvar a = new window.llms.metabox_product();\n\n} )( jQuery );\n"],"names":["$","window","llms","metabox_product","this","$plans","$save","temp_id","Math","floor","random","validation_class","init","skip_dep_checks","counter","interval","self","$mb","bind_visibility","length","requiresAttention","bind","LLMS","Spinner","start","setInterval","html","l10n","translate","tinyMCE","clearInterval","stop","setTimeout","has_plan_limit_been_reached","toggle_create_button","get_current_plan_count","toggle_save_button","on","e","preventDefault","save_plans","controller_change","$plan_container","closest","$plan_redirect_forced","find","$plan_redirect_settings","val","prop","show","hide","toggle","off","datepicker","dateFormat","trigger","init_plan","sortable","handle","items","event","ui","addClass","removeClass","update_plan_orders","$input","$display","title","attr","text","data","checkValidity","type","reportValidity","cascade","original_event","$plan","selector","each","hasClass","stopPropagation","delete_plan","metaboxes","post_select","EditorManager","execCommand","$radios","$toggle","$cancel","slideDown","slideUp","toggleClass","$btn","plan_id","warning","confirm","Ajax","call","action","success","r","remove_plan_el","trigger_update_hook","message","alert","$el","id","$controls","is","operator","$c","$els","nodeName","equals","not_equals","removeAttr","get_plans_array","triggerSave","index","name","form","serializeArray","plans","i","indexOf","keys","replace","split","push","value","limit","product","access_plan_limit","$clone","clone","$existing_plans","$editor","appendTo","document","not","first","complete","error","jqXHR","textStatus","errorThrown","console","res","code","replaceWith","toggle_button","status","fadeOut","remove","$p","$order","editor_id","orig","curr","editor","get","esettings","settings","jQuery"],"mappings":"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","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-metabox-students.min.js.map b/assets/maps/js/llms-metabox-students.min.js.map
new file mode 100644
index 0000000000..b92f39381a
--- /dev/null
+++ b/assets/maps/js/llms-metabox-students.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-metabox-students.min.js","sources":["llms-metabox-students.js"],"sourcesContent":["/**\n * LifterLMS Students Metabox Functions\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.0.0\n * @version 3.33.0\n */\n\n/**\n * LifterLMS Students Metabox Functions\n *\n * @since 3.0.0\n * @since 3.33.0 Added the logic to handle the Student's enrollment deletion.\n */\n( function( $, undefined ) {\n\n\twindow.llms = window.llms || {};\n\n\tvar MetaboxStudents = function() {\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\tvar screens = [ 'course', 'llms_membership' ];\n\n\t\t\tif ( window.llms.post.post_type && -1 !== screens.indexOf( window.llms.post.post_type ) ) {\n\n\t\t\t\tthis.$metabox = $( '#lifterlms-students' );\n\n\t\t\t\tthis.bind();\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Bind dom events\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.4.0 Unknown.\n\t\t * @since 3.33.0 Added enrollment deletion handlers.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.bind = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.$metabox.on( 'click', 'a.llms-remove-student', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.remove_student( $( this ) );\n\t\t\t} );\n\n\t\t\tthis.$metabox.on( 'click', 'a.llms-delete-enrollment', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.delete_student_enrollment( $( this ) );\n\t\t\t} );\n\n\t\t\tthis.$metabox.on( 'click', 'a.llms-add-student', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.add_student( $( this ) );\n\t\t\t} );\n\n\t\t\t$( '#llms-add-student-select' ).llmsStudentsSelect2( { multiple: true } );\n\n\t\t\t$( '#llms-enroll-students' ).on( 'click', function() {\n\t\t\t\tself.enroll_students( $( this ) );\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Add a Student\n\t\t *\n\t\t * @param obj $el jQuery selector of the add button\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.add_student = function( $el ) {\n\t\t\tthis.update_student_enrollment( $el.attr( 'data-id' ), 'add' );\n\t\t};\n\n\t\t/**\n\t\t * Handle bulk enrollment via \"Enroll New Students\" area\n\t\t *\n\t\t * @param obj $el jQuery selector for the triggering button\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.4.0\n\t\t */\n\t\tthis.enroll_students = function( $el ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$select = $( '#llms-add-student-select' ),\n\t\t\t\tids = $select.val(),\n\t\t\t\t$container = this.$metabox.find( '.llms-metabox-students-add-new' );\n\n\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'bulk_enroll_students',\n\t\t\t\t\tstudent_ids: ids,\n\t\t\t\t},\n\t\t\t\tbeforeSend: function( xhr ) {\n\t\t\t\t\tif ( ! ids ) {\n\t\t\t\t\t\t$el.before( '' + LLMS.l10n.translate( 'Please select a student to enroll' ) + ' ' );\n\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\tLLMS.Spinner.stop( $container );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\t$select.val( null ).trigger( 'change' );\n\t\t\t\t\tLLMS.Spinner.stop( $container );\n\t\t\t\t\twindow.llms.admin_tables.reload( $( '#llms-gb-table-student-management' ) );\n\n\t\t\t\t},\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Remove a Student\n\t\t *\n\t\t * @param obj $el jQuery selector of the add button\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.remove_student = function( $el ) {\n\t\t\tthis.update_student_enrollment( $el.attr( 'data-id' ), 'remove' );\n\t\t};\n\n\t\t/**\n\t\t * Delete a Student's enrollment.\n\t\t *\n\t\t * @since 3.33.0\n\t\t *\n\t\t * @param obj $el jQuery selector of the add button.\n\t\t * @return void\n\t\t */\n\t\tthis.delete_student_enrollment = function( $el ) {\n\t\t\tthis.update_student_enrollment( $el.attr( 'data-id' ), 'delete' );\n\t\t};\n\n\t\t/**\n\t\t * Execute AJAX call, add spinners, update html view\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @param int id Student id.\n\t\t * @param string status New status [add|remove|delete].\n\t\t * @return void\n\t\t */\n\t\tthis.update_student_enrollment = function( id, status ) {\n\n\t\t\tvar $table = $( '#llms-gb-table-student-management' ),\n\t\t\t\t$container = $table.closest( '.llms-table-wrap' );\n\n\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'update_student_enrollment',\n\t\t\t\t\tstatus: status,\n\t\t\t\t\tstudent_id: id,\n\t\t\t\t},\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t// spinner doesn't stop because the table reloader will stop it\n\t\t\t\t\twindow.llms.admin_tables.reload( $table );\n\t\t\t\t},\n\t\t\t} );\n\n\t\t};\n\n\t\t// go\n\t\tthis.init();\n\n\t};\n\n\t// initialize the object\n\twindow.llms.MetaboxStudents = new MetaboxStudents();\n\n} )( jQuery );\n"],"names":["$","window","llms","MetaboxStudents","this","init","post","post_type","indexOf","$metabox","bind","self","on","e","preventDefault","remove_student","delete_student_enrollment","add_student","llmsStudentsSelect2","multiple","enroll_students","$el","update_student_enrollment","attr","$select","ids","val","$container","find","LLMS","Spinner","start","Ajax","call","data","action","student_ids","beforeSend","xhr","before","l10n","translate","abort","stop","success","r","trigger","admin_tables","reload","id","status","$table","closest","student_id","jQuery"],"mappings":"AAeA,CAAA,SAAYA,GAEXC,OAAOC,KAAOD,OAAOC,MAAQ,GA0K7BD,OAAOC,KAAKC,gBAAkB,IAxKR,WASrBC,KAAKC,KAAO,WAINJ,OAAOC,KAAKI,KAAKC,WAAa,CAAC,IAFtB,CAAE,SAAU,mBAEwBC,QAASP,OAAOC,KAAKI,KAAKC,SAAU,IAErFH,KAAKK,SAAWT,EAAG,qBAAsB,EAEzCI,KAAKM,KAAK,EAGZ,EAWAN,KAAKM,KAAO,WAEX,IAAIC,EAAOP,KAEXA,KAAKK,SAASG,GAAI,QAAS,wBAAyB,SAAUC,GAC7DA,EAAEC,eAAe,EACjBH,EAAKI,eAAgBf,EAAGI,IAAK,CAAE,CAChC,CAAE,EAEFA,KAAKK,SAASG,GAAI,QAAS,2BAA4B,SAAUC,GAChEA,EAAEC,eAAe,EACjBH,EAAKK,0BAA2BhB,EAAGI,IAAK,CAAE,CAC3C,CAAE,EAEFA,KAAKK,SAASG,GAAI,QAAS,qBAAsB,SAAUC,GAC1DA,EAAEC,eAAe,EACjBH,EAAKM,YAAajB,EAAGI,IAAK,CAAE,CAC7B,CAAE,EAEFJ,EAAG,0BAA2B,EAAEkB,oBAAqB,CAAEC,SAAU,CAAA,CAAK,CAAE,EAExEnB,EAAG,uBAAwB,EAAEY,GAAI,QAAS,WACzCD,EAAKS,gBAAiBpB,EAAGI,IAAK,CAAE,CACjC,CAAE,CAEH,EASAA,KAAKa,YAAc,SAAUI,GAC5BjB,KAAKkB,0BAA2BD,EAAIE,KAAM,SAAU,EAAG,KAAM,CAC9D,EAUAnB,KAAKgB,gBAAkB,SAAUC,GAEhC,IACCG,EAAaxB,EAAG,0BAA2B,EAC3CyB,EAAaD,EAAQE,IAAI,EACzBC,EAAavB,KAAKK,SAASmB,KAAM,gCAAiC,EAEnEC,KAAKC,QAAQC,MAAOJ,CAAW,EAE/B1B,OAAO4B,KAAKG,KAAKC,KAAM,CACtBC,KAAM,CACLC,OAAQ,uBACRC,YAAaX,CACd,EACAY,WAAY,SAAUC,GACdb,IACNJ,EAAIkB,OAAQ,4BAA8BV,KAAKW,KAAKC,UAAW,mCAAoC,EAAI,SAAU,EACjHH,EAAII,MAAM,EACVb,KAAKC,QAAQa,KAAMhB,CAAW,EAEhC,EACAiB,QAAS,SAAUC,GAElBrB,EAAQE,IAAK,IAAK,EAAEoB,QAAS,QAAS,EACtCjB,KAAKC,QAAQa,KAAMhB,CAAW,EAC9B1B,OAAOC,KAAK6C,aAAaC,OAAQhD,EAAG,mCAAoC,CAAE,CAE3E,CACD,CAAE,CAEH,EASAI,KAAKW,eAAiB,SAAUM,GAC/BjB,KAAKkB,0BAA2BD,EAAIE,KAAM,SAAU,EAAG,QAAS,CACjE,EAUAnB,KAAKY,0BAA4B,SAAUK,GAC1CjB,KAAKkB,0BAA2BD,EAAIE,KAAM,SAAU,EAAG,QAAS,CACjE,EAWAnB,KAAKkB,0BAA4B,SAAU2B,EAAIC,GAE9C,IAAIC,EAAanD,EAAG,mCAAoC,EACvD2B,EAAawB,EAAOC,QAAS,kBAAmB,EAEjDvB,KAAKC,QAAQC,MAAOJ,CAAW,EAE/B1B,OAAO4B,KAAKG,KAAKC,KAAM,CACtBC,KAAM,CACLC,OAAQ,4BACRe,OAAQA,EACRG,WAAYJ,CACb,EACAL,QAAS,WAER3C,OAAOC,KAAK6C,aAAaC,OAAQG,CAAO,CACzC,CACD,CAAE,CAEH,EAGA/C,KAAKC,KAAK,CAEX,CAKC,EAAGiD,MAAO","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-metabox-voucher.min.js.map b/assets/maps/js/llms-metabox-voucher.min.js.map
new file mode 100644
index 0000000000..eb39b2ba82
--- /dev/null
+++ b/assets/maps/js/llms-metabox-voucher.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-metabox-voucher.min.js","sources":["llms-metabox-voucher.js"],"sourcesContent":["( function( $ ) {\n\n\tvar deleteIds = [];\n\n\t$( document ).ready( function () {\n\n\t\tvar changeNotSaved = false;\n\t\tvar codesAddedSinceLastSave = 0;\n\n\t\t$( '#llms_voucher_add_codes' ).click(function ( e ) {\n\t\t\te.preventDefault();\n\n\t\t\tvar qty = $( '#llms_voucher_add_quantity' ).val();\n\t\t\tvar uses = $( '#llms_voucher_add_uses' ).val();\n\t\t\tvar html = '';\n\n\t\t\tchangeNotSaved = true;\n\n\t\t\tif ( $.isNumeric( qty ) && $.isNumeric( uses ) ) {\n\t\t\t\tif ( parseInt( qty ) > 0 && parseInt( uses ) > 0 ) {\n\n\t\t\t\t\tif ( qty > 50 ) {\n\t\t\t\t\t\talert( \"You can only generate 50 rows at a time\" );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tcodesAddedSinceLastSave += parseInt( qty );\n\n\t\t\t\t\tif ( codesAddedSinceLastSave > 50 ) {\n\t\t\t\t\t\talert( \"Please save before adding any more codes, limit is 50 at a time\" );\n\t\t\t\t\t\tcodesAddedSinceLastSave -= parseInt( qty );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 1; i <= parseInt( qty ); i++ ) {\n\t\t\t\t\t\thtml += '' +\n\t\t\t\t\t\t\t' ' +\n\t\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t' ' +\n\t\t\t\t\t\t\t' ' +\n\t\t\t\t\t\t\t' ' +\n\t\t\t\t\t\t\t'0 / ' +\n\t\t\t\t\t\t\t'' + delete_icon + ' ' +\n\t\t\t\t\t\t\t' ';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$( '#llms_voucher_tbody' ).append( html );\n\n\t\t\tbindDeleteVoucherCode();\n\t\t} );\n\n\t\tbindDeleteVoucherCode();\n\n\t\t$( '#llms_voucher_tbody input' ).change( function() {\n\t\t\tchangeNotSaved = true;\n\t\t} );\n\n\t\t$( \"#post\" ).on( 'submit', function() {\n\t\t\tif ( $( '#publish' ).attr( 'name' ) === 'publish' ) {\n\t\t\t\t$( ' ' ).attr( 'type', 'hidden' )\n\t\t\t\t\t.attr( 'name', \"publish\" )\n\t\t\t\t\t.attr( 'value', \"true\" )\n\t\t\t\t\t.appendTo( '#post' );\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t\twindow.onbeforeunload = function() {\n\t\t\treturn changeNotSaved ? \"If you leave this page you will lose your unsaved changes.\" : null;\n\t\t};\n\n\t\t$( 'input[type=submit][name=publish], input[type=submit][name=save]' ).click( function ( e ) {\n\t\t\tvar unique_values = {};\n\t\t\tvar duplicate = false;\n\n\t\t\t$( 'input[name=\"llms_voucher_code[]\"]' ).each( function() {\n\t\t\t\tvar val = $( this ).val()\n\t\t\t\tif ( ! unique_values[val] ) {\n\t\t\t\t\tunique_values[val] = true;\n\t\t\t\t} else {\n\t\t\t\t\t$( this ).css( 'background-color', 'rgba(226, 96, 73, 0.6)' );\n\t\t\t\t\tduplicate = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif ( duplicate ) {\n\t\t\t\talert( 'Please make sure that there are no duplicate voucher codes.' );\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// If course or membership is not selected, don't allow user to save.\n\t\t\tif ( ! $( '#_llms_voucher_courses' ).val().length && ! $( '#_llms_voucher_membership' ).val().length ) {\n\t\t\t\talert( 'Please select course or membership before saving.' );\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tchangeNotSaved = false;\n\t\t\tcheck_voucher_duplicate();\n\t\t\treturn false;\n\t\t} );\n\n\t\tfunction bindDeleteVoucherCode() {\n\t\t\t$( '.llms-voucher-delete' ).unbind( 'click' );\n\t\t\t$( '.llms-voucher-delete' ).click( function ( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tvar t = $( this );\n\t\t\t\tvar old = t.data( 'id' );\n\n\t\t\t\tchangeNotSaved = true;\n\n\t\t\t\tif ( old ) {\n\t\t\t\t\tdeleteIds.push( old );\n\n\t\t\t\t\t$( '#delete_ids' ).val( deleteIds.join( ',' ) );\n\t\t\t\t} else {\n\t\t\t\t\tcodesAddedSinceLastSave--;\n\t\t\t\t}\n\n\t\t\t\t// remove html block\n\t\t\t\tt.closest( 'tr' ).remove();\n\t\t\t} );\n\t\t}\n\t} );\n\n\tfunction randomizeCode() {\n\t\tvar text = '';\n\t\tvar possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n\t\tfor ( var i = 0; i < 12; i++ ) {\n\t\t\ttext += possible.charAt( Math.floor( Math.random() * possible.length ) );\n\t\t}\n\n\t\treturn text;\n\t}\n\n\t/**\n\t * Check for voucher duplicates in other posts.\n\t *\n\t * @since Unknown\n\t * @since 5.9.0 Add nonce.\n\t * @since 7.1.3 Add check for empty vouchers.\n\t *\n\t * @return {void}\n\t */\n\tfunction check_voucher_duplicate() {\n\n\t\tvar vouchers = get_codes_from_inputs();\n\n\t\tif( ! vouchers.length ) {\n\t\t\t$( \"#post\" ).submit();\n\t\t\treturn;\n\t\t}\n\n\t\tvar data = {\n\t\t\taction: 'check_voucher_duplicate',\n\t\t\tpostId: $( '#post_ID' ).val(),\n\t\t\tcodes: vouchers,\n\t\t\t_ajax_nonce: window.llms.ajax_nonce,\n\t\t};\n\n\t\tvar ajax = new Ajax( 'post', data, false );\n\t\tajax.check_voucher_duplicate();\n\t}\n\n\tfunction get_codes_from_inputs() {\n\t\tvar codes = [];\n\t\t$( 'input[name=\"llms_voucher_code[]\"]' ).each( function() {\n\t\t\tcodes.push( $( this ).val() );\n\t\t} );\n\n\t\treturn codes;\n\t}\n\n} )( jQuery );\n\nfunction llms_on_voucher_duplicate( results ) {\n\tif ( results.length ) {\n\t\tfor ( var i = 0; i < results.length; i++ ) {\n\t\t\tjQuery( 'input[value=\"' + results[i].code + '\"]' ).css( 'background-color', 'rgba(226, 96, 73, 0.6)' );\n\t\t}\n\t\talert( 'Please make sure that there are no duplicate voucher codes.' );\n\t} else {\n\t\tjQuery( \"#post\" ).submit();\n\t}\n}\n"],"names":["llms_on_voucher_duplicate","results","length","i","jQuery","code","css","alert","submit","$","deleteIds","document","ready","changeNotSaved","codesAddedSinceLastSave","bindDeleteVoucherCode","unbind","click","e","preventDefault","t","this","old","data","push","val","join","closest","remove","qty","uses","html","isNumeric","parseInt","text","possible","charAt","Math","floor","random","delete_icon","append","change","on","attr","appendTo","window","onbeforeunload","vouchers","unique_values","duplicate","each","codes","action","postId","_ajax_nonce","llms","ajax_nonce","Ajax","check_voucher_duplicate"],"mappings":"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","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-metaboxes.js.map b/assets/maps/js/llms-metaboxes.js.map
new file mode 100644
index 0000000000..8c3cd098f9
--- /dev/null
+++ b/assets/maps/js/llms-metaboxes.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["llms-metaboxes.js"],"names":[],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"../../js/llms-metaboxes.js","sourcesContent":["/**\n * LifterLMS Admin Panel Metabox Functions\n *\n * @since 3.0.0\n * @version 7.1.1\n */\n ( function( $ ) {\n\n\t $( document ).ready( function() {\n\t\t // Avoid confusion by hiding the visibility option for coupons and vouchers if currently set to public.\n\t\t if ( $( 'input[name=\"visibility\"]:checked' ).val() === 'public' ) {\n\t\t\t $( 'body.post-type-llms_coupon #visibility, body.post-type-llms_voucher #visibility' ).hide();\n\t\t }\n\t } );\n\n\t /**\n\t * jQuery plugin to allow \"collapsible\" sections\n\t *\n\t * @return jQuery object\n\t * @since 3.0.0\n\t * @version 3.29.0\n\t */\n\t$.fn.llmsCollapsible = function() {\n\n\t\tvar $group = this;\n\n\t\tthis.on( 'click', '.llms-collapsible-header', function() {\n\n\t\t\tvar $parent = $( this ).closest( '.llms-collapsible' ),\n\t\t\t\t$siblings = $parent.siblings( '.llms-collapsible' );\n\n\t\t\t$parent.toggleClass( 'opened' ).trigger( 'llms-collapsible-toggled' );\n\n\t\t\t$parent.find( '.llms-collapsible-body' ).slideToggle( 400 );\n\n\t\t\t$siblings.each( function() {\n\t\t\t\t$( this ).removeClass( 'opened' );\n\t\t\t\t$( this ).find( '.llms-collapsible-body' ).slideUp( 400 );\n\t\t\t} );\n\n\t\t} );\n\n\t\treturn this;\n\n\t};\n\n\twindow.llms = window.llms || {};\n\n\tvar Metaboxes = function() {\n\n\t\t/**\n\t\t * load all partials\n\t\t */\n\t\t/**\n\t\t * LifterLMS Admin Metabox Repeater Field\n\t\t *\n\t\t * @package LifterLMS/Scripts/Partials\n\t\t *\n\t\t * @since 3.11.0\n\t\t * @version 5.3.2\n\t\t */\n\t\t\n\t\tthis.repeaters = {\n\t\t\n\t\t\t/**\n\t\t\t * Reference to the parent metabox class\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tmetaboxes: this,\n\t\t\n\t\t\t/**\n\t\t\t * A jQuery selector for all repeater elements on the current screen\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\t$repeaters: null,\n\t\t\n\t\t\t/**\n\t\t\t * Init\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.23.0 Unknown.\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tinit: function() {\n\t\t\n\t\t\t\tvar self = this;\n\t\t\n\t\t\t\tself.$repeaters = $( '.llms-mb-list.repeater' );\n\t\t\n\t\t\t\tif ( self.$repeaters.length ) {\n\t\t\n\t\t\t\t\t// Wait for tinyMCE just in case their editors in the repeaters.\n\t\t\t\t\tLLMS.wait_for(\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\treturn ( 'undefined' !== typeof tinyMCE );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tself.load();\n\t\t\t\t\t\t\tself.bind();\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\n\t\t\t\t\t/**\n\t\t\t\t\t * On click of any post submit buttons add some data to the submit button\n\t\t\t\t\t * so we can see which button to trigger after repeaters are finished.\n\t\t\t\t\t */\n\t\t\t\t\t$( '#post input[type=\"submit\"], #post-preview' ).on( 'click', function() {\n\t\t\t\t\t\t$( this ).attr( 'data-llms-clicked', 'yes' );\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t// Handle post submission.\n\t\t\t\t\t$( '#post' ).on( 'submit', self.handle_submit );\n\t\t\n\t\t\t\t}\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Bind DOM Events\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.13.0 Unknown.\n\t\t\t * @since 5.3.2 Don't remove the model's mceEditor instance (it's removed before cloning a row now).\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tbind: function() {\n\t\t\n\t\t\t\tvar self = this;\n\t\t\n\t\t\t\tself.$repeaters.each( function() {\n\t\t\n\t\t\t\t\tvar $repeater = $( this ),\n\t\t\t\t\t\t$rows = $repeater.find( '.llms-repeater-rows' );\n\t\t\n\t\t\t\t\t// For the repeater + button.\n\t\t\t\t\t$repeater.find( '.llms-repeater-new-btn' ).on( 'click', function() {\n\t\t\t\t\t\tself.add_row( $repeater, null, true );\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t// Make repeater rows sortable.\n\t\t\t\t\t$rows.sortable( {\n\t\t\t\t\t\thandle: '.llms-drag-handle',\n\t\t\t\t\t\titems: '.llms-repeater-row',\n\t\t\t\t\t\tstart: function( event, ui ) {\n\t\t\t\t\t\t\t$rows.addClass( 'dragging' );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstop: function( event, ui ) {\n\t\t\t\t\t\t\t$rows.removeClass( 'dragging' );\n\t\t\n\t\t\t\t\t\t\tvar $eds = ui.item.find( 'textarea.wp-editor-area' );\n\t\t\t\t\t\t\t$eds.each( function() {\n\t\t\t\t\t\t\t\tvar ed_id = $( this ).attr( 'id' );\n\t\t\t\t\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, ed_id );\n\t\t\t\t\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceAddEditor', true, ed_id );\n\t\t\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t\t\tself.save( $repeater );\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t$repeater.on( 'click', '.llms-repeater-remove', function( e ) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tvar $row = $( this ).closest( '.llms-repeater-row' );\n\t\t\t\t\t\tif ( window.confirm( LLMS.l10n.translate( 'Are you sure you want to delete this row? This cannot be undone.' ) ) ) {\n\t\t\t\t\t\t\t$row.remove();\n\t\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\t\tself.save( $repeater );\n\t\t\t\t\t\t\t}, 1 );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t} );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Add a new row to a repeater rows group\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 5.3.2 Use `self.clone_row()` to retrieve the model's base HTML for the row to be added.\n\t\t\t *\n\t\t\t * @param {Object} $repeater A jQuery selector for the repeater to add a row to.\n\t\t\t * @param {Object} data Optional object of data to fill fields in the row with.\n\t\t\t * @param {Boolean} expand If true, will automatically open the row after adding it to the dom.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tadd_row: function( $repeater, data, expand ) {\n\t\t\n\t\t\t\tvar self = this,\n\t\t\t\t\t$rows = $repeater.find( '.llms-repeater-rows' ),\n\t\t\t\t\t$model = $repeater.find( '.llms-repeater-model' ),\n\t\t\t\t\t$row = self.clone_row( $model.find( '.llms-repeater-row' ) ),\n\t\t\t\t\tnew_index = $repeater.find( '.llms-repeater-row' ).length,\n\t\t\t\t\teditor = self.reindex( $row, new_index );\n\t\t\n\t\t\t\tif ( data ) {\n\t\t\t\t\t$.each( data, function( key, val ) {\n\t\t\n\t\t\t\t\t\tvar $field = $row.find( '[name^=\"' + key + '\"]' );\n\t\t\n\t\t\t\t\t\tif ( $field.hasClass( 'llms-select2-student' ) ) {\n\t\t\t\t\t\t\t$.each( val, function( i, data ) {\n\t\t\t\t\t\t\t\t$field.append( '' + data.title + ' ' )\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t$field.trigger( 'change' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$field.val( val );\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.bind_row( $row );\n\t\t\t\t}, 1 );\n\t\t\n\t\t\t\t$rows.append( $row );\n\t\t\t\tif ( expand ) {\n\t\t\t\t\t$row.find( '.llms-collapsible-header' ).trigger( 'click' );\n\t\t\t\t}\n\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceAddEditor', true, editor );\n\t\t\n\t\t\t\t$repeater.trigger( 'llms-new-repeater-row', {\n\t\t\t\t\t$row: $row,\n\t\t\t\t\tdata: data,\n\t\t\t\t} );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Bind DOM events for a single repeater row\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.13.0 Unknown.\n\t\t\t *\n\t\t\t * @param {Object} $row A jQuery selector for the row.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tbind_row: function( $row ) {\n\t\t\n\t\t\t\tthis.bind_row_header( $row );\n\t\t\n\t\t\t\t$row.find( '.llms-select2' ).llmsSelect2( {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} );\n\t\t\n\t\t\t\t$row.find( '.llms-select2-student' ).llmsStudentsSelect2();\n\t\t\n\t\t\t\tthis.metaboxes.bind_datepickers( $row.find( '.llms-datepicker' ) );\n\t\t\t\tthis.metaboxes.bind_controllers( $row.find( '[data-is-controller]' ) );\n\t\t\t\t// This.metaboxes.bind_merge_code_buttons( $row.find( '.llms-merge-code-wrapper' ) );.\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Bind row header events\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t *\n\t\t\t * @param {Object} $row jQuery selector for the row.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tbind_row_header: function( $row ) {\n\t\t\n\t\t\t\t// Handle the title field binding.\n\t\t\t\tvar $title = $row.find( '.llms-repeater-title' ),\n\t\t\t\t\t$field = $row.find( '.llms-collapsible-header-title-field' );\n\t\t\n\t\t\t\t$title.attr( 'data-default', $title.text() );\n\t\t\n\t\t\t\t$field.on( 'keyup focusout blur', function() {\n\t\t\t\t\tvar val = $( this ).val();\n\t\t\t\t\tif ( ! val ) {\n\t\t\t\t\t\tval = $title.attr( 'data-default' );\n\t\t\t\t\t}\n\t\t\t\t\t$title.text( val );\n\t\t\t\t} ).trigger( 'keyup' );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Create a copy of the model's row after removing any tinyMCE editor instances present in the model.\n\t\t\t *\n\t\t\t * @since 5.3.2\n\t\t\t *\n\t\t\t * @param {Object} $row A jQuery object of the row to be cloned.\n\t\t\t * @return {Object} A clone of the jQuery object.\n\t\t\t */\n\t\t\tclone_row: function( $row ) {\n\t\t\n\t\t\t\t$ed = $row.find( '.editor textarea' );\n\t\t\t\tif ( $ed.length ) {\n\t\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, $ed.attr( 'id' ) );\n\t\t\t\t}\n\t\t\n\t\t\t\treturn $row.clone()\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Handle WP Post form submission to ensure repeaters are saved before submitting the form to save/publish the post\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.23.0 Unknown.\n\t\t\t *\n\t\t\t * @param {Object} e An event object.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\thandle_submit: function( e ) {\n\t\t\n\t\t\t\t// Get the button used to submit the form.\n\t\t\t\tvar $btn = $( '#post [data-llms-clicked=\"yes\"]' ),\n\t\t\t\t\t$spinner = $btn.parent().find( '.spinner' );\n\t\t\n\t\t\t\tif ( $btn.is( '#post-preview' ) ) {\n\t\t\t\t\t$btn.removeAttr( 'data-llms-clicked' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\n\t\t\t\te.preventDefault();\n\t\t\n\t\t\t\t// Core UX to prevent multi-click/or the appearance of a delay.\n\t\t\t\t$( '#post input[type=\"submit\"]' ).addClass( 'disabled' ).attr( 'disabled', 'disabled' );\n\t\t\t\t$spinner.addClass( 'is-active' );\n\t\t\n\t\t\t\tvar self = window.llms.metaboxes.repeaters,\n\t\t\t\t\ti = 0,\n\t\t\t\t\twait;\n\t\t\n\t\t\t\tself.$repeaters.each( function() {\n\t\t\t\t\tself.save( $( this ) );\n\t\t\t\t} );\n\t\t\n\t\t\t\twait = setInterval( function() {\n\t\t\n\t\t\t\t\tif ( i >= 59 || ! $( '.llms-mb-list.repeater.processing' ).length ) {\n\t\t\n\t\t\t\t\t\tclearInterval( wait );\n\t\t\t\t\t\t$( '#post' ).off( 'submit', this.handle_submit );\n\t\t\t\t\t\t$spinner.removeClass( 'is-active' );\n\t\t\t\t\t\t$btn.removeClass( 'disabled' ).removeAttr( 'disabled' ).trigger( 'click' );\n\t\t\n\t\t\t\t\t} else {\n\t\t\n\t\t\t\t\t\ti++;\n\t\t\n\t\t\t\t\t}\n\t\t\n\t\t\t\t}, 1000 );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Load repeater data from the server and create rows in the DOM\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.12.1 Unknown.\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tload: function() {\n\t\t\n\t\t\t\tvar self = this;\n\t\t\n\t\t\t\tself.$repeaters.each( function() {\n\t\t\n\t\t\t\t\tvar $repeater = $( this );\n\t\t\n\t\t\t\t\t// Ensure the repeater is only loaded once to prevent duplicates resulting from duplicating binding.\n\t\t\t\t\t// On certain sites which I cannot quite explain...\n\t\t\t\t\tif ( $repeater.hasClass( 'is-loaded' ) || $repeater.hasClass( 'processing' ) ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tself.store( $repeater, 'load', function( data ) {\n\t\t\n\t\t\t\t\t\t$repeater.addClass( 'is-loaded' );\n\t\t\n\t\t\t\t\t\t$.each( data.data, function( i, obj ) {\n\t\t\t\t\t\t\tself.add_row( $repeater, obj, false );\n\t\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t\t// For each row within the repeater.\n\t\t\t\t\t\t$repeater.find( '.llms-repeater-rows .llms-repeater-row' ).each( function() {\n\t\t\t\t\t\t\tself.bind_row( $( this ) );\n\t\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t} );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Reindex a row\n\t\t\t *\n\t\t\t * Renames ids, attrs, and etc...\n\t\t\t *\n\t\t\t * Used when cloning the model for new rows.\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t *\n\t\t\t * @param {Object} $row jQuery selector for the row.\n\t\t\t * @param {string} index The index (or id) to use when renaming.\n\t\t\t * @return {string}\n\t\t\t */\n\t\t\treindex: function( $row, index ) {\n\t\t\n\t\t\t\tvar old_index = $row.attr( 'data-row-order' ),\n\t\t\t\t\t$ed = $row.find( '.llms-mb-list.editor textarea' );\n\t\t\n\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, $ed.attr( 'id' ) );\n\t\t\n\t\t\t\tfunction replace_attr( $el, attr ) {\n\t\t\t\t\t$el.each( function() {\n\t\t\t\t\t\tvar str = $( this ).attr( attr );\n\t\t\t\t\t\t$( this ).attr( attr, str.replace( old_index, index ) );\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\n\t\t\t\t$row.attr( 'data-row-order', index );\n\t\t\n\t\t\t\treplace_attr( $row, 'data-row-order' );\n\t\t\n\t\t\t\treplace_attr( $row.find( 'button.insert-media' ), 'data-editor' );\n\t\t\n\t\t\t\treplace_attr( $row.find( 'input[name^=\"_llms\"], textarea[name^=\"_llms\"], select[name^=\"_llms\"]' ), 'id' );\n\t\t\t\treplace_attr( $row.find( 'input[name^=\"_llms\"], textarea[name^=\"_llms\"], select[name^=\"_llms\"]' ), 'name' );\n\t\t\t\treplace_attr( $row.find( '[data-controller]' ), 'data-controller' );\n\t\t\t\treplace_attr( $row.find( '[data-controller]' ), 'data-controller' );\n\t\t\t\treplace_attr( $row.find( 'button.wp-switch-editor' ), 'data-wp-editor-id' );\n\t\t\t\treplace_attr( $row.find( 'button.wp-switch-editor' ), 'id' );\n\t\t\t\treplace_attr( $row.find( '.wp-editor-tools' ), 'id' );\n\t\t\t\treplace_attr( $row.find( '.wp-editor-container' ), 'id' );\n\t\t\n\t\t\t\treturn $ed.attr( 'id' );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Save a single repeaters data to the server\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.13.0 Unknown.\n\t\t\t *\n\t\t\t * @param {Object} $repeater jQuery selector for a repeater element.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tsave: function( $repeater ) {\n\t\t\t\t$repeater.trigger( 'llms-repeater-before-save', { $el: $repeater } );\n\t\t\t\tthis.store( $repeater, 'save' );\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Convert a repeater element into an array of objects that can be saved to the database\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t *\n\t\t\t * @param {Object} $repeater A jQuery selector for a repeater element.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tserialize: function( $repeater ) {\n\t\t\n\t\t\t\tvar rows = [];\n\t\t\n\t\t\t\t$repeater.find( '.llms-repeater-rows .llms-repeater-row' ).each( function() {\n\t\t\n\t\t\t\t\tvar obj = {};\n\t\t\n\t\t\t\t\t// Easy...\n\t\t\t\t\t$( this ).find( 'input[name^=\"_llms\"], select[name^=\"_llms\"]' ).each( function() {\n\t\t\t\t\t\tobj[ $( this ).attr( 'name' ) ] = $( this ).val();\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t// Check if the textarea is a tinyMCE instance.\n\t\t\t\t\t$( this ).find( 'textarea[name^=\"_llms\"]' ).each( function() {\n\t\t\n\t\t\t\t\t\tvar name = $( this ).attr( 'name' );\n\t\t\n\t\t\t\t\t\t// If it is an editor.\n\t\t\t\t\t\tif ( tinyMCE.editors[ name ] ) {\n\t\t\t\t\t\t\tobj[ name ] = tinyMCE.editors[ name ].getContent();\n\t\t\t\t\t\t\t// Grab the val of the textarea.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobj[ name ] = $( this ).val();\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\trows.push( obj );\n\t\t\n\t\t\t\t} );\n\t\t\n\t\t\t\treturn rows;\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * AJAX method for interacting with the repeater's handler on the server\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t *\n\t\t\t * @param {Object} $repeater jQuery selector for the repeater element.\n\t\t\t * @param {string} action Action to call [save|load].\n\t\t\t * @param {Function} cb Callback function.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tstore: function( $repeater, action, cb ) {\n\t\t\n\t\t\t\tcb = cb || function(){};\n\t\t\t\tvar self = this,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\taction: $repeater.find( '.llms-repeater-field-handler' ).val(),\n\t\t\t\t\t\tstore_action: action,\n\t\t\t\t};\n\t\t\n\t\t\t\tif ( 'save' === action ) {\n\t\t\t\t\tdata.rows = self.serialize( $repeater );\n\t\t\t\t}\n\t\t\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: data,\n\t\t\t\t\tbeforeSend: function() {\n\t\t\n\t\t\t\t\t\t$repeater.addClass( 'processing' );\n\t\t\t\t\t\tLLMS.Spinner.start( $repeater );\n\t\t\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\t\t\n\t\t\t\t\t\tcb( r );\n\t\t\t\t\t\tLLMS.Spinner.stop( $repeater );\n\t\t\t\t\t\t$repeater.removeClass( 'processing' );\n\t\t\n\t\t\t\t\t}\n\t\t\n\t\t\t\t} );\n\t\t\n\t\t\t}\n\t\t\n\t\t};\n\t\tthis.repeaters.init();\n\t\t\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.13.0 Unknown.\n\t\t * @since 4.19.0 Add `this.bind_mce_fixes()`.\n\t\t * @since 5.3.0 Bind editables when editable buttons are present in addition to anchors.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\tvar self = this;\n\n\t\t\t$( '.llms-select2-post' ).each( function() {\n\t\t\t\tself.post_select( $( this ) );\n\t\t\t} );\n\n\t\t\t$( '.llms-collapsible-group' ).llmsCollapsible();\n\n\t\t\tthis.bind_tabs();\n\n\t\t\tthis.bind_mce_fixes();\n\n\t\t\t// bind everything better and less repetitively...\n\t\t\tvar bindings = [\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-datepicker' ),\n\t\t\t\t\tfunc: 'bind_datepickers',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-select2' ),\n\t\t\t\t\tfunc: function( $selector ) {\n\t\t\t\t\t\t$selector.llmsSelect2( {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t} );\n\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-select2-student' ),\n\t\t\t\t\tfunc: function( $selector ) {\n\t\t\t\t\t\t$selector.llmsStudentsSelect2();\n\t\t\t\t\t}\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( 'input[type=\"checkbox\"][data-controls]' ),\n\t\t\t\t\tfunc: 'bind_cb_controllers',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '[data-is-controller]' ),\n\t\t\t\t\tfunc: 'bind_controllers',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-table' ),\n\t\t\t\t\tfunc: 'bind_tables',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-merge-code-wrapper' ),\n\t\t\t\t\tfunc: 'bind_merge_code_buttons',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( 'a.llms-editable, button.llms-editable' ),\n\t\t\t\t\tfunc: 'bind_editables',\n\t\t\t},\n\t\t\t];\n\n\t\t\t// bind all the bindables but don't bind things in repeaters\n\t\t\t$.each( bindings, function( index, obj ) {\n\n\t\t\t\tif ( obj.selector.length ) {\n\n\t\t\t\t\t// reduce the selector to exclude items in a repeater\n\t\t\t\t\tvar reduced = obj.selector.filter( function() {\n\t\t\t\t\t\treturn ( 0 === $( this ).closest( '.llms-repeater-model' ).length );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// bind by string\n\t\t\t\t\tif ( 'string' === typeof obj.func ) {\n\t\t\t\t\t\tself[ obj.func ]( reduced );\n\t\t\t\t\t}\n\t\t\t\t\t// bind by an anonymous function\n\t\t\t\t\telse if ( 'function' === typeof obj.func ) {\n\t\t\t\t\t\tobj.func( reduced );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// if a post type is set & a bind exists for it, bind it\n\t\t\tif ( window.llms.post.post_type ) {\n\n\t\t\t\tvar func = 'bind_' + window.llms.post.post_type;\n\n\t\t\t\tif ( 'function' === typeof this[func] ) {\n\n\t\t\t\t\tthis[func]();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Bind checkboxes that control the display of other elements\n\t\t *\n\t\t * @param obj $controllers jQuery selector for checkboxes to be bound as checkbox controllers\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.11.0\n\t\t */\n\t\tthis.bind_cb_controllers = function( $controllers ) {\n\n\t\t\t$controllers = $controllers || $( 'input[type=\"checkbox\"][data-controls]' );\n\n\t\t\t$controllers.each( function() {\n\n\t\t\t\tvar $cb = $( this ),\n\t\t\t\t\t$controlled = $( $cb.attr( 'data-controls' ) ).closest( '.llms-mb-list' );\n\n\t\t\t\t$cb.on( 'change', function() {\n\n\t\t\t\t\tif ( $( this ).is( ':checked' ) ) {\n\n\t\t\t\t\t\t$controlled.slideDown( 200 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t$controlled.slideUp( 200 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t$cb.trigger( 'change' );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind elements that control the display of other elements\n\t\t *\n\t\t * @param obj $controllers jQuery selector for elements to be bound as checkbox controllers\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.11.0\n\t\t */\n\t\tthis.bind_controllers = function( $controllers ) {\n\n\t\t\t$controllers = $controllers || $( '[data-is-controller]' );\n\n\t\t\t$controllers.each( function() {\n\n\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t$controlled = $( '[data-controller=\"#' + $el.attr( 'id' ) + '\"]' ),\n\t\t\t\t\tval;\n\n\t\t\t\t$el.on( 'change', function() {\n\n\t\t\t\t\tif ( 'checkbox' === $el.attr( 'type' ) ) {\n\n\t\t\t\t\t\tval = $el.is( ':checked' ) ? $el.val() : 'false';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tval = $el.val();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t$controlled.each( function() {\n\n\t\t\t\t\t\tvar possible = $( this ).attr( 'data-controller-value' ),\n\t\t\t\t\t\t\tvals = [];\n\n\t\t\t\t\t\tif ( -1 !== possible.indexOf( ',' ) ) {\n\n\t\t\t\t\t\t\tvals = possible.split( ',' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvals.push( possible );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( -1 !== vals.indexOf( val ) ) {\n\n\t\t\t\t\t\t\t$( this ).slideDown( 200 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t$( this ).slideUp( 200 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t\t$el.trigger( 'change' );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind a single datepicker element\n\t\t *\n\t\t * @param obj $el jQuery selector for the input to bind the datepicker to\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.10.0\n\t\t */\n\t\tthis.bind_datepicker = function( $el ) {\n\t\t\tvar format = $el.attr( 'data-format' ) || 'mm/dd/yy',\n\t\t\t\tmaxDate = $el.attr( 'data-max-date' ) || null,\n\t\t\t\tminDate = $el.attr( 'data-min-date' ) || null;\n\t\t\t$el.datepicker( {\n\t\t\t\tdateFormat: format,\n\t\t\t\tmaxDate: maxDate,\n\t\t\t\tminDate: minDate,\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Bind all LifterLMS datepickers\n\t\t *\n\t\t * @param obj $datepickers jQuery selector for the elements to bind\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.11.0\n\t\t */\n\t\tthis.bind_datepickers = function( $datepickers ) {\n\n\t\t\tvar self = this;\n\n\t\t\t$datepickers = $datepickers || $( '.llms-datepicker' );\n\n\t\t\t$datepickers.each( function() {\n\t\t\t\tself.bind_datepicker( $( this ) );\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind llms-editable metabox fields and related dom interactions\n\t\t *\n\t\t * @since 3.10.0\n\t\t * @since 3.28.0 Unknown.\n\t\t * @since 5.3.0 Bind editables when editable buttons are present in addition to anchors.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.bind_editables = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tfunction make_editable( $field ) {\n\n\t\t\t\tvar $label = $field.find( 'label' ).clone(),\n\t\t\t\t\tname = $field.attr( 'data-llms-editable' ),\n\t\t\t\t\ttype = $field.attr( 'data-llms-editable-type' ),\n\t\t\t\t\trequired = $field.attr( 'data-llms-editable-required' ) || 'no',\n\t\t\t\t\tval = $field.attr( 'data-llms-editable-value' ),\n\t\t\t\t\t$input;\n\n\t\t\t\trequired = ( 'yes' === required ) ? ' required=\"required\"' : '';\n\n\t\t\t\tif ( 'select' === type ) {\n\n\t\t\t\t\tvar options = JSON.parse( $field.attr( 'data-llms-editable-options' ) ),\n\t\t\t\t\t\tselected;\n\n\t\t\t\t\t$input = $( ' ' );\n\t\t\t\t\tfor ( var key in options ) {\n\t\t\t\t\t\tselected = val === key ? ' selected=\"selected\"' : '';\n\t\t\t\t\t\t$input.append( '' + options[ key ] + ' ' );\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( 'datetime' === type ) {\n\n\t\t\t\t\t$input = $( '
' );\n\n\t\t\t\t\tval = JSON.parse( val );\n\t\t\t\t\tvar format = $field.attr( 'data-llms-editable-date-format' ) || '',\n\t\t\t\t\t\tmin_date = $field.attr( 'data-llms-editable-date-min' ) || '',\n\t\t\t\t\t\tmax_date = $field.attr( 'data-llms-editable-date-max' ) || '';\n\n\t\t\t\t\t$picker = $( ' ' );\n\t\t\t\t\tself.bind_datepicker( $picker );\n\t\t\t\t\t$input.append( $picker );\n\t\t\t\t\t$input.append( '@ ' );\n\n\t\t\t\t\t$input.append( ' ' );\n\t\t\t\t\t$input.append( ': ' );\n\t\t\t\t\t$input.append( ' ' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t$input = $( ' ' );\n\t\t\t\t}\n\n\t\t\t\t$field.empty().append( $label ).append( $input );\n\t\t\t\tif ( 'select' === type ) {\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t$input.trigger( 'change' );\n\t\t\t\t\t}, 100 );\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\t$( 'a.llms-editable, button.llms-editable' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$fields;\n\n\t\t\t\tif ( $btn.attr( 'data-fields' ) ) {\n\t\t\t\t\t$fields = $( $btn.attr( 'data-fields' ) );\n\t\t\t\t} else {\n\t\t\t\t\t$fields = $btn.closest( '.llms-metabox-section' ).find( '[data-llms-editable]' );\n\t\t\t\t}\n\n\t\t\t\t$btn.remove();\n\n\t\t\t\t$fields.each( function() {\n\t\t\t\t\tmake_editable( $( this ) );\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind Engagement post type JS\n\t\t *\n\t\t * @return void\n\t\t * @since 3.1.0\n\t\t * @version 3.1.0\n\t\t */\n\t\tthis.bind_llms_engagement = function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// when the engagement type changes we need to do some things to the UI\n\t\t\t$( '#_llms_engagement_type' ).on( 'change', function() {\n\n\t\t\t\t$( '#_llms_engagement' ).trigger( 'llms-engagement-type-change', $( this ).val() );\n\n\t\t\t} );\n\n\t\t\t// custom trigger when called when the engagement type changes\n\t\t\t$( '#_llms_engagement' ).on( 'llms-engagement-type-change', function( e, engagement_type ) {\n\n\t\t\t\tvar $select = $( this );\n\n\t\t\t\tswitch ( engagement_type ) {\n\n\t\t\t\t\t/**\n\t\t\t\t\t * core engagements related to a CPT\n\t\t\t\t\t */\n\t\t\t\t\tcase 'achievement':\n\t\t\t\t\tcase 'certificate':\n\t\t\t\t\tcase 'email':\n\n\t\t\t\t\t\tvar cpt = 'llms_' + engagement_type;\n\n\t\t\t\t\t\t$select.val( null ).attr( 'data-post-type', cpt ).trigger( 'change' );\n\t\t\t\t\t\tself.post_select( $select );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Allow other plugins and developers to hook into the engagement type change action\n\t\t\t\t\t */\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t$select.trigger( 'llms-engagement-type-change-external', engagement_type );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Actions for memberships\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.30.0 Made autoenroll table sortable, added AJAX save for adding new courses.\n\t\t * @version 3.30.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.bind_llms_membership = function() {\n\n\t\t\tvar $table = $( '.llms-mb-list._llms_content_table' );\n\n\t\t\t/**\n\t\t\t * Hide/Show empty message header row depending on the number of rows in the tbody\n\t\t\t *\n\t\t\t * @since 3.30.0\n\t\t\t * @version 3.30.0\n\t\t\t *\n\t\t\t * @return void\n\t\t\t */\n\t\t\tfunction toggle_header_row() {\n\n\t\t\t\tvar $rows = $table.find( 'tbody tr' );\n\t\t\t\tif ( 1 === $rows.length ) {\n\t\t\t\t\t$rows.first().show();\n\t\t\t\t} else {\n\t\t\t\t\t$rows.first().hide();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Retrieve an array of course IDs in the table.\n\t\t\t *\n\t\t\t * @since 3.30.0\n\t\t\t * @version 3.30.0\n\t\t\t *\n\t\t\t * @return array\n\t\t\t */\n\t\t\tfunction get_course_ids() {\n\n\t\t\t\tvar courses = [];\n\t\t\t\t$table.find( 'tbody tr a[href=\"#llms-course-remove\"]' ).each( function() {\n\t\t\t\t\tcourses.push( $( this ).attr( 'data-id' ) );\n\t\t\t\t} );\n\t\t\t\treturn courses;\n\n\t\t\t}\n\n\t\t\t// On init, toggle the header row visibility.\n\t\t\ttoggle_header_row();\n\n\t\t\t// remove auto-enroll course\n\t\t\t$table.on( 'click', 'a[href=\"#llms-course-remove\"]', function( e ) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t$row = $el.closest( 'tr' ),\n\t\t\t\t\t$container = $el.closest( '.llms-mb-list' );\n\n\t\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'membership_remove_auto_enroll_course',\n\t\t\t\t\t\tcourse_id: $el.attr( 'data-id' ),\n\t\t\t\t\t},\n\t\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\t\t$container.find( 'p.error' ).remove();\n\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\t\tif ( r.success ) {\n\n\t\t\t\t\t\t\t$row.fadeOut( 200 );\n\t\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\t\t$row.remove();\n\t\t\t\t\t\t\t\ttoggle_header_row();\n\t\t\t\t\t\t\t}, 400 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t$container.prepend( '' + r.message + '
' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tLLMS.Spinner.stop( $container );\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t\t// bulk enroll all members into a course\n\t\t\t$table.on( 'click', 'a[href=\"#llms-course-bulk-enroll\"]', function( e ) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t$row = $el.closest( 'tr' ),\n\t\t\t\t\t$container = $el.closest( '.llms-mb-list' );\n\n\t\t\t\tif ( ! window.confirm( LLMS.l10n.translate( 'Click okay to enroll all active members into the selected course. Enrollment will take place in the background and you may leave your site after confirmation. This action cannot be undone!' ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'bulk_enroll_membership_into_course',\n\t\t\t\t\t\tcourse_id: $el.attr( 'data-id' ),\n\t\t\t\t\t},\n\t\t\t\t\tbeforeSend: function() {\n\t\t\t\t\t\t$container.find( 'p.error' ).remove();\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\t\tif ( r.success ) {\n\n\t\t\t\t\t\t\t$el.replaceWith( '' + r.data.message + ' ' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t$container.prepend( '' + r.message + '
' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tLLMS.Spinner.stop( $container );\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t\t// Add an item to the autoenroll table on select.\n\t\t\t$( '#_llms_auto_enroll' ).on( 'change', function() {\n\n\t\t\t\tvar id = $( this ).val(),\n\t\t\t\t\ttitle = $( this ).find( 'option[value=\"' + $( this ).val() + '\"]' ).text();\n\n\t\t\t\t// If there's no ID\n\t\t\t\tif ( ! id ) {\n\t\t\t\t\treturn;\n\t\t\t\t\t// Prevent Dupes.\n\t\t\t\t} else if ( -1 !== get_course_ids().indexOf( id ) ) {\n\n\t\t\t\t\talert( LLMS.l10n.replace( '\"%s\" is already in the course list.', { '%s': title } ) )\n\n\t\t\t\t\t// reset the select field.\n\t\t\t\t\t$( this ).val( '' ).trigger( 'change' );\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar $table = $( '.llms-mb-list._llms_content_table' );\n\t\t\t\t\t$tr = $( ' ' );\n\n\t\t\t\t$tr.append( ' ' );\n\t\t\t\t$tr.append( '' + title + ' ' );\n\t\t\t\t$tr.append( '' + LLMS.l10n.translate( 'Remove course' ) + ' ' + LLMS.l10n.translate( 'Enroll All Members' ) + ' ' );\n\n\t\t\t\t// append the element to the table.\n\t\t\t\t$table.find( 'table tbody' ).append( $tr );\n\n\t\t\t\t// reset the select field.\n\t\t\t\t$( this ).val( '' ).trigger( 'change' );\n\n\t\t\t\t// Show the header row.\n\t\t\t\ttoggle_header_row();\n\n\t\t\t\t// trigger a save event.\n\t\t\t\t$table.trigger( 'llms-save-autoenroll-courses' );\n\n\t\t\t} );\n\n\t\t\t// Make autoenrollment table sortable.\n\t\t\t$table.find( 'table tbody' ).sortable( {\n\t\t\t\thandle: '.llms-drag-handle',\n\t\t\t\t// Save order on stop.\n\t\t\t\tstop: function( event, ui ) {\n\t\t\t\t\tui.item.closest( '.llms-mb-list' ).trigger( 'llms-save-autoenroll-courses' );\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t// Save courses & course order.\n\t\t\t$table.on( 'llms-save-autoenroll-courses', function() {\n\n\t\t\t\tvar $container = $( this );\n\n\t\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'llms_save_membership_autoenroll_courses',\n\t\t\t\t\t\tcourses: get_course_ids(),\n\t\t\t\t\t},\n\t\t\t\t\terror: function( jqxhr, code, error_msg ) {\n\t\t\t\t\t\talert( error_msg );\n\t\t\t\t\t},\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tLLMS.Spinner.stop( $container );\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Actions for ORDERS\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.28.0\n\t\t */\n\t\tthis.bind_llms_order = function() {\n\n\t\t\t$( 'button[name=\"llms-refund-toggle\"]' ).on( 'click', function() {\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$row = $btn.closest( 'tr' ),\n\t\t\t\t\ttxn_id = $row.attr( 'data-transaction-id' ),\n\t\t\t\t\trefundable_amount = $btn.attr( 'data-refundable' ),\n\t\t\t\t\tgateway_supports = ( '1' === $btn.attr( 'data-gateway-supports' ) ) ? true : false,\n\t\t\t\t\tgateway_title = $btn.attr( 'data-gateway' ),\n\t\t\t\t\t$new_row = $( '#llms-txn-refund-model .llms-txn-refund-form' ).clone(),\n\t\t\t\t\t$gateway_btn = $new_row.find( '.gateway-btn' );\n\n\t\t\t\t// configure and add the form\n\t\t\t\tif ( 'remove' !== $btn.attr( 'data-action' ) ) {\n\n\t\t\t\t\t$btn.text( LLMS.l10n.translate( 'Cancel' ) );\n\t\t\t\t\t$btn.attr( 'data-action', 'remove' );\n\t\t\t\t\t$new_row.find( 'input' ).removeAttr( 'disabled' );\n\t\t\t\t\t$new_row.find( 'input[name=\"llms_refund_amount\"]' ).attr( 'max', refundable_amount );\n\t\t\t\t\t$new_row.find( 'input[name=\"llms_refund_txn_id\"]' ).val( txn_id );\n\n\t\t\t\t\tif ( gateway_supports ) {\n\t\t\t\t\t\t$gateway_btn.find( '.llms-gateway-title' ).text( gateway_title );\n\t\t\t\t\t\t$gateway_btn.show();\n\t\t\t\t\t}\n\n\t\t\t\t\t$row.after( $new_row );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t$btn.text( LLMS.l10n.translate( 'Refund' ) );\n\t\t\t\t\t$btn.attr( 'data-action', '' );\n\t\t\t\t\t$row.next( 'tr' ).remove();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t$( 'button[name=\"llms-manual-txn-toggle\"]' ).on( 'click', function() {\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$row = $btn.closest( 'tr' ),\n\t\t\t\t\t$new_row = $( '#llms-manual-txn-model .llms-manual-txn-form' ).clone();\n\n\t\t\t\t// configure and add the form\n\t\t\t\tif ( 'remove' !== $btn.attr( 'data-action' ) ) {\n\n\t\t\t\t\t$btn.text( LLMS.l10n.translate( 'Cancel' ) );\n\t\t\t\t\t$btn.attr( 'data-action', 'remove' );\n\t\t\t\t\t$new_row.find( 'input' ).removeAttr( 'disabled' );\n\n\t\t\t\t\t$row.after( $new_row );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t$btn.text( LLMS.l10n.translate( 'Record a Manual Payment' ) );\n\t\t\t\t\t$btn.attr( 'data-action', '' );\n\t\t\t\t\t$row.next( 'tr' ).remove();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// cache the original value when focusing on a payment gateway select\n\t\t\t// used below so the original field related data can be restored when switching back to the originally selected gateway\n\t\t\t$( '.llms-metabox' ).one( 'focus', '.llms-metabox-field[data-llms-editable=\"payment_gateway\"] select', function() {\n\n\t\t\t\tif ( ! $( this ).attr( 'data-original-value' ) ) {\n\t\t\t\t\t$( this ).attr( 'data-original-value', $( this ).val() );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// when selecting a new payment gateway get field data and update the dom to only display the fields\n\t\t\t// supported/needed by the newly selected gateway\n\t\t\t$( '.llms-metabox' ).on( 'change', '.llms-metabox-field[data-llms-editable=\"payment_gateway\"] select', function() {\n\n\t\t\t\tvar $select = $( this ),\n\t\t\t\t\tgateway = $select.val(),\n\t\t\t\t\tdata = JSON.parse( $select.closest( '.llms-metabox-field' ).attr( 'data-gateway-fields' ) ),\n\t\t\t\t\tgateway_data = data[ gateway ];\n\n\t\t\t\tfor ( var field in gateway_data ) {\n\n\t\t\t\t\tvar $field = $( 'input[name=\"' + gateway_data[ field ].name + '\"]' ),\n\t\t\t\t\t\t$wrap = $field.closest( '.llms-metabox-field' );\n\n\t\t\t\t\t// if the field is enabled show it the field and, if we're switching back to the originally selected\n\t\t\t\t\t// gateway, reload the value from the dom\n\t\t\t\t\tif ( gateway_data[ field ].enabled ) {\n\n\t\t\t\t\t\t$wrap.show();\n\t\t\t\t\t\t$field.attr( 'required', 'required' );\n\t\t\t\t\t\t$field.removeAttr( 'disabled' );\n\n\t\t\t\t\t\tif ( gateway === $select.attr( 'data-original-value' ) ) {\n\t\t\t\t\t\t\t$field.val( $wrap.attr( 'data-llms-editable-value' ) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// otherwise hide the field\n\t\t\t\t\t\t// this will ensure it gets updated in the database\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// always clear the value when switching\n\t\t\t\t\t\t// ensures that outdated data is removed from the DB\n\t\t\t\t\t\t$field.attr( 'value', '' );\n\n\t\t\t\t\t\t$field.removeAttr( 'required' );\n\t\t\t\t\t\t// $field.attr( 'disabled', 'disabled' );\n\t\t\t\t\t\t$wrap.hide();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Re-initializes TinyMCE Editors found within metaboxes\n\t\t *\n\t\t * @since 4.19.0\n\t\t * @since 4.21.2 Improve early return dependency check.\n\t\t * @since 7.0.1 Add `undefined` condition on early return check.\n\t\t *\n\t\t * @link https://github.com/gocodebox/lifterlms/issues/1553\n\t\t * @link https://github.com/gocodebox/lifterlms/pull/1618\n\t\t * @link https://github.com/gocodebox/lifterlms/issues/2298\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\t this.bind_mce_fixes = function() {\n\n\t\t\t// We need `wp.data` to proceed.\n\t\t\tif ( undefined === wp.data || [ null, undefined ].includes( wp.data.select( 'core/edit-post' ) ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tLLMS.wait_for(\n\t\t\t\tfunction() {\n\t\t\t\t\treturn undefined !== wp.data.select( 'core/edit-post' ).getMetaBoxesPerLocation( 'normal' );\n\t\t\t\t},\n\t\t\t\tfunction() {\n\n\t\t\t\t\tvar shouldRun = false;\n\t\t\t\t\t\tfind = [ 'lifterlms-product', 'lifterlms-membership', 'lifterlms-course-options' ];\n\t\t\t\t\t\tmetaboxes = wp.data.select( 'core/edit-post' ).getMetaBoxesPerLocation( 'normal' );\n\n\t\t\t\t\t// Determine if we should run the fixer.\n\t\t\t\t\tfor ( var key in metaboxes ) {\n\t\t\t\t\t\tif ( -1 !== find.indexOf( metaboxes[ key ].id ) ) {\n\t\t\t\t\t\t\tshouldRun = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! shouldRun ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fix them.\n\t\t\t\t\tvar toFix = {};\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Determines if the TinyMCE instance should be fixed.\n\t\t\t\t\t *\n\t\t\t\t\t * @since 4.19.0\n\t\t\t\t\t *\n\t\t\t\t\t * @param {string} key Editor Key. This is the HTML id attribute of the textarea powering the editor instance.\n\t\t\t\t\t * @return {Boolean} Returns `true` if the editor should be fixed.\n\t\t\t\t\t */\n\t\t\t\t\tfunction llmsShouldFixTinyMCEEditor( key ) {\n\t\t\t\t\t\treturn ( 'excerpt' === key || -1 !== key.indexOf( 'llms' ) || -1 !== key.indexOf( 'lifterlms' ) )\n\t\t\t\t\t};\n\n\t\t\t\t\t// Loop through all the loaded editors.\n\t\t\t\t\tfor ( var key in tinyMCE.EditorManager.editors ) {\n\n\t\t\t\t\t\t// Mark LifterLMS editors to be fixed & de-init the editor.\n\t\t\t\t\t\tif ( llmsShouldFixTinyMCEEditor( key ) ) {\n\n\t\t\t\t\t\t\ttoFix[ key ] = tinyMCE.EditorManager.get( key );\n\t\t\t\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, key );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If we remove and re-init immediately it doesn't work, so we'll wait a bit and then re-init them all.\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tfor ( var key in toFix ) {\n\t\t\t\t\t\t\ttinyMCE.EditorManager.init( toFix[ key ].settings || tinyMCE.EditorManager.settings );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 500 );\n\n\t\t\t\t}\n\t\t\t);\n\n\t\t};\n\n\t\t/**\n\t\t * Binds custom llms merge code buttons\n\t\t *\n\t\t * @return void\n\t\t * @since 3.1.0\n\t\t * @version 3.9.2\n\t\t */\n\t\tthis.bind_merge_code_buttons = function( $wrappers ) {\n\n\t\t\t$wrappers = $wrappers || $( '.llms-merge-code-wrapper' );\n\n\t\t\t$wrappers.find( '.llms-merge-code-button' ).on( 'click', function() {\n\n\t\t\t\t$( this ).next( '.llms-merge-codes' ).toggleClass( 'active' );\n\n\t\t\t} );\n\n\t\t\t$wrappers.find( '.llms-merge-codes li' ).on( 'click', function() {\n\n\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t$parent = $el.closest( '.llms-merge-codes' ),\n\t\t\t\t\ttarget = $parent.attr( 'data-target' ),\n\t\t\t\t\tcode = $el.attr( 'data-code' );\n\n\t\t\t\t// dealing with a tinymce instance\n\t\t\t\tif ( -1 === target.indexOf( '#' ) ) {\n\n\t\t\t\t\tvar editor = window.tinymce.editors[ target ];\n\t\t\t\t\tif ( editor ) {\n\t\t\t\t\t\teditor.insertContent( code );\n\t\t\t\t\t} // fallback in case we can't access the editor directly\n\t\t\t\t\telse {\n\t\t\t\t\t\talert( LLMS.l10n.translate( 'Copy this code and paste it into the desired area' ) + ': ' + code );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t// dealing with a DOM id\n\t\t\t\telse {\n\n\t\t\t\t\t$( target ).val( $( target ).val() + code );\n\n\t\t\t\t}\n\n\t\t\t\t$parent.removeClass( 'active' );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind metabox tabs\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.bind_tabs = function() {\n\t\t\t$( '.llms-nav-tab-wrapper .tabs li' ).on( 'click', function() {\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$metabox = $btn.closest( '.llms-mb-container' ),\n\t\t\t\t\ttab_id = $btn.attr( 'data-tab' );\n\n\t\t\t\t$btn.siblings().removeClass( 'llms-active' );\n\n\t\t\t\t$metabox.find( '.tab-content' ).removeClass( 'llms-active' );\n\n\t\t\t\t$btn.addClass( 'llms-active' );\n\t\t\t\t$( '#' + tab_id ).addClass( 'llms-active' );\n\n\t\t\t} );\n\t\t};\n\n\t\t/**\n\t\t * Enable WP Post Table searches for applicable select2 boxes\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.21.0 Unknown.\n\t\t * @since 6.0.0 Show element at 100% width if not displaying a view button.\n\t\t * @since 7.1.1 Fixed `home_url` for view button.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.post_select = function( $el ) {\n\n\t\t\tvar multi = 'multiple' === $el.attr( 'multiple' ),\n\t\t\t\tnoViewBtn = $el.attr( 'data-no-view-button' );\n\n\t\t\t$el.llmsPostsSelect2( {\n\t\t\t\twidth: multi || noViewBtn ? '100%' : '65%',\n\t\t\t} );\n\n\t\t\tif ( multi || noViewBtn ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// add a \"View\" button to see what the selected page looks like\n\t\t\tvar msg = LLMS.l10n.translate( 'View' ),\n\t\t\t\t$btn = $( '' + msg + ' ' );\n\t\t\t$el.next( '.select2' ).after( $btn );\n\n\t\t\t$el.on( 'change', function() {\n\t\t\t\tvar id = $( this ).val();\n\t\t\t\tif ( id ) {\n\t\t\t\t\t$btn.attr( 'href', window.llms.home_url + '/?p=' + id ).show();\n\t\t\t\t} else {\n\t\t\t\t\t$btn.hide();\n\t\t\t\t}\n\t\t\t} ).trigger( 'change' );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind dom events for .llms-tables\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.bind_tables = function() {\n\n\t\t\t$( '.llms-table button[name=\"llms-expand-table\"]' ).on( 'click', function() {\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$table = $btn.closest( '.llms-table' )\n\n\t\t\t\t// switch the text on the button if alt text is found\n\t\t\t\tif ( $btn.attr( 'data-text' ) ) {\n\t\t\t\t\tvar text = $btn.text();\n\t\t\t\t\t$btn.text( $btn.attr( 'data-text' ) );\n\t\t\t\t\t$btn.attr( 'data-text', text );\n\t\t\t\t}\n\n\t\t\t\t// switch classes on all expandable elements\n\t\t\t\t$table.find( '.expandable' ).each( function() {\n\n\t\t\t\t\tif ( $( this ).hasClass( 'closed' ) ) {\n\t\t\t\t\t\t$( this ).addClass( 'opened' ).removeClass( 'closed' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( this ).addClass( 'closed' ).removeClass( 'opened' );\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// go\n\t\tthis.init();\n\n\t};\n\n\t// initialize the object\n\twindow.llms.metaboxes = new Metaboxes();\n\n} )( jQuery );\n"],"sourceRoot":"../../js/private"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-metaboxes.min.js.map b/assets/maps/js/llms-metaboxes.min.js.map
new file mode 100644
index 0000000000..7eaaeeeb7d
--- /dev/null
+++ b/assets/maps/js/llms-metaboxes.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["llms-metaboxes.js"],"names":["$","document","ready","val","hide","fn","llmsCollapsible","this","on","$parent","closest","$siblings","siblings","toggleClass","trigger","find","slideToggle","each","removeClass","slideUp","window","llms","metaboxes","repeaters","$repeaters","init","self","length","LLMS","wait_for","tinyMCE","load","bind","attr","handle_submit","$repeater","$rows","add_row","sortable","handle","items","start","event","ui","addClass","stop","item","ed_id","EditorManager","execCommand","save","e","stopPropagation","$row","confirm","l10n","translate","remove","setTimeout","data","expand","$model","clone_row","new_index","editor","reindex","key","$field","hasClass","i","append","title","bind_row","bind_row_header","llmsSelect2","width","llmsStudentsSelect2","bind_datepickers","bind_controllers","$title","text","$ed","clone","wait","$btn","$spinner","parent","is","removeAttr","preventDefault","setInterval","clearInterval","off","store","obj","index","old_index","replace_attr","$el","str","replace","serialize","rows","name","editors","getContent","push","action","cb","store_action","Ajax","call","beforeSend","Spinner","success","r","bindings","post_select","bind_tabs","bind_mce_fixes","selector","func","$selector","reduced","filter","post","post_type","bind_cb_controllers","$controllers","$cb","$controlled","slideDown","possible","vals","indexOf","split","bind_datepicker","format","maxDate","minDate","datepicker","dateFormat","$datepickers","bind_editables","$fields","make_editable","min_date","max_date","$label","type","required","options","JSON","parse","$input","$picker","date","hour","minute","empty","bind_llms_engagement","engagement_type","$select","cpt","bind_llms_membership","$table","toggle_header_row","first","show","get_course_ids","courses","$container","course_id","fadeOut","prepend","message","replaceWith","id","alert","%s","$tr","admin_url","error","jqxhr","code","error_msg","complete","bind_llms_order","txn_id","refundable_amount","gateway_supports","gateway_title","$new_row","$gateway_btn","after","next","one","field","gateway","gateway_data","$wrap","enabled","undefined","wp","includes","select","getMetaBoxesPerLocation","shouldRun","toFix","get","settings","bind_merge_code_buttons","$wrappers","target","tinymce","insertContent","$metabox","tab_id","multi","noViewBtn","llmsPostsSelect2","msg","home_url","bind_tables","jQuery"],"mappings":"AAMA,CAAA,SAAAA,GAEAA,EAAAC,QAAA,EAAAC,MAAA,WAEA,WAAAF,EAAA,kCAAA,EAAAG,IAAA,GACAH,EAAA,iFAAA,EAAAI,KAAA,CAEA,CAAA,EASAJ,EAAAK,GAAAC,gBAAA,WAoBA,OAhBAC,KAAAC,GAAA,QAAA,2BAAA,WAEA,IAAAC,EAAAT,EAAAO,IAAA,EAAAG,QAAA,mBAAA,EACAC,EAAAF,EAAAG,SAAA,mBAAA,EAEAH,EAAAI,YAAA,QAAA,EAAAC,QAAA,0BAAA,EAEAL,EAAAM,KAAA,wBAAA,EAAAC,YAAA,GAAA,EAEAL,EAAAM,KAAA,WACAjB,EAAAO,IAAA,EAAAW,YAAA,QAAA,EACAlB,EAAAO,IAAA,EAAAQ,KAAA,wBAAA,EAAAI,QAAA,GAAA,CACA,CAAA,CAEA,CAAA,EAEAZ,IAEA,EAEAa,OAAAC,KAAAD,OAAAC,MAAA,GAs7CAD,OAAAC,KAAAC,UAAA,IAp7CA,WAcAf,KAAAgB,UAAA,CAOAD,UAAAf,KAOAiB,WAAA,KAUAC,KAAA,WAEA,IAAAC,EAAAnB,KAEAmB,EAAAF,WAAAxB,EAAA,wBAAA,EAEA0B,EAAAF,WAAAG,SAGAC,KAAAC,SACA,WACA,MAAA,aAAA,OAAAC,OACA,EACA,WACAJ,EAAAK,KAAA,EACAL,EAAAM,KAAA,CACA,CACA,EAMAhC,EAAA,2CAAA,EAAAQ,GAAA,QAAA,WACAR,EAAAO,IAAA,EAAA0B,KAAA,oBAAA,KAAA,CACA,CAAA,EAGAjC,EAAA,OAAA,EAAAQ,GAAA,SAAAkB,EAAAQ,aAAA,EAIA,EAWAF,KAAA,WAEA,IAAAN,EAAAnB,KAEAmB,EAAAF,WAAAP,KAAA,WAEA,IAAAkB,EAAAnC,EAAAO,IAAA,EACA6B,EAAAD,EAAApB,KAAA,qBAAA,EAGAoB,EAAApB,KAAA,wBAAA,EAAAP,GAAA,QAAA,WACAkB,EAAAW,QAAAF,EAAA,KAAA,CAAA,CAAA,CACA,CAAA,EAGAC,EAAAE,SAAA,CACAC,OAAA,oBACAC,MAAA,qBACAC,MAAA,SAAAC,EAAAC,GACAP,EAAAQ,SAAA,UAAA,CACA,EACAC,KAAA,SAAAH,EAAAC,GACAP,EAAAlB,YAAA,UAAA,EAEAyB,EAAAG,KAAA/B,KAAA,yBAAA,EACAE,KAAA,WACA,IAAA8B,EAAA/C,EAAAO,IAAA,EAAA0B,KAAA,IAAA,EACAH,QAAAkB,cAAAC,YAAA,kBAAA,CAAA,EAAAF,CAAA,EACAjB,QAAAkB,cAAAC,YAAA,eAAA,CAAA,EAAAF,CAAA,CACA,CAAA,EAEArB,EAAAwB,KAAAf,CAAA,CACA,CACA,CAAA,EAEAA,EAAA3B,GAAA,QAAA,wBAAA,SAAA2C,GACAA,EAAAC,gBAAA,EACAC,EAAArD,EAAAO,IAAA,EAAAG,QAAA,oBAAA,EACAU,OAAAkC,QAAA1B,KAAA2B,KAAAC,UAAA,kEAAA,CAAA,IACAH,EAAAI,OAAA,EACAC,WAAA,WACAhC,EAAAwB,KAAAf,CAAA,CACA,EAAA,CAAA,EAEA,CAAA,CAEA,CAAA,CAEA,EAaAE,QAAA,SAAAF,EAAAwB,EAAAC,GAEA,IAAAlC,EAAAnB,KACA6B,EAAAD,EAAApB,KAAA,qBAAA,EACA8C,EAAA1B,EAAApB,KAAA,sBAAA,EACAsC,EAAA3B,EAAAoC,UAAAD,EAAA9C,KAAA,oBAAA,CAAA,EACAgD,EAAA5B,EAAApB,KAAA,oBAAA,EAAAY,OACAqC,EAAAtC,EAAAuC,QAAAZ,EAAAU,CAAA,EAEAJ,GACA3D,EAAAiB,KAAA0C,EAAA,SAAAO,EAAA/D,GAEA,IAAAgE,EAAAd,EAAAtC,KAAA,WAAAmD,EAAA,IAAA,EAEAC,EAAAC,SAAA,sBAAA,GACApE,EAAAiB,KAAAd,EAAA,SAAAkE,EAAAV,GACAQ,EAAAG,OAAA,kBAAAX,EAAAO,IAAA,yBAAAP,EAAAY,MAAA,WAAA,CACA,CAAA,EACAJ,EAAArD,QAAA,QAAA,GAEAqD,EAAAhE,IAAAA,CAAA,CAGA,CAAA,EAGAuD,WAAA,WACAhC,EAAA8C,SAAAnB,CAAA,CACA,EAAA,CAAA,EAEAjB,EAAAkC,OAAAjB,CAAA,EACAO,GACAP,EAAAtC,KAAA,0BAAA,EAAAD,QAAA,OAAA,EAEAgB,QAAAkB,cAAAC,YAAA,eAAA,CAAA,EAAAe,CAAA,EAEA7B,EAAArB,QAAA,wBAAA,CACAuC,KAAAA,EACAM,KAAAA,CACA,CAAA,CAEA,EAWAa,SAAA,SAAAnB,GAEA9C,KAAAkE,gBAAApB,CAAA,EAEAA,EAAAtC,KAAA,eAAA,EAAA2D,YAAA,CACAC,MAAA,MACA,CAAA,EAEAtB,EAAAtC,KAAA,uBAAA,EAAA6D,oBAAA,EAEArE,KAAAe,UAAAuD,iBAAAxB,EAAAtC,KAAA,kBAAA,CAAA,EACAR,KAAAe,UAAAwD,iBAAAzB,EAAAtC,KAAA,sBAAA,CAAA,CAEA,EAUA0D,gBAAA,SAAApB,GAGA,IAAA0B,EAAA1B,EAAAtC,KAAA,sBAAA,EACAoD,EAAAd,EAAAtC,KAAA,sCAAA,EAEAgE,EAAA9C,KAAA,eAAA8C,EAAAC,KAAA,CAAA,EAEAb,EAAA3D,GAAA,sBAAA,WACA,IAEAL,GADAA,EADAH,EAAAO,IAAA,EAAAJ,IAAA,IAEA4E,EAAA9C,KAAA,cAAA,EAEA8C,EAAAC,KAAA7E,CAAA,CACA,CAAA,EAAAW,QAAA,OAAA,CAEA,EAUAgD,UAAA,SAAAT,GAOA,OALA4B,IAAA5B,EAAAtC,KAAA,kBAAA,GACAY,QACAG,QAAAkB,cAAAC,YAAA,kBAAA,CAAA,EAAAgC,IAAAhD,KAAA,IAAA,CAAA,EAGAoB,EAAA6B,MAAA,CAEA,EAWAhD,cAAA,SAAAiB,GAGA,IAcAzB,EACA2C,EACAc,EAhBAC,EAAApF,EAAA,iCAAA,EACAqF,EAAAD,EAAAE,OAAA,EAAAvE,KAAA,UAAA,EAEAqE,EAAAG,GAAA,eAAA,EACAH,EAAAI,WAAA,mBAAA,GAIArC,EAAAsC,eAAA,EAGAzF,EAAA,4BAAA,EAAA4C,SAAA,UAAA,EAAAX,KAAA,WAAA,UAAA,EACAoD,EAAAzC,SAAA,WAAA,EAEAlB,EAAAN,OAAAC,KAAAC,UAAAC,UACA8C,EAAA,EAGA3C,EAAAF,WAAAP,KAAA,WACAS,EAAAwB,KAAAlD,EAAAO,IAAA,CAAA,CACA,CAAA,EAEA4E,EAAAO,YAAA,WAEA,IAAArB,GAAA,CAAArE,EAAA,mCAAA,EAAA2B,QAEAgE,cAAAR,CAAA,EACAnF,EAAA,OAAA,EAAA4F,IAAA,SAAArF,KAAA2B,aAAA,EACAmD,EAAAnE,YAAA,WAAA,EACAkE,EAAAlE,YAAA,UAAA,EAAAsE,WAAA,UAAA,EAAA1E,QAAA,OAAA,GAIAuD,CAAA,EAIA,EAAA,GAAA,EAEA,EAUAtC,KAAA,WAEA,IAAAL,EAAAnB,KAEAmB,EAAAF,WAAAP,KAAA,WAEA,IAAAkB,EAAAnC,EAAAO,IAAA,EAIA4B,EAAAiC,SAAA,WAAA,GAAAjC,EAAAiC,SAAA,YAAA,GAIA1C,EAAAmE,MAAA1D,EAAA,OAAA,SAAAwB,GAEAxB,EAAAS,SAAA,WAAA,EAEA5C,EAAAiB,KAAA0C,EAAAA,KAAA,SAAAU,EAAAyB,GACApE,EAAAW,QAAAF,EAAA2D,EAAA,CAAA,CAAA,CACA,CAAA,EAGA3D,EAAApB,KAAA,wCAAA,EAAAE,KAAA,WACAS,EAAA8C,SAAAxE,EAAAO,IAAA,CAAA,CACA,CAAA,CAEA,CAAA,CAEA,CAAA,CAEA,EAeA0D,QAAA,SAAAZ,EAAA0C,GAEA,IAAAC,EAAA3C,EAAApB,KAAA,gBAAA,EACAgD,EAAA5B,EAAAtC,KAAA,+BAAA,EAIA,SAAAkF,EAAAC,EAAAjE,GACAiE,EAAAjF,KAAA,WACA,IAAAkF,EAAAnG,EAAAO,IAAA,EAAA0B,KAAAA,CAAA,EACAjC,EAAAO,IAAA,EAAA0B,KAAAA,EAAAkE,EAAAC,QAAAJ,EAAAD,CAAA,CAAA,CACA,CAAA,CACA,CAiBA,OAxBAjE,QAAAkB,cAAAC,YAAA,kBAAA,CAAA,EAAAgC,EAAAhD,KAAA,IAAA,CAAA,EASAoB,EAAApB,KAAA,iBAAA8D,CAAA,EAEAE,EAAA5C,EAAA,gBAAA,EAEA4C,EAAA5C,EAAAtC,KAAA,qBAAA,EAAA,aAAA,EAEAkF,EAAA5C,EAAAtC,KAAA,sEAAA,EAAA,IAAA,EACAkF,EAAA5C,EAAAtC,KAAA,sEAAA,EAAA,MAAA,EACAkF,EAAA5C,EAAAtC,KAAA,mBAAA,EAAA,iBAAA,EACAkF,EAAA5C,EAAAtC,KAAA,mBAAA,EAAA,iBAAA,EACAkF,EAAA5C,EAAAtC,KAAA,yBAAA,EAAA,mBAAA,EACAkF,EAAA5C,EAAAtC,KAAA,yBAAA,EAAA,IAAA,EACAkF,EAAA5C,EAAAtC,KAAA,kBAAA,EAAA,IAAA,EACAkF,EAAA5C,EAAAtC,KAAA,sBAAA,EAAA,IAAA,EAEAkE,EAAAhD,KAAA,IAAA,CAEA,EAWAiB,KAAA,SAAAf,GACAA,EAAArB,QAAA,4BAAA,CAAAoF,IAAA/D,CAAA,CAAA,EACA5B,KAAAsF,MAAA1D,EAAA,MAAA,CACA,EAUAkE,UAAA,SAAAlE,GAEA,IAAAmE,EAAA,GA8BA,OA5BAnE,EAAApB,KAAA,wCAAA,EAAAE,KAAA,WAEA,IAAA6E,EAAA,GAGA9F,EAAAO,IAAA,EAAAQ,KAAA,6CAAA,EAAAE,KAAA,WACA6E,EAAA9F,EAAAO,IAAA,EAAA0B,KAAA,MAAA,GAAAjC,EAAAO,IAAA,EAAAJ,IAAA,CACA,CAAA,EAGAH,EAAAO,IAAA,EAAAQ,KAAA,yBAAA,EAAAE,KAAA,WAEA,IAAAsF,EAAAvG,EAAAO,IAAA,EAAA0B,KAAA,MAAA,EAGAH,QAAA0E,QAAAD,GACAT,EAAAS,GAAAzE,QAAA0E,QAAAD,GAAAE,WAAA,EAGAX,EAAAS,GAAAvG,EAAAO,IAAA,EAAAJ,IAAA,CAGA,CAAA,EAEAmG,EAAAI,KAAAZ,CAAA,CAEA,CAAA,EAEAQ,CAEA,EAYAT,MAAA,SAAA1D,EAAAwE,EAAAC,GAEAA,EAAAA,GAAA,aACA,IACAjD,EAAA,CACAgD,OAAAxE,EAAApB,KAAA,8BAAA,EAAAZ,IAAA,EACA0G,aAAAF,CACA,EAEA,SAAAA,IACAhD,EAAA2C,KAPA/F,KAOA8F,UAAAlE,CAAA,GAGAP,KAAAkF,KAAAC,KAAA,CACApD,KAAAA,EACAqD,WAAA,WAEA7E,EAAAS,SAAA,YAAA,EACAhB,KAAAqF,QAAAxE,MAAAN,CAAA,CAEA,EACA+E,QAAA,SAAAC,GAEAP,EAAAO,CAAA,EACAvF,KAAAqF,QAAApE,KAAAV,CAAA,EACAA,EAAAjB,YAAA,YAAA,CAEA,CAEA,CAAA,CAEA,CAEA,EACAX,KAAAgB,UAAAE,KAAA,EAaAlB,KAAAkB,KAAA,WAEA,IAAAC,EAAAnB,KAaA6G,GAXApH,EAAA,oBAAA,EAAAiB,KAAA,WACAS,EAAA2F,YAAArH,EAAAO,IAAA,CAAA,CACA,CAAA,EAEAP,EAAA,yBAAA,EAAAM,gBAAA,EAEAC,KAAA+G,UAAA,EAEA/G,KAAAgH,eAAA,EAGA,CACA,CACAC,SAAAxH,EAAA,kBAAA,EACAyH,KAAA,kBACA,EACA,CACAD,SAAAxH,EAAA,eAAA,EACAyH,KAAA,SAAAC,GACAA,EAAAhD,YAAA,CACAC,MAAA,MACA,CAAA,CACA,CACA,EACA,CACA6C,SAAAxH,EAAA,uBAAA,EACAyH,KAAA,SAAAC,GACAA,EAAA9C,oBAAA,CACA,CACA,EACA,CACA4C,SAAAxH,EAAA,uCAAA,EACAyH,KAAA,qBACA,EACA,CACAD,SAAAxH,EAAA,sBAAA,EACAyH,KAAA,kBACA,EACA,CACAD,SAAAxH,EAAA,aAAA,EACAyH,KAAA,aACA,EACA,CACAD,SAAAxH,EAAA,0BAAA,EACAyH,KAAA,yBACA,EACA,CACAD,SAAAxH,EAAA,uCAAA,EACAyH,KAAA,gBACA,IAIAzH,EAAAiB,KAAAmG,EAAA,SAAArB,EAAAD,GAEA,IAGA6B,EAHA7B,EAAA0B,SAAA7F,SAGAgG,EAAA7B,EAAA0B,SAAAI,OAAA,WACA,OAAA,IAAA5H,EAAAO,IAAA,EAAAG,QAAA,sBAAA,EAAAiB,MACA,CAAA,EAGA,UAAA,OAAAmE,EAAA2B,KACA/F,EAAAoE,EAAA2B,MAAAE,CAAA,EAGA,YAAA,OAAA7B,EAAA2B,MACA3B,EAAA2B,KAAAE,CAAA,EAKA,CAAA,EAGAvG,OAAAC,KAAAwG,KAAAC,WAIA,YAAA,OAAAvH,KAFAkH,EAAA,QAAArG,OAAAC,KAAAwG,KAAAC,YAIAvH,KAAAkH,GAAA,CAMA,EAUAlH,KAAAwH,oBAAA,SAAAC,IAEAA,EAAAA,GAAAhI,EAAA,uCAAA,GAEAiB,KAAA,WAEA,IAAAgH,EAAAjI,EAAAO,IAAA,EACA2H,EAAAlI,EAAAiI,EAAAhG,KAAA,eAAA,CAAA,EAAAvB,QAAA,eAAA,EAEAuH,EAAAzH,GAAA,SAAA,WAEAR,EAAAO,IAAA,EAAAgF,GAAA,UAAA,EAEA2C,EAAAC,UAAA,GAAA,EAIAD,EAAA/G,QAAA,GAAA,CAIA,CAAA,EAEA8G,EAAAnH,QAAA,QAAA,CAEA,CAAA,CAEA,EAUAP,KAAAuE,iBAAA,SAAAkD,IAEAA,EAAAA,GAAAhI,EAAA,sBAAA,GAEAiB,KAAA,WAEA,IAEAd,EAFA+F,EAAAlG,EAAAO,IAAA,EACA2H,EAAAlI,EAAA,sBAAAkG,EAAAjE,KAAA,IAAA,EAAA,IAAA,EAGAiE,EAAA1F,GAAA,SAAA,WAIAL,EAFA,aAAA+F,EAAAjE,KAAA,MAAA,GAEAiE,EAAAX,GAAA,UAAA,EAIAW,EAAA/F,IAAA,EAJA,QAQA+H,EAAAjH,KAAA,WAEA,IAAAmH,EAAApI,EAAAO,IAAA,EAAA0B,KAAA,uBAAA,EACAoG,EAAA,GAEA,CAAA,IAAAD,EAAAE,QAAA,GAAA,EAEAD,EAAAD,EAAAG,MAAA,GAAA,EAIAF,EAAA3B,KAAA0B,CAAA,EAIA,CAAA,IAAAC,EAAAC,QAAAnI,CAAA,EAEAH,EAAAO,IAAA,EAAA4H,UAAA,GAAA,EAIAnI,EAAAO,IAAA,EAAAY,QAAA,GAAA,CAIA,CAAA,CAEA,CAAA,EAEA+E,EAAApF,QAAA,QAAA,CAEA,CAAA,CAEA,EAUAP,KAAAiI,gBAAA,SAAAtC,GACA,IAAAuC,EAAAvC,EAAAjE,KAAA,aAAA,GAAA,WACAyG,EAAAxC,EAAAjE,KAAA,eAAA,GAAA,KACA0G,EAAAzC,EAAAjE,KAAA,eAAA,GAAA,KACAiE,EAAA0C,WAAA,CACAC,WAAAJ,EACAC,QAAAA,EACAC,QAAAA,CACA,CAAA,CACA,EAUApI,KAAAsE,iBAAA,SAAAiE,GAEA,IAAApH,EAAAnB,MAEAuI,EAAAA,GAAA9I,EAAA,kBAAA,GAEAiB,KAAA,WACAS,EAAA8G,gBAAAxI,EAAAO,IAAA,CAAA,CACA,CAAA,CAEA,EAWAA,KAAAwI,eAAA,WAEA,IAAArH,EAAAnB,KAwDAP,EAAA,uCAAA,EAAAQ,GAAA,QAAA,SAAA2C,GAEAA,EAAAsC,eAAA,EAEA,IAAAL,EAAApF,EAAAO,IAAA,EAIAyI,EADA5D,EAAAnD,KAAA,aAAA,EACAjC,EAAAoF,EAAAnD,KAAA,aAAA,CAAA,EAEAmD,EAAA1E,QAAA,uBAAA,EAAAK,KAAA,sBAAA,EAGAqE,EAAA3B,OAAA,EAEAuF,EAAA/H,KAAA,WACAgI,IA3CAR,EACAS,EACAC,EA7BAhF,EAsEAnE,EAAAO,IAAA,EApEA6I,EAAAjF,EAAApD,KAAA,OAAA,EAAAmE,MAAA,EACAqB,EAAApC,EAAAlC,KAAA,oBAAA,EACAoH,EAAAlF,EAAAlC,KAAA,yBAAA,EACAqH,EAAAnF,EAAAlC,KAAA,6BAAA,GAAA,KACA9B,EAAAgE,EAAAlC,KAAA,0BAAA,EAGAqH,EAAA,QAAAA,EAAA,uBAAA,GAEA,GAAA,WAAAD,EAAA,CAEA,IAIAnF,EAJAqF,EAAAC,KAAAC,MAAAtF,EAAAlC,KAAA,4BAAA,CAAA,EAGAyH,EAAA1J,EAAA,iBAAAuG,EAAA,IAAA+C,EAAA,KAAA,EACA,IAAApF,KAAAqF,EAEAG,EAAApF,OAAA,kBAAAJ,EAAA,KADA/D,IAAA+D,EAAA,uBAAA,IACA,IAAAqF,EAAArF,GAAA,WAAA,CAGA,KAAA,aAAAmF,GAEAK,EAAA1J,EAAA,qCAAA,EAEAG,EAAAqJ,KAAAC,MAAAtJ,CAAA,EACAsI,EAAAtE,EAAAlC,KAAA,gCAAA,GAAA,GACAiH,EAAA/E,EAAAlC,KAAA,6BAAA,GAAA,GACAkH,EAAAhF,EAAAlC,KAAA,6BAAA,GAAA,GAEA0H,QAAA3J,EAAA,+DAAAyI,EAAA,oBAAAU,EAAA,oBAAAD,EAAA,WAAA3C,EAAA,8BAAApG,EAAAyJ,KAAA,IAAA,EACAlI,EAAA8G,gBAAAmB,OAAA,EACAD,EAAApF,OAAAqF,OAAA,EACAD,EAAApF,OAAA,YAAA,EAEAoF,EAAApF,OAAA,yDAAAiC,EAAA,gCAAApG,EAAA0J,KAAA,IAAA,EACAH,EAAApF,OAAA,YAAA,EACAoF,EAAApF,OAAA,yDAAAiC,EAAA,kCAAApG,EAAA2J,OAAA,IAAA,GAIAJ,EAAA1J,EAAA,gBAAAuG,EAAA,WAAA8C,EAAA,YAAAlJ,EAAA,IAAAmJ,EAAA,GAAA,EAGAnF,EAAA4F,MAAA,EAAAzF,OAAA8E,CAAA,EAAA9E,OAAAoF,CAAA,EACA,WAAAL,GACA3F,WAAA,WACAgG,EAAA5I,QAAA,QAAA,CACA,EAAA,GAAA,CAsBA,CAAA,CAEA,CAAA,CAEA,EASAP,KAAAyJ,qBAAA,WAEA,IAAAtI,EAAAnB,KAGAP,EAAA,wBAAA,EAAAQ,GAAA,SAAA,WAEAR,EAAA,mBAAA,EAAAc,QAAA,8BAAAd,EAAAO,IAAA,EAAAJ,IAAA,CAAA,CAEA,CAAA,EAGAH,EAAA,mBAAA,EAAAQ,GAAA,8BAAA,SAAA2C,EAAA8G,GAEA,IAAAC,EAAAlK,EAAAO,IAAA,EAEA,OAAA0J,GAKA,IAAA,cACA,IAAA,cACA,IAAA,QAEA,IAAAE,EAAA,QAAAF,EAEAC,EAAA/J,IAAA,IAAA,EAAA8B,KAAA,iBAAAkI,CAAA,EAAArJ,QAAA,QAAA,EACAY,EAAA2F,YAAA6C,CAAA,EAEA,MAKA,QAEAA,EAAApJ,QAAA,uCAAAmJ,CAAA,CAEA,CAEA,CAAA,CAEA,EAWA1J,KAAA6J,qBAAA,WAEA,IAAAC,EAAArK,EAAA,mCAAA,EAUA,SAAAsK,IAEA,IAAAlI,EAAAiI,EAAAtJ,KAAA,UAAA,EACA,IAAAqB,EAAAT,OACAS,EAAAmI,MAAA,EAAAC,KAAA,EAEApI,EAAAmI,MAAA,EAAAnK,KAAA,CAEA,CAUA,SAAAqK,IAEA,IAAAC,EAAA,GAIA,OAHAL,EAAAtJ,KAAA,wCAAA,EAAAE,KAAA,WACAyJ,EAAAhE,KAAA1G,EAAAO,IAAA,EAAA0B,KAAA,SAAA,CAAA,CACA,CAAA,EACAyI,CAEA,CAGAJ,EAAA,EAGAD,EAAA7J,GAAA,QAAA,gCAAA,SAAA2C,GAEAA,EAAAsC,eAAA,EAEA,IAAAS,EAAAlG,EAAAO,IAAA,EACA8C,EAAA6C,EAAAxF,QAAA,IAAA,EACAiK,EAAAzE,EAAAxF,QAAA,eAAA,EAEAkB,KAAAqF,QAAAxE,MAAAkI,CAAA,EAEAvJ,OAAAQ,KAAAkF,KAAAC,KAAA,CACApD,KAAA,CACAgD,OAAA,uCACAiE,UAAA1E,EAAAjE,KAAA,SAAA,CACA,EACA+E,WAAA,WAEA2D,EAAA5J,KAAA,SAAA,EAAA0C,OAAA,CAEA,EACAyD,QAAA,SAAAC,GAEAA,EAAAD,SAEA7D,EAAAwH,QAAA,GAAA,EACAnH,WAAA,WACAL,EAAAI,OAAA,EACA6G,EAAA,CACA,EAAA,GAAA,GAIAK,EAAAG,QAAA,oBAAA3D,EAAA4D,QAAA,MAAA,EAIAnJ,KAAAqF,QAAApE,KAAA8H,CAAA,CACA,CACA,CAAA,CAEA,CAAA,EAGAN,EAAA7J,GAAA,QAAA,qCAAA,SAAA2C,GAEAA,EAAAsC,eAAA,EAEA,IAAAS,EAAAlG,EAAAO,IAAA,EAEAoK,GADAzE,EAAAxF,QAAA,IAAA,EACAwF,EAAAxF,QAAA,eAAA,GAEAU,OAAAkC,QAAA1B,KAAA2B,KAAAC,UAAA,8LAAA,CAAA,IAIA5B,KAAAqF,QAAAxE,MAAAkI,CAAA,EAEAvJ,OAAAQ,KAAAkF,KAAAC,KAAA,CACApD,KAAA,CACAgD,OAAA,qCACAiE,UAAA1E,EAAAjE,KAAA,SAAA,CACA,EACA+E,WAAA,WACA2D,EAAA5J,KAAA,SAAA,EAAA0C,OAAA,CACA,EACAyD,QAAA,SAAAC,GAEAA,EAAAD,QAEAhB,EAAA8E,YAAA,gCAAA7D,EAAAxD,KAAAoH,QAAA,uBAAA,EAIAJ,EAAAG,QAAA,oBAAA3D,EAAA4D,QAAA,MAAA,EAIAnJ,KAAAqF,QAAApE,KAAA8H,CAAA,CACA,CACA,CAAA,EAEA,CAAA,EAGA3K,EAAA,oBAAA,EAAAQ,GAAA,SAAA,WAEA,IAkBA6J,EAlBAY,EAAAjL,EAAAO,IAAA,EAAAJ,IAAA,EACAoE,EAAAvE,EAAAO,IAAA,EAAAQ,KAAA,iBAAAf,EAAAO,IAAA,EAAAJ,IAAA,EAAA,IAAA,EAAA6E,KAAA,EAGAiG,IAGA,CAAA,IAAAR,EAAA,EAAAnC,QAAA2C,CAAA,GAEAC,MAAAtJ,KAAA2B,KAAA6C,QAAA,sCAAA,CAAA+E,KAAA5G,CAAA,CAAA,CAAA,EAGAvE,EAAAO,IAAA,EAAAJ,IAAA,EAAA,EAAAW,QAAA,QAAA,IAMAuJ,EAAArK,EAAA,mCAAA,GACAoL,IAAApL,EAAA,QAAA,GAEAsE,OAAA,6FAAA,EACA8G,IAAA9G,OAAA,gBAAAlD,OAAAC,KAAAgK,UAAA,6BAAAJ,EAAA,KAAA1G,EAAA,WAAA,EACA6G,IAAA9G,OAAA,oDAAA2G,EAAA,qDAAArJ,KAAA2B,KAAAC,UAAA,eAAA,EAAA,uDAAAyH,EAAA,2EAAArJ,KAAA2B,KAAAC,UAAA,oBAAA,EAAA,WAAA,EAGA6G,EAAAtJ,KAAA,aAAA,EAAAuD,OAAA8G,GAAA,EAGApL,EAAAO,IAAA,EAAAJ,IAAA,EAAA,EAAAW,QAAA,QAAA,EAGAwJ,EAAA,EAGAD,EAAAvJ,QAAA,8BAAA,GAEA,CAAA,EAGAuJ,EAAAtJ,KAAA,aAAA,EAAAuB,SAAA,CACAC,OAAA,oBAEAM,KAAA,SAAAH,EAAAC,GACAA,EAAAG,KAAApC,QAAA,eAAA,EAAAI,QAAA,8BAAA,CACA,CACA,CAAA,EAGAuJ,EAAA7J,GAAA,+BAAA,WAEA,IAAAmK,EAAA3K,EAAAO,IAAA,EAEAqB,KAAAqF,QAAAxE,MAAAkI,CAAA,EAEAvJ,OAAAQ,KAAAkF,KAAAC,KAAA,CACApD,KAAA,CACAgD,OAAA,0CACA+D,QAAAD,EAAA,CACA,EACAa,MAAA,SAAAC,EAAAC,EAAAC,GACAP,MAAAO,CAAA,CACA,EACAC,SAAA,WACA9J,KAAAqF,QAAApE,KAAA8H,CAAA,CACA,CACA,CAAA,CAEA,CAAA,CAEA,EASApK,KAAAoL,gBAAA,WAEA3L,EAAA,mCAAA,EAAAQ,GAAA,QAAA,WAEA,IAAA4E,EAAApF,EAAAO,IAAA,EACA8C,EAAA+B,EAAA1E,QAAA,IAAA,EACAkL,EAAAvI,EAAApB,KAAA,qBAAA,EACA4J,EAAAzG,EAAAnD,KAAA,iBAAA,EACA6J,EAAA,MAAA1G,EAAAnD,KAAA,uBAAA,EACA8J,EAAA3G,EAAAnD,KAAA,cAAA,EACA+J,EAAAhM,EAAA,8CAAA,EAAAkF,MAAA,EACA+G,EAAAD,EAAAjL,KAAA,cAAA,EAGA,WAAAqE,EAAAnD,KAAA,aAAA,GAEAmD,EAAAJ,KAAApD,KAAA2B,KAAAC,UAAA,QAAA,CAAA,EACA4B,EAAAnD,KAAA,cAAA,QAAA,EACA+J,EAAAjL,KAAA,OAAA,EAAAyE,WAAA,UAAA,EACAwG,EAAAjL,KAAA,kCAAA,EAAAkB,KAAA,MAAA4J,CAAA,EACAG,EAAAjL,KAAA,kCAAA,EAAAZ,IAAAyL,CAAA,EAEAE,IACAG,EAAAlL,KAAA,qBAAA,EAAAiE,KAAA+G,CAAA,EACAE,EAAAzB,KAAA,GAGAnH,EAAA6I,MAAAF,CAAA,IAIA5G,EAAAJ,KAAApD,KAAA2B,KAAAC,UAAA,QAAA,CAAA,EACA4B,EAAAnD,KAAA,cAAA,EAAA,EACAoB,EAAA8I,KAAA,IAAA,EAAA1I,OAAA,EAIA,CAAA,EAEAzD,EAAA,uCAAA,EAAAQ,GAAA,QAAA,WAEA,IAAA4E,EAAApF,EAAAO,IAAA,EACA8C,EAAA+B,EAAA1E,QAAA,IAAA,EACAsL,EAAAhM,EAAA,8CAAA,EAAAkF,MAAA,EAGA,WAAAE,EAAAnD,KAAA,aAAA,GAEAmD,EAAAJ,KAAApD,KAAA2B,KAAAC,UAAA,QAAA,CAAA,EACA4B,EAAAnD,KAAA,cAAA,QAAA,EACA+J,EAAAjL,KAAA,OAAA,EAAAyE,WAAA,UAAA,EAEAnC,EAAA6I,MAAAF,CAAA,IAIA5G,EAAAJ,KAAApD,KAAA2B,KAAAC,UAAA,yBAAA,CAAA,EACA4B,EAAAnD,KAAA,cAAA,EAAA,EACAoB,EAAA8I,KAAA,IAAA,EAAA1I,OAAA,EAIA,CAAA,EAIAzD,EAAA,eAAA,EAAAoM,IAAA,QAAA,mEAAA,WAEApM,EAAAO,IAAA,EAAA0B,KAAA,qBAAA,GACAjC,EAAAO,IAAA,EAAA0B,KAAA,sBAAAjC,EAAAO,IAAA,EAAAJ,IAAA,CAAA,CAGA,CAAA,EAIAH,EAAA,eAAA,EAAAQ,GAAA,SAAA,mEAAA,WAEA,IAKA6L,EALAnC,EAAAlK,EAAAO,IAAA,EACA+L,EAAApC,EAAA/J,IAAA,EAEAoM,EADA/C,KAAAC,MAAAS,EAAAxJ,QAAA,qBAAA,EAAAuB,KAAA,qBAAA,CAAA,EACAqK,GAEA,IAAAD,KAAAE,EAAA,CAEA,IAAApI,EAAAnE,EAAA,eAAAuM,EAAAF,GAAA9F,KAAA,IAAA,EACAiG,EAAArI,EAAAzD,QAAA,qBAAA,EAIA6L,EAAAF,GAAAI,SAEAD,EAAAhC,KAAA,EACArG,EAAAlC,KAAA,WAAA,UAAA,EACAkC,EAAAqB,WAAA,UAAA,EAEA8G,IAAApC,EAAAjI,KAAA,qBAAA,GACAkC,EAAAhE,IAAAqM,EAAAvK,KAAA,0BAAA,CAAA,IASAkC,EAAAlC,KAAA,QAAA,EAAA,EAEAkC,EAAAqB,WAAA,UAAA,EAEAgH,EAAApM,KAAA,EAIA,CAEA,CAAA,CAEA,EAeAG,KAAAgH,eAAA,WAGAmF,KAAAA,IAAAC,GAAAhJ,MAAA,CAAA,KAAA+I,KAAAA,GAAAE,SAAAD,GAAAhJ,KAAAkJ,OAAA,gBAAA,CAAA,GAIAjL,KAAAC,SACA,WACA,OAAA6K,KAAAA,IAAAC,GAAAhJ,KAAAkJ,OAAA,gBAAA,EAAAC,wBAAA,QAAA,CACA,EACA,WAEA,IAAAC,EAAA,CAAA,EAKA,IAAA7I,KAJAnD,KAAA,CAAA,oBAAA,uBAAA,4BACAO,UAAAqL,GAAAhJ,KAAAkJ,OAAA,gBAAA,EAAAC,wBAAA,QAAA,EAIA,GAAA,CAAA,IAAA/L,KAAAuH,QAAAhH,UAAA4C,GAAA+G,EAAA,EAAA,CACA8B,EAAA,CAAA,EACA,KACA,CAGA,GAAAA,EAAA,CAKA,IAeA7I,EALAA,EAVA8I,EAAA,GAeA,IAAA9I,KAAApC,QAAAkB,cAAAwD,QAJA,aADAtC,EAQAA,IAPA,CAAA,IAAAA,EAAAoE,QAAA,MAAA,GAAA,CAAA,IAAApE,EAAAoE,QAAA,WAAA,IASA0E,EAAA9I,GAAApC,QAAAkB,cAAAiK,IAAA/I,CAAA,EACApC,QAAAkB,cAAAC,YAAA,kBAAA,CAAA,EAAAiB,CAAA,GAOAR,WAAA,WACA,IAAA,IAAAQ,KAAA8I,EACAlL,QAAAkB,cAAAvB,KAAAuL,EAAA9I,GAAAgJ,UAAApL,QAAAkB,cAAAkK,QAAA,CAEA,EAAA,GAAA,CAnCA,CAqCA,CACA,CAEA,EASA3M,KAAA4M,wBAAA,SAAAC,IAEAA,EAAAA,GAAApN,EAAA,0BAAA,GAEAe,KAAA,yBAAA,EAAAP,GAAA,QAAA,WAEAR,EAAAO,IAAA,EAAA4L,KAAA,mBAAA,EAAAtL,YAAA,QAAA,CAEA,CAAA,EAEAuM,EAAArM,KAAA,sBAAA,EAAAP,GAAA,QAAA,WAEA,IAQAwD,EARAkC,EAAAlG,EAAAO,IAAA,EACAE,EAAAyF,EAAAxF,QAAA,mBAAA,EACA2M,EAAA5M,EAAAwB,KAAA,aAAA,EACAuJ,EAAAtF,EAAAjE,KAAA,WAAA,EAGA,CAAA,IAAAoL,EAAA/E,QAAA,GAAA,GAEAtE,EAAA5C,OAAAkM,QAAA9G,QAAA6G,IAEArJ,EAAAuJ,cAAA/B,CAAA,EAGAN,MAAAtJ,KAAA2B,KAAAC,UAAA,mDAAA,EAAA,KAAAgI,CAAA,EAOAxL,EAAAqN,CAAA,EAAAlN,IAAAH,EAAAqN,CAAA,EAAAlN,IAAA,EAAAqL,CAAA,EAIA/K,EAAAS,YAAA,QAAA,CAEA,CAAA,CAEA,EASAX,KAAA+G,UAAA,WACAtH,EAAA,gCAAA,EAAAQ,GAAA,QAAA,WAEA,IAAA4E,EAAApF,EAAAO,IAAA,EACAiN,EAAApI,EAAA1E,QAAA,oBAAA,EACA+M,EAAArI,EAAAnD,KAAA,UAAA,EAEAmD,EAAAxE,SAAA,EAAAM,YAAA,aAAA,EAEAsM,EAAAzM,KAAA,cAAA,EAAAG,YAAA,aAAA,EAEAkE,EAAAxC,SAAA,aAAA,EACA5C,EAAA,IAAAyN,CAAA,EAAA7K,SAAA,aAAA,CAEA,CAAA,CACA,EAYArC,KAAA8G,YAAA,SAAAnB,GAEA,IAaAd,EAbAsI,EAAA,aAAAxH,EAAAjE,KAAA,UAAA,EACA0L,EAAAzH,EAAAjE,KAAA,qBAAA,EAEAiE,EAAA0H,iBAAA,CACAjJ,MAAA+I,GAAAC,EAAA,OAAA,KACA,CAAA,EAEAD,GAAAC,IAKAE,EAAAjM,KAAA2B,KAAAC,UAAA,MAAA,EACA4B,EAAApF,EAAA,4FAAA6N,EAAA,6DAAA,EACA3H,EAAAiG,KAAA,UAAA,EAAAD,MAAA9G,CAAA,EAEAc,EAAA1F,GAAA,SAAA,WACA,IAAAyK,EAAAjL,EAAAO,IAAA,EAAAJ,IAAA,EACA8K,EACA7F,EAAAnD,KAAA,OAAAb,OAAAC,KAAAyM,SAAA,OAAA7C,CAAA,EAAAT,KAAA,EAEApF,EAAAhF,KAAA,CAEA,CAAA,EAAAU,QAAA,QAAA,EAEA,EASAP,KAAAwN,YAAA,WAEA/N,EAAA,8CAAA,EAAAQ,GAAA,QAAA,WAEA,IAKAwE,EALAI,EAAApF,EAAAO,IAAA,EACA8J,EAAAjF,EAAA1E,QAAA,aAAA,EAGA0E,EAAAnD,KAAA,WAAA,IACA+C,EAAAI,EAAAJ,KAAA,EACAI,EAAAJ,KAAAI,EAAAnD,KAAA,WAAA,CAAA,EACAmD,EAAAnD,KAAA,YAAA+C,CAAA,GAIAqF,EAAAtJ,KAAA,aAAA,EAAAE,KAAA,WAEAjB,EAAAO,IAAA,EAAA6D,SAAA,QAAA,EACApE,EAAAO,IAAA,EAAAqC,SAAA,QAAA,EAAA1B,YAAA,QAAA,EAEAlB,EAAAO,IAAA,EAAAqC,SAAA,QAAA,EAAA1B,YAAA,QAAA,CAGA,CAAA,CAEA,CAAA,CAEA,EAGAX,KAAAkB,KAAA,CAEA,CAKA,EAAAuM,MAAA","file":"../../js/llms-metaboxes.min.js","sourcesContent":["/**\n * LifterLMS Admin Panel Metabox Functions\n *\n * @since 3.0.0\n * @version 7.1.1\n */\n ( function( $ ) {\n\n\t $( document ).ready( function() {\n\t\t // Avoid confusion by hiding the visibility option for coupons and vouchers if currently set to public.\n\t\t if ( $( 'input[name=\"visibility\"]:checked' ).val() === 'public' ) {\n\t\t\t $( 'body.post-type-llms_coupon #visibility, body.post-type-llms_voucher #visibility' ).hide();\n\t\t }\n\t } );\n\n\t /**\n\t * jQuery plugin to allow \"collapsible\" sections\n\t *\n\t * @return jQuery object\n\t * @since 3.0.0\n\t * @version 3.29.0\n\t */\n\t$.fn.llmsCollapsible = function() {\n\n\t\tvar $group = this;\n\n\t\tthis.on( 'click', '.llms-collapsible-header', function() {\n\n\t\t\tvar $parent = $( this ).closest( '.llms-collapsible' ),\n\t\t\t\t$siblings = $parent.siblings( '.llms-collapsible' );\n\n\t\t\t$parent.toggleClass( 'opened' ).trigger( 'llms-collapsible-toggled' );\n\n\t\t\t$parent.find( '.llms-collapsible-body' ).slideToggle( 400 );\n\n\t\t\t$siblings.each( function() {\n\t\t\t\t$( this ).removeClass( 'opened' );\n\t\t\t\t$( this ).find( '.llms-collapsible-body' ).slideUp( 400 );\n\t\t\t} );\n\n\t\t} );\n\n\t\treturn this;\n\n\t};\n\n\twindow.llms = window.llms || {};\n\n\tvar Metaboxes = function() {\n\n\t\t/**\n\t\t * load all partials\n\t\t */\n\t\t/**\n\t\t * LifterLMS Admin Metabox Repeater Field\n\t\t *\n\t\t * @package LifterLMS/Scripts/Partials\n\t\t *\n\t\t * @since 3.11.0\n\t\t * @version 5.3.2\n\t\t */\n\t\t\n\t\tthis.repeaters = {\n\t\t\n\t\t\t/**\n\t\t\t * Reference to the parent metabox class\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\tmetaboxes: this,\n\t\t\n\t\t\t/**\n\t\t\t * A jQuery selector for all repeater elements on the current screen\n\t\t\t *\n\t\t\t * @type {Object}\n\t\t\t */\n\t\t\t$repeaters: null,\n\t\t\n\t\t\t/**\n\t\t\t * Init\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.23.0 Unknown.\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tinit: function() {\n\t\t\n\t\t\t\tvar self = this;\n\t\t\n\t\t\t\tself.$repeaters = $( '.llms-mb-list.repeater' );\n\t\t\n\t\t\t\tif ( self.$repeaters.length ) {\n\t\t\n\t\t\t\t\t// Wait for tinyMCE just in case their editors in the repeaters.\n\t\t\t\t\tLLMS.wait_for(\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\treturn ( 'undefined' !== typeof tinyMCE );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tself.load();\n\t\t\t\t\t\t\tself.bind();\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\n\t\t\t\t\t/**\n\t\t\t\t\t * On click of any post submit buttons add some data to the submit button\n\t\t\t\t\t * so we can see which button to trigger after repeaters are finished.\n\t\t\t\t\t */\n\t\t\t\t\t$( '#post input[type=\"submit\"], #post-preview' ).on( 'click', function() {\n\t\t\t\t\t\t$( this ).attr( 'data-llms-clicked', 'yes' );\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t// Handle post submission.\n\t\t\t\t\t$( '#post' ).on( 'submit', self.handle_submit );\n\t\t\n\t\t\t\t}\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Bind DOM Events\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.13.0 Unknown.\n\t\t\t * @since 5.3.2 Don't remove the model's mceEditor instance (it's removed before cloning a row now).\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tbind: function() {\n\t\t\n\t\t\t\tvar self = this;\n\t\t\n\t\t\t\tself.$repeaters.each( function() {\n\t\t\n\t\t\t\t\tvar $repeater = $( this ),\n\t\t\t\t\t\t$rows = $repeater.find( '.llms-repeater-rows' );\n\t\t\n\t\t\t\t\t// For the repeater + button.\n\t\t\t\t\t$repeater.find( '.llms-repeater-new-btn' ).on( 'click', function() {\n\t\t\t\t\t\tself.add_row( $repeater, null, true );\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t// Make repeater rows sortable.\n\t\t\t\t\t$rows.sortable( {\n\t\t\t\t\t\thandle: '.llms-drag-handle',\n\t\t\t\t\t\titems: '.llms-repeater-row',\n\t\t\t\t\t\tstart: function( event, ui ) {\n\t\t\t\t\t\t\t$rows.addClass( 'dragging' );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstop: function( event, ui ) {\n\t\t\t\t\t\t\t$rows.removeClass( 'dragging' );\n\t\t\n\t\t\t\t\t\t\tvar $eds = ui.item.find( 'textarea.wp-editor-area' );\n\t\t\t\t\t\t\t$eds.each( function() {\n\t\t\t\t\t\t\t\tvar ed_id = $( this ).attr( 'id' );\n\t\t\t\t\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, ed_id );\n\t\t\t\t\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceAddEditor', true, ed_id );\n\t\t\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t\t\tself.save( $repeater );\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t$repeater.on( 'click', '.llms-repeater-remove', function( e ) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tvar $row = $( this ).closest( '.llms-repeater-row' );\n\t\t\t\t\t\tif ( window.confirm( LLMS.l10n.translate( 'Are you sure you want to delete this row? This cannot be undone.' ) ) ) {\n\t\t\t\t\t\t\t$row.remove();\n\t\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\t\tself.save( $repeater );\n\t\t\t\t\t\t\t}, 1 );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t} );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Add a new row to a repeater rows group\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 5.3.2 Use `self.clone_row()` to retrieve the model's base HTML for the row to be added.\n\t\t\t *\n\t\t\t * @param {Object} $repeater A jQuery selector for the repeater to add a row to.\n\t\t\t * @param {Object} data Optional object of data to fill fields in the row with.\n\t\t\t * @param {Boolean} expand If true, will automatically open the row after adding it to the dom.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tadd_row: function( $repeater, data, expand ) {\n\t\t\n\t\t\t\tvar self = this,\n\t\t\t\t\t$rows = $repeater.find( '.llms-repeater-rows' ),\n\t\t\t\t\t$model = $repeater.find( '.llms-repeater-model' ),\n\t\t\t\t\t$row = self.clone_row( $model.find( '.llms-repeater-row' ) ),\n\t\t\t\t\tnew_index = $repeater.find( '.llms-repeater-row' ).length,\n\t\t\t\t\teditor = self.reindex( $row, new_index );\n\t\t\n\t\t\t\tif ( data ) {\n\t\t\t\t\t$.each( data, function( key, val ) {\n\t\t\n\t\t\t\t\t\tvar $field = $row.find( '[name^=\"' + key + '\"]' );\n\t\t\n\t\t\t\t\t\tif ( $field.hasClass( 'llms-select2-student' ) ) {\n\t\t\t\t\t\t\t$.each( val, function( i, data ) {\n\t\t\t\t\t\t\t\t$field.append( '' + data.title + ' ' )\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t$field.trigger( 'change' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$field.val( val );\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.bind_row( $row );\n\t\t\t\t}, 1 );\n\t\t\n\t\t\t\t$rows.append( $row );\n\t\t\t\tif ( expand ) {\n\t\t\t\t\t$row.find( '.llms-collapsible-header' ).trigger( 'click' );\n\t\t\t\t}\n\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceAddEditor', true, editor );\n\t\t\n\t\t\t\t$repeater.trigger( 'llms-new-repeater-row', {\n\t\t\t\t\t$row: $row,\n\t\t\t\t\tdata: data,\n\t\t\t\t} );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Bind DOM events for a single repeater row\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.13.0 Unknown.\n\t\t\t *\n\t\t\t * @param {Object} $row A jQuery selector for the row.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tbind_row: function( $row ) {\n\t\t\n\t\t\t\tthis.bind_row_header( $row );\n\t\t\n\t\t\t\t$row.find( '.llms-select2' ).llmsSelect2( {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} );\n\t\t\n\t\t\t\t$row.find( '.llms-select2-student' ).llmsStudentsSelect2();\n\t\t\n\t\t\t\tthis.metaboxes.bind_datepickers( $row.find( '.llms-datepicker' ) );\n\t\t\t\tthis.metaboxes.bind_controllers( $row.find( '[data-is-controller]' ) );\n\t\t\t\t// This.metaboxes.bind_merge_code_buttons( $row.find( '.llms-merge-code-wrapper' ) );.\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Bind row header events\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t *\n\t\t\t * @param {Object} $row jQuery selector for the row.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tbind_row_header: function( $row ) {\n\t\t\n\t\t\t\t// Handle the title field binding.\n\t\t\t\tvar $title = $row.find( '.llms-repeater-title' ),\n\t\t\t\t\t$field = $row.find( '.llms-collapsible-header-title-field' );\n\t\t\n\t\t\t\t$title.attr( 'data-default', $title.text() );\n\t\t\n\t\t\t\t$field.on( 'keyup focusout blur', function() {\n\t\t\t\t\tvar val = $( this ).val();\n\t\t\t\t\tif ( ! val ) {\n\t\t\t\t\t\tval = $title.attr( 'data-default' );\n\t\t\t\t\t}\n\t\t\t\t\t$title.text( val );\n\t\t\t\t} ).trigger( 'keyup' );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Create a copy of the model's row after removing any tinyMCE editor instances present in the model.\n\t\t\t *\n\t\t\t * @since 5.3.2\n\t\t\t *\n\t\t\t * @param {Object} $row A jQuery object of the row to be cloned.\n\t\t\t * @return {Object} A clone of the jQuery object.\n\t\t\t */\n\t\t\tclone_row: function( $row ) {\n\t\t\n\t\t\t\t$ed = $row.find( '.editor textarea' );\n\t\t\t\tif ( $ed.length ) {\n\t\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, $ed.attr( 'id' ) );\n\t\t\t\t}\n\t\t\n\t\t\t\treturn $row.clone()\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Handle WP Post form submission to ensure repeaters are saved before submitting the form to save/publish the post\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.23.0 Unknown.\n\t\t\t *\n\t\t\t * @param {Object} e An event object.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\thandle_submit: function( e ) {\n\t\t\n\t\t\t\t// Get the button used to submit the form.\n\t\t\t\tvar $btn = $( '#post [data-llms-clicked=\"yes\"]' ),\n\t\t\t\t\t$spinner = $btn.parent().find( '.spinner' );\n\t\t\n\t\t\t\tif ( $btn.is( '#post-preview' ) ) {\n\t\t\t\t\t$btn.removeAttr( 'data-llms-clicked' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\n\t\t\t\te.preventDefault();\n\t\t\n\t\t\t\t// Core UX to prevent multi-click/or the appearance of a delay.\n\t\t\t\t$( '#post input[type=\"submit\"]' ).addClass( 'disabled' ).attr( 'disabled', 'disabled' );\n\t\t\t\t$spinner.addClass( 'is-active' );\n\t\t\n\t\t\t\tvar self = window.llms.metaboxes.repeaters,\n\t\t\t\t\ti = 0,\n\t\t\t\t\twait;\n\t\t\n\t\t\t\tself.$repeaters.each( function() {\n\t\t\t\t\tself.save( $( this ) );\n\t\t\t\t} );\n\t\t\n\t\t\t\twait = setInterval( function() {\n\t\t\n\t\t\t\t\tif ( i >= 59 || ! $( '.llms-mb-list.repeater.processing' ).length ) {\n\t\t\n\t\t\t\t\t\tclearInterval( wait );\n\t\t\t\t\t\t$( '#post' ).off( 'submit', this.handle_submit );\n\t\t\t\t\t\t$spinner.removeClass( 'is-active' );\n\t\t\t\t\t\t$btn.removeClass( 'disabled' ).removeAttr( 'disabled' ).trigger( 'click' );\n\t\t\n\t\t\t\t\t} else {\n\t\t\n\t\t\t\t\t\ti++;\n\t\t\n\t\t\t\t\t}\n\t\t\n\t\t\t\t}, 1000 );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Load repeater data from the server and create rows in the DOM\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.12.1 Unknown.\n\t\t\t *\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tload: function() {\n\t\t\n\t\t\t\tvar self = this;\n\t\t\n\t\t\t\tself.$repeaters.each( function() {\n\t\t\n\t\t\t\t\tvar $repeater = $( this );\n\t\t\n\t\t\t\t\t// Ensure the repeater is only loaded once to prevent duplicates resulting from duplicating binding.\n\t\t\t\t\t// On certain sites which I cannot quite explain...\n\t\t\t\t\tif ( $repeater.hasClass( 'is-loaded' ) || $repeater.hasClass( 'processing' ) ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tself.store( $repeater, 'load', function( data ) {\n\t\t\n\t\t\t\t\t\t$repeater.addClass( 'is-loaded' );\n\t\t\n\t\t\t\t\t\t$.each( data.data, function( i, obj ) {\n\t\t\t\t\t\t\tself.add_row( $repeater, obj, false );\n\t\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t\t// For each row within the repeater.\n\t\t\t\t\t\t$repeater.find( '.llms-repeater-rows .llms-repeater-row' ).each( function() {\n\t\t\t\t\t\t\tself.bind_row( $( this ) );\n\t\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t} );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Reindex a row\n\t\t\t *\n\t\t\t * Renames ids, attrs, and etc...\n\t\t\t *\n\t\t\t * Used when cloning the model for new rows.\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t *\n\t\t\t * @param {Object} $row jQuery selector for the row.\n\t\t\t * @param {string} index The index (or id) to use when renaming.\n\t\t\t * @return {string}\n\t\t\t */\n\t\t\treindex: function( $row, index ) {\n\t\t\n\t\t\t\tvar old_index = $row.attr( 'data-row-order' ),\n\t\t\t\t\t$ed = $row.find( '.llms-mb-list.editor textarea' );\n\t\t\n\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, $ed.attr( 'id' ) );\n\t\t\n\t\t\t\tfunction replace_attr( $el, attr ) {\n\t\t\t\t\t$el.each( function() {\n\t\t\t\t\t\tvar str = $( this ).attr( attr );\n\t\t\t\t\t\t$( this ).attr( attr, str.replace( old_index, index ) );\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\n\t\t\t\t$row.attr( 'data-row-order', index );\n\t\t\n\t\t\t\treplace_attr( $row, 'data-row-order' );\n\t\t\n\t\t\t\treplace_attr( $row.find( 'button.insert-media' ), 'data-editor' );\n\t\t\n\t\t\t\treplace_attr( $row.find( 'input[name^=\"_llms\"], textarea[name^=\"_llms\"], select[name^=\"_llms\"]' ), 'id' );\n\t\t\t\treplace_attr( $row.find( 'input[name^=\"_llms\"], textarea[name^=\"_llms\"], select[name^=\"_llms\"]' ), 'name' );\n\t\t\t\treplace_attr( $row.find( '[data-controller]' ), 'data-controller' );\n\t\t\t\treplace_attr( $row.find( '[data-controller]' ), 'data-controller' );\n\t\t\t\treplace_attr( $row.find( 'button.wp-switch-editor' ), 'data-wp-editor-id' );\n\t\t\t\treplace_attr( $row.find( 'button.wp-switch-editor' ), 'id' );\n\t\t\t\treplace_attr( $row.find( '.wp-editor-tools' ), 'id' );\n\t\t\t\treplace_attr( $row.find( '.wp-editor-container' ), 'id' );\n\t\t\n\t\t\t\treturn $ed.attr( 'id' );\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Save a single repeaters data to the server\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t * @since 3.13.0 Unknown.\n\t\t\t *\n\t\t\t * @param {Object} $repeater jQuery selector for a repeater element.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tsave: function( $repeater ) {\n\t\t\t\t$repeater.trigger( 'llms-repeater-before-save', { $el: $repeater } );\n\t\t\t\tthis.store( $repeater, 'save' );\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * Convert a repeater element into an array of objects that can be saved to the database\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t *\n\t\t\t * @param {Object} $repeater A jQuery selector for a repeater element.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tserialize: function( $repeater ) {\n\t\t\n\t\t\t\tvar rows = [];\n\t\t\n\t\t\t\t$repeater.find( '.llms-repeater-rows .llms-repeater-row' ).each( function() {\n\t\t\n\t\t\t\t\tvar obj = {};\n\t\t\n\t\t\t\t\t// Easy...\n\t\t\t\t\t$( this ).find( 'input[name^=\"_llms\"], select[name^=\"_llms\"]' ).each( function() {\n\t\t\t\t\t\tobj[ $( this ).attr( 'name' ) ] = $( this ).val();\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\t// Check if the textarea is a tinyMCE instance.\n\t\t\t\t\t$( this ).find( 'textarea[name^=\"_llms\"]' ).each( function() {\n\t\t\n\t\t\t\t\t\tvar name = $( this ).attr( 'name' );\n\t\t\n\t\t\t\t\t\t// If it is an editor.\n\t\t\t\t\t\tif ( tinyMCE.editors[ name ] ) {\n\t\t\t\t\t\t\tobj[ name ] = tinyMCE.editors[ name ].getContent();\n\t\t\t\t\t\t\t// Grab the val of the textarea.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tobj[ name ] = $( this ).val();\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t} );\n\t\t\n\t\t\t\t\trows.push( obj );\n\t\t\n\t\t\t\t} );\n\t\t\n\t\t\t\treturn rows;\n\t\t\n\t\t\t},\n\t\t\n\t\t\t/**\n\t\t\t * AJAX method for interacting with the repeater's handler on the server\n\t\t\t *\n\t\t\t * @since 3.11.0\n\t\t\t *\n\t\t\t * @param {Object} $repeater jQuery selector for the repeater element.\n\t\t\t * @param {string} action Action to call [save|load].\n\t\t\t * @param {Function} cb Callback function.\n\t\t\t * @return {void}\n\t\t\t */\n\t\t\tstore: function( $repeater, action, cb ) {\n\t\t\n\t\t\t\tcb = cb || function(){};\n\t\t\t\tvar self = this,\n\t\t\t\t\tdata = {\n\t\t\t\t\t\taction: $repeater.find( '.llms-repeater-field-handler' ).val(),\n\t\t\t\t\t\tstore_action: action,\n\t\t\t\t};\n\t\t\n\t\t\t\tif ( 'save' === action ) {\n\t\t\t\t\tdata.rows = self.serialize( $repeater );\n\t\t\t\t}\n\t\t\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: data,\n\t\t\t\t\tbeforeSend: function() {\n\t\t\n\t\t\t\t\t\t$repeater.addClass( 'processing' );\n\t\t\t\t\t\tLLMS.Spinner.start( $repeater );\n\t\t\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\t\t\n\t\t\t\t\t\tcb( r );\n\t\t\t\t\t\tLLMS.Spinner.stop( $repeater );\n\t\t\t\t\t\t$repeater.removeClass( 'processing' );\n\t\t\n\t\t\t\t\t}\n\t\t\n\t\t\t\t} );\n\t\t\n\t\t\t}\n\t\t\n\t\t};\n\t\tthis.repeaters.init();\n\t\t\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.13.0 Unknown.\n\t\t * @since 4.19.0 Add `this.bind_mce_fixes()`.\n\t\t * @since 5.3.0 Bind editables when editable buttons are present in addition to anchors.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\tvar self = this;\n\n\t\t\t$( '.llms-select2-post' ).each( function() {\n\t\t\t\tself.post_select( $( this ) );\n\t\t\t} );\n\n\t\t\t$( '.llms-collapsible-group' ).llmsCollapsible();\n\n\t\t\tthis.bind_tabs();\n\n\t\t\tthis.bind_mce_fixes();\n\n\t\t\t// bind everything better and less repetitively...\n\t\t\tvar bindings = [\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-datepicker' ),\n\t\t\t\t\tfunc: 'bind_datepickers',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-select2' ),\n\t\t\t\t\tfunc: function( $selector ) {\n\t\t\t\t\t\t$selector.llmsSelect2( {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t} );\n\t\t\t\t\t},\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-select2-student' ),\n\t\t\t\t\tfunc: function( $selector ) {\n\t\t\t\t\t\t$selector.llmsStudentsSelect2();\n\t\t\t\t\t}\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( 'input[type=\"checkbox\"][data-controls]' ),\n\t\t\t\t\tfunc: 'bind_cb_controllers',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '[data-is-controller]' ),\n\t\t\t\t\tfunc: 'bind_controllers',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-table' ),\n\t\t\t\t\tfunc: 'bind_tables',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( '.llms-merge-code-wrapper' ),\n\t\t\t\t\tfunc: 'bind_merge_code_buttons',\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tselector: $( 'a.llms-editable, button.llms-editable' ),\n\t\t\t\t\tfunc: 'bind_editables',\n\t\t\t},\n\t\t\t];\n\n\t\t\t// bind all the bindables but don't bind things in repeaters\n\t\t\t$.each( bindings, function( index, obj ) {\n\n\t\t\t\tif ( obj.selector.length ) {\n\n\t\t\t\t\t// reduce the selector to exclude items in a repeater\n\t\t\t\t\tvar reduced = obj.selector.filter( function() {\n\t\t\t\t\t\treturn ( 0 === $( this ).closest( '.llms-repeater-model' ).length );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// bind by string\n\t\t\t\t\tif ( 'string' === typeof obj.func ) {\n\t\t\t\t\t\tself[ obj.func ]( reduced );\n\t\t\t\t\t}\n\t\t\t\t\t// bind by an anonymous function\n\t\t\t\t\telse if ( 'function' === typeof obj.func ) {\n\t\t\t\t\t\tobj.func( reduced );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// if a post type is set & a bind exists for it, bind it\n\t\t\tif ( window.llms.post.post_type ) {\n\n\t\t\t\tvar func = 'bind_' + window.llms.post.post_type;\n\n\t\t\t\tif ( 'function' === typeof this[func] ) {\n\n\t\t\t\t\tthis[func]();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Bind checkboxes that control the display of other elements\n\t\t *\n\t\t * @param obj $controllers jQuery selector for checkboxes to be bound as checkbox controllers\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.11.0\n\t\t */\n\t\tthis.bind_cb_controllers = function( $controllers ) {\n\n\t\t\t$controllers = $controllers || $( 'input[type=\"checkbox\"][data-controls]' );\n\n\t\t\t$controllers.each( function() {\n\n\t\t\t\tvar $cb = $( this ),\n\t\t\t\t\t$controlled = $( $cb.attr( 'data-controls' ) ).closest( '.llms-mb-list' );\n\n\t\t\t\t$cb.on( 'change', function() {\n\n\t\t\t\t\tif ( $( this ).is( ':checked' ) ) {\n\n\t\t\t\t\t\t$controlled.slideDown( 200 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t$controlled.slideUp( 200 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t$cb.trigger( 'change' );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind elements that control the display of other elements\n\t\t *\n\t\t * @param obj $controllers jQuery selector for elements to be bound as checkbox controllers\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.11.0\n\t\t */\n\t\tthis.bind_controllers = function( $controllers ) {\n\n\t\t\t$controllers = $controllers || $( '[data-is-controller]' );\n\n\t\t\t$controllers.each( function() {\n\n\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t$controlled = $( '[data-controller=\"#' + $el.attr( 'id' ) + '\"]' ),\n\t\t\t\t\tval;\n\n\t\t\t\t$el.on( 'change', function() {\n\n\t\t\t\t\tif ( 'checkbox' === $el.attr( 'type' ) ) {\n\n\t\t\t\t\t\tval = $el.is( ':checked' ) ? $el.val() : 'false';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tval = $el.val();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t$controlled.each( function() {\n\n\t\t\t\t\t\tvar possible = $( this ).attr( 'data-controller-value' ),\n\t\t\t\t\t\t\tvals = [];\n\n\t\t\t\t\t\tif ( -1 !== possible.indexOf( ',' ) ) {\n\n\t\t\t\t\t\t\tvals = possible.split( ',' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvals.push( possible );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( -1 !== vals.indexOf( val ) ) {\n\n\t\t\t\t\t\t\t$( this ).slideDown( 200 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t$( this ).slideUp( 200 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t\t$el.trigger( 'change' );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind a single datepicker element\n\t\t *\n\t\t * @param obj $el jQuery selector for the input to bind the datepicker to\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.10.0\n\t\t */\n\t\tthis.bind_datepicker = function( $el ) {\n\t\t\tvar format = $el.attr( 'data-format' ) || 'mm/dd/yy',\n\t\t\t\tmaxDate = $el.attr( 'data-max-date' ) || null,\n\t\t\t\tminDate = $el.attr( 'data-min-date' ) || null;\n\t\t\t$el.datepicker( {\n\t\t\t\tdateFormat: format,\n\t\t\t\tmaxDate: maxDate,\n\t\t\t\tminDate: minDate,\n\t\t\t} );\n\t\t}\n\n\t\t/**\n\t\t * Bind all LifterLMS datepickers\n\t\t *\n\t\t * @param obj $datepickers jQuery selector for the elements to bind\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.11.0\n\t\t */\n\t\tthis.bind_datepickers = function( $datepickers ) {\n\n\t\t\tvar self = this;\n\n\t\t\t$datepickers = $datepickers || $( '.llms-datepicker' );\n\n\t\t\t$datepickers.each( function() {\n\t\t\t\tself.bind_datepicker( $( this ) );\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind llms-editable metabox fields and related dom interactions\n\t\t *\n\t\t * @since 3.10.0\n\t\t * @since 3.28.0 Unknown.\n\t\t * @since 5.3.0 Bind editables when editable buttons are present in addition to anchors.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.bind_editables = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tfunction make_editable( $field ) {\n\n\t\t\t\tvar $label = $field.find( 'label' ).clone(),\n\t\t\t\t\tname = $field.attr( 'data-llms-editable' ),\n\t\t\t\t\ttype = $field.attr( 'data-llms-editable-type' ),\n\t\t\t\t\trequired = $field.attr( 'data-llms-editable-required' ) || 'no',\n\t\t\t\t\tval = $field.attr( 'data-llms-editable-value' ),\n\t\t\t\t\t$input;\n\n\t\t\t\trequired = ( 'yes' === required ) ? ' required=\"required\"' : '';\n\n\t\t\t\tif ( 'select' === type ) {\n\n\t\t\t\t\tvar options = JSON.parse( $field.attr( 'data-llms-editable-options' ) ),\n\t\t\t\t\t\tselected;\n\n\t\t\t\t\t$input = $( ' ' );\n\t\t\t\t\tfor ( var key in options ) {\n\t\t\t\t\t\tselected = val === key ? ' selected=\"selected\"' : '';\n\t\t\t\t\t\t$input.append( '' + options[ key ] + ' ' );\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( 'datetime' === type ) {\n\n\t\t\t\t\t$input = $( '
' );\n\n\t\t\t\t\tval = JSON.parse( val );\n\t\t\t\t\tvar format = $field.attr( 'data-llms-editable-date-format' ) || '',\n\t\t\t\t\t\tmin_date = $field.attr( 'data-llms-editable-date-min' ) || '',\n\t\t\t\t\t\tmax_date = $field.attr( 'data-llms-editable-date-max' ) || '';\n\n\t\t\t\t\t$picker = $( ' ' );\n\t\t\t\t\tself.bind_datepicker( $picker );\n\t\t\t\t\t$input.append( $picker );\n\t\t\t\t\t$input.append( '@ ' );\n\n\t\t\t\t\t$input.append( ' ' );\n\t\t\t\t\t$input.append( ': ' );\n\t\t\t\t\t$input.append( ' ' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t$input = $( ' ' );\n\t\t\t\t}\n\n\t\t\t\t$field.empty().append( $label ).append( $input );\n\t\t\t\tif ( 'select' === type ) {\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t$input.trigger( 'change' );\n\t\t\t\t\t}, 100 );\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\t$( 'a.llms-editable, button.llms-editable' ).on( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$fields;\n\n\t\t\t\tif ( $btn.attr( 'data-fields' ) ) {\n\t\t\t\t\t$fields = $( $btn.attr( 'data-fields' ) );\n\t\t\t\t} else {\n\t\t\t\t\t$fields = $btn.closest( '.llms-metabox-section' ).find( '[data-llms-editable]' );\n\t\t\t\t}\n\n\t\t\t\t$btn.remove();\n\n\t\t\t\t$fields.each( function() {\n\t\t\t\t\tmake_editable( $( this ) );\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind Engagement post type JS\n\t\t *\n\t\t * @return void\n\t\t * @since 3.1.0\n\t\t * @version 3.1.0\n\t\t */\n\t\tthis.bind_llms_engagement = function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// when the engagement type changes we need to do some things to the UI\n\t\t\t$( '#_llms_engagement_type' ).on( 'change', function() {\n\n\t\t\t\t$( '#_llms_engagement' ).trigger( 'llms-engagement-type-change', $( this ).val() );\n\n\t\t\t} );\n\n\t\t\t// custom trigger when called when the engagement type changes\n\t\t\t$( '#_llms_engagement' ).on( 'llms-engagement-type-change', function( e, engagement_type ) {\n\n\t\t\t\tvar $select = $( this );\n\n\t\t\t\tswitch ( engagement_type ) {\n\n\t\t\t\t\t/**\n\t\t\t\t\t * core engagements related to a CPT\n\t\t\t\t\t */\n\t\t\t\t\tcase 'achievement':\n\t\t\t\t\tcase 'certificate':\n\t\t\t\t\tcase 'email':\n\n\t\t\t\t\t\tvar cpt = 'llms_' + engagement_type;\n\n\t\t\t\t\t\t$select.val( null ).attr( 'data-post-type', cpt ).trigger( 'change' );\n\t\t\t\t\t\tself.post_select( $select );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Allow other plugins and developers to hook into the engagement type change action\n\t\t\t\t\t */\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t$select.trigger( 'llms-engagement-type-change-external', engagement_type );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Actions for memberships\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.30.0 Made autoenroll table sortable, added AJAX save for adding new courses.\n\t\t * @version 3.30.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.bind_llms_membership = function() {\n\n\t\t\tvar $table = $( '.llms-mb-list._llms_content_table' );\n\n\t\t\t/**\n\t\t\t * Hide/Show empty message header row depending on the number of rows in the tbody\n\t\t\t *\n\t\t\t * @since 3.30.0\n\t\t\t * @version 3.30.0\n\t\t\t *\n\t\t\t * @return void\n\t\t\t */\n\t\t\tfunction toggle_header_row() {\n\n\t\t\t\tvar $rows = $table.find( 'tbody tr' );\n\t\t\t\tif ( 1 === $rows.length ) {\n\t\t\t\t\t$rows.first().show();\n\t\t\t\t} else {\n\t\t\t\t\t$rows.first().hide();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Retrieve an array of course IDs in the table.\n\t\t\t *\n\t\t\t * @since 3.30.0\n\t\t\t * @version 3.30.0\n\t\t\t *\n\t\t\t * @return array\n\t\t\t */\n\t\t\tfunction get_course_ids() {\n\n\t\t\t\tvar courses = [];\n\t\t\t\t$table.find( 'tbody tr a[href=\"#llms-course-remove\"]' ).each( function() {\n\t\t\t\t\tcourses.push( $( this ).attr( 'data-id' ) );\n\t\t\t\t} );\n\t\t\t\treturn courses;\n\n\t\t\t}\n\n\t\t\t// On init, toggle the header row visibility.\n\t\t\ttoggle_header_row();\n\n\t\t\t// remove auto-enroll course\n\t\t\t$table.on( 'click', 'a[href=\"#llms-course-remove\"]', function( e ) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t$row = $el.closest( 'tr' ),\n\t\t\t\t\t$container = $el.closest( '.llms-mb-list' );\n\n\t\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'membership_remove_auto_enroll_course',\n\t\t\t\t\t\tcourse_id: $el.attr( 'data-id' ),\n\t\t\t\t\t},\n\t\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\t\t$container.find( 'p.error' ).remove();\n\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\t\tif ( r.success ) {\n\n\t\t\t\t\t\t\t$row.fadeOut( 200 );\n\t\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\t\t$row.remove();\n\t\t\t\t\t\t\t\ttoggle_header_row();\n\t\t\t\t\t\t\t}, 400 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t$container.prepend( '' + r.message + '
' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tLLMS.Spinner.stop( $container );\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t\t// bulk enroll all members into a course\n\t\t\t$table.on( 'click', 'a[href=\"#llms-course-bulk-enroll\"]', function( e ) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t$row = $el.closest( 'tr' ),\n\t\t\t\t\t$container = $el.closest( '.llms-mb-list' );\n\n\t\t\t\tif ( ! window.confirm( LLMS.l10n.translate( 'Click okay to enroll all active members into the selected course. Enrollment will take place in the background and you may leave your site after confirmation. This action cannot be undone!' ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'bulk_enroll_membership_into_course',\n\t\t\t\t\t\tcourse_id: $el.attr( 'data-id' ),\n\t\t\t\t\t},\n\t\t\t\t\tbeforeSend: function() {\n\t\t\t\t\t\t$container.find( 'p.error' ).remove();\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\t\tif ( r.success ) {\n\n\t\t\t\t\t\t\t$el.replaceWith( '' + r.data.message + ' ' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t$container.prepend( '' + r.message + '
' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tLLMS.Spinner.stop( $container );\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t\t// Add an item to the autoenroll table on select.\n\t\t\t$( '#_llms_auto_enroll' ).on( 'change', function() {\n\n\t\t\t\tvar id = $( this ).val(),\n\t\t\t\t\ttitle = $( this ).find( 'option[value=\"' + $( this ).val() + '\"]' ).text();\n\n\t\t\t\t// If there's no ID\n\t\t\t\tif ( ! id ) {\n\t\t\t\t\treturn;\n\t\t\t\t\t// Prevent Dupes.\n\t\t\t\t} else if ( -1 !== get_course_ids().indexOf( id ) ) {\n\n\t\t\t\t\talert( LLMS.l10n.replace( '\"%s\" is already in the course list.', { '%s': title } ) )\n\n\t\t\t\t\t// reset the select field.\n\t\t\t\t\t$( this ).val( '' ).trigger( 'change' );\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar $table = $( '.llms-mb-list._llms_content_table' );\n\t\t\t\t\t$tr = $( ' ' );\n\n\t\t\t\t$tr.append( ' ' );\n\t\t\t\t$tr.append( '' + title + ' ' );\n\t\t\t\t$tr.append( '' + LLMS.l10n.translate( 'Remove course' ) + ' ' + LLMS.l10n.translate( 'Enroll All Members' ) + ' ' );\n\n\t\t\t\t// append the element to the table.\n\t\t\t\t$table.find( 'table tbody' ).append( $tr );\n\n\t\t\t\t// reset the select field.\n\t\t\t\t$( this ).val( '' ).trigger( 'change' );\n\n\t\t\t\t// Show the header row.\n\t\t\t\ttoggle_header_row();\n\n\t\t\t\t// trigger a save event.\n\t\t\t\t$table.trigger( 'llms-save-autoenroll-courses' );\n\n\t\t\t} );\n\n\t\t\t// Make autoenrollment table sortable.\n\t\t\t$table.find( 'table tbody' ).sortable( {\n\t\t\t\thandle: '.llms-drag-handle',\n\t\t\t\t// Save order on stop.\n\t\t\t\tstop: function( event, ui ) {\n\t\t\t\t\tui.item.closest( '.llms-mb-list' ).trigger( 'llms-save-autoenroll-courses' );\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\t// Save courses & course order.\n\t\t\t$table.on( 'llms-save-autoenroll-courses', function() {\n\n\t\t\t\tvar $container = $( this );\n\n\t\t\t\tLLMS.Spinner.start( $container );\n\n\t\t\t\twindow.LLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'llms_save_membership_autoenroll_courses',\n\t\t\t\t\t\tcourses: get_course_ids(),\n\t\t\t\t\t},\n\t\t\t\t\terror: function( jqxhr, code, error_msg ) {\n\t\t\t\t\t\talert( error_msg );\n\t\t\t\t\t},\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tLLMS.Spinner.stop( $container );\n\t\t\t\t\t},\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Actions for ORDERS\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.28.0\n\t\t */\n\t\tthis.bind_llms_order = function() {\n\n\t\t\t$( 'button[name=\"llms-refund-toggle\"]' ).on( 'click', function() {\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$row = $btn.closest( 'tr' ),\n\t\t\t\t\ttxn_id = $row.attr( 'data-transaction-id' ),\n\t\t\t\t\trefundable_amount = $btn.attr( 'data-refundable' ),\n\t\t\t\t\tgateway_supports = ( '1' === $btn.attr( 'data-gateway-supports' ) ) ? true : false,\n\t\t\t\t\tgateway_title = $btn.attr( 'data-gateway' ),\n\t\t\t\t\t$new_row = $( '#llms-txn-refund-model .llms-txn-refund-form' ).clone(),\n\t\t\t\t\t$gateway_btn = $new_row.find( '.gateway-btn' );\n\n\t\t\t\t// configure and add the form\n\t\t\t\tif ( 'remove' !== $btn.attr( 'data-action' ) ) {\n\n\t\t\t\t\t$btn.text( LLMS.l10n.translate( 'Cancel' ) );\n\t\t\t\t\t$btn.attr( 'data-action', 'remove' );\n\t\t\t\t\t$new_row.find( 'input' ).removeAttr( 'disabled' );\n\t\t\t\t\t$new_row.find( 'input[name=\"llms_refund_amount\"]' ).attr( 'max', refundable_amount );\n\t\t\t\t\t$new_row.find( 'input[name=\"llms_refund_txn_id\"]' ).val( txn_id );\n\n\t\t\t\t\tif ( gateway_supports ) {\n\t\t\t\t\t\t$gateway_btn.find( '.llms-gateway-title' ).text( gateway_title );\n\t\t\t\t\t\t$gateway_btn.show();\n\t\t\t\t\t}\n\n\t\t\t\t\t$row.after( $new_row );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t$btn.text( LLMS.l10n.translate( 'Refund' ) );\n\t\t\t\t\t$btn.attr( 'data-action', '' );\n\t\t\t\t\t$row.next( 'tr' ).remove();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t$( 'button[name=\"llms-manual-txn-toggle\"]' ).on( 'click', function() {\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$row = $btn.closest( 'tr' ),\n\t\t\t\t\t$new_row = $( '#llms-manual-txn-model .llms-manual-txn-form' ).clone();\n\n\t\t\t\t// configure and add the form\n\t\t\t\tif ( 'remove' !== $btn.attr( 'data-action' ) ) {\n\n\t\t\t\t\t$btn.text( LLMS.l10n.translate( 'Cancel' ) );\n\t\t\t\t\t$btn.attr( 'data-action', 'remove' );\n\t\t\t\t\t$new_row.find( 'input' ).removeAttr( 'disabled' );\n\n\t\t\t\t\t$row.after( $new_row );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t$btn.text( LLMS.l10n.translate( 'Record a Manual Payment' ) );\n\t\t\t\t\t$btn.attr( 'data-action', '' );\n\t\t\t\t\t$row.next( 'tr' ).remove();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// cache the original value when focusing on a payment gateway select\n\t\t\t// used below so the original field related data can be restored when switching back to the originally selected gateway\n\t\t\t$( '.llms-metabox' ).one( 'focus', '.llms-metabox-field[data-llms-editable=\"payment_gateway\"] select', function() {\n\n\t\t\t\tif ( ! $( this ).attr( 'data-original-value' ) ) {\n\t\t\t\t\t$( this ).attr( 'data-original-value', $( this ).val() );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// when selecting a new payment gateway get field data and update the dom to only display the fields\n\t\t\t// supported/needed by the newly selected gateway\n\t\t\t$( '.llms-metabox' ).on( 'change', '.llms-metabox-field[data-llms-editable=\"payment_gateway\"] select', function() {\n\n\t\t\t\tvar $select = $( this ),\n\t\t\t\t\tgateway = $select.val(),\n\t\t\t\t\tdata = JSON.parse( $select.closest( '.llms-metabox-field' ).attr( 'data-gateway-fields' ) ),\n\t\t\t\t\tgateway_data = data[ gateway ];\n\n\t\t\t\tfor ( var field in gateway_data ) {\n\n\t\t\t\t\tvar $field = $( 'input[name=\"' + gateway_data[ field ].name + '\"]' ),\n\t\t\t\t\t\t$wrap = $field.closest( '.llms-metabox-field' );\n\n\t\t\t\t\t// if the field is enabled show it the field and, if we're switching back to the originally selected\n\t\t\t\t\t// gateway, reload the value from the dom\n\t\t\t\t\tif ( gateway_data[ field ].enabled ) {\n\n\t\t\t\t\t\t$wrap.show();\n\t\t\t\t\t\t$field.attr( 'required', 'required' );\n\t\t\t\t\t\t$field.removeAttr( 'disabled' );\n\n\t\t\t\t\t\tif ( gateway === $select.attr( 'data-original-value' ) ) {\n\t\t\t\t\t\t\t$field.val( $wrap.attr( 'data-llms-editable-value' ) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// otherwise hide the field\n\t\t\t\t\t\t// this will ensure it gets updated in the database\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// always clear the value when switching\n\t\t\t\t\t\t// ensures that outdated data is removed from the DB\n\t\t\t\t\t\t$field.attr( 'value', '' );\n\n\t\t\t\t\t\t$field.removeAttr( 'required' );\n\t\t\t\t\t\t// $field.attr( 'disabled', 'disabled' );\n\t\t\t\t\t\t$wrap.hide();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Re-initializes TinyMCE Editors found within metaboxes\n\t\t *\n\t\t * @since 4.19.0\n\t\t * @since 4.21.2 Improve early return dependency check.\n\t\t * @since 7.0.1 Add `undefined` condition on early return check.\n\t\t *\n\t\t * @link https://github.com/gocodebox/lifterlms/issues/1553\n\t\t * @link https://github.com/gocodebox/lifterlms/pull/1618\n\t\t * @link https://github.com/gocodebox/lifterlms/issues/2298\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\t this.bind_mce_fixes = function() {\n\n\t\t\t// We need `wp.data` to proceed.\n\t\t\tif ( undefined === wp.data || [ null, undefined ].includes( wp.data.select( 'core/edit-post' ) ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tLLMS.wait_for(\n\t\t\t\tfunction() {\n\t\t\t\t\treturn undefined !== wp.data.select( 'core/edit-post' ).getMetaBoxesPerLocation( 'normal' );\n\t\t\t\t},\n\t\t\t\tfunction() {\n\n\t\t\t\t\tvar shouldRun = false;\n\t\t\t\t\t\tfind = [ 'lifterlms-product', 'lifterlms-membership', 'lifterlms-course-options' ];\n\t\t\t\t\t\tmetaboxes = wp.data.select( 'core/edit-post' ).getMetaBoxesPerLocation( 'normal' );\n\n\t\t\t\t\t// Determine if we should run the fixer.\n\t\t\t\t\tfor ( var key in metaboxes ) {\n\t\t\t\t\t\tif ( -1 !== find.indexOf( metaboxes[ key ].id ) ) {\n\t\t\t\t\t\t\tshouldRun = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! shouldRun ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fix them.\n\t\t\t\t\tvar toFix = {};\n\n\t\t\t\t\t/**\n\t\t\t\t\t * Determines if the TinyMCE instance should be fixed.\n\t\t\t\t\t *\n\t\t\t\t\t * @since 4.19.0\n\t\t\t\t\t *\n\t\t\t\t\t * @param {string} key Editor Key. This is the HTML id attribute of the textarea powering the editor instance.\n\t\t\t\t\t * @return {Boolean} Returns `true` if the editor should be fixed.\n\t\t\t\t\t */\n\t\t\t\t\tfunction llmsShouldFixTinyMCEEditor( key ) {\n\t\t\t\t\t\treturn ( 'excerpt' === key || -1 !== key.indexOf( 'llms' ) || -1 !== key.indexOf( 'lifterlms' ) )\n\t\t\t\t\t};\n\n\t\t\t\t\t// Loop through all the loaded editors.\n\t\t\t\t\tfor ( var key in tinyMCE.EditorManager.editors ) {\n\n\t\t\t\t\t\t// Mark LifterLMS editors to be fixed & de-init the editor.\n\t\t\t\t\t\tif ( llmsShouldFixTinyMCEEditor( key ) ) {\n\n\t\t\t\t\t\t\ttoFix[ key ] = tinyMCE.EditorManager.get( key );\n\t\t\t\t\t\t\ttinyMCE.EditorManager.execCommand( 'mceRemoveEditor', true, key );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If we remove and re-init immediately it doesn't work, so we'll wait a bit and then re-init them all.\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tfor ( var key in toFix ) {\n\t\t\t\t\t\t\ttinyMCE.EditorManager.init( toFix[ key ].settings || tinyMCE.EditorManager.settings );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 500 );\n\n\t\t\t\t}\n\t\t\t);\n\n\t\t};\n\n\t\t/**\n\t\t * Binds custom llms merge code buttons\n\t\t *\n\t\t * @return void\n\t\t * @since 3.1.0\n\t\t * @version 3.9.2\n\t\t */\n\t\tthis.bind_merge_code_buttons = function( $wrappers ) {\n\n\t\t\t$wrappers = $wrappers || $( '.llms-merge-code-wrapper' );\n\n\t\t\t$wrappers.find( '.llms-merge-code-button' ).on( 'click', function() {\n\n\t\t\t\t$( this ).next( '.llms-merge-codes' ).toggleClass( 'active' );\n\n\t\t\t} );\n\n\t\t\t$wrappers.find( '.llms-merge-codes li' ).on( 'click', function() {\n\n\t\t\t\tvar $el = $( this ),\n\t\t\t\t\t$parent = $el.closest( '.llms-merge-codes' ),\n\t\t\t\t\ttarget = $parent.attr( 'data-target' ),\n\t\t\t\t\tcode = $el.attr( 'data-code' );\n\n\t\t\t\t// dealing with a tinymce instance\n\t\t\t\tif ( -1 === target.indexOf( '#' ) ) {\n\n\t\t\t\t\tvar editor = window.tinymce.editors[ target ];\n\t\t\t\t\tif ( editor ) {\n\t\t\t\t\t\teditor.insertContent( code );\n\t\t\t\t\t} // fallback in case we can't access the editor directly\n\t\t\t\t\telse {\n\t\t\t\t\t\talert( LLMS.l10n.translate( 'Copy this code and paste it into the desired area' ) + ': ' + code );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t// dealing with a DOM id\n\t\t\t\telse {\n\n\t\t\t\t\t$( target ).val( $( target ).val() + code );\n\n\t\t\t\t}\n\n\t\t\t\t$parent.removeClass( 'active' );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind metabox tabs\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.bind_tabs = function() {\n\t\t\t$( '.llms-nav-tab-wrapper .tabs li' ).on( 'click', function() {\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$metabox = $btn.closest( '.llms-mb-container' ),\n\t\t\t\t\ttab_id = $btn.attr( 'data-tab' );\n\n\t\t\t\t$btn.siblings().removeClass( 'llms-active' );\n\n\t\t\t\t$metabox.find( '.tab-content' ).removeClass( 'llms-active' );\n\n\t\t\t\t$btn.addClass( 'llms-active' );\n\t\t\t\t$( '#' + tab_id ).addClass( 'llms-active' );\n\n\t\t\t} );\n\t\t};\n\n\t\t/**\n\t\t * Enable WP Post Table searches for applicable select2 boxes\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.21.0 Unknown.\n\t\t * @since 6.0.0 Show element at 100% width if not displaying a view button.\n\t\t * @since 7.1.1 Fixed `home_url` for view button.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.post_select = function( $el ) {\n\n\t\t\tvar multi = 'multiple' === $el.attr( 'multiple' ),\n\t\t\t\tnoViewBtn = $el.attr( 'data-no-view-button' );\n\n\t\t\t$el.llmsPostsSelect2( {\n\t\t\t\twidth: multi || noViewBtn ? '100%' : '65%',\n\t\t\t} );\n\n\t\t\tif ( multi || noViewBtn ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// add a \"View\" button to see what the selected page looks like\n\t\t\tvar msg = LLMS.l10n.translate( 'View' ),\n\t\t\t\t$btn = $( '' + msg + ' ' );\n\t\t\t$el.next( '.select2' ).after( $btn );\n\n\t\t\t$el.on( 'change', function() {\n\t\t\t\tvar id = $( this ).val();\n\t\t\t\tif ( id ) {\n\t\t\t\t\t$btn.attr( 'href', window.llms.home_url + '/?p=' + id ).show();\n\t\t\t\t} else {\n\t\t\t\t\t$btn.hide();\n\t\t\t\t}\n\t\t\t} ).trigger( 'change' );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind dom events for .llms-tables\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tthis.bind_tables = function() {\n\n\t\t\t$( '.llms-table button[name=\"llms-expand-table\"]' ).on( 'click', function() {\n\n\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t$table = $btn.closest( '.llms-table' )\n\n\t\t\t\t// switch the text on the button if alt text is found\n\t\t\t\tif ( $btn.attr( 'data-text' ) ) {\n\t\t\t\t\tvar text = $btn.text();\n\t\t\t\t\t$btn.text( $btn.attr( 'data-text' ) );\n\t\t\t\t\t$btn.attr( 'data-text', text );\n\t\t\t\t}\n\n\t\t\t\t// switch classes on all expandable elements\n\t\t\t\t$table.find( '.expandable' ).each( function() {\n\n\t\t\t\t\tif ( $( this ).hasClass( 'closed' ) ) {\n\t\t\t\t\t\t$( this ).addClass( 'opened' ).removeClass( 'closed' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( this ).addClass( 'closed' ).removeClass( 'opened' );\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// go\n\t\tthis.init();\n\n\t};\n\n\t// initialize the object\n\twindow.llms.metaboxes = new Metaboxes();\n\n} )( jQuery );\n"],"sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-notifications.min.js.map b/assets/maps/js/llms-notifications.min.js.map
new file mode 100644
index 0000000000..aacb60bf16
--- /dev/null
+++ b/assets/maps/js/llms-notifications.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-notifications.min.js","sources":["llms-notifications.js"],"sourcesContent":[";/**\n * LifterLMS Basic Notifications Displayer\n *\n * @since 3.8.0\n * @version 3.22.0\n */( function( $ ) {\n\n\tvar llms_notifications = function() {\n\n\t\tvar self = this,\n\t\t\tnotifications = [];\n\n\t\t/**\n\t\t * Bind dom events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tfunction bind_events() {\n\t\t\t$( 'body' ).on( 'click', '.llms-notification-dismiss', function() {\n\t\t\t\tself.dismiss( $( this ).closest( '.llms-notification' ) );\n\t\t\t} );\n\t\t};\n\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t * @since 3.8.0\n\t\t * @version 3.22.0\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\tvar self = this;\n\n\t\t\tif ( ! this.is_user_logged_in() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( window.llms.queued_notifications ) {\n\t\t\t\tself.queue( window.llms.queued_notifications );\n\t\t\t\tself.show_all();\n\t\t\t}\n\n\t\t\tbind_events();\n\n\t\t};\n\n\t\t/**\n\t\t * Queue notifications to be displayed\n\t\t *\n\t\t * @param object new_notis array of notifications\n\t\t * @return void\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tthis.queue = function( new_notis ) {\n\n\t\t\tvar self = this;\n\n\t\t\tfor ( var n in new_notis ) {\n\n\t\t\t\tif ( ! new_notis.hasOwnProperty( n ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// add the new notification if it doesnt exist\n\t\t\t\tif ( false === self.notification_exists( new_notis[ n ].id ) ) {\n\n\t\t\t\t\tnotifications.push( new_notis[ n ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Dismiss a notification\n\t\t *\n\t\t * @param obj $el notification dom element\n\t\t * @return void\n\t\t * @since 3.8.0\n\t\t * @version 3.22.0\n\t\t */\n\t\tthis.dismiss = function( $el ) {\n\t\t\tvar self = this;\n\t\t\t$el.removeClass( 'visible' );\n\t\t\tsetTimeout( function() {\n\t\t\t\tself.reposition( $el.next( '.llms-notification.visible' ) );\n\t\t\t}, 10 );\n\t\t};\n\n\t\t/**\n\t\t * Determine if a notification already exists in the notifications array\n\t\t *\n\t\t * @param int id notification id\n\t\t * @return int|false index of the notification in the array OR false if not found\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tthis.notification_exists = function( id ) {\n\n\t\t\tfor ( var noti in notifications ) {\n\n\t\t\t\tif ( ! notifications.hasOwnProperty( noti ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( id === notifications[ noti ].id ) {\n\t\t\t\t\treturn noti;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t\t/**\n\t\t * Get the vertical offset (on screen) relative to an element\n\t\t * used for notification positioning\n\t\t *\n\t\t * @param obj $relative_el element to get an offset relative to\n\t\t * @return int\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tthis.get_offset = function( $relative_el ) {\n\n\t\t\tvar spacer = 12;\n\n\t\t\tif ( ! $relative_el ) {\n\t\t\t\t$relative_el = $( '.llms-notification.visible' ).last()\n\t\t\t}\n\n\t\t\tif ( ! $relative_el.offset() ) {\n\t\t\t\treturn 24;\n\t\t\t}\n\n\t\t\tvar top = $relative_el.offset().top,\n\t\t\t\theight = $relative_el.outerHeight();\n\n\t\t\treturn top + height + spacer;\n\n\t\t};\n\n\t\t/**\n\t\t * Determine if there are notifications to show\n\t\t *\n\t\t * @return Boolean\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tthis.has_notifications = function() {\n\t\t\treturn ( notifications.length );\n\t\t};\n\n\t\t/**\n\t\t * Determine if a user is logged in\n\t\t *\n\t\t * @return boolean\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tthis.is_user_logged_in = function() {\n\t\t\treturn $( 'body' ).hasClass( 'logged-in' );\n\t\t};\n\n\t\t/**\n\t\t * Reposition elements, starting with the specified element\n\t\t *\n\t\t * @param obj $start_el element to start repositioning with\n\t\t * @return void\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tthis.reposition = function( $start_el ) {\n\n\t\t\tvar self = this,\n\t\t\t\tselector = '.llms-notification.visible',\n\t\t\t\t$next_el;\n\n\t\t\tif ( ! $start_el.length ) {\n\t\t\t\t$start_el = $( selector ).first();\n\t\t\t}\n\n\t\t\t$start_el.css( 'top', self.get_offset( $start_el.prevAll( selector ).first() ) );\n\n\t\t\t$next_el = $start_el.next( selector );\n\t\t\tif ( $next_el.length ) {\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.reposition( $next_el );\n\t\t\t\t}, 150 );\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Show all queued notifications\n\t\t *\n\t\t * @return void\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tthis.show_all = function() {\n\n\t\t\tvar self = this,\n\t\t\t\ti = 0,\n\t\t\t\tinterval;\n\n\t\t\tinterval = setInterval( function() {\n\n\t\t\t\tif ( i < notifications.length ) {\n\n\t\t\t\t\tif ( ! notifications[ i ].shown ) {\n\t\t\t\t\t\tnotifications[ i ].shown = true;\n\t\t\t\t\t\tself.show_one( notifications[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\ti++;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tclearInterval( interval );\n\n\t\t\t\t}\n\n\t\t\t}, 100 );\n\n\t\t}\n\n\t\t/**\n\t\t * Show a single notification\n\t\t *\n\t\t * @param object n notification object data\n\t\t * @return void\n\t\t * @since 3.8.0\n\t\t * @version 3.22.0\n\t\t */\n\t\tthis.show_one = function( n ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$html = $( n.html );\n\n\t\t\t$html.find( 'a' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tvar $this = $( this );\n\t\t\t\twindow.location = $this.attr( 'href' );\n\t\t\t} );\n\n\t\t\t$( 'body' ).append( $html );\n\t\t\t$html.css( 'top', self.get_offset() );\n\n\t\t\tsetTimeout( function() {\n\t\t\t\t$html.addClass( 'visible' );\n\t\t\t}, 1 );\n\n\t\t\t// if it's auto dismissing, set up a dismissal\n\t\t\tif ( $html.attr( 'data-auto-dismiss' ) ) {\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.dismiss( $html );\n\t\t\t\t}, $html.attr( 'data-auto-dismiss' ) );\n\t\t\t}\n\n\t\t}\n\n\t\t// initialize\n\t\tthis.init();\n\n\t\treturn this;\n\n\t};\n\n\twindow.llms = window.llms || {};\n\twindow.llms.notifications = new llms_notifications();\n\n} )( jQuery );\n"],"names":["$","window","llms","notifications","self","this","init","is_user_logged_in","queued_notifications","queue","show_all","on","dismiss","closest","new_notis","n","hasOwnProperty","notification_exists","id","push","$el","removeClass","setTimeout","reposition","next","noti","get_offset","$relative_el","last","offset","top","outerHeight","has_notifications","hasClass","$start_el","$next_el","selector","length","first","css","prevAll","i","interval","setInterval","shown","show_one","clearInterval","$html","html","find","e","preventDefault","$this","location","attr","append","addClass","jQuery"],"mappings":"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","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-quiz-attempt-review.min.js.map b/assets/maps/js/llms-quiz-attempt-review.min.js.map
new file mode 100644
index 0000000000..4e4028c1fc
--- /dev/null
+++ b/assets/maps/js/llms-quiz-attempt-review.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-quiz-attempt-review.min.js","sources":["llms-quiz-attempt-review.js"],"sourcesContent":[";/**\n * Quiz attempt review / grading UI & UX\n *\n * @since 3.16.0\n * @since 3.30.3 Unknown.\n * @version 5.3.0\n */( function( $ ) {\n\n\t/**\n\t * Handle UX for graving quiz attempts.\n\t *\n\t * @since 3.16.0\n\t * @since 3.30.3 Improve grading UX\n\t */\n\tvar Grading = function() {\n\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.16.9 Unknown.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction bind() {\n\n\t\t\t$( 'button[name=\"llms_quiz_attempt_action\"][value=\"llms_attempt_grade\"]' ).one( 'click', function( e ) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\t$( this ).addClass( 'grading' );\n\n\t\t\t\tsetup_fields();\n\n\t\t\t} );\n\n\t\t}\n\n\t\t/**\n\t\t * Create editable fields for grading / remarking\n\t\t *\n\t\t * @since 3.16.0\n\t\t * @since 3.30.3 When starting a review only toggle first item if it's hidden and always automatically focus on the remarks field.\n\t\t * @since 5.3.0 Exclude removed question items.\n\t\t *\n\t\t * @return {Grading}\n\t\t */\n\t\tfunction setup_fields() {\n\n\t\t\t$els = $( '.llms-quiz-attempt-question:not(.type--content):not(.type--removed)' );\n\n\t\t\tif ( $els.length < 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar title = LLMS.l10n.translate( 'Remarks to Student' ),\n\t\t\t\tpoints = LLMS.l10n.translate( 'points' );\n\n\t\t\t$els.each( function() {\n\n\t\t\t\tvar id = $( this ).attr( 'data-question-id' ),\n\t\t\t\t\t$existing = $( this ).find( '.llms-quiz-attempt-answer-section.llms-remarks' ),\n\t\t\t\t\t$ui = $( '
' ),\n\t\t\t\t\t$textarea = $( '' )\n\t\t\t\t\tgradeable = ( 'yes' === $( this ).attr( 'data-grading-manual' ) );\n\n\t\t\t\t$ui.append( '' + title + ':
' )\n\t\t\t\t$ui.append( $textarea );\n\t\t\t\tif ( gradeable ) {\n\t\t\t\t\tvar pts = $( this ).attr( 'data-points-curr' ),\n\t\t\t\t\t\tmax = $( this ).attr( 'data-points' );\n\t\t\t\t\t$ui.append( ' / ' + max + ' ' + points );\n\t\t\t\t}\n\n\t\t\t\tif ( $existing.length ) {\n\n\t\t\t\t\t$textarea.text( $existing.find( '.llms-remarks' ).text() );\n\t\t\t\t\t$existing.replaceWith( $ui );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t$( this ).find( '.llms-quiz-attempt-question-main' ).append( $ui );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tvar $els_first = $els.first();\n\t\t\tif ( ! $els_first.find( '.llms-quiz-attempt-question-main' ).is( ':visible' ) ) {\n\t\t\t\t// expand the first question toggle.\n\t\t\t\t$els_first.find( '.toggle-answer' ).trigger( 'click' );\n\t\t\t}\n\t\t\t// focus on its remark textarea.\n\t\t\t$els_first.find( '.llms-remarks-field' ).focus();\n\t\t}\n\n\t\tbind();\n\n\t\treturn this;\n\n\t};\n\n\twindow.llms = window.llms || {};\n\twindow.llms.grading = new Grading();\n\n} )( jQuery );\n"],"names":["$","window","llms","grading","one","e","title","points","preventDefault","this","addClass","$els","length","LLMS","l10n","translate","each","pts","max","id","attr","$existing","find","$ui","$textarea","gradeable","append","text","replaceWith","$els_first","first","is","trigger","focus","jQuery"],"mappings":"AAMG,CAAA,SAAYA,GA+FdC,OAAOC,KAAeD,OAAOC,MAAQ,GACrCD,OAAOC,KAAKC,QAAU,IAxFR,WAmFb,OAxECH,EAAG,qEAAsE,EAAEI,IAAK,QAAS,SAAUC,GAqBpG,IAQKC,EACHC,EA5BAF,EAAEG,eAAe,EAEjBR,EAAGS,IAAK,EAAEC,SAAU,SAAU,GAmB/BC,KAAOX,EAAG,qEAAsE,GAEtEY,OAAS,IAIfN,EAASO,KAAKC,KAAKC,UAAW,oBAAqB,EACtDR,EAASM,KAAKC,KAAKC,UAAW,QAAS,EAExCJ,KAAKK,KAAM,WAEV,IASKC,EACHC,EAVEC,EAAYnB,EAAGS,IAAK,EAAEW,KAAM,kBAAmB,EAClDC,EAAYrB,EAAGS,IAAK,EAAEa,KAAM,gDAAiD,EAC7EC,EAAYvB,EAAG,+DAAgE,EAC/EwB,EAAYxB,EAAG,sDAAwDmB,EAAK,gBAAiB,EAC7FM,UAAc,QAAUzB,EAAGS,IAAK,EAAEW,KAAM,qBAAsB,EAE/DG,EAAIG,OAAQ,8CAAgDpB,EAAQ,OAAQ,EAC5EiB,EAAIG,OAAQF,CAAU,EACjBC,YACAR,EAAMjB,EAAGS,IAAK,EAAEW,KAAM,kBAAmB,EAC5CF,EAAMlB,EAAGS,IAAK,EAAEW,KAAM,aAAc,EACrCG,EAAIG,OAAQ,uBAAyBP,EAAK,WAAaD,EAAM,kCAAoCD,EAAM,QAAUC,EAAM,IAAMX,CAAO,GAGhIc,EAAUT,QAEdY,EAAUG,KAAMN,EAAUC,KAAM,eAAgB,EAAEK,KAAK,CAAE,EACzDN,EAAUO,YAAaL,CAAI,GAI3BvB,EAAGS,IAAK,EAAEa,KAAM,kCAAmC,EAAEI,OAAQH,CAAI,CAInE,CAAE,GAEEM,EAAalB,KAAKmB,MAAM,GACVR,KAAM,kCAAmC,EAAES,GAAI,UAAW,GAE3EF,EAAWP,KAAM,gBAAiB,EAAEU,QAAS,OAAQ,EAGtDH,EAAWP,KAAM,qBAAsB,EAAEW,MAAM,EA3D/C,CAAE,EAgEIxB,IAER,CAKC,EAAGyB,MAAO","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-quiz.min.js.map b/assets/maps/js/llms-quiz.min.js.map
new file mode 100644
index 0000000000..35f55a1a94
--- /dev/null
+++ b/assets/maps/js/llms-quiz.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-quiz.min.js","sources":["llms-quiz.js"],"sourcesContent":[";/* global LLMS, $ */\n/* jshint strict: true */\n\n/**\n * Front End Quiz Class\n *\n * @type {Object}\n * @since 1.0.0\n * @version 3.24.3\n */( function( $ ) {\n\n\tvar quiz = {\n\n\t\t/**\n\t\t * Selector of all the available button elements\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\t$buttons: null,\n\n\t\t/**\n\t\t * Main Question Container Element\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\t$container: null,\n\n\t\t/**\n\t\t * Main Quiz container UI element\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\t$ui: null,\n\n\t\t/**\n\t\t * Attempt key for the current quiz\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tattempt_key: null,\n\n\t\t/**\n\t\t * Question ID of the current question\n\t\t *\n\t\t * @type {Number}\n\t\t */\n\t\tcurrent_question: 0,\n\n\t\t/**\n\t\t * Total number of questions in the current quiz\n\t\t *\n\t\t * @type {Number}\n\t\t */\n\t\ttotal_questions: 0,\n\n\t\t/**\n\t\t * Object of quiz question HTML\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tquestions: {},\n\n\t\t/**\n\t\t * Validator functions for question types\n\t\t * Third party custom question types can register validators for use when answering questions\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tvalidators: {},\n\n\t\t/**\n\t\t * Records current status of a quiz session\n\t\t * If a user attempts to navigate away from a quiz\n\t\t * while taking the quiz they'll be warned that their progress\n\t\t * will not be saved if this status is not null\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tstatus: null,\n\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t * @since 1.0.0\n\t\t * @version 3.16.6\n\t\t */\n\t\tbind: function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// start quiz\n\t\t\t$( '#llms_start_quiz' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.start_quiz();\n\t\t\t} );\n\n\t\t\t// draw quiz grade circular chart\n\t\t\t$( '.llms-donut' ).each( function() {\n\t\t\t\tLLMS.Donut( $( this ) );\n\t\t\t} );\n\n\t\t\t// redirect to attempt on attempt selection change\n\t\t\t$( '#llms-quiz-attempt-select' ).on( 'change', function() {\n\t\t\t\tvar val = $( this ).val();\n\t\t\t\tif ( val ) {\n\t\t\t\t\twindow.location.href = val;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// warn when quiz is running and user tries to leave the page\n\t\t\t$( window ).on( 'beforeunload', function() {\n\t\t\t\tif ( self.status ) {\n\t\t\t\t\treturn LLMS.l10n.translate( 'Are you sure you wish to quit this quiz attempt?' );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// complete the quiz attempt when user leaves if the quiz is running\n\t\t\t$( window ).on( 'unload', function() {\n\t\t\t\tif ( self.status ) {\n\t\t\t\t\tself.complete_quiz();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t$( document ).on( 'llms-post-append-question', self.post_append_question );\n\n\t\t\t// register validators\n\t\t\tthis.register_validator( 'content', this.validate );\n\t\t\tthis.register_validator( 'choice', this.validate_choice );\n\t\t\tthis.register_validator( 'picture_choice', this.validate_choice );\n\t\t\tthis.register_validator( 'true_false', this.validate_choice );\n\n\t\t},\n\n\t\t/**\n\t\t * Add an error message to the UI\n\t\t *\n\t\t * @param string msg error message string\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tadd_error: function( msg ) {\n\n\t\t\tvar self = this;\n\n\t\t\tself.$container.find( '.llms-error' ).remove();\n\t\t\tvar $err = $( '' + msg + '
' );\n\t\t\t$err.on( 'click', 'a', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$err.fadeOut( '200' );\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t$err.remove();\n\t\t\t\t}, 210 );\n\t\t\t} );\n\t\t\tself.$container.append( $err );\n\n\t\t},\n\n\t\t/**\n\t\t * Answer a Question\n\t\t *\n\t\t * @param obj $btn jQuery object for the \"Next Lesson\" button\n\t\t * @return void\n\t\t * @since 1.0.0\n\t\t * @version 3.16.6\n\t\t */\n\t\tanswer_question: function( $btn ) {\n\n\t\t\tvar self = this,\n\t\t\t\t$question = this.$container.find( '.llms-question-wrapper' ),\n\t\t\t\ttype = $question.attr( 'data-type' ),\n\t\t\t\tvalid;\n\n\t\t\tif ( ! this.validators[ type ] ) {\n\n\t\t\t\tconsole.log( 'No validator registered for question type ' + type );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvalid = this.validators[ type ]( $question );\n\t\t\tif ( ! valid || true !== valid.valid || ! valid.answer ) {\n\t\t\t\treturn self.add_error( valid.valid );\n\t\t\t}\n\n\t\t\tLLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'quiz_answer_question',\n\t\t\t\t\tanswer: valid.answer,\n\t\t\t\t\tattempt_key: self.attempt_key,\n\t\t\t\t\tquestion_id: $question.attr( 'data-id' ),\n\t\t\t\t\tquestion_type: $question.attr( 'data-type' ),\n\t\t\t\t},\n\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\tvar msg = $btn.hasClass( 'llms-button-quiz-complete' ) ? LLMS.l10n.translate( 'Grading Quiz...' ) : LLMS.l10n.translate( 'Loading Question...' );\n\t\t\t\t\tself.toggle_loader( 'show', msg );\n\n\t\t\t\t\tself.update_progress_bar( 'increment' );\n\n\t\t\t\t},\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\tself.toggle_loader( 'hide' );\n\n\t\t\t\t\tif ( r.data && r.data.html ) {\n\n\t\t\t\t\t\t// load html from the cached questions if it exists already\n\t\t\t\t\t\tif ( r.data.question_id && self.questions[ 'q-' + r.data.question_id ] ) {\n\n\t\t\t\t\t\t\tself.load_question( self.questions[ 'q-' + r.data.question_id ] );\n\n\t\t\t\t\t\t\t// load html from server if the question's never been seen before\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.load_question( r.data.html );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( r.data && r.data.redirect ) {\n\n\t\t\t\t\t\tself.redirect( r.data.redirect );\n\n\t\t\t\t\t} else if ( r.message ) {\n\n\t\t\t\t\t\tself.$container.append( '' + r.message + '
' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar msg = LLMS.l10n.translate( 'An unknown error occurred. Please try again.' );\n\t\t\t\t\t\tself.$container.append( '' + msg + '
' );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\t\t\t\terror: function ( jqXHR, status, error ) {\n\t\t\t\t\tself.reload_question();\n\t\t\t\t\tself.add_error( LLMS.l10n.translate( 'An unknown error occurred. Please try again.' ) );\n\t\t\t\t\tconsole.log( error );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Complete the quiz\n\t\t * Called when timed quizzes reach time limit\n\t\t * & during unload events to record the attempt as abandoned\n\t\t *\n\t\t * @return void\n\t\t * @since 1.0.0\n\t\t * @version 3.9.0\n\t\t */\n\t\tcomplete_quiz: function() {\n\n\t\t\tvar self = this;\n\n\t\t\tLLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'quiz_end',\n\t\t\t\t\tattempt_key: self.attempt_key,\n\t\t\t\t},\n\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\tself.toggle_loader( 'show', 'Grading Quiz...' );\n\n\t\t\t\t},\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\tself.toggle_loader( 'hide' );\n\n\t\t\t\t\tif ( r.data && r.data.redirect ) {\n\n\t\t\t\t\t\tself.redirect( r.data.redirect );\n\n\t\t\t\t\t} else if ( r.message ) {\n\n\t\t\t\t\t\tself.$container.append( '' + r.message + '
' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar msg = LLMS.l10n.translate( 'An unknown error occurred. Please try again.' );\n\t\t\t\t\t\tself.$container.append( '' + msg + '
' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the index of a question by question id\n\t\t *\n\t\t * @param int qid WP Post ID of the question\n\t\t * @return int\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tget_question_index: function( qid ) {\n\n\t\t\treturn Object.keys( this.questions ).indexOf( 'q-' + qid );\n\n\t\t},\n\n\t\t/**\n\t\t * Redirect on quiz completion / timeout\n\t\t *\n\t\t * @param string url redirect url\n\t\t * @return void\n\t\t * @since 3.9.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tredirect: function( url ) {\n\n\t\t\tthis.toggle_loader( 'show', 'Grading Quiz...' );\n\t\t\tthis.status = null;\n\t\t\twindow.location.href = url;\n\n\t\t},\n\n\t\treload_question: function() {\n\t\t\tvar self = this;\n\n\t\t\tself.toggle_loader( 'show', LLMS.l10n.translate( 'Loading Question...' ) );\n\t\t\tself.update_progress_bar( 'reload' );\n\n\t\t\tsetTimeout( function() {\n\t\t\t\tself.toggle_loader( 'hide' );\n\t\t\t\tself.load_question( self.questions[ 'q-' + self.current_question ] );\n\t\t\t}, 100 );\n\n\t\t},\n\n\t\t/**\n\t\t * Return to the previous question\n\t\t *\n\t\t * @return void\n\t\t * @since 1.0.0\n\t\t * @version 3.16.6\n\t\t */\n\t\tprevious_question: function() {\n\n\t\t\tvar self = this;\n\n\t\t\tself.toggle_loader( 'show', LLMS.l10n.translate( 'Loading Question...' ) );\n\t\t\tself.update_progress_bar( 'decrement' );\n\n\t\t\tvar ids = Object.keys( self.questions ),\n\t\t\t\tcurr = ids.indexOf( 'q-' + self.current_question ),\n\t\t\t\tprev_id = ids[0];\n\n\t\t\tif ( curr >= 1 ) {\n\t\t\t\tprev_id = ids[ curr - 1 ];\n\t\t\t}\n\n\t\t\tsetTimeout( function() {\n\t\t\t\tself.toggle_loader( 'hide' );\n\t\t\t\tself.load_question( self.questions[ prev_id ] );\n\t\t\t}, 100 );\n\n\t\t},\n\n\t\t/**\n\t\t * Register question type validator functions\n\t\t *\n\t\t * @param string type question type id\n\t\t * @param function func callback function to validate the question with\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tregister_validator: function( type, func ) {\n\n\t\t\tthis.validators[ type ] = func;\n\n\t\t},\n\n\t\t/**\n\t\t * Start a Quiz via AJAX call\n\t\t *\n\t\t * @return void\n\t\t * @since 1.0.0\n\t\t * @version 3.24.3\n\t\t */\n\t\tstart_quiz: function () {\n\n\t\t\tvar self = this;\n\n\t\t\tthis.load_ui_elements();\n\t\t\tthis.$ui = $( '#llms-quiz-ui' );\n\t\t\tthis.$buttons = $( '#llms-quiz-nav button' );\n\t\t\tthis.$container = $( '#llms-quiz-question-wrapper' );\n\n\t\t\t// bind submission event for answering questions\n\t\t\t$( '#llms-next-question, #llms-complete-quiz' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.answer_question( $( this ) );\n\t\t\t} );\n\n\t\t\t// bind submission event for navigating backwards\n\t\t\t$( '#llms-prev-question' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.previous_question();\n\t\t\t} );\n\n\t\t\tLLMS.Ajax.call( {\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'quiz_start',\n\t\t\t\t\tattempt_key: $( '#llms-attempt-key' ).val(),\n\t\t\t\t\tlesson_id : $( '#llms-lesson-id' ).val(),\n\t\t\t\t\tquiz_id : $( '#llms-quiz-id' ).val(),\n\t\t\t\t},\n\t\t\t\tbeforeSend: function() {\n\n\t\t\t\t\tself.status = true;\n\t\t\t\t\t$( '#llms-quiz-wrapper, #quiz-start-button' ).remove();\n\t\t\t\t\t$( 'html, body' ).stop().animate( {scrollTop: 0 }, 500 );\n\t\t\t\t\tself.toggle_loader( 'show', LLMS.l10n.translate( 'Loading Quiz...' ) );\n\n\t\t\t\t},\n\t\t\t\terror: function( r, s, t ) {\n\t\t\t\t\tconsole.log( r, s, t );\n\t\t\t\t},\n\t\t\t\tsuccess: function( r ) {\n\n\t\t\t\t\tself.toggle_loader( 'hide' );\n\n\t\t\t\t\tif ( r.data && r.data.html ) {\n\n\t\t\t\t\t\t// start the quiz timer when a time limit is set\n\t\t\t\t\t\tif ( r.data.time_limit ) {\n\t\t\t\t\t\t\tself.start_quiz_timer( r.data.time_limit );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tself.attempt_key = r.data.attempt_key;\n\t\t\t\t\t\tself.total_questions = r.data.total;\n\n\t\t\t\t\t\tself.load_question( r.data.html );\n\n\t\t\t\t\t} else if ( r.message ) {\n\n\t\t\t\t\t\tself.$container.append( '' + r.message + '
' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar msg = LLMS.l10n.translate( 'An unknown error occurred. Please try again.' );\n\t\t\t\t\t\tself.$container.append( '' + msg + '
' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Use JS mouse events instead of CSS :hover because iOS is really smart\n\t\t\t *\n\t\t\t * @see: https://css-tricks.com/annoying-mobile-double-tap-link-issue/\n\t\t\t */\n\t\t\tif ( ! LLMS.is_touch_device() ) {\n\n\t\t\t\tthis.$ui.on( 'mouseenter', 'li.llms-choice label', function() {\n\t\t\t\t\t$( this ).addClass( 'hovered' );\n\t\t\t\t} );\n\t\t\t\tthis.$ui.on( 'mouseleave', 'li.llms-choice label', function() {\n\t\t\t\t\t$( this ).removeClass( 'hovered' );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Start Quiz Timer\n\t\t * Gets minutes from hidden field\n\t\t * Not used as actual quiz timer. Quiz is timed on the server from the quiz class\n\t\t * Calculates minutes to milliseconds and then converts to hours / minutes\n\t\t * When time limit reaches 0 calls complete_quiz() to complete quiz.\n\t\t *\n\t\t * @return Calls get_count_down at a set interval of 1 second\n\t\t * @since 1.0.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tstart_quiz_timer: function( total_minutes ) {\n\n\t\t\t// create and append the UI for the countdown clock\n\t\t\tvar $el = $( '
' ),\n\t\t\t\tmsg = LLMS.l10n.translate( 'Time Remaining' );\n\n\t\t\t$el.append( '' + msg + ' ' );\n\t\t\t$el.append( '
' );\n\n\t\t\t$( '#llms-quiz-header' ).append( $el );\n\n\t\t\t// start the timer\n\t\t\tvar self = this,\n\t\t\t\ttarget_date = new Date().getTime() + ( ( total_minutes * 60 ) * 1000 ), // set the countdown date\n\t\t\t\ttime_limit = ( ( total_minutes * 60 ) * 1000 ),\n\t\t\t\tcountdown = document.getElementById( 'llms-tiles' ), // get tag element\n\t\t\t\tdays, hours, minutes, seconds; // variables for time units\n\n\t\t\t// set actual timer\n\t\t\tsetTimeout( function() {\n\t\t\t\tself.complete_quiz();\n\t\t\t}, time_limit + 1000 );\n\n\t\t\tthis.getCountdown(\n\t\t\t\ttotal_minutes,\n\t\t\t\ttarget_date,\n\t\t\t\ttime_limit,\n\t\t\t\tdays,\n\t\t\t\thours,\n\t\t\t\tminutes,\n\t\t\t\tseconds,\n\t\t\t\tcountdown\n\t\t\t);\n\n\t\t\t// call get_count_down every 1 second\n\t\t\tsetInterval( function () {\n\t\t\t\tself.getCountdown(\n\t\t\t\t\ttotal_minutes,\n\t\t\t\t\ttarget_date,\n\t\t\t\t\ttime_limit,\n\t\t\t\t\tdays,\n\t\t\t\t\thours,\n\t\t\t\t\tminutes,\n\t\t\t\t\tseconds,\n\t\t\t\t\tcountdown\n\t\t\t\t);\n\t\t\t}, 1000 );\n\t\t},\n\n\t\t/**\n\t\t * Trigger events\n\t\t *\n\t\t * @param string event event to trigger\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\ttrigger: function( event ) {\n\n\t\t\tvar self = this;\n\n\t\t\t// trigger question submission for the current question\n\t\t\tif ( 'answer_question' === event ) {\n\n\t\t\t\tif ( this.get_question_index( self.current_question ) === self.total_questions ) {\n\n\t\t\t\t\t$( '#llms-complete-quiz' ).trigger( 'click' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t$( '#llms-next-question' ).trigger( 'click' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Load the HTML of a question into the DOM and the question cache\n\t\t *\n\t\t * @param string html string of html\n\t\t * @return void\n\t\t * @since 3.9.0\n\t\t * @version 3.16.6\n\t\t */\n\t\tload_question: function( html ) {\n\n\t\t\tvar $html = $( html ),\n\t\t\t\tqid = $html.attr( 'data-id' );\n\n\t\t\t// cache the question HTML for faster rewinds\n\t\t\tif ( ! this.questions[ 'q-' + qid ] ) {\n\t\t\t\tthis.questions[ 'q-' + qid ] = $html;\n\t\t\t}\n\n\t\t\tthis.update_progress( qid );\n\n\t\t\tthis.current_question = qid;\n\n\t\t\t$( document ).trigger( 'llms-pre-append-question', $html );\n\n\t\t\tthis.$container.append( $html );\n\n\t\t\t$( document ).trigger( 'llms-post-append-question', $html );\n\n\t\t},\n\n\t\t/**\n\t\t * Constructs the quiz UI & adds the elements into the DOM\n\t\t *\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.9\n\t\t */\n\t\tload_ui_elements: function() {\n\n\t\t\tvar $html = $( '
' ),\n\t\t\t\t$header = $( '' )\n\t\t\t\t$footer = $( '' );\n\n\t\t\t$footer.append( '' + LLMS.l10n.translate( 'Next Question' ) + ' ' );\n\t\t\t$footer.append( '' + LLMS.l10n.translate( 'Complete Quiz' ) + ' ' );\n\t\t\t$footer.append( '' + LLMS.l10n.translate( 'Previous Question' ) + ' ' );\n\n\t\t\t$header.append( '' );\n\t\t\t$footer.append( '/
' )\n\n\t\t\t$html.append( $header )\n\t\t\t\t .append( '
' )\n\t\t\t\t .append( $footer );\n\n\t\t\t$( '#llms-quiz-wrapper' ).after( $html );\n\n\t\t},\n\n\t\t/**\n\t\t * Perform actions on question HTML after it's been appended to the DOM\n\t\t *\n\t\t * @param obj event js event object\n\t\t * @param obj html js HTML object\n\t\t * @return void\n\t\t * @since 3.16.6\n\t\t * @version 3.16.6\n\t\t */\n\t\tpost_append_question: function( event, html ) {\n\n\t\t\tvar $html = $( html );\n\n\t\t\tif ( $html.find( 'audio' ).length ) {\n\t\t\t\twp.mediaelement.initialize();\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Show or hide the \"loading\" spinner with an option message\n\t\t *\n\t\t * @param string display show|hide\n\t\t * @param string msg text to display when showing\n\t\t * @return void\n\t\t * @since 3.9.0\n\t\t * @version 3.16.6\n\t\t */\n\t\ttoggle_loader: function( display, msg ) {\n\n\t\t\tif ( 'show' === display ) {\n\n\t\t\t\tmsg = msg || LLMS.l10n.translate( 'Loading...' );\n\n\t\t\t\tthis.$buttons.attr( 'disabled', 'disabled' );\n\n\t\t\t\tthis.$container.empty();\n\t\t\t\tLLMS.Spinner.start( this.$container );\n\t\t\t\tthis.$container.append( '' + LLMS.l10n.translate( msg ) + '
' );\n\n\t\t\t} else {\n\n\t\t\t\tLLMS.Spinner.stop( this.$container );\n\t\t\t\tthis.$buttons.removeAttr( 'disabled' );\n\t\t\t\tthis.$container.find( '.llms-quiz-loading' ).remove();\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Update the progress bar and toggle button availability based on question the question being shown\n\t\t *\n\t\t * @param {[type]} qid [description]\n\t\t * @return {[type]}\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_progress: function( qid ) {\n\n\t\t\tvar index = this.get_question_index( qid ),\n\t\t\t\tprogress;\n\n\t\t\tif ( -1 === index ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tindex++;\n\n\t\t\t$( '#llms-quiz-counter .llms-current' ).text( index );\n\t\t\tif ( index === 1 ) {\n\t\t\t\t$( '#llms-quiz-counter .llms-total' ).text( this.total_questions );\n\t\t\t\t$( '#llms-quiz-counter' ).show();\n\t\t\t}\n\n\t\t\t// handle prev question\n\t\t\tif ( index >= 2 ) {\n\t\t\t\t$( '#llms-prev-question' ).show();\n\t\t\t} else {\n\t\t\t\t$( '#llms-prev-question' ).hide();\n\t\t\t}\n\n\t\t\tif ( index === this.total_questions ) {\n\t\t\t\t$( '#llms-next-question' ).hide();\n\t\t\t\t$( '#llms-complete-quiz' ).show();\n\t\t\t} else {\n\t\t\t\t$( '#llms-next-question' ).show();\n\t\t\t\t$( '#llms-complete-quiz' ).hide();\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Increase progress bar ui element\n\t\t *\n\t\t * @param string dir update direction [increment|decrement|reload]\n\t\t * @return void\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tupdate_progress_bar: function( dir ) {\n\n\t\t\tvar index = this.get_question_index( this.current_question );\n\t\t\tswitch ( dir ) {\n\t\t\t\tcase 'increment':\n\t\t\t\t\tindex++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'decrement':\n\t\t\t\t\tindex--;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'reload':\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tprogress = ( index / this.total_questions ) * 100;\n\t\t\tthis.$ui.find( '.progress-bar-complete' ).css( 'width', progress + '%' );\n\n\t\t},\n\n\t\t/**\n\t\t * Get Count Down\n\t\t * Called every second to update the on screen countdown timer\n\t\t * Changes color to yellow at 1/2 of total time\n\t\t * Changes color to red at 1/4 of total time\n\t\t *\n\t\t * @param {[int]} minutes [description]\n\t\t * @param {[date]} target_date [description]\n\t\t * @param {[int]} time_limit [description]\n\t\t * @param {[int]} days [description]\n\t\t * @param {[int]} hours [description]\n\t\t * @param {[int]} minutes [description]\n\t\t * @param {[int]} seconds [description]\n\t\t * @param {[int]} countdown [description]\n\t\t * @return Displays updates hours, minutes on quiz timer\n\t\t * @since 1.0.0\n\t\t * @version 1.0.0\n\t\t */\n\t\tgetCountdown: function( total_minutes, target_date, time_limit, days, hours, minutes, seconds, countdown ){\n\n\t\t\t// find the amount of \"seconds\" between now and target\n\t\t\tvar current_date = new Date().getTime(),\n\t\t\t\tseconds_left = ( target_date - current_date ) / 1000;\n\n\t\t\tif ( seconds_left >= 0 ) {\n\n\t\t\t\tif ( ( seconds_left * 1000 ) < ( time_limit / 2 ) ) {\n\n\t\t\t\t\t$( '#llms-quiz-timer' ).addClass( 'color-half' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ( seconds_left * 1000 ) < ( time_limit / 4 ) ) {\n\n\t\t\t\t\t$( '#llms-quiz-timer' ).removeClass( 'color-half' );\n\t\t\t\t\t$( '#llms-quiz-timer' ).addClass( 'color-empty' );\n\n\t\t\t\t}\n\n\t\t\t\tdays = this.pad( parseInt( seconds_left / 86400 ) );\n\t\t\t\tseconds_left = seconds_left % 86400;\n\t\t\t\thours = this.pad( parseInt( seconds_left / 3600 ) );\n\t\t\t\tseconds_left = seconds_left % 3600;\n\t\t\t\tminutes = this.pad( parseInt( seconds_left / 60 ) );\n\t\t\t\tseconds = this.pad( parseInt( seconds_left % 60 ) );\n\n\t\t\t\t// format countdown string + set tag value\n\t\t\t\tcountdown.innerHTML = '' + hours + ' :' + minutes + ' :' + seconds + ' ';\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Pad Number\n\t\t * pads number with 0 if single digit.\n\t\t *\n\t\t * @param {[int]} n [number]\n\t\t * @return {[string]} [padded number]\n\t\t * @since 1.0.0\n\t\t * @version 1.0.0\n\t\t */\n\t\tpad: function(n) {\n\t\t\treturn (n < 10 ? '0' : '') + n;\n\t\t},\n\n\t\t/**\n\t\t * Basic validation method which performs no validation and returns a validation object\n\t\t * in the format required by the application\n\t\t *\n\t\t * @param obj $question jQuery selector of the question\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tvalidate: function( $question ) {\n\t\t\treturn {\n\t\t\t\tanswer: [],\n\t\t\t\tvalid: true,\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Validates a choice question to ensure there's at least one checked input\n\t\t *\n\t\t * @param obj $question jQuery selector of the question\n\t\t * @return obj\n\t\t * @since 3.16.0\n\t\t * @version 3.16.0\n\t\t */\n\t\tvalidate_choice: function( $question ) {\n\n\t\t\tvar ret = window.llms.quizzes.validate( $question ),\n\t\t\t\tchecked = $question.find( 'input:checked' );\n\n\t\t\tif ( ! checked.length ) {\n\t\t\t\tret.valid = LLMS.l10n.translate( 'You must select an answer to continue.' );\n\t\t\t} else {\n\t\t\t\tchecked.each( function() {\n\t\t\t\t\tret.answer.push( $( this ).val() );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn ret;\n\n\t\t},\n\n\t};\n\n\tquiz.bind();\n\n\twindow.llms = window.llms || {};\n\twindow.llms.quizzes = quiz;\n\n} )( jQuery );\n"],"names":["$","quiz","$buttons","$container","$ui","attempt_key","current_question","total_questions","questions","validators","status","bind","self","this","on","e","preventDefault","start_quiz","each","LLMS","Donut","val","window","location","href","l10n","translate","complete_quiz","document","post_append_question","register_validator","validate","validate_choice","add_error","msg","find","remove","$err","fadeOut","setTimeout","append","answer_question","$btn","valid","$question","type","attr","answer","Ajax","call","data","action","question_id","question_type","beforeSend","hasClass","toggle_loader","update_progress_bar","success","r","html","load_question","redirect","message","error","jqXHR","reload_question","console","log","get_question_index","qid","Object","keys","indexOf","url","previous_question","ids","curr","prev_id","func","load_ui_elements","lesson_id","quiz_id","stop","animate","scrollTop","s","t","time_limit","start_quiz_timer","total","is_touch_device","addClass","removeClass","total_minutes","days","hours","minutes","seconds","$el","target_date","Date","getTime","countdown","getElementById","getCountdown","setInterval","trigger","event","$html","update_progress","$header","$footer","after","length","wp","mediaelement","initialize","display","empty","Spinner","start","removeAttr","index","text","show","hide","dir","progress","css","seconds_left","pad","parseInt","innerHTML","n","ret","llms","quizzes","checked","push","jQuery"],"mappings":"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","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-view-manager.min.js.map b/assets/maps/js/llms-view-manager.min.js.map
new file mode 100644
index 0000000000..aacce7fbb8
--- /dev/null
+++ b/assets/maps/js/llms-view-manager.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-view-manager.min.js","sources":["llms-view-manager.js"],"sourcesContent":["/**\n * JS events for the view manager\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.8.0\n * @since 4.2.0 Added access plans action button selector to the list of links to update.\n *\n * @version 4.2.0\n */\n\n( function( $, undefined ) {\n\n\twindow.llms = window.llms || {};\n\n\tvar ViewManager = function() {\n\n\t\tvar currentView = 'self',\n\t\t\tcurrentNonce;\n\n\t\t/**\n\t\t * Set the current Nonce\n\t\t *\n\t\t * @param string nonce a nonce\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tthis.set_nonce = function( nonce ) {\n\t\t\tcurrentNonce = nonce;\n\t\t\treturn this;\n\t\t}\n\n\t\t/**\n\t\t * Set the current view\n\t\t *\n\t\t * @param string view a view option\n\t\t * @since 3.8.0\n\t\t * @version 3.8.0\n\t\t */\n\t\tthis.set_view = function( view ) {\n\t\t\tcurrentView = view;\n\t\t\treturn this;\n\t\t}\n\n\t\t/**\n\t\t * Update various links on the page for easy navigation when using views.\n\t\t *\n\t\t * @since 3.8.0\n\t\t * @since 4.2.0 Added access plans action button selector to the list of links to update.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.update_links = function() {\n\n\t\t\tif ( 'self' === currentView || ! currentNonce ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $links = $( '.llms-widget-syllabus .llms-lesson a, .llms-course-progress a, .llms-lesson-preview a.llms-lesson-link, .llms-parent-course-link a.llms-lesson-link, .llms-access-plans a.llms-button-action' );\n\n\t\t\t$links.each( function() {\n\n\t\t\t\tvar $link = $( this ),\n\t\t\t\t\thref = $link.attr( 'href' ),\n\t\t\t\t\tsplit = href.split( '?' ),\n\t\t\t\t\tqs = {};\n\n\t\t\t\tif ( split.length > 1 ) {\n\n\t\t\t\t\t$.each( split[1].split( '&' ), function( i, pair ) {\n\t\t\t\t\t\tpair = pair.split( '=' );\n\t\t\t\t\t\tqs[ pair[0] ] = pair[1];\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tqs['llms-view-as'] = currentView;\n\t\t\t\tqs.view_nonce = currentNonce;\n\n\t\t\t\t$link.attr( 'href', split[0] + '?' + $.param( qs ) );\n\n\t\t\t} );\n\n\t\t}\n\n\t};\n\n\t// initialize the object\n\twindow.llms.ViewManager = new ViewManager();\n\n} )( jQuery );\n"],"names":["$","window","llms","ViewManager","currentNonce","currentView","this","set_nonce","nonce","set_view","view","update_links","each","$link","split","attr","qs","length","i","pair","view_nonce","param","jQuery"],"mappings":"AAWA,CAAA,SAAYA,GAEXC,OAAOC,KAAOD,OAAOC,MAAQ,GA2E7BD,OAAOC,KAAKC,YAAc,IAzER,WAEjB,IACCC,EADGC,EAAc,OAUlBC,KAAKC,UAAY,SAAUC,GAE1B,OADAJ,EAAeI,EACRF,IACR,EASAA,KAAKG,SAAW,SAAUC,GAEzB,OADAL,EAAcK,EACPJ,IACR,EAUAA,KAAKK,aAAe,WAEd,SAAWN,GAAiBD,GAIpBJ,EAAG,8LAA+L,EAExMY,KAAM,WAEZ,IAAIC,EAAQb,EAAGM,IAAK,EAEnBQ,EADQD,EAAME,KAAM,MAAO,EACdD,MAAO,GAAI,EACxBE,EAAQ,GAEW,EAAfF,EAAMG,QAEVjB,EAAEY,KAAME,EAAM,GAAGA,MAAO,GAAI,EAAG,SAAUI,EAAGC,GAC3CA,EAAgBA,EAAKL,MAAO,GAAI,EAChCE,EAAIG,EAAK,IAAOA,EAAK,EACtB,CAAE,EAIHH,EAAG,gBAAkBX,EACrBW,EAAGI,WAAkBhB,EAErBS,EAAME,KAAM,OAAQD,EAAM,GAAK,IAAMd,EAAEqB,MAAOL,CAAG,CAAE,CAEpD,CAAE,CAEH,CAED,CAKC,EAAGM,MAAO","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-widget-syllabus.min.js.map b/assets/maps/js/llms-widget-syllabus.min.js.map
new file mode 100644
index 0000000000..8cc173315f
--- /dev/null
+++ b/assets/maps/js/llms-widget-syllabus.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"../../js/llms-widget-syllabus.min.js","sources":["llms-widget-syllabus.js"],"sourcesContent":["( function( $ ) {\n\n\twindow.llms = window.llms || {};\n\n\t/**\n\t * Manage\n\t *\n\t * @return obj instance of the class\n\t * @since 2.6.0\n\t */\n\twindow.llms.widget_syllabus = function() {\n\n\t\t/**\n\t\t * Init\n\t\t *\n\t\t * @return void\n\t\t * @since 2.6.0\n\t\t */\n\t\tthis.init = function() {\n\n\t\t\tthis.bind();\n\n\t\t};\n\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t * @since 2.6.0\n\t\t */\n\t\tthis.bind = function() {\n\n\t\t\tvar self = this;\n\n\t\t\t// bind all existing toggles on load\n\t\t\tself.bind_toggles( $( '#widgets-right .llms-course-outline-collapse' ) );\n\n\t\t\t$( document ).on( 'ajaxStop', function( r ) {\n\n\t\t\t\t// self.toggle( $( this ) );\n\t\t\t\t$( '#widgets-right .llms-course-outline-collapse:not([data-is-bound=\"true\"])' ).each( function() {\n\n\t\t\t\t\tself.bind_toggles( $( this ) );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Bind change events to a specific toggle or set of toggles\n\t\t *\n\t\t * @param obj $toggles jQuery selector of toggle input ('input.llms-course-outline-collapse')\n\t\t * @return void\n\t\t * @since 2.6.0\n\t\t */\n\t\tthis.bind_toggles = function( $toggles ) {\n\n\t\t\tvar self = this;\n\n\t\t\t$toggles.attr( 'data-is-bound', 'true' );\n\n\t\t\t// bind input change on load\n\t\t\t$toggles.on( 'change', function() {\n\n\t\t\t\tself.toggle( $( this ) );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Toggle the visibility of the secondary option to display toggles\n\t\t *\n\t\t * @param obj $input jQuery selector of a single collapse toggle element ('input.llms-course-outline-collapse')\n\t\t * @return void\n\t\t * @since 2.6.0\n\t\t */\n\t\tthis.toggle = function( $input ) {\n\n\t\t\t$input.closest( '.widget' ).find( '.llms-course-outline-toggle-wrapper' ).toggle();\n\n\t\t};\n\n\t\t// GO\n\t\tthis.init();\n\n\t\t// whatever\n\t\treturn this;\n\n\t};\n\n\tvar a = new window.llms.widget_syllabus();\n\n} )( jQuery );\n"],"names":["$","window","llms","widget_syllabus","this","init","bind","self","bind_toggles","document","on","r","each","$toggles","attr","toggle","$input","closest","find","jQuery"],"mappings":"AAAA,CAAA,SAAYA,GAEXC,OAAOC,KAAOD,OAAOC,MAAQ,GAQ7BD,OAAOC,KAAKC,gBAAkB,WA+E7B,OAvEAC,KAAKC,KAAO,WAEXD,KAAKE,KAAK,CAEX,EAQAF,KAAKE,KAAO,WAEX,IAAIC,EAAOH,KAGXG,EAAKC,aAAcR,EAAG,8CAA+C,CAAE,EAEvEA,EAAGS,QAAS,EAAEC,GAAI,WAAY,SAAUC,GAGvCX,EAAG,0EAA2E,EAAEY,KAAM,WAErFL,EAAKC,aAAcR,EAAGI,IAAK,CAAE,CAE9B,CAAE,CAEH,CAAE,CAEH,EASAA,KAAKI,aAAe,SAAUK,GAE7B,IAAIN,EAAOH,KAEXS,EAASC,KAAM,gBAAiB,MAAO,EAGvCD,EAASH,GAAI,SAAU,WAEtBH,EAAKQ,OAAQf,EAAGI,IAAK,CAAE,CAExB,CAAE,CAEH,EASAA,KAAKW,OAAS,SAAUC,GAEvBA,EAAOC,QAAS,SAAU,EAAEC,KAAM,qCAAsC,EAAEH,OAAO,CAElF,EAGAX,KAAKC,KAAK,EAGHD,IAER,EAEQ,IAAIH,OAAOC,KAAKC,eAEvB,EAAGgB,MAAO","sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/maps/js/llms.js.map b/assets/maps/js/llms.js.map
new file mode 100644
index 0000000000..50162f90d6
--- /dev/null
+++ b/assets/maps/js/llms.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["llms.js"],"names":[],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"../../js/llms.js","sourcesContent":["/**\n * Main LLMS Namespace\n *\n * @since 1.0.0\n * @version 5.3.3\n */\n\nvar LLMS = window.LLMS || {};\n( function( $ ){\n\n\t'use strict';\n\n\t/**\n\t * Load all app modules\n\t */\n\t/**\n\t * Front End Achievements\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.14.0\n\t * @version 6.10.2\n\t */\n\t\n\tLLMS.Achievements = {\n\t\n\t\t/**\n\t\t * Init\n\t\t *\n\t\t * @since 3.14.0\n\t\t * @since 4.5.1 Fix conditional loading check.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( '.llms-achievement' ).length ) {\n\t\n\t\t\t\tvar self = this;\n\t\n\t\t\t\t$( function() {\n\t\t\t\t\tself.bind();\n\t\t\t\t\tself.maybe_open();\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @since 3.14.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\t$( '.llms-achievement' ).each( function() {\n\t\n\t\t\t\tself.create_modal( $( this ) );\n\t\n\t\t\t} );\n\t\n\t\t\t$( '.llms-achievement' ).on( 'click', function() {\n\t\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tid = 'achievement-' + $this.attr( 'data-id' ),\n\t\t\t\t\t$modal = $( '#' + id );\n\t\n\t\t\t\tif ( ! $modal.length ) {\n\t\t\t\t\tself.create_modal( $this );\n\t\t\t\t}\n\t\n\t\t\t\t$modal.iziModal( 'open' );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Creates modal a modal for an achievement\n\t\t *\n\t\t * @since 3.14.0\n\t\t *\n\t\t * @param obj $el The jQuery selector for the modal card.\n\t\t * @return {void}\n\t\t */\n\t\tcreate_modal: function( $el ) {\n\t\n\t\t\tvar id = 'achievement-' + $el.attr( 'data-id' ),\n\t\t\t\t$modal = $( '#' + id );\n\t\n\t\t\tif ( ! $modal.length ) {\n\t\t\t\t$modal = $( '
' );\n\t\t\t\t$( 'body' ).append( $modal );\n\t\t\t}\n\t\n\t\t\t$modal.iziModal( {\n\t\t\t\theaderColor: '#3a3a3a',\n\t\t\t\tgroup: 'achievements',\n\t\t\t\thistory: true,\n\t\t\t\tloop: true,\n\t\t\t\toverlayColor: 'rgba( 0, 0, 0, 0.6 )',\n\t\t\t\ttransitionIn: 'fadeInDown',\n\t\t\t\ttransitionOut: 'fadeOutDown',\n\t\t\t\twidth: 340,\n\t\t\t\tonOpening: function( modal ) {\n\t\n\t\t\t\t\tmodal.setTitle( $el.find( '.llms-achievement-title' ).html() );\n\t\t\t\t\tmodal.setSubtitle( $el.find( '.llms-achievement-date' ).html() );\n\t\t\t\t\tmodal.setContent( '' + $el.html() + '
' );\n\t\n\t\t\t\t},\n\t\n\t\t\t\tonClosing: function() {\n\t\t\t\t\twindow.history.pushState( '', document.title, window.location.pathname + window.location.search );\n\t\t\t\t},\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * On page load, opens a modal if the URL contains an achievement in the location hash\n\t\t *\n\t\t * @since 3.14.0\n\t\t * @since 6.10.2 Sanitize achievement IDs before using window.location.hash to trigger the modal open.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tmaybe_open: function() {\n\t\n\t\t\tlet hash = window.location.hash.split( '-' );\n\t\t\tif ( 2 !== hash.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\thash[1] = parseInt( hash[1] );\n\t\t\tif ( '#achievement-' !== hash[0] || ! Number.isInteger( hash[1] ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tconst a = document.querySelector( `a[href=\"${ hash.join( '-' ) }\"]` )\n\t\t\tif ( ! a ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\ta.click();\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Main Ajax class\n\t * Handles Primary Ajax connection\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Ajax = {\n\t\n\t\t/**\n\t\t * Url\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\turl: window.ajaxurl || window.llms.ajaxurl,\n\t\n\t\t/**\n\t\t * Type\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttype: 'post',\n\t\n\t\t/**\n\t\t * Data\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tdata: [],\n\t\n\t\t/**\n\t\t * Cache\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tcache: false,\n\t\n\t\t/**\n\t\t * DataType\n\t\t * defaulted to json\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tdataType: 'json',\n\t\n\t\t/**\n\t\t * Async\n\t\t * default to false\n\t\t *\n\t\t * @type {Boolean}\n\t\t */\n\t\tasync: true,\n\t\n\t\tresponse:[],\n\t\n\t\t/**\n\t\t * Initialize Ajax methods\n\t\t *\n\t\t * @since Unknown\n\t\t * @since 4.4.0 Update ajax nonce source.\n\t\t *\n\t\t * @param {Object} obj Options object.\n\t\t * @return {Object}\n\t\t */\n\t\tinit: function( obj ) {\n\t\n\t\t\t// If obj is not of type object or null return false.\n\t\t\tif ( obj === null || typeof obj !== 'object' ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// set object defaults if values are not supplied\n\t\t\tobj.url = 'url' in obj ? obj.url : this.url;\n\t\t\tobj.type = 'type' \t\tin obj ? obj.type : this.type;\n\t\t\tobj.data = 'data' \t\tin obj ? obj.data : this.data;\n\t\t\tobj.cache = 'cache' \t\tin obj ? obj.cache : this.cache;\n\t\t\tobj.dataType = 'dataType'\tin obj ? obj.dataType : this.dataType;\n\t\t\tobj.async = 'async'\t\tin obj ? obj.async : this.async;\n\t\n\t\t\t// Add nonce to data object.\n\t\t\tobj.data._ajax_nonce = window.llms.ajax_nonce || wp_ajax_data.nonce;\n\t\n\t\t\t// Add post id to data object.\n\t\t\tvar $R = LLMS.Rest,\n\t\t\tquery_vars = $R.get_query_vars();\n\t\t\tobj.data.post_id = 'post' in query_vars ? query_vars.post : null;\n\t\t\tif ( ! obj.data.post_id && $( 'input#post_ID' ).length ) {\n\t\t\t\tobj.data.post_id = $( 'input#post_ID' ).val();\n\t\t\t}\n\t\n\t\t\treturn obj;\n\t\t},\n\t\n\t\t/**\n\t\t * Call\n\t\t * Called by external classes\n\t\t * Sets up jQuery Ajax object\n\t\t *\n\t\t * @param {[object]} [object of ajax settings]\n\t\t * @return {[mixed]} [false if not object or this]\n\t\t */\n\t\tcall: function(obj) {\n\t\n\t\t\t// get default variables if not included in call\n\t\t\tvar settings = this.init( obj );\n\t\n\t\t\t// if init return a response of false\n\t\t\tif ( ! settings) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tthis.request( settings );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Calls jQuery Ajax on settings object\n\t\t *\n\t\t * @return {[object]} [this]\n\t\t */\n\t\trequest: function(settings) {\n\t\n\t\t\t$.ajax( settings );\n\t\n\t\t\treturn this;\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Create a Donut Chart\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.9.0\n\t * @version 4.15.0\n\t *\n\t * @link https://gist.github.com/joeyinbox/8205962\n\t *\n\t * @param {Object} $el jQuery element to draw a chart within.\n\t */\n\t\n\tLLMS.Donut = function( $el ) {\n\t\n\t\t/**\n\t\t * Constructor\n\t\t *\n\t\t * @since 3.9.0\n\t\t * @since 4.15.0 Flip animation in RTL.\n\t\t *\n\t\t * @param {Object} options Donut options.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction Donut(options) {\n\t\n\t\t\tthis.settings = $.extend( {\n\t\t\t\telement: options.element,\n\t\t\t\tpercent: 100\n\t\t\t}, options );\n\t\n\t\t\tthis.circle = this.settings.element.find( 'path' );\n\t\t\tthis.settings.stroke_width = parseInt( this.circle.css( 'stroke-width' ) );\n\t\t\tthis.radius = ( parseInt( this.settings.element.css( 'width' ) ) - this.settings.stroke_width ) / 2;\n\t\t\tthis.angle = $( 'body' ).hasClass( 'rtl' ) ? 82.5 : 97.5; // Origin of the draw at the top of the circle\n\t\t\tthis.i = Math.round( 0.75 * this.settings.percent );\n\t\t\tthis.first = true;\n\t\t\tthis.increment = $( 'body' ).hasClass( 'rtl' ) ? -5 : 5;\n\t\n\t\t\tthis.animate = function() {\n\t\t\t\tthis.timer = setInterval( this.loop.bind( this ), 10 );\n\t\t\t};\n\t\n\t\t\tthis.loop = function() {\n\t\t\t\tthis.angle += this.increment;\n\t\t\t\tthis.angle %= 360;\n\t\t\t\tvar radians = ( this.angle / 180 ) * Math.PI,\n\t\t\t\t\tx = this.radius + this.settings.stroke_width / 2 + Math.cos( radians ) * this.radius,\n\t\t\t\t\ty = this.radius + this.settings.stroke_width / 2 + Math.sin( radians ) * this.radius,\n\t\t\t\t\td;\n\t\t\t\tif (this.first === true) {\n\t\t\t\t\td = this.circle.attr( 'd' ) + ' M ' + x + ' ' + y;\n\t\t\t\t\tthis.first = false;\n\t\t\t\t} else {\n\t\t\t\t\td = this.circle.attr( 'd' ) + ' L ' + x + ' ' + y;\n\t\t\t\t}\n\t\t\t\tthis.circle.attr( 'd', d );\n\t\t\t\tthis.i--;\n\t\n\t\t\t\tif (this.i <= 0) {\n\t\t\t\t\tclearInterval( this.timer );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\n\t\t/**\n\t\t * Draw donut element\n\t\t *\n\t\t * @since 3.9.0\n\t\t *\n\t\t * @param {Object} $el jQuery element to draw a chart within.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction draw( $el ) {\n\t\t\tvar path = ' ';\n\t\t\t$el.append( '' + path + ' ' );\n\t\t\tvar donut = new Donut( {\n\t\t\t\telement: $el,\n\t\t\t\tpercent: $el.attr( 'data-perc' )\n\t\t\t} );\n\t\t\tdonut.animate();\n\t\t}\n\t\n\t\tdraw( $el );\n\t\n\t};\n\t\n\t\t/**\n\t * Forms\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 5.0.0\n\t * @version 7.0.0\n\t */\n\t\n\tLLMS.Forms = {\n\t\n\t\t/**\n\t\t * Stores locale information.\n\t\t *\n\t\t * Added via PHP.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\taddress_info: {},\n\t\n\t\t/**\n\t\t * jQuery ref. to the city text field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$cities: null,\n\t\n\t\t/**\n\t\t * jQuery ref. to the countries select field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$countries: null,\n\t\n\t\t/**\n\t\t * jQuery ref. to the states select field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$states: null,\n\t\n\t\t/**\n\t\t * jQuery ref. to the hidden states holder field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$states_holder: null,\n\t\n\t\t/**\n\t\t * Init\n\t\t *\n\t \t * @since 5.0.0\n\t \t * @since 5.3.3 Move select2 dependency check into the `bind_l10_selects()` method.\n\t \t *\n\t \t * @return {void}\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\tif ( ! ( $( 'body' ).hasClass( 'profile-php' ) || $( 'body' ).hasClass( 'user-edit-php' ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tself.bind_matching_fields();\n\t\t\tself.bind_voucher_field();\n\t\t\tself.bind_edit_account();\n\t\t\tself.bind_l10n_selects();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events for the edit account screen.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tbind_edit_account: function() {\n\t\n\t\t\t// Not an edit account form.\n\t\t\tif ( ! $( 'form.llms-person-form.edit-account' ).length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t$( '.llms-toggle-fields' ).on( 'click', this.handle_toggle_click );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM Events fields with dynamic localization values and language.\n\t\t *\n\t\t * @since 5.0.0\n\t\t * @since 5.3.3 Bind select2-related events after ensuring select2 is available.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tbind_l10n_selects: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tself.$cities = $( '#llms_billing_city' );\n\t\t\tself.$countries = $( '.llms-l10n-country-select select' );\n\t\t\tself.$states = $( '.llms-l10n-state-select select' );\n\t\t\tself.$zips = $( '#llms_billing_zip' );\n\t\n\t\t\tif ( ! self.$countries.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar isSelect2Available = function() {\n\t\t\t\treturn ( undefined !== $.fn.llmsSelect2 );\n\t\t\t};\n\t\n\t\t\tLLMS.wait_for( isSelect2Available, function() {\n\t\n\t\t\t\tif ( self.$states.length ) {\n\t\t\t\t\tself.prep_state_field();\n\t\t\t\t}\n\t\n\t\t\t\tself.$countries.add( self.$states ).llmsSelect2( { width: '100%' } );\n\t\n\t\t\t\tif ( window.llms.address_info ) {\n\t\t\t\t\tself.address_info = JSON.parse( window.llms.address_info );\n\t\t\t\t}\n\t\n\t\t\t\tself.$countries.on( 'change', function() {\n\t\n\t\t\t\t\tvar val = $( this ).val();\n\t\t\t\t\tself.update_locale_info( val );\n\t\n\t\t\t\t} ).trigger( 'change' );\n\t\n\t\t\t}, 'llmsSelect2' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Ensure \"matching\" fields match.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tbind_matching_fields: function() {\n\t\n\t\t\tvar $fields = $( 'input[data-match]' ).not( '[type=\"password\"]' );\n\t\n\t\t\t$fields.each( function() {\n\t\n\t\t\t\tvar $field = $( this ),\n\t\t\t\t\t$match = $( '#' + $field.attr( 'data-match' ) ),\n\t\t\t\t\t$parents;\n\t\n\t\t\t\tif ( $match.length ) {\n\t\n\t\t\t\t\t$parents = $field.closest( '.llms-form-field' ).add( $match.closest( '.llms-form-field' ) );\n\t\n\t\t\t\t\t$field.on( 'input change', function() {\n\t\n\t\t\t\t\t\tvar val_1 = $field.val(),\n\t\t\t\t\t\t\tval_2 = $match.val();\n\t\n\t\t\t\t\t\tif ( val_1 && val_2 && val_1 !== val_2 ) {\n\t\t\t\t\t\t\t$parents.addClass( 'invalid' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$parents.removeClass( 'invalid' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} );\n\t\n\t\t\t\t}\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events for voucher toggles UX.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tbind_voucher_field: function() {\n\t\n\t\t\t$( '#llms-voucher-toggle' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$( '#llms_voucher' ).toggle();\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieve the parent element for a given field.\n\t\t *\n\t\t * The parent element is hidden when the field isn't required.\n\t\t *\n\t\t * @since 5.0.0\n\t\t * @since 7.0.0 Do not look for a WP column wrapper anymore, always return the field's wrapper div.\n\t\t *\n\t\t * @param {Object} $field jQuery dom object.\n\t\t * @return {Object}\n\t\t */\n\t\tget_field_parent: function( $field ) {\n\t\n\t\t\treturn $field.closest( '.llms-form-field' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieve the text of a label\n\t\t *\n\t\t * Removes any children HTML elements (eg: required span elements) and returns only the labels text.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $label jQuery object for a label element.\n\t\t * @return {String}\n\t\t */\n\t\tget_label_text: function( $label ) {\n\t\n\t\t\tvar $clone = $label.clone();\n\t\t\t$clone.find( '*' ).remove();\n\t\t\treturn $clone.text().trim();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Callback function to handle the \"toggle\" button links for changing email address and password on account edit forms\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} event Native JS event object.\n\t\t * @return {void}\n\t\t */\n\t\thandle_toggle_click: function( event ) {\n\t\n\t\t\tevent.preventDefault();\n\t\n\t\t\tvar $this = $( this ),\n\t\t\t\t$fields = $( $( this ).attr( 'data-fields' ) ),\n\t\t\t\tisShowing = $this.attr( 'data-is-showing' ) || 'no',\n\t\t\t\tdisplayFunc = 'yes' === isShowing ? 'hide' : 'show',\n\t\t\t\tdisabled = 'yes' === isShowing ? 'disabled' : null,\n\t\t\t\ttextAttr = 'yes' === isShowing ? 'data-change-text' : 'data-cancel-text';\n\t\n\t\t\t$fields.each( function() {\n\t\n\t\t\t\t$( this ).closest( '.llms-form-field' )[ displayFunc ]();\n\t\t\t\t$( this ).attr( 'disabled', disabled );\n\t\n\t\t\t} );\n\t\n\t\t\t$this.text( $this.attr( textAttr ) );\n\t\t\t$this.attr( 'data-is-showing', 'yes' === isShowing ? 'no' : 'yes' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Prepares the state select field.\n\t\t *\n\t\t * Moves All optgroup elements into a hidden & disabled select element.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tprep_state_field: function() {\n\t\n\t\t\tvar $parent = this.$states.closest( '.llms-form-field' );\n\t\n\t\t\tthis.$holder = $( ' ' );\n\t\n\t\t\tthis.$holder.appendTo( $parent );\n\t\t\tthis.$states.find( 'optgroup' ).appendTo( this.$holder );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Updates the text of a label for a given field.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $field jQuery object of the form field.\n\t\t * @param {String} text Label text.\n\t\t * @return {void}\n\t\t */\n\t\tupdate_label: function( $field, text ) {\n\t\n\t\t\tvar $label = this.get_field_parent( $field ).find( 'label' ),\n\t\t\t\t$required = $label.find( '.llms-required' ).clone();\n\t\n\t\t\t$label.html( text );\n\t\t\t$label.append( $required );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Update form fields based on selected country\n\t\t *\n\t\t * Replaces label text with locale-specific language and\n\t\t * hides or shows zip fields based on whether or not\n\t\t * they are required for the given country.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {String} country_code Currently selected country code.\n\t\t * @return {void}\n\t\t */\n\t\tupdate_locale_info: function( country_code ) {\n\t\n\t\t\tif ( ! this.address_info || ! this.address_info[ country_code ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar info = this.address_info[ country_code ];\n\t\n\t\t\tthis.update_state_options( country_code );\n\t\t\tthis.update_label( this.$states, info.state );\n\t\n\t\t\tthis.update_locale_info_for_field( this.$cities, info.city );\n\t\t\tthis.update_locale_info_for_field( this.$zips, info.postcode );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Update locale info for a given field.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $field The jQuery object for the field.\n\t\t * @param {String|Boolean} label The text of the label, or `false` when the field isn't supported.\n\t\t * @return {Void}\n\t\t */\n\t\tupdate_locale_info_for_field: function( $field, label ) {\n\t\n\t\t\tif ( label ) {\n\t\t\t\tthis.update_label( $field, label );\n\t\t\t\tthis.enable_field( $field );\n\t\t\t} else {\n\t\t\t\tthis.disable_field( $field );\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Update the available options in the state field\n\t\t *\n\t\t * Removes existing options and copies the options\n\t\t * for the requested country from the hidden select field.\n\t\t *\n\t\t * If there are no states for the given country the state\n\t\t * field will be hidden.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {String} country_code Currently selected country code.\n\t\t * @return {void}\n\t\t */\n\t\tupdate_state_options: function( country_code ) {\n\t\n\t\t\tif ( ! this.$states.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar opts = this.$holder.find( 'optgroup[data-key=\"' + country_code + '\"] option' ).clone();\n\t\n\t\t\tif ( ! opts.length ) {\n\t\t\t\tthis.$states.html( '  ' );\n\t\t\t\tthis.disable_field( this.$states );\n\t\t\t} else {\n\t\t\t\tthis.enable_field( this.$states );\n\t\t\t\tthis.$states.html( opts );\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Disable a given field\n\t\t *\n\t\t * It also hides the parent element, and adds an empty hidden input field\n\t\t * with the same 'name' as teh being disabled field so to be sure to clear the field.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $field The jQuery object for the field.\n\t\t */\n\t\tdisable_field: function( $field ) {\n\t\t\t$(\n\t\t\t\t' ',\n\t\t\t\t{ name: $field.attr('name'), class: $field.attr( 'class' ) + ' hidden', type: 'hidden' }\n\t\t\t).insertAfter( $field );\n\t\t\t$field.attr( 'disabled', 'disabled' );\n\t\t\tthis.get_field_parent( $field ).hide();\n\t\t},\n\t\n\t\t/**\n\t\t * Enable a given field\n\t\t *\n\t\t * It also shows the parent element, and removes the empty hidden input field\n\t\t * previously added by disable_field().\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $field The jQuery object for the field.\n\t\t */\n\t\tenable_field: function( $field ) {\n\t\t\t$field.removeAttr( 'disabled' );\n\t\t\t$field.next( '.hidden[name='+$field.attr('name')+']' ).detach();\n\t\t\tthis.get_field_parent( $field ).show();\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Instructors List\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Instructors = {\n\t\n\t\t/**\n\t\t * Init\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( $( '.llms-instructors' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\t\t\t\tself.bind();\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return {[type]} [description]\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\t$( '.llms-instructors .llms-author' ).matchHeight();\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * Localization functions for LifterLMS Javascript\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 2.7.3\n\t * @version 2.7.3\n\t *\n\t * @todo we need more robust translation functions to handle sprintf and pluralization\n\t * at this moment we don't need those and haven't stubbed them out\n\t * those will be added when they're needed\n\t */\n\t\n\tLLMS.l10n = LLMS.l10n || {};\n\t\n\tLLMS.l10n.translate = function ( string ) {\n\t\n\t\tvar self = this;\n\t\n\t\tif ( self.strings[string] ) {\n\t\n\t\t\treturn self.strings[string];\n\t\n\t\t} else {\n\t\n\t\t\treturn string;\n\t\n\t\t}\n\t\n\t};\n\t\n\t/**\n\t * Translate and replace placeholders in a string\n\t *\n\t * @example LLMS.l10n.replace( 'This is a %2$s %1$s String', {\n\t * \t'%1$s': 'cool',\n\t * \t\t\t'%2$s': 'very'\n\t * \t\t} );\n\t * \t\tOutput: \"This is a very cool String\"\n\t *\n\t * @param string string text string\n\t * @param object replacements object containing token => replacement pairs\n\t * @return string\n\t * @since 3.16.0\n\t * @version 3.16.0\n\t */\n\tLLMS.l10n.replace = function( string, replacements ) {\n\t\n\t\tvar str = this.translate( string );\n\t\n\t\t$.each( replacements, function( token, value ) {\n\t\n\t\t\tif ( -1 !== token.indexOf( 's' ) ) {\n\t\t\t\tvalue = value.toString();\n\t\t\t} else if ( -1 !== token.indexOf( 'd' ) ) {\n\t\t\t\tvalue = value * 1;\n\t\t\t}\n\t\n\t\t\tstr = str.replace( token, value );\n\t\n\t\t} );\n\t\n\t\treturn str;\n\t\n\t};\n\t\n\t\t/**\n\t * Handle Lesson Preview Elements\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 3.16.12\n\t */\n\t\n\tLLMS.LessonPreview = {\n\t\n\t\t/**\n\t\t * A jQuery object of all outlines present on the current screen\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\t$els: null,\n\t\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tthis.$locked = $( 'a[href=\"#llms-lesson-locked\"]' );\n\t\n\t\t\tif ( this.$locked.length ) {\n\t\n\t\t\t\tself.bind();\n\t\n\t\t\t}\n\t\n\t\t\tif ( $( '.llms-course-navigation' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\n\t\t\t\t\tself.match_height();\n\t\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.16.12\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tthis.$locked.on( 'click', function() {\n\t\t\t\treturn false;\n\t\t\t} );\n\t\n\t\t\tthis.$locked.on( 'mouseenter', function() {\n\t\n\t\t\t\tvar $tip = $( this ).find( '.llms-tooltip' );\n\t\t\t\tif ( ! $tip.length ) {\n\t\t\t\t\tvar msg = $( this ).attr( 'data-tooltip-msg' );\n\t\t\t\t\tif ( ! msg ) {\n\t\t\t\t\t\tmsg = LLMS.l10n.translate( 'You do not have permission to access this content' );\n\t\t\t\t\t}\n\t\t\t\t\t$tip = self.get_tooltip( msg );\n\t\t\t\t\t$( this ).append( $tip );\n\t\t\t\t}\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t$tip.addClass( 'show' );\n\t\t\t\t}, 10 );\n\t\n\t\t\t} );\n\t\n\t\t\tthis.$locked.on( 'mouseleave', function() {\n\t\n\t\t\t\tvar $tip = $( this ).find( '.llms-tooltip' );\n\t\t\t\t$tip.removeClass( 'show' );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Match the height of lesson preview items in course navigation blocks\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tmatch_height: function() {\n\t\n\t\t\t$( '.llms-course-navigation .llms-lesson-link' ).matchHeight();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get a tooltip element\n\t\t *\n\t\t * @param string msg message to display inside the tooltip\n\t\t * @return obj\n\t\t * @since 3.0.0\n\t\t * @version 3.2.4\n\t\t */\n\t\tget_tooltip: function( msg ) {\n\t\t\tvar $el = $( '
' );\n\t\t\t$el.append( '' + msg + '
' );\n\t\t\treturn $el;\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * LifterLMS Loops JS\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 3.14.0\n\t */\n\t\n\tLLMS.Loops = {\n\t\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( '.llms-loop' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\n\t\t\t\t\tself.match_height();\n\t\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Match the height of .llms-loop-item\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.14.0\n\t\t */\n\t\tmatch_height: function() {\n\t\n\t\t\t$( '.llms-loop-item .llms-loop-item-content' ).matchHeight();\n\t\t\t$( '.llms-achievement-loop-item .llms-achievement' ).matchHeight();\n\t\t\t$( '.llms-certificate-loop-item .llms-certificate' ).matchHeight();\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * Handle the Collapsible Syllabus Widget / Shortcode\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.OutlineCollapse = {\n\t\n\t\t/**\n\t\t * A jQuery object of all outlines present on the current screen\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\t$outlines: null,\n\t\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tthis.$outlines = $( '.llms-widget-syllabus--collapsible' );\n\t\n\t\t\tif ( this.$outlines.length ) {\n\t\n\t\t\t\tthis.bind();\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tthis.$outlines.each( function() {\n\t\n\t\t\t\tvar $outline = $( this ),\n\t\t\t\t\t$headers = $outline.find( '.llms-section .section-header' );\n\t\n\t\t\t\t// bind header clicks\n\t\t\t\t$headers.on( 'click', function( e ) {\n\t\n\t\t\t\t\te.preventDefault();\n\t\n\t\t\t\t\tvar $toggle = $( this ),\n\t\t\t\t\t\t$section = $toggle.closest( '.llms-section' ),\n\t\t\t\t\t\tstate = self.get_section_state( $section );\n\t\n\t\t\t\t\tswitch ( state ) {\n\t\n\t\t\t\t\t\tcase 'closed':\n\t\t\t\t\t\t\tself.open_section( $section );\n\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\tcase 'opened':\n\t\t\t\t\t\t\tself.close_section( $section );\n\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t}\n\t\n\t\t\t\t} );\n\t\n\t\t\t\t// bind optional toggle \"buttons\"\n\t\t\t\t$outline.find( '.llms-collapse-toggle' ).on( 'click', function( e ) {\n\t\n\t\t\t\t\te.preventDefault();\n\t\n\t\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t\taction = $btn.attr( 'data-action' ),\n\t\t\t\t\t\topposite_action = ( 'close' === action ) ? 'opened' : 'closed';\n\t\n\t\t\t\t\t$headers.each( function() {\n\t\n\t\t\t\t\t\tvar $section = $( this ).closest( '.llms-section' ),\n\t\t\t\t\t\t\tstate = self.get_section_state( $section );\n\t\n\t\t\t\t\t\tif ( opposite_action !== state ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tswitch ( state ) {\n\t\n\t\t\t\t\t\t\tcase 'closed':\n\t\t\t\t\t\t\t\tself.close_section( $section );\n\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\tcase 'opened':\n\t\t\t\t\t\t\t\tself.open_section( $section );\n\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t$( this ).trigger( 'click' );\n\t\n\t\t\t\t\t} );\n\t\n\t\t\t\t} );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Close an outline section\n\t\t *\n\t\t * @param obj $section jQuery selector of a '.llms-section'\n\t\t * @return void\n\t\t */\n\t\tclose_section: function( $section ) {\n\t\n\t\t\t$section.removeClass( 'llms-section--opened' ).addClass( 'llms-section--closed' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Open an outline section\n\t\t *\n\t\t * @param obj $section jQuery selector of a '.llms-section'\n\t\t * @return void\n\t\t */\n\t\topen_section: function( $section ) {\n\t\n\t\t\t$section.removeClass( 'llms-section--closed' ).addClass( 'llms-section--opened' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the current state (open or closed) of an outline section\n\t\t *\n\t\t * @param obj $section jQuery selector of a '.llms-section'\n\t\t * @return string 'opened' or 'closed'\n\t\t */\n\t\tget_section_state: function( $section ) {\n\t\n\t\t\treturn $section.hasClass( 'llms-section--opened' ) ? 'opened' : 'closed';\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Handle Password Strength Meter for registration and password update fields\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 5.0.0\n\t */\n\t\n\t$.extend( LLMS.PasswordStrength, {\n\t\n\t\t/**\n\t\t * jQuery ref for the password strength meter object.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$meter: $( '.llms-password-strength-meter' ),\n\t\n\t\t/**\n\t\t * jQuery ref for the password field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$pass: null,\n\t\n\t\t/**\n\t\t * jQuery ref for the password confirmation field\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$conf: null,\n\t\n\t\t/**\n\t\t * jQuery ref for form element.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$form: null,\n\t\n\t\t/**\n\t\t * Init\n\t\t * loads class methods\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.7.0 Unknown\n\t\t * @since 5.0.0 Move reference setup to `setup_references()`.\n\t\t * Use `LLMS.wait_for()` for dependency waiting.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( ! this.setup_references() ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tLLMS.wait_for( function() {\n\t\t\t\treturn ( 'undefined' !== typeof wp && 'undefined' !== typeof wp.passwordStrength );\n\t\t\t}, function() {\n\t\t\t\tself.bind();\n\t\t\t\tself.$form.trigger( 'llms-password-strength-ready' );\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM Events\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\t// add submission event handlers when not on a checkout form\n\t\t\tif ( ! this.$form.hasClass( 'llms-checkout' ) ) {\n\t\t\t\tself.$form.on( 'submit', self, self.submit );\n\t\t\t}\n\t\n\t\t\t// check password strength on keyup\n\t\t\tself.$pass.add( self.$conf ).on( 'keyup', function() {\n\t\t\t\tself.check_strength();\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Check the strength of a user entered password\n\t\t * and update elements depending on the current strength\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 5.0.0 Allow password confirmation to be optional when checking strength.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tcheck_strength: function() {\n\t\n\t\t\tvar $pass_field = this.$pass.closest( '.llms-form-field' ),\n\t\t\t\t$conf_field = this.$conf && this.$conf.length ? this.$conf.closest( '.llms-form-field' ) : null,\n\t\t\t\tpass_length = this.$pass.val().length,\n\t\t\t\tconf_length = this.$conf && this.$conf.length ? this.$conf.val().length : 0;\n\t\n\t\t\t// hide the meter if both fields are empty\n\t\t\tif ( ! pass_length && ! conf_length ) {\n\t\t\t\t$pass_field.removeClass( 'valid invalid' );\n\t\t\t\tif ( $conf_field ) {\n\t\t\t\t\t$conf_field.removeClass( 'valid invalid' );\n\t\t\t\t}\n\t\t\t\tthis.$meter.hide();\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( this.get_current_strength_status() ) {\n\t\t\t\t$pass_field.removeClass( 'invalid' ).addClass( 'valid' );\n\t\t\t\tif ( conf_length ) {\n\t\t\t\t\t$conf_field.removeClass( 'invalid' ).addClass( 'valid' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$pass_field.removeClass( 'valid' ).addClass( 'invalid' );\n\t\t\t\tif ( conf_length ) {\n\t\t\t\t\t$conf_field.removeClass( 'valid' ).addClass( 'invalid' );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tthis.$meter.removeClass( 'too-short very-weak weak medium strong mismatch' );\n\t\t\tthis.$meter.show().addClass( this.get_current_strength( 'slug' ) );\n\t\t\tthis.$meter.html( this.get_current_strength( 'text' ) );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Form submission action called during registration on checkout screen\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @param obj self instance of this class\n\t\t * @param Function callback callback function, passes error message or success back to checkout handler\n\t\t * @return void\n\t\t */\n\t\tcheckout: function( self, callback ) {\n\t\n\t\t\tif ( self.get_current_strength_status() ) {\n\t\n\t\t\t\tcallback( true );\n\t\n\t\t\t} else {\n\t\n\t\t\t\tcallback( LLMS.l10n.translate( 'There is an issue with your chosen password.' ) );\n\t\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Get the list of blocklisted strings\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return array\n\t\t */\n\t\tget_blocklist: function() {\n\t\n\t\t\t// Default values from WP Core + any values added via settings filter..\n\t\t\tvar blocklist = wp.passwordStrength.userInputDisallowedList().concat( this.get_setting( 'blocklist', [] ) );\n\t\n\t\t\t// Add values from all text fields in the form.\n\t\t\tthis.$form.find( 'input[type=\"text\"], input[type=\"email\"], input[type=\"tel\"], input[type=\"number\"]' ).each( function() {\n\t\t\t\tvar val = $( this ).val();\n\t\t\t\tif ( val ) {\n\t\t\t\t\tblocklist.push( val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn blocklist;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieve current strength as a number, a slug, or a translated text string\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 5.0.0 Allow password confirmation to be optional when checking strength.\n\t\t *\n\t\t * @param {String} format Derived return format [int|slug|text] defaults to int.\n\t\t * @return mixed\n\t\t */\n\t\tget_current_strength: function( format ) {\n\t\n\t\t\tformat = format || 'int';\n\t\t\tvar pass = this.$pass.val(),\n\t\t\t\tconf = this.$conf && this.$conf.length ? this.$conf.val() : '',\n\t\t\t\tval;\n\t\n\t\t\t// enforce custom length requirement\n\t\t\tif ( pass.length < this.get_setting( 'min_length', 6 ) ) {\n\t\t\t\tval = -1;\n\t\t\t} else {\n\t\t\t\tval = wp.passwordStrength.meter( pass, this.get_blocklist(), conf );\n\t\t\t\t// 0 & 1 are both very-weak\n\t\t\t\tif ( 0 === val ) {\n\t\t\t\t\tval = 1;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( 'slug' === format ) {\n\t\t\t\treturn this.get_strength_slug( val );\n\t\t\t} else if ( 'text' === format ) {\n\t\t\t\treturn this.get_strength_text( val );\n\t\t\t} else {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Determines if the current password strength meets the user-defined\n\t\t * minimum password strength requirements\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @return boolean\n\t\t */\n\t\tget_current_strength_status: function() {\n\t\t\tvar curr = this.get_current_strength(),\n\t\t\t\tmin = this.get_strength_value( this.get_minimum_strength() );\n\t\t\treturn ( 5 === curr ) ? false : ( curr >= min );\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieve the minimum password strength for the current form.\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 5.0.0 Replaces the version output via an inline PHP script in favor of utilizing values configured in the settings object.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tget_minimum_strength: function() {\n\t\t\treturn this.get_setting( 'min_strength', 'strong' );\n\t\t},\n\t\n\t\t/**\n\t\t * Get a setting and fallback to a default value.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {String} key Setting key.\n\t\t * @param {mixed} default_val Default value when the requested setting cannot be located.\n\t\t * @return {mixed}\n\t\t */\n\t\tget_setting: function( key, default_val ) {\n\t\t\tvar settings = this.get_settings();\n\t\t\treturn settings[ key ] ? settings[ key ] : default_val;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the slug associated with a strength value\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @param int strength_val Strength value number.\n\t\t * @return string\n\t\t */\n\t\tget_strength_slug: function( strength_val ) {\n\t\n\t\t\tvar slugs = {\n\t\t\t\t'-1': 'too-short',\n\t\t\t\t1: 'very-weak',\n\t\t\t\t2: 'weak',\n\t\t\t\t3: 'medium',\n\t\t\t\t4: 'strong',\n\t\t\t\t5: 'mismatch',\n\t\t\t};\n\t\n\t\t\treturn ( slugs[ strength_val ] ) ? slugs[ strength_val ] : slugs[5];\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Gets the translated text associated with a strength value\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @param {Integer} strength_val Strength value\n\t\t * @return {String}\n\t\t */\n\t\tget_strength_text: function( strength_val ) {\n\t\n\t\t\tvar texts = {\n\t\t\t\t'-1': LLMS.l10n.translate( 'Too Short' ),\n\t\t\t\t1: LLMS.l10n.translate( 'Very Weak' ),\n\t\t\t\t2: LLMS.l10n.translate( 'Weak' ),\n\t\t\t\t3: LLMS.l10n.translate( 'Medium' ),\n\t\t\t\t4: LLMS.l10n.translate( 'Strong' ),\n\t\t\t\t5: LLMS.l10n.translate( 'Mismatch' ),\n\t\t\t};\n\t\n\t\t\treturn ( texts[ strength_val ] ) ? texts[ strength_val ] : texts[5];\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the value associated with a strength slug\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @param string strength_slug A strength slug.\n\t\t * @return {Integer}\n\t\t */\n\t\tget_strength_value: function( strength_slug ) {\n\t\n\t\t\tvar values = {\n\t\t\t\t'too-short': -1,\n\t\t\t\t'very-weak': 1,\n\t\t\t\tweak: 2,\n\t\t\t\tmedium: 3,\n\t\t\t\tstrong: 4,\n\t\t\t\tmismatch: 5,\n\t\t\t};\n\t\n\t\t\treturn ( values[ strength_slug ] ) ? values[ strength_slug ] : values.mismatch;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Setup jQuery references to DOM elements needed to power the password meter.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {Boolean} Returns `true` if a meter element and password field are found, otherwise returns `false`.\n\t\t */\n\t\tsetup_references: function() {\n\t\n\t\t\tif ( ! this.$meter.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tthis.$form = this.$meter.closest( 'form' );\n\t\t\tthis.$pass = this.$form.find( 'input#password' );\n\t\n\t\t\tif ( this.$pass.length && this.$pass.attr( 'data-match' ) ) {\n\t\t\t\tthis.$conf = this.$form.find( '#' + this.$pass.attr( 'data-match' ) );\n\t\t\t}\n\t\n\t\t\treturn ( this.$pass.length > 0 );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Form submission handler for registration and update forms\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 5.0.0 Allow the account edit for to bypass strength checking when the password field is disabled (not being submitted).\n\t\t *\n\t\t * @param obj e Event data.\n\t\t * @return void\n\t\t */\n\t\tsubmit: function( e ) {\n\t\n\t\t\tvar self = e.data;\n\t\t\te.preventDefault();\n\t\t\tself.$pass.trigger( 'keyup' );\n\t\n\t\t\t// Meets the status requirements OR we're on the account edit form and the password field is disabled.\n\t\t\tif ( self.get_current_strength_status() || ( self.$form.hasClass( 'edit-account' ) && 'disabled' === self.$pass.attr( 'disabled' ) ) ) {\n\t\t\t\tself.$form.off( 'submit', self.submit );\n\t\t\t\tself.$form.trigger( 'submit' );\n\t\t\t} else {\n\t\t\t\t$( 'html, body' ).animate( {\n\t\t\t\t\tscrollTop: self.$meter.offset().top - 100,\n\t\t\t\t}, 200 );\n\t\t\t\tself.$meter.hide();\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.$meter.fadeIn( 400 );\n\t\t\t\t}, 220 );\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Get the list of blocklist strings\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @deprecated 5.0.0 `LLMS.PasswordStrength.get_blacklist()` is deprecated in favor of `LLMS.PasswordStrength.get_blocklist()`.\n\t\t *\n\t\t * @return array\n\t\t */\n\t\tget_blacklist: function() {\n\t\t\tconsole.log( 'Method `get_blacklist()` is deprecated in favor of `get_blocklist()`.' );\n\t\t\treturn this.get_blacklist();\n\t\t},\n\t\n\t} );\n\t\n\t\t/**\n\t * Pricing Table UI\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown.\n\t * @version Unknown.\n\t */\n\t\n\tLLMS.Pricing_Tables = {\n\t\n\t\t/**\n\t\t * Init\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( $( '.llms-access-plans' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\t\t\t\tself.bind();\n\t\t\t\t} );\n\t\n\t\t\t\tthis.$locked = $( 'a[href=\"#llms-plan-locked\"]' );\n\t\n\t\t\t\tif ( this.$locked.length ) {\n\t\n\t\t\t\t\tLLMS.wait_for_popover( function() {\n\t\t\t\t\t\tself.bind_locked();\n\t\t\t\t\t} );\n\t\n\t\t\t\t}\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return {[type]} [description]\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\t$( '.llms-access-plan-content' ).matchHeight();\n\t\t\t$( '.llms-access-plan-pricing.trial' ).matchHeight();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Setup a popover for members-only restricted plans\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.9.1\n\t\t */\n\t\tbind_locked: function() {\n\t\n\t\t\tthis.$locked.each( function() {\n\t\n\t\t\t\t$( this ).webuiPopover( {\n\t\t\t\t\tanimation: 'pop',\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontent: function( e ) {\n\t\t\t\t\t\tvar $content = $( '
' );\n\t\t\t\t\t\t$content.append( e.$element.closest( '.llms-access-plan' ).find( '.llms-access-plan-restrictions ul' ).clone() );\n\t\t\t\t\t\treturn $content;\n\t\t\t\t\t},\n\t\t\t\t\tplacement: 'top',\n\t\t\t\t\tstyle: 'inverse',\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Members Only Pricing' ),\n\t\t\t\t\twidth: '280px',\n\t\t\t\t} );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * Quiz Attempt\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 7.3.0\n\t * @version 7.3.0\n\t */\n\t\n\tLLMS.Quiz_Attempt = {\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\t$( '.llms-quiz-attempt-question-header a.toggle-answer' ).on( 'click', function( e ) {\n\t\n\t\t\t\te.preventDefault();\n\t\n\t\t\t\tvar $curr = $( this ).closest( 'header' ).next( '.llms-quiz-attempt-question-main' );\n\t\n\t\t\t\t$( this ).closest( 'li' ).siblings().find( '.llms-quiz-attempt-question-main' ).slideUp( 200 );\n\t\n\t\t\t\tif ( $curr.is( ':visible' ) ) {\n\t\t\t\t\t$curr.slideUp( 200 );\n\t\t\t\t} else {\n\t\t\t\t\t$curr.slideDown( 200 );\n\t\t\t\t}\n\t\n\t\t\t} );\n\t\t}\n\t\n\t}\n\t\n\t\t/**\n\t * LifterLMS Reviews JS\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Review = {\n\t\t/**\n\t\t * Init\n\t\t * loads class methods\n\t\t */\n\t\tinit: function() {\n\t\t\t// console.log('Initializing Review ');\n\t\t\tthis.bind();\n\t\t},\n\t\n\t\t/**\n\t\t * This function binds actions to the appropriate hooks\n\t\t */\n\t\tbind: function() {\n\t\t\t$( '#llms_review_submit_button' ).click(function()\n\t\t\t\t{\n\t\t\t\tif ($( '#review_title' ).val() !== '' && $( '#review_text' ).val() !== '') {\n\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\ttype : 'post',\n\t\t\t\t\t\tdataType : 'json',\n\t\t\t\t\t\turl : window.llms.ajaxurl,\n\t\t\t\t\t\tdata : {\n\t\t\t\t\t\t\taction : 'LLMSSubmitReview',\n\t\t\t\t\t\t\treview_title: $( '#review_title' ).val(),\n\t\t\t\t\t\t\treview_text: $( '#review_text' ).val(),\n\t\t\t\t\t\t\tpageID : $( '#post_ID' ).val(),\n\t\t\t\t\t\t\tllms_review_nonce: $( '#llms_review_nonce' ).val()\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function()\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconsole.log( 'Review success' );\n\t\t\t\t\t\t\t$( '#review_box' ).hide( 'swing' );\n\t\t\t\t\t\t\t$( '#thank_you_box' ).show( 'swing' );\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: function(jqXHR, textStatus, errorThrown )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconsole.log( jqXHR );\n\t\t\t\t\t\t\tconsole.log( textStatus );\n\t\t\t\t\t\t\tconsole.log( errorThrown );\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif ($( '#review_title' ).val() === '') {\n\t\t\t\t\t\t$( '#review_title_error' ).show( 'swing' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( '#review_title_error' ).hide( 'swing' );\n\t\t\t\t\t}\n\t\t\t\t\tif ($( '#review_text' ).val() === '') {\n\t\t\t\t\t\t$( '#review_text_error' ).show( 'swing' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( '#review_text_error' ).hide( 'swing' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif ( $( '#_llms_display_reviews' ).attr( 'checked' ) ) {\n\t\t\t\t$( '.llms-num-reviews-top' ).addClass( 'top' );\n\t\t\t\t$( '.llms-num-reviews-bottom' ).show();\n\t\n\t\t\t} else {\n\t\t\t\t$( '.llms-num-reviews-bottom' ).hide();\n\t\t\t}\n\t\t\t$( '#_llms_display_reviews' ).change(function() {\n\t\t\t\tif ( $( '#_llms_display_reviews' ).attr( 'checked' ) ) {\n\t\t\t\t\t$( '.llms-num-reviews-top' ).addClass( 'top' );\n\t\t\t\t\t$( '.llms-num-reviews-bottom' ).show();\n\t\t\t\t} else {\n\t\t\t\t\t$( '.llms-num-reviews-top' ).removeClass( 'top' );\n\t\t\t\t\t$( '.llms-num-reviews-bottom' ).hide();\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t},\n\t};\n\t\n\t\t/* global LLMS, $ */\n\t\n\t/*!\n\t * JavaScript Cookie v2.2.1\n\t * https://github.com/js-cookie/js-cookie\n\t *\n\t * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n\t * Released under the MIT license\n\t */\n\t;(function (factory) {\n\t\tvar registeredInModuleLoader;\n\t\tif (typeof define === 'function' && define.amd) {\n\t\t\tdefine(factory);\n\t\t\tregisteredInModuleLoader = true;\n\t\t}\n\t\tif (typeof exports === 'object') {\n\t\t\tmodule.exports = factory();\n\t\t\tregisteredInModuleLoader = true;\n\t\t}\n\t\tif (!registeredInModuleLoader) {\n\t\t\tvar OldCookies = window.Cookies;\n\t\t\tvar api = window.Cookies = factory();\n\t\t\tapi.noConflict = function () {\n\t\t\t\twindow.Cookies = OldCookies;\n\t\t\t\treturn api;\n\t\t\t};\n\t\t}\n\t}(function () {\n\t\tfunction extend () {\n\t\t\tvar i = 0;\n\t\t\tvar result = {};\n\t\t\tfor (; i < arguments.length; i++) {\n\t\t\t\tvar attributes = arguments[ i ];\n\t\t\t\tfor (var key in attributes) {\n\t\t\t\t\tresult[key] = attributes[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\n\t\tfunction decode (s) {\n\t\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t\t}\n\t\n\t\tfunction init (converter) {\n\t\t\tfunction api() {}\n\t\n\t\t\tfunction set (key, value, attributes) {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\t\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t\t}\n\t\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\t\n\t\t\t\ttry {\n\t\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\n\t\t\t\tvalue = converter.write ?\n\t\t\t\t\tconverter.write(value, key) :\n\t\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\n\t\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\t\n\t\t\t\tvar stringifiedAttributes = '';\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t\t// ...\n\t\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t\t// character:\n\t\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t\t// ...\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t\t}\n\t\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\t\n\t\t\tfunction get (key, json) {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tvar jar = {};\n\t\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t\t// in case there are no cookies at all.\n\t\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\t\tvar i = 0;\n\t\n\t\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\t\tvar cookie = parts.slice(1).join('=');\n\t\n\t\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t\t}\n\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\t\tdecode(cookie);\n\t\n\t\t\t\t\t\tif (json) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tjar[name] = cookie;\n\t\n\t\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t}\n\t\n\t\t\t\treturn key ? jar[key] : jar;\n\t\t\t}\n\t\n\t\t\tapi.set = set;\n\t\t\tapi.get = function (key) {\n\t\t\t\treturn get(key, false /* read as raw */);\n\t\t\t};\n\t\t\tapi.getJSON = function (key) {\n\t\t\t\treturn get(key, true /* read as json */);\n\t\t\t};\n\t\t\tapi.remove = function (key, attributes) {\n\t\t\t\tset(key, '', extend(attributes, {\n\t\t\t\t\texpires: -1\n\t\t\t\t}));\n\t\t\t};\n\t\n\t\t\tapi.defaults = {};\n\t\n\t\t\tapi.withConverter = init;\n\t\n\t\t\treturn api;\n\t\t}\n\t\n\t\treturn init(function () {});\n\t}));\n\t\n\t/**\n\t * Create a no conflict reference to JS Cookies.\n\t *\n\t * @type {Object}\n\t */\n\tLLMS.CookieStore = Cookies.noConflict();\n\t\n\t/**\n\t * Store information in Local Storage by group.\n\t *\n\t * @since 3.36.0\n\t * @since 3.37.14 Use persistent reference to JS Cookies.\n\t * @since 4.2.0 Set sameSite to `strict` for cookies.\n\t *\n\t * @param string group Storage group id/name.\n\t */\n\tLLMS.Storage = function( group ) {\n\t\n\t\tvar self = this,\n\t\t\tstore = LLMS.CookieStore;\n\t\n\t\t/**\n\t\t * Clear all data for the group.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.clearAll = function() {\n\t\t\tstore.remove( group );\n\t\t};\n\t\n\t\t/**\n\t\t * Clear a single item from the group by key.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return obj\n\t\t */\n\t\tthis.clear = function( key ) {\n\t\t\tvar data = self.getAll();\n\t\t\tdelete data[ key ];\n\t\t\treturn store.set( group, data );\n\t\t};\n\t\n\t\t/**\n\t\t * Retrieve (and parse) all data stored for the group.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return obj\n\t\t */\n\t\tthis.getAll = function() {\n\t\t\treturn store.getJSON( group ) || {};\n\t\t}\n\t\n\t\t/**\n\t\t * Retrieve an item from the group by key.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param string key Item key/name.\n\t\t * @param mixed default_val Item default value to be returned when item not found in the group.\n\t\t * @return mixed\n\t\t */\n\t\tthis.get = function( key, default_val ) {\n\t\t\tvar data = self.getAll();\n\t\t\treturn data[ key ] ? data[ key ] : default_val;\n\t\t}\n\t\n\t\t/**\n\t\t * Store an item in the group by key.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 4.2.0 Set sameSite to `strict` for cookies.\n\t\t *\n\t\t * @param string key Item key name.\n\t\t * @param mixed val Item value\n\t\t * @return obj\n\t\t */\n\t\tthis.set = function( key, val ) {\n\t\t\tvar data = self.getAll();\n\t\t\tdata[ key ] = val;\n\t\t\treturn store.set( group, data, { sameSite: 'strict' } );\n\t\t};\n\t\n\t}\n\t\n\t\t/**\n\t * Student Dashboard related JS\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.7.0\n\t * @since 3.10.0 Bind events on the orders screen.\n\t * @since 5.0.0 Removed redundant password toggle logic for edit account screen.\n\t * @version 5.0.0\n\t */\n\tLLMS.StudentDashboard = {\n\t\n\t\t/**\n\t\t * Slug for the current screen/endpoint\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tscreen: '',\n\t\n\t\t/**\n\t\t * Init\n\t\t *\n\t\t * @since 3.7.0\n\t\t * @since 3.10.0 Unknown\n\t\t * @since 5.0.0 Removed password toggle logic.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( '.llms-student-dashboard' ).length ) {\n\t\t\t\tthis.bind();\n\t\t\t\tif ( 'orders' === this.get_screen() ) {\n\t\t\t\t\tthis.bind_orders();\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @since 3.7.0\n\t\t * @since 3.7.4 Unknown.\n\t\t * @since 5.0.0 Removed password toggle logic.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\t$( '.llms-donut' ).each( function() {\n\t\t\t\tLLMS.Donut( $( this ) );\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind events related to the orders screen on the dashboard\n\t\t *\n\t\t * @since 3.10.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tbind_orders: function() {\n\t\n\t\t\t$( '#llms-cancel-subscription-form' ).on( 'submit', this.order_cancel_warning );\n\t\t\t$( '#llms_update_payment_method' ).on( 'click', function() {\n\t\t\t\t$( 'input[name=\"llms_payment_gateway\"]:checked' ).trigger( 'change' );\n\t\t\t\t$( this ).closest( 'form' ).find( '.llms-switch-payment-source-main' ).slideToggle( '200' );\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the current dashboard endpoint/tab slug\n\t\t *\n\t\t * @since 3.10.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tget_screen: function() {\n\t\t\tif ( ! this.screen ) {\n\t\t\t\tthis.screen = $( '.llms-student-dashboard' ).attr( 'data-current' );\n\t\t\t}\n\t\t\treturn this.screen;\n\t\t},\n\t\n\t\t/**\n\t\t * Show a confirmation warning when Cancel Subscription form is submitted\n\t\t *\n\t\t * @since 3.10.0\n\t\t *\n\t\t * @param obj e JS event data.\n\t\t * @return void\n\t\t */\n\t\torder_cancel_warning: function( e ) {\n\t\t\te.preventDefault();\n\t\t\tvar msg = LLMS.l10n.translate( 'Are you sure you want to cancel your subscription?' );\n\t\t\tif ( window.confirm( LLMS.l10n.translate( msg ) ) ) {\n\t\t\t\t$( this ).off( 'submit', this.order_cancel_warning );\n\t\t\t\t$( this ).submit();\n\t\t\t}\n\t\t},\n\t\n\t};\n\t\n\t\t/* global LLMS, $ */\n\t\n\t/**\n\t * User event/interaction tracking.\n\t *\n\t * @since 3.36.0\n\t * @since 3.36.2 Fix JS error when settings aren't loaded.\n\t * @since 3.37.2 When adding an event to the storae also make sure the nonce is set for server-side verification.\n\t * @since 3.37.9 Fix IE compatibility issue related to usage of `Object.assign()`.\n\t * @since 3.37.14 Persist the tracking events via ajax when reaching the cookie size limit.\n\t * @since 5.0.0 Set `settings` as an empty object when no settings supplied.\n\t * @since 7.1.0 Only attempt to add a nonce to the datastore when a nonce exists in the settings object.\n\t */\n\tLLMS.Tracking = function( settings ) {\n\t\n\t\tsettings = settings || {};\n\t\n\t\tvar self = this,\n\t\t\tstore = new LLMS.Storage( 'llms-tracking' );\n\t\n\t\tsettings = 'string' === typeof settings ? JSON.parse( settings ) : settings;\n\t\n\t\t/**\n\t\t * Initialize / Bind all tracking event listeners.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 5.0.0 Only attempt to add a nonce to the datastore when a nonce exists in the settings object.\n\t\t * @since 7.1.0 Do not add a nonce to the datastore by default, will be added/updated\n\t\t * when storing an event to track.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tfunction init() {\n\t\n\t\t\tself.addEvent( 'page.load' );\n\t\n\t\t\twindow.addEventListener( 'beforeunload', onBeforeUnload );\n\t\t\twindow.addEventListener( 'unload', onUnload );\n\t\n\t\t\tdocument.addEventListener( 'visibilitychange', onVisibilityChange );\n\t\n\t\t};\n\t\n\t\t/**\n\t\t * Add an event.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 3.36.2 Fix error when settings aren't loaded.\n\t\t * @since 3.37.2 Always make sure the nonce is set for server-side verification.\n\t\t * @since 3.37.14 Persist the tracking events via ajax when reaching the cookie size limit.\n\t\t * @since 7.1.0 Only attempt to add a nonce to the datastore when a nonce exists in the settings object.\n\t\t *\n\t\t * @param string|obj event Event Id (type.event) or a full event object from `this.makeEventObj()`.\n\t\t * @param int args Optional additional arguments to pass to `this.makeEventObj()`.\n\t\t * @return {void}\n\t\t */\n\t\tthis.addEvent = function( event, args ) {\n\t\n\t\t\targs = args || {};\n\t\t\tif ( 'string' === typeof event ) {\n\t\t\t\targs.event = event;\n\t\t\t}\n\t\n\t\t\t// If the event isn't registered in the settings don't proceed.\n\t\t\tif ( !settings.events || -1 === settings.events.indexOf( args.event ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// Make sure the nonce is set for server-side verification.\n\t\t\tif ( settings.nonce ) {\n\t\t\t\tstore.set( 'nonce', settings.nonce );\n\t\t\t}\n\t\n\t\t\tevent = self.makeEventObj( args );\n\t\n\t\t\tvar all = store.get( 'events', [] );\n\t\t\tall.push( event );\n\t\t\tstore.set( 'events', all );\n\t\n\t\t\t// If couldn't store the latest event because of size limits.\n\t\t\tif ( all.length > store.get( 'events', [] ).length ) {\n\t\n\t\t\t\t// Copy the cookie in a temporary variable.\n\t\t\t\tvar _temp = store.getAll();\n\t\t\t\t// Clear the events from the cookie.\n\t\t\t\tstore.clear('events');\n\t\n\t\t\t\t// Add the latest event to the temporary variable.\n\t\t\t\t_temp['events'].push( event );\n\t\n\t\t\t\t// Send the temporary variable as string via ajax.\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'persist_tracking_events',\n\t\t\t\t\t\t'llms-tracking': JSON.stringify(_temp)\n\t\t\t\t\t},\n\t\n\t\t\t\t\terror: function( xhr, status, error ) {\n\t\n\t\t\t\t\t\tconsole.log( xhr, status, error );\n\t\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\t\n\t\t\t\t\t\tif ( 'error' === r.code ) {\n\t\t\t\t\t\t\tconsole.log(r.code, r.message);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t}\n\t\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t}\n\t\n\t\t/**\n\t\t * Retrieve initialization settings.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return obj\n\t\t */\n\t\tthis.getSettings = function() {\n\t\t\treturn settings;\n\t\t}\n\t\n\t\t/**\n\t\t * Create an event object suitable to save as an event.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 3.37.9 Use `$.extend()` in favor of `Object.assign()`.\n\t\t *\n\t\t * @param obj event {\n\t\t * Event hash\n\t\t *\n\t\t * @param {string} event (Required) Event ID, eg: \"page.load\".\n\t\t * @param {url} url Event URL. (Optional, added automatically) Stored as metadata and used to infer an object_id for post events.\n\t\t * @param {time} float (Optional, added automatically) Timestamp (in milliseconds). Used for the event creation date.\n\t\t * @param {int} obj_id (Optional). The object ID. Inferred automatically via `url` if not provided.\n\t\t * @param {obj} meta (Optional) Hash of metadata to store with the event.\n\t\t * }\n\t\t * @return obj\n\t\t */\n\t\tthis.makeEventObj = function( event ) {\n\t\t\treturn $.extend( event, {\n\t\t\t\turl: window.location.href,\n\t\t\t\ttime: Math.round( new Date().getTime() / 1000 ),\n\t\t\t} );\n\t\t}\n\t\n\t\n\t\t/**\n\t\t * Remove the visibility change event listener on window.beforeunload\n\t\t *\n\t\t * Prevents actual unloading from recording a blur event from the visibility change listener\n\t\t *\n\t\t * @param obj e JS event object.\n\t\t * @return void\n\t\t */\n\t\tfunction onBeforeUnload( e ) {\n\t\t\tdocument.removeEventListener( 'visibilitychange', onVisibilityChange );\n\t\t}\n\t\n\t\t/**\n\t\t * Record a `page.exit` event on window.unload.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param obj e JS event object.\n\t\t * @return void\n\t\t */\n\t\tfunction onUnload( e ) {\n\t\t\tself.addEvent( 'page.exit' );\n\t\t}\n\t\n\t\t/**\n\t\t * Record `page.blur` and `page.focus` events via document.visilibitychange events.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param obj e JS event object.\n\t\t * @return void\n\t\t */\n\t\tfunction onVisibilityChange( e ) {\n\t\n\t\t\tvar event = document.hidden ? 'page.blur' : 'page.focus';\n\t\t\tself.addEvent( event );\n\t\n\t\t}\n\t\n\t\t// Initialize on the frontend only.\n\t\tif ( ! $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\tinit();\n\t\t}\n\t\n\t};\n\t\n\tllms.tracking = new LLMS.Tracking( llms.tracking );\n\t\n\t\t/**\n\t * Rest Methods\n\t * Manages URL and Rest object parsing\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Rest = {\n\t\n\t\t/**\n\t\t * Init\n\t\t * loads class methods\n\t\t */\n\t\tinit: function() {\n\t\t\tthis.bind();\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return {[type]} [description]\n\t\t */\n\t\tbind: function() {\n\t\t},\n\t\n\t\t/**\n\t\t * Searches for string matches in url path\n\t\t *\n\t\t * @param {Array} strings [Array of strings to search for matches]\n\t\t * @return {Boolean} [Was a match found?]\n\t\t */\n\t\tis_path: function( strings ) {\n\t\n\t\t\tvar path_exists = false,\n\t\t\t\turl = window.location.href;\n\t\n\t\t\tfor ( var i = 0; i < strings.length; i++ ) {\n\t\n\t\t\t\tif ( url.search( strings[i] ) > 0 && ! path_exists ) {\n\t\n\t\t\t\t\tpath_exists = true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn path_exists;\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieves query variables\n\t\t *\n\t\t * @return {[Array]} [array object of query variable key=>value pairs]\n\t\t */\n\t\tget_query_vars: function() {\n\t\n\t\t\tvar vars = [], hash,\n\t\t\t\thashes = window.location.href.slice( window.location.href.indexOf( '?' ) + 1 ).split( '&' );\n\t\n\t\t\tfor (var i = 0; i < hashes.length; i++) {\n\t\t\t\thash = hashes[i].split( '=' );\n\t\t\t\tvars.push( hash[0] );\n\t\t\t\tvars[hash[0]] = hash[1];\n\t\t\t}\n\t\n\t\t\treturn vars;\n\t\t}\n\t\n\t};\n\t\n\n\t(()=>{\"use strict\";var t={d:(n,e)=>{for(var r in e)t.o(e,r)&&!t.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:e[r]})},o:(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r:t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})}},n={};t.r(n),t.d(n,{get:()=>d,start:()=>p,stop:()=>c});const e=\"llms-spinning\",r=\"default\",o=window.wp.i18n;function i(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r;const i=document.createElement(\"div\"),l=(0,o.__)(\"Loading…\",\"lifterlms\");return i.innerHTML=`${l} `,i.classList.add(e),t.appendChild(i),i}function l(t){if((t=\"string\"==typeof t?document.querySelectorAll(t):t)instanceof NodeList)return Array.from(t);const n=[];return t instanceof Element?n.push(t):\"undefined\"!=typeof jQuery&&t instanceof jQuery&&t.toArray().forEach((t=>n.push(t))),n}function s(t){const n=t.querySelectorAll(\".llms-spinning\");return n.length?Array.from(n).find((n=>t===n.parentNode)):null}function a(){const t=\"llms-spinner-styles\";if(!document.getElementById(t)){const n=document.createElement(\"style\");n.textContent=\"\\n\\t.llms-spinning {\\n\\t\\tbackground: rgba( 250, 250, 250, 0.7 );\\n\\t\\tbottom: 0;\\n\\t\\tdisplay: none;\\n\\t\\tleft: 0;\\n\\t\\tposition: absolute;\\n\\t\\tright: 0;\\n\\t\\ttop: 0;\\n\\t\\tz-index: 2;\\n\\t}\\n\\n\\t.llms-spinner {\\n\\t\\tanimation: llms-spinning 1.5s linear infinite;\\n\\t\\tbox-sizing: border-box;\\n\\t\\tborder: 4px solid #313131;\\n\\t\\tborder-radius: 50%;\\n\\t\\theight: 40px;\\n\\t\\tleft: 50%;\\n\\t\\tmargin-left: -20px;\\n\\t\\tmargin-top: -20px;\\n\\t\\tposition: absolute;\\n\\t\\ttop: 50%;\\n\\t\\twidth: 40px;\\n\\n\\t}\\n\\n\\t.llms-spinner.small {\\n\\t\\tborder-width: 2px;\\n\\t\\theight: 20px;\\n\\t\\tmargin-left: -10px;\\n\\t\\tmargin-top: -10px;\\n\\t\\twidth: 20px;\\n\\t}\\n\\n\\t@keyframes llms-spinning {\\n\\t\\t0% {\\n\\t\\t\\ttransform: rotate( 0deg )\\n\\t\\t}\\n\\t\\t50% {\\n\\t\\t\\tborder-radius: 5%;\\n\\t\\t}\\n\\t\\t100% {\\n\\t\\t\\ttransform: rotate( 220deg) \\n\\t\\t}\\n\\t}\\n\".replace(/\\n/g,\"\").replace(/\\t/g,\" \").replace(/\\s\\s+/g,\" \"),n.id=t,document.head.appendChild(n)}}function d(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r,e=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];a();const o=l(t);if(!o.length)return null;const d=o[0],p=s(d)||i(d,n);return e&&\"undefined\"!=typeof jQuery?jQuery(p):p}function p(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r;l(t).forEach((t=>{const e=d(t,n,!1);e&&(e.style.display=\"block\")}))}function c(t){l(t).forEach((t=>{const n=d(t,r,!1);n&&(n.style.display=\"none\")}))}window.LLMS=window.LLMS||{},window.LLMS.Spinner=n})();\n\n\t/**\n\t * Initializes all classes within the LLMS Namespace\n\t *\n\t * @since Unknown\n\t *\n\t * @return {void}\n\t */\n\tLLMS.init = function() {\n\n\t\tfor (var func in LLMS) {\n\n\t\t\tif ( typeof LLMS[func] === 'object' && LLMS[func] !== null ) {\n\n\t\t\t\tif ( LLMS[func].init !== undefined ) {\n\n\t\t\t\t\tif ( typeof LLMS[func].init === 'function') {\n\t\t\t\t\t\tLLMS[func].init();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t/**\n\t * Determine if the current device is touch-enabled\n\t *\n\t * @since 3.24.3\n\t *\n\t * @see {@link https://stackoverflow.com/a/4819886/400568}\n\t *\n\t * @return {Boolean} Whether or not the device is touch-enabled.\n\t */\n\tLLMS.is_touch_device = function() {\n\n\t\tvar prefixes = ' -webkit- -moz- -o- -ms- '.split( ' ' );\n\t\tvar mq = function( query ) {\n\t\t\treturn window.matchMedia( query ).matches;\n\t\t}\n\n\t\tif ( ( 'ontouchstart' in window ) || window.DocumentTouch && document instanceof DocumentTouch ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/**\n\t\t * Include the 'heartz' as a way to have a non matching MQ to help terminate the join.\n\t\t *\n\t\t * @see {@link https://git.io/vznFH}\n\t\t */\n\t\tvar query = ['(', prefixes.join( 'touch-enabled),(' ), 'heartz', ')'].join( '' );\n\t\treturn mq( query );\n\n\t};\n\n\t/**\n\t * Wait for matchHeight to load\n\t *\n\t * @since 3.0.0\n\t * @since 3.16.6 Unknown.\n\t * @since 5.3.3 Pass a dependency name to `wait_for()`.\n\t *\n\t * @param {Function} cb Callback function to run when matchheight is ready.\n\t * @return {void}\n\t */\n\tLLMS.wait_for_matchHeight = function( cb ) {\n\t\tthis.wait_for( function() {\n\t\t\treturn ( undefined !== $.fn.matchHeight );\n\t\t}, cb, 'matchHeight' );\n\t}\n\n\t/**\n\t * Wait for webuiPopover to load\n\t *\n\t * @since 3.9.1\n\t * @since 3.16.6 Unknown.\n\t *\n\t * @param {Function} cb Callback function to run when matchheight is ready.\n\t * @return {void}\n\t */\n\tLLMS.wait_for_popover = function( cb ) {\n\t\tthis.wait_for( function() {\n\t\t\treturn ( undefined !== $.fn.webuiPopover );\n\t\t}, cb, 'webuiPopover' );\n\t}\n\n\t/**\n\t * Wait for a dependency to load and then run a callback once it has\n\t *\n\t * Temporary fix for a less-than-optimal assets loading function on the PHP side of things.\n\t *\n\t * @since 3.9.1\n\t * @since 5.3.3 Added optional `name` parameter.\n\t *\n\t * @param {Function} test A function that returns a truthy if the dependency is loaded.\n\t * @param {Function} cb A callback function executed once the dependency is loaded.\n\t * @param {string} name The dependency name.\n\t * @return {void}\n\t */\n\tLLMS.wait_for = function( test, cb, name ) {\n\n\t\tvar counter = 0,\n\t\t\tinterval;\n\n\t\tname = name ? name : 'unnamed';\n\n\t\tinterval = setInterval( function() {\n\n\t\t\t// If we get to 30 seconds log an error message.\n\t\t\tif ( counter >= 300 ) {\n\n\t\t\t\tconsole.log( 'Unable to load dependency: ' + name );\n\n\t\t\t\t// If we can't access yet, increment and wait...\n\t\t\t} else {\n\n\t\t\t\t// Bind the events, we're good!\n\t\t\t\tif ( test() ) {\n\t\t\t\t\tcb();\n\t\t\t\t} else {\n\t\t\t\t\t// console.log( 'Waiting for dependency: ' + name );\n\t\t\t\t\tcounter++;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tclearInterval( interval );\n\n\t\t}, 100 );\n\n\t};\n\n\tLLMS.init( $ );\n\n} )( jQuery );\n"],"sourceRoot":"../../js/private"}
\ No newline at end of file
diff --git a/assets/maps/js/llms.min.js.map b/assets/maps/js/llms.min.js.map
new file mode 100644
index 0000000000..3452583ee1
--- /dev/null
+++ b/assets/maps/js/llms.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["llms.js"],"names":["LLMS","window","$","factory","OldCookies","api","Achievements","init","self","length","this","bind","maybe_open","each","create_modal","on","$this","id","attr","$modal","iziModal","$el","append","headerColor","group","history","loop","overlayColor","transitionIn","transitionOut","width","onOpening","modal","setTitle","find","html","setSubtitle","setContent","onClosing","pushState","document","title","location","pathname","search","let","hash","split","parseInt","Number","isInteger","a","querySelector","join","click","Ajax","url","ajaxurl","llms","type","data","cache","dataType","async","response","obj","_ajax_nonce","ajax_nonce","wp_ajax_data","nonce","query_vars","Rest","get_query_vars","post_id","post","val","call","settings","request","ajax","Donut","options","extend","element","percent","circle","stroke_width","css","radius","angle","hasClass","i","Math","round","first","increment","animate","timer","setInterval","d","radians","PI","x","cos","y","sin","clearInterval","Forms","address_info","$cities","$countries","$states","$states_holder","bind_matching_fields","bind_voucher_field","bind_edit_account","bind_l10n_selects","handle_toggle_click","$zips","wait_for","undefined","fn","llmsSelect2","prep_state_field","add","JSON","parse","update_locale_info","trigger","not","$parents","$field","$match","closest","val_1","val_2","addClass","removeClass","e","preventDefault","toggle","get_field_parent","get_label_text","$label","$clone","clone","remove","text","trim","event","$fields","isShowing","displayFunc","disabled","textAttr","$parent","$holder","appendTo","update_label","$required","country_code","info","update_state_options","state","update_locale_info_for_field","city","postcode","label","enable_field","disable_field","opts","name","class","insertAfter","hide","removeAttr","next","detach","show","Instructors","wait_for_matchHeight","matchHeight","l10n","translate","string","strings","replace","replacements","str","token","value","indexOf","toString","LessonPreview","$els","$locked","match_height","msg","$tip","get_tooltip","setTimeout","Loops","OutlineCollapse","$outlines","$outline","$headers","$section","get_section_state","open_section","close_section","opposite_action","PasswordStrength","$meter","$pass","$conf","$form","setup_references","wp","passwordStrength","submit","check_strength","$pass_field","$conf_field","pass_length","conf_length","get_current_strength_status","get_current_strength","checkout","callback","get_blocklist","blocklist","userInputDisallowedList","concat","get_setting","push","format","pass","conf","meter","get_strength_slug","get_strength_text","curr","min","get_strength_value","get_minimum_strength","key","default_val","get_settings","strength_val","slugs","-1","1","2","3","4","5","texts","strength_slug","values","too-short","very-weak","weak","medium","strong","mismatch","off","scrollTop","offset","top","fadeIn","get_blacklist","console","log","Pricing_Tables","wait_for_popover","bind_locked","webuiPopover","animation","closeable","content","$content","$element","placement","style","Quiz_Attempt","$curr","siblings","slideUp","is","slideDown","Review","jQuery","action","review_title","review_text","pageID","llms_review_nonce","success","error","jqXHR","textStatus","errorThrown","change","result","arguments","attributes","decode","s","decodeURIComponent","converter","set","path","defaults","expires","Date","toUTCString","stringify","test","write","encodeURIComponent","String","escape","attributeName","stringifiedAttributes","cookie","get","json","jar","cookies","parts","slice","charAt","read","getJSON","withConverter","define","amd","registeredInModuleLoader","exports","module","Cookies","noConflict","CookieStore","Storage","store","clearAll","clear","getAll","sameSite","StudentDashboard","screen","get_screen","bind_orders","order_cancel_warning","slideToggle","confirm","Tracking","onBeforeUnload","removeEventListener","onVisibilityChange","onUnload","addEvent","hidden","args","events","makeEventObj","all","_temp","llms-tracking","xhr","status","r","code","message","getSettings","href","time","getTime","addEventListener","tracking","is_path","path_exists","vars","hashes","t","n","o","Object","defineProperty","enumerable","prototype","hasOwnProperty","Symbol","toStringTag","start","l","forEach","display","stop","i18n","querySelectorAll","NodeList","Array","from","Element","toArray","getElementById","createElement","textContent","head","appendChild","p","parentNode","__","innerHTML","classList","Spinner","func","is_touch_device","prefixes","DocumentTouch","query","matchMedia","matches","cb","interval","counter"],"mappings":"AAOA,IAAAA,KAAAC,OAAAD,MAAA,GACA,CAAA,SAAAE,GAEA,aAgyDA,IAAAC,EAWAC,EACAC,EA9xDAL,KAAAM,aAAA,CAUAC,KAAA,WAEA,IAEAC,EAFAN,EAAA,mBAAA,EAAAO,SAEAD,EAAAE,KAEAR,EAAA,WACAM,EAAAG,KAAA,EACAH,EAAAI,WAAA,CACA,CAAA,EAGA,EASAD,KAAA,WAEA,IAAAH,EAAAE,KAEAR,EAAA,mBAAA,EAAAW,KAAA,WAEAL,EAAAM,aAAAZ,EAAAQ,IAAA,CAAA,CAEA,CAAA,EAEAR,EAAA,mBAAA,EAAAa,GAAA,QAAA,WAEA,IAAAC,EAAAd,EAAAQ,IAAA,EACAO,EAAA,eAAAD,EAAAE,KAAA,SAAA,EACAC,EAAAjB,EAAA,IAAAe,CAAA,EAEAE,EAAAV,QACAD,EAAAM,aAAAE,CAAA,EAGAG,EAAAC,SAAA,MAAA,CAEA,CAAA,CAEA,EAUAN,aAAA,SAAAO,GAEA,IAAAJ,EAAA,eAAAI,EAAAH,KAAA,SAAA,EACAC,EAAAjB,EAAA,IAAAe,CAAA,EAEAE,EAAAV,SACAU,EAAAjB,EAAA,2CAAAe,EAAA,MAAA,EACAf,EAAA,MAAA,EAAAoB,OAAAH,CAAA,GAGAA,EAAAC,SAAA,CACAG,YAAA,UACAC,MAAA,eACAC,QAAA,CAAA,EACAC,KAAA,CAAA,EACAC,aAAA,uBACAC,aAAA,aACAC,cAAA,cACAC,MAAA,IACAC,UAAA,SAAAC,GAEAA,EAAAC,SAAAZ,EAAAa,KAAA,yBAAA,EAAAC,KAAA,CAAA,EACAH,EAAAI,YAAAf,EAAAa,KAAA,wBAAA,EAAAC,KAAA,CAAA,EACAH,EAAAK,WAAA,iCAAAhB,EAAAc,KAAA,EAAA,QAAA,CAEA,EAEAG,UAAA,WACArC,OAAAwB,QAAAc,UAAA,GAAAC,SAAAC,MAAAxC,OAAAyC,SAAAC,SAAA1C,OAAAyC,SAAAE,MAAA,CACA,CAEA,CAAA,CAEA,EAUAhC,WAAA,WAEAiC,IAAAC,EAAA7C,OAAAyC,SAAAI,KAAAC,MAAA,GAAA,EACA,IAAAD,EAAArC,SAIAqC,EAAA,GAAAE,SAAAF,EAAA,EAAA,EACA,kBAAAA,EAAA,IAAAG,OAAAC,UAAAJ,EAAA,EAAA,IAIAK,EAAAX,SAAAY,yBAAAN,EAAAO,KAAA,GAAA,KAAA,IAKAF,EAAAG,MAAA,EAEA,CAEA,EAYAtD,KAAAuD,KAAA,CAOAC,IAAAvD,OAAAwD,SAAAxD,OAAAyD,KAAAD,QAOAE,KAAA,OAOAC,KAAA,GAOAC,MAAA,CAAA,EAQAC,SAAA,OAQAC,MAAA,CAAA,EAEAC,SAAA,GAWAzD,KAAA,SAAA0D,GAGA,GAAA,OAAAA,GAAA,UAAA,OAAAA,EACA,MAAA,CAAA,EAIAA,EAAAT,KAAA,QAAAS,EAAAA,EAAAvD,MAAA8C,IACAS,EAAAN,MAAA,SAAAM,EAAAA,EAAAvD,MAAAiD,KACAM,EAAAL,MAAA,SAAAK,EAAAA,EAAAvD,MAAAkD,KACAK,EAAAJ,OAAA,UAAAI,EAAAA,EAAAvD,MAAAmD,MACAI,EAAAH,UAAA,aAAAG,EAAAA,EAAAvD,MAAAoD,SACAG,EAAAF,OAAA,UAAAE,EAAAA,EAAAvD,MAAAqD,MAGAE,EAAAL,KAAAM,YAAAjE,OAAAyD,KAAAS,YAAAC,aAAAC,MAGA,IACAC,EADAtE,KAAAuE,KACAC,eAAA,EAMA,OALAP,EAAAL,KAAAa,QAAA,SAAAH,EAAAA,EAAAI,KAAA,KACA,CAAAT,EAAAL,KAAAa,SAAAvE,EAAA,eAAA,EAAAO,SACAwD,EAAAL,KAAAa,QAAAvE,EAAA,eAAA,EAAAyE,IAAA,GAGAV,CACA,EAUAW,KAAA,SAAAX,GAGAY,EAAAnE,KAAAH,KAAA0D,CAAA,EAGA,MAAAY,CAAAA,CAAAA,IAGAnE,KAAAoE,QAAAD,CAAA,EAGAnE,KAEA,EAOAoE,QAAA,SAAAD,GAIA,OAFA3E,EAAA6E,KAAAF,CAAA,EAEAnE,IAEA,CAEA,EAeAV,KAAAgF,MAAA,SAAA3D,GAWA,SAAA2D,EAAAC,GAEAvE,KAAAmE,SAAA3E,EAAAgF,OAAA,CACAC,QAAAF,EAAAE,QACAC,QAAA,GACA,EAAAH,CAAA,EAEAvE,KAAA2E,OAAA3E,KAAAmE,SAAAM,QAAAjD,KAAA,MAAA,EACAxB,KAAAmE,SAAAS,aAAAtC,SAAAtC,KAAA2E,OAAAE,IAAA,cAAA,CAAA,EACA7E,KAAA8E,QAAAxC,SAAAtC,KAAAmE,SAAAM,QAAAI,IAAA,OAAA,CAAA,EAAA7E,KAAAmE,SAAAS,cAAA,EACA5E,KAAA+E,MAAAvF,EAAA,MAAA,EAAAwF,SAAA,KAAA,EAAA,KAAA,KACAhF,KAAAiF,EAAAC,KAAAC,MAAA,IAAAnF,KAAAmE,SAAAO,OAAA,EACA1E,KAAAoF,MAAA,CAAA,EACApF,KAAAqF,UAAA7F,EAAA,MAAA,EAAAwF,SAAA,KAAA,EAAA,CAAA,EAAA,EAEAhF,KAAAsF,QAAA,WACAtF,KAAAuF,MAAAC,YAAAxF,KAAAgB,KAAAf,KAAAD,IAAA,EAAA,EAAA,CACA,EAEAA,KAAAgB,KAAA,WACAhB,KAAA+E,OAAA/E,KAAAqF,UACArF,KAAA+E,OAAA,IACA,IAGAU,EAHAC,EAAA1F,KAAA+E,MAAA,IAAAG,KAAAS,GACAC,EAAA5F,KAAA8E,OAAA9E,KAAAmE,SAAAS,aAAA,EAAAM,KAAAW,IAAAH,CAAA,EAAA1F,KAAA8E,OACAgB,EAAA9F,KAAA8E,OAAA9E,KAAAmE,SAAAS,aAAA,EAAAM,KAAAa,IAAAL,CAAA,EAAA1F,KAAA8E,OAEA,CAAA,IAAA9E,KAAAoF,OACAK,EAAAzF,KAAA2E,OAAAnE,KAAA,GAAA,EAAA,MAAAoF,EAAA,IAAAE,EACA9F,KAAAoF,MAAA,CAAA,GAEAK,EAAAzF,KAAA2E,OAAAnE,KAAA,GAAA,EAAA,MAAAoF,EAAA,IAAAE,EAEA9F,KAAA2E,OAAAnE,KAAA,IAAAiF,CAAA,EACAzF,KAAAiF,CAAA,GAEAjF,KAAAiF,GAAA,GACAe,cAAAhG,KAAAuF,KAAA,CAEA,CACA,EAUA5E,EAUAA,GARAC,OAAA,4GAAA,EACA,IAAA0D,EAAA,CACAG,QAAA9D,EACA+D,QAAA/D,EAAAH,KAAA,WAAA,CACA,CAAA,EACA8E,QAAA,CAKA,EAWAhG,KAAA2G,MAAA,CASAC,aAAA,GAOAC,QAAA,KAOAC,WAAA,KAOAC,QAAA,KAOAC,eAAA,KAUAzG,KAAA,WAEA,IAMAC,EANAN,EAAA,MAAA,EAAAwF,SAAA,UAAA,GACAxF,CAAAA,EAAA,MAAA,EAAAwF,SAAA,aAAA,GAAAxF,CAAAA,EAAA,MAAA,EAAAwF,SAAA,eAAA,KAKAlF,EAAAE,MAEAuG,qBAAA,EACAzG,EAAA0G,mBAAA,EACA1G,EAAA2G,kBAAA,EACA3G,EAAA4G,kBAAA,EAEA,EASAD,kBAAA,WAGAjH,EAAA,oCAAA,EAAAO,QAIAP,EAAA,qBAAA,EAAAa,GAAA,QAAAL,KAAA2G,mBAAA,CAEA,EAUAD,kBAAA,WAEA,IAAA5G,EAAAE,KAEAF,EAAAqG,QAAA3G,EAAA,oBAAA,EACAM,EAAAsG,WAAA5G,EAAA,kCAAA,EACAM,EAAAuG,QAAA7G,EAAA,gCAAA,EACAM,EAAA8G,MAAApH,EAAA,mBAAA,EAEAM,EAAAsG,WAAArG,QAQAT,KAAAuH,SAJA,WACA,OAAAC,KAAAA,IAAAtH,EAAAuH,GAAAC,WACA,EAEA,WAEAlH,EAAAuG,QAAAtG,QACAD,EAAAmH,iBAAA,EAGAnH,EAAAsG,WAAAc,IAAApH,EAAAuG,OAAA,EAAAW,YAAA,CAAA5F,MAAA,MAAA,CAAA,EAEA7B,OAAAyD,KAAAkD,eACApG,EAAAoG,aAAAiB,KAAAC,MAAA7H,OAAAyD,KAAAkD,YAAA,GAGApG,EAAAsG,WAAA/F,GAAA,SAAA,WAEA,IAAA4D,EAAAzE,EAAAQ,IAAA,EAAAiE,IAAA,EACAnE,EAAAuH,mBAAApD,CAAA,CAEA,CAAA,EAAAqD,QAAA,QAAA,CAEA,EAAA,aAAA,CAEA,EASAf,qBAAA,WAEA/G,EAAA,mBAAA,EAAA+H,IAAA,mBAAA,EAEApH,KAAA,WAEA,IAEAqH,EAFAC,EAAAjI,EAAAQ,IAAA,EACA0H,EAAAlI,EAAA,IAAAiI,EAAAjH,KAAA,YAAA,CAAA,EAGAkH,EAAA3H,SAEAyH,EAAAC,EAAAE,QAAA,kBAAA,EAAAT,IAAAQ,EAAAC,QAAA,kBAAA,CAAA,EAEAF,EAAApH,GAAA,eAAA,WAEA,IAAAuH,EAAAH,EAAAxD,IAAA,EACA4D,EAAAH,EAAAzD,IAAA,EAEA2D,GAAAC,GAAAD,IAAAC,EACAL,EAAAM,SAAA,SAAA,EAEAN,EAAAO,YAAA,SAAA,CAGA,CAAA,EAIA,CAAA,CAEA,EASAvB,mBAAA,WAEAhH,EAAA,sBAAA,EAAAa,GAAA,QAAA,SAAA2H,GACAA,EAAAC,eAAA,EACAzI,EAAA,eAAA,EAAA0I,OAAA,CACA,CAAA,CAEA,EAaAC,iBAAA,SAAAV,GAEA,OAAAA,EAAAE,QAAA,kBAAA,CAEA,EAYAS,eAAA,SAAAC,GAEAC,EAAAD,EAAAE,MAAA,EAEA,OADAD,EAAA9G,KAAA,GAAA,EAAAgH,OAAA,EACAF,EAAAG,KAAA,EAAAC,KAAA,CAEA,EAUA/B,oBAAA,SAAAgC,GAEAA,EAAAV,eAAA,EAEA,IAAA3H,EAAAd,EAAAQ,IAAA,EACA4I,EAAApJ,EAAAA,EAAAQ,IAAA,EAAAQ,KAAA,aAAA,CAAA,EACAqI,EAAAvI,EAAAE,KAAA,iBAAA,GAAA,KACAsI,EAAA,QAAAD,EAAA,OAAA,OACAE,EAAA,QAAAF,EAAA,WAAA,KACAG,EAAA,QAAAH,EAAA,mBAAA,mBAEAD,EAAAzI,KAAA,WAEAX,EAAAQ,IAAA,EAAA2H,QAAA,kBAAA,EAAAmB,GAAA,EACAtJ,EAAAQ,IAAA,EAAAQ,KAAA,WAAAuI,CAAA,CAEA,CAAA,EAEAzI,EAAAmI,KAAAnI,EAAAE,KAAAwI,CAAA,CAAA,EACA1I,EAAAE,KAAA,kBAAA,QAAAqI,EAAA,KAAA,KAAA,CAEA,EAWA5B,iBAAA,WAEA,IAAAgC,EAAAjJ,KAAAqG,QAAAsB,QAAA,kBAAA,EAEA3H,KAAAkJ,QAAA1J,EAAA,sDAAA,EAEAQ,KAAAkJ,QAAAC,SAAAF,CAAA,EACAjJ,KAAAqG,QAAA7E,KAAA,UAAA,EAAA2H,SAAAnJ,KAAAkJ,OAAA,CAEA,EAWAE,aAAA,SAAA3B,EAAAgB,GAEA,IAAAJ,EAAArI,KAAAmI,iBAAAV,CAAA,EAAAjG,KAAA,OAAA,EACA6H,EAAAhB,EAAA7G,KAAA,gBAAA,EAAA+G,MAAA,EAEAF,EAAA5G,KAAAgH,CAAA,EACAJ,EAAAzH,OAAAyI,CAAA,CAEA,EAcAhC,mBAAA,SAAAiC,GAEA,IAIAC,EAJAvJ,KAAAkG,cAAAlG,KAAAkG,aAAAoD,KAIAC,EAAAvJ,KAAAkG,aAAAoD,GAEAtJ,KAAAwJ,qBAAAF,CAAA,EACAtJ,KAAAoJ,aAAApJ,KAAAqG,QAAAkD,EAAAE,KAAA,EAEAzJ,KAAA0J,6BAAA1J,KAAAmG,QAAAoD,EAAAI,IAAA,EACA3J,KAAA0J,6BAAA1J,KAAA4G,MAAA2C,EAAAK,QAAA,EAEA,EAWAF,6BAAA,SAAAjC,EAAAoC,GAEAA,GACA7J,KAAAoJ,aAAA3B,EAAAoC,CAAA,EACA7J,KAAA8J,aAAArC,CAAA,GAEAzH,KAAA+J,cAAAtC,CAAA,CAGA,EAgBA+B,qBAAA,SAAAF,GAEAtJ,KAAAqG,QAAAtG,UAIAiK,EAAAhK,KAAAkJ,QAAA1H,KAAA,sBAAA8H,EAAA,WAAA,EAAAf,MAAA,GAEAxI,QAIAC,KAAA8J,aAAA9J,KAAAqG,OAAA,EACArG,KAAAqG,QAAA5E,KAAAuI,CAAA,IAJAhK,KAAAqG,QAAA5E,KAAA,wBAAA,EACAzB,KAAA+J,cAAA/J,KAAAqG,OAAA,GAMA,EAYA0D,cAAA,SAAAtC,GACAjI,EACA,UACA,CAAAyK,KAAAxC,EAAAjH,KAAA,MAAA,EAAA0J,MAAAzC,EAAAjH,KAAA,OAAA,EAAA,UAAAyC,KAAA,QAAA,CACA,EAAAkH,YAAA1C,CAAA,EACAA,EAAAjH,KAAA,WAAA,UAAA,EACAR,KAAAmI,iBAAAV,CAAA,EAAA2C,KAAA,CACA,EAYAN,aAAA,SAAArC,GACAA,EAAA4C,WAAA,UAAA,EACA5C,EAAA6C,KAAA,gBAAA7C,EAAAjH,KAAA,MAAA,EAAA,GAAA,EAAA+J,OAAA,EACAvK,KAAAmI,iBAAAV,CAAA,EAAA+C,KAAA,CACA,CAEA,EAWAlL,KAAAmL,YAAA,CAKA5K,KAAA,WAEA,IAAAC,EAAAE,KAEAR,EAAA,MAAA,EAAAwF,SAAA,UAAA,GAIAxF,EAAA,mBAAA,EAAAO,QAEAT,KAAAoL,qBAAA,WACA5K,EAAAG,KAAA,CACA,CAAA,CAIA,EAQAA,KAAA,WAEAT,EAAA,gCAAA,EAAAmL,YAAA,CAEA,CAEA,EAeArL,KAAAsL,KAAAtL,KAAAsL,MAAA,GAEAtL,KAAAsL,KAAAC,UAAA,SAAAC,GAIA,OAFA9K,KAEA+K,QAAAD,IAMAA,CAIA,EAiBAxL,KAAAsL,KAAAI,QAAA,SAAAF,EAAAG,GAEA,IAAAC,EAAAlL,KAAA6K,UAAAC,CAAA,EAcA,OAZAtL,EAAAW,KAAA8K,EAAA,SAAAE,EAAAC,GAEA,CAAA,IAAAD,EAAAE,QAAA,GAAA,EACAD,EAAAA,EAAAE,SAAA,EACA,CAAA,IAAAH,EAAAE,QAAA,GAAA,IACAD,EAAAA,CAAAA,GAGAF,EAAAA,EAAAF,QAAAG,EAAAC,CAAA,CAEA,CAAA,EAEAF,CAEA,EAWA5L,KAAAiM,cAAA,CAOAC,KAAA,KAOA3L,KAAA,WAEA,IAAAC,EAAAE,KAEAA,KAAAyL,QAAAjM,EAAA,+BAAA,EAEAQ,KAAAyL,QAAA1L,QAEAD,EAAAG,KAAA,EAIAT,EAAA,yBAAA,EAAAO,QAEAT,KAAAoL,qBAAA,WAEA5K,EAAA4L,aAAA,CAEA,CAAA,CAIA,EASAzL,KAAA,WAEA,IAAAH,EAAAE,KAEAA,KAAAyL,QAAApL,GAAA,QAAA,WACA,MAAA,CAAA,CACA,CAAA,EAEAL,KAAAyL,QAAApL,GAAA,aAAA,WAEA,IAIAsL,EAJAC,EAAApM,EAAAQ,IAAA,EAAAwB,KAAA,eAAA,EACAoK,EAAA7L,SAGA4L,GADAA,EADAnM,EAAAQ,IAAA,EAAAQ,KAAA,kBAAA,IAEAlB,KAAAsL,KAAAC,UAAA,mDAAA,EAEAe,EAAA9L,EAAA+L,YAAAF,CAAA,EACAnM,EAAAQ,IAAA,EAAAY,OAAAgL,CAAA,GAEAE,WAAA,WACAF,EAAA9D,SAAA,MAAA,CACA,EAAA,EAAA,CAEA,CAAA,EAEA9H,KAAAyL,QAAApL,GAAA,aAAA,WAEAb,EAAAQ,IAAA,EAAAwB,KAAA,eAAA,EACAuG,YAAA,MAAA,CAEA,CAAA,CAEA,EASA2D,aAAA,WAEAlM,EAAA,2CAAA,EAAAmL,YAAA,CAEA,EAUAkB,YAAA,SAAAF,GACA,IAAAhL,EAAAnB,EAAA,8BAAA,EAEA,OADAmB,EAAAC,OAAA,qCAAA+K,EAAA,QAAA,EACAhL,CACA,CAEA,EAWArB,KAAAyM,MAAA,CAOAlM,KAAA,WAEA,IAAAC,EAAAE,KAEAR,EAAA,YAAA,EAAAO,QAEAT,KAAAoL,qBAAA,WAEA5K,EAAA4L,aAAA,CAEA,CAAA,CAIA,EASAA,aAAA,WAEAlM,EAAA,yCAAA,EAAAmL,YAAA,EACAnL,EAAA,+CAAA,EAAAmL,YAAA,EACAnL,EAAA,+CAAA,EAAAmL,YAAA,CAEA,CAEA,EAWArL,KAAA0M,gBAAA,CAOAC,UAAA,KAOApM,KAAA,WAEAG,KAAAiM,UAAAzM,EAAA,oCAAA,EAEAQ,KAAAiM,UAAAlM,QAEAC,KAAAC,KAAA,CAIA,EAOAA,KAAA,WAEA,IAAAH,EAAAE,KAEAA,KAAAiM,UAAA9L,KAAA,WAEA,IAAA+L,EAAA1M,EAAAQ,IAAA,EACAmM,EAAAD,EAAA1K,KAAA,+BAAA,EAGA2K,EAAA9L,GAAA,QAAA,SAAA2H,GAEAA,EAAAC,eAAA,EAEA,IACAmE,EADA5M,EAAAQ,IAAA,EACA2H,QAAA,eAAA,EAGA,OAFA7H,EAAAuM,kBAAAD,CAAA,GAIA,IAAA,SACAtM,EAAAwM,aAAAF,CAAA,EACA,MAEA,IAAA,SACAtM,EAAAyM,cAAAH,CAAA,CAGA,CAEA,CAAA,EAGAF,EAAA1K,KAAA,uBAAA,EAAAnB,GAAA,QAAA,SAAA2H,GAEAA,EAAAC,eAAA,EAEA,IAEAuE,EAAA,UAFAhN,EAAAQ,IAAA,EACAQ,KAAA,aAAA,EACA,SAAA,SAEA2L,EAAAhM,KAAA,WAEA,IAAAiM,EAAA5M,EAAAQ,IAAA,EAAA2H,QAAA,eAAA,EACA8B,EAAA3J,EAAAuM,kBAAAD,CAAA,EAEA,GAAAI,IAAA/C,EACA,MAAA,CAAA,EAGA,OAAAA,GAEA,IAAA,SACA3J,EAAAyM,cAAAH,CAAA,EACA,MAEA,IAAA,SACAtM,EAAAwM,aAAAF,CAAA,CAGA,CAEA5M,EAAAQ,IAAA,EAAAsH,QAAA,OAAA,CAEA,CAAA,CAEA,CAAA,CAEA,CAAA,CAEA,EAQAiF,cAAA,SAAAH,GAEAA,EAAArE,YAAA,sBAAA,EAAAD,SAAA,sBAAA,CAEA,EAQAwE,aAAA,SAAAF,GAEAA,EAAArE,YAAA,sBAAA,EAAAD,SAAA,sBAAA,CAEA,EAQAuE,kBAAA,SAAAD,GAEA,OAAAA,EAAApH,SAAA,sBAAA,EAAA,SAAA,QAEA,CAEA,EAWAxF,EAAAgF,OAAAlF,KAAAmN,iBAAA,CAOAC,OAAAlN,EAAA,+BAAA,EAOAmN,MAAA,KAOAC,MAAA,KAOAC,MAAA,KAaAhN,KAAA,WAEA,IAQAC,EARAN,EAAA,MAAA,EAAAwF,SAAA,UAAA,GAIAhF,KAAA8M,iBAAA,IAIAhN,EAAAE,KAEAV,KAAAuH,SAAA,WACA,MAAA,aAAA,OAAAkG,IAAA,KAAA,IAAAA,GAAAC,gBACA,EAAA,WACAlN,EAAAG,KAAA,EACAH,EAAA+M,MAAAvF,QAAA,8BAAA,CACA,CAAA,EAEA,EASArH,KAAA,WAEA,IAAAH,EAAAE,KAGAA,KAAA6M,MAAA7H,SAAA,eAAA,GACAlF,EAAA+M,MAAAxM,GAAA,SAAAP,EAAAA,EAAAmN,MAAA,EAIAnN,EAAA6M,MAAAzF,IAAApH,EAAA8M,KAAA,EAAAvM,GAAA,QAAA,WACAP,EAAAoN,eAAA,CACA,CAAA,CAEA,EAWAA,eAAA,WAEA,IAAAC,EAAAnN,KAAA2M,MAAAhF,QAAA,kBAAA,EACAyF,EAAApN,KAAA4M,OAAA5M,KAAA4M,MAAA7M,OAAAC,KAAA4M,MAAAjF,QAAA,kBAAA,EAAA,KACA0F,EAAArN,KAAA2M,MAAA1I,IAAA,EAAAlE,OACAuN,EAAAtN,KAAA4M,OAAA5M,KAAA4M,MAAA7M,OAAAC,KAAA4M,MAAA3I,IAAA,EAAAlE,OAAA,EAGAsN,GAAAC,GASAtN,KAAAuN,4BAAA,GACAJ,EAAApF,YAAA,SAAA,EAAAD,SAAA,OAAA,EACAwF,GACAF,EAAArF,YAAA,SAAA,EAAAD,SAAA,OAAA,IAGAqF,EAAApF,YAAA,OAAA,EAAAD,SAAA,SAAA,EACAwF,GACAF,EAAArF,YAAA,OAAA,EAAAD,SAAA,SAAA,GAIA9H,KAAA0M,OAAA3E,YAAA,iDAAA,EACA/H,KAAA0M,OAAAlC,KAAA,EAAA1C,SAAA9H,KAAAwN,qBAAA,MAAA,CAAA,EACAxN,KAAA0M,OAAAjL,KAAAzB,KAAAwN,qBAAA,MAAA,CAAA,IAtBAL,EAAApF,YAAA,eAAA,EACAqF,GACAA,EAAArF,YAAA,eAAA,EAEA/H,KAAA0M,OAAAtC,KAAA,EAoBA,EAWAqD,SAAA,SAAA3N,EAAA4N,GAEA5N,EAAAyN,4BAAA,EAEAG,EAAA,CAAA,CAAA,EAIAA,EAAApO,KAAAsL,KAAAC,UAAA,8CAAA,CAAA,CAGA,EASA8C,cAAA,WAGA,IAAAC,EAAAb,GAAAC,iBAAAa,wBAAA,EAAAC,OAAA9N,KAAA+N,YAAA,YAAA,EAAA,CAAA,EAUA,OAPA/N,KAAA6M,MAAArL,KAAA,kFAAA,EAAArB,KAAA,WACA,IAAA8D,EAAAzE,EAAAQ,IAAA,EAAAiE,IAAA,EACAA,GACA2J,EAAAI,KAAA/J,CAAA,CAEA,CAAA,EAEA2J,CAEA,EAWAJ,qBAAA,SAAAS,GAEAA,EAAAA,GAAA,MACA,IAEAhK,EAFAiK,EAAAlO,KAAA2M,MAAA1I,IAAA,EACAkK,EAAAnO,KAAA4M,OAAA5M,KAAA4M,MAAA7M,OAAAC,KAAA4M,MAAA3I,IAAA,EAAA,GAcA,OAVAiK,EAAAnO,OAAAC,KAAA+N,YAAA,aAAA,CAAA,EACA9J,EAAA,CAAA,EAIA,KAFAA,EAAA8I,GAAAC,iBAAAoB,MAAAF,EAAAlO,KAAA2N,cAAA,EAAAQ,CAAA,KAGAlK,EAAA,GAIA,SAAAgK,EACAjO,KAAAqO,kBAAApK,CAAA,EACA,SAAAgK,EACAjO,KAAAsO,kBAAArK,CAAA,EAEAA,CAEA,EAUAsJ,4BAAA,WACA,IAAAgB,EAAAvO,KAAAwN,qBAAA,EACAgB,EAAAxO,KAAAyO,mBAAAzO,KAAA0O,qBAAA,CAAA,EACA,OAAA,IAAAH,GAAAC,GAAAD,CACA,EAUAG,qBAAA,WACA,OAAA1O,KAAA+N,YAAA,eAAA,QAAA,CACA,EAWAA,YAAA,SAAAY,EAAAC,GACA,IAAAzK,EAAAnE,KAAA6O,aAAA,EACA,OAAA1K,EAAAwK,IAAAC,CACA,EAUAP,kBAAA,SAAAS,GAEA,IAAAC,EAAA,CACAC,KAAA,YACAC,EAAA,YACAC,EAAA,OACAC,EAAA,SACAC,EAAA,SACAC,EAAA,UACA,EAEA,OAAAN,EAAAD,IAAAC,EAAA,EAEA,EAUAT,kBAAA,SAAAQ,GAEA,IAAAQ,EAAA,CACAN,KAAA1P,KAAAsL,KAAAC,UAAA,WAAA,EACAoE,EAAA3P,KAAAsL,KAAAC,UAAA,WAAA,EACAqE,EAAA5P,KAAAsL,KAAAC,UAAA,MAAA,EACAsE,EAAA7P,KAAAsL,KAAAC,UAAA,QAAA,EACAuE,EAAA9P,KAAAsL,KAAAC,UAAA,QAAA,EACAwE,EAAA/P,KAAAsL,KAAAC,UAAA,UAAA,CACA,EAEA,OAAAyE,EAAAR,IAAAQ,EAAA,EAEA,EAUAb,mBAAA,SAAAc,GAEA,IAAAC,EAAA,CACAC,YAAA,CAAA,EACAC,YAAA,EACAC,KAAA,EACAC,OAAA,EACAC,OAAA,EACAC,SAAA,CACA,EAEA,OAAAN,EAAAD,IAAAC,EAAAM,QAEA,EASAhD,iBAAA,WAEA,MAAA9M,CAAAA,CAAAA,KAAA0M,OAAA3M,SAIAC,KAAA6M,MAAA7M,KAAA0M,OAAA/E,QAAA,MAAA,EACA3H,KAAA2M,MAAA3M,KAAA6M,MAAArL,KAAA,gBAAA,EAEAxB,KAAA2M,MAAA5M,QAAAC,KAAA2M,MAAAnM,KAAA,YAAA,IACAR,KAAA4M,MAAA5M,KAAA6M,MAAArL,KAAA,IAAAxB,KAAA2M,MAAAnM,KAAA,YAAA,CAAA,GAGA,EAAAR,KAAA2M,MAAA5M,OAEA,EAWAkN,OAAA,SAAAjF,GAEA,IAAAlI,EAAAkI,EAAA9E,KACA8E,EAAAC,eAAA,EACAnI,EAAA6M,MAAArF,QAAA,OAAA,EAGAxH,EAAAyN,4BAAA,GAAAzN,EAAA+M,MAAA7H,SAAA,cAAA,GAAA,aAAAlF,EAAA6M,MAAAnM,KAAA,UAAA,GACAV,EAAA+M,MAAAkD,IAAA,SAAAjQ,EAAAmN,MAAA,EACAnN,EAAA+M,MAAAvF,QAAA,QAAA,IAEA9H,EAAA,YAAA,EAAA8F,QAAA,CACA0K,UAAAlQ,EAAA4M,OAAAuD,OAAA,EAAAC,IAAA,GACA,EAAA,GAAA,EACApQ,EAAA4M,OAAAtC,KAAA,EACA0B,WAAA,WACAhM,EAAA4M,OAAAyD,OAAA,GAAA,CACA,EAAA,GAAA,EAEA,EAUAC,cAAA,WAEA,OADAC,QAAAC,IAAA,uEAAA,EACAtQ,KAAAoQ,cAAA,CACA,CAEA,CAAA,EAWA9Q,KAAAiR,eAAA,CAKA1Q,KAAA,WAEA,IAAAC,EAAAE,KAEAR,EAAA,MAAA,EAAAwF,SAAA,UAAA,GAIAxF,EAAA,oBAAA,EAAAO,SAEAT,KAAAoL,qBAAA,WACA5K,EAAAG,KAAA,CACA,CAAA,EAEAD,KAAAyL,QAAAjM,EAAA,6BAAA,EAEAQ,KAAAyL,QAAA1L,QAEAT,KAAAkR,iBAAA,WACA1Q,EAAA2Q,YAAA,CACA,CAAA,EAMA,EAQAxQ,KAAA,WAEAT,EAAA,2BAAA,EAAAmL,YAAA,EACAnL,EAAA,iCAAA,EAAAmL,YAAA,CAEA,EASA8F,YAAA,WAEAzQ,KAAAyL,QAAAtL,KAAA,WAEAX,EAAAQ,IAAA,EAAA0Q,aAAA,CACAC,UAAA,MACAC,UAAA,CAAA,EACAC,QAAA,SAAA7I,GACA,IAAA8I,EAAAtR,EAAA,gDAAA,EAEA,OADAsR,EAAAlQ,OAAAoH,EAAA+I,SAAApJ,QAAA,mBAAA,EAAAnG,KAAA,mCAAA,EAAA+G,MAAA,CAAA,EACAuI,CACA,EACAE,UAAA,MACAC,MAAA,UACAlP,MAAAzC,KAAAsL,KAAAC,UAAA,sBAAA,EACAzJ,MAAA,OACA,CAAA,CAEA,CAAA,CAEA,CAEA,EAWA9B,KAAA4R,aAAA,CAMArR,KAAA,WAEAL,EAAA,oDAAA,EAAAa,GAAA,QAAA,SAAA2H,GAEAA,EAAAC,eAAA,EAEAkJ,EAAA3R,EAAAQ,IAAA,EAAA2H,QAAA,QAAA,EAAA2C,KAAA,kCAAA,EAEA9K,EAAAQ,IAAA,EAAA2H,QAAA,IAAA,EAAAyJ,SAAA,EAAA5P,KAAA,kCAAA,EAAA6P,QAAA,GAAA,EAEAF,EAAAG,GAAA,UAAA,EACAH,EAAAE,QAAA,GAAA,EAEAF,EAAAI,UAAA,GAAA,CAGA,CAAA,CACA,CAEA,EAWAjS,KAAAkS,OAAA,CAKA3R,KAAA,WAEAG,KAAAC,KAAA,CACA,EAKAA,KAAA,WACAT,EAAA,4BAAA,EAAAoD,MAAA,WAEA,KAAApD,EAAA,eAAA,EAAAyE,IAAA,GAAA,KAAAzE,EAAA,cAAA,EAAAyE,IAAA,EACAwN,OAAApN,KAAA,CACApB,KAAA,OACAG,SAAA,OACAN,IAAAvD,OAAAyD,KAAAD,QACAG,KAAA,CACAwO,OAAA,mBACAC,aAAAnS,EAAA,eAAA,EAAAyE,IAAA,EACA2N,YAAApS,EAAA,cAAA,EAAAyE,IAAA,EACA4N,OAAArS,EAAA,UAAA,EAAAyE,IAAA,EACA6N,kBAAAtS,EAAA,oBAAA,EAAAyE,IAAA,CACA,EACA8N,QAAA,WAEA1B,QAAAC,IAAA,gBAAA,EACA9Q,EAAA,aAAA,EAAA4K,KAAA,OAAA,EACA5K,EAAA,gBAAA,EAAAgL,KAAA,OAAA,CACA,EACAwH,MAAA,SAAAC,EAAAC,EAAAC,GAEA9B,QAAAC,IAAA2B,CAAA,EACA5B,QAAAC,IAAA4B,CAAA,EACA7B,QAAAC,IAAA6B,CAAA,CACA,CACA,CAAA,GAEA,KAAA3S,EAAA,eAAA,EAAAyE,IAAA,EACAzE,EAAA,qBAAA,EAAAgL,KAAA,OAAA,EAEAhL,EAAA,qBAAA,EAAA4K,KAAA,OAAA,EAEA,KAAA5K,EAAA,cAAA,EAAAyE,IAAA,EACAzE,EAAA,oBAAA,EAAAgL,KAAA,OAAA,EAEAhL,EAAA,oBAAA,EAAA4K,KAAA,OAAA,EAGA,CAAA,EACA5K,EAAA,wBAAA,EAAAgB,KAAA,SAAA,GACAhB,EAAA,uBAAA,EAAAsI,SAAA,KAAA,EACAtI,EAAA,0BAAA,EAAAgL,KAAA,GAGAhL,EAAA,0BAAA,EAAA4K,KAAA,EAEA5K,EAAA,wBAAA,EAAA4S,OAAA,WACA5S,EAAA,wBAAA,EAAAgB,KAAA,SAAA,GACAhB,EAAA,uBAAA,EAAAsI,SAAA,KAAA,EACAtI,EAAA,0BAAA,EAAAgL,KAAA,IAEAhL,EAAA,uBAAA,EAAAuI,YAAA,KAAA,EACAvI,EAAA,0BAAA,EAAA4K,KAAA,EAEA,CAAA,CAEA,CACA,EAWA3K,EAkBA,WACA,SAAA+E,IAGA,IAFA,IAAAS,EAAA,EACAoN,EAAA,GACApN,EAAAqN,UAAAvS,OAAAkF,CAAA,GAAA,CACA,IACA0J,EADA4D,EAAAD,UAAArN,GACA,IAAA0J,KAAA4D,EACAF,EAAA1D,GAAA4D,EAAA5D,EAEA,CACA,OAAA0D,CACA,CAEA,SAAAG,EAAAC,GACA,OAAAA,EAAAzH,QAAA,mBAAA0H,kBAAA,CACA,CAyHA,OAvHA,SAAA7S,EAAA8S,GACA,SAAAhT,KAEA,SAAAiT,EAAAjE,EAAAvD,EAAAmH,GACA,GAAA,aAAA,OAAAzQ,SAAA,CAQA,UAAA,OAJAyQ,EAAA/N,EAAA,CACAqO,KAAA,GACA,EAAAlT,EAAAmT,SAAAP,CAAA,GAEAQ,UACAR,EAAAQ,QAAA,IAAAC,KAAA,CAAA,IAAAA,KAAA,MAAAT,EAAAQ,OAAA,GAIAR,EAAAQ,QAAAR,EAAAQ,QAAAR,EAAAQ,QAAAE,YAAA,EAAA,GAEA,IACA,IAAAZ,EAAAlL,KAAA+L,UAAA9H,CAAA,EACA,UAAA+H,KAAAd,CAAA,IACAjH,EAAAiH,EAEA,CAAA,MAAArK,IAEAoD,EAAAuH,EAAAS,MACAT,EAAAS,MAAAhI,EAAAuD,CAAA,EACA0E,mBAAAC,OAAAlI,CAAA,CAAA,EACAJ,QAAA,4DAAA0H,kBAAA,EAEA/D,EAAA0E,mBAAAC,OAAA3E,CAAA,CAAA,EACA3D,QAAA,2BAAA0H,kBAAA,EACA1H,QAAA,UAAAuI,MAAA,EAEA,IACAC,EADAC,EAAA,GACA,IAAAD,KAAAjB,EACAA,EAAAiB,KAGAC,GAAA,KAAAD,EACA,CAAA,IAAAjB,EAAAiB,KAWAC,GAAA,IAAAlB,EAAAiB,GAAAnR,MAAA,GAAA,EAAA,KAGA,OAAAP,SAAA4R,OAAA/E,EAAA,IAAAvD,EAAAqI,CAjDA,CAkDA,CAEA,SAAAE,EAAAhF,EAAAiF,GACA,GAAA,aAAA,OAAA9R,SAAA,CAUA,IANA,IAAA+R,EAAA,GAGAC,EAAAhS,SAAA4R,OAAA5R,SAAA4R,OAAArR,MAAA,IAAA,EAAA,GACA4C,EAAA,EAEAA,EAAA6O,EAAA/T,OAAAkF,CAAA,GAAA,CACA,IAAA8O,EAAAD,EAAA7O,GAAA5C,MAAA,GAAA,EACAqR,EAAAK,EAAAC,MAAA,CAAA,EAAArR,KAAA,GAAA,EAEAiR,GAAA,MAAAF,EAAAO,OAAA,CAAA,IACAP,EAAAA,EAAAM,MAAA,EAAA,CAAA,CAAA,GAGA,IACA,IAAA/J,EAAAuI,EAAAuB,EAAA,EAAA,EACAL,GAAAf,EAAAuB,MAAAvB,GAAAe,EAAAzJ,CAAA,GACAuI,EAAAkB,CAAA,EAEA,GAAAE,EACA,IACAF,EAAAvM,KAAAC,MAAAsM,CAAA,CACA,CAAA,MAAA1L,IAKA,GAFA6L,EAAA5J,GAAAyJ,EAEA/E,IAAA1E,EACA,KAEA,CAAA,MAAAjC,IACA,CAEA,OAAA2G,EAAAkF,EAAAlF,GAAAkF,CAnCA,CAoCA,CAmBA,OAjBAlU,EAAAiT,IAAAA,EACAjT,EAAAgU,IAAA,SAAAhF,GACA,OAAAgF,EAAAhF,EAAA,CAAA,CAAA,CACA,EACAhP,EAAAwU,QAAA,SAAAxF,GACA,OAAAgF,EAAAhF,EAAA,CAAA,CAAA,CACA,EACAhP,EAAA6I,OAAA,SAAAmG,EAAA4D,GACAK,EAAAjE,EAAA,GAAAnK,EAAA+N,EAAA,CACAQ,QAAA,CAAA,CACA,CAAA,CAAA,CACA,EAEApT,EAAAmT,SAAA,GAEAnT,EAAAyU,cAAAvU,EAEAF,CACA,EAEA,YAAA,CACA,EAzJA,YAAA,OAAA0U,QAAAA,OAAAC,MACAD,OAAA5U,CAAA,EACA8U,EAAA,CAAA,GAEA,UAAA,OAAAC,UACAC,OAAAD,QAAA/U,EAAA,EACA8U,EAAA,CAAA,GAEAA,IACA7U,EAAAH,OAAAmV,SACA/U,EAAAJ,OAAAmV,QAAAjV,EAAA,GACAkV,WAAA,WAEA,OADApV,OAAAmV,QAAAhV,EACAC,CACA,GAkJAL,KAAAsV,YAAAF,QAAAC,WAAA,EAWArV,KAAAuV,QAAA,SAAA/T,GAEA,IAAAhB,EAAAE,KACA8U,EAAAxV,KAAAsV,YASA5U,KAAA+U,SAAA,WACAD,EAAAtM,OAAA1H,CAAA,CACA,EASAd,KAAAgV,MAAA,SAAArG,GACA,IAAAzL,EAAApD,EAAAmV,OAAA,EAEA,OADA,OAAA/R,EAAAyL,GACAmG,EAAAlC,IAAA9R,EAAAoC,CAAA,CACA,EASAlD,KAAAiV,OAAA,WACA,OAAAH,EAAAX,QAAArT,CAAA,GAAA,EACA,EAWAd,KAAA2T,IAAA,SAAAhF,EAAAC,GACA,IAAA1L,EAAApD,EAAAmV,OAAA,EACA,OAAA/R,EAAAyL,IAAAC,CACA,EAYA5O,KAAA4S,IAAA,SAAAjE,EAAA1K,GACA,IAAAf,EAAApD,EAAAmV,OAAA,EAEA,OADA/R,EAAAyL,GAAA1K,EACA6Q,EAAAlC,IAAA9R,EAAAoC,EAAA,CAAAgS,SAAA,QAAA,CAAA,CACA,CAEA,EAYA5V,KAAA6V,iBAAA,CAOAC,OAAA,GAWAvV,KAAA,WAEAL,EAAA,yBAAA,EAAAO,SACAC,KAAAC,KAAA,EACA,WAAAD,KAAAqV,WAAA,GACArV,KAAAsV,YAAA,EAIA,EAWArV,KAAA,WAEAT,EAAA,aAAA,EAAAW,KAAA,WACAb,KAAAgF,MAAA9E,EAAAQ,IAAA,CAAA,CACA,CAAA,CAEA,EASAsV,YAAA,WAEA9V,EAAA,gCAAA,EAAAa,GAAA,SAAAL,KAAAuV,oBAAA,EACA/V,EAAA,6BAAA,EAAAa,GAAA,QAAA,WACAb,EAAA,4CAAA,EAAA8H,QAAA,QAAA,EACA9H,EAAAQ,IAAA,EAAA2H,QAAA,MAAA,EAAAnG,KAAA,kCAAA,EAAAgU,YAAA,KAAA,CACA,CAAA,CAEA,EASAH,WAAA,WAIA,OAHArV,KAAAoV,SACApV,KAAAoV,OAAA5V,EAAA,yBAAA,EAAAgB,KAAA,cAAA,GAEAR,KAAAoV,MACA,EAUAG,qBAAA,SAAAvN,GACAA,EAAAC,eAAA,EACA0D,EAAArM,KAAAsL,KAAAC,UAAA,oDAAA,EACAtL,OAAAkW,QAAAnW,KAAAsL,KAAAC,UAAAc,CAAA,CAAA,IACAnM,EAAAQ,IAAA,EAAA+P,IAAA,SAAA/P,KAAAuV,oBAAA,EACA/V,EAAAQ,IAAA,EAAAiN,OAAA,EAEA,CAEA,EAeA3N,KAAAoW,SAAA,SAAAvR,GAEAA,EAAAA,GAAA,GAEA,IAAArE,EAAAE,KACA8U,EAAA,IAAAxV,KAAAuV,QAAA,eAAA,EA8IA,SAAAc,EAAA3N,GACAlG,SAAA8T,oBAAA,mBAAAC,CAAA,CACA,CAUA,SAAAC,EAAA9N,GACAlI,EAAAiW,SAAA,WAAA,CACA,CAUA,SAAAF,EAAA7N,GAEA,IAAAW,EAAA7G,SAAAkU,OAAA,YAAA,aACAlW,EAAAiW,SAAApN,CAAA,CAEA,CAzKAxE,EAAA,UAAA,OAAAA,EAAAgD,KAAAC,MAAAjD,CAAA,EAAAA,EAoCAnE,KAAA+V,SAAA,SAAApN,EAAAsN,GAEAA,EAAAA,GAAA,GACA,UAAA,OAAAtN,IACAsN,EAAAtN,MAAAA,GAIAxE,EAAA+R,QAAA,CAAA,IAAA/R,EAAA+R,OAAA7K,QAAA4K,EAAAtN,KAAA,IAKAxE,EAAAR,OACAmR,EAAAlC,IAAA,QAAAzO,EAAAR,KAAA,EAGAgF,EAAA7I,EAAAqW,aAAAF,CAAA,GAEAG,EAAAtB,EAAAnB,IAAA,SAAA,EAAA,GACA3F,KAAArF,CAAA,EACAmM,EAAAlC,IAAA,SAAAwD,CAAA,EAGAA,EAAArW,OAAA+U,EAAAnB,IAAA,SAAA,EAAA,EAAA5T,SAGAsW,EAAAvB,EAAAG,OAAA,EAEAH,EAAAE,MAAA,QAAA,EAGAqB,EAAA,OAAArI,KAAArF,CAAA,EAGArJ,KAAAuD,KAAAqB,KAAA,CACAhB,KAAA,CACAwO,OAAA,0BACA4E,gBAAAnP,KAAA+L,UAAAmD,CAAA,CACA,EAEArE,MAAA,SAAAuE,EAAAC,EAAAxE,GAEA3B,QAAAC,IAAAiG,EAAAC,EAAAxE,CAAA,CAEA,EACAD,QAAA,SAAA0E,GAEA,UAAAA,EAAAC,MACArG,QAAAC,IAAAmG,EAAAC,KAAAD,EAAAE,OAAA,CAGA,CAEA,CAAA,GAIA,EASA3W,KAAA4W,YAAA,WACA,OAAAzS,CACA,EAmBAnE,KAAAmW,aAAA,SAAAxN,GACA,OAAAnJ,EAAAgF,OAAAmE,EAAA,CACA7F,IAAAvD,OAAAyC,SAAA6U,KACAC,KAAA5R,KAAAC,OAAA,IAAA6N,MAAA+D,QAAA,EAAA,GAAA,CACA,CAAA,CACA,EA2CAvX,EAAA,MAAA,EAAAwF,SAAA,UAAA,IA9JAlF,EAAAiW,SAAA,WAAA,EAEAxW,OAAAyX,iBAAA,eAAArB,CAAA,EACApW,OAAAyX,iBAAA,SAAAlB,CAAA,EAEAhU,SAAAkV,iBAAA,mBAAAnB,CAAA,EA6JA,EAEA7S,KAAAiU,SAAA,IAAA3X,KAAAoW,SAAA1S,KAAAiU,QAAA,EAYA3X,KAAAuE,KAAA,CAMAhE,KAAA,WACAG,KAAAC,KAAA,CACA,EAQAA,KAAA,aASAiX,QAAA,SAAAnM,GAKA,IAHA,IAAAoM,EAAA,CAAA,EACArU,EAAAvD,OAAAyC,SAAA6U,KAEA5R,EAAA,EAAAA,EAAA8F,EAAAhL,OAAAkF,CAAA,GAEA,EAAAnC,EAAAZ,OAAA6I,EAAA9F,EAAA,GAAA,CAAAkS,IAEAA,EAAA,CAAA,GAIA,OAAAA,CACA,EAOArT,eAAA,WAKA,IAHA,IAAA1B,EAAAgV,EAAA,GACAC,EAAA9X,OAAAyC,SAAA6U,KAAA7C,MAAAzU,OAAAyC,SAAA6U,KAAAxL,QAAA,GAAA,EAAA,CAAA,EAAAhJ,MAAA,GAAA,EAEA4C,EAAA,EAAAA,EAAAoS,EAAAtX,OAAAkF,CAAA,GACA7C,EAAAiV,EAAApS,GAAA5C,MAAA,GAAA,EACA+U,EAAApJ,KAAA5L,EAAA,EAAA,EACAgV,EAAAhV,EAAA,IAAAA,EAAA,GAGA,OAAAgV,CACA,CAEA,EAGA,CAAA,IAAAE,EAAA,CAAA7R,EAAA,CAAA8R,EAAAvP,KAAA,IAAA,IAAAyO,KAAAzO,EAAAsP,EAAAE,EAAAxP,EAAAyO,CAAA,GAAA,CAAAa,EAAAE,EAAAD,EAAAd,CAAA,GAAAgB,OAAAC,eAAAH,EAAAd,EAAA,CAAAkB,WAAA,CAAA,EAAAhE,IAAA3L,EAAAyO,EAAA,CAAA,CAAA,EAAAe,EAAA,CAAAF,EAAAC,IAAAE,OAAAG,UAAAC,eAAA3T,KAAAoT,EAAAC,CAAA,EAAAd,EAAAa,IAAA,aAAA,OAAAQ,QAAAA,OAAAC,aAAAN,OAAAC,eAAAJ,EAAAQ,OAAAC,YAAA,CAAA3M,MAAA,QAAA,CAAA,EAAAqM,OAAAC,eAAAJ,EAAA,aAAA,CAAAlM,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAAmM,EAAA,GAAAD,EAAAb,EAAAc,CAAA,EAAAD,EAAA7R,EAAA8R,EAAA,CAAA5D,IAAA,IAAAlO,EAAAuS,MAAA,IAAA,SAAAV,GAAAnV,IAAAoV,EAAA,EAAAjF,UAAAvS,QAAA,KAAA,IAAAuS,UAAA,GAAAA,UAAA,GAAAmE,EAAAwB,EAAAX,CAAA,EAAAY,QAAAZ,IAAAtP,EAAAvC,EAAA6R,EAAAC,EAAA,CAAA,CAAA,EAAAvP,IAAAA,EAAAiJ,MAAAkH,QAAA,QAAA,CAAA,CAAA,EAAAC,KAAA,IAAA,SAAAd,GAAAW,EAAAX,CAAA,EAAAY,QAAAZ,IAAAC,EAAA9R,EAAA6R,EAAAb,EAAA,CAAA,CAAA,EAAAc,IAAAA,EAAAtG,MAAAkH,QAAA,OAAA,CAAA,CAAA,CAAA,CAAA,EAAA,MAAAnQ,EAAA,gBAAAyO,EAAA,UAAAe,EAAAjY,OAAAwN,GAAAsL,KAAA,SAAAJ,EAAAX,GAAA,IAAAA,EAAA,UAAA,OAAAA,EAAAxV,SAAAwW,iBAAAhB,CAAA,EAAAA,aAAAiB,SAAA,OAAAC,MAAAC,KAAAnB,CAAA,EAAA,MAAAC,EAAA,GAAA,OAAAD,aAAAoB,QAAAnB,EAAAvJ,KAAAsJ,CAAA,EAAA,aAAA,OAAA7F,QAAA6F,aAAA7F,QAAA6F,EAAAqB,QAAA,EAAAT,QAAAZ,GAAAC,EAAAvJ,KAAAsJ,CAAA,CAAA,EAAAC,CAAA,CAAA,SAAA9R,EAAA6R,GAAAnV,IAAAsD,EAAA6R,EAAAC,EAAA,EAAAjF,UAAAvS,QAAA,KAAA,IAAAuS,UAAA,GAAAA,UAAA,GAAAmE,EAAAzO,EAAA,EAAA,EAAAsK,UAAAvS,QAAA,KAAA,IAAAuS,UAAA,KAAAA,UAAA,GAAAkF,GAAAF,EAAA,sBAAAxV,SAAA8W,eAAAtB,CAAA,KAAAC,EAAAzV,SAAA+W,cAAA,OAAA,GAAAC,YAAA,8zBAAA9N,QAAA,MAAA,EAAA,EAAAA,QAAA,MAAA,GAAA,EAAAA,QAAA,SAAA,GAAA,EAAAuM,EAAAhX,GAAA+W,EAAAxV,SAAAiX,KAAAC,YAAAzB,CAAA,GAAAU,EAAAX,CAAA,GAAA,OAAAE,EAAAzX,QAAA0F,EAAA+R,EAAA,GAAAyB,IAAA1B,GAAAD,EAAA7R,GAAA6S,iBAAA,gBAAA,GAAAvY,OAAAyY,MAAAC,KAAAlB,CAAA,EAAA/V,KAAA+V,GAAAD,IAAAC,EAAA2B,UAAA,EAAA,OAAA,SAAA5B,EAAA,GAAAnV,IAAAoV,EAAA,EAAAjF,UAAAvS,QAAA,KAAA,IAAA,EAAA,EAAA0W,EAAAxR,EAAAnD,SAAA+W,cAAA,KAAA,EAAAZ,GAAA,EAAAT,EAAA2B,IAAA,WAAA,WAAA,EAAA,OAAAlU,EAAAmU,oCAAA7B,0EAAAU,eAAAhT,EAAAoU,UAAAnS,IAAAc,CAAA,EAAAsP,EAAA0B,YAAA/T,CAAA,EAAAA,CAAA,EAAAQ,EAAA8R,CAAA,EAAAvP,GAAA,aAAA,OAAAyJ,OAAAA,OAAAwH,CAAA,EAAAA,GAAA,IAAA,CAAA1Z,OAAAD,KAAAC,OAAAD,MAAA,GAAAC,OAAAD,KAAAga,QAAA/B,CAAA,CASAjY,KAAAO,KAAA,WAEA,IAAA,IAAA0Z,KAAAja,KAEA,UAAA,OAAAA,KAAAia,IAAA,OAAAja,KAAAia,IAEAzS,KAAAA,IAAAxH,KAAAia,GAAA1Z,MAEA,YAAA,OAAAP,KAAAia,GAAA1Z,MACAP,KAAAia,GAAA1Z,KAAA,CASA,EAWAP,KAAAka,gBAAA,WAEA,IAAAC,EAAA,4BAAApX,MAAA,GAAA,EAKA,MAAA,CAAA,EAAA,iBAAA9C,QAAAA,OAAAma,eAAA5X,oBAAA4X,iBASAC,EAAA,CAAA,IAAAF,EAAA9W,KAAA,kBAAA,EAAA,SAAA,KAAAA,KAAA,EAAA,EAZApD,OAAAqa,WAaAD,CAbA,EAAAE,QAeA,EAYAva,KAAAoL,qBAAA,SAAAoP,GACA9Z,KAAA6G,SAAA,WACA,OAAAC,KAAAA,IAAAtH,EAAAuH,GAAA4D,WACA,EAAAmP,EAAA,aAAA,CACA,EAWAxa,KAAAkR,iBAAA,SAAAsJ,GACA9Z,KAAA6G,SAAA,WACA,OAAAC,KAAAA,IAAAtH,EAAAuH,GAAA2J,YACA,EAAAoJ,EAAA,cAAA,CACA,EAeAxa,KAAAuH,SAAA,SAAAsM,EAAA2G,EAAA7P,GAEA,IACA8P,EADAC,EAAA,EAGA/P,EAAAA,GAAA,UAEA8P,EAAAvU,YAAA,WAGA,GAAA,KAAAwU,EAEA3J,QAAAC,IAAA,8BAAArG,CAAA,MAGA,CAGA,GAAAkJ,CAAAA,EAAA,EAKA,OADA6G,KAAAA,CAAA,GAHAF,EAAA,CAOA,CAEA9T,cAAA+T,CAAA,CAEA,EAAA,GAAA,CAEA,EAEAza,KAAAO,KAAAL,CAAA,CAEA,EAAAiS,MAAA","file":"../../js/llms.min.js","sourcesContent":["/**\n * Main LLMS Namespace\n *\n * @since 1.0.0\n * @version 5.3.3\n */\n\nvar LLMS = window.LLMS || {};\n( function( $ ){\n\n\t'use strict';\n\n\t/**\n\t * Load all app modules\n\t */\n\t/**\n\t * Front End Achievements\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.14.0\n\t * @version 6.10.2\n\t */\n\t\n\tLLMS.Achievements = {\n\t\n\t\t/**\n\t\t * Init\n\t\t *\n\t\t * @since 3.14.0\n\t\t * @since 4.5.1 Fix conditional loading check.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( '.llms-achievement' ).length ) {\n\t\n\t\t\t\tvar self = this;\n\t\n\t\t\t\t$( function() {\n\t\t\t\t\tself.bind();\n\t\t\t\t\tself.maybe_open();\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @since 3.14.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\t$( '.llms-achievement' ).each( function() {\n\t\n\t\t\t\tself.create_modal( $( this ) );\n\t\n\t\t\t} );\n\t\n\t\t\t$( '.llms-achievement' ).on( 'click', function() {\n\t\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tid = 'achievement-' + $this.attr( 'data-id' ),\n\t\t\t\t\t$modal = $( '#' + id );\n\t\n\t\t\t\tif ( ! $modal.length ) {\n\t\t\t\t\tself.create_modal( $this );\n\t\t\t\t}\n\t\n\t\t\t\t$modal.iziModal( 'open' );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Creates modal a modal for an achievement\n\t\t *\n\t\t * @since 3.14.0\n\t\t *\n\t\t * @param obj $el The jQuery selector for the modal card.\n\t\t * @return {void}\n\t\t */\n\t\tcreate_modal: function( $el ) {\n\t\n\t\t\tvar id = 'achievement-' + $el.attr( 'data-id' ),\n\t\t\t\t$modal = $( '#' + id );\n\t\n\t\t\tif ( ! $modal.length ) {\n\t\t\t\t$modal = $( '
' );\n\t\t\t\t$( 'body' ).append( $modal );\n\t\t\t}\n\t\n\t\t\t$modal.iziModal( {\n\t\t\t\theaderColor: '#3a3a3a',\n\t\t\t\tgroup: 'achievements',\n\t\t\t\thistory: true,\n\t\t\t\tloop: true,\n\t\t\t\toverlayColor: 'rgba( 0, 0, 0, 0.6 )',\n\t\t\t\ttransitionIn: 'fadeInDown',\n\t\t\t\ttransitionOut: 'fadeOutDown',\n\t\t\t\twidth: 340,\n\t\t\t\tonOpening: function( modal ) {\n\t\n\t\t\t\t\tmodal.setTitle( $el.find( '.llms-achievement-title' ).html() );\n\t\t\t\t\tmodal.setSubtitle( $el.find( '.llms-achievement-date' ).html() );\n\t\t\t\t\tmodal.setContent( '' + $el.html() + '
' );\n\t\n\t\t\t\t},\n\t\n\t\t\t\tonClosing: function() {\n\t\t\t\t\twindow.history.pushState( '', document.title, window.location.pathname + window.location.search );\n\t\t\t\t},\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * On page load, opens a modal if the URL contains an achievement in the location hash\n\t\t *\n\t\t * @since 3.14.0\n\t\t * @since 6.10.2 Sanitize achievement IDs before using window.location.hash to trigger the modal open.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tmaybe_open: function() {\n\t\n\t\t\tlet hash = window.location.hash.split( '-' );\n\t\t\tif ( 2 !== hash.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\thash[1] = parseInt( hash[1] );\n\t\t\tif ( '#achievement-' !== hash[0] || ! Number.isInteger( hash[1] ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tconst a = document.querySelector( `a[href=\"${ hash.join( '-' ) }\"]` )\n\t\t\tif ( ! a ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\ta.click();\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Main Ajax class\n\t * Handles Primary Ajax connection\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Ajax = {\n\t\n\t\t/**\n\t\t * Url\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\turl: window.ajaxurl || window.llms.ajaxurl,\n\t\n\t\t/**\n\t\t * Type\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\ttype: 'post',\n\t\n\t\t/**\n\t\t * Data\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tdata: [],\n\t\n\t\t/**\n\t\t * Cache\n\t\t *\n\t\t * @type {[type]}\n\t\t */\n\t\tcache: false,\n\t\n\t\t/**\n\t\t * DataType\n\t\t * defaulted to json\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tdataType: 'json',\n\t\n\t\t/**\n\t\t * Async\n\t\t * default to false\n\t\t *\n\t\t * @type {Boolean}\n\t\t */\n\t\tasync: true,\n\t\n\t\tresponse:[],\n\t\n\t\t/**\n\t\t * Initialize Ajax methods\n\t\t *\n\t\t * @since Unknown\n\t\t * @since 4.4.0 Update ajax nonce source.\n\t\t *\n\t\t * @param {Object} obj Options object.\n\t\t * @return {Object}\n\t\t */\n\t\tinit: function( obj ) {\n\t\n\t\t\t// If obj is not of type object or null return false.\n\t\t\tif ( obj === null || typeof obj !== 'object' ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// set object defaults if values are not supplied\n\t\t\tobj.url = 'url' in obj ? obj.url : this.url;\n\t\t\tobj.type = 'type' \t\tin obj ? obj.type : this.type;\n\t\t\tobj.data = 'data' \t\tin obj ? obj.data : this.data;\n\t\t\tobj.cache = 'cache' \t\tin obj ? obj.cache : this.cache;\n\t\t\tobj.dataType = 'dataType'\tin obj ? obj.dataType : this.dataType;\n\t\t\tobj.async = 'async'\t\tin obj ? obj.async : this.async;\n\t\n\t\t\t// Add nonce to data object.\n\t\t\tobj.data._ajax_nonce = window.llms.ajax_nonce || wp_ajax_data.nonce;\n\t\n\t\t\t// Add post id to data object.\n\t\t\tvar $R = LLMS.Rest,\n\t\t\tquery_vars = $R.get_query_vars();\n\t\t\tobj.data.post_id = 'post' in query_vars ? query_vars.post : null;\n\t\t\tif ( ! obj.data.post_id && $( 'input#post_ID' ).length ) {\n\t\t\t\tobj.data.post_id = $( 'input#post_ID' ).val();\n\t\t\t}\n\t\n\t\t\treturn obj;\n\t\t},\n\t\n\t\t/**\n\t\t * Call\n\t\t * Called by external classes\n\t\t * Sets up jQuery Ajax object\n\t\t *\n\t\t * @param {[object]} [object of ajax settings]\n\t\t * @return {[mixed]} [false if not object or this]\n\t\t */\n\t\tcall: function(obj) {\n\t\n\t\t\t// get default variables if not included in call\n\t\t\tvar settings = this.init( obj );\n\t\n\t\t\t// if init return a response of false\n\t\t\tif ( ! settings) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tthis.request( settings );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Calls jQuery Ajax on settings object\n\t\t *\n\t\t * @return {[object]} [this]\n\t\t */\n\t\trequest: function(settings) {\n\t\n\t\t\t$.ajax( settings );\n\t\n\t\t\treturn this;\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Create a Donut Chart\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.9.0\n\t * @version 4.15.0\n\t *\n\t * @link https://gist.github.com/joeyinbox/8205962\n\t *\n\t * @param {Object} $el jQuery element to draw a chart within.\n\t */\n\t\n\tLLMS.Donut = function( $el ) {\n\t\n\t\t/**\n\t\t * Constructor\n\t\t *\n\t\t * @since 3.9.0\n\t\t * @since 4.15.0 Flip animation in RTL.\n\t\t *\n\t\t * @param {Object} options Donut options.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction Donut(options) {\n\t\n\t\t\tthis.settings = $.extend( {\n\t\t\t\telement: options.element,\n\t\t\t\tpercent: 100\n\t\t\t}, options );\n\t\n\t\t\tthis.circle = this.settings.element.find( 'path' );\n\t\t\tthis.settings.stroke_width = parseInt( this.circle.css( 'stroke-width' ) );\n\t\t\tthis.radius = ( parseInt( this.settings.element.css( 'width' ) ) - this.settings.stroke_width ) / 2;\n\t\t\tthis.angle = $( 'body' ).hasClass( 'rtl' ) ? 82.5 : 97.5; // Origin of the draw at the top of the circle\n\t\t\tthis.i = Math.round( 0.75 * this.settings.percent );\n\t\t\tthis.first = true;\n\t\t\tthis.increment = $( 'body' ).hasClass( 'rtl' ) ? -5 : 5;\n\t\n\t\t\tthis.animate = function() {\n\t\t\t\tthis.timer = setInterval( this.loop.bind( this ), 10 );\n\t\t\t};\n\t\n\t\t\tthis.loop = function() {\n\t\t\t\tthis.angle += this.increment;\n\t\t\t\tthis.angle %= 360;\n\t\t\t\tvar radians = ( this.angle / 180 ) * Math.PI,\n\t\t\t\t\tx = this.radius + this.settings.stroke_width / 2 + Math.cos( radians ) * this.radius,\n\t\t\t\t\ty = this.radius + this.settings.stroke_width / 2 + Math.sin( radians ) * this.radius,\n\t\t\t\t\td;\n\t\t\t\tif (this.first === true) {\n\t\t\t\t\td = this.circle.attr( 'd' ) + ' M ' + x + ' ' + y;\n\t\t\t\t\tthis.first = false;\n\t\t\t\t} else {\n\t\t\t\t\td = this.circle.attr( 'd' ) + ' L ' + x + ' ' + y;\n\t\t\t\t}\n\t\t\t\tthis.circle.attr( 'd', d );\n\t\t\t\tthis.i--;\n\t\n\t\t\t\tif (this.i <= 0) {\n\t\t\t\t\tclearInterval( this.timer );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\n\t\t/**\n\t\t * Draw donut element\n\t\t *\n\t\t * @since 3.9.0\n\t\t *\n\t\t * @param {Object} $el jQuery element to draw a chart within.\n\t\t * @return {Void}\n\t\t */\n\t\tfunction draw( $el ) {\n\t\t\tvar path = ' ';\n\t\t\t$el.append( '' + path + ' ' );\n\t\t\tvar donut = new Donut( {\n\t\t\t\telement: $el,\n\t\t\t\tpercent: $el.attr( 'data-perc' )\n\t\t\t} );\n\t\t\tdonut.animate();\n\t\t}\n\t\n\t\tdraw( $el );\n\t\n\t};\n\t\n\t\t/**\n\t * Forms\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 5.0.0\n\t * @version 7.0.0\n\t */\n\t\n\tLLMS.Forms = {\n\t\n\t\t/**\n\t\t * Stores locale information.\n\t\t *\n\t\t * Added via PHP.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\taddress_info: {},\n\t\n\t\t/**\n\t\t * jQuery ref. to the city text field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$cities: null,\n\t\n\t\t/**\n\t\t * jQuery ref. to the countries select field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$countries: null,\n\t\n\t\t/**\n\t\t * jQuery ref. to the states select field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$states: null,\n\t\n\t\t/**\n\t\t * jQuery ref. to the hidden states holder field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$states_holder: null,\n\t\n\t\t/**\n\t\t * Init\n\t\t *\n\t \t * @since 5.0.0\n\t \t * @since 5.3.3 Move select2 dependency check into the `bind_l10_selects()` method.\n\t \t *\n\t \t * @return {void}\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\tif ( ! ( $( 'body' ).hasClass( 'profile-php' ) || $( 'body' ).hasClass( 'user-edit-php' ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tself.bind_matching_fields();\n\t\t\tself.bind_voucher_field();\n\t\t\tself.bind_edit_account();\n\t\t\tself.bind_l10n_selects();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events for the edit account screen.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tbind_edit_account: function() {\n\t\n\t\t\t// Not an edit account form.\n\t\t\tif ( ! $( 'form.llms-person-form.edit-account' ).length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t$( '.llms-toggle-fields' ).on( 'click', this.handle_toggle_click );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM Events fields with dynamic localization values and language.\n\t\t *\n\t\t * @since 5.0.0\n\t\t * @since 5.3.3 Bind select2-related events after ensuring select2 is available.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tbind_l10n_selects: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tself.$cities = $( '#llms_billing_city' );\n\t\t\tself.$countries = $( '.llms-l10n-country-select select' );\n\t\t\tself.$states = $( '.llms-l10n-state-select select' );\n\t\t\tself.$zips = $( '#llms_billing_zip' );\n\t\n\t\t\tif ( ! self.$countries.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar isSelect2Available = function() {\n\t\t\t\treturn ( undefined !== $.fn.llmsSelect2 );\n\t\t\t};\n\t\n\t\t\tLLMS.wait_for( isSelect2Available, function() {\n\t\n\t\t\t\tif ( self.$states.length ) {\n\t\t\t\t\tself.prep_state_field();\n\t\t\t\t}\n\t\n\t\t\t\tself.$countries.add( self.$states ).llmsSelect2( { width: '100%' } );\n\t\n\t\t\t\tif ( window.llms.address_info ) {\n\t\t\t\t\tself.address_info = JSON.parse( window.llms.address_info );\n\t\t\t\t}\n\t\n\t\t\t\tself.$countries.on( 'change', function() {\n\t\n\t\t\t\t\tvar val = $( this ).val();\n\t\t\t\t\tself.update_locale_info( val );\n\t\n\t\t\t\t} ).trigger( 'change' );\n\t\n\t\t\t}, 'llmsSelect2' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Ensure \"matching\" fields match.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tbind_matching_fields: function() {\n\t\n\t\t\tvar $fields = $( 'input[data-match]' ).not( '[type=\"password\"]' );\n\t\n\t\t\t$fields.each( function() {\n\t\n\t\t\t\tvar $field = $( this ),\n\t\t\t\t\t$match = $( '#' + $field.attr( 'data-match' ) ),\n\t\t\t\t\t$parents;\n\t\n\t\t\t\tif ( $match.length ) {\n\t\n\t\t\t\t\t$parents = $field.closest( '.llms-form-field' ).add( $match.closest( '.llms-form-field' ) );\n\t\n\t\t\t\t\t$field.on( 'input change', function() {\n\t\n\t\t\t\t\t\tvar val_1 = $field.val(),\n\t\t\t\t\t\t\tval_2 = $match.val();\n\t\n\t\t\t\t\t\tif ( val_1 && val_2 && val_1 !== val_2 ) {\n\t\t\t\t\t\t\t$parents.addClass( 'invalid' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$parents.removeClass( 'invalid' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t} );\n\t\n\t\t\t\t}\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events for voucher toggles UX.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tbind_voucher_field: function() {\n\t\n\t\t\t$( '#llms-voucher-toggle' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$( '#llms_voucher' ).toggle();\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieve the parent element for a given field.\n\t\t *\n\t\t * The parent element is hidden when the field isn't required.\n\t\t *\n\t\t * @since 5.0.0\n\t\t * @since 7.0.0 Do not look for a WP column wrapper anymore, always return the field's wrapper div.\n\t\t *\n\t\t * @param {Object} $field jQuery dom object.\n\t\t * @return {Object}\n\t\t */\n\t\tget_field_parent: function( $field ) {\n\t\n\t\t\treturn $field.closest( '.llms-form-field' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieve the text of a label\n\t\t *\n\t\t * Removes any children HTML elements (eg: required span elements) and returns only the labels text.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $label jQuery object for a label element.\n\t\t * @return {String}\n\t\t */\n\t\tget_label_text: function( $label ) {\n\t\n\t\t\tvar $clone = $label.clone();\n\t\t\t$clone.find( '*' ).remove();\n\t\t\treturn $clone.text().trim();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Callback function to handle the \"toggle\" button links for changing email address and password on account edit forms\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} event Native JS event object.\n\t\t * @return {void}\n\t\t */\n\t\thandle_toggle_click: function( event ) {\n\t\n\t\t\tevent.preventDefault();\n\t\n\t\t\tvar $this = $( this ),\n\t\t\t\t$fields = $( $( this ).attr( 'data-fields' ) ),\n\t\t\t\tisShowing = $this.attr( 'data-is-showing' ) || 'no',\n\t\t\t\tdisplayFunc = 'yes' === isShowing ? 'hide' : 'show',\n\t\t\t\tdisabled = 'yes' === isShowing ? 'disabled' : null,\n\t\t\t\ttextAttr = 'yes' === isShowing ? 'data-change-text' : 'data-cancel-text';\n\t\n\t\t\t$fields.each( function() {\n\t\n\t\t\t\t$( this ).closest( '.llms-form-field' )[ displayFunc ]();\n\t\t\t\t$( this ).attr( 'disabled', disabled );\n\t\n\t\t\t} );\n\t\n\t\t\t$this.text( $this.attr( textAttr ) );\n\t\t\t$this.attr( 'data-is-showing', 'yes' === isShowing ? 'no' : 'yes' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Prepares the state select field.\n\t\t *\n\t\t * Moves All optgroup elements into a hidden & disabled select element.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tprep_state_field: function() {\n\t\n\t\t\tvar $parent = this.$states.closest( '.llms-form-field' );\n\t\n\t\t\tthis.$holder = $( ' ' );\n\t\n\t\t\tthis.$holder.appendTo( $parent );\n\t\t\tthis.$states.find( 'optgroup' ).appendTo( this.$holder );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Updates the text of a label for a given field.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $field jQuery object of the form field.\n\t\t * @param {String} text Label text.\n\t\t * @return {void}\n\t\t */\n\t\tupdate_label: function( $field, text ) {\n\t\n\t\t\tvar $label = this.get_field_parent( $field ).find( 'label' ),\n\t\t\t\t$required = $label.find( '.llms-required' ).clone();\n\t\n\t\t\t$label.html( text );\n\t\t\t$label.append( $required );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Update form fields based on selected country\n\t\t *\n\t\t * Replaces label text with locale-specific language and\n\t\t * hides or shows zip fields based on whether or not\n\t\t * they are required for the given country.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {String} country_code Currently selected country code.\n\t\t * @return {void}\n\t\t */\n\t\tupdate_locale_info: function( country_code ) {\n\t\n\t\t\tif ( ! this.address_info || ! this.address_info[ country_code ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar info = this.address_info[ country_code ];\n\t\n\t\t\tthis.update_state_options( country_code );\n\t\t\tthis.update_label( this.$states, info.state );\n\t\n\t\t\tthis.update_locale_info_for_field( this.$cities, info.city );\n\t\t\tthis.update_locale_info_for_field( this.$zips, info.postcode );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Update locale info for a given field.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $field The jQuery object for the field.\n\t\t * @param {String|Boolean} label The text of the label, or `false` when the field isn't supported.\n\t\t * @return {Void}\n\t\t */\n\t\tupdate_locale_info_for_field: function( $field, label ) {\n\t\n\t\t\tif ( label ) {\n\t\t\t\tthis.update_label( $field, label );\n\t\t\t\tthis.enable_field( $field );\n\t\t\t} else {\n\t\t\t\tthis.disable_field( $field );\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Update the available options in the state field\n\t\t *\n\t\t * Removes existing options and copies the options\n\t\t * for the requested country from the hidden select field.\n\t\t *\n\t\t * If there are no states for the given country the state\n\t\t * field will be hidden.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {String} country_code Currently selected country code.\n\t\t * @return {void}\n\t\t */\n\t\tupdate_state_options: function( country_code ) {\n\t\n\t\t\tif ( ! this.$states.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar opts = this.$holder.find( 'optgroup[data-key=\"' + country_code + '\"] option' ).clone();\n\t\n\t\t\tif ( ! opts.length ) {\n\t\t\t\tthis.$states.html( '  ' );\n\t\t\t\tthis.disable_field( this.$states );\n\t\t\t} else {\n\t\t\t\tthis.enable_field( this.$states );\n\t\t\t\tthis.$states.html( opts );\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Disable a given field\n\t\t *\n\t\t * It also hides the parent element, and adds an empty hidden input field\n\t\t * with the same 'name' as teh being disabled field so to be sure to clear the field.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $field The jQuery object for the field.\n\t\t */\n\t\tdisable_field: function( $field ) {\n\t\t\t$(\n\t\t\t\t' ',\n\t\t\t\t{ name: $field.attr('name'), class: $field.attr( 'class' ) + ' hidden', type: 'hidden' }\n\t\t\t).insertAfter( $field );\n\t\t\t$field.attr( 'disabled', 'disabled' );\n\t\t\tthis.get_field_parent( $field ).hide();\n\t\t},\n\t\n\t\t/**\n\t\t * Enable a given field\n\t\t *\n\t\t * It also shows the parent element, and removes the empty hidden input field\n\t\t * previously added by disable_field().\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {Object} $field The jQuery object for the field.\n\t\t */\n\t\tenable_field: function( $field ) {\n\t\t\t$field.removeAttr( 'disabled' );\n\t\t\t$field.next( '.hidden[name='+$field.attr('name')+']' ).detach();\n\t\t\tthis.get_field_parent( $field ).show();\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Instructors List\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Instructors = {\n\t\n\t\t/**\n\t\t * Init\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( $( '.llms-instructors' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\t\t\t\tself.bind();\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return {[type]} [description]\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\t$( '.llms-instructors .llms-author' ).matchHeight();\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * Localization functions for LifterLMS Javascript\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 2.7.3\n\t * @version 2.7.3\n\t *\n\t * @todo we need more robust translation functions to handle sprintf and pluralization\n\t * at this moment we don't need those and haven't stubbed them out\n\t * those will be added when they're needed\n\t */\n\t\n\tLLMS.l10n = LLMS.l10n || {};\n\t\n\tLLMS.l10n.translate = function ( string ) {\n\t\n\t\tvar self = this;\n\t\n\t\tif ( self.strings[string] ) {\n\t\n\t\t\treturn self.strings[string];\n\t\n\t\t} else {\n\t\n\t\t\treturn string;\n\t\n\t\t}\n\t\n\t};\n\t\n\t/**\n\t * Translate and replace placeholders in a string\n\t *\n\t * @example LLMS.l10n.replace( 'This is a %2$s %1$s String', {\n\t * \t'%1$s': 'cool',\n\t * \t\t\t'%2$s': 'very'\n\t * \t\t} );\n\t * \t\tOutput: \"This is a very cool String\"\n\t *\n\t * @param string string text string\n\t * @param object replacements object containing token => replacement pairs\n\t * @return string\n\t * @since 3.16.0\n\t * @version 3.16.0\n\t */\n\tLLMS.l10n.replace = function( string, replacements ) {\n\t\n\t\tvar str = this.translate( string );\n\t\n\t\t$.each( replacements, function( token, value ) {\n\t\n\t\t\tif ( -1 !== token.indexOf( 's' ) ) {\n\t\t\t\tvalue = value.toString();\n\t\t\t} else if ( -1 !== token.indexOf( 'd' ) ) {\n\t\t\t\tvalue = value * 1;\n\t\t\t}\n\t\n\t\t\tstr = str.replace( token, value );\n\t\n\t\t} );\n\t\n\t\treturn str;\n\t\n\t};\n\t\n\t\t/**\n\t * Handle Lesson Preview Elements\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 3.16.12\n\t */\n\t\n\tLLMS.LessonPreview = {\n\t\n\t\t/**\n\t\t * A jQuery object of all outlines present on the current screen\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\t$els: null,\n\t\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tthis.$locked = $( 'a[href=\"#llms-lesson-locked\"]' );\n\t\n\t\t\tif ( this.$locked.length ) {\n\t\n\t\t\t\tself.bind();\n\t\n\t\t\t}\n\t\n\t\t\tif ( $( '.llms-course-navigation' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\n\t\t\t\t\tself.match_height();\n\t\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.16.12\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tthis.$locked.on( 'click', function() {\n\t\t\t\treturn false;\n\t\t\t} );\n\t\n\t\t\tthis.$locked.on( 'mouseenter', function() {\n\t\n\t\t\t\tvar $tip = $( this ).find( '.llms-tooltip' );\n\t\t\t\tif ( ! $tip.length ) {\n\t\t\t\t\tvar msg = $( this ).attr( 'data-tooltip-msg' );\n\t\t\t\t\tif ( ! msg ) {\n\t\t\t\t\t\tmsg = LLMS.l10n.translate( 'You do not have permission to access this content' );\n\t\t\t\t\t}\n\t\t\t\t\t$tip = self.get_tooltip( msg );\n\t\t\t\t\t$( this ).append( $tip );\n\t\t\t\t}\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t$tip.addClass( 'show' );\n\t\t\t\t}, 10 );\n\t\n\t\t\t} );\n\t\n\t\t\tthis.$locked.on( 'mouseleave', function() {\n\t\n\t\t\t\tvar $tip = $( this ).find( '.llms-tooltip' );\n\t\t\t\t$tip.removeClass( 'show' );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Match the height of lesson preview items in course navigation blocks\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.0.0\n\t\t */\n\t\tmatch_height: function() {\n\t\n\t\t\t$( '.llms-course-navigation .llms-lesson-link' ).matchHeight();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get a tooltip element\n\t\t *\n\t\t * @param string msg message to display inside the tooltip\n\t\t * @return obj\n\t\t * @since 3.0.0\n\t\t * @version 3.2.4\n\t\t */\n\t\tget_tooltip: function( msg ) {\n\t\t\tvar $el = $( '
' );\n\t\t\t$el.append( '' + msg + '
' );\n\t\t\treturn $el;\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * LifterLMS Loops JS\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 3.14.0\n\t */\n\t\n\tLLMS.Loops = {\n\t\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( '.llms-loop' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\n\t\t\t\t\tself.match_height();\n\t\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Match the height of .llms-loop-item\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.14.0\n\t\t */\n\t\tmatch_height: function() {\n\t\n\t\t\t$( '.llms-loop-item .llms-loop-item-content' ).matchHeight();\n\t\t\t$( '.llms-achievement-loop-item .llms-achievement' ).matchHeight();\n\t\t\t$( '.llms-certificate-loop-item .llms-certificate' ).matchHeight();\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * Handle the Collapsible Syllabus Widget / Shortcode\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.OutlineCollapse = {\n\t\n\t\t/**\n\t\t * A jQuery object of all outlines present on the current screen\n\t\t *\n\t\t * @type obj\n\t\t */\n\t\t$outlines: null,\n\t\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tthis.$outlines = $( '.llms-widget-syllabus--collapsible' );\n\t\n\t\t\tif ( this.$outlines.length ) {\n\t\n\t\t\t\tthis.bind();\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tthis.$outlines.each( function() {\n\t\n\t\t\t\tvar $outline = $( this ),\n\t\t\t\t\t$headers = $outline.find( '.llms-section .section-header' );\n\t\n\t\t\t\t// bind header clicks\n\t\t\t\t$headers.on( 'click', function( e ) {\n\t\n\t\t\t\t\te.preventDefault();\n\t\n\t\t\t\t\tvar $toggle = $( this ),\n\t\t\t\t\t\t$section = $toggle.closest( '.llms-section' ),\n\t\t\t\t\t\tstate = self.get_section_state( $section );\n\t\n\t\t\t\t\tswitch ( state ) {\n\t\n\t\t\t\t\t\tcase 'closed':\n\t\t\t\t\t\t\tself.open_section( $section );\n\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\tcase 'opened':\n\t\t\t\t\t\t\tself.close_section( $section );\n\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t}\n\t\n\t\t\t\t} );\n\t\n\t\t\t\t// bind optional toggle \"buttons\"\n\t\t\t\t$outline.find( '.llms-collapse-toggle' ).on( 'click', function( e ) {\n\t\n\t\t\t\t\te.preventDefault();\n\t\n\t\t\t\t\tvar $btn = $( this ),\n\t\t\t\t\t\taction = $btn.attr( 'data-action' ),\n\t\t\t\t\t\topposite_action = ( 'close' === action ) ? 'opened' : 'closed';\n\t\n\t\t\t\t\t$headers.each( function() {\n\t\n\t\t\t\t\t\tvar $section = $( this ).closest( '.llms-section' ),\n\t\t\t\t\t\t\tstate = self.get_section_state( $section );\n\t\n\t\t\t\t\t\tif ( opposite_action !== state ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tswitch ( state ) {\n\t\n\t\t\t\t\t\t\tcase 'closed':\n\t\t\t\t\t\t\t\tself.close_section( $section );\n\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t\tcase 'opened':\n\t\t\t\t\t\t\t\tself.open_section( $section );\n\t\t\t\t\t\t\tbreak;\n\t\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t$( this ).trigger( 'click' );\n\t\n\t\t\t\t\t} );\n\t\n\t\t\t\t} );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Close an outline section\n\t\t *\n\t\t * @param obj $section jQuery selector of a '.llms-section'\n\t\t * @return void\n\t\t */\n\t\tclose_section: function( $section ) {\n\t\n\t\t\t$section.removeClass( 'llms-section--opened' ).addClass( 'llms-section--closed' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Open an outline section\n\t\t *\n\t\t * @param obj $section jQuery selector of a '.llms-section'\n\t\t * @return void\n\t\t */\n\t\topen_section: function( $section ) {\n\t\n\t\t\t$section.removeClass( 'llms-section--closed' ).addClass( 'llms-section--opened' );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the current state (open or closed) of an outline section\n\t\t *\n\t\t * @param obj $section jQuery selector of a '.llms-section'\n\t\t * @return string 'opened' or 'closed'\n\t\t */\n\t\tget_section_state: function( $section ) {\n\t\n\t\t\treturn $section.hasClass( 'llms-section--opened' ) ? 'opened' : 'closed';\n\t\n\t\t}\n\t\n\t};\n\t\n\t\t/**\n\t * Handle Password Strength Meter for registration and password update fields\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.0.0\n\t * @version 5.0.0\n\t */\n\t\n\t$.extend( LLMS.PasswordStrength, {\n\t\n\t\t/**\n\t\t * jQuery ref for the password strength meter object.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$meter: $( '.llms-password-strength-meter' ),\n\t\n\t\t/**\n\t\t * jQuery ref for the password field.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$pass: null,\n\t\n\t\t/**\n\t\t * jQuery ref for the password confirmation field\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$conf: null,\n\t\n\t\t/**\n\t\t * jQuery ref for form element.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\t$form: null,\n\t\n\t\t/**\n\t\t * Init\n\t\t * loads class methods\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 3.7.0 Unknown\n\t\t * @since 5.0.0 Move reference setup to `setup_references()`.\n\t\t * Use `LLMS.wait_for()` for dependency waiting.\n\t\t *\n\t\t * @return {Void}\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( ! this.setup_references() ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tLLMS.wait_for( function() {\n\t\t\t\treturn ( 'undefined' !== typeof wp && 'undefined' !== typeof wp.passwordStrength );\n\t\t\t}, function() {\n\t\t\t\tself.bind();\n\t\t\t\tself.$form.trigger( 'llms-password-strength-ready' );\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM Events\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\t// add submission event handlers when not on a checkout form\n\t\t\tif ( ! this.$form.hasClass( 'llms-checkout' ) ) {\n\t\t\t\tself.$form.on( 'submit', self, self.submit );\n\t\t\t}\n\t\n\t\t\t// check password strength on keyup\n\t\t\tself.$pass.add( self.$conf ).on( 'keyup', function() {\n\t\t\t\tself.check_strength();\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Check the strength of a user entered password\n\t\t * and update elements depending on the current strength\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 5.0.0 Allow password confirmation to be optional when checking strength.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tcheck_strength: function() {\n\t\n\t\t\tvar $pass_field = this.$pass.closest( '.llms-form-field' ),\n\t\t\t\t$conf_field = this.$conf && this.$conf.length ? this.$conf.closest( '.llms-form-field' ) : null,\n\t\t\t\tpass_length = this.$pass.val().length,\n\t\t\t\tconf_length = this.$conf && this.$conf.length ? this.$conf.val().length : 0;\n\t\n\t\t\t// hide the meter if both fields are empty\n\t\t\tif ( ! pass_length && ! conf_length ) {\n\t\t\t\t$pass_field.removeClass( 'valid invalid' );\n\t\t\t\tif ( $conf_field ) {\n\t\t\t\t\t$conf_field.removeClass( 'valid invalid' );\n\t\t\t\t}\n\t\t\t\tthis.$meter.hide();\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( this.get_current_strength_status() ) {\n\t\t\t\t$pass_field.removeClass( 'invalid' ).addClass( 'valid' );\n\t\t\t\tif ( conf_length ) {\n\t\t\t\t\t$conf_field.removeClass( 'invalid' ).addClass( 'valid' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$pass_field.removeClass( 'valid' ).addClass( 'invalid' );\n\t\t\t\tif ( conf_length ) {\n\t\t\t\t\t$conf_field.removeClass( 'valid' ).addClass( 'invalid' );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tthis.$meter.removeClass( 'too-short very-weak weak medium strong mismatch' );\n\t\t\tthis.$meter.show().addClass( this.get_current_strength( 'slug' ) );\n\t\t\tthis.$meter.html( this.get_current_strength( 'text' ) );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Form submission action called during registration on checkout screen\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @param obj self instance of this class\n\t\t * @param Function callback callback function, passes error message or success back to checkout handler\n\t\t * @return void\n\t\t */\n\t\tcheckout: function( self, callback ) {\n\t\n\t\t\tif ( self.get_current_strength_status() ) {\n\t\n\t\t\t\tcallback( true );\n\t\n\t\t\t} else {\n\t\n\t\t\t\tcallback( LLMS.l10n.translate( 'There is an issue with your chosen password.' ) );\n\t\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Get the list of blocklisted strings\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return array\n\t\t */\n\t\tget_blocklist: function() {\n\t\n\t\t\t// Default values from WP Core + any values added via settings filter..\n\t\t\tvar blocklist = wp.passwordStrength.userInputDisallowedList().concat( this.get_setting( 'blocklist', [] ) );\n\t\n\t\t\t// Add values from all text fields in the form.\n\t\t\tthis.$form.find( 'input[type=\"text\"], input[type=\"email\"], input[type=\"tel\"], input[type=\"number\"]' ).each( function() {\n\t\t\t\tvar val = $( this ).val();\n\t\t\t\tif ( val ) {\n\t\t\t\t\tblocklist.push( val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn blocklist;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieve current strength as a number, a slug, or a translated text string\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 5.0.0 Allow password confirmation to be optional when checking strength.\n\t\t *\n\t\t * @param {String} format Derived return format [int|slug|text] defaults to int.\n\t\t * @return mixed\n\t\t */\n\t\tget_current_strength: function( format ) {\n\t\n\t\t\tformat = format || 'int';\n\t\t\tvar pass = this.$pass.val(),\n\t\t\t\tconf = this.$conf && this.$conf.length ? this.$conf.val() : '',\n\t\t\t\tval;\n\t\n\t\t\t// enforce custom length requirement\n\t\t\tif ( pass.length < this.get_setting( 'min_length', 6 ) ) {\n\t\t\t\tval = -1;\n\t\t\t} else {\n\t\t\t\tval = wp.passwordStrength.meter( pass, this.get_blocklist(), conf );\n\t\t\t\t// 0 & 1 are both very-weak\n\t\t\t\tif ( 0 === val ) {\n\t\t\t\t\tval = 1;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( 'slug' === format ) {\n\t\t\t\treturn this.get_strength_slug( val );\n\t\t\t} else if ( 'text' === format ) {\n\t\t\t\treturn this.get_strength_text( val );\n\t\t\t} else {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Determines if the current password strength meets the user-defined\n\t\t * minimum password strength requirements\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @return boolean\n\t\t */\n\t\tget_current_strength_status: function() {\n\t\t\tvar curr = this.get_current_strength(),\n\t\t\t\tmin = this.get_strength_value( this.get_minimum_strength() );\n\t\t\treturn ( 5 === curr ) ? false : ( curr >= min );\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieve the minimum password strength for the current form.\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 5.0.0 Replaces the version output via an inline PHP script in favor of utilizing values configured in the settings object.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tget_minimum_strength: function() {\n\t\t\treturn this.get_setting( 'min_strength', 'strong' );\n\t\t},\n\t\n\t\t/**\n\t\t * Get a setting and fallback to a default value.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @param {String} key Setting key.\n\t\t * @param {mixed} default_val Default value when the requested setting cannot be located.\n\t\t * @return {mixed}\n\t\t */\n\t\tget_setting: function( key, default_val ) {\n\t\t\tvar settings = this.get_settings();\n\t\t\treturn settings[ key ] ? settings[ key ] : default_val;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the slug associated with a strength value\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @param int strength_val Strength value number.\n\t\t * @return string\n\t\t */\n\t\tget_strength_slug: function( strength_val ) {\n\t\n\t\t\tvar slugs = {\n\t\t\t\t'-1': 'too-short',\n\t\t\t\t1: 'very-weak',\n\t\t\t\t2: 'weak',\n\t\t\t\t3: 'medium',\n\t\t\t\t4: 'strong',\n\t\t\t\t5: 'mismatch',\n\t\t\t};\n\t\n\t\t\treturn ( slugs[ strength_val ] ) ? slugs[ strength_val ] : slugs[5];\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Gets the translated text associated with a strength value\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @param {Integer} strength_val Strength value\n\t\t * @return {String}\n\t\t */\n\t\tget_strength_text: function( strength_val ) {\n\t\n\t\t\tvar texts = {\n\t\t\t\t'-1': LLMS.l10n.translate( 'Too Short' ),\n\t\t\t\t1: LLMS.l10n.translate( 'Very Weak' ),\n\t\t\t\t2: LLMS.l10n.translate( 'Weak' ),\n\t\t\t\t3: LLMS.l10n.translate( 'Medium' ),\n\t\t\t\t4: LLMS.l10n.translate( 'Strong' ),\n\t\t\t\t5: LLMS.l10n.translate( 'Mismatch' ),\n\t\t\t};\n\t\n\t\t\treturn ( texts[ strength_val ] ) ? texts[ strength_val ] : texts[5];\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the value associated with a strength slug\n\t\t *\n\t\t * @since 3.0.0\n\t\t *\n\t\t * @param string strength_slug A strength slug.\n\t\t * @return {Integer}\n\t\t */\n\t\tget_strength_value: function( strength_slug ) {\n\t\n\t\t\tvar values = {\n\t\t\t\t'too-short': -1,\n\t\t\t\t'very-weak': 1,\n\t\t\t\tweak: 2,\n\t\t\t\tmedium: 3,\n\t\t\t\tstrong: 4,\n\t\t\t\tmismatch: 5,\n\t\t\t};\n\t\n\t\t\treturn ( values[ strength_slug ] ) ? values[ strength_slug ] : values.mismatch;\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Setup jQuery references to DOM elements needed to power the password meter.\n\t\t *\n\t\t * @since 5.0.0\n\t\t *\n\t\t * @return {Boolean} Returns `true` if a meter element and password field are found, otherwise returns `false`.\n\t\t */\n\t\tsetup_references: function() {\n\t\n\t\t\tif ( ! this.$meter.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tthis.$form = this.$meter.closest( 'form' );\n\t\t\tthis.$pass = this.$form.find( 'input#password' );\n\t\n\t\t\tif ( this.$pass.length && this.$pass.attr( 'data-match' ) ) {\n\t\t\t\tthis.$conf = this.$form.find( '#' + this.$pass.attr( 'data-match' ) );\n\t\t\t}\n\t\n\t\t\treturn ( this.$pass.length > 0 );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Form submission handler for registration and update forms\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @since 5.0.0 Allow the account edit for to bypass strength checking when the password field is disabled (not being submitted).\n\t\t *\n\t\t * @param obj e Event data.\n\t\t * @return void\n\t\t */\n\t\tsubmit: function( e ) {\n\t\n\t\t\tvar self = e.data;\n\t\t\te.preventDefault();\n\t\t\tself.$pass.trigger( 'keyup' );\n\t\n\t\t\t// Meets the status requirements OR we're on the account edit form and the password field is disabled.\n\t\t\tif ( self.get_current_strength_status() || ( self.$form.hasClass( 'edit-account' ) && 'disabled' === self.$pass.attr( 'disabled' ) ) ) {\n\t\t\t\tself.$form.off( 'submit', self.submit );\n\t\t\t\tself.$form.trigger( 'submit' );\n\t\t\t} else {\n\t\t\t\t$( 'html, body' ).animate( {\n\t\t\t\t\tscrollTop: self.$meter.offset().top - 100,\n\t\t\t\t}, 200 );\n\t\t\t\tself.$meter.hide();\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tself.$meter.fadeIn( 400 );\n\t\t\t\t}, 220 );\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Get the list of blocklist strings\n\t\t *\n\t\t * @since 3.0.0\n\t\t * @deprecated 5.0.0 `LLMS.PasswordStrength.get_blacklist()` is deprecated in favor of `LLMS.PasswordStrength.get_blocklist()`.\n\t\t *\n\t\t * @return array\n\t\t */\n\t\tget_blacklist: function() {\n\t\t\tconsole.log( 'Method `get_blacklist()` is deprecated in favor of `get_blocklist()`.' );\n\t\t\treturn this.get_blacklist();\n\t\t},\n\t\n\t} );\n\t\n\t\t/**\n\t * Pricing Table UI\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown.\n\t * @version Unknown.\n\t */\n\t\n\tLLMS.Pricing_Tables = {\n\t\n\t\t/**\n\t\t * Init\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tvar self = this;\n\t\n\t\t\tif ( $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ( $( '.llms-access-plans' ).length ) {\n\t\n\t\t\t\tLLMS.wait_for_matchHeight( function() {\n\t\t\t\t\tself.bind();\n\t\t\t\t} );\n\t\n\t\t\t\tthis.$locked = $( 'a[href=\"#llms-plan-locked\"]' );\n\t\n\t\t\t\tif ( this.$locked.length ) {\n\t\n\t\t\t\t\tLLMS.wait_for_popover( function() {\n\t\t\t\t\t\tself.bind_locked();\n\t\t\t\t\t} );\n\t\n\t\t\t\t}\n\t\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return {[type]} [description]\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\t$( '.llms-access-plan-content' ).matchHeight();\n\t\t\t$( '.llms-access-plan-pricing.trial' ).matchHeight();\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Setup a popover for members-only restricted plans\n\t\t *\n\t\t * @return void\n\t\t * @since 3.0.0\n\t\t * @version 3.9.1\n\t\t */\n\t\tbind_locked: function() {\n\t\n\t\t\tthis.$locked.each( function() {\n\t\n\t\t\t\t$( this ).webuiPopover( {\n\t\t\t\t\tanimation: 'pop',\n\t\t\t\t\tcloseable: true,\n\t\t\t\t\tcontent: function( e ) {\n\t\t\t\t\t\tvar $content = $( '
' );\n\t\t\t\t\t\t$content.append( e.$element.closest( '.llms-access-plan' ).find( '.llms-access-plan-restrictions ul' ).clone() );\n\t\t\t\t\t\treturn $content;\n\t\t\t\t\t},\n\t\t\t\t\tplacement: 'top',\n\t\t\t\t\tstyle: 'inverse',\n\t\t\t\t\ttitle: LLMS.l10n.translate( 'Members Only Pricing' ),\n\t\t\t\t\twidth: '280px',\n\t\t\t\t} );\n\t\n\t\t\t} );\n\t\n\t\t},\n\t\n\t};\n\t\n\t\t/**\n\t * Quiz Attempt\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 7.3.0\n\t * @version 7.3.0\n\t */\n\t\n\tLLMS.Quiz_Attempt = {\n\t\t/**\n\t\t * Initialize\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\t$( '.llms-quiz-attempt-question-header a.toggle-answer' ).on( 'click', function( e ) {\n\t\n\t\t\t\te.preventDefault();\n\t\n\t\t\t\tvar $curr = $( this ).closest( 'header' ).next( '.llms-quiz-attempt-question-main' );\n\t\n\t\t\t\t$( this ).closest( 'li' ).siblings().find( '.llms-quiz-attempt-question-main' ).slideUp( 200 );\n\t\n\t\t\t\tif ( $curr.is( ':visible' ) ) {\n\t\t\t\t\t$curr.slideUp( 200 );\n\t\t\t\t} else {\n\t\t\t\t\t$curr.slideDown( 200 );\n\t\t\t\t}\n\t\n\t\t\t} );\n\t\t}\n\t\n\t}\n\t\n\t\t/**\n\t * LifterLMS Reviews JS\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Review = {\n\t\t/**\n\t\t * Init\n\t\t * loads class methods\n\t\t */\n\t\tinit: function() {\n\t\t\t// console.log('Initializing Review ');\n\t\t\tthis.bind();\n\t\t},\n\t\n\t\t/**\n\t\t * This function binds actions to the appropriate hooks\n\t\t */\n\t\tbind: function() {\n\t\t\t$( '#llms_review_submit_button' ).click(function()\n\t\t\t\t{\n\t\t\t\tif ($( '#review_title' ).val() !== '' && $( '#review_text' ).val() !== '') {\n\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\ttype : 'post',\n\t\t\t\t\t\tdataType : 'json',\n\t\t\t\t\t\turl : window.llms.ajaxurl,\n\t\t\t\t\t\tdata : {\n\t\t\t\t\t\t\taction : 'LLMSSubmitReview',\n\t\t\t\t\t\t\treview_title: $( '#review_title' ).val(),\n\t\t\t\t\t\t\treview_text: $( '#review_text' ).val(),\n\t\t\t\t\t\t\tpageID : $( '#post_ID' ).val(),\n\t\t\t\t\t\t\tllms_review_nonce: $( '#llms_review_nonce' ).val()\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function()\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconsole.log( 'Review success' );\n\t\t\t\t\t\t\t$( '#review_box' ).hide( 'swing' );\n\t\t\t\t\t\t\t$( '#thank_you_box' ).show( 'swing' );\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: function(jqXHR, textStatus, errorThrown )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconsole.log( jqXHR );\n\t\t\t\t\t\t\tconsole.log( textStatus );\n\t\t\t\t\t\t\tconsole.log( errorThrown );\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif ($( '#review_title' ).val() === '') {\n\t\t\t\t\t\t$( '#review_title_error' ).show( 'swing' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( '#review_title_error' ).hide( 'swing' );\n\t\t\t\t\t}\n\t\t\t\t\tif ($( '#review_text' ).val() === '') {\n\t\t\t\t\t\t$( '#review_text_error' ).show( 'swing' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$( '#review_text_error' ).hide( 'swing' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif ( $( '#_llms_display_reviews' ).attr( 'checked' ) ) {\n\t\t\t\t$( '.llms-num-reviews-top' ).addClass( 'top' );\n\t\t\t\t$( '.llms-num-reviews-bottom' ).show();\n\t\n\t\t\t} else {\n\t\t\t\t$( '.llms-num-reviews-bottom' ).hide();\n\t\t\t}\n\t\t\t$( '#_llms_display_reviews' ).change(function() {\n\t\t\t\tif ( $( '#_llms_display_reviews' ).attr( 'checked' ) ) {\n\t\t\t\t\t$( '.llms-num-reviews-top' ).addClass( 'top' );\n\t\t\t\t\t$( '.llms-num-reviews-bottom' ).show();\n\t\t\t\t} else {\n\t\t\t\t\t$( '.llms-num-reviews-top' ).removeClass( 'top' );\n\t\t\t\t\t$( '.llms-num-reviews-bottom' ).hide();\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t},\n\t};\n\t\n\t\t/* global LLMS, $ */\n\t\n\t/*!\n\t * JavaScript Cookie v2.2.1\n\t * https://github.com/js-cookie/js-cookie\n\t *\n\t * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n\t * Released under the MIT license\n\t */\n\t;(function (factory) {\n\t\tvar registeredInModuleLoader;\n\t\tif (typeof define === 'function' && define.amd) {\n\t\t\tdefine(factory);\n\t\t\tregisteredInModuleLoader = true;\n\t\t}\n\t\tif (typeof exports === 'object') {\n\t\t\tmodule.exports = factory();\n\t\t\tregisteredInModuleLoader = true;\n\t\t}\n\t\tif (!registeredInModuleLoader) {\n\t\t\tvar OldCookies = window.Cookies;\n\t\t\tvar api = window.Cookies = factory();\n\t\t\tapi.noConflict = function () {\n\t\t\t\twindow.Cookies = OldCookies;\n\t\t\t\treturn api;\n\t\t\t};\n\t\t}\n\t}(function () {\n\t\tfunction extend () {\n\t\t\tvar i = 0;\n\t\t\tvar result = {};\n\t\t\tfor (; i < arguments.length; i++) {\n\t\t\t\tvar attributes = arguments[ i ];\n\t\t\t\tfor (var key in attributes) {\n\t\t\t\t\tresult[key] = attributes[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\n\t\tfunction decode (s) {\n\t\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t\t}\n\t\n\t\tfunction init (converter) {\n\t\t\tfunction api() {}\n\t\n\t\t\tfunction set (key, value, attributes) {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\t\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t\t}\n\t\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\t\n\t\t\t\ttry {\n\t\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\n\t\t\t\tvalue = converter.write ?\n\t\t\t\t\tconverter.write(value, key) :\n\t\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\n\t\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\t\n\t\t\t\tvar stringifiedAttributes = '';\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t\t// ...\n\t\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t\t// character:\n\t\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t\t// ...\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t\t}\n\t\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\t\n\t\t\tfunction get (key, json) {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tvar jar = {};\n\t\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t\t// in case there are no cookies at all.\n\t\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\t\tvar i = 0;\n\t\n\t\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\t\tvar cookie = parts.slice(1).join('=');\n\t\n\t\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t\t}\n\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\t\tdecode(cookie);\n\t\n\t\t\t\t\t\tif (json) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tjar[name] = cookie;\n\t\n\t\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t}\n\t\n\t\t\t\treturn key ? jar[key] : jar;\n\t\t\t}\n\t\n\t\t\tapi.set = set;\n\t\t\tapi.get = function (key) {\n\t\t\t\treturn get(key, false /* read as raw */);\n\t\t\t};\n\t\t\tapi.getJSON = function (key) {\n\t\t\t\treturn get(key, true /* read as json */);\n\t\t\t};\n\t\t\tapi.remove = function (key, attributes) {\n\t\t\t\tset(key, '', extend(attributes, {\n\t\t\t\t\texpires: -1\n\t\t\t\t}));\n\t\t\t};\n\t\n\t\t\tapi.defaults = {};\n\t\n\t\t\tapi.withConverter = init;\n\t\n\t\t\treturn api;\n\t\t}\n\t\n\t\treturn init(function () {});\n\t}));\n\t\n\t/**\n\t * Create a no conflict reference to JS Cookies.\n\t *\n\t * @type {Object}\n\t */\n\tLLMS.CookieStore = Cookies.noConflict();\n\t\n\t/**\n\t * Store information in Local Storage by group.\n\t *\n\t * @since 3.36.0\n\t * @since 3.37.14 Use persistent reference to JS Cookies.\n\t * @since 4.2.0 Set sameSite to `strict` for cookies.\n\t *\n\t * @param string group Storage group id/name.\n\t */\n\tLLMS.Storage = function( group ) {\n\t\n\t\tvar self = this,\n\t\t\tstore = LLMS.CookieStore;\n\t\n\t\t/**\n\t\t * Clear all data for the group.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tthis.clearAll = function() {\n\t\t\tstore.remove( group );\n\t\t};\n\t\n\t\t/**\n\t\t * Clear a single item from the group by key.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return obj\n\t\t */\n\t\tthis.clear = function( key ) {\n\t\t\tvar data = self.getAll();\n\t\t\tdelete data[ key ];\n\t\t\treturn store.set( group, data );\n\t\t};\n\t\n\t\t/**\n\t\t * Retrieve (and parse) all data stored for the group.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return obj\n\t\t */\n\t\tthis.getAll = function() {\n\t\t\treturn store.getJSON( group ) || {};\n\t\t}\n\t\n\t\t/**\n\t\t * Retrieve an item from the group by key.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param string key Item key/name.\n\t\t * @param mixed default_val Item default value to be returned when item not found in the group.\n\t\t * @return mixed\n\t\t */\n\t\tthis.get = function( key, default_val ) {\n\t\t\tvar data = self.getAll();\n\t\t\treturn data[ key ] ? data[ key ] : default_val;\n\t\t}\n\t\n\t\t/**\n\t\t * Store an item in the group by key.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 4.2.0 Set sameSite to `strict` for cookies.\n\t\t *\n\t\t * @param string key Item key name.\n\t\t * @param mixed val Item value\n\t\t * @return obj\n\t\t */\n\t\tthis.set = function( key, val ) {\n\t\t\tvar data = self.getAll();\n\t\t\tdata[ key ] = val;\n\t\t\treturn store.set( group, data, { sameSite: 'strict' } );\n\t\t};\n\t\n\t}\n\t\n\t\t/**\n\t * Student Dashboard related JS\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since 3.7.0\n\t * @since 3.10.0 Bind events on the orders screen.\n\t * @since 5.0.0 Removed redundant password toggle logic for edit account screen.\n\t * @version 5.0.0\n\t */\n\tLLMS.StudentDashboard = {\n\t\n\t\t/**\n\t\t * Slug for the current screen/endpoint\n\t\t *\n\t\t * @type {String}\n\t\t */\n\t\tscreen: '',\n\t\n\t\t/**\n\t\t * Init\n\t\t *\n\t\t * @since 3.7.0\n\t\t * @since 3.10.0 Unknown\n\t\t * @since 5.0.0 Removed password toggle logic.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tinit: function() {\n\t\n\t\t\tif ( $( '.llms-student-dashboard' ).length ) {\n\t\t\t\tthis.bind();\n\t\t\t\tif ( 'orders' === this.get_screen() ) {\n\t\t\t\t\tthis.bind_orders();\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind DOM events\n\t\t *\n\t\t * @since 3.7.0\n\t\t * @since 3.7.4 Unknown.\n\t\t * @since 5.0.0 Removed password toggle logic.\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tbind: function() {\n\t\n\t\t\t$( '.llms-donut' ).each( function() {\n\t\t\t\tLLMS.Donut( $( this ) );\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Bind events related to the orders screen on the dashboard\n\t\t *\n\t\t * @since 3.10.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tbind_orders: function() {\n\t\n\t\t\t$( '#llms-cancel-subscription-form' ).on( 'submit', this.order_cancel_warning );\n\t\t\t$( '#llms_update_payment_method' ).on( 'click', function() {\n\t\t\t\t$( 'input[name=\"llms_payment_gateway\"]:checked' ).trigger( 'change' );\n\t\t\t\t$( this ).closest( 'form' ).find( '.llms-switch-payment-source-main' ).slideToggle( '200' );\n\t\t\t} );\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Get the current dashboard endpoint/tab slug\n\t\t *\n\t\t * @since 3.10.0\n\t\t *\n\t\t * @return void\n\t\t */\n\t\tget_screen: function() {\n\t\t\tif ( ! this.screen ) {\n\t\t\t\tthis.screen = $( '.llms-student-dashboard' ).attr( 'data-current' );\n\t\t\t}\n\t\t\treturn this.screen;\n\t\t},\n\t\n\t\t/**\n\t\t * Show a confirmation warning when Cancel Subscription form is submitted\n\t\t *\n\t\t * @since 3.10.0\n\t\t *\n\t\t * @param obj e JS event data.\n\t\t * @return void\n\t\t */\n\t\torder_cancel_warning: function( e ) {\n\t\t\te.preventDefault();\n\t\t\tvar msg = LLMS.l10n.translate( 'Are you sure you want to cancel your subscription?' );\n\t\t\tif ( window.confirm( LLMS.l10n.translate( msg ) ) ) {\n\t\t\t\t$( this ).off( 'submit', this.order_cancel_warning );\n\t\t\t\t$( this ).submit();\n\t\t\t}\n\t\t},\n\t\n\t};\n\t\n\t\t/* global LLMS, $ */\n\t\n\t/**\n\t * User event/interaction tracking.\n\t *\n\t * @since 3.36.0\n\t * @since 3.36.2 Fix JS error when settings aren't loaded.\n\t * @since 3.37.2 When adding an event to the storae also make sure the nonce is set for server-side verification.\n\t * @since 3.37.9 Fix IE compatibility issue related to usage of `Object.assign()`.\n\t * @since 3.37.14 Persist the tracking events via ajax when reaching the cookie size limit.\n\t * @since 5.0.0 Set `settings` as an empty object when no settings supplied.\n\t * @since 7.1.0 Only attempt to add a nonce to the datastore when a nonce exists in the settings object.\n\t */\n\tLLMS.Tracking = function( settings ) {\n\t\n\t\tsettings = settings || {};\n\t\n\t\tvar self = this,\n\t\t\tstore = new LLMS.Storage( 'llms-tracking' );\n\t\n\t\tsettings = 'string' === typeof settings ? JSON.parse( settings ) : settings;\n\t\n\t\t/**\n\t\t * Initialize / Bind all tracking event listeners.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 5.0.0 Only attempt to add a nonce to the datastore when a nonce exists in the settings object.\n\t\t * @since 7.1.0 Do not add a nonce to the datastore by default, will be added/updated\n\t\t * when storing an event to track.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tfunction init() {\n\t\n\t\t\tself.addEvent( 'page.load' );\n\t\n\t\t\twindow.addEventListener( 'beforeunload', onBeforeUnload );\n\t\t\twindow.addEventListener( 'unload', onUnload );\n\t\n\t\t\tdocument.addEventListener( 'visibilitychange', onVisibilityChange );\n\t\n\t\t};\n\t\n\t\t/**\n\t\t * Add an event.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 3.36.2 Fix error when settings aren't loaded.\n\t\t * @since 3.37.2 Always make sure the nonce is set for server-side verification.\n\t\t * @since 3.37.14 Persist the tracking events via ajax when reaching the cookie size limit.\n\t\t * @since 7.1.0 Only attempt to add a nonce to the datastore when a nonce exists in the settings object.\n\t\t *\n\t\t * @param string|obj event Event Id (type.event) or a full event object from `this.makeEventObj()`.\n\t\t * @param int args Optional additional arguments to pass to `this.makeEventObj()`.\n\t\t * @return {void}\n\t\t */\n\t\tthis.addEvent = function( event, args ) {\n\t\n\t\t\targs = args || {};\n\t\t\tif ( 'string' === typeof event ) {\n\t\t\t\targs.event = event;\n\t\t\t}\n\t\n\t\t\t// If the event isn't registered in the settings don't proceed.\n\t\t\tif ( !settings.events || -1 === settings.events.indexOf( args.event ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// Make sure the nonce is set for server-side verification.\n\t\t\tif ( settings.nonce ) {\n\t\t\t\tstore.set( 'nonce', settings.nonce );\n\t\t\t}\n\t\n\t\t\tevent = self.makeEventObj( args );\n\t\n\t\t\tvar all = store.get( 'events', [] );\n\t\t\tall.push( event );\n\t\t\tstore.set( 'events', all );\n\t\n\t\t\t// If couldn't store the latest event because of size limits.\n\t\t\tif ( all.length > store.get( 'events', [] ).length ) {\n\t\n\t\t\t\t// Copy the cookie in a temporary variable.\n\t\t\t\tvar _temp = store.getAll();\n\t\t\t\t// Clear the events from the cookie.\n\t\t\t\tstore.clear('events');\n\t\n\t\t\t\t// Add the latest event to the temporary variable.\n\t\t\t\t_temp['events'].push( event );\n\t\n\t\t\t\t// Send the temporary variable as string via ajax.\n\t\t\t\tLLMS.Ajax.call( {\n\t\t\t\t\tdata: {\n\t\t\t\t\t\taction: 'persist_tracking_events',\n\t\t\t\t\t\t'llms-tracking': JSON.stringify(_temp)\n\t\t\t\t\t},\n\t\n\t\t\t\t\terror: function( xhr, status, error ) {\n\t\n\t\t\t\t\t\tconsole.log( xhr, status, error );\n\t\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function( r ) {\n\t\n\t\t\t\t\t\tif ( 'error' === r.code ) {\n\t\t\t\t\t\t\tconsole.log(r.code, r.message);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t}\n\t\n\t\t\t\t} );\n\t\n\t\t\t}\n\t\n\t\t}\n\t\n\t\t/**\n\t\t * Retrieve initialization settings.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @return obj\n\t\t */\n\t\tthis.getSettings = function() {\n\t\t\treturn settings;\n\t\t}\n\t\n\t\t/**\n\t\t * Create an event object suitable to save as an event.\n\t\t *\n\t\t * @since 3.36.0\n\t\t * @since 3.37.9 Use `$.extend()` in favor of `Object.assign()`.\n\t\t *\n\t\t * @param obj event {\n\t\t * Event hash\n\t\t *\n\t\t * @param {string} event (Required) Event ID, eg: \"page.load\".\n\t\t * @param {url} url Event URL. (Optional, added automatically) Stored as metadata and used to infer an object_id for post events.\n\t\t * @param {time} float (Optional, added automatically) Timestamp (in milliseconds). Used for the event creation date.\n\t\t * @param {int} obj_id (Optional). The object ID. Inferred automatically via `url` if not provided.\n\t\t * @param {obj} meta (Optional) Hash of metadata to store with the event.\n\t\t * }\n\t\t * @return obj\n\t\t */\n\t\tthis.makeEventObj = function( event ) {\n\t\t\treturn $.extend( event, {\n\t\t\t\turl: window.location.href,\n\t\t\t\ttime: Math.round( new Date().getTime() / 1000 ),\n\t\t\t} );\n\t\t}\n\t\n\t\n\t\t/**\n\t\t * Remove the visibility change event listener on window.beforeunload\n\t\t *\n\t\t * Prevents actual unloading from recording a blur event from the visibility change listener\n\t\t *\n\t\t * @param obj e JS event object.\n\t\t * @return void\n\t\t */\n\t\tfunction onBeforeUnload( e ) {\n\t\t\tdocument.removeEventListener( 'visibilitychange', onVisibilityChange );\n\t\t}\n\t\n\t\t/**\n\t\t * Record a `page.exit` event on window.unload.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param obj e JS event object.\n\t\t * @return void\n\t\t */\n\t\tfunction onUnload( e ) {\n\t\t\tself.addEvent( 'page.exit' );\n\t\t}\n\t\n\t\t/**\n\t\t * Record `page.blur` and `page.focus` events via document.visilibitychange events.\n\t\t *\n\t\t * @since 3.36.0\n\t\t *\n\t\t * @param obj e JS event object.\n\t\t * @return void\n\t\t */\n\t\tfunction onVisibilityChange( e ) {\n\t\n\t\t\tvar event = document.hidden ? 'page.blur' : 'page.focus';\n\t\t\tself.addEvent( event );\n\t\n\t\t}\n\t\n\t\t// Initialize on the frontend only.\n\t\tif ( ! $( 'body' ).hasClass( 'wp-admin' ) ) {\n\t\t\tinit();\n\t\t}\n\t\n\t};\n\t\n\tllms.tracking = new LLMS.Tracking( llms.tracking );\n\t\n\t\t/**\n\t * Rest Methods\n\t * Manages URL and Rest object parsing\n\t *\n\t * @package LifterLMS/Scripts\n\t *\n\t * @since Unknown\n\t * @version Unknown\n\t */\n\t\n\tLLMS.Rest = {\n\t\n\t\t/**\n\t\t * Init\n\t\t * loads class methods\n\t\t */\n\t\tinit: function() {\n\t\t\tthis.bind();\n\t\t},\n\t\n\t\t/**\n\t\t * Bind Method\n\t\t * Handles dom binding on load\n\t\t *\n\t\t * @return {[type]} [description]\n\t\t */\n\t\tbind: function() {\n\t\t},\n\t\n\t\t/**\n\t\t * Searches for string matches in url path\n\t\t *\n\t\t * @param {Array} strings [Array of strings to search for matches]\n\t\t * @return {Boolean} [Was a match found?]\n\t\t */\n\t\tis_path: function( strings ) {\n\t\n\t\t\tvar path_exists = false,\n\t\t\t\turl = window.location.href;\n\t\n\t\t\tfor ( var i = 0; i < strings.length; i++ ) {\n\t\n\t\t\t\tif ( url.search( strings[i] ) > 0 && ! path_exists ) {\n\t\n\t\t\t\t\tpath_exists = true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn path_exists;\n\t\t},\n\t\n\t\t/**\n\t\t * Retrieves query variables\n\t\t *\n\t\t * @return {[Array]} [array object of query variable key=>value pairs]\n\t\t */\n\t\tget_query_vars: function() {\n\t\n\t\t\tvar vars = [], hash,\n\t\t\t\thashes = window.location.href.slice( window.location.href.indexOf( '?' ) + 1 ).split( '&' );\n\t\n\t\t\tfor (var i = 0; i < hashes.length; i++) {\n\t\t\t\thash = hashes[i].split( '=' );\n\t\t\t\tvars.push( hash[0] );\n\t\t\t\tvars[hash[0]] = hash[1];\n\t\t\t}\n\t\n\t\t\treturn vars;\n\t\t}\n\t\n\t};\n\t\n\n\t(()=>{\"use strict\";var t={d:(n,e)=>{for(var r in e)t.o(e,r)&&!t.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:e[r]})},o:(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r:t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})}},n={};t.r(n),t.d(n,{get:()=>d,start:()=>p,stop:()=>c});const e=\"llms-spinning\",r=\"default\",o=window.wp.i18n;function i(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r;const i=document.createElement(\"div\"),l=(0,o.__)(\"Loading…\",\"lifterlms\");return i.innerHTML=`${l} `,i.classList.add(e),t.appendChild(i),i}function l(t){if((t=\"string\"==typeof t?document.querySelectorAll(t):t)instanceof NodeList)return Array.from(t);const n=[];return t instanceof Element?n.push(t):\"undefined\"!=typeof jQuery&&t instanceof jQuery&&t.toArray().forEach((t=>n.push(t))),n}function s(t){const n=t.querySelectorAll(\".llms-spinning\");return n.length?Array.from(n).find((n=>t===n.parentNode)):null}function a(){const t=\"llms-spinner-styles\";if(!document.getElementById(t)){const n=document.createElement(\"style\");n.textContent=\"\\n\\t.llms-spinning {\\n\\t\\tbackground: rgba( 250, 250, 250, 0.7 );\\n\\t\\tbottom: 0;\\n\\t\\tdisplay: none;\\n\\t\\tleft: 0;\\n\\t\\tposition: absolute;\\n\\t\\tright: 0;\\n\\t\\ttop: 0;\\n\\t\\tz-index: 2;\\n\\t}\\n\\n\\t.llms-spinner {\\n\\t\\tanimation: llms-spinning 1.5s linear infinite;\\n\\t\\tbox-sizing: border-box;\\n\\t\\tborder: 4px solid #313131;\\n\\t\\tborder-radius: 50%;\\n\\t\\theight: 40px;\\n\\t\\tleft: 50%;\\n\\t\\tmargin-left: -20px;\\n\\t\\tmargin-top: -20px;\\n\\t\\tposition: absolute;\\n\\t\\ttop: 50%;\\n\\t\\twidth: 40px;\\n\\n\\t}\\n\\n\\t.llms-spinner.small {\\n\\t\\tborder-width: 2px;\\n\\t\\theight: 20px;\\n\\t\\tmargin-left: -10px;\\n\\t\\tmargin-top: -10px;\\n\\t\\twidth: 20px;\\n\\t}\\n\\n\\t@keyframes llms-spinning {\\n\\t\\t0% {\\n\\t\\t\\ttransform: rotate( 0deg )\\n\\t\\t}\\n\\t\\t50% {\\n\\t\\t\\tborder-radius: 5%;\\n\\t\\t}\\n\\t\\t100% {\\n\\t\\t\\ttransform: rotate( 220deg) \\n\\t\\t}\\n\\t}\\n\".replace(/\\n/g,\"\").replace(/\\t/g,\" \").replace(/\\s\\s+/g,\" \"),n.id=t,document.head.appendChild(n)}}function d(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r,e=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];a();const o=l(t);if(!o.length)return null;const d=o[0],p=s(d)||i(d,n);return e&&\"undefined\"!=typeof jQuery?jQuery(p):p}function p(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r;l(t).forEach((t=>{const e=d(t,n,!1);e&&(e.style.display=\"block\")}))}function c(t){l(t).forEach((t=>{const n=d(t,r,!1);n&&(n.style.display=\"none\")}))}window.LLMS=window.LLMS||{},window.LLMS.Spinner=n})();\n\n\t/**\n\t * Initializes all classes within the LLMS Namespace\n\t *\n\t * @since Unknown\n\t *\n\t * @return {void}\n\t */\n\tLLMS.init = function() {\n\n\t\tfor (var func in LLMS) {\n\n\t\t\tif ( typeof LLMS[func] === 'object' && LLMS[func] !== null ) {\n\n\t\t\t\tif ( LLMS[func].init !== undefined ) {\n\n\t\t\t\t\tif ( typeof LLMS[func].init === 'function') {\n\t\t\t\t\t\tLLMS[func].init();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t/**\n\t * Determine if the current device is touch-enabled\n\t *\n\t * @since 3.24.3\n\t *\n\t * @see {@link https://stackoverflow.com/a/4819886/400568}\n\t *\n\t * @return {Boolean} Whether or not the device is touch-enabled.\n\t */\n\tLLMS.is_touch_device = function() {\n\n\t\tvar prefixes = ' -webkit- -moz- -o- -ms- '.split( ' ' );\n\t\tvar mq = function( query ) {\n\t\t\treturn window.matchMedia( query ).matches;\n\t\t}\n\n\t\tif ( ( 'ontouchstart' in window ) || window.DocumentTouch && document instanceof DocumentTouch ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t/**\n\t\t * Include the 'heartz' as a way to have a non matching MQ to help terminate the join.\n\t\t *\n\t\t * @see {@link https://git.io/vznFH}\n\t\t */\n\t\tvar query = ['(', prefixes.join( 'touch-enabled),(' ), 'heartz', ')'].join( '' );\n\t\treturn mq( query );\n\n\t};\n\n\t/**\n\t * Wait for matchHeight to load\n\t *\n\t * @since 3.0.0\n\t * @since 3.16.6 Unknown.\n\t * @since 5.3.3 Pass a dependency name to `wait_for()`.\n\t *\n\t * @param {Function} cb Callback function to run when matchheight is ready.\n\t * @return {void}\n\t */\n\tLLMS.wait_for_matchHeight = function( cb ) {\n\t\tthis.wait_for( function() {\n\t\t\treturn ( undefined !== $.fn.matchHeight );\n\t\t}, cb, 'matchHeight' );\n\t}\n\n\t/**\n\t * Wait for webuiPopover to load\n\t *\n\t * @since 3.9.1\n\t * @since 3.16.6 Unknown.\n\t *\n\t * @param {Function} cb Callback function to run when matchheight is ready.\n\t * @return {void}\n\t */\n\tLLMS.wait_for_popover = function( cb ) {\n\t\tthis.wait_for( function() {\n\t\t\treturn ( undefined !== $.fn.webuiPopover );\n\t\t}, cb, 'webuiPopover' );\n\t}\n\n\t/**\n\t * Wait for a dependency to load and then run a callback once it has\n\t *\n\t * Temporary fix for a less-than-optimal assets loading function on the PHP side of things.\n\t *\n\t * @since 3.9.1\n\t * @since 5.3.3 Added optional `name` parameter.\n\t *\n\t * @param {Function} test A function that returns a truthy if the dependency is loaded.\n\t * @param {Function} cb A callback function executed once the dependency is loaded.\n\t * @param {string} name The dependency name.\n\t * @return {void}\n\t */\n\tLLMS.wait_for = function( test, cb, name ) {\n\n\t\tvar counter = 0,\n\t\t\tinterval;\n\n\t\tname = name ? name : 'unnamed';\n\n\t\tinterval = setInterval( function() {\n\n\t\t\t// If we get to 30 seconds log an error message.\n\t\t\tif ( counter >= 300 ) {\n\n\t\t\t\tconsole.log( 'Unable to load dependency: ' + name );\n\n\t\t\t\t// If we can't access yet, increment and wait...\n\t\t\t} else {\n\n\t\t\t\t// Bind the events, we're good!\n\t\t\t\tif ( test() ) {\n\t\t\t\t\tcb();\n\t\t\t\t} else {\n\t\t\t\t\t// console.log( 'Waiting for dependency: ' + name );\n\t\t\t\t\tcounter++;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tclearInterval( interval );\n\n\t\t}, 100 );\n\n\t};\n\n\tLLMS.init( $ );\n\n} )( jQuery );\n"],"sourceRoot":"../../js"}
\ No newline at end of file
diff --git a/assets/scss/_includes/_buttons.scss b/assets/scss/_includes/_buttons.scss
deleted file mode 100644
index 41911310d0..0000000000
--- a/assets/scss/_includes/_buttons.scss
+++ /dev/null
@@ -1,169 +0,0 @@
-.llms-button-action,
-.llms-button-danger,
-.llms-button-primary,
-.llms-button-secondary {
- border:none;
- border-radius: 8px;
- color: $color-white;
- cursor: pointer;
- display: inline-block;
- font-size: 18px;
- font-weight: 700;
- text-decoration: none;
- text-shadow: none;
- line-height: 1;
- margin: 0;
- max-width: 100%;
- padding: 12px 24px;
- position: relative;
- transition: all .5s ease;
-
- &:disabled {
- opacity: 0.5;
- }
- &:hover, &:active {
- color: $color-white;
- }
- &:focus {
- color: $color-white;
- }
-
- &.auto {
- width: auto;
- }
-
- &.full {
- display: block;
- text-align: center;
- width: 100%;
- }
-
- &.square {
- padding: 12px;
- }
-
- &.small {
- font-size: 13px;
- padding: 8px 14px;
- &.square { padding: 8px; }
- }
-
- &.large {
- font-size: 18px;
- line-height: 1.2;
- padding: 16px 32px;
- &.square { padding: 16px; }
- .fa {
- left: -7px;
- position: relative;
- }
- }
-
-}
-
-/* Fix for cases where link color overrides the button color */
-a.llms-button-action,
-a.llms-button-danger,
-a.llms-button-primary {
- color: $color-white;
-}
-
-.llms-button-primary {
- background: $color-brand-blue;
- &:hover,
- &.clicked {
- background: $color-brand-blue-dark;
- }
- &:focus,
- &:active {
- background: $color-brand-blue-light;
- }
-}
-
-.llms-button-secondary {
- background: #e1e1e1;
- color: $color-cinder;
- &:hover {
- color: #414141;
- background: darken( #e1e1e1, 8 );
- }
- &:focus,
- &:active {
- color: #414141;
- background: lighten( #e1e1e1, 4 );
- }
-}
-/* Fix for cases where link color overrides the button color */
-a.llms-button-secondary {
- color: $color-cinder;
-}
-
-.llms-button-action {
- background: $color-orange;
- &:hover,
- &.clicked {
- background: $color-brand-orange-dark;
- }
- &:focus,
- &:active {
- background: $color-brand-orange-light;
- }
-}
-
-.llms-button-danger {
- background: $color-danger;
- &:hover {
- background: darken( $color-danger, 8 );
- }
- &:focus,
- &:active {
- background: lighten( $color-danger, 4 );
- }
-}
-
-.llms-button-outline {
- background: transparent;
- border: 3px solid #1D2327;
- border-radius: 8px;
- color: #1D2327;
- cursor: pointer;
- font-size: 16px;
- font-weight: 700;
- text-decoration: none;
- text-shadow: none;
- line-height: 1;
- margin: 0;
- max-width: 100%;
- padding: 12px 24px;
- position: relative;
- transition: all .5s ease;
-
- &:disabled {
- opacity: 0.5;
- }
- &:hover, &:active {
- color: #1D2327;
- }
- &:focus {
- color: #1D2327;
- }
-
- &.auto {
- width: auto;
- }
-
- &.full {
- display: block;
- text-align: center;
- width: 100%;
- }
-
- &.square {
- padding: 12px;
- }
-
-}
-
-.llms-course-continue-button {
- display: inline-block;
-}
diff --git a/assets/scss/_includes/_extends.scss b/assets/scss/_includes/_extends.scss
deleted file mode 100644
index 3ff4e48156..0000000000
--- a/assets/scss/_includes/_extends.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-%cf,
-%clearfix {
- &:before,
- &:after {
- content: " ";
- display: table;
- }
-
- &:after {
- clear: both;
- }
-}
-
-
-
-%llms-element {
- background: $el-background;
- box-shadow: $el-box-shadow;
- display: block;
- color: #212121;
- min-height: 85px;
- padding: 15px;
- text-decoration: none;
- position: relative;
- transition: background .4s ease;
-
- &:hover {
- background: $el-background-hover;
- }
-}
diff --git a/assets/scss/_includes/_grid.scss b/assets/scss/_includes/_grid.scss
deleted file mode 100644
index 4306e6099d..0000000000
--- a/assets/scss/_includes/_grid.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Floated columns.
-//
-// Utilized prior to the introduction of `.llms-flex-cols`. Prefer
-// usage of flex cols for new code where possible.
-//
-.llms-cols {
- @extend %clearfix;
-
- .llms-col { width: 100%; }
-
- @media all and (min-width: 600px) {
- [class*="llms-col-"] {
- float: left;
- }
- }
-
-}
-
-//
-// Flex-box columns.
-//
-// Preferred over floated `.llms-cols` wherever possible.
-//
-.llms-flex-cols {
- display: flex;
- flex-flow: row wrap;
-
- [class*="llms-col"] {
- flex: 0 1 auto;
- width: 100%;
- }
-}
-
-@media all and (min-width: 600px) {
- .llms-cols, .llms-flex-cols {
- $cols: 1;
- @while $cols <= 12 {
- .llms-col-#{$cols} {
- width: calc( 100% / $cols );
- }
- $cols: $cols + 1;
- }
- }
-}
-
diff --git a/assets/scss/_includes/_llms-donut.scss b/assets/scss/_includes/_llms-donut.scss
deleted file mode 100644
index fb9a10f1a7..0000000000
--- a/assets/scss/_includes/_llms-donut.scss
+++ /dev/null
@@ -1,82 +0,0 @@
-.llms-donut {
-
- @include clearfix;
-
- background-color: #f1f1f1;
- background-image: none;
- border-radius: 50%;
- color: $color-brand-blue;
- height: 200px;
- overflow: hidden;
- position: relative;
- width: 200px;
-
- svg {
- overflow: visible !important;
- pointer-events: none;
- width: 100%;
- }
-
- svg path {
- fill: none;
- stroke-width: 35px;
- stroke: $color-brand-blue;
- }
-
- &.mini {
- height: 36px;
- width: 36px;
- .percentage {
- font-size: 10px;
- }
- }
- &.small {
- height: 100px;
- width: 100px;
- .percentage {
- font-size: 18px;
- }
- }
- &.medium {
- height: 130px;
- width: 130px;
- .percentage {
- font-size: 26px;
- }
- }
- &.large {
- height: 260px;
- width: 260px;
- .percentage {
- font-size: 48px;
- }
- }
-
- .inside {
- align-items: center;
- background: #fff;
- border-radius: 50%;
- box-sizing: border-box;
- display: flex;
- flex-wrap: wrap;
- height: 80%;
- justify-content: center;
- left: 50%;
- position: absolute;
- text-align: center;
- transform: translate(-50%, -50%);
- width: 80%;
- top: 50%;
- z-index: 3;
- }
-
- .percentage {
- line-height: 1.2;
- font-size: 34px;
- }
-
- .caption {
- font-size: 75%;
- }
-
-}
diff --git a/assets/scss/_includes/_llms-form-field.scss b/assets/scss/_includes/_llms-form-field.scss
deleted file mode 100644
index d6fb817cd6..0000000000
--- a/assets/scss/_includes/_llms-form-field.scss
+++ /dev/null
@@ -1,280 +0,0 @@
-.llms-form-fields {
- @extend %clearfix;
- box-sizing: border-box;
- & * {
- box-sizing: border-box;
- }
- &.flush {
- .llms-form-field {
- padding: 0 0 20px;
- }
- }
-
- label:not(.llms-field-html label) {
- font-weight: 700;
- }
-
- .wp-block-columns, .wp-block-column {
- margin-bottom: 0;
- }
-}
-
- .llms-form-heading {
- padding: 0 10px 10px;
- }
-
- .llms-form-field {
- float: left;
- padding: 0 10px 20px;
- position: relative;
- width: 100%;
-
- // Ensure "empty" labels don't break the layout.
- // See the billing_address_2 field which has no label.
- label:empty:after {
- content: '\00a0';
- }
-
- [type="text"],
- [type="password"],
- [type="email"],
- [type="url"],
- [type="tel"],
- [type="number"] {
- background-color: $color-white;
- background-clip: padding-box;
- border: 1px solid $color-grey;
- border-radius: $radius-small;
- box-sizing: border-box;
- font-size: 16px;
- line-height: 1;
- padding: 8px 12px;
- transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- width: 100%;
- }
-
- input:focus,
- input:focus-visible {
- border-color: $color-brand-blue-light;
- outline: thin solid;
- }
-
- select {
- -webkit-appearance: none;
- -moz-appearance: none;
- -ms-appearance: none;
- appearance: none;
- background-color: $color-white;
- border: 1px solid $color-grey;
- border-radius: $radius-small;
- box-sizing: border-box;
- color: $color-black;
- padding: 8px 12px;
- margin: 0;
- width: 100%;
- font-family: inherit;
- font-size: 16px;
- cursor: inherit;
- line-height: 1.6;
- z-index: 1;
- outline: none;
- background-repeat: no-repeat;
- background-image: linear-gradient(45deg, transparent 50%, currentcolor 50%), linear-gradient(135deg, currentcolor 50%, transparent 50%);
- background-position: right 15px top 1.3rem, right 10px top 1.3rem;
- background-size: 5px 5px, 5px 5px;
- }
-
- select::-ms-expand {
- display: none;
- }
-
- select:focus {
- border: 1px solid $color-brand-blue-light;
- outline: thin solid;
- }
-
- &.valid {
- input[type="date"], input[type="time"], input[type="datetime-local"], input[type="week"], input[type="month"], input[type="text"], input[type="email"], input[type="url"], input[type="password"], input[type="search"], input[type="tel"], input[type="number"], textarea, select {
- background: rgba( #83c373, .3 );
- border-color: #83c373;
- }
- }
-
- &.error,
- &.invalid {
- input[type="date"], input[type="time"], input[type="datetime-local"], input[type="week"], input[type="month"], input[type="text"], input[type="email"], input[type="url"], input[type="password"], input[type="search"], input[type="tel"], input[type="number"], textarea, select {
- background: rgba( $color-red, .3 );
- border-color: $color-red;
- }
- }
-
- &.llms-visually-hidden-field {
- display: none;
- }
-
- &.align-right {
- text-align: right;
- }
-
- @media screen and ( min-width: 600px ) {
- $i: 1;
- @while $i <= 12 {
- &.llms-cols-#{$i} {
- width: calc( $i / 12 ) * 100%;
- $i: $i + 1;
- }
- }
- }
-
- &.type-hidden { padding: 0; }
-
- &.type-radio,
- &.type-checkbox {
- input,
- label {
- display: inline-block;
- width: auto;
- }
- input {
- margin-right: 10px;
- }
- label + .llms-description {
- display: block;
- }
- }
-
- &.type-radio:not(.is-group) {
-
- input[type="radio"] {
- position: absolute;
- opacity: 0;
- visibility: none;
- }
-
- label:before {
- background: #fafafa;
- background-position: -24px 0;
- background-repeat: no-repeat;
- border-radius: 50%;
- box-shadow: hsla( 0,0%,100%,.15) 0 1px 1px, inset hsla(0,0%,0%,.35) 0 0 0 1px;
- content: '';
- cursor: pointer;
- display: inline-block;
- height: 22px;
- margin-right: 5px;
- position: relative;
- transition: background-position .15s cubic-bezier(.8, 0, 1, 1);
- top: -3px;
- vertical-align: middle;
- width: 22px;
- z-index: 2;
- }
-
- input[type="radio"]:checked + label:before {
- transition: background-position .2s .15s cubic-bezier(0, 0, .2, 1);
- background-position: 0 0;
- background-image: radial-gradient(ellipse at center, $color-brand-blue 0%,$color-brand-blue 40%, #fafafa 45%);
- }
-
- }
-
- .llms-input-group {
- margin-top: 5px;
- .llms-form-field {
- padding: 0 0 5px 5px;
- }
- }
-
- &.type-reset,
- &.type-button,
- &.type-submit {
- button:not(.auto) { width: 100%; }
- }
-
- .llms-description {
- font-size: 14px;
- font-style: italic;
- line-height: 18px;
- }
-
- .llms-required {
- color: $color-red;
- margin-left: 4px;
- }
-
- input, textarea, select {
- width: 100%;
- margin-bottom: 5px;
- }
-
- .select2-container .select2-selection--single {
- height: auto;
- padding: 4px 6px;
- }
- .select2-container--default .select2-selection--single .select2-selection__arrow {
- height: 100%;
- }
-
- }
-
-
- .llms-password-strength-meter {
- border: 1px solid #dadada;
- display: none;
- font-size: 10px;
- margin-top: -10px;
- padding: 1px;
- position: relative;
- text-align: center;
-
- &:before {
- bottom: 0;
- content: '';
- left: 0;
- position: absolute;
- top: 0;
- transition: width .4s ease;
- }
-
- &.mismatch,
- &.too-short,
- &.very-weak {
- border-color: #e35b5b;
- &:before {
- background: rgba( #e35b5b, 0.25 );
- width: 25%;
- }
- }
-
- &.too-short:before {
- width: 0;
- }
-
- &.weak {
- border-color: #f78b53;
- &:before {
- background: rgba( #f78b53, 0.25 );
- width: 50%;
- }
- }
-
- &.medium {
- border-color: #ffc733;
- &:before {
- background: rgba( #ffc733, 0.25 );
- width: 75%;
- }
- }
-
- &.strong {
- border-color: #83c373;
- &:before {
- background: rgba( #83c373, 0.25 );
- width: 100%;
- }
- }
-
- + .llms-description {
- display: block;
- }
- }
diff --git a/assets/scss/_includes/_mixins.scss b/assets/scss/_includes/_mixins.scss
deleted file mode 100644
index c4f49c316b..0000000000
--- a/assets/scss/_includes/_mixins.scss
+++ /dev/null
@@ -1,121 +0,0 @@
-
-@mixin clearfix() {
- &:before,
- &:after {
- content: " ";
- display: table;
- }
- &:after {
- clear: both;
- }
-}
-
-//
-// Positioning mixin
-//
-// @param [string] $position: position
-// @param [list] $args (()): offsets list
-//
-// @source http://hugogiraudel.com/2013/08/05/offsets-sass-mixin/
-//
-@mixin position($position, $args: ()) {
- $offsets: top right bottom left;
- position: $position;
-
- @each $offset in $offsets {
- $index: index($args, $offset);
-
- @if $index {
- @if $index == length($args) {
- #{$offset}: 0;
- }
- @else {
- $next: nth($args, $index + 1);
- @if is-valid-length($next) {
- #{$offset}: $next;
- }
- @else if index($offsets, $next) {
- #{$offset}: 0;
- }
- @else {
- @warn "Invalid value `#{$next}` for offset `#{$offset}`.";
- }
- }
- }
- }
-}
-
-//
-// Function checking if $value is a valid length
-// @param [literal] $value: value to test
-// @return [bool]
-//
-@function is-valid-length($value) {
- $r: (type-of($value) == "number" and not unitless($value)) or (index(auto initial inherit 0, $value) != null);
- @return $r;
-}
-
-//
-// Shorthands
-//
-@mixin absolute($args: ()) {
- @include position(absolute, $args);
-}
-
-@mixin fixed($args: ()) {
- @include position(fixed, $args);
-}
-
-@mixin relative($args: ()) {
- @include position(relative, $args);
-}
-
-
-
-@mixin order_status_badges() {
-
- .llms-status {
- border-radius: $radius-small;
- display: inline-block;
- font-size: 13px;
- font-weight: 700;
- line-height: 1.4;
- padding: 2px 6px;
- vertical-align: middle;
-
- &.llms-size--large {
- font-size: 105%;
- padding: 6px 12px;
- }
-
- &.llms-active,
- &.llms-completed,
- &.llms-pass, // quiz
- &.llms-txn-succeeded {
- color: $color-green;
- background-color: rgba( $color-green, .15 );
- }
-
- &.llms-fail, // quiz
- &.llms-failed,
- &.llms-expired,
- &.llms-cancelled,
- &.llms-txn-failed {
- color: $color-red;
- background-color: rgba( $color-red, .15 );
- }
-
- &.llms-incomplete, // assignment
- &.llms-on-hold,
- &.llms-pending,
- &.llms-pending-cancel,
- &.llms-refunded,
- &.llms-txn-pending,
- &.llms-txn-refunded {
- color: $color-orange;
- background-color: rgba( $color-orange, .15 );
- }
-
- }
-
-}
diff --git a/assets/scss/_includes/_quiz-result-question-list.scss b/assets/scss/_includes/_quiz-result-question-list.scss
deleted file mode 100644
index 56a5b68d38..0000000000
--- a/assets/scss/_includes/_quiz-result-question-list.scss
+++ /dev/null
@@ -1,136 +0,0 @@
-.llms-quiz-attempt-results {
- margin: 0;
- padding: 0;
- list-style-type: none;
-
- .llms-quiz-attempt-question {
- background: #efefef;
- border-radius: $radius-small;
- margin: 0 0 15px;
- position: relative;
- list-style-type: none;
- .toggle-answer {
- color: inherit;
- display: flex;
- gap: 10px;
- justify-content: space-between;
- padding: 15px 35px 15px 15px;
- text-decoration: none;
- }
-
- &.status--waiting.correct,
- &.status--waiting.incorrect {
- background: rgba( $color-orange, 0.2 );
- .llms-status-icon {
- background-color: $color-orange;
- }
- }
-
- &.status--graded.correct {
- background: rgba( $color-green, 0.15 );
- .llms-status-icon {
- background-color: $color-green;
- }
- }
- &.status--graded.incorrect {
- background: rgba( $color-red, 0.15 );
- .llms-status-icon {
- background-color: $color-red;
- }
- }
- pre {
- overflow: auto;
- }
- .llms-question-title {
- font-size: 22px;
- margin: 0;
- line-height: 1.4;
- }
-
- .llms-points {
- line-height: 1.4;
- }
-
- .llms-status-icon-tip {
- position: absolute;
- right: -12px;
- top: -2px;
- }
-
- .llms-status-icon {
- color: rgba( 255, 255, 255, 0.65 );
- border-radius: 50%;
- font-size: 30px;
- height: 40px;
- line-height: 40px;
- text-align: center;
- width: 40px;
- }
-
- .llms-quiz-attempt-question-main {
- display: none;
- padding: 0 15px 15px;
-
- .llms-quiz-results-label {
- font-weight: 700;
- margin: 0 0 10px;
- padding: 0;
- }
-
- ul.llms-quiz-attempt-answers {
- margin: 0;
- padding: 0;
- li.llms-quiz-attempt-answer {
- padding: 0;
- margin: 0 0 0 30px;
- &:only-child {
- list-style-type: none;
- margin-left: 0;
- }
- }
- }
-
- img {
- height: auto;
- max-width: 200px;
- }
-
- .llms-quiz-attempt-answer-section {
- border-top: 2px solid rgba( #fff, 0.5 );
- margin-top: 20px;
- padding-top: 20px;
- &:first-child {
- border-top: none;
- margin-top: 0;
- padding-top: 0;
- }
- }
-
- }
-
- &.type--picture_choice,
- &.type--picture_reorder {
- ul.llms-quiz-attempt-answers {
- list-style-type: none;
- margin: 0;
- padding: 0;
-
- li.llms-quiz-attempt-answer {
- display: inline-block;
- list-style-type: none;
- margin: 0;
- padding: 5px;
- }
- }
- }
-
- &.type--removed {
- .llms-question-title {
- font-style: italic;
- font-weight: normal;
- }
- opacity: .5;
- }
-
- }
-}
diff --git a/assets/scss/_includes/_tooltip.scss b/assets/scss/_includes/_tooltip.scss
deleted file mode 100644
index 4f7b39613e..0000000000
--- a/assets/scss/_includes/_tooltip.scss
+++ /dev/null
@@ -1,135 +0,0 @@
-.lifterlms, // Settings & Course Builder.
-.llms-metabox, // Some Metaboxes.
-.llms-mb-container, // Other Metaboxes.
-.llms-quiz-wrapper { // Quiz results.
-
- [data-tip],
- [data-title-default],
- [data-title-active] {
-
- $bgcolor: #444;
-
- position: relative;
-
- &.tip--top-right {
- &:before {
- bottom: 100%;
- left: -10px;
- }
- &:hover:before {
- bottom: calc( 100% + 6px );
- }
- &:after {
- border-top-color: $bgcolor;
- left: 6px;
- top: 0;
- }
- &:hover:after {
- top: -6px;
- }
- }
-
-
- &.tip--top-left {
- &:before {
- bottom: 100%;
- right: -10px;
- }
- &:hover:before {
- bottom: calc( 100% + 6px );
- }
- &:after {
- border-top-color: $bgcolor;
- right: 6px;
- top: 0;
- }
- &:hover:after {
- top: -6px;
- }
- }
-
-
-
- &.tip--bottom-left {
- &:before {
- top: 100%;
- right: -10px;
- }
- &:hover:before {
- top: calc( 100% + 6px );
- }
- &:after {
- border-bottom-color: $bgcolor;
- right: 6px;
- bottom: 0;
- }
- &:hover:after {
- bottom: -6px;
- }
- }
-
- &.tip--bottom-right {
- &:before {
- top: 100%;
- left: -10px;
- }
- &:hover:before {
- top: calc( 100% + 6px );
- }
- &:after {
- border-bottom-color: $bgcolor;
- left: 6px;
- bottom: 0;
- }
- &:hover:after {
- bottom: -6px;
- }
- }
-
- &:before {
- background: $bgcolor;
- border-radius: 4px;
- color: #fff;
- font-size: 13px;
- line-height: 1.2;
- padding: 8px;
- max-width: 300px;
- width: max-content;
- }
- &:after {
- content: '';
- border: 6px solid transparent;
- height: 0;
- width: 0;
- }
-
- &:before,
- &:after {
- opacity: 0;
- transition: all 0.2s 0.1s ease;
- position: absolute;
- pointer-events: none;
- visibility: hidden;
- }
- &:hover:before,
- &:hover:after {
- opacity: 1;
- transition: all 0 0.1s ease;
- visibility: visible;
- z-index: 99999999;
- }
-
- }
-
- [data-tip] {
- &:before {
- content: attr(data-tip);
- }
- }
- [data-tip].active {
- &:before {
- content: attr(data-tip-active);
- }
- }
-
-}
diff --git a/assets/scss/_includes/_vars-brand-colors.scss b/assets/scss/_includes/_vars-brand-colors.scss
deleted file mode 100644
index 9f4660b944..0000000000
--- a/assets/scss/_includes/_vars-brand-colors.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// LifterLMS Brand Colors
-// Currently overrides brand colors on the admin panel
-//
-
-$color-brand-blue: #466dd8;
-$color-brand-blue-dark: darken( $color-brand-blue, 8 );
-$color-brand-dark-blue: darken( $color-brand-blue, 24 );
-$color-brand-blue-light: lighten( $color-brand-blue, 8 );
-
-$color-brand-orange: #f8954f;
-$color-brand-orange-dark: #f67d28;
-$color-brand-orange-light: lighten( $color-brand-orange, 8 );
-
-$color-brand-aqua: #17bebb;
-
-$color-brand-pink: #ef476f;
-
-$color-blue: $color-brand-blue;
diff --git a/assets/scss/_includes/_vars.scss b/assets/scss/_includes/_vars.scss
deleted file mode 100644
index 9f0f440e30..0000000000
--- a/assets/scss/_includes/_vars.scss
+++ /dev/null
@@ -1,72 +0,0 @@
-// ----- LifterLMS Brand Colors ----- \\
-$color-brand-dark-blue: #243c56;
-
-$color-brand-blue: #466dd8;
-$color-brand-blue-dark: darken( $color-brand-blue, 12 ); // #0077e4
-$color-brand-blue-light: lighten( $color-brand-blue, 8 );
-
-$color-brand-orange: #f8954f;
-$color-brand-orange-dark: #f67d28;
-$color-brand-orange-light: lighten( $color-brand-orange, 8 );
-
-$color-brand-aqua: #17bebb;
-
-$color-brand-pink: #ef476f;
-
-
-
-// ----- name our versions of common colors ----- \\
-$color-black: #010101;
-$color-green: #4d8d3c;
-$color-blue: $color-brand-blue;
-$color-red: #bb231c;
-$color-white: #fefefe;
-$color-aqua: #35bbaa;
-$color-purple: #845ef7;
-$color-orange: #c05621;
-
-$color-red-hover: darken($color-red,5);
-
-
-// ----- state / action names ----- \\
-$color-success: $color-green;
-$color-danger: $color-red;
-
-
-
-
-
-
-
-
-$color-lightgrey: #ccc;
-$color-grey: #999;
-$color-darkgrey: #666;
-$color-cinder: #444;
-$color-lightblue: #33b1cb;
-$color-darkblue: #0185a3;
-
-
-
-
-
-
-
-
-
-
-
-
-$color-border: #dedede;
-
-$el-box-shadow: 0 1px 2px 0 rgba($color-black,0.4);
-$el-background: #f1f1f1;
-$el-background-hover: #eaeaea;
-
-$break-xsmall: 320px;
-$break-small: 641px;
-$break-medium: 768px;
-$break-large: 1024px;
-
-$radius-small: 6px;
-$radius-medium: 12px;
diff --git a/assets/scss/_includes/vendor/_font-awesome.scss b/assets/scss/_includes/vendor/_font-awesome.scss
deleted file mode 100644
index ee906a8196..0000000000
--- a/assets/scss/_includes/vendor/_font-awesome.scss
+++ /dev/null
@@ -1,2337 +0,0 @@
-/*!
- * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
- font-family: 'FontAwesome';
- src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
- src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-.fa {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-/* makes the font 33% larger relative to the icon container */
-.fa-lg {
- font-size: 1.33333333em;
- line-height: 0.75em;
- vertical-align: -15%;
-}
-.fa-2x {
- font-size: 2em;
-}
-.fa-3x {
- font-size: 3em;
-}
-.fa-4x {
- font-size: 4em;
-}
-.fa-5x {
- font-size: 5em;
-}
-.fa-fw {
- width: 1.28571429em;
- text-align: center;
-}
-.fa-ul {
- padding-left: 0;
- margin-left: 2.14285714em;
- list-style-type: none;
-}
-.fa-ul > li {
- position: relative;
-}
-.fa-li {
- position: absolute;
- left: -2.14285714em;
- width: 2.14285714em;
- top: 0.14285714em;
- text-align: center;
-}
-.fa-li.fa-lg {
- left: -1.85714286em;
-}
-.fa-border {
- padding: .2em .25em .15em;
- border: solid 0.08em #eeeeee;
- border-radius: .1em;
-}
-.fa-pull-left {
- float: left;
-}
-.fa-pull-right {
- float: right;
-}
-.fa.fa-pull-left {
- margin-right: .3em;
-}
-.fa.fa-pull-right {
- margin-left: .3em;
-}
-/* Deprecated as of 4.4.0 */
-.pull-right {
- float: right;
-}
-.pull-left {
- float: left;
-}
-.fa.pull-left {
- margin-right: .3em;
-}
-.fa.pull-right {
- margin-left: .3em;
-}
-.fa-spin {
- -webkit-animation: fa-spin 2s infinite linear;
- animation: fa-spin 2s infinite linear;
-}
-.fa-pulse {
- -webkit-animation: fa-spin 1s infinite steps(8);
- animation: fa-spin 1s infinite steps(8);
-}
-@-webkit-keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-.fa-rotate-90 {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
- -webkit-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- transform: rotate(90deg);
-}
-.fa-rotate-180 {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
- -webkit-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
- transform: rotate(180deg);
-}
-.fa-rotate-270 {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
- -webkit-transform: rotate(270deg);
- -ms-transform: rotate(270deg);
- transform: rotate(270deg);
-}
-.fa-flip-horizontal {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
- -webkit-transform: scale(-1, 1);
- -ms-transform: scale(-1, 1);
- transform: scale(-1, 1);
-}
-.fa-flip-vertical {
- -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
- -webkit-transform: scale(1, -1);
- -ms-transform: scale(1, -1);
- transform: scale(1, -1);
-}
-:root .fa-rotate-90,
-:root .fa-rotate-180,
-:root .fa-rotate-270,
-:root .fa-flip-horizontal,
-:root .fa-flip-vertical {
- filter: none;
-}
-.fa-stack {
- position: relative;
- display: inline-block;
- width: 2em;
- height: 2em;
- line-height: 2em;
- vertical-align: middle;
-}
-.fa-stack-1x,
-.fa-stack-2x {
- position: absolute;
- left: 0;
- width: 100%;
- text-align: center;
-}
-.fa-stack-1x {
- line-height: inherit;
-}
-.fa-stack-2x {
- font-size: 2em;
-}
-.fa-inverse {
- color: #ffffff;
-}
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
- readers do not read off random characters that represent icons */
-.fa-glass:before {
- content: "\f000";
-}
-.fa-music:before {
- content: "\f001";
-}
-.fa-search:before {
- content: "\f002";
-}
-.fa-envelope-o:before {
- content: "\f003";
-}
-.fa-heart:before {
- content: "\f004";
-}
-.fa-star:before {
- content: "\f005";
-}
-.fa-star-o:before {
- content: "\f006";
-}
-.fa-user:before {
- content: "\f007";
-}
-.fa-film:before {
- content: "\f008";
-}
-.fa-th-large:before {
- content: "\f009";
-}
-.fa-th:before {
- content: "\f00a";
-}
-.fa-th-list:before {
- content: "\f00b";
-}
-.fa-check:before {
- content: "\f00c";
-}
-.fa-remove:before,
-.fa-close:before,
-.fa-times:before {
- content: "\f00d";
-}
-.fa-search-plus:before {
- content: "\f00e";
-}
-.fa-search-minus:before {
- content: "\f010";
-}
-.fa-power-off:before {
- content: "\f011";
-}
-.fa-signal:before {
- content: "\f012";
-}
-.fa-gear:before,
-.fa-cog:before {
- content: "\f013";
-}
-.fa-trash-o:before {
- content: "\f014";
-}
-.fa-home:before {
- content: "\f015";
-}
-.fa-file-o:before {
- content: "\f016";
-}
-.fa-clock-o:before {
- content: "\f017";
-}
-.fa-road:before {
- content: "\f018";
-}
-.fa-download:before {
- content: "\f019";
-}
-.fa-arrow-circle-o-down:before {
- content: "\f01a";
-}
-.fa-arrow-circle-o-up:before {
- content: "\f01b";
-}
-.fa-inbox:before {
- content: "\f01c";
-}
-.fa-play-circle-o:before {
- content: "\f01d";
-}
-.fa-rotate-right:before,
-.fa-repeat:before {
- content: "\f01e";
-}
-.fa-refresh:before {
- content: "\f021";
-}
-.fa-list-alt:before {
- content: "\f022";
-}
-.fa-lock:before {
- content: "\f023";
-}
-.fa-flag:before {
- content: "\f024";
-}
-.fa-headphones:before {
- content: "\f025";
-}
-.fa-volume-off:before {
- content: "\f026";
-}
-.fa-volume-down:before {
- content: "\f027";
-}
-.fa-volume-up:before {
- content: "\f028";
-}
-.fa-qrcode:before {
- content: "\f029";
-}
-.fa-barcode:before {
- content: "\f02a";
-}
-.fa-tag:before {
- content: "\f02b";
-}
-.fa-tags:before {
- content: "\f02c";
-}
-.fa-book:before {
- content: "\f02d";
-}
-.fa-bookmark:before {
- content: "\f02e";
-}
-.fa-print:before {
- content: "\f02f";
-}
-.fa-camera:before {
- content: "\f030";
-}
-.fa-font:before {
- content: "\f031";
-}
-.fa-bold:before {
- content: "\f032";
-}
-.fa-italic:before {
- content: "\f033";
-}
-.fa-text-height:before {
- content: "\f034";
-}
-.fa-text-width:before {
- content: "\f035";
-}
-.fa-align-left:before {
- content: "\f036";
-}
-.fa-align-center:before {
- content: "\f037";
-}
-.fa-align-right:before {
- content: "\f038";
-}
-.fa-align-justify:before {
- content: "\f039";
-}
-.fa-list:before {
- content: "\f03a";
-}
-.fa-dedent:before,
-.fa-outdent:before {
- content: "\f03b";
-}
-.fa-indent:before {
- content: "\f03c";
-}
-.fa-video-camera:before {
- content: "\f03d";
-}
-.fa-photo:before,
-.fa-image:before,
-.fa-picture-o:before {
- content: "\f03e";
-}
-.fa-pencil:before {
- content: "\f040";
-}
-.fa-map-marker:before {
- content: "\f041";
-}
-.fa-adjust:before {
- content: "\f042";
-}
-.fa-tint:before {
- content: "\f043";
-}
-.fa-edit:before,
-.fa-pencil-square-o:before {
- content: "\f044";
-}
-.fa-share-square-o:before {
- content: "\f045";
-}
-.fa-check-square-o:before {
- content: "\f046";
-}
-.fa-arrows:before {
- content: "\f047";
-}
-.fa-step-backward:before {
- content: "\f048";
-}
-.fa-fast-backward:before {
- content: "\f049";
-}
-.fa-backward:before {
- content: "\f04a";
-}
-.fa-play:before {
- content: "\f04b";
-}
-.fa-pause:before {
- content: "\f04c";
-}
-.fa-stop:before {
- content: "\f04d";
-}
-.fa-forward:before {
- content: "\f04e";
-}
-.fa-fast-forward:before {
- content: "\f050";
-}
-.fa-step-forward:before {
- content: "\f051";
-}
-.fa-eject:before {
- content: "\f052";
-}
-.fa-chevron-left:before {
- content: "\f053";
-}
-.fa-chevron-right:before {
- content: "\f054";
-}
-.fa-plus-circle:before {
- content: "\f055";
-}
-.fa-minus-circle:before {
- content: "\f056";
-}
-.fa-times-circle:before {
- content: "\f057";
-}
-.fa-check-circle:before {
- content: "\f058";
-}
-.fa-question-circle:before {
- content: "\f059";
-}
-.fa-info-circle:before {
- content: "\f05a";
-}
-.fa-crosshairs:before {
- content: "\f05b";
-}
-.fa-times-circle-o:before {
- content: "\f05c";
-}
-.fa-check-circle-o:before {
- content: "\f05d";
-}
-.fa-ban:before {
- content: "\f05e";
-}
-.fa-arrow-left:before {
- content: "\f060";
-}
-.fa-arrow-right:before {
- content: "\f061";
-}
-.fa-arrow-up:before {
- content: "\f062";
-}
-.fa-arrow-down:before {
- content: "\f063";
-}
-.fa-mail-forward:before,
-.fa-share:before {
- content: "\f064";
-}
-.fa-expand:before {
- content: "\f065";
-}
-.fa-compress:before {
- content: "\f066";
-}
-.fa-plus:before {
- content: "\f067";
-}
-.fa-minus:before {
- content: "\f068";
-}
-.fa-asterisk:before {
- content: "\f069";
-}
-.fa-exclamation-circle:before {
- content: "\f06a";
-}
-.fa-gift:before {
- content: "\f06b";
-}
-.fa-leaf:before {
- content: "\f06c";
-}
-.fa-fire:before {
- content: "\f06d";
-}
-.fa-eye:before {
- content: "\f06e";
-}
-.fa-eye-slash:before {
- content: "\f070";
-}
-.fa-warning:before,
-.fa-exclamation-triangle:before {
- content: "\f071";
-}
-.fa-plane:before {
- content: "\f072";
-}
-.fa-calendar:before {
- content: "\f073";
-}
-.fa-random:before {
- content: "\f074";
-}
-.fa-comment:before {
- content: "\f075";
-}
-.fa-magnet:before {
- content: "\f076";
-}
-.fa-chevron-up:before {
- content: "\f077";
-}
-.fa-chevron-down:before {
- content: "\f078";
-}
-.fa-retweet:before {
- content: "\f079";
-}
-.fa-shopping-cart:before {
- content: "\f07a";
-}
-.fa-folder:before {
- content: "\f07b";
-}
-.fa-folder-open:before {
- content: "\f07c";
-}
-.fa-arrows-v:before {
- content: "\f07d";
-}
-.fa-arrows-h:before {
- content: "\f07e";
-}
-.fa-bar-chart-o:before,
-.fa-bar-chart:before {
- content: "\f080";
-}
-.fa-twitter-square:before {
- content: "\f081";
-}
-.fa-facebook-square:before {
- content: "\f082";
-}
-.fa-camera-retro:before {
- content: "\f083";
-}
-.fa-key:before {
- content: "\f084";
-}
-.fa-gears:before,
-.fa-cogs:before {
- content: "\f085";
-}
-.fa-comments:before {
- content: "\f086";
-}
-.fa-thumbs-o-up:before {
- content: "\f087";
-}
-.fa-thumbs-o-down:before {
- content: "\f088";
-}
-.fa-star-half:before {
- content: "\f089";
-}
-.fa-heart-o:before {
- content: "\f08a";
-}
-.fa-sign-out:before {
- content: "\f08b";
-}
-.fa-linkedin-square:before {
- content: "\f08c";
-}
-.fa-thumb-tack:before {
- content: "\f08d";
-}
-.fa-external-link:before {
- content: "\f08e";
-}
-.fa-sign-in:before {
- content: "\f090";
-}
-.fa-trophy:before {
- content: "\f091";
-}
-.fa-github-square:before {
- content: "\f092";
-}
-.fa-upload:before {
- content: "\f093";
-}
-.fa-lemon-o:before {
- content: "\f094";
-}
-.fa-phone:before {
- content: "\f095";
-}
-.fa-square-o:before {
- content: "\f096";
-}
-.fa-bookmark-o:before {
- content: "\f097";
-}
-.fa-phone-square:before {
- content: "\f098";
-}
-.fa-twitter:before {
- content: "\f099";
-}
-.fa-facebook-f:before,
-.fa-facebook:before {
- content: "\f09a";
-}
-.fa-github:before {
- content: "\f09b";
-}
-.fa-unlock:before {
- content: "\f09c";
-}
-.fa-credit-card:before {
- content: "\f09d";
-}
-.fa-feed:before,
-.fa-rss:before {
- content: "\f09e";
-}
-.fa-hdd-o:before {
- content: "\f0a0";
-}
-.fa-bullhorn:before {
- content: "\f0a1";
-}
-.fa-bell:before {
- content: "\f0f3";
-}
-.fa-certificate:before {
- content: "\f0a3";
-}
-.fa-hand-o-right:before {
- content: "\f0a4";
-}
-.fa-hand-o-left:before {
- content: "\f0a5";
-}
-.fa-hand-o-up:before {
- content: "\f0a6";
-}
-.fa-hand-o-down:before {
- content: "\f0a7";
-}
-.fa-arrow-circle-left:before {
- content: "\f0a8";
-}
-.fa-arrow-circle-right:before {
- content: "\f0a9";
-}
-.fa-arrow-circle-up:before {
- content: "\f0aa";
-}
-.fa-arrow-circle-down:before {
- content: "\f0ab";
-}
-.fa-globe:before {
- content: "\f0ac";
-}
-.fa-wrench:before {
- content: "\f0ad";
-}
-.fa-tasks:before {
- content: "\f0ae";
-}
-.fa-filter:before {
- content: "\f0b0";
-}
-.fa-briefcase:before {
- content: "\f0b1";
-}
-.fa-arrows-alt:before {
- content: "\f0b2";
-}
-.fa-group:before,
-.fa-users:before {
- content: "\f0c0";
-}
-.fa-chain:before,
-.fa-link:before {
- content: "\f0c1";
-}
-.fa-cloud:before {
- content: "\f0c2";
-}
-.fa-flask:before {
- content: "\f0c3";
-}
-.fa-cut:before,
-.fa-scissors:before {
- content: "\f0c4";
-}
-.fa-copy:before,
-.fa-files-o:before {
- content: "\f0c5";
-}
-.fa-paperclip:before {
- content: "\f0c6";
-}
-.fa-save:before,
-.fa-floppy-o:before {
- content: "\f0c7";
-}
-.fa-square:before {
- content: "\f0c8";
-}
-.fa-navicon:before,
-.fa-reorder:before,
-.fa-bars:before {
- content: "\f0c9";
-}
-.fa-list-ul:before {
- content: "\f0ca";
-}
-.fa-list-ol:before {
- content: "\f0cb";
-}
-.fa-strikethrough:before {
- content: "\f0cc";
-}
-.fa-underline:before {
- content: "\f0cd";
-}
-.fa-table:before {
- content: "\f0ce";
-}
-.fa-magic:before {
- content: "\f0d0";
-}
-.fa-truck:before {
- content: "\f0d1";
-}
-.fa-pinterest:before {
- content: "\f0d2";
-}
-.fa-pinterest-square:before {
- content: "\f0d3";
-}
-.fa-google-plus-square:before {
- content: "\f0d4";
-}
-.fa-google-plus:before {
- content: "\f0d5";
-}
-.fa-money:before {
- content: "\f0d6";
-}
-.fa-caret-down:before {
- content: "\f0d7";
-}
-.fa-caret-up:before {
- content: "\f0d8";
-}
-.fa-caret-left:before {
- content: "\f0d9";
-}
-.fa-caret-right:before {
- content: "\f0da";
-}
-.fa-columns:before {
- content: "\f0db";
-}
-.fa-unsorted:before,
-.fa-sort:before {
- content: "\f0dc";
-}
-.fa-sort-down:before,
-.fa-sort-desc:before {
- content: "\f0dd";
-}
-.fa-sort-up:before,
-.fa-sort-asc:before {
- content: "\f0de";
-}
-.fa-envelope:before {
- content: "\f0e0";
-}
-.fa-linkedin:before {
- content: "\f0e1";
-}
-.fa-rotate-left:before,
-.fa-undo:before {
- content: "\f0e2";
-}
-.fa-legal:before,
-.fa-gavel:before {
- content: "\f0e3";
-}
-.fa-dashboard:before,
-.fa-tachometer:before {
- content: "\f0e4";
-}
-.fa-comment-o:before {
- content: "\f0e5";
-}
-.fa-comments-o:before {
- content: "\f0e6";
-}
-.fa-flash:before,
-.fa-bolt:before {
- content: "\f0e7";
-}
-.fa-sitemap:before {
- content: "\f0e8";
-}
-.fa-umbrella:before {
- content: "\f0e9";
-}
-.fa-paste:before,
-.fa-clipboard:before {
- content: "\f0ea";
-}
-.fa-lightbulb-o:before {
- content: "\f0eb";
-}
-.fa-exchange:before {
- content: "\f0ec";
-}
-.fa-cloud-download:before {
- content: "\f0ed";
-}
-.fa-cloud-upload:before {
- content: "\f0ee";
-}
-.fa-user-md:before {
- content: "\f0f0";
-}
-.fa-stethoscope:before {
- content: "\f0f1";
-}
-.fa-suitcase:before {
- content: "\f0f2";
-}
-.fa-bell-o:before {
- content: "\f0a2";
-}
-.fa-coffee:before {
- content: "\f0f4";
-}
-.fa-cutlery:before {
- content: "\f0f5";
-}
-.fa-file-text-o:before {
- content: "\f0f6";
-}
-.fa-building-o:before {
- content: "\f0f7";
-}
-.fa-hospital-o:before {
- content: "\f0f8";
-}
-.fa-ambulance:before {
- content: "\f0f9";
-}
-.fa-medkit:before {
- content: "\f0fa";
-}
-.fa-fighter-jet:before {
- content: "\f0fb";
-}
-.fa-beer:before {
- content: "\f0fc";
-}
-.fa-h-square:before {
- content: "\f0fd";
-}
-.fa-plus-square:before {
- content: "\f0fe";
-}
-.fa-angle-double-left:before {
- content: "\f100";
-}
-.fa-angle-double-right:before {
- content: "\f101";
-}
-.fa-angle-double-up:before {
- content: "\f102";
-}
-.fa-angle-double-down:before {
- content: "\f103";
-}
-.fa-angle-left:before {
- content: "\f104";
-}
-.fa-angle-right:before {
- content: "\f105";
-}
-.fa-angle-up:before {
- content: "\f106";
-}
-.fa-angle-down:before {
- content: "\f107";
-}
-.fa-desktop:before {
- content: "\f108";
-}
-.fa-laptop:before {
- content: "\f109";
-}
-.fa-tablet:before {
- content: "\f10a";
-}
-.fa-mobile-phone:before,
-.fa-mobile:before {
- content: "\f10b";
-}
-.fa-circle-o:before {
- content: "\f10c";
-}
-.fa-quote-left:before {
- content: "\f10d";
-}
-.fa-quote-right:before {
- content: "\f10e";
-}
-.fa-spinner:before {
- content: "\f110";
-}
-.fa-circle:before {
- content: "\f111";
-}
-.fa-mail-reply:before,
-.fa-reply:before {
- content: "\f112";
-}
-.fa-github-alt:before {
- content: "\f113";
-}
-.fa-folder-o:before {
- content: "\f114";
-}
-.fa-folder-open-o:before {
- content: "\f115";
-}
-.fa-smile-o:before {
- content: "\f118";
-}
-.fa-frown-o:before {
- content: "\f119";
-}
-.fa-meh-o:before {
- content: "\f11a";
-}
-.fa-gamepad:before {
- content: "\f11b";
-}
-.fa-keyboard-o:before {
- content: "\f11c";
-}
-.fa-flag-o:before {
- content: "\f11d";
-}
-.fa-flag-checkered:before {
- content: "\f11e";
-}
-.fa-terminal:before {
- content: "\f120";
-}
-.fa-code:before {
- content: "\f121";
-}
-.fa-mail-reply-all:before,
-.fa-reply-all:before {
- content: "\f122";
-}
-.fa-star-half-empty:before,
-.fa-star-half-full:before,
-.fa-star-half-o:before {
- content: "\f123";
-}
-.fa-location-arrow:before {
- content: "\f124";
-}
-.fa-crop:before {
- content: "\f125";
-}
-.fa-code-fork:before {
- content: "\f126";
-}
-.fa-unlink:before,
-.fa-chain-broken:before {
- content: "\f127";
-}
-.fa-question:before {
- content: "\f128";
-}
-.fa-info:before {
- content: "\f129";
-}
-.fa-exclamation:before {
- content: "\f12a";
-}
-.fa-superscript:before {
- content: "\f12b";
-}
-.fa-subscript:before {
- content: "\f12c";
-}
-.fa-eraser:before {
- content: "\f12d";
-}
-.fa-puzzle-piece:before {
- content: "\f12e";
-}
-.fa-microphone:before {
- content: "\f130";
-}
-.fa-microphone-slash:before {
- content: "\f131";
-}
-.fa-shield:before {
- content: "\f132";
-}
-.fa-calendar-o:before {
- content: "\f133";
-}
-.fa-fire-extinguisher:before {
- content: "\f134";
-}
-.fa-rocket:before {
- content: "\f135";
-}
-.fa-maxcdn:before {
- content: "\f136";
-}
-.fa-chevron-circle-left:before {
- content: "\f137";
-}
-.fa-chevron-circle-right:before {
- content: "\f138";
-}
-.fa-chevron-circle-up:before {
- content: "\f139";
-}
-.fa-chevron-circle-down:before {
- content: "\f13a";
-}
-.fa-html5:before {
- content: "\f13b";
-}
-.fa-css3:before {
- content: "\f13c";
-}
-.fa-anchor:before {
- content: "\f13d";
-}
-.fa-unlock-alt:before {
- content: "\f13e";
-}
-.fa-bullseye:before {
- content: "\f140";
-}
-.fa-ellipsis-h:before {
- content: "\f141";
-}
-.fa-ellipsis-v:before {
- content: "\f142";
-}
-.fa-rss-square:before {
- content: "\f143";
-}
-.fa-play-circle:before {
- content: "\f144";
-}
-.fa-ticket:before {
- content: "\f145";
-}
-.fa-minus-square:before {
- content: "\f146";
-}
-.fa-minus-square-o:before {
- content: "\f147";
-}
-.fa-level-up:before {
- content: "\f148";
-}
-.fa-level-down:before {
- content: "\f149";
-}
-.fa-check-square:before {
- content: "\f14a";
-}
-.fa-pencil-square:before {
- content: "\f14b";
-}
-.fa-external-link-square:before {
- content: "\f14c";
-}
-.fa-share-square:before {
- content: "\f14d";
-}
-.fa-compass:before {
- content: "\f14e";
-}
-.fa-toggle-down:before,
-.fa-caret-square-o-down:before {
- content: "\f150";
-}
-.fa-toggle-up:before,
-.fa-caret-square-o-up:before {
- content: "\f151";
-}
-.fa-toggle-right:before,
-.fa-caret-square-o-right:before {
- content: "\f152";
-}
-.fa-euro:before,
-.fa-eur:before {
- content: "\f153";
-}
-.fa-gbp:before {
- content: "\f154";
-}
-.fa-dollar:before,
-.fa-usd:before {
- content: "\f155";
-}
-.fa-rupee:before,
-.fa-inr:before {
- content: "\f156";
-}
-.fa-cny:before,
-.fa-rmb:before,
-.fa-yen:before,
-.fa-jpy:before {
- content: "\f157";
-}
-.fa-ruble:before,
-.fa-rouble:before,
-.fa-rub:before {
- content: "\f158";
-}
-.fa-won:before,
-.fa-krw:before {
- content: "\f159";
-}
-.fa-bitcoin:before,
-.fa-btc:before {
- content: "\f15a";
-}
-.fa-file:before {
- content: "\f15b";
-}
-.fa-file-text:before {
- content: "\f15c";
-}
-.fa-sort-alpha-asc:before {
- content: "\f15d";
-}
-.fa-sort-alpha-desc:before {
- content: "\f15e";
-}
-.fa-sort-amount-asc:before {
- content: "\f160";
-}
-.fa-sort-amount-desc:before {
- content: "\f161";
-}
-.fa-sort-numeric-asc:before {
- content: "\f162";
-}
-.fa-sort-numeric-desc:before {
- content: "\f163";
-}
-.fa-thumbs-up:before {
- content: "\f164";
-}
-.fa-thumbs-down:before {
- content: "\f165";
-}
-.fa-youtube-square:before {
- content: "\f166";
-}
-.fa-youtube:before {
- content: "\f167";
-}
-.fa-xing:before {
- content: "\f168";
-}
-.fa-xing-square:before {
- content: "\f169";
-}
-.fa-youtube-play:before {
- content: "\f16a";
-}
-.fa-dropbox:before {
- content: "\f16b";
-}
-.fa-stack-overflow:before {
- content: "\f16c";
-}
-.fa-instagram:before {
- content: "\f16d";
-}
-.fa-flickr:before {
- content: "\f16e";
-}
-.fa-adn:before {
- content: "\f170";
-}
-.fa-bitbucket:before {
- content: "\f171";
-}
-.fa-bitbucket-square:before {
- content: "\f172";
-}
-.fa-tumblr:before {
- content: "\f173";
-}
-.fa-tumblr-square:before {
- content: "\f174";
-}
-.fa-long-arrow-down:before {
- content: "\f175";
-}
-.fa-long-arrow-up:before {
- content: "\f176";
-}
-.fa-long-arrow-left:before {
- content: "\f177";
-}
-.fa-long-arrow-right:before {
- content: "\f178";
-}
-.fa-apple:before {
- content: "\f179";
-}
-.fa-windows:before {
- content: "\f17a";
-}
-.fa-android:before {
- content: "\f17b";
-}
-.fa-linux:before {
- content: "\f17c";
-}
-.fa-dribbble:before {
- content: "\f17d";
-}
-.fa-skype:before {
- content: "\f17e";
-}
-.fa-foursquare:before {
- content: "\f180";
-}
-.fa-trello:before {
- content: "\f181";
-}
-.fa-female:before {
- content: "\f182";
-}
-.fa-male:before {
- content: "\f183";
-}
-.fa-gittip:before,
-.fa-gratipay:before {
- content: "\f184";
-}
-.fa-sun-o:before {
- content: "\f185";
-}
-.fa-moon-o:before {
- content: "\f186";
-}
-.fa-archive:before {
- content: "\f187";
-}
-.fa-bug:before {
- content: "\f188";
-}
-.fa-vk:before {
- content: "\f189";
-}
-.fa-weibo:before {
- content: "\f18a";
-}
-.fa-renren:before {
- content: "\f18b";
-}
-.fa-pagelines:before {
- content: "\f18c";
-}
-.fa-stack-exchange:before {
- content: "\f18d";
-}
-.fa-arrow-circle-o-right:before {
- content: "\f18e";
-}
-.fa-arrow-circle-o-left:before {
- content: "\f190";
-}
-.fa-toggle-left:before,
-.fa-caret-square-o-left:before {
- content: "\f191";
-}
-.fa-dot-circle-o:before {
- content: "\f192";
-}
-.fa-wheelchair:before {
- content: "\f193";
-}
-.fa-vimeo-square:before {
- content: "\f194";
-}
-.fa-turkish-lira:before,
-.fa-try:before {
- content: "\f195";
-}
-.fa-plus-square-o:before {
- content: "\f196";
-}
-.fa-space-shuttle:before {
- content: "\f197";
-}
-.fa-slack:before {
- content: "\f198";
-}
-.fa-envelope-square:before {
- content: "\f199";
-}
-.fa-wordpress:before {
- content: "\f19a";
-}
-.fa-openid:before {
- content: "\f19b";
-}
-.fa-institution:before,
-.fa-bank:before,
-.fa-university:before {
- content: "\f19c";
-}
-.fa-mortar-board:before,
-.fa-graduation-cap:before {
- content: "\f19d";
-}
-.fa-yahoo:before {
- content: "\f19e";
-}
-.fa-google:before {
- content: "\f1a0";
-}
-.fa-reddit:before {
- content: "\f1a1";
-}
-.fa-reddit-square:before {
- content: "\f1a2";
-}
-.fa-stumbleupon-circle:before {
- content: "\f1a3";
-}
-.fa-stumbleupon:before {
- content: "\f1a4";
-}
-.fa-delicious:before {
- content: "\f1a5";
-}
-.fa-digg:before {
- content: "\f1a6";
-}
-.fa-pied-piper-pp:before {
- content: "\f1a7";
-}
-.fa-pied-piper-alt:before {
- content: "\f1a8";
-}
-.fa-drupal:before {
- content: "\f1a9";
-}
-.fa-joomla:before {
- content: "\f1aa";
-}
-.fa-language:before {
- content: "\f1ab";
-}
-.fa-fax:before {
- content: "\f1ac";
-}
-.fa-building:before {
- content: "\f1ad";
-}
-.fa-child:before {
- content: "\f1ae";
-}
-.fa-paw:before {
- content: "\f1b0";
-}
-.fa-spoon:before {
- content: "\f1b1";
-}
-.fa-cube:before {
- content: "\f1b2";
-}
-.fa-cubes:before {
- content: "\f1b3";
-}
-.fa-behance:before {
- content: "\f1b4";
-}
-.fa-behance-square:before {
- content: "\f1b5";
-}
-.fa-steam:before {
- content: "\f1b6";
-}
-.fa-steam-square:before {
- content: "\f1b7";
-}
-.fa-recycle:before {
- content: "\f1b8";
-}
-.fa-automobile:before,
-.fa-car:before {
- content: "\f1b9";
-}
-.fa-cab:before,
-.fa-taxi:before {
- content: "\f1ba";
-}
-.fa-tree:before {
- content: "\f1bb";
-}
-.fa-spotify:before {
- content: "\f1bc";
-}
-.fa-deviantart:before {
- content: "\f1bd";
-}
-.fa-soundcloud:before {
- content: "\f1be";
-}
-.fa-database:before {
- content: "\f1c0";
-}
-.fa-file-pdf-o:before {
- content: "\f1c1";
-}
-.fa-file-word-o:before {
- content: "\f1c2";
-}
-.fa-file-excel-o:before {
- content: "\f1c3";
-}
-.fa-file-powerpoint-o:before {
- content: "\f1c4";
-}
-.fa-file-photo-o:before,
-.fa-file-picture-o:before,
-.fa-file-image-o:before {
- content: "\f1c5";
-}
-.fa-file-zip-o:before,
-.fa-file-archive-o:before {
- content: "\f1c6";
-}
-.fa-file-sound-o:before,
-.fa-file-audio-o:before {
- content: "\f1c7";
-}
-.fa-file-movie-o:before,
-.fa-file-video-o:before {
- content: "\f1c8";
-}
-.fa-file-code-o:before {
- content: "\f1c9";
-}
-.fa-vine:before {
- content: "\f1ca";
-}
-.fa-codepen:before {
- content: "\f1cb";
-}
-.fa-jsfiddle:before {
- content: "\f1cc";
-}
-.fa-life-bouy:before,
-.fa-life-buoy:before,
-.fa-life-saver:before,
-.fa-support:before,
-.fa-life-ring:before {
- content: "\f1cd";
-}
-.fa-circle-o-notch:before {
- content: "\f1ce";
-}
-.fa-ra:before,
-.fa-resistance:before,
-.fa-rebel:before {
- content: "\f1d0";
-}
-.fa-ge:before,
-.fa-empire:before {
- content: "\f1d1";
-}
-.fa-git-square:before {
- content: "\f1d2";
-}
-.fa-git:before {
- content: "\f1d3";
-}
-.fa-y-combinator-square:before,
-.fa-yc-square:before,
-.fa-hacker-news:before {
- content: "\f1d4";
-}
-.fa-tencent-weibo:before {
- content: "\f1d5";
-}
-.fa-qq:before {
- content: "\f1d6";
-}
-.fa-wechat:before,
-.fa-weixin:before {
- content: "\f1d7";
-}
-.fa-send:before,
-.fa-paper-plane:before {
- content: "\f1d8";
-}
-.fa-send-o:before,
-.fa-paper-plane-o:before {
- content: "\f1d9";
-}
-.fa-history:before {
- content: "\f1da";
-}
-.fa-circle-thin:before {
- content: "\f1db";
-}
-.fa-header:before {
- content: "\f1dc";
-}
-.fa-paragraph:before {
- content: "\f1dd";
-}
-.fa-sliders:before {
- content: "\f1de";
-}
-.fa-share-alt:before {
- content: "\f1e0";
-}
-.fa-share-alt-square:before {
- content: "\f1e1";
-}
-.fa-bomb:before {
- content: "\f1e2";
-}
-.fa-soccer-ball-o:before,
-.fa-futbol-o:before {
- content: "\f1e3";
-}
-.fa-tty:before {
- content: "\f1e4";
-}
-.fa-binoculars:before {
- content: "\f1e5";
-}
-.fa-plug:before {
- content: "\f1e6";
-}
-.fa-slideshare:before {
- content: "\f1e7";
-}
-.fa-twitch:before {
- content: "\f1e8";
-}
-.fa-yelp:before {
- content: "\f1e9";
-}
-.fa-newspaper-o:before {
- content: "\f1ea";
-}
-.fa-wifi:before {
- content: "\f1eb";
-}
-.fa-calculator:before {
- content: "\f1ec";
-}
-.fa-paypal:before {
- content: "\f1ed";
-}
-.fa-google-wallet:before {
- content: "\f1ee";
-}
-.fa-cc-visa:before {
- content: "\f1f0";
-}
-.fa-cc-mastercard:before {
- content: "\f1f1";
-}
-.fa-cc-discover:before {
- content: "\f1f2";
-}
-.fa-cc-amex:before {
- content: "\f1f3";
-}
-.fa-cc-paypal:before {
- content: "\f1f4";
-}
-.fa-cc-stripe:before {
- content: "\f1f5";
-}
-.fa-bell-slash:before {
- content: "\f1f6";
-}
-.fa-bell-slash-o:before {
- content: "\f1f7";
-}
-.fa-trash:before {
- content: "\f1f8";
-}
-.fa-copyright:before {
- content: "\f1f9";
-}
-.fa-at:before {
- content: "\f1fa";
-}
-.fa-eyedropper:before {
- content: "\f1fb";
-}
-.fa-paint-brush:before {
- content: "\f1fc";
-}
-.fa-birthday-cake:before {
- content: "\f1fd";
-}
-.fa-area-chart:before {
- content: "\f1fe";
-}
-.fa-pie-chart:before {
- content: "\f200";
-}
-.fa-line-chart:before {
- content: "\f201";
-}
-.fa-lastfm:before {
- content: "\f202";
-}
-.fa-lastfm-square:before {
- content: "\f203";
-}
-.fa-toggle-off:before {
- content: "\f204";
-}
-.fa-toggle-on:before {
- content: "\f205";
-}
-.fa-bicycle:before {
- content: "\f206";
-}
-.fa-bus:before {
- content: "\f207";
-}
-.fa-ioxhost:before {
- content: "\f208";
-}
-.fa-angellist:before {
- content: "\f209";
-}
-.fa-cc:before {
- content: "\f20a";
-}
-.fa-shekel:before,
-.fa-sheqel:before,
-.fa-ils:before {
- content: "\f20b";
-}
-.fa-meanpath:before {
- content: "\f20c";
-}
-.fa-buysellads:before {
- content: "\f20d";
-}
-.fa-connectdevelop:before {
- content: "\f20e";
-}
-.fa-dashcube:before {
- content: "\f210";
-}
-.fa-forumbee:before {
- content: "\f211";
-}
-.fa-leanpub:before {
- content: "\f212";
-}
-.fa-sellsy:before {
- content: "\f213";
-}
-.fa-shirtsinbulk:before {
- content: "\f214";
-}
-.fa-simplybuilt:before {
- content: "\f215";
-}
-.fa-skyatlas:before {
- content: "\f216";
-}
-.fa-cart-plus:before {
- content: "\f217";
-}
-.fa-cart-arrow-down:before {
- content: "\f218";
-}
-.fa-diamond:before {
- content: "\f219";
-}
-.fa-ship:before {
- content: "\f21a";
-}
-.fa-user-secret:before {
- content: "\f21b";
-}
-.fa-motorcycle:before {
- content: "\f21c";
-}
-.fa-street-view:before {
- content: "\f21d";
-}
-.fa-heartbeat:before {
- content: "\f21e";
-}
-.fa-venus:before {
- content: "\f221";
-}
-.fa-mars:before {
- content: "\f222";
-}
-.fa-mercury:before {
- content: "\f223";
-}
-.fa-intersex:before,
-.fa-transgender:before {
- content: "\f224";
-}
-.fa-transgender-alt:before {
- content: "\f225";
-}
-.fa-venus-double:before {
- content: "\f226";
-}
-.fa-mars-double:before {
- content: "\f227";
-}
-.fa-venus-mars:before {
- content: "\f228";
-}
-.fa-mars-stroke:before {
- content: "\f229";
-}
-.fa-mars-stroke-v:before {
- content: "\f22a";
-}
-.fa-mars-stroke-h:before {
- content: "\f22b";
-}
-.fa-neuter:before {
- content: "\f22c";
-}
-.fa-genderless:before {
- content: "\f22d";
-}
-.fa-facebook-official:before {
- content: "\f230";
-}
-.fa-pinterest-p:before {
- content: "\f231";
-}
-.fa-whatsapp:before {
- content: "\f232";
-}
-.fa-server:before {
- content: "\f233";
-}
-.fa-user-plus:before {
- content: "\f234";
-}
-.fa-user-times:before {
- content: "\f235";
-}
-.fa-hotel:before,
-.fa-bed:before {
- content: "\f236";
-}
-.fa-viacoin:before {
- content: "\f237";
-}
-.fa-train:before {
- content: "\f238";
-}
-.fa-subway:before {
- content: "\f239";
-}
-.fa-medium:before {
- content: "\f23a";
-}
-.fa-yc:before,
-.fa-y-combinator:before {
- content: "\f23b";
-}
-.fa-optin-monster:before {
- content: "\f23c";
-}
-.fa-opencart:before {
- content: "\f23d";
-}
-.fa-expeditedssl:before {
- content: "\f23e";
-}
-.fa-battery-4:before,
-.fa-battery:before,
-.fa-battery-full:before {
- content: "\f240";
-}
-.fa-battery-3:before,
-.fa-battery-three-quarters:before {
- content: "\f241";
-}
-.fa-battery-2:before,
-.fa-battery-half:before {
- content: "\f242";
-}
-.fa-battery-1:before,
-.fa-battery-quarter:before {
- content: "\f243";
-}
-.fa-battery-0:before,
-.fa-battery-empty:before {
- content: "\f244";
-}
-.fa-mouse-pointer:before {
- content: "\f245";
-}
-.fa-i-cursor:before {
- content: "\f246";
-}
-.fa-object-group:before {
- content: "\f247";
-}
-.fa-object-ungroup:before {
- content: "\f248";
-}
-.fa-sticky-note:before {
- content: "\f249";
-}
-.fa-sticky-note-o:before {
- content: "\f24a";
-}
-.fa-cc-jcb:before {
- content: "\f24b";
-}
-.fa-cc-diners-club:before {
- content: "\f24c";
-}
-.fa-clone:before {
- content: "\f24d";
-}
-.fa-balance-scale:before {
- content: "\f24e";
-}
-.fa-hourglass-o:before {
- content: "\f250";
-}
-.fa-hourglass-1:before,
-.fa-hourglass-start:before {
- content: "\f251";
-}
-.fa-hourglass-2:before,
-.fa-hourglass-half:before {
- content: "\f252";
-}
-.fa-hourglass-3:before,
-.fa-hourglass-end:before {
- content: "\f253";
-}
-.fa-hourglass:before {
- content: "\f254";
-}
-.fa-hand-grab-o:before,
-.fa-hand-rock-o:before {
- content: "\f255";
-}
-.fa-hand-stop-o:before,
-.fa-hand-paper-o:before {
- content: "\f256";
-}
-.fa-hand-scissors-o:before {
- content: "\f257";
-}
-.fa-hand-lizard-o:before {
- content: "\f258";
-}
-.fa-hand-spock-o:before {
- content: "\f259";
-}
-.fa-hand-pointer-o:before {
- content: "\f25a";
-}
-.fa-hand-peace-o:before {
- content: "\f25b";
-}
-.fa-trademark:before {
- content: "\f25c";
-}
-.fa-registered:before {
- content: "\f25d";
-}
-.fa-creative-commons:before {
- content: "\f25e";
-}
-.fa-gg:before {
- content: "\f260";
-}
-.fa-gg-circle:before {
- content: "\f261";
-}
-.fa-tripadvisor:before {
- content: "\f262";
-}
-.fa-odnoklassniki:before {
- content: "\f263";
-}
-.fa-odnoklassniki-square:before {
- content: "\f264";
-}
-.fa-get-pocket:before {
- content: "\f265";
-}
-.fa-wikipedia-w:before {
- content: "\f266";
-}
-.fa-safari:before {
- content: "\f267";
-}
-.fa-chrome:before {
- content: "\f268";
-}
-.fa-firefox:before {
- content: "\f269";
-}
-.fa-opera:before {
- content: "\f26a";
-}
-.fa-internet-explorer:before {
- content: "\f26b";
-}
-.fa-tv:before,
-.fa-television:before {
- content: "\f26c";
-}
-.fa-contao:before {
- content: "\f26d";
-}
-.fa-500px:before {
- content: "\f26e";
-}
-.fa-amazon:before {
- content: "\f270";
-}
-.fa-calendar-plus-o:before {
- content: "\f271";
-}
-.fa-calendar-minus-o:before {
- content: "\f272";
-}
-.fa-calendar-times-o:before {
- content: "\f273";
-}
-.fa-calendar-check-o:before {
- content: "\f274";
-}
-.fa-industry:before {
- content: "\f275";
-}
-.fa-map-pin:before {
- content: "\f276";
-}
-.fa-map-signs:before {
- content: "\f277";
-}
-.fa-map-o:before {
- content: "\f278";
-}
-.fa-map:before {
- content: "\f279";
-}
-.fa-commenting:before {
- content: "\f27a";
-}
-.fa-commenting-o:before {
- content: "\f27b";
-}
-.fa-houzz:before {
- content: "\f27c";
-}
-.fa-vimeo:before {
- content: "\f27d";
-}
-.fa-black-tie:before {
- content: "\f27e";
-}
-.fa-fonticons:before {
- content: "\f280";
-}
-.fa-reddit-alien:before {
- content: "\f281";
-}
-.fa-edge:before {
- content: "\f282";
-}
-.fa-credit-card-alt:before {
- content: "\f283";
-}
-.fa-codiepie:before {
- content: "\f284";
-}
-.fa-modx:before {
- content: "\f285";
-}
-.fa-fort-awesome:before {
- content: "\f286";
-}
-.fa-usb:before {
- content: "\f287";
-}
-.fa-product-hunt:before {
- content: "\f288";
-}
-.fa-mixcloud:before {
- content: "\f289";
-}
-.fa-scribd:before {
- content: "\f28a";
-}
-.fa-pause-circle:before {
- content: "\f28b";
-}
-.fa-pause-circle-o:before {
- content: "\f28c";
-}
-.fa-stop-circle:before {
- content: "\f28d";
-}
-.fa-stop-circle-o:before {
- content: "\f28e";
-}
-.fa-shopping-bag:before {
- content: "\f290";
-}
-.fa-shopping-basket:before {
- content: "\f291";
-}
-.fa-hashtag:before {
- content: "\f292";
-}
-.fa-bluetooth:before {
- content: "\f293";
-}
-.fa-bluetooth-b:before {
- content: "\f294";
-}
-.fa-percent:before {
- content: "\f295";
-}
-.fa-gitlab:before {
- content: "\f296";
-}
-.fa-wpbeginner:before {
- content: "\f297";
-}
-.fa-wpforms:before {
- content: "\f298";
-}
-.fa-envira:before {
- content: "\f299";
-}
-.fa-universal-access:before {
- content: "\f29a";
-}
-.fa-wheelchair-alt:before {
- content: "\f29b";
-}
-.fa-question-circle-o:before {
- content: "\f29c";
-}
-.fa-blind:before {
- content: "\f29d";
-}
-.fa-audio-description:before {
- content: "\f29e";
-}
-.fa-volume-control-phone:before {
- content: "\f2a0";
-}
-.fa-braille:before {
- content: "\f2a1";
-}
-.fa-assistive-listening-systems:before {
- content: "\f2a2";
-}
-.fa-asl-interpreting:before,
-.fa-american-sign-language-interpreting:before {
- content: "\f2a3";
-}
-.fa-deafness:before,
-.fa-hard-of-hearing:before,
-.fa-deaf:before {
- content: "\f2a4";
-}
-.fa-glide:before {
- content: "\f2a5";
-}
-.fa-glide-g:before {
- content: "\f2a6";
-}
-.fa-signing:before,
-.fa-sign-language:before {
- content: "\f2a7";
-}
-.fa-low-vision:before {
- content: "\f2a8";
-}
-.fa-viadeo:before {
- content: "\f2a9";
-}
-.fa-viadeo-square:before {
- content: "\f2aa";
-}
-.fa-snapchat:before {
- content: "\f2ab";
-}
-.fa-snapchat-ghost:before {
- content: "\f2ac";
-}
-.fa-snapchat-square:before {
- content: "\f2ad";
-}
-.fa-pied-piper:before {
- content: "\f2ae";
-}
-.fa-first-order:before {
- content: "\f2b0";
-}
-.fa-yoast:before {
- content: "\f2b1";
-}
-.fa-themeisle:before {
- content: "\f2b2";
-}
-.fa-google-plus-circle:before,
-.fa-google-plus-official:before {
- content: "\f2b3";
-}
-.fa-fa:before,
-.fa-font-awesome:before {
- content: "\f2b4";
-}
-.fa-handshake-o:before {
- content: "\f2b5";
-}
-.fa-envelope-open:before {
- content: "\f2b6";
-}
-.fa-envelope-open-o:before {
- content: "\f2b7";
-}
-.fa-linode:before {
- content: "\f2b8";
-}
-.fa-address-book:before {
- content: "\f2b9";
-}
-.fa-address-book-o:before {
- content: "\f2ba";
-}
-.fa-vcard:before,
-.fa-address-card:before {
- content: "\f2bb";
-}
-.fa-vcard-o:before,
-.fa-address-card-o:before {
- content: "\f2bc";
-}
-.fa-user-circle:before {
- content: "\f2bd";
-}
-.fa-user-circle-o:before {
- content: "\f2be";
-}
-.fa-user-o:before {
- content: "\f2c0";
-}
-.fa-id-badge:before {
- content: "\f2c1";
-}
-.fa-drivers-license:before,
-.fa-id-card:before {
- content: "\f2c2";
-}
-.fa-drivers-license-o:before,
-.fa-id-card-o:before {
- content: "\f2c3";
-}
-.fa-quora:before {
- content: "\f2c4";
-}
-.fa-free-code-camp:before {
- content: "\f2c5";
-}
-.fa-telegram:before {
- content: "\f2c6";
-}
-.fa-thermometer-4:before,
-.fa-thermometer:before,
-.fa-thermometer-full:before {
- content: "\f2c7";
-}
-.fa-thermometer-3:before,
-.fa-thermometer-three-quarters:before {
- content: "\f2c8";
-}
-.fa-thermometer-2:before,
-.fa-thermometer-half:before {
- content: "\f2c9";
-}
-.fa-thermometer-1:before,
-.fa-thermometer-quarter:before {
- content: "\f2ca";
-}
-.fa-thermometer-0:before,
-.fa-thermometer-empty:before {
- content: "\f2cb";
-}
-.fa-shower:before {
- content: "\f2cc";
-}
-.fa-bathtub:before,
-.fa-s15:before,
-.fa-bath:before {
- content: "\f2cd";
-}
-.fa-podcast:before {
- content: "\f2ce";
-}
-.fa-window-maximize:before {
- content: "\f2d0";
-}
-.fa-window-minimize:before {
- content: "\f2d1";
-}
-.fa-window-restore:before {
- content: "\f2d2";
-}
-.fa-times-rectangle:before,
-.fa-window-close:before {
- content: "\f2d3";
-}
-.fa-times-rectangle-o:before,
-.fa-window-close-o:before {
- content: "\f2d4";
-}
-.fa-bandcamp:before {
- content: "\f2d5";
-}
-.fa-grav:before {
- content: "\f2d6";
-}
-.fa-etsy:before {
- content: "\f2d7";
-}
-.fa-imdb:before {
- content: "\f2d8";
-}
-.fa-ravelry:before {
- content: "\f2d9";
-}
-.fa-eercast:before {
- content: "\f2da";
-}
-.fa-microchip:before {
- content: "\f2db";
-}
-.fa-snowflake-o:before {
- content: "\f2dc";
-}
-.fa-superpowers:before {
- content: "\f2dd";
-}
-.fa-wpexplorer:before {
- content: "\f2de";
-}
-.fa-meetup:before {
- content: "\f2e0";
-}
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
-}
diff --git a/assets/scss/admin-importer.scss b/assets/scss/admin-importer.scss
deleted file mode 100644
index 5585932e5c..0000000000
--- a/assets/scss/admin-importer.scss
+++ /dev/null
@@ -1,105 +0,0 @@
-@import "_includes/vars";
-@import "_includes/mixins";
-
-.llms-import-file-wrap {
- background: #fafafa;
- border: 1px solid #ccd0d4;
- padding: 10px;
- margin: 20px auto;
- display: inline-flex;
- justify-content: space-between;
- align-items: center;
-}
-
-.llms-cloud-import-help.button-link {
- color: inherit;
- vertical-align: top;
- text-decoration: none;
-}
-
-.wrap.llms-import-export {
-
- ul.llms-importable-courses {
- display: flex;
- flex-direction: column;
- flex-wrap: wrap;
- gap: 20px;
-
- @media only screen and ( min-width: 680px ) {
- flex-direction: row;
- }
-
- .llms-importable-course {
- background-color: #FFF;
- border: 1px solid #dedede;
- border-radius: 12px;
- box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
- list-style: none;
- margin: 20px 0;
- overflow: hidden;
-
- @media only screen and ( min-width: 680px ) {
- -webkit-box-flex: 0;
- flex-grow: 0;
- flex-shrink: 1;
- flex-basis: calc(31%);
- }
-
- img {
- display: block;
- max-width: 100%;
- }
-
- h3 {
- color: #1d2327;
- font-size: 20px;
- line-height: 1.5;
- margin: 30px 20px 15px;
- }
-
- p {
- font-size: 15px;
- line-height: 1.5;
- margin: 0 20px 15px;
- }
-
- &.has-action-button {
- padding-bottom: 10px;
- position: relative;
- .button {
- bottom: 20px;
- right: 20px;
- position: absolute;
- }
- }
-
- }
-
- }
-
- @media only screen and (min-width: 600px) {
- ul.llms-importable-courses {
- display: flex;
- flex-wrap: wrap;
- }
- }
-
- @media only screen and (min-width: 600px) and (max-width: 767px) {
- ul.llms-importable-courses {
- li.llms-importable-course {
- flex: 1 0 calc( 50% - 20px );
- max-width: calc( 50% - 20px );
- }
- }
- }
-
- @media only screen and (min-width: 768px) {
- ul.llms-importable-courses {
- li.llms-importable-course {
- flex: 1 0 calc( 33% - 20px );
- max-width: calc( 33% - 20px );
- }
- }
- }
-
-}
diff --git a/assets/scss/admin-wizard.scss b/assets/scss/admin-wizard.scss
deleted file mode 100644
index f35241514e..0000000000
--- a/assets/scss/admin-wizard.scss
+++ /dev/null
@@ -1,322 +0,0 @@
-@import "_includes/vars";
-
-$input_padding: 0.3em 0.6em;
-
-#wpadminbar, #adminmenumain, #wpfooter {
- display: none;
-}
-
-#llms-setup-wizard {
-
- background-color: #F0F0F1;
- height: 100%;
- left: 0;
- overflow: scroll;
- position: fixed;
- top: 0;
- width: 100%;
-
-}
-
-.llms-setup-wrapper {
- margin: 30px auto;
- max-width: 640px;
-}
-
-#llms-logo {
- text-align: center;
-
- a {
- display: inline-block;
- }
-
- img {
- max-width: 200px;
- }
-
-}
-
-.llms-setup-content {
- background-color: #FFF;
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
- padding: 30px;
-
- h1, h2, h3, h4, h5, h6 {
- color: #3C434A;
- }
-
- a:not( .llms-button-primary ):not( .llms-button-secondary ) {
- color: $color-brand-blue;
- }
-
- p, li {
- color: #3C434A;
- font-size: 16px;
- }
-
- p.error {
- color: $color-red;
- background: rgba($color-red,0.1);
- border: 1px solid currentColor;
- padding: 1em;
- border-radius: 4px;
- margin: 1.5em 0 0;
- font-size: 15px;
- text-align: left;
- }
-
- label {
- font-weight: 500;
- }
-
- table {
- border-bottom: 1px solid #f1f1f1;
- border-collapse: collapse;
- width: 100%;
- }
-
- td {
- border-top: 1px solid #f1f1f1;
-
- &:first-child {
- padding-right: 10px;
- width: 33%;
-
- a {
- font-size: 16px;
- font-weight: 500;
- }
-
- i {
- display: block;
- font-size: 13px;
- margin-top: 10px;
-
- a {
- font-size: 13px;
- }
- }
-
- }
-
- }
-
- small {
- font-size: small;
- }
-
- .has-checkbox-field {
- display: flex;
- flex-direction: row-reverse;
- justify-content: flex-end;
- align-items: center;
- align-content: center;
- gap: 0.5em;
- font-weight: normal;
- font-size: 16px;
-
- input {
- margin: 0;
- }
- }
-
- label {
- font-size: 16px;
- display: block;
- margin-bottom: 0.5em;
- }
-
- small + label {
- margin-top: 1em;
- }
-
- [type=text] {
- width: 100%;
- clear: both;
- margin: 0;
- padding: $input_padding;
- }
-
- .has-date-field {
- font-size: 16px;
- display: flex;
- margin-bottom: 0.5em;
- flex-wrap: wrap;
- flex-direction: column;
- gap: 0.5em;
- }
-
- [type=date] {
- padding: $input_padding;
- }
-
- .is-hidden {
- display: none;
- }
-}
-
-.llms-setup-date-fields {
- display: flex;
- justify-content: space-between;
- gap: 1em;
- padding-top: 2em;
-}
-
-.llms-setup-date-field {
- flex: 1;
-}
-
-.llms-setup-actions {
- margin-top: 2em;
- text-align: right;
- display: flex;
- justify-content: space-between;
- align-items: center;
- gap: 1em;
-
- .llms-button-primary {
- display: inline-block;
-
- &:after {
- content: "\f054";
- font-family: 'FontAwesome';
- font-weight: 900;
- padding-left: 10px;
- }
-
- }
-}
-
-.llms-exit-setup {
- color: inherit !important;
- margin-right: 10px;
-
- + .llms-button-primary,
- + .llms-button-secondary {
- margin-left: auto;
- }
-}
-
-.llms-importing-msgs {
- a {
- color: $color-brand-blue;
- }
-
- .llms-importing-msg {
- display: none;
- font-size: 14px;
- font-style: italic;
- text-align: right;
- }
-}
-
-ul.llms-importable-courses {
- border-bottom: 1px solid #f1f1f1;
- display: block;
-
- li.llms-importable-course {
- border-top: 1px solid #f1f1f1;
- display: block;
- margin: 0;
- max-width: 100%;
- padding: 20px 40px 20px 0;
-
- h3 {
- margin: 0;
- }
-
- p {
- margin: 10px 0 0 0;
- }
-
- label {
- font-weight: 400;
- }
-
- img {
- float: left;
- margin-right: 15px;
- width: 22%;
- }
-
- .llms-switch {
- float: right;
- right: -40px;
-
- input.llms-toggle-round:checked + label {
- border-color: $color-brand-blue;
- background-color: $color-brand-blue;
- }
-
- }
-
- }
-}
-
-.llms-setup-progress {
- display: flex;
- margin: 20px 0;
-
- li {
- border-bottom: 4px solid $color-brand-blue;
- display: inline-block;
- font-size: 14px;
- padding-bottom: 10px;
- position: relative;
- text-align: center;
- flex: 1;
-
- a {
- color: $color-brand-blue;
- text-decoration: none;
- }
-
- &:after {
- background: $color-brand-blue;
- bottom: 0;
- content: '';
- border: 4px solid $color-brand-blue;
- border-radius: 100%;
- height: 4px;
- position: absolute;
- left: 50%;
- margin-left: -6px;
- margin-bottom: -8px;
- width: 4px;
- }
-
- &.current {
- font-weight: 700;
-
- &:after {
- background: #fff;
- }
- }
-
- &.current ~ li {
- border-bottom-color: #ccc;
-
- &:after {
- background: #ccc;
- border-color: #ccc;
- }
-
- a {
- color: #bbb;
- }
- }
-
- }
-}
-
-.llms-setup-wrapper {
-
- // Calendar icon for custom date fields.
- [type="text"].llms-datepicker {
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23ccc'%3E%3Cpath d='M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H64C28.7 64 0 92.7 0 128v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64h-40V24c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152V24zM48 192h352v256c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z'/%3E%3C/svg%3E");
- background-repeat: no-repeat;
- background-position: right 8px center;
- background-size: 16px 16px;
- padding-right: 40px;
- }
-}
diff --git a/assets/scss/admin.scss b/assets/scss/admin.scss
deleted file mode 100644
index 545fc80d5b..0000000000
--- a/assets/scss/admin.scss
+++ /dev/null
@@ -1,94 +0,0 @@
-//
-// Main Admin CSS File
-//
-
-@import "_includes/vars";
-@import "_includes/vars-brand-colors";
-
-@import "_includes/extends";
-@import "_includes/buttons";
-@import "_includes/mixins";
-
-@import "_includes/tooltip";
-
-// wp menu item
-@import "admin/_wp-menu";
-
-// grid layout for breakpoints
-@import "admin/partials/grid";
-
-// forms
-@import "admin/modules/forms";
-
-// voucher
-@import "admin/modules/voucher";
-
-// widgets
-@import "admin/modules/widgets";
-
-// icons
-@import "admin/modules/icons";
-
-// icons
-@import "admin/modules/mb-tabs";
-
-// icons
-@import "admin/modules/top-modal";
-
-@import "admin/modules/merge-codes";
-
-// Base (mobile)
-@import "admin/breakpoints/base";
-
-// Larger mobile devices
-@media only screen and (min-width: 481px) {
- @import "admin/breakpoints/481up";
-}
-
-// Tablets and smaller laptops
-@media only screen and (min-width: 768px) {
- @import "admin/breakpoints/768up";
-}
-
-// Desktops
-@media only screen and (min-width: 1030px) {
- @import "admin/breakpoints/1030up";
-}
-
-// Larger Monitors and TVs
-@media only screen and (min-width: 1240px) {
- @import "admin/breakpoints/1240up";
-}
-
-@import "admin/main";
-
-@import "admin/llms-table";
-@import "admin/modules/llms-order-note";
-
-// metabox related
-@import "admin/metaboxes/llms-metabox";
-@import "admin/metaboxes/metabox-instructors";
-@import "admin/metaboxes/metabox-orders";
-@import "admin/metaboxes/metabox-engagements-type";
-@import "admin/metaboxes/metabox-product";
-@import "admin/metaboxes/metabox-students";
-@import "admin/metaboxes/metabox-field-repeater";
-@import "admin/metaboxes/builder-launcher";
-
-@import "admin/post-tables/llms_orders";
-@import "admin/post-tables/post-tables";
-
-@import "admin/tabs";
-@import "admin/fonts";
-@import "admin/reporting";
-
-@import "admin/settings";
-
-@import "admin/dashboard";
-@import "admin/dashboard-widget";
-@import "admin/resources";
-
-@import "admin/quiz-attempt-review";
-
-@import "_includes/llms-form-field";
-@import "_includes/vendor/_font-awesome";
diff --git a/assets/scss/admin/_course-builder.scss b/assets/scss/admin/_course-builder.scss
deleted file mode 100644
index 41a15927c9..0000000000
--- a/assets/scss/admin/_course-builder.scss
+++ /dev/null
@@ -1,1663 +0,0 @@
-body.admin_page_llms-course-builder {
- background: #fff;
-
- #adminmenumain { display: none; }
- #wpbody-content { padding-bottom: 0; }
- #wpfooter { display: none; }
-
- #wpcontent, #wpfooter {
- margin-left: 0;
- }
-
- .llms-button-secondary {
- .fa {
- margin-right: 5px;
- }
- }
-
- // &.folded {
- // .llms-course-builder {
- // left: 56px;
- // }
- // }
-
- .webui-popover {
- .select2-container--default {
- .select2-results__group {
- font-size: 16px;
- }
- .select2-results__option .select2-results__option {
- padding-left: 2em;
- }
- }
-
- }
-}
-
-.wrap.lifterlms.llms-builder {
- margin: 0;
- padding: 0;
- position: relative;
-
-
- &.editor-active {
- .llms-builder-sidebar {
- padding: 10px;
- width: calc( 100% - 200px );
- z-index: 3;
- }
- @media only screen and ( min-width: 1200px ) {
- .llms-builder-main {
- width: 560px;
- }
- .llms-builder-sidebar {
- width: calc( 100% - 640px );
- }
- }
- @media only screen and ( min-width: 1440px ) {
- .llms-builder-main {
- width: calc( 100% - 780px );
- }
- .llms-builder-sidebar {
- width: 720px;
- }
- }
- @media only screen and ( min-width: 1680px ) {
- .llms-builder-main {
- width: calc( 100% - 1000px );
- }
- .llms-builder-sidebar {
- width: 940px;
- }
- }
- @media only screen and ( max-width: 782px ) {
- .llms-builder-sidebar {
- position: absolute;
- top: 0;
- width: auto;
- }
- }
- }
-
- .llms-headline {
- display: inline-block;
- font-weight: 400;
- margin: 0;
- padding: 0;
- transition: width 0.3s ease-in-out;
- vertical-align: middle;
- }
-
- .llms-builder-main {
- padding: 30px 30px 30px 0;
- position: relative;
- width: calc( 100% - 450px );
- z-index: 2;
-
- .llms-action-icons {
- display: inline-block;
- position: relative;
- vertical-align: middle;
- button {
- background: none;
- color: inherit;
- border: none;
- padding: 0;
- cursor: pointer;
- outline: inherit;
- }
- }
-
- .llms-action-icons-lesson-id {
- vertical-align: top;
- }
-
- // Course
- .llms-course-header {
- align-items: center;
- display: flex;
- flex-wrap: wrap;
- gap: 15px;
- position: relative;
- z-index: 1;
- .llms-button-secondary {
- margin-right: 10px;
- }
- }
-
-
- // Sections
- ul.llms-sections {
- box-shadow: 0 0 0 3px transparent;
- min-height: 60px;
- padding: 10px 0;
- transition: box-shadow 0.6s ease, min-height 0.2s ease;
- &.dragging {
- box-shadow: 0 0 0 3px $color-brand-blue;
- }
- }
-
- li.llms-section {
- background: #fff;
- border: 1px solid #efefef;
- border-radius: 6px;
- box-shadow: 2px 2px 8px rgba( 0, 0, 0, 0.08 );
- position: relative;
- margin: 0 0 20px 0;
- padding: 0;
-
- > .llms-builder-header {
- align-items: center;
- display: flex;
- gap: 15px;
- justify-content: space-between;
- padding: 20px 10px 20px 30px;
- .llms-action-icons {
- align-items: center;
- display: flex;
- gap: 15px;
- justify-content: space-between;
- .llms-action-icons-right {
- display: flex;
- gap: 0px;
- margin-top: -5px;
- .llms-action-icon {
- padding: 5px 10px;
- }
- }
- .llms-action-icons-left {
- display: flex;
- gap: 15px;
- }
- @media only screen and ( min-width: 1200px ) {
- .llms-action-icons-right,
- .llms-action-icons-left {
- white-space: nowrap;
- }
- }
- }
- }
-
- &.expanded {
- .llms-lessons { overflow: visible; }
- }
- &.selected {
- .llms-drag-utility.drag-section {
- border-color: $color-brand-blue;
- }
- > .llms-builder-header .llms-headline {
- font-weight: 400;
- color: $color-brand-blue;
- }
- }
-
- > .llms-builder-footer {
- border-top: 1px solid #efefef;
- padding: 20px 20px 20px 30px;
- }
- }
-
- li.llms-section:first-child:before {
- top: 30px;
- }
-
- li.llms-section:last-child:before {
- bottom: 55px;
- }
-
- li.llms-section.expanded:last-child:before {
- bottom: 86px;
- }
-
- // Lessons
- ul.llms-lessons {
- box-shadow: 0 0 0 3px transparent;
- height: 0;
- margin: 0;
- padding: 0;
- transition: box-shadow 0.6s ease, min-height 0.2s ease;
- &.dragging {
- box-shadow: 0 0 0 3px $color-brand-blue;
- min-height: 60px;
- }
- &.expanded, // added via backbone view events
- &.drag-expanded { // added only during dragover events and ignores model attrs
- height: auto;
- li.llms-lesson {
- pointer-events: auto;
- visibility: visible;
- }
- }
-
- }
-
- li.llms-lesson {
- background: #fff;
- border-top: 1px solid #efefef;
- margin: 0;
- padding: 20px 10px 20px 30px;
- position: relative;
- pointer-events: none;
- visibility: hidden;
-
- &.selected {
- .llms-drag-utility.drag-lesson {
- border-color: $color-brand-blue;
- }
- > .llms-builder-header .llms-headline {
- color: $color-brand-blue;
- }
- }
-
- > .llms-builder-header {
- .llms-headline {
- font-weight: 700;
- margin-left: 10px;
- cursor: pointer;
- }
- align-items: center;
- display: flex;
- flex-wrap: wrap;
- gap: 15px;
- justify-content: space-between;
- .llms-action-icons {
- align-items: center;
- display: flex;
- flex: 1;
- gap: 15px;
- justify-content: space-between;
- .llms-action-icons-left {
- display: flex;
- gap: 15px;
- }
- .llms-action-icons-right {
- display: flex;
- gap: 0;
- margin-top: -5px;
- .llms-action-icon {
- padding: 5px 10px;
- }
- }
- @media only screen and ( min-width: 1200px ) {
- .llms-action-icons-right,
- .llms-action-icons-left {
- white-space: nowrap;
- }
- }
- }
-
- @media only screen and ( min-width: 1200px ) {
- > .llms-builder-header {
- flex-wrap: nowrap;
- }
- }
- }
-
- }
-
- // Drag Utilities
- li.llms-section .llms-drag-utility {
- background: #fff;
- border: 2px solid #ccc;
- border-radius: 50%;
- height: 10px;
- left: 13px;
- position: absolute;
- top: 24px;
- width: 10px;
- }
-
- li.llms-lesson .llms-drag-utility {
- height: 6px;
- left: 14px;
- top: 25px !important;
- width: 6px;
- }
-
- .llms-section:hover > .llms-drag-utility,
- .llms-lesson:hover > .llms-drag-utility {
- border-color: #fff;
- cursor: move;
- &:hover:after {
- color: $color-brand-blue;
- }
- &:after {
- background: #fff;
- content: '\00b7\00b7\A\00b7\00b7\A\00b7\00b7';
- color: #ccc;
- display: block;
- font-size: 36px;
- height: 29px;
- letter-spacing: -1px;
- line-height: 8px;
- left: -7px;
- position: absolute;
- text-align: center;
- top: -12px;
- width: 23px;
- }
- }
-
- // Sortable
- li.llms-section,
- li.llms-lesson {
- &.ui-sortable-helper,
- &.ui-draggable-dragging {
- border: 1px solid #ccc;
- background: #fff;
- transform: rotate( 2deg );
- visibility: visible !important;
- z-index: 999;
- }
-
- &.llms-sortable-placeholder {
- border: 3px dashed $color-brand-blue;
- background: rgba( $color-brand-blue, 0.3 );
- margin: 0 10px;
- padding: 5px;
- &:before { display: none; }
- }
- }
-
- ul.llms-sections > li.llms-lesson.ui-draggable-dragging .llms-drag-utility {
- position: relative;
- &:after {
- left: -35px;
- top: -28px;
- }
- }
-
- }
-
- // Editable
- .llms-input-wrapper {
- position: relative;
- }
-
- .llms-input-formatting.ql-container {
- font-size: inherit;
- font-family: inherit;
- .ql-editor.ql-blank::before {
- color: #a0a0a0;
- left: 8px;
- right: 8px;
- }
- .ql-editor {
- p {
- font-size: inherit;
- line-height: 1;
- }
- }
- .ql-tooltip {
- z-index: 1;
- }
- }
-
- .llms-input,
- .llms-input-formatting .ql-editor {
- border: none;
- border-bottom: 2px dotted transparent;
- box-shadow: none;
- cursor: text;
- display: inline-block;
- font-size: inherit;
- font-weight: 700;
- height: auto;
- line-height: 1;
- margin: 0 8px;
- min-width: 60px;
- padding: 0;
- transition: border 0.2s ease, box-shadow 0.2s ease;
- &:empty:before {
- color: #a0a0a0;
- content: attr( data-placeholder );
- }
- &:hover {
- border-bottom-color: $color-brand-blue;
- }
- &[disabled] {
- cursor: not-allowed;
- &:hover {
- border-bottom-color: transparent;
- }
- }
- &:focus {
- background: #fff;
- box-shadow: 0 0 0 4px #fff, 0 0 0 6px $color-brand-blue;
- border-bottom: none;
- outline: none;
- }
- b, strong {
- font-weight: 700;
- }
- &.standard {
- border: 1px solid #e6e6e6;
- margin: 2px;
- padding: 5px 3px;
- &:hover {
- border-color: #d6d6d6;
- }
- &:focus {
- box-shadow: 0 0 0 2px $color-brand-blue;
- }
- }
- &.permalink {
- display: none;
- }
- }
-
- .llms-input-formatting .ql-editor {
- padding: 0 1px;
- }
-
- .llms-label {
- font-weight: 500;
- .fa {
- color: #aaa;
- padding-left: 6px;
- }
- }
-
- // .llms-editable-image,
- // .llms-editable-video,
- // .llms-editable-editor {
- // }
-
- .llms-editable-editor {
- .llms-label {
- float: left;
- margin-right: 10px;
- position: relative;
- top: 10px;
- }
- textarea {
- border: none;
- padding: 10px;
- display: block;
- width: 100%;
- }
- }
-
- .llms-editable-image {
- button.llms-add-image {
- width: 130px;
- }
- .llms-image {
- display: inline-block;
- position: relative;
- &:hover .llms-action-icon {
- opacity: 1;
- }
- .llms-action-icon {
- color: #fff;
- font-size: 24px;
- opacity: 0;
- padding: 0;
- position: absolute;
- transition: opacity 0.2s ease;
- right: 3px;
- top: 1px;
- z-index: 1;
- }
- img {
- display: block;
- height: 100px;
- max-width: 100%;
- width: auto;
- }
- }
- }
-
- .llms-settings-field,
- .llms-editable-toggle-group {
- background: #f4f4f4;
- padding: 10px;
- position: relative;
- margin: 0 1px;
-
- &.has-label-after {
- align-items: center;
- display: flex;
- flex-wrap: wrap;
-
- .llms-label {
- min-width: 100%;
- }
- .llms-editable-input {
- flex: 2;
- }
- .llms-label--after {
- color: #888;
- min-width: auto;
- font-size: 85%;
- padding-left: 10px;
- }
- }
-
- .llms-switch {
- display: block;
- width: 100%;
- @include clearfix;
-
- .llms-label {
- width: calc( 100% - 34px );
- }
- }
-
- .llms-editable-image,
- .llms-editable-video,
- .llms-editable-editor {
- margin-top: 2px;
- }
-
- .llms-input.standard {
- display: block;
- width: 100%;
- &.two-digits,
- &.three-digits,
- &.four-digits {
- display: inline-block;
- }
- }
-
- }
-
- .llms-editable-number {
- .llms-input {
- color: #888;
- min-width: 30px;
- text-align: right;
- &.two-digits {
- width: 30px;
- }
- &.three-digits {
- width: 40px;
- }
- &.four-digits {
- width: 60px;
- }
- }
- small {
- color: #888;
- text-transform: uppercase;
- }
- }
-
- .llms-model-settings {
- background-color: #FFF;
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
- @include clearfix();
-
- .llms-settings-group-header {
- border-bottom: 1px solid #efefef;
- padding: 10px;
-
- .fa-caret-up { display: block; }
- .fa-caret-down { display: none; }
- }
- &.hidden {
- .llms-settings-group-header {
- .fa-caret-up { display: none; }
- .fa-caret-down { display: block; }
- }
- .llms-settings-group-body { display: none; }
- }
- }
-
- .llms-settings-group-header {
- @include clearfix();
- .llms-settings-group-title {
- display: inline-block;
- font-size: 16px;
- font-weight: 700;
- line-height: 1.5;
- margin: 0 5px;
- padding: 0;
- }
- .llms-settings-group-toggle {
- float: right;
- font-size: 18px;
- padding: 2px;
- }
- }
-
- .llms-settings-group-body {
- padding: 16px;
- }
-
- .llms-settings-row {
- display: flex;
- flex-wrap: wrap;
- margin: 2px 0;
-
- .llms-settings-field,
- .llms-editable-toggle-group {
- flex: 1;
- &:first-child {
- margin-left: 0;
- }
- &:last-child {
- margin-right: 0;
- }
- }
-
- .llms-breaker {
- margin: 2px 0;
- width: 100%;
- }
- }
-
- .llms-editable-select {
- margin: 2px 0;
- .select2-container--default.select2-container--focus .select2-selection--multiple {
- border-color: #aaa;
- }
- }
-
- .llms-editable-radio {
- label {
- display: block;
- }
- &.has-images {
- input { display: none; }
- label {
- display: inline-block;
- margin: 0 3px;
- }
- label > span {
- transition: background 0.2s ease;
- display: inline-block;
- padding: 3px;
- }
- img { display: block; }
- input:checked + span {
- background: $color-brand-blue;
- }
- }
- }
-
- .settings-field--disabled {
- opacity: 0.5;
- }
-
- // Icons
- .llms-action-icon {
- color: #666;
- display: inline-block;
- font-size: 13px;
- text-decoration: none;
- &:hover {
- color: $color-brand-blue;
- &.danger { color: $color-danger; }
- }
- &.circle {
- border: 2px solid #aaa;
- border-radius: 50%;
- font-size: 9px;
- height: 8px;
- line-height: 1;
- padding: 5px;
- text-align: center;
- width: 8px;
- &:hover {
- border-color: $color-brand-blue;
- &.danger {
- border-color: $color-danger;
- }
- }
- }
- }
-
- ul.llms-info-list {
- display: flex;
- flex-wrap: wrap;
- gap: 15px;
- margin: 10px 0 0 8px;
- padding: 0;
- li.llms-info-item {
- color: #666;
- font-size: 13px;
- margin: 0;
- &.active,
- &.active .llms-action-icon {
- color: $color-brand-blue;
- .fa {
- margin-right: 5px;
- }
- }
- button {
- background: none;
- color: inherit;
- border: none;
- padding: 0;
- cursor: pointer;
- outline: inherit;
- &:hover {
- text-decoration: underline;
- }
- }
- }
- }
-
- // Sidebar
- .llms-builder-sidebar {
- background: #e6e6e6;
- bottom: 0;
- overflow: hidden;
- padding: 30px;
- position: fixed;
- transition: width 0.3s ease-in-out;
- top: 32px;
- right: 0;
- width: 360px;
- z-index: 1;
-
- .llms-utilities {
-
- ul, li {
- margin: 0;
- padding: 0;
- }
-
- ul {
- display: flex;
- gap: 15px;
- li {
- flex: 1;
- &:last-child {
- margin-right: 0;
- }
- }
- }
-
- .llms-utility {
- background: #efefef;
- border: 1px solid #ccc;
- border-radius: 8px;
- color: inherit;
- cursor: pointer;
- display: block;
- overflow: hidden;
- padding: 6px 12px;
- position: relative;
- text-align: center;
- width: 100%;
-
- &:hover {
- background: #fefefe;
- }
-
- .fa {
- background: #848484;
- position: absolute;
- left: 0;
- top: 0;
- padding: 7px;
- color: #fff;
- }
- }
-
- }
-
- .llms-sidebar-headline {
- margin: 0 0 10px;
- font-size: 22px;
- }
-
- .llms-elements-list {
- margin-bottom: 30px;
- li {
- margin-bottom: 10px;
- }
- }
-
- .llms-utility {
- color: #444;
- text-decoration: none;
- }
-
- .llms-element-button {
- background: $color-brand-blue;
- border-radius: 8px;
- border: none;
- color: #fff;
- cursor: pointer;
- display: block;
- margin: 0;
- overflow: hidden;
- padding: 17px 20px;
- position: relative;
- transition: background 0.2s ease, color 0.2s ease;
- text-align: center;
- width: 100%;
-
- &:hover {
- background: $color-brand-blue-dark;
- }
-
- &.secondary {
- background: #efefef;
- color: #444;
- &:hover {
- background: #fefefe;
- }
- .fa {
- background: #848484;
- }
- }
-
- .fa {
- background: $color-brand-dark-blue;
- border-radius: 4px 0 0 4px;
- color: #fff;
- display: block;
- font-size: 20px;
- padding: 15px 20px;
- position: absolute;
- top: 0;
- left: 0;
- }
-
- &[disabled="disabled"] {
- opacity: 0.4;
- }
-
- &.small {
-
- padding: 8px 10px 8px 46px;
- .fa {
- font-size: 15px;
- padding: 9px 10px;
- width: 20px;
- }
-
- }
-
- &.right {
-
- &.small {
- padding-left: 10px;
- padding-right: 46px;
- }
-
- .fa {
- border-radius: 0 4px 4px 0;
- left: auto;
- right: 0;
- }
-
- }
-
- }
-
-
-
- .llms-editor {
- height: 100%;
- min-height: 100%;
- position: relative;
- }
-
- // .llms-builder-close-editor {
- // background: $color-brand-blue;
- // border: none;
- // border-radius: 50%;
- // color: #fff;
- // cursor: pointer;
- // display: inline-block;
- // font-size: 18px;
- // height: 30px;
- // margin: 0;
- // position: absolute;
- // right: 0;
- // text-align: center;
- // top: 3px;
- // width: 30px;
- // z-index: 3;
- // }
-
- .llms-editor-nav {
- background-color: $color-brand-dark-blue;
- margin: 0;
- padding: 8px 0 0 8px;
- font-size: 0;
- margin: -10px -10px 10px -10px;
- position: relative;
- z-index: 2;
-
- .llms-editor-menu {
- list-style-type: none;
- margin: 0;
- padding: 0;
- position: relative;
-
- .llms-editor-menu-item {
- display: inline-block;
- margin: 0 6px 0 0;
- padding: 0;
-
- > .llms-editor-menu {
- display: none;
- &:before {
- border: 8px solid transparent;
- border-left-color: #cacaca;
- content: '';
- position: absolute;
- top: 11px;
- left: 0;
- }
-
- .llms-editor-menu-item:hover > a,
- .llms-editor-menu-item.active > a {
- background: #dfdfdf;
- }
-
- }
-
- &:hover > a {
- background-color: $color-brand-blue;
- }
-
- &.active > a {
- background-color: #e6e6e6;
- color: $color-brand-blue;
- font-weight: 700;
-
- &:focus {
- box-shadow: none;
- }
- }
-
- &.active > .llms-editor-menu {
- display: inline-block;
- }
-
- a {
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- color: #FFF;
- display: inline-block;
- padding: 9px 18px;
- text-decoration: none;
- transition: background 0.2s ease;
- font-size: 15px;
- }
-
-
- &.right {
- float: right;
-
- a,
- &:hover {
- background: transparent;
- }
- }
-
- }
- }
- }
-
- .llms-editor-tab {
- display: none;
- height: calc( 100% - 90px );
- overflow: scroll;
- position: relative;
- z-index: 1;
- &.active {
- display: block;
-
- &.tab--quiz {
-
- display: flex;
- flex-direction: column;
-
- .llms-quiz-questions {
- flex: 1 0 auto;
- overflow: scroll;
-
- // groups
- .llms-quiz-questions {
- overflow: visible;
- }
- }
-
- }
- }
-
- }
-
-
- // .llms-builder-editor {
-
- // opacity: 0;
- // margin: 10px 0;
- // transition: opacity 0.2s linear;
-
- // &.ready {
- // opacity: 1;
- // }
-
- // textarea {
- // border: none;
- // display: block;
- // width: 100%;
- // }
- // }
-
- .llms-builder-save {
-
- bottom: 10px;
- left: 10px;
- position: absolute;
- right: 10px;
- z-index: 1;
-
- .llms-builder-error {
- background: $color-danger;
- border-radius: 4px;
- color: #fff;
- display: inline-block;
- font-style: italic;
- padding: 5px 15px 7px 25px;
- margin: 0 0 10px;
-
- li {
- margin: 0;
- padding: 0;
- }
-
- }
-
- .llms-save {
- width: 75%;
- }
- .llms-exit {
- padding-left: 5px;
- padding-right: 5px;
- width: 23%;
- }
-
- button {
- position: relative;
- i {
- position: absolute;
- left: 10px;
- top: 10px;
-
- .llms-spinner {
- border-color: #fff;
- }
- }
- }
- button[data-status] .llms-status-indicator { display: none; }
- button[data-status="saved"] .status--saved { display: block; }
- button[data-status="unsaved"] {
- background-color: $color-brand-orange;
- .status--unsaved { display: block; }
- }
- button[data-status="saving"] .status--saving { display: block; }
- button[data-status="error"] .status--error { display: block; }
-
- }
-
- }
- @media only screen and ( max-width: 782px ) {
- .llms-builder-sidebar {
- margin-right: 10px;
- position: relative;
- top: 0;
- width: auto;
- }
- .llms-builder-main {
- padding-right: 10px;
- width: auto;
- }
- }
-
- // Search Popover
- .select2-container {
- z-index: 99999999;
- }
-
- .select2-results__option {
- padding: 0;
- }
-
- .select2-container--default .select2-results__option--highlighted[aria-selected] {
- background: $color-brand-blue;
- .llms-existing-action {
- color: #fff;
- }
- }
-
- .llms-existing-lesson-result {
-
- align-items: center;
- display: flex;
- padding: 5px 5px 5px 0;
-
- .llms-existing-info {
- flex: 6;
-
- h4, h5 {
- margin: 0;
- }
-
- h4 {
- font-weight: 400;
- }
-
- h5 {
- font-weight: 300;
- }
- }
-
- .llms-existing-action {
- color: $color-brand-blue;
- flex: 1;
- text-align: center;
-
- .fa {
- display: block;
- font-size: 30px;
- }
-
- small {
- text-transform: uppercase;
- }
-
- }
-
-
- }
-
-
- // Quiz
- .llms-quiz-empty {
- margin: 100px auto;
- text-align: center;
-
- p { font-size: 18px; }
- button.llms-element-button {
- max-width: 320px;
- margin: 0 auto;
- }
-
- }
-
- .llms-editor-tab.tab--quiz {
- .llms-model-header {
- .llms-model-title {
- width: calc( 100% - 310px );
- }
- .llms-quiz-points {
- float: left;
- margin-right: 10px;
- width: 100px;
- }
- }
- }
-
- .llms-model-header {
- background-color: #FFF;
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
- padding: 10px;
- @include clearfix();
-
- .llms-model-title {
- float: left;
- margin-right: 10px;
- width: calc( 100% - 200px );
- .llms-input {
- width: calc( 100% - 65px );
- }
- }
- .llms-model-status.llms-switch {
- float: left;
- margin-right: 10px;
- position: relative;
- text-align: right;
- top: -2px;
- width: 100px;
- }
- .llms-action-icons {
- float: left;
- position: relative;
- text-align: right;
- width: 80px;
- z-index: 1;
- .llms-action-icon {
- margin-left: 10px;
- }
- .fa {
- max-width: 15px;
- }
- }
- }
-
- .llms-model-header + .llms-model-settings.active {
- margin-top: -10px;
- }
-
- .llms-model-settings {
- clear: both;
- display: none;
-
- &.active {
- display: block;
- margin-top: 10px;
- }
- }
-
- .llms-quiz-footer {
- display: flex;
- button.llms-element-button {
- flex: 1;
- margin: 0 5px;
- &:first-child { margin-left: 0; }
- &:last-child { margin-right: 0; }
- &.llms-show-question-bank {
- flex: 2;
- }
- }
- }
-
- // Question Bank
- .llms-quiz-tools {
- display: none;
- width: 100%;
- position: relative;
-
- // .llms-quiz-tools-search {
- // padding: 0 10px;
- // margin-bottom: 15px;
-
- // .fa {
- // color: #888;
- // font-size: 16px;
- // }
-
- // input[type="search"] {
- // background: inherit;
- // border: none;
- // border-bottom: 1px solid #bbb;
- // box-shadow: none;
- // font-size: 16px;
- // margin: 8px 0 0;
- // padding: 2px 5px;
- // width: calc( 100% - 200px );
-
- // &:focus {
- // border-bottom-color: $color-brand-blue;
- // }
- // }
-
- // }
-
- }
-
- ul.llms-question-bank {
-
- list-style-type: none;
- margin: 0;
- padding: 0;
- @include clearfix;
-
- li.llms-question-bank-header {
- clear: both;
- padding-top: 20px;
- &:first-child {
- padding-top: 0;
- }
- h4 {
- font-size: 20px;
- margin: 10px 5px;
- }
- }
-
- li.llms-question-type {
- box-sizing: border-box;
- float: left;
- margin: 0;
- padding: 3px;
- width: 33.3333%;
- transition: opacity 0.3s ease-in-out;
-
- &.filtered {
- opacity: 0.3;
- }
-
- .llms-type-unavailable {
- display: block;
- position: relative;
- text-decoration: none;
- .llms-element-button {
- opacity: 0.5;
- pointer-events: none;
- }
- }
-
- }
-
- }
-
- // Quiz Questions
- ul.llms-quiz-questions {
-
- margin: 10px 3px;
- padding: 5px;
- transition: box-shadow 0.6s ease;
-
- &.dragging {
- box-shadow: 0 0 0 3px $color-brand-blue;
- }
-
- &:empty:before {
- background: #fff;
- content: attr(data-empty-msg);
- display: block;
- font-size: 18px;
- margin: 0 auto;
- padding: 100px 0;
- text-align: center;
- }
-
- li.llms-question {
-
- background: #fff;
- margin: 0 0 3px;
- padding: 15px 12px 10px;
-
- &:hover {
- > .llms-builder-header .llms-action-icons {
- opacity: 1;
- pointer-events: auto;
- }
- }
-
- // groups
- ul.llms-quiz-questions {
- margin-left: 12px;
- .llms-question {
- border-bottom: 2px solid #e6e6e6;
- }
- &:empty:before {
- content: attr(data-empty-msg);
- display: block;
- font-size: 18px;
- text-align: center;
- margin: 20px auto;
- }
- li.llms-question.llms-sortable-placeholder.qtype--group {
- display: none !important;
- }
- }
-
- .llms-builder-header {
- @include clearfix;
- > * {
- float: left;
- }
- }
-
- .llms-question-body {
- display: none;
- &.active {
- display: block;
- }
- }
-
- .llms-data-stamp {
- background: $color-brand-blue;
- border-radius: 4px;
- color: #fff;
- cursor: move;
- font-size: 90%;
- margin-top: -5px;
- padding: 4px 10px 6px;
-
- small, .fa {
- line-height: 1.2;
- vertical-align: middle;
- }
-
- .fa {
- margin-right: 4px;
- }
-
- }
-
- .llms-headline {
- width: calc( 100% - 110px - 90px - 55px );
- .ql-editor {
- width: calc( 100% - 16px );
- }
- }
-
- .llms-action-icons {
- width: 110px;
- opacity: 0;
- pointer-events: none;
- }
-
- .llms-question-points {
- width: 90px;
- }
-
- .llms-question-features {
- margin: 10px 0 0;
- &:last-child {
- margin: 0;
- }
- .llms-switch {
- margin-right: 15px;
- }
- }
-
- .llms-editable-video {
- position: relative;
- z-index: 1;
- }
-
- }
-
- .llms-question-choices-wrapper {
- background: #f4f4f4;
- margin: 2px 1px;
- padding: 10px;
- }
-
- .llms-question-choices-list-header {
- @include clearfix;
- margin-bottom: 10px;
-
- .llms-switch {
- float: right;
- text-align: right;
- width: 260px;
- }
- }
-
- ul.llms-question-choices {
- border: 3px solid #f4f4f4;
- margin: -3px;
- padding: 0;
- transition: box-shadow 0.6s ease;
-
- &.dragging {
- box-shadow: 0 0 0 3px $color-brand-blue;
- }
-
- &.multi-choices li.llms-question-choice .llms-choice-id span {
- border-radius: 4px;
- }
-
- }
-
- li.llms-question-choice {
- margin: 0 0 5px;
- padding: 0;
- &:last-child { margin-bottom: 0; }
-
- .llms-choice-id {
-
- input[type="checkbox"] {
- display: none;
- }
-
- input[type="checkbox"]:checked + .llms-marker {
- background: $color-green;
- }
-
- .llms-marker {
- border-radius: 50%;
- background: #d0d0d0;
- box-shadow: inset 0 0 1px #848484;
- color: #444;
- display: inline-block;
- font-size: 16px;
- height: 20px;
- line-height: 20px;
- padding: 5px;
- position: relative;
- text-align: center;
- transition: background 0.1s ease;
- width: 20px;
-
- .fa {
- left: 7px;
- opacity: 0;
- position: absolute;
- top: 7px;
- }
- &.selectable:hover {
- b { opacity: 0 }
- .fa { opacity: 1; }
- }
-
- }
-
- }
-
- .llms-input-wrapper,
- .llms-editable-image {
- display: inline-block;
- // action icons width, label width, ul margins
- width: calc( 100% - 55px - 35px - 5px );
- }
-
- .llms-input {
- width: calc( 100% - 16px );
- }
-
- .llms-editable-image .llms-image {
- vertical-align: middle;
- img {
- height: 50px;
- }
- }
-
- .llms-action-icons {
- display: inline-block;
- opacity: 1;
- pointer-events: auto;
- text-align: right;
- width: 55px;
- }
-
- }
-
- li.llms-question-choice.llms-sortable-placeholder {
- border: 3px dashed $color-brand-blue !important;
- background: rgba( $color-brand-blue, 0.3 );
- }
-
- li.llms-question-choice.ui-sortable-helper {
- border: 1px solid #ccc;
- background: #fff;
- padding: 10px;
- transform: rotate( 2deg );
- z-index: 999;
- }
-
- li.llms-question.ui-sortable-helper,
- li.llms-question.ui-draggable-dragging {
- border: 1px solid #ccc;
- background: #fff;
- transform: rotate( 2deg );
- z-index: 999;
- }
-
- li.llms-question.llms-sortable-placeholder {
- border: 3px dashed $color-brand-blue !important;
- background: rgba( $color-brand-blue, 0.3 );
- }
-
- }
-
-
- .llms-switch {
- display: inline-block;
- float: none;
- width: auto;
-
- input[type="checkbox"] {
- display: none;
- }
-
- input[type="checkbox"]:checked + .llms-switch-slider {
- background: $color-green;
- }
-
- input[type="checkbox"]:checked + .llms-switch-slider:after {
- transform: translateX( 14px );
- }
-
- .llms-label {
- display: inline-block;
- vertical-align: top;
- }
-
- .llms-switch-slider {
- background: #e0e0e0;
- border-radius: 8px;
- display: inline-block;
- height: 16px;
- margin-top: 2px;
- position: relative;
- transition: background 0.2s ease;
- vertical-align: top;
- width: 30px;
-
- &:after {
- background: #fff;
- border-radius: 8px;
- content: '';
- display: block;
- height: 12px;
- left: 2px;
- position: relative;
- transition: transform 0.2s ease;
- top: 2px;
- width: 12px;
- }
-
- }
-
- }
-
-}
-
-.llms-multi-input .llms-input-wrapper {
- width: 50%;
- float: left;
- margin-bottom: 6px;
- font-size: 12px;
-}
-
-.llms-multi-input .llms-input-wrapper .llms-input {
- font-size: 12px;
- padding: 5px;
-}
diff --git a/assets/scss/admin/_dashboard-widget.scss b/assets/scss/admin/_dashboard-widget.scss
deleted file mode 100644
index bdb6da73d7..0000000000
--- a/assets/scss/admin/_dashboard-widget.scss
+++ /dev/null
@@ -1,101 +0,0 @@
-#llms_dashboard_widget {
-
- .inside {
- margin: 0;
- padding-bottom: 8px;
- }
-
- .llms-dashboard-widget-wrap {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding-top: 12px;
- }
-
- .activity-block {
- padding-bottom: 8px;
- border-color: #e8e8e8;
- }
-
- h3 {
- margin-bottom: 0;
- }
-
- .llms-charts-wrapper {
- display: none;
- }
-
- .llms-widget-row {
- display: flex;
- justify-content: space-between;
- gap: 8px;
- width: 100%;
- align-items: stretch;
- padding: 4px 0;
-
- &:before,
- &:after {
- display: none;
- }
- }
-
- .llms-widget-1-4 {
- padding: 0;
- flex: 1;
- }
-
- .llms-widget {
- padding: 8px 8px 12px;
- margin: 0;
- border-radius: 6px;
- border: 1px solid #e8e8e8;
- box-shadow: 0px 2px 4px rgb(246 247 247);
- height: 100%;
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
- align-items: flex-end;
- }
-
- .llms-label {
- font-size: 14px;
- width: 100%;
- align-self: flex-start;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- }
-
- .llms-widget-content {
- font-size: 20px;
- margin: 0;
- }
-
- .llms-widget-info-toggle {
- display: none;
- }
-
- a {
- border: 0;
- }
-
- .subsubsub {
- color: #dcdcde;
- }
-}
-
-.llms-dashboard-widget-feed {
- margin: 0 -12px;
- padding: 0;
- background-color: #f6f7f7;
-
- li {
- margin: 0;
- padding: 8px 12px;
- border-bottom: 1px solid #e8e8e8;
- }
-
- span {
- display: block;
- }
-}
diff --git a/assets/scss/admin/_dashboard.scss b/assets/scss/admin/_dashboard.scss
deleted file mode 100644
index af676ec486..0000000000
--- a/assets/scss/admin/_dashboard.scss
+++ /dev/null
@@ -1,183 +0,0 @@
-.wrap.llms-dashboard {
-
- .llms-inside-wrap {
- padding-top: 30px;
- }
-
- #poststuff {
-
- h2 {
- padding: 12px 20px;
- }
-
- }
-
- .llms-dashboard-activity {
-
- h2 {
- font-size: 20px;
- font-weight: 700;
- line-height: 1.5;
- margin-top: 0;
- text-align: center;
- }
- }
-
- .postbox {
- background-color: #FFF;
- border: none;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.13 );
-
- .postbox-header {
- border-bottom-color: #efefef;
-
- }
-
- .inside {
- padding: 20px;
- }
- }
-
- #llms_dashboard_addons {
-
- .llms-addons-wrap {
- margin-top: 0;
-
- .llms-add-on-item {
- margin-top: 0;
-
- p {
- text-align: left;
- }
-
- footer.llms-actions {
- padding-top: 0;
- }
- }
-
- }
-
- p {
- text-align: center;
-
- .llms-button-primary {
- display: inline-block;
- margin-top: 15px;
- }
- }
-
- }
-
- #llms_dashboard_quick_links {
-
- ul {
- list-style: disc;
- margin: 5px 0 0 20px;
-
- li {
- font-size: 15px;
- line-height: 1.5;
- }
- }
-
- .llms-quick-links {
- display: grid;
- grid-template-columns: 1fr;
- grid-gap: 30px;
-
- a {
- display: inline-block;
- }
-
- .llms-list {
-
- h3 {
- margin: 0 0 10px 0;
- }
-
- ul {
- margin-bottom: 20px;
-
- &.llms-checklist {
- list-style: none;
- margin-left: 0;
- }
- }
-
- .fa {
- text-align: center;
- width: 16px;
- }
-
- .fa-check {
- color: #008a20;
- }
-
- .fa-times {
- color: #d63638;
- }
-
- .llms-button-primary,
- .llms-button-secondary,
- .llms-button-action {
- display: block;
- text-align: center;
- }
-
- }
-
- @media only screen and (min-width: 782px) {
- grid-template-columns: 1fr 1fr 1fr;
- }
- }
-
- .llms-help-links {
- display: grid;
- grid-template-columns: 1fr 1fr;
- grid-gap: 20px;
-
- .llms-list {
-
- h3 {
- margin: 0;
-
- .dashicons {
- color: #AAA;
- }
- }
-
- }
-
- @media only screen and (min-width: 782px) {
- grid-template-columns: 1fr 1fr 1fr 1fr;
- }
-
- }
-
- }
- #llms_dashboard_blog,
- #llms_dashboard_podcast {
-
- ul {
- margin: 0;
-
- li {
- margin: 0 0 15px 0;
-
- a {
- display: block;
- }
- }
- }
-
- p {
- margin: 15px 0;
- text-align: center;
-
- a {
- display: inline-block;
- }
- }
- }
-
-}
diff --git a/assets/scss/admin/_fonts.scss b/assets/scss/admin/_fonts.scss
deleted file mode 100644
index d2b834e87e..0000000000
--- a/assets/scss/admin/_fonts.scss
+++ /dev/null
@@ -1,8 +0,0 @@
-#llms-options-page-contents {
- h2 {
- color: #999;
- font-weight: 500;
- letter-spacing: 2px;
- border-bottom: 1px solid #999;
- }
-}
diff --git a/assets/scss/admin/_llms-table.scss b/assets/scss/admin/_llms-table.scss
deleted file mode 100644
index 6f286150d6..0000000000
--- a/assets/scss/admin/_llms-table.scss
+++ /dev/null
@@ -1,222 +0,0 @@
-.llms-table-wrap {
- position: relative;
-}
-
-.llms-table-header {
- padding: 0;
-
- @include clearfix();
-
- h2 {
- font-size: 20px;
- padding: 0;
- display: inline-block;
- line-height: 1.5;
- margin: 0 0 20px 0;
- vertical-align: middle;
- }
-
- .llms-table-search,
- .llms-table-filters {
- float: right;
- padding-left: 10px;
- }
-
- .llms-table-search input {
- margin: 0;
- padding: 0 8px;
- }
-
-}
-
-.llms-table {
-
- border: 1px solid #c3c4c7;
- border-collapse: collapse;
- width: 100%;
-
- a:not(.small) {
- color: $color-brand-blue;
- &:hover {
- color: $color-brand-blue-dark;
- }
- }
-
- td, th {
- border-bottom: 1px solid #c3c4c7;
- padding: 10px 12px;
- text-align: center;
-
- &.expandable.closed {
- display: none;
- }
-
- .llms-button-primary,
- .llms-button-secondary,
- .llms-button-action,
- .llms-button-danger {
- display: inline-block;
- }
-
- }
-
- tr.llms-quiz-pending {
- td {
- font-weight: 700;
- }
- }
-
- thead th,
- tfoot th {
- background-color: #FFF;
- font-weight: 700;
-
- a.llms-sortable {
- // display: block;
- padding-right: 16px;
- position: relative;
- text-decoration: none;
- width: 100%;
- &.active {
- // show the current sorted when a sort is active
- &[data-order="DESC"] .asc { opacity: 1; }
- &[data-order="ASC"] .desc { opacity: 1; }
- }
- // show the opposite on hover
- &:hover {
- &[data-order="DESC"] {
- .asc { opacity: 0; }
- .desc { opacity: 1; }
- }
- &[data-order="ASC"] {
- .asc { opacity: 1; }
- .desc { opacity: 0; }
- }
- }
- .dashicons {
- color: #444;
- font-size: 16px;
- height: 16px;
- opacity: 0;
- position: absolute;
- width: 16px;
- }
- }
- }
-
- tfoot th {
- border-bottom: none;
-
- .llms-table-export {
- float: left;
- .llms-table-progress {
- background: #efefef;
- display: none;
- margin-left: 8px;
- vertical-align: middle;
- width: 100px;
- }
- }
-
- .llms-table-pagination {
- float: right;
- }
-
- }
-
- &.zebra tbody tr:nth-child( even ) {
- th, td { background-color: #fff; }
- }
-
- &.zebra tbody tr:nth-child( odd ) {
- th, td { background-color: #f6f7f7; }
- }
-
- &.text-left {
- td, th {
- text-align: left;
- }
- }
-
- &.size-large {
- td, th {
- font-size: 14px;
- padding: 10px 12px;
- }
- }
-
- .llms-drag-handle {
- color: #777;
- cursor: pointer;
- -webkit-transition: color 0.4s ease;
- transition: color 0.4s ease;
- }
-
- .llms-action-icon {
- color: #777;
- text-decoration: none;
-
- .tooltip {
- cursor: pointer;
- }
-
- &:hover {
- color: $color-blue;
- }
-
- &.danger:hover {
- color: $color-danger;
- }
- }
-
- .llms-table-page-count {
- font-size: 12px;
- padding: 0 5px;
- }
-
-}
-
-// progress bars within the tables
-.llms-table-progress {
- text-align: center;
- .llms-table-progress-bar {
- background: #eee;
- border-radius: 10px;
- height: 16px;
- overflow: hidden;
- position: relative;
- .llms-table-progress-inner {
- background: $color-brand-blue;
- height: 100%;
- transition: width 0.2s ease;
- }
- }
- .llms-table-progress-text {
- color: $color-brand-blue;
- font-size: 12px;
- font-weight: 700;
- line-height: 16px;
- }
-}
-
-
-.llms-table.llms-gateway-table,
-.llms-table.llms-integrations-table {
- .status {
- .fa {
- color: $color-brand-blue;
- font-size: 22px;
- }
- }
- .sort {
- cursor: move;
- text-align: center;
- width: 10px;
- }
-}
-
-.llms-gb-table-notifications {
- th, td {
- text-align: left;
- }
-}
diff --git a/assets/scss/admin/_main.scss b/assets/scss/admin/_main.scss
deleted file mode 100644
index 79588aa040..0000000000
--- a/assets/scss/admin/_main.scss
+++ /dev/null
@@ -1,340 +0,0 @@
-.wrap.lifterlms {
- margin-top: 0;
-}
-
-.llms-header {
- background-color: #FFF;
- margin: 0 0 0 -20px;
- padding: 20px 10px;
- position: relative;
- z-index: 1;
-
- .llms-inside-wrap {
- display: flex;
- padding: 0 10px;
- }
-
-
- .lifterlms-logo {
- flex: 0 0 190px;
- max-height: 52px;
- margin-right: 10px;
- }
-
- .llms-meta {
- align-self: center;
- display: flex;
- flex: 1;
- font-size: 16px;
- justify-content: space-between;
- line-height: 1.5;
-
- .llms-version {
- background-color: #1d2327;
- color: #FFF;
- border-radius: 999px;
- font-size: 13px;
- font-weight: 700;
- padding: 6px 12px;
- }
-
- a {
- display: inline-block;
- }
-
- .llms-license {
- border-right: 1px solid #CCC;
- font-weight: 700;
- margin-right: 12px;
- padding-right: 12px;
-
- a {
- text-decoration: none;
-
- &:before {
- content: "\f534";
- display: inline-block;
- font: 400 16px/1 dashicons;
- left: 0;
- padding-right: 3px;
- position: relative;
- text-decoration: none;
- vertical-align: text-bottom;
- }
-
- &.llms-license-none {
- color: #888;
-
- &:before {
- content: "\f335";
- }
- }
-
- &.llms-license-active {
- color: #008a20;
-
- &:before {
- content: "\f112";
- }
-
- }
-
- }
- }
-
- .llms-support {
- font-weight: 700;
-
- a {
- color: #1d2327;
- text-decoration: none;
- }
-
- }
-
- }
-
-}
-
-.llms-subheader {
- align-items: center;
- background-color: #FFF;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.15 );
- display: flex;
- flex-direction: row;
- margin-left: -20px;
- padding: 10px 20px;
- width: 100%;
- z-index: 1;
-
- h1 {
- font-weight: 700;
- padding: 0;
-
- a {
- color: inherit;
- text-decoration: none;
- }
- }
-
-}
-
-#post_course_difficulty {
- min-width: 200px;
-}
-#_video-embed, #_audio-embed {
- width: 100%;
-}
-
-hr {
- background-color: #CCC;
- border: none;
- height: 1px;
- margin: 30px 0;
- padding: 0;
-}
-
-.llms_certificate_default_image, .llms_certificate_image {
- width: 300px;
-}
-
-.llms_achievement_default_image, .llms_achievement_image {
- width: 120px;
-}
-
-div[id^="lifterlms-"] .inside {
- overflow: visible;
-}
-
-.notice.llms-admin-notice {
- background-color: #FFF;
- border: 1px solid #ccd0d4;
- box-shadow: 0 1px 4px rgba( 0, 0, 0, 0.15 );
- display: flex;
- padding: 0 !important;
- position: relative;
-
- .notice-dismiss {
- text-decoration: none;
- }
-
- &.notice-warning {
- border-left: 4px solid #F8954F;
-
- .llms-admin-notice-icon {
- background-color: #FEF4ED;
- }
- }
-
- &.notice-info {
- border-left: 4px solid #466DD8;
-
- h3 {
- color: #466DD8;
- }
-
- .llms-admin-notice-icon {
- background-color: #EDF0FB;
- }
-
- }
-
- &.notice-success {
- border-left: 4px solid #18A957;
-
- h3 {
- color: #18A957;
- }
-
- .llms-admin-notice-icon {
- background-color: #E8F6EE;
- }
-
- }
-
- &.notice-error {
- border-left: 4px solid #DF1642;
-
- h3 {
- color: #9C0F2E;
- }
-
- .llms-admin-notice-icon {
- background-color: #FCE8EC;
- }
-
- }
-
- .llms-admin-notice-icon {
- background-image: url(../../assets/images/lifterlms-icon-color.png);
- background-position: center center;
- background-repeat: no-repeat;
- background-size: 30px;
- min-width: 70px;
-
- }
-
- .llms-admin-notice-content {
- color: #111;
- padding: 20px;
- }
-
- h3 {
- font-size: 18px;
- font-weight: 700;
- line-height: 25px;
- margin: 0 0 15px 0;
- }
-
- button,
- .llms-button-primary {
- display: inline-block;
- }
-
- p {
- font-size: 14px;
- line-height: 22px;
- margin: 0 0 15px 0;
- max-width: 65em;
- padding: 0;
- }
-
- p:last-of-type {
- margin-bottom: 0;
- }
-}
-
-.llms-button-action,
-.llms-button-danger,
-.llms-button-primary,
-.llms-button-secondary {
- &.small .dashicons {
- font-size: 13px;
- height: 13px;
- width: 13px;
- }
-
- &:hover {
- box-shadow: none;
- }
-}
-
-a.llms-view-as {
- line-height: 2;
- margin-right: 8px;
-}
-
-.llms-image-field-preview {
- max-height: 80px;
- vertical-align: middle;
- width: auto;
-}
-
-.llms-image-field-remove {
- &.hidden { display: none; }
-}
-
-.llms-log-viewer {
- background: #fff;
- border: 1px solid #e5e5e5;
- box-shadow: 0 1px 1px rgba(0,0,0,.04);
- margin: 20px 0;
- padding: 25px;
-
- pre {
- font-family: monospace;
- margin: 0;
- padding: 0;
- white-space: pre-wrap;
- }
-}
-
-.llms-status--tools {
- .llms-table {
- background: #fff;
- border: 1px solid #e5e5e5;
- box-shadow: 0 1px 1px rgba(0,0,0,.04);
- td, th {
- padding: 10px;
- vertical-align: top;
- }
- th {
- width: 28%;
- }
- p {
- margin: 0 0 10px;
- }
- }
-}
-
-.llms-error {
- color: $color-red;
- font-style: italic;
-}
-
-.llms-rating-stars {
- color: #ffb900;
- text-decoration: none;
-}
-
-@media screen and (max-width: 782px) {
- .llms-header {
- top: 46px;
-
- .llms-inside-wrap {
- flex-direction: column;
- gap: 20px;
-
- .lifterlms-logo {
- align-self: center;
- flex: inherit;
- max-height: initial;
- max-width: 200px;
- }
-
- .llms-meta {
- column-gap: 10px;
- }
- }
- }
-}
diff --git a/assets/scss/admin/_quiz-attempt-review.scss b/assets/scss/admin/_quiz-attempt-review.scss
deleted file mode 100644
index a4b7d85f41..0000000000
--- a/assets/scss/admin/_quiz-attempt-review.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-.llms-remarks {
-
- .llms-remarks-field {
- height: 120px;
- width: 100%;
- }
-
- input[type="number"] {
- width: 60px;
- }
-
-
-}
-
-
-button[name="llms_quiz_attempt_action"] {
- .save { display: none; }
- &.grading {
- .default { display: none };
- .save { display: inline; }
- }
-}
-
diff --git a/assets/scss/admin/_reporting.scss b/assets/scss/admin/_reporting.scss
deleted file mode 100644
index f1c2d703e5..0000000000
--- a/assets/scss/admin/_reporting.scss
+++ /dev/null
@@ -1,452 +0,0 @@
-.llms-reporting.wrap {
-
- .llms-options-page-contents {
-
- .llms-nav-tab-wrapper.llms-nav-secondary {
- box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.15 );
- margin: 0;
- padding: 0;
-
- }
- }
-
- .llms-stab-title {
- color: $color-brand-dark-blue;
- font-size: 36px;
- font-weight: 300;
- margin-bottom: 20px;
- }
-
- td.id a {
- text-decoration: none;
- }
-
- th.id, td.id,
- th.name, td.name,
- th.registered, td.registered,
- th.last_seen, td.last_seen,
- th.overall_progress, td.overall_progress,
- th.title, td.title,
- th.course, td.course,
- th.lesson, td.lesson { text-align: left; }
-
- td.section-title {
- background: #eaeaea;
- text-align: left;
- font-weight: 700;
- padding: 16px 4px;
- }
-
- td.questions-table {
- text-align: left;
-
- .correct,
- .question,
- .selected {
- text-align: left;
- max-width: 300px;
-
- img {
- height: auto;
- max-width: 64px;
- }
- }
- }
-
- table.quiz-attempts {
- margin-bottom: 40px;
- }
-
- &.tab--students {
- .llms-options-page-contents {
-
- #llms-award-certificate-wrapper .components-button.is-secondary {
- background: #e1e1e1;
- border-radius: 8px;
- box-shadow: none;
- color: #414141;
- font-size: 13px;
- font-weight: 700;
- height: auto;
- padding: 8px 14px;
- }
-
- }
- }
-
- &.tab--enrollments,
- &.tab--sales {
-
- .llms-nav-tab-wrapper.llms-nav-secondary {
- margin-bottom: 0;
- }
-
- .llms-options-page-contents {
- box-shadow: none;
- background: none;
- margin-top: 20px;
- padding: 0;
- }
-
- .llms-nav-style-filters {
-
- .llms-analytics-form {
- align-items: center;
- align-self: center;
- color: #FFF;
- display: flex;
- font-size: 13px;
- gap: 5px;
-
- label {
- font-weight: 700;
- }
-
- input {
- border: 0;
- font-size: 13px;
- margin: 0;
- padding: 0 4px;
- vertical-align: middle;
- width: 110px;
- }
-
- .select2-container {
- input {
- width: 100% !important;
- }
- }
- }
-
- }
-
- .button.small {
- height: 23px;
- line-height: 23px;
- }
-
- .llms-analytics-filters {
- display: none;
-
- .llms-inside-wrap {
- background-color: #FFF;
- background-color: #FFF;
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
- margin: -20px 10px 20px 10px;
- padding: 20px;
- }
-
- .llms-nav-items {
- display: flex;
- flex-direction: column;
- gap: 20px;
- justify-content: space-between;
- margin: 0;
-
- @media only screen and (min-width: 782px) {
- flex-direction: row;
- }
-
- }
-
- .llms-nav-item {
- box-sizing: border-box;
- width: 100%;
-
- label {
- display: block;
- font-weight: 700;
- margin: 0 0 5px 0;
- }
-
- .select2-selection__rendered{
- word-wrap: break-word;
- text-overflow: inherit;
- white-space: normal;
- }
-
- }
-
- p {
- margin: 0;
- text-align: right;
-
- .llms-button-primary {
- display: inline-block;
- }
-
- }
-
- }
- }
-
- .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap {
- width: 160px;
- }
-
-
-}
-
-.llms-charts-wrapper {
- background-color: #FFF;
- border: 1px solid #dedede;
- border-radius: 12px;
- box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
- padding: 20px;
-}
-
-.llms-reporting-tab {
-
- h1, h2, h3, h4, h5, h6 {
- margin: 0;
- a {
- color: $color-brand-blue;
- text-decoration: none;
- &:hover {
- color: $color-brand-blue;
- }
- }
- }
-
- h2 {
- font-size: 22px;
- line-height: 1.5;
-
- &.llms-table-title {
- margin-bottom: 20px;
- }
-
- }
-
- h5 {
- font-size: 15px;
- line-height: 1.5;
- }
-
- .llms-reporting-body {
- background-color: #FFF;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );
- margin: 20px auto;
- padding: 0;
-
- .llms-reporting-stab {
- padding: 30px;
-
- .llms-table-header {
- margin: 0;
- }
- }
-
- .llms-gb-tab {
- padding: 30px;
- }
-
- .llms-reporting-header {
- padding: 30px;
- margin: 0;
-
- .llms-reporting-header-img {
- border-radius: 50%;
- display: inline-block;
- margin-right: 10px;
- overflow: hidden;
- vertical-align: middle;
- img {
- display: block;
- max-height: 64px;
- width: auto;
- }
- }
-
- .llms-reporting-header-info {
- display: inline-block;
- vertical-align: middle;
-
- }
-
- }
- }
-
-}
-
-.llms-reporting-breadcrumbs {
- margin: 0;
- padding: 0;
- a {
- color: $color-brand-blue;
- font-size: 15px;
- text-decoration: none;
- &:hover {
- color: $color-brand-blue-dark;
- }
- &:after {
- content: ' > ';
- color: #646970;
- }
-
- &:last-child {
- color: #000;
- font-weight: 700;
- &:after { display: none; }
- }
- }
-}
-
-#llms-students-table .name {
- text-align: left;
-}
-
-.llms-reporting-tab-content {
- display: flex;
-
- > header {
- @include clearfix;
- }
-
- h3 {
- margin-bottom: 20px;
- }
-
- .llms-reporting-tab-filter {
- float: right;
- position: relative;
- margin-right: 0.75em;
- width: 180px;
- top: -3px;
- }
-
-
- .llms-reporting-tab-main {
- flex: 3;
- max-width: 75%;
- }
- .llms-reporting-tab-side {
- flex: 1;
- margin-left: 20px;
- }
-
- > .llms-table-wrap {
- flex: 1;
- }
-
-}
-
-
-.llms-reporting-widgets {
- @include clearfix;
-}
-
-.llms-reporting-widget {
-
- border-top: 4px solid $color-brand-blue;
- background: #fafafa;
- margin-bottom: 10px;
- padding: 30px;
- @include clearfix;
-
- .fa {
- color: #999;
- float: left;
- font-size: 32px;
- margin-right: 10px;
- }
-
- strong {
- color: #333;
- font-size: 20px;
- line-height: 1.2;
- }
-
- &.llms-reporting-student-address {
- strong {
- line-height: 1.1;
- }
- }
-
- sup,
- .llms-price-currency-symbol {
- font-size: 75%;
- position: relative;
- top: -4px;
- vertical-align: baseline;
- }
-
- small {
- font-size: 13px;
- &.compare {
- margin-left: 5px;
- &.positive {
- color: $color-green;
- }
- &.negative {
- color: $color-red;
- }
- }
- }
-}
-
-
-.llms-reporting-event {
- border-left: 4px solid #555;
- background: #fafafa;
- font-size: 11px;
- line-height: 1.2;
- margin-bottom: 0.75em;
- padding: 10px;
- @include clearfix;
-
- &.color--blue {
- border-left-color: $color-blue;
- }
-
- &.color--green,
- &._enrollment_trigger,
- &._is_complete.yes {
- border-left-color: $color-green;
- }
-
- &.color--purple,
- &._status.enrolled {
- border-left-color: $color-purple;
- }
-
- &.color--red,
- &._status.expired,
- &._status.cancelled {
- border-left-color: $color-red;
- }
- &.color--orange,
- &._achievement_earned,
- &._certificate_earned,
- &._email_sent {
- border-left-color: $color-orange;
- }
-
- time {
- color: #888;
- }
-
- .llms-student-avatar {
- margin-left: 10px;
- float: right;
- }
-
- a {
- text-decoration: none;
- color: inherit;
- }
-
-}
-
-@media only screen and (min-width: 782px) {
- .llms-reporting.wrap {
- .llms-options-page-contents {
- .llms-nav-tab-wrapper.llms-nav-secondary {
- margin-left: 0;
- margin-right: 0;
- }
- }
- }
-}
-
-@import "../_includes/quiz-result-question-list";
diff --git a/assets/scss/admin/_resources.scss b/assets/scss/admin/_resources.scss
deleted file mode 100644
index c39557bff2..0000000000
--- a/assets/scss/admin/_resources.scss
+++ /dev/null
@@ -1,162 +0,0 @@
-.wrap.llms-resources {
-
- .llms-inside-wrap {
- padding-top: 30px;
- }
-
- #poststuff {
-
- #post-body.columns-2 {
- margin-right: 350px;
-
- #side-sortables {
- width: 330px;
-
- @media only screen and (max-width: 850px) {
- width: auto;
- }
-
- }
-
- }
-
- #postbox-container-1 {
- float: right;
- margin-right: -350px;
- width: 330px
- }
-
- h2 {
- padding: 12px 20px;
- }
-
- }
-
- #poststuff
- .postbox {
- background-color: #FFF;
- border: none;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.13 );
-
- .postbox-header {
- border-bottom-color: #efefef;
-
- }
-
- .inside {
- margin: 0;
- padding: 20px;
- }
- }
-
- #llms_dashboard_welcome_video {
-
- .llms-welcome-video {
-
- p {
- font-size: 15px;
- line-height: 1.5;
- margin: 0 0 40px 0;
- }
-
- .llms-welcome-video-container {
- height: 0;
- overflow: hidden;
- padding-top: 30px;
- padding-bottom: 56.25%;
- position: relative;
-
- iframe,
- object,
- embed {
- left: 0;
- height: 100%;
- position: absolute;
- top: 0;
- width: 100%;
- }
-
- }
-
- }
-
- }
-
- #llms_dashboard_getting_started {
-
- ul {
- margin: 0 0 20px 0;
-
- li {
- font-size: 15px;
- line-height: 1.5;
- margin-bottom: 15px;
- }
- }
-
- .llms-button-primary {
- display: block;
- margin-top: auto;
- max-width: 300px;
- text-align: center;
- }
-
- }
-
- #llms_dashboard_resource_links {
-
- ul {
- list-style: disc;
- margin: 5px 0 0 20px;
-
- li {
- font-size: 15px;
- line-height: 1.5;
- }
- }
-
- .llms-resource-links {
- display: grid;
- grid-template-columns: 1fr;
- grid-gap: 60px;
-
- a {
- display: inline-block;
- }
-
- .llms-list {
- display: flex;
- flex-direction: column;
-
- h3 {
- margin: 0 0 10px 0;
-
- .dashicons {
- color: #AAA;
- }
-
- }
-
- ul {
- margin-bottom: 20px;
- }
-
- .llms-button-primary,
- .llms-button-secondary,
- .llms-button-action {
- display: block;
- margin-top: auto;
- max-width: 300px;
- text-align: center;
- }
-
- }
-
- @media only screen and (min-width: 782px) {
- grid-template-columns: 1fr 1fr 1fr;
- }
- }
-
- }
-
-}
diff --git a/assets/scss/admin/_settings.scss b/assets/scss/admin/_settings.scss
deleted file mode 100644
index 92bbe89ecd..0000000000
--- a/assets/scss/admin/_settings.scss
+++ /dev/null
@@ -1,194 +0,0 @@
-.wrap.llms-reporting,
-.wrap.lifterlms-settings,
-.wrap.llms-status {
-
- .llms-inside-wrap {
- box-sizing: border-box;
- margin: 0 auto;
-
- .llms-nav-text {
- margin: 0 auto;
- }
- }
-
- .llms-subheader {
-
- .llms-save {
- flex: auto;
- text-align: right;
- }
-
- }
-
- .llms-nav-tab-wrapper.llms-nav-secondary {
- background-color: #FFF;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.15 );
- margin: 0 -20px 20px -10px;
-
- .llms-nav-items {
- padding-left: 0;
- }
-
- .llms-nav-item {
- .llms-nav-link:hover {
- background: #f0f0f1;
- color: #222222;
- }
-
- &.llms-active .llms-nav-link {
- background: #fafafa;
- color: $color-blue;
- border-top-color: $color-blue;
- }
-
- &.llms-active .llms-nav-link {
- font-weight: 700;
- }
- }
-
- .llms-nav-link {
- border-top: 2px solid transparent;
- padding: 14px;
- }
-
- }
-
- .llms-setting-group {
- background-color: #FFF;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );
- margin: 20px auto;
- padding: 20px;
-
- .llms-label {
- border-bottom: 1px solid #efefef;
- font-weight: 700;
- font-size: 20px;
- padding: 20px;
- margin: -20px -20px 20px;
-
- .llms-button-primary {
- margin-left: 10px;
- }
- }
-
- .llms-help-tooltip .dashicons {
- color: #444;
- cursor: help;
- }
-
- .form-table {
- margin: 0;
- tr:first-child .llms-subtitle {
- margin-top: 0;
- }
- }
-
- td[colspan="2"] {
- padding-top: 0;
- padding-left: 0;
- }
-
- tr.llms-disabled-field {
- opacity: 0.5;
- pointer-events: none;
- }
-
- p {
- font-size: 14px;
- }
- input[type="text"],
- input[type="password"],
- input[type="datetime"],
- input[type="datetime-local"],
- input[type="date"],
- input[type="month"],
- input[type="time"],
- input[type="week"],
- input[type="number"],
- input[type="email"],
- input[type="url"],
- input[type="search"],
- input[type="tel"],
- input[type="color"],
- select,
- textarea:not(.wp-editor-area) {
- width: 50%;
- &.medium { width: 30%; }
- &.small { width: 20%; }
- &.tiny { width: 10%; }
- }
- }
-
- @media only screen and (min-width: 782px) {
- .llms-nav-tab-wrapper.llms-nav-secondary {
- .llms-nav-item {
- &.llms-active .llms-nav-link {
- background: #fff;
- }
- }
- }
- }
-
- // Email Delivery providers.
- #llms-mailhawk-connect {
- height: auto;
- margin: 0 0 6px;
- position: relative;
-
- .dashicons {
- margin: -4px 4px 0 0;
- vertical-align: middle;
- }
- }
- #llms-sendwp-connect {
- height: auto;
- margin: 0 0 6px;
- position: relative;
-
- .fa {
- margin-right: 4px;
- }
- }
-
-}
-
-@media only screen and (min-width: 782px) {
- .wrap.lifterlms-settings {
- .llms-subheader {
- height: 40px;
- position: sticky;
- top: 32px;
- }
- .llms-nav-tab-wrapper.llms-nav-secondary {
- margin: 0 -20px 20px -22px;
-
- .llms-nav-items {
- padding-left: 10px;
- }
-
- }
- }
-
- .wrap.llms-reporting {
- .llms-nav-tab-wrapper.llms-nav-secondary {
- margin: 0 -20px 20px -22px;
-
- .llms-nav-items {
- padding-left: 10px;
- }
-
- }
- }
-
-
- .wrap.llms-status {
- .llms-nav-tab-wrapper.llms-nav-secondary {
- margin: 0 -20px 20px -22px;
-
- .llms-nav-items {
- padding-left: 10px;
- }
-
- }
- }
-}
diff --git a/assets/scss/admin/_tabs.scss b/assets/scss/admin/_tabs.scss
deleted file mode 100644
index 6ec7c3af44..0000000000
--- a/assets/scss/admin/_tabs.scss
+++ /dev/null
@@ -1,162 +0,0 @@
-.llms-nav-tab-wrapper {
- background: $color-blue;
- margin: 20px 0;
-
- &.llms-nav-secondary {
- background: #e1e1e1;
-
- .llms-nav-item {
- margin: 0;
-
- .llms-nav-link:hover,
- &.llms-active .llms-nav-link {
- background: darken( #e1e1e1, 8 );
- }
-
- }
-
- .llms-nav-link {
- color: #414141;
- font-size: 15px;
- padding: 8px 14px;
-
- .dashicons {
- font-size: 15px;
- height: 15px;
- width: 15px;
- }
- }
-
- }
-
- &.llms-nav-text {
- background: inherit;
- .llms-nav-items {
- padding-left: 0;
- }
- .llms-nav-item {
- background: inherit;
- color: #646970;
- &:last-child:after {
- display: none;
- }
- &:after {
- content: '|';
- display: inline-block;
- margin: 0 8px 0 6px;
- }
- .llms-nav-link:hover {
- background: inherit;
- color: $color-brand-blue;
- }
- &.llms-active .llms-nav-link {
- background: inherit;
- color: #000;
- font-weight: 600;
- text-decoration: none;
- }
- .llms-nav-link {
- color: $color-brand-blue;
- display: inline-block;
- letter-spacing: 0;
- margin: 0;
- padding: 0;
- text-decoration: underline;
- text-transform: none;
- }
- }
- }
-
- &.llms-nav-style-tabs {
- background-color: $color-brand-dark-blue;
- margin: 0;
- padding-top: 8px;
-
- .llms-nav-item {
- margin: 0 3px;
-
- .llms-nav-link {
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- }
-
- &.llms-active .llms-nav-link {
- background-color: #FFF;
- color: $color-brand-blue;
- font-weight: 700;
- }
- }
-
- }
-
- &.llms-nav-style-filters {
- background-color: $color-brand-blue;
- border-radius: 12px;
- margin: 20px 0;
- overflow: hidden;
- padding: 0;
-
- .llms-nav-items {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- padding-left: 0;
-
- @media only screen and (min-width: 782px) {
- flex-direction: row;
- }
-
- .llms-nav-item {
- float: none;
-
- .llms-nav-link {
- padding: 14px;
- }
- }
- }
- }
-
- .llms-nav-items {
- @include clearfix;
- margin: 0;
- padding-left: 10px;
- }
-
- .llms-nav-item {
- margin: 0;
-
- .llms-nav-link:hover {
- background: $color-brand-blue;
- }
- &.llms-active .llms-nav-link {
- background: $color-brand-dark-blue;
- }
-
- &.llms-active .llms-nav-link {
- font-weight: 400;
- }
-
- @media only screen and (min-width: 768px) {
- float: left;
-
- &.llms-nav-item-right {
- float: right;
- }
- }
-
- }
-
- .llms-nav-link {
-
- color: #fff;
- cursor: pointer;
- display: block;
- font-weight: 400;
- font-size: 15px;
- padding: 9px 18px;
- text-align: center;
- text-decoration: none;
- transition: all .3s ease;
-
- }
-}
diff --git a/assets/scss/admin/_wp-menu.scss b/assets/scss/admin/_wp-menu.scss
deleted file mode 100644
index 30168cc419..0000000000
--- a/assets/scss/admin/_wp-menu.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-#adminmenu {
-
- .toplevel_page_lifterlms .wp-menu-image img {
- padding-top: 6px;
- width: 20px;
- }
-
- .toplevel_page_lifterlms,
- .opensub .wp-submenu li.current,
- .wp-submenu li.current,
- .wp-submenu li.current,
- .wp-submenu li.current,
- a.wp-has-current-submenu:focus+.wp-submenu li.current {
- a[href*="page=llms-add-ons"] {
- color: $color-brand-orange;
- }
- }
-
-}
-
-
diff --git a/assets/scss/admin/breakpoints/_1030up.scss b/assets/scss/admin/breakpoints/_1030up.scss
deleted file mode 100644
index 2c94494dcd..0000000000
--- a/assets/scss/admin/breakpoints/_1030up.scss
+++ /dev/null
@@ -1,76 +0,0 @@
-/******************************************************************
-
-Desktop Stylesheet
-
-******************************************************************/
-
-//option page tab menu
-.llms-nav-tab {
- display: inline-block;
- width: 33.333%;
-}
-.llms-nav-tab-settings {
- display: inline-block;
- width: 25%;
-}
-
-//select box form wrapper
-#llms-form-wrapper {
- .llms-select {
- display: inline-block;
- width: 47.5%;
- &:first-child {
- margin-right: 5%;
- }
-
- }.llms-filter-options {
- display: inline-block;
- width: 47.5%;
-
- &.date-filter {
- margin-right: 5%;
- }.llms-date-select {
- margin-bottom: 0;
- }
-
- }.llms-date-select {
- width: 47.5%;
-
- &:first-child {
- margin-right: 5%
- }
-
- }
-}
-
-.llms-widget-row {
- @include clearfix;
- .llms-widget-1-5 {
- vertical-align: top;
- width: 20%;
- float: left;
- box-sizing: border-box;
- padding: 0 5px;
- }
- .llms-widget-1-4 {
- vertical-align: top;
- width: 25%;
- float: left;
- box-sizing: border-box;
- padding: 0 5px;
- }
- .llms-widget-1-3 {
- width: 33.3%;
- float: left;
- box-sizing: border-box;
- padding: 0 5px;
- }
- .llms-widget-1-2 {
- width: 50%;
- float: left;
- box-sizing: border-box;
- padding: 0 5px;
- vertical-align: top;
- }
-
-}
diff --git a/assets/scss/admin/breakpoints/_1240up.scss b/assets/scss/admin/breakpoints/_1240up.scss
deleted file mode 100644
index 2b3457079d..0000000000
--- a/assets/scss/admin/breakpoints/_1240up.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-/******************************************************************
-
-large Monitor Stylesheet
-
-******************************************************************/
-
-.llms-nav-tab-filters,
-.llms-nav-tab-settings {
- float: left;
- width: 12.5%;
-}
diff --git a/assets/scss/admin/breakpoints/_481up.scss b/assets/scss/admin/breakpoints/_481up.scss
deleted file mode 100644
index 05e7bc2f76..0000000000
--- a/assets/scss/admin/breakpoints/_481up.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-/******************************************************************
-
-Larger Phones
-
-******************************************************************/
-
-//select box form wrapper
-#llms-form-wrapper {
-
- .llms-checkbox {
- width: 33%;
- //text-align: center;
-
- }
-}
diff --git a/assets/scss/admin/breakpoints/_768up.scss b/assets/scss/admin/breakpoints/_768up.scss
deleted file mode 100644
index be119130ce..0000000000
--- a/assets/scss/admin/breakpoints/_768up.scss
+++ /dev/null
@@ -1,73 +0,0 @@
-/******************************************************************
-
-Tablets and small computers
-
-******************************************************************/
-
-ul.tabs li{
- display: inline-block;
- }
-
-//option page tab menu
-.llms-nav-tab {
- display: inline-block;
- width: 33%;
-}
-.llms-nav-tab-settings {
- display: inline-block;
- width: 25%;
-}
-
-//select box form wrapper
-#llms-form-wrapper {
- .llms-select {
- width: 50%;
- max-width: 500px;
-
- }.llms-filter-options {
- width: 50%;
- //display: inline-block;
- max-width: 500px;
-
- }.llms-date-select {
- width: 47.5%;
-
- &:first-child {
- margin-right: 5%
- }
-
- }
-}
-
-.llms-widget {
- input[type="text"],
- input[type="password"],
- input[type="datetime"],
- input[type="datetime-local"],
- input[type="date"],
- input[type="month"],
- input[type="time"],
- input[type="week"],
- input[type="number"],
- input[type="email"],
- input[type="url"],
- input[type="search"],
- input[type="tel"],
- input[type="color"],
- select,
- textarea, {
- width: 50%;
-
- &.medium { width: 30%; }
- &.small { width: 20%; }
- &.tiny { width: 10%; }
- }
-
- // .form-table th {
- // width: 140px;
- // }
-
-}
-
-
-
diff --git a/assets/scss/admin/breakpoints/_base.scss b/assets/scss/admin/breakpoints/_base.scss
deleted file mode 100644
index 4e196a12a8..0000000000
--- a/assets/scss/admin/breakpoints/_base.scss
+++ /dev/null
@@ -1,93 +0,0 @@
-/******************************************************************
-
-Base Mobile
-
-******************************************************************/
-
-.llms-nav-tab,
-.llms-nav-tab-filters {
- display: block;
- width: 100%;
-}
-
-form.llms-nav-tab-filters.full-width {
- width: 100%;
-
- label {
- display: inline-block;
- width: 10%;
- text-align: left;
- }
-
- .select2-container {
- width: 85% !important;
- }
-}
-
-.llms-nav-tab-settings {
- display: block;
- width: 100%;
-}
-
-//select box form wrapper
-#llms-form-wrapper {
- .llms-select {
- width: 100%;
- margin-bottom: 20px;
-
- }.llms-checkbox {
- display: inline-block;
- width: 100%;
- text-align: left;
-
- }.llms-filter-options {
- width: 100%;
- //margin-bottom: 20px;
-
- }.llms-date-select {
- width: 100%;
- display: inline-block;
- margin-bottom: 20px;
- input[type="text"] {
- width: 100%;
- }
-
- }.llms-search-button {
- //display: inline-block;
- //width: 30%;
- #llms-search-button {
-
- //float: right;
- }
-
- }
-
-}
-
-// .llms-widget-full {
-// &.top {
-// margin-top: 20px;
-// }
-// }
-// .llms-widget {
-// .form-table td {
-// padding: 15px 0;
-// ul { margin: 5px 0 0; }
-
-
-// .conditional-field {
-// display: none;
-// margin-left: 25px;
-// }
-// .conditional-radio:checked ~ .conditional-field {
-// display: block;
-// }
-
-
-// }
-// }
-
-ul.tabs li{
- display: block;
- }
-
diff --git a/assets/scss/admin/metaboxes/_builder-launcher.scss b/assets/scss/admin/metaboxes/_builder-launcher.scss
deleted file mode 100644
index 0e40e50c30..0000000000
--- a/assets/scss/admin/metaboxes/_builder-launcher.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-.llms-builder-launcher {
-
- p {
- margin-top: 0;
- }
-
- ol {
- margin-top: -6px;
- }
-
- .llms-button-primary {
- box-sizing: border-box;
- }
-
-}
diff --git a/assets/scss/admin/metaboxes/_llms-metabox.scss b/assets/scss/admin/metaboxes/_llms-metabox.scss
deleted file mode 100644
index 6bd7c3b382..0000000000
--- a/assets/scss/admin/metaboxes/_llms-metabox.scss
+++ /dev/null
@@ -1,215 +0,0 @@
-
-// This is a "legacy" rule that may be removable
-.llms-mb-list {
-
- label {
- font-size: 15px;
- font-weight: 700;
- line-height: 1.5;
- display: block;
- width: 100%;
- }
-
- .description {
- margin-bottom: 8px;
- }
-
- .input-full {
- width: 100%;
- }
-}
-
-
-#poststuff .llms-metabox {
-
- @extend %cf;
-
- h2, h3, h6 {
- margin: 0;
- padding: 0;
- }
-
- h2 {
- font-size: 18px;
- font-weight: 700;
- }
-
- h3 {
- color: #777;
- font-size: 16px;
- }
-
- h4 {
- border-bottom: 1px solid #e5e5e5;
- padding: 0;
- margin: 0;
- }
-
- .llms-transaction-test-mode {
- background: #ffffd7;
- font-style: italic;
- left: 0;
- padding: 2px;
- position: absolute;
- right: 0;
- top: 0;
- text-align: center;
- }
-
- a.llms-editable,
- .llms-metabox-icon,
- button.llms-editable {
- color: $color-grey;
- text-decoration: none;
- &:hover {
- color: $color-brand-blue;
- }
- }
-
- button.llms-editable {
- border: none;
- background: none;
- cursor: pointer;
- padding: 0;
- vertical-align: top;
- }
-
- h4 button.llms-editable {
- float: right;
- }
-
- .llms-table {
- margin-top: 10px;
-
- }
-}
-
-.llms-metabox-section {
- background: #fff;
- margin-top: 25px;
- position: relative;
-
- &.no-top-margin {
- margin-top: 0;
- }
-
- .llms-metabox-field {
- margin: 15px 0;
- position: relative;
- label {
- color: #777;
- display: block;
- margin-bottom: 5px;
- font-weight: 500;
- vertical-align: baseline;
- }
-
- select,
- textarea,
- input[type="text"],
- input[type="number"] {
- width: 100%;
- }
-
- input.md-text {
- width: 105px;
- }
-
- input.sm-text {
- width: 45px;
- }
-
-
- .llms-datetime-field {
-
- .llms-date-input {
- width: 95px;
- }
- .llms-time-input {
- width: 45px;
- }
- em {
- font-style: normal;
- padding: 0 3px;
- }
-
- }
-
- }
-
-
-}
-
-.llms-collapsible {
-
- @extend %clearfix;
-
- border: 1px solid #e5e5e5;
- position: relative;
- margin-top: 0;
- margin-bottom: -1px;
-
- &:last-child {
- margin-bottom: 0;
- }
-
- &.opened .llms-collapsible-header {
- .dashicons-arrow-down {
- display: none;
- }
- .dashicons-arrow-up {
- display: inline;
- }
- }
-
- .llms-collapsible-header {
- @extend %clearfix;
- padding: 10px;
-
- h3 {
- color: #777;
- margin: 0;
- font-size: 16px;
- }
-
- .dashicons-arrow-up {
- display: inline;
- }
- .dashicons-arrow-up {
- display: none;
- }
-
- a {
- text-decoration: none;
- }
-
- .dashicons {
- color: #777;
- cursor: pointer;
- transition: color .4s ease;
- &:hover {
- color: $color-blue;
- }
-
- &.dashicons-warning,&.dashicons-warning:hover,
- &.dashicons-trash:hover,
- &.dashicons-no:hover {
- color: $color-danger;
- }
- &.dashicons-warning.medium-danger {
- &,
- &:hover {
- color: $color-orange;
- }
- }
- }
-
- }
-
- .llms-collapsible-body {
- @extend %clearfix;
- display: none;
- padding: 10px;
- }
-
-}
diff --git a/assets/scss/admin/metaboxes/_metabox-engagements-type.scss b/assets/scss/admin/metaboxes/_metabox-engagements-type.scss
deleted file mode 100644
index d50c36466b..0000000000
--- a/assets/scss/admin/metaboxes/_metabox-engagements-type.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-.submitbox .llms-mb-section,
-.llms-award-engagement-submitbox .llms-mb-list {
- margin-bottom: 12px;
- &:last-of-type {
- margin-bottom: 0;
- }
- @at-root .sync-action,
- &.student-info,
- &.post_author_override label {
- &:before {
- // dashicons-admin-users.
- font: normal 20px/1 dashicons;
- speak: never;
- display: inline-block;
- margin-left: -1px;
- padding-right: 3px;
- vertical-align: top;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- position: relative;
- top: -1px;
- color: #8c8f94;
- body:not(.admin-color-fresh) & {
- color: currentColor; // Used when selecting a different admin color scheme from the default one.
- }
- }
- }
- &.student-info,
- &.post_author_override label {
- &:before {
- content: '\f110';
- }
- }
- @at-root .sync-action:before {
- content: '\f113';
- color: white;
- }
- &.post_author_override label {
- display: inline-block;
- width: auto;;
- }
-}
diff --git a/assets/scss/admin/metaboxes/_metabox-field-repeater.scss b/assets/scss/admin/metaboxes/_metabox-field-repeater.scss
deleted file mode 100644
index 8c64687be5..0000000000
--- a/assets/scss/admin/metaboxes/_metabox-field-repeater.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-.llms-mb-container .tab-content ul:not(.select2-selection__rendered).llms-mb-repeater-fields > li.llms-mb-list {
- border-bottom: none;
- padding: 0 0 10px;
-}
-
-.llms-mb-list.repeater {
-
- .llms-repeater-rows {
- position: relative;
- margin-top: 10px;
- min-height: 10px;
-
- &.dragging {
- background: #efefef;
- box-shadow: inset 0 0 0 1px #e5e5e5;
- }
- }
-
- .llms-repeater-row {
- background: #fff;
- }
-
- .llms-mb-repeater-fields {
-
- }
-
- .llms-mb-repeater-footer {
- text-align: right;
- margin-top: 20px;
- }
-
- .tmce-active .wp-editor-area {
- color: #32373c; // wp core default color
- }
-
-}
diff --git a/assets/scss/admin/metaboxes/_metabox-instructors.scss b/assets/scss/admin/metaboxes/_metabox-instructors.scss
deleted file mode 100644
index f03294ceed..0000000000
--- a/assets/scss/admin/metaboxes/_metabox-instructors.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-._llms_instructors_data.repeater {
- .llms-repeater-rows .llms-repeater-row:first-child {
- .llms-repeater-remove { display: none; }
- }
-
- .llms-mb-list {
- padding: 0 5px !important;
- }
-}
diff --git a/assets/scss/admin/metaboxes/_metabox-orders.scss b/assets/scss/admin/metaboxes/_metabox-orders.scss
deleted file mode 100644
index 3f4a603064..0000000000
--- a/assets/scss/admin/metaboxes/_metabox-orders.scss
+++ /dev/null
@@ -1,62 +0,0 @@
-.post-type-llms_order #post-body-content { display: none; }
-#lifterlms-order-details {
- .handlediv,
- .handlediv.button-link,
- .postbox-header { display: none;}
- .inside {
- padding: 20px;
- margin-top: 0;
-
- }
-}
-
-// failed transaction color
-.llms-table tbody tr.llms-txn-failed td {
- background-color: rgba( $color-red, 0.5 );
- border-bottom-color: rgba( $color-red, 0.5 );
-}
-
-// refunded transaction color
-.llms-table tbody tr.llms-txn-refunded td {
- background-color: rgba( orange, 0.5 );
- border-bottom-color: rgba( orange, 0.5 );
-}
-
-.llms-txn-refund-form,
-.llms-manual-txn-form {
- .llms-metabox-section {
- margin-top: 0;
- }
- .llms-metabox-field {
- text-align: right;
- input {
- &[type="number"] { max-width: 100px; }
- &[type="text"] { max-width: 340px; }
-
- }
- }
-}
-
-.llms-manual-txn-form {
- background-color: #eaeaea;
- .llms-metabox-section {
- background-color: #eaeaea;
- }
-}
-
-#llms-remaining-edit {
- display: none;
-}
-.llms-remaining-edit--content {
- label, span, textarea {
- display: block;
- }
-
- label {
- margin-bottom: 20px;
- }
-
- textarea, input {
- width: 100%;
- }
-}
diff --git a/assets/scss/admin/metaboxes/_metabox-product.scss b/assets/scss/admin/metaboxes/_metabox-product.scss
deleted file mode 100644
index c4c4e758a8..0000000000
--- a/assets/scss/admin/metaboxes/_metabox-product.scss
+++ /dev/null
@@ -1,75 +0,0 @@
-.llms-metabox {
-
- #llms-new-access-plan-model {
- display: none;
- }
-
- .llms-access-plans {
- @extend %clearfix;
- margin-top: 10px;
-
- > .llms-no-plans-msg { display: none; }
- > .llms-no-plans-msg:last-child {
- box-shadow: inset 0 0 0 1px #e5e5e5;
- display: block;
- text-align: center;
- padding: 10px;
- }
-
- &.dragging {
- background: #efefef;
- box-shadow: inset 0 0 0 1px #e5e5e5;
- }
-
- .llms-spinning {
- z-index: 1;
- }
-
- .llms-invalid {
- border-color: $color-danger;
- .dashicons-warning {
- display: inline;
- }
- }
- .llms-needs-attention .dashicons-warning.medium-danger {
- display: inline;
- }
- .dashicons-warning {
- display: none;
- }
- }
-
- .llms-access-plan {
-
- text-align: left;
-
- [data-tip]:before {
- text-align: center;
- }
-
- .llms-plan-link,
- [data-controller] {
- display: none;
- }
-
- &:hover,
- &.opened {
- .llms-plan-link {
- display: inline-block;
- }
- }
-
- .llms-metabox-field {
- margin: 5px 0;
- }
-
- .llms-required {
- color: $color-danger;
- margin-left: 3px;
- }
- .notice {
- margin-left: 0;
- }
- }
-
-}
diff --git a/assets/scss/admin/metaboxes/_metabox-students.scss b/assets/scss/admin/metaboxes/_metabox-students.scss
deleted file mode 100644
index 7b0aef36ef..0000000000
--- a/assets/scss/admin/metaboxes/_metabox-students.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-.llms-metabox-students {
- .llms-table {
- tr .name {
- text-align: left;
- }
- }
-
- .llms-add-student:hover {
- color: $color-green;
- }
- .llms-remove-student:hover {
- color: $color-red;
- }
-
-}
diff --git a/assets/scss/admin/modules/_forms.scss b/assets/scss/admin/modules/_forms.scss
deleted file mode 100644
index fac4a4b803..0000000000
--- a/assets/scss/admin/modules/_forms.scss
+++ /dev/null
@@ -1,190 +0,0 @@
-/******************************************************************
-
-Form Styles
-
-******************************************************************/
-
-// lifterlms form wrapper
-#llms-form-wrapper {
-
- // setup defaults
- input[type="text"],
- input[type="password"],
- input[type="datetime"],
- input[type="datetime-local"],
- input[type="date"],
- input[type="month"],
- input[type="time"],
- input[type="week"],
- input[type="number"],
- input[type="email"],
- input[type="url"],
- input[type="search"],
- input[type="tel"],
- input[type="color"],
- input[type="checkbox"],
- select,
- textarea,
- .llms-field {
-
- // a focused input (or hovered on)
- &:focus,
- &:active {
-
- } // end hover or focus
- }
-
- // sub wrapper for search filter form (analytics)
- .llms-search-form-wrapper {
- border-bottom: 1px solid $color-grey;
- margin: 20px 0;
-
- }
-
-
- #llms_analytics_search {
- border:none !important;
- text-shadow: none !important;
- border: none !important;
- outline: none !important;
- box-shadow: none !important;
- margin: 0 !important;
- color: $color-white !important;
- background: $color-blue !important;
- border-radius: 0;
- transition: .5s;
-
- &:hover {
- background: $color-darkblue !important;
-
- }&:active {
- background: $color-lightblue !important;
- }
- }
-
-} // end input defaults
-
-
-#llms-skip-setup-form {
- .llms-admin-link {
- background:none!important;
- border:none;
- padding:0!important;
- color:#0074a2;
- cursor:pointer;
- &:hover {
- color:#2ea2cc
- }&:focus{
- color:#124964;
- }
-
- }
-
-}
-
-/**
- * Toggle Switch ( replaces checkbox on admin panels )
- */
-.llms-switch {
- position: relative;
-
- .llms-toggle {
- position: absolute;
- margin-left: -9999px;
- visibility: hidden;
- }
-
- .llms-toggle + label {
- box-sizing: border-box;
- display: block;
- position: relative;
- cursor: pointer;
- outline: none;
- user-select: none;
- }
-
- input.llms-toggle-round + label {
- border: 2px solid #6c7781;
- border-radius: 10px;
- height: 20px;
- width: 36px;
- }
- input.llms-toggle-round + label:before,
- input.llms-toggle-round + label:after {
- box-sizing: border-box;
- content: '';
- display: block;
- position: absolute;
- transition: background 0.4s;
- }
-
- input.llms-toggle-round:checked + label {
- border-color: #11a0d2;
- background-color: #11a0d2;
- }
-
- // Primary dot (that moves.)
- input.llms-toggle-round + label:after {
- height: 12px;
- left: 2px;
- top: 2px;
- background-color: #6c7781;
- border-radius: 50%;
- transition: margin 0.4s;
- width: 12px;
- z-index: 3;
- }
-
- // Primary dot when toggle on.
- input.llms-toggle-round:checked + label:after {
- background-color: $color-white;
- margin-left: 16px;
- }
-
- // Secondary dot: empty on the right side of the toggle when toggled off.
- input.llms-toggle-round + label:before {
- height: 8px;
- top: 4px;
- border: 1px solid #6c7781;
- border-radius: 50%;
- right: 4px;
- width: 8px;
- z-index: 2;
- }
-
- input.llms-toggle-round:checked + label:before {
- border-color: $color-white;
- border-radius: 0;
- left: 6px;
- right: auto;
- width: 2px;
- }
-
-}
-
-#llms-profile-fields {
- margin: 50px 0;
- .llms-form-field {
- padding-left: 0;
- }
- label {
- display: block;
- font-weight: bold;
- padding: 8px 0 2px;
- }
- .type-checkbox .type-checkbox {
- label {
- display: initial;
- font-weight: initial;
- padding: 0;
- }
- input {
- display: inline-block;
- margin-bottom: 0;
- width: 1rem;
- }
- }
- select {
- max-width: 100%;
- }
-}
diff --git a/assets/scss/admin/modules/_icons.scss b/assets/scss/admin/modules/_icons.scss
deleted file mode 100644
index b937c1072c..0000000000
--- a/assets/scss/admin/modules/_icons.scss
+++ /dev/null
@@ -1,92 +0,0 @@
-/******************************************************************
-
-SVG Styles
-
-******************************************************************/
-
-svg {
- &.icon {
- height: 24px;
- width: 24px;
- display: inline-block;
- fill: currentColor; // Inherit color
- vertical-align: baseline; // Options: baseline, sub, super, text-top, text-bottom, middle, top, bottom
-
- // Different styling for when an icon appears in a button element
- button & {
- height: 18px;
- width: 18px;
- margin: 4px -4px 0 4px;
- filter: drop-shadow( 0 1px #eee );
- float: right;
-
- }&.menu-icon {
- height: 20px;
- width: 20px;
- display: inline-block;
- fill: currentColor;
- vertical-align: text-bottom;
- margin-right: 10px;
-
- }&.tree-icon {
- height: 13px;
- width: 13px;
- vertical-align: middle;
-
- }&.section-icon {
- height: 16px;
- width: 16px;
- vertical-align: text-bottom;
-
- }&.button-icon {
- height: 16px;
- width: 16px;
- vertical-align: text-bottom;
-
- }&.button-icon-attr {
- height: 10px;
- width: 10px;
- vertical-align: middle;
-
- }&.list-icon {
- height: 12px;
- width: 12px;
- vertical-align: middle;
-
- &.on {
- color: $color-blue;
-
- }&.off {
- color: $color-cinder;
- }
-
- }&.detail-icon {
- height: 16px;
- width: 16px;
- vertical-align: text-bottom;
- cursor:default;
-
- &.on {
- color: $color-blue;
-
- }&.off {
- color: $color-lightgrey;
- }
- }
-
- }
-
- &.icon-ion {}
-
- &.icon-ion-edit {}
-
- // rotate for arrow tips
- &.icon-ion-arrow-up {
- transform: rotate(90deg);
- }
-
- use {
- pointer-events: none;
- }
-
-}
\ No newline at end of file
diff --git a/assets/scss/admin/modules/_llms-order-note.scss b/assets/scss/admin/modules/_llms-order-note.scss
deleted file mode 100644
index b055ebb144..0000000000
--- a/assets/scss/admin/modules/_llms-order-note.scss
+++ /dev/null
@@ -1,35 +0,0 @@
-.llms-order-note {
-
- .llms-order-note-content {
- background: #efefef;
- margin-bottom: 10px;
- padding: 10px;
- position: relative;
- &:after {
- border-style: solid;
- border-color: #efefef transparent;
- border-width: 10px 10px 0 0;
- bottom: -10px;
- content: '';
- display: block;
- height: 0;
- left: 20px;
- position: absolute;
- width: 0;
-
- }
- p {
- font-size: 13px;
- margin: 0;
- line-height: 1.5;
- }
- }
-
- .llms-order-note-meta {
- color: #999;
- font-size: 11px;
- margin-left: 10px;
- }
-
-
-}
diff --git a/assets/scss/admin/modules/_mb-tabs.scss b/assets/scss/admin/modules/_mb-tabs.scss
deleted file mode 100644
index d8ea24e292..0000000000
--- a/assets/scss/admin/modules/_mb-tabs.scss
+++ /dev/null
@@ -1,57 +0,0 @@
-/******************************************************************
-
-Metabox Tabs
-
-******************************************************************/
-
-// free space up if the metabox is on the side
-#side-sortables .tab-content {
- padding: 0;
-}
-
-.llms-mb-container .tab-content{
- display: none;
- background-color: #FFF;
- padding: 0 20px;
-
- ul:not(.select2-selection__rendered) {
- margin: 0 0 15px 0;
-
- > li {
- padding: 20px 0;
- margin: 0;
-
- &.select:not([class*="d-"]) {
- width: 100%;
- }
-
- &:last-child {
- border: 0;
- padding-bottom: 0;
-
- }
-
- &.top {
- border-bottom: 0;
- padding-bottom: 0;
- }
-
- }
- }
-
- .full-width { width: 100%; }
-
- #wp-content-editor-tools {
- background: none;
- }
-
-}
-
-.llms-mb-container .tab-content.llms-active{
- display: inherit;
-}
-
-
-.llms-mb-container .tab-content .no-border {
- border-bottom: 0px;
-}
diff --git a/assets/scss/admin/modules/_merge-codes.scss b/assets/scss/admin/modules/_merge-codes.scss
deleted file mode 100644
index 51a800991b..0000000000
--- a/assets/scss/admin/modules/_merge-codes.scss
+++ /dev/null
@@ -1,61 +0,0 @@
-.button.llms-merge-code-button {
- vertical-align: middle;
- svg {
- margin-right: 2px;
- position: relative;
- top: 4px;
- width: 16px;
- g {
- fill: currentColor;
- }
- }
-}
-
-.llms-mb-container {
- .llms-merge-code-wrapper {
- float: right;
- top: -5px;
- }
-}
-
-.llms-merge-code-wrapper {
- display: inline;
- position: relative;
-}
-
-.llms-merge-codes {
- background: #f7f7f7;
- border: 1px solid #ccc;
- border-radius: 3px;
- box-shadow: 0 1px 0 #ccc;
- color: #555;
- display: none;
- left: 1px;
- overflow: hidden;
- position: absolute;
- top: 30px;
- width: 200px;
-
- ul {
- margin: 0;
- padding: 0;
- }
-
- li {
- cursor: pointer;
- margin: 0;
- padding: 4px 8px !important;
- border-bottom: 1px solid #ccc;
- }
-
- li:hover {
- color: #23282d;
- background: #fefefe;
- }
-
- &.active {
- display: block;
- z-index: 777;
- }
-
-}
diff --git a/assets/scss/admin/modules/_top-modal.scss b/assets/scss/admin/modules/_top-modal.scss
deleted file mode 100644
index 9a118bcebc..0000000000
--- a/assets/scss/admin/modules/_top-modal.scss
+++ /dev/null
@@ -1,203 +0,0 @@
-/******************************************************************
-
-Styles for topModal modal
-
-******************************************************************/
-
-/**
- * Base modal styles
- */
-.topModal {
- display:none;
- position:relative;
- border:4px solid #808080;
- background:#fff;
- z-index:1000001;
- padding:2px;
- max-width:500px;
- margin: 34px auto 0;
- box-sizing: border-box;
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- background-color: #ffffff;
- border-radius: 2px;
- border: 1px solid #dddddd;
-
-}.topModalClose {
- float:right;
- cursor:pointer;
- margin-right: 10px;
- margin-top: 10px;
-
-}.topModalContainer {
- display: none;
- overflow: auto;
- overflow-y: hidden;
- position: fixed;
- top: 0 !important;
- right: 0;
- bottom: 0;
- left: 0;
- -webkit-overflow-scrolling: touch;
- width: auto !important;
- margin-left: 0 !important;
- background-color: transparent !important;
- z-index: 100002 !important;
-
-}.topModalBackground {
- display:none;
- background:#000;
- position:fixed;
- height:100%;
- width:100%;
- top:0 !important;
- left:0;
- margin-left: 0 !important;
- z-index: 100002 !important;
- box-sizing: border-box;
- overflow: auto;
- overflow-y: hidden;
-
-}body.modal-open {
- overflow: hidden;
-
-}.llms-modal-header {
- border-top-right-radius: 1px;
- border-top-left-radius: 1px;
- background: $color-blue;
- color: #eeeeee;
- padding: 10px 15px;
- font-size: 18px;
-
-}#llms-icon-modal-close {
- width:16px;
- height: 16px;
- fill: $color-white;
-
-}.llms-modal-content {
- padding: 20px;
-
- h3 {
- margin-top: 0;
- }
-
-}
-
-/**
- * Custom Modal Styles for LifterLMS
- */
-.llms-modal-form {
-
- h1 {
- margin-top: 0;
- }
-
- input[type=text] {
- width: 100%;
- }
-
- textarea,
- input[type="text"],
- input[type="password"],
- input[type="file"],
- input[type="datetime"],
- input[type="datetime-local"],
- input[type="date"],
- input[type="month"],
- input[type="time"],
- input[type="week"],
- input[type="number"],
- input[type="email"],
- input[type="url"],
- input[type="search"],
- input[type="tel"],
- input[type="color"] {
- padding: 0 .4em 0 .4em;
- margin-bottom: 2em;
- vertical-align: middle;
- border-radius: 3px;
- min-width: 50px;
- max-width: 635px;
- width: 100%;
- min-height: 32px;
- background-color: #fff;
- border: 1px solid $color-lightgrey;
- margin: 0 0 24px 0;
- outline: none;
- transition: border 0.3s ease-in-out 0s;
-
- &:focus {
- background: $color-white;
- border: 1px solid $color-blue;
-
- }
- }
-
- textarea {
- padding: .4em !important;
- height: 100px !important;
- border-radius: 3px;
- vertical-align: middle;
- min-height: 32px;
- outline: none;
- box-sizing: border-box;
-
- &:focus {
- background: $color-white;
- border: 1px solid $color-blue;
-
- }
-
- }
-
- .chosen-container-single .chosen-single {
- border-radius: 3px;
- vertical-align: middle;
- min-height: 32px;
- border: 1px solid $color-lightgrey;
- width: 100%;
- background: $color-white !important;
- outline: none;
- box-sizing: border-box;
- box-shadow: 0 0 0 #fff;
- line-height: 32px;
- margin: 0 0 24px 0;
-
- &:focus {
- background: $color-white;
- border: 1px solid $color-blue;
- }
- }
-
- .chosen-container-single .chosen-single div b {
- margin-top: 4px;
- }
-
- .chosen-search input[type=text] {
- border: 1px solid $color-lightgrey;
-
- &:focus {
- background-color: $color-white;
- border: 1px solid $color-blue;
- }
-
- }
-
- .chosen-container-single .chosen-drop {
- margin-top: -28px;
- }
-
- .llms-button-primary, .llms-button-secondary {
- padding: 10px 10px;
- border-radius: 0;
- transition: .5s;
- box-shadow: 0 1px 1px #ccc;
-
- &.full {
- width: 100%;
- }
- }
-}
-
-.modal-open .select2-dropdown {
- z-index: 1000005;
-}
diff --git a/assets/scss/admin/modules/_voucher.scss b/assets/scss/admin/modules/_voucher.scss
deleted file mode 100644
index 7262f52e43..0000000000
--- a/assets/scss/admin/modules/_voucher.scss
+++ /dev/null
@@ -1,133 +0,0 @@
-a.llms-voucher-delete {
- background: $color-danger;
- color: $color-white;
- display: block;
- padding: 4px 2px;
- text-decoration: none;
- transition: ease .3s all;
-
- &:hover {
- background: #af3a26;
- }
-}
-
-
-
-.llms-voucher-codes-wrapper,
-.llms-voucher-redemption-wrapper {
-
- table {
- width: 100%;
- border-collapse: collapse;
-
- th, td {
- border: none;
- }
-
- thead {
- background-color: $color-blue;
- color:#fff;
- th {
- padding: 10px 10px;
- }
- }
-
- tr {
- counter-increment: row-counter;
- &:nth-child(even) {
- background-color: #F1F1F1;
- }
-
- td {
- padding: 5px;
- &:first-child:before {
- content: counter( row-counter );
- }
- }
- }
- }
-}
-
-.llms-voucher-codes-wrapper {
-
- table {
- width: 100%;
- border-collapse: collapse;
-
- th, td {
- border: none;
- }
-
- thead {
- background-color: $color-blue;
- color:#fff;
- }
-
- tr {
- &:nth-child(even) {
- background-color: #F1F1F1;
- }
-
- td {
-
- span {
- display: inline-block;
- min-width: 30px;
- }
- }
- }
- }
-
- button {
- cursor: pointer;
- }
-
- .llms-voucher-delete {
- float: right;
- margin-right: 15px;
- }
-
- .llms-voucher-uses {
- width: 50px;
- }
-
- .llms-voucher-add-codes {
- float: right;
-
- input[type="text"] {
- width: 30px;
- }
- }
-}
-
-.llms-voucher-export-wrapper {
-
- .llms-voucher-export-type {
- width: 100%;
-
- p {
- margin: 0 0 0 15px;
- }
- }
-
- .llms-voucher-email-wrapper {
- width: 100%;
- margin: 25px 0;
-
- input[type="text"] {
- width: 100%;
- }
-
- p {
- margin: 0;
- }
- }
-
- > button {
- float: right;
- }
-}
-
-.postbox .inside {
- overflow: auto;
-}
diff --git a/assets/scss/admin/modules/_widgets.scss b/assets/scss/admin/modules/_widgets.scss
deleted file mode 100644
index a596a084d6..0000000000
--- a/assets/scss/admin/modules/_widgets.scss
+++ /dev/null
@@ -1,174 +0,0 @@
-.llms-widget {
- background-color: #FFF;
- border: 1px solid #dedede;
- border-radius: 12px;
- box-shadow: 0px 0px 1px rgba(48, 49, 51, 0.05), 0px 2px 4px rgba(48, 49, 51, 0.1);
- box-sizing: border-box;
- margin-bottom: 20px;
- padding: 20px;
- position: relative;
- width: 100%;
-
- &.alt {
-
- border: 1px solid $color-lightgrey;
- background-color: #efefef;
- margin-bottom: 10px;
-
- .llms-label {
- color: #777;
- font-size: 14px;
- margin-bottom: 10px;
- padding-bottom: 5px;
- }
-
- h2 {
- color: #444;
- font-weight: 300;
- }
-
- }
-
- a {
- border-bottom: 1px dotted $color-brand-blue;
- display: inline-block;
- text-decoration: none;
-
- &:hover {
- border-bottom: 1px dotted $color-brand-blue-dark;
- }
- }
-
- // Nested for specificity (matches h1).
- .llms-widget-content {
- margin: .67em 0;
- color: $color-brand-blue;
- font-size: 2.4em;
- font-weight: 700;
- line-height: 1;
- word-break: break-all;
- }
-
- h2 {
- font-size: 1.8em;
- }
-
- .llms-label {
- box-sizing: border-box;
- font-size: 18px;
- font-weight: 400;
- margin: 0 0 10px 0;
- text-align: center;
- }
-
- .llms-chart {
- width: 100%;
- padding: 10px;
- box-sizing: border-box;
- }
-
- mark.yes {
- background-color: #7ad03a;
- }
-
- .llms-subtitle {
- margin-bottom: 0;
- }
-
- .spinner {
- float: none;
- left: 50%;
- margin: -10px 0 0 -10px;
- position: absolute;
- top: 50%;
- z-index: 2;
- }
-
- &.is-loading {
-
- &:before {
- background: $color-white;
- bottom: 0;
- content: '';
- left: 0;
- opacity: 0.9;
- position: absolute;
- right: 0;
- top: 0;
- z-index: 1;
- }
-
- .spinner {
- visibility: visible;
- }
-
- }
-
- td[colspan="2"] {
- padding-left: 0;
- }
-
- tr.llms-disabled-field {
- opacity: 0.5;
- pointer-events: none;
- }
-
-}
-
-.llms-widget-1-3,
-.llms-widget-1-4,
-.llms-widget-1-5 {
- text-align: center;
-}
-
-
-.llms-widget {
- .llms-widget-info-toggle {
- color: #AAA;
- cursor: pointer;
- font-size: 16px;
- position: absolute;
- right: 20px;
- top: 20px;
- }
-
- &.info-showing {
- .llms-widget-info {
- display: block;
- }
- }
-}
-.llms-widget-info {
- background: $color-cinder;
- color: $color-white;
- bottom: -50px;
- display: none;
- padding: 15px;
- position: absolute;
- text-align: center;
- left: 10px;
- right: 15px;
- z-index: 3;
- &:before {
- content: '';
- border: 12px solid transparent;
- border-bottom-color: $color-cinder;
- left: 50%;
- margin-left: -12px;
- position: absolute;
- top: -24px;
- }
-
- p {
- margin: 0;
- }
-
-}
-
-.llms-widget-row {
- @include clearfix();
-}
-
-.llms-widget-row .no-padding {
- padding: 0 !important;
-}
diff --git a/assets/scss/admin/partials/_grid.scss b/assets/scss/admin/partials/_grid.scss
deleted file mode 100644
index add6846568..0000000000
--- a/assets/scss/admin/partials/_grid.scss
+++ /dev/null
@@ -1,276 +0,0 @@
-/******************************************************************
-
-Grids for Breakpoints
-
-******************************************************************/
-
-// using a mixin since we can't use placeholder selectors
-@mixin grid-col {
- float: left;
- padding-right: 0.75em;
- box-sizing: border-box;
-
-}
-
-// the last column
-.last-col {
- float: right;
- padding-right: 0 !important;
-}
-.last-col:after {
- clear: both;
-}
-
-/*
-Mobile Grid Styles
-These are the widths for the mobile grid.
-There are four types, but you can add or customize
-them however you see fit.
-*/
-@media (max-width: 767px) {
-
- .m-all {
- @include grid-col;
- width: 100%;
- padding-right: 0;
- }
-
- .m-1of2 {
- @include grid-col;
- width: 50%;
- }
-
- .m-1of3 {
- @include grid-col;
- width: 33.33%;
- }
-
- .m-2of3 {
- @include grid-col;
- width: 66.66%;
- }
-
- .m-1of4 {
- @include grid-col;
- width: 25%;
- }
-
- .m-3of4 {
- @include grid-col;
- width: 75%;
- }
-
- .m-right {
- text-align: center;
- }
- .m-center {
- text-align: center;
- }
- .m-left {
- text-align: center;
- }
-
- .d-right {
- text-align: right;
- }
- .d-center {
- text-align: center;
- }
- .d-left {
- text-align: left;
- }
-
-} // end mobile styles
-
-
-/* Portrait tablet to landscape */
-@media (min-width: 768px) and (max-width: 1029px) {
-
- .t-all {
- @include grid-col;
- width: 100%;
- padding-right: 0;
- }
-
- .t-1of2 {
- @include grid-col;
- width: 50%;
- }
-
- .t-1of3 {
- @include grid-col;
- width: 33.33%;
- }
-
- .t-2of3 {
- @include grid-col;
- width: 66.66%;
- }
-
- .t-1of4 {
- @include grid-col;
- width: 25%;
- }
-
- .t-3of4 {
- @include grid-col;
- width: 75%;
- }
-
- .t-1of5 {
- @include grid-col;
- width: 20%;
- }
-
- .t-2of5 {
- @include grid-col;
- width: 40%;
- }
-
- .t-3of5 {
- @include grid-col;
- width: 60%;
- }
-
- .t-4of5 {
- @include grid-col;
- width: 80%;
- }
-
- .d-right {
- text-align: right;
- }
- .d-center {
- text-align: center;
- }
- .d-left {
- text-align: left;
- }
-
-} // end tablet
-
-/* Landscape to small desktop */
-@media (min-width: 1030px) {
-
- .d-all {
- @include grid-col;
- width: 100%;
- padding-right: 0;
- }
-
- .d-1of2 {
- @include grid-col;
- width: 50%;
- }
-
- .d-1of3 {
- @include grid-col;
- width: 33.33%;
- }
-
- .d-2of3 {
- @include grid-col;
- width: 66.66%;
- }
-
- .d-1of4 {
- @include grid-col;
- width: 25%;
- }
-
- .d-3of4 {
- @include grid-col;
- width: 75%;
- }
-
- .d-1of5 {
- @include grid-col;
- width: 20%;
- }
-
- .d-2of5 {
- @include grid-col;
- width: 40%;
- }
-
- .d-3of5 {
- @include grid-col;
- width: 60%;
- }
-
- .d-4of5 {
- @include grid-col;
- width: 80%;
- }
-
- .d-1of6 {
- @include grid-col;
- width: 16.6666666667%;
- }
-
- .d-1of7 {
- @include grid-col;
- width: 14.2857142857%;
- }
-
- .d-2of7 {
- @include grid-col;
- width: 28.5714286%;
- }
-
- .d-3of7 {
- @include grid-col;
- width: 42.8571429%;
- }
-
- .d-4of7 {
- @include grid-col;
- width: 57.1428572%;
- }
-
- .d-5of7 {
- @include grid-col;
- width: 71.4285715%;
- }
-
- .d-6of7 {
- @include grid-col;
- width: 85.7142857%;
- }
-
- .d-1of8 {
- @include grid-col;
- width: 12.5%;
- }
-
- .d-1of9 {
- @include grid-col;
- width: 11.1111111111%;
- }
-
- .d-1of10 {
- @include grid-col;
- width: 10%;
- }
-
- .d-1of11 {
- @include grid-col;
- width: 9.09090909091%;
- }
-
- .d-1of12 {
- @include grid-col;
- width: 8.33%;
- }
-
- .d-right {
- text-align: right;
- }
- .d-center {
- text-align: center;
- }
- .d-left {
- text-align: left;
- }
-
-} // end desktop styles
diff --git a/assets/scss/admin/post-tables/_llms_orders.scss b/assets/scss/admin/post-tables/_llms_orders.scss
deleted file mode 100644
index 27bf992fb0..0000000000
--- a/assets/scss/admin/post-tables/_llms_orders.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-.wp-list-table {
- @include order_status_badges();
-}
-
-#lifterlms-order-transactions .llms-table tfoot th {
- text-align: right;
-}
diff --git a/assets/scss/admin/post-tables/_post-tables.scss b/assets/scss/admin/post-tables/_post-tables.scss
deleted file mode 100644
index f3843b0916..0000000000
--- a/assets/scss/admin/post-tables/_post-tables.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-.llms-post-table-post-filter {
- display: inline-block;
- margin-right: 6px;
- max-width: 100%;
- width: 220px;
-}
diff --git a/assets/scss/builder.scss b/assets/scss/builder.scss
deleted file mode 100644
index f6341b9f07..0000000000
--- a/assets/scss/builder.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-@import "_includes/vars";
-@import "_includes/vars-brand-colors";
-@import "_includes/extends";
-@import "_includes/mixins";
-
-@import "admin/course-builder";
diff --git a/assets/scss/certificates.scss b/assets/scss/certificates.scss
deleted file mode 100644
index 7837f8fc64..0000000000
--- a/assets/scss/certificates.scss
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Reset.
- */
-body {
- background-color: #fff;
- background-image: none;
- margin: 0 auto;
-}
-
-.header, .footer,
-.wrap-header, .wrap-footer,
-.site-header, .site-footer,
-.nav-primary, .primary-nav {
- display: none;
-}
-
-.llms-certificate-container {
- margin: 40px auto 0;
-}
-
-/**
- * Legacy Template.
- */
-.llms-certificate-container:not(.cert-template-v2) {
-
- padding: 0;
- overflow: hidden;
-
- .certificate-background {
- position: relative;
- z-index: 1;
- width: 100%;
- display: block;
- }
-
- .llms_certificate,
- .llms_my_certificate {
- margin: 80px;
- position: relative;
- z-index: 2;
- }
-
- h1:first-child {
- text-align: center;
- }
-
-}
-
-/**
- * V2 Template
- */
-.llms-certificate-wrapper {
- margin: 0 auto;
-}
-.llms-certificate-container.cert-template-v2 {
- width: 100%;
- height: 100%;
- background-size: 100% 100% !important;
- box-sizing: border-box;
-
- .wp-block-columns .wp-block-column > * {
- margin-top: 0 !important;
- margin-bottom: 0 !important;
- }
-}
-
-/**
- * Certificate Actions Footer.
- */
-.llms-print-certificate {
- margin-top: 40px;
- margin-bottom: 40px;
- text-align: center;
-
- form {
- display: inline;
- }
-}
-
-
-
-@media print {
-
- html, body {
- print-color-adjust: exact !important;
- height: 100%;
- overflow: hidden;
- }
-
- @page { size: auto; }
-
- .no-print {
- display: none;
- }
-
- // Make everything on the page invisible.
- body * {
- visibility: hidden !important;
- background: #fff none;
- }
-
- .site, .site-content {
- overflow: visible;
- }
-
- // Remove all headers, menus and footers.
- header, aside, nav, footer {
- display: none !important;
- }
-
- // Make sure a .container parent doesn't shift the certificate see: https://github.com/gocodebox/lifterlms/issues/1163.
- .single-llms_my_certificate .container,
- .single-llms_certificate .container {
- width: 100%;
- }
-
- // Make only the certificate container and its children visible.
- .llms-certificate-container,
- .llms-certificate-container * {
- visibility: visible !important;
- background: transparent none;
- }
-
- // Position certificate absolutely and center horizontally.
- .llms-certificate-container:not(.cert-template-v2) {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- margin: 0 auto;
- background: #fff none;
- }
-
- .llms-certificate-container.cert-template-v2 {
- margin: 0 auto !important;
- print-color-adjust: exact !important;
- transform: scale( 0.95 ); // Don't ram the edge of the paper.
- }
-
-}
diff --git a/assets/scss/editor.scss b/assets/scss/editor.scss
deleted file mode 100644
index 0c54087c58..0000000000
--- a/assets/scss/editor.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-.llms-block-empty,
-.llms-block-error {
- padding: 1em;
- border: 1px solid #e0e0e0;
- font-size: 16px;
-}
-
-.llms-block-empty {
- font-style: italic;
-}
-
-.wp-block .llms-button-primary {
- text-decoration: none;
-}
-
-.llms-navigation-link-settings .components-panel__row > .components-base-control {
- width: 100%;
-}
-
-.llms-block-icon {
- transform: scale(0.75);
-}
-
-.llms-loop-item {
- .llms-video-wrapper {
- aspect-ratio: 16/9;
- position: relative;
- iframe {
- width: 100%;
- height: 100%;
- position: absolute;
- left: 0;
- top: 0;
- object-fit: cover;
- }
- }
-}
diff --git a/assets/scss/frontend/_checkout.scss b/assets/scss/frontend/_checkout.scss
deleted file mode 100644
index a98c34e0a2..0000000000
--- a/assets/scss/frontend/_checkout.scss
+++ /dev/null
@@ -1,202 +0,0 @@
-.llms-checkout-wrapper {
- .llms-person-login-form-wrapper {
- margin-bottom: 40px;
- }
- form.llms-login {
- display: none;
- }
- .llms-form-heading {
- margin: 0 0 20px;
- }
-}
-
-.llms-checkout {
- position: relative;
-}
-
-.llms-checkout-cols-2 {
- @extend %clearfix;
-
- &.llms-col-2 {
-
- section {
- background-color: $color-white;
- border: 1px solid $color-lightgrey;
- border-radius: $radius-medium;
- padding: 20px;
-
- .llms-form-heading {
- padding: 0;
- }
- }
- }
-
- @media all and (min-width: 800px) {
-
- .llms-checkout-col {
- float: left;
-
- &.llms-col-1 {
- margin-right: 20px;
- width: calc( 58% - 20px );
- }
- &.llms-col-2 {
- margin-left: 20px;
- width: calc( 42% - 20px );
-
- button {
- width: 100%;
- }
- }
- }
-
- }
-
-}
-
- .llms-checkout-section {
- margin-bottom: 40px;
- position: relative;
- }
-
- .llms-checkout-section-content {
- &.llms-form-fields {
- margin: 0px;
- }
-
- .llms-label {
- font-weight: 400;
- }
-
- .llms-order-summary {
- list-style-type: none;
- margin: 0;
- padding: 0;
-
- li {
- list-style-type: none;
- margin: 0 0 15px 0;
-
- }
-
- :not(.llms-label) {
- font-weight: 700;
- }
-
- li.llms-pricing {
- &.on-sale,
- &.has-coupon {
- .price-regular { text-decoration: line-through; }
- }
- }
-
-
- }
-
- .llms-coupon-wrapper {
- border-top: 1px solid $color-border;
- margin-top: 20px;
- padding-top: 20px;
-
- .llms-coupon-entry {
- display: none;
- margin-top: 20px;
- }
- }
-
- }
-
- .llms-form-field.llms-payment-gateway-option {
- align-items: center;
- display: flex;
- gap: 8px;
-
- label + span.llms-description {
- display: inline-block;
- margin-left: 5px;
- }
-
- .llms-description {
- a {
- border: none;
- box-shadow: none;
- text-decoration: none;
- }
- img {
- display: inline;
- max-height: 22px;
- vertical-align: middle;
- }
- }
-
- }
-
- .llms-checkout-wrapper ul.llms-payment-gateways {
- margin: 5px 0 0;
- padding: 0;
- }
- ul.llms-payment-gateways {
- list-style-type: none;
-
- li:last-child:after {
- border-bottom: 1px solid $color-border;
- content: '';
- display: block;
- margin: 20px 0;
- }
-
- .llms-payment-gateway {
- margin-bottom: 30px;
- list-style-type: none;
- &:last-child {
- margin-bottom: none;
- }
-
- &.is-selected {
- .llms-payment-gateway-option label {
- font-weight: 700;
- }
- .llms-gateway-fields {
- display: block;
-
- .llms-notice {
- margin-left: 10px;
- margin-right: 10px;
- }
- }
- }
-
- .llms-form-field {
- padding-bottom: 0;
- }
- }
-
- .llms-gateway-description {
- margin-left: 40px;
- }
-
- .llms-gateway-fields {
- display: none;
- margin: 5px 0 20px;
- }
-
- .llms-payment-gateway-error {
- padding: 0 10px;
- }
- }
-
- .llms-checkout-confirm {
- margin: 0;
- }
-
- .llms-payment-method {
- margin: 10px 10px 0;
- }
-
- .llms-gateway-description {
- p {
- font-size: 14px;
- font-style: italic;
- margin: 0;
- }
- }
diff --git a/assets/scss/frontend/_course.scss b/assets/scss/frontend/_course.scss
deleted file mode 100644
index 637700cbdd..0000000000
--- a/assets/scss/frontend/_course.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-.llms-meta-info {
- margin: 40px 0;
- .llms-meta-title {
- margin: 0;
- }
- .llms-meta {
- p {
- margin-bottom: 0;
- }
- span {
- font-weight: 700;
- }
- }
-}
-.llms-course-progress {
- margin: 40px auto;
- max-width: 480px;
- text-align: center;
-}
diff --git a/assets/scss/frontend/_llms-access-plans.scss b/assets/scss/frontend/_llms-access-plans.scss
deleted file mode 100644
index 99a7544e34..0000000000
--- a/assets/scss/frontend/_llms-access-plans.scss
+++ /dev/null
@@ -1,222 +0,0 @@
-.llms-access-plans {
- @extend %clearfix;
-
- @media all and (min-width: 600px) {
- $cols: 1;
- @while $cols <= 5 {
- &.cols-#{$cols} .llms-access-plan {
- width: calc( 100% / $cols );
- }
- $cols: $cols + 1;
- }
- }
-
-}
-
-.llms-free-enroll-form {
- margin-bottom: 0;
-}
-
-.llms-access-plan {
- box-sizing: border-box;
- float: left;
- text-align: center;
- width: 100%;
-
- .llms-access-plan-content,
- .llms-access-plan-footer {
- background: #f1f1f1;
- }
-
- &.featured {
-
- .llms-access-plan-featured {
- background: $color-brand-blue;
- border-top-left-radius: $radius-small;
- border-top-right-radius: $radius-small;
- }
-
- .llms-access-plan-content {
- border-radius: 0;
- }
-
- .llms-access-plan-title {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- }
-
- .llms-access-plan-footer,
- .llms-access-plan-content {
- border-left: 3px solid $color-brand-blue;
- border-right: 3px solid $color-brand-blue;
- }
-
- .llms-access-plan-footer {
- border-bottom-color: $color-brand-blue;
- }
-
- }
-
- &.on-sale {
- .price-regular {
- text-decoration: line-through;
- .lifterlms-price {
- font-weight: 400;
- }
- }
- }
-
- .stamp {
- background: $color-brand-blue;
- border-radius: $radius-small;
- color: $color-white;
- display: inline-block;
- font-size: 14px;
- font-style: normal;
- font-weight: bold;
- line-height: 1;
- padding: 5px 8px 4px;
- }
-}
-
-.llms-access-plan-featured {
- color: #fff;
- font-size: 14px;
- font-weight: 700;
- letter-spacing: 1px;
- margin: 0 2px 0 2px;
- padding: 5px 0 0;
-}
-
-.llms-access-plan-content {
- border-top-right-radius: $radius-small;
- border-top-left-radius: $radius-small;
- margin: 0 2px 0;
- overflow: hidden;
-
- .llms-access-plan-pricing {
- color: $color-black;
- padding: 20px 0 0;
- }
-}
-
-.llms-access-plan-title {
- background: $color-brand-blue;
- color: $color-white;
- margin: 0;
- padding: 10px 15px;
-}
-
-.llms-access-plan-pricing {
-
- .llms-price-currency-symbol {
- font-size: 14px;
- vertical-align: top;
- }
-
-}
-
-.llms-access-plan-price {
-
- .lifterlms-price {
- font-weight: 700;
- }
-
- &.sale {
- padding: 5px 0;
- border-top: 1px solid #d0d0d0;
- border-bottom: 1px solid #d0d0d0;
- }
-}
-
-.llms-access-plan-trial,
-.llms-access-plan-schedule,
-.llms-access-plan-sale-end,
-.llms-access-plan-expiration {
- font-size: 16px;
-}
-
-.llms-access-plan-description {
- color: $color-black;
- font-size: 16px;
- padding: 10px 10px 0;
-
- ul {
- margin: 0;
- li {
- border-bottom: 1px solid #d0d0d0;
- list-style-type: none;
- &:last-child {
- border-bottom: none;
- }
- }
- }
-
- div, img, p, ul, li {
- &:last-child { margin-bottom: 0; }
- }
-}
-
-.llms-access-plan-restrictions {
- margin-top: 20px;
-
- .stamp {
- vertical-align: baseline;
- }
-
- ul {
- margin: 5px 0 0 0;
- padding: 0;
-
- li {
- font-size: 14px;
- list-style-type: none;
- margin: 0;
- padding: 0;
- }
- }
-
- a {
- color: $color-orange;
- &:hover {
- color: $color-brand-orange-dark;
- }
- }
-}
-
-.llms-access-plan-footer {
- border-bottom: 3px solid #f1f1f1;
- border-bottom-left-radius: $radius-small;
- border-bottom-right-radius: $radius-small;
- padding: 15px;
- margin: 0 2px 2px 2px;
-
- .button {
- display: inline-block;
- }
-
- .llms-access-plan-pricing {
- padding: 0 0 10px;
- }
-}
-
-.webui-popover-content .llms-members-only-restrictions {
- text-align: center;
- ul,ol,li,p {
- margin: 0;
- padding: 0;
- }
- ul,ol,li {
- list-style-type: none;
- }
- li {
- padding: 8px 0;
- border-top: 1px solid #3b3b3b;
- &:first-child {
- border-top: none;
- }
- a {
- display: block;
- }
- }
-}
diff --git a/assets/scss/frontend/_llms-achievements-certs.scss b/assets/scss/frontend/_llms-achievements-certs.scss
deleted file mode 100644
index 334ae3dee3..0000000000
--- a/assets/scss/frontend/_llms-achievements-certs.scss
+++ /dev/null
@@ -1,110 +0,0 @@
-ul.llms-achievements-loop,
-.lifterlms ul.llms-achievements-loop,
-ul.llms-certificates-loop,
-.lifterlms ul.llms-certificates-loop {
-
- @include clearfix();
- list-style-type: none;
- margin: 0 -10px;
- padding: 0;
-
- li.llms-achievement-loop-item,
- li.llms-certificate-loop-item {
- box-sizing: border-box;
- display: block;
- float: left;
- list-style-type: none;
- margin: 0;
- padding: 10px;
- width: 100%;
- }
-
- @media all and (min-width: 600px) {
- $cols: 1;
- @while $cols <= 5 {
- &.loop-cols-#{$cols} li.llms-achievement-loop-item,
- &.loop-cols-#{$cols} li.llms-certificate-loop-item {
- width: calc( 100% / $cols );
- }
- $cols: $cols + 1;
- }
- }
-
-}
-
-.llms-achievement,
-.llms-certificate {
-
- background: $color-white;
- border: none;
- border-radius: $radius-medium;
- color: $color-black;
- display: block;
- padding: 20px 0;
- text-decoration: none;
- width: 100%;
-
- &:hover {
- background: #eaeaea;
- }
-
- .llms-achievement-img {
- display: block;
- margin: 0 auto;
- max-width: 80%;
- }
-
- .llms-achievement-title {
- color: $color-black;
- font-size: 16px;
- margin: 0;
- padding: 10px;
- text-align: center;
- }
-
- .llms-certificate-title {
- color: $color-black;
- font-size: 16px;
- margin: 0;
- padding: 0 0 10px;
- }
-
- .llms-achievement-info,
- .llms-achievement-date {
- display: none;
- }
-
- .llms-achievement-content {
- padding: 20px;
- &:empty {
- padding: 0;
- }
- *:last-child {
- margin-bottom: 0;
- }
- }
-
-}
-
-.llms-certificate {
- border: 4px double $color-border;
- padding: 20px 10px;
- background: $color-white;
- text-align: center;
- &:hover {
- background: $color-white;
- border-color: #eaeaea;
- }
-}
-
-.llms-achievement-modal {
- .llms-achievement {
- background: #fff;
- }
- .llms-achievement-info {
- display: block;
- }
- .llms-achievement-title {
- display: none;
- }
-}
diff --git a/assets/scss/frontend/_llms-author.scss b/assets/scss/frontend/_llms-author.scss
deleted file mode 100644
index 63f77ead98..0000000000
--- a/assets/scss/frontend/_llms-author.scss
+++ /dev/null
@@ -1,69 +0,0 @@
-.llms-author {
- .name {
- margin-left: 5px;
- }
- .label {
- margin-left: 5px;
- }
- .avatar {
- border-radius: 50%;
- }
- .bio {
- margin-top: 5px;
- }
-}
-
-
-.llms-instructor-info {
- margin: 40px 0;
- .llms-meta-title {
- margin: 0;
- }
- .llms-instructors {
-
- .llms-col {
- &:first-child .llms-author {
- margin-left: 0;
- }
- &:last-child .llms-author {
- margin-right: 0;
- }
- }
-
- .llms-author {
- background: $color-white;
- border: 1px solid $color-border;
- border-top: 4px solid $color-blue;
- border-bottom-right-radius: $radius-small;
- border-bottom-left-radius: $radius-small;
- color: $color-black;
- text-align: center;
- margin: 45px 0 0;
- padding: 0 20px 20px;
-
- .avatar {
- background: $color-brand-blue;
- border: 4px solid $color-blue;
- display: block;
- margin: -35px auto 10px;
- }
-
- .llms-author-info {
- display: block;
- // margin: 0 0 5px;
- &.name {
- font-weight: 700;
- }
- &.label {
- font-size: 85%;
- }
- &.bio {
- font-size: 90%;
- margin-bottom: 0;
- }
- }
- }
-
- }
-
-}
diff --git a/assets/scss/frontend/_llms-notifications.scss b/assets/scss/frontend/_llms-notifications.scss
deleted file mode 100644
index 134078dd30..0000000000
--- a/assets/scss/frontend/_llms-notifications.scss
+++ /dev/null
@@ -1,214 +0,0 @@
-.llms-notification {
-
- @include clearfix();
-
- background: $color-white;
- box-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;
- border-top: 4px solid $color-blue;
- color: $color-black;
- opacity: 0;
- padding: 12px;
- position: fixed;
- right: -800px;
- top: 24px;
- transition:
- opacity 0.4s ease-in-out,
- right 0.4s ease-in-out,
- ;
- visibility: hidden;
- width: auto;
- z-index: 9999999;
-
- &.visible {
- left: 12px;
- opacity: 1;
- right: 12px;
- transition:
- opacity 0.4s ease-in-out,
- right 0.4s ease-in-out,
- top 0.1s ease-in-out,
- background 0.2s ease-in-out,
- transform 0.2s ease-in-out
- ;
- visibility: visible;
-
- &:hover {
- .llms-notification-dismiss {
- opacity: 1;
- }
- }
-
- }
-
- .llms-notification-content {
- align-items: center;
- display: flex;
-
- }
-
- .llms-notification-main {
- align-self: flex-start;
- flex: 4;
- order: 2;
- }
-
- .llms-notification-title {
- color: $color-black;
- font-size: 18px;
- margin: 0;
- }
-
- .llms-notification-body {
- font-size: 14px;
- line-height: 1.4;
- p, li {
- font-size: inherit;
- }
- p {
- margin-bottom: 8px;
- img {
- max-width: 100%;
- }
- }
-
- .llms-mini-cert {
- background: #f6f6f6;
- border: 1px solid #d0d0d0;
- box-shadow: inset 0 0 0 3px #fefefe, inset 0 0 0 4px #dedede;
- padding: 16px 16px 24px;
- margin-top: 12px;
- .llms-mini-cert-title {
- font-size: 16px;
- font-weight: 700;
- margin: 12px auto;
- text-align: center;
- }
- .llms-mini-cert--body {
- width: 100%;
- > div {
- &:nth-child(1) { width:65%; }
- &:nth-child(2) { width:35%; }
- &:nth-child(3) { width:85%; }
- &:nth-child(4) { width:75%; margin-top: 18px; }
- &:nth-child(5) { width:70%; }
- &:nth-child(6) { margin-left: 12px; margin-bottom:-24px; } // Dot.
- &:nth-child(7) { width:65%; margin-right: 12px; }
- }
- }
- .llms-mini-cert--mock-line {
- border-radius: 2px;
- height: 8px;
- background: #b0b0b0;
- background-image: linear-gradient( to right, #b0b0b0 0%, #a0a0a0 20%, #b0b0b0 40%, #b0b0b0 100% );
- background-repeat: no-repeat;
- margin: 4px auto;
- }
- .llms-mini-cert--mock-dot {
- background: #b0b0b0;
- border-radius: 50%;
- display: inline-block;
- content: '';
- height: 24px;
- width: 24px;
- }
- p { margin-bottom: 0; }
- }
- }
-
- .llms-notification-aside {
- align-self: flex-start;
- flex: 1;
- margin-right: 12px;
- order: 1;
- }
-
- .llms-notification-icon {
- display: block;
- max-width: 64px;
- }
-
- .llms-notification-footer {
- border-top: 1px solid #e5e5e5;
- font-size: 12px;
- margin-top: 12px;
- padding: 6px 6px 0;
- text-align: right;
-
- a {
- color: $color-black;
- }
- }
-
- .llms-notification-dismiss {
- color: $color-danger;
- cursor: pointer;
- font-size: 22px;
- position: absolute;
- right: 10px;
- top: 8px;
- transition: opacity 0.4s ease-in-out;
- }
-
-}
-
-.llms-sd-notification-center {
-
- .llms-notification-list,
- .llms-notification-list-item {
- list-style-type: none;
- margin: 0;
- padding: 0;
- }
-
- .llms-notification-list-item {
- &:hover .llms-notification {
- background: #fcfcfc;
- }
- }
-
- .llms-notification {
- opacity: 1;
- border-top: 1px solid #e5e5e5;
- left: auto;
- padding: 24px;
- position: relative;
- right: auto;
- top: auto;
- visibility: visible;
- width: auto;
- .llms-notification-aside {
- max-width: 64px;
- }
- .llms-notification-footer {
- border: none;
- padding: 0;
- text-align: left;
- }
- .llms-progress {
- display: none !important;
- }
- .llms-notification-date {
- color: #515151;
- float: left;
- margin-right: 6px;
- }
- .llms-mini-cert {
- margin: 0 auto;
- max-width: 380px;
- }
- }
-}
-
-@media all and (min-width: 480px) {
- .llms-notification {
- right: -800px;
- width: 360px;
- &.visible {
- left: auto;
- right: 24px;
- }
- .llms-notification-dismiss {
- opacity: 0;
- }
- }
-}
diff --git a/assets/scss/frontend/_llms-outline-collapse.scss b/assets/scss/frontend/_llms-outline-collapse.scss
deleted file mode 100644
index ad109277a6..0000000000
--- a/assets/scss/frontend/_llms-outline-collapse.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-.llms-widget-syllabus--collapsible {
-
- .llms-section {
-
- .section-header {
-
- cursor: pointer;
-
- }
-
- &.llms-section--opened {
-
- .llms-collapse-caret {
- .fa-caret-right { display: none; }
- }
-
- }
-
- &.llms-section--closed {
-
- .llms-collapse-caret {
- .fa-caret-down { display: none; }
- }
-
- .llms-lesson {
- display: none;
- }
-
- }
-
- }
-
- .llms-syllabus-footer {
-
- text-align: left;
-
- }
-
-}
diff --git a/assets/scss/frontend/_llms-pagination.scss b/assets/scss/frontend/_llms-pagination.scss
deleted file mode 100644
index f466b37ffa..0000000000
--- a/assets/scss/frontend/_llms-pagination.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-.llms-pagination {
-
- ul {
- list-style-type: none;
- margin: 40px 0;
- padding: 0;
- @extend %cf;
-
- li {
-
- float: left;
-
- a {
- border-bottom: 0;
- text-decoration: none;
- }
-
- .page-numbers {
- padding: 0.5em;
- text-decoration: underline;
-
- &.current {
- text-decoration: none;
- }
- }
-
- }
-
- }
-
-}
\ No newline at end of file
diff --git a/assets/scss/frontend/_llms-progress.scss b/assets/scss/frontend/_llms-progress.scss
deleted file mode 100644
index d9911c74e0..0000000000
--- a/assets/scss/frontend/_llms-progress.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-/* progress bar */
-.llms-progress {
- clear: both;
- display: flex;
- flex-direction: row-reverse;
- position: relative;
- height: 1em;
- width: 100%;
- margin: 15px 0;
-}
-
-.llms-progress .llms-progress-bar {
- background-color: $color-border;
- position: relative;
- height: .4em;
- top: .3em;
- width: 100%;
-}
-
-.llms-progress .progress-bar-complete {
- background-color: $color-brand-pink;
- height: 100%;
-}
-
-.progress__indicator {
- float: right;
- text-align: right;
- height: 1em;
- line-height: 1em;
- margin-left: 5px;
- white-space: nowrap;
-}
diff --git a/assets/scss/frontend/_llms-quizzes.scss b/assets/scss/frontend/_llms-quizzes.scss
deleted file mode 100644
index 1719261690..0000000000
--- a/assets/scss/frontend/_llms-quizzes.scss
+++ /dev/null
@@ -1,368 +0,0 @@
-.single-llms_quiz {
- #llms-quiz-wrapper {
- @import "../_includes/quiz-result-question-list";
- }
- .llms-return {
- margin-bottom: 10px;
- }
-
- .llms-quiz-results {
- @include clearfix();
-
- .llms-donut {
- &.passing {
- color: $color-success;
- svg path {
- stroke: $color-success;
- }
- }
- &.pending {
- color: #555;
- svg path {
- stroke: #555;
- }
- }
- &.failing {
- color: $color-danger;
- svg path {
- stroke: $color-danger;
- }
- }
- }
-
- .llms-quiz-results-aside,
- .llms-quiz-results-main,
- .llms-quiz-results-history {
- margin-bottom: 20px;
- }
-
-
- @media all and (min-width: 600px) {
- .llms-quiz-results-aside {
- float: left;
- width: 220px;
-
- + .llms-quiz-results-main {
- float: right;
- width: calc( 100% - 300px );
- + .llms-quiz-results-history {
- float: right;
- width: calc( 100% - 300px );
- }
- }
- }
- .llms-quiz-results-history {
- clear: right;
- }
- }
-
- }
-
- ul.llms-quiz-meta-info {
- list-style-type: none;
- margin: 0;
- padding: 0;
-
- li {
- list-style-type: none;
- margin: 10px 0 0;
- padding: 0
- }
- }
-
- ul.llms-quiz-meta-info {
- margin-bottom: 10px;
- }
-
- .llms-quiz-buttons {
- margin-top: 10px;
- text-align: left;
-
- form { display: inline-block; }
- }
-
-}
-
-.llms-quiz-question-wrapper {
- min-height: 140px;
- position: relative;
-
- .llms-quiz-loading {
- bottom: 20px;
- left: 0;
- position: absolute;
- right: 0;
- text-align: center;
- z-index: 1;
- }
-
- .llms-question-image {
-
- img {
- height: auto;
- max-width: 100%;
- }
-
- }
-}
-
-.llms-quiz-ui {
- position: relative;
-
- .llms-quiz-header {
- align-items: center;
- display: flex;
- margin: 0 0 40px;
- }
-
- .llms-progress {
- background-color: $color-border;
- flex-direction: row;
- height: 8px;
- margin: 0;
- overflow: hidden;
- .progress-bar-complete {
- transition: width 0.3s ease-in;
- width: 0;
- }
- }
-
- .llms-error {
- @include clearfix();
- background: rgba( $color-red, .15 );
- border: 1px solid $color-red;
- border-radius: $radius-small;
- margin: 20px 0;
- padding: 15px;
-
- a {
- color: $color-red;
- float: right;
- font-size: 22px;
- line-height: 1;
- text-decoration: none;
- }
-
- }
-
- .llms-quiz-counter {
- display: none;
-
- color: #6a6a6a;
- float: right;
- font-size: 18px;
-
- .llms-sep {
- margin: 0 5px;
- }
- }
-
- .llms-quiz-nav {
- margin-top: 20px;
- button {
- margin: 0 10px 0 0;
- }
- }
-
-}
-
-// single question wrapper
-.llms-question-wrapper {
-
- .llms-question-text {
- font-size: 30px;
- font-weight: 400;
- margin-bottom: 15px;
- }
-
- ol.llms-question-choices {
- list-style-type: none;
- margin: 0;
- padding: 0;
-
- li.llms-choice {
- border-bottom: 1px solid #e8e8e8;
- margin: 0;
- padding: 0;
- position: relative;
-
- &:last-child {
- border-bottom: none;
- }
-
- &.type--picture {
- border-bottom: none;
- label {
- display: inline-block;
- padding: 0;
- }
- .llms-marker {
- bottom: 10px;
- margin: 0;
- position: absolute;
- right: 10px;
- }
- .llms-choice-image {
- margin: 2px;
- padding: 20px;
- transition: background 0.4s ease;
- img {
- display: block;
- height: auto;
- width: 100%;
- }
- }
- input:checked ~ .llms-choice-image {
- background: #efefef
- }
- }
-
- input {
- display: none;
- left: 0;
- pointer-events: none;
- position: absolute;
- top: 0;
- visibility: hidden;
- }
-
- label {
- display: block;
- margin: 0;
- padding: 10px 20px;
- position: relative;
- // &:hover {
- &.hovered {
- .llms-marker:not(.type--lister) {
- .iterator {
- display: none;
- }
- .fa {
- display: inline;
- }
- }
- }
- }
-
- .llms-marker {
-
- background: $color-white;
- color: $color-black;
- display: inline-block;
- font-size: 20px;
- height: 40px;
- line-height: 40px;
- margin-right: 10px;
- text-align: center;
- transition: all 0.2s ease;
- vertical-align: middle;
- width: 40px;
-
- .fa {
- display: none;
- }
-
- &.type--lister,
- &.type--checkbox { border-radius: 4px; }
- &.type--radio { border-radius: 50%; }
-
- }
-
- input:checked + .llms-marker {
- background: $color-brand-pink;
- color: #fff;
- .iterator {
- display: none;
- }
- .fa {
- display: inline;
- }
- }
-
- .llms-choice-text {
- display: inline-block;
- font-size: 18px;
- font-weight: 400;
- line-height: 1.6;
- margin: 0;
- padding: 0;
- vertical-align: middle;
- width: calc( 100% - 60px );
- }
-
- }
- }
-
-}
-
-.llms-quiz-timer {
- background: #fff;
- border: 1px solid $color-green;
- border-radius: 4px;
- color: $color-green;
- float: right;
- font-size: 18px;
- line-height: 1;
- margin-left: 20px;
- padding: 8px 12px;
- position: relative;
- white-space: nowrap;
- z-index: 1;
-
- &.color-half {
- border-color: $color-orange;
- color: $color-orange
- }
-
- &.color-empty {
- border-color: $color-danger;
- color: $color-danger
- }
-
- .llms-tiles {
- display: inline-block;
- margin-left: 5px;
- }
-}
-
-
-// /* My Quizzes */
-// .llms-quiz-results {
-// @extend %cf;
-// font-family: "Open Sans",Verdana,Geneva,sans-serif,sans-serif;
-// position: relative;
-// }
-// .llms-quiz-results > h3 {
-// background-color: #f5f5f5;
-// padding: 4px;
-// }
-
-// .llms-quiz-result-details {
-// float: left;
-// ul {
-// list-style-type: none;
-// float: left;
-// li {
-// list-style-type: none;
-// font-size: 20px;
-// }
-// }
-// }
-// .llms-attempts {
-// font-weight: bold;
-// }
-
-// .llms-pass-perc {
-// font-weight: bold;
-// }
-// .llms-content-block {
-// margin: 6px 0;
-// }
-// .llms-question-wrapper {
-// margin: 40px 0 20px 0;
-// }
-// .llms-question-count {
-// margin-bottom: 20px;
-// }
-
-
diff --git a/assets/scss/frontend/_llms-table.scss b/assets/scss/frontend/_llms-table.scss
deleted file mode 100644
index 0d015d7265..0000000000
--- a/assets/scss/frontend/_llms-table.scss
+++ /dev/null
@@ -1,60 +0,0 @@
-.llms-table {
- border: 1px solid $color-border;
- border-spacing: 0;
- width: 100%;
-
- thead {
- th,td {
- font-weight: 700;
- }
- }
-
- tbody {
- tr:nth-child( odd ) {
- td, th {
- background: #f9f9f9;
- }
- }
- tr:last-child {
- border-bottom-width: 0;
- }
- }
-
- tfoot {
- tr {
- background: #f9f9f9;
- .llms-pagination .page-numbers {
- margin: 0;
- }
- .llms-table-sort {
- text-align: right;
- form, select, input, button {
- margin: 0;
- }
- }
- }
- }
-
- th {
- font-weight: 700;
- }
-
- th, td {
- border-bottom: 1px solid $color-border;
- padding: 15px 20px;
-
- // launchpad compat...
- &:first-child { padding-left: 12px; }
- &:last-child { padding-right: 12px; }
-
- }
-
-}
-
-// launchpad compat...
-#page .llms-table tfoot label {
- display: inline;
-}
-#page .llms-table tfoot select {
- height: auto;
-}
diff --git a/assets/scss/frontend/_loop.scss b/assets/scss/frontend/_loop.scss
deleted file mode 100644
index ed27dcc482..0000000000
--- a/assets/scss/frontend/_loop.scss
+++ /dev/null
@@ -1,270 +0,0 @@
-.llms-loop-list {
- @extend %clearfix;
-
- list-style: none;
- margin: 0 -10px;
- padding: 0;
-
- @media all and (min-width: 600px) {
- $cols: 1;
- @while $cols <= 6 {
- &.cols-#{$cols} .llms-loop-item {
- width: calc( 100% / $cols );
- }
- $cols: $cols + 1;
- }
- }
-
-
-}
-
-.llms-loop-item {
- float: left;
- list-style: none;
- margin: 0;
- padding: 0;
- width: 100%;
-}
-
-
- .llms-loop-item-content {
- background: $color-white;
- border: 1px solid $color-border;
- border-radius: $radius-small;
- overflow: hidden;
- padding-bottom: 15px;
- margin: 10px;
-
- .llms-loop-link {
- color: $color-black;
- display: block;
- text-decoration: none;
- &:visited {
- color: $color-black;
- }
- }
-
- .llms-featured-image {
- display: block;
- max-width: 100%;
- }
-
- .llms-loop-title {
- color: $color-black;
- margin: 15px 0;
- &:hover {
- color: $color-brand-blue;
- }
- }
-
- .llms-meta,
- .llms-author,
- .llms-loop-title {
- padding: 0 15px;
- }
-
- .llms-meta,
- .llms-author {
- color: $color-cinder;
- display: block;
- font-size: 14px;
- margin-bottom: 10px;
- &:last-child {
- margin-bottom: 0;
- }
- }
-
- .llms-author {
- align-items: center;
- display: flex;
- gap: 5px;
- }
-
- .llms-featured-img-wrap {
- overflow: hidden;
- }
-
- p {
- margin-bottom: 0;
- }
-
- .llms-progress {
- margin: 0;
- height: .4em;
-
- .progress__indicator {
- display: none;
- }
-
- .llms-progress-bar {
- background-color: #f6f6f6;
- right: 0;
- top: 0;
- }
- }
-
- }
-
-
-
-// .llms-membership-list .memberships {
-// border-top: 1px solid #f6f6f6;
-// width: 100%;
-// display: inline-block;
-// text-align: center;
-// list-style: none;
-// clear: both;
-// margin: 0;
-// padding: 0;
-// }
-
-
-
-// .llms-course-list {
-
-// .llms-membership-link {
-// @extend %llms-element;
-
-// display: block
-// }
-
-// .llms-membership-footer {
-// border-top: 3px solid $color-white;
-// margin: 15px -15px 0;
-// padding: 15px 15px 0;
-// text-align: center;
-// }
-
-// }
-
-
-
-
-// .llms-membership-list .memberships li {
-// width: 300px;
-// margin: 15px;
-// list-style: none;
-// vertical-align: top;
-// display: inline-block;
-// text-align: left;
-// }
-
-// .llms-membership-list .memberships li.first {
-// margin-left: 0;
-// }
-
-// .llms-membership-list .memberships li.last {
-// margin-right: 15px;
-// }
-
-// .llms-membership-list .memberships li .llms-title {
-// display: block;
-// font-weight: 700;
-// margin-bottom: .5em;
-// font-size: 18px;
-// text-decoration: none;
-// line-height: 30px;
-// }
-
-// .llms-membership-list .memberships li .llms-price {
-// display: block;
-// font-weight: 700;
-// // margin-bottom: .5em;
-// // font-size: 24px;
-// text-decoration: none;
-// line-height: 30px;
-// }
-
-// .llms-course-list {
-// //margin: 30px 0;
-// padding: 30px;
-// //background: #FFF;
-// // border-radius: 2px;
-// display: inline-block;
-// width: 100%;
-// box-sizing: border-box;
-
-// .llms-course-link {
-// @extend %llms-element;
-
-// display: block
-// }
-
-// .llms-course-footer {
-// border-top: 3px solid $color-white;
-// margin: 15px -15px 0;
-// padding: 15px 15px 0;
-// text-align: center;
-// }
-
-// .llms-progress {
-// margin-top: 0;
-// // .progress-bar {
-// // background-color: $color-white;
-// // }
-// }
-
-// }
-
-// .llms-course-list .courses {
-// //border-top: 1px solid #f6f6f6;
-// width: 100%;
-// display: inline-block;
-// text-align: center;
-// list-style: none;
-// clear: both;
-// margin: 0;
-// padding: 0;
-// }
-
-// .llms-course-list .courses li {
-// width: 300px;
-// padding-top: 0; // twentyfifteen compat
-// margin: 15px;
-// list-style: none;
-// vertical-align: top;
-// display: inline-block;
-// text-align: left;
-// }
-// @media screen and (max-width: $break-small) {
-// .llms-course-list {
-// padding: 30px 10px;
-
-// .courses li {
-// width: auto;
-// }
-// }
-// }
-
-// // .llms-course-list .courses li.first {
-// // margin-left: 0;
-// // }
-
-// .llms-course-list .courses li.last {
-// margin-right: 15px;
-// }
-
-// .llms-course-list .courses li .llms-title {
-// display: block;
-// font-weight: 700;
-// margin-bottom: .5em;
-// font-size: 18px;
-// text-decoration: none;
-// line-height: 30px;
-// }
-
-// .llms-course-list .courses li .llms-price {
-// display: block;
-// font-weight: 700;
-// // margin-bottom: .5em;
-// // font-size: 24px;
-// text-decoration: none;
-// line-height: 30px;
-// }
-
-
-
-
-// .courses a.llms-course-link:hover {
-// text-decoration: none;
-// }
diff --git a/assets/scss/frontend/_main.scss b/assets/scss/frontend/_main.scss
deleted file mode 100644
index c6d7b8cac2..0000000000
--- a/assets/scss/frontend/_main.scss
+++ /dev/null
@@ -1,516 +0,0 @@
-
-
-
-
-.llms-membership-image {
- display: block;
- margin: 0 auto;
-}
-
-
-
-.llms-course-image {
- display: block;
- margin: 0 auto;
- max-width: 100%;
-}
-.llms-featured-image {
- display: block;
- margin: 0 auto;
-}
-.llms-image-thumb {
- width: 150px;
-}
-
-// Responsive Videos.
-.llms-video-wrapper {
-
- .center-video {
- height: auto;
- max-width: 100%;
- overflow: hidden;
- position: relative;
- padding-top: 56.25%;
- text-align: center;
-
- & > .wp-video,
- .fluid-width-video-wrapper,
- iframe, object, embed {
- height: 100%;
- left: 0;
- position: absolute;
- top: 0;
- width: 100%;
- }
-
- & > .wp-video {
- width: 100% !important;
- }
- .fluid-width-video-wrapper {
- padding-top: 0 !important;
- }
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-.clear {
- clear: both;
- width: 100%;
-}
-.llms-featured-image {
- text-align: center;
-}
-
-#main-content .llms-payment-options p {
- margin: 0;
- font-size: 16px;
-}
-
-.llms-option {
- display: block;
- position: relative;
- margin: 20px 0;
- padding-left:40px;
- font-size: 16px;
-
- label {
- cursor: pointer;
- position: static;
- }
-}
-.llms-option:first-child {
- margin-top:0;
-}
-.llms-option:last-child {
- margin-bottom:0;
-}
-#main-content .llms-option:last-child {
- margin-bottom:0;
-}
-
-.llms-option input[type="radio"] {
- display: block;
- position: absolute;
- top:3px;
- left:0;
- z-index: 0;
-}
-
-.llms-option input[type="radio"] {
- display: inline-block;
-}
-.llms-option input[type="radio"] + label span.llms-radio {
- display: none;
-}
-
-.llms-option input[type="radio"] + label span.llms-radio {
- appearance: none;
-
- z-index: 20;
- position: absolute;
- top: 0;
- left: -2px;
- display: inline-block;
- width: 24px;
- height: 24px;
- border-radius: 50%;
- cursor: pointer;
- vertical-align: middle;
- box-shadow: hsla(0,0%,100%,.15) 0 1px 1px, inset hsla(0,0%,0%,.5) 0 0 0 1px;
-
- background: #efefef;
- background-image: radial-gradient(ellipse at center, $color-red 0%,$color-red 40%,#efefef 45%);
- background-repeat: no-repeat;
-
- transition: background-position .15s cubic-bezier(.8, 0, 1, 1);
-}
-.llms-option input[type="radio"]:checked + label span.llms-radio {
- transition: background-position .2s .15s cubic-bezier(0, 0, .2, 1);
-}
-
-.llms-option input[type="radio"] + label span.llms-radio {
- background-position: -24px 0;
-}
-.llms-option input[type="radio"]:checked + label span.llms-radio {
- background-position: 0 0;
-}
-
-.llms-option input[type="submit"] {
- border:none;
- background:$color-red;
- color:#fff;
- font-size:20px;
- padding:10px 0;
- border-radius:3px;
- cursor:pointer;
- width:100%;
-}
-.llms-styled-text {
- padding: 14px 0;
-}
-.llms-notice-box {
- border-radius: 3px;
- z-index: 10;
- margin: 10px 0;
- padding: 15px 20px;
- //background: #fffef4;
- border: 1px solid #ccc;
- list-style-type: none;
- width: 100%;
- overflow: auto;
- input[type="text"] {
- height: auto;
- }
- .col-1-1 {
- width: 100%;
- input[type=text] {
- width: 100%;
- }
- }
- .col-1-2 {
- width: 50%;
- float: left;
- @media screen and (max-width: $break-medium) {
- width: 100%;
- }
- }
- .col-1-3 {
- width: 33%;
- float: left;
- margin-right: 10px;
- }
- .col-1-4 {
- width: 25%;
- float: left;
- margin-right: 10px;
- @media screen and (max-width: $break-medium) {
- width: 100%;
- }
- }
- .col-1-6 {
- width: 16.6%;
- float: left;
- margin-right: 10px;
- }
- .col-1-8 {
- width: 11%;
- float: right;
- }
- .llms-pad-right {
- padding-right: 10px;
- @media screen and (max-width: $break-medium) {
- padding-right: 0;
- }
- }
-}
-input[type="text"].cc_cvv,
-#cc_cvv {
- margin-right: 0;
- width: 23%;
- float: right;
-}
-.llms-clear-box {
- border-radius: 3px;
- z-index: 10;
- margin: 10px 0;
- padding: 15px 20px;
- list-style-type: none;
- width: 100%;
- overflow: auto;
-}
-.llms-price-label {
- font-weight: normal;
-}
-.llms-final-price {
- font-weight: bold;
- float: right;
-}
-.llms-center-content {
- text-align: center;
-}
-.llms-input-text {
- background-color: #fff;
- border: 1px solid #ddd;
- color: #333;
- font-size: 18px;
- font-weight: 300;
- padding: 16px;
- width: 100%;
-}
-.llms-price {
- margin-bottom: 0;
- font-weight: bold;
-}
-.llms-price-loop {
- margin-bottom: 0;
- font-weight: bold;
-}
-
-// hentry overrides
-.courses .entry {
- padding: 0
-}
-.list-view .site-content .llms-course-list .hentry, .list-view .site-content .llms-membership-list .hentry {
- border-top: 0;
- padding-top: 0;
-}
-.llms-content {
- width: 100%;
-}
-
-.llms-lesson-button-wrapper {
- width: 100%;
- display: block;
- clear: both;
- text-align: center;
-}
-.llms-template-wrapper {
- width: 100%;
- display: block;
- clear: both;
-}
-.llms-button-wrapper {
- width: 100%;
- display: block;
- clear: both;
- text-align: center;
-}
-
-
-//custom select box
-.llms-styled-select {
- border: 1px solid #ccc;
- box-sizing: border-box;
- border-radius: 3px;
- overflow: hidden;
- position: relative;
-}
-.llms-styled-select, .llms-styled-select select {
- width: 100%;
-}
-select:focus { outline: none; }
-.llms-styled-select select {
- height: 34px;
- padding: 5px 0 5px 5px;
- background: transparent;
- border: none;
- -webkit-appearance: none;
- font-size: 16px;
- color: #444444;
-}
-
-@-moz-document url-prefix(){
- .--ms-styled-select select { width: 110%; }
-}
-
-.llms-styled-select .fa-sort-desc {
- position: absolute;
- top: 0;
- right: 12px;
- font-size: 24px;
- color: #ccc;
-}
-
-select::-ms-expand { display: none; }
-
-_:-o-prefocus, .selector {
- .llms-styled-select { background: none; }
-}
-
-.llms-form-item-wrapper {
- margin-bottom: 1em;
-}
-
-/* Circle Graph */
-.llms-progress-circle {
- position: relative;
- width: 200px;
- height: 200px;
- float: left;
-}
-
-.llms-progress-circle-count {
- top: 27%;
- position: absolute;
- width: 94%;
- text-align: center;
- color: #666;
- font-size:44px;
-}
-.llms-progress-circle svg {
- position: absolute;
- width: 200px;
- height: 200px;
-}
-.llms-progress-circle circle {
- fill: transparent;
-}
-svg .llms-background-circle {
- fill: transparent;
- stroke-width: 10px;
- stroke: #f1f2f1;
- stroke-dasharray: 430;
-}
-
-svg .llms-animated-circle {
- fill: transparent;
- stroke-width: 10px;
- stroke: #e5554e;
- stroke-dasharray: 430;
- stroke-dashoffset: 430 - 20
-}
-
-
-
-
-
-
-
-.llms-widget-syllabus {
-
- .llms-lesson.current-lesson .lesson-title {
- font-weight: 700;
- }
-
- .section-header {
- display: flex;
- gap: 5px;
-
- .llms-collapse-caret {
- text-align: left;
- width: 14px;
- }
- }
-
- .llms-lesson-complete, .lesson-complete-placeholder {
- font-size: 18px;
- margin-right: 5px;
- color: #ccc;
- &.done {
- color: $color-brand-blue;
- }
- }.section-title {
- font-weight: bold;
- }.lesson-title {
- a {
- text-decoration: underline;
- }
- &.done {
- a {
- color: $color-darkgrey;
- text-decoration: line-through;
- }
- }
- }
- ul {
- list-style-type: none;
- margin: 0;
- padding: 0;
- li {
- list-style-type: none;
- margin: 0 0 10px 0;
- ul {
- margin: 0 0 15px 0;
- li {
- align-items: flex-start;
- display: flex;
- margin: 0 0 10px 0;
- padding: 0;
- }
- }
- }
- }
-}
-
-
-
-.llms-remove-coupon {
- float: right;
-}
-
-
-
-
-
-/*.llms-lesson-link-locked, .llms-lesson-link-locked:hover {
- background: #f1f1f1;
- display: block;
- color: #a6a6a6;
- min-height: 85px;
- padding: 15px;
- text-decoration: none;
- position: relative;
-}*/
-
-.llms-lesson-preview.is-complete .llms-lesson-link-locked {
- padding-left: 75px;
-}
-
-.llms-lesson-tooltip { display: none;
- position:absolute;
- color: #000000;
- background-color: #c0c0c0;
- padding:.25em;
- border-radius: 2px;
- z-index: 100;
- top:0;
- left:50%;
- text-align: center;
- -webkit-transform: translateX(-50%) translateY(-100%);
- transform: translateX(-50%) translateY(-100%);
- }
-
-/* arrows - :after */
-.llms-lesson-tooltip:after {
- content: "";
- width: 0;
- height: 0;
- border-top: 8px solid #c0c0c0;
- border-left: 8px solid transparent;
- border-right: 8px solid transparent;
- position:absolute;
- bottom:-8px;
- left:50%;
- transform: translateX(-50%);
-}
-
-.llms-lesson-tooltip.active {
- display: inline-block;
-}
-
-// Favorites.
-.llms-favorite-wrapper {
- cursor: pointer;
-
- .fa-heart {
- color: #EF476F;
- }
-}
-
-.llms-has-favorite .llms-parent-course-link {
- display: inline-block;
- margin-bottom: 20px;
-
- + .llms-favorite-wrapper {
- float: right;
- margin: 0;
- }
-}
-
-.llms-syllabus-wrapper .llms-has-favorite {
- text-align: left;
-
- .llms-favorite-wrapper {
- display: inline-block;
- }
-}
diff --git a/assets/scss/frontend/_notices.scss b/assets/scss/frontend/_notices.scss
deleted file mode 100644
index 8ec3f459d0..0000000000
--- a/assets/scss/frontend/_notices.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-.llms-notice {
- background: rgba( $color-brand-blue, .3 );
- border-color: $color-brand-blue;
- border-style: solid;
- border-width: 1px;
- border-radius: $radius-small;
- padding: 15px;
- margin-bottom: 40px;
-
- a {
- color: inherit;
- }
-
- p, ul {
- &:last-child { margin-bottom: 0; }
- }
-
- li {
- list-style-type: none;
- }
-
- &.llms-debug {
- background: rgba( #cacaca, .3 );
- border-color: #cacaca;
- }
-
- &.llms-error {
- background: rgba( $color-red, .15 );
- border-color: $color-red;
- }
-
- &.llms-success {
- background: rgba( $color-green, .15 );
- border-color: $color-green;
- }
-
-}
-
-// this helps genesis and numerous other themes out a bit
-// by being slightly more specific
-.entry-content .llms-notice {
- margin: 0 0 40px;
- li {
- list-style-type: none;
- }
-}
diff --git a/assets/scss/frontend/_reviews.scss b/assets/scss/frontend/_reviews.scss
deleted file mode 100644
index 6df33a0307..0000000000
--- a/assets/scss/frontend/_reviews.scss
+++ /dev/null
@@ -1,33 +0,0 @@
-.llms_review {
- margin: 20px 0px;
- padding: 10px;
-
- h5 {
- font-size: 17px;
- margin: 3px 0px;
- }
-
- h6 {
- font-size: 13px;
- }
-
- p {
- font-size: 15px;
- }
-}
-
-.review_box {
-
- [type=text] {
- margin: 10px 0px
- }
-
- h5 {
- color: red;
- display: none;
- }
-
- + .thank_you_box {
- display: none;
- }
-}
diff --git a/assets/scss/frontend/_student-dashboard.scss b/assets/scss/frontend/_student-dashboard.scss
deleted file mode 100644
index f31c5d0b1d..0000000000
--- a/assets/scss/frontend/_student-dashboard.scss
+++ /dev/null
@@ -1,421 +0,0 @@
-.llms-student-dashboard {
-
- .llms-sd-title {
- align-items: center;
- display: flex;
- gap: 15px;
- margin: 40px 0 20px 0;
-
- small {
- font-size: 18px;
-
- + a {
- text-decoration: none;
- }
- }
- }
-
- .llms-sd-items { // ul
- list-style-type: none;
- margin: 0;
- padding: 0;
- }
- .llms-sd-item { // li
- display: inline-block;
- list-style-type: none;
- margin: 5px 0;
- padding: 0;
-
- &:last-child {
- .llms-sep {
- display: none;
- }
- }
-
- .llms-sep {
- color: $color-darkgrey;
- margin: 0 5px;
- }
- }
-
- .llms-sd-section {
- h2 {
- margin: 0 0 15px 0;
- }
-
- .llms-sd-section-title {
- margin: 0;
- padding: 0;
- }
-
- .llms-sd-section-footer {
- margin-top: 10px;
-
- .llms-button-secondary {
- display: inline-block;
- }
- }
- }
-
- .orders-table {
- border: 1px solid $color-border;
- border-spacing: 0;
- width: 100%;
-
- thead {
- display: none;
- th,td {
- font-weight: 700;
- }
- @media all and ( min-width: 600px ) {
- display: table-header-group;
- }
- }
-
- tbody {
- tr:nth-child( odd ) {
- td, th {
- background: #f9f9f9;
- }
- }
- tr:last-child {
- border-bottom-width: 0;
- }
- }
-
- tfoot {
- tr {
- background: #f9f9f9;
- }
- th, td {
- padding: 10px;
- text-align: right;
- &:last-child { border-bottom-width: 0; }
- }
- }
-
- th {
- font-weight: 700;
- }
-
- th, td {
- border-color: $color-border;
- border-style: solid;
- border-width: 0;
- display: block;
- padding: 15px 20px;
- text-align: center;
-
- .llms-button-primary {
- display: inline-block;
- }
-
- &:last-child {
- border-bottom-width: 1px;
- }
-
- &:before {
- content: attr( data-label );
- }
-
- @media all and ( min-width: 600px ) {
- border-bottom-width: 1px;
- display: table-cell;
- text-align: left;
- &:first-child { width: 220px; }
- &:before { display: none; }
- }
-
- }
-
- @media all and ( min-width: 600px ) {
- &.transactions th:first-child {width: auto; }
- }
-
- }
-
- @include order_status_badges();
-
- .order-title {
- .llms-status {
- font-size: 18px;
- }
- }
-
- .llms-person-form-wrapper {
- .llms-change-password { display: none; }
- }
-
- .order-primary {
-
- @media all and ( min-width: 600px ) {
- float: left;
- width: 68%;
- }
-
- }
- .order-secondary {
-
- @media all and ( min-width: 600px ) {
- float: left;
- width: 32%;
- }
-
- form {
- margin-bottom: 0;
- }
-
- }
-
- // stack columns when alternate layout declared via filter
- @media all and ( min-width: 600px ) {
- .llms-view-order.llms-stack-cols {
- .order-primary,
- .order-secondary {
- float: none;
- width: 100%;
- }
- }
- }
-
- .llms-switch-payment-source {
- .llms-notice,
- .entry-content .llms-notice {
- margin-left: 10px;
- margin-right: 10px;
- }
- }
-
- .llms-switch-payment-source-main {
- border: none;
- display: none;
- margin: 0;
- ul.llms-payment-gateways {
- padding: 10px 15px 0;
- margin: 0;
- }
- .llms-payment-method,
- ul.llms-order-summary {
- padding: 0 25px 10px;
- margin: 0;
- list-style-type: none;
- li { list-style-type: none; }
- }
- }
-
- /**
- * Dashboard Home
- */
- &.dashboard {
- .llms-sd-section {
- border: 1px solid $color-border;
- border-radius: $radius-small;
- padding: 20px;
- margin-bottom: 40px;
- }
- }
- .llms-loop-list {
- margin: 0 -10px;
- }
-
-}
-
-// My Grades course list
-.llms-sd-grades {
- .llms-table {
- .llms-progress {
- display: block;
- margin: 0;
- .llms-progress-bar {
- top: 0;
- height: 1.4em;
- }
- .progress__indicator {
- font-size: 1em;
- position: relative;
- right: 0.4em;
- top: 0.2em;
- z-index: 1;
- }
- }
- }
-}
-
-// grades table for a single course
-.llms-table.llms-single-course-grades {
-
- tbody {
- tr:first-child td, tr:first-child th {
- background-color: #eaeaea;
- }
- }
-
- th {
- font-weight: 400;
- text-align: left;
- }
-
- td {
- .llms-donut {
- display: inline-block;
- vertical-align: middle;
- }
- .llms-status {
- margin-right: 4px;
- }
- .llms-donut + .llms-status {
- margin-left: 4px;
- }
- }
-
- th.llms-section_title {
- font-size: 110%;
- font-weight: 700;
- }
-
- td.llms-lesson_title {
- max-width: 40%;
- }
- td.llms-associated_quiz {
- .llms-donut {
- display: inline-block;
- margin-right: 5px;
- vertical-align: middle;
- }
- }
- td.llms-lesson_title {
- a[href="#"] {
- pointer-events: none;
- }
- a[href^="#"] {
- color: inherit;
- position: relative;
- .llms-tooltip {
- max-width: 380px;
- width: 380px;
- &.show {
- top: -54px;
- }
- }
- }
- }
-}
-
-.llms-sd-widgets {
- display: flex;
-
- .llms-sd-widget {
- background: $color-white;
- border: 1px solid $color-border;
- border-bottom-right-radius: $radius-small;
- border-bottom-left-radius: $radius-small;
- flex: 1;
- margin: 10px 10px 20px;
- padding: 0 0 20px;
- &:first-child {
- margin-left: 0;
- }
- &:last-child {
- margin-right: 0;
- }
-
- .llms-sd-widget-title {
- background: $color-brand-blue;
- color: #fff;
- font-size: 18px;
- line-height: 1;
- margin: 0 0 20px;
- padding: 10px;
- }
-
- .llms-sd-widget-empty {
- font-size: 14px;
- font-style: italic;
- opacity: 0.5;
- text-align: center;
- }
-
- .llms-donut {
- margin: 0 auto;
- }
-
- .llms-sd-date {
- opacity: 0.8;
- text-align: center;
- font-size: 22px;
- line-height: 1.1;
- span {
- display: block;
- &.day {
- font-size: 52px;
- }
- &.diff {
- font-size: 12px;
- font-style: italic;
- margin-top: 8px;
- opacity: 0.75;
- }
- }
- }
-
- .llms-achievement {
- background: transparent;
- margin: 0 auto;
- max-width: 120px;
- .llms-achievement-title {
- display: none;
- }
- }
-
- }
-
-
-}
-
-.redeem-voucher {
- .form-row {
- label {
- display: block;
- font-weight: 700;
- }
- input[type="text"] {
- background-color: $color-white;
- background-clip: padding-box;
- border: 1px solid $color-grey;
- border-radius: $radius-small;
- box-sizing: border-box;
- font-size: 16px;
- line-height: 1;
- padding: 8px 12px;
- transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- }
- }
-}
-
-
-.llms-sd-pagination {
- margin-top: 24px;
- @include clearfix;
- .llms-button-secondary {
- display: inline-block;
- &.prev { float: left; }
- &.next { float: right; }
- }
-}
-
-
-.llms-sd-notification-center {
- background: $color-white;
- border: 1px solid $color-border;
- border-radius: $radius-small;
- padding: 20px;
-
- .llms-notification-list-item {
- .llms-notification {
- z-index: 1;
- &:hover {
- background-color: inherit;
- }
- }
- }
-}
diff --git a/assets/scss/frontend/_syllabus.scss b/assets/scss/frontend/_syllabus.scss
deleted file mode 100644
index 6238707832..0000000000
--- a/assets/scss/frontend/_syllabus.scss
+++ /dev/null
@@ -1,175 +0,0 @@
-.llms-syllabus-wrapper {
-
- margin: 20px 0;
- text-align: left;
-
- .llms-section-title {
- margin: 40px 0 10px;
-
- + .llms-lesson-preview {
- border-top: 1px solid $color-border;
- }
- }
-
-}
-
-.llms-lesson-preview {
- border-right: 1px solid $color-border;
- border-bottom: 1px solid $color-border;
- border-left: 1px solid $color-border;
- display: block;
- margin: 0;
- max-width: 100%;
- position: relative;
-
- .llms-lesson-link {
- background: $color-white;
- color: $color-black;
- display: block;
- padding: 15px;
- text-decoration: none;
- transition: background-color 0.3s ease;
-
- &:hover {
- background: $el-background-hover;
- }
-
- &:visited {
- color: #212121;
- }
-
- &.llms-lesson-link-locked {
- background: #EFEFEF;
- color: $color-darkgrey;
-
- &:hover {
- background: $color-border;
- }
-
- }
-
- .llms-lesson-preview-row {
- display: flex;
- flex-direction: row-reverse;
- }
- }
-
- .llms-lesson-thumbnail {
- margin-bottom: 15px;
- img {
- display: block;
- height: auto;
- width: 100%;
- }
- }
-
- .llms-lesson-title {
- font-weight: 700;
- margin: 0 auto 5px;
- &:last-child {
- margin-bottom: 0;
- }
- }
-
- .llms-lesson-excerpt {
- margin-top: 05px;
-
- p {
- margin: 0 0 10px 0;
- padding: 0;
- &:last-of-type {
- margin: 0;
- }
- }
- }
-
- .llms-main {
- flex-grow: 1;
- }
- .llms-extra {
- min-width: 50px;
- text-align: right;
- }
-
- .llms-lesson-counter,
- .llms-free-lesson-svg,
- .llms-lesson-complete,
- .llms-lesson-complete-placeholder {
- display: block;
- }
-
- &.is-free,
- &.is-complete {
- .llms-lesson-complete {
- color: $color-brand-blue;
- }
- }
-
- &.is-complete {
- .llms-lesson-title:not(.llms-student-dashboard .llms-lesson-title):not(.llms-course-navigation .llms-lesson-title) {
- text-decoration: line-through;
- }
- }
-
- .llms-icon-free {
- background: $color-brand-blue;
- border-radius: $radius-small;
- color: $color-white;
- display: inline-block;
- font-size: 14px;
- font-weight: bold;
- line-height: 1;
- padding: 5px 8px 4px;
- white-space: nowrap;
- }
-
- &.is-incomplete {
- .llms-lesson-complete {
- color: #cacaca;
- }
- }
-
- .llms-lesson-counter {
- font-size: 16px;
- margin-bottom: 5px;
- }
-
- .llms-free-lesson-svg {
- fill: currentColor;
- height: 23px;
- width: 50px;
- }
-
-}
-
-.llms-course-navigation {
- display: flex;
- gap: 20px;
- .llms-prev-lesson,
- .llms-next-lesson,
- .llms-back-to-course {
- flex: 1;
- }
-
- .llms-prev-lesson {
- & + .llms-back-to-course {
- text-align: right;
- }
- }
-
- .llms-next-lesson {
- .llms-lesson-preview {
- .llms-lesson-link {
- text-align: right;
- }
- }
- }
-
- .llms-lesson-preview {
- border: 1px solid $color-border;
- }
-
- .llms-lesson-link {
- display: block;
- }
-}
diff --git a/assets/scss/frontend/_tooltip.scss b/assets/scss/frontend/_tooltip.scss
deleted file mode 100644
index afa87788eb..0000000000
--- a/assets/scss/frontend/_tooltip.scss
+++ /dev/null
@@ -1,63 +0,0 @@
-.llms-tooltip {
-
- background: #2a2a2a;
- border-radius: 4px;
- color: #fff;
- font-size: 14px;
- line-height: 1.2;
- opacity: 0;
- top: -20px;
- padding: 8px 12px;
- left: 50%;
- position: absolute;
- pointer-events: none;
- transform: translateX( -50% );
- transition: opacity .2s ease, top .2s ease;
- max-width: 320px;
-
- &.show {
- top: -28px;
- opacity: 1;
- }
-
- &:after {
-
- bottom: -8px;
- border-top: 8px solid #2a2a2a;
- border-left: 8px solid transparent;
- border-right: 8px solid transparent;
- content: '';
- height: 0;
- left: 50%;
- position: absolute;
- transform: translateX( -50% );
- width: 0;
-
- }
-
-}
-
-
-
-.webui-popover-title {
- font-size: initial;
- font-weight: initial;
- line-height: initial;
-}
-.webui-popover-inverse {
- .webui-popover-inner .close {
- color: #fff;
- opacity: 0.6;
- text-shadow: none;
- &:hover {
- opacity: 0.8;
- }
- }
- .webui-popover-content a {
- color: #fff;
- text-decoration: underline;
- &:hover {
- text-decoration: none;
- }
- }
-}
diff --git a/assets/scss/frontend/_voucher.scss b/assets/scss/frontend/_voucher.scss
deleted file mode 100644
index 6c950121af..0000000000
--- a/assets/scss/frontend/_voucher.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.voucher-expand {
- display: none;
-}
\ No newline at end of file
diff --git a/assets/scss/lifterlms.scss b/assets/scss/lifterlms.scss
deleted file mode 100644
index b3474e9a0e..0000000000
--- a/assets/scss/lifterlms.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-// Main Frontend CSS File
-//
-
-@import "_includes/vars";
-@import "_includes/extends";
-@import "_includes/grid";
-@import "_includes/mixins";
-@import "_includes/buttons";
-@import "_includes/llms-donut";
-@import "_includes/tooltip";
-
-@import "frontend/main";
-@import "frontend/loop";
-@import "frontend/course";
-@import "frontend/syllabus";
-@import "frontend/llms-progress";
-@import "frontend/llms-author";
-@import "frontend/reviews";
-
-@import "frontend/notices";
-@import "frontend/llms-achievements-certs";
-@import "frontend/llms-notifications";
-@import "frontend/llms-pagination";
-@import "frontend/tooltip";
-
-
-@import "frontend/llms-quizzes";
-
-@import "frontend/voucher";
-@import "frontend/llms-access-plans";
-@import "frontend/checkout";
-@import "_includes/llms-form-field";
-
-@import "frontend/llms-outline-collapse";
-
-@import "frontend/student-dashboard";
-@import "frontend/llms-table";
-
-@import "_includes/vendor/_font-awesome";
diff --git a/babel.config.js b/babel.config.js
deleted file mode 100644
index 507dc879b2..0000000000
--- a/babel.config.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Babel config
- *
- * @package LifterLMS/Dev/Scripts
- *
- * @since Unknown
- * @version 6.0.0
- */
-
-const
- presets = [ '@wordpress/default' ],
- plugins = [ '@babel/plugin-proposal-class-properties' ];
-
-module.exports = { plugins, presets };
diff --git a/blocks/certificate-title/block.json b/blocks/certificate-title/block.json
new file mode 100644
index 0000000000..cc3b8d0a70
--- /dev/null
+++ b/blocks/certificate-title/block.json
@@ -0,0 +1,67 @@
+{
+ "$schema": "https://schemas.wp.org/trunk/block.json",
+ "apiVersion": 2,
+ "name": "llms/certificate-title",
+ "title": "Certificate Title",
+ "category": "text",
+ "description": "Displays the title of a certificate.",
+ "textdomain": "lifterlms",
+ "attributes": {
+ "textAlign": {
+ "type": "string",
+ "default": "center"
+ },
+ "content": {
+ "type": "string",
+ "source": "html",
+ "selector": "h1,h2,h3,h4,h5,h6",
+ "default": "",
+ "__experimentalRole": "content"
+ },
+ "level": {
+ "type": "number",
+ "default": 1
+ },
+ "placeholder": {
+ "type": "string"
+ },
+ "fontFamily": {
+ "type": "string",
+ "default": "default"
+ }
+ },
+ "supports": {
+ "align": [
+ "wide",
+ "full"
+ ],
+ "anchor": true,
+ "className": false,
+ "color": {
+ "link": true
+ },
+ "spacing": {
+ "margin": true
+ },
+ "typography": {
+ "fontSize": true,
+ "lineHeight": true,
+ "__experimentalFontStyle": true,
+ "__experimentalFontFamily": true,
+ "__experimentalFontWeight": true,
+ "__experimentalLetterSpacing": true,
+ "__experimentalTextTransform": true,
+ "__experimentalDefaultControls": {
+ "fontSize": true,
+ "fontAppearance": true,
+ "textTransform": true
+ }
+ },
+ "__experimentalSelector": "h1,h2,h3,h4,h5,h6",
+ "__unstablePasteTextInline": true,
+ "__experimentalSlashInserter": true,
+ "multiple": false,
+ "llms_visibility": false
+ },
+ "editorScript": "file:./index.js"
+}
\ No newline at end of file
diff --git a/blocks/certificate-title/index.asset.php b/blocks/certificate-title/index.asset.php
new file mode 100644
index 0000000000..19bfd3bd52
--- /dev/null
+++ b/blocks/certificate-title/index.asset.php
@@ -0,0 +1 @@
+ array('lodash', 'react', 'react-dom', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-primitives', 'wp-url'), 'version' => '21202751aea163da6910');
diff --git a/blocks/certificate-title/index.js b/blocks/certificate-title/index.js
new file mode 100644
index 0000000000..ead7f0f5ed
--- /dev/null
+++ b/blocks/certificate-title/index.js
@@ -0,0 +1,13 @@
+(()=>{var e={184:(e,t)=>{var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";const e=window.wp.blocks,t=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"llms/certificate-title","title":"Certificate Title","category":"text","description":"Displays the title of a certificate.","textdomain":"lifterlms","attributes":{"textAlign":{"type":"string","default":"center"},"content":{"type":"string","source":"html","selector":"h1,h2,h3,h4,h5,h6","default":"","__experimentalRole":"content"},"level":{"type":"number","default":1},"placeholder":{"type":"string"},"fontFamily":{"type":"string","default":"default"}},"supports":{"align":["wide","full"],"anchor":true,"className":false,"color":{"link":true},"spacing":{"margin":true},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontStyle":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalLetterSpacing":true,"__experimentalTextTransform":true,"__experimentalDefaultControls":{"fontSize":true,"fontAppearance":true,"textTransform":true}},"__experimentalSelector":"h1,h2,h3,h4,h5,h6","__unstablePasteTextInline":true,"__experimentalSlashInserter":true,"multiple":false,"llms_visibility":false},"editorScript":"file:./index.js"}'),n=window.wp.element,a=window.wp.i18n,i=window.wp.data,o=window.wp.editor,s=window.wp.components;window.wp.compose;const c=window.React;function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t0?w($,--T):0,A--,10===O&&(A=1,S--),O}function z(){return O=T2||N(O)>3?"":" "}function q(e,t){for(;--t&&z()&&!(O<48||O>102||O>57&&O<65||O>70&&O<97););return I(e,j()+(t<6&&32==M()&&32==z()))}function G(e){for(;z();)switch(O){case e:return T;case 34:case 39:34!==e&&39!==e&&G(O);break;case 40:41===e&&G(e);break;case 92:z()}return T}function W(e,t){for(;z()&&e+O!==57&&(e+O!==84||47!==M()););return"/*"+I(t,T-1)+"*"+m(47===e?e:z())}function U(e){for(;!N(M());)z();return I(e,T)}var V="-ms-",X="-moz-",Y="-webkit-",K="comm",Z="rule",J="decl",Q="@keyframes";function ee(e,t){for(var r="",n=_(e),a=0;a6)switch(w(e,t+1)){case 109:if(45!==w(e,t+4))break;case 102:return v(e,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+X+(108==w(e,t+3)?"$3":"$2-$3"))+e;case 115:return~b(e,"stretch")?re(v(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==w(e,t+1))break;case 6444:switch(w(e,x(e)-3-(~b(e,"!important")&&10))){case 107:return v(e,":",":"+Y)+e;case 101:return v(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Y+(45===w(e,14)?"inline-":"")+"box$3$1"+Y+"$2$3$1"+V+"$2box$3")+e}break;case 5936:switch(w(e,t+11)){case 114:return Y+e+V+v(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Y+e+V+v(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Y+e+V+v(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Y+e+V+e+e}return e}function ne(e){return B(ae("",null,null,null,[""],e=F(e),0,[0],e))}function ae(e,t,r,n,a,i,o,s,c){for(var l=0,u=0,d=o,f=0,p=0,h=0,g=1,y=1,w=1,k=0,_="",S=a,A=i,P=n,T=_;y;)switch(h=k,k=z()){case 40:if(108!=h&&58==T.charCodeAt(d-1)){-1!=b(T+=v(D(k),"&","&\f"),"&\f")&&(w=-1);break}case 34:case 39:case 91:T+=D(k);break;case 9:case 10:case 13:case 32:T+=H(h);break;case 92:T+=q(j()-1,7);continue;case 47:switch(M()){case 42:case 47:C(oe(W(z(),j()),t,r),c);break;default:T+="/"}break;case 123*g:s[l++]=x(T)*w;case 125*g:case 59:case 0:switch(k){case 0:case 125:y=0;case 59+u:p>0&&x(T)-d&&C(p>32?se(T+";",n,r,d-1):se(v(T," ","")+";",n,r,d-2),c);break;case 59:T+=";";default:if(C(P=ie(T,t,r,l,u,a,s,_,S=[],A=[],d),i),123===k)if(0===u)ae(T,t,P,P,S,i,d,s,A);else switch(f){case 100:case 109:case 115:ae(e,P,P,n&&C(ie(e,P,P,0,0,a,s,_,a,S=[],d),A),a,A,d,s,n?S:A);break;default:ae(T,P,P,P,[""],A,0,s,A)}}l=u=p=0,g=w=1,_=T="",d=o;break;case 58:d=1+x(T),p=h;default:if(g<1)if(123==k)--g;else if(125==k&&0==g++&&125==R())continue;switch(T+=m(k),k*g){case 38:w=u>0?1:(T+="\f",-1);break;case 44:s[l++]=(x(T)-1)*w,w=1;break;case 64:45===M()&&(T+=D(z())),f=M(),u=d=x(_=T+=U(j())),k++;break;case 45:45===h&&2==x(T)&&(g=0)}}return i}function ie(e,t,r,n,a,i,o,s,c,l,u){for(var d=a-1,f=0===a?i:[""],p=_(f),m=0,g=0,b=0;m0?f[w]+" "+x:v(x,/&\f/g,f[w])))&&(c[b++]=C);return E(e,t,r,0===a?Z:s,c,l,u)}function oe(e,t,r){return E(e,t,r,K,m(O),k(e,2,-2),0)}function se(e,t,r,n){return E(e,t,r,J,k(e,0,n),k(e,n+1,-1),n)}var ce=function(e,t,r){for(var n=0,a=0;n=a,a=M(),38===n&&12===a&&(t[r]=1),!N(a);)z();return I(e,T)},le=new WeakMap,ue=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,r=e.parent,n=e.column===r.column&&e.line===r.line;"rule"!==r.type;)if(!(r=r.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||le.get(r))&&!n){le.set(e,!0);for(var a=[],i=function(e,t){return B(function(e,t){var r=-1,n=44;do{switch(N(n)){case 0:38===n&&12===M()&&(t[r]=1),e[r]+=ce(T-1,t,r);break;case 2:e[r]+=D(n);break;case 4:if(44===n){e[++r]=58===M()?"&\f":"",t[r]=e[r].length;break}default:e[r]+=m(n)}}while(n=z());return e}(F(e),t))}(t,a),o=r.props,s=0,c=0;s-1&&!e.return)switch(e.type){case J:e.return=re(e.value,e.length);break;case Q:return ee([L(e,{value:v(e.value,"@","@"+Y)})],n);case Z:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return ee([L(e,{props:[v(t,/:(read-\w+)/,":-moz-$1")]})],n);case"::placeholder":return ee([L(e,{props:[v(t,/:(plac\w+)/,":-webkit-input-$1")]}),L(e,{props:[v(t,/:(plac\w+)/,":-moz-$1")]}),L(e,{props:[v(t,/:(plac\w+)/,V+"input-$1")]})],n)}return""}))}}];const pe=function(e){var t=e.key;if("css"===t){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var n,a,i=e.stylisPlugins||fe,o={},s=[];n=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),r=1;r=4;++n,a-=4)t=1540483477*(65535&(t=255&e.charCodeAt(n)|(255&e.charCodeAt(++n))<<8|(255&e.charCodeAt(++n))<<16|(255&e.charCodeAt(++n))<<24))+(59797*(t>>>16)<<16),r=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&r)+(59797*(r>>>16)<<16);switch(a){case 3:r^=(255&e.charCodeAt(n+2))<<16;case 2:r^=(255&e.charCodeAt(n+1))<<8;case 1:r=1540483477*(65535&(r^=255&e.charCodeAt(n)))+(59797*(r>>>16)<<16)}return(((r=1540483477*(65535&(r^=r>>>13))+(59797*(r>>>16)<<16))^r>>>15)>>>0).toString(36)},me={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var ge=/[A-Z]|^ms/g,ye=/_EMO_([^_]+?)_([^]*?)_EMO_/g,ve=function(e){return 45===e.charCodeAt(1)},be=function(e){return null!=e&&"boolean"!=typeof e},we=u((function(e){return ve(e)?e:e.replace(ge,"-$&").toLowerCase()})),ke=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(ye,(function(e,t,r){return _e={name:t,styles:r,next:_e},t}))}return 1===me[e]||ve(e)||"number"!=typeof t||0===t?t:t+"px"};function xe(e,t,r){if(null==r)return"";if(void 0!==r.__emotion_styles)return r;switch(typeof r){case"boolean":return"";case"object":if(1===r.anim)return _e={name:r.name,styles:r.styles,next:_e},r.name;if(void 0!==r.styles){var n=r.next;if(void 0!==n)for(;void 0!==n;)_e={name:n.name,styles:n.styles,next:_e},n=n.next;return r.styles+";"}return function(e,t,r){var n="";if(Array.isArray(r))for(var a=0;a96?Re:ze},je=function(e,t,r){var n;if(t){var a=t.shouldForwardProp;n=e.__emotion_forwardProp&&a?function(t){return e.__emotion_forwardProp(t)&&a(t)}:a}return"function"!=typeof n&&r&&(n=e.__emotion_forwardProp),n},Ie=function(e){var t=e.cache,r=e.serialized,n=e.isStringTag;return Le(t,r,n),Pe((function(){return function(e,t,r){Le(e,t,r);var n=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+n:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}(t,r,n)})),null};var Ne=function e(t,r){var n,a,i=t.__emotion_real===t,o=i&&t.__emotion_base||t;void 0!==r&&(n=r.label,a=r.target);var s=je(t,r,i),u=s||Me(o),d=!u("as");return function(){var f=arguments,p=i&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==n&&p.push("label:"+n+";"),null==f[0]||void 0===f[0].raw)p.push.apply(p,f);else{p.push(f[0][0]);for(var h=f.length,m=1;m(0,n.createElement)(He.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 384 512"},(0,n.createElement)(He.Path,{d:"M173.8 5.5c11-7.3 25.4-7.3 36.4 0L228 17.2c6 3.9 13 5.8 20.1 5.4l21.3-1.3c13.2-.8 25.6 6.4 31.5 18.2l9.6 19.1c3.2 6.4 8.4 11.5 14.7 14.7L344.5 83c11.8 5.9 19 18.3 18.2 31.5l-1.3 21.3c-.4 7.1 1.5 14.2 5.4 20.1l11.8 17.8c7.3 11 7.3 25.4 0 36.4L366.8 228c-3.9 6-5.8 13-5.4 20.1l1.3 21.3c.8 13.2-6.4 25.6-18.2 31.5l-19.1 9.6c-6.4 3.2-11.5 8.4-14.7 14.7L301 344.5c-5.9 11.8-18.3 19-31.5 18.2l-21.3-1.3c-7.1-.4-14.2 1.5-20.1 5.4l-17.8 11.8c-11 7.3-25.4 7.3-36.4 0L156 366.8c-6-3.9-13-5.8-20.1-5.4l-21.3 1.3c-13.2 .8-25.6-6.4-31.5-18.2l-9.6-19.1c-3.2-6.4-8.4-11.5-14.7-14.7L39.5 301c-11.8-5.9-19-18.3-18.2-31.5l1.3-21.3c.4-7.1-1.5-14.2-5.4-20.1L5.5 210.2c-7.3-11-7.3-25.4 0-36.4L17.2 156c3.9-6 5.8-13 5.4-20.1l-1.3-21.3c-.8-13.2 6.4-25.6 18.2-31.5l19.1-9.6C65 70.2 70.2 65 73.4 58.6L83 39.5c5.9-11.8 18.3-19 31.5-18.2l21.3 1.3c7.1 .4 14.2-1.5 20.1-5.4L173.8 5.5zM272 192a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM1.3 441.8L44.4 339.3c.2 .1 .3 .2 .4 .4l9.6 19.1c11.7 23.2 36 37.3 62 35.8l21.3-1.3c.2 0 .5 0 .7 .2l17.8 11.8c5.1 3.3 10.5 5.9 16.1 7.7l-37.6 89.3c-2.3 5.5-7.4 9.2-13.3 9.7s-11.6-2.2-14.8-7.2L74.4 455.5l-56.1 8.3c-5.7 .8-11.4-1.5-15-6s-4.3-10.7-2.1-16zm248 60.4L211.7 413c5.6-1.8 11-4.3 16.1-7.7l17.8-11.8c.2-.1 .4-.2 .7-.2l21.3 1.3c26 1.5 50.3-12.6 62-35.8l9.6-19.1c.1-.2 .2-.3 .4-.4l43.2 102.5c2.2 5.3 1.4 11.4-2.1 16s-9.3 6.9-15 6l-56.1-8.3-32.2 49.2c-3.2 5-8.9 7.7-14.8 7.2s-11-4.3-13.3-9.7z"})),edit:function(t){let{attributes:r,setAttributes:s,mergeBlocks:c,onReplace:l,style:u,clientId:d}=t;const{getBlockType:f}=(0,i.useSelect)(e.store),{getEditedPostAttribute:p,getCurrentPostType:h}=(0,i.useSelect)(o.store),{edit:m}=f("core/heading"),g="llms_certificate"===h()?"certificate_title":"title";return r.placeholder=r.placeholder||(0,a.__)("Certificate of Achievement","lifterlms"),r.content=r.content||p(g),(0,n.createElement)(n.Fragment,null,(0,n.createElement)(m,{attributes:r,setAttributes:e=>{const{content:t}=e;return void 0!==t&&function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!t){const{getCurrentPostType:e}=(0,i.select)(o.store);t=e()}const{editPost:r}=(0,i.dispatch)(o.store),n={};"llms_certificate"===t?n.certificate_title=e:"llms_my_certificate"===t&&(n.title=e),r(n)}(t),s(e)},mergeBlocks:c,onReplace:l,style:u,clientId:d,context:[]}))},save:function(e){let{attributes:t}=e;const{textAlign:r,content:a,level:i}=t,o="h"+i,s=Be()({[`has-text-align-${r}`]:r});return(0,n.createElement)(o,De.useBlockProps.save({className:s}),(0,n.createElement)(De.RichText.Content,{value:a}))}})})()})();
\ No newline at end of file
diff --git a/class-lifterlms.php b/class-lifterlms.php
index 1f45827bcc..4977c20dc0 100644
--- a/class-lifterlms.php
+++ b/class-lifterlms.php
@@ -34,7 +34,7 @@ final class LifterLMS {
*
* @var string
*/
- public $version = '7.7.7';
+ public $version = '7.7.8';
/**
* LLMS_Assets instance
@@ -143,29 +143,6 @@ private function define_constants() {
define( 'LLMS_ASSETS_VERSION', ( $script_debug || $wp_debug ) ? time() : $this->version );
}
- // For use in escaping and sanitizing.
- llms_maybe_define_constant(
- 'LLMS_ALLOWED_HTML_PRICES',
- array(
- 'div' => array(
- 'class' => array(),
- 'id' => array(),
- ),
- 'span' => array(
- 'class' => array(),
- 'id' => array(),
- ),
- 'strong' => array(
- 'class' => array(),
- 'id' => array(),
- ),
- 'sup' => array(
- 'class' => array(),
- 'id' => array(),
- ),
- )
- );
-
$allowed_atts = array(
'label' => true,
'align' => true,
@@ -274,6 +251,21 @@ private function define_constants() {
'sandbox' => true,
'sizes' => true,
);
+
+ // For use in escaping and sanitizing.
+ llms_maybe_define_constant(
+ 'LLMS_ALLOWED_HTML_PRICES',
+ array(
+ 'div' => $allowed_atts,
+ 'span' => $allowed_atts,
+ 'strong' => $allowed_atts,
+ 'sup' => $allowed_atts,
+ 'del' => $allowed_atts,
+ 'ins' => $allowed_atts,
+ 'em' => $allowed_atts,
+ 'bdi' => $allowed_atts,
+ )
+ );
llms_maybe_define_constant(
'LLMS_ALLOWED_HTML_FORM_FIELDS',
array(
@@ -283,6 +275,7 @@ private function define_constants() {
'article' => $allowed_atts,
'b' => $allowed_atts,
'bdo' => $allowed_atts,
+ 'bdi' => $allowed_atts,
'blockquote' => $allowed_atts,
'br' => $allowed_atts,
'cite' => $allowed_atts,
diff --git a/composer.json b/composer.json
deleted file mode 100644
index 9ed0417120..0000000000
--- a/composer.json
+++ /dev/null
@@ -1,143 +0,0 @@
-{
- "name": "gocodebox/lifterlms",
- "description": "LifterLMS, the #1 WordPress LMS solution, makes it easy to create, sell, and protect engaging online courses.",
- "keywords": [
- "WordPress",
- "LMS"
- ],
- "homepage": "https://lifterlms.com",
- "license": "GPL-3.0+",
- "authors": [
- {
- "name": "LifterLMS",
- "email": "help@lifterlms.com",
- "homepage": "https://lifterlms.com"
- }
- ],
- "type": "wordpress-plugin",
- "support": {
- "forum": "https://wordpress.org/support/plugin/lifterlms",
- "issues": "https://github.com/gocodebox/lifterlms/issues",
- "source": "https://github.com/gocodebox/lifterlms"
- },
- "autoload": {
- "psr-4": {
- "LLMS\\": "includes"
- }
- },
- "require": {
- "php": ">=7.4",
- "composer/installers": "~1.9.0",
- "deliciousbrains/wp-background-processing": "1.0.2",
- "lifterlms/lifterlms-blocks": "2.5.7",
- "lifterlms/lifterlms-cli": "0.0.4",
- "lifterlms/lifterlms-helper": "3.5.4",
- "lifterlms/lifterlms-rest": "1.0.2",
- "woocommerce/action-scheduler": "3.5.4"
- },
- "require-dev": {
- "lifterlms/lifterlms-tests": "^4.4",
- "lifterlms/lifterlms-cs": "dev-trunk"
- },
- "archive": {
- "exclude": [
- ".*",
- "*.lock",
- "*.xml",
- "*.xml.dist",
- "*.config.js",
-
- "CHANGELOG.md",
- "composer.json",
- "docker-compose.yml",
- "lerna.json",
- "package.json",
- "package-lock.json",
- "README.md",
-
- "/assets/scss",
-
- "_private",
- "dist",
- "docs",
- "gulpfile.js",
- "node_modules",
- "packages",
- "src",
- "tests",
- "tmp",
- "wordpress",
- "!/vendor",
-
- "!/libraries",
- "/libraries/README.md",
- "/libraries/**/composer.*",
- "/libraries/**/i18n",
-
- "/vendor/bin",
- "/vendor/**/**/composer.*",
- "/vendor/**/**/*.md",
- "/vendor/**/**/.*",
- "/vendor/composer/installers",
- "/vendor/composer/lifters",
-
- "!/assets/maps/js/vendor",
- "!/assets/vendor",
- "!/assets/js/vendor",
- "!/assets/js/builder/vendor"
- ]
- },
- "scripts": {
- "check-cs": "\"vendor/bin/phpcs\" --colors",
- "check-cs-errors": "\"vendor/bin/phpcs\" --colors --error-severity=1 --warning-severity=6",
- "config-cs": [
- "\"vendor/bin/phpcs\" --config-set default_standard 'LifterLMS Core'",
- "\"vendor/bin/phpcs\" --config-set ignore_warnings_on_exit 1"
- ],
- "env": "\"vendor/bin/llms-env\"",
- "env:setup": "./tests/bin/setup-e2e.sh",
- "fix-cs": "\"vendor/bin/phpcbf\"",
- "post-install-cmd": "@post-update-install-cmd",
- "post-update-cmd": "@post-update-install-cmd",
- "post-update-install-cmd": [
- "@config-cs",
- "rm -rf ./wp-content/",
- "rm composer.lock"
- ],
- "tests-remove": "\"vendor/bin/llms-tests\" teardown ${TESTS_DB_NAME:-llms_tests} ${TESTS_DB_USER:-root} \"${TESTS_DB_PASS:-password}\" ${TESTS_DB_HOST:-127.0.0.1}",
- "tests-install": "\"vendor/bin/llms-tests\" install ${TESTS_DB_NAME:-llms_tests} ${TESTS_DB_USER:-root} \"${TESTS_DB_PASS:-password}\" ${TESTS_DB_HOST:-127.0.0.1} ${WP_VERSION:-latest} false \"${WP_TESTS_VERSION:-false}\"",
- "tests-reinstall": [
- "@tests-remove",
- "@tests-install"
- ],
- "tests": [
- "Composer\\Config::disableProcessTimeout",
- "\"vendor/bin/phpunit\""
- ],
- "tests-run": [
- "Composer\\Config::disableProcessTimeout",
- "\"vendor/bin/phpunit\""
- ],
- "install-php8": "composer install --ignore-platform-reqs"
- },
- "extra": {
- "installer-paths": {
- "libraries/{$name}": [
- "lifterlms/lifterlms-blocks",
- "lifterlms/lifterlms-cli",
- "lifterlms/lifterlms-helper",
- "lifterlms/lifterlms-rest"
- ],
- "vendor/{$vendor}/{$name}": [
- "type:wordpress-plugin"
- ]
- }
- },
- "config": {
- "allow-plugins": {
- "dealerdirect/phpcodesniffer-composer-installer": true,
- "composer/installers": true
- }
- },
- "minimum-stability": "dev"
-}
diff --git a/docker-compose.yml b/docker-compose.yml
deleted file mode 100644
index b773b52d93..0000000000
--- a/docker-compose.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-version: '3.1'
-services:
- wordpress:
- volumes:
- - ./:/var/www/html/wp-content/plugins/lifterlms:rw
diff --git a/docs/block-development.md b/docs/block-development.md
deleted file mode 100644
index 4bd156ee24..0000000000
--- a/docs/block-development.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# Block Development
-
-Below are the steps for creating and registering a new block for LifterLMS.
-
-Please note that before beginning you will need to have Node and NPM installed on your machine. Please see [https://github.com/gocodebox/lifterlms/blob/trunk/docs/installing.md](https://github.com/gocodebox/lifterlms/blob/trunk/docs/installing.md) for installation details.
-
-#### Table of Contents
-- [1. Create block files](#1-create-block-files)
-- [2. Add block JSON data](#2-add-block-json-data)
-- [3. Adding Block JS](#3-adding-block-js)
-- [4. Compiling blocks](#4-compiling-blocks)
-- [5. Register with PHP](#5-register-with-php)
-- [6. Block design guidelines](#6-block-design-guidelines)
-
-### 1. Create block files
-
-Create a new folder in the `src/blocks` directory for your block. E.g. `/src/blocks/example-block/`. Then, add a `block.json` file and an `index.jsx` file to the new folder.
-
-The block directory structure should now look like this:
-
-```shell
-.
-└── project/
- ├── src/
- │ └── blocks/
- │ └── block/
- │ ├── block.json
- │ ├── index.jsx
- │ └── index.scss # optional.
- ├── package.json
- └── webpack.congif.js
-```
-
-### 2. Add block JSON data
-
-Next, add block information to the `block.json` file. Below is an example of a block.json file. Note that the category should be `lifterlms` to match the other LifterLMS blocks:
-
-```json
-{
- "$schema": "https://schemas.wp.org/trunk/block.json",
- "apiVersion": 2,
- "name": "llms/example-block",
- "title": "Example",
- "category": "llms-blocks",
- "description": "Block description",
- "textdomain": "lifterlms",
- "attributes": {},
- "supports": {},
- "editorScript": "file:./index.js"
-}
-```
-
-### 3. Adding Block JS
-
-Next, add the block’s JavaScript to the `index.jsx` file. We use the JSX file extension to indicate that the file contains JSX code.
-
-Below is an example of how to register a new block and access the block.json data to set the block’s name and attributes:
-
-```jsx
-import { registerBlockType } from '@wordpress/blocks';
-import blockJson from './block.json';
-
-registerBlockType( blockJson, {
- edit: ( props ) => {
- return { props.name }
;
- },
- save: ( props ) => {
- return { props.name }
;
- },
-} );
-```
-
-*Note that while it is common practise to separate the `edit` and `save` functions into separate files, this is not necessary unless the code becomes too complex to manage in a single file. We prefer to keep the code in a single file where possible.*
-
-### 4. Compiling blocks
-
-To compile the block, open the Terminal and run the following NPM script from the plugin root directory. This will compile all blocks to the main `/blocks/` directory:
-
-`npm run build:blocks`
-
-### 5. Register with PHP
-
-The last step is to register the block with PHP. This should be added to a PHP file or class where it makes sense. For example, shortcode blocks are registered in the `/includes/shortcodes/class.llms.shortcodes.blocks.php` file. Below is an example of how to register a block with PHP and allow WordPress to handle the loading of scripts and styles:
-
-```php
-add_action( 'init', 'llms_register_example_block' );
-/**
- * Register the example block.
- *
- * @since 1.0.0
- *
- * @return void
- */
-function llms_register_example_block() {
- register_block_type( LLMS_PLUGIN_DIR . 'blocks/example-block' );
-}
-```
-
-### 6. Block design guidelines
-
-Blocks should be designed to be as simple as possible.
-
-#### Icons
-
-Blocks should use FontAwesome icons. The complete list of icons can be found at [https://fontawesome.com/icons](https://fontawesome.com/icons). SVG icons need to be converted to React components and added to blocks with the `registerBlockType` function:
-
-```jsx
-import { registerBlockType } from '@wordpress/blocks';
-import { SVG, Path } from '@wordpress/primitives';
-
-const Icon = () => (
-
-
-
-);
-
-registerBlockType( blockJson, {
- icon: Icon,
- edit: Edit
-} );
-```
-
-#### Colors
-
-Blocks use the default core admin color palette. This ensures that hover and active states are consistent with other blocks.
-
-## Shortcodes
-
-For blocks with Server Side Rendering functionality, a shortcode should also be registered to support users who are not using the block editor. The shortcode should follow LifterLMS shortcode naming conventions and be registered in the `/includes/shortcodes/` directory and extend the `LLMS_Shortcode` class.
-
-Shortcode blocks can use the `llms_shortcode_blocks` filter provided by the `LLMS_Shortcode_Block` class to handle the block registration and rendering. Below is an example of how to register a block with the class from within a LifterLMS add-on plugin:
-
-```php
-add_filter( 'llms_shortcode_blocks', register_blocks( array $config ): array {
- $config['group-list'] = array(
- 'render' => array( 'LLMS_Groups_Shortcode_Group_List', 'output' ),
- 'path' => LLMS_GROUPS_PLUGIN_DIR . 'assets/blocks/group-list',
- );
-
- return $config;
-} );
-```
diff --git a/docs/coding-standards.md b/docs/coding-standards.md
deleted file mode 100644
index e25d33af7f..0000000000
--- a/docs/coding-standards.md
+++ /dev/null
@@ -1,141 +0,0 @@
-LifterLMS Coding Standards
-==========================
-
-The purpose of the LifterLMS Coding Standards is to create a baseline for collaboration and review within the open source LifterLMS codebase, project, and community.
-
-The WordPress community has developed coding standards and documented them in the [WordPress codex](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/). Wherever possible, the LifterLMS Coding Standards aim to obey these coding standards.
-
-## Naming Conventions
-
-### camelCase should not be used.
-
-LifterLMS avoids `camelCase` for class names, class methods, functions, and variables. Words should instead be separated by underscores.
-
-### Class Names
-
-Class names should use capitalized words separated by underscores.
-LifterLMS core class names should be prefixed with `LLMS_`.
-
-
-```php
-class LLMS_Student extends LLMS_Abstract_User_Data { [...] }
-class LLMS_Data { [...] }
-```
-
-LifterLMS add-on class names should be prefixed with `LLMS_` as well as an additional add-on prefix.
-
-```php
-class LLMS_AQ_Question_Types { [...] }
-class LLMS_SL_Story extends LLMS_Abstract_Database_Store { [...] }
-```
-
-### Trait Names
-
-Trait names should use capitalized words separated by underscores.
-LifterLMS core trait names should be prefixed with `LLMS_Trait`.
-
-```php
-trait LLMS_Trait_Singleton { [...] }
-```
-
-### Constants
-
-Constants should be in all upper-case with underscores separating words.
-LifterLMS core constants should be prefixed with `LLMS_`.
-
-```php
-define( 'LLMS_PLUGIN_FILE', __FILE__ );
-```
-
-LifterLMS add-on class names should be prefixed with `LLMS_` as well as an additional add-on prefix.
-
-```php
-define( 'LLMS_FORMIDABLE_FORMS_PLUGIN_FILE', __FILE__ );
-```
-
-### File names
-
-Files should be named descriptively using lower case letters. Hyphens should be used to separate words.
-
-```
-my-plugin-file.php
-```
-
-Class file names should be based on the class name with `class-` prepended and the underscores in the class name replaced with hyphens, for example `LLMS_Data` becomes:
-
-```
-class-llms-data.php
-```
-
-Files containing model classes should prepend `model-` instead of `class-`. For example the `LLMS_Student` model class becomes:
-
-```
-model-llms-student.php
-```
-
-Trait file names should be based on the trait name with underscores replaced by hyphens and the file stored in the
-`includes/traits` directory. For example `LLMS_Trait_Singleton` becomes:
-
-```
-includes/traits/llms-trait-singleton.php
-```
-
-### Functions & Variables
-
-Lowercase letters should be used for function names and variables. Separate words with underscores.
-LifterLMS core functions should be prepended with the prefix `llms_`.
-
-```php
-llms_current_time( $type, $gmt = 0 ) { [...] }
-```
-
-LifterLMS add-on function names should be prefixed with `llms_` as well as an additional add-on prefix.
-
-```php
-llms_ck_consent_form_field() { [...] }
-```
-
-### Hooks: Actions & Filters
-
-Lowercase letters should be used for hook names. Separate words with underscores.
-LifterLMS core hooks should be prepended with the prefix `llms_`.
-
-```php
-do_action( 'llms_user_enrolled_in_course', [...] );
-apply_filters( 'llms_get_enrollment_status', [...] );
-```
-
-LifterLMS add-on hook names should be prefixed with `llms_` as well as an additional add-on prefix.
-
-```php
-do_action( 'llms_pa_post_created_from_automation', [...] );
-apply_filters( 'llms_sl_story_can_user_manage', [...] );
-```
-
-When actions are set to run before and after items (templates, as an example) it is acceptable to use additional prefixes `before_` and `after_` prior to the `llms_` prefix.
-
-There are a number of legacy hooks which use the prefix `lifterlms_` instead of `llms_`. These are retained for backwards compatibility but should not be used as an example of an acceptable naming convention for new code.
-
-### CSS Classes and IDs
-
-Class names and IDs should be lowercase and prefixed with `llms-`.
-
-Words should be separated with hyphens (AKA "kebab case").
-
-```html
-
-```
-
-### Form Element `name` attributes
-
-The `name` attribute of HTML form elements should be prefixed with `llms_`.
-
-Lowercase letters should be used and words should be separated by underscores.
-
-```html
-
-```
-
-
diff --git a/docs/contributing.md b/docs/contributing.md
deleted file mode 100644
index aca594f40c..0000000000
--- a/docs/contributing.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Contributor Guidelines
-----------------------
-
-See contributing guidelines at https://github.com/gocodebox/lifterlms/blob/trunk/.github/CONTRIBUTING.md
diff --git a/docs/documentation-standards.md b/docs/documentation-standards.md
deleted file mode 100644
index 865691d955..0000000000
--- a/docs/documentation-standards.md
+++ /dev/null
@@ -1,395 +0,0 @@
-LifterLMS Inline Documentation Standards
-========================================
-
-The LifterLMS documentation standard is heavily inspired by the [WordPress core's documentation standards][wp-core-docs]. We have made customizations to these standards in areas where it aids our core team's development and release workflows. By using the WordPress core documentation standard as a starting point any contributor already familiar with the WordPress core should be able to quickly add inline documentation to LifterLMS without the need to study our standards at length.
-
-## What should be documented
-
-The following elements should be documented using formatted documentation blocks (DocBlocks):
-
-+ Functions
-+ Classes
-+ Class methods
-+ Class members (including properties and constants)
-+ Requires and includes
-+ Hooks (actions and filters)
-+ File headers
-
-## DocBlock Formatting Guidelines
-
-Inline documentation in the LifterLMS code base is automatically parsed and output to the code reference [developer.lifterlms.com][llms-dev]. Adhering to these guidelines is essential to ensure optimum readability via the code reference.
-
-
-### Spacing
-
-DocBlocks should directly precede the element (hook, function, method, class, etc...). There should not be any opening/closing tags, white space, or anything else between the DocBlock and the declarations. This will ensure the parser can correctly associate the DocBlock with it's element.
-
-
-### Summary
-
-A short piece of text, usually one line, providing the basic function of the associated element. A good summary concisely describes what the element does and should not attempt to describe why the element exists.
-
-HTML may not be used in the summary. For example, if the function outputs an ` ` tag, the summary should read ```Outputs an image tag.``` instead of ```Outputs an ` ` tag.```.
-
-
-### Description
-
-An optional longer piece of text providing more details on the associated element’s function.
-
-HTML may not be used in the summary but markdown can be used to format a complicated description.
-
-**1. Lists**
-
-Use a hyphen (`-`) to create an unordered list, with a blank line before and after.
-
-```
- * Description which includes an unordered list:
- *
- * - This is item 1.
- * - This is item 2.
- * - This is item 3.
- *
- * The description continues on ...
-```
-
-Use numbers to create an ordered list, with a blank line before and after.
-
-```
- * Description which includes an ordered list:
- *
- * 1. This is item 1.
- * 2. This is item 2.
- * 3. This is item 3.
- *
- * The description continues on ...
-```
-
-**2. Code Samples**
-
-A code sample may be created by indenting every line of the code by 4 spaces, with a blank line before and after. Blank lines in code samples also need to be indented by four spaces. Note that examples added in this way will be output in `` tags and are not syntax-highlighted in the code reference.
-
-```
- * Description including a code sample:
- *
- * $status = array(
- * 'draft' => __( 'Draft' ),
- * 'pending' => __( 'Pending Review' ),
- * 'private' => __( 'Private' ),
- * 'publish' => __( 'Published' )
- * );
- *
- * The description continues on ...
-```
-
-**3. Links**
-
-A link in the form of a URL, such as related GitHub issue or other documentation, should be added in the appropriate place in the DocBlock using the `@link` tag.
-
-```
- * Description text.
- *
- * @link https://github.com/gocodebox/lifterlms/issues/1234567890
-```
-
-### Changelogs
-
-Whenever any code is changed within an element, a `@since`, `@version`, or `@deprecated` tag should be added to the element to document the change(s) which have been made.
-
-No HTML should be used in the descriptions for these tags, though limited Markdown can be used as necessary, such as for adding backticks around variables, e.g. `$variable`.
-
-All descriptions for any of these tags should be a full sentence ending with a full stop (a period, for example).
-
-#### Changes Warranting a Changelog Entry
-
-Most code changes warrant a changelog entry to be recorded for the element but there are some exceptions.
-
-+ **Classes**: Any breaking changes, deprecations, or the introduction of new class elements (elements which do not have their own changelog, such as class properties) require an accompanying `@since` tag entry. Changes to a class method should be recorded on the method's changelog, not on the class changelog.
-+ **Functions and class methods**: Any change made requires an accompanying `@since` tag entry
-
-Changes which do not affect the functionality or execution of the element *should not* be recorded on the element's changelog. For example, a coding standards change such as alignment or spacing should not be recorded.
-
-#### Recording the Version Number
-
-Versions should be expressed in the 3-digit `x.x.x` style.
-
-```
- * @since 3.29.0
-```
-
-When any change has been made to the element an additional `@since` tag can be added with a short description of the changes which were made.
-
-```
- * @since 3.3.0
- * @since 3.5.0 Added optional 3rd argument.
-```
-
-#### Deprecations
-
-When an element is marked for deprecation this should be recorded at the end of the changelog with an `@deprecated` tag.
-
-A short description may be added to provide additional information about the deprecation. If a replacement function has been added in it's place, note as much with an `@see` tag.
-
-```
- * @since 3.3.0
- * @since 3.5.0 Added optional 3rd argument.
- * @deprecated 3.10.0 Use `llms_new_function_name()` instead.
- *
- * @see llms_new_function_name()
-```
-
-When adding documentation on an existing element which does not yet have a changelog (common in code added prior to the creation and enforcement of these standards) if it is impossible to determine when the element was added the version may be expressed with `Unknown` instead of the `x.x.x` version number.
-
-#### File Headers
-
-Whenever an element within a file is updated, the `@version` tag in the header should be updated to the current version of the codebase.
-
-#### Tag alignment and order
-
-All changelog tags, `@since`, `@version`, and `@deprecated` should be grouped together with a space before the first `@since` tag and after the last tag in the group.
-
-```
- * @since 3.3.0
- * @since 3.5.0 Changelog entry description.
- * @deprecated 3.10.0 Use `llms_new_function_name()` instead.
-```
-
-When multiple lines are required for a single entry, subsequent lines should be indented to match the starting point of the description.
-
-```
- * @since 3.3.0
- * @since 3.5.0 Changelog entry description.
- A second entry aligned to with the first entry.
-```
-
-Multiple logs with version numbers of differing lengths should not be aligned to one another.
-
-```
- * @since 3.3.0
- * @since 3.25.0 Changelog entry description.
- * @since 4.0.0 This entry should not be aligned with the 3.25.0 entry above it.
-```
-
-#### Using Placeholders
-
-When contributing code we recommend using the placeholder `[version]` in favor of trying to guess what version the element will be released with.
-
-Our release workflow automatically replaces with `@since`, `@version`, and `@deprecated` followed by `[version]` with the actual version of the release being packaged.
-
-For a new element:
-
-```
- * @since [version]
-```
-
-When updating an existing element:
-
-```
- * @since 3.5.0
- * @since [version] Updated element.
-```
-
-
-### Additional Tags
-
-#### 1. Parameters and Returns
-
-Functions and methods should define all parameter arguments and returns with the `@param` and `@return` tags.
-
-No HTML should be used in the descriptions for these tags, though limited Markdown can be used as necessary, such as for adding backticks around variables, e.g. `$variable`.
-
-All descriptions for any of these tags should be a full sentence ending with a full stop (a period, for example).
-
-```
- * @param string $var1 Description of the argument.
- * @param bool $var2 Description of the argument.
- * @return string
- */
-function my_function( $var1, $var2 = false ) {
- ...
- return $var1;
-}
-```
-
-Parameters that are arrays should be documented using WordPress’ flavor of hash notation style, each array value beginning with the `@type` tag, and and describing the value as follows:
-
-```
- * @type type $key Description. Default 'value'. Accepts 'value', 'value'.
- * (aligned with Description, if wraps to a new line)
-```
-
-A full array parameter would look like this:
-
-```
- * @param array $args {
- * Optional. An array of arguments.
- *
- * @type type $key Description. Default 'value'. Accepts 'value', 'value'.
- * (aligned with Description, if wraps to a new line)
- * @type type $key Description.
- * }
-```
-
-#### 2. Types
-
-Variables, constants, and class members should use the `@var` tag to describe the member's type.
-
-```
- * @var string
- */
-public $var = 'text';
-```
-
-#### 3. Relations and References
-
-Use `@see` to perform automatic links to other areas of the codebase. For example `{@see 'is_lifterlms'}` to link to the filter `is_lifterlms`.
-
-
-#### 4. Thrown Exceptions
-
-A function or method which throws an exception should document the thrown exception using an `@throws` tag.
-
-When present, the `@throws` tag should be added to the end of the docblock below the `@return` tag. An empty line should separate the `@return` and `@throws` tag.
-
-```
- * @return string
- *
- * @throws Exception A description of the raised exception.
- */
-```
-
-## DocBlock Examples
-
-
-### Functions and Class Methods
-
-Functions and class methods should be formatted as follows:
-
-+ Summary
-+ Description (optional)
-+ Changelog
-+ Links and References (where appropriate)
-+ Parameters
-+ Return
-
-```
-/**
- * Summary.
- *
- * Description.
- *
- * @since x.x.x
- * @since x.x.x Description of function/method changes.
- *
- * @see Function/method/class relied on
- * @link URL
- *
- * @param type $var Description.
- * @param type $var Optional. Description. Default.
- * @return type Description.
- */
-```
-
-
-### Classes
-
-Class DocBlocks should be formatted as follows:
-
-+ Summary
-+ Description (Optional)
-+ Links and References (as an example use `@see` to reference a super class when documenting a sub class)
-+ Changelog
-
-```
-/**
- * Summary.
- *
- * Description.
- *
- * @see Super_Class
- *
- * @since x.x.x
- * @since x.x.x Description of class changes.
- */
-```
-
-
-### Class Members
-
-Class properties and constants should be formatted as follows:
-
-+ Summary
-+ Changelog
-+ Type
-
-```
-/**
- * Summary.
- *
- * @since x.x.x
- * @since x.x.x Description of member changes.
- * @var type Optional description.
- */
-```
-
-
-### Hooks (Actions and Filters)
-
-Both action and filter hooks should be documented on the line immediately preceding the call to `do_action()` or `do_action_ref_array()`, `apply_filters()`, or `apply_filters_ref_array()`, and formatted as follows:
-
-+ Summary
-+ Description (Optional)
-+ Changelog
-+ Parameters
-
-Note that `@return` is not used for hook documentation, because action hooks return nothing, and filter hooks always return their first parameter.
-
-```
-/**
- * Summary.
- *
- * Description.
- *
- * @since x.x.x
- * @since x.x.x Description of hook changes.
- *
- * @param type $var Description.
- * @param array $args {
- * Short description about this hash.
- *
- * @type type $var Description.
- * @type type $var Description.
- * }
- * @param type $var Description.
- */
-```
-
-
-### File Headers
-
-The file header DocBlock is used to give an overview of what is contained in the file and should be formatted as follows:
-
-+ Summary
-+ Description (optional)
-+ Links and references
-+ Package
-+ Changelog
-
-```
-/**
- * Summary (no period for file headers)
- *
- * Description. (use period)
- *
- * @link URL
- *
- * @package LifterLMS/SecondaryPackage/TertiaryPackage
- *
- * @since x.x.x
- * @since x.x.x Description of file changes.
- * @version x.x.x
- */
-```
-
-
-[llms-dev]: https://developer.lifterlms.com/reference/
-[wp-core-docs]: https://developer.wordpress.org/coding-standards/inline-documentation-standards/
diff --git a/docs/e2e-tests-real.md b/docs/e2e-tests-real.md
deleted file mode 100644
index d4b4c2ba65..0000000000
--- a/docs/e2e-tests-real.md
+++ /dev/null
@@ -1,72 +0,0 @@
-Running E2E (End to End) Tests Against a Real Website
-=====================================================
-
-_The core E2E test suite is primarily designed to be run locally against managed Docker containers. However, it is possible to run the test suite against any WordPress website with a publicly accessible URL by following this guide._
-
-_To run tests locally against managed Docker containers, see the [E2E Testing README](../tests/e2e/README.md)._
-
-**NOTE: This is an experimental process! Proceed with caution. We are developing this process for internal use and thought it might be useful to some other folks.**
-
-**Another note: This process will import courses, create fake users, and add other data to your website and there is no cleanup proccess. If you choose to use this against a live production site that means that the database will have a bunch of fake test data added to it. So don't run this against a real production website. Use a staging website instead!**
-
-## Prerequisites
-
-+ Ability to use a terminal
-+ git
-+ node.js
-+ npm
-
-
-## Setup your local environment
-
-+ Install the LifterLMS repo: `git clone https://github.com/gocodebox/lifterlms`
-+ Move into the cloned directory: `cd liferlms`
-+ Install node packages: `npm ci`
-+ Create a new file in the created directory named `.llmsenv`.
-+ Use your favorite text editor to edit the file and add the following to the file (replacing the example data with your site's information):
-
-```
-WP_BASE_URL=https://yourwebsiteurl.tld
-WP_USERNAME=adminusername
-WP_PASSWORD=adminpassword
-```
-
-**This will store a password in a PLAIN TEXT which we know is wrong. Our internal use case uses this process with temporary sites which are regularly destroyed so the danger is acceptable to our use case. If you decide to use this process on a real website with real user information you have been warned that storing your production site's WP admin password in a plain text file in order to use this process is a bad idea. We recommend instead using environment variables to pass your password to the script later and removing the WP_PASSWORD from the `.llmsenv` file.**
-
-+ Save the file
-
-
-## Setup your production site
-
-+ Install and activate the LifterLMS plugin on your site
-
-
-## Run the tests
-
-There are two ways to run the E2E tests:
-
-### Headless mode
-
-Runs the tests and shows you the results.
-
-If errors are encountered, a screenshot of the page will be taken and saved in the `tmp/e2e-screenshots/` directory so you can see what the page looked like when things went sour.
-
-Error logs will be output in your terminal to review.
-
-Run headless tests by executing `npm run tests` in your terminal.
-
-
-### Interactive mode
-
-Launches an automated Chromium browser and runs the tests in "slow motion" so you can watch as the tests run.
-
-No screenshots are takeng in interactive mode.
-
-Error logs are output to the terminal for review.
-
-Run interactive tests by executing `npm run tests:dev` in your terminal.
-
-
-### Using environment variables
-
-If you don't want to store you admin password in a plaintext file you can define the WP_PASSWORD variable at runtime `WP_PASSWORD=yourpassword npm run tests`
diff --git a/docs/installing.md b/docs/installing.md
deleted file mode 100644
index 49fbca5a23..0000000000
--- a/docs/installing.md
+++ /dev/null
@@ -1,83 +0,0 @@
-Installing for Development
-==========================
-
-## Requirements
-
-In order to build and develop LifterLMS locally, you'll need the following:
-
-+ PHP
-+ MySQL / MariaDB
-+ [Composer](https://getcomposer.org/download/)
-+ [Node.js](https://nodejs.org/en/download/)
-+ [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
-
-
-## Building LifterLMS
-
-### 1. Clone source from GitHub
-
-```sh
-$ git clone https://github.com/gocodebox/lifterlms
-$ cd lifterlms
-```
-
-If you're planning to contribute code, you should fork this repository and clone your fork instead and switch to the dev branch before continuing the install.
-
-```sh
-$ git checkout dev
-```
-
-### 2. Install composer dependencies:
-
-```sh
-$ composer install
-```
-
-### 3. Install npm dependencies:
-
-```sh
-$ npm install --global gulp
-$ npm install
-```
-
-### 4. Build static assets
-
-```sh
-$ npm run build
-```
-
-The `lifterlms` directory is now an installable plugin that can be moved into your local server's `wp-content/plugins` directory.
-
-
-## Running PHPCS
-
-When contributing you should ensure your contributions follow our [coding](./coding-standards.md) and [documentation](./documentation-standards.md) standards.
-
-To check for errors and warnings in your code, run PHPCS:
-
-```sh
-$ composer run check-cs
-```
-
-To check for errors only:
-
-```sh
-$ composer run check-cs-errors
-```
-
-These reports may include issues that can be automatically fixed using PHPCBF:
-
-```sh
-$ composer run fix-cs
-```
-
-## Running Test Suites
-
-New code should also strive to be covered by automated tests.
-
-LifterLMS has unit and integration tests via phpunit and End-to-End tests via Jest and Puppeteer.
-
-For guides on running and contributing tests, see the relevant guides:
-
-+ [phpunit](../tests/phpunit/README.md)
-+ [e2e](../tests/e2e/README.md)
diff --git a/docs/releases.md b/docs/releases.md
deleted file mode 100644
index 120ada8d3b..0000000000
--- a/docs/releases.md
+++ /dev/null
@@ -1,163 +0,0 @@
-Releasing LifterLMS Builds
-==========================
-
-This document outlines the workflow used by LifterLMS core maintainers to build and publish LifterLMS releases.
-
-This document assumes you have already installed LifterLMS for development following the [Installing for Development guide](./installing.md).
-
-## 0. Get ready
-
-Make sure you have your local repository up to date. If your origin is set to the gocodebox/lifterlms repo, these commands will get you up to date.
-
-1. `git checkout dev` and `git pull`
-2. `git checkout trunk` and `git pull`
-
-Make sure your @lifterlms/dev package in package.json is on the latest version. If it needs to be updated, update it, commit to the dev branch, and then run `npm install`.
-
-Make sure you are back on the dev branch.
-
-1. `git checkout dev`
-
-Make sure you have installed composer requirements via `composer install`.
-
-Make sure you have the latest `@lifterlms` JS packages. Note that this will update node_modules using the latest published/stable version of the packages, and won't include any updates made to those packages by this release itself.
-
-1. `npm install`
-
-Make sure that the dev version (or trunk since it will merge automatically) are tested up to the latest version of WordPress.
-
-For Add-ons, also confirm that the plugin headers include appropriate values for LLMS minimum version and LLMS tested up to as follows:
-
-1. Adjust these lines in the header of the main plugin .php file.
-
-* ` * Tested up to: 6.4.1` (this is the WordPress tested up to value)
-* ` * LLMS requires at least: 6.0.0` (only update this value if you are sure that the update breaks backwards compatibility)
-* ` * LLMS tested up to: 7.5.0 ` (this should be updated to the latest LifterLMS stable version)
-
-## 1. Build the Release
-
-Prepare the release: `npm run dev release prepare`:
-
-When running this command, the following happens:
-
-1. Determines the version number based on the significance values found in `.changelogs/` files. Unless `-F` is passed to the command to force a specific version number.
-2. Write the changelog entries to `CHANGELOG.md`.
-3. Updates version numbers of placeholder `[version]` tags, `package.json`, etc...
-4. Runs the release build command, `npm run build`.
-
-## 2. Run tests and coding standards checks
-
-0. Ensure phpunit tests are installed: `composer run tests-install`.
-1. Ensure phpunit tests pass: `composer run tests-run`.
-2. Ensure phpcs checks pass: `composer run check-cs-errors`.
-3. Ensure e2e tests pass: `npm run test`.
-4. Ensure eslint checks pass: `npm run lint:js`.
-
-## 3. Commit and push
-
-After building and testing the built release, all changes should be committed and pushed to GitHub.
-
-1. `git commit -a`
-2. Enter something like "build version 7.1.1" for the commit message.
-3. `git push`
-
-## 4. Generate the Distribution Archive
-
-Run `npm run dev release archive -- -i`.
-
-This is a more pedantic version of `npm run dev release archive` that will allow to easily inspect
-the archive: once created, the archive will be unpacked into the `dist` directory so that its content
-could be easily inspected. E.g. make sure it doesn't contain undesired files such as unwanted dependencies
-into the `vendor` directory, and so on.
-
-## 5. Run pre-release tests on the archived
-
-Install and activate the zip file on a temporary sandbox site.
-
-Note: If you are reusing a testing site that already has LifterLMS installed, you can add this line to your wp-config.php and then uninstall and delete LifterLMS from the plugins screen and it will delete all of the LifterLMS data.
-
-`define( 'LLMS_REMOVE_ALL_DATA', true );`
-
- 1. Run the setup wizard.
- 2. Import sample course
- 3. Enroll a student into the course.
- 4. Complete a lesson.
-
-_This manual testing ensures no errors occurred in the build steps above._
-
-## 6. Publish the Release
-
-Run `npm run dev release create`.
-
-The following steps are performed automatically by the above task:
-
-1. Publish to GitHub
- 1. The contents of the distribution archive is force-pushed to the `release` branch.
- 1. A new release tag draft is created for the current version number using `release` as the commit target.
- 1. The distribution archive is uploaded to the release.
- 1. The release is published.
- 1. A webhook ping notifies the `llms-releaser` server which performs the remaining steps of the release:
-1. Publish to WordPress plugin repository
- 1. Create a new SVN tag using the release asset (distribution archive) as the base.
- 1. Update the `trunk` branch to match the new tag.
-1. A changelog blog post is published to make.lifterlms.com.
-1. The number is updated at LifterLMS.com
-1. The distribution archive is synced to the release asset bucket in AWS S3 as a backup.
-
-## 7. Update Trunk
-
-After everything is complete, the final version of should be committed and pushed to GitHub trunk branch. It is possible this can also be done on GitHub.com directly by create a Pull Request from `dev` to `trunk`
-
-1. `git checkout trunk`
-2. `git merge dev`
-3. `git push`
-
-## 8. Push to WordPress.org (If Needed)
-
-As of this writing, only the core LifterLMS plugin, the LifterLMS Labs plugin, and the Lite LMS Prgress Tracker are hosted on wordpress.org.
-
-Note: The feature of the llms-releaser server that pushes updates to wordpress.org has been disabled due to some bugs there. The steps below can be used to "manually" push a release to wordpress.org.
-
-1. If you don't have a lifterlms-svn folder, create it. (The first time you create this, it will take many minutes to download.)
- 1. Navigate to your plugins folder.
- 1. `mkdir lifterlms-svn`
- 1. `cd lifterlms-svn`
- 1. `svn co http://plugins.svn.wordpress.org/lifterlms .`
-1. Make sure your svn repo is up to date with the remote repo by running `svn update`.
-1. Make room for the update by clearing out trunk: `rm -f -f trunk/*`
-1. Copy the new dist files into trunk. `cp -r -f ../lifterlms/dist/lifterlms/* trunk/`
-1. Check what has changed: `svn status`
-1. svn add any new files
- 1. If there are a lot of files to add, you can use `svn add --force trunk/*`
-1. svn rm any deleted files
- 1. If there are a lot of files to remove, you can use `svn st | grep ^! | awk '{print " --force "$2}' | xargs svn rm`
-1. Run `svn status` one more time to review changes and make sure all files are being properly modified, added, or removed from the repo.
-
-These next step is optional for point releases, but should be done for major and minor releases and whenever the deployment process is updated enough to warrant a double check.
-
-1. Update stable version in trunk readme to point to the last stable version.
- 1. `nano trunk/readme.txt`
- 1. Change stable to previous version. (not this version)
-
-1. Commit to SVN
- 1. `svn commit -m "7.6.2 - bug fixes and enhancements"`
-1. Run svn status again to make sure there are no files that still need to be added.
- 1. `svn status`
-1. Create a tag for the new version
- 1. `svn cp trunk/ tags/7.6.2`
- 1. `svn commit -m "tag for new version"`
-1. Wait (about 15min) for each commit to go out to WP repo.
-
-If you updated the stable version to point to the previous version, test then update to the latest version.
-
-1. Test trunk by visiting [the Advanced Tab of the plugin page](https://wordpress.org/plugins/lifterlms/advanced/)
- 1. scroll to the bottom of the page
- 1. Choose "Development Version" from the dropdown.
- 1. Click download.
- 1. Install the zip on a fresh dev site and run the standard set up and enroll test or any other tests you want.
-1. If the test goes well, update the stable tag to the latest version.
- 1. `nano trunk/readme.txt`
- 1. `nano tags/7.6.2/readme.txt`
- 1. `commit -m "updating stable version"`
-
-
diff --git a/gulpfile.js/index.js b/gulpfile.js/index.js
deleted file mode 100644
index e79cf6ffc6..0000000000
--- a/gulpfile.js/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Main Gulp File
- *
- * Requires all task files
- */
-var gulp = require('gulp');
-
-// All custom tasks.
-require( './tasks/hacky-clean' );
-require( './tasks/js-additional' );
-require( './tasks/js-builder' );
-
-// All tasks from lib-tasks.
-require( 'lifterlms-lib-tasks' )( gulp );
diff --git a/gulpfile.js/tasks/hacky-clean.js b/gulpfile.js/tasks/hacky-clean.js
deleted file mode 100644
index d4bfd14bbc..0000000000
--- a/gulpfile.js/tasks/hacky-clean.js
+++ /dev/null
@@ -1,22 +0,0 @@
-const gulp = require( 'gulp' ),
- { unlinkSync } = require( 'fs' ),
- filesToRemove = [
- 'assets/css/dancing-script-rtl.css',
- 'assets/css/imperial-script-rtl.css',
- 'assets/css/pirata-one-rtl.css',
- 'assets/css/unifraktur-maguntia-rtl.css',
- ];
-
-/**
- * A hacky clean script that deletes RTL css files generated by the legacy styles-rtl tasks.
- *
- * The deleted files are webfont definition files which we don't need RTL stylesheets for.
- */
-gulp.task( 'hacky-clean', function( cb ) {
-
- filesToRemove.forEach( file => {
- unlinkSync( file );
- } );
-
- return cb();
-} );
diff --git a/gulpfile.js/tasks/js-additional.js b/gulpfile.js/tasks/js-additional.js
deleted file mode 100644
index 6e13545bab..0000000000
--- a/gulpfile.js/tasks/js-additional.js
+++ /dev/null
@@ -1,49 +0,0 @@
-var gulp = require( 'gulp' )
- , header = require( 'gulp-header' )
- , include = require( 'gulp-include' )
- , maps = require( 'gulp-sourcemaps' )
- , pump = require( 'pump' )
- , rename = require( 'gulp-rename' )
- , uglify = require( 'gulp-uglify' )
- , gulpignore = require( 'gulp-ignore' )
-
- , path = require( 'path' )
-;
-
-gulp.task( 'js-additional', function( cb ) {
-
- var notice = [
- '/****************************************************************',
- ' *',
- ' * Contributor\'s Notice',
- ' * ',
- ' * This is a compiled file and should not be edited directly!',
- ' * The uncompiled script is located in the "assets/private" directory',
- ' * ',
- ' ****************************************************************/',
- '',
- '',
- ];
-
- pump( [
- gulp.src( 'assets/js/private/**/*.js' ),
- include(),
- maps.init(),
- header( notice.join( '\n' ) ),
- maps.write('../maps/js', { destPath: 'assets/js' } ),
- gulp.dest( 'assets/js' ),
-
- // Don't pass maps any further.
- gulpignore.exclude( file => '.js' !== path.extname( file.basename ) ),
-
- uglify(),
- rename( {
- suffix: '.min',
- } ),
- maps.write('../maps/js', { destPath: 'assets/js' } ),
- gulp.dest( 'assets/js' )
- ],
- cb
- );
-
-} );
diff --git a/gulpfile.js/tasks/js-builder.js b/gulpfile.js/tasks/js-builder.js
deleted file mode 100644
index 22be2d3059..0000000000
--- a/gulpfile.js/tasks/js-builder.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * -----------------------------------------------------------
- * js-builder
- * -----------------------------------------------------------
- * Compile Admin builder Javascript
- */
-
-var gulp = require( 'gulp' )
- , requirejsOptimize = require( 'gulp-requirejs-optimize' )
- , rename = require( 'gulp-rename' )
- , sourcemaps = require( 'gulp-sourcemaps' )
-;
-
-gulp.task( 'js-builder', function( cb ) {
-
- gulp.src( 'assets/js/builder/main.js' )
- // unminified
- .pipe( sourcemaps.init() )
- .pipe( requirejsOptimize( function( file ) {
- return {
- name: 'vendor/almond',
- optimize: 'none',
- wrap: {
- start: "(function($){",
- end: "}(jQuery));"
- },
- baseUrl: 'assets/js/builder/',
- include: [ 'main' ],
- preserveLicenseComments: false
- };
- } ).on( 'error', ( err ) => console.log( err ) ) )
- .pipe( rename( 'llms-builder.js' ) )
- .pipe( sourcemaps.write( '../maps/js', { destPath: 'assets/js' } ) )
- .pipe( gulp.dest( 'assets/js/' ) )
-
- // minified
- .pipe( sourcemaps.init() )
- .pipe( requirejsOptimize( function( file ) {
- return {
- name: 'vendor/almond',
- optimize: 'uglify2',
- wrap: {
- start: "(function($){",
- end: "}(jQuery));"
- },
- baseUrl: 'assets/js/builder/',
- include: [ 'main' ],
- preserveLicenseComments: false
- };
- } ).on( 'error', ( err ) => console.log( err ) ) )
- .pipe( rename( 'llms-builder.min.js' ) )
- .pipe( sourcemaps.write( '../maps/js', { destPath: 'assets/js' } ) )
- .pipe( gulp.dest( 'assets/js/' ) );
-
- cb();
-
-});
diff --git a/includes/class.llms.l10n.js.php b/includes/class.llms.l10n.js.php
new file mode 100644
index 0000000000..81af65ac10
--- /dev/null
+++ b/includes/class.llms.l10n.js.php
@@ -0,0 +1,523 @@
+ esc_html__( 'This is a %2$s %1$s String', 'lifterlms' ),
+
+ /**
+ * File: assets/js/app/llms-lesson-preview.js.
+ *
+ * @since 3.0.0
+ * @version 3.16.12
+ */
+ 'You do not have permission to access this content' => esc_html__( 'You do not have permission to access this content', 'lifterlms' ),
+
+ /**
+ * File: assets/js/app/llms-password-strength.js.
+ *
+ * @since 3.0.0
+ * @version 5.0.0
+ */
+ 'There is an issue with your chosen password.' => esc_html__( 'There is an issue with your chosen password.', 'lifterlms' ),
+ 'Too Short' => esc_html__( 'Too Short', 'lifterlms' ),
+ 'Very Weak' => esc_html__( 'Very Weak', 'lifterlms' ),
+ 'Weak' => esc_html__( 'Weak', 'lifterlms' ),
+ 'Medium' => esc_html__( 'Medium', 'lifterlms' ),
+ 'Strong' => esc_html__( 'Strong', 'lifterlms' ),
+ 'Mismatch' => esc_html__( 'Mismatch', 'lifterlms' ),
+
+ /**
+ * File: assets/js/app/llms-pricing-tables.js.
+ *
+ * @since Unknown.
+ * @version Unknown.
+ */
+ 'Members Only Pricing' => esc_html__( 'Members Only Pricing', 'lifterlms' ),
+
+ /**
+ * File: assets/js/app/llms-student-dashboard.js.
+ *
+ * @since 3.7.0
+ * @version 5.0.0
+ */
+ 'Are you sure you want to cancel your subscription?' => esc_html__( 'Are you sure you want to cancel your subscription?', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Models/Lesson.js.
+ *
+ * @since 3.13.0
+ * @version 4.20.0
+ */
+ 'New Lesson' => esc_html__( 'New Lesson', 'lifterlms' ),
+ 'lessons' => esc_html__( 'lessons', 'lifterlms' ),
+ 'lesson' => esc_html__( 'lesson', 'lifterlms' ),
+ 'Section %1$d: %2$s' => esc_html__( 'Section %1$d: %2$s', 'lifterlms' ),
+ 'Lesson %1$d: %2$s' => esc_html__( 'Lesson %1$d: %2$s', 'lifterlms' ),
+ '%1$s Quiz' => esc_html__( '%1$s Quiz', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Models/Question.js.
+ *
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+ 'questions' => esc_html__( 'questions', 'lifterlms' ),
+ 'question' => esc_html__( 'question', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Models/Quiz.js.
+ *
+ * @since 3.16.0
+ * @version 7.5.0
+ */
+ 'New Quiz' => esc_html__( 'New Quiz', 'lifterlms' ),
+ 'quizzes' => esc_html__( 'quizzes', 'lifterlms' ),
+ 'quiz' => esc_html__( 'quiz', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Models/Section.js.
+ *
+ * @since 3.16.0
+ * @version 4.20.0
+ */
+ 'New Section' => esc_html__( 'New Section', 'lifterlms' ),
+ 'sections' => esc_html__( 'sections', 'lifterlms' ),
+ 'section' => esc_html__( 'section', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Schemas/Lesson.js.
+ *
+ * @since 3.17.0
+ * @version 3.25.4
+ */
+ 'General Settings' => esc_html__( 'General Settings', 'lifterlms' ),
+ 'Video Embed URL' => esc_html__( 'Video Embed URL', 'lifterlms' ),
+ 'Audio Embed URL' => esc_html__( 'Audio Embed URL', 'lifterlms' ),
+ 'Free Lesson' => esc_html__( 'Free Lesson', 'lifterlms' ),
+ 'Free lessons can be accessed without enrollment.' => esc_html__( 'Free lessons can be accessed without enrollment.', 'lifterlms' ),
+ 'Require Passing Grade on Quiz' => esc_html__( 'Require Passing Grade on Quiz', 'lifterlms' ),
+ 'When enabled, students must pass this quiz before the lesson can be completed.' => esc_html__( 'When enabled, students must pass this quiz before the lesson can be completed.', 'lifterlms' ),
+ 'Require Passing Grade on Assignment' => esc_html__( 'Require Passing Grade on Assignment', 'lifterlms' ),
+ 'When enabled, students must pass this assignment before the lesson can be completed.' => esc_html__( 'When enabled, students must pass this assignment before the lesson can be completed.', 'lifterlms' ),
+ 'Lesson Weight' => esc_html__( 'Lesson Weight', 'lifterlms' ),
+ 'POINTS' => esc_html__( 'POINTS', 'lifterlms' ),
+ 'Determines the weight of the lesson when calculating the overall grade of the course.' => esc_html__( 'Determines the weight of the lesson when calculating the overall grade of the course.', 'lifterlms' ),
+ 'Prerequisite' => esc_html__( 'Prerequisite', 'lifterlms' ),
+ 'Course Drip Method' => esc_html__( 'Course Drip Method', 'lifterlms' ),
+ 'Drip settings are currently set at the course level, under the Restrictions settings tab. Disable to allow lesson level drip settings.' => esc_html__( 'Drip settings are currently set at the course level, under the Restrictions settings tab. Disable to allow lesson level drip settings.', 'lifterlms' ),
+ 'Edit Course' => esc_html__( 'Edit Course', 'lifterlms' ),
+ 'Drip settings can be set at the course level to release course content at a specified interval, in the Restrictions settings tab.' => esc_html__( 'Drip settings can be set at the course level to release course content at a specified interval, in the Restrictions settings tab.', 'lifterlms' ),
+ 'Drip Method' => esc_html__( 'Drip Method', 'lifterlms' ),
+ 'None' => esc_html__( 'None', 'lifterlms' ),
+ 'On a specific date' => esc_html__( 'On a specific date', 'lifterlms' ),
+ '# of days after course enrollment' => esc_html__( '# of days after course enrollment', 'lifterlms' ),
+ '# of days after course start date' => esc_html__( '# of days after course start date', 'lifterlms' ),
+ '# of days after prerequisite lesson completion' => esc_html__( '# of days after prerequisite lesson completion', 'lifterlms' ),
+ '# of days' => esc_html__( '# of days', 'lifterlms' ),
+ 'Date' => esc_html__( 'Date', 'lifterlms' ),
+ 'Time' => esc_html__( 'Time', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Schemas/Quiz.js.
+ *
+ * @since 3.17.6
+ * @version 7.6.2
+ */
+ 'General Settings' => esc_html__( 'General Settings', 'lifterlms' ),
+ 'Description' => esc_html__( 'Description', 'lifterlms' ),
+ 'Passing Percentage' => esc_html__( 'Passing Percentage', 'lifterlms' ),
+ 'Minimum percentage of total points required to pass the quiz' => esc_html__( 'Minimum percentage of total points required to pass the quiz', 'lifterlms' ),
+ 'Limit Attempts' => esc_html__( 'Limit Attempts', 'lifterlms' ),
+ 'Limit the maximum number of times a student can take this quiz' => esc_html__( 'Limit the maximum number of times a student can take this quiz', 'lifterlms' ),
+ 'Time Limit' => esc_html__( 'Time Limit', 'lifterlms' ),
+ 'Enforce a maximum number of minutes a student can spend on each attempt' => esc_html__( 'Enforce a maximum number of minutes a student can spend on each attempt', 'lifterlms' ),
+ 'Show Correct Answers' => esc_html__( 'Show Correct Answers', 'lifterlms' ),
+ 'When enabled, students will be shown the correct answer to any question they answered incorrectly.' => esc_html__( 'When enabled, students will be shown the correct answer to any question they answered incorrectly.', 'lifterlms' ),
+ 'Randomize Question Order' => esc_html__( 'Randomize Question Order', 'lifterlms' ),
+ 'Display questions in a random order for each attempt. Content questions are locked into their defined positions.' => esc_html__( 'Display questions in a random order for each attempt. Content questions are locked into their defined positions.', 'lifterlms' ),
+ 'Disable Retake' => esc_html__( 'Disable Retake', 'lifterlms' ),
+ 'Prevent quiz retake after student passed the quiz.' => esc_html__( 'Prevent quiz retake after student passed the quiz.', 'lifterlms' ),
+ 'Question Bank' => esc_html__( 'Question Bank', 'lifterlms' ),
+ 'A question bank helps prevent cheating and reinforces learning by allowing instructors to create assessments with randomized questions pulled from a bank of questions. (Available in Advanced Quizzes addon)' => esc_html__( 'A question bank helps prevent cheating and reinforces learning by allowing instructors to create assessments with randomized questions pulled from a bank of questions. (Available in Advanced Quizzes addon)', 'lifterlms' ),
+ 'Get LifterLMS Advanced Quizzes' => esc_html__( 'Get LifterLMS Advanced Quizzes', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/_Detachable.js.
+ *
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+ 'Are you sure you want to detach this %s?' => esc_html__( 'Are you sure you want to detach this %s?', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/_Editable.js.
+ *
+ * @since 3.16.0
+ * @version 3.37.11
+ */
+ 'Select an image' => esc_html__( 'Select an image', 'lifterlms' ),
+ 'Use this image' => esc_html__( 'Use this image', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/_Trashable.js.
+ *
+ * @since 3.16.12
+ * @version 3.16.12
+ */
+ 'Are you sure you want to move this %s to the trash?' => esc_html__( 'Are you sure you want to move this %s to the trash?', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/Assignment.js.
+ *
+ * @since 3.17.0
+ * @version 5.4.0
+ */
+ '%1$s Assignment' => esc_html__( '%1$s Assignment', 'lifterlms' ),
+ 'Add Existing Assignment' => esc_html__( 'Add Existing Assignment', 'lifterlms' ),
+ 'Search for existing assignments...' => esc_html__( 'Search for existing assignments...', 'lifterlms' ),
+ 'Get Your Students Taking Action' => esc_html__( 'Get Your Students Taking Action', 'lifterlms' ),
+ 'Get Assignments Now!' => esc_html__( 'Get Assignments Now!', 'lifterlms' ),
+ 'Unlock LifterLMS Assignments' => esc_html__( 'Unlock LifterLMS Assignments', 'lifterlms' ),
+ 'Close' => esc_html__( 'Close', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/Elements.js.
+ *
+ * @since 3.16.0
+ * @version 3.16.12
+ */
+ 'Add Existing Lesson' => esc_html__( 'Add Existing Lesson', 'lifterlms' ),
+ 'Search for existing lessons...' => esc_html__( 'Search for existing lessons...', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/PostSearch.js.
+ *
+ * @since 3.16.0
+ * @version 4.4.0
+ */
+ 'Searching...' => esc_html__( 'Searching...', 'lifterlms' ),
+ 'Attach' => esc_html__( 'Attach', 'lifterlms' ),
+ 'Clone' => esc_html__( 'Clone', 'lifterlms' ),
+ 'ID' => esc_html__( 'ID', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/Question.js.
+ *
+ * @since 3.16.0
+ * @version 3.27.0
+ */
+ 'Are you sure you want to delete this question?' => esc_html__( 'Are you sure you want to delete this question?', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/QuestionType.js.
+ *
+ * @since 3.16.0
+ * @version 5.4.0
+ */
+ 'Add Existing Question' => esc_html__( 'Add Existing Question', 'lifterlms' ),
+ 'Search for existing questions...' => esc_html__( 'Search for existing questions...', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/Quiz.js.
+ *
+ * @since 3.16.0
+ * @version 5.4.0
+ */
+ 'An error occurred while trying to load the questions. Please refresh the page and try again.' => esc_html__( 'An error occurred while trying to load the questions. Please refresh the page and try again.', 'lifterlms' ),
+ 'Add Existing Quiz' => esc_html__( 'Add Existing Quiz', 'lifterlms' ),
+ 'Search for existing quizzes...' => esc_html__( 'Search for existing quizzes...', 'lifterlms' ),
+ 'Add a Question' => esc_html__( 'Add a Question', 'lifterlms' ),
+
+ /**
+ * File: assets/js/builder/Views/SettingsFields.js.
+ *
+ * @since 3.17.0
+ * @version 4.7.0
+ */
+ 'Use SoundCloud or Spotify audio URLS.' => esc_html__( 'Use SoundCloud or Spotify audio URLS.', 'lifterlms' ),
+ 'Permalink' => esc_html__( 'Permalink', 'lifterlms' ),
+ 'Use YouTube, Vimeo, or Wistia video URLS.' => esc_html__( 'Use YouTube, Vimeo, or Wistia video URLS.', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-admin-settings.js.
+ *
+ * @since 3.7.3
+ * @version 3.18.0
+ */
+ 'Select an Image' => esc_html__( 'Select an Image', 'lifterlms' ),
+ 'Select Image' => esc_html__( 'Select Image', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-admin-tables.js.
+ *
+ * @since 3.2.0
+ * @version 3.28.1
+ */
+ 'An error was encountered generating the export' => esc_html__( 'An error was encountered generating the export', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-admin.js.
+ *
+ * @since Unknown
+ * @version 7.3.0
+ */
+ 'Select a Course/Membership' => esc_html__( 'Select a Course/Membership', 'lifterlms' ),
+ 'Select a student' => esc_html__( 'Select a student', 'lifterlms' ),
+ 'Error: %s' => esc_html__( 'Error: %s', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-analytics.js.
+ *
+ * @since 3.0.0
+ * @version 7.3.0
+ */
+ 'Filter by Student(s)' => esc_html__( 'Filter by Student(s)', 'lifterlms' ),
+ 'Error' => esc_html__( 'Error', 'lifterlms' ),
+ 'Request timed out' => esc_html__( 'Request timed out', 'lifterlms' ),
+ 'Retry' => esc_html__( 'Retry', 'lifterlms' ),
+ 'Date' => esc_html__( 'Date', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-builder.js.
+ *
+ * @since 3.16.0
+ * @version 3.16.0
+ */
+ 'questions' => esc_html__( 'questions', 'lifterlms' ),
+ 'question' => esc_html__( 'question', 'lifterlms' ),
+ 'General Settings' => esc_html__( 'General Settings', 'lifterlms' ),
+ 'Description' => esc_html__( 'Description', 'lifterlms' ),
+ 'Passing Percentage' => esc_html__( 'Passing Percentage', 'lifterlms' ),
+ 'Minimum percentage of total points required to pass the quiz' => esc_html__( 'Minimum percentage of total points required to pass the quiz', 'lifterlms' ),
+ 'Limit Attempts' => esc_html__( 'Limit Attempts', 'lifterlms' ),
+ 'Limit the maximum number of times a student can take this quiz' => esc_html__( 'Limit the maximum number of times a student can take this quiz', 'lifterlms' ),
+ 'Time Limit' => esc_html__( 'Time Limit', 'lifterlms' ),
+ 'Enforce a maximum number of minutes a student can spend on each attempt' => esc_html__( 'Enforce a maximum number of minutes a student can spend on each attempt', 'lifterlms' ),
+ 'Show Correct Answers' => esc_html__( 'Show Correct Answers', 'lifterlms' ),
+ 'When enabled, students will be shown the correct answer to any question they answered incorrectly.' => esc_html__( 'When enabled, students will be shown the correct answer to any question they answered incorrectly.', 'lifterlms' ),
+ 'Randomize Question Order' => esc_html__( 'Randomize Question Order', 'lifterlms' ),
+ 'Display questions in a random order for each attempt. Content questions are locked into their defined positions.' => esc_html__( 'Display questions in a random order for each attempt. Content questions are locked into their defined positions.', 'lifterlms' ),
+ 'Disable Retake' => esc_html__( 'Disable Retake', 'lifterlms' ),
+ 'Prevent quiz retake after student passed the quiz.' => esc_html__( 'Prevent quiz retake after student passed the quiz.', 'lifterlms' ),
+ 'Question Bank' => esc_html__( 'Question Bank', 'lifterlms' ),
+ 'A question bank helps prevent cheating and reinforces learning by allowing instructors to create assessments with randomized questions pulled from a bank of questions. (Available in Advanced Quizzes addon)' => esc_html__( 'A question bank helps prevent cheating and reinforces learning by allowing instructors to create assessments with randomized questions pulled from a bank of questions. (Available in Advanced Quizzes addon)', 'lifterlms' ),
+ 'Get LifterLMS Advanced Quizzes' => esc_html__( 'Get LifterLMS Advanced Quizzes', 'lifterlms' ),
+ 'New Quiz' => esc_html__( 'New Quiz', 'lifterlms' ),
+ 'quizzes' => esc_html__( 'quizzes', 'lifterlms' ),
+ 'quiz' => esc_html__( 'quiz', 'lifterlms' ),
+ 'Video Embed URL' => esc_html__( 'Video Embed URL', 'lifterlms' ),
+ 'Audio Embed URL' => esc_html__( 'Audio Embed URL', 'lifterlms' ),
+ 'Free Lesson' => esc_html__( 'Free Lesson', 'lifterlms' ),
+ 'Free lessons can be accessed without enrollment.' => esc_html__( 'Free lessons can be accessed without enrollment.', 'lifterlms' ),
+ 'Require Passing Grade on Quiz' => esc_html__( 'Require Passing Grade on Quiz', 'lifterlms' ),
+ 'When enabled, students must pass this quiz before the lesson can be completed.' => esc_html__( 'When enabled, students must pass this quiz before the lesson can be completed.', 'lifterlms' ),
+ 'Require Passing Grade on Assignment' => esc_html__( 'Require Passing Grade on Assignment', 'lifterlms' ),
+ 'When enabled, students must pass this assignment before the lesson can be completed.' => esc_html__( 'When enabled, students must pass this assignment before the lesson can be completed.', 'lifterlms' ),
+ 'Lesson Weight' => esc_html__( 'Lesson Weight', 'lifterlms' ),
+ 'POINTS' => esc_html__( 'POINTS', 'lifterlms' ),
+ 'Determines the weight of the lesson when calculating the overall grade of the course.' => esc_html__( 'Determines the weight of the lesson when calculating the overall grade of the course.', 'lifterlms' ),
+ 'Prerequisite' => esc_html__( 'Prerequisite', 'lifterlms' ),
+ 'Course Drip Method' => esc_html__( 'Course Drip Method', 'lifterlms' ),
+ 'Drip settings are currently set at the course level, under the Restrictions settings tab. Disable to allow lesson level drip settings.' => esc_html__( 'Drip settings are currently set at the course level, under the Restrictions settings tab. Disable to allow lesson level drip settings.', 'lifterlms' ),
+ 'Edit Course' => esc_html__( 'Edit Course', 'lifterlms' ),
+ 'Drip settings can be set at the course level to release course content at a specified interval, in the Restrictions settings tab.' => esc_html__( 'Drip settings can be set at the course level to release course content at a specified interval, in the Restrictions settings tab.', 'lifterlms' ),
+ 'Drip Method' => esc_html__( 'Drip Method', 'lifterlms' ),
+ 'None' => esc_html__( 'None', 'lifterlms' ),
+ 'On a specific date' => esc_html__( 'On a specific date', 'lifterlms' ),
+ '# of days after course enrollment' => esc_html__( '# of days after course enrollment', 'lifterlms' ),
+ '# of days after course start date' => esc_html__( '# of days after course start date', 'lifterlms' ),
+ '# of days after prerequisite lesson completion' => esc_html__( '# of days after prerequisite lesson completion', 'lifterlms' ),
+ '# of days' => esc_html__( '# of days', 'lifterlms' ),
+ 'Date' => esc_html__( 'Date', 'lifterlms' ),
+ 'Time' => esc_html__( 'Time', 'lifterlms' ),
+ 'New Lesson' => esc_html__( 'New Lesson', 'lifterlms' ),
+ 'lessons' => esc_html__( 'lessons', 'lifterlms' ),
+ 'lesson' => esc_html__( 'lesson', 'lifterlms' ),
+ 'Section %1$d: %2$s' => esc_html__( 'Section %1$d: %2$s', 'lifterlms' ),
+ 'Lesson %1$d: %2$s' => esc_html__( 'Lesson %1$d: %2$s', 'lifterlms' ),
+ '%1$s Quiz' => esc_html__( '%1$s Quiz', 'lifterlms' ),
+ 'New Section' => esc_html__( 'New Section', 'lifterlms' ),
+ 'sections' => esc_html__( 'sections', 'lifterlms' ),
+ 'section' => esc_html__( 'section', 'lifterlms' ),
+ 'Are you sure you want to detach this %s?' => esc_html__( 'Are you sure you want to detach this %s?', 'lifterlms' ),
+ 'Select an image' => esc_html__( 'Select an image', 'lifterlms' ),
+ 'Use this image' => esc_html__( 'Use this image', 'lifterlms' ),
+ 'Are you sure you want to move this %s to the trash?' => esc_html__( 'Are you sure you want to move this %s to the trash?', 'lifterlms' ),
+ 'Use SoundCloud or Spotify audio URLS.' => esc_html__( 'Use SoundCloud or Spotify audio URLS.', 'lifterlms' ),
+ 'Permalink' => esc_html__( 'Permalink', 'lifterlms' ),
+ 'Use YouTube, Vimeo, or Wistia video URLS.' => esc_html__( 'Use YouTube, Vimeo, or Wistia video URLS.', 'lifterlms' ),
+ 'Searching...' => esc_html__( 'Searching...', 'lifterlms' ),
+ 'Attach' => esc_html__( 'Attach', 'lifterlms' ),
+ 'Clone' => esc_html__( 'Clone', 'lifterlms' ),
+ 'ID' => esc_html__( 'ID', 'lifterlms' ),
+ 'Add Existing Question' => esc_html__( 'Add Existing Question', 'lifterlms' ),
+ 'Search for existing questions...' => esc_html__( 'Search for existing questions...', 'lifterlms' ),
+ 'Are you sure you want to delete this question?' => esc_html__( 'Are you sure you want to delete this question?', 'lifterlms' ),
+ 'An error occurred while trying to load the questions. Please refresh the page and try again.' => esc_html__( 'An error occurred while trying to load the questions. Please refresh the page and try again.', 'lifterlms' ),
+ 'Add Existing Quiz' => esc_html__( 'Add Existing Quiz', 'lifterlms' ),
+ 'Search for existing quizzes...' => esc_html__( 'Search for existing quizzes...', 'lifterlms' ),
+ 'Add a Question' => esc_html__( 'Add a Question', 'lifterlms' ),
+ '%1$s Assignment' => esc_html__( '%1$s Assignment', 'lifterlms' ),
+ 'Add Existing Assignment' => esc_html__( 'Add Existing Assignment', 'lifterlms' ),
+ 'Search for existing assignments...' => esc_html__( 'Search for existing assignments...', 'lifterlms' ),
+ 'Get Your Students Taking Action' => esc_html__( 'Get Your Students Taking Action', 'lifterlms' ),
+ 'Get Assignments Now!' => esc_html__( 'Get Assignments Now!', 'lifterlms' ),
+ 'Unlock LifterLMS Assignments' => esc_html__( 'Unlock LifterLMS Assignments', 'lifterlms' ),
+ 'Close' => esc_html__( 'Close', 'lifterlms' ),
+ 'Add Existing Lesson' => esc_html__( 'Add Existing Lesson', 'lifterlms' ),
+ 'Search for existing lessons...' => esc_html__( 'Search for existing lessons...', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-metabox-product.js.
+ *
+ * @since 3.0.0
+ * @version 7.3.0
+ */
+ 'There was an error loading the necessary resources. Please try again.' => esc_html__( 'There was an error loading the necessary resources. Please try again.', 'lifterlms' ),
+ 'After deleting this access plan, any students subscribed to this plan will still have access and will continue to make recurring payments according to the access plan\'s settings. If you wish to terminate their plans you must do so manually. This action cannot be reversed.' => esc_html__( 'After deleting this access plan, any students subscribed to this plan will still have access and will continue to make recurring payments according to the access plan\'s settings. If you wish to terminate their plans you must do so manually. This action cannot be reversed.', 'lifterlms' ),
+ 'An error was encountered during the save attempt. Please try again.' => esc_html__( 'An error was encountered during the save attempt. Please try again.', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-metabox-students.js.
+ *
+ * @since 3.0.0
+ * @version 3.33.0
+ */
+ 'Please select a student to enroll' => esc_html__( 'Please select a student to enroll', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-metaboxes.js.
+ *
+ * @since 3.0.0
+ * @version 7.1.1
+ */
+ 'Are you sure you want to delete this row? This cannot be undone.' => esc_html__( 'Are you sure you want to delete this row? This cannot be undone.', 'lifterlms' ),
+ 'Click okay to enroll all active members into the selected course. Enrollment will take place in the background and you may leave your site after confirmation. This action cannot be undone!' => esc_html__( 'Click okay to enroll all active members into the selected course. Enrollment will take place in the background and you may leave your site after confirmation. This action cannot be undone!', 'lifterlms' ),
+ '"%s" is already in the course list.' => esc_html__( '"%s" is already in the course list.', 'lifterlms' ),
+ 'Remove course' => esc_html__( 'Remove course', 'lifterlms' ),
+ 'Enroll All Members' => esc_html__( 'Enroll All Members', 'lifterlms' ),
+ 'Cancel' => esc_html__( 'Cancel', 'lifterlms' ),
+ 'Refund' => esc_html__( 'Refund', 'lifterlms' ),
+ 'Record a Manual Payment' => esc_html__( 'Record a Manual Payment', 'lifterlms' ),
+ 'Copy this code and paste it into the desired area' => esc_html__( 'Copy this code and paste it into the desired area', 'lifterlms' ),
+ 'View' => esc_html__( 'View', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-quiz-attempt-review.js.
+ *
+ * @since 3.16.0
+ * @version 5.3.0
+ */
+ 'Remarks to Student' => esc_html__( 'Remarks to Student', 'lifterlms' ),
+ 'points' => esc_html__( 'points', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms-quiz.js.
+ *
+ * @since 1.0.0
+ * @version 3.24.3
+ */
+ 'Are you sure you wish to quit this quiz attempt?' => esc_html__( 'Are you sure you wish to quit this quiz attempt?', 'lifterlms' ),
+ 'Grading Quiz...' => esc_html__( 'Grading Quiz...', 'lifterlms' ),
+ 'Loading Question...' => esc_html__( 'Loading Question...', 'lifterlms' ),
+ 'An unknown error occurred. Please try again.' => esc_html__( 'An unknown error occurred. Please try again.', 'lifterlms' ),
+ 'Loading Quiz...' => esc_html__( 'Loading Quiz...', 'lifterlms' ),
+ 'Time Remaining' => esc_html__( 'Time Remaining', 'lifterlms' ),
+ 'Next Question' => esc_html__( 'Next Question', 'lifterlms' ),
+ 'Complete Quiz' => esc_html__( 'Complete Quiz', 'lifterlms' ),
+ 'Previous Question' => esc_html__( 'Previous Question', 'lifterlms' ),
+ 'Loading...' => esc_html__( 'Loading...', 'lifterlms' ),
+ 'You must select an answer to continue.' => esc_html__( 'You must select an answer to continue.', 'lifterlms' ),
+
+ /**
+ * File: assets/js/llms.js.
+ *
+ * @since 1.0.0
+ * @version 5.3.3
+ */
+ 'This is a %2$s %1$s String' => esc_html__( 'This is a %2$s %1$s String', 'lifterlms' ),
+ 'You do not have permission to access this content' => esc_html__( 'You do not have permission to access this content', 'lifterlms' ),
+ 'There is an issue with your chosen password.' => esc_html__( 'There is an issue with your chosen password.', 'lifterlms' ),
+ 'Too Short' => esc_html__( 'Too Short', 'lifterlms' ),
+ 'Very Weak' => esc_html__( 'Very Weak', 'lifterlms' ),
+ 'Weak' => esc_html__( 'Weak', 'lifterlms' ),
+ 'Medium' => esc_html__( 'Medium', 'lifterlms' ),
+ 'Strong' => esc_html__( 'Strong', 'lifterlms' ),
+ 'Mismatch' => esc_html__( 'Mismatch', 'lifterlms' ),
+ 'Members Only Pricing' => esc_html__( 'Members Only Pricing', 'lifterlms' ),
+ 'Are you sure you want to cancel your subscription?' => esc_html__( 'Are you sure you want to cancel your subscription?', 'lifterlms' ),
+
+ /**
+ * File: assets/js/partials/_metabox-field-repeater.js.
+ *
+ * @since 3.11.0
+ * @version 5.3.2
+ */
+ 'Are you sure you want to delete this row? This cannot be undone.' => esc_html__( 'Are you sure you want to delete this row? This cannot be undone.', 'lifterlms' ),
+
+ /**
+ * File: assets/js/private/llms-metaboxes.js.
+ *
+ * @since 3.0.0
+ * @version 7.1.1
+ */
+ 'Click okay to enroll all active members into the selected course. Enrollment will take place in the background and you may leave your site after confirmation. This action cannot be undone!' => esc_html__( 'Click okay to enroll all active members into the selected course. Enrollment will take place in the background and you may leave your site after confirmation. This action cannot be undone!', 'lifterlms' ),
+ '"%s" is already in the course list.' => esc_html__( '"%s" is already in the course list.', 'lifterlms' ),
+ 'Remove course' => esc_html__( 'Remove course', 'lifterlms' ),
+ 'Enroll All Members' => esc_html__( 'Enroll All Members', 'lifterlms' ),
+ 'Cancel' => esc_html__( 'Cancel', 'lifterlms' ),
+ 'Refund' => esc_html__( 'Refund', 'lifterlms' ),
+ 'Record a Manual Payment' => esc_html__( 'Record a Manual Payment', 'lifterlms' ),
+ 'Copy this code and paste it into the desired area' => esc_html__( 'Copy this code and paste it into the desired area', 'lifterlms' ),
+ 'View' => esc_html__( 'View', 'lifterlms' ),
+
+ ) );
+ // phpcs:enable
+ }
+
+}
+
+return new LLMS_L10n_JS();
diff --git a/languages/README.md b/languages/README.md
deleted file mode 100644
index 4858d32b7a..0000000000
--- a/languages/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-LifterLMS Localization and Language Files
-=========================================
-
-This directory contains localization and language files for the LifterLMS plugin.
-
-## Translating LifterLMS
-
-LifterLMS is fully translatable. The main `.pot` file contained in this directory ([lifterlms.pot](lifterlms.pot)) contains all translatable strings available in the source code. This file is automatically generated on release.
-
-
-## Localization Information Files
-
-The `.php` files contained within this directory contain lists of localization information (such as country, address, and currency formatting data). These files are loaded by LifterLMS core functions to various areas of the LifterLMS plugin.
-
-The data contained within these files is compiled from regularly updated sources and converted into a format used by our internal API. These files are automatically generated during a release step.
-
-Information for these files is derived from the following projects and sources:
-
-+ [Countries States Cities Database](https://github.com/dr5hn/countries-states-cities-database)
-+ [Currency Formatter](https://github.com/smirzaei/currency-formatter)
-+ [addressfield.json](https://github.com/tableau-mkt/addressfield.json)
-+ [LocalePlanet](https://www.localeplanet.com/)
-
-If you locate any incorrect information in any of these files, please let us know by opening [a new issue](https://github.com/gocodebox/lifterlms/issues/new/choose).
diff --git a/languages/lifterlms.pot b/languages/lifterlms.pot
new file mode 100644
index 0000000000..901142706d
--- /dev/null
+++ b/languages/lifterlms.pot
@@ -0,0 +1,37410 @@
+# Copyright (C) 2014-2024 LifterLMS
+# This file is distributed under the GPLv3.
+msgid ""
+msgstr ""
+"Project-Id-Version: LifterLMS 7.7.8\n"
+"Report-Msgid-Bugs-To: https://lifterlms.com/my-account/my-tickets\n"
+"Last-Translator: Team LifterLMS \n"
+"Language-Team: Team LifterLMS \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"POT-Creation-Date: 2024-09-17T13:53:05+00:00\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"X-Generator: llms/dev 0.2.2\n"
+"X-Domain: lifterlms\n"
+
+#. Plugin Name of the plugin
+#. Author of the plugin
+#: lifterlms.php
+#: includes/class.llms.nav.menus.php:72
+#: includes/privacy/class-llms-privacy.php:33
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "LifterLMS"
+msgstr ""
+
+#. Plugin URI of the plugin
+#. Author URI of the plugin
+#: lifterlms.php
+msgid "https://lifterlms.com/"
+msgstr ""
+
+#. Description of the plugin
+#: lifterlms.php
+msgid "Complete e-learning platform to sell online courses, protect lessons, offer memberships, and quiz students. WP Learning Management System."
+msgstr ""
+
+#: class-lifterlms.php:563
+#: includes/admin/class-llms-admin-plugins.php:38
+#: includes/admin/class.llms.admin.menus.php:203
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.certificate.php:33
+#: includes/admin/views/builder/lesson.php:91
+#: includes/admin/views/settings.php:17
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Settings"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:373
+#: blocks/courses/index.js:3
+msgid "Any"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:375
+#: includes/abstracts/abstract.llms.admin.table.php:377
+msgid "Any %s"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:674
+msgid "Search"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:793
+#: includes/admin/post-types/class.llms.post.tables.php:73
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.courses.php:129
+msgid "Export"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:803
+msgctxt "pagination"
+msgid "%1$d of %2$d"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:807
+msgid "First"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:809
+#: templates/myaccount/my-orders.php:73
+#: templates/myaccount/view-order-transactions.php:52
+msgid "Back"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:812
+#: includes/shortcodes/class.llms.shortcodes.php:379
+#: templates/loop/pagination.php:40
+#: templates/myaccount/my-grades.php:56
+#: templates/myaccount/my-notifications.php:39
+#: templates/myaccount/my-orders.php:87
+#: templates/myaccount/view-order-transactions.php:55
+msgid "Next"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:814
+msgid "Last"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.admin.table.php:1133
+msgid "No results were found."
+msgstr ""
+
+#: includes/abstracts/abstract.llms.analytics.widget.php:352
+msgid "You are not authorized to access the requested widget"
+msgstr ""
+
+#. Translators: %s = method name.
+#: includes/abstracts/abstract.llms.database.query.php:395
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php:56
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php:71
+msgid "Method '%s' not implemented. Must be overridden in subclass."
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:308
+msgid "Customer ID"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:313
+msgid "Source ID"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:318
+msgid "Subscription ID"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:358
+msgctxt "Payment gateway title"
+msgid "Enable %s"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:359
+msgid "Checking this box will allow users to use this payment gateway."
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:361
+#: includes/abstracts/llms.abstract.integration.php:187
+#: includes/admin/settings/class.llms.settings.accounts.php:259
+msgid "Enable / Disable"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:367
+msgid "The title the user sees during checkout."
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:369
+#: includes/abstracts/llms.abstract.notification.view.php:416
+#: includes/admin/reporting/tables/llms.table.courses.php:305
+#: includes/admin/reporting/tables/llms.table.memberships.php:305
+#: includes/admin/reporting/tables/llms.table.quizzes.php:433
+#: includes/admin/views/builder/lesson-settings.php:14
+#: includes/admin/views/builder/quiz.php:36
+#: includes/notifications/views/class.llms.notification.view.enrollment.php:87
+#: includes/privacy/class-llms-privacy-exporters.php:117
+#: includes/privacy/class-llms-privacy-exporters.php:163
+#: includes/privacy/class-llms-privacy-exporters.php:298
+#: assets/js/llms-admin-certificate-editor.js:20
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Title"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:375
+msgid "The description the user sees during checkout."
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:377
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:220
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:224
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.coupons.php:46
+#: includes/admin/views/builder/question.php:68
+#: includes/class.llms.l10n.js.php:170
+#: includes/class.llms.l10n.js.php:332
+#: includes/privacy/class-llms-privacy-exporters.php:122
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:71
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-api-keys.php:149
+msgid "Description"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:385
+msgctxt "Payment gateway test mode title"
+msgid "Enable %s"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:396
+msgid "Enable debug logging"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:397
+msgid "When enabled, debugging information will be logged to \"%s\""
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:398
+msgid "Debug Log"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.payment.gateway.php:804
+msgid "The selected payment gateway \"%s\" does not support payment method switching."
+msgstr ""
+
+#: includes/abstracts/abstract.llms.post.model.php:366
+msgid "An unknown error occurred during post cloning. Please try again."
+msgstr ""
+
+#: includes/abstracts/abstract.llms.post.model.php:1321
+msgid "Empty data"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.post.model.php:1327
+msgid "Invalid data"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.post.model.php:1514
+msgid "Cannot insert/update the %s meta"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.update.php:286
+msgid "LifterLMS Database Upgrade %s Progress Report"
+msgstr ""
+
+#: includes/abstracts/abstract.llms.update.php:288
+msgid "This completion percentage is an estimate, please be patient and %1$sclick here%2$s for more information."
+msgstr ""
+
+#: includes/abstracts/llms-abstract-admin-wizard.php:246
+#: includes/admin/class.llms.admin.setup.wizard.php:47
+#: includes/admin/class.llms.admin.setup.wizard.php:52
+#: includes/admin/class.llms.admin.setup.wizard.php:57
+msgid "Save & Continue"
+msgstr ""
+
+#: includes/abstracts/llms-abstract-admin-wizard.php:275
+#: includes/admin/class.llms.admin.setup.wizard.php:48
+#: includes/admin/class.llms.admin.setup.wizard.php:53
+#: includes/admin/class.llms.admin.setup.wizard.php:58
+#: includes/admin/class.llms.admin.setup.wizard.php:68
+msgid "Skip this step"
+msgstr ""
+
+#: includes/abstracts/llms-abstract-admin-wizard.php:384
+#: includes/admin/class.llms.admin.setup.wizard.php:173
+#: includes/admin/class.llms.admin.setup.wizard.php:196
+msgid "There was an error saving your data, please try again."
+msgstr ""
+
+#: includes/abstracts/llms-abstract-controller-user-engagements.php:118
+#: includes/abstracts/llms-abstract-meta-box-user-engagement-sync.php:241
+#: includes/abstracts/llms-abstract-processor-user-engagement-sync.php:155
+msgid "Invalid text type."
+msgstr ""
+
+#: includes/abstracts/llms-abstract-controller-user-engagements.php:145
+msgid "Sorry, you have not provided any actions."
+msgstr ""
+
+#: includes/abstracts/llms-abstract-controller-user-engagements.php:150
+msgid "You're trying to perform an invalid action."
+msgstr ""
+
+#: includes/abstracts/llms-abstract-email-provider.php:248
+msgid "Security check failed."
+msgstr ""
+
+#: includes/abstracts/llms-abstract-email-provider.php:254
+msgid "You do not have permission to perform this action."
+msgstr ""
+
+#. Translators: %s = title of the email delivery plugin.
+#: includes/abstracts/llms-abstract-email-provider.php:327
+msgid "%s plugin not found. Please try again."
+msgstr ""
+
+#: includes/abstracts/llms-abstract-generator-posts.php:174
+msgid "The class \"%s\" does not exist."
+msgstr ""
+
+#. Translators: %s = post type name.
+#: includes/abstracts/llms-abstract-generator-posts.php:208
+msgid "Error creating the %s post object."
+msgstr ""
+
+#: includes/abstracts/llms-abstract-generator-posts.php:517
+msgid "Error creating new term \"%s\"."
+msgstr ""
+
+#: includes/abstracts/llms-abstract-meta-box-user-engagement-sync.php:294
+msgid "Sync"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.api.handler.php:120
+msgid "There was a problem connecting to the external API."
+msgstr ""
+
+#: includes/abstracts/llms.abstract.api.handler.php:126
+msgid "Empty Response."
+msgstr ""
+
+#: includes/abstracts/llms.abstract.exportable.admin.table.php:89
+msgid "Unable to generate export file, could not open file for writing."
+msgstr ""
+
+#: includes/abstracts/llms.abstract.exportable.admin.table.php:241
+msgctxt "Used in export filenames"
+msgid "export"
+msgstr ""
+
+#. Translators: %s = the name of the method.
+#. Translators: %s = method name.
+#: includes/abstracts/llms.abstract.exportable.admin.table.php:309
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php:88
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php:116
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php:134
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php:151
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php:176
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php:230
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php:261
+msgid "Method '%s' must be overridden."
+msgstr ""
+
+#: includes/abstracts/llms.abstract.integration.php:183
+msgid "Check to enable this integration."
+msgstr ""
+
+#: includes/abstracts/llms.abstract.integration.php:323
+msgctxt "Link text for integration plugin settings"
+msgid "Settings"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.controller.php:336
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:100
+#: includes/llms.functions.core.php:662
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Author"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.controller.php:339
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:53
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.award.engagement.submit.php:206
+#: includes/admin/reporting/tables/llms.table.quiz.attempts.php:280
+#: includes/class.llms.roles.php:363
+#: includes/class.llms.view.manager.php:259
+#: includes/functions/updates/llms-functions-updates-303.php:28
+#: assets/js/llms-admin-certificate-editor.js:22
+msgid "Student"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.controller.php:342
+msgid "Lesson Author"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.controller.php:345
+msgid "Course Author"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.controller.php:348
+msgid "Enter additional email addresses which will receive this notification. Separate multiple addresses with commas."
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.controller.php:349
+msgid "Additional Recipients"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.controller.php:602
+#: includes/notifications/controllers/class.llms.notification.controller.achievement.earned.php:133
+#: includes/notifications/controllers/class.llms.notification.controller.certificate.earned.php:133
+#: includes/notifications/controllers/class.llms.notification.controller.manual.payment.due.php:108
+msgid "Basic"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.controller.php:603
+#: includes/admin/reporting/tables/llms.table.course.students.php:427
+#: includes/admin/reporting/tables/llms.table.membership.students.php:405
+#: includes/admin/reporting/tables/llms.table.students.php:600
+#: includes/notifications/controllers/class.llms.notification.controller.manual.payment.due.php:109
+#: includes/notifications/controllers/class.llms.notification.controller.purchase.receipt.php:124
+#: includes/notifications/controllers/class.llms.notification.controller.student.welcome.php:110
+#: includes/notifications/controllers/class.llms.notification.controller.subscription.cancelled.php:140
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Email"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.php:346
+msgctxt "relative date display"
+msgid "About %s ago"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.php:406
+msgid "Subject"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.php:416
+msgid "Heading"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.php:428
+msgid "Body"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.php:438
+msgid "Icon"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.php:444
+msgid "When checked the icon will not be displayed when showing this notification."
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.php:446
+msgid "Disable Icon"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.php:585
+msgid "Divider Line"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:54
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.builder.php:193
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:147
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:99
+#: includes/admin/reporting/tables/llms.table.student.course.php:261
+#: includes/admin/views/builder/editor.php:24
+#: includes/class.llms.post-types.php:572
+#: includes/functions/llms.functions.templates.dashboard.php:775
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:75
+msgid "Quiz"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:55
+#: includes/admin/reporting/tables/llms.table.quizzes.php:443
+#: includes/admin/views/builder/editor.php:16
+#: includes/class.llms.post-types.php:533
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:76
+msgid "Lesson"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:56
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.product.php:129
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:96
+#: includes/admin/reporting/tables/llms.table.quizzes.php:438
+#: includes/class.llms.post-types.php:458
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:77
+#: templates/myaccount/my-grades.php:19
+#: blocks/pricing-table/index.js:5
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Course"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:57
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:93
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:402
+#: includes/admin/reporting/tables/llms.table.course.students.php:453
+#: includes/admin/reporting/tables/llms.table.quiz.attempts.php:286
+#: includes/admin/reporting/tables/llms.table.student.course.php:264
+#: includes/admin/reporting/tables/llms.table.student.courses.php:238
+#: includes/admin/reporting/tables/llms.table.students.php:634
+#: includes/functions/llms.functions.templates.dashboard.php:776
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:78
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:135
+#: includes/privacy/class-llms-privacy-exporters.php:228
+#: includes/privacy/class-llms-privacy-exporters.php:320
+#: templates/admin/reporting/tabs/quizzes/attempt.php:49
+#: templates/admin/reporting/tabs/students/courses-course.php:154
+#: templates/myaccount/my-grades-single.php:27
+#: templates/myaccount/my-grades.php:22
+msgid "Grade"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:58
+#: includes/admin/class.llms.admin.menus.php:209
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:390
+#: includes/admin/reporting/tables/llms.table.course.students.php:433
+#: includes/admin/reporting/tables/llms.table.membership.students.php:411
+#: includes/admin/reporting/tables/llms.table.student.courses.php:235
+#: includes/admin/reporting/tables/llms.table.student.memberships.php:134
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:79
+#: includes/privacy/class-llms-privacy-exporters.php:314
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:69
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-webhooks.php:137
+#: templates/admin/post-types/order-transactions.php:27
+#: templates/admin/reporting/tabs/quizzes/attempt.php:97
+#: templates/myaccount/view-order-information.php:23
+msgid "Status"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:65
+msgid "View the quiz attempt and leave remarks"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:66
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:86
+#: templates/emails/reset-password.php:21
+msgid "Trouble clicking? Copy and paste this URL into your browser:"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:91
+#: includes/notifications/views/class.llms.notification.view.lesson.complete.php:92
+#: includes/notifications/views/class.llms.notification.view.section.complete.php:90
+msgid "Course Progress Bar"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:92
+#: includes/notifications/views/class.llms.notification.view.course.complete.php:90
+#: includes/notifications/views/class.llms.notification.view.lesson.complete.php:93
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:134
+#: includes/notifications/views/class.llms.notification.view.section.complete.php:91
+msgid "Course Title"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:94
+msgid "Grade Bar"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:95
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:95
+#: includes/notifications/views/class.llms.notification.view.lesson.complete.php:94
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:136
+msgid "Lesson Title"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:96
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:137
+msgid "Quiz Title"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:97
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:138
+msgid "Review URL"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:98
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:139
+msgid "Quiz Status"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:99
+#: includes/notifications/views/class.llms.notification.view.achievement.earned.php:99
+#: includes/notifications/views/class.llms.notification.view.certificate.earned.php:123
+#: includes/notifications/views/class.llms.notification.view.course.complete.php:91
+#: includes/notifications/views/class.llms.notification.view.course.track.complete.php:91
+#: includes/notifications/views/class.llms.notification.view.enrollment.php:89
+#: includes/notifications/views/class.llms.notification.view.lesson.complete.php:95
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:140
+#: includes/notifications/views/class.llms.notification.view.section.complete.php:93
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:81
+msgid "Student Name"
+msgstr ""
+
+#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:168
+#: includes/notifications/views/class.llms.notification.view.achievement.earned.php:142
+#: includes/notifications/views/class.llms.notification.view.certificate.earned.php:205
+#: includes/notifications/views/class.llms.notification.view.course.complete.php:112
+#: includes/notifications/views/class.llms.notification.view.course.track.complete.php:113
+#: includes/notifications/views/class.llms.notification.view.enrollment.php:114
+#: includes/notifications/views/class.llms.notification.view.lesson.complete.php:130
+#: includes/notifications/views/class.llms.notification.view.section.complete.php:128
+msgid "you"
+msgstr ""
+
+#: includes/admin/class-llms-admin-export-download.php:49
+#: includes/admin/class-llms-admin-export-download.php:54
+#: includes/admin/class-llms-admin-export-download.php:59
+#: includes/admin/class-llms-admin-export-download.php:64
+#: includes/admin/class.llms.admin.notices.php:250
+msgid "Cheatin’ huh?"
+msgstr ""
+
+#: includes/admin/class-llms-admin-header.php:89
+msgid "LifterLMS Logo"
+msgstr ""
+
+#. Translators: %s = Current Version Number.
+#: includes/admin/class-llms-admin-header.php:92
+#: includes/admin/views/addons/addon-item.php:46
+msgid "Version: %s"
+msgstr ""
+
+#: includes/admin/class-llms-admin-header.php:107
+msgid "No License"
+msgstr ""
+
+#: includes/admin/class-llms-admin-header.php:110
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:282
+msgid "My License Keys"
+msgstr ""
+
+#: includes/admin/class-llms-admin-header.php:119
+msgid "Get Support"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:56
+msgid "LifterLMS Permalinks"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:63
+msgid "LifterLMS uses custom post types and taxonomies to organize your courses and memberships. You can customize the URLs for these items here."
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:70
+msgid "Note: The Courses Catalog is currently set to a static page."
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:72
+#: includes/admin/class-llms-admin-permalinks.php:84
+msgid "You can edit the page slug to change its location."
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:82
+msgid "Note: The Memberships Catalog is currently set to a static page."
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:96
+msgid "Course Post Type"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:107
+msgid "Course Archive base"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:119
+msgid "Memberships Archive base"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:130
+msgid "Lesson Post Type"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:140
+msgid "Quiz Post Type"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:150
+msgid "Certificate Template Post Type"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:160
+msgid "Earned Certificate Post Type"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:170
+msgid "Course Category base"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:180
+msgid "Course Tag base"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:190
+msgid "Course Track base"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:200
+msgid "Course Difficulty base"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:210
+msgid "Membership Category base"
+msgstr ""
+
+#: includes/admin/class-llms-admin-permalinks.php:220
+msgid "Membership Tag base"
+msgstr ""
+
+#: includes/admin/class-llms-admin-plugins.php:37
+#: includes/admin/class.llms.admin.builder.php:52
+#: includes/admin/class.llms.admin.menus.php:201
+#: includes/class.llms.install.php:287
+#: includes/class.llms.student.dashboard.php:154
+#: includes/functions/llms.functions.templates.certificates.php:82
+msgid "Dashboard"
+msgstr ""
+
+#: includes/admin/class-llms-admin-plugins.php:51
+msgid "Docs"
+msgstr ""
+
+#: includes/admin/class-llms-admin-plugins.php:51
+#: includes/admin/views/dashboard/quick-links.php:107
+msgid "Documentation"
+msgstr ""
+
+#: includes/admin/class-llms-admin-plugins.php:52
+#: includes/admin/class.llms.admin.system-report.php:59
+#: includes/admin/views/dashboard/quick-links.php:105
+msgid "Support"
+msgstr ""
+
+#: includes/admin/class-llms-admin-plugins.php:53
+msgid "Premium Plans"
+msgstr ""
+
+#. Translators: %1$s = Opening strong tag; %2$s = Closing strong tag; %3$s = The error message.
+#: includes/admin/class-llms-admin-profile.php:179
+msgid "%1$sError%2$s: %3$s"
+msgstr ""
+
+#: includes/admin/class-llms-admin-profile.php:260
+msgid "Address line 2"
+msgstr ""
+
+#. Translators: %1$s = LifterLMS plugin name; %2$s = WP.org review link; %3$s = WP.org review link.
+#: includes/admin/class-llms-admin-review.php:94
+msgid "Please rate %1$s ★★★★★ on WordPress.org to help us spread the word. Thank you from the LifterLMS team!"
+msgstr ""
+
+#: includes/admin/class-llms-admin-users-table.php:71
+msgid "Reports"
+msgstr ""
+
+#: includes/admin/class-llms-admin-users-table.php:84
+msgid "Last Login"
+msgstr ""
+
+#: includes/admin/class-llms-admin-users-table.php:85
+#: includes/admin/class.llms.admin.dashboard-widget.php:197
+#: includes/admin/reporting/class.llms.admin.reporting.php:328
+#: includes/admin/reporting/tables/llms.table.students.php:638
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:75
+msgid "Enrollments"
+msgstr ""
+
+#: includes/admin/class-llms-admin-users-table.php:119
+#: includes/admin/class.llms.admin.builder.php:61
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:170
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:69
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:72
+#: includes/admin/reporting/class.llms.admin.reporting.php:324
+#: includes/admin/reporting/tables/llms.table.courses.php:181
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:117
+#: includes/admin/settings/class.llms.settings.courses.php:32
+#: includes/class.llms.post-types.php:457
+#: templates/admin/analytics/analytics.php:97
+#: templates/admin/reporting/nav-filters.php:78
+#: templates/admin/reporting/tabs/courses/course.php:21
+#: blocks/courses/index.js:3
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Courses"
+msgstr ""
+
+#: includes/admin/class-llms-admin-users-table.php:120
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.access.php:75
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:83
+#: includes/admin/reporting/class.llms.admin.reporting.php:325
+#: includes/admin/reporting/tables/llms.table.memberships.php:189
+#: includes/admin/reporting/tables/llms.table.students.php:654
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:118
+#: includes/admin/settings/class.llms.settings.memberships.php:32
+#: includes/admin/views/access-plans/access-plan.php:281
+#: includes/class.llms.post-types.php:646
+#: templates/admin/analytics/analytics.php:109
+#: templates/admin/reporting/nav-filters.php:97
+#: templates/admin/reporting/tabs/memberships/membership.php:19
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Memberships"
+msgstr ""
+
+#: includes/admin/class-llms-admin-users-table.php:229
+msgid "Never"
+msgstr ""
+
+#: includes/admin/class-llms-mailhawk.php:62
+msgid "Your site is connected to MailHawk."
+msgstr ""
+
+#. Translators: %1$s = Opening anchor tag to WP MailHawk Settings; Opening anchor tag to MailHawk.io account page; %2$s = Closing anchor tag.
+#: includes/admin/class-llms-mailhawk.php:70
+msgid "%1$sView settings%3$s or %2$smanage your account%3$s."
+msgstr ""
+
+#. Translators: %1$s = Opening anchor tag; %2$s = Closing anchor tag.
+#: includes/admin/class-llms-mailhawk.php:78
+msgid "Email sending is currently disabled. %1$sVisit MailHawk Settings%2$s to enable sending."
+msgstr ""
+
+#: includes/admin/class-llms-mailhawk.php:88
+msgid "Connect MailHawk"
+msgstr ""
+
+#. Translators: %s = Anchor tag html linking to MailHawk.io.
+#: includes/admin/class-llms-mailhawk.php:102
+msgid "Never worry about sending email again. %s takes care of everything for you starting for a small monthly fee."
+msgstr ""
+
+#: includes/admin/class-llms-mailhawk.php:115
+msgid "MailHawk"
+msgstr ""
+
+#. Translators: %s = Anchor tag html linking to SendWP.com.
+#: includes/admin/class-llms-sendwp.php:66
+msgid "%s makes WordPress email delivery as simple as a few clicks so you can relax, knowing your important emails are being delivered on time."
+msgstr ""
+
+#: includes/admin/class-llms-sendwp.php:79
+msgid "SendWP"
+msgstr ""
+
+#: includes/admin/class-llms-sendwp.php:118
+msgid "Your site is connected to SendWP."
+msgstr ""
+
+#. Translators: %1$s = Opening anchor tag; %2$s = Closing anchor tag.
+#: includes/admin/class-llms-sendwp.php:124
+msgid "%1$sManage your account%2$s."
+msgstr ""
+
+#. Translators: %1$s = Opening anchor tag; %2$s = Closing anchor tag.
+#: includes/admin/class-llms-sendwp.php:131
+msgid "Email sending is currently disabled. %1$sVisit the SendWP Settings%2$s to enable sending.."
+msgstr ""
+
+#: includes/admin/class.llms.admin.addons.php:310
+#: includes/admin/class.llms.admin.addons.php:426
+msgid "There was an error retrieving add-ons. Please try again."
+msgstr ""
+
+#: includes/admin/class.llms.admin.addons.php:318
+msgid "LifterLMS Add-Ons, Courses, and Resources"
+msgstr ""
+
+#: includes/admin/class.llms.admin.addons.php:338
+#: includes/admin/views/builder/editor.php:29
+#: includes/class.llms.l10n.js.php:224
+#: includes/class.llms.l10n.js.php:409
+msgid "Close"
+msgstr ""
+
+#: includes/admin/class.llms.admin.addons.php:344
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:158
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:159
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:375
+#: templates/myaccount/my-grades.php:73
+msgid "Update"
+msgstr ""
+
+#: includes/admin/class.llms.admin.addons.php:349
+#: includes/models/model.llms.add-on.php:222
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:341
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:129
+msgid "Install"
+msgstr ""
+
+#: includes/admin/class.llms.admin.addons.php:354
+#: includes/admin/views/addons/addon-item.php:104
+#: includes/models/model.llms.add-on.php:220
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:127
+msgid "Activate"
+msgstr ""
+
+#: includes/admin/class.llms.admin.addons.php:359
+#: includes/admin/views/addons/addon-item.php:96
+#: includes/models/model.llms.add-on.php:221
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:128
+msgid "Deactivate"
+msgstr ""
+
+#: includes/admin/class.llms.admin.addons.php:362
+msgid "Apply"
+msgstr ""
+
+#: includes/admin/class.llms.admin.addons.php:454
+msgid "All"
+msgstr ""
+
+#: includes/admin/class.llms.admin.assets.php:102
+msgid "White"
+msgstr ""
+
+#: includes/admin/class.llms.admin.assets.php:107
+msgid "White Smoke"
+msgstr ""
+
+#: includes/admin/class.llms.admin.assets.php:112
+msgid "Ivory"
+msgstr ""
+
+#. Translators: %s = Theme name.
+#: includes/admin/class.llms.admin.builder.php:134
+msgid "%s Theme Settings"
+msgstr ""
+
+#. Translators: %1$s = Lesson title; %2$d = Lesson id.
+#: includes/admin/class.llms.admin.builder.php:244
+msgid "Lesson: %1$s (#%2$d)"
+msgstr ""
+
+#. Translators: %1$s = Course title; %2$d - Course id.
+#: includes/admin/class.llms.admin.builder.php:248
+msgid "Course: %1$s (#%2$d)"
+msgstr ""
+
+#: includes/admin/class.llms.admin.builder.php:445
+msgid "Success"
+msgstr ""
+
+#: includes/admin/class.llms.admin.builder.php:452
+msgid "Error: Invalid or missing course ID."
+msgstr ""
+
+#: includes/admin/class.llms.admin.builder.php:457
+msgid "Error: You do not have permission to edit this course."
+msgstr ""
+
+#: includes/admin/class.llms.admin.builder.php:548
+msgid "Invalid course ID"
+msgstr ""
+
+#: includes/admin/class.llms.admin.builder.php:555
+msgid "You cannot edit this course!"
+msgstr ""
+
+#: includes/admin/class.llms.admin.builder.php:564
+#: includes/class.llms.post-types.php:464
+msgid "New Course"
+msgstr ""
+
+#. Translators: %s = Item id.
+#: includes/admin/class.llms.admin.builder.php:687
+msgid "Unable to detach \"%s\". Invalid ID."
+msgstr ""
+
+#. Translators: %s = Item id.
+#: includes/admin/class.llms.admin.builder.php:765
+msgid "Unable to delete \"%s\". Invalid ID."
+msgstr ""
+
+#. Translators: %s = Question choice ID.
+#: includes/admin/class.llms.admin.builder.php:844
+msgid "Error deleting the question choice \"%s\""
+msgstr ""
+
+#. Translators: %s = Post type name.
+#: includes/admin/class.llms.admin.builder.php:881
+msgid "%s cannot be deleted via the Course Builder."
+msgstr ""
+
+#. Translators: %1$s = Post type singular name; %2$d = Post id.
+#: includes/admin/class.llms.admin.builder.php:905
+msgid "Error deleting the %1$s \"%2$d\"."
+msgstr ""
+
+#: includes/admin/class.llms.admin.builder.php:1032
+#: includes/class.llms.l10n.js.php:94
+#: includes/class.llms.l10n.js.php:376
+#: includes/class.llms.post-types.php:538
+#: includes/models/model.llms.lesson.php:455
+msgid "New Lesson"
+msgstr ""
+
+#. Translators: %s = Lesson post id.
+#: includes/admin/class.llms.admin.builder.php:1048
+msgid "Unable to update lesson \"%s\". Invalid lesson ID."
+msgstr ""
+
+#. Translators: %s = Question post id.
+#: includes/admin/class.llms.admin.builder.php:1160
+msgid "Unable to update question \"%s\". Invalid question ID."
+msgstr ""
+
+#. Translators: %s = Question choice ID.
+#: includes/admin/class.llms.admin.builder.php:1199
+msgid "Unable to update choice \"%s\". Invalid choice ID."
+msgstr ""
+
+#. Translators: %s = Quiz post id.
+#: includes/admin/class.llms.admin.builder.php:1272
+msgid "Unable to update quiz \"%s\". Invalid quiz ID."
+msgstr ""
+
+#. Translators: %s = Section post id.
+#: includes/admin/class.llms.admin.builder.php:1351
+msgid "Unable to update section \"%s\". Invalid section ID."
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:47
+#: includes/admin/class.llms.admin.dashboard.php:48
+msgid "Quick Links"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:62
+msgid "Activity this week:"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:65
+#: includes/admin/views/dashboard/quick-links.php:22
+msgid "Create a New Course"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:72
+msgid "LifterLMS News & Podcasts"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:83
+#: includes/admin/views/dashboard/quick-links.php:124
+msgid "Podcast"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:83
+#: includes/admin/views/dashboard/quick-links.php:123
+msgid "Blog"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:90
+#: includes/admin/class.llms.admin.dashboard-widget.php:97
+#: includes/admin/class.llms.admin.dashboard-widget.php:104
+msgid "Opens in a new tab"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:91
+msgid "View all blog posts"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:98
+msgid "View all podcasts"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:105
+msgid "Get support"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:199
+#: includes/admin/class.llms.admin.dashboard-widget.php:206
+#: includes/admin/class.llms.admin.dashboard-widget.php:213
+#: includes/admin/class.llms.admin.dashboard-widget.php:220
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:71
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:77
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:83
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:89
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:70
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:76
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:82
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:88
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:102
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:108
+msgid "loading..."
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:200
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:78
+msgid "Number of total enrollments during the selected period"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:204
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:69
+msgid "Registrations"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:207
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:72
+msgid "Number of total user registrations during the selected period"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:211
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:74
+#: includes/admin/reporting/widgets/class.llms.analytics.widget.sold.php:49
+msgid "Net Sales"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:214
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:77
+msgid "Total of all successful transactions during this period"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:218
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:87
+msgid "Lessons Completed"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard-widget.php:221
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:90
+msgid "Number of total lessons completed during the selected period"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard.php:58
+msgid "Most Popular Add-ons, Courses, and Resources"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard.php:68
+msgid "LifterLMS Blog"
+msgstr ""
+
+#: includes/admin/class.llms.admin.dashboard.php:78
+msgid "LifterLMS Podcast"
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:64
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.courses.php:78
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.memberships.php:79
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.quizzes.php:86
+msgid "Overview"
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:90
+msgid "Error: Missing course ID."
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:193
+msgid "Import Successful!"
+msgstr ""
+
+#. Translators: %s = comma-separated list of anchors to the imported courses.
+#: includes/admin/class.llms.admin.import.php:200
+msgid "Imported courses: %s"
+msgstr ""
+
+#. Translators: %s = comma-separated list of anchors to the imported users.
+#: includes/admin/class.llms.admin.import.php:204
+msgid "Imported users: %s"
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:322
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:326
+msgid "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form."
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:330
+msgid "The uploaded file was only partially uploaded."
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:334
+msgid "No file was uploaded."
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:338
+msgid "Missing a temporary folder."
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:342
+msgid "Failed to write file to disk."
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:346
+msgid "File upload stopped by extension."
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:350
+msgid "Unknown upload error."
+msgstr ""
+
+#: includes/admin/class.llms.admin.import.php:358
+msgid "Only valid JSON files can be imported."
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:177
+#: includes/admin/class.llms.admin.menus.php:214
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.builder.php:31
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Course Builder"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:201
+#: includes/admin/views/dashboard.php:19
+msgid "LifterLMS Dashboard"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:203
+msgid "LifterLMS Settings"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:205
+msgid "LifterLMS Reporting"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:205
+msgid "Reporting"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:207
+msgid "LifterLMS Import"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:207
+#: includes/admin/views/import.php:38
+msgid "Import"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:209
+msgid "LifterLMS Status"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:211
+#: includes/admin/views/resources.php:18
+msgid "LifterLMS Resources"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:211
+msgid "Resources"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:214
+msgid "LifterLMS Course Builder"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:238
+msgid "LifterLMS Add-ons, Courses, and Resources"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:238
+msgid "Add-ons & more"
+msgstr ""
+
+#: includes/admin/class.llms.admin.menus.php:361
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.courses.php:72
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.memberships.php:73
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.quizzes.php:80
+#: templates/admin/reporting/tabs/students/courses.php:49
+msgid "You do not have permission to access this content."
+msgstr ""
+
+#: includes/admin/class.llms.admin.notices.core.php:78
+msgid "No LifterLMS Payment Gateways are currently enabled. Students will only be able to enroll in courses or memberships with free access plans."
+msgstr ""
+
+#: includes/admin/class.llms.admin.notices.core.php:80
+msgid "For starters you can configure manual payments on the %1$sCheckout Settings tab%2$s. Be sure to check out all the available %3$sLifterLMS Payment Gateways%4$s and install one later so that you can start selling your courses and memberships."
+msgstr ""
+
+#. translators: 1. opening link tag; 2. closing link tag
+#: includes/admin/class.llms.admin.notices.core.php:124
+msgid "For the best protection for your media files, you should use this doc to add this %1$sNGINX redirect rule%2$s."
+msgstr ""
+
+#: includes/admin/class.llms.admin.notices.core.php:128
+msgid "If you have already reviewed these instructions you may dismiss this notice."
+msgstr ""
+
+#: includes/admin/class.llms.admin.notices.core.php:185
+msgid "The current theme, %1$s, does not declare support for LifterLMS Sidebars. Course and Lesson sidebars may not work as expected. Please see our %2$sintegration guide%3$s or check out our %4$sLaunchPad%5$s theme which is designed specifically for use with LifterLMS."
+msgstr ""
+
+#: includes/admin/class.llms.admin.notices.php:247
+#: includes/admin/class.llms.admin.page.status.php:78
+#: includes/admin/class.llms.admin.page.status.php:269
+#: includes/class-llms-staging.php:88
+#: includes/class.llms.install.php:690
+msgid "Action failed. Please refresh the page and retry."
+msgstr ""
+
+#: includes/admin/class.llms.admin.notices.php:321
+msgid "Dismiss"
+msgstr ""
+
+#: includes/admin/class.llms.admin.notices.php:335
+msgid "Remind me later"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:41
+msgid "If you opted into LifterLMS Tracking and no longer wish to participate, you may opt out here."
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:42
+#: includes/admin/class.llms.admin.page.status.php:43
+msgid "Reset Tracking Settings"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:47
+msgid "Clears the cached data displayed on various reporting screens. This does not affect actual student progress, it only clears cached progress data. This data will be regenerated the next time it is accessed."
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:48
+msgid "Student Progress Cache"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:49
+msgid "Clear cache"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:53
+msgid "If you want to run the LifterLMS Setup Wizard again or skipped it and want to return now, click below."
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:54
+msgid "Setup Wizard"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:55
+msgid "Return to Setup Wizard"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:202
+msgid "System Report"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:203
+#: includes/admin/class.llms.admin.page.status.php:368
+msgid "Tools & Utilities"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:204
+msgid "Logs"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:205
+msgid "Scheduled Actions"
+msgstr ""
+
+#: includes/admin/class.llms.admin.page.status.php:324
+msgid "There are currently no logs to view."
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:135
+msgid "View %s"
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:136
+msgid "Preview %s"
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:141
+#: includes/admin/class.llms.admin.post-types.php:144
+msgid "%s updated."
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:142
+msgid "Custom field updated."
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:143
+msgid "Custom field deleted."
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:147
+msgid "%1$s restored to revision from %2$s."
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:153
+msgid "%s published."
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:154
+msgid "%s saved."
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:155
+msgid "%s submitted."
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:157
+msgid "%1$s scheduled for: %2$s ."
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:159
+msgid "M j, Y @ G:i"
+msgstr ""
+
+#: includes/admin/class.llms.admin.post-types.php:161
+msgid "%1$s draft updated."
+msgstr ""
+
+#: includes/admin/class.llms.admin.resources.php:48
+msgid "Welcome to LifterLMS"
+msgstr ""
+
+#: includes/admin/class.llms.admin.resources.php:58
+msgid "Resource Links"
+msgstr ""
+
+#: includes/admin/class.llms.admin.resources.php:68
+msgid "Getting Started"
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:60
+#: includes/class.llms.review.php:170
+msgid "Review Title"
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:61
+msgid "Course Reviewed"
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:62
+msgid "Review Author"
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:63
+msgid "Review Date"
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:120
+msgid "Enable Reviews"
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:121
+msgid "Select to enable reviews."
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:130
+msgid "Display Reviews"
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:131
+msgid "Select to display reviews on the page."
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:141
+msgid "Number of Reviews"
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:142
+msgid "Number of reviews to display on the page."
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:151
+msgid "Prevent Multiple Reviews"
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:152
+msgid "Select to prevent a user from submitting more than one review."
+msgstr ""
+
+#: includes/admin/class.llms.admin.reviews.php:166
+#: includes/class.llms.post-types.php:1061
+msgid "Reviews"
+msgstr ""
+
+#: includes/admin/class.llms.admin.settings.php:91
+msgid "Whoa! something went wrong there!. Please refresh the page and retry."
+msgstr ""
+
+#: includes/admin/class.llms.admin.settings.php:98
+msgid "Your settings have been saved."
+msgstr ""
+
+#: includes/admin/class.llms.admin.settings.php:674
+#: includes/admin/views/import.php:21
+msgid "Upload"
+msgstr ""
+
+#: includes/admin/class.llms.admin.settings.php:717
+msgid "Select a page…"
+msgstr ""
+
+#: includes/admin/class.llms.admin.settings.php:745
+#: includes/class.llms.l10n.js.php:154
+#: includes/class.llms.l10n.js.php:368
+#: libraries/lifterlms-rest/includes/models/class-llms-rest-api-key.php:128
+msgid "None"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:43
+msgid "LifterLMS Setup Wizard"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:46
+msgid "Welcome!"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:51
+#: includes/admin/views/setup-wizard/step-pages.php:15
+msgid "Page Setup"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:56
+#: includes/admin/views/setup-wizard/step-payments.php:22
+msgid "Payments"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:61
+#: includes/class.llms.post-types.php:992
+msgid "Coupon"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:62
+msgid "Allow"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:63
+msgid "No thanks"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:66
+msgid "Finish!"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:67
+#: includes/admin/views/import.php:20
+msgid "Import Courses"
+msgstr ""
+
+#: includes/admin/class.llms.admin.setup.wizard.php:117
+msgid "Toggle to import course"
+msgstr ""
+
+#: includes/admin/class.llms.admin.system-report.php:63
+msgid "Copy for Support"
+msgstr ""
+
+#: includes/admin/class.llms.admin.system-report.php:64
+msgid "Get Help"
+msgstr ""
+
+#: includes/admin/class.llms.admin.user.custom.fields.php:179
+msgid "LifterLMS Profile (legacy fields)"
+msgstr ""
+
+#: includes/admin/class.llms.admin.user.custom.fields.php:206
+msgid "Course Builder Autosave"
+msgstr ""
+
+#: includes/admin/class.llms.admin.user.custom.fields.php:210
+msgid "Automatically save changes when using the course builder"
+msgstr ""
+
+#: includes/admin/class.llms.admin.user.custom.fields.php:252
+msgid "Parent Instructor(s)"
+msgstr ""
+
+#: includes/admin/class.llms.admin.user.custom.fields.php:379
+msgid "Required field \"%s\" is missing."
+msgstr ""
+
+#: includes/admin/class.llms.student.bulk.enroll.php:82
+#: includes/admin/reporting/tables/llms.table.students.php:380
+msgid "Choose Course/Membership"
+msgstr ""
+
+#: includes/admin/class.llms.student.bulk.enroll.php:86
+#: includes/functions/updates/llms-functions-updates-300.php:61
+#: includes/models/model.llms.access.plan.php:565
+msgid "Enroll"
+msgstr ""
+
+#: includes/admin/class.llms.student.bulk.enroll.php:112
+msgid "Please select a Course or Membership to enroll users into!"
+msgstr ""
+
+#: includes/admin/class.llms.student.bulk.enroll.php:124
+msgid "Please select users to enroll into %s ."
+msgstr ""
+
+#: includes/admin/class.llms.student.bulk.enroll.php:175
+msgid "No such users found. Cannot enroll into %s ."
+msgstr ""
+
+#: includes/admin/class.llms.student.bulk.enroll.php:230
+msgid "Failed to enroll %1$1s into %2$2s ."
+msgstr ""
+
+#: includes/admin/class.llms.student.bulk.enroll.php:230
+msgid "Successfully enrolled %1$1s into %2$2s ."
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:206
+msgid "More information"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:236
+msgid "Display default course content"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:237
+msgid "Show custom content"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:238
+msgid "Redirect to WordPress Page"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:239
+msgid "Redirect to custom URL"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:255
+msgid "Course/Membership"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:260
+msgid "(Default) Return to %s"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:261
+msgid "Redirect to a WordPress Page"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:262
+msgid "Redirect to a custom URL"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:295
+msgid "Website Title"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:296
+msgid "Website URL"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:297
+msgid "Student Email Address"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:298
+#: includes/functions/llms.functions.certificate.php:214
+msgid "Student Username"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:299
+#: includes/functions/llms.functions.certificate.php:210
+msgid "Student First Name"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:300
+#: includes/functions/llms.functions.certificate.php:211
+msgid "Student Last Name"
+msgstr ""
+
+#: includes/admin/llms.functions.admin.php:301
+#: includes/functions/llms.functions.certificate.php:208
+msgid "Current Date"
+msgstr ""
+
+#: includes/admin/post-types/class.llms.meta.boxes.php:165
+msgid "Export CSV"
+msgstr ""
+
+#: includes/admin/post-types/class.llms.meta.boxes.php:224
+msgid "Default image"
+msgstr ""
+
+#: includes/admin/post-types/class.llms.meta.boxes.php:229
+msgid "Using the global default."
+msgstr ""
+
+#: includes/admin/post-types/class.llms.meta.boxes.php:229
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.visibility.php:62
+#: includes/admin/reporting/tables/llms.table.achievements.php:58
+#: includes/admin/reporting/tables/llms.table.certificates.php:63
+#: includes/admin/views/builder/lesson.php:29
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:108
+#: includes/class.llms.post-types.php:462
+#: includes/class.llms.post-types.php:502
+#: includes/class.llms.post-types.php:536
+#: includes/class.llms.post-types.php:575
+#: includes/class.llms.post-types.php:614
+#: includes/class.llms.post-types.php:651
+#: includes/class.llms.post-types.php:692
+#: includes/class.llms.post-types.php:728
+#: includes/class.llms.post-types.php:767
+#: includes/class.llms.post-types.php:805
+#: includes/class.llms.post-types.php:844
+#: includes/class.llms.post-types.php:960
+#: includes/class.llms.post-types.php:995
+#: includes/class.llms.post-types.php:1030
+#: includes/class.llms.post-types.php:1066
+#: includes/class.llms.post-types.php:1100
+#: includes/class.llms.post-types.php:1156
+#: includes/forms/class-llms-form-post-type.php:235
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Edit"
+msgstr ""
+
+#: includes/admin/post-types/class.llms.meta.boxes.php:260
+msgctxt "added achievement and certificate template post title placeholder"
+msgid "for internal use only"
+msgstr ""
+
+#: includes/admin/post-types/class.llms.post.tables.php:61
+#: includes/class-llms-generator-courses.php:666
+#: includes/class.llms.l10n.js.php:243
+#: includes/class.llms.l10n.js.php:394
+msgid "Clone"
+msgstr ""
+
+#: includes/admin/post-types/class.llms.post.tables.php:107
+msgid "Missing post ID."
+msgstr ""
+
+#: includes/admin/post-types/class.llms.post.tables.php:114
+msgid "Invalid post ID."
+msgstr ""
+
+#: includes/admin/post-types/class.llms.post.tables.php:119
+msgid "Action cannot be executed on the current post."
+msgstr ""
+
+#: includes/admin/post-types/class.llms.post.tables.php:124
+#: includes/admin/post-types/class.llms.post.tables.php:138
+msgid "You are not authorized to perform this action on the current post."
+msgstr ""
+
+#. Translators: %s = the singular post type name.
+#: includes/admin/post-types/class.llms.post.tables.php:167
+msgid "Filter by %s"
+msgstr ""
+
+#. translators: %1$d: number of awarded achievements
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-achievement-sync.php:74
+msgid "This action will replace the current title, content, background etc. of %1$d awarded achievements with the ones from this achievement template.\\nAre you sure you want to proceed?"
+msgstr ""
+
+#. translators: %1$d: number of awarded achievements
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-achievement-sync.php:83
+msgid "This action will replace the current title, content, background etc. of %1$d awarded achievement with the ones from this achievement template.\\nAre you sure you want to proceed?"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-achievement-sync.php:90
+msgid "This action will replace the current title, content, background etc. of this awarded achievement with the ones from the achievement template.\\nAre you sure you want to proceed?"
+msgstr ""
+
+#. translators: %1$d: number of awarded achievements
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-achievement-sync.php:97
+msgid "Sync %1$d awarded achievements with this achievement template."
+msgstr ""
+
+#. translators: %1$d: number of awarded achievements
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-achievement-sync.php:103
+msgid "Sync %1$d awarded achievement with this achievement template."
+msgstr ""
+
+#. translators: %1$s: link to edit the achievement template, %2$s: closing anchor tag
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-achievement-sync.php:109
+msgid "Sync this awarded achievement with its %1$sachievement template%2$s."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-achievement-sync.php:114
+msgid "This achievement template has no awarded achievements to sync."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-achievement-sync.php:116
+msgid "Sync Awarded Achievement"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-achievement-sync.php:118
+msgid "Sync Awarded Achievements"
+msgstr ""
+
+#. translators: %1$d: number of awarded certificates
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-certificate-sync.php:74
+msgid "This action will replace the current title, content, background etc. of %1$d awarded certificates with the ones from this certificate template.\\nAre you sure you want to proceed?"
+msgstr ""
+
+#. translators: %1$d: number of awarded certificates
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-certificate-sync.php:83
+msgid "This action will replace the current title, content, background etc. of %1$d awarded certificate with the ones from this certificate template.\\nAre you sure you want to proceed?"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-certificate-sync.php:90
+msgid "This action will replace the current title, content, background etc. of this awarded certificate with the ones from the certificate template.\\nAre you sure you want to proceed?"
+msgstr ""
+
+#. translators: %1$d: number of awarded certificates
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-certificate-sync.php:97
+msgid "Sync %1$d awarded certificates with this certificate template."
+msgstr ""
+
+#. translators: %1$d: number of awarded certificates
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-certificate-sync.php:103
+msgid "Sync %1$d awarded certificate with this certificate template."
+msgstr ""
+
+#. translators: %1$s: link to edit the certificate template, %2$s: closing anchor tag
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-certificate-sync.php:109
+msgid "Sync this awarded certificate with its %1$scertificate template%2$s."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-certificate-sync.php:114
+msgid "This certificate template has no awarded certificates to sync."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-certificate-sync.php:116
+msgid "Sync Awarded certificate"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class-llms-meta-box-certificate-sync.php:118
+msgid "Sync Awarded certificates"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.access.php:32
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.access.php:58
+msgid "Membership Access"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.access.php:64
+msgctxt "apply membership restriction to post type"
+msgid "Restrict this %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.access.php:73
+msgid "Visitors must belong to one of these memberships to access this %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.achievement.php:33
+#: includes/admin/settings/class.llms.settings.engagements.php:98
+msgid "Achievement Settings"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.achievement.php:62
+#: includes/admin/reporting/tables/llms.table.achievements.php:238
+#: includes/notifications/views/class.llms.notification.view.achievement.earned.php:98
+msgid "Achievement Title"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.achievement.php:63
+msgid "The name of the achievement which will be shown to users"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.achievement.php:73
+#: includes/notifications/views/class.llms.notification.view.achievement.earned.php:95
+msgid "Achievement Content"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.achievement.php:74
+msgid "An optional short description of the achievement which will be shown to users"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.achievement.php:85
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.certificate.php:86
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:82
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:133
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:77
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:63
+#: includes/admin/settings/class.llms.settings.general.php:33
+msgid "General"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.award.engagement.submit.php:57
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:151
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:152
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Award"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.award.engagement.submit.php:154
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.award.engagement.submit.php:157
+msgid "Select a Student"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.certificate.php:65
+#: includes/admin/reporting/tables/llms.table.certificates.php:242
+#: includes/notifications/views/class.llms.notification.view.certificate.earned.php:121
+msgid "Certificate Title"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.certificate.php:73
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Next Sequential ID"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:32
+msgid "Coupon Settings"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:64
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:70
+#: includes/class.llms.ajax.handler.php:965
+#: includes/llms.functions.core.php:1076
+msgid "ID#"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:90
+msgid "Select a dollar or percentage discount."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:93
+msgid "Discount Type"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:98
+#: includes/models/model.llms.coupon.php:123
+msgid "Percentage Discount"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:102
+msgid "%s Discount"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:108
+msgid "Access Plan Types"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:109
+msgid "Select which type of access plans this coupon can be used with."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:115
+msgid "Any Access Plan"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:119
+msgid "Only One-time Payment Access Plans"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:123
+msgid "Only Recurring Access Plans"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:134
+msgid "Discount Amount"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:135
+msgid "The amount to be subtracted from the \"Price\" of an applicable access plan. Do not include symbols such as %1$s."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:144
+msgid "Enable Trial Pricing Discount"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:145
+msgid "When checked, the coupon can apply a discount to the \"Trial Price\" of an access plan."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:153
+msgid "Trial Discount Amount"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:154
+msgid "The amount to be subtracted from the \"Trial Price\" of an applicable access plan. Do not include symbols such as %1$s."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:166
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:181
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:168
+msgid "Restrictions"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:171
+msgid "Limit coupon to the following courses."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:184
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.product.php:129
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:86
+#: includes/class.llms.post-types.php:647
+#: blocks/pricing-table/index.js:5
+msgid "Membership"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:185
+msgid "Limit coupon to the following memberships."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:198
+msgid "Coupon Expiration Date"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:199
+msgid "Coupon will no longer be usable after this date. Leave blank for no expiration."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:208
+msgid "Usage Limit"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:209
+msgid "The amount of times this coupon can be used. Leave empty or enter 0 for unlimited uses."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:225
+msgid "Optional description for internal notes. This is never displayed to your students."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:259
+msgid "Coupon code already exists. Customers will use the most recently created coupon with this code."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:268
+msgid "A Trial Discount Amount was not supplied. Trial Pricing Discount has automatically been disabled. Please re-enable Trial Pricing Discount and enter a Trial Discount Amount, then save this coupon again."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.builder.php:112
+msgid "This lesson is not attached to a course."
+msgstr ""
+
+#. Translators: %s = Course title.
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.builder.php:126
+#: templates/admin/reporting/tabs/students/courses-course.php:48
+msgid "Course: %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.builder.php:136
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Launch Course Builder"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.builder.php:173
+#: includes/class.llms.l10n.js.php:97
+#: includes/class.llms.l10n.js.php:379
+#: templates/myaccount/my-grades-single-table.php:18
+msgid "Section %1$d: %2$s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.builder.php:187
+msgid "Edit lesson in builder"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:33
+msgid "Course Options"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:83
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:117
+msgid "Sales Page"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:88
+msgid "Customize the content displayed to visitors and students who are not enrolled in the course."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:93
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:127
+msgid "Sales Page Content"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:100
+msgid "This content will only be shown to visitors who are not enrolled in this course."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:102
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:136
+msgid "Sales Page Custom Content"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:110
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:144
+#: includes/admin/settings/class.llms.settings.accounts.php:75
+#: includes/admin/settings/class.llms.settings.accounts.php:277
+#: includes/admin/settings/class.llms.settings.accounts.php:307
+#: includes/admin/settings/class.llms.settings.courses.php:111
+#: includes/admin/settings/class.llms.settings.memberships.php:102
+#: includes/admin/views/access-plans/access-plan.php:463
+msgid "Select a page"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:115
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:149
+msgid "Select a Page"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:122
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:156
+msgid "Sales Page Redirect URL"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:137
+msgid "Course Length"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:138
+msgid "Enter a description of the estimated length. IE: 3 days"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:148
+msgid "Choose a course difficulty level. New difficulties can be added via %1$sCourses -> Difficulties%2$s."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:151
+msgid "Course Difficulty Category"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:158
+msgid "Featured Video"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:159
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:81
+msgid "Paste the url for a Wistia, Vimeo or Youtube video or a hosted video file. For a full list of supported providers see %s."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:164
+msgid "When enabled, the featured video will be displayed on the course tile in addition to the course page."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:167
+msgid "Display Featured Video on Course Tile"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:173
+msgid "Featured Audio"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:174
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:89
+msgid "Paste the url for a SoundCloud or Spotify song or a hosted audio file. For a full list of supported providers see %s."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:186
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:349
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:360
+msgid "You must enroll in this course to access course content."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:187
+msgid "This message will be displayed when non-enrolled visitors attempt to access course content directly without enrolling first"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:189
+msgid "Content Restricted Message"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:195
+msgid "Enable Enrollment Period"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:196
+msgid "Set registration start and end dates for this course"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:206
+msgid "Registration opens on this date."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:209
+msgid "Enrollment Start Date"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:216
+msgid "Registration closes on this date."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:219
+msgid "Enrollment End Date"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:226
+msgid "Enrollment in this course opens on [lifterlms_course_info id=\"%d\" key=\"enrollment_start_date\"]."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:227
+msgid "This message will be displayed to non-enrolled visitors before the Enrollment Start Date. You may use shortcodes like [lifterlms_course_info id=\"%d\" key=\"enrollment_start_date\"] in this message."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:229
+msgid "Enrollment Opens Message"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:237
+msgid "Enrollment in this course closed on [lifterlms_course_info id=\"%d\" key=\"enrollment_end_date\"]."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:238
+msgid "This message will be displayed to non-enrolled visitors once the Enrollment End Date has passed. You may use shortcodes like [lifterlms_course_info id=\"%d\" key=\"enrollment_end_date\"] in this message."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:240
+msgid "Enrollment Closed Message"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:247
+msgid "Enable Course Time Period"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:248
+msgid "Set start and end dates for this course. Content can only be viewed and completed within the selected range."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:260
+msgid "Course Start Date"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:269
+msgid "Course End Date"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:276
+#: includes/functions/updates/llms-functions-updates-300.php:434
+msgid "This course opens on [lifterlms_course_info id=\"%d\" key=\"start_date\"]."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:277
+msgid "This message will be displayed to non-enrolled visitors before the Course Start Date. You may use shortcodes like [lifterlms_course_info id=\"%d\" key=\"start_date\"] in this message."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:279
+msgid "Course Opens Message"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:287
+#: includes/functions/updates/llms-functions-updates-300.php:435
+msgid "This course closed on [lifterlms_course_info id=\"%d\" key=\"end_date\"]."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:288
+msgid "This message will be displayed to non-enrolled visitors once the Course End Date has passed. You may use shortcodes like [lifterlms_course_info id=\"%d\" key=\"end_date\"] in this message."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:290
+msgid "Course Closed Message"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:298
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:116
+msgid "Enable Prerequisite"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:299
+msgid "Enable to choose a prerequisite course or course track"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:311
+msgid "Select a course"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:314
+msgid "Select a prerequisite course. Students must have completed the selected course before they can view or complete content in this course."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:317
+msgid "Choose Prerequisite Course"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:324
+msgid "Select the prerequisite course track. Students must have completed the select track before they can view or complete content in this course."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:328
+msgid "Choose Prerequisite Course Track"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:333
+msgid "Enable Lesson Drip"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:334
+msgid "Set global drip restrictions so lesson content becomes available at an interval you define for the course."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:348
+#: includes/class.llms.l10n.js.php:153
+#: includes/class.llms.l10n.js.php:367
+msgid "Drip Method"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:352
+msgid "After course start or enrollment"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:361
+msgid "Number of lessons to make immediately available on course start"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:371
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:178
+msgid "Delay (in days) "
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:379
+msgid "Enable Course Capacity"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:380
+msgid "Limit the number of users that can enroll in this course."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:393
+msgid "Course Capacity"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:399
+#: includes/functions/updates/llms-functions-updates-300.php:448
+msgid "Enrollment has closed because the maximum number of allowed students has been reached."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:400
+msgid "This message will be displayed to non-enrolled visitors once the Course Capacity has been reached. "
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.options.php:402
+msgid "Capacity Reached Message"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:37
+#: includes/admin/settings/class.llms.settings.engagements.php:242
+msgid "Email Settings"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:60
+#: includes/functions/llms.functions.certificate.php:212
+msgid "Student Email"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:61
+msgid "Admin Email"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:70
+msgid "Email Subject"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:71
+msgid "This will be used for the subject line of your email."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:81
+msgid "Email Heading"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:82
+msgid "This is the heading for your email. It will display above the content."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:92
+msgid "Email To:"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:93
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:104
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:113
+msgid "Separate multiple address with a comma."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:103
+msgid "Email CC:"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.email.settings.php:112
+msgid "Email BCC:"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:31
+msgid "Engagement Options"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:57
+msgid "This engagement will be triggered when a student completes the selected action"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:61
+msgid "Triggering Event"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:74
+msgid "Select a Course"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:80
+msgid "Select a Lesson"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:88
+msgid "Select an Access Plan"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:97
+msgid "Select a Membership"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:107
+msgid "Select a Quiz"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:113
+msgid "Select a Section"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:167
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:170
+msgid "Select a Course Track"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:179
+msgid "Determines the type of engagement"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:182
+msgid "Engagement Type"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:195
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:199
+msgid "Select an Engagement"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:207
+msgid "Enter the number of days to wait before triggering this engagement. Enter 0 or leave blank to trigger immediately."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:209
+msgid "Engagement Delay"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.engagement.php:216
+msgid "Engagement Settings"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:31
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:51
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.instructors.php:56
+#: includes/admin/reporting/tables/llms.table.courses.php:311
+#: includes/admin/reporting/tables/llms.table.memberships.php:311
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Instructors"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:55
+msgid "Add Instructor"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:59
+msgid "New Instructor"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:68
+msgid "Select an Instructor"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:75
+#: includes/class.llms.roles.php:361
+msgid "Instructor"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:83
+#: blocks/navigation-link/index.js:1
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Label"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:92
+#: includes/admin/views/access-plans/access-plan.php:107
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Visibility"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:94
+#: includes/functions/llms-functions-access-plans.php:271
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Visible"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.instructors.php:95
+#: includes/functions/llms-functions-access-plans.php:272
+#: includes/llms.functions.core.php:602
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Hidden"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:33
+msgid "Lesson Settings"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:57
+#: includes/class.llms.l10n.js.php:155
+#: includes/class.llms.l10n.js.php:369
+msgid "On a specific date"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:58
+msgid "After course enrollment"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:59
+msgid "After course start date"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:66
+msgid "After prerequisite completion"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:84
+msgid "Video Embed Url"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:93
+msgid "Audio Embed Url"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:97
+msgid "Checking this box will allow guests to view the content of this lesson without registering or signing up for the course."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:101
+#: includes/class.llms.l10n.js.php:139
+#: includes/class.llms.l10n.js.php:353
+msgid "Free Lesson"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:108
+msgid "Prerequisites"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:113
+msgid "Enable to choose a prerequisite Lesson"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:124
+msgid "Select a Prerequisite Lesson"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:127
+msgid "Select the prerequisite lesson"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:130
+msgid "Choose Prerequisite"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:137
+msgid "Drip Settings"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:152
+msgid "Checking this box will require students to get a passing score on the above quiz to complete the lesson."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:155
+msgid "Require Passing Grade"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:169
+#: templates/myaccount/view-order-transactions.php:23
+msgid "Method"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:188
+msgid "Date Available"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:195
+msgid "Optionally enter a time when the lesson should become available. If no time supplied, lesson will be available at 12:00 AM. Format must be HH:MM AM"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:197
+msgid "Time Available"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:219
+msgid "Drip settings are currently set at the course level, under the Restrictions settings tab. If you would like to set individual drip settings for each lesson, you must disable the course level drip settings first."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:221
+#: includes/class.llms.l10n.js.php:152
+#: includes/class.llms.l10n.js.php:366
+msgid "Drip settings can be set at the course level to release course content at a specified interval, in the Restrictions settings tab."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:223
+#: includes/class.llms.l10n.js.php:151
+#: includes/class.llms.l10n.js.php:365
+#: includes/class.llms.post-types.php:463
+msgid "Edit Course"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:36
+#: includes/admin/settings/class.llms.settings.memberships.php:61
+msgid "Membership Settings"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:59
+msgid "No automatic enrollment courses found. Add a course below."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:73
+#: includes/class.llms.l10n.js.php:440
+#: includes/class.llms.l10n.js.php:509
+msgid "Remove course"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:74
+#: includes/class.llms.l10n.js.php:441
+#: includes/class.llms.l10n.js.php:510
+msgid "Enroll All Members"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:122
+msgid "Customize the content displayed to visitors and students who are not enrolled in the membership."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:134
+msgid "This content will only be shown to visitors who are not enrolled in this membership."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:173
+msgid "When a non-member attempts to access content restricted to this membership"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:177
+msgid "Restricted Access Redirect"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:181
+msgid "Stay on page"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:185
+msgid "Redirect to this membership page"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:189
+msgid "Redirect to a WordPress page"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:193
+msgid "Redirect to a Custom URL"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:205
+msgid "Select a WordPress Page"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:214
+msgid "Enter a Custom URL"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:222
+msgid "Check this box to output a message after redirecting. If no redirect is selected this message will replace the normal content that would be displayed."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:225
+msgid "Display a Message"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:231
+msgid "Shortcodes like %s can be used in this message"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:232
+msgid "You must belong to the %s membership to access this content."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:234
+msgid "Restricted Content Notice"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:242
+msgid "Auto Enrollment"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:245
+msgid "Automatic Enrollment"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:246
+msgid "When a student joins this membership they will be automatically enrolled in these courses. Click %1$shere%2$s for more information."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:248
+msgid "Course Name"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:255
+msgid "Select course(s)"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:260
+msgid "Add Course(s)"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.details.php:30
+msgid "Order Details"
+msgstr ""
+
+#. Translators: %1$d is the original billing length; %2$s is the billing period (adjusted for pluralization against the original billing length); %3$d is the new billing length; %4$s is the billing period (adjusted for pluralization against the new billing length).
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.details.php:164
+msgid "The billing length of the order has been modified from %1$d %2$s to %3$d %4$s."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:34
+msgid "Student Enrollment"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:68
+msgid "Cannot manage enrollment status for anonymized orders."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:81
+msgid "The student who placed the order doesn't exist anymore."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:88
+msgid "Select"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:97
+msgctxt "enrollment status"
+msgid "Status: %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:101
+msgctxt "enrollment trigger"
+msgid "Enrolled: %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:104
+msgctxt "enrollment trigger"
+msgid "Updated: %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:107
+msgctxt "enrollment trigger"
+msgid "Trigger: %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:112
+msgid "Update Status"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:114
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:120
+msgid "Delete Enrollment"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:163
+msgid "Student enrollment records have been deleted."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:198
+msgid "Student enrollment status changed to %s."
+msgstr ""
+
+#. Translators: %1$s = old enrollment status; %2$s = new enrollment status.
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.enrollment.php:203
+msgid "Student enrollment status changed from %1$s to %2$s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.notes.php:31
+msgid "Order Notes"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.notes.php:82
+msgctxt "order note author"
+msgid "by %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.notes.php:83
+msgctxt "order note date"
+msgid "on %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.notes.php:99
+#: templates/admin/post-types/order-transactions.php:102
+msgid "%s Newer"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.notes.php:103
+#: templates/admin/post-types/order-transactions.php:106
+msgid "Older %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.notes.php:107
+msgid "No order notes found."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.submit.php:32
+msgid "Order Information"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.submit.php:84
+msgid "The status of a Legacy order cannot be changed."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.transactions.php:31
+#: includes/class.llms.post-types.php:763
+#: includes/privacy/class-llms-privacy-exporters.php:275
+msgid "Transactions"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.transactions.php:161
+msgid "Refund Error: Missing a transaction ID"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.transactions.php:163
+msgid "Refund Error: Missing or invalid refund amount"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.transactions.php:175
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.transactions.php:219
+msgctxt "admin error message"
+msgid "Refund Error: %s"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.order.transactions.php:198
+msgid "Refund Error: Missing or invalid payment amount"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.product.php:33
+#: includes/class.llms.post-types.php:1096
+msgid "Access Plans"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.students.php:40
+msgid "Student Management"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.students.php:72
+msgid "You must publish this post before you can manage students."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.visibility.php:60
+msgid "Catalog visibility:"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.visibility.php:66
+msgid "Choose the visibility of the %s in your catalog. It will always be available directly."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.visibility.php:72
+msgid "OK"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.visibility.php:73
+#: includes/class.llms.l10n.js.php:442
+#: includes/class.llms.l10n.js.php:511
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Cancel"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.export.php:40
+msgid "You need to publish this post before you can generate a CSV."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.export.php:48
+msgid "Vouchers only"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.export.php:49
+msgid "Generates a CSV of voucher codes, uses, and remaining uses."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.export.php:54
+msgid "Redeemed codes"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.export.php:55
+msgid "Generated a CSV of student emails, redemption date, and used code."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.export.php:61
+msgid "Email CSV"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.export.php:63
+msgid "Send to multiple emails by separating emails addresses with commas."
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.export.php:66
+msgid "Generate Export"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:35
+msgid "Voucher Settings"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:95
+msgid "Codes"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:103
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:107
+msgid "Redemptions"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:145
+#: includes/admin/post-types/meta-boxes/class.llms.meta.box.voucher.php:163
+#: includes/admin/reporting/tables/llms.table.achievements.php:65
+#: includes/admin/reporting/tables/llms.table.certificates.php:75
+#: includes/admin/reporting/tables/llms.table.quizzes.php:123
+#: includes/admin/views/status/view-log.php:49
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:125
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-webhooks.php:51
+msgid "Delete"
+msgstr ""
+
+#: includes/admin/post-types/meta-boxes/fields/llms.class.meta.box.repeater.php:36
+#: includes/admin/views/access-plans/metabox.php:31
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:308
+msgid "Add New"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-awards.php:73
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:82
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-api-keys.php:151
+#: blocks/my-achievements/index.js:1
+msgid "User"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-awards.php:74
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Template"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-awards.php:115
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-awards.php:320
+msgid "Delete Permanently"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-awards.php:137
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:36
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:52
+msgid "Awarded"
+msgstr ""
+
+#. Translators: %s: Post title.
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-awards.php:319
+msgid "Move “%s” to the Trash"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-certificates.php:77
+msgid "Migrate legacy certificate"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-certificates.php:99
+msgid "Legacy"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-forms.php:52
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Location"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-forms.php:116
+msgid "View \"%s\""
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class-llms-admin-post-table-forms.php:117
+#: includes/admin/reporting/tables/llms.table.certificates.php:58
+#: includes/admin/views/builder/lesson.php:36
+#: includes/class.llms.l10n.js.php:446
+#: includes/class.llms.l10n.js.php:515
+#: templates/myaccount/my-orders.php:53
+msgid "View"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.coupons.php:44
+#: includes/class.llms.question.types.php:257
+msgid "Code"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.coupons.php:45
+msgid "Coupon Amount"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.coupons.php:47
+msgid "Usage / Limit"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.coupons.php:48
+#: templates/myaccount/view-order-information.php:172
+msgid "Expiration Date"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.coupons.php:70
+msgid "Discount: "
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.coupons.php:75
+msgid "Trial Discount: "
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.courses.php:63
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:71
+msgid "Builder"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.courses.php:104
+msgid "courses export"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.courses.php:146
+#: includes/class.llms.post-types.php:532
+msgid "Lessons"
+msgstr ""
+
+#. Translators: %d = Number of lessons in the specified course.
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.courses.php:191
+msgid "%d Lesson"
+msgid_plural "%d Lessons"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.engagements.php:47
+msgid "Trigger"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.engagements.php:48
+#: templates/admin/post-types/order-transactions.php:31
+#: blocks/access-plan-button/index.js:1
+msgid "Type"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.engagements.php:49
+msgid "Delay"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.engagements.php:119
+msgid "%d days"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.instructors.php:129
+msgctxt "posts"
+msgid "Mine (%s) "
+msgid_plural "Mine (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:97
+#: includes/class.llms.post-types.php:499
+msgid "Section"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:98
+#: includes/class.llms.l10n.js.php:148
+#: includes/class.llms.l10n.js.php:362
+msgid "Prerequisite"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:101
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:57
+#: includes/class.llms.l10n.js.php:160
+#: includes/class.llms.l10n.js.php:321
+#: includes/class.llms.l10n.js.php:374
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:41
+#: templates/admin/post-types/order-transactions.php:28
+#: templates/myaccount/my-orders.php:24
+#: templates/myaccount/my-orders.php:37
+#: templates/myaccount/view-order-transactions.php:21
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Date"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:203
+#: includes/class.llms.post-types.php:576
+msgid "Edit Quiz"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:207
+#: includes/class.llms.post-types.php:573
+msgid "Add Quiz"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:51
+#: includes/class.llms.post-types.php:725
+#: templates/myaccount/my-orders.php:23
+#: templates/myaccount/my-orders.php:33
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Order"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:52
+msgid "Payment Status"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:53
+msgid "Access Status"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:54
+#: includes/privacy/class-llms-privacy.php:99
+#: templates/myaccount/view-order-information.php:33
+msgid "Product"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:55
+msgid "Revenue"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:56
+msgid "Order Type"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:84
+msgctxt "order number display"
+msgid "#%d"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:87
+msgid "by"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:114
+msgctxt "access plan expiration"
+msgid "Expired:"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:116
+msgctxt "access plan expiration"
+msgid "Expires:"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:133
+#: includes/admin/views/metaboxes/view-order-details.php:78
+#: templates/myaccount/view-order-information.php:38
+msgid "[DELETED]"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:153
+#: includes/models/model.llms.transaction.php:572
+msgid "Recurring"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:155
+#: includes/admin/views/metaboxes/view-order-details.php:168
+#: templates/myaccount/view-order-information.php:120
+msgid "One-time"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.pages.php:35
+msgid "LifterLMS Checkout"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.pages.php:36
+msgid "LifterLMS Course Catalog"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.pages.php:37
+msgid "LifterLMS Memberships Catalog"
+msgstr ""
+
+#: includes/admin/post-types/post-tables/class.llms.admin.post.table.pages.php:38
+msgid "LifterLMS Student Dashboard"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:109
+msgid "Visit the triggering order to manage this student's enrollment"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:112
+msgid "Cancel Enrollment"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:117
+msgid "Reactivate Enrollment"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:185
+#: templates/myaccount/view-order.php:35
+msgid "Order #%d"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:189
+#: includes/models/model.llms.quiz.attempt.php:600
+#: includes/models/model.llms.user.postmeta.php:115
+msgid "[Deleted]"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:190
+msgid "Admin: %1$s (#%2$d)"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:250
+#: includes/admin/reporting/tables/llms.table.course.students.php:266
+#: includes/admin/reporting/tables/llms.table.membership.students.php:254
+#: includes/admin/reporting/tables/llms.table.students.php:353
+msgid "Search students by name or email..."
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:264
+msgid "Manage Existing Enrollments"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:381
+#: includes/admin/reporting/tables/llms.table.achievements.php:236
+#: includes/admin/reporting/tables/llms.table.certificates.php:240
+#: includes/admin/reporting/tables/llms.table.course.students.php:408
+#: includes/admin/reporting/tables/llms.table.courses.php:300
+#: includes/admin/reporting/tables/llms.table.membership.students.php:386
+#: includes/admin/reporting/tables/llms.table.memberships.php:300
+#: includes/admin/reporting/tables/llms.table.quiz.attempts.php:270
+#: includes/admin/reporting/tables/llms.table.quizzes.php:428
+#: includes/admin/reporting/tables/llms.table.student.course.php:255
+#: includes/admin/reporting/tables/llms.table.student.courses.php:228
+#: includes/admin/reporting/tables/llms.table.student.memberships.php:128
+#: includes/admin/reporting/tables/llms.table.students.php:595
+#: includes/class.llms.l10n.js.php:244
+#: includes/class.llms.l10n.js.php:395
+#: templates/admin/post-types/order-transactions.php:26
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "ID"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:385
+#: includes/admin/reporting/tables/llms.table.course.students.php:412
+#: includes/admin/reporting/tables/llms.table.membership.students.php:390
+#: includes/admin/reporting/tables/llms.table.student.course.php:258
+#: includes/admin/reporting/tables/llms.table.student.courses.php:231
+#: includes/admin/reporting/tables/llms.table.student.memberships.php:131
+#: includes/admin/reporting/tables/llms.table.students.php:604
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:55
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:60
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-webhooks.php:136
+#: assets/js/llms-admin-certificate-editor.js:1
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Name"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:394
+#: includes/admin/reporting/tables/llms.table.course.students.php:438
+#: includes/admin/reporting/tables/llms.table.membership.students.php:416
+msgid "Enrollment Updated"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:398
+#: includes/admin/reporting/tables/llms.table.course.students.php:448
+#: includes/admin/reporting/tables/llms.table.student.courses.php:241
+#: includes/admin/reporting/tables/llms.table.students.php:629
+#: includes/privacy/class-llms-privacy-exporters.php:219
+#: templates/admin/reporting/tabs/students/courses-course.php:142
+#: templates/myaccount/my-grades-single.php:22
+#: templates/myaccount/my-grades.php:21
+msgid "Progress"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:406
+#: includes/admin/reporting/tables/llms.table.course.students.php:457
+msgid "Last Lesson"
+msgstr ""
+
+#: includes/admin/post-types/tables/class.llms.table.student.management.php:410
+msgid "Enrollment Trigger"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:261
+msgid "Today"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:262
+msgid "Yesterday"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:263
+msgid "This Week"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:264
+msgid "Last Week"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:265
+#: templates/admin/analytics/analytics.php:48
+#: templates/admin/reporting/nav-filters.php:29
+msgid "This Month"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:266
+#: templates/admin/analytics/analytics.php:44
+#: templates/admin/reporting/nav-filters.php:25
+msgid "Last Month"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:267
+#: templates/admin/analytics/analytics.php:40
+#: templates/admin/reporting/nav-filters.php:21
+msgid "This Year"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:268
+msgid "Last Year"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:269
+msgid "All Time"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:323
+#: includes/admin/reporting/tables/llms.table.course.students.php:281
+#: includes/admin/reporting/tables/llms.table.courses.php:315
+#: includes/admin/reporting/tables/llms.table.membership.students.php:268
+#: includes/admin/reporting/tables/llms.table.memberships.php:315
+#: includes/admin/reporting/tables/llms.table.students.php:732
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.courses.php:79
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.memberships.php:80
+#: templates/admin/analytics/analytics.php:78
+#: templates/admin/reporting/nav-filters.php:61
+#: templates/admin/reporting/tabs/students/student.php:20
+msgid "Students"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:326
+#: includes/admin/reporting/tables/llms.table.quizzes.php:303
+#: includes/class.llms.post-types.php:571
+#: templates/admin/reporting/tabs/quizzes/quiz.php:20
+msgid "Quizzes"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:327
+#: includes/admin/views/dashboard/quick-links.php:97
+msgid "Sales"
+msgstr ""
+
+#: includes/admin/reporting/class.llms.admin.reporting.php:415
+msgid "You don't have permission to do that"
+msgstr ""
+
+#. Translators: %s = The value of the data from the previous data set.
+#: includes/admin/reporting/class.llms.admin.reporting.php:515
+msgid "Previously %s"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.achievements.php:75
+msgid "Are you sure you want to delete this achievement? This action cannot be undone!"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.achievements.php:119
+#: includes/admin/reporting/tables/llms.table.certificates.php:130
+msgid "(scheduled)"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.achievements.php:237
+#: includes/admin/reporting/tables/llms.table.certificates.php:241
+msgid "Template ID"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.achievements.php:239
+#: includes/admin/views/builder/question.php:88
+#: includes/privacy/class-llms-privacy-exporters.php:132
+msgid "Image"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.achievements.php:240
+#: includes/admin/reporting/tables/llms.table.certificates.php:243
+#: includes/functions/llms.functions.certificate.php:209
+#: includes/privacy/class-llms-privacy-exporters.php:127
+#: includes/privacy/class-llms-privacy-exporters.php:168
+msgid "Earned Date"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.achievements.php:241
+#: includes/admin/reporting/tables/llms.table.certificates.php:244
+msgid "Related Post"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.achievements.php:254
+msgid "This student has not yet earned any achievements."
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.certificates.php:70
+#: templates/certificates/actions.php:33
+msgid "Download"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.certificates.php:85
+msgid "Are you sure you want to delete this certificate? This action cannot be undone!"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.certificates.php:257
+msgid "This student has not yet earned any certificates."
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.course.students.php:417
+#: includes/admin/reporting/tables/llms.table.membership.students.php:395
+#: includes/admin/reporting/tables/llms.table.students.php:609
+#: includes/schemas/llms-user-information-fields.php:76
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Last Name"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.course.students.php:422
+#: includes/admin/reporting/tables/llms.table.membership.students.php:400
+#: includes/admin/reporting/tables/llms.table.students.php:614
+#: includes/schemas/llms-user-information-fields.php:68
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "First Name"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.course.students.php:443
+#: includes/admin/reporting/tables/llms.table.student.course.php:267
+#: includes/admin/reporting/tables/llms.table.student.courses.php:248
+msgid "Completed"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.courses.php:275
+msgid "Search courses..."
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.courses.php:319
+msgid "Average Progress"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.courses.php:324
+#: includes/admin/reporting/tables/llms.table.quizzes.php:453
+msgid "Average Grade"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.memberships.php:275
+msgid "Search memberships..."
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quiz.attempts.php:194
+#: includes/privacy/class-llms-privacy-exporters.php:590
+msgid "Quiz Attempts"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quiz.attempts.php:275
+msgid "Attempt #"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quiz.attempts.php:291
+#: templates/admin/reporting/tabs/quizzes/attempt.php:108
+#: templates/myaccount/view-order-information.php:147
+msgid "Start Date"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quiz.attempts.php:296
+#: templates/admin/reporting/tabs/quizzes/attempt.php:119
+msgid "End Date"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quizzes.php:115
+msgid "Are you sure you want to delete this quiz and all associated student attempts?"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quizzes.php:115
+msgid "Are you sure you want to delete this quiz?"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quizzes.php:116
+msgid "This action cannot be undone!"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quizzes.php:400
+msgid "Search quizzes..."
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quizzes.php:448
+msgid "Total Attempts"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.quizzes.php:458
+#: includes/admin/reporting/tables/llms.table.student.course.php:271
+#: templates/admin/post-types/order-transactions.php:35
+msgid "Actions"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.student.course.php:84
+#: templates/course/complete-lesson-link.php:56
+msgid "Mark Incomplete"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.student.course.php:88
+#: templates/course/complete-lesson-link.php:91
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Mark Complete"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.student.course.php:205
+msgctxt "section title"
+msgid "Section: %s"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.student.courses.php:244
+msgid "Updated"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.student.courses.php:261
+msgid "This student is not enrolled in any courses."
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.student.memberships.php:137
+#: includes/llms.functions.core.php:761
+#: blocks/courses/index.js:3
+msgid "Enrolled"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.student.memberships.php:150
+msgid "This student is not enrolled in any memberships."
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:619
+msgid "Registration Date"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:624
+msgid "Last Seen"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:642
+msgid "Completions"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:646
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:120
+#: includes/privacy/class-llms-privacy-exporters.php:85
+msgid "Certificates"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:650
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:119
+#: includes/privacy/class-llms-privacy-exporters.php:44
+msgid "Achievements"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:659
+#: includes/privacy/class-llms-privacy.php:114
+#: includes/privacy/class-llms-privacy.php:235
+msgid "Billing Address 1"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:664
+#: includes/privacy/class-llms-privacy.php:115
+#: includes/privacy/class-llms-privacy.php:236
+msgid "Billing Address 2"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:669
+#: includes/privacy/class-llms-privacy.php:116
+#: includes/privacy/class-llms-privacy.php:237
+msgid "Billing City"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:674
+#: includes/privacy/class-llms-privacy.php:117
+#: includes/privacy/class-llms-privacy.php:238
+msgid "Billing State"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:679
+msgid "Billing Zip"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:684
+#: includes/privacy/class-llms-privacy.php:119
+#: includes/privacy/class-llms-privacy.php:240
+msgid "Billing Country"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:689
+#: includes/privacy/class-llms-privacy.php:120
+#: includes/privacy/class-llms-privacy.php:241
+msgid "Phone"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:694
+msgid "Courses (Enrolled)"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:699
+msgid "Courses (Cancelled)"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:704
+msgid "Courses (Expired)"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:709
+msgid "Memberships (Enrolled)"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:714
+msgid "Memberships (Cancelled)"
+msgstr ""
+
+#: includes/admin/reporting/tables/llms.table.students.php:719
+msgid "Memberships (Expired)"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:81
+msgid "Courses Completed"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.enrollments.php:84
+msgid "Number of total courses completed during the selected period"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.quizzes.php:87
+msgid "Attempts"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:68
+#: includes/admin/reporting/widgets/class.llms.analytics.widget.sales.php:32
+msgid "# of Sales"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:71
+msgid "Number of new active or completed orders placed within this period"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:80
+#: includes/admin/reporting/widgets/class.llms.analytics.widget.refunds.php:35
+msgid "# of Refunds"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:83
+msgid "Number of orders refunded during this period"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:86
+#: includes/admin/reporting/widgets/class.llms.analytics.widget.refunded.php:32
+msgid "Amount Refunded"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:89
+msgid "Total of all transactions refunded during this period"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:100
+#: includes/admin/reporting/widgets/class.llms.analytics.widget.coupons.php:38
+msgid "# of Coupons Used"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:103
+msgid "Number of orders completed using coupons during this period"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:106
+msgid "Amount of Coupons"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.sales.php:109
+msgid "Total amount of coupons used during this period"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:51
+msgid "All Courses"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:106
+msgid "You do not have permission to access this student's reports"
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:110
+msgid "This student doesn't exist."
+msgstr ""
+
+#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:116
+msgid "Information"
+msgstr ""
+
+#: includes/admin/reporting/widgets/class.llms.analytics.widget.coursecompletions.php:28
+msgid "# of Courses Completed"
+msgstr ""
+
+#: includes/admin/reporting/widgets/class.llms.analytics.widget.enrollments.php:30
+msgid "# of Enrollments"
+msgstr ""
+
+#: includes/admin/reporting/widgets/class.llms.analytics.widget.lessoncompletions.php:28
+msgid "# of Lessons Completed"
+msgstr ""
+
+#: includes/admin/reporting/widgets/class.llms.analytics.widget.registrations.php:27
+msgid "# of Registrations"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:62
+#: includes/class.llms.install.php:288
+msgid "Student Dashboard"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:66
+msgid "Dashboard Page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:67
+#: includes/class.llms.install.php:289
+msgid "Page where students can view and manage their current enrollments, earned certificates and achievements, account information, and purchase history."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:80
+msgid "Courses Sorting"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:82
+msgid "Determines the order of the courses in-progress listed on the student dashboard."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:86
+msgid "Course Title (A to Z)"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:87
+msgid "Course Title (Z to A)"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:88
+msgid "Enrollment Date (Most Recent to Least Recent)"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:89
+#: includes/admin/settings/class.llms.settings.courses.php:133
+#: includes/admin/settings/class.llms.settings.memberships.php:126
+msgid "Order (Low to High)"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:90
+msgid "Order (High to Low)"
+msgstr ""
+
+#. Translators: %1$s = opening anchor tag; %2$s = closing anchor tag.
+#: includes/admin/settings/class.llms.settings.accounts.php:97
+msgid "Enable new user registration on the Student Dashboard. %1$sLearn More%2$s."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:102
+msgid "Open Registration"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:107
+msgid "Only allow the most recent login for each user account."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:109
+msgid "Prevent concurrent logins"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:119
+msgid "Prevent concurrent logins for users with the selected user roles."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:125
+#: includes/admin/settings/class.llms.settings.general.php:94
+msgid "Select user roles"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:139
+msgid "Student Dashboard Endpoints"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:140
+msgid "Each endpoint allows students to view more information or manage parts of their account. Each endpoint should be unique, URL-safe, and can be left blank to disable the endpoint completely."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:144
+msgid "View Grades"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:145
+msgid "Student grade and progress reporting"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:152
+msgid "View Courses"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:153
+msgid "List of all the student's courses"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:160
+msgid "View Memberships"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:161
+msgid "List of all the student's memberships"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:168
+msgid "View Achievements"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:169
+msgid "List of all the student's achievements"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:176
+msgid "View Certificates"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:177
+msgid "List of all the student's certificates"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:185
+#: includes/admin/settings/class.llms.settings.notifications.php:43
+#: includes/class.llms.student.dashboard.php:196
+msgid "Notifications"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:186
+msgid "View Notifications and adjust notification settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:193
+#: includes/class.llms.student.dashboard.php:202
+msgid "Edit Account"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:194
+msgid "Edit Account page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:201
+msgid "Lost Password"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:202
+msgid "Lost Password page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:209
+msgid "Redeem Vouchers"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:210
+msgid "Redeem vouchers page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:217
+msgid "Orders History"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:218
+msgid "Students can review order history on this page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:235
+msgid "User Information & Privacy Options"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:241
+msgid "User Information Field Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:243
+msgid "Since version 5.0, all user information fields are customized using the form editor."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:247
+msgid "Edit Forms"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:251
+msgid "Terms and Conditions"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:258
+msgid "When enabled users must agree to your site's Terms and Conditions to register for an account."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:268
+msgid "Select a page where your site's Terms and Conditions are described."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:273
+msgid "Terms and Conditions Page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:285
+msgid "Customize the text used to display the Terms and Conditions checkbox that students must accept."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:286
+msgid "Terms and Conditions Notice"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:291
+msgid "Privacy Policy"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:297
+msgid "Select a page where your site's Privacy Policy is described. See %1$sWordPress Privacy Settings%2$s for more information"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:303
+msgid "Privacy Policy Page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:315
+msgid "Optionally display a privacy policy notice during registration and checkout."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:316
+msgid "Privacy Policy Notice"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:320
+msgid "Account Erasure Requests"
+msgstr ""
+
+#. Translators: %$1s = opening anchor to account erasure screen; %2$s closing anchor
+#: includes/admin/settings/class.llms.settings.accounts.php:322
+msgid "Customize data retention during %1$saccount erasure requests%2$s."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:329
+msgid "When enabled orders will be anonymized during a personal data erasure."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:330
+msgid "Remove Order Data"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:337
+msgid "When enabled all student data related to course and membership activities will be removed."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:338
+msgid "Remove Student LMS Data"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:355
+msgid "View Favorites"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:356
+msgid "List of all the student's favorites"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.accounts.php:386
+msgid "Accounts"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:41
+#: includes/class.llms.install.php:279
+#: includes/schemas/llms-form-locations.php:21
+msgid "Checkout"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:69
+#: templates/admin/post-types/order-transactions.php:32
+msgid "Gateway"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:70
+msgid "Gateway ID"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:71
+#: includes/admin/settings/class.llms.settings.checkout.php:85
+#: includes/admin/settings/class.llms.settings.checkout.php:86
+#: includes/admin/settings/class.llms.settings.general.php:71
+#: includes/admin/settings/class.llms.settings.integrations.php:139
+#: includes/admin/settings/class.llms.settings.integrations.php:164
+#: includes/admin/settings/class.llms.settings.integrations.php:165
+msgid "Enabled"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:123
+#: includes/admin/settings/class.llms.settings.checkout.php:181
+#: blocks/checkout/index.js:1
+msgid "Checkout Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:186
+msgid "Checkout Page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:187
+msgid "Page used for displaying the checkout form."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:199
+#: templates/checkout/form-confirm-payment.php:117
+msgid "Confirm Payment"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:200
+msgid "Payment confirmation endpoint slug"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:209
+msgid "Force SSL"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:210
+msgid "Force secure checkout via SSL (https) on the checkout page(s)."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:211
+msgid "Requires an SSL certificate. %1$sLearn More%2$s"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:219
+msgid "Enable automatic retry of failed recurring payments."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:220
+msgid "Recover lost revenue from temporarily declined payment methods. %1$sLearn More%2$s"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:222
+msgid "Retry Failed Payments"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:237
+msgid "Currency Options"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:239
+msgid "The following options affect how prices are displayed on the frontend."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:245
+#: includes/schemas/llms-user-information-fields.php:120
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Country"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:246
+msgid "Select the country LifterLMS should use as the default during transactions and registrations."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:256
+msgid "Currency"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:257
+msgid "Select the currency LifterLMS should use to display prices and process transactions."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:266
+msgid "Currency Position"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:267
+msgid "Customize the position and formatting of the currency symbol for displayed prices."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:280
+msgid "Thousand Separator"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:282
+msgid "Choose the character to display as the thousand's place separator for displayed prices."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:289
+msgid "Decimal Separator"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:291
+msgid "Choose the character to display as the decimal separator for displayed prices."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:298
+msgid "Decimal Places"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:300
+msgid "Customize the number of decimal places for prices."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:307
+msgid "Hide Zero Decimals"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:308
+msgid "Automatically remove zero decimals from the end of displayed prices."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:325
+msgid "Payment Gateways"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:365
+msgid "Payment Gateway Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:371
+msgid "Error: \"%s\" is not a valid payment gateway"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.checkout.php:379
+msgid "%s Payment Gateway Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:69
+msgid "Course Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:74
+msgid "Enabling this setting allows students to mark a lesson as \"incomplete\" after they have completed a lesson."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:77
+msgid "Retake Lessons"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:82
+msgid "Lesson Favorites"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:83
+msgid "Enabling this setting allows students to mark a lesson as \"favorite\"."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:102
+msgid "Course Catalog Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:113
+msgid "This page is where your visitors will find a list of all your available courses. %1$sMore Information%2$s"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:116
+#: includes/class-llms-block-templates.php:641
+#: includes/class.llms.install.php:260
+#: includes/class.llms.install.php:261
+msgid "Course Catalog"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:122
+msgid "To show all courses on one page, enter -1."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:124
+msgid "Courses per page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:130
+msgid "Determines the display order for courses on the courses page."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:134
+#: includes/admin/settings/class.llms.settings.memberships.php:127
+msgid "Title (A - Z)"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:135
+#: includes/admin/settings/class.llms.settings.memberships.php:128
+msgid "Title (Z - A)"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:136
+#: includes/admin/settings/class.llms.settings.memberships.php:129
+msgid "Most Recent"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.courses.php:138
+msgid "Catalog Sorting"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:52
+#: includes/class.llms.post-types.php:688
+msgid "Engagements"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:102
+msgid "Placeholder Image"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:103
+msgid "achievement"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:129
+msgid "Placeholder Background Image"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:130
+msgid "certificate"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:137
+msgid "Default Size"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:138
+msgid "The default size used when creating new certificates."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:146
+msgid "User Defined Certificate Size"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:147
+msgid "Use these settings to customize the User Defined Certificate size."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:152
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Width"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:162
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Height"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:172
+msgid "Unit"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:187
+msgid "Legacy Certificate Background Image Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:189
+msgid "Use these settings to determine the dimensions of legacy certificate background images created using the classic editor. These settings have no effect on certificates created using the block editor. After changing these settings, you may need to regenerate your thumbnails ."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:193
+msgid "Image Width"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:194
+#: includes/admin/settings/class.llms.settings.engagements.php:203
+msgid "in pixels"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:201
+msgid "Image Height"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:209
+msgid "Legacy compatibility"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:210
+msgid "Use legacy certificate image sizes."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:211
+msgid "Enabling this will override the above dimension settings and set the image dimensions to match the dimensions of the uploaded image."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:224
+msgid "Certificate Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:243
+msgid "Settings for all emails sent by LifterLMS. Notification and engagement emails will adhere to these settings."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:246
+msgid "Sender Name"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:247
+msgid "Name to be displayed in From field."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:253
+msgid "Sender Email"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:254
+msgid "Email Address displayed in the From field."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:260
+msgid "Header Image"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:267
+msgid "Email Footer Text"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:268
+msgid "Text you would like displayed in the footer of all emails."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:304
+msgid "Email Delivery"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.engagements.php:376
+msgid "A default image used for any %1$s template or award which does not specify an image. Changing this setting will affect all existing templates and awards which do not specify their own image."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.general.php:63
+msgid "Features"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.general.php:70
+msgid "Automatic Recurring Payments: %s "
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.general.php:71
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:175
+msgid "Disabled"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.general.php:87
+#: includes/class.llms.l10n.js.php:136
+#: includes/class.llms.l10n.js.php:169
+#: includes/class.llms.l10n.js.php:331
+msgid "General Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.general.php:97
+msgid "Users with the selected roles will bypass enrollment, drip, and prerequisite restrictions for courses and memberships."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.general.php:106
+msgid "Unrestricted Preview Access"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.general.php:111
+msgid "Content Protection"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.general.php:112
+msgid "Prevent users from copying website content and downloading images."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.general.php:112
+msgid "Users with Unrestricted Preview Access will not be affected by this setting."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.integrations.php:33
+#: includes/admin/settings/class.llms.settings.integrations.php:56
+#: includes/admin/settings/class.llms.settings.integrations.php:92
+msgid "Integrations"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.integrations.php:136
+msgid "Integration"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.integrations.php:137
+msgid "Integration ID"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.integrations.php:138
+#: includes/admin/settings/class.llms.settings.integrations.php:154
+#: includes/admin/settings/class.llms.settings.integrations.php:155
+#: includes/models/model.llms.add-on.php:217
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:124
+msgid "Installed"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:70
+msgid "Select a membership"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:73
+msgid "Only allow access to site to users with a specific membership level. Users will be able to view and purchase membership level."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:76
+msgid "Restrict site by membership level"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:93
+msgid "Memberships Catalog"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:105
+#: includes/class.llms.install.php:271
+msgid "This page is where your visitors will find a list of all your available memberships."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:108
+msgid "Memberships Page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:113
+msgid "Memberships per page"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:114
+msgid "To show all memberships on one page, enter -1"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:123
+msgid "Determines the display order for items on the memberships page."
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.memberships.php:131
+msgid "Memberships Sorting"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.notifications.php:66
+msgid "All Notifications"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.notifications.php:115
+msgid "Subscribers"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.notifications.php:167
+msgid "Notification Settings"
+msgstr ""
+
+#: includes/admin/settings/class.llms.settings.notifications.php:185
+msgid "Invalid notification"
+msgstr ""
+
+#: includes/admin/settings/tables/class.llms.table.notification.settings.php:122
+msgid "Notification"
+msgstr ""
+
+#: includes/admin/settings/tables/class.llms.table.notification.settings.php:123
+msgid "Configure"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-batch-eraser.php:40
+msgid "Deletes pending batches generated by LifterLMS background processors."
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-batch-eraser.php:44
+msgid "There is currently %d pending batch that will be deleted."
+msgid_plural "There are currently %d pending batches that will be deleted."
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/tools/class-llms-admin-tool-batch-eraser.php:67
+msgid "Delete processor batches"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-batch-eraser.php:78
+msgid "Delete batches"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-clear-sessions.php:37
+msgid "LifterLMS user sessions store temporary data related to error messages and order information during payment processing. Stale sessions are automatically deleted. This tool can be used to delete all existing user sessions."
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-clear-sessions.php:50
+msgid "User Sessions"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-clear-sessions.php:61
+msgid "Clear All User Sessions"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-install-forms.php:37
+msgid "Restores LifterLMS user information forms and reusable field blocks to their default versions. Caution: any existing form and field customizations will be lost!"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-install-forms.php:50
+msgid "Reinstall User Forms"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-install-forms.php:61
+msgid "Reinstall Forms"
+msgstr ""
+
+#. Translators: %1$s = opening anchor link to documentation; %2$s = closing anchor link.
+#: includes/admin/tools/class-llms-admin-tool-limited-billing-order-locator.php:127
+msgid "The method used to determine when a limited-billing recurring order has completed its payment plan changed during version 5.3.0. This tool provides a report of orders which may been affected by this change. %1$sRead more%2$s about this change."
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-limited-billing-order-locator.php:134
+msgid "There is %d order that should be reviewed."
+msgid_plural "There are %d orders that should be reviewed."
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/tools/class-llms-admin-tool-limited-billing-order-locator.php:157
+msgid "Limited Billing Orders"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-limited-billing-order-locator.php:229
+msgid "Download CSV"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-recurring-payment-rescheduler.php:42
+msgid "Check active recurring orders to ensure their recurring payment action is properly scheduled for the next payment. If a recurring payment is due and not scheduled it will be rescheduled."
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-recurring-payment-rescheduler.php:46
+msgid "There is %d order that will be checked."
+msgid_plural "There are %d orders that will be checked in batches of 50."
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/tools/class-llms-admin-tool-recurring-payment-rescheduler.php:69
+msgid "Reschedule Recurring Payments"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-recurring-payment-rescheduler.php:80
+msgid "Reschedule Payments"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-reset-automatic-payments.php:46
+msgid "Allows you to choose to enable or disable automatic recurring payments which may be disabled on a staging site."
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-reset-automatic-payments.php:59
+#: includes/admin/tools/class-llms-admin-tool-reset-automatic-payments.php:70
+msgid "Reset Automatic Payments Status"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-wipe-legacy-account-options.php:44
+msgid "Removes all options used to control the visibility of user information fields prior to version 5.0. Since version 5.0 these options are only used when restoring forms to their original default values."
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-wipe-legacy-account-options.php:57
+msgid "Delete Legacy User Information Options"
+msgstr ""
+
+#: includes/admin/tools/class-llms-admin-tool-wipe-legacy-account-options.php:68
+msgid "Delete Legacy Options"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:53
+msgid "Unnamed Access Plan"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:54
+msgctxt "Product Access Plan ID"
+msgid "ID# %s"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:55
+msgid "Purchase Link"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:57
+#: includes/class.llms.post-types.php:1102
+msgid "New Access Plan"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:61
+msgid "This access plan requires attention for possible misconfigurations"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:64
+msgid "Errors were found during access plan validation"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:92
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:136
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:138
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:93
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:79
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:156
+msgid "Plan Title"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:97
+msgid "Plan SKU"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:102
+msgid "Enroll Text"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:103
+msgid "Enroll, Join, Buy..."
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:116
+msgid "Is Free"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:118
+msgid "No payment required"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:141
+msgid "Price"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:146
+msgid "Frequency"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:148
+msgid "one-time payment"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:149
+msgid "every"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:150
+msgid "every 2nd"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:151
+msgid "every 3rd"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:152
+msgid "every 4th"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:153
+msgid "every 5th"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:154
+msgid "every 6th"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:163
+msgid "Plan Period"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:165
+#: includes/functions/llms-functions-locale.php:132
+#: includes/llms.functions.core.php:329
+msgid "year"
+msgid_plural "years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/access-plans/access-plan.php:166
+#: includes/functions/llms-functions-locale.php:128
+#: includes/llms.functions.core.php:330
+msgid "month"
+msgid_plural "months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/access-plans/access-plan.php:167
+#: includes/functions/llms-functions-locale.php:124
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/access-plans/access-plan.php:168
+#: includes/functions/llms-functions-locale.php:120
+#: includes/llms.functions.core.php:331
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/access-plans/access-plan.php:173
+msgid "Plan Length"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:175
+#: includes/admin/views/access-plans/access-plan.php:185
+#: includes/admin/views/access-plans/access-plan.php:195
+#: includes/admin/views/access-plans/access-plan.php:205
+msgid "for all time"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:177
+msgid "for %s year"
+msgid_plural "for %s years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/access-plans/access-plan.php:187
+msgid "for %s month"
+msgid_plural "for %s months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/access-plans/access-plan.php:197
+msgid "for %s week"
+msgid_plural "for %s weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/access-plans/access-plan.php:207
+msgid "for %s day"
+msgid_plural "for %s days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/access-plans/access-plan.php:238
+#: includes/admin/views/metaboxes/view-order-submit.php:89
+msgid "Access Expiration"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:240
+#: includes/models/model.llms.order.php:548
+msgid "Lifetime Access"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:241
+msgid "Expires after"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:242
+msgid "Expires on"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:259
+#: includes/admin/views/access-plans/access-plan.php:333
+msgid "year(s)"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:260
+#: includes/admin/views/access-plans/access-plan.php:334
+msgid "month(s)"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:261
+#: includes/admin/views/access-plans/access-plan.php:335
+msgid "week(s)"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:262
+#: includes/admin/views/access-plans/access-plan.php:336
+msgid "day(s)"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:273
+msgid "Plan Availability"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:275
+msgid "Anyone"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:276
+msgid "Members only"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:285
+msgid "ID# %d"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:313
+msgid "Trial Offer"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:315
+msgid "No trial offer"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:316
+msgid "Enable trial"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:321
+msgid "Trial Price"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:326
+msgid "Trial Length"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:358
+msgid "Sale Pricing"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:360
+msgid "Not on sale"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:361
+msgid "On Sale"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:366
+msgid "Sale Price"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:371
+msgid "Sale Start Date"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:376
+msgid "Sale End Date"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:397
+msgid "Plan Description"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:443
+msgid "Override Membership Redirects"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:445
+msgid "Any redirection set up on the Membership Access Plans will be overridden by the following settings."
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:449
+msgid "Checkout redirect"
+msgstr ""
+
+#: includes/admin/views/access-plans/access-plan.php:474
+msgid "Enter a URL"
+msgstr ""
+
+#: includes/admin/views/access-plans/metabox.php:22
+msgid "Access plans define the payment options and access time-periods available for this %s."
+msgstr ""
+
+#: includes/admin/views/access-plans/metabox.php:23
+msgid "No access plans exist for your %s, click \"Add New\" to get started."
+msgstr ""
+
+#: includes/admin/views/access-plans/metabox.php:32
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:25
+#: includes/admin/views/metaboxes/view-order-details.php:197
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:186
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:122
+#: templates/myaccount/form-edit-account.php:52
+msgid "Save"
+msgstr ""
+
+#. Translators: %s = Author Name.
+#: includes/admin/views/addons/addon-item.php:33
+msgid "Author: %s"
+msgstr ""
+
+#. Translators: %s = Available Version Number.
+#: includes/admin/views/addons/addon-item.php:53
+msgid "Update Available: %s"
+msgstr ""
+
+#: includes/admin/views/addons/addon-item.php:72
+msgid "Learn more"
+msgstr ""
+
+#: includes/admin/views/builder/assignment.php:15
+msgid "There's no assignment associated with this lesson."
+msgstr ""
+
+#: includes/admin/views/builder/assignment.php:18
+msgid "Create New Assignment"
+msgstr ""
+
+#: includes/admin/views/builder/assignment.php:25
+#: includes/class.llms.l10n.js.php:219
+#: includes/class.llms.l10n.js.php:404
+msgid "Add Existing Assignment"
+msgstr ""
+
+#: includes/admin/views/builder/course.php:21
+msgid "Edit Course Page"
+msgstr ""
+
+#: includes/admin/views/builder/course.php:26
+#: includes/class.llms.post-types.php:465
+#: includes/class.llms.post-types.php:466
+msgid "View Course"
+msgstr ""
+
+#: includes/admin/views/builder/course.php:36
+#: includes/admin/views/builder/elements.php:34
+#: includes/class.llms.post-types.php:501
+msgid "Add New Section"
+msgstr ""
+
+#: includes/admin/views/builder/editor.php:20
+msgid "Assignment"
+msgstr ""
+
+#: includes/admin/views/builder/elements.php:11
+msgid "Build Your Course"
+msgstr ""
+
+#: includes/admin/views/builder/elements.php:17
+msgid "Drag or click on the different course elements below to build your course syllabus. Visit the course builder tutorial here ."
+msgstr ""
+
+#: includes/admin/views/builder/elements.php:41
+#: includes/admin/views/builder/section.php:65
+#: includes/class.llms.post-types.php:535
+msgid "Add New Lesson"
+msgstr ""
+
+#: includes/admin/views/builder/elements.php:48
+#: includes/class.llms.l10n.js.php:232
+#: includes/class.llms.l10n.js.php:410
+msgid "Add Existing Lesson"
+msgstr ""
+
+#: includes/admin/views/builder/lesson-settings.php:18
+#: includes/admin/views/builder/quiz.php:44
+msgid "Published"
+msgstr ""
+
+#: includes/admin/views/builder/lesson-settings.php:26
+#: includes/admin/views/builder/lesson-settings.php:28
+#: includes/admin/views/builder/lesson.php:27
+msgid "Open WordPress lesson editor"
+msgstr ""
+
+#: includes/admin/views/builder/lesson-settings.php:31
+#: includes/admin/views/builder/lesson-settings.php:33
+msgid "Detach Lesson"
+msgstr ""
+
+#: includes/admin/views/builder/lesson-settings.php:37
+#: includes/admin/views/builder/lesson-settings.php:39
+msgid "Delete Lesson"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:24
+msgid "ID:"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:34
+msgid "View lesson"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:41
+msgid "Detach lesson"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:43
+msgid "Detach"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:48
+msgid "Trash lesson"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:50
+msgid "Trash"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:58
+msgid "Move to previous section"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:62
+msgid "Move to next section"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:66
+#: includes/admin/views/builder/section.php:34
+msgid "Shift up"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:70
+#: includes/admin/views/builder/section.php:38
+msgid "Shift down"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:89
+msgid "Edit lesson settings"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:97
+msgid "Add an assignment"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:98
+msgid "Edit assignment: %s"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:99
+msgid "Add assignment"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:100
+msgid "Edit assignment"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:106
+msgid "Add a quiz"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:107
+msgid "Edit quiz: %s"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:108
+msgid "Add quiz"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:109
+msgid "Edit quiz"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:115
+msgid "No video"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:116
+msgid "Has video"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:118
+#: includes/admin/views/builder/question.php:116
+msgid "Video"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:124
+msgid "No audio"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:125
+msgid "Has audio"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:127
+msgid "Audio"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:133
+msgid "Enrolled students only"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:134
+#: includes/admin/views/builder/lesson.php:136
+msgid "Free lesson"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:142
+msgid "No prerequisite"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:143
+#: includes/admin/views/builder/lesson.php:145
+msgid "Prerequisite enabled"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:151
+msgid "Drip disabled"
+msgstr ""
+
+#: includes/admin/views/builder/lesson.php:152
+#: includes/admin/views/builder/lesson.php:154
+msgid "Drip enabled"
+msgstr ""
+
+#: includes/admin/views/builder/question-choice.php:23
+msgid "Enter a choice..."
+msgstr ""
+
+#: includes/admin/views/builder/question-choice.php:29
+#: includes/admin/views/builder/question-choice.php:31
+#: includes/admin/views/builder/question.php:97
+#: includes/admin/views/builder/question.php:99
+msgid "Remove image"
+msgstr ""
+
+#: includes/admin/views/builder/question-choice.php:33
+#: includes/admin/views/builder/question.php:101
+msgid "image preview"
+msgstr ""
+
+#: includes/admin/views/builder/question-choice.php:37
+#: includes/admin/views/builder/question.php:105
+msgid "Add Image"
+msgstr ""
+
+#: includes/admin/views/builder/question-choice.php:45
+#: includes/admin/views/builder/question-choice.php:47
+msgid "Add Choice"
+msgstr ""
+
+#: includes/admin/views/builder/question-choice.php:50
+#: includes/admin/views/builder/question-choice.php:52
+msgid "Delete Choice"
+msgstr ""
+
+#: includes/admin/views/builder/question-type.php:12
+msgid "Install the LifterLMS Advanced Quizzes add-on to enable this question type"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:27
+msgid "Expand question"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:31
+msgid "Collapse question"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:36
+msgid "Clone question"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:41
+msgid "Detach question"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:46
+msgid "Delete question"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:53
+#: includes/class.llms.l10n.js.php:455
+msgid "points"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:122
+#: includes/class.llms.l10n.js.php:282
+#: includes/class.llms.l10n.js.php:391
+msgid "Use YouTube, Vimeo, or Wistia video URLS."
+msgstr ""
+
+#: includes/admin/views/builder/question.php:123
+msgid "https://"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:139
+msgid "Choices"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:143
+msgid "Multiple Correct Choices"
+msgstr ""
+
+#: includes/admin/views/builder/question.php:154
+msgid "Drag a question here to add it to the group."
+msgstr ""
+
+#: includes/admin/views/builder/question.php:163
+msgid "Result Clarifications"
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:15
+msgid "There's no quiz associated with this lesson."
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:18
+msgid "Create New Quiz"
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:25
+#: includes/class.llms.l10n.js.php:270
+#: includes/class.llms.l10n.js.php:400
+msgid "Add Existing Quiz"
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:40
+msgid "Total Points"
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:52
+#: includes/admin/views/builder/quiz.php:54
+msgid "Detach Quiz"
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:58
+#: includes/admin/views/builder/quiz.php:60
+msgid "Delete Quiz"
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:73
+msgid "Click \"Add Question\" below to start building your quiz!"
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:78
+msgid "Collapse All"
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:83
+msgid "Expand All"
+msgstr ""
+
+#: includes/admin/views/builder/quiz.php:88
+#: includes/class.llms.post-types.php:612
+msgid "Add Question"
+msgstr ""
+
+#: includes/admin/views/builder/section.php:24
+#: includes/admin/views/builder/section.php:26
+msgid "Delete section"
+msgstr ""
+
+#: includes/admin/views/builder/section.php:43
+msgid "Expand section"
+msgstr ""
+
+#: includes/admin/views/builder/section.php:49
+msgid "Collapse section"
+msgstr ""
+
+#: includes/admin/views/builder/sidebar.php:23
+msgid "Saved"
+msgstr ""
+
+#: includes/admin/views/builder/sidebar.php:24
+msgid "Save changes"
+msgstr ""
+
+#: includes/admin/views/builder/sidebar.php:25
+msgid "Saving changes..."
+msgstr ""
+
+#: includes/admin/views/builder/sidebar.php:26
+msgid "Error saving changes..."
+msgstr ""
+
+#: includes/admin/views/builder/sidebar.php:29
+msgid "Exit"
+msgstr ""
+
+#: includes/admin/views/builder/utilities.php:15
+msgid "Expand Sections"
+msgstr ""
+
+#: includes/admin/views/builder/utilities.php:21
+msgid "Collapse Sections"
+msgstr ""
+
+#: includes/admin/views/dashboard.php:28
+msgid "Recent Activity: %1$1s to %2$2s"
+msgstr ""
+
+#: includes/admin/views/dashboard/addons.php:21
+msgid "View Add-ons & more"
+msgstr ""
+
+#: includes/admin/views/dashboard/blog.php:35
+#: includes/admin/views/dashboard/podcast.php:35
+msgid "No news found."
+msgstr ""
+
+#: includes/admin/views/dashboard/blog.php:42
+#: includes/admin/views/dashboard/podcast.php:42
+msgid "Posted %s"
+msgstr ""
+
+#: includes/admin/views/dashboard/blog.php:55
+#: includes/admin/views/dashboard/podcast.php:55
+msgid "View More"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:17
+msgid "Build LMS Content"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:19
+msgid "Add a New Membership"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:20
+msgid "Create an Engagement"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:25
+msgid "Access Reports"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:27
+msgid "View Orders"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:28
+msgid "View Students"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:30
+msgid "View Sales Report"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:33
+msgid "Your Launch Checklist"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:65
+#: includes/admin/views/dashboard/quick-links.php:67
+msgid "Create Access Plan"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:70
+#: includes/admin/views/dashboard/quick-links.php:72
+msgid "Get 10 Enrollments"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:91
+msgid "Add Advanced Features"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:99
+msgid "Pricing"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:100
+msgid "Add-Ons"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:101
+msgid "Contact Sales"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:108
+msgid "WordPress.org Support"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:109
+msgid "Premium Support"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:113
+msgid "Learn"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:115
+msgid "Academy"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:116
+msgid "Events"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:117
+msgid "Developers"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:121
+#: includes/class.llms.question.types.php:145
+msgid "Content"
+msgstr ""
+
+#: includes/admin/views/dashboard/quick-links.php:125
+msgid "YouTube"
+msgstr ""
+
+#: includes/admin/views/import.php:33
+msgid "Import Course(s)"
+msgstr ""
+
+#: includes/admin/views/import.php:35
+msgid "Upload export files generated by LifterLMS. Must be a \".json\" file."
+msgstr ""
+
+#. Translators: %s = anchor link HTML to LifterLMS.com.
+#: includes/admin/views/import.php:65
+msgid "Download and import courses, templates, and more from %s."
+msgstr ""
+
+#: includes/admin/views/import.php:67
+#: includes/admin/views/import.php:68
+#: assets/js/llms-admin-forms.js:50
+#: assets/js/llms-admin-forms.js:70
+msgid "Help"
+msgstr ""
+
+#: includes/admin/views/import/help-sidebar.php:13
+msgid "For more information:"
+msgstr ""
+
+#: includes/admin/views/import/help-sidebar.php:16
+msgid "Import Documentation"
+msgstr ""
+
+#: includes/admin/views/import/help-tab-overview.php:13
+msgid "Importing into LifterLMS"
+msgstr ""
+
+#: includes/admin/views/import/help-tab-overview.php:15
+msgid "Importing allows you to copy courses from one LifterLMS site to another."
+msgstr ""
+
+#: includes/admin/views/import/help-tab-overview.php:17
+msgid "You can upload .json
files exported from another LifterLMS site using the \"Upload\" button."
+msgstr ""
+
+#: includes/admin/views/import/help-tab-overview.php:19
+msgid "The courses listed below are samples and templates you can import into your site directly from LifterLMS.com. When importing these courses the content (including images) will be downloaded from LifterLMS.com and imported into your site."
+msgstr ""
+
+#: includes/admin/views/importable-course.php:38
+msgid "%s featured image"
+msgstr ""
+
+#: includes/admin/views/importable-course.php:57
+msgid "Download & Import"
+msgstr ""
+
+#. Translators: %s = Text of the HTTP Request error message.
+#: includes/admin/views/importable-courses.php:21
+msgid "There was an error loading importable courses. Please reload the page to try again. [%s]"
+msgstr ""
+
+#: includes/admin/views/merge-code-button.php:25
+#: assets/js/llms-admin-certificate-editor.js:1
+msgid "Merge Codes"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:31
+msgid "Status:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:39
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:54
+msgid "Scheduled"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:43
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:56
+msgid "Draft"
+msgstr ""
+
+#. translators: Award box date string. 1: Date, 2: Time. See https://www.php.net/manual/datetime.format.php
+#. Translators: %1$s: Last access date; %2$s: Last access time.
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:65
+#: libraries/lifterlms-rest/includes/models/class-llms-rest-api-key.php:132
+msgid "%1$s at %2$s"
+msgstr ""
+
+#. translators: Award box date format, see https://www.php.net/manual/datetime.format.php
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:67
+msgctxt "award box date format"
+msgid "M j, Y"
+msgstr ""
+
+#. translators: Award box time format, see https://www.php.net/manual/datetime.format.php
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:69
+msgctxt "award box time format"
+msgid "H:i"
+msgstr ""
+
+#. translators: Engagement date information. %s: Date on which the engagement is currently scheduled to be awarded.
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:74
+msgid "Scheduled for: %s"
+msgstr ""
+
+#. translators: Post date information. %s: Date on which the engagement was awarded.
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:77
+msgid "Awarded on: %s"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:79
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:93
+msgid "Award immediately "
+msgstr ""
+
+#. translators: Post date information. %s: Date on which the post is to be awarded.
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:82
+msgid "Schedule for: %s"
+msgstr ""
+
+#. translators: Post date information. %s: Date on which the post is to be awarded.
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:85
+msgid "Award on: %s"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:109
+msgid "Edit date and time"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:112
+msgid "Date and time"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:131
+#: assets/js/llms-admin-certificate-editor.js:1
+msgid "Delete permanently"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:146
+#: includes/admin/views/metaboxes/view-award-engagement-submit.php:147
+msgctxt "post action/button label"
+msgid "Schedule"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:27
+msgid "This order was processed in the gateway's testing mode"
+msgstr ""
+
+#. Translators: %s= The order ID.
+#: includes/admin/views/metaboxes/view-order-details.php:33
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:88
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:92
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:106
+msgid "Order #%s"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:34
+msgid "Processed by %s"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:52
+msgid "Access Plan Information"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:55
+#: includes/admin/views/metaboxes/view-order-details.php:74
+#: includes/admin/views/metaboxes/view-order-details.php:314
+msgid "Name:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:61
+#: includes/admin/views/metaboxes/view-order-details.php:84
+msgid "SKU:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:71
+msgid "Product Information"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:98
+msgid "Trial Information"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:102
+#: includes/admin/views/metaboxes/view-order-details.php:126
+msgid "Original Total:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:107
+#: includes/admin/views/metaboxes/view-order-details.php:140
+msgid "Coupon Discount:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:115
+#: includes/admin/views/metaboxes/view-order-details.php:149
+msgid "Total:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:117
+#: includes/admin/views/metaboxes/view-order-details.php:165
+#: templates/myaccount/view-order-information.php:63
+#: templates/myaccount/view-order-information.php:117
+msgid "for %1$d %2$s"
+msgid_plural "for %1$d %2$ss"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:122
+msgid "Payment Information"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:132
+msgid "Sale Discount:"
+msgstr ""
+
+#. Translators: %1$d = The order billing period; %2$s = The order billing frequency.
+#. Translators: %1$d = the billing frequency; %2$s = the billing period.
+#: includes/admin/views/metaboxes/view-order-details.php:157
+#: templates/myaccount/view-order-information.php:105
+msgid "Every %2$s"
+msgid_plural "Every %1$d %2$ss"
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:178
+msgid "Remaining Payments:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:184
+msgid "Modify Remaining Payments"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:187
+msgid "Remaining payments"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:192
+msgid "Order Note"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:194
+msgid "For internal use only, not visible to the customer."
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:229
+msgid "Add additional payments"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:246
+msgid "Customer Information"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:249
+msgid "Buyer Name:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:261
+msgid "Buyer Email:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:267
+msgid "Buyer Address:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:281
+msgid "Buyer Phone:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:288
+msgid "Buyer IP Address:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:306
+msgid "Gateway Information"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-details.php:307
+#: includes/admin/views/metaboxes/view-order-details.php:309
+msgid "Edit gateway information"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-submit.php:25
+msgid "Update Order Status:"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-submit.php:34
+#: includes/privacy/class-llms-privacy.php:98
+msgid "Order Date"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-submit.php:44
+msgid "Trial End Date"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-submit.php:64
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:132
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:134
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:152
+#: templates/myaccount/view-order-information.php:158
+msgid "Next Payment Date"
+msgstr ""
+
+#: includes/admin/views/metaboxes/view-order-submit.php:108
+msgid "Update Order"
+msgstr ""
+
+#: includes/admin/views/notices/db-update.php:17
+msgid "The LifterLMS database needs to be updated to the latest version."
+msgstr ""
+
+#: includes/admin/views/notices/db-update.php:18
+msgid "The update will only take a few minutes and it will run in the background. A notice like this will let you know when it's finished."
+msgstr ""
+
+#: includes/admin/views/notices/db-update.php:20
+msgid "See the %1$sdatabase update log%2$s for a complete list of changes scheduled for each upgrade."
+msgstr ""
+
+#: includes/admin/views/notices/db-update.php:22
+msgid "Run the Updater"
+msgstr ""
+
+#: includes/admin/views/notices/db-update.php:27
+msgid "We strongly recommended that you backup your database before proceeding. Are you sure you wish to run the updater now?"
+msgstr ""
+
+#. Translators: %s = number of active students.
+#: includes/admin/views/notices/review-request.php:21
+msgid "Hey there, we noticed you have more than %s active students on your site - that’s really awesome!"
+msgstr ""
+
+#: includes/admin/views/notices/review-request.php:22
+msgid "Could you please do us a BIG favor and give LifterLMS a 5-star rating on WordPress to help us grow?"
+msgstr ""
+
+#: includes/admin/views/notices/review-request.php:23
+msgid "Chris Badgett, CEO of LifterLMS"
+msgstr ""
+
+#: includes/admin/views/notices/review-request.php:25
+msgid "Ok, you deserve it"
+msgstr ""
+
+#: includes/admin/views/notices/review-request.php:26
+msgid "Nope, maybe later"
+msgstr ""
+
+#: includes/admin/views/notices/review-request.php:27
+msgid "I already did"
+msgstr ""
+
+#: includes/admin/views/resources/getting-started.php:16
+msgid "How to Activate Your License Key"
+msgstr ""
+
+#: includes/admin/views/resources/getting-started.php:17
+msgid "How to Create a Course"
+msgstr ""
+
+#: includes/admin/views/resources/getting-started.php:18
+msgid "How to Set Up an Access Plans"
+msgstr ""
+
+#: includes/admin/views/resources/getting-started.php:19
+msgid "How to Create a Membership"
+msgstr ""
+
+#: includes/admin/views/resources/getting-started.php:20
+msgid "How to Create Certificates and Engagements"
+msgstr ""
+
+#: includes/admin/views/resources/getting-started.php:22
+msgid "All Getting Started Resources"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:15
+msgid "Key Documentation"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:17
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Shortcodes"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:18
+msgid "LifterLMS Payment Gateways"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:19
+msgid "Managing Orders"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:20
+msgid "Integrating WooCommerce"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:21
+msgid "Selling Bundled Courses"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:22
+msgid "Dripping Content"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:23
+msgid "Translating LifterLMS"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:24
+msgid "Editing Registration Forms"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:26
+msgid "Knowledge Base"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:29
+msgid "For Developers"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:31
+msgid "Changelogs"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:32
+msgid "Code Reference"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:33
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-page.php:31
+msgid "REST API"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:34
+msgid "LLMS-CLI"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:35
+msgid "Coding Standards"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:36
+msgid "Github"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:37
+msgid "Contribute"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:38
+msgid "Developer Slack Community"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:40
+msgid "Developer Resources"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:43
+msgid "Common Hang-ups"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:45
+msgid "Student Dashboard as Front Page"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:46
+msgid "Caching Conflicts"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:47
+msgid "License Key Deactivated"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:48
+msgid "Emails Not Sending"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:49
+msgid "Rerun Set Up Wizard"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:51
+msgid "Contact Support"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:57
+msgid "Courses & Case Studies"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:59
+msgid "LifterLMS Quickstart Course"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:60
+msgid "WordPress 101"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:61
+msgid "LifterLMS Case Studies"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:62
+msgid "LifterLMS Webinars"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:66
+msgid "Community Resources"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:68
+msgid "Virtual Events"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:69
+msgid "Facebook Group"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:70
+msgid "Experts for Hire"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:71
+msgid "WordPress Forums"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:75
+msgid "Third Party Stuff"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:77
+msgid "Third Party Add-ons"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:78
+msgid "Form Plugins"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:79
+msgid "Email Marketing"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:80
+msgid "Backups and Security"
+msgstr ""
+
+#: includes/admin/views/resources/resource-links.php:81
+msgid "More Recommendations"
+msgstr ""
+
+#: includes/admin/views/resources/welcome-video.php:14
+msgid "Thank you for choosing LifterLMS! This page is your command center, where you can find all of the basic information you need to start building your courses. Use the links on this page to quickly access support or any additional documentation you may need along the way."
+msgstr ""
+
+#: includes/admin/views/settings.php:25
+msgid "Save Changes"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/main.php:55
+msgid "Skip setup"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/main.php:56
+msgid "Get Started Now"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/main.php:59
+msgid "The site setup is incomplete! Are you sure you wish to exit?"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/main.php:59
+msgid "Exit Setup"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/main.php:69
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Start from Scratch"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-coupon.php:18
+msgid "Help Improve LifterLMS & Get a Coupon"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-coupon.php:19
+msgid "By allowing us to collect non-sensitive usage information and diagnostic data, you'll be providing us with information we can use to make the future of LifterLMS stronger and more powerful with every update!"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-coupon.php:20
+msgid "Click \"Allow\" to and we'll send you a coupon immediately."
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-coupon.php:21
+msgid "Find out more information"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-finish.php:19
+msgid "Setup Complete!"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-finish.php:20
+msgid "Here's some resources to help you get familiar with LifterLMS:"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-finish.php:22
+msgid "Watch the LifterLMS video tutorials"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-finish.php:23
+msgid "Read the LifterLMS Getting Started Guide"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-finish.php:27
+msgid "Import Sample Courses and Templates!"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-finish.php:28
+msgid "Accelerate your progress by installing a quick LifterLMS training course and useful course templates."
+msgstr ""
+
+#. Translators: %s = anchor link to LifterLMS.com.
+#: includes/admin/views/setup-wizard/step-finish.php:37
+msgid "The selected course will be downloaded and imported into this site from %s."
+msgstr ""
+
+#. Translators: %1$s = The number of selected courses; %2$s = anchor link to LifterLMS.com.
+#: includes/admin/views/setup-wizard/step-finish.php:46
+msgid "The %1$s selected courses will be downloaded and imported into this site from %2$s."
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-intro.php:18
+msgid "Welcome to LifterLMS!"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-intro.php:19
+msgid "Thanks for choosing LifterLMS to power your online courses! This short setup wizard will guide you through the basic settings and configure LifterLMS so you can get started creating courses faster!"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-intro.php:20
+msgid "It will only take a few minutes and it is completely optional. If you don't have the time now, come back later."
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-pages.php:17
+msgid "LifterLMS has a few essential pages. The following will be created automatically if they don't already exist."
+msgstr ""
+
+#. Translators: 1: Link to the Pages screen in the WordPress admin 2: Closing link tag 3: Link to the Appearance > Menus screen in the WordPress admin 4: Closing link tag.
+#: includes/admin/views/setup-wizard/step-pages.php:41
+msgid "After setup, you can manage these pages from the admin dashboard on the %1$sPages screen%2$s and you can control which pages display on your menu(s) via %3$sAppearance > Menus%4$s."
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-payments.php:27
+msgid "Which country should be used as the default for student registrations?"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-payments.php:41
+msgid "Which currency should be used for payment processing?"
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-payments.php:48
+msgid "If your currency is not listed you can %1$sadd it later%2$s."
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-payments.php:54
+msgid "With LifterLMS you can accept both online and offline payments. Be sure to install a %1$spayment gateway%2$s to accept online payments."
+msgstr ""
+
+#: includes/admin/views/setup-wizard/step-payments.php:55
+msgid "Enable Offline Payments"
+msgstr ""
+
+#: includes/admin/views/status/view-log.php:22
+msgid "View and Manage Logs"
+msgstr ""
+
+#: includes/admin/views/status/view-log.php:33
+msgid "View Log"
+msgstr ""
+
+#. Translators: %s = File name of the log.
+#: includes/admin/views/status/view-log.php:40
+msgid "Viewing: %s"
+msgstr ""
+
+#: includes/admin/views/user-edit-fields.php:16
+msgid "LifterLMS Profile"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:409
+msgid "No theme is defined for this template."
+msgstr ""
+
+#: includes/class-llms-block-templates.php:642
+#: includes/class.llms.install.php:269
+#: includes/class.llms.install.php:270
+msgid "Membership Catalog"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:643
+msgid "Single Certificate"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:644
+msgid "Single Access Restricted"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:645
+msgid "Taxonomy Course Category"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:646
+msgid "Taxonomy Course Difficulty"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:647
+msgid "Taxonomy Course Tag"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:648
+msgid "Taxonomy Course Track"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:649
+msgid "Taxonomy Membership Category"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:650
+msgid "Taxonomy Membership Tag"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:679
+msgid "LifterLMS Course Catalog Template"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:680
+msgid "LifterLMS Membership Catalog Template"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:681
+msgid "LifterLMS Certificate Template"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:682
+msgid "LifterLMS Single Template Access Restricted"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:683
+msgid "LifterLMS Course Category Taxonomy Template"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:684
+msgid "LifterLMS Course Difficulty Taxonomy Template"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:685
+msgid "LifterLMS Course Tag Taxonomy Template"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:686
+msgid "LifterLMS Course Track Taxonomy Template"
+msgstr ""
+
+#: includes/class-llms-block-templates.php:687
+#: includes/class-llms-block-templates.php:688
+msgid "LifterLMS Membership Tag Taxonomy Template"
+msgstr ""
+
+#: includes/class-llms-db-ugrader.php:276
+msgid "Your database is being upgraded in the background. Feel free to leave this page. A notice like this will appear when the update is complete."
+msgstr ""
+
+#: includes/class-llms-db-ugrader.php:304
+msgid "The LifterLMS database update is complete."
+msgstr ""
+
+#: includes/class-llms-dom-document.php:66
+msgid "DOMDocument not available."
+msgstr ""
+
+#: includes/class-llms-dom-document.php:137
+#: includes/class-llms-dom-document.php:150
+msgid "DOMDocument XML Error encountered."
+msgstr ""
+
+#: includes/class-llms-elementor-migrate.php:50
+#: libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-information-block.php:62
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Course Information"
+msgstr ""
+
+#: includes/class-llms-engagement-handler.php:71
+msgid "User \"%d\" not found."
+msgstr ""
+
+#: includes/class-llms-engagement-handler.php:238
+msgid "An error was encountered during post creation."
+msgstr ""
+
+#. Translators: %d = the WP_Post ID.
+#: includes/class-llms-engagement-handler.php:315
+msgid "Post \"%d\" not found."
+msgstr ""
+
+#. Translators: %d = the WP_Post ID.
+#: includes/class-llms-engagement-handler.php:320
+msgid "Post \"%d\" is not published."
+msgstr ""
+
+#. Translators: %d = the WP_Post ID.
+#: includes/class-llms-engagement-handler.php:325
+msgid "Post \"%d\" is not the expected post type."
+msgstr ""
+
+#. Translators: %1$d = WP_User ID; %2$d = WP_Post ID.
+#: includes/class-llms-engagement-handler.php:351
+msgid "User \"%1$d\" is not enrolled in \"%2$d\"."
+msgstr ""
+
+#. Translators: %s = the WP_User ID.
+#: includes/class-llms-engagement-handler.php:422
+msgid "User \"%s\" has already earned this engagement."
+msgstr ""
+
+#: includes/class-llms-engagement-handler.php:573
+msgid "Email #%1$d to user #%2$d triggered by %3$s"
+msgstr ""
+
+#: includes/class-llms-engagement-handler.php:578
+msgid "not sent because of dupcheck."
+msgstr ""
+
+#: includes/class-llms-engagement-handler.php:591
+msgid "sent successfully."
+msgstr ""
+
+#: includes/class-llms-engagement-handler.php:596
+msgid "not sent due to email sending issues."
+msgstr ""
+
+#. Translators: %s = Event field key.
+#: includes/class-llms-events.php:122
+msgid "The event is missing the \"%s\" field."
+msgstr ""
+
+#. Translators: %s = URL.
+#: includes/class-llms-events.php:142
+msgid "The URL \"%s\" cannot be mapped to a valid post object."
+msgstr ""
+
+#. Translators: %s = key name of the missing field.
+#: includes/class-llms-events.php:179
+msgid "Missing required field: \"%s\"."
+msgstr ""
+
+#. Translators: %s = Submitted event string.
+#: includes/class-llms-events.php:191
+msgid "The event \"%s\" is invalid."
+msgstr ""
+
+#: includes/class-llms-events.php:211
+msgid "An unknown error occurred during event creation."
+msgstr ""
+
+#: includes/class-llms-events.php:257
+msgid "There was one or more errors encountered while recording the events."
+msgstr ""
+
+#: includes/class-llms-events.php:451
+msgid "You're not allowed to store tracking events"
+msgstr ""
+
+#: includes/class-llms-generator-courses.php:154
+msgid "Raw data is missing the required \"courses\" array."
+msgstr ""
+
+#: includes/class-llms-generator-courses.php:156
+msgid "The raw \"courses\" item must be an array."
+msgstr ""
+
+#: includes/class-llms-generator-courses.php:444
+msgid "Error creating the question post object."
+msgstr ""
+
+#: includes/class-llms-order-generator.php:241
+#: includes/controllers/class-llms-controller-checkout.php:260
+msgid "There was an error creating your order, please try again."
+msgstr ""
+
+#. Translators: %s = The user-submitted coupon code.
+#. Translators: %s = coupon code.
+#: includes/class-llms-order-generator.php:582
+#: includes/class.llms.ajax.handler.php:1080
+#: includes/functions/llms.functions.order.php:364
+msgid "Coupon code \"%s\" not found."
+msgstr ""
+
+#: includes/class-llms-order-generator.php:619
+#: includes/functions/llms.functions.order.php:381
+msgid "No payment method selected."
+msgstr ""
+
+#: includes/class-llms-order-generator.php:649
+#: includes/class-llms-order-generator.php:657
+#: includes/controllers/class-llms-controller-checkout.php:106
+#: includes/controllers/class-llms-controller-checkout.php:112
+#: includes/shortcodes/class.llms.shortcode.checkout.php:264
+msgid "Could not locate an order to confirm."
+msgstr ""
+
+#: includes/class-llms-order-generator.php:679
+msgid "Missing access plan ID."
+msgstr ""
+
+#: includes/class-llms-order-generator.php:684
+msgid "Access plan not found."
+msgstr ""
+
+#. Translators: %s = The title of the site's LifterLMS Terms and Conditions page.
+#: includes/class-llms-order-generator.php:706
+msgid "You must agree to the %s."
+msgstr ""
+
+#. Translators: %s = The title of the course or membership.
+#: includes/class-llms-order-generator.php:738
+msgid "You already have access to %s."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:45
+msgid "Certificate size."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:53
+msgid "Certificate width."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:57
+msgid "Certificate height."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:61
+msgid "Certificate sizing unit applied to the width and height properties."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:66
+msgid "Certificate orientation."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:71
+msgid "Certificate margins."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:80
+msgid "Certificate background color."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:120
+msgid "Certificate template ID."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:157
+msgid "Certificate title."
+msgstr ""
+
+#: includes/class-llms-rest-fields.php:176
+msgid "Next sequential ID."
+msgstr ""
+
+#: includes/class-llms-sessions.php:74
+msgid "Every %d Minutes"
+msgstr ""
+
+#: includes/class-llms-staging.php:68
+msgid "Staging"
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:53
+#: includes/class.llms.ajax.handler.php:76
+#: includes/class.llms.ajax.handler.php:100
+#: includes/class.llms.ajax.handler.php:257
+#: includes/class.llms.ajax.handler.php:1013
+msgid "Missing required parameters"
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:59
+msgid "Members are being enrolled in the background. You may leave this page."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:102
+msgid "Missing required permissions to perform this action."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:153
+msgid "There was a problem deleting your access plan, please try again."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:374
+msgid "Missing required parameters."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:380
+msgid "There was an error removing the course, please try again."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:627
+#: includes/class.llms.ajax.handler.php:697
+#: includes/class.llms.ajax.handler.php:784
+#: includes/class.llms.template.loader.php:408
+msgid "You must be logged in to take quizzes."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:633
+#: includes/class.llms.ajax.handler.php:732
+msgid "You've reached the maximum number of attempts for this quiz."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:645
+msgid "There was an error starting the quiz. Please return to the lesson and begin again."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:655
+msgid "Unable to start quiz because the quiz does not contain any questions."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:704
+#: includes/class.llms.ajax.handler.php:789
+msgid "Missing required parameters. Could not proceed."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:716
+msgid "There was an error recording your answer. Please return to the lesson and begin again."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:1017
+msgid "Invalid status"
+msgstr ""
+
+#. Translators: %s = action add|remove|delete.
+#: includes/class.llms.ajax.handler.php:1039
+msgid "Action \"%1$s\" failed. Please try again"
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:1067
+msgid "Please enter a coupon code."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:1071
+msgid "Please enter a plan ID."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:1461
+msgid "Missing Required Parameters."
+msgstr ""
+
+#: includes/class.llms.ajax.handler.php:1515
+msgid "Missing tracking data."
+msgstr ""
+
+#: includes/class.llms.certificates.php:186
+msgid "Unable to open export file (HTML certificate) for writing."
+msgstr ""
+
+#: includes/class.llms.certificates.php:190
+msgid "Unable to write to export file (HTML certificate)."
+msgstr ""
+
+#. Translators: %1$s = url-safe certificate title, %2$s = random alpha-numeric characters for filename obscurity.
+#: includes/class.llms.certificates.php:221
+msgctxt "certificate download filename"
+msgid "certificate-%1$s-%2$s"
+msgstr ""
+
+#: includes/class.llms.date.php:165
+msgctxt "Localized Order DateTime"
+msgid "%1$b %2$d, %3$Y @ %4$I:%5$M %6$p"
+msgstr ""
+
+#: includes/class.llms.date.php:185
+#: includes/llms.functions.core.php:340
+msgid "hours"
+msgstr ""
+
+#: includes/class.llms.date.php:187
+#: includes/llms.functions.core.php:332
+msgid "hour"
+msgstr ""
+
+#: includes/class.llms.date.php:190
+msgid "%1$d %2$s "
+msgstr ""
+
+#: includes/class.llms.date.php:194
+#: includes/llms.functions.core.php:342
+msgid "seconds"
+msgstr ""
+
+#: includes/class.llms.date.php:196
+#: includes/llms.functions.core.php:334
+msgid "second"
+msgstr ""
+
+#: includes/class.llms.date.php:207
+#: includes/llms.functions.core.php:341
+msgid "minutes"
+msgstr ""
+
+#: includes/class.llms.date.php:209
+#: includes/llms.functions.core.php:333
+msgid "minute"
+msgstr ""
+
+#: includes/class.llms.frontend.assets.php:105
+msgid "Copying is not allowed."
+msgstr ""
+
+#: includes/class.llms.gateway.manual.php:37
+msgid "Collect manual or offline payments. Also handles any free orders during checkout."
+msgstr ""
+
+#: includes/class.llms.gateway.manual.php:38
+#: includes/class.llms.gateway.manual.php:39
+msgid "Manual"
+msgstr ""
+
+#: includes/class.llms.gateway.manual.php:40
+msgid "Pay manually via check"
+msgstr ""
+
+#: includes/class.llms.gateway.manual.php:92
+#: includes/class.llms.gateway.manual.php:117
+msgid "Payment Instructions"
+msgstr ""
+
+#: includes/class.llms.gateway.manual.php:116
+msgid "Displayed to the user when this gateway is selected during checkout. Add information here instructing the student on how to send payment."
+msgstr ""
+
+#: includes/class.llms.gateway.manual.php:150
+msgid "Payment method switched from \"%1$s\" to \"%2$s\""
+msgstr ""
+
+#: includes/class.llms.gateway.manual.php:185
+#: includes/functions/updates/llms-functions-updates-300.php:170
+msgid "Free"
+msgstr ""
+
+#: includes/class.llms.generator.php:119
+msgid "No generator supplied."
+msgstr ""
+
+#: includes/class.llms.generator.php:441
+msgid "The supplied file cannot be processed by the importer."
+msgstr ""
+
+#: includes/class.llms.generator.php:453
+msgid "The supplied generator is invalid."
+msgstr ""
+
+#: includes/class.llms.install.php:262
+msgid "This page is where your visitors will find a list of all your available courses."
+msgstr ""
+
+#: includes/class.llms.install.php:278
+msgid "Purchase"
+msgstr ""
+
+#: includes/class.llms.install.php:280
+msgid "This is the page where visitors will be directed in order to pay for courses and memberships."
+msgstr ""
+
+#: includes/class.llms.install.php:386
+msgctxt "course difficulty name"
+msgid "Beginner"
+msgstr ""
+
+#: includes/class.llms.install.php:387
+msgctxt "course difficulty name"
+msgid "Intermediate"
+msgstr ""
+
+#: includes/class.llms.install.php:388
+msgctxt "course difficulty name"
+msgid "Advanced"
+msgstr ""
+
+#: includes/class.llms.install.php:694
+msgid "You are not allowed to perform the requested action."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:48
+#: includes/class.llms.l10n.js.php:481
+msgid "This is a %2$s %1$s String"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:56
+#: includes/class.llms.l10n.js.php:482
+#: includes/functions/llms.functions.access.php:197
+msgid "You do not have permission to access this content"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:64
+#: includes/class.llms.l10n.js.php:483
+msgid "There is an issue with your chosen password."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:65
+#: includes/class.llms.l10n.js.php:484
+msgid "Too Short"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:66
+#: includes/class.llms.l10n.js.php:485
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Very Weak"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:67
+#: includes/class.llms.l10n.js.php:486
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Weak"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:68
+#: includes/class.llms.l10n.js.php:487
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Medium"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:69
+#: includes/class.llms.l10n.js.php:488
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Strong"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:70
+#: includes/class.llms.l10n.js.php:489
+msgid "Mismatch"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:78
+#: includes/class.llms.l10n.js.php:490
+msgid "Members Only Pricing"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:86
+#: includes/class.llms.l10n.js.php:491
+msgid "Are you sure you want to cancel your subscription?"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:95
+#: includes/class.llms.l10n.js.php:377
+msgid "lessons"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:96
+#: includes/class.llms.l10n.js.php:378
+msgid "lesson"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:98
+#: includes/class.llms.l10n.js.php:380
+#: templates/myaccount/my-grades-single-table.php:36
+msgid "Lesson %1$d: %2$s"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:99
+#: includes/class.llms.l10n.js.php:381
+msgid "%1$s Quiz"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:107
+#: includes/class.llms.l10n.js.php:329
+msgid "questions"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:108
+#: includes/class.llms.l10n.js.php:330
+msgid "question"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:116
+#: includes/class.llms.l10n.js.php:348
+#: includes/class.llms.post-types.php:577
+msgid "New Quiz"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:117
+#: includes/class.llms.l10n.js.php:349
+msgid "quizzes"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:118
+#: includes/class.llms.l10n.js.php:350
+#: includes/models/model.llms.user.postmeta.php:118
+msgid "quiz"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:126
+#: includes/class.llms.l10n.js.php:382
+#: includes/class.llms.post-types.php:504
+msgid "New Section"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:127
+#: includes/class.llms.l10n.js.php:383
+msgid "sections"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:128
+#: includes/class.llms.l10n.js.php:384
+msgid "section"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:137
+#: includes/class.llms.l10n.js.php:351
+msgid "Video Embed URL"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:138
+#: includes/class.llms.l10n.js.php:352
+msgid "Audio Embed URL"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:140
+#: includes/class.llms.l10n.js.php:354
+msgid "Free lessons can be accessed without enrollment."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:141
+#: includes/class.llms.l10n.js.php:355
+msgid "Require Passing Grade on Quiz"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:142
+#: includes/class.llms.l10n.js.php:356
+msgid "When enabled, students must pass this quiz before the lesson can be completed."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:143
+#: includes/class.llms.l10n.js.php:357
+msgid "Require Passing Grade on Assignment"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:144
+#: includes/class.llms.l10n.js.php:358
+msgid "When enabled, students must pass this assignment before the lesson can be completed."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:145
+#: includes/class.llms.l10n.js.php:359
+msgid "Lesson Weight"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:146
+#: includes/class.llms.l10n.js.php:360
+msgid "POINTS"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:147
+#: includes/class.llms.l10n.js.php:361
+msgid "Determines the weight of the lesson when calculating the overall grade of the course."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:149
+#: includes/class.llms.l10n.js.php:363
+msgid "Course Drip Method"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:150
+#: includes/class.llms.l10n.js.php:364
+msgid "Drip settings are currently set at the course level, under the Restrictions settings tab. Disable to allow lesson level drip settings."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:156
+#: includes/class.llms.l10n.js.php:370
+msgid "# of days after course enrollment"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:157
+#: includes/class.llms.l10n.js.php:371
+msgid "# of days after course start date"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:158
+#: includes/class.llms.l10n.js.php:372
+msgid "# of days after prerequisite lesson completion"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:159
+#: includes/class.llms.l10n.js.php:373
+msgid "# of days"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:161
+#: includes/class.llms.l10n.js.php:375
+msgid "Time"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:171
+#: includes/class.llms.l10n.js.php:333
+msgid "Passing Percentage"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:172
+#: includes/class.llms.l10n.js.php:334
+msgid "Minimum percentage of total points required to pass the quiz"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:173
+#: includes/class.llms.l10n.js.php:335
+msgid "Limit Attempts"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:174
+#: includes/class.llms.l10n.js.php:336
+msgid "Limit the maximum number of times a student can take this quiz"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:175
+#: includes/class.llms.l10n.js.php:337
+msgid "Time Limit"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:176
+#: includes/class.llms.l10n.js.php:338
+msgid "Enforce a maximum number of minutes a student can spend on each attempt"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:177
+#: includes/class.llms.l10n.js.php:339
+msgid "Show Correct Answers"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:178
+#: includes/class.llms.l10n.js.php:340
+msgid "When enabled, students will be shown the correct answer to any question they answered incorrectly."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:179
+#: includes/class.llms.l10n.js.php:341
+msgid "Randomize Question Order"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:180
+#: includes/class.llms.l10n.js.php:342
+msgid "Display questions in a random order for each attempt. Content questions are locked into their defined positions."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:181
+#: includes/class.llms.l10n.js.php:343
+msgid "Disable Retake"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:182
+#: includes/class.llms.l10n.js.php:344
+msgid "Prevent quiz retake after student passed the quiz."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:183
+#: includes/class.llms.l10n.js.php:345
+msgid "Question Bank"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:184
+#: includes/class.llms.l10n.js.php:346
+msgid "A question bank helps prevent cheating and reinforces learning by allowing instructors to create assessments with randomized questions pulled from a bank of questions. (Available in Advanced Quizzes addon)"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:185
+#: includes/class.llms.l10n.js.php:347
+msgid "Get LifterLMS Advanced Quizzes"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:193
+#: includes/class.llms.l10n.js.php:385
+msgid "Are you sure you want to detach this %s?"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:201
+#: includes/class.llms.l10n.js.php:386
+msgid "Select an image"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:202
+#: includes/class.llms.l10n.js.php:387
+msgid "Use this image"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:210
+#: includes/class.llms.l10n.js.php:388
+msgid "Are you sure you want to move this %s to the trash?"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:218
+#: includes/class.llms.l10n.js.php:403
+msgid "%1$s Assignment"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:220
+#: includes/class.llms.l10n.js.php:405
+msgid "Search for existing assignments..."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:221
+#: includes/class.llms.l10n.js.php:406
+msgid "Get Your Students Taking Action"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:222
+#: includes/class.llms.l10n.js.php:407
+msgid "Get Assignments Now!"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:223
+#: includes/class.llms.l10n.js.php:408
+msgid "Unlock LifterLMS Assignments"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:233
+#: includes/class.llms.l10n.js.php:411
+msgid "Search for existing lessons..."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:241
+#: includes/class.llms.l10n.js.php:392
+msgid "Searching..."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:242
+#: includes/class.llms.l10n.js.php:393
+msgid "Attach"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:252
+#: includes/class.llms.l10n.js.php:398
+msgid "Are you sure you want to delete this question?"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:260
+#: includes/class.llms.l10n.js.php:396
+#: includes/class.llms.question.types.php:157
+msgid "Add Existing Question"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:261
+#: includes/class.llms.l10n.js.php:397
+msgid "Search for existing questions..."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:269
+#: includes/class.llms.l10n.js.php:399
+msgid "An error occurred while trying to load the questions. Please refresh the page and try again."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:271
+#: includes/class.llms.l10n.js.php:401
+msgid "Search for existing quizzes..."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:272
+#: includes/class.llms.l10n.js.php:402
+msgid "Add a Question"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:280
+#: includes/class.llms.l10n.js.php:389
+msgid "Use SoundCloud or Spotify audio URLS."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:281
+#: includes/class.llms.l10n.js.php:390
+msgid "Permalink"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:290
+msgid "Select an Image"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:291
+msgid "Select Image"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:299
+msgid "An error was encountered generating the export"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:307
+msgid "Select a Course/Membership"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:308
+msgid "Select a student"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:309
+msgid "Error: %s"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:317
+msgid "Filter by Student(s)"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:318
+msgid "Error"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:319
+msgid "Request timed out"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:320
+msgid "Retry"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:419
+msgid "There was an error loading the necessary resources. Please try again."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:420
+msgid "After deleting this access plan, any students subscribed to this plan will still have access and will continue to make recurring payments according to the access plan's settings. If you wish to terminate their plans you must do so manually. This action cannot be reversed."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:421
+msgid "An error was encountered during the save attempt. Please try again."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:429
+msgid "Please select a student to enroll"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:437
+#: includes/class.llms.l10n.js.php:499
+msgid "Are you sure you want to delete this row? This cannot be undone."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:438
+#: includes/class.llms.l10n.js.php:507
+msgid "Click okay to enroll all active members into the selected course. Enrollment will take place in the background and you may leave your site after confirmation. This action cannot be undone!"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:439
+#: includes/class.llms.l10n.js.php:508
+msgid "\"%s\" is already in the course list."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:443
+#: includes/class.llms.l10n.js.php:512
+#: templates/admin/post-types/order-transactions.php:89
+msgid "Refund"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:444
+#: includes/class.llms.l10n.js.php:513
+#: templates/admin/post-types/order-transactions.php:113
+msgid "Record a Manual Payment"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:445
+#: includes/class.llms.l10n.js.php:514
+msgid "Copy this code and paste it into the desired area"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:454
+msgid "Remarks to Student"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:463
+msgid "Are you sure you wish to quit this quiz attempt?"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:464
+msgid "Grading Quiz..."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:465
+msgid "Loading Question..."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:466
+msgid "An unknown error occurred. Please try again."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:467
+msgid "Loading Quiz..."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:468
+msgid "Time Remaining"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:469
+msgid "Next Question"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:470
+msgid "Complete Quiz"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:471
+msgid "Previous Question"
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:472
+msgid "Loading..."
+msgstr ""
+
+#: includes/class.llms.l10n.js.php:473
+msgid "You must select an answer to continue."
+msgstr ""
+
+#: includes/class.llms.lesson.handler.php:41
+#: includes/class.llms.post.handler.php:221
+msgid "unassigned"
+msgstr ""
+
+#: includes/class.llms.nav.menus.php:99
+msgid "Custom Link"
+msgstr ""
+
+#: includes/class.llms.nav.menus.php:119
+msgctxt "customizer menu section title"
+msgid "LifterLMS"
+msgstr ""
+
+#: includes/class.llms.nav.menus.php:213
+#: includes/class.llms.nav.menus.php:214
+msgid "Sign In"
+msgstr ""
+
+#: includes/class.llms.nav.menus.php:218
+#: includes/class.llms.nav.menus.php:219
+#: includes/class.llms.student.dashboard.php:218
+msgid "Sign Out"
+msgstr ""
+
+#: includes/class.llms.nav.menus.php:322
+msgid "Select all"
+msgstr ""
+
+#: includes/class.llms.nav.menus.php:325
+msgid "Add to menu"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:163
+#: includes/class.llms.person.handler.php:252
+#: includes/schemas/llms-user-information-fields.php:39
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Email Address"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:163
+#: includes/class.llms.person.handler.php:252
+msgid "Username or Email Address"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:171
+#: includes/class.llms.person.handler.php:286
+#: includes/schemas/llms-user-information-fields.php:47
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Password"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:180
+#: templates/global/form-login.php:34
+msgid "Login"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:188
+msgid "Remember me"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:197
+msgid "Lost your password?"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:221
+msgid "Lost your password? Enter your email address and we will send you a link to reset it."
+msgstr ""
+
+#: includes/class.llms.person.handler.php:223
+msgid "Lost your password? Enter your username or email address and we will send you a link to reset it."
+msgstr ""
+
+#: includes/class.llms.person.handler.php:259
+#: includes/class.llms.person.handler.php:351
+#: templates/emails/reset-password.php:15
+msgid "Reset Password"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:296
+msgid "Confirm Password"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:304
+msgid "A strong password is required. The password must be at least 6 characters in length. Consider adding letters, numbers, and symbols to increase the password strength."
+msgstr ""
+
+#: includes/class.llms.person.handler.php:473
+msgid "Could not find an account with the supplied email address and password combination."
+msgstr ""
+
+#: includes/class.llms.person.handler.php:507
+msgid "%s is a required field"
+msgstr ""
+
+#: includes/class.llms.person.handler.php:514
+msgid "%s must be a valid email address"
+msgstr ""
+
+#: includes/class.llms.post-types.php:149
+msgctxt "Order status"
+msgid "Completed"
+msgstr ""
+
+#: includes/class.llms.post-types.php:150
+msgid "Completed (%s) "
+msgid_plural "Completed (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:155
+msgctxt "Order status"
+msgid "Active"
+msgstr ""
+
+#: includes/class.llms.post-types.php:156
+msgid "Active (%s) "
+msgid_plural "Active (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:159
+msgctxt "Order status"
+msgid "Expired"
+msgstr ""
+
+#: includes/class.llms.post-types.php:160
+msgid "Expired (%s) "
+msgid_plural "Expired (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:163
+msgctxt "Order status"
+msgid "On Hold"
+msgstr ""
+
+#: includes/class.llms.post-types.php:164
+msgid "On Hold (%s) "
+msgid_plural "On Hold (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:167
+msgctxt "Order status"
+msgid "Pending Cancellation"
+msgstr ""
+
+#: includes/class.llms.post-types.php:168
+msgid "Pending Cancellation (%s) "
+msgid_plural "Pending Cancellation (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:173
+msgctxt "Order status"
+msgid "Pending Payment"
+msgstr ""
+
+#: includes/class.llms.post-types.php:174
+msgid "Pending Payment (%s) "
+msgid_plural "Pending Payment (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:177
+msgctxt "Order status"
+msgid "Cancelled"
+msgstr ""
+
+#: includes/class.llms.post-types.php:178
+msgid "Cancelled (%s) "
+msgid_plural "Cancelled (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:181
+msgctxt "Order status"
+msgid "Refunded"
+msgstr ""
+
+#: includes/class.llms.post-types.php:182
+#: includes/class.llms.post-types.php:1223
+msgid "Refunded (%s) "
+msgid_plural "Refunded (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:185
+msgctxt "Order status"
+msgid "Failed"
+msgstr ""
+
+#: includes/class.llms.post-types.php:186
+#: includes/class.llms.post-types.php:1207
+msgid "Failed (%s) "
+msgid_plural "Failed (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:459
+msgctxt "Admin menu name"
+msgid "Courses"
+msgstr ""
+
+#: includes/class.llms.post-types.php:460
+msgid "Add Course"
+msgstr ""
+
+#: includes/class.llms.post-types.php:461
+msgid "Add New Course"
+msgstr ""
+
+#: includes/class.llms.post-types.php:467
+msgid "Search Courses"
+msgstr ""
+
+#: includes/class.llms.post-types.php:468
+msgid "No Courses found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:469
+msgid "No Courses found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:470
+msgid "Parent Course"
+msgstr ""
+
+#: includes/class.llms.post-types.php:498
+msgid "Sections"
+msgstr ""
+
+#: includes/class.llms.post-types.php:500
+msgid "Add Section"
+msgstr ""
+
+#: includes/class.llms.post-types.php:503
+msgid "Edit Section"
+msgstr ""
+
+#: includes/class.llms.post-types.php:505
+#: includes/class.llms.post-types.php:506
+msgid "View Section"
+msgstr ""
+
+#: includes/class.llms.post-types.php:507
+msgid "Search Sections"
+msgstr ""
+
+#: includes/class.llms.post-types.php:508
+msgid "No Sections found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:509
+msgid "No Sections found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:510
+msgid "Parent Sections"
+msgstr ""
+
+#: includes/class.llms.post-types.php:511
+msgctxt "Admin menu name"
+msgid "Sections"
+msgstr ""
+
+#: includes/class.llms.post-types.php:534
+msgid "Add Lesson"
+msgstr ""
+
+#: includes/class.llms.post-types.php:537
+msgid "Edit Lesson"
+msgstr ""
+
+#: includes/class.llms.post-types.php:539
+#: includes/class.llms.post-types.php:540
+msgid "View Lesson"
+msgstr ""
+
+#: includes/class.llms.post-types.php:541
+msgid "Search Lessons"
+msgstr ""
+
+#: includes/class.llms.post-types.php:542
+msgid "No Lessons found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:543
+msgid "No Lessons found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:544
+msgid "Parent Lessons"
+msgstr ""
+
+#: includes/class.llms.post-types.php:545
+msgctxt "Admin menu name"
+msgid "Lessons"
+msgstr ""
+
+#: includes/class.llms.post-types.php:574
+msgid "Add New Quiz"
+msgstr ""
+
+#: includes/class.llms.post-types.php:578
+#: includes/class.llms.post-types.php:579
+msgid "View Quiz"
+msgstr ""
+
+#: includes/class.llms.post-types.php:580
+msgid "Search Quiz"
+msgstr ""
+
+#: includes/class.llms.post-types.php:581
+msgid "No Quizzes found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:582
+msgid "No Quizzes found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:583
+msgid "Parent Quizzes"
+msgstr ""
+
+#: includes/class.llms.post-types.php:584
+msgctxt "Admin menu name"
+msgid "Quizzes"
+msgstr ""
+
+#: includes/class.llms.post-types.php:610
+msgid "Questions"
+msgstr ""
+
+#: includes/class.llms.post-types.php:611
+#: includes/class.llms.question.types.php:66
+msgid "Question"
+msgstr ""
+
+#: includes/class.llms.post-types.php:613
+msgid "Add New Question"
+msgstr ""
+
+#: includes/class.llms.post-types.php:615
+msgid "Edit Question"
+msgstr ""
+
+#: includes/class.llms.post-types.php:616
+msgid "New Question"
+msgstr ""
+
+#: includes/class.llms.post-types.php:617
+#: includes/class.llms.post-types.php:618
+msgid "View Question"
+msgstr ""
+
+#: includes/class.llms.post-types.php:619
+msgid "Search Questions"
+msgstr ""
+
+#: includes/class.llms.post-types.php:620
+msgid "No Questions found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:621
+msgid "No Questions found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:622
+msgid "Parent Questions"
+msgstr ""
+
+#: includes/class.llms.post-types.php:623
+msgctxt "Admin menu name"
+msgid "Quiz Questions"
+msgstr ""
+
+#: includes/class.llms.post-types.php:648
+msgctxt "Admin menu name"
+msgid "Memberships"
+msgstr ""
+
+#: includes/class.llms.post-types.php:649
+msgid "Add Membership"
+msgstr ""
+
+#: includes/class.llms.post-types.php:650
+msgid "Add New Membership"
+msgstr ""
+
+#: includes/class.llms.post-types.php:652
+msgid "Edit Membership"
+msgstr ""
+
+#: includes/class.llms.post-types.php:653
+msgid "New Membership"
+msgstr ""
+
+#: includes/class.llms.post-types.php:654
+#: includes/class.llms.post-types.php:655
+msgid "View Membership"
+msgstr ""
+
+#: includes/class.llms.post-types.php:656
+msgid "Search Memberships"
+msgstr ""
+
+#: includes/class.llms.post-types.php:657
+msgid "No Memberships found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:658
+msgid "No Memberships found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:659
+msgid "Parent Membership"
+msgstr ""
+
+#: includes/class.llms.post-types.php:671
+msgctxt "membership url slug"
+msgid "membership"
+msgstr ""
+
+#: includes/class.llms.post-types.php:689
+msgid "Engagement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:690
+msgid "Add Engagement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:691
+msgid "Add New Engagement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:693
+msgid "Edit Engagement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:694
+msgid "New Engagement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:695
+#: includes/class.llms.post-types.php:696
+msgid "View Engagement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:697
+msgid "Search Engagement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:698
+msgid "No Engagement found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:699
+msgid "No Engagement found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:700
+msgid "Parent Engagement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:701
+msgctxt "Admin menu name"
+msgid "Engagements"
+msgstr ""
+
+#: includes/class.llms.post-types.php:724
+#: includes/privacy/class-llms-privacy-exporters.php:518
+msgid "Orders"
+msgstr ""
+
+#: includes/class.llms.post-types.php:726
+msgid "Add Order"
+msgstr ""
+
+#: includes/class.llms.post-types.php:727
+msgid "Add New Order"
+msgstr ""
+
+#: includes/class.llms.post-types.php:729
+msgid "Edit Order"
+msgstr ""
+
+#: includes/class.llms.post-types.php:730
+msgid "New Order"
+msgstr ""
+
+#: includes/class.llms.post-types.php:731
+#: includes/class.llms.post-types.php:732
+msgid "View Order"
+msgstr ""
+
+#: includes/class.llms.post-types.php:733
+msgid "Search Orders"
+msgstr ""
+
+#: includes/class.llms.post-types.php:734
+msgid "No Orders found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:735
+msgid "No Orders found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:736
+msgid "Parent Orders"
+msgstr ""
+
+#: includes/class.llms.post-types.php:737
+#: includes/class.llms.post-types.php:776
+msgctxt "Admin menu name"
+msgid "Orders"
+msgstr ""
+
+#: includes/class.llms.post-types.php:764
+#: templates/myaccount/view-order-transactions.php:20
+msgid "Transaction"
+msgstr ""
+
+#: includes/class.llms.post-types.php:765
+msgid "Add Transaction"
+msgstr ""
+
+#: includes/class.llms.post-types.php:766
+msgid "Add New Transaction"
+msgstr ""
+
+#: includes/class.llms.post-types.php:768
+msgid "Edit Transaction"
+msgstr ""
+
+#: includes/class.llms.post-types.php:769
+msgid "New Transaction"
+msgstr ""
+
+#: includes/class.llms.post-types.php:770
+#: includes/class.llms.post-types.php:771
+msgid "View Transaction"
+msgstr ""
+
+#: includes/class.llms.post-types.php:772
+msgid "Search Transactions"
+msgstr ""
+
+#: includes/class.llms.post-types.php:773
+msgid "No Transactions found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:774
+msgid "No Transactions found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:775
+msgid "Parent Transactions"
+msgstr ""
+
+#: includes/class.llms.post-types.php:801
+msgid "Achievement Templates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:802
+msgid "Achievement Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:803
+msgid "Add Achievement Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:804
+msgid "Add New Achievement Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:806
+msgid "Edit Achievement Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:807
+msgid "New Achievement Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:808
+#: includes/class.llms.post-types.php:809
+msgid "View Achievement Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:810
+msgid "Search Achievement Templates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:811
+msgid "No Achievement Templates found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:812
+msgid "No Achievement Templates found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:813
+msgid "Parent Achievement Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:814
+msgctxt "Admin menu name"
+msgid "Achievements"
+msgstr ""
+
+#: includes/class.llms.post-types.php:815
+#: includes/class.llms.post-types.php:854
+#: includes/notifications/views/class.llms.notification.view.achievement.earned.php:96
+msgid "Achievement Image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:816
+msgid "Set achievement image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:817
+msgid "Remove achievement image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:818
+msgid "Use achievement image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:840
+msgid "Awarded Achievements"
+msgstr ""
+
+#: includes/class.llms.post-types.php:841
+msgid "Awarded Achievement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:842
+msgid "Award Achievement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:843
+msgid "Award New Achievement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:845
+msgid "Edit Awarded Achievement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:846
+msgid "New Awarded Achievement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:847
+#: includes/class.llms.post-types.php:848
+msgid "View Awarded Achievement"
+msgstr ""
+
+#: includes/class.llms.post-types.php:849
+msgid "Search Awarded Achievements"
+msgstr ""
+
+#: includes/class.llms.post-types.php:850
+msgid "No Awarded Achievements found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:851
+msgid "No Awarded Achievements found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:852
+msgid "Parent Awarded Achievements"
+msgstr ""
+
+#: includes/class.llms.post-types.php:853
+msgctxt "Admin menu name"
+msgid "Awarded Achievements"
+msgstr ""
+
+#: includes/class.llms.post-types.php:855
+msgid "Set awarded achievement image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:856
+msgid "Remove awarded achievement image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:857
+msgid "Use awarded achievement image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:859
+msgid "This is where you can view all of the awarded achievements."
+msgstr ""
+
+#: includes/class.llms.post-types.php:889
+msgid "Certificate Templates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:890
+msgid "Certificate Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:891
+msgid "Add Certificate Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:892
+msgid "Add New Certificate Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:893
+msgid "Edit Certificate Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:894
+msgid "New Certificate Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:895
+#: includes/class.llms.post-types.php:896
+msgid "View Certificate Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:897
+msgid "Search Certificate Templates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:898
+msgid "No Certificate Templates found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:899
+msgid "No Certificate Templates found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:900
+msgid "Parent Certificate Templates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:901
+msgctxt "Admin menu name"
+msgid "Certificates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:921
+msgid "Awarded Certificates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:922
+msgid "Awarded Certificate"
+msgstr ""
+
+#: includes/class.llms.post-types.php:923
+msgid "Award Certificate"
+msgstr ""
+
+#: includes/class.llms.post-types.php:924
+msgid "Award New Certificate"
+msgstr ""
+
+#: includes/class.llms.post-types.php:925
+msgid "Edit Awarded Certificate"
+msgstr ""
+
+#: includes/class.llms.post-types.php:926
+msgid "New Awarded Certificate"
+msgstr ""
+
+#: includes/class.llms.post-types.php:927
+#: includes/class.llms.post-types.php:928
+msgid "View Awarded Certificate"
+msgstr ""
+
+#: includes/class.llms.post-types.php:929
+msgid "Search Awarded Certificates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:930
+msgid "No Awarded Certificates found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:931
+msgid "No Awarded Certificates found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:932
+msgid "Parent Awarded Certificates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:933
+msgctxt "Admin menu name"
+msgid "Awarded Certificates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:956
+msgid "Email Templates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:957
+msgid "Email Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:958
+msgid "Add Email Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:959
+msgid "Add New Email Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:961
+msgid "Edit Email Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:962
+msgid "New Email Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:963
+#: includes/class.llms.post-types.php:964
+msgid "View Email Template"
+msgstr ""
+
+#: includes/class.llms.post-types.php:965
+msgid "Search Email Templates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:966
+msgid "No Emails found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:967
+msgid "No Emails found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:968
+msgid "Parent Email Templates"
+msgstr ""
+
+#: includes/class.llms.post-types.php:969
+msgctxt "Admin menu name"
+msgid "Emails"
+msgstr ""
+
+#: includes/class.llms.post-types.php:991
+msgid "Coupons"
+msgstr ""
+
+#: includes/class.llms.post-types.php:993
+msgid "Add Coupon"
+msgstr ""
+
+#: includes/class.llms.post-types.php:994
+msgid "Add New Coupon"
+msgstr ""
+
+#: includes/class.llms.post-types.php:996
+msgid "Edit Coupon"
+msgstr ""
+
+#: includes/class.llms.post-types.php:997
+msgid "New Coupon"
+msgstr ""
+
+#: includes/class.llms.post-types.php:998
+#: includes/class.llms.post-types.php:999
+msgid "View Coupon"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1000
+msgid "Search Coupon"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1001
+msgid "No Coupon found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1002
+msgid "No Coupon found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1003
+msgid "Parent Coupon"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1004
+msgctxt "Admin menu name"
+msgid "Coupons"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1026
+msgid "Vouchers"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1027
+msgid "Voucher"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1028
+msgid "Add Voucher"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1029
+msgid "Add New Voucher"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1031
+msgid "Edit Voucher"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1032
+msgid "New Voucher"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1033
+#: includes/class.llms.post-types.php:1034
+msgid "View Voucher"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1035
+msgid "Search Voucher"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1036
+msgid "No Voucher found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1037
+msgid "No Voucher found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1038
+msgid "Parent Voucher"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1039
+msgctxt "Admin menu name"
+msgid "Vouchers"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1062
+#: includes/functions/llms.functions.templates.dashboard.php:1114
+msgid "Review"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1063
+msgctxt "Admin menu name"
+msgid "Reviews"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1064
+msgid "Add Review"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1065
+msgid "Add New Review"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1067
+msgid "Edit Review"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1068
+msgid "New Review"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1069
+#: includes/class.llms.post-types.php:1070
+msgid "View Review"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1071
+msgid "Search Reviews"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1072
+msgid "No Reviews found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1073
+msgid "No Reviews found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1074
+msgid "Parent Review"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1097
+#: includes/functions/llms-functions-access-plans.php:105
+#: templates/checkout/form-summary.php:12
+#: templates/myaccount/view-order-information.php:28
+#: blocks/access-plan-button/index.js:1
+msgid "Access Plan"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1098
+msgid "Add Access Plan"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1099
+msgid "Add New Access Plan"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1101
+msgid "Edit Access Plan"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1103
+#: includes/class.llms.post-types.php:1104
+msgid "View Access Plan"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1105
+msgid "Search Access Plans"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1106
+msgid "No Access Plans found"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1107
+msgid "No Access Plans found in trash"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1108
+msgid "Parent Access Plans"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1109
+msgctxt "Admin menu name"
+msgid "Access Plans"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1157
+msgid "Background Image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1158
+msgid "Set background image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1159
+msgid "Remove background image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1160
+msgid "Use background image"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1202
+msgctxt "Transaction status"
+msgid "Failed"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1210
+msgctxt "Transaction status"
+msgid "Pending"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1215
+msgid "Pending (%s) "
+msgid_plural "Pending (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:1218
+msgctxt "Transaction status"
+msgid "Refunded"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1226
+msgctxt "Transaction status"
+msgid "Succeeded"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1231
+msgid "Succeeded (%s) "
+msgid_plural "Succeeded (%s) "
+msgstr[0] ""
+msgstr[1] ""
+
+#: includes/class.llms.post-types.php:1286
+#: includes/class.llms.post-types.php:1288
+msgid "Course Categories"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1289
+msgid "Course Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1290
+#: includes/class.llms.post-types.php:1421
+msgctxt "Admin menu name"
+msgid "Categories"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1291
+msgid "Search Course Categories"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1292
+msgid "All Course Categories"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1293
+msgid "Parent Course Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1294
+msgid "Parent Course Category:"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1295
+msgid "Edit Course Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1296
+msgid "Update Course Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1297
+msgid "Add New Course Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1298
+msgid "New Course Category Name"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1319
+#: includes/class.llms.post-types.php:1321
+msgid "Course Difficulties"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1322
+msgid "Course Difficulty"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1323
+msgctxt "Admin menu name"
+msgid "Difficulties"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1324
+msgid "Search Course Difficulties"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1325
+msgid "All Course Difficulties"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1326
+msgid "Parent Course Difficulty"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1327
+msgid "Parent Course Difficulty:"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1328
+msgid "Edit Course Difficulty"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1329
+msgid "Update Course Difficulty"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1330
+msgid "Add New Course Difficulty"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1331
+msgid "New Course Difficulty Name"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1351
+#: includes/class.llms.post-types.php:1353
+msgid "Course Tags"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1354
+msgid "Course Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1355
+#: includes/class.llms.post-types.php:1455
+msgctxt "Admin menu name"
+msgid "Tags"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1356
+msgid "Search Course Tags"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1357
+msgid "All Course Tags"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1358
+msgid "Parent Course Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1359
+msgid "Parent Course Tag:"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1360
+msgid "Edit Course Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1361
+msgid "Update Course Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1362
+msgid "Add New Course Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1363
+msgid "New Course Tag Name"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1383
+#: includes/class.llms.post-types.php:1386
+msgid "Course Track"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1385
+msgid "Course Tracks"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1387
+msgctxt "Admin menu name"
+msgid "Tracks"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1388
+msgid "Search Course Tracks"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1389
+msgid "All Course Tracks"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1390
+msgid "Parent Course Track"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1391
+msgid "Parent Course Track:"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1392
+msgid "Edit Course Track"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1393
+msgid "Update Course Track"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1394
+msgid "Add New Course Track"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1395
+msgid "New Course Track Name"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1417
+#: includes/class.llms.post-types.php:1419
+msgid "Membership Categories"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1420
+msgid "Membership Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1422
+msgid "Search Membership Categories"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1423
+msgid "All Membership Categories"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1424
+msgid "Parent Membership Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1425
+msgid "Parent Membership Category:"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1426
+msgid "Edit Membership Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1427
+msgid "Update Membership Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1428
+msgid "Add New Membership Category"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1429
+msgid "New Membership Category Name"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1451
+#: includes/class.llms.post-types.php:1453
+msgid "Membership Tags"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1454
+msgid "Membership Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1456
+msgid "Search Membership Tags"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1457
+msgid "All Membership Tags"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1458
+msgid "Parent Membership Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1459
+msgid "Parent Membership Tag:"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1460
+msgid "Edit Membership Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1461
+msgid "Update Membership Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1462
+msgid "Add New Membership Tag"
+msgstr ""
+
+#: includes/class.llms.post-types.php:1463
+msgid "New Membership Tag Name"
+msgstr ""
+
+#: includes/class.llms.post.relationships.php:144
+msgid "Use WordPress core `before_delete_post` action hook"
+msgstr ""
+
+#: includes/class.llms.post.relationships.php:170
+msgid "Use WordPress core `deleted_post` action hook."
+msgstr ""
+
+#. Translators: %s = The post type plural name.
+#: includes/class.llms.post.relationships.php:259
+msgid "Sorry, you are not allowed to delete %s with active subscriptions."
+msgstr ""
+
+#: includes/class.llms.query.php:304
+msgctxt "slug"
+msgid "my_certificate"
+msgstr ""
+
+#: includes/class.llms.question.types.php:61
+msgid "Other"
+msgstr ""
+
+#: includes/class.llms.question.types.php:67
+msgid "Enter your question..."
+msgstr ""
+
+#: includes/class.llms.question.types.php:93
+#: includes/class.llms.question.types.php:106
+#: includes/class.llms.question.types.php:132
+msgid "Basic Questions"
+msgstr ""
+
+#: includes/class.llms.question.types.php:97
+msgid "Multiple Choice"
+msgstr ""
+
+#: includes/class.llms.question.types.php:110
+msgid "Picture Choice"
+msgstr ""
+
+#: includes/class.llms.question.types.php:121
+msgid "True"
+msgstr ""
+
+#: includes/class.llms.question.types.php:126
+msgid "False"
+msgstr ""
+
+#: includes/class.llms.question.types.php:136
+msgid "True or False"
+msgstr ""
+
+#: includes/class.llms.question.types.php:146
+msgid "Enter your content title..."
+msgstr ""
+
+#: includes/class.llms.question.types.php:181
+#: includes/class.llms.question.types.php:193
+#: includes/class.llms.question.types.php:205
+#: includes/class.llms.question.types.php:217
+#: includes/class.llms.question.types.php:229
+#: includes/class.llms.question.types.php:241
+#: includes/class.llms.question.types.php:253
+#: includes/class.llms.question.types.php:265
+msgid "Advanced Questions"
+msgstr ""
+
+#: includes/class.llms.question.types.php:185
+msgid "Fill in the Blank"
+msgstr ""
+
+#: includes/class.llms.question.types.php:197
+msgid "Reorder Items"
+msgstr ""
+
+#: includes/class.llms.question.types.php:209
+msgid "Reorder Pictures"
+msgstr ""
+
+#: includes/class.llms.question.types.php:221
+msgid "Short Answer"
+msgstr ""
+
+#: includes/class.llms.question.types.php:233
+msgid "Long Answer"
+msgstr ""
+
+#: includes/class.llms.question.types.php:245
+msgid "File Upload"
+msgstr ""
+
+#: includes/class.llms.question.types.php:269
+msgid "Scale"
+msgstr ""
+
+#: includes/class.llms.review.php:68
+msgid "What Others Have Said"
+msgstr ""
+
+#. Translators: %s = The author display name.
+#: includes/class.llms.review.php:132
+msgid "By: %s"
+msgstr ""
+
+#: includes/class.llms.review.php:157
+msgid "Thank you for your review!"
+msgstr ""
+
+#: includes/class.llms.review.php:168
+msgid "Write a Review"
+msgstr ""
+
+#: includes/class.llms.review.php:171
+msgid "Review Title is required."
+msgstr ""
+
+#: includes/class.llms.review.php:172
+msgid "Review Text"
+msgstr ""
+
+#: includes/class.llms.review.php:173
+msgid "Review Text is required."
+msgstr ""
+
+#: includes/class.llms.review.php:177
+msgid "Leave Review"
+msgstr ""
+
+#: includes/class.llms.roles.php:360
+msgid "LMS Manager"
+msgstr ""
+
+#: includes/class.llms.roles.php:362
+msgid "Instructor's Assistant"
+msgstr ""
+
+#: includes/class.llms.roles.php:387
+msgid "Administrator"
+msgstr ""
+
+#: includes/class.llms.sidebars.php:191
+msgid "Widgets in this area will be shown on LifterLMS courses."
+msgstr ""
+
+#: includes/class.llms.sidebars.php:192
+msgid "Course Sidebar"
+msgstr ""
+
+#: includes/class.llms.sidebars.php:198
+msgid "Widgets in this area will be shown on LifterLMS lessons."
+msgstr ""
+
+#: includes/class.llms.sidebars.php:200
+msgid "Lesson Sidebar"
+msgstr ""
+
+#: includes/class.llms.student.dashboard.php:162
+#: includes/functions/llms.functions.templates.dashboard.php:590
+msgid "My Courses"
+msgstr ""
+
+#: includes/class.llms.student.dashboard.php:169
+msgid "My Grades"
+msgstr ""
+
+#: includes/class.llms.student.dashboard.php:175
+#: includes/functions/llms.functions.templates.dashboard.php:825
+msgid "My Memberships"
+msgstr ""
+
+#: includes/class.llms.student.dashboard.php:182
+#: includes/functions/llms.functions.templates.dashboard.php:497
+msgid "My Achievements"
+msgstr ""
+
+#: includes/class.llms.student.dashboard.php:189
+#: includes/functions/llms.functions.templates.dashboard.php:548
+msgid "My Certificates"
+msgstr ""
+
+#: includes/class.llms.student.dashboard.php:208
+msgid "Redeem a Voucher"
+msgstr ""
+
+#: includes/class.llms.student.dashboard.php:214
+msgid "Order History"
+msgstr ""
+
+#: includes/class.llms.student.dashboard.php:234
+msgid "My Favorites"
+msgstr ""
+
+#: includes/class.llms.template.loader.php:398
+msgid "You must be enrolled in the course to access this quiz."
+msgstr ""
+
+#: includes/class.llms.template.loader.php:727
+msgid "This content is restricted"
+msgstr ""
+
+#. Translators: %s = View manager role name.
+#: includes/class.llms.view.manager.php:156
+msgid "Viewing as %s"
+msgstr ""
+
+#. Translators: %s = View manager role name.
+#: includes/class.llms.view.manager.php:178
+msgid "View as %s"
+msgstr ""
+
+#: includes/class.llms.view.manager.php:257
+msgid "Myself"
+msgstr ""
+
+#: includes/class.llms.view.manager.php:258
+msgid "Visitor"
+msgstr ""
+
+#: includes/class.llms.view.manager.php:415
+msgid "This is a preview of the Open Registration form but Open Registration is currently disabled. Enable Open Registration to allow users to create accounts on this page."
+msgstr ""
+
+#: includes/class.llms.voucher.php:284
+msgid "Voucher code \"%s\" could not be found."
+msgstr ""
+
+#: includes/class.llms.voucher.php:288
+msgid "Voucher code \"%s\" has already been redeemed the maximum number of times."
+msgstr ""
+
+#: includes/class.llms.voucher.php:292
+msgid "Voucher code \"%s\" is no longer valid."
+msgstr ""
+
+#: includes/class.llms.voucher.php:322
+msgid "You have already redeemed this voucher."
+msgstr ""
+
+#: includes/controllers/class-llms-controller-checkout.php:117
+msgid "Only pending orders can be confirmed."
+msgstr ""
+
+#: includes/controllers/class-llms-controller-checkout.php:560
+msgid "Missing order information."
+msgstr ""
+
+#: includes/controllers/class-llms-controller-checkout.php:565
+msgid "Invalid order."
+msgstr ""
+
+#: includes/controllers/class-llms-controller-checkout.php:570
+msgid "Missing gateway information."
+msgstr ""
+
+#: includes/controllers/class-llms-controller-checkout.php:582
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:126
+msgid "Invalid action."
+msgstr ""
+
+#. Translators: %1$s = old payment gateway ID; %2$s = new payment gateway ID.
+#: includes/controllers/class-llms-controller-checkout.php:638
+msgid "Payment source updated by customer. Payment gateway changed from \"%1$s\" to \"%2$s\"."
+msgstr ""
+
+#. translators: %1$d: awarded achievement ID
+#: includes/controllers/class.llms.controller.achievements.php:59
+msgid "Sorry, you are not allowed to edit the awarded achievement #%1$d."
+msgstr ""
+
+#. translators: %1$d: awarded achievement ID
+#: includes/controllers/class.llms.controller.achievements.php:65
+msgid "Sorry, the awarded achievement #%1$d does not have a valid achievement template."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.achievements.php:69
+msgid "Sorry, you are not allowed to edit awarded achievements."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.achievements.php:71
+msgid "Sorry, you are not allowed to sync awarded achievements."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.achievements.php:73
+msgid "Sorry, you need to provide a valid awarded achievement ID."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.achievements.php:75
+msgid "Sorry, you need to provide a valid achievement template ID."
+msgstr ""
+
+#. translators: %1$d: awarded certificate ID
+#: includes/controllers/class.llms.controller.certificates.php:68
+msgid "Sorry, you are not allowed to edit the awarded certificate #%1$d."
+msgstr ""
+
+#. translators: %1$d: awarded certificate ID
+#: includes/controllers/class.llms.controller.certificates.php:74
+msgid "Sorry, the awarded certificate #%1$d does not have a valid certificate template."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.certificates.php:78
+msgid "Sorry, you are not allowed to edit awarded certificates."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.certificates.php:80
+msgid "Sorry, you are not allowed to sync awarded certificates."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.certificates.php:82
+msgid "Sorry, you need to provide a valid awarded certificate ID."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.certificates.php:84
+msgid "Sorry, you need to provide a valid certificate template ID."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.certificates.php:198
+msgid "You are not allowed to manage this certificate."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.lesson.progression.php:69
+msgid "An error occurred, please try again."
+msgstr ""
+
+#. Translators: %s is the title of the lesson.
+#: includes/controllers/class.llms.controller.lesson.progression.php:188
+msgid "The lesson %s is now marked as incomplete."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.orders.php:286
+msgid "Student unenrolled at the end of access period due to subscription cancellation."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.orders.php:293
+msgid "Student unenrolled due to automatic access plan expiration"
+msgstr ""
+
+#. Translators: %d = The deleted user's ID.
+#: includes/controllers/class.llms.controller.orders.php:400
+msgid "Recurring charge skipped. The user (#%d) no longer exists."
+msgstr ""
+
+#. Translators: %s = error message encountered while loading the gateway.
+#: includes/controllers/class.llms.controller.orders.php:433
+msgid "Recurring charge was not processed due to an error encountered while loading the payment gateway: %s."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.orders.php:462
+msgid "Recurring charge skipped because recurring payments are disabled for the payment gateway."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.orders.php:480
+msgid "Recurring charge skipped because recurring payments are disabled in staging mode."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.orders.php:506
+msgid "Recurring charge aborted because the purchased product does not exist anymore."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.orders.php:659
+msgid "Order status changed from %1$s to %2$s"
+msgstr ""
+
+#: includes/controllers/class.llms.controller.orders.php:717
+msgid "The selected payment gateway is not currently enabled."
+msgstr ""
+
+#. Translators: %s = The gateway display name.
+#: includes/controllers/class.llms.controller.orders.php:722
+msgid "%s does not support recurring payments and cannot process this transaction."
+msgstr ""
+
+#. Translators: %s = The gateway display name.
+#: includes/controllers/class.llms.controller.orders.php:727
+msgid "%s does not support single payments and cannot process this transaction."
+msgstr ""
+
+#: includes/controllers/class.llms.controller.orders.php:732
+msgid "An invalid payment method was selected."
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-base.php:24
+msgid "Learn more about %1$sediting LifterLMS courses with Elementor%2$s"
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-continue-button.php:10
+#: includes/elementor/class-llms-elementor-widget-course-continue-button.php:17
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Course Continue Button"
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-continue-button.php:25
+msgid "Show course continue button to students for the current course."
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-instructors.php:10
+#: includes/elementor/class-llms-elementor-widget-course-instructors.php:17
+msgid "Course Instructors"
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-instructors.php:25
+msgid "Show current course instructors."
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-meta-info.php:10
+#: includes/elementor/class-llms-elementor-widget-course-meta-info.php:17
+msgid "Course Meta Information"
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-meta-info.php:25
+msgid "Show current course meta information."
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-progress.php:10
+#: includes/elementor/class-llms-elementor-widget-course-progress.php:17
+#: includes/widgets/class.llms.widget.course.progress.php:36
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Course Progress"
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-progress.php:25
+msgid "Show course progress to students for the current course."
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-syllabus.php:10
+#: includes/elementor/class-llms-elementor-widget-course-syllabus.php:17
+#: includes/widgets/class.llms.widget.course.syllabus.php:29
+msgid "Course Syllabus"
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-course-syllabus.php:25
+msgid "Show course syllabus for the current course."
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-pricing-table.php:10
+#: includes/elementor/class-llms-elementor-widget-pricing-table.php:17
+msgid "Pricing Table"
+msgstr ""
+
+#: includes/elementor/class-llms-elementor-widget-pricing-table.php:25
+msgid "Show pricing table for the current course."
+msgstr ""
+
+#: includes/emails/class.llms.email.reset.password.php:36
+msgid "Password Reset for {site_title}"
+msgstr ""
+
+#: includes/emails/class.llms.email.reset.password.php:37
+msgid "Reset Your Password"
+msgstr ""
+
+#. Translators: %s = form location ID.
+#: includes/forms/class-llms-form-handler.php:66
+msgid "The form location \"%s\" is invalid."
+msgstr ""
+
+#: includes/forms/class-llms-form-handler.php:70
+msgid "You must be logged in to perform this action."
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:228
+msgid "LifterLMS Forms"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:230
+msgid "Forms"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:231
+msgid "Form"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:232
+msgctxt "Admin menu name"
+msgid "Forms"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:233
+#: includes/forms/class-llms-form-post-type.php:234
+#: assets/js/llms-admin-forms.js:32
+msgid "Add New Form"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:236
+#: includes/forms/class-llms-forms-admin-bar.php:62
+msgid "Edit Form"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:237
+#: includes/forms/class-llms-form-post-type.php:238
+msgid "View Form"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:239
+msgid "Search Forms"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:240
+msgid "No Forms found"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:241
+msgid "No Forms found in trash"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:288
+msgid "Determines the front-end location where the form is displayed."
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:291
+msgid "Determines whether or not to display the form's title on the front-end."
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:295
+msgid "The alternative form title to be shown on checkout for free access plans."
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:296
+#: templates/admin/reporting/tabs/students/information.php:26
+msgid "Student Information"
+msgstr ""
+
+#: includes/forms/class-llms-form-post-type.php:299
+msgid "Determines if the form is a core form required for basic site functionality."
+msgstr ""
+
+#. Translators: %s label of the controller field.
+#: includes/forms/class-llms-form-templates.php:198
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Confirm %s"
+msgstr ""
+
+#: includes/forms/class-llms-form-templates.php:420
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Have a voucher?"
+msgstr ""
+
+#: includes/forms/class-llms-form-templates.php:421
+#: templates/myaccount/form-redeem-voucher.php:24
+#: templates/myaccount/form-redeem-voucher.php:25
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Voucher Code"
+msgstr ""
+
+#: includes/forms/class-llms-form-validator.php:194
+msgid "The %1$s must be at least %2$d characters in length."
+msgstr ""
+
+#. Translators: %s user submitted value.
+#: includes/forms/class-llms-form-validator.php:217
+msgid "The email address \"%s\" is not valid."
+msgstr ""
+
+#. Translators: %1$s field label or name; %2$s = user submitted value.
+#: includes/forms/class-llms-form-validator.php:241
+msgid "The %1$s \"%2$s\" is not valid number."
+msgstr ""
+
+#. Translators: %1$s = field label or name; %2$s = user submitted value; %3$d = minimum allowed number.
+#: includes/forms/class-llms-form-validator.php:245
+msgid "The %1$s \"%2$s\" must be greater than or equal to %3$d."
+msgstr ""
+
+#. Translators: %1$s = field label or name; %2$s = user submitted value; %3$d = maximum allowed number.
+#: includes/forms/class-llms-form-validator.php:248
+msgid "The %1$s \"%2$s\" must be less than or equal to %3$d."
+msgstr ""
+
+#: includes/forms/class-llms-form-validator.php:267
+msgid "You must be logged in to update your password."
+msgstr ""
+
+#: includes/forms/class-llms-form-validator.php:272
+msgid "The submitted password was not correct."
+msgstr ""
+
+#. Translators: %s = user submitted value.
+#: includes/forms/class-llms-form-validator.php:290
+msgid "The phone number \"%s\" is not valid."
+msgstr ""
+
+#. Translators: %s = user submitted value.
+#: includes/forms/class-llms-form-validator.php:309
+msgid "The URL \"%s\" is not valid."
+msgstr ""
+
+#: includes/forms/class-llms-form-validator.php:328
+msgid "An account with the email address \"%s\" already exists."
+msgstr ""
+
+#: includes/forms/class-llms-form-validator.php:347
+msgid "The username \"%s\" is invalid, please try a different username."
+msgstr ""
+
+#: includes/forms/class-llms-form-validator.php:349
+msgid "An account with the username \"%s\" already exists."
+msgstr ""
+
+#: includes/forms/class-llms-form-validator.php:388
+msgid "Cannot validate a form with no user input."
+msgstr ""
+
+#: includes/forms/class-llms-form-validator.php:453
+msgid "%1$s must match %2$s."
+msgstr ""
+
+#. Translators: %s = field label or name.
+#. Translators: %s = field label or id.
+#: includes/forms/class-llms-form-validator.php:490
+#: includes/forms/controllers/class.llms.controller.account.php:427
+msgid "%s is a required field."
+msgstr ""
+
+#: includes/forms/class-llms-forms-dynamic-fields.php:207
+msgctxt "Toggle button for changing email or password"
+msgid "Change %s"
+msgstr ""
+
+#: includes/forms/class-llms-forms-dynamic-fields.php:208
+msgctxt "Cancel password or email address change button text"
+msgid "Cancel"
+msgstr ""
+
+#: includes/forms/class-llms-forms-dynamic-fields.php:570
+msgid "Current %s"
+msgstr ""
+
+#: includes/forms/class-llms-forms-unsupported-versions.php:81
+msgid "Minimum Version Requirements Error"
+msgstr ""
+
+#: includes/forms/class-llms-forms-unsupported-versions.php:82
+msgid "In order to manage LifterLMS Forms you must upgrade to at least WordPress version %s or later or install the latest version of the Gutenberg plugin."
+msgstr ""
+
+#: includes/forms/class-llms-forms-unsupported-versions.php:83
+msgid "If you do not upgrade, your forms will display properly on the frontend and users will be able to create accounts, enroll, and checkout but you will be unable to customize them."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:57
+#: includes/forms/controllers/class.llms.controller.account.php:64
+msgid "Something went wrong. Please try again."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:67
+msgid "Subscription cancelled by student from account page."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:73
+msgid "Enrollment will be cancelled at the end of the prepaid period."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:111
+msgid "Please log in and try again."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:126
+#: includes/forms/controllers/class.llms.controller.registration.php:96
+#: includes/functions/llms.functions.order.php:411
+msgid "An unknown error occurred when attempting to create an account, please try again."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:130
+msgid "Your account information has been saved."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:174
+msgid "Enter a username or e-mail address."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:183
+msgid "Invalid username or e-mail address."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:238
+msgid "Unable to reset password due to an unknown error. Please try again."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:245
+msgid "Check your e-mail for the confirmation link."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:272
+msgid "Voucher redeemed successfully!"
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:302
+msgid "Your password has been updated."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:346
+#: includes/functions/llms.functions.person.php:421
+msgid "This password reset key is invalid or has already been used. Please reset your password again if needed."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.account.php:440
+msgid "The submitted passwords do must match."
+msgstr ""
+
+#: includes/forms/controllers/class.llms.controller.registration.php:80
+msgid "Already logged in! Please log out and try again."
+msgstr ""
+
+#. Translators: %s = The invalid access plan ID.
+#: includes/functions/llms-functions-access-plans.php:69
+msgid "Access Plan ID \"%s\" is not valid."
+msgstr ""
+
+#. Translators: %s = property key ('product_id').
+#: includes/functions/llms-functions-access-plans.php:129
+msgid "Missing required property: \"%s\"."
+msgstr ""
+
+#. Translators: %s = supplied visibility setting.
+#: includes/functions/llms-functions-access-plans.php:178
+msgid "Invalid access plan visibility: \"%s\""
+msgstr ""
+
+#. Translators: %1$s = plan period key name; %2$s = the invalid period.
+#: includes/functions/llms-functions-access-plans.php:186
+msgid "Invalid access plan %1$s: \"%2$s\""
+msgstr ""
+
+#. Translators: %s = supplied checkout redirect type.
+#: includes/functions/llms-functions-access-plans.php:195
+msgid "Invalid checkout redirect type: \"%s\""
+msgstr ""
+
+#. Translators: %d = supplied checkout redirect page ID.
+#: includes/functions/llms-functions-access-plans.php:199
+msgid "Invalid checkout redirect page ID: \"%d\""
+msgstr ""
+
+#. Translators: %s = supplied checkout redirect page URL.
+#: includes/functions/llms-functions-access-plans.php:203
+msgid "Invalid checkout redirect URL: \"%s\""
+msgstr ""
+
+#: includes/functions/llms-functions-access-plans.php:210
+msgid "An error was encountered while creating the access plan"
+msgstr ""
+
+#: includes/functions/llms-functions-access-plans.php:252
+msgid "Year"
+msgstr ""
+
+#: includes/functions/llms-functions-access-plans.php:253
+msgid "Month"
+msgstr ""
+
+#: includes/functions/llms-functions-access-plans.php:254
+msgid "Week"
+msgstr ""
+
+#: includes/functions/llms-functions-access-plans.php:255
+msgid "Day"
+msgstr ""
+
+#: includes/functions/llms-functions-access-plans.php:273
+msgid "Featured"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:129
+msgctxt "course url slug"
+msgid "course"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:130
+msgctxt "course archive url slug"
+msgid "courses"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:131
+msgctxt "membership archive url slug"
+msgid "memberships"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:132
+msgctxt "lesson url slug"
+msgid "lesson"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:133
+msgctxt "quiz url slug"
+msgid "quiz"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:134
+msgctxt "slug"
+msgid "certificate-template"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:135
+msgctxt "slug"
+msgid "certificate"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:136
+msgctxt "slug"
+msgid "course-category"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:137
+msgctxt "slug"
+msgid "course-tag"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:138
+msgctxt "slug"
+msgid "course-track"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:139
+msgctxt "slug"
+msgid "course-difficulty"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:140
+msgctxt "slug"
+msgid "membership-category"
+msgstr ""
+
+#: includes/functions/llms-functions-l10n.php:141
+msgctxt "slug"
+msgid "membership-tag"
+msgstr ""
+
+#: includes/functions/llms-functions-template-view-order.php:25
+msgid "Invalid Order."
+msgstr ""
+
+#: includes/functions/llms-functions-user-information-fields.php:126
+msgid "Address Line 2"
+msgstr ""
+
+#. Translators: %$1s = lesson title; %2$s link of the course prerequisite
+#: includes/functions/llms.functions.access.php:207
+msgctxt "restricted by course prerequisite message"
+msgid "The lesson \"%1$s\" cannot be accessed until the required prerequisite course \"%2$s\" is completed."
+msgstr ""
+
+#. Translators: %$1s = lesson title; %2$s link of the track prerequisite
+#: includes/functions/llms.functions.access.php:223
+msgctxt "restricted by course track prerequisite message"
+msgid "The lesson \"%1$s\" cannot be accessed until the required prerequisite track \"%2$s\" is completed."
+msgstr ""
+
+#. Translators: %$1s = lesson title; %2$s available date
+#: includes/functions/llms.functions.access.php:253
+msgctxt "lesson restricted by drip settings message"
+msgid "The lesson \"%1$s\" will be available on %2$s"
+msgstr ""
+
+#. Translators: %$1s = lesson title; %2$s link of the lesson prerequisite
+#: includes/functions/llms.functions.access.php:269
+msgctxt "lesson restricted by prerequisite message"
+msgid "The lesson \"%1$s\" cannot be accessed until the required prerequisite \"%2$s\" is completed."
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:125
+msgid "Sans-serif"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:131
+msgid "Serif"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:206
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:80
+msgid "Site Title"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:207
+msgid "Site URL"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:213
+msgid "Student User ID"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:215
+msgid "Certificate ID"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:216
+msgid "Sequential Certificate ID"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:232
+msgid "Portrait"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:233
+msgid "Landscape"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:324
+msgctxt "Paper size name"
+msgid "A3"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:330
+msgctxt "Paper size name"
+msgid "A4"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:336
+msgctxt "Paper size name"
+msgid "A5"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:343
+msgctxt "Paper size name"
+msgid "Letter"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:349
+msgctxt "Paper size name"
+msgid "Legal"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:355
+msgctxt "Paper size name"
+msgid "Ledger"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:361
+msgid "User defined"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:397
+msgid "Inches"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:398
+msgctxt "Symbol for inches"
+msgid "\""
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:401
+msgid "Millimeters"
+msgstr ""
+
+#: includes/functions/llms.functions.certificate.php:402
+msgctxt "Symbol for millimeters"
+msgid "mm"
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:72
+msgid "A valid order or access plan must be supplied."
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:77
+msgid "The selected payment gateway is not valid."
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:79
+msgid "The selected payment gateway is not available."
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:82
+msgid "The selected payment gateway is not available for the given plan."
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:84
+msgid "The selected payment gateway does not support recurring payments."
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:86
+msgid "The selected payment gateway does not support one-time payments."
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:333
+msgid "You must agree to the %s to continue."
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:340
+msgid "Missing an Access Plan ID."
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:347
+msgid "Invalid Access Plan ID."
+msgstr ""
+
+#: includes/functions/llms.functions.order.php:392
+msgid "Missing customer information."
+msgstr ""
+
+#. Translators: %2$s = The product type (course/membership); %1$s = product permalink.
+#: includes/functions/llms.functions.order.php:424
+#: includes/shortcodes/class.llms.shortcode.checkout.php:81
+msgid "You already have access to this %2$s! Visit your dashboard here. "
+msgstr ""
+
+#: includes/functions/llms.functions.person.php:212
+msgid "strong"
+msgstr ""
+
+#: includes/functions/llms.functions.person.php:213
+msgid "medium"
+msgstr ""
+
+#: includes/functions/llms.functions.person.php:214
+msgid "weak"
+msgstr ""
+
+#: includes/functions/llms.functions.person.php:215
+msgid "very weak"
+msgstr ""
+
+#: includes/functions/llms.functions.person.php:404
+msgid "The password reset key could not be found. Please reset your password again if needed."
+msgstr ""
+
+#: includes/functions/llms.functions.person.php:409
+msgid "The password reset key is in an invalid format. Please reset your password again if needed."
+msgstr ""
+
+#: includes/functions/llms.functions.privacy.php:41
+msgid "Your personal data will be used to process your enrollment, support your experience on this website, and for other purposes described in our {{policy}}."
+msgstr ""
+
+#: includes/functions/llms.functions.privacy.php:91
+msgid "I have read and agree to the {{terms}}."
+msgstr ""
+
+#: includes/functions/llms.functions.quiz.php:130
+msgid "Incomplete"
+msgstr ""
+
+#: includes/functions/llms.functions.quiz.php:131
+msgid "Pending Review"
+msgstr ""
+
+#: includes/functions/llms.functions.quiz.php:132
+msgid "Fail"
+msgstr ""
+
+#: includes/functions/llms.functions.quiz.php:133
+msgid "Pass"
+msgstr ""
+
+#: includes/functions/llms.functions.quiz.php:167
+msgid "Layout"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.certificates.php:82
+msgid "All certificates"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:207
+msgid "You are not enrolled in any courses."
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:311
+msgid "No favorites found."
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:396
+msgid "You are not enrolled in any memberships."
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:484
+msgid "View All My Achievements"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:536
+msgid "View All My Certificates"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:578
+msgid "View All My Courses"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:774
+msgid "Completion Date"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:813
+msgid "View All My Memberships"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:855
+msgid "View Notifications"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:859
+msgid "Manage Preferences"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.php:1114
+msgid "Start"
+msgstr ""
+
+#: includes/functions/llms.functions.templates.dashboard.widgets.php:59
+msgid "%s ago"
+msgstr ""
+
+#. Translators: %s = Left double arrow character.
+#: includes/functions/llms.functions.templates.loop.php:190
+msgctxt "pagination link text"
+msgid "%s Previous"
+msgstr ""
+
+#. Translators: %s = Right double arrow character.
+#: includes/functions/llms.functions.templates.loop.php:192
+msgctxt "pagination link text"
+msgid "Next %s"
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-300.php:61
+#: includes/models/model.llms.access.plan.php:569
+msgid "Join"
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-300.php:128
+msgid "Members Only"
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-300.php:153
+msgid "One-Time Payment"
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-300.php:197
+msgid "Subscription"
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-300.php:665
+msgid "This order was migrated to the LifterLMS 3.0 data structure. %1$sLearn more%2$s."
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-500.php:66
+msgid "Welcome to LifterLMS 5.0!"
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-500.php:67
+msgid "This new version of LifterLMS brings you the power to build and customize your student information forms using a simple point and click interface constructed on top of the WordPress block editor. Customization like the removal of default fields, changing the text of field labels, or reordering fields within a form is all possible without any code or professional help."
+msgstr ""
+
+#. Translators: %1$s = Opening anchor tag to Forms admin page; %2$s = Closing anchor tag.
+#: includes/functions/updates/llms-functions-updates-500.php:70
+#: includes/functions/updates/llms-functions-updates-600.php:126
+msgid "%1$sGet Started%2$s"
+msgstr ""
+
+#. Translators: %1$s = Opening anchor tag to the welcome blog post on lifterlms.com; %2$s = Closing anchor tag.
+#: includes/functions/updates/llms-functions-updates-500.php:76
+#: includes/functions/updates/llms-functions-updates-600.php:132
+msgid "%1$sRead More%2$s"
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-600.php:122
+msgid "Welcome to LifterLMS 6.0.0!"
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-600.php:123
+msgid "This new version brings you the power to build and customize certificates using the WordPress block editor! Start building beautiful certificates using all the blocks you're already familiar, the new Certificate Title block, and new certificate settings like page size (Letter or A4, for example), orientation, background color, and more. In addition to design features, this version also adds the ability to modify already-awarded certificates and achievements and to sync template updates with the click of a button."
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-3130.php:52
+msgid "Welcome to LifterLMS 3.13.0! We've packed a ton of features into this release: Take a moment to get familiar with the all new %1$scourse builder%3$s and our new %2$suser roles%3$s."
+msgstr ""
+
+#: includes/functions/updates/llms-functions-updates-3160.php:650
+msgid "Welcome to LifterLMS 3.16.0! This update adds significant improvements to the quiz-building experience. Notice quizzes and questions are no longer found under \"Courses\" on the sidebar? Your quizzes have not been deleted but they have been moved! Read more about the all new %1$squiz builder%2$s."
+msgstr ""
+
+#: includes/integrations/class.llms.integration.bbpress.php:50
+#: includes/integrations/class.llms.integration.bbpress.php:126
+msgid "bbPress"
+msgstr ""
+
+#: includes/integrations/class.llms.integration.bbpress.php:51
+msgid "Restrict forums and topics to memberships, add forums to courses, and %1$smore%2$s."
+msgstr ""
+
+#: includes/integrations/class.llms.integration.bbpress.php:133
+msgid "Select forums"
+msgstr ""
+
+#: includes/integrations/class.llms.integration.bbpress.php:135
+msgid "Add forums which will only be available to students currently enrolled in this course."
+msgstr ""
+
+#: includes/integrations/class.llms.integration.bbpress.php:139
+msgid "Private Course Forums"
+msgstr ""
+
+#: includes/integrations/class.llms.integration.bbpress.php:204
+msgid "You must be enrolled in this course to access the course forum."
+msgstr ""
+
+#: includes/integrations/class.llms.integration.bbpress.php:404
+msgid "Student creates a new forum topic"
+msgstr ""
+
+#: includes/integrations/class.llms.integration.bbpress.php:405
+msgid "Student creates a new forum reply"
+msgstr ""
+
+#: includes/integrations/class.llms.integration.buddypress.php:67
+msgid "BuddyPress"
+msgstr ""
+
+#: includes/integrations/class.llms.integration.buddypress.php:68
+msgid "Add LifterLMS information to user profiles and enable membership restrictions for activity, group, and member directories. %1$sLearn More%2$s."
+msgstr ""
+
+#: includes/integrations/class.llms.integration.buddypress.php:101
+msgid "The following LifterLMS Student Dashboard areas will be added to the BuddyPress user profiles"
+msgstr ""
+
+#: includes/integrations/class.llms.integration.buddypress.php:106
+msgid "User Profile Endpoints"
+msgstr ""
+
+#: includes/integrations/class.llms.integration.buddypress.php:144
+#: includes/integrations/class.llms.integration.buddypress.php:433
+msgctxt "BuddyPress profile main nav item slug"
+msgid "courses"
+msgstr ""
+
+#: includes/integrations/class.llms.integration.buddypress.php:157
+msgctxt "BuddyPress profile main nav item label"
+msgid "Courses"
+msgstr ""
+
+#: includes/llms.functions.core.php:337
+msgid "years"
+msgstr ""
+
+#: includes/llms.functions.core.php:338
+msgid "months"
+msgstr ""
+
+#: includes/llms.functions.core.php:339
+msgid "days"
+msgstr ""
+
+#: includes/llms.functions.core.php:458
+msgid "Student creates a new account"
+msgstr ""
+
+#: includes/llms.functions.core.php:459
+msgid "Student Purchases an Access Plan"
+msgstr ""
+
+#: includes/llms.functions.core.php:460
+msgid "Student enrolls in a course"
+msgstr ""
+
+#: includes/llms.functions.core.php:461
+msgid "Student purchases a course"
+msgstr ""
+
+#: includes/llms.functions.core.php:462
+msgid "Student completes a course"
+msgstr ""
+
+#: includes/llms.functions.core.php:464
+msgid "Student completes a lesson"
+msgstr ""
+
+#: includes/llms.functions.core.php:465
+msgid "Student completes a quiz"
+msgstr ""
+
+#: includes/llms.functions.core.php:466
+msgid "Student passes a quiz"
+msgstr ""
+
+#: includes/llms.functions.core.php:467
+msgid "Student fails a quiz"
+msgstr ""
+
+#: includes/llms.functions.core.php:468
+msgid "Student completes a section"
+msgstr ""
+
+#: includes/llms.functions.core.php:469
+msgid "Student completes a course track"
+msgstr ""
+
+#: includes/llms.functions.core.php:470
+msgid "Student enrolls in a membership"
+msgstr ""
+
+#: includes/llms.functions.core.php:471
+msgid "Student purchases a membership"
+msgstr ""
+
+#: includes/llms.functions.core.php:494
+msgid "Award an Achievement"
+msgstr ""
+
+#: includes/llms.functions.core.php:495
+msgid "Award a Certificate"
+msgstr ""
+
+#: includes/llms.functions.core.php:496
+msgid "Send an Email"
+msgstr ""
+
+#: includes/llms.functions.core.php:599
+msgid "Catalog & Search"
+msgstr ""
+
+#: includes/llms.functions.core.php:600
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Catalog only"
+msgstr ""
+
+#: includes/llms.functions.core.php:601
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Search only"
+msgstr ""
+
+#: includes/llms.functions.core.php:760
+#: blocks/courses/index.js:3
+msgid "Cancelled"
+msgstr ""
+
+#: includes/llms.functions.core.php:762
+#: blocks/courses/index.js:3
+msgid "Expired"
+msgstr ""
+
+#: includes/llms.template.functions.php:607
+msgid "Search Results: “%s”"
+msgstr ""
+
+#: includes/llms.template.functions.php:610
+msgid " – Page %s"
+msgstr ""
+
+#: includes/llms.template.functions.php:663
+#: includes/llms.template.functions.php:752
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Continue"
+msgstr ""
+
+#: includes/llms.template.functions.php:737
+#: includes/notifications/controllers/class.llms.notification.controller.course.complete.php:98
+msgid "Course Complete"
+msgstr ""
+
+#: includes/llms.template.functions.php:748
+msgid "Get Started"
+msgstr ""
+
+#: includes/models/model.llms.access.plan.php:380
+#: includes/models/model.llms.lesson.php:385
+msgid "FREE"
+msgstr ""
+
+#: includes/models/model.llms.access.plan.php:591
+msgctxt "Access expiration date"
+msgid "access until %s"
+msgstr ""
+
+#: includes/models/model.llms.access.plan.php:593
+msgctxt "Access period description"
+msgid "%1$d %2$s of access"
+msgstr ""
+
+#: includes/models/model.llms.access.plan.php:619
+msgctxt "subscription schedule"
+msgid "per %s"
+msgstr ""
+
+#: includes/models/model.llms.access.plan.php:621
+msgctxt "subscription schedule"
+msgid "every %1$d %2$s"
+msgstr ""
+
+#: includes/models/model.llms.access.plan.php:627
+msgctxt "subscription # of payments"
+msgid "for %1$d total payments"
+msgstr ""
+
+#: includes/models/model.llms.access.plan.php:651
+msgctxt "trial offer description"
+msgid "for %1$d %2$s"
+msgstr ""
+
+#. Translators: %s = Add-on name.
+#: includes/models/model.llms.add-on.php:91
+msgid "%s was successfully activated."
+msgstr ""
+
+#. Translators: %s = Add-on name.
+#: includes/models/model.llms.add-on.php:95
+msgid "Could not activate %s."
+msgstr ""
+
+#. Translators: %s = Add-on name.
+#: includes/models/model.llms.add-on.php:115
+msgid "%s was successfully deactivated."
+msgstr ""
+
+#. Translators: %s = Add-on name.
+#: includes/models/model.llms.add-on.php:120
+msgid "Could not deactivate %s."
+msgstr ""
+
+#: includes/models/model.llms.add-on.php:214
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:121
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:173
+msgid "Active"
+msgstr ""
+
+#: includes/models/model.llms.add-on.php:215
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:122
+msgid "Inactive"
+msgstr ""
+
+#: includes/models/model.llms.add-on.php:218
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:125
+msgid "Not Installed"
+msgstr ""
+
+#: includes/models/model.llms.add-on.php:224
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:131
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:75
+msgid "N/A"
+msgstr ""
+
+#: includes/models/model.llms.add-on.php:226
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:133
+msgid "Licensed"
+msgstr ""
+
+#: includes/models/model.llms.add-on.php:227
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:134
+msgid "Unlicensed"
+msgstr ""
+
+#. Translators: %s = Add-on title.
+#: includes/models/model.llms.add-on.php:490
+msgid "%s is not installed."
+msgstr ""
+
+#. Translators: %s = Add-on title.
+#: includes/models/model.llms.add-on.php:495
+msgid "%s is active and cannot be uninstalled."
+msgstr ""
+
+#. Translators: %s = add-on type.
+#: includes/models/model.llms.add-on.php:515
+msgid "Cannot uninstall \"%s\" type add-ons."
+msgstr ""
+
+#. Translators: %s = Add-on title.
+#: includes/models/model.llms.add-on.php:532
+msgid "%s was successfully uninstalled."
+msgstr ""
+
+#: includes/models/model.llms.coupon.php:126
+msgctxt "flat rate coupon discount"
+msgid "%s Discount"
+msgstr ""
+
+#: includes/models/model.llms.coupon.php:179
+msgctxt "Remaining coupon uses"
+msgid "Unlimited"
+msgstr ""
+
+#: includes/models/model.llms.coupon.php:284
+msgid "This coupon has reached its usage limit and can no longer be used."
+msgstr ""
+
+#: includes/models/model.llms.coupon.php:288
+msgid "This coupon expired on %s and can no longer be used."
+msgstr ""
+
+#: includes/models/model.llms.coupon.php:292
+#: includes/models/model.llms.coupon.php:296
+msgid "This coupon cannot be used to purchase \"%s\"."
+msgstr ""
+
+#: includes/models/model.llms.order.php:207
+msgctxt "default order note author"
+msgid "LifterLMS"
+msgstr ""
+
+#: includes/models/model.llms.order.php:208
+msgctxt "default order note author"
+msgid "LifterLms"
+msgstr ""
+
+#: includes/models/model.llms.order.php:560
+msgid "To be Determined"
+msgstr ""
+
+#: includes/models/model.llms.order.php:685
+msgid "Anonymous"
+msgstr ""
+
+#. Translators: %1$s = Transaction creation date.
+#: includes/models/model.llms.order.php:733
+msgid "Order – %1$s"
+msgstr ""
+
+#: includes/models/model.llms.order.php:771
+#: includes/models/model.llms.transaction.php:255
+msgid "Payment gateway %s could not be located or is no longer enabled"
+msgstr ""
+
+#: includes/models/model.llms.order.php:892
+msgid "Order is not recurring"
+msgstr ""
+
+#: includes/models/model.llms.order.php:894
+msgid "Invalid order status"
+msgstr ""
+
+#: includes/models/model.llms.order.php:903
+msgid "No more payments due"
+msgstr ""
+
+#: includes/models/model.llms.order.php:1693
+msgid "Order payment plan completed."
+msgstr ""
+
+#: includes/models/model.llms.order.php:1732
+msgid "Maximum retry attempts reached."
+msgstr ""
+
+#. Translators: %s = next attempt date.
+#: includes/models/model.llms.order.php:1756
+msgid "Automatic retry attempt scheduled for %s"
+msgstr ""
+
+#: includes/models/model.llms.order.php:2113
+msgid "Next recurring payment due date is not valid"
+msgstr ""
+
+#: includes/models/model.llms.quiz.attempt.php:601
+msgid "Quiz Attempt #%1$d by %2$s"
+msgstr ""
+
+#: includes/models/model.llms.quiz.attempt.php:625
+msgid "You must be logged in to take a quiz!"
+msgstr ""
+
+#: includes/models/model.llms.quiz.attempt.question.php:142
+msgctxt "Selected quiz choice has been deleted."
+msgid "[Deleted]"
+msgstr ""
+
+#: includes/models/model.llms.quiz.attempt.question.php:239
+msgid "Correct answer"
+msgstr ""
+
+#: includes/models/model.llms.quiz.attempt.question.php:242
+msgid "Incorrect answer"
+msgstr ""
+
+#: includes/models/model.llms.quiz.attempt.question.php:247
+msgid "Awaiting review"
+msgstr ""
+
+#: includes/models/model.llms.student.php:702
+msgctxt "Grade to display when no quizzes taken or available"
+msgid "N/A"
+msgstr ""
+
+#: includes/models/model.llms.student.php:803
+msgctxt "overall grade when no quizzes"
+msgid "N/A"
+msgstr ""
+
+#: includes/models/model.llms.student.quizzes.php:179
+msgctxt "quiz attempts remaining"
+msgid "Unlimited"
+msgstr ""
+
+#. Translators: %1$d = Order ID; %2$s = Transaction creation date.
+#: includes/models/model.llms.transaction.php:187
+msgid "Transaction for Order #%1$d – %2$s"
+msgstr ""
+
+#: includes/models/model.llms.transaction.php:277
+msgid "manual refund"
+msgstr ""
+
+#: includes/models/model.llms.transaction.php:370
+msgid "The selected transaction is not eligible for a refund."
+msgstr ""
+
+#. Translators: %1$s = The requested refund amount; %2$s = the available refundable amount.
+#: includes/models/model.llms.transaction.php:383
+msgid "Requested refund amount was %1$s, the maximum possible refund for this transaction is %2$s."
+msgstr ""
+
+#: includes/models/model.llms.transaction.php:394
+msgid "An unknown error occurred while processing the refund."
+msgstr ""
+
+#. Translators: %s = the payment gateway ID.
+#: includes/models/model.llms.transaction.php:418
+msgid "Selected gateway \"%s\" is inactive or invalid."
+msgstr ""
+
+#. Translators: %s = the payment gateway admin title.
+#: includes/models/model.llms.transaction.php:429
+msgid "Selected gateway \"%s\" does not support refunds."
+msgstr ""
+
+#. Translators: %1$s = The refund amount; %2$d the transaction ID; %3$s The refund method name; %4$s = the refund ID.
+#: includes/models/model.llms.transaction.php:535
+msgid "Refunded %1$s for transaction #%2$d via %3$s [Refund ID: %4$s]"
+msgstr ""
+
+#: includes/models/model.llms.transaction.php:544
+msgid "Refund Notes: "
+msgstr ""
+
+#: includes/models/model.llms.transaction.php:570
+msgid "Single"
+msgstr ""
+
+#: includes/models/model.llms.transaction.php:574
+#: templates/checkout/form-summary.php:15
+msgid "Trial"
+msgstr ""
+
+#: includes/models/model.llms.user.certificate.php:747
+msgid "Loading custom HTML from the certificate template is deprecated. All HTML should be added to the certificate directly via the editor or applied via post content filters."
+msgstr ""
+
+#: includes/models/model.llms.user.postmeta.php:126
+msgid "%1$s earned the achievement \"%2$s\""
+msgstr ""
+
+#: includes/models/model.llms.user.postmeta.php:131
+msgid "%1$s earned the certificate \"%2$s\""
+msgstr ""
+
+#: includes/models/model.llms.user.postmeta.php:136
+msgid "Email \"%1$s\" was sent to %2$s"
+msgstr ""
+
+#: includes/models/model.llms.user.postmeta.php:141
+msgid "%1$s purchased the %2$s"
+msgstr ""
+
+#: includes/models/model.llms.user.postmeta.php:147
+msgid "%1$s enrolled into the %2$s"
+msgstr ""
+
+#: includes/models/model.llms.user.postmeta.php:149
+msgid "%1$s unenrolled from the %2$s"
+msgstr ""
+
+#: includes/models/model.llms.user.postmeta.php:155
+msgid "%1$s completed the %2$s"
+msgstr ""
+
+#. Translators: %s = Processor ID.
+#: includes/notifications/class.llms.notifications.php:114
+#: includes/notifications/class.llms.notifications.php:488
+msgid "The processor \"%s\" does not exist."
+msgstr ""
+
+#. Translators: %s = Processor ID.
+#: includes/notifications/class.llms.notifications.php:528
+msgid "There was an error dispatching the \"%s\" processor."
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.achievement.earned.php:95
+msgid "Achievement Earned"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.certificate.earned.php:95
+msgid "Certificate Earned"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.course.track.complete.php:101
+msgid "Course Track Complete"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.enrollment.php:101
+msgid "Enrollment"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.lesson.complete.php:110
+#: templates/course/complete-lesson-link.php:37
+msgid "Lesson Complete"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.manual.payment.due.php:122
+msgid "Gateway: Manual - Payment Due"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.payment.retry.php:107
+msgid "Payment Retry Scheduled"
+msgstr ""
+
+#. Translators: %1$d = The Order ID; %2$s The customer's full name; %3$s The product title.
+#: includes/notifications/controllers/class.llms.notification.controller.purchase.receipt.php:156
+#: includes/notifications/controllers/class.llms.notification.controller.upcoming.payment.reminder.php:440
+msgid "Order #%1$d from %2$s for \"%3$s\""
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.purchase.receipt.php:170
+msgid "Select a transaction"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.purchase.receipt.php:174
+msgid "Send yourself a test notification using information from the selected transaction."
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.purchase.receipt.php:176
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.failed.php:129
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.graded.php:117
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.passed.php:130
+#: includes/notifications/controllers/class.llms.notification.controller.student.welcome.php:151
+#: includes/notifications/controllers/class.llms.notification.controller.upcoming.payment.reminder.php:460
+msgid "Send a Test"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.purchase.receipt.php:194
+msgid "Purchase Receipt"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.failed.php:114
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.graded.php:101
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.passed.php:114
+msgid "Attempt #%1$d for Quiz \"%2$s\" by %3$s"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.failed.php:123
+msgid "Select a failed quiz"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.failed.php:127
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.graded.php:115
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.passed.php:128
+msgid "Send yourself a test notification using information from the selected quiz."
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.failed.php:178
+msgid "Quizzes: Quiz Failed"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.graded.php:111
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.passed.php:124
+msgid "Select a passed quiz"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.graded.php:158
+msgid "Quizzes: Quiz Graded"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.quiz.passed.php:179
+msgid "Quizzes: Quiz Passed"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.section.complete.php:106
+msgid "Section Complete"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.student.welcome.php:136
+msgid "%1$s <%2$s>"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.student.welcome.php:145
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:91
+msgid "Select a user"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.student.welcome.php:149
+msgid "Send yourself a test notification using information for the selected user."
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.student.welcome.php:166
+msgid "Student Welcome"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.subscription.cancelled.php:101
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:151
+msgid "Subscription Cancellation Notice"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.upcoming.payment.reminder.php:169
+msgid "Upcoming Payment Reminder"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.upcoming.payment.reminder.php:293
+msgid "Upcoming payment reminder passed"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.upcoming.payment.reminder.php:384
+msgid "Reminder days"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.upcoming.payment.reminder.php:385
+msgid "The number of days before the upcoming payment due date when to notify the customer."
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.upcoming.payment.reminder.php:454
+msgid "Select a recurring order"
+msgstr ""
+
+#: includes/notifications/controllers/class.llms.notification.controller.upcoming.payment.reminder.php:458
+msgid "Send yourself a test notification using information from the selected recurring order."
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.achievement.earned.php:97
+msgid "Achievement Image URL"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.achievement.earned.php:127
+msgctxt "Achievement icon alt text"
+msgid "%s Icon"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.achievement.earned.php:170
+msgid "You've been awarded an achievement!"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.certificate.earned.php:97
+msgid "View Full Certificate"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.certificate.earned.php:120
+msgid "Certificate Content"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.certificate.earned.php:122
+msgid "Certificate URL"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.certificate.earned.php:124
+msgid "Mini Certificate"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.certificate.earned.php:227
+msgid "You've earned a certificate!"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.course.complete.php:54
+#: includes/notifications/views/class.llms.notification.view.course.complete.php:129
+#: includes/notifications/views/class.llms.notification.view.course.track.complete.php:54
+#: includes/notifications/views/class.llms.notification.view.course.track.complete.php:130
+#: includes/notifications/views/class.llms.notification.view.lesson.complete.php:54
+#: includes/notifications/views/class.llms.notification.view.lesson.complete.php:147
+#: includes/notifications/views/class.llms.notification.view.section.complete.php:54
+#: includes/notifications/views/class.llms.notification.view.section.complete.php:145
+msgid "Congratulations! %1$s completed %2$s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.course.complete.php:56
+#: includes/notifications/views/class.llms.notification.view.course.track.complete.php:56
+#: includes/notifications/views/class.llms.notification.view.lesson.complete.php:56
+#: includes/notifications/views/class.llms.notification.view.section.complete.php:56
+msgid "Congratulations! You finished %s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.course.complete.php:140
+msgid "%s Completed a Course"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.course.track.complete.php:90
+msgid "Track Title"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.course.track.complete.php:141
+msgid "%s Completed a Track"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.enrollment.php:53
+msgid "Congratulations! %1$s enrolled in %2$s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.enrollment.php:88
+msgid "Type (Course or Membership)"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.enrollment.php:131
+msgid "%1$s enrolled in %2$s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.enrollment.php:142
+msgid "%1$s enrollment success!"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.lesson.complete.php:158
+msgid "%s Completed a Lesson"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:65
+msgid "Head over to your dashboard for payment instructions."
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:78
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:82
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:83
+msgid "Payment Due Date"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:80
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:84
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:43
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:85
+#: includes/privacy/class-llms-privacy.php:100
+msgid "Plan"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:81
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:85
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:44
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:86
+#: templates/admin/post-types/order-transactions.php:29
+#: templates/myaccount/view-order-transactions.php:22
+msgid "Amount"
+msgstr ""
+
+#. Translators: %s= The customer name.
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:85
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:89
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:38
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:94
+msgid "Hello %s,"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:86
+msgid "A payment for your subscription to %1$s is due."
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:87
+msgid "Sign in to your account and %1$spay now%2$s."
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:92
+msgid "Pay Invoice"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:106
+msgid "Pay Now"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:129
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:131
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:88
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:149
+msgid "Customer Address"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:130
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:132
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:89
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:77
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:150
+msgid "Customer Name"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:131
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:133
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:90
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:151
+msgid "Customer Phone"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:133
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:135
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:91
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:78
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:153
+msgid "Order ID"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:134
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:136
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:92
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:154
+msgid "Order URL"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:135
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:137
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:155
+msgid "Payment Amount"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:137
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:139
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:94
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:80
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:157
+msgid "Product Title"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:138
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:140
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:95
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:81
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:158
+msgid "Product Type"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:139
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:141
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:96
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:82
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:159
+msgid "Product Title (Link)"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:206
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:208
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:128
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:225
+msgid "[DELETED ITEM]"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:208
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:210
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:162
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:130
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:227
+msgctxt "generic product type description"
+msgid "Item"
+msgstr ""
+
+#. Translators: %s = The product title.
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:227
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:243
+msgid "A payment is due for your subscription to %s"
+msgstr ""
+
+#. Translators: %s = The order ID.
+#: includes/notifications/views/class.llms.notification.view.manual.payment.due.php:240
+msgid "Payment Due for Order #%s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:67
+msgid "Head over to the order to see what went wrong and update your payment method to reactivate your subscription."
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:90
+msgid "The automatic payment for your subscription to %1$s has failed. We'll automatically retry this charge on %2$s."
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:91
+msgid "To reactivate your subscription you can login to your account and %1$spay now%2$s."
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:94
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:108
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:112
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:126
+#: templates/checkout/form-switch-source.php:42
+msgid "Update Payment Method"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:229
+msgid "Automatic payment for %1$s failed, retry scheduled for %2$s"
+msgstr ""
+
+#. Translators: %s = The order ID.
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:242
+msgid "Automatic payment failed for order #%s"
+msgstr ""
+
+#. Translators: %s = The product title.
+#: includes/notifications/views/class.llms.notification.view.payment.retry.php:245
+msgid "An automatic payment failed for your subscription to %s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:45
+#: templates/myaccount/view-order-information.php:126
+msgid "Payment Method"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:46
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:99
+#: templates/admin/post-types/order-transactions.php:34
+msgid "Transaction ID"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:52
+msgid "View Order Details"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:97
+msgid "Transaction Amount"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:98
+msgid "Transaction Date"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:100
+msgid "Transaction Source"
+msgstr ""
+
+#. Translators: %s = Product Title.
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:196
+msgid "Purchase Receipt for %s"
+msgstr ""
+
+#. Translators: %s = Order ID.
+#: includes/notifications/views/class.llms.notification.view.purchase.receipt.php:208
+msgid "Purchase Receipt for Order #%s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.quiz.failed.php:39
+msgid "You failed %s!"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.quiz.failed.php:63
+msgid "%1$s failed %2$s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.quiz.failed.php:74
+msgid "%s failed a quiz"
+msgstr ""
+
+#. Translators: %s = Quiz attempt grade.
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:56
+msgid "You received a %1$s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:85
+msgid "View the whole attempt"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:122
+msgid "View the attempt"
+msgstr ""
+
+#. Translators: %s = Quiz Title.
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:212
+msgid "Your quiz \"%s\" has been reviewed"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:223
+msgid "Quiz Review Details"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.quiz.passed.php:39
+msgid "Congratulations! You passed %s!"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.quiz.passed.php:63
+msgid "Congratulations! %1$s passed %2$s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.quiz.passed.php:74
+msgid "%s passed a quiz"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.section.complete.php:92
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-sections-controller.php:243
+msgid "Section Title"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.section.complete.php:156
+msgid "%s Completed a Section"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:39
+msgid "Here's some helpful information to help you get started at %s."
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:40
+msgid "Your Login"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:41
+msgid "Your Dashboard"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:42
+msgid "If you forgot or don't have a password you can reset it now so you can login and get started:"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:78
+msgid "Dashboard URL"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:79
+msgid "Password Reset URL"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:82
+msgid "Student Login"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:132
+msgid "Welcome to %s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.student.welcome.php:143
+msgid "Let's get started %s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:37
+msgid "%1$s has cancelled their subscription (#%2$s) to the %3$s %4$s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.subscription.cancelled.php:162
+msgid "%1$s subscription cancellation"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:68
+msgid "You will be charged for your subscription to %1$s tomorrow."
+msgstr ""
+
+#. Translators: %1$s = The product title, %2$s The upcoming payment due date.
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:100
+msgid "You will be charged for your subscription to %1$s on %2$s."
+msgstr ""
+
+#. Translators: %s = The product title.
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:247
+msgid "Upcoming payment reminder for your subscription to %1$s"
+msgstr ""
+
+#: includes/notifications/views/class.llms.notification.view.upcoming.payment.reminder.php:258
+msgid "Upcoming Subscription Payment"
+msgstr ""
+
+#. Translators: %d = number of notifications.
+#: includes/privacy/class-llms-privacy-erasers.php:146
+msgid "Removed %d notifications."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-erasers.php:168
+msgid "Order cancelled during personal data erasure."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-erasers.php:180
+msgid "Personal data removed during personal data erasure."
+msgstr ""
+
+#. Translators: %s Prop name.
+#: includes/privacy/class-llms-privacy-erasers.php:211
+msgid "Removed student \"%s\""
+msgstr ""
+
+#. Translators: %d Order number.
+#: includes/privacy/class-llms-privacy-erasers.php:271
+msgid "Removed personal data from order #%d."
+msgstr ""
+
+#. Translators: %d Order number.
+#: includes/privacy/class-llms-privacy-erasers.php:277
+msgid "Personal data within order #%d has been retained."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-erasers.php:320
+msgid "Removed all student course and membership enrollment and activity data."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-erasers.php:325
+msgid "Retained all student course and membership enrollment and activity data."
+msgstr ""
+
+#. Translators: %d quiz attempt id.
+#: includes/privacy/class-llms-privacy-erasers.php:360
+msgid "Quiz attempt #%d removed."
+msgstr ""
+
+#. Translators: %d quiz attempt id.
+#: includes/privacy/class-llms-privacy-erasers.php:368
+msgid "Quiz attempt #%d retained."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:45
+msgid "Student achievement data."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:86
+msgid "Student certificate data."
+msgstr ""
+
+#. Translators: %s = post type singular name label (Course or Membership).
+#: includes/privacy/class-llms-privacy-exporters.php:193
+msgid "%s Title"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:198
+#: templates/admin/reporting/tabs/students/courses-course.php:119
+msgid "Enrollment Status"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:203
+#: templates/admin/reporting/tabs/students/courses-course.php:107
+#: templates/myaccount/my-grades-single.php:32
+#: templates/myaccount/my-grades.php:20
+msgid "Enrollment Date"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:210
+#: templates/myaccount/my-grades-single.php:41
+msgid "Last Activity"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:304
+msgid "Attempt ID"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:309
+msgid "Attempt Number"
+msgstr ""
+
+#. translators: %s: The name of the enrollment post type.
+#: includes/privacy/class-llms-privacy-exporters.php:417
+msgid "Student %s enrollment data."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:519
+msgid "Student orders data."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:557
+msgid "Personal Information"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:558
+msgid "Student personal information data."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy-exporters.php:591
+msgid "Student quiz attempt data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:38
+#: includes/privacy/class-llms-privacy.php:49
+msgid "Student Data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:39
+msgid "Course Data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:40
+#: includes/privacy/class-llms-privacy.php:50
+msgid "Quiz Data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:41
+msgid "Membership Data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:42
+#: includes/privacy/class-llms-privacy.php:51
+#: includes/privacy/class-llms-privacy.php:53
+msgid "Order Data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:43
+#: includes/privacy/class-llms-privacy.php:52
+msgid "Achievement Data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:44
+msgid "Certificate Data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:54
+msgid "Notification Data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:56
+msgid "Postmeta Data"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:97
+msgid "Order Number"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:104
+msgid "User ID"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:111
+msgid "Billing First Name"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:112
+msgid "Billing Last Name"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:113
+msgid "Billing Email"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:118
+#: includes/privacy/class-llms-privacy.php:239
+msgid "Billing Zip Code"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:121
+#: includes/privacy/class-llms-privacy.php:242
+msgid "IP Address"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:143
+msgid "This sample language includes the basics around what personal data your learning platform may be collecting, storing and sharing, as well as who may have access to that data. Depending on what settings are enabled and which additional add-ons are used, the specific information shared by your site will vary. We recommend consulting with a lawyer when deciding what information to disclose on your privacy policy."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:145
+msgid "We collect information about you during the registration, enrollment, and checkout processes on our site."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:146
+msgid "What we collect and store"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:147
+msgid "When you register an account with us, we’ll ask you to provide information including your name, billing address, email address, phone number, credit card/payment details and optional account information like username and password. We’ll use this information for purposes, such as, to:"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:149
+msgid "Send you information about your account, orders, courses, and memberships"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:150
+msgid "Communicate with you about courses and memberships that you’re enrolled in"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:151
+msgid "Respond to your requests, including refunds and complaints"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:152
+msgid "Process payments and prevent fraud"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:153
+msgid "Set up your account for our site"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:154
+msgid "Comply with any legal obligations we have"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:155
+msgid "Improve our site’s offerings"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:156
+msgid "Send you marketing messages, if you choose to receive them"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:158
+msgid "When you create an account, we will store your name, address, email and phone number, which will be used to populate the enrollment and checkout for future purchases and enrollments."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:159
+msgid "We generally store information about you for as long as we need the information for the purposes for which we collect and use it, and we are not legally required to continue to keep it. For example, we will store order information for XXX years for tax and accounting purposes. This includes your name, email address and billing address."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:160
+msgid "We will also store comments or reviews, if you chose to leave them."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:161
+msgid "Who on our team has access"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:162
+msgid "Members of our team have access to the information you provide us. For example, both Administrators and Site Managers can access:"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:164
+msgid "Order information like what was purchased, when it was purchased and where it should be sent, and"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:165
+msgid "Customer information like your name, email address, and billing information."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:167
+msgid "Course and membership instructors can access your course progress and activities including:"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:169
+msgid "Enrollment dates for their courses and memberships"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:170
+msgid "Course progress and status information for their courses"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:171
+msgid "Quiz and assignments answers and grades for their courses"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:172
+msgid "Comments and reviews made on their memberships and courses"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:174
+msgid "Our team members have access to this information to help fulfill orders, process refunds, and support you."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:175
+msgid "What we share with others"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:176
+msgid "In this section you should list who you’re sharing data with, and for what purpose. This could include, but may not be limited to, analytics, marketing, payment gateways, and third party embeds."
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:177
+msgid "We share information with third parties who help us provide our orders and store services to you; for example --"
+msgstr ""
+
+#: includes/privacy/class-llms-privacy.php:243
+msgid "Last Login Date"
+msgstr ""
+
+#. translators: %1$s: opening anchor tag that links to the achievement template, %2$s: achievement template name, #%3$d: achievement template ID, %4$s: closing anchor tag
+#: includes/processors/class-llms-processor-achievement-sync.php:60
+msgid "Awarded achievements sync already scheduled for the template %1$s%2$s (#%3$d)%4$s."
+msgstr ""
+
+#. translators: %1$s: opening anchor tag that links to the achievement template, %2$s: achievement template name, %3$d: achievement template ID, %4$s: closing anchor tag
+#: includes/processors/class-llms-processor-achievement-sync.php:69
+msgid "Awarded achievements sync completed for the template %1$s%2$s (#%3$d)%4$s."
+msgstr ""
+
+#. translators: %1$s: opening anchor tag that links to the achievement template, %2$s: achievement template name, #%3$d: achievement template ID, %4$s: closing anchor tag
+#: includes/processors/class-llms-processor-achievement-sync.php:78
+msgid "There are no awarded achievements to sync with the template %1$s%2$s (#%3$d)%4$s."
+msgstr ""
+
+#. translators: %1$s: opening anchor tag that links to the achievement template, %2$s: achievement template name, #%3$d: achievement template ID, %4$s: closing anchor tag
+#: includes/processors/class-llms-processor-achievement-sync.php:87
+msgid "Awarded achievements sync scheduled for the template %1$s%2$s (#%3$d)%4$s."
+msgstr ""
+
+#. translators: %1$s: opening anchor tag that links to the certificate template, %2$s: certificate template name, #%3$d: certificate template ID, %4$s: closing anchor tag
+#: includes/processors/class-llms-processor-certificate-sync.php:60
+msgid "Awarded certificates sync already scheduled for the template %1$s%2$s (#%3$d)%4$s."
+msgstr ""
+
+#. translators: %1$s: opening anchor tag that links to the certificate template, %2$s: certificate template name, %3$d: certificate template ID, %4$s: closing anchor tag
+#: includes/processors/class-llms-processor-certificate-sync.php:69
+msgid "Awarded certificates sync completed for the template %1$s%2$s (#%3$d)%4$s."
+msgstr ""
+
+#. translators: %1$s: opening anchor tag that links to the certificate template, %2$s: certificate template name, #%3$d: certificate template ID, %4$s: closing anchor tag
+#: includes/processors/class-llms-processor-certificate-sync.php:78
+msgid "There are no awarded certificates to sync with the template %1$s%2$s (#%3$d)%4$s."
+msgstr ""
+
+#. translators: %1$s: opening anchor tag that links to the certificate template, %2$s: certificate template name, #%3$d: certificate template ID, %4$s: closing anchor tag
+#: includes/processors/class-llms-processor-certificate-sync.php:87
+msgid "Awarded certificates sync scheduled for the template %1$s%2$s (#%3$d)%4$s."
+msgstr ""
+
+#: includes/schemas/llms-block-templates.php:115
+msgid "Presented to"
+msgstr ""
+
+#: includes/schemas/llms-block-templates.php:135
+msgid "for demonstration of excellence"
+msgstr ""
+
+#: includes/schemas/llms-block-templates.php:177
+msgid "DATE"
+msgstr ""
+
+#: includes/schemas/llms-block-templates.php:208
+msgid "SIGNED"
+msgstr ""
+
+#: includes/schemas/llms-form-locations.php:22
+msgid "Handles new user registration and existing user information updates during checkout and enrollment."
+msgstr ""
+
+#: includes/schemas/llms-form-locations.php:23
+msgid "Billing Information"
+msgstr ""
+
+#: includes/schemas/llms-form-locations.php:42
+msgid "Registration"
+msgstr ""
+
+#: includes/schemas/llms-form-locations.php:43
+msgid "Handles new user registration and existing user information updates for open registration on the student dashboard and wherever the [lifterlms_registration] shortcode is used."
+msgstr ""
+
+#: includes/schemas/llms-form-locations.php:44
+#: templates/global/form-registration.php:80
+msgid "Register"
+msgstr ""
+
+#: includes/schemas/llms-form-locations.php:63
+msgid "Account"
+msgstr ""
+
+#: includes/schemas/llms-form-locations.php:64
+msgid "Handles user account information updates on the edit account area of the student dashboard."
+msgstr ""
+
+#: includes/schemas/llms-form-locations.php:65
+msgid "Edit Account Information"
+msgstr ""
+
+#: includes/schemas/llms-reusable-blocks.php:25
+msgctxt "Default form field reusable block title"
+msgid "Username (Reusable)"
+msgstr ""
+
+#: includes/schemas/llms-reusable-blocks.php:34
+msgctxt "Default form field reusable block title"
+msgid "Email Address (Reusable)"
+msgstr ""
+
+#: includes/schemas/llms-reusable-blocks.php:44
+msgctxt "Default form field reusable block title"
+msgid "Password (Reusable)"
+msgstr ""
+
+#: includes/schemas/llms-reusable-blocks.php:54
+msgctxt "Default form field reusable block title"
+msgid "First and Last Name (Reusable)"
+msgstr ""
+
+#: includes/schemas/llms-reusable-blocks.php:78
+msgctxt "Default form field reusable block title"
+msgid "Public Display Name (Reusable)"
+msgstr ""
+
+#: includes/schemas/llms-reusable-blocks.php:86
+msgctxt "Default form field reusable block title"
+msgid "Address (Reusable)"
+msgstr ""
+
+#: includes/schemas/llms-reusable-blocks.php:152
+msgctxt "Default form field reusable block title"
+msgid "Phone Number (Reusable)"
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:31
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Username"
+msgstr ""
+
+#. Translators: %s = Minimum password strength.
+#: includes/schemas/llms-user-information-fields.php:57
+msgid "A %s password is required with at least 8 characters. To make it stronger, use both upper and lower case letters, numbers, and symbols."
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:84
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Display Name"
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:94
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Address"
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:106
+msgid "Apartment, suite, etc..."
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:112
+#: languages/countries-address-info.php:40
+#: languages/countries-address-info.php:50
+#: languages/countries-address-info.php:55
+#: languages/countries-address-info.php:60
+#: languages/countries-address-info.php:65
+#: languages/countries-address-info.php:70
+#: languages/countries-address-info.php:75
+#: languages/countries-address-info.php:80
+#: languages/countries-address-info.php:85
+#: languages/countries-address-info.php:90
+#: languages/countries-address-info.php:95
+#: languages/countries-address-info.php:105
+#: languages/countries-address-info.php:110
+#: languages/countries-address-info.php:115
+#: languages/countries-address-info.php:120
+#: languages/countries-address-info.php:125
+#: languages/countries-address-info.php:130
+#: languages/countries-address-info.php:135
+#: languages/countries-address-info.php:140
+#: languages/countries-address-info.php:145
+#: languages/countries-address-info.php:150
+#: languages/countries-address-info.php:155
+#: languages/countries-address-info.php:160
+#: languages/countries-address-info.php:165
+#: languages/countries-address-info.php:170
+#: languages/countries-address-info.php:175
+#: languages/countries-address-info.php:180
+#: languages/countries-address-info.php:185
+#: languages/countries-address-info.php:190
+#: languages/countries-address-info.php:195
+#: languages/countries-address-info.php:200
+#: languages/countries-address-info.php:205
+#: languages/countries-address-info.php:210
+#: languages/countries-address-info.php:215
+#: languages/countries-address-info.php:220
+#: languages/countries-address-info.php:225
+#: languages/countries-address-info.php:230
+#: languages/countries-address-info.php:235
+#: languages/countries-address-info.php:240
+#: languages/countries-address-info.php:245
+#: languages/countries-address-info.php:250
+#: languages/countries-address-info.php:255
+#: languages/countries-address-info.php:260
+#: languages/countries-address-info.php:265
+#: languages/countries-address-info.php:270
+#: languages/countries-address-info.php:275
+#: languages/countries-address-info.php:280
+#: languages/countries-address-info.php:285
+#: languages/countries-address-info.php:290
+#: languages/countries-address-info.php:295
+#: languages/countries-address-info.php:300
+#: languages/countries-address-info.php:305
+#: languages/countries-address-info.php:310
+#: languages/countries-address-info.php:315
+#: languages/countries-address-info.php:320
+#: languages/countries-address-info.php:325
+#: languages/countries-address-info.php:330
+#: languages/countries-address-info.php:335
+#: languages/countries-address-info.php:340
+#: languages/countries-address-info.php:345
+#: languages/countries-address-info.php:350
+#: languages/countries-address-info.php:355
+#: languages/countries-address-info.php:360
+#: languages/countries-address-info.php:365
+#: languages/countries-address-info.php:370
+#: languages/countries-address-info.php:375
+#: languages/countries-address-info.php:380
+#: languages/countries-address-info.php:385
+#: languages/countries-address-info.php:390
+#: languages/countries-address-info.php:395
+#: languages/countries-address-info.php:400
+#: languages/countries-address-info.php:405
+#: languages/countries-address-info.php:410
+#: languages/countries-address-info.php:415
+#: languages/countries-address-info.php:425
+#: languages/countries-address-info.php:430
+#: languages/countries-address-info.php:435
+#: languages/countries-address-info.php:440
+#: languages/countries-address-info.php:445
+#: languages/countries-address-info.php:455
+#: languages/countries-address-info.php:460
+#: languages/countries-address-info.php:465
+#: languages/countries-address-info.php:470
+#: languages/countries-address-info.php:475
+#: languages/countries-address-info.php:480
+#: languages/countries-address-info.php:485
+#: languages/countries-address-info.php:490
+#: languages/countries-address-info.php:495
+#: languages/countries-address-info.php:500
+#: languages/countries-address-info.php:505
+#: languages/countries-address-info.php:515
+#: languages/countries-address-info.php:520
+#: languages/countries-address-info.php:525
+#: languages/countries-address-info.php:530
+#: languages/countries-address-info.php:535
+#: languages/countries-address-info.php:550
+#: languages/countries-address-info.php:555
+#: languages/countries-address-info.php:560
+#: languages/countries-address-info.php:565
+#: languages/countries-address-info.php:570
+#: languages/countries-address-info.php:575
+#: languages/countries-address-info.php:580
+#: languages/countries-address-info.php:585
+#: languages/countries-address-info.php:590
+#: languages/countries-address-info.php:595
+#: languages/countries-address-info.php:600
+#: languages/countries-address-info.php:605
+#: languages/countries-address-info.php:610
+#: languages/countries-address-info.php:615
+#: languages/countries-address-info.php:620
+#: languages/countries-address-info.php:625
+#: languages/countries-address-info.php:630
+#: languages/countries-address-info.php:635
+#: languages/countries-address-info.php:640
+#: languages/countries-address-info.php:645
+#: languages/countries-address-info.php:650
+#: languages/countries-address-info.php:660
+#: languages/countries-address-info.php:665
+#: languages/countries-address-info.php:670
+#: languages/countries-address-info.php:675
+#: languages/countries-address-info.php:680
+#: languages/countries-address-info.php:685
+#: languages/countries-address-info.php:690
+#: languages/countries-address-info.php:695
+#: languages/countries-address-info.php:700
+#: languages/countries-address-info.php:705
+#: languages/countries-address-info.php:710
+#: languages/countries-address-info.php:715
+#: languages/countries-address-info.php:720
+#: languages/countries-address-info.php:725
+#: languages/countries-address-info.php:730
+#: languages/countries-address-info.php:735
+#: languages/countries-address-info.php:740
+#: languages/countries-address-info.php:745
+#: languages/countries-address-info.php:750
+#: languages/countries-address-info.php:755
+#: languages/countries-address-info.php:760
+#: languages/countries-address-info.php:765
+#: languages/countries-address-info.php:770
+#: languages/countries-address-info.php:775
+#: languages/countries-address-info.php:780
+#: languages/countries-address-info.php:785
+#: languages/countries-address-info.php:790
+#: languages/countries-address-info.php:795
+#: languages/countries-address-info.php:800
+#: languages/countries-address-info.php:805
+#: languages/countries-address-info.php:810
+#: languages/countries-address-info.php:815
+#: languages/countries-address-info.php:820
+#: languages/countries-address-info.php:825
+#: languages/countries-address-info.php:830
+#: languages/countries-address-info.php:835
+#: languages/countries-address-info.php:840
+#: languages/countries-address-info.php:845
+#: languages/countries-address-info.php:850
+#: languages/countries-address-info.php:855
+#: languages/countries-address-info.php:860
+#: languages/countries-address-info.php:865
+#: languages/countries-address-info.php:870
+#: languages/countries-address-info.php:875
+#: languages/countries-address-info.php:885
+#: languages/countries-address-info.php:895
+#: languages/countries-address-info.php:900
+#: languages/countries-address-info.php:910
+#: languages/countries-address-info.php:915
+#: languages/countries-address-info.php:920
+#: languages/countries-address-info.php:925
+#: languages/countries-address-info.php:930
+#: languages/countries-address-info.php:935
+#: languages/countries-address-info.php:940
+#: languages/countries-address-info.php:945
+#: languages/countries-address-info.php:950
+#: languages/countries-address-info.php:955
+#: languages/countries-address-info.php:960
+#: languages/countries-address-info.php:965
+#: languages/countries-address-info.php:970
+#: languages/countries-address-info.php:975
+#: languages/countries-address-info.php:980
+#: languages/countries-address-info.php:985
+#: languages/countries-address-info.php:990
+#: languages/countries-address-info.php:995
+#: languages/countries-address-info.php:1000
+#: languages/countries-address-info.php:1005
+#: languages/countries-address-info.php:1010
+#: languages/countries-address-info.php:1015
+#: languages/countries-address-info.php:1020
+#: languages/countries-address-info.php:1030
+#: languages/countries-address-info.php:1035
+#: languages/countries-address-info.php:1040
+#: languages/countries-address-info.php:1045
+#: languages/countries-address-info.php:1050
+#: languages/countries-address-info.php:1055
+#: languages/countries-address-info.php:1060
+#: languages/countries-address-info.php:1065
+#: languages/countries-address-info.php:1070
+#: languages/countries-address-info.php:1075
+#: languages/countries-address-info.php:1080
+#: languages/countries-address-info.php:1085
+#: languages/countries-address-info.php:1090
+#: languages/countries-address-info.php:1095
+#: languages/countries-address-info.php:1100
+#: languages/countries-address-info.php:1105
+#: languages/countries-address-info.php:1110
+#: languages/countries-address-info.php:1115
+#: languages/countries-address-info.php:1120
+#: languages/countries-address-info.php:1125
+#: languages/countries-address-info.php:1130
+#: languages/countries-address-info.php:1135
+#: languages/countries-address-info.php:1140
+#: languages/countries-address-info.php:1145
+#: languages/countries-address-info.php:1150
+#: languages/countries-address-info.php:1155
+#: languages/countries-address-info.php:1160
+#: languages/countries-address-info.php:1165
+#: languages/countries-address-info.php:1170
+#: languages/countries-address-info.php:1175
+#: languages/countries-address-info.php:1180
+#: languages/countries-address-info.php:1185
+#: languages/countries-address-info.php:1190
+#: languages/countries-address-info.php:1195
+#: languages/countries-address-info.php:1200
+#: languages/countries-address-info.php:1205
+#: languages/countries-address-info.php:1210
+#: languages/countries-address-info.php:1215
+#: languages/countries-address-info.php:1220
+#: languages/countries-address-info.php:1225
+#: languages/countries-address-info.php:1230
+#: languages/countries-address-info.php:1235
+#: languages/countries-address-info.php:1240
+#: languages/countries-address-info.php:1245
+#: languages/countries-address-info.php:1250
+#: languages/countries-address-info.php:1255
+#: languages/countries-address-info.php:1260
+#: languages/countries-address-info.php:1265
+#: languages/countries-address-info.php:1270
+#: languages/countries-address-info.php:1275
+#: languages/countries-address-info.php:1280
+#: languages/countries-address-info.php:1285
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "City"
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:124
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Select a Country"
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:131
+#: languages/countries-address-info.php:41
+#: languages/countries-address-info.php:51
+#: languages/countries-address-info.php:56
+#: languages/countries-address-info.php:66
+#: languages/countries-address-info.php:76
+#: languages/countries-address-info.php:96
+#: languages/countries-address-info.php:116
+#: languages/countries-address-info.php:121
+#: languages/countries-address-info.php:126
+#: languages/countries-address-info.php:131
+#: languages/countries-address-info.php:136
+#: languages/countries-address-info.php:141
+#: languages/countries-address-info.php:146
+#: languages/countries-address-info.php:151
+#: languages/countries-address-info.php:156
+#: languages/countries-address-info.php:161
+#: languages/countries-address-info.php:171
+#: languages/countries-address-info.php:176
+#: languages/countries-address-info.php:181
+#: languages/countries-address-info.php:186
+#: languages/countries-address-info.php:201
+#: languages/countries-address-info.php:211
+#: languages/countries-address-info.php:236
+#: languages/countries-address-info.php:241
+#: languages/countries-address-info.php:246
+#: languages/countries-address-info.php:251
+#: languages/countries-address-info.php:256
+#: languages/countries-address-info.php:271
+#: languages/countries-address-info.php:281
+#: languages/countries-address-info.php:286
+#: languages/countries-address-info.php:291
+#: languages/countries-address-info.php:311
+#: languages/countries-address-info.php:316
+#: languages/countries-address-info.php:321
+#: languages/countries-address-info.php:326
+#: languages/countries-address-info.php:331
+#: languages/countries-address-info.php:336
+#: languages/countries-address-info.php:346
+#: languages/countries-address-info.php:351
+#: languages/countries-address-info.php:356
+#: languages/countries-address-info.php:371
+#: languages/countries-address-info.php:381
+#: languages/countries-address-info.php:386
+#: languages/countries-address-info.php:411
+#: languages/countries-address-info.php:416
+#: languages/countries-address-info.php:426
+#: languages/countries-address-info.php:431
+#: languages/countries-address-info.php:446
+#: languages/countries-address-info.php:461
+#: languages/countries-address-info.php:466
+#: languages/countries-address-info.php:476
+#: languages/countries-address-info.php:481
+#: languages/countries-address-info.php:491
+#: languages/countries-address-info.php:501
+#: languages/countries-address-info.php:506
+#: languages/countries-address-info.php:526
+#: languages/countries-address-info.php:531
+#: languages/countries-address-info.php:536
+#: languages/countries-address-info.php:551
+#: languages/countries-address-info.php:581
+#: languages/countries-address-info.php:611
+#: languages/countries-address-info.php:616
+#: languages/countries-address-info.php:621
+#: languages/countries-address-info.php:631
+#: languages/countries-address-info.php:641
+#: languages/countries-address-info.php:666
+#: languages/countries-address-info.php:671
+#: languages/countries-address-info.php:676
+#: languages/countries-address-info.php:681
+#: languages/countries-address-info.php:686
+#: languages/countries-address-info.php:691
+#: languages/countries-address-info.php:696
+#: languages/countries-address-info.php:701
+#: languages/countries-address-info.php:706
+#: languages/countries-address-info.php:711
+#: languages/countries-address-info.php:716
+#: languages/countries-address-info.php:721
+#: languages/countries-address-info.php:726
+#: languages/countries-address-info.php:731
+#: languages/countries-address-info.php:736
+#: languages/countries-address-info.php:746
+#: languages/countries-address-info.php:756
+#: languages/countries-address-info.php:761
+#: languages/countries-address-info.php:766
+#: languages/countries-address-info.php:791
+#: languages/countries-address-info.php:801
+#: languages/countries-address-info.php:806
+#: languages/countries-address-info.php:811
+#: languages/countries-address-info.php:816
+#: languages/countries-address-info.php:836
+#: languages/countries-address-info.php:846
+#: languages/countries-address-info.php:866
+#: languages/countries-address-info.php:871
+#: languages/countries-address-info.php:876
+#: languages/countries-address-info.php:926
+#: languages/countries-address-info.php:931
+#: languages/countries-address-info.php:956
+#: languages/countries-address-info.php:966
+#: languages/countries-address-info.php:971
+#: languages/countries-address-info.php:981
+#: languages/countries-address-info.php:986
+#: languages/countries-address-info.php:996
+#: languages/countries-address-info.php:1001
+#: languages/countries-address-info.php:1006
+#: languages/countries-address-info.php:1016
+#: languages/countries-address-info.php:1021
+#: languages/countries-address-info.php:1026
+#: languages/countries-address-info.php:1036
+#: languages/countries-address-info.php:1046
+#: languages/countries-address-info.php:1051
+#: languages/countries-address-info.php:1056
+#: languages/countries-address-info.php:1061
+#: languages/countries-address-info.php:1076
+#: languages/countries-address-info.php:1081
+#: languages/countries-address-info.php:1091
+#: languages/countries-address-info.php:1096
+#: languages/countries-address-info.php:1101
+#: languages/countries-address-info.php:1111
+#: languages/countries-address-info.php:1121
+#: languages/countries-address-info.php:1131
+#: languages/countries-address-info.php:1141
+#: languages/countries-address-info.php:1146
+#: languages/countries-address-info.php:1151
+#: languages/countries-address-info.php:1156
+#: languages/countries-address-info.php:1166
+#: languages/countries-address-info.php:1181
+#: languages/countries-address-info.php:1191
+#: languages/countries-address-info.php:1211
+#: languages/countries-address-info.php:1221
+#: languages/countries-address-info.php:1246
+#: languages/countries-address-info.php:1256
+#: languages/countries-address-info.php:1261
+#: languages/countries-address-info.php:1266
+#: languages/countries-address-info.php:1281
+#: languages/countries-address-info.php:1286
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "State / Region"
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:135
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Select a State / Region"
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:142
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Postal / Zip Code"
+msgstr ""
+
+#: includes/schemas/llms-user-information-fields.php:150
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Phone Number"
+msgstr ""
+
+#: includes/shortcodes/class.llms.shortcode.checkout.php:61
+msgid "You must be a member in order to purchase this access plan."
+msgstr ""
+
+#: includes/shortcodes/class.llms.shortcode.checkout.php:93
+msgid "You are currently logged in as %1$s . Click here to logout "
+msgstr ""
+
+#: includes/shortcodes/class.llms.shortcode.checkout.php:95
+msgid "Already have an account? Click here to login "
+msgstr ""
+
+#: includes/shortcodes/class.llms.shortcode.checkout.php:256
+msgid "Invalid access plan."
+msgstr ""
+
+#: includes/shortcodes/class.llms.shortcode.checkout.php:283
+msgid "Your cart is currently empty. Click here to get started."
+msgstr ""
+
+#. Translators: 1%$s = Opening anchor tag; %2$s = Closing anchor tag.
+#: includes/shortcodes/class.llms.shortcode.courses.php:199
+#: includes/shortcodes/class.llms.shortcode.favorites.php:85
+msgid "You must be logged in to view this information. Click %1$shere%2$s to login."
+msgstr ""
+
+#: includes/shortcodes/class.llms.shortcode.courses.php:206
+msgid "No courses found."
+msgstr ""
+
+#: includes/shortcodes/class.llms.shortcodes.blocks.php:251
+#: templates/loop/none-found.php:13
+msgid "No products were found matching your selection."
+msgstr ""
+
+#: includes/shortcodes/class.llms.shortcodes.php:378
+#: templates/loop/pagination.php:39
+#: templates/myaccount/my-grades.php:55
+#: templates/myaccount/my-notifications.php:38
+msgid "Previous"
+msgstr ""
+
+#. Translators: %1$s the awarded post type name label.
+#: includes/traits/llms-trait-award-templates-post-list-table.php:69
+msgid "View %1$s"
+msgstr ""
+
+#. translators: %1$s: the plural awarded post type name label
+#: includes/traits/llms-trait-award-templates-post-list-table.php:87
+msgid "Sync %1$s"
+msgstr ""
+
+#: includes/widgets/class.llms.bbp.widget.course.forums.list.php:31
+msgid "Displays a list of bbPress forums associated with the course."
+msgstr ""
+
+#: includes/widgets/class.llms.bbp.widget.course.forums.list.php:34
+msgid "LifterLMS Course Forums List"
+msgstr ""
+
+#: includes/widgets/class.llms.bbp.widget.course.forums.list.php:84
+msgid "Course Forums"
+msgstr ""
+
+#: includes/widgets/class.llms.bbp.widget.course.forums.list.php:87
+#: includes/widgets/class.llms.widget.php:70
+msgid "Title:"
+msgstr ""
+
+#: includes/widgets/class.llms.widget.course.progress.php:38
+msgid "Displays Course Progress on Course or Lesson"
+msgstr ""
+
+#: includes/widgets/class.llms.widget.course.progress.php:61
+msgid "Display to enrolled students only?"
+msgstr ""
+
+#: includes/widgets/class.llms.widget.course.progress.php:62
+msgid "When checked the course progress bar will be shown only to those students enrolled in the course."
+msgstr ""
+
+#: includes/widgets/class.llms.widget.course.syllabus.php:31
+msgid "Displays All Course lessons on Course or Lesson page"
+msgstr ""
+
+#: includes/widgets/class.llms.widget.course.syllabus.php:54
+msgid "Make outline collapsible?"
+msgstr ""
+
+#: includes/widgets/class.llms.widget.course.syllabus.php:55
+msgid "Allow students to hide lessons within a section by clicking the section titles."
+msgstr ""
+
+#: includes/widgets/class.llms.widget.course.syllabus.php:62
+msgid "Display open and close all toggles"
+msgstr ""
+
+#: includes/widgets/class.llms.widget.course.syllabus.php:63
+msgid "Display \"Open All\" and \"Close All\" toggles at the bottom of the outline."
+msgstr ""
+
+#: languages/countries-address-info.php:42
+#: languages/countries-address-info.php:52
+#: languages/countries-address-info.php:62
+#: languages/countries-address-info.php:72
+#: languages/countries-address-info.php:82
+#: languages/countries-address-info.php:87
+#: languages/countries-address-info.php:97
+#: languages/countries-address-info.php:107
+#: languages/countries-address-info.php:112
+#: languages/countries-address-info.php:117
+#: languages/countries-address-info.php:122
+#: languages/countries-address-info.php:132
+#: languages/countries-address-info.php:137
+#: languages/countries-address-info.php:142
+#: languages/countries-address-info.php:147
+#: languages/countries-address-info.php:152
+#: languages/countries-address-info.php:167
+#: languages/countries-address-info.php:172
+#: languages/countries-address-info.php:177
+#: languages/countries-address-info.php:192
+#: languages/countries-address-info.php:202
+#: languages/countries-address-info.php:207
+#: languages/countries-address-info.php:217
+#: languages/countries-address-info.php:227
+#: languages/countries-address-info.php:232
+#: languages/countries-address-info.php:237
+#: languages/countries-address-info.php:252
+#: languages/countries-address-info.php:257
+#: languages/countries-address-info.php:262
+#: languages/countries-address-info.php:267
+#: languages/countries-address-info.php:277
+#: languages/countries-address-info.php:287
+#: languages/countries-address-info.php:292
+#: languages/countries-address-info.php:297
+#: languages/countries-address-info.php:302
+#: languages/countries-address-info.php:307
+#: languages/countries-address-info.php:312
+#: languages/countries-address-info.php:317
+#: languages/countries-address-info.php:322
+#: languages/countries-address-info.php:332
+#: languages/countries-address-info.php:342
+#: languages/countries-address-info.php:347
+#: languages/countries-address-info.php:352
+#: languages/countries-address-info.php:357
+#: languages/countries-address-info.php:362
+#: languages/countries-address-info.php:367
+#: languages/countries-address-info.php:377
+#: languages/countries-address-info.php:382
+#: languages/countries-address-info.php:387
+#: languages/countries-address-info.php:397
+#: languages/countries-address-info.php:407
+#: languages/countries-address-info.php:412
+#: languages/countries-address-info.php:417
+#: languages/countries-address-info.php:432
+#: languages/countries-address-info.php:437
+#: languages/countries-address-info.php:442
+#: languages/countries-address-info.php:452
+#: languages/countries-address-info.php:457
+#: languages/countries-address-info.php:467
+#: languages/countries-address-info.php:472
+#: languages/countries-address-info.php:482
+#: languages/countries-address-info.php:487
+#: languages/countries-address-info.php:492
+#: languages/countries-address-info.php:502
+#: languages/countries-address-info.php:517
+#: languages/countries-address-info.php:522
+#: languages/countries-address-info.php:527
+#: languages/countries-address-info.php:532
+#: languages/countries-address-info.php:537
+#: languages/countries-address-info.php:542
+#: languages/countries-address-info.php:552
+#: languages/countries-address-info.php:557
+#: languages/countries-address-info.php:567
+#: languages/countries-address-info.php:572
+#: languages/countries-address-info.php:577
+#: languages/countries-address-info.php:582
+#: languages/countries-address-info.php:587
+#: languages/countries-address-info.php:592
+#: languages/countries-address-info.php:602
+#: languages/countries-address-info.php:607
+#: languages/countries-address-info.php:612
+#: languages/countries-address-info.php:617
+#: languages/countries-address-info.php:622
+#: languages/countries-address-info.php:647
+#: languages/countries-address-info.php:652
+#: languages/countries-address-info.php:657
+#: languages/countries-address-info.php:662
+#: languages/countries-address-info.php:667
+#: languages/countries-address-info.php:672
+#: languages/countries-address-info.php:682
+#: languages/countries-address-info.php:687
+#: languages/countries-address-info.php:692
+#: languages/countries-address-info.php:697
+#: languages/countries-address-info.php:702
+#: languages/countries-address-info.php:707
+#: languages/countries-address-info.php:712
+#: languages/countries-address-info.php:722
+#: languages/countries-address-info.php:727
+#: languages/countries-address-info.php:732
+#: languages/countries-address-info.php:737
+#: languages/countries-address-info.php:742
+#: languages/countries-address-info.php:747
+#: languages/countries-address-info.php:757
+#: languages/countries-address-info.php:767
+#: languages/countries-address-info.php:772
+#: languages/countries-address-info.php:777
+#: languages/countries-address-info.php:787
+#: languages/countries-address-info.php:797
+#: languages/countries-address-info.php:802
+#: languages/countries-address-info.php:807
+#: languages/countries-address-info.php:812
+#: languages/countries-address-info.php:817
+#: languages/countries-address-info.php:822
+#: languages/countries-address-info.php:827
+#: languages/countries-address-info.php:832
+#: languages/countries-address-info.php:842
+#: languages/countries-address-info.php:847
+#: languages/countries-address-info.php:852
+#: languages/countries-address-info.php:857
+#: languages/countries-address-info.php:862
+#: languages/countries-address-info.php:867
+#: languages/countries-address-info.php:872
+#: languages/countries-address-info.php:877
+#: languages/countries-address-info.php:887
+#: languages/countries-address-info.php:897
+#: languages/countries-address-info.php:907
+#: languages/countries-address-info.php:912
+#: languages/countries-address-info.php:917
+#: languages/countries-address-info.php:922
+#: languages/countries-address-info.php:927
+#: languages/countries-address-info.php:932
+#: languages/countries-address-info.php:937
+#: languages/countries-address-info.php:942
+#: languages/countries-address-info.php:952
+#: languages/countries-address-info.php:957
+#: languages/countries-address-info.php:967
+#: languages/countries-address-info.php:972
+#: languages/countries-address-info.php:977
+#: languages/countries-address-info.php:982
+#: languages/countries-address-info.php:987
+#: languages/countries-address-info.php:992
+#: languages/countries-address-info.php:1002
+#: languages/countries-address-info.php:1017
+#: languages/countries-address-info.php:1022
+#: languages/countries-address-info.php:1027
+#: languages/countries-address-info.php:1032
+#: languages/countries-address-info.php:1037
+#: languages/countries-address-info.php:1042
+#: languages/countries-address-info.php:1047
+#: languages/countries-address-info.php:1057
+#: languages/countries-address-info.php:1062
+#: languages/countries-address-info.php:1067
+#: languages/countries-address-info.php:1087
+#: languages/countries-address-info.php:1097
+#: languages/countries-address-info.php:1102
+#: languages/countries-address-info.php:1107
+#: languages/countries-address-info.php:1117
+#: languages/countries-address-info.php:1127
+#: languages/countries-address-info.php:1132
+#: languages/countries-address-info.php:1137
+#: languages/countries-address-info.php:1147
+#: languages/countries-address-info.php:1152
+#: languages/countries-address-info.php:1162
+#: languages/countries-address-info.php:1177
+#: languages/countries-address-info.php:1187
+#: languages/countries-address-info.php:1207
+#: languages/countries-address-info.php:1212
+#: languages/countries-address-info.php:1217
+#: languages/countries-address-info.php:1227
+#: languages/countries-address-info.php:1232
+#: languages/countries-address-info.php:1237
+#: languages/countries-address-info.php:1242
+#: languages/countries-address-info.php:1252
+#: languages/countries-address-info.php:1267
+#: languages/countries-address-info.php:1272
+#: languages/countries-address-info.php:1277
+#: languages/countries-address-info.php:1282
+msgid "Postal code"
+msgstr ""
+
+#: languages/countries-address-info.php:46
+msgid "Emirate"
+msgstr ""
+
+#: languages/countries-address-info.php:71
+#: languages/countries-address-info.php:216
+#: languages/countries-address-info.php:226
+#: languages/countries-address-info.php:276
+#: languages/countries-address-info.php:376
+#: languages/countries-address-info.php:521
+#: languages/countries-address-info.php:541
+#: languages/countries-address-info.php:571
+#: languages/countries-address-info.php:576
+#: languages/countries-address-info.php:586
+#: languages/countries-address-info.php:646
+#: languages/countries-address-info.php:661
+#: languages/countries-address-info.php:771
+#: languages/countries-address-info.php:831
+#: languages/countries-address-info.php:901
+#: languages/countries-address-info.php:916
+#: languages/countries-address-info.php:921
+#: languages/countries-address-info.php:991
+#: languages/countries-address-info.php:1066
+#: languages/countries-address-info.php:1071
+#: languages/countries-address-info.php:1086
+#: languages/countries-address-info.php:1126
+#: languages/countries-address-info.php:1161
+#: languages/countries-address-info.php:1276
+msgid "Province"
+msgstr ""
+
+#: languages/countries-address-info.php:86
+#: languages/countries-address-info.php:101
+#: languages/countries-address-info.php:191
+#: languages/countries-address-info.php:221
+#: languages/countries-address-info.php:266
+#: languages/countries-address-info.php:341
+#: languages/countries-address-info.php:391
+#: languages/countries-address-info.php:401
+#: languages/countries-address-info.php:561
+#: languages/countries-address-info.php:601
+#: languages/countries-address-info.php:651
+#: languages/countries-address-info.php:751
+#: languages/countries-address-info.php:821
+#: languages/countries-address-info.php:826
+#: languages/countries-address-info.php:856
+#: languages/countries-address-info.php:896
+#: languages/countries-address-info.php:961
+#: languages/countries-address-info.php:1176
+#: languages/countries-address-info.php:1201
+#: languages/countries-address-info.php:1206
+#: languages/countries-address-info.php:1226
+#: languages/countries-address-info.php:1241
+msgid "State"
+msgstr ""
+
+#: languages/countries-address-info.php:92
+#: languages/countries-address-info.php:402
+#: languages/countries-address-info.php:497
+#: languages/countries-address-info.php:752
+#: languages/countries-address-info.php:782
+#: languages/countries-address-info.php:947
+#: languages/countries-address-info.php:962
+#: languages/countries-address-info.php:1197
+#: languages/countries-address-info.php:1202
+msgid "ZIP code"
+msgstr ""
+
+#: languages/countries-address-info.php:100
+msgid "City / Suburb"
+msgstr ""
+
+#: languages/countries-address-info.php:102
+#: languages/countries-address-info.php:422
+#: languages/countries-address-info.php:892
+msgid "Postcode"
+msgstr ""
+
+#: languages/countries-address-info.php:187
+#: languages/countries-address-info.php:1077
+#: languages/countries-address-info.php:1092
+#: languages/countries-address-info.php:1262
+msgid "Postal Code"
+msgstr ""
+
+#: languages/countries-address-info.php:196
+#: languages/countries-address-info.php:296
+#: languages/countries-address-info.php:626
+#: languages/countries-address-info.php:636
+#: languages/countries-address-info.php:1011
+#: languages/countries-address-info.php:1171
+msgid "Island"
+msgstr ""
+
+#: languages/countries-address-info.php:361
+msgid "Governorate"
+msgstr ""
+
+#: languages/countries-address-info.php:420
+#: languages/countries-address-info.php:545
+#: languages/countries-address-info.php:890
+msgid "Town / City"
+msgstr ""
+
+#: languages/countries-address-info.php:421
+#: languages/countries-address-info.php:546
+msgid "County"
+msgstr ""
+
+#: languages/countries-address-info.php:510
+#: languages/countries-address-info.php:881
+#: languages/countries-address-info.php:905
+msgid "District"
+msgstr ""
+
+#: languages/countries-address-info.php:511
+msgid "Area"
+msgstr ""
+
+#: languages/countries-address-info.php:540
+msgid "City / Regency"
+msgstr ""
+
+#: languages/countries-address-info.php:562
+msgid "PIN code"
+msgstr ""
+
+#: languages/countries-address-info.php:596
+msgid "Parish"
+msgstr ""
+
+#: languages/countries-address-info.php:606
+msgid "Prefecture"
+msgstr ""
+
+#: languages/countries-address-info.php:861
+msgid "Department"
+msgstr ""
+
+#: languages/countries-address-info.php:891
+#: languages/countries-address-info.php:906
+#: languages/countries-address-info.php:1186
+msgid "Region"
+msgstr ""
+
+#: languages/countries.php:39
+msgid "Afghanistan"
+msgstr ""
+
+#: languages/countries.php:40
+msgid "Aland Islands"
+msgstr ""
+
+#: languages/countries.php:41
+msgid "Albania"
+msgstr ""
+
+#: languages/countries.php:42
+msgid "Algeria"
+msgstr ""
+
+#: languages/countries.php:43
+#: languages/states.php:5082
+msgid "American Samoa"
+msgstr ""
+
+#: languages/countries.php:44
+msgid "Andorra"
+msgstr ""
+
+#: languages/countries.php:45
+msgid "Angola"
+msgstr ""
+
+#: languages/countries.php:46
+msgid "Anguilla"
+msgstr ""
+
+#: languages/countries.php:47
+msgid "Antarctica"
+msgstr ""
+
+#: languages/countries.php:48
+msgid "Antigua And Barbuda"
+msgstr ""
+
+#: languages/countries.php:49
+msgid "Argentina"
+msgstr ""
+
+#: languages/countries.php:50
+msgid "Armenia"
+msgstr ""
+
+#: languages/countries.php:51
+msgid "Aruba"
+msgstr ""
+
+#: languages/countries.php:52
+msgid "Australia"
+msgstr ""
+
+#: languages/countries.php:53
+msgid "Austria"
+msgstr ""
+
+#: languages/countries.php:54
+msgid "Azerbaijan"
+msgstr ""
+
+#: languages/countries.php:55
+msgid "Bahrain"
+msgstr ""
+
+#: languages/countries.php:56
+msgid "Bangladesh"
+msgstr ""
+
+#: languages/countries.php:57
+msgid "Barbados"
+msgstr ""
+
+#: languages/countries.php:58
+msgid "Belarus"
+msgstr ""
+
+#: languages/countries.php:59
+msgid "Belgium"
+msgstr ""
+
+#: languages/countries.php:60
+msgid "Belize"
+msgstr ""
+
+#: languages/countries.php:61
+msgid "Benin"
+msgstr ""
+
+#: languages/countries.php:62
+msgid "Bermuda"
+msgstr ""
+
+#: languages/countries.php:63
+msgid "Bhutan"
+msgstr ""
+
+#: languages/countries.php:64
+msgid "Bolivia"
+msgstr ""
+
+#: languages/countries.php:65
+msgid "Bonaire, Sint Eustatius and Saba"
+msgstr ""
+
+#: languages/countries.php:66
+msgid "Bosnia and Herzegovina"
+msgstr ""
+
+#: languages/countries.php:67
+msgid "Botswana"
+msgstr ""
+
+#: languages/countries.php:68
+msgid "Bouvet Island"
+msgstr ""
+
+#: languages/countries.php:69
+msgid "Brazil"
+msgstr ""
+
+#: languages/countries.php:70
+msgid "British Indian Ocean Territory"
+msgstr ""
+
+#: languages/countries.php:71
+msgid "Brunei"
+msgstr ""
+
+#: languages/countries.php:72
+msgid "Bulgaria"
+msgstr ""
+
+#: languages/countries.php:73
+msgid "Burkina Faso"
+msgstr ""
+
+#: languages/countries.php:74
+msgid "Burundi"
+msgstr ""
+
+#: languages/countries.php:75
+msgid "Cambodia"
+msgstr ""
+
+#: languages/countries.php:76
+msgid "Cameroon"
+msgstr ""
+
+#: languages/countries.php:77
+msgid "Canada"
+msgstr ""
+
+#: languages/countries.php:78
+msgid "Cape Verde"
+msgstr ""
+
+#: languages/countries.php:79
+msgid "Cayman Islands"
+msgstr ""
+
+#: languages/countries.php:80
+msgid "Central African Republic"
+msgstr ""
+
+#: languages/countries.php:81
+msgid "Chad"
+msgstr ""
+
+#: languages/countries.php:82
+msgid "Chile"
+msgstr ""
+
+#: languages/countries.php:83
+msgid "China"
+msgstr ""
+
+#: languages/countries.php:84
+msgid "Christmas Island"
+msgstr ""
+
+#: languages/countries.php:85
+msgid "Cocos (Keeling) Islands"
+msgstr ""
+
+#: languages/countries.php:86
+msgid "Colombia"
+msgstr ""
+
+#: languages/countries.php:87
+msgid "Comoros"
+msgstr ""
+
+#: languages/countries.php:88
+msgid "Congo"
+msgstr ""
+
+#: languages/countries.php:89
+msgid "Cook Islands"
+msgstr ""
+
+#: languages/countries.php:90
+msgid "Costa Rica"
+msgstr ""
+
+#: languages/countries.php:91
+msgid "Cote D'Ivoire (Ivory Coast)"
+msgstr ""
+
+#: languages/countries.php:92
+msgid "Croatia (Hrvatska)"
+msgstr ""
+
+#: languages/countries.php:93
+msgid "Cuba"
+msgstr ""
+
+#: languages/countries.php:94
+msgid "Curaçao"
+msgstr ""
+
+#: languages/countries.php:95
+msgid "Cyprus"
+msgstr ""
+
+#: languages/countries.php:96
+msgid "Czech Republic"
+msgstr ""
+
+#: languages/countries.php:97
+msgid "Denmark"
+msgstr ""
+
+#: languages/countries.php:98
+#: languages/states.php:1148
+msgid "Djibouti"
+msgstr ""
+
+#: languages/countries.php:99
+msgid "Dominica"
+msgstr ""
+
+#: languages/countries.php:100
+msgid "Dominican Republic"
+msgstr ""
+
+#: languages/countries.php:101
+msgid "East Timor"
+msgstr ""
+
+#: languages/countries.php:102
+msgid "Ecuador"
+msgstr ""
+
+#: languages/countries.php:103
+msgid "Egypt"
+msgstr ""
+
+#: languages/countries.php:104
+msgid "El Salvador"
+msgstr ""
+
+#: languages/countries.php:105
+msgid "Equatorial Guinea"
+msgstr ""
+
+#: languages/countries.php:106
+msgid "Eritrea"
+msgstr ""
+
+#: languages/countries.php:107
+msgid "Estonia"
+msgstr ""
+
+#: languages/countries.php:108
+msgid "Ethiopia"
+msgstr ""
+
+#: languages/countries.php:109
+msgid "Falkland Islands"
+msgstr ""
+
+#: languages/countries.php:110
+msgid "Faroe Islands"
+msgstr ""
+
+#: languages/countries.php:111
+msgid "Fiji Islands"
+msgstr ""
+
+#: languages/countries.php:112
+msgid "Finland"
+msgstr ""
+
+#: languages/countries.php:113
+msgid "France"
+msgstr ""
+
+#: languages/countries.php:114
+#: languages/states.php:1477
+msgid "French Guiana"
+msgstr ""
+
+#: languages/countries.php:115
+#: languages/states.php:1478
+msgid "French Polynesia"
+msgstr ""
+
+#: languages/countries.php:116
+msgid "French Southern Territories"
+msgstr ""
+
+#: languages/countries.php:117
+msgid "Gabon"
+msgstr ""
+
+#: languages/countries.php:118
+#: languages/states.php:5095
+msgid "Georgia"
+msgstr ""
+
+#: languages/countries.php:119
+msgid "Germany"
+msgstr ""
+
+#: languages/countries.php:120
+msgid "Ghana"
+msgstr ""
+
+#: languages/countries.php:121
+msgid "Gibraltar"
+msgstr ""
+
+#: languages/countries.php:122
+msgid "Greece"
+msgstr ""
+
+#: languages/countries.php:123
+msgid "Greenland"
+msgstr ""
+
+#: languages/countries.php:124
+msgid "Grenada"
+msgstr ""
+
+#: languages/countries.php:125
+#: languages/states.php:1480
+msgid "Guadeloupe"
+msgstr ""
+
+#: languages/countries.php:126
+#: languages/states.php:5096
+msgid "Guam"
+msgstr ""
+
+#: languages/countries.php:127
+msgid "Guatemala"
+msgstr ""
+
+#: languages/countries.php:128
+msgid "Guernsey and Alderney"
+msgstr ""
+
+#: languages/countries.php:129
+msgid "Guinea"
+msgstr ""
+
+#: languages/countries.php:130
+msgid "Guinea-Bissau"
+msgstr ""
+
+#: languages/countries.php:131
+msgid "Guyana"
+msgstr ""
+
+#: languages/countries.php:132
+msgid "Haiti"
+msgstr ""
+
+#: languages/countries.php:133
+msgid "Heard Island and McDonald Islands"
+msgstr ""
+
+#: languages/countries.php:134
+msgid "Honduras"
+msgstr ""
+
+#: languages/countries.php:135
+msgid "Hong Kong S.A.R."
+msgstr ""
+
+#: languages/countries.php:136
+msgid "Hungary"
+msgstr ""
+
+#: languages/countries.php:137
+msgid "Iceland"
+msgstr ""
+
+#: languages/countries.php:138
+msgid "India"
+msgstr ""
+
+#: languages/countries.php:139
+msgid "Indonesia"
+msgstr ""
+
+#: languages/countries.php:140
+msgid "Iran"
+msgstr ""
+
+#: languages/countries.php:141
+msgid "Iraq"
+msgstr ""
+
+#: languages/countries.php:142
+msgid "Ireland"
+msgstr ""
+
+#: languages/countries.php:143
+msgid "Isle of Man"
+msgstr ""
+
+#: languages/countries.php:144
+msgid "Israel"
+msgstr ""
+
+#: languages/countries.php:145
+msgid "Italy"
+msgstr ""
+
+#: languages/countries.php:146
+msgid "Jamaica"
+msgstr ""
+
+#: languages/countries.php:147
+msgid "Japan"
+msgstr ""
+
+#: languages/countries.php:148
+msgid "Jersey"
+msgstr ""
+
+#: languages/countries.php:149
+msgid "Jordan"
+msgstr ""
+
+#: languages/countries.php:150
+msgid "Kazakhstan"
+msgstr ""
+
+#: languages/countries.php:151
+msgid "Kenya"
+msgstr ""
+
+#: languages/countries.php:152
+msgid "Kiribati"
+msgstr ""
+
+#: languages/countries.php:153
+msgid "Korea North"
+msgstr ""
+
+#: languages/countries.php:154
+msgid "Korea South"
+msgstr ""
+
+#: languages/countries.php:155
+msgid "Kosovo"
+msgstr ""
+
+#: languages/countries.php:156
+msgid "Kuwait"
+msgstr ""
+
+#: languages/countries.php:157
+msgid "Kyrgyzstan"
+msgstr ""
+
+#: languages/countries.php:158
+msgid "Laos"
+msgstr ""
+
+#: languages/countries.php:159
+msgid "Latvia"
+msgstr ""
+
+#: languages/countries.php:160
+msgid "Lebanon"
+msgstr ""
+
+#: languages/countries.php:161
+msgid "Lesotho"
+msgstr ""
+
+#: languages/countries.php:162
+msgid "Liberia"
+msgstr ""
+
+#: languages/countries.php:163
+msgid "Libya"
+msgstr ""
+
+#: languages/countries.php:164
+msgid "Liechtenstein"
+msgstr ""
+
+#: languages/countries.php:165
+msgid "Lithuania"
+msgstr ""
+
+#: languages/countries.php:166
+#: languages/states.php:423
+msgid "Luxembourg"
+msgstr ""
+
+#: languages/countries.php:167
+msgid "Macau S.A.R."
+msgstr ""
+
+#: languages/countries.php:168
+msgid "Macedonia"
+msgstr ""
+
+#: languages/countries.php:169
+msgid "Madagascar"
+msgstr ""
+
+#: languages/countries.php:170
+msgid "Malawi"
+msgstr ""
+
+#: languages/countries.php:171
+msgid "Malaysia"
+msgstr ""
+
+#: languages/countries.php:172
+msgid "Maldives"
+msgstr ""
+
+#: languages/countries.php:173
+msgid "Mali"
+msgstr ""
+
+#: languages/countries.php:174
+msgid "Malta"
+msgstr ""
+
+#: languages/countries.php:175
+msgid "Marshall Islands"
+msgstr ""
+
+#: languages/countries.php:176
+#: languages/states.php:1486
+msgid "Martinique"
+msgstr ""
+
+#: languages/countries.php:177
+msgid "Mauritania"
+msgstr ""
+
+#: languages/countries.php:178
+msgid "Mauritius"
+msgstr ""
+
+#: languages/countries.php:179
+#: languages/states.php:1487
+msgid "Mayotte"
+msgstr ""
+
+#: languages/countries.php:180
+msgid "Mexico"
+msgstr ""
+
+#: languages/countries.php:181
+msgid "Micronesia"
+msgstr ""
+
+#: languages/countries.php:182
+msgid "Moldova"
+msgstr ""
+
+#: languages/countries.php:183
+msgid "Monaco"
+msgstr ""
+
+#: languages/countries.php:184
+msgid "Mongolia"
+msgstr ""
+
+#: languages/countries.php:185
+msgid "Montenegro"
+msgstr ""
+
+#: languages/countries.php:186
+msgid "Montserrat"
+msgstr ""
+
+#: languages/countries.php:187
+msgid "Morocco"
+msgstr ""
+
+#: languages/countries.php:188
+msgid "Mozambique"
+msgstr ""
+
+#: languages/countries.php:189
+msgid "Myanmar"
+msgstr ""
+
+#: languages/countries.php:190
+msgid "Namibia"
+msgstr ""
+
+#: languages/countries.php:191
+msgid "Nauru"
+msgstr ""
+
+#: languages/countries.php:192
+msgid "Nepal"
+msgstr ""
+
+#: languages/countries.php:193
+msgid "New Caledonia"
+msgstr ""
+
+#: languages/countries.php:194
+msgid "New Zealand"
+msgstr ""
+
+#: languages/countries.php:195
+msgid "Nicaragua"
+msgstr ""
+
+#: languages/countries.php:196
+msgid "Niger"
+msgstr ""
+
+#: languages/countries.php:197
+msgid "Nigeria"
+msgstr ""
+
+#: languages/countries.php:198
+msgid "Niue"
+msgstr ""
+
+#: languages/countries.php:199
+msgid "Norfolk Island"
+msgstr ""
+
+#: languages/countries.php:200
+#: languages/states.php:5121
+msgid "Northern Mariana Islands"
+msgstr ""
+
+#: languages/countries.php:201
+msgid "Norway"
+msgstr ""
+
+#: languages/countries.php:202
+msgid "Oman"
+msgstr ""
+
+#: languages/countries.php:203
+msgid "Pakistan"
+msgstr ""
+
+#: languages/countries.php:204
+msgid "Palau"
+msgstr ""
+
+#: languages/countries.php:205
+msgid "Palestinian Territory Occupied"
+msgstr ""
+
+#: languages/countries.php:206
+msgid "Panama"
+msgstr ""
+
+#: languages/countries.php:207
+msgid "Papua new Guinea"
+msgstr ""
+
+#: languages/countries.php:208
+msgid "Paraguay"
+msgstr ""
+
+#: languages/countries.php:209
+msgid "Peru"
+msgstr ""
+
+#: languages/countries.php:210
+msgid "Philippines"
+msgstr ""
+
+#: languages/countries.php:211
+msgid "Pitcairn Island"
+msgstr ""
+
+#: languages/countries.php:212
+msgid "Poland"
+msgstr ""
+
+#: languages/countries.php:213
+msgid "Portugal"
+msgstr ""
+
+#: languages/countries.php:214
+#: languages/states.php:5126
+msgid "Puerto Rico"
+msgstr ""
+
+#: languages/countries.php:215
+msgid "Qatar"
+msgstr ""
+
+#: languages/countries.php:216
+msgid "Reunion"
+msgstr ""
+
+#: languages/countries.php:217
+msgid "Romania"
+msgstr ""
+
+#: languages/countries.php:218
+msgid "Russia"
+msgstr ""
+
+#: languages/countries.php:219
+msgid "Rwanda"
+msgstr ""
+
+#: languages/countries.php:220
+#: languages/states.php:1717
+msgid "Saint Helena"
+msgstr ""
+
+#: languages/countries.php:221
+msgid "Saint Kitts And Nevis"
+msgstr ""
+
+#: languages/countries.php:222
+msgid "Saint Lucia"
+msgstr ""
+
+#: languages/countries.php:223
+#: languages/states.php:1500
+msgid "Saint Pierre and Miquelon"
+msgstr ""
+
+#: languages/countries.php:224
+msgid "Saint Vincent And The Grenadines"
+msgstr ""
+
+#: languages/countries.php:225
+msgid "Saint-Barthelemy"
+msgstr ""
+
+#: languages/countries.php:226
+msgid "Saint-Martin (French part)"
+msgstr ""
+
+#: languages/countries.php:227
+msgid "Samoa"
+msgstr ""
+
+#: languages/countries.php:228
+#: languages/states.php:4477
+msgid "San Marino"
+msgstr ""
+
+#: languages/countries.php:229
+msgid "Sao Tome and Principe"
+msgstr ""
+
+#: languages/countries.php:230
+msgid "Saudi Arabia"
+msgstr ""
+
+#: languages/countries.php:231
+msgid "Senegal"
+msgstr ""
+
+#: languages/countries.php:232
+msgid "Serbia"
+msgstr ""
+
+#: languages/countries.php:233
+msgid "Seychelles"
+msgstr ""
+
+#: languages/countries.php:234
+msgid "Sierra Leone"
+msgstr ""
+
+#: languages/countries.php:235
+msgid "Singapore"
+msgstr ""
+
+#: languages/countries.php:236
+msgid "Sint Maarten (Dutch part)"
+msgstr ""
+
+#: languages/countries.php:237
+msgid "Slovakia"
+msgstr ""
+
+#: languages/countries.php:238
+msgid "Slovenia"
+msgstr ""
+
+#: languages/countries.php:239
+msgid "Solomon Islands"
+msgstr ""
+
+#: languages/countries.php:240
+msgid "Somalia"
+msgstr ""
+
+#: languages/countries.php:241
+msgid "South Africa"
+msgstr ""
+
+#: languages/countries.php:242
+msgid "South Georgia"
+msgstr ""
+
+#: languages/countries.php:243
+msgid "South Sudan"
+msgstr ""
+
+#: languages/countries.php:244
+msgid "Spain"
+msgstr ""
+
+#: languages/countries.php:245
+msgid "Sri Lanka"
+msgstr ""
+
+#: languages/countries.php:246
+msgid "Sudan"
+msgstr ""
+
+#: languages/countries.php:247
+msgid "Suriname"
+msgstr ""
+
+#: languages/countries.php:248
+msgid "Svalbard And Jan Mayen Islands"
+msgstr ""
+
+#: languages/countries.php:249
+msgid "Swaziland"
+msgstr ""
+
+#: languages/countries.php:250
+msgid "Sweden"
+msgstr ""
+
+#: languages/countries.php:251
+msgid "Switzerland"
+msgstr ""
+
+#: languages/countries.php:252
+msgid "Syria"
+msgstr ""
+
+#: languages/countries.php:253
+msgid "Taiwan"
+msgstr ""
+
+#: languages/countries.php:254
+msgid "Tajikistan"
+msgstr ""
+
+#: languages/countries.php:255
+msgid "Tanzania"
+msgstr ""
+
+#: languages/countries.php:256
+msgid "Thailand"
+msgstr ""
+
+#: languages/countries.php:257
+msgid "The Bahamas"
+msgstr ""
+
+#: languages/countries.php:258
+msgid "The Democratic Republic Of The Congo"
+msgstr ""
+
+#: languages/countries.php:259
+msgid "The Gambia"
+msgstr ""
+
+#: languages/countries.php:260
+msgid "The Netherlands"
+msgstr ""
+
+#: languages/countries.php:261
+msgid "Togo"
+msgstr ""
+
+#: languages/countries.php:262
+msgid "Tokelau"
+msgstr ""
+
+#: languages/countries.php:263
+msgid "Tonga"
+msgstr ""
+
+#: languages/countries.php:264
+msgid "Trinidad And Tobago"
+msgstr ""
+
+#: languages/countries.php:265
+msgid "Tunisia"
+msgstr ""
+
+#: languages/countries.php:266
+msgid "Turkey"
+msgstr ""
+
+#: languages/countries.php:267
+msgid "Turkmenistan"
+msgstr ""
+
+#: languages/countries.php:268
+msgid "Turks And Caicos Islands"
+msgstr ""
+
+#: languages/countries.php:269
+msgid "Tuvalu"
+msgstr ""
+
+#: languages/countries.php:270
+msgid "Uganda"
+msgstr ""
+
+#: languages/countries.php:271
+msgid "Ukraine"
+msgstr ""
+
+#: languages/countries.php:272
+msgid "United Arab Emirates"
+msgstr ""
+
+#: languages/countries.php:273
+#: languages/states.php:1749
+msgid "United Kingdom"
+msgstr ""
+
+#: languages/countries.php:274
+msgid "United States"
+msgstr ""
+
+#: languages/countries.php:275
+#: languages/states.php:5132
+msgid "United States Minor Outlying Islands"
+msgstr ""
+
+#: languages/countries.php:276
+msgid "Uruguay"
+msgstr ""
+
+#: languages/countries.php:277
+msgid "Uzbekistan"
+msgstr ""
+
+#: languages/countries.php:278
+msgid "Vanuatu"
+msgstr ""
+
+#: languages/countries.php:279
+msgid "Vatican City State (Holy See)"
+msgstr ""
+
+#: languages/countries.php:280
+msgid "Venezuela"
+msgstr ""
+
+#: languages/countries.php:281
+msgid "Vietnam"
+msgstr ""
+
+#: languages/countries.php:282
+msgid "Virgin Islands (British)"
+msgstr ""
+
+#: languages/countries.php:283
+msgid "Virgin Islands (US)"
+msgstr ""
+
+#: languages/countries.php:284
+msgid "Wallis And Futuna Islands"
+msgstr ""
+
+#: languages/countries.php:285
+msgid "Western Sahara"
+msgstr ""
+
+#: languages/countries.php:286
+msgid "Yemen"
+msgstr ""
+
+#: languages/countries.php:287
+msgid "Zambia"
+msgstr ""
+
+#: languages/countries.php:288
+msgid "Zimbabwe"
+msgstr ""
+
+#: languages/currencies.php:39
+msgid "Afghan Afghani"
+msgstr ""
+
+#: languages/currencies.php:40
+msgid "Albanian Lek"
+msgstr ""
+
+#: languages/currencies.php:41
+msgid "Algerian Dinar"
+msgstr ""
+
+#: languages/currencies.php:42
+msgid "Angolan Kwanza"
+msgstr ""
+
+#: languages/currencies.php:43
+msgid "Argentine Peso"
+msgstr ""
+
+#: languages/currencies.php:44
+msgid "Armenian Dram"
+msgstr ""
+
+#: languages/currencies.php:45
+msgid "Aruban Florin"
+msgstr ""
+
+#: languages/currencies.php:46
+msgid "Australian Dollar"
+msgstr ""
+
+#: languages/currencies.php:47
+msgid "Azerbaijani Manat"
+msgstr ""
+
+#: languages/currencies.php:48
+msgid "Bahamian Dollar"
+msgstr ""
+
+#: languages/currencies.php:49
+msgid "Bahraini Dinar"
+msgstr ""
+
+#: languages/currencies.php:50
+msgid "Bangladeshi Taka"
+msgstr ""
+
+#: languages/currencies.php:51
+msgid "Barbadian Dollar"
+msgstr ""
+
+#: languages/currencies.php:52
+msgid "Belarusian Ruble"
+msgstr ""
+
+#: languages/currencies.php:53
+msgid "Belize Dollar"
+msgstr ""
+
+#: languages/currencies.php:54
+msgid "Bermudan Dollar"
+msgstr ""
+
+#: languages/currencies.php:55
+msgid "Bhutanese Ngultrum"
+msgstr ""
+
+#: languages/currencies.php:56
+msgid "Bitcoin"
+msgstr ""
+
+#: languages/currencies.php:57
+msgid "Bolivian Boliviano"
+msgstr ""
+
+#: languages/currencies.php:58
+msgid "Bosnia-Herzegovina Convertible Mark"
+msgstr ""
+
+#: languages/currencies.php:59
+msgid "Botswanan Pula"
+msgstr ""
+
+#: languages/currencies.php:60
+msgid "Brazilian Real"
+msgstr ""
+
+#: languages/currencies.php:61
+msgid "British Pound"
+msgstr ""
+
+#: languages/currencies.php:62
+msgid "Brunei Dollar"
+msgstr ""
+
+#: languages/currencies.php:63
+msgid "Bulgarian Lev"
+msgstr ""
+
+#: languages/currencies.php:64
+msgid "Burundian Franc"
+msgstr ""
+
+#: languages/currencies.php:65
+msgid "CFP Franc"
+msgstr ""
+
+#: languages/currencies.php:66
+msgid "Cambodian Riel"
+msgstr ""
+
+#: languages/currencies.php:67
+msgid "Canadian Dollar"
+msgstr ""
+
+#: languages/currencies.php:68
+msgid "Cape Verdean Escudo"
+msgstr ""
+
+#: languages/currencies.php:69
+msgid "Cayman Islands Dollar"
+msgstr ""
+
+#: languages/currencies.php:70
+msgid "Central African CFA Franc"
+msgstr ""
+
+#: languages/currencies.php:71
+msgid "Chilean Peso"
+msgstr ""
+
+#: languages/currencies.php:72
+msgid "Chinese Yuan"
+msgstr ""
+
+#: languages/currencies.php:73
+msgid "Colombian Peso"
+msgstr ""
+
+#: languages/currencies.php:74
+msgid "Comorian Franc"
+msgstr ""
+
+#: languages/currencies.php:75
+msgid "Congolese Franc"
+msgstr ""
+
+#: languages/currencies.php:76
+msgid "Costa Rican Colón"
+msgstr ""
+
+#: languages/currencies.php:77
+msgid "Croatian Kuna"
+msgstr ""
+
+#: languages/currencies.php:78
+msgid "Cuban Convertible Peso"
+msgstr ""
+
+#: languages/currencies.php:79
+msgid "Cuban Peso"
+msgstr ""
+
+#: languages/currencies.php:80
+msgid "Czech Koruna"
+msgstr ""
+
+#: languages/currencies.php:81
+msgid "Danish Krone"
+msgstr ""
+
+#: languages/currencies.php:82
+msgid "Djiboutian Franc"
+msgstr ""
+
+#: languages/currencies.php:83
+msgid "Dominican Peso"
+msgstr ""
+
+#: languages/currencies.php:84
+msgid "East Caribbean Dollar"
+msgstr ""
+
+#: languages/currencies.php:85
+msgid "Egyptian Pound"
+msgstr ""
+
+#: languages/currencies.php:86
+msgid "Eritrean Nakfa"
+msgstr ""
+
+#: languages/currencies.php:87
+msgid "Ethereum"
+msgstr ""
+
+#: languages/currencies.php:88
+msgid "Ethiopian Birr"
+msgstr ""
+
+#: languages/currencies.php:89
+msgid "Euro"
+msgstr ""
+
+#: languages/currencies.php:90
+msgid "Falkland Islands Pound"
+msgstr ""
+
+#: languages/currencies.php:91
+msgid "Fijian Dollar"
+msgstr ""
+
+#: languages/currencies.php:92
+msgid "Gambian Dalasi"
+msgstr ""
+
+#: languages/currencies.php:93
+msgid "Georgian Lari"
+msgstr ""
+
+#: languages/currencies.php:94
+msgid "Ghanaian Cedi"
+msgstr ""
+
+#: languages/currencies.php:95
+msgid "Gibraltar Pound"
+msgstr ""
+
+#: languages/currencies.php:96
+msgid "Guatemalan Quetzal"
+msgstr ""
+
+#: languages/currencies.php:97
+msgid "Guernsey Pound"
+msgstr ""
+
+#: languages/currencies.php:98
+msgid "Guinean Franc"
+msgstr ""
+
+#: languages/currencies.php:99
+msgid "Guyanaese Dollar"
+msgstr ""
+
+#: languages/currencies.php:100
+msgid "Haitian Gourde"
+msgstr ""
+
+#: languages/currencies.php:101
+msgid "Honduran Lempira"
+msgstr ""
+
+#: languages/currencies.php:102
+msgid "Hong Kong Dollar"
+msgstr ""
+
+#: languages/currencies.php:103
+msgid "Hungarian Forint"
+msgstr ""
+
+#: languages/currencies.php:104
+msgid "Icelandic Króna"
+msgstr ""
+
+#: languages/currencies.php:105
+msgid "Indian Rupee"
+msgstr ""
+
+#: languages/currencies.php:106
+msgid "Indonesian Rupiah"
+msgstr ""
+
+#: languages/currencies.php:107
+msgid "Iranian Rial"
+msgstr ""
+
+#: languages/currencies.php:108
+msgid "Iraqi Dinar"
+msgstr ""
+
+#: languages/currencies.php:109
+msgid "Israeli New Shekel"
+msgstr ""
+
+#: languages/currencies.php:110
+msgid "Jamaican Dollar"
+msgstr ""
+
+#: languages/currencies.php:111
+msgid "Japanese Yen"
+msgstr ""
+
+#: languages/currencies.php:112
+msgid "Jersey Pound"
+msgstr ""
+
+#: languages/currencies.php:113
+msgid "Jordanian Dinar"
+msgstr ""
+
+#: languages/currencies.php:114
+msgid "Kazakhstani Tenge"
+msgstr ""
+
+#: languages/currencies.php:115
+msgid "Kenyan Shilling"
+msgstr ""
+
+#: languages/currencies.php:116
+msgid "Kuwaiti Dinar"
+msgstr ""
+
+#: languages/currencies.php:117
+msgid "Kyrgystani Som"
+msgstr ""
+
+#: languages/currencies.php:118
+msgid "Laotian Kip"
+msgstr ""
+
+#: languages/currencies.php:119
+msgid "Lebanese Pound"
+msgstr ""
+
+#: languages/currencies.php:120
+msgid "Lesotho Loti"
+msgstr ""
+
+#: languages/currencies.php:121
+msgid "Liberian Dollar"
+msgstr ""
+
+#: languages/currencies.php:122
+msgid "Libyan Dinar"
+msgstr ""
+
+#: languages/currencies.php:123
+msgid "Litecoin"
+msgstr ""
+
+#: languages/currencies.php:124
+msgid "Macanese Pataca"
+msgstr ""
+
+#: languages/currencies.php:125
+msgid "Macedonian Denar"
+msgstr ""
+
+#: languages/currencies.php:126
+msgid "Malagasy Ariary"
+msgstr ""
+
+#: languages/currencies.php:127
+msgid "Malawian Kwacha"
+msgstr ""
+
+#: languages/currencies.php:128
+msgid "Malaysian Ringgit"
+msgstr ""
+
+#: languages/currencies.php:129
+msgid "Maldivian rufiyaa"
+msgstr ""
+
+#: languages/currencies.php:130
+msgid "Manx Pound"
+msgstr ""
+
+#: languages/currencies.php:131
+msgid "Mauritanian Ouguiya"
+msgstr ""
+
+#: languages/currencies.php:132
+msgid "Mauritian Rupee"
+msgstr ""
+
+#: languages/currencies.php:133
+msgid "Mexican Peso"
+msgstr ""
+
+#: languages/currencies.php:134
+msgid "Moldovan Leu"
+msgstr ""
+
+#: languages/currencies.php:135
+msgid "Mongolian Tugrik"
+msgstr ""
+
+#: languages/currencies.php:136
+msgid "Moroccan Dirham"
+msgstr ""
+
+#: languages/currencies.php:137
+msgid "Mozambican Metical"
+msgstr ""
+
+#: languages/currencies.php:138
+msgid "Myanmar Kyat"
+msgstr ""
+
+#: languages/currencies.php:139
+msgid "Namibian Dollar"
+msgstr ""
+
+#: languages/currencies.php:140
+msgid "Nepalese Rupee"
+msgstr ""
+
+#: languages/currencies.php:141
+msgid "Netherlands Antillean Guilder"
+msgstr ""
+
+#: languages/currencies.php:142
+msgid "New Taiwan Dollar"
+msgstr ""
+
+#: languages/currencies.php:143
+msgid "New Zealand Dollar"
+msgstr ""
+
+#: languages/currencies.php:144
+msgid "Nicaraguan Córdoba"
+msgstr ""
+
+#: languages/currencies.php:145
+msgid "Nigerian Naira"
+msgstr ""
+
+#: languages/currencies.php:146
+msgid "North Korean Won"
+msgstr ""
+
+#: languages/currencies.php:147
+msgid "Norwegian Krone"
+msgstr ""
+
+#: languages/currencies.php:148
+msgid "Omani Rial"
+msgstr ""
+
+#: languages/currencies.php:149
+msgid "Pakistani Rupee"
+msgstr ""
+
+#: languages/currencies.php:150
+msgid "Panamanian Balboa"
+msgstr ""
+
+#: languages/currencies.php:151
+msgid "Papua New Guinean Kina"
+msgstr ""
+
+#: languages/currencies.php:152
+msgid "Paraguayan Guarani"
+msgstr ""
+
+#: languages/currencies.php:153
+msgid "Peruvian Sol"
+msgstr ""
+
+#: languages/currencies.php:154
+msgid "Philippine Piso"
+msgstr ""
+
+#: languages/currencies.php:155
+msgid "Polish Zloty"
+msgstr ""
+
+#: languages/currencies.php:156
+msgid "Qatari Rial"
+msgstr ""
+
+#: languages/currencies.php:157
+msgid "Romanian Leu"
+msgstr ""
+
+#: languages/currencies.php:158
+msgid "Russian Ruble"
+msgstr ""
+
+#: languages/currencies.php:159
+msgid "Rwandan Franc"
+msgstr ""
+
+#: languages/currencies.php:160
+msgid "Samoan Tala"
+msgstr ""
+
+#: languages/currencies.php:161
+msgid "Saudi Riyal"
+msgstr ""
+
+#: languages/currencies.php:162
+msgid "Serbian Dinar"
+msgstr ""
+
+#: languages/currencies.php:163
+msgid "Seychellois Rupee"
+msgstr ""
+
+#: languages/currencies.php:164
+msgid "Sierra Leonean Leone"
+msgstr ""
+
+#: languages/currencies.php:165
+msgid "Singapore Dollar"
+msgstr ""
+
+#: languages/currencies.php:166
+msgid "Solomon Islands Dollar"
+msgstr ""
+
+#: languages/currencies.php:167
+msgid "Somali Shilling"
+msgstr ""
+
+#: languages/currencies.php:168
+msgid "South African Rand"
+msgstr ""
+
+#: languages/currencies.php:169
+msgid "South Korean Won"
+msgstr ""
+
+#: languages/currencies.php:170
+msgid "South Sudanese Pound"
+msgstr ""
+
+#: languages/currencies.php:171
+msgid "Sri Lankan Rupee"
+msgstr ""
+
+#: languages/currencies.php:172
+msgid "St. Helena Pound"
+msgstr ""
+
+#: languages/currencies.php:173
+msgid "Sudanese Pound"
+msgstr ""
+
+#: languages/currencies.php:174
+msgid "Surinamese Dollar"
+msgstr ""
+
+#: languages/currencies.php:175
+msgid "Swazi Lilangeni"
+msgstr ""
+
+#: languages/currencies.php:176
+msgid "Swedish Krona"
+msgstr ""
+
+#: languages/currencies.php:177
+msgid "Swiss Franc"
+msgstr ""
+
+#: languages/currencies.php:178
+msgid "Syrian Pound"
+msgstr ""
+
+#: languages/currencies.php:179
+msgid "São Tomé and Príncipe dobra"
+msgstr ""
+
+#: languages/currencies.php:180
+msgid "Tajikistani Somoni"
+msgstr ""
+
+#: languages/currencies.php:181
+msgid "Tanzanian Shilling"
+msgstr ""
+
+#: languages/currencies.php:182
+msgid "Thai Baht"
+msgstr ""
+
+#: languages/currencies.php:183
+msgid "Tongan Paʻanga"
+msgstr ""
+
+#: languages/currencies.php:184
+msgid "Transnistrian Ruble"
+msgstr ""
+
+#: languages/currencies.php:185
+msgid "Trinidad & Tobago Dollar"
+msgstr ""
+
+#: languages/currencies.php:186
+msgid "Tunisian Dinar"
+msgstr ""
+
+#: languages/currencies.php:187
+msgid "Turkish Lira"
+msgstr ""
+
+#: languages/currencies.php:188
+msgid "Turkmenistan manat"
+msgstr ""
+
+#: languages/currencies.php:189
+msgid "Ugandan Shilling"
+msgstr ""
+
+#: languages/currencies.php:190
+msgid "Ukrainian Hryvnia"
+msgstr ""
+
+#: languages/currencies.php:191
+msgid "United Arab Emirates Dirham"
+msgstr ""
+
+#: languages/currencies.php:192
+msgid "United States Dollar"
+msgstr ""
+
+#: languages/currencies.php:193
+msgid "Uruguayan Peso"
+msgstr ""
+
+#: languages/currencies.php:194
+msgid "Uzbekistani Som"
+msgstr ""
+
+#: languages/currencies.php:195
+msgid "Vanuatu Vatu"
+msgstr ""
+
+#: languages/currencies.php:196
+msgid "Venezuelan Bolívar"
+msgstr ""
+
+#: languages/currencies.php:197
+msgid "Vietnamese Dong"
+msgstr ""
+
+#: languages/currencies.php:198
+msgid "West African CFA Franc"
+msgstr ""
+
+#: languages/currencies.php:199
+msgid "Yemeni Rial"
+msgstr ""
+
+#: languages/currencies.php:200
+msgid "Zambian Kwacha"
+msgstr ""
+
+#: languages/currencies.php:201
+msgid "Zimbabwean Dollar"
+msgstr ""
+
+#: languages/currency-symbols.php:39
+msgid "إ.د"
+msgstr ""
+
+#: languages/currency-symbols.php:40
+msgid "؋"
+msgstr ""
+
+#: languages/currency-symbols.php:41
+msgid "Lek"
+msgstr ""
+
+#: languages/currency-symbols.php:42
+msgid "֏"
+msgstr ""
+
+#: languages/currency-symbols.php:43
+#: languages/currency-symbols.php:47
+msgid "ƒ"
+msgstr ""
+
+#: languages/currency-symbols.php:44
+msgid "Kz"
+msgstr ""
+
+#: languages/currency-symbols.php:45
+#: languages/currency-symbols.php:46
+#: languages/currency-symbols.php:55
+#: languages/currency-symbols.php:64
+#: languages/currency-symbols.php:65
+#: languages/currency-symbols.php:68
+#: languages/currency-symbols.php:70
+#: languages/currency-symbols.php:73
+#: languages/currency-symbols.php:74
+#: languages/currency-symbols.php:78
+#: languages/currency-symbols.php:95
+#: languages/currency-symbols.php:96
+#: languages/currency-symbols.php:119
+#: languages/currency-symbols.php:125
+#: languages/currency-symbols.php:135
+#: languages/currency-symbols.php:140
+#: languages/currency-symbols.php:143
+#: languages/currency-symbols.php:148
+#: languages/currency-symbols.php:168
+#: languages/currency-symbols.php:172
+#: languages/currency-symbols.php:181
+#: languages/currency-symbols.php:183
+#: languages/currency-symbols.php:184
+#: languages/currency-symbols.php:188
+#: languages/currency-symbols.php:189
+#: languages/currency-symbols.php:196
+#: languages/currency-symbols.php:202
+msgid "$"
+msgstr ""
+
+#: languages/currency-symbols.php:48
+msgid "m"
+msgstr ""
+
+#: languages/currency-symbols.php:49
+msgid "KM"
+msgstr ""
+
+#: languages/currency-symbols.php:50
+msgid "Bds$"
+msgstr ""
+
+#: languages/currency-symbols.php:51
+msgid "৳"
+msgstr ""
+
+#: languages/currency-symbols.php:52
+msgid "Лв."
+msgstr ""
+
+#: languages/currency-symbols.php:53
+msgid ".د.ب"
+msgstr ""
+
+#: languages/currency-symbols.php:54
+msgid "FBu"
+msgstr ""
+
+#: languages/currency-symbols.php:56
+#: languages/currency-symbols.php:59
+msgid "B$"
+msgstr ""
+
+#: languages/currency-symbols.php:57
+msgid "Bs."
+msgstr ""
+
+#: languages/currency-symbols.php:58
+msgid "R$"
+msgstr ""
+
+#: languages/currency-symbols.php:60
+msgid "₿"
+msgstr ""
+
+#: languages/currency-symbols.php:61
+msgid "Nu."
+msgstr ""
+
+#: languages/currency-symbols.php:62
+msgid "P"
+msgstr ""
+
+#: languages/currency-symbols.php:63
+msgid "Br"
+msgstr ""
+
+#: languages/currency-symbols.php:66
+msgid "FC"
+msgstr ""
+
+#: languages/currency-symbols.php:67
+msgid "CHF"
+msgstr ""
+
+#: languages/currency-symbols.php:69
+#: languages/currency-symbols.php:111
+msgid "¥"
+msgstr ""
+
+#: languages/currency-symbols.php:71
+msgid "₡"
+msgstr ""
+
+#: languages/currency-symbols.php:72
+msgid "CUC"
+msgstr ""
+
+#: languages/currency-symbols.php:75
+msgid "Kč"
+msgstr ""
+
+#: languages/currency-symbols.php:76
+msgid "Fdj"
+msgstr ""
+
+#: languages/currency-symbols.php:77
+msgid "Kr."
+msgstr ""
+
+#: languages/currency-symbols.php:79
+msgid "دج"
+msgstr ""
+
+#: languages/currency-symbols.php:80
+msgid "ج.م"
+msgstr ""
+
+#: languages/currency-symbols.php:81
+msgid "Nfk"
+msgstr ""
+
+#: languages/currency-symbols.php:82
+msgid "Nkf"
+msgstr ""
+
+#: languages/currency-symbols.php:83
+msgid "ETH"
+msgstr ""
+
+#: languages/currency-symbols.php:84
+msgid "€"
+msgstr ""
+
+#: languages/currency-symbols.php:85
+msgid "FJ$"
+msgstr ""
+
+#: languages/currency-symbols.php:86
+#: languages/currency-symbols.php:87
+#: languages/currency-symbols.php:90
+#: languages/currency-symbols.php:93
+#: languages/currency-symbols.php:103
+#: languages/currency-symbols.php:108
+#: languages/currency-symbols.php:123
+#: languages/currency-symbols.php:169
+#: languages/currency-symbols.php:173
+msgid "£"
+msgstr ""
+
+#: languages/currency-symbols.php:88
+msgid "ლ"
+msgstr ""
+
+#: languages/currency-symbols.php:89
+msgid "GH₵"
+msgstr ""
+
+#: languages/currency-symbols.php:91
+msgid "D"
+msgstr ""
+
+#: languages/currency-symbols.php:92
+msgid "FG"
+msgstr ""
+
+#: languages/currency-symbols.php:94
+msgid "Q"
+msgstr ""
+
+#: languages/currency-symbols.php:97
+#: languages/currency-symbols.php:126
+#: languages/currency-symbols.php:130
+msgid "L"
+msgstr ""
+
+#: languages/currency-symbols.php:98
+msgid "kn"
+msgstr ""
+
+#: languages/currency-symbols.php:99
+msgid "G"
+msgstr ""
+
+#: languages/currency-symbols.php:100
+msgid "Ft"
+msgstr ""
+
+#: languages/currency-symbols.php:101
+msgid "Rp"
+msgstr ""
+
+#: languages/currency-symbols.php:102
+msgid "₪"
+msgstr ""
+
+#: languages/currency-symbols.php:104
+msgid "₹"
+msgstr ""
+
+#: languages/currency-symbols.php:105
+msgid "د.ع"
+msgstr ""
+
+#: languages/currency-symbols.php:106
+#: languages/currency-symbols.php:163
+#: languages/currency-symbols.php:199
+msgid "﷼"
+msgstr ""
+
+#: languages/currency-symbols.php:107
+#: languages/currency-symbols.php:146
+#: languages/currency-symbols.php:167
+msgid "kr"
+msgstr ""
+
+#: languages/currency-symbols.php:109
+msgid "J$"
+msgstr ""
+
+#: languages/currency-symbols.php:110
+msgid "ا.د"
+msgstr ""
+
+#: languages/currency-symbols.php:112
+msgid "KSh"
+msgstr ""
+
+#: languages/currency-symbols.php:113
+#: languages/currency-symbols.php:190
+msgid "лв"
+msgstr ""
+
+#: languages/currency-symbols.php:114
+msgid "KHR"
+msgstr ""
+
+#: languages/currency-symbols.php:115
+msgid "CF"
+msgstr ""
+
+#: languages/currency-symbols.php:116
+#: languages/currency-symbols.php:117
+msgid "₩"
+msgstr ""
+
+#: languages/currency-symbols.php:118
+msgid "ك.د"
+msgstr ""
+
+#: languages/currency-symbols.php:121
+msgid "₸"
+msgstr ""
+
+#: languages/currency-symbols.php:122
+msgid "₭"
+msgstr ""
+
+#: languages/currency-symbols.php:124
+msgid "Rs"
+msgstr ""
+
+#: languages/currency-symbols.php:127
+msgid "LTC"
+msgstr ""
+
+#: languages/currency-symbols.php:128
+msgid "د.ل"
+msgstr ""
+
+#: languages/currency-symbols.php:129
+msgid "MAD"
+msgstr ""
+
+#: languages/currency-symbols.php:131
+msgid "Ar"
+msgstr ""
+
+#: languages/currency-symbols.php:132
+msgid "ден"
+msgstr ""
+
+#: languages/currency-symbols.php:133
+#: languages/currency-symbols.php:152
+msgid "K"
+msgstr ""
+
+#: languages/currency-symbols.php:134
+msgid "₮"
+msgstr ""
+
+#: languages/currency-symbols.php:136
+msgid "MRU"
+msgstr ""
+
+#: languages/currency-symbols.php:137
+#: languages/currency-symbols.php:147
+#: languages/currency-symbols.php:154
+msgid "₨"
+msgstr ""
+
+#: languages/currency-symbols.php:138
+msgid "Rf"
+msgstr ""
+
+#: languages/currency-symbols.php:139
+msgid "MK"
+msgstr ""
+
+#: languages/currency-symbols.php:141
+msgid "RM"
+msgstr ""
+
+#: languages/currency-symbols.php:142
+msgid "MT"
+msgstr ""
+
+#: languages/currency-symbols.php:144
+msgid "₦"
+msgstr ""
+
+#: languages/currency-symbols.php:145
+msgid "C$"
+msgstr ""
+
+#: languages/currency-symbols.php:149
+msgid ".ع.ر"
+msgstr ""
+
+#: languages/currency-symbols.php:150
+msgid "B/."
+msgstr ""
+
+#: languages/currency-symbols.php:151
+msgid "S/."
+msgstr ""
+
+#: languages/currency-symbols.php:153
+msgid "₱"
+msgstr ""
+
+#: languages/currency-symbols.php:155
+msgid "zł"
+msgstr ""
+
+#: languages/currency-symbols.php:156
+#: languages/currency-symbols.php:161
+msgid "₽"
+msgstr ""
+
+#: languages/currency-symbols.php:157
+msgid "₲"
+msgstr ""
+
+#: languages/currency-symbols.php:158
+msgid "ق.ر"
+msgstr ""
+
+#: languages/currency-symbols.php:159
+msgid "lei"
+msgstr ""
+
+#: languages/currency-symbols.php:160
+msgid "din"
+msgstr ""
+
+#: languages/currency-symbols.php:162
+msgid "FRw"
+msgstr ""
+
+#: languages/currency-symbols.php:164
+msgid "Si$"
+msgstr ""
+
+#: languages/currency-symbols.php:165
+msgid "SRe"
+msgstr ""
+
+#: languages/currency-symbols.php:166
+msgid ".س.ج"
+msgstr ""
+
+#: languages/currency-symbols.php:170
+msgid "Le"
+msgstr ""
+
+#: languages/currency-symbols.php:171
+msgid "Sh.so."
+msgstr ""
+
+#: languages/currency-symbols.php:174
+msgid "Db"
+msgstr ""
+
+#: languages/currency-symbols.php:175
+msgid "LS"
+msgstr ""
+
+#: languages/currency-symbols.php:176
+msgid "E"
+msgstr ""
+
+#: languages/currency-symbols.php:177
+msgid "฿"
+msgstr ""
+
+#: languages/currency-symbols.php:178
+msgid "SM"
+msgstr ""
+
+#: languages/currency-symbols.php:179
+msgid "T"
+msgstr ""
+
+#: languages/currency-symbols.php:180
+msgid "ت.د"
+msgstr ""
+
+#: languages/currency-symbols.php:182
+msgid "₺"
+msgstr ""
+
+#: languages/currency-symbols.php:185
+msgid "TSh"
+msgstr ""
+
+#: languages/currency-symbols.php:186
+msgid "₴"
+msgstr ""
+
+#: languages/currency-symbols.php:187
+msgid "USh"
+msgstr ""
+
+#: languages/currency-symbols.php:191
+msgid "Bs"
+msgstr ""
+
+#: languages/currency-symbols.php:192
+msgid "₫"
+msgstr ""
+
+#: languages/currency-symbols.php:193
+msgid "VT"
+msgstr ""
+
+#: languages/currency-symbols.php:194
+msgid "SAT"
+msgstr ""
+
+#: languages/currency-symbols.php:195
+msgid "FCFA"
+msgstr ""
+
+#: languages/currency-symbols.php:197
+msgid "CFA"
+msgstr ""
+
+#: languages/currency-symbols.php:198
+msgid "₣"
+msgstr ""
+
+#: languages/currency-symbols.php:200
+msgid "R"
+msgstr ""
+
+#: languages/currency-symbols.php:201
+msgid "ZK"
+msgstr ""
+
+#: languages/states.php:42
+msgid "Andorra la Vella"
+msgstr ""
+
+#: languages/states.php:43
+msgid "Canillo"
+msgstr ""
+
+#: languages/states.php:44
+msgid "Encamp"
+msgstr ""
+
+#: languages/states.php:45
+msgid "Escaldes-Engordany"
+msgstr ""
+
+#: languages/states.php:46
+msgid "La Massana"
+msgstr ""
+
+#: languages/states.php:47
+msgid "Ordino"
+msgstr ""
+
+#: languages/states.php:48
+msgid "Sant Julià de Lòria"
+msgstr ""
+
+#: languages/states.php:51
+msgid "Abu Dhabi Emirate"
+msgstr ""
+
+#: languages/states.php:52
+msgid "Ajman Emirate"
+msgstr ""
+
+#: languages/states.php:53
+msgid "Dubai"
+msgstr ""
+
+#: languages/states.php:54
+msgid "Fujairah"
+msgstr ""
+
+#: languages/states.php:55
+msgid "Ras al-Khaimah"
+msgstr ""
+
+#: languages/states.php:56
+msgid "Sharjah Emirate"
+msgstr ""
+
+#: languages/states.php:57
+msgid "Umm al-Quwain"
+msgstr ""
+
+#: languages/states.php:60
+msgid "Badakhshan"
+msgstr ""
+
+#: languages/states.php:61
+msgid "Badghis"
+msgstr ""
+
+#: languages/states.php:62
+msgid "Baghlan"
+msgstr ""
+
+#: languages/states.php:63
+msgid "Balkh"
+msgstr ""
+
+#: languages/states.php:64
+msgid "Bamyan"
+msgstr ""
+
+#: languages/states.php:65
+msgid "Daykundi"
+msgstr ""
+
+#: languages/states.php:66
+msgid "Farah"
+msgstr ""
+
+#: languages/states.php:67
+msgid "Faryab"
+msgstr ""
+
+#: languages/states.php:68
+msgid "Ghazni"
+msgstr ""
+
+#: languages/states.php:69
+msgid "Ghōr"
+msgstr ""
+
+#: languages/states.php:70
+msgid "Helmand"
+msgstr ""
+
+#: languages/states.php:71
+msgid "Herat"
+msgstr ""
+
+#: languages/states.php:72
+msgid "Jowzjan"
+msgstr ""
+
+#: languages/states.php:73
+msgid "Kabul"
+msgstr ""
+
+#: languages/states.php:74
+msgid "Kandahar"
+msgstr ""
+
+#: languages/states.php:75
+msgid "Kapisa"
+msgstr ""
+
+#: languages/states.php:76
+msgid "Khost"
+msgstr ""
+
+#: languages/states.php:77
+msgid "Kunar"
+msgstr ""
+
+#: languages/states.php:78
+msgid "Kunduz Province"
+msgstr ""
+
+#: languages/states.php:79
+msgid "Laghman"
+msgstr ""
+
+#: languages/states.php:80
+msgid "Logar"
+msgstr ""
+
+#: languages/states.php:81
+msgid "Nangarhar"
+msgstr ""
+
+#: languages/states.php:82
+msgid "Nimruz"
+msgstr ""
+
+#: languages/states.php:83
+msgid "Nuristan"
+msgstr ""
+
+#: languages/states.php:84
+msgid "Paktia"
+msgstr ""
+
+#: languages/states.php:85
+msgid "Paktika"
+msgstr ""
+
+#: languages/states.php:86
+msgid "Panjshir"
+msgstr ""
+
+#: languages/states.php:87
+msgid "Parwan"
+msgstr ""
+
+#: languages/states.php:88
+msgid "Samangan"
+msgstr ""
+
+#: languages/states.php:89
+msgid "Sar-e Pol"
+msgstr ""
+
+#: languages/states.php:90
+msgid "Takhar"
+msgstr ""
+
+#: languages/states.php:91
+msgid "Urozgan"
+msgstr ""
+
+#: languages/states.php:92
+msgid "Zabul"
+msgstr ""
+
+#: languages/states.php:95
+msgid "Barbuda"
+msgstr ""
+
+#: languages/states.php:96
+msgid "Redonda"
+msgstr ""
+
+#: languages/states.php:97
+#: languages/states.php:1164
+#: languages/states.php:1771
+#: languages/states.php:5185
+msgid "Saint George Parish"
+msgstr ""
+
+#: languages/states.php:98
+#: languages/states.php:1165
+#: languages/states.php:1772
+msgid "Saint John Parish"
+msgstr ""
+
+#: languages/states.php:99
+#: languages/states.php:2395
+msgid "Saint Mary Parish"
+msgstr ""
+
+#: languages/states.php:100
+#: languages/states.php:1160
+msgid "Saint Paul Parish"
+msgstr ""
+
+#: languages/states.php:101
+#: languages/states.php:1161
+msgid "Saint Peter Parish"
+msgstr ""
+
+#: languages/states.php:102
+msgid "Saint Philip Parish"
+msgstr ""
+
+#: languages/states.php:106
+msgid "Shkodër County"
+msgstr ""
+
+#: languages/states.php:107
+msgid "Tirana County"
+msgstr ""
+
+#: languages/states.php:108
+msgid "Vlorë County"
+msgstr ""
+
+#: languages/states.php:109
+msgid "Berat County"
+msgstr ""
+
+#: languages/states.php:110
+msgid "Berat District"
+msgstr ""
+
+#: languages/states.php:111
+msgid "Bulqizë District"
+msgstr ""
+
+#: languages/states.php:112
+msgid "Delvinë District"
+msgstr ""
+
+#: languages/states.php:113
+msgid "Devoll District"
+msgstr ""
+
+#: languages/states.php:114
+msgid "Dibër County"
+msgstr ""
+
+#: languages/states.php:115
+msgid "Dibër District"
+msgstr ""
+
+#: languages/states.php:116
+msgid "Durrës County"
+msgstr ""
+
+#: languages/states.php:117
+msgid "Durrës District"
+msgstr ""
+
+#: languages/states.php:118
+msgid "Elbasan County"
+msgstr ""
+
+#: languages/states.php:119
+msgid "Fier County"
+msgstr ""
+
+#: languages/states.php:120
+msgid "Fier District"
+msgstr ""
+
+#: languages/states.php:121
+msgid "Gjirokastër County"
+msgstr ""
+
+#: languages/states.php:122
+msgid "Gjirokastër District"
+msgstr ""
+
+#: languages/states.php:123
+msgid "Gramsh District"
+msgstr ""
+
+#: languages/states.php:124
+msgid "Has District"
+msgstr ""
+
+#: languages/states.php:125
+msgid "Kavajë District"
+msgstr ""
+
+#: languages/states.php:126
+msgid "Kolonjë District"
+msgstr ""
+
+#: languages/states.php:127
+msgid "Korçë County"
+msgstr ""
+
+#: languages/states.php:128
+msgid "Korçë District"
+msgstr ""
+
+#: languages/states.php:129
+msgid "Krujë District"
+msgstr ""
+
+#: languages/states.php:130
+msgid "Kukës County"
+msgstr ""
+
+#: languages/states.php:131
+msgid "Kukës District"
+msgstr ""
+
+#: languages/states.php:132
+msgid "Kurbin District"
+msgstr ""
+
+#: languages/states.php:133
+msgid "Kuçovë District"
+msgstr ""
+
+#: languages/states.php:134
+msgid "Lezhë County"
+msgstr ""
+
+#: languages/states.php:135
+msgid "Lezhë District"
+msgstr ""
+
+#: languages/states.php:136
+msgid "Librazhd District"
+msgstr ""
+
+#: languages/states.php:137
+msgid "Lushnjë District"
+msgstr ""
+
+#: languages/states.php:138
+msgid "Mallakastër District"
+msgstr ""
+
+#: languages/states.php:139
+msgid "Malësi e Madhe District"
+msgstr ""
+
+#: languages/states.php:140
+msgid "Mat District"
+msgstr ""
+
+#: languages/states.php:141
+msgid "Mirditë District"
+msgstr ""
+
+#: languages/states.php:142
+msgid "Peqin District"
+msgstr ""
+
+#: languages/states.php:143
+msgid "Pogradec District"
+msgstr ""
+
+#: languages/states.php:144
+msgid "Pukë District"
+msgstr ""
+
+#: languages/states.php:145
+msgid "Përmet District"
+msgstr ""
+
+#: languages/states.php:146
+msgid "Sarandë District"
+msgstr ""
+
+#: languages/states.php:147
+msgid "Shkodër District"
+msgstr ""
+
+#: languages/states.php:148
+msgid "Skrapar District"
+msgstr ""
+
+#: languages/states.php:149
+msgid "Tepelenë District"
+msgstr ""
+
+#: languages/states.php:150
+msgid "Tirana District"
+msgstr ""
+
+#: languages/states.php:151
+msgid "Tropojë District"
+msgstr ""
+
+#: languages/states.php:152
+msgid "Vlorë District"
+msgstr ""
+
+#: languages/states.php:155
+msgid "Aragatsotn Region"
+msgstr ""
+
+#: languages/states.php:156
+msgid "Ararat Province"
+msgstr ""
+
+#: languages/states.php:157
+msgid "Armavir Region"
+msgstr ""
+
+#: languages/states.php:158
+msgid "Gegharkunik Province"
+msgstr ""
+
+#: languages/states.php:159
+msgid "Kotayk Region"
+msgstr ""
+
+#: languages/states.php:160
+msgid "Lori Region"
+msgstr ""
+
+#: languages/states.php:161
+msgid "Shirak Region"
+msgstr ""
+
+#: languages/states.php:162
+msgid "Syunik Province"
+msgstr ""
+
+#: languages/states.php:163
+msgid "Tavush Region"
+msgstr ""
+
+#: languages/states.php:164
+msgid "Vayots Dzor Region"
+msgstr ""
+
+#: languages/states.php:165
+msgid "Yerevan"
+msgstr ""
+
+#: languages/states.php:168
+msgid "Bengo Province"
+msgstr ""
+
+#: languages/states.php:169
+msgid "Benguela Province"
+msgstr ""
+
+#: languages/states.php:170
+msgid "Bié Province"
+msgstr ""
+
+#: languages/states.php:171
+msgid "Cabinda Province"
+msgstr ""
+
+#: languages/states.php:172
+msgid "Cuando Cubango Province"
+msgstr ""
+
+#: languages/states.php:173
+msgid "Cuanza Norte Province"
+msgstr ""
+
+#: languages/states.php:174
+msgid "Cuanza Sul"
+msgstr ""
+
+#: languages/states.php:175
+msgid "Cunene Province"
+msgstr ""
+
+#: languages/states.php:176
+msgid "Huambo Province"
+msgstr ""
+
+#: languages/states.php:177
+msgid "Huíla Province"
+msgstr ""
+
+#: languages/states.php:178
+msgid "Luanda Province"
+msgstr ""
+
+#: languages/states.php:179
+msgid "Lunda Norte Province"
+msgstr ""
+
+#: languages/states.php:180
+msgid "Lunda Sul Province"
+msgstr ""
+
+#: languages/states.php:181
+msgid "Malanje Province"
+msgstr ""
+
+#: languages/states.php:182
+msgid "Moxico Province"
+msgstr ""
+
+#: languages/states.php:183
+msgid "Uíge Province"
+msgstr ""
+
+#: languages/states.php:184
+msgid "Zaire Province"
+msgstr ""
+
+#: languages/states.php:188
+msgid "Autonomous City Of Buenos Aires"
+msgstr ""
+
+#: languages/states.php:189
+msgid "Buenos Aires Province"
+msgstr ""
+
+#: languages/states.php:190
+msgid "Catamarca Province"
+msgstr ""
+
+#: languages/states.php:191
+msgid "Chaco Province"
+msgstr ""
+
+#: languages/states.php:192
+msgid "Chubut Province"
+msgstr ""
+
+#: languages/states.php:193
+msgid "Corrientes"
+msgstr ""
+
+#: languages/states.php:194
+msgid "Córdoba Province"
+msgstr ""
+
+#: languages/states.php:195
+msgid "Entre Ríos Province"
+msgstr ""
+
+#: languages/states.php:196
+msgid "Formosa Province"
+msgstr ""
+
+#: languages/states.php:197
+msgid "Jujuy Province"
+msgstr ""
+
+#: languages/states.php:198
+msgid "La Pampa"
+msgstr ""
+
+#: languages/states.php:199
+msgid "La Rioja Province"
+msgstr ""
+
+#: languages/states.php:200
+msgid "Mendoza"
+msgstr ""
+
+#: languages/states.php:201
+msgid "Misiones Province"
+msgstr ""
+
+#: languages/states.php:202
+msgid "Neuquén Province"
+msgstr ""
+
+#: languages/states.php:203
+msgid "Río Negro Province"
+msgstr ""
+
+#: languages/states.php:204
+msgid "Salta Province"
+msgstr ""
+
+#: languages/states.php:205
+#: languages/states.php:1184
+msgid "San Juan Province"
+msgstr ""
+
+#: languages/states.php:206
+msgid "San Luis Province"
+msgstr ""
+
+#: languages/states.php:207
+msgid "Santa Cruz Province"
+msgstr ""
+
+#: languages/states.php:208
+msgid "Santa Fe Province"
+msgstr ""
+
+#: languages/states.php:209
+msgid "Santiago del Estero Province"
+msgstr ""
+
+#: languages/states.php:210
+msgid "Tierra del Fuego Province"
+msgstr ""
+
+#: languages/states.php:211
+msgid "Tucumán Province"
+msgstr ""
+
+#: languages/states.php:215
+msgid "Burgenland"
+msgstr ""
+
+#: languages/states.php:216
+msgid "Carinthia"
+msgstr ""
+
+#: languages/states.php:217
+msgid "Lower Austria"
+msgstr ""
+
+#: languages/states.php:218
+msgid "Upper Austria"
+msgstr ""
+
+#: languages/states.php:219
+msgid "Salzburg"
+msgstr ""
+
+#: languages/states.php:220
+msgid "Styria"
+msgstr ""
+
+#: languages/states.php:221
+msgid "Tyrol"
+msgstr ""
+
+#: languages/states.php:222
+msgid "Vorarlberg"
+msgstr ""
+
+#: languages/states.php:223
+msgid "Vienna"
+msgstr ""
+
+#: languages/states.php:226
+msgid "Australian Capital Territory"
+msgstr ""
+
+#: languages/states.php:227
+msgid "New South Wales"
+msgstr ""
+
+#: languages/states.php:228
+msgid "Northern Territory"
+msgstr ""
+
+#: languages/states.php:229
+msgid "Queensland"
+msgstr ""
+
+#: languages/states.php:230
+msgid "South Australia"
+msgstr ""
+
+#: languages/states.php:231
+msgid "Tasmania"
+msgstr ""
+
+#: languages/states.php:232
+#: languages/states.php:3333
+msgid "Victoria"
+msgstr ""
+
+#: languages/states.php:233
+msgid "Western Australia"
+msgstr ""
+
+#: languages/states.php:238
+msgid "Absheron District"
+msgstr ""
+
+#: languages/states.php:239
+msgid "Agdam District"
+msgstr ""
+
+#: languages/states.php:240
+msgid "Agdash District"
+msgstr ""
+
+#: languages/states.php:241
+msgid "Aghjabadi District"
+msgstr ""
+
+#: languages/states.php:242
+msgid "Agstafa District"
+msgstr ""
+
+#: languages/states.php:243
+msgid "Agsu District"
+msgstr ""
+
+#: languages/states.php:244
+msgid "Astara District"
+msgstr ""
+
+#: languages/states.php:245
+msgid "Babek District"
+msgstr ""
+
+#: languages/states.php:246
+msgid "Baku"
+msgstr ""
+
+#: languages/states.php:247
+msgid "Balakan District"
+msgstr ""
+
+#: languages/states.php:248
+msgid "Barda District"
+msgstr ""
+
+#: languages/states.php:249
+msgid "Beylagan District"
+msgstr ""
+
+#: languages/states.php:250
+msgid "Bilasuvar District"
+msgstr ""
+
+#: languages/states.php:251
+msgid "Dashkasan District"
+msgstr ""
+
+#: languages/states.php:252
+msgid "Fizuli District"
+msgstr ""
+
+#: languages/states.php:253
+msgid "Ganja"
+msgstr ""
+
+#: languages/states.php:254
+msgid "Gobustan District"
+msgstr ""
+
+#: languages/states.php:255
+msgid "Goranboy District"
+msgstr ""
+
+#: languages/states.php:256
+msgid "Goychay"
+msgstr ""
+
+#: languages/states.php:257
+msgid "Goygol District"
+msgstr ""
+
+#: languages/states.php:258
+msgid "Gədəbəy"
+msgstr ""
+
+#: languages/states.php:259
+msgid "Hajigabul District"
+msgstr ""
+
+#: languages/states.php:260
+msgid "Imishli District"
+msgstr ""
+
+#: languages/states.php:261
+msgid "Ismailli District"
+msgstr ""
+
+#: languages/states.php:262
+msgid "Jabrayil District"
+msgstr ""
+
+#: languages/states.php:263
+msgid "Jalilabad District"
+msgstr ""
+
+#: languages/states.php:264
+msgid "Julfa District"
+msgstr ""
+
+#: languages/states.php:265
+msgid "Kalbajar District"
+msgstr ""
+
+#: languages/states.php:266
+msgid "Kangarli District"
+msgstr ""
+
+#: languages/states.php:267
+msgid "Khachmaz District"
+msgstr ""
+
+#: languages/states.php:268
+msgid "Khizi District"
+msgstr ""
+
+#: languages/states.php:269
+msgid "Khojali District"
+msgstr ""
+
+#: languages/states.php:270
+msgid "Kurdamir District"
+msgstr ""
+
+#: languages/states.php:271
+msgid "Lachin District"
+msgstr ""
+
+#: languages/states.php:272
+msgid "Lankaran"
+msgstr ""
+
+#: languages/states.php:273
+msgid "Lankaran District"
+msgstr ""
+
+#: languages/states.php:274
+msgid "Lerik District"
+msgstr ""
+
+#: languages/states.php:275
+msgid "Martuni"
+msgstr ""
+
+#: languages/states.php:276
+msgid "Masally District"
+msgstr ""
+
+#: languages/states.php:277
+msgid "Mingachevir"
+msgstr ""
+
+#: languages/states.php:278
+msgid "Nakhchivan Autonomous Republic"
+msgstr ""
+
+#: languages/states.php:279
+msgid "Neftchala District"
+msgstr ""
+
+#: languages/states.php:280
+msgid "Oghuz District"
+msgstr ""
+
+#: languages/states.php:281
+msgid "Ordubad District"
+msgstr ""
+
+#: languages/states.php:282
+msgid "Qabala District"
+msgstr ""
+
+#: languages/states.php:283
+msgid "Qakh District"
+msgstr ""
+
+#: languages/states.php:284
+msgid "Qazakh District"
+msgstr ""
+
+#: languages/states.php:285
+msgid "Quba District"
+msgstr ""
+
+#: languages/states.php:286
+msgid "Qubadli District"
+msgstr ""
+
+#: languages/states.php:287
+msgid "Qusar District"
+msgstr ""
+
+#: languages/states.php:288
+msgid "Saatly District"
+msgstr ""
+
+#: languages/states.php:289
+msgid "Sabirabad District"
+msgstr ""
+
+#: languages/states.php:290
+msgid "Sadarak District"
+msgstr ""
+
+#: languages/states.php:291
+msgid "Salyan District"
+msgstr ""
+
+#: languages/states.php:292
+msgid "Samukh District"
+msgstr ""
+
+#: languages/states.php:293
+msgid "Shabran District"
+msgstr ""
+
+#: languages/states.php:294
+msgid "Shahbuz District"
+msgstr ""
+
+#: languages/states.php:295
+msgid "Shaki"
+msgstr ""
+
+#: languages/states.php:296
+msgid "Shaki District"
+msgstr ""
+
+#: languages/states.php:297
+msgid "Shamakhi District"
+msgstr ""
+
+#: languages/states.php:298
+msgid "Shamkir District"
+msgstr ""
+
+#: languages/states.php:299
+msgid "Sharur District"
+msgstr ""
+
+#: languages/states.php:300
+msgid "Shirvan"
+msgstr ""
+
+#: languages/states.php:301
+msgid "Shusha District"
+msgstr ""
+
+#: languages/states.php:302
+msgid "Siazan District"
+msgstr ""
+
+#: languages/states.php:303
+msgid "Sumqayit"
+msgstr ""
+
+#: languages/states.php:304
+msgid "Tartar District"
+msgstr ""
+
+#: languages/states.php:305
+msgid "Tovuz District"
+msgstr ""
+
+#: languages/states.php:306
+msgid "Ujar District"
+msgstr ""
+
+#: languages/states.php:307
+msgid "Yardymli District"
+msgstr ""
+
+#: languages/states.php:308
+msgid "Yevlakh"
+msgstr ""
+
+#: languages/states.php:309
+msgid "Yevlakh District"
+msgstr ""
+
+#: languages/states.php:310
+msgid "Zangilan District"
+msgstr ""
+
+#: languages/states.php:311
+msgid "Zaqatala District"
+msgstr ""
+
+#: languages/states.php:312
+msgid "Zardab District"
+msgstr ""
+
+#: languages/states.php:315
+msgid "Canton 10"
+msgstr ""
+
+#: languages/states.php:316
+msgid "Bosnian Podrinje Canton"
+msgstr ""
+
+#: languages/states.php:317
+msgid "Brčko District"
+msgstr ""
+
+#: languages/states.php:318
+msgid "Central Bosnia Canton"
+msgstr ""
+
+#: languages/states.php:319
+msgid "Federation of Bosnia and Herzegovina"
+msgstr ""
+
+#: languages/states.php:320
+msgid "Herzegovina-Neretva Canton"
+msgstr ""
+
+#: languages/states.php:321
+msgid "Posavina Canton"
+msgstr ""
+
+#: languages/states.php:322
+msgid "Republika Srpska"
+msgstr ""
+
+#: languages/states.php:323
+msgid "Sarajevo Canton"
+msgstr ""
+
+#: languages/states.php:324
+msgid "Tuzla Canton"
+msgstr ""
+
+#: languages/states.php:325
+msgid "Una-Sana Canton"
+msgstr ""
+
+#: languages/states.php:326
+msgid "West Herzegovina Canton"
+msgstr ""
+
+#: languages/states.php:327
+msgid "Zenica-Doboj Canton"
+msgstr ""
+
+#: languages/states.php:330
+msgid "Saint Philip"
+msgstr ""
+
+#: languages/states.php:331
+msgid "Saint Thomas"
+msgstr ""
+
+#: languages/states.php:332
+msgid "Christ Church"
+msgstr ""
+
+#: languages/states.php:333
+#: languages/states.php:2392
+msgid "Saint Andrew"
+msgstr ""
+
+#: languages/states.php:334
+msgid "Saint George"
+msgstr ""
+
+#: languages/states.php:335
+msgid "Saint James"
+msgstr ""
+
+#: languages/states.php:336
+msgid "Saint John"
+msgstr ""
+
+#: languages/states.php:337
+msgid "Saint Joseph"
+msgstr ""
+
+#: languages/states.php:338
+msgid "Saint Lucy"
+msgstr ""
+
+#: languages/states.php:339
+msgid "Saint Michael"
+msgstr ""
+
+#: languages/states.php:340
+msgid "Saint Peter"
+msgstr ""
+
+#: languages/states.php:343
+msgid "Chittagong District"
+msgstr ""
+
+#: languages/states.php:344
+msgid "Cox's Bazar District"
+msgstr ""
+
+#: languages/states.php:345
+msgid "Chuadanga District"
+msgstr ""
+
+#: languages/states.php:346
+msgid "Dhaka District"
+msgstr ""
+
+#: languages/states.php:347
+msgid "Dinajpur District"
+msgstr ""
+
+#: languages/states.php:348
+msgid "Faridpur District"
+msgstr ""
+
+#: languages/states.php:349
+msgid "Feni District"
+msgstr ""
+
+#: languages/states.php:350
+msgid "Gopalganj District"
+msgstr ""
+
+#: languages/states.php:351
+msgid "Gazipur District"
+msgstr ""
+
+#: languages/states.php:352
+msgid "Gaibandha District"
+msgstr ""
+
+#: languages/states.php:353
+msgid "Habiganj District"
+msgstr ""
+
+#: languages/states.php:354
+msgid "Jamalpur District"
+msgstr ""
+
+#: languages/states.php:355
+msgid "Jessore District"
+msgstr ""
+
+#: languages/states.php:356
+msgid "Jhenaidah District"
+msgstr ""
+
+#: languages/states.php:357
+msgid "Joypurhat District"
+msgstr ""
+
+#: languages/states.php:358
+msgid "Jhalokati District"
+msgstr ""
+
+#: languages/states.php:359
+msgid "Kishoreganj District"
+msgstr ""
+
+#: languages/states.php:360
+msgid "Khulna District"
+msgstr ""
+
+#: languages/states.php:361
+msgid "Kurigram District"
+msgstr ""
+
+#: languages/states.php:362
+msgid "Khagrachari District"
+msgstr ""
+
+#: languages/states.php:363
+msgid "Kushtia District"
+msgstr ""
+
+#: languages/states.php:364
+msgid "Lakshmipur District"
+msgstr ""
+
+#: languages/states.php:365
+msgid "Lalmonirhat District"
+msgstr ""
+
+#: languages/states.php:366
+msgid "Bahadia"
+msgstr ""
+
+#: languages/states.php:367
+msgid "Mymensingh District"
+msgstr ""
+
+#: languages/states.php:368
+msgid "Munshiganj District"
+msgstr ""
+
+#: languages/states.php:369
+msgid "Madaripur District"
+msgstr ""
+
+#: languages/states.php:370
+msgid "Moulvibazar District"
+msgstr ""
+
+#: languages/states.php:371
+msgid "Meherpur District"
+msgstr ""
+
+#: languages/states.php:372
+msgid "Narayanganj District"
+msgstr ""
+
+#: languages/states.php:373
+msgid "Netrokona District"
+msgstr ""
+
+#: languages/states.php:374
+msgid "Narail District"
+msgstr ""
+
+#: languages/states.php:375
+msgid "Natore District"
+msgstr ""
+
+#: languages/states.php:376
+msgid "Chapai Nawabganj District"
+msgstr ""
+
+#: languages/states.php:377
+msgid "Nilphamari District"
+msgstr ""
+
+#: languages/states.php:378
+msgid "Noakhali District"
+msgstr ""
+
+#: languages/states.php:379
+msgid "Naogaon District"
+msgstr ""
+
+#: languages/states.php:380
+msgid "Pabna District"
+msgstr ""
+
+#: languages/states.php:381
+msgid "Pirojpur District"
+msgstr ""
+
+#: languages/states.php:382
+msgid "Patuakhali District"
+msgstr ""
+
+#: languages/states.php:383
+msgid "Panchagarh District"
+msgstr ""
+
+#: languages/states.php:384
+msgid "Rajbari District"
+msgstr ""
+
+#: languages/states.php:385
+msgid "Rajshahi District"
+msgstr ""
+
+#: languages/states.php:386
+msgid "Rangpur District"
+msgstr ""
+
+#: languages/states.php:387
+msgid "Rangamati Hill District"
+msgstr ""
+
+#: languages/states.php:388
+msgid "Sherpur District"
+msgstr ""
+
+#: languages/states.php:389
+msgid "Satkhira District"
+msgstr ""
+
+#: languages/states.php:390
+msgid "Sirajganj District"
+msgstr ""
+
+#: languages/states.php:391
+msgid "Sylhet District"
+msgstr ""
+
+#: languages/states.php:392
+msgid "Sunamganj District"
+msgstr ""
+
+#: languages/states.php:393
+msgid "Shariatpur District"
+msgstr ""
+
+#: languages/states.php:394
+msgid "Tangail District"
+msgstr ""
+
+#: languages/states.php:395
+msgid "Thakurgaon District"
+msgstr ""
+
+#: languages/states.php:396
+msgid "Bagerhat District"
+msgstr ""
+
+#: languages/states.php:397
+msgid "Bandarban District"
+msgstr ""
+
+#: languages/states.php:398
+msgid "Barguna District"
+msgstr ""
+
+#: languages/states.php:399
+msgid "Barisal District"
+msgstr ""
+
+#: languages/states.php:400
+msgid "Barisal Division"
+msgstr ""
+
+#: languages/states.php:401
+msgid "Bhola District"
+msgstr ""
+
+#: languages/states.php:402
+msgid "Bogra District"
+msgstr ""
+
+#: languages/states.php:403
+msgid "Brahmanbaria District"
+msgstr ""
+
+#: languages/states.php:404
+msgid "Chandpur District"
+msgstr ""
+
+#: languages/states.php:405
+msgid "Chittagong Division"
+msgstr ""
+
+#: languages/states.php:406
+msgid "Comilla District"
+msgstr ""
+
+#: languages/states.php:407
+msgid "Dhaka Division"
+msgstr ""
+
+#: languages/states.php:408
+msgid "Khulna Division"
+msgstr ""
+
+#: languages/states.php:409
+msgid "Mymensingh Division"
+msgstr ""
+
+#: languages/states.php:410
+msgid "Rajshahi Division"
+msgstr ""
+
+#: languages/states.php:411
+msgid "Rangpur Division"
+msgstr ""
+
+#: languages/states.php:412
+msgid "Sylhet Division"
+msgstr ""
+
+#: languages/states.php:415
+msgid "Antwerp"
+msgstr ""
+
+#: languages/states.php:416
+msgid "Brussels-Capital Region"
+msgstr ""
+
+#: languages/states.php:417
+msgid "East Flanders"
+msgstr ""
+
+#: languages/states.php:418
+msgid "Flanders"
+msgstr ""
+
+#: languages/states.php:419
+msgid "Flemish Brabant"
+msgstr ""
+
+#: languages/states.php:420
+msgid "Hainaut"
+msgstr ""
+
+#: languages/states.php:421
+#: languages/states.php:3600
+msgid "Limburg"
+msgstr ""
+
+#: languages/states.php:422
+msgid "Liège"
+msgstr ""
+
+#: languages/states.php:424
+msgid "Namur"
+msgstr ""
+
+#: languages/states.php:425
+msgid "Wallonia"
+msgstr ""
+
+#: languages/states.php:426
+msgid "Walloon Brabant"
+msgstr ""
+
+#: languages/states.php:427
+msgid "West Flanders"
+msgstr ""
+
+#: languages/states.php:430
+msgid "Nord Region, Burkina Faso"
+msgstr ""
+
+#: languages/states.php:431
+msgid "Plateau-Central Region"
+msgstr ""
+
+#: languages/states.php:432
+msgid "Sahel Region"
+msgstr ""
+
+#: languages/states.php:433
+msgid "Sud-Ouest Region"
+msgstr ""
+
+#: languages/states.php:434
+msgid "Balé Province"
+msgstr ""
+
+#: languages/states.php:435
+msgid "Bam Province"
+msgstr ""
+
+#: languages/states.php:436
+msgid "Banwa Province"
+msgstr ""
+
+#: languages/states.php:437
+msgid "Bazèga Province"
+msgstr ""
+
+#: languages/states.php:438
+msgid "Boucle du Mouhoun Region"
+msgstr ""
+
+#: languages/states.php:439
+msgid "Bougouriba Province"
+msgstr ""
+
+#: languages/states.php:440
+msgid "Boulgou"
+msgstr ""
+
+#: languages/states.php:441
+msgid "Cascades Region"
+msgstr ""
+
+#: languages/states.php:442
+#: languages/states.php:875
+#: languages/states.php:2025
+msgid "Centre"
+msgstr ""
+
+#: languages/states.php:443
+msgid "Centre-Est Region"
+msgstr ""
+
+#: languages/states.php:444
+msgid "Centre-Nord Region"
+msgstr ""
+
+#: languages/states.php:445
+msgid "Centre-Ouest Region"
+msgstr ""
+
+#: languages/states.php:446
+msgid "Centre-Sud Region"
+msgstr ""
+
+#: languages/states.php:447
+msgid "Comoé Province"
+msgstr ""
+
+#: languages/states.php:448
+msgid "Est Region"
+msgstr ""
+
+#: languages/states.php:449
+msgid "Ganzourgou Province"
+msgstr ""
+
+#: languages/states.php:450
+msgid "Gnagna Province"
+msgstr ""
+
+#: languages/states.php:451
+msgid "Gourma Province"
+msgstr ""
+
+#: languages/states.php:452
+msgid "Hauts-Bassins Region"
+msgstr ""
+
+#: languages/states.php:453
+msgid "Houet Province"
+msgstr ""
+
+#: languages/states.php:454
+msgid "Ioba Province"
+msgstr ""
+
+#: languages/states.php:455
+msgid "Kadiogo Province"
+msgstr ""
+
+#: languages/states.php:456
+msgid "Komondjari Province"
+msgstr ""
+
+#: languages/states.php:457
+msgid "Kompienga Province"
+msgstr ""
+
+#: languages/states.php:458
+msgid "Kossi Province"
+msgstr ""
+
+#: languages/states.php:459
+msgid "Koulpélogo Province"
+msgstr ""
+
+#: languages/states.php:460
+msgid "Kouritenga Province"
+msgstr ""
+
+#: languages/states.php:461
+msgid "Kourwéogo Province"
+msgstr ""
+
+#: languages/states.php:462
+msgid "Kénédougou Province"
+msgstr ""
+
+#: languages/states.php:463
+msgid "Loroum Province"
+msgstr ""
+
+#: languages/states.php:464
+msgid "Léraba Province"
+msgstr ""
+
+#: languages/states.php:465
+msgid "Mouhoun"
+msgstr ""
+
+#: languages/states.php:466
+msgid "Nahouri Province"
+msgstr ""
+
+#: languages/states.php:467
+msgid "Namentenga Province"
+msgstr ""
+
+#: languages/states.php:468
+msgid "Nayala Province"
+msgstr ""
+
+#: languages/states.php:469
+msgid "Noumbiel Province"
+msgstr ""
+
+#: languages/states.php:470
+msgid "Oubritenga Province"
+msgstr ""
+
+#: languages/states.php:471
+msgid "Oudalan Province"
+msgstr ""
+
+#: languages/states.php:472
+msgid "Passoré Province"
+msgstr ""
+
+#: languages/states.php:473
+msgid "Poni Province"
+msgstr ""
+
+#: languages/states.php:474
+msgid "Sanguié Province"
+msgstr ""
+
+#: languages/states.php:475
+msgid "Sanmatenga Province"
+msgstr ""
+
+#: languages/states.php:476
+msgid "Sissili Province"
+msgstr ""
+
+#: languages/states.php:477
+msgid "Soum Province"
+msgstr ""
+
+#: languages/states.php:478
+msgid "Sourou Province"
+msgstr ""
+
+#: languages/states.php:479
+msgid "Séno Province"
+msgstr ""
+
+#: languages/states.php:480
+msgid "Tapoa Province"
+msgstr ""
+
+#: languages/states.php:481
+msgid "Tuy Province"
+msgstr ""
+
+#: languages/states.php:482
+msgid "Yagha Province"
+msgstr ""
+
+#: languages/states.php:483
+msgid "Yatenga Province"
+msgstr ""
+
+#: languages/states.php:484
+msgid "Ziro Province"
+msgstr ""
+
+#: languages/states.php:485
+msgid "Zondoma Province"
+msgstr ""
+
+#: languages/states.php:486
+msgid "Zoundwéogo Province"
+msgstr ""
+
+#: languages/states.php:489
+msgid "Kyustendil Province"
+msgstr ""
+
+#: languages/states.php:490
+msgid "Lovech Province"
+msgstr ""
+
+#: languages/states.php:491
+msgid "Montana Province"
+msgstr ""
+
+#: languages/states.php:492
+msgid "Pazardzhik Province"
+msgstr ""
+
+#: languages/states.php:493
+msgid "Pernik Province"
+msgstr ""
+
+#: languages/states.php:494
+msgid "Pleven Province"
+msgstr ""
+
+#: languages/states.php:495
+msgid "Plovdiv Province"
+msgstr ""
+
+#: languages/states.php:496
+msgid "Razgrad Province"
+msgstr ""
+
+#: languages/states.php:497
+msgid "Ruse Province"
+msgstr ""
+
+#: languages/states.php:498
+msgid "Silistra Province"
+msgstr ""
+
+#: languages/states.php:499
+msgid "Sliven Province"
+msgstr ""
+
+#: languages/states.php:500
+msgid "Smolyan Province"
+msgstr ""
+
+#: languages/states.php:501
+msgid "Sofia City Province"
+msgstr ""
+
+#: languages/states.php:502
+msgid "Sofia Province"
+msgstr ""
+
+#: languages/states.php:503
+msgid "Stara Zagora Province"
+msgstr ""
+
+#: languages/states.php:504
+msgid "Targovishte Province"
+msgstr ""
+
+#: languages/states.php:505
+msgid "Haskovo Province"
+msgstr ""
+
+#: languages/states.php:506
+msgid "Shumen"
+msgstr ""
+
+#: languages/states.php:507
+msgid "Yambol Province"
+msgstr ""
+
+#: languages/states.php:508
+msgid "Blagoevgrad Province"
+msgstr ""
+
+#: languages/states.php:509
+msgid "Burgas Province"
+msgstr ""
+
+#: languages/states.php:510
+msgid "Dobrich Province"
+msgstr ""
+
+#: languages/states.php:511
+msgid "Gabrovo Province"
+msgstr ""
+
+#: languages/states.php:512
+msgid "Kardzhali Province"
+msgstr ""
+
+#: languages/states.php:513
+msgid "Varna Province"
+msgstr ""
+
+#: languages/states.php:514
+msgid "Veliko Tarnovo Province"
+msgstr ""
+
+#: languages/states.php:515
+msgid "Vidin Province"
+msgstr ""
+
+#: languages/states.php:516
+msgid "Vratsa Province"
+msgstr ""
+
+#: languages/states.php:519
+#: languages/states.php:2616
+msgid "Capital Governorate"
+msgstr ""
+
+#: languages/states.php:520
+msgid "Southern Governorate"
+msgstr ""
+
+#: languages/states.php:521
+msgid "Muharraq Governorate"
+msgstr ""
+
+#: languages/states.php:522
+msgid "Central Governorate"
+msgstr ""
+
+#: languages/states.php:523
+msgid "Northern Governorate"
+msgstr ""
+
+#: languages/states.php:526
+msgid "Bubanza Province"
+msgstr ""
+
+#: languages/states.php:527
+msgid "Bujumbura Mairie Province"
+msgstr ""
+
+#: languages/states.php:528
+msgid "Bujumbura Rural Province"
+msgstr ""
+
+#: languages/states.php:529
+msgid "Bururi Province"
+msgstr ""
+
+#: languages/states.php:530
+msgid "Cankuzo Province"
+msgstr ""
+
+#: languages/states.php:531
+msgid "Cibitoke Province"
+msgstr ""
+
+#: languages/states.php:532
+msgid "Gitega Province"
+msgstr ""
+
+#: languages/states.php:533
+msgid "Karuzi Province"
+msgstr ""
+
+#: languages/states.php:534
+msgid "Kayanza Province"
+msgstr ""
+
+#: languages/states.php:535
+msgid "Kirundo Province"
+msgstr ""
+
+#: languages/states.php:536
+msgid "Makamba Province"
+msgstr ""
+
+#: languages/states.php:537
+msgid "Muramvya Province"
+msgstr ""
+
+#: languages/states.php:538
+msgid "Muyinga Province"
+msgstr ""
+
+#: languages/states.php:539
+msgid "Mwaro Province"
+msgstr ""
+
+#: languages/states.php:540
+msgid "Ngozi Province"
+msgstr ""
+
+#: languages/states.php:541
+msgid "Rumonge Province"
+msgstr ""
+
+#: languages/states.php:542
+msgid "Rutana Province"
+msgstr ""
+
+#: languages/states.php:543
+msgid "Ruyigi Province"
+msgstr ""
+
+#: languages/states.php:546
+msgid "Alibori Department"
+msgstr ""
+
+#: languages/states.php:547
+msgid "Atakora Department"
+msgstr ""
+
+#: languages/states.php:548
+msgid "Atlantique Department"
+msgstr ""
+
+#: languages/states.php:549
+msgid "Borgou Department"
+msgstr ""
+
+#: languages/states.php:550
+msgid "Collines Department"
+msgstr ""
+
+#: languages/states.php:551
+msgid "Donga Department"
+msgstr ""
+
+#: languages/states.php:552
+msgid "Kouffo Department"
+msgstr ""
+
+#: languages/states.php:553
+msgid "Littoral Department"
+msgstr ""
+
+#: languages/states.php:554
+msgid "Mono Department"
+msgstr ""
+
+#: languages/states.php:555
+msgid "Ouémé Department"
+msgstr ""
+
+#: languages/states.php:556
+msgid "Plateau Department"
+msgstr ""
+
+#: languages/states.php:557
+msgid "Zou Department"
+msgstr ""
+
+#: languages/states.php:561
+msgid "Devonshire Parish"
+msgstr ""
+
+#: languages/states.php:562
+msgid "Hamilton Municipality"
+msgstr ""
+
+#: languages/states.php:563
+msgid "Hamilton Parish"
+msgstr ""
+
+#: languages/states.php:564
+msgid "Paget Parish"
+msgstr ""
+
+#: languages/states.php:565
+msgid "Pembroke Parish"
+msgstr ""
+
+#: languages/states.php:566
+msgid "Saint George's Municipality"
+msgstr ""
+
+#: languages/states.php:567
+msgid "Saint George's Parish"
+msgstr ""
+
+#: languages/states.php:568
+msgid "Sandys Parish"
+msgstr ""
+
+#: languages/states.php:569
+msgid "Smith's Parish,"
+msgstr ""
+
+#: languages/states.php:570
+msgid "Southampton Parish"
+msgstr ""
+
+#: languages/states.php:571
+msgid "Warwick Parish"
+msgstr ""
+
+#: languages/states.php:574
+msgid "Belait District"
+msgstr ""
+
+#: languages/states.php:575
+msgid "Brunei-Muara District"
+msgstr ""
+
+#: languages/states.php:576
+msgid "Temburong District"
+msgstr ""
+
+#: languages/states.php:577
+msgid "Tutong District"
+msgstr ""
+
+#: languages/states.php:580
+msgid "Beni Department"
+msgstr ""
+
+#: languages/states.php:581
+msgid "Chuquisaca Department"
+msgstr ""
+
+#: languages/states.php:582
+msgid "Cochabamba Department"
+msgstr ""
+
+#: languages/states.php:583
+#: languages/states.php:1993
+#: languages/states.php:4548
+msgid "La Paz Department"
+msgstr ""
+
+#: languages/states.php:584
+msgid "Oruro Department"
+msgstr ""
+
+#: languages/states.php:585
+msgid "Pando Department"
+msgstr ""
+
+#: languages/states.php:586
+msgid "Potosí Department"
+msgstr ""
+
+#: languages/states.php:587
+msgid "Santa Cruz Department"
+msgstr ""
+
+#: languages/states.php:588
+msgid "Tarija Department"
+msgstr ""
+
+#: languages/states.php:592
+msgid "Acre"
+msgstr ""
+
+#: languages/states.php:593
+msgid "Alagoas"
+msgstr ""
+
+#: languages/states.php:594
+msgid "Amapá"
+msgstr ""
+
+#: languages/states.php:595
+#: languages/states.php:3721
+#: languages/states.php:5189
+msgid "Amazonas"
+msgstr ""
+
+#: languages/states.php:596
+msgid "Bahia"
+msgstr ""
+
+#: languages/states.php:597
+msgid "Ceará"
+msgstr ""
+
+#: languages/states.php:598
+msgid "Espírito Santo"
+msgstr ""
+
+#: languages/states.php:599
+msgid "Federal District"
+msgstr ""
+
+#: languages/states.php:600
+msgid "Goiás"
+msgstr ""
+
+#: languages/states.php:601
+msgid "Maranhão"
+msgstr ""
+
+#: languages/states.php:602
+msgid "Mato Grosso"
+msgstr ""
+
+#: languages/states.php:603
+msgid "Mato Grosso do Sul"
+msgstr ""
+
+#: languages/states.php:604
+msgid "Minas Gerais"
+msgstr ""
+
+#: languages/states.php:605
+msgid "Paraná"
+msgstr ""
+
+#: languages/states.php:606
+msgid "Paraíba"
+msgstr ""
+
+#: languages/states.php:607
+msgid "Pará"
+msgstr ""
+
+#: languages/states.php:608
+msgid "Pernambuco"
+msgstr ""
+
+#: languages/states.php:609
+msgid "Piauí"
+msgstr ""
+
+#: languages/states.php:610
+msgid "Rio Grande do Norte"
+msgstr ""
+
+#: languages/states.php:611
+msgid "Rio Grande do Sul"
+msgstr ""
+
+#: languages/states.php:612
+msgid "Rio de Janeiro"
+msgstr ""
+
+#: languages/states.php:613
+msgid "Rondônia"
+msgstr ""
+
+#: languages/states.php:614
+msgid "Roraima"
+msgstr ""
+
+#: languages/states.php:615
+#: languages/states.php:995
+msgid "Santa Catarina"
+msgstr ""
+
+#: languages/states.php:616
+msgid "Sergipe"
+msgstr ""
+
+#: languages/states.php:617
+msgid "São Paulo"
+msgstr ""
+
+#: languages/states.php:618
+msgid "Tocantins"
+msgstr ""
+
+#: languages/states.php:621
+msgid "Acklins"
+msgstr ""
+
+#: languages/states.php:622
+msgid "Acklins and Crooked Islands"
+msgstr ""
+
+#: languages/states.php:623
+msgid "Berry Islands"
+msgstr ""
+
+#: languages/states.php:624
+msgid "Bimini"
+msgstr ""
+
+#: languages/states.php:625
+msgid "Black Point"
+msgstr ""
+
+#: languages/states.php:626
+msgid "Cat Island"
+msgstr ""
+
+#: languages/states.php:627
+msgid "Central Abaco"
+msgstr ""
+
+#: languages/states.php:628
+msgid "Central Andros"
+msgstr ""
+
+#: languages/states.php:629
+msgid "Central Eleuthera"
+msgstr ""
+
+#: languages/states.php:630
+msgid "Crooked Island"
+msgstr ""
+
+#: languages/states.php:631
+msgid "East Grand Bahama"
+msgstr ""
+
+#: languages/states.php:632
+msgid "Exuma"
+msgstr ""
+
+#: languages/states.php:633
+msgid "Freeport"
+msgstr ""
+
+#: languages/states.php:634
+msgid "Fresh Creek"
+msgstr ""
+
+#: languages/states.php:635
+msgid "Governor's Harbour"
+msgstr ""
+
+#: languages/states.php:636
+msgid "Grand Cay"
+msgstr ""
+
+#: languages/states.php:637
+msgid "Green Turtle Cay"
+msgstr ""
+
+#: languages/states.php:638
+msgid "Harbour Island"
+msgstr ""
+
+#: languages/states.php:639
+msgid "High Rock"
+msgstr ""
+
+#: languages/states.php:640
+msgid "Hope Town"
+msgstr ""
+
+#: languages/states.php:641
+msgid "Inagua"
+msgstr ""
+
+#: languages/states.php:642
+msgid "Kemps Bay"
+msgstr ""
+
+#: languages/states.php:643
+msgid "Long Island"
+msgstr ""
+
+#: languages/states.php:644
+msgid "Mangrove Cay"
+msgstr ""
+
+#: languages/states.php:645
+msgid "Marsh Harbour"
+msgstr ""
+
+#: languages/states.php:646
+msgid "Mayaguana District"
+msgstr ""
+
+#: languages/states.php:647
+msgid "New Providence"
+msgstr ""
+
+#: languages/states.php:648
+msgid "Nichollstown and Berry Islands"
+msgstr ""
+
+#: languages/states.php:649
+msgid "North Abaco"
+msgstr ""
+
+#: languages/states.php:650
+msgid "North Andros"
+msgstr ""
+
+#: languages/states.php:651
+msgid "North Eleuthera"
+msgstr ""
+
+#: languages/states.php:652
+msgid "Ragged Island"
+msgstr ""
+
+#: languages/states.php:653
+msgid "Rock Sound"
+msgstr ""
+
+#: languages/states.php:654
+msgid "Rum Cay District"
+msgstr ""
+
+#: languages/states.php:655
+msgid "San Salvador Island"
+msgstr ""
+
+#: languages/states.php:656
+msgid "San Salvador and Rum Cay"
+msgstr ""
+
+#: languages/states.php:657
+msgid "Sandy Point"
+msgstr ""
+
+#: languages/states.php:658
+msgid "South Abaco"
+msgstr ""
+
+#: languages/states.php:659
+msgid "South Andros"
+msgstr ""
+
+#: languages/states.php:660
+msgid "South Eleuthera"
+msgstr ""
+
+#: languages/states.php:661
+msgid "Spanish Wells"
+msgstr ""
+
+#: languages/states.php:662
+msgid "West Grand Bahama"
+msgstr ""
+
+#: languages/states.php:665
+msgid "Paro District"
+msgstr ""
+
+#: languages/states.php:666
+msgid "Chukha District"
+msgstr ""
+
+#: languages/states.php:667
+msgid "Haa District"
+msgstr ""
+
+#: languages/states.php:668
+msgid "Samtse District"
+msgstr ""
+
+#: languages/states.php:669
+msgid "Thimphu District"
+msgstr ""
+
+#: languages/states.php:670
+msgid "Tsirang District"
+msgstr ""
+
+#: languages/states.php:671
+msgid "Dagana District"
+msgstr ""
+
+#: languages/states.php:672
+msgid "Punakha District"
+msgstr ""
+
+#: languages/states.php:673
+msgid "Wangdue Phodrang District"
+msgstr ""
+
+#: languages/states.php:674
+msgid "Sarpang District"
+msgstr ""
+
+#: languages/states.php:675
+msgid "Trongsa District"
+msgstr ""
+
+#: languages/states.php:676
+msgid "Bumthang District"
+msgstr ""
+
+#: languages/states.php:677
+msgid "Zhemgang District"
+msgstr ""
+
+#: languages/states.php:678
+msgid "Trashigang District"
+msgstr ""
+
+#: languages/states.php:679
+msgid "Mongar District"
+msgstr ""
+
+#: languages/states.php:680
+msgid "Pemagatshel District"
+msgstr ""
+
+#: languages/states.php:681
+msgid "Lhuntse District"
+msgstr ""
+
+#: languages/states.php:682
+msgid "Samdrup Jongkhar District"
+msgstr ""
+
+#: languages/states.php:683
+msgid "Gasa District"
+msgstr ""
+
+#: languages/states.php:687
+#: languages/states.php:2151
+msgid "Central District"
+msgstr ""
+
+#: languages/states.php:688
+msgid "Ghanzi District"
+msgstr ""
+
+#: languages/states.php:689
+msgid "Kgalagadi District"
+msgstr ""
+
+#: languages/states.php:690
+msgid "Kgatleng District"
+msgstr ""
+
+#: languages/states.php:691
+msgid "Kweneng District"
+msgstr ""
+
+#: languages/states.php:692
+msgid "Ngamiland"
+msgstr ""
+
+#: languages/states.php:693
+msgid "North-East District"
+msgstr ""
+
+#: languages/states.php:694
+msgid "North-West District"
+msgstr ""
+
+#: languages/states.php:695
+msgid "South-East District"
+msgstr ""
+
+#: languages/states.php:696
+#: languages/states.php:2155
+msgid "Southern District"
+msgstr ""
+
+#: languages/states.php:699
+msgid "Brest Region"
+msgstr ""
+
+#: languages/states.php:700
+msgid "Gomel Region"
+msgstr ""
+
+#: languages/states.php:701
+msgid "Grodno Region"
+msgstr ""
+
+#: languages/states.php:702
+msgid "Minsk"
+msgstr ""
+
+#: languages/states.php:703
+msgid "Minsk Region"
+msgstr ""
+
+#: languages/states.php:704
+msgid "Mogilev Region"
+msgstr ""
+
+#: languages/states.php:705
+msgid "Vitebsk Region"
+msgstr ""
+
+#: languages/states.php:708
+msgid "Belize District"
+msgstr ""
+
+#: languages/states.php:709
+msgid "Cayo District"
+msgstr ""
+
+#: languages/states.php:710
+msgid "Corozal District"
+msgstr ""
+
+#: languages/states.php:711
+msgid "Orange Walk District"
+msgstr ""
+
+#: languages/states.php:712
+msgid "Stann Creek District"
+msgstr ""
+
+#: languages/states.php:713
+msgid "Toledo District"
+msgstr ""
+
+#: languages/states.php:716
+msgid "Alberta"
+msgstr ""
+
+#: languages/states.php:717
+msgid "British Columbia"
+msgstr ""
+
+#: languages/states.php:718
+msgid "Manitoba"
+msgstr ""
+
+#: languages/states.php:719
+msgid "New Brunswick"
+msgstr ""
+
+#: languages/states.php:720
+msgid "Newfoundland and Labrador"
+msgstr ""
+
+#: languages/states.php:721
+msgid "Northwest Territories"
+msgstr ""
+
+#: languages/states.php:722
+msgid "Nova Scotia"
+msgstr ""
+
+#: languages/states.php:723
+msgid "Nunavut"
+msgstr ""
+
+#: languages/states.php:724
+msgid "Ontario"
+msgstr ""
+
+#: languages/states.php:725
+msgid "Prince Edward Island"
+msgstr ""
+
+#: languages/states.php:726
+msgid "Quebec"
+msgstr ""
+
+#: languages/states.php:727
+msgid "Saskatchewan"
+msgstr ""
+
+#: languages/states.php:728
+msgid "Yukon"
+msgstr ""
+
+#: languages/states.php:732
+msgid "Bandundu Province"
+msgstr ""
+
+#: languages/states.php:733
+msgid "Bas-Congo province"
+msgstr ""
+
+#: languages/states.php:734
+msgid "Bas-Uele"
+msgstr ""
+
+#: languages/states.php:735
+msgid "Haut-Katanga Province"
+msgstr ""
+
+#: languages/states.php:736
+msgid "Haut-Lomami District"
+msgstr ""
+
+#: languages/states.php:737
+msgid "Haut-Uele"
+msgstr ""
+
+#: languages/states.php:738
+msgid "Ituri Interim Administration"
+msgstr ""
+
+#: languages/states.php:739
+msgid "Kasaï District"
+msgstr ""
+
+#: languages/states.php:740
+msgid "Kasaï-Occidental"
+msgstr ""
+
+#: languages/states.php:741
+msgid "Kasaï-Oriental"
+msgstr ""
+
+#: languages/states.php:742
+msgid "Katanga Province"
+msgstr ""
+
+#: languages/states.php:743
+msgid "Kinshasa"
+msgstr ""
+
+#: languages/states.php:744
+msgid "Kwango District"
+msgstr ""
+
+#: languages/states.php:745
+msgid "Kwilu District"
+msgstr ""
+
+#: languages/states.php:746
+msgid "Lomami Province"
+msgstr ""
+
+#: languages/states.php:747
+msgid "Mai-Ndombe Province"
+msgstr ""
+
+#: languages/states.php:748
+msgid "Maniema"
+msgstr ""
+
+#: languages/states.php:749
+msgid "Mongala District"
+msgstr ""
+
+#: languages/states.php:750
+msgid "Nord-Ubangi District"
+msgstr ""
+
+#: languages/states.php:751
+msgid "North Kivu"
+msgstr ""
+
+#: languages/states.php:752
+msgid "Orientale Province"
+msgstr ""
+
+#: languages/states.php:753
+msgid "Sankuru District"
+msgstr ""
+
+#: languages/states.php:754
+msgid "South Kivu"
+msgstr ""
+
+#: languages/states.php:755
+msgid "Sud-Ubangi"
+msgstr ""
+
+#: languages/states.php:756
+msgid "Tanganyika Province"
+msgstr ""
+
+#: languages/states.php:757
+msgid "Tshopo District"
+msgstr ""
+
+#: languages/states.php:758
+msgid "Tshuapa District"
+msgstr ""
+
+#: languages/states.php:759
+msgid "Équateur"
+msgstr ""
+
+#: languages/states.php:762
+msgid "Bamingui-Bangoran Prefecture"
+msgstr ""
+
+#: languages/states.php:763
+msgid "Bangui"
+msgstr ""
+
+#: languages/states.php:764
+msgid "Basse-Kotto Prefecture"
+msgstr ""
+
+#: languages/states.php:765
+msgid "Haut-Mbomou Prefecture"
+msgstr ""
+
+#: languages/states.php:766
+msgid "Haute-Kotto Prefecture"
+msgstr ""
+
+#: languages/states.php:767
+msgid "Kémo Prefecture"
+msgstr ""
+
+#: languages/states.php:768
+msgid "Lobaye Prefecture"
+msgstr ""
+
+#: languages/states.php:769
+msgid "Mambéré-Kadéï"
+msgstr ""
+
+#: languages/states.php:770
+msgid "Mbomou Prefecture"
+msgstr ""
+
+#: languages/states.php:771
+msgid "Nana-Grébizi Economic Prefecture"
+msgstr ""
+
+#: languages/states.php:772
+msgid "Nana-Mambéré Prefecture"
+msgstr ""
+
+#: languages/states.php:773
+msgid "Ombella-M'Poko Prefecture"
+msgstr ""
+
+#: languages/states.php:774
+msgid "Ouaka Prefecture"
+msgstr ""
+
+#: languages/states.php:775
+msgid "Ouham Prefecture"
+msgstr ""
+
+#: languages/states.php:776
+msgid "Ouham-Pendé Prefecture"
+msgstr ""
+
+#: languages/states.php:777
+msgid "Sangha-Mbaéré"
+msgstr ""
+
+#: languages/states.php:778
+msgid "Vakaga Prefecture"
+msgstr ""
+
+#: languages/states.php:781
+msgid "Lékoumou Department"
+msgstr ""
+
+#: languages/states.php:782
+msgid "Kouilou Department"
+msgstr ""
+
+#: languages/states.php:783
+msgid "Likouala Department"
+msgstr ""
+
+#: languages/states.php:784
+msgid "Cuvette Department"
+msgstr ""
+
+#: languages/states.php:785
+msgid "Niari Department"
+msgstr ""
+
+#: languages/states.php:786
+msgid "Bouenza Department"
+msgstr ""
+
+#: languages/states.php:787
+msgid "Pool Department"
+msgstr ""
+
+#: languages/states.php:788
+msgid "Sangha Department"
+msgstr ""
+
+#: languages/states.php:789
+msgid "Plateaux Department"
+msgstr ""
+
+#: languages/states.php:790
+msgid "Cuvette-Ouest Department"
+msgstr ""
+
+#: languages/states.php:791
+msgid "Pointe-Noire"
+msgstr ""
+
+#: languages/states.php:792
+msgid "Brazzaville"
+msgstr ""
+
+#: languages/states.php:795
+msgid "Aargau"
+msgstr ""
+
+#: languages/states.php:796
+msgid "Appenzell Ausserrhoden"
+msgstr ""
+
+#: languages/states.php:797
+msgid "Appenzell Innerrhoden"
+msgstr ""
+
+#: languages/states.php:798
+msgid "Basel-Landschaft"
+msgstr ""
+
+#: languages/states.php:799
+msgid "Canton of Fribourg"
+msgstr ""
+
+#: languages/states.php:800
+msgid "Canton of Geneva"
+msgstr ""
+
+#: languages/states.php:801
+msgid "Canton of Jura"
+msgstr ""
+
+#: languages/states.php:802
+msgid "Canton of Lucerne"
+msgstr ""
+
+#: languages/states.php:803
+msgid "Canton of Neuchâtel"
+msgstr ""
+
+#: languages/states.php:804
+msgid "Canton of Schaffhausen"
+msgstr ""
+
+#: languages/states.php:805
+msgid "Canton of Solothurn"
+msgstr ""
+
+#: languages/states.php:806
+msgid "Canton of St. Gallen"
+msgstr ""
+
+#: languages/states.php:807
+msgid "Canton of Valais"
+msgstr ""
+
+#: languages/states.php:808
+msgid "Canton of Vaud"
+msgstr ""
+
+#: languages/states.php:809
+msgid "Canton of Zug"
+msgstr ""
+
+#: languages/states.php:810
+msgid "Glarus"
+msgstr ""
+
+#: languages/states.php:811
+msgid "Graubünden"
+msgstr ""
+
+#: languages/states.php:812
+msgid "Nidwalden"
+msgstr ""
+
+#: languages/states.php:813
+msgid "Obwalden"
+msgstr ""
+
+#: languages/states.php:814
+msgid "Schwyz"
+msgstr ""
+
+#: languages/states.php:815
+msgid "Thurgau"
+msgstr ""
+
+#: languages/states.php:816
+msgid "Ticino"
+msgstr ""
+
+#: languages/states.php:817
+msgid "Uri"
+msgstr ""
+
+#: languages/states.php:818
+msgid "canton of Bern"
+msgstr ""
+
+#: languages/states.php:819
+msgid "canton of Zürich"
+msgstr ""
+
+#: languages/states.php:822
+msgid "Denguélé Region"
+msgstr ""
+
+#: languages/states.php:823
+msgid "N'zi-Comoé"
+msgstr ""
+
+#: languages/states.php:824
+msgid "Marahoué Region"
+msgstr ""
+
+#: languages/states.php:825
+msgid "Sud-Comoé"
+msgstr ""
+
+#: languages/states.php:826
+msgid "Worodougou"
+msgstr ""
+
+#: languages/states.php:827
+msgid "Sud-Bandama"
+msgstr ""
+
+#: languages/states.php:828
+msgid "Agnéby"
+msgstr ""
+
+#: languages/states.php:829
+msgid "Bafing Region"
+msgstr ""
+
+#: languages/states.php:830
+msgid "Fromager"
+msgstr ""
+
+#: languages/states.php:831
+msgid "Moyen-Cavally"
+msgstr ""
+
+#: languages/states.php:832
+msgid "Abidjan"
+msgstr ""
+
+#: languages/states.php:833
+msgid "Bas-Sassandra District"
+msgstr ""
+
+#: languages/states.php:834
+msgid "Bas-Sassandra Region"
+msgstr ""
+
+#: languages/states.php:835
+msgid "Comoé District"
+msgstr ""
+
+#: languages/states.php:836
+msgid "Denguélé District"
+msgstr ""
+
+#: languages/states.php:837
+msgid "Dix-Huit Montagnes"
+msgstr ""
+
+#: languages/states.php:838
+msgid "Gôh-Djiboua District"
+msgstr ""
+
+#: languages/states.php:839
+msgid "Haut-Sassandra"
+msgstr ""
+
+#: languages/states.php:840
+msgid "Lacs District"
+msgstr ""
+
+#: languages/states.php:841
+msgid "Lacs Region"
+msgstr ""
+
+#: languages/states.php:842
+msgid "Lagunes District"
+msgstr ""
+
+#: languages/states.php:843
+msgid "Lagunes region"
+msgstr ""
+
+#: languages/states.php:844
+msgid "Montagnes District"
+msgstr ""
+
+#: languages/states.php:845
+msgid "Moyen-Comoé"
+msgstr ""
+
+#: languages/states.php:846
+msgid "Sassandra-Marahoué District"
+msgstr ""
+
+#: languages/states.php:847
+#: languages/states.php:4613
+msgid "Savanes Region"
+msgstr ""
+
+#: languages/states.php:848
+msgid "Vallée du Bandama District"
+msgstr ""
+
+#: languages/states.php:849
+msgid "Vallée du Bandama Region"
+msgstr ""
+
+#: languages/states.php:850
+msgid "Woroba District"
+msgstr ""
+
+#: languages/states.php:851
+msgid "Yamoussoukro"
+msgstr ""
+
+#: languages/states.php:852
+msgid "Zanzan Region"
+msgstr ""
+
+#: languages/states.php:856
+msgid "Antofagasta Region"
+msgstr ""
+
+#: languages/states.php:857
+msgid "Araucanía Region"
+msgstr ""
+
+#: languages/states.php:858
+msgid "Arica y Parinacota Region"
+msgstr ""
+
+#: languages/states.php:859
+msgid "Atacama Region"
+msgstr ""
+
+#: languages/states.php:860
+msgid "Aysén Region"
+msgstr ""
+
+#: languages/states.php:861
+msgid "Bío Bío Region"
+msgstr ""
+
+#: languages/states.php:862
+msgid "Coquimbo Region"
+msgstr ""
+
+#: languages/states.php:863
+msgid "Los Lagos Region"
+msgstr ""
+
+#: languages/states.php:864
+msgid "Los Ríos Region"
+msgstr ""
+
+#: languages/states.php:865
+msgid "Magellan and the Chilean Antarctic Region"
+msgstr ""
+
+#: languages/states.php:866
+msgid "Maule Region"
+msgstr ""
+
+#: languages/states.php:867
+msgid "O'Higgins"
+msgstr ""
+
+#: languages/states.php:868
+msgid "Santiago Metropolitan Region"
+msgstr ""
+
+#: languages/states.php:869
+msgid "Tarapacá Region"
+msgstr ""
+
+#: languages/states.php:870
+msgid "Valparaíso"
+msgstr ""
+
+#: languages/states.php:871
+msgid "Ñuble Region"
+msgstr ""
+
+#: languages/states.php:874
+msgid "Adamawa"
+msgstr ""
+
+#: languages/states.php:876
+msgid "East"
+msgstr ""
+
+#: languages/states.php:877
+msgid "Far North"
+msgstr ""
+
+#: languages/states.php:878
+msgid "Littoral"
+msgstr ""
+
+#: languages/states.php:879
+#: languages/states.php:1967
+msgid "North"
+msgstr ""
+
+#: languages/states.php:880
+msgid "Northwest"
+msgstr ""
+
+#: languages/states.php:881
+msgid "South"
+msgstr ""
+
+#: languages/states.php:882
+msgid "Southwest"
+msgstr ""
+
+#: languages/states.php:883
+msgid "West"
+msgstr ""
+
+#: languages/states.php:886
+msgid "Anhui"
+msgstr ""
+
+#: languages/states.php:887
+msgid "Beijing"
+msgstr ""
+
+#: languages/states.php:888
+msgid "Chongqing"
+msgstr ""
+
+#: languages/states.php:889
+msgid "Fujian"
+msgstr ""
+
+#: languages/states.php:890
+msgid "Gansu"
+msgstr ""
+
+#: languages/states.php:891
+msgid "Guangdong"
+msgstr ""
+
+#: languages/states.php:892
+msgid "Guangxi Zhuang Autonomous Region"
+msgstr ""
+
+#: languages/states.php:893
+msgid "Guizhou"
+msgstr ""
+
+#: languages/states.php:894
+msgid "Hainan"
+msgstr ""
+
+#: languages/states.php:895
+msgid "Hebei"
+msgstr ""
+
+#: languages/states.php:896
+msgid "Heilongjiang"
+msgstr ""
+
+#: languages/states.php:897
+msgid "Henan"
+msgstr ""
+
+#: languages/states.php:898
+msgid "Hong Kong"
+msgstr ""
+
+#: languages/states.php:899
+msgid "Hubei"
+msgstr ""
+
+#: languages/states.php:900
+msgid "Hunan"
+msgstr ""
+
+#: languages/states.php:901
+msgid "Inner Mongolia"
+msgstr ""
+
+#: languages/states.php:902
+msgid "Jiangsu"
+msgstr ""
+
+#: languages/states.php:903
+msgid "Jiangxi"
+msgstr ""
+
+#: languages/states.php:904
+msgid "Jilin"
+msgstr ""
+
+#: languages/states.php:905
+msgid "Keelung"
+msgstr ""
+
+#: languages/states.php:906
+msgid "Liaoning"
+msgstr ""
+
+#: languages/states.php:907
+msgid "Macau"
+msgstr ""
+
+#: languages/states.php:908
+msgid "Ningxia Hui Autonomous Region"
+msgstr ""
+
+#: languages/states.php:909
+msgid "Qinghai"
+msgstr ""
+
+#: languages/states.php:910
+msgid "Shaanxi"
+msgstr ""
+
+#: languages/states.php:911
+msgid "Shandong"
+msgstr ""
+
+#: languages/states.php:912
+msgid "Shanghai"
+msgstr ""
+
+#: languages/states.php:913
+msgid "Shanxi"
+msgstr ""
+
+#: languages/states.php:914
+msgid "Sichuan"
+msgstr ""
+
+#: languages/states.php:915
+msgid "Taiwan Province, People's Republic of China"
+msgstr ""
+
+#: languages/states.php:916
+msgid "Tibet Autonomous Region"
+msgstr ""
+
+#: languages/states.php:917
+msgid "Xinjiang"
+msgstr ""
+
+#: languages/states.php:918
+msgid "Yunnan"
+msgstr ""
+
+#: languages/states.php:919
+msgid "Zhejiang"
+msgstr ""
+
+#: languages/states.php:922
+msgid "Amazonas Department"
+msgstr ""
+
+#: languages/states.php:923
+msgid "Antioquia Department"
+msgstr ""
+
+#: languages/states.php:924
+msgid "Arauca Department"
+msgstr ""
+
+#: languages/states.php:925
+msgid "Archipelago of Saint Andréws, Providence and Saint Catalina"
+msgstr ""
+
+#: languages/states.php:926
+msgid "Atlántico Department"
+msgstr ""
+
+#: languages/states.php:927
+msgid "Bolívar Department"
+msgstr ""
+
+#: languages/states.php:928
+msgid "Boyacá Department"
+msgstr ""
+
+#: languages/states.php:929
+msgid "Caldas Department"
+msgstr ""
+
+#: languages/states.php:930
+msgid "Caquetá Department"
+msgstr ""
+
+#: languages/states.php:931
+msgid "Casanare Department"
+msgstr ""
+
+#: languages/states.php:932
+msgid "Cauca Department"
+msgstr ""
+
+#: languages/states.php:933
+msgid "Cesar Department"
+msgstr ""
+
+#: languages/states.php:934
+msgid "Chocó Department"
+msgstr ""
+
+#: languages/states.php:935
+msgid "Cundinamarca Department"
+msgstr ""
+
+#: languages/states.php:936
+msgid "Córdoba Department"
+msgstr ""
+
+#: languages/states.php:937
+msgid "Guainía Department"
+msgstr ""
+
+#: languages/states.php:938
+msgid "Guaviare Department"
+msgstr ""
+
+#: languages/states.php:939
+msgid "Huila Department"
+msgstr ""
+
+#: languages/states.php:940
+msgid "La Guajira Department"
+msgstr ""
+
+#: languages/states.php:941
+msgid "Magdalena Department"
+msgstr ""
+
+#: languages/states.php:942
+msgid "Meta"
+msgstr ""
+
+#: languages/states.php:943
+msgid "Nariño Department"
+msgstr ""
+
+#: languages/states.php:944
+msgid "Norte de Santander Department"
+msgstr ""
+
+#: languages/states.php:945
+msgid "Putumayo Department"
+msgstr ""
+
+#: languages/states.php:946
+msgid "Quindío Department"
+msgstr ""
+
+#: languages/states.php:947
+msgid "Risaralda Department"
+msgstr ""
+
+#: languages/states.php:948
+msgid "Santander Department"
+msgstr ""
+
+#: languages/states.php:949
+msgid "Sucre Department"
+msgstr ""
+
+#: languages/states.php:950
+msgid "Tolima Department"
+msgstr ""
+
+#: languages/states.php:951
+msgid "Valle del Cauca Department"
+msgstr ""
+
+#: languages/states.php:952
+msgid "Vaupés Department"
+msgstr ""
+
+#: languages/states.php:953
+msgid "Vichada Department"
+msgstr ""
+
+#: languages/states.php:956
+msgid "Alajuela Province"
+msgstr ""
+
+#: languages/states.php:957
+msgid "Guanacaste Province"
+msgstr ""
+
+#: languages/states.php:958
+msgid "Heredia Province"
+msgstr ""
+
+#: languages/states.php:959
+msgid "Limón Province"
+msgstr ""
+
+#: languages/states.php:960
+msgid "Provincia de Cartago"
+msgstr ""
+
+#: languages/states.php:961
+msgid "Puntarenas Province"
+msgstr ""
+
+#: languages/states.php:962
+msgid "San José Province"
+msgstr ""
+
+#: languages/states.php:965
+msgid "Las Tunas Province"
+msgstr ""
+
+#: languages/states.php:966
+msgid "Holguín Province"
+msgstr ""
+
+#: languages/states.php:967
+msgid "Granma Province"
+msgstr ""
+
+#: languages/states.php:968
+msgid "Santiago de Cuba Province"
+msgstr ""
+
+#: languages/states.php:969
+msgid "Guantánamo Province"
+msgstr ""
+
+#: languages/states.php:970
+msgid "Artemisa Province"
+msgstr ""
+
+#: languages/states.php:971
+msgid "Mayabeque Province"
+msgstr ""
+
+#: languages/states.php:972
+msgid "Isla de la Juventud"
+msgstr ""
+
+#: languages/states.php:973
+msgid "Camagüey Province"
+msgstr ""
+
+#: languages/states.php:974
+msgid "Ciego de Ávila Province"
+msgstr ""
+
+#: languages/states.php:975
+msgid "Cienfuegos Province"
+msgstr ""
+
+#: languages/states.php:976
+msgid "Havana Province"
+msgstr ""
+
+#: languages/states.php:977
+msgid "Matanzas Province"
+msgstr ""
+
+#: languages/states.php:978
+msgid "Pinar del Río Province"
+msgstr ""
+
+#: languages/states.php:979
+msgid "Sancti Spíritus Province"
+msgstr ""
+
+#: languages/states.php:980
+msgid "Villa Clara Province"
+msgstr ""
+
+#: languages/states.php:983
+msgid "Barlavento Islands"
+msgstr ""
+
+#: languages/states.php:984
+msgid "Boa Vista"
+msgstr ""
+
+#: languages/states.php:985
+msgid "Brava"
+msgstr ""
+
+#: languages/states.php:986
+msgid "Maio Municipality"
+msgstr ""
+
+#: languages/states.php:987
+msgid "Mosteiros"
+msgstr ""
+
+#: languages/states.php:988
+msgid "Paul"
+msgstr ""
+
+#: languages/states.php:989
+msgid "Porto Novo"
+msgstr ""
+
+#: languages/states.php:990
+msgid "Praia"
+msgstr ""
+
+#: languages/states.php:991
+msgid "Ribeira Brava Municipality"
+msgstr ""
+
+#: languages/states.php:992
+msgid "Ribeira Grande"
+msgstr ""
+
+#: languages/states.php:993
+msgid "Ribeira Grande de Santiago"
+msgstr ""
+
+#: languages/states.php:994
+msgid "Sal"
+msgstr ""
+
+#: languages/states.php:996
+msgid "Santa Catarina do Fogo"
+msgstr ""
+
+#: languages/states.php:997
+msgid "Santa Cruz"
+msgstr ""
+
+#: languages/states.php:998
+msgid "Sotavento Islands"
+msgstr ""
+
+#: languages/states.php:999
+msgid "São Domingos"
+msgstr ""
+
+#: languages/states.php:1000
+msgid "São Filipe"
+msgstr ""
+
+#: languages/states.php:1001
+msgid "São Lourenço dos Órgãos"
+msgstr ""
+
+#: languages/states.php:1002
+msgid "São Miguel"
+msgstr ""
+
+#: languages/states.php:1003
+msgid "São Vicente"
+msgstr ""
+
+#: languages/states.php:1004
+msgid "Tarrafal"
+msgstr ""
+
+#: languages/states.php:1005
+msgid "Tarrafal de São Nicolau"
+msgstr ""
+
+#: languages/states.php:1010
+msgid "Famagusta District"
+msgstr ""
+
+#: languages/states.php:1011
+msgid "Kyrenia District"
+msgstr ""
+
+#: languages/states.php:1012
+msgid "Larnaca District"
+msgstr ""
+
+#: languages/states.php:1013
+msgid "Limassol District"
+msgstr ""
+
+#: languages/states.php:1014
+msgid "Nicosia District"
+msgstr ""
+
+#: languages/states.php:1015
+msgid "Paphos District"
+msgstr ""
+
+#: languages/states.php:1018
+msgid "Prague"
+msgstr ""
+
+#: languages/states.php:1019
+msgid "Central Bohemian Region"
+msgstr ""
+
+#: languages/states.php:1020
+msgid "South Bohemian Region"
+msgstr ""
+
+#: languages/states.php:1021
+msgid "Plzeň Region"
+msgstr ""
+
+#: languages/states.php:1022
+msgid "Karlovy Vary Region"
+msgstr ""
+
+#: languages/states.php:1023
+msgid "Ústí nad Labem Region"
+msgstr ""
+
+#: languages/states.php:1024
+msgid "Liberec Region"
+msgstr ""
+
+#: languages/states.php:1025
+msgid "Hradec Králové Region"
+msgstr ""
+
+#: languages/states.php:1026
+msgid "Pardubice Region"
+msgstr ""
+
+#: languages/states.php:1027
+msgid "Vysočina Region"
+msgstr ""
+
+#: languages/states.php:1028
+msgid "South Moravian Region"
+msgstr ""
+
+#: languages/states.php:1029
+msgid "Olomouc Region"
+msgstr ""
+
+#: languages/states.php:1030
+msgid "Zlín Region"
+msgstr ""
+
+#: languages/states.php:1031
+msgid "Moravian-Silesian Region"
+msgstr ""
+
+#: languages/states.php:1032
+msgid "Prague 1"
+msgstr ""
+
+#: languages/states.php:1033
+msgid "Prague 2"
+msgstr ""
+
+#: languages/states.php:1034
+msgid "Prague 3"
+msgstr ""
+
+#: languages/states.php:1035
+msgid "Prague 4"
+msgstr ""
+
+#: languages/states.php:1036
+msgid "Prague 5"
+msgstr ""
+
+#: languages/states.php:1037
+msgid "Prague 6"
+msgstr ""
+
+#: languages/states.php:1038
+msgid "Prague 7"
+msgstr ""
+
+#: languages/states.php:1039
+msgid "Prague 8"
+msgstr ""
+
+#: languages/states.php:1040
+msgid "Prague 9"
+msgstr ""
+
+#: languages/states.php:1041
+msgid "Prague 10"
+msgstr ""
+
+#: languages/states.php:1042
+msgid "Prague 11"
+msgstr ""
+
+#: languages/states.php:1043
+msgid "Prague 12"
+msgstr ""
+
+#: languages/states.php:1044
+msgid "Prague 13"
+msgstr ""
+
+#: languages/states.php:1045
+msgid "Prague 14"
+msgstr ""
+
+#: languages/states.php:1046
+msgid "Prague 15"
+msgstr ""
+
+#: languages/states.php:1047
+msgid "Prague 16"
+msgstr ""
+
+#: languages/states.php:1048
+msgid "Horní Počernice"
+msgstr ""
+
+#: languages/states.php:1049
+msgid "Prague 21"
+msgstr ""
+
+#: languages/states.php:1050
+msgid "Benešov District"
+msgstr ""
+
+#: languages/states.php:1051
+msgid "Beroun District"
+msgstr ""
+
+#: languages/states.php:1052
+msgid "Kladno District"
+msgstr ""
+
+#: languages/states.php:1053
+msgid "Kolín District"
+msgstr ""
+
+#: languages/states.php:1054
+msgid "Mělník District"
+msgstr ""
+
+#: languages/states.php:1055
+msgid "Mladá Boleslav District"
+msgstr ""
+
+#: languages/states.php:1056
+msgid "Nymburk District"
+msgstr ""
+
+#: languages/states.php:1057
+msgid "Prague-East District"
+msgstr ""
+
+#: languages/states.php:1058
+msgid "České Budějovice District"
+msgstr ""
+
+#: languages/states.php:1059
+msgid "Český Krumlov District"
+msgstr ""
+
+#: languages/states.php:1060
+msgid "Jindřichův Hradec District"
+msgstr ""
+
+#: languages/states.php:1061
+msgid "Písek District"
+msgstr ""
+
+#: languages/states.php:1062
+msgid "Prachatice District"
+msgstr ""
+
+#: languages/states.php:1063
+msgid "Strakonice District"
+msgstr ""
+
+#: languages/states.php:1064
+msgid "Tábor District"
+msgstr ""
+
+#: languages/states.php:1065
+msgid "Domažlice District"
+msgstr ""
+
+#: languages/states.php:1066
+msgid "Klatovy District"
+msgstr ""
+
+#: languages/states.php:1067
+msgid "Plzeň-City District"
+msgstr ""
+
+#: languages/states.php:1068
+msgid "Plzeň-South District"
+msgstr ""
+
+#: languages/states.php:1069
+msgid "Plzeň-North District"
+msgstr ""
+
+#: languages/states.php:1070
+msgid "Rokycany District"
+msgstr ""
+
+#: languages/states.php:1071
+msgid "Tachov District"
+msgstr ""
+
+#: languages/states.php:1072
+msgid "Cheb District"
+msgstr ""
+
+#: languages/states.php:1073
+msgid "Karlovy Vary District"
+msgstr ""
+
+#: languages/states.php:1074
+msgid "Sokolov District"
+msgstr ""
+
+#: languages/states.php:1075
+msgid "Děčín District"
+msgstr ""
+
+#: languages/states.php:1076
+msgid "Chomutov District"
+msgstr ""
+
+#: languages/states.php:1077
+msgid "Litoměřice District"
+msgstr ""
+
+#: languages/states.php:1078
+msgid "Louny District"
+msgstr ""
+
+#: languages/states.php:1079
+msgid "Most District"
+msgstr ""
+
+#: languages/states.php:1080
+msgid "Teplice District"
+msgstr ""
+
+#: languages/states.php:1081
+msgid "Ústí nad Labem District"
+msgstr ""
+
+#: languages/states.php:1082
+msgid "Česká Lípa District"
+msgstr ""
+
+#: languages/states.php:1083
+msgid "Jablonec nad Nisou District"
+msgstr ""
+
+#: languages/states.php:1084
+msgid "Liberec District"
+msgstr ""
+
+#: languages/states.php:1085
+msgid "Semily District"
+msgstr ""
+
+#: languages/states.php:1086
+msgid "Hradec Králové District"
+msgstr ""
+
+#: languages/states.php:1087
+msgid "Jičín District"
+msgstr ""
+
+#: languages/states.php:1088
+msgid "Náchod District"
+msgstr ""
+
+#: languages/states.php:1089
+msgid "Rychnov nad Kněžnou District"
+msgstr ""
+
+#: languages/states.php:1090
+msgid "Trutnov District"
+msgstr ""
+
+#: languages/states.php:1091
+msgid "Chrudim District"
+msgstr ""
+
+#: languages/states.php:1092
+msgid "Pardubice District"
+msgstr ""
+
+#: languages/states.php:1093
+msgid "Svitavy District"
+msgstr ""
+
+#: languages/states.php:1094
+msgid "Ústí nad Orlicí District"
+msgstr ""
+
+#: languages/states.php:1095
+msgid "Havlíčkův Brod District"
+msgstr ""
+
+#: languages/states.php:1096
+msgid "Jihlava District"
+msgstr ""
+
+#: languages/states.php:1097
+msgid "Pelhřimov District"
+msgstr ""
+
+#: languages/states.php:1098
+msgid "Třebíč District"
+msgstr ""
+
+#: languages/states.php:1099
+msgid "Žďár nad Sázavou District"
+msgstr ""
+
+#: languages/states.php:1100
+msgid "Blansko District"
+msgstr ""
+
+#: languages/states.php:1101
+msgid "Brno-City District"
+msgstr ""
+
+#: languages/states.php:1102
+msgid "Brno-Country District"
+msgstr ""
+
+#: languages/states.php:1103
+msgid "Břeclav District"
+msgstr ""
+
+#: languages/states.php:1104
+msgid "Hodonín District"
+msgstr ""
+
+#: languages/states.php:1105
+msgid "Vyškov District"
+msgstr ""
+
+#: languages/states.php:1106
+msgid "Znojmo District"
+msgstr ""
+
+#: languages/states.php:1107
+msgid "Jeseník District"
+msgstr ""
+
+#: languages/states.php:1108
+msgid "Olomouc District"
+msgstr ""
+
+#: languages/states.php:1109
+msgid "Prostějov District"
+msgstr ""
+
+#: languages/states.php:1110
+msgid "Přerov District"
+msgstr ""
+
+#: languages/states.php:1111
+msgid "Šumperk District"
+msgstr ""
+
+#: languages/states.php:1112
+msgid "Kroměříž District"
+msgstr ""
+
+#: languages/states.php:1113
+msgid "Uherské Hradiště District"
+msgstr ""
+
+#: languages/states.php:1114
+msgid "Vsetín District"
+msgstr ""
+
+#: languages/states.php:1115
+msgid "Zlín District"
+msgstr ""
+
+#: languages/states.php:1116
+msgid "Bruntál District"
+msgstr ""
+
+#: languages/states.php:1117
+msgid "Frýdek-Místek District"
+msgstr ""
+
+#: languages/states.php:1118
+msgid "Karviná District"
+msgstr ""
+
+#: languages/states.php:1119
+msgid "Nový Jičín District"
+msgstr ""
+
+#: languages/states.php:1120
+msgid "Opava District"
+msgstr ""
+
+#: languages/states.php:1121
+msgid "Ostrava-City District"
+msgstr ""
+
+#: languages/states.php:1122
+msgid "Prague-West District"
+msgstr ""
+
+#: languages/states.php:1123
+msgid "Příbram District"
+msgstr ""
+
+#: languages/states.php:1124
+msgid "Rakovník District"
+msgstr ""
+
+#: languages/states.php:1127
+msgid "Baden-Württemberg"
+msgstr ""
+
+#: languages/states.php:1128
+msgid "Bavaria"
+msgstr ""
+
+#: languages/states.php:1129
+msgid "Berlin"
+msgstr ""
+
+#: languages/states.php:1130
+msgid "Brandenburg"
+msgstr ""
+
+#: languages/states.php:1131
+msgid "Bremen"
+msgstr ""
+
+#: languages/states.php:1132
+msgid "Hamburg"
+msgstr ""
+
+#: languages/states.php:1133
+msgid "Hesse"
+msgstr ""
+
+#: languages/states.php:1134
+msgid "Lower Saxony"
+msgstr ""
+
+#: languages/states.php:1135
+msgid "Mecklenburg-Vorpommern"
+msgstr ""
+
+#: languages/states.php:1136
+msgid "North Rhine-Westphalia"
+msgstr ""
+
+#: languages/states.php:1137
+msgid "Rhineland-Palatinate"
+msgstr ""
+
+#: languages/states.php:1138
+msgid "Saarland"
+msgstr ""
+
+#: languages/states.php:1139
+msgid "Saxony"
+msgstr ""
+
+#: languages/states.php:1140
+msgid "Saxony-Anhalt"
+msgstr ""
+
+#: languages/states.php:1141
+msgid "Schleswig-Holstein"
+msgstr ""
+
+#: languages/states.php:1142
+msgid "Thuringia"
+msgstr ""
+
+#: languages/states.php:1145
+msgid "Ali Sabieh Region"
+msgstr ""
+
+#: languages/states.php:1146
+msgid "Arta Region"
+msgstr ""
+
+#: languages/states.php:1147
+msgid "Dikhil Region"
+msgstr ""
+
+#: languages/states.php:1149
+msgid "Obock Region"
+msgstr ""
+
+#: languages/states.php:1150
+msgid "Tadjourah Region"
+msgstr ""
+
+#: languages/states.php:1153
+msgid "North Denmark Region"
+msgstr ""
+
+#: languages/states.php:1154
+msgid "Central Denmark Region"
+msgstr ""
+
+#: languages/states.php:1155
+msgid "Region of Southern Denmark"
+msgstr ""
+
+#: languages/states.php:1156
+msgid "Capital Region of Denmark"
+msgstr ""
+
+#: languages/states.php:1157
+msgid "Region Zealand"
+msgstr ""
+
+#: languages/states.php:1162
+#: languages/states.php:1769
+#: languages/states.php:5183
+msgid "Saint Andrew Parish"
+msgstr ""
+
+#: languages/states.php:1163
+#: languages/states.php:1770
+#: languages/states.php:5184
+msgid "Saint David Parish"
+msgstr ""
+
+#: languages/states.php:1166
+msgid "Saint Joseph Parish"
+msgstr ""
+
+#: languages/states.php:1167
+msgid "Saint Luke Parish"
+msgstr ""
+
+#: languages/states.php:1168
+#: languages/states.php:1773
+msgid "Saint Mark Parish"
+msgstr ""
+
+#: languages/states.php:1169
+#: languages/states.php:1774
+#: languages/states.php:5186
+msgid "Saint Patrick Parish"
+msgstr ""
+
+#: languages/states.php:1172
+msgid "Independencia"
+msgstr ""
+
+#: languages/states.php:1173
+msgid "La Altagracia Province"
+msgstr ""
+
+#: languages/states.php:1174
+msgid "La Romana Province"
+msgstr ""
+
+#: languages/states.php:1175
+msgid "La Vega Province"
+msgstr ""
+
+#: languages/states.php:1176
+msgid "María Trinidad Sánchez Province"
+msgstr ""
+
+#: languages/states.php:1177
+msgid "Monte Cristi Province"
+msgstr ""
+
+#: languages/states.php:1178
+msgid "Pedernales Province"
+msgstr ""
+
+#: languages/states.php:1179
+msgid "Peravia Province"
+msgstr ""
+
+#: languages/states.php:1180
+msgid "Puerto Plata Province"
+msgstr ""
+
+#: languages/states.php:1181
+msgid "Hermanas Mirabal Province"
+msgstr ""
+
+#: languages/states.php:1182
+msgid "Samaná Province"
+msgstr ""
+
+#: languages/states.php:1183
+msgid "San Cristóbal Province"
+msgstr ""
+
+#: languages/states.php:1185
+msgid "San Pedro de Macorís"
+msgstr ""
+
+#: languages/states.php:1186
+msgid "Sánchez Ramírez Province"
+msgstr ""
+
+#: languages/states.php:1187
+msgid "Santiago Province"
+msgstr ""
+
+#: languages/states.php:1188
+msgid "Santiago Rodríguez Province"
+msgstr ""
+
+#: languages/states.php:1189
+msgid "Valverde Province"
+msgstr ""
+
+#: languages/states.php:1190
+msgid "Monseñor Nouel Province"
+msgstr ""
+
+#: languages/states.php:1191
+msgid "Monte Plata Province"
+msgstr ""
+
+#: languages/states.php:1192
+msgid "Hato Mayor Province"
+msgstr ""
+
+#: languages/states.php:1193
+msgid "San José de Ocoa Province"
+msgstr ""
+
+#: languages/states.php:1194
+msgid "Santo Domingo Province"
+msgstr ""
+
+#: languages/states.php:1195
+msgid "Azua Province"
+msgstr ""
+
+#: languages/states.php:1196
+msgid "Baoruco Province"
+msgstr ""
+
+#: languages/states.php:1197
+msgid "Barahona Province"
+msgstr ""
+
+#: languages/states.php:1198
+msgid "Dajabón Province"
+msgstr ""
+
+#: languages/states.php:1199
+msgid "Distrito Nacional"
+msgstr ""
+
+#: languages/states.php:1200
+msgid "Duarte Province"
+msgstr ""
+
+#: languages/states.php:1201
+msgid "El Seibo Province"
+msgstr ""
+
+#: languages/states.php:1202
+msgid "Espaillat Province"
+msgstr ""
+
+#: languages/states.php:1205
+msgid "Bouïra"
+msgstr ""
+
+#: languages/states.php:1206
+msgid "Tamanghasset"
+msgstr ""
+
+#: languages/states.php:1207
+msgid "Tébessa"
+msgstr ""
+
+#: languages/states.php:1208
+msgid "Tlemcen"
+msgstr ""
+
+#: languages/states.php:1209
+msgid "Tiaret"
+msgstr ""
+
+#: languages/states.php:1210
+msgid "Tizi Ouzou"
+msgstr ""
+
+#: languages/states.php:1211
+msgid "Algiers"
+msgstr ""
+
+#: languages/states.php:1212
+msgid "Djelfa"
+msgstr ""
+
+#: languages/states.php:1213
+msgid "Jijel"
+msgstr ""
+
+#: languages/states.php:1214
+msgid "Sétif"
+msgstr ""
+
+#: languages/states.php:1215
+msgid "Saïda"
+msgstr ""
+
+#: languages/states.php:1216
+msgid "Skikda"
+msgstr ""
+
+#: languages/states.php:1217
+msgid "Sidi Bel Abbès"
+msgstr ""
+
+#: languages/states.php:1218
+msgid "Annaba"
+msgstr ""
+
+#: languages/states.php:1219
+msgid "Guelma"
+msgstr ""
+
+#: languages/states.php:1220
+msgid "Constantine"
+msgstr ""
+
+#: languages/states.php:1221
+msgid "Médéa"
+msgstr ""
+
+#: languages/states.php:1222
+msgid "Mostaganem"
+msgstr ""
+
+#: languages/states.php:1223
+msgid "M'Sila"
+msgstr ""
+
+#: languages/states.php:1224
+msgid "Mascara"
+msgstr ""
+
+#: languages/states.php:1225
+msgid "Ouargla"
+msgstr ""
+
+#: languages/states.php:1226
+msgid "Oran"
+msgstr ""
+
+#: languages/states.php:1227
+msgid "El Bayadh"
+msgstr ""
+
+#: languages/states.php:1228
+msgid "Illizi"
+msgstr ""
+
+#: languages/states.php:1229
+msgid "Bordj Bou Arréridj"
+msgstr ""
+
+#: languages/states.php:1230
+msgid "Boumerdès"
+msgstr ""
+
+#: languages/states.php:1231
+msgid "El Tarf"
+msgstr ""
+
+#: languages/states.php:1232
+msgid "Tindouf"
+msgstr ""
+
+#: languages/states.php:1233
+msgid "Tissemsilt"
+msgstr ""
+
+#: languages/states.php:1234
+msgid "El Oued"
+msgstr ""
+
+#: languages/states.php:1235
+msgid "Khenchela"
+msgstr ""
+
+#: languages/states.php:1236
+msgid "Souk Ahras"
+msgstr ""
+
+#: languages/states.php:1237
+msgid "Tipasa"
+msgstr ""
+
+#: languages/states.php:1238
+msgid "Mila"
+msgstr ""
+
+#: languages/states.php:1239
+msgid "Aïn Defla"
+msgstr ""
+
+#: languages/states.php:1240
+msgid "Naama"
+msgstr ""
+
+#: languages/states.php:1241
+msgid "Aïn Témouchent"
+msgstr ""
+
+#: languages/states.php:1242
+msgid "Ghardaïa"
+msgstr ""
+
+#: languages/states.php:1243
+msgid "Relizane"
+msgstr ""
+
+#: languages/states.php:1244
+msgid "El M'ghair"
+msgstr ""
+
+#: languages/states.php:1245
+msgid "El Menia"
+msgstr ""
+
+#: languages/states.php:1246
+msgid "Ouled Djellal"
+msgstr ""
+
+#: languages/states.php:1247
+msgid "Bordj Baji Mokhtar"
+msgstr ""
+
+#: languages/states.php:1248
+msgid "Béni Abbès"
+msgstr ""
+
+#: languages/states.php:1249
+msgid "Timimoun"
+msgstr ""
+
+#: languages/states.php:1250
+msgid "Touggourt"
+msgstr ""
+
+#: languages/states.php:1251
+msgid "Djanet"
+msgstr ""
+
+#: languages/states.php:1252
+msgid "In Salah"
+msgstr ""
+
+#: languages/states.php:1253
+msgid "In Guezzam"
+msgstr ""
+
+#: languages/states.php:1254
+msgid "Adrar"
+msgstr ""
+
+#: languages/states.php:1255
+msgid "Batna"
+msgstr ""
+
+#: languages/states.php:1256
+msgid "Biskra"
+msgstr ""
+
+#: languages/states.php:1257
+msgid "Blida"
+msgstr ""
+
+#: languages/states.php:1258
+msgid "Béchar"
+msgstr ""
+
+#: languages/states.php:1259
+msgid "Béjaïa"
+msgstr ""
+
+#: languages/states.php:1260
+msgid "Chlef"
+msgstr ""
+
+#: languages/states.php:1261
+msgid "Laghouat"
+msgstr ""
+
+#: languages/states.php:1262
+msgid "Oum El Bouaghi"
+msgstr ""
+
+#: languages/states.php:1265
+msgid "Azuay Province"
+msgstr ""
+
+#: languages/states.php:1266
+msgid "Bolívar Province"
+msgstr ""
+
+#: languages/states.php:1267
+msgid "Carchi Province"
+msgstr ""
+
+#: languages/states.php:1268
+msgid "Cañar Province"
+msgstr ""
+
+#: languages/states.php:1269
+msgid "Chimborazo Province"
+msgstr ""
+
+#: languages/states.php:1270
+msgid "Cotopaxi Province"
+msgstr ""
+
+#: languages/states.php:1271
+msgid "El Oro Province"
+msgstr ""
+
+#: languages/states.php:1272
+msgid "Esmeraldas"
+msgstr ""
+
+#: languages/states.php:1273
+msgid "Galápagos Province"
+msgstr ""
+
+#: languages/states.php:1274
+msgid "Guayas Province"
+msgstr ""
+
+#: languages/states.php:1275
+msgid "Imbabura Province"
+msgstr ""
+
+#: languages/states.php:1276
+msgid "Los Ríos Province"
+msgstr ""
+
+#: languages/states.php:1277
+msgid "Manabí Province"
+msgstr ""
+
+#: languages/states.php:1278
+msgid "Morona-Santiago Province"
+msgstr ""
+
+#: languages/states.php:1279
+msgid "Napo Province"
+msgstr ""
+
+#: languages/states.php:1280
+msgid "Orellana Province"
+msgstr ""
+
+#: languages/states.php:1281
+msgid "Pastaza Province"
+msgstr ""
+
+#: languages/states.php:1282
+msgid "Pichincha Province"
+msgstr ""
+
+#: languages/states.php:1283
+msgid "Santa Elena Province"
+msgstr ""
+
+#: languages/states.php:1284
+msgid "Santo Domingo de los Tsáchilas Province"
+msgstr ""
+
+#: languages/states.php:1285
+msgid "Sucumbíos Province"
+msgstr ""
+
+#: languages/states.php:1286
+msgid "Tungurahua Province"
+msgstr ""
+
+#: languages/states.php:1287
+msgid "Zamora-Chinchipe Province"
+msgstr ""
+
+#: languages/states.php:1290
+msgid "Harju County"
+msgstr ""
+
+#: languages/states.php:1291
+msgid "Hiiu County"
+msgstr ""
+
+#: languages/states.php:1292
+msgid "Ida-Viru County"
+msgstr ""
+
+#: languages/states.php:1293
+msgid "Jõgeva County"
+msgstr ""
+
+#: languages/states.php:1294
+msgid "Järva County"
+msgstr ""
+
+#: languages/states.php:1295
+msgid "Lääne County"
+msgstr ""
+
+#: languages/states.php:1296
+msgid "Lääne-Viru County"
+msgstr ""
+
+#: languages/states.php:1297
+msgid "Põlva County"
+msgstr ""
+
+#: languages/states.php:1298
+msgid "Pärnu County"
+msgstr ""
+
+#: languages/states.php:1299
+msgid "Rapla County"
+msgstr ""
+
+#: languages/states.php:1300
+msgid "Saare County"
+msgstr ""
+
+#: languages/states.php:1301
+msgid "Tartu County"
+msgstr ""
+
+#: languages/states.php:1302
+msgid "Valga County"
+msgstr ""
+
+#: languages/states.php:1303
+msgid "Viljandi County"
+msgstr ""
+
+#: languages/states.php:1304
+msgid "Võru County"
+msgstr ""
+
+#: languages/states.php:1307
+msgid "Alexandria Governorate"
+msgstr ""
+
+#: languages/states.php:1308
+msgid "Aswan Governorate"
+msgstr ""
+
+#: languages/states.php:1309
+msgid "Asyut Governorate"
+msgstr ""
+
+#: languages/states.php:1310
+msgid "Beheira Governorate"
+msgstr ""
+
+#: languages/states.php:1311
+msgid "Beni Suef Governorate"
+msgstr ""
+
+#: languages/states.php:1312
+msgid "Cairo Governorate"
+msgstr ""
+
+#: languages/states.php:1313
+msgid "Dakahlia Governorate"
+msgstr ""
+
+#: languages/states.php:1314
+msgid "Damietta Governorate"
+msgstr ""
+
+#: languages/states.php:1315
+msgid "Faiyum Governorate"
+msgstr ""
+
+#: languages/states.php:1316
+msgid "Gharbia Governorate"
+msgstr ""
+
+#: languages/states.php:1317
+msgid "Giza Governorate"
+msgstr ""
+
+#: languages/states.php:1318
+msgid "Ismailia Governorate"
+msgstr ""
+
+#: languages/states.php:1319
+msgid "Kafr el-Sheikh Governorate"
+msgstr ""
+
+#: languages/states.php:1320
+msgid "Luxor Governorate"
+msgstr ""
+
+#: languages/states.php:1321
+msgid "Matrouh Governorate"
+msgstr ""
+
+#: languages/states.php:1322
+msgid "Minya Governorate"
+msgstr ""
+
+#: languages/states.php:1323
+msgid "Monufia Governorate"
+msgstr ""
+
+#: languages/states.php:1324
+msgid "New Valley Governorate"
+msgstr ""
+
+#: languages/states.php:1325
+msgid "North Sinai Governorate"
+msgstr ""
+
+#: languages/states.php:1326
+msgid "Port Said Governorate"
+msgstr ""
+
+#: languages/states.php:1327
+msgid "Qalyubia Governorate"
+msgstr ""
+
+#: languages/states.php:1328
+msgid "Qena Governorate"
+msgstr ""
+
+#: languages/states.php:1329
+msgid "Red Sea Governorate"
+msgstr ""
+
+#: languages/states.php:1330
+msgid "Sohag Governorate"
+msgstr ""
+
+#: languages/states.php:1331
+msgid "South Sinai Governorate"
+msgstr ""
+
+#: languages/states.php:1332
+msgid "Suez Governorate"
+msgstr ""
+
+#: languages/states.php:1336
+msgid "Anseba Region"
+msgstr ""
+
+#: languages/states.php:1337
+msgid "Debub Region"
+msgstr ""
+
+#: languages/states.php:1338
+msgid "Gash-Barka Region"
+msgstr ""
+
+#: languages/states.php:1339
+msgid "Maekel Region"
+msgstr ""
+
+#: languages/states.php:1340
+msgid "Northern Red Sea Region"
+msgstr ""
+
+#: languages/states.php:1341
+msgid "Southern Red Sea Region"
+msgstr ""
+
+#: languages/states.php:1345
+msgid "A Coruña"
+msgstr ""
+
+#: languages/states.php:1346
+msgid "Araba/Álava"
+msgstr ""
+
+#: languages/states.php:1347
+msgid "Albacete"
+msgstr ""
+
+#: languages/states.php:1348
+msgid "Alicante"
+msgstr ""
+
+#: languages/states.php:1349
+msgid "Almería"
+msgstr ""
+
+#: languages/states.php:1350
+msgid "Asturias"
+msgstr ""
+
+#: languages/states.php:1351
+msgid "Ávila"
+msgstr ""
+
+#: languages/states.php:1352
+msgid "Badajoz"
+msgstr ""
+
+#: languages/states.php:1353
+msgid "Baleares"
+msgstr ""
+
+#: languages/states.php:1354
+msgid "Barcelona"
+msgstr ""
+
+#: languages/states.php:1355
+msgid "Burgos"
+msgstr ""
+
+#: languages/states.php:1356
+msgid "Cáceres"
+msgstr ""
+
+#: languages/states.php:1357
+msgid "Cádiz"
+msgstr ""
+
+#: languages/states.php:1358
+msgid "Cantabria"
+msgstr ""
+
+#: languages/states.php:1359
+msgid "Castellón"
+msgstr ""
+
+#: languages/states.php:1360
+msgid "Ceuta"
+msgstr ""
+
+#: languages/states.php:1361
+msgid "Ciudad Real"
+msgstr ""
+
+#: languages/states.php:1362
+msgid "Córdoba"
+msgstr ""
+
+#: languages/states.php:1363
+msgid "Cuenca"
+msgstr ""
+
+#: languages/states.php:1364
+msgid "Girona"
+msgstr ""
+
+#: languages/states.php:1365
+msgid "Granada"
+msgstr ""
+
+#: languages/states.php:1366
+msgid "Guadalajara"
+msgstr ""
+
+#: languages/states.php:1367
+msgid "Gipuzkoa"
+msgstr ""
+
+#: languages/states.php:1368
+msgid "Huelva"
+msgstr ""
+
+#: languages/states.php:1369
+msgid "Huesca"
+msgstr ""
+
+#: languages/states.php:1370
+msgid "Jaén"
+msgstr ""
+
+#: languages/states.php:1371
+msgid "La Rioja"
+msgstr ""
+
+#: languages/states.php:1372
+msgid "Las Palmas"
+msgstr ""
+
+#: languages/states.php:1373
+msgid "León"
+msgstr ""
+
+#: languages/states.php:1374
+msgid "Lleida"
+msgstr ""
+
+#: languages/states.php:1375
+msgid "Lugo"
+msgstr ""
+
+#: languages/states.php:1376
+msgid "Madrid"
+msgstr ""
+
+#: languages/states.php:1377
+msgid "Málaga"
+msgstr ""
+
+#: languages/states.php:1378
+msgid "Melilla"
+msgstr ""
+
+#: languages/states.php:1379
+msgid "Murcia"
+msgstr ""
+
+#: languages/states.php:1380
+msgid "Navarra"
+msgstr ""
+
+#: languages/states.php:1381
+msgid "Ourense"
+msgstr ""
+
+#: languages/states.php:1382
+msgid "Palencia"
+msgstr ""
+
+#: languages/states.php:1383
+msgid "Pontevedra"
+msgstr ""
+
+#: languages/states.php:1384
+msgid "Salamanca"
+msgstr ""
+
+#: languages/states.php:1385
+msgid "Santa Cruz de Tenerife"
+msgstr ""
+
+#: languages/states.php:1386
+msgid "Segovia"
+msgstr ""
+
+#: languages/states.php:1387
+msgid "Sevilla"
+msgstr ""
+
+#: languages/states.php:1388
+msgid "Soria"
+msgstr ""
+
+#: languages/states.php:1389
+msgid "Tarragona"
+msgstr ""
+
+#: languages/states.php:1390
+msgid "Teruel"
+msgstr ""
+
+#: languages/states.php:1391
+msgid "Toledo"
+msgstr ""
+
+#: languages/states.php:1392
+msgid "Valencia"
+msgstr ""
+
+#: languages/states.php:1393
+msgid "Valladolid"
+msgstr ""
+
+#: languages/states.php:1394
+msgid "Biscay"
+msgstr ""
+
+#: languages/states.php:1395
+msgid "Zamora"
+msgstr ""
+
+#: languages/states.php:1396
+msgid "Zaragoza"
+msgstr ""
+
+#: languages/states.php:1399
+msgid "Addis Ababa"
+msgstr ""
+
+#: languages/states.php:1400
+msgid "Afar Region"
+msgstr ""
+
+#: languages/states.php:1401
+msgid "Amhara Region"
+msgstr ""
+
+#: languages/states.php:1402
+msgid "Benishangul-Gumuz Region"
+msgstr ""
+
+#: languages/states.php:1403
+msgid "Dire Dawa"
+msgstr ""
+
+#: languages/states.php:1404
+msgid "Gambela Region"
+msgstr ""
+
+#: languages/states.php:1405
+msgid "Harari Region"
+msgstr ""
+
+#: languages/states.php:1406
+msgid "Oromia Region"
+msgstr ""
+
+#: languages/states.php:1407
+msgid "Somali Region"
+msgstr ""
+
+#: languages/states.php:1408
+msgid "Southern Nations, Nationalities, and Peoples' Region"
+msgstr ""
+
+#: languages/states.php:1409
+msgid "Tigray Region"
+msgstr ""
+
+#: languages/states.php:1412
+msgid "Pirkanmaa"
+msgstr ""
+
+#: languages/states.php:1413
+msgid "Ostrobothnia"
+msgstr ""
+
+#: languages/states.php:1414
+msgid "North Karelia"
+msgstr ""
+
+#: languages/states.php:1415
+msgid "Northern Ostrobothnia"
+msgstr ""
+
+#: languages/states.php:1416
+msgid "Northern Savonia"
+msgstr ""
+
+#: languages/states.php:1417
+msgid "Päijänne Tavastia"
+msgstr ""
+
+#: languages/states.php:1418
+msgid "Satakunta"
+msgstr ""
+
+#: languages/states.php:1419
+msgid "Uusimaa"
+msgstr ""
+
+#: languages/states.php:1420
+msgid "Finland Proper"
+msgstr ""
+
+#: languages/states.php:1421
+msgid "Central Finland"
+msgstr ""
+
+#: languages/states.php:1422
+msgid "Central Ostrobothnia"
+msgstr ""
+
+#: languages/states.php:1423
+msgid "Eastern Finland Province"
+msgstr ""
+
+#: languages/states.php:1424
+msgid "Kainuu"
+msgstr ""
+
+#: languages/states.php:1425
+msgid "Kymenlaakso"
+msgstr ""
+
+#: languages/states.php:1426
+msgid "Lapland"
+msgstr ""
+
+#: languages/states.php:1427
+msgid "Oulu Province"
+msgstr ""
+
+#: languages/states.php:1428
+msgid "South Karelia"
+msgstr ""
+
+#: languages/states.php:1429
+msgid "Southern Ostrobothnia"
+msgstr ""
+
+#: languages/states.php:1430
+msgid "Southern Savonia"
+msgstr ""
+
+#: languages/states.php:1431
+msgid "Tavastia Proper"
+msgstr ""
+
+#: languages/states.php:1432
+msgid "Åland Islands"
+msgstr ""
+
+#: languages/states.php:1435
+msgid "Namosi"
+msgstr ""
+
+#: languages/states.php:1436
+msgid "Ra"
+msgstr ""
+
+#: languages/states.php:1437
+msgid "Rewa"
+msgstr ""
+
+#: languages/states.php:1438
+msgid "Serua"
+msgstr ""
+
+#: languages/states.php:1439
+msgid "Tailevu"
+msgstr ""
+
+#: languages/states.php:1440
+msgid "Ba"
+msgstr ""
+
+#: languages/states.php:1441
+msgid "Bua"
+msgstr ""
+
+#: languages/states.php:1442
+msgid "Cakaudrove"
+msgstr ""
+
+#: languages/states.php:1443
+msgid "Central Division"
+msgstr ""
+
+#: languages/states.php:1444
+msgid "Eastern Division"
+msgstr ""
+
+#: languages/states.php:1445
+msgid "Kadavu"
+msgstr ""
+
+#: languages/states.php:1446
+msgid "Lau"
+msgstr ""
+
+#: languages/states.php:1447
+msgid "Lomaiviti"
+msgstr ""
+
+#: languages/states.php:1448
+msgid "Macuata"
+msgstr ""
+
+#: languages/states.php:1449
+msgid "Nadroga-Navosa"
+msgstr ""
+
+#: languages/states.php:1450
+msgid "Naitasiri"
+msgstr ""
+
+#: languages/states.php:1451
+msgid "Northern Division"
+msgstr ""
+
+#: languages/states.php:1452
+msgid "Rotuma"
+msgstr ""
+
+#: languages/states.php:1453
+msgid "Western Division"
+msgstr ""
+
+#: languages/states.php:1457
+msgid "Chuuk State"
+msgstr ""
+
+#: languages/states.php:1458
+msgid "Kosrae State"
+msgstr ""
+
+#: languages/states.php:1459
+msgid "Pohnpei State"
+msgstr ""
+
+#: languages/states.php:1460
+msgid "Yap State"
+msgstr ""
+
+#: languages/states.php:1464
+msgid "Paris"
+msgstr ""
+
+#: languages/states.php:1465
+msgid "Alo"
+msgstr ""
+
+#: languages/states.php:1466
+msgid "Alsace"
+msgstr ""
+
+#: languages/states.php:1467
+msgid "Aquitaine"
+msgstr ""
+
+#: languages/states.php:1468
+msgid "Auvergne"
+msgstr ""
+
+#: languages/states.php:1469
+msgid "Auvergne-Rhône-Alpes"
+msgstr ""
+
+#: languages/states.php:1470
+msgid "Bourgogne-Franche-Comté"
+msgstr ""
+
+#: languages/states.php:1471
+msgid "Brittany"
+msgstr ""
+
+#: languages/states.php:1472
+msgid "Burgundy"
+msgstr ""
+
+#: languages/states.php:1473
+msgid "Centre-Val de Loire"
+msgstr ""
+
+#: languages/states.php:1474
+msgid "Champagne-Ardenne"
+msgstr ""
+
+#: languages/states.php:1475
+msgid "Corsica"
+msgstr ""
+
+#: languages/states.php:1476
+msgid "Franche-Comté"
+msgstr ""
+
+#: languages/states.php:1479
+msgid "Grand Est"
+msgstr ""
+
+#: languages/states.php:1481
+msgid "Hauts-de-France"
+msgstr ""
+
+#: languages/states.php:1482
+msgid "Languedoc-Roussillon"
+msgstr ""
+
+#: languages/states.php:1483
+msgid "Limousin"
+msgstr ""
+
+#: languages/states.php:1484
+msgid "Lorraine"
+msgstr ""
+
+#: languages/states.php:1485
+msgid "Lower Normandy"
+msgstr ""
+
+#: languages/states.php:1488
+msgid "Nord-Pas-de-Calais"
+msgstr ""
+
+#: languages/states.php:1489
+msgid "Normandy"
+msgstr ""
+
+#: languages/states.php:1490
+msgid "Nouvelle-Aquitaine"
+msgstr ""
+
+#: languages/states.php:1491
+msgid "Occitania"
+msgstr ""
+
+#: languages/states.php:1492
+msgid "Pays de la Loire"
+msgstr ""
+
+#: languages/states.php:1493
+msgid "Picardy"
+msgstr ""
+
+#: languages/states.php:1494
+msgid "Poitou-Charentes"
+msgstr ""
+
+#: languages/states.php:1495
+msgid "Provence-Alpes-Côte d'Azur"
+msgstr ""
+
+#: languages/states.php:1496
+msgid "Rhône-Alpes"
+msgstr ""
+
+#: languages/states.php:1497
+msgid "Réunion"
+msgstr ""
+
+#: languages/states.php:1498
+msgid "Saint Barthélemy"
+msgstr ""
+
+#: languages/states.php:1499
+msgid "Saint Martin"
+msgstr ""
+
+#: languages/states.php:1501
+msgid "Sigave"
+msgstr ""
+
+#: languages/states.php:1502
+msgid "Upper Normandy"
+msgstr ""
+
+#: languages/states.php:1503
+msgid "Uvea"
+msgstr ""
+
+#: languages/states.php:1504
+msgid "Wallis and Futuna"
+msgstr ""
+
+#: languages/states.php:1505
+msgid "Île-de-France"
+msgstr ""
+
+#: languages/states.php:1508
+msgid "Estuaire Province"
+msgstr ""
+
+#: languages/states.php:1509
+msgid "Haut-Ogooué Province"
+msgstr ""
+
+#: languages/states.php:1510
+msgid "Moyen-Ogooué Province"
+msgstr ""
+
+#: languages/states.php:1511
+msgid "Ngounié Province"
+msgstr ""
+
+#: languages/states.php:1512
+msgid "Nyanga Province"
+msgstr ""
+
+#: languages/states.php:1513
+msgid "Ogooué-Ivindo Province"
+msgstr ""
+
+#: languages/states.php:1514
+msgid "Ogooué-Lolo Province"
+msgstr ""
+
+#: languages/states.php:1515
+msgid "Ogooué-Maritime Province"
+msgstr ""
+
+#: languages/states.php:1516
+msgid "Woleu-Ntem Province"
+msgstr ""
+
+#: languages/states.php:1519
+msgid "Aberdeen"
+msgstr ""
+
+#: languages/states.php:1520
+msgid "Aberdeenshire"
+msgstr ""
+
+#: languages/states.php:1521
+msgid "Angus"
+msgstr ""
+
+#: languages/states.php:1522
+msgid "Antrim"
+msgstr ""
+
+#: languages/states.php:1523
+msgid "Antrim and Newtownabbey"
+msgstr ""
+
+#: languages/states.php:1524
+msgid "Ards"
+msgstr ""
+
+#: languages/states.php:1525
+msgid "Ards and North Down"
+msgstr ""
+
+#: languages/states.php:1526
+msgid "Argyll and Bute"
+msgstr ""
+
+#: languages/states.php:1527
+msgid "Armagh City and District Council"
+msgstr ""
+
+#: languages/states.php:1528
+msgid "Armagh, Banbridge and Craigavon"
+msgstr ""
+
+#: languages/states.php:1529
+msgid "Ascension Island"
+msgstr ""
+
+#: languages/states.php:1530
+msgid "Ballymena Borough"
+msgstr ""
+
+#: languages/states.php:1531
+msgid "Ballymoney"
+msgstr ""
+
+#: languages/states.php:1532
+msgid "Banbridge"
+msgstr ""
+
+#: languages/states.php:1533
+msgid "Barnsley"
+msgstr ""
+
+#: languages/states.php:1534
+msgid "Bath and North East Somerset"
+msgstr ""
+
+#: languages/states.php:1535
+msgid "Bedford"
+msgstr ""
+
+#: languages/states.php:1536
+msgid "Belfast district"
+msgstr ""
+
+#: languages/states.php:1537
+msgid "Birmingham"
+msgstr ""
+
+#: languages/states.php:1538
+msgid "Blackburn with Darwen"
+msgstr ""
+
+#: languages/states.php:1539
+msgid "Blackpool"
+msgstr ""
+
+#: languages/states.php:1540
+msgid "Blaenau Gwent County Borough"
+msgstr ""
+
+#: languages/states.php:1541
+msgid "Bolton"
+msgstr ""
+
+#: languages/states.php:1542
+msgid "Bournemouth"
+msgstr ""
+
+#: languages/states.php:1543
+msgid "Bracknell Forest"
+msgstr ""
+
+#: languages/states.php:1544
+msgid "Bradford"
+msgstr ""
+
+#: languages/states.php:1545
+msgid "Bridgend County Borough"
+msgstr ""
+
+#: languages/states.php:1546
+msgid "Brighton and Hove"
+msgstr ""
+
+#: languages/states.php:1547
+msgid "Buckinghamshire"
+msgstr ""
+
+#: languages/states.php:1548
+msgid "Bury"
+msgstr ""
+
+#: languages/states.php:1549
+msgid "Caerphilly County Borough"
+msgstr ""
+
+#: languages/states.php:1550
+msgid "Calderdale"
+msgstr ""
+
+#: languages/states.php:1551
+msgid "Cambridgeshire"
+msgstr ""
+
+#: languages/states.php:1552
+msgid "Carmarthenshire"
+msgstr ""
+
+#: languages/states.php:1553
+msgid "Carrickfergus Borough Council"
+msgstr ""
+
+#: languages/states.php:1554
+msgid "Castlereagh"
+msgstr ""
+
+#: languages/states.php:1555
+msgid "Causeway Coast and Glens"
+msgstr ""
+
+#: languages/states.php:1556
+msgid "Central Bedfordshire"
+msgstr ""
+
+#: languages/states.php:1557
+msgid "Ceredigion"
+msgstr ""
+
+#: languages/states.php:1558
+msgid "Cheshire East"
+msgstr ""
+
+#: languages/states.php:1559
+msgid "Cheshire West and Chester"
+msgstr ""
+
+#: languages/states.php:1560
+msgid "City and County of Cardiff"
+msgstr ""
+
+#: languages/states.php:1561
+msgid "City and County of Swansea"
+msgstr ""
+
+#: languages/states.php:1562
+msgid "City of Bristol"
+msgstr ""
+
+#: languages/states.php:1563
+msgid "City of Derby"
+msgstr ""
+
+#: languages/states.php:1564
+msgid "City of Kingston upon Hull"
+msgstr ""
+
+#: languages/states.php:1565
+msgid "City of Leicester"
+msgstr ""
+
+#: languages/states.php:1566
+msgid "City of London"
+msgstr ""
+
+#: languages/states.php:1567
+msgid "City of Nottingham"
+msgstr ""
+
+#: languages/states.php:1568
+msgid "City of Peterborough"
+msgstr ""
+
+#: languages/states.php:1569
+msgid "City of Plymouth"
+msgstr ""
+
+#: languages/states.php:1570
+msgid "City of Portsmouth"
+msgstr ""
+
+#: languages/states.php:1571
+msgid "City of Southampton"
+msgstr ""
+
+#: languages/states.php:1572
+msgid "City of Stoke-on-Trent"
+msgstr ""
+
+#: languages/states.php:1573
+msgid "City of Sunderland"
+msgstr ""
+
+#: languages/states.php:1574
+msgid "City of Westminster"
+msgstr ""
+
+#: languages/states.php:1575
+msgid "City of Wolverhampton"
+msgstr ""
+
+#: languages/states.php:1576
+msgid "City of York"
+msgstr ""
+
+#: languages/states.php:1577
+msgid "Clackmannanshire"
+msgstr ""
+
+#: languages/states.php:1578
+msgid "Coleraine Borough Council"
+msgstr ""
+
+#: languages/states.php:1579
+msgid "Conwy County Borough"
+msgstr ""
+
+#: languages/states.php:1580
+msgid "Cookstown District Council"
+msgstr ""
+
+#: languages/states.php:1581
+msgid "Cornwall"
+msgstr ""
+
+#: languages/states.php:1582
+msgid "County Durham"
+msgstr ""
+
+#: languages/states.php:1583
+msgid "Coventry"
+msgstr ""
+
+#: languages/states.php:1584
+msgid "Craigavon Borough Council"
+msgstr ""
+
+#: languages/states.php:1585
+msgid "Cumbria"
+msgstr ""
+
+#: languages/states.php:1586
+msgid "Darlington"
+msgstr ""
+
+#: languages/states.php:1587
+msgid "Denbighshire"
+msgstr ""
+
+#: languages/states.php:1588
+msgid "Derbyshire"
+msgstr ""
+
+#: languages/states.php:1589
+msgid "Derry City Council"
+msgstr ""
+
+#: languages/states.php:1590
+msgid "Derry City and Strabane"
+msgstr ""
+
+#: languages/states.php:1591
+msgid "Devon"
+msgstr ""
+
+#: languages/states.php:1592
+msgid "Doncaster"
+msgstr ""
+
+#: languages/states.php:1593
+msgid "Dorset"
+msgstr ""
+
+#: languages/states.php:1594
+msgid "Down District Council"
+msgstr ""
+
+#: languages/states.php:1595
+msgid "Dudley"
+msgstr ""
+
+#: languages/states.php:1596
+msgid "Dumfries and Galloway"
+msgstr ""
+
+#: languages/states.php:1597
+msgid "Dundee"
+msgstr ""
+
+#: languages/states.php:1598
+msgid "Dungannon and South Tyrone Borough Council"
+msgstr ""
+
+#: languages/states.php:1599
+msgid "East Ayrshire"
+msgstr ""
+
+#: languages/states.php:1600
+msgid "East Dunbartonshire"
+msgstr ""
+
+#: languages/states.php:1601
+msgid "East Lothian"
+msgstr ""
+
+#: languages/states.php:1602
+msgid "East Renfrewshire"
+msgstr ""
+
+#: languages/states.php:1603
+msgid "East Riding of Yorkshire"
+msgstr ""
+
+#: languages/states.php:1604
+msgid "East Sussex"
+msgstr ""
+
+#: languages/states.php:1605
+msgid "Edinburgh"
+msgstr ""
+
+#: languages/states.php:1606
+msgid "England"
+msgstr ""
+
+#: languages/states.php:1607
+msgid "Essex"
+msgstr ""
+
+#: languages/states.php:1608
+msgid "Falkirk"
+msgstr ""
+
+#: languages/states.php:1609
+msgid "Fermanagh District Council"
+msgstr ""
+
+#: languages/states.php:1610
+msgid "Fermanagh and Omagh"
+msgstr ""
+
+#: languages/states.php:1611
+msgid "Fife"
+msgstr ""
+
+#: languages/states.php:1612
+msgid "Flintshire"
+msgstr ""
+
+#: languages/states.php:1613
+msgid "Gateshead"
+msgstr ""
+
+#: languages/states.php:1614
+msgid "Glasgow"
+msgstr ""
+
+#: languages/states.php:1615
+msgid "Gloucestershire"
+msgstr ""
+
+#: languages/states.php:1616
+msgid "Gwynedd"
+msgstr ""
+
+#: languages/states.php:1617
+msgid "Halton"
+msgstr ""
+
+#: languages/states.php:1618
+msgid "Hampshire"
+msgstr ""
+
+#: languages/states.php:1619
+msgid "Hartlepool"
+msgstr ""
+
+#: languages/states.php:1620
+msgid "Herefordshire"
+msgstr ""
+
+#: languages/states.php:1621
+msgid "Hertfordshire"
+msgstr ""
+
+#: languages/states.php:1622
+msgid "Highland"
+msgstr ""
+
+#: languages/states.php:1623
+msgid "Inverclyde"
+msgstr ""
+
+#: languages/states.php:1624
+msgid "Isle of Wight"
+msgstr ""
+
+#: languages/states.php:1625
+msgid "Isles of Scilly"
+msgstr ""
+
+#: languages/states.php:1626
+msgid "Kent"
+msgstr ""
+
+#: languages/states.php:1627
+msgid "Kirklees"
+msgstr ""
+
+#: languages/states.php:1628
+msgid "Knowsley"
+msgstr ""
+
+#: languages/states.php:1629
+msgid "Lancashire"
+msgstr ""
+
+#: languages/states.php:1630
+msgid "Larne Borough Council"
+msgstr ""
+
+#: languages/states.php:1631
+msgid "Leeds"
+msgstr ""
+
+#: languages/states.php:1632
+msgid "Leicestershire"
+msgstr ""
+
+#: languages/states.php:1633
+msgid "Limavady Borough Council"
+msgstr ""
+
+#: languages/states.php:1634
+msgid "Lincolnshire"
+msgstr ""
+
+#: languages/states.php:1635
+msgid "Lisburn City Council"
+msgstr ""
+
+#: languages/states.php:1636
+msgid "Lisburn and Castlereagh"
+msgstr ""
+
+#: languages/states.php:1637
+msgid "Liverpool"
+msgstr ""
+
+#: languages/states.php:1638
+msgid "London Borough of Barking and Dagenham"
+msgstr ""
+
+#: languages/states.php:1639
+msgid "London Borough of Barnet"
+msgstr ""
+
+#: languages/states.php:1640
+msgid "London Borough of Bexley"
+msgstr ""
+
+#: languages/states.php:1641
+msgid "London Borough of Brent"
+msgstr ""
+
+#: languages/states.php:1642
+msgid "London Borough of Bromley"
+msgstr ""
+
+#: languages/states.php:1643
+msgid "London Borough of Camden"
+msgstr ""
+
+#: languages/states.php:1644
+msgid "London Borough of Croydon"
+msgstr ""
+
+#: languages/states.php:1645
+msgid "London Borough of Ealing"
+msgstr ""
+
+#: languages/states.php:1646
+msgid "London Borough of Enfield"
+msgstr ""
+
+#: languages/states.php:1647
+msgid "London Borough of Hackney"
+msgstr ""
+
+#: languages/states.php:1648
+msgid "London Borough of Hammersmith and Fulham"
+msgstr ""
+
+#: languages/states.php:1649
+msgid "London Borough of Haringey"
+msgstr ""
+
+#: languages/states.php:1650
+msgid "London Borough of Harrow"
+msgstr ""
+
+#: languages/states.php:1651
+msgid "London Borough of Havering"
+msgstr ""
+
+#: languages/states.php:1652
+msgid "London Borough of Hillingdon"
+msgstr ""
+
+#: languages/states.php:1653
+msgid "London Borough of Hounslow"
+msgstr ""
+
+#: languages/states.php:1654
+msgid "London Borough of Islington"
+msgstr ""
+
+#: languages/states.php:1655
+msgid "London Borough of Lambeth"
+msgstr ""
+
+#: languages/states.php:1656
+msgid "London Borough of Lewisham"
+msgstr ""
+
+#: languages/states.php:1657
+msgid "London Borough of Merton"
+msgstr ""
+
+#: languages/states.php:1658
+msgid "London Borough of Newham"
+msgstr ""
+
+#: languages/states.php:1659
+msgid "London Borough of Redbridge"
+msgstr ""
+
+#: languages/states.php:1660
+msgid "London Borough of Richmond upon Thames"
+msgstr ""
+
+#: languages/states.php:1661
+msgid "London Borough of Southwark"
+msgstr ""
+
+#: languages/states.php:1662
+msgid "London Borough of Sutton"
+msgstr ""
+
+#: languages/states.php:1663
+msgid "London Borough of Tower Hamlets"
+msgstr ""
+
+#: languages/states.php:1664
+msgid "London Borough of Waltham Forest"
+msgstr ""
+
+#: languages/states.php:1665
+msgid "London Borough of Wandsworth"
+msgstr ""
+
+#: languages/states.php:1666
+msgid "Magherafelt District Council"
+msgstr ""
+
+#: languages/states.php:1667
+msgid "Manchester"
+msgstr ""
+
+#: languages/states.php:1668
+msgid "Medway"
+msgstr ""
+
+#: languages/states.php:1669
+msgid "Merthyr Tydfil County Borough"
+msgstr ""
+
+#: languages/states.php:1670
+msgid "Metropolitan Borough of Wigan"
+msgstr ""
+
+#: languages/states.php:1671
+msgid "Mid Ulster"
+msgstr ""
+
+#: languages/states.php:1672
+msgid "Mid and East Antrim"
+msgstr ""
+
+#: languages/states.php:1673
+msgid "Middlesbrough"
+msgstr ""
+
+#: languages/states.php:1674
+msgid "Midlothian"
+msgstr ""
+
+#: languages/states.php:1675
+msgid "Milton Keynes"
+msgstr ""
+
+#: languages/states.php:1676
+msgid "Monmouthshire"
+msgstr ""
+
+#: languages/states.php:1677
+msgid "Moray"
+msgstr ""
+
+#: languages/states.php:1678
+msgid "Moyle District Council"
+msgstr ""
+
+#: languages/states.php:1679
+msgid "Neath Port Talbot County Borough"
+msgstr ""
+
+#: languages/states.php:1680
+msgid "Newcastle upon Tyne"
+msgstr ""
+
+#: languages/states.php:1681
+msgid "Newport"
+msgstr ""
+
+#: languages/states.php:1682
+msgid "Newry and Mourne District Council"
+msgstr ""
+
+#: languages/states.php:1683
+msgid "Newry, Mourne and Down"
+msgstr ""
+
+#: languages/states.php:1684
+msgid "Newtownabbey Borough Council"
+msgstr ""
+
+#: languages/states.php:1685
+msgid "Norfolk"
+msgstr ""
+
+#: languages/states.php:1686
+msgid "North Ayrshire"
+msgstr ""
+
+#: languages/states.php:1687
+msgid "North Down Borough Council"
+msgstr ""
+
+#: languages/states.php:1688
+msgid "North East Lincolnshire"
+msgstr ""
+
+#: languages/states.php:1689
+msgid "North Lanarkshire"
+msgstr ""
+
+#: languages/states.php:1690
+msgid "North Lincolnshire"
+msgstr ""
+
+#: languages/states.php:1691
+msgid "North Somerset"
+msgstr ""
+
+#: languages/states.php:1692
+msgid "North Tyneside"
+msgstr ""
+
+#: languages/states.php:1693
+msgid "North Yorkshire"
+msgstr ""
+
+#: languages/states.php:1694
+msgid "Northamptonshire"
+msgstr ""
+
+#: languages/states.php:1695
+msgid "Northern Ireland"
+msgstr ""
+
+#: languages/states.php:1696
+msgid "Northumberland"
+msgstr ""
+
+#: languages/states.php:1697
+msgid "Nottinghamshire"
+msgstr ""
+
+#: languages/states.php:1698
+msgid "Oldham"
+msgstr ""
+
+#: languages/states.php:1699
+msgid "Omagh District Council"
+msgstr ""
+
+#: languages/states.php:1700
+msgid "Orkney Islands"
+msgstr ""
+
+#: languages/states.php:1701
+msgid "Outer Hebrides"
+msgstr ""
+
+#: languages/states.php:1702
+msgid "Oxfordshire"
+msgstr ""
+
+#: languages/states.php:1703
+msgid "Pembrokeshire"
+msgstr ""
+
+#: languages/states.php:1704
+msgid "Perth and Kinross"
+msgstr ""
+
+#: languages/states.php:1705
+msgid "Poole"
+msgstr ""
+
+#: languages/states.php:1706
+msgid "Powys"
+msgstr ""
+
+#: languages/states.php:1707
+msgid "Reading"
+msgstr ""
+
+#: languages/states.php:1708
+msgid "Redcar and Cleveland"
+msgstr ""
+
+#: languages/states.php:1709
+msgid "Renfrewshire"
+msgstr ""
+
+#: languages/states.php:1710
+msgid "Rhondda Cynon Taf"
+msgstr ""
+
+#: languages/states.php:1711
+msgid "Rochdale"
+msgstr ""
+
+#: languages/states.php:1712
+msgid "Rotherham"
+msgstr ""
+
+#: languages/states.php:1713
+msgid "Royal Borough of Greenwich"
+msgstr ""
+
+#: languages/states.php:1714
+msgid "Royal Borough of Kensington and Chelsea"
+msgstr ""
+
+#: languages/states.php:1715
+msgid "Royal Borough of Kingston upon Thames"
+msgstr ""
+
+#: languages/states.php:1716
+msgid "Rutland"
+msgstr ""
+
+#: languages/states.php:1718
+msgid "Salford"
+msgstr ""
+
+#: languages/states.php:1719
+msgid "Sandwell"
+msgstr ""
+
+#: languages/states.php:1720
+msgid "Scotland"
+msgstr ""
+
+#: languages/states.php:1721
+msgid "Scottish Borders"
+msgstr ""
+
+#: languages/states.php:1722
+msgid "Sefton"
+msgstr ""
+
+#: languages/states.php:1723
+msgid "Sheffield"
+msgstr ""
+
+#: languages/states.php:1724
+msgid "Shetland Islands"
+msgstr ""
+
+#: languages/states.php:1725
+msgid "Shropshire"
+msgstr ""
+
+#: languages/states.php:1726
+msgid "Slough"
+msgstr ""
+
+#: languages/states.php:1727
+msgid "Solihull"
+msgstr ""
+
+#: languages/states.php:1728
+msgid "Somerset"
+msgstr ""
+
+#: languages/states.php:1729
+msgid "South Ayrshire"
+msgstr ""
+
+#: languages/states.php:1730
+msgid "South Gloucestershire"
+msgstr ""
+
+#: languages/states.php:1731
+msgid "South Lanarkshire"
+msgstr ""
+
+#: languages/states.php:1732
+msgid "South Tyneside"
+msgstr ""
+
+#: languages/states.php:1733
+msgid "Southend-on-Sea"
+msgstr ""
+
+#: languages/states.php:1734
+msgid "St Helens"
+msgstr ""
+
+#: languages/states.php:1735
+msgid "Staffordshire"
+msgstr ""
+
+#: languages/states.php:1736
+msgid "Stirling"
+msgstr ""
+
+#: languages/states.php:1737
+msgid "Stockport"
+msgstr ""
+
+#: languages/states.php:1738
+msgid "Stockton-on-Tees"
+msgstr ""
+
+#: languages/states.php:1739
+msgid "Strabane District Council"
+msgstr ""
+
+#: languages/states.php:1740
+msgid "Suffolk"
+msgstr ""
+
+#: languages/states.php:1741
+msgid "Surrey"
+msgstr ""
+
+#: languages/states.php:1742
+msgid "Swindon"
+msgstr ""
+
+#: languages/states.php:1743
+msgid "Tameside"
+msgstr ""
+
+#: languages/states.php:1744
+msgid "Telford and Wrekin"
+msgstr ""
+
+#: languages/states.php:1745
+msgid "Thurrock"
+msgstr ""
+
+#: languages/states.php:1746
+msgid "Torbay"
+msgstr ""
+
+#: languages/states.php:1747
+msgid "Torfaen"
+msgstr ""
+
+#: languages/states.php:1748
+msgid "Trafford"
+msgstr ""
+
+#: languages/states.php:1750
+msgid "Vale of Glamorgan"
+msgstr ""
+
+#: languages/states.php:1751
+msgid "Wakefield"
+msgstr ""
+
+#: languages/states.php:1752
+msgid "Wales"
+msgstr ""
+
+#: languages/states.php:1753
+msgid "Walsall"
+msgstr ""
+
+#: languages/states.php:1754
+msgid "Warrington"
+msgstr ""
+
+#: languages/states.php:1755
+msgid "Warwickshire"
+msgstr ""
+
+#: languages/states.php:1756
+msgid "West Berkshire"
+msgstr ""
+
+#: languages/states.php:1757
+msgid "West Dunbartonshire"
+msgstr ""
+
+#: languages/states.php:1758
+msgid "West Lothian"
+msgstr ""
+
+#: languages/states.php:1759
+msgid "West Sussex"
+msgstr ""
+
+#: languages/states.php:1760
+msgid "Wiltshire"
+msgstr ""
+
+#: languages/states.php:1761
+msgid "Windsor and Maidenhead"
+msgstr ""
+
+#: languages/states.php:1762
+msgid "Wirral"
+msgstr ""
+
+#: languages/states.php:1763
+msgid "Wokingham"
+msgstr ""
+
+#: languages/states.php:1764
+msgid "Worcestershire"
+msgstr ""
+
+#: languages/states.php:1765
+msgid "Wrexham County Borough"
+msgstr ""
+
+#: languages/states.php:1768
+msgid "Carriacou and Petite Martinique"
+msgstr ""
+
+#: languages/states.php:1777
+msgid "Khelvachauri Municipality"
+msgstr ""
+
+#: languages/states.php:1778
+msgid "Senaki Municipality"
+msgstr ""
+
+#: languages/states.php:1779
+msgid "Adjara"
+msgstr ""
+
+#: languages/states.php:1780
+msgid "Autonomous Republic of Abkhazia"
+msgstr ""
+
+#: languages/states.php:1781
+msgid "Guria"
+msgstr ""
+
+#: languages/states.php:1782
+msgid "Imereti"
+msgstr ""
+
+#: languages/states.php:1783
+msgid "Kakheti"
+msgstr ""
+
+#: languages/states.php:1784
+msgid "Kvemo Kartli"
+msgstr ""
+
+#: languages/states.php:1785
+msgid "Mtskheta-Mtianeti"
+msgstr ""
+
+#: languages/states.php:1786
+msgid "Racha-Lechkhumi and Kvemo Svaneti"
+msgstr ""
+
+#: languages/states.php:1787
+msgid "Samegrelo-Zemo Svaneti"
+msgstr ""
+
+#: languages/states.php:1788
+msgid "Samtskhe-Javakheti"
+msgstr ""
+
+#: languages/states.php:1789
+msgid "Shida Kartli"
+msgstr ""
+
+#: languages/states.php:1790
+msgid "Tbilisi"
+msgstr ""
+
+#: languages/states.php:1795
+msgid "Ashanti Region"
+msgstr ""
+
+#: languages/states.php:1796
+msgid "Brong-Ahafo Region"
+msgstr ""
+
+#: languages/states.php:1797
+#: languages/states.php:3416
+#: languages/states.php:3634
+#: languages/states.php:5073
+msgid "Central Region"
+msgstr ""
+
+#: languages/states.php:1798
+#: languages/states.php:2258
+#: languages/states.php:5074
+msgid "Eastern Region"
+msgstr ""
+
+#: languages/states.php:1799
+msgid "Greater Accra Region"
+msgstr ""
+
+#: languages/states.php:1800
+#: languages/states.php:3434
+#: languages/states.php:5075
+msgid "Northern Region"
+msgstr ""
+
+#: languages/states.php:1801
+msgid "Upper East Region"
+msgstr ""
+
+#: languages/states.php:1802
+msgid "Upper West Region"
+msgstr ""
+
+#: languages/states.php:1803
+msgid "Volta Region"
+msgstr ""
+
+#: languages/states.php:1804
+#: languages/states.php:2254
+#: languages/states.php:3636
+#: languages/states.php:5076
+msgid "Western Region"
+msgstr ""
+
+#: languages/states.php:1809
+msgid "Banjul"
+msgstr ""
+
+#: languages/states.php:1810
+msgid "Central River Division"
+msgstr ""
+
+#: languages/states.php:1811
+msgid "Lower River Division"
+msgstr ""
+
+#: languages/states.php:1812
+msgid "North Bank Division"
+msgstr ""
+
+#: languages/states.php:1813
+msgid "Upper River Division"
+msgstr ""
+
+#: languages/states.php:1814
+msgid "West Coast Division"
+msgstr ""
+
+#: languages/states.php:1817
+msgid "Beyla Prefecture"
+msgstr ""
+
+#: languages/states.php:1818
+msgid "Boffa Prefecture"
+msgstr ""
+
+#: languages/states.php:1819
+msgid "Boké Prefecture"
+msgstr ""
+
+#: languages/states.php:1820
+msgid "Boké Region"
+msgstr ""
+
+#: languages/states.php:1821
+msgid "Conakry"
+msgstr ""
+
+#: languages/states.php:1822
+msgid "Coyah Prefecture"
+msgstr ""
+
+#: languages/states.php:1823
+msgid "Dabola Prefecture"
+msgstr ""
+
+#: languages/states.php:1824
+msgid "Dalaba Prefecture"
+msgstr ""
+
+#: languages/states.php:1825
+msgid "Dinguiraye Prefecture"
+msgstr ""
+
+#: languages/states.php:1826
+msgid "Dubréka Prefecture"
+msgstr ""
+
+#: languages/states.php:1827
+msgid "Faranah Prefecture"
+msgstr ""
+
+#: languages/states.php:1828
+msgid "Forécariah Prefecture"
+msgstr ""
+
+#: languages/states.php:1829
+msgid "Fria Prefecture"
+msgstr ""
+
+#: languages/states.php:1830
+msgid "Gaoual Prefecture"
+msgstr ""
+
+#: languages/states.php:1831
+msgid "Guéckédou Prefecture"
+msgstr ""
+
+#: languages/states.php:1832
+msgid "Kankan Prefecture"
+msgstr ""
+
+#: languages/states.php:1833
+msgid "Kankan Region"
+msgstr ""
+
+#: languages/states.php:1834
+msgid "Kindia Prefecture"
+msgstr ""
+
+#: languages/states.php:1835
+msgid "Kindia Region"
+msgstr ""
+
+#: languages/states.php:1836
+msgid "Kissidougou Prefecture"
+msgstr ""
+
+#: languages/states.php:1837
+msgid "Koubia Prefecture"
+msgstr ""
+
+#: languages/states.php:1838
+msgid "Koundara Prefecture"
+msgstr ""
+
+#: languages/states.php:1839
+msgid "Kouroussa Prefecture"
+msgstr ""
+
+#: languages/states.php:1840
+msgid "Kérouané Prefecture"
+msgstr ""
+
+#: languages/states.php:1841
+msgid "Labé Prefecture"
+msgstr ""
+
+#: languages/states.php:1842
+msgid "Labé Region"
+msgstr ""
+
+#: languages/states.php:1843
+msgid "Lola Prefecture"
+msgstr ""
+
+#: languages/states.php:1844
+msgid "Lélouma Prefecture"
+msgstr ""
+
+#: languages/states.php:1845
+msgid "Macenta Prefecture"
+msgstr ""
+
+#: languages/states.php:1846
+msgid "Mali Prefecture"
+msgstr ""
+
+#: languages/states.php:1847
+msgid "Mamou Prefecture"
+msgstr ""
+
+#: languages/states.php:1848
+msgid "Mamou Region"
+msgstr ""
+
+#: languages/states.php:1849
+msgid "Mandiana Prefecture"
+msgstr ""
+
+#: languages/states.php:1850
+msgid "Nzérékoré Prefecture"
+msgstr ""
+
+#: languages/states.php:1851
+msgid "Nzérékoré Region"
+msgstr ""
+
+#: languages/states.php:1852
+msgid "Pita Prefecture"
+msgstr ""
+
+#: languages/states.php:1853
+msgid "Siguiri Prefecture"
+msgstr ""
+
+#: languages/states.php:1854
+msgid "Tougué Prefecture"
+msgstr ""
+
+#: languages/states.php:1855
+msgid "Télimélé Prefecture"
+msgstr ""
+
+#: languages/states.php:1856
+msgid "Yomou Prefecture"
+msgstr ""
+
+#: languages/states.php:1860
+msgid "Annobón Province"
+msgstr ""
+
+#: languages/states.php:1861
+msgid "Bioko Norte Province"
+msgstr ""
+
+#: languages/states.php:1862
+msgid "Bioko Sur Province"
+msgstr ""
+
+#: languages/states.php:1863
+msgid "Centro Sur Province"
+msgstr ""
+
+#: languages/states.php:1864
+msgid "Insular Region"
+msgstr ""
+
+#: languages/states.php:1865
+msgid "Kié-Ntem Province"
+msgstr ""
+
+#: languages/states.php:1866
+msgid "Litoral Province"
+msgstr ""
+
+#: languages/states.php:1867
+msgid "Río Muni"
+msgstr ""
+
+#: languages/states.php:1868
+msgid "Wele-Nzas Province"
+msgstr ""
+
+#: languages/states.php:1871
+msgid "Argolis Regional Unit"
+msgstr ""
+
+#: languages/states.php:1872
+msgid "Arcadia Prefecture"
+msgstr ""
+
+#: languages/states.php:1873
+msgid "Achaea Regional Unit"
+msgstr ""
+
+#: languages/states.php:1874
+msgid "Corinthia Regional Unit"
+msgstr ""
+
+#: languages/states.php:1875
+msgid "Laconia"
+msgstr ""
+
+#: languages/states.php:1876
+msgid "Corfu Prefecture"
+msgstr ""
+
+#: languages/states.php:1877
+msgid "Kefalonia Prefecture"
+msgstr ""
+
+#: languages/states.php:1878
+msgid "Lefkada Regional Unit"
+msgstr ""
+
+#: languages/states.php:1879
+msgid "Ioannina Regional Unit"
+msgstr ""
+
+#: languages/states.php:1880
+msgid "Preveza Prefecture"
+msgstr ""
+
+#: languages/states.php:1881
+msgid "Karditsa Regional Unit"
+msgstr ""
+
+#: languages/states.php:1882
+msgid "Larissa Prefecture"
+msgstr ""
+
+#: languages/states.php:1883
+msgid "Grevena Prefecture"
+msgstr ""
+
+#: languages/states.php:1884
+msgid "Drama Regional Unit"
+msgstr ""
+
+#: languages/states.php:1885
+msgid "Imathia Regional Unit"
+msgstr ""
+
+#: languages/states.php:1886
+msgid "Thessaloniki Regional Unit"
+msgstr ""
+
+#: languages/states.php:1887
+msgid "Kastoria Regional Unit"
+msgstr ""
+
+#: languages/states.php:1888
+msgid "Kilkis Regional Unit"
+msgstr ""
+
+#: languages/states.php:1889
+msgid "Kozani Prefecture"
+msgstr ""
+
+#: languages/states.php:1890
+msgid "Pella Regional Unit"
+msgstr ""
+
+#: languages/states.php:1891
+msgid "Serres Prefecture"
+msgstr ""
+
+#: languages/states.php:1892
+msgid "Chania Regional Unit"
+msgstr ""
+
+#: languages/states.php:1893
+msgid "Aetolia-Acarnania Regional Unit"
+msgstr ""
+
+#: languages/states.php:1894
+msgid "Attica Region"
+msgstr ""
+
+#: languages/states.php:1895
+msgid "Boeotia Regional Unit"
+msgstr ""
+
+#: languages/states.php:1896
+msgid "Central Greece Region"
+msgstr ""
+
+#: languages/states.php:1897
+msgid "Central Macedonia"
+msgstr ""
+
+#: languages/states.php:1898
+msgid "Crete Region"
+msgstr ""
+
+#: languages/states.php:1899
+msgid "East Attica Regional Unit"
+msgstr ""
+
+#: languages/states.php:1900
+msgid "East Macedonia and Thrace"
+msgstr ""
+
+#: languages/states.php:1901
+msgid "Epirus Region"
+msgstr ""
+
+#: languages/states.php:1902
+msgid "Euboea"
+msgstr ""
+
+#: languages/states.php:1903
+msgid "Ionian Islands Region"
+msgstr ""
+
+#: languages/states.php:1904
+msgid "Peloponnese Region"
+msgstr ""
+
+#: languages/states.php:1905
+msgid "Phthiotis Prefecture"
+msgstr ""
+
+#: languages/states.php:1906
+msgid "South Aegean"
+msgstr ""
+
+#: languages/states.php:1907
+msgid "West Greece Region"
+msgstr ""
+
+#: languages/states.php:1908
+msgid "West Macedonia Region"
+msgstr ""
+
+#: languages/states.php:1912
+msgid "Alta Verapaz Department"
+msgstr ""
+
+#: languages/states.php:1913
+msgid "Baja Verapaz Department"
+msgstr ""
+
+#: languages/states.php:1914
+msgid "Chimaltenango Department"
+msgstr ""
+
+#: languages/states.php:1915
+msgid "Chiquimula Department"
+msgstr ""
+
+#: languages/states.php:1916
+msgid "El Progreso Department"
+msgstr ""
+
+#: languages/states.php:1917
+msgid "Escuintla Department"
+msgstr ""
+
+#: languages/states.php:1918
+msgid "Guatemala Department"
+msgstr ""
+
+#: languages/states.php:1919
+msgid "Huehuetenango Department"
+msgstr ""
+
+#: languages/states.php:1920
+msgid "Izabal Department"
+msgstr ""
+
+#: languages/states.php:1921
+msgid "Jalapa Department"
+msgstr ""
+
+#: languages/states.php:1922
+msgid "Jutiapa Department"
+msgstr ""
+
+#: languages/states.php:1923
+msgid "Petén Department"
+msgstr ""
+
+#: languages/states.php:1924
+msgid "Quetzaltenango Department"
+msgstr ""
+
+#: languages/states.php:1925
+msgid "Quiché Department"
+msgstr ""
+
+#: languages/states.php:1926
+msgid "Retalhuleu Department"
+msgstr ""
+
+#: languages/states.php:1927
+msgid "Sacatepéquez Department"
+msgstr ""
+
+#: languages/states.php:1928
+msgid "San Marcos Department"
+msgstr ""
+
+#: languages/states.php:1929
+msgid "Santa Rosa Department"
+msgstr ""
+
+#: languages/states.php:1930
+msgid "Sololá Department"
+msgstr ""
+
+#: languages/states.php:1931
+msgid "Suchitepéquez Department"
+msgstr ""
+
+#: languages/states.php:1932
+msgid "Totonicapán Department"
+msgstr ""
+
+#: languages/states.php:1936
+msgid "Bafatá"
+msgstr ""
+
+#: languages/states.php:1937
+msgid "Biombo Region"
+msgstr ""
+
+#: languages/states.php:1938
+msgid "Bolama Region"
+msgstr ""
+
+#: languages/states.php:1939
+msgid "Cacheu Region"
+msgstr ""
+
+#: languages/states.php:1940
+msgid "Gabú Region"
+msgstr ""
+
+#: languages/states.php:1941
+msgid "Leste Province"
+msgstr ""
+
+#: languages/states.php:1942
+msgid "Norte Province"
+msgstr ""
+
+#: languages/states.php:1943
+msgid "Oio Region"
+msgstr ""
+
+#: languages/states.php:1944
+msgid "Quinara Region"
+msgstr ""
+
+#: languages/states.php:1945
+msgid "Sul Province"
+msgstr ""
+
+#: languages/states.php:1946
+msgid "Tombali Region"
+msgstr ""
+
+#: languages/states.php:1949
+msgid "Barima-Waini"
+msgstr ""
+
+#: languages/states.php:1950
+msgid "Cuyuni-Mazaruni"
+msgstr ""
+
+#: languages/states.php:1951
+msgid "Demerara-Mahaica"
+msgstr ""
+
+#: languages/states.php:1952
+msgid "East Berbice-Corentyne"
+msgstr ""
+
+#: languages/states.php:1953
+msgid "Essequibo Islands-West Demerara"
+msgstr ""
+
+#: languages/states.php:1954
+msgid "Mahaica-Berbice"
+msgstr ""
+
+#: languages/states.php:1955
+msgid "Pomeroon-Supenaam"
+msgstr ""
+
+#: languages/states.php:1956
+msgid "Potaro-Siparuni"
+msgstr ""
+
+#: languages/states.php:1957
+msgid "Upper Demerara-Berbice"
+msgstr ""
+
+#: languages/states.php:1958
+msgid "Upper Takutu-Upper Essequibo"
+msgstr ""
+
+#: languages/states.php:1961
+msgid "Central and Western District"
+msgstr ""
+
+#: languages/states.php:1962
+msgid "Eastern"
+msgstr ""
+
+#: languages/states.php:1963
+msgid "Islands District"
+msgstr ""
+
+#: languages/states.php:1964
+msgid "Kowloon City"
+msgstr ""
+
+#: languages/states.php:1965
+msgid "Kwai Tsing"
+msgstr ""
+
+#: languages/states.php:1966
+msgid "Kwun Tong"
+msgstr ""
+
+#: languages/states.php:1968
+msgid "Sai Kung District"
+msgstr ""
+
+#: languages/states.php:1969
+msgid "Sha Tin"
+msgstr ""
+
+#: languages/states.php:1970
+msgid "Sham Shui Po"
+msgstr ""
+
+#: languages/states.php:1971
+msgid "Southern"
+msgstr ""
+
+#: languages/states.php:1972
+msgid "Tai Po District"
+msgstr ""
+
+#: languages/states.php:1973
+msgid "Tsuen Wan District"
+msgstr ""
+
+#: languages/states.php:1974
+msgid "Tuen Mun"
+msgstr ""
+
+#: languages/states.php:1975
+msgid "Wan Chai"
+msgstr ""
+
+#: languages/states.php:1976
+msgid "Wong Tai Sin"
+msgstr ""
+
+#: languages/states.php:1977
+msgid "Yau Tsim Mong"
+msgstr ""
+
+#: languages/states.php:1978
+msgid "Yuen Long District"
+msgstr ""
+
+#: languages/states.php:1982
+msgid "Atlántida Department"
+msgstr ""
+
+#: languages/states.php:1983
+msgid "Bay Islands Department"
+msgstr ""
+
+#: languages/states.php:1984
+msgid "Choluteca Department"
+msgstr ""
+
+#: languages/states.php:1985
+msgid "Colón Department"
+msgstr ""
+
+#: languages/states.php:1986
+msgid "Comayagua Department"
+msgstr ""
+
+#: languages/states.php:1987
+msgid "Copán Department"
+msgstr ""
+
+#: languages/states.php:1988
+msgid "Cortés Department"
+msgstr ""
+
+#: languages/states.php:1989
+msgid "El Paraíso Department"
+msgstr ""
+
+#: languages/states.php:1990
+msgid "Francisco Morazán Department"
+msgstr ""
+
+#: languages/states.php:1991
+msgid "Gracias a Dios Department"
+msgstr ""
+
+#: languages/states.php:1992
+msgid "Intibucá Department"
+msgstr ""
+
+#: languages/states.php:1994
+msgid "Lempira Department"
+msgstr ""
+
+#: languages/states.php:1995
+msgid "Ocotepeque Department"
+msgstr ""
+
+#: languages/states.php:1996
+msgid "Olancho Department"
+msgstr ""
+
+#: languages/states.php:1997
+msgid "Santa Bárbara Department"
+msgstr ""
+
+#: languages/states.php:1998
+msgid "Valle Department"
+msgstr ""
+
+#: languages/states.php:1999
+msgid "Yoro Department"
+msgstr ""
+
+#: languages/states.php:2002
+msgid "Virovitica-Podravina County"
+msgstr ""
+
+#: languages/states.php:2003
+msgid "Požega-Slavonia County"
+msgstr ""
+
+#: languages/states.php:2004
+msgid "Brod-Posavina County"
+msgstr ""
+
+#: languages/states.php:2005
+msgid "Zadar County"
+msgstr ""
+
+#: languages/states.php:2006
+msgid "Osijek-Baranja County"
+msgstr ""
+
+#: languages/states.php:2007
+msgid "Šibenik-Knin County"
+msgstr ""
+
+#: languages/states.php:2008
+msgid "Vukovar-Syrmia County"
+msgstr ""
+
+#: languages/states.php:2009
+msgid "Split-Dalmatia County"
+msgstr ""
+
+#: languages/states.php:2010
+msgid "Istria County"
+msgstr ""
+
+#: languages/states.php:2011
+msgid "Dubrovnik-Neretva County"
+msgstr ""
+
+#: languages/states.php:2012
+msgid "Međimurje County"
+msgstr ""
+
+#: languages/states.php:2013
+msgid "Zagreb"
+msgstr ""
+
+#: languages/states.php:2014
+msgid "Bjelovar-Bilogora County"
+msgstr ""
+
+#: languages/states.php:2015
+msgid "Koprivnica-Križevci County"
+msgstr ""
+
+#: languages/states.php:2016
+msgid "Krapina-Zagorje County"
+msgstr ""
+
+#: languages/states.php:2017
+msgid "Lika-Senj County"
+msgstr ""
+
+#: languages/states.php:2018
+msgid "Primorje-Gorski Kotar County"
+msgstr ""
+
+#: languages/states.php:2019
+msgid "Sisak-Moslavina County"
+msgstr ""
+
+#: languages/states.php:2020
+msgid "Varaždin County"
+msgstr ""
+
+#: languages/states.php:2021
+msgid "Zagreb County"
+msgstr ""
+
+#: languages/states.php:2024
+msgid "Artibonite"
+msgstr ""
+
+#: languages/states.php:2026
+msgid "Grand'Anse"
+msgstr ""
+
+#: languages/states.php:2027
+msgid "Nippes"
+msgstr ""
+
+#: languages/states.php:2028
+msgid "Nord"
+msgstr ""
+
+#: languages/states.php:2029
+msgid "Nord-Est"
+msgstr ""
+
+#: languages/states.php:2030
+msgid "Nord-Ouest"
+msgstr ""
+
+#: languages/states.php:2031
+msgid "Ouest"
+msgstr ""
+
+#: languages/states.php:2032
+msgid "Sud"
+msgstr ""
+
+#: languages/states.php:2033
+msgid "Sud-Est"
+msgstr ""
+
+#: languages/states.php:2036
+msgid "Baranya County"
+msgstr ""
+
+#: languages/states.php:2037
+msgid "Borsod-Abaúj-Zemplén County"
+msgstr ""
+
+#: languages/states.php:2038
+msgid "Budapest"
+msgstr ""
+
+#: languages/states.php:2039
+msgid "Bács-Kiskun County"
+msgstr ""
+
+#: languages/states.php:2040
+msgid "Békés County"
+msgstr ""
+
+#: languages/states.php:2041
+msgid "Békéscsaba"
+msgstr ""
+
+#: languages/states.php:2042
+msgid "Csongrád County"
+msgstr ""
+
+#: languages/states.php:2043
+msgid "Debrecen"
+msgstr ""
+
+#: languages/states.php:2044
+msgid "Dunaújváros"
+msgstr ""
+
+#: languages/states.php:2045
+msgid "Eger"
+msgstr ""
+
+#: languages/states.php:2046
+msgid "Fejér County"
+msgstr ""
+
+#: languages/states.php:2047
+msgid "Győr"
+msgstr ""
+
+#: languages/states.php:2048
+msgid "Győr-Moson-Sopron County"
+msgstr ""
+
+#: languages/states.php:2049
+msgid "Hajdú-Bihar County"
+msgstr ""
+
+#: languages/states.php:2050
+msgid "Heves County"
+msgstr ""
+
+#: languages/states.php:2051
+msgid "Hódmezővásárhely"
+msgstr ""
+
+#: languages/states.php:2052
+msgid "Jász-Nagykun-Szolnok County"
+msgstr ""
+
+#: languages/states.php:2053
+msgid "Kaposvár"
+msgstr ""
+
+#: languages/states.php:2054
+msgid "Kecskemét"
+msgstr ""
+
+#: languages/states.php:2055
+msgid "Miskolc"
+msgstr ""
+
+#: languages/states.php:2056
+msgid "Nagykanizsa"
+msgstr ""
+
+#: languages/states.php:2057
+msgid "Nyíregyháza"
+msgstr ""
+
+#: languages/states.php:2058
+msgid "Nógrád County"
+msgstr ""
+
+#: languages/states.php:2059
+msgid "Pest County"
+msgstr ""
+
+#: languages/states.php:2060
+msgid "Pécs"
+msgstr ""
+
+#: languages/states.php:2061
+msgid "Salgótarján"
+msgstr ""
+
+#: languages/states.php:2062
+msgid "Somogy County"
+msgstr ""
+
+#: languages/states.php:2063
+msgid "Sopron"
+msgstr ""
+
+#: languages/states.php:2064
+msgid "Szabolcs-Szatmár-Bereg County"
+msgstr ""
+
+#: languages/states.php:2065
+msgid "Szeged"
+msgstr ""
+
+#: languages/states.php:2066
+msgid "Szekszárd"
+msgstr ""
+
+#: languages/states.php:2067
+msgid "Szolnok"
+msgstr ""
+
+#: languages/states.php:2068
+msgid "Szombathely"
+msgstr ""
+
+#: languages/states.php:2069
+msgid "Székesfehérvár"
+msgstr ""
+
+#: languages/states.php:2070
+msgid "Tatabánya"
+msgstr ""
+
+#: languages/states.php:2071
+msgid "Tolna County"
+msgstr ""
+
+#: languages/states.php:2072
+msgid "Vas County"
+msgstr ""
+
+#: languages/states.php:2073
+msgid "Veszprém"
+msgstr ""
+
+#: languages/states.php:2074
+msgid "Veszprém County"
+msgstr ""
+
+#: languages/states.php:2075
+msgid "Zala County"
+msgstr ""
+
+#: languages/states.php:2076
+msgid "Zalaegerszeg"
+msgstr ""
+
+#: languages/states.php:2077
+msgid "Érd"
+msgstr ""
+
+#: languages/states.php:2080
+msgid "Aceh"
+msgstr ""
+
+#: languages/states.php:2081
+msgid "Bali"
+msgstr ""
+
+#: languages/states.php:2082
+msgid "Bangka Belitung Islands"
+msgstr ""
+
+#: languages/states.php:2083
+msgid "Banten"
+msgstr ""
+
+#: languages/states.php:2084
+msgid "Bengkulu"
+msgstr ""
+
+#: languages/states.php:2085
+msgid "Central Java"
+msgstr ""
+
+#: languages/states.php:2086
+msgid "Central Kalimantan"
+msgstr ""
+
+#: languages/states.php:2087
+msgid "Central Sulawesi"
+msgstr ""
+
+#: languages/states.php:2088
+msgid "East Java"
+msgstr ""
+
+#: languages/states.php:2089
+msgid "East Kalimantan"
+msgstr ""
+
+#: languages/states.php:2090
+msgid "East Nusa Tenggara"
+msgstr ""
+
+#: languages/states.php:2091
+msgid "Gorontalo"
+msgstr ""
+
+#: languages/states.php:2092
+msgid "Jakarta"
+msgstr ""
+
+#: languages/states.php:2093
+msgid "Jambi"
+msgstr ""
+
+#: languages/states.php:2094
+msgid "Kalimantan"
+msgstr ""
+
+#: languages/states.php:2095
+msgid "Lampung"
+msgstr ""
+
+#: languages/states.php:2096
+msgid "Lesser Sunda Islands"
+msgstr ""
+
+#: languages/states.php:2097
+msgid "Maluku"
+msgstr ""
+
+#: languages/states.php:2098
+msgid "Maluku Islands"
+msgstr ""
+
+#: languages/states.php:2099
+msgid "North Kalimantan"
+msgstr ""
+
+#: languages/states.php:2100
+msgid "North Maluku"
+msgstr ""
+
+#: languages/states.php:2101
+msgid "North Sulawesi"
+msgstr ""
+
+#: languages/states.php:2102
+msgid "North Sumatra"
+msgstr ""
+
+#: languages/states.php:2103
+msgid "Papua"
+msgstr ""
+
+#: languages/states.php:2104
+msgid "Riau"
+msgstr ""
+
+#: languages/states.php:2105
+msgid "Riau Islands"
+msgstr ""
+
+#: languages/states.php:2106
+msgid "South Kalimantan"
+msgstr ""
+
+#: languages/states.php:2107
+msgid "South Sulawesi"
+msgstr ""
+
+#: languages/states.php:2108
+msgid "South Sumatra"
+msgstr ""
+
+#: languages/states.php:2109
+msgid "Southeast Sulawesi"
+msgstr ""
+
+#: languages/states.php:2110
+msgid "Special Region of Yogyakarta"
+msgstr ""
+
+#: languages/states.php:2111
+msgid "Sulawesi"
+msgstr ""
+
+#: languages/states.php:2112
+msgid "Sumatra"
+msgstr ""
+
+#: languages/states.php:2113
+msgid "West Java"
+msgstr ""
+
+#: languages/states.php:2114
+msgid "West Nusa Tenggara"
+msgstr ""
+
+#: languages/states.php:2115
+msgid "West Papua"
+msgstr ""
+
+#: languages/states.php:2116
+msgid "West Sulawesi"
+msgstr ""
+
+#: languages/states.php:2117
+msgid "West Sumatra"
+msgstr ""
+
+#: languages/states.php:2120
+msgid "Connacht"
+msgstr ""
+
+#: languages/states.php:2121
+msgid "County Carlow"
+msgstr ""
+
+#: languages/states.php:2122
+msgid "County Cavan"
+msgstr ""
+
+#: languages/states.php:2123
+msgid "County Clare"
+msgstr ""
+
+#: languages/states.php:2124
+msgid "County Cork"
+msgstr ""
+
+#: languages/states.php:2125
+msgid "County Donegal"
+msgstr ""
+
+#: languages/states.php:2126
+msgid "County Dublin"
+msgstr ""
+
+#: languages/states.php:2127
+msgid "County Galway"
+msgstr ""
+
+#: languages/states.php:2128
+msgid "County Kerry"
+msgstr ""
+
+#: languages/states.php:2129
+msgid "County Kildare"
+msgstr ""
+
+#: languages/states.php:2130
+msgid "County Kilkenny"
+msgstr ""
+
+#: languages/states.php:2131
+msgid "County Laois"
+msgstr ""
+
+#: languages/states.php:2132
+msgid "County Limerick"
+msgstr ""
+
+#: languages/states.php:2133
+msgid "County Longford"
+msgstr ""
+
+#: languages/states.php:2134
+msgid "County Louth"
+msgstr ""
+
+#: languages/states.php:2135
+msgid "County Mayo"
+msgstr ""
+
+#: languages/states.php:2136
+msgid "County Meath"
+msgstr ""
+
+#: languages/states.php:2137
+msgid "County Monaghan"
+msgstr ""
+
+#: languages/states.php:2138
+msgid "County Offaly"
+msgstr ""
+
+#: languages/states.php:2139
+msgid "County Roscommon"
+msgstr ""
+
+#: languages/states.php:2140
+msgid "County Sligo"
+msgstr ""
+
+#: languages/states.php:2141
+msgid "County Tipperary"
+msgstr ""
+
+#: languages/states.php:2142
+msgid "County Waterford"
+msgstr ""
+
+#: languages/states.php:2143
+msgid "County Westmeath"
+msgstr ""
+
+#: languages/states.php:2144
+msgid "County Wexford"
+msgstr ""
+
+#: languages/states.php:2145
+msgid "County Wicklow"
+msgstr ""
+
+#: languages/states.php:2146
+msgid "Leinster"
+msgstr ""
+
+#: languages/states.php:2147
+msgid "Munster"
+msgstr ""
+
+#: languages/states.php:2148
+msgid "Ulster"
+msgstr ""
+
+#: languages/states.php:2152
+msgid "Haifa District"
+msgstr ""
+
+#: languages/states.php:2153
+msgid "Jerusalem District"
+msgstr ""
+
+#: languages/states.php:2154
+msgid "Northern District"
+msgstr ""
+
+#: languages/states.php:2156
+msgid "Tel Aviv District"
+msgstr ""
+
+#: languages/states.php:2160
+msgid "Andaman and Nicobar Islands"
+msgstr ""
+
+#: languages/states.php:2161
+msgid "Andhra Pradesh"
+msgstr ""
+
+#: languages/states.php:2162
+msgid "Arunachal Pradesh"
+msgstr ""
+
+#: languages/states.php:2163
+msgid "Assam"
+msgstr ""
+
+#: languages/states.php:2164
+msgid "Bihar"
+msgstr ""
+
+#: languages/states.php:2165
+msgid "Chandigarh"
+msgstr ""
+
+#: languages/states.php:2166
+msgid "Chhattisgarh"
+msgstr ""
+
+#: languages/states.php:2167
+msgid "Dadra and Nagar Haveli and Daman and Diu"
+msgstr ""
+
+#: languages/states.php:2168
+msgid "Delhi"
+msgstr ""
+
+#: languages/states.php:2169
+msgid "Goa"
+msgstr ""
+
+#: languages/states.php:2170
+msgid "Gujarat"
+msgstr ""
+
+#: languages/states.php:2171
+msgid "Haryana"
+msgstr ""
+
+#: languages/states.php:2172
+msgid "Himachal Pradesh"
+msgstr ""
+
+#: languages/states.php:2173
+msgid "Jammu and Kashmir"
+msgstr ""
+
+#: languages/states.php:2174
+msgid "Jharkhand"
+msgstr ""
+
+#: languages/states.php:2175
+msgid "Karnataka"
+msgstr ""
+
+#: languages/states.php:2176
+msgid "Kerala"
+msgstr ""
+
+#: languages/states.php:2177
+msgid "Ladakh"
+msgstr ""
+
+#: languages/states.php:2178
+msgid "Lakshadweep"
+msgstr ""
+
+#: languages/states.php:2179
+msgid "Madhya Pradesh"
+msgstr ""
+
+#: languages/states.php:2180
+msgid "Maharashtra"
+msgstr ""
+
+#: languages/states.php:2181
+msgid "Manipur"
+msgstr ""
+
+#: languages/states.php:2182
+msgid "Meghalaya"
+msgstr ""
+
+#: languages/states.php:2183
+msgid "Mizoram"
+msgstr ""
+
+#: languages/states.php:2184
+msgid "Nagaland"
+msgstr ""
+
+#: languages/states.php:2185
+msgid "Odisha"
+msgstr ""
+
+#: languages/states.php:2186
+msgid "Puducherry"
+msgstr ""
+
+#: languages/states.php:2187
+#: languages/states.php:3876
+msgid "Punjab"
+msgstr ""
+
+#: languages/states.php:2188
+msgid "Rajasthan"
+msgstr ""
+
+#: languages/states.php:2189
+msgid "Sikkim"
+msgstr ""
+
+#: languages/states.php:2190
+msgid "Tamil Nadu"
+msgstr ""
+
+#: languages/states.php:2191
+msgid "Telangana"
+msgstr ""
+
+#: languages/states.php:2192
+msgid "Tripura"
+msgstr ""
+
+#: languages/states.php:2193
+msgid "Uttar Pradesh"
+msgstr ""
+
+#: languages/states.php:2194
+msgid "Uttarakhand"
+msgstr ""
+
+#: languages/states.php:2195
+msgid "West Bengal"
+msgstr ""
+
+#: languages/states.php:2199
+msgid "Al Anbar Governorate"
+msgstr ""
+
+#: languages/states.php:2200
+msgid "Al Muthanna Governorate"
+msgstr ""
+
+#: languages/states.php:2201
+msgid "Al-Qādisiyyah Governorate"
+msgstr ""
+
+#: languages/states.php:2202
+msgid "Babylon Governorate"
+msgstr ""
+
+#: languages/states.php:2203
+msgid "Baghdad Governorate"
+msgstr ""
+
+#: languages/states.php:2204
+msgid "Basra Governorate"
+msgstr ""
+
+#: languages/states.php:2205
+msgid "Dhi Qar Governorate"
+msgstr ""
+
+#: languages/states.php:2206
+msgid "Diyala Governorate"
+msgstr ""
+
+#: languages/states.php:2207
+msgid "Dohuk Governorate"
+msgstr ""
+
+#: languages/states.php:2208
+msgid "Erbil Governorate"
+msgstr ""
+
+#: languages/states.php:2209
+msgid "Karbala Governorate"
+msgstr ""
+
+#: languages/states.php:2210
+msgid "Kirkuk Governorate"
+msgstr ""
+
+#: languages/states.php:2211
+msgid "Maysan Governorate"
+msgstr ""
+
+#: languages/states.php:2212
+msgid "Najaf Governorate"
+msgstr ""
+
+#: languages/states.php:2213
+msgid "Nineveh Governorate"
+msgstr ""
+
+#: languages/states.php:2214
+msgid "Saladin Governorate"
+msgstr ""
+
+#: languages/states.php:2215
+msgid "Sulaymaniyah Governorate"
+msgstr ""
+
+#: languages/states.php:2216
+msgid "Wasit Governorate"
+msgstr ""
+
+#: languages/states.php:2219
+msgid "Isfahan Province"
+msgstr ""
+
+#: languages/states.php:2220
+msgid "Sistan and Baluchestan"
+msgstr ""
+
+#: languages/states.php:2221
+msgid "Kurdistan Province"
+msgstr ""
+
+#: languages/states.php:2222
+msgid "Hamadan Province"
+msgstr ""
+
+#: languages/states.php:2223
+msgid "Chaharmahal and Bakhtiari Province"
+msgstr ""
+
+#: languages/states.php:2224
+msgid "Lorestan Province"
+msgstr ""
+
+#: languages/states.php:2225
+msgid "Ilam Province"
+msgstr ""
+
+#: languages/states.php:2226
+msgid "Kohgiluyeh and Boyer-Ahmad Province"
+msgstr ""
+
+#: languages/states.php:2227
+msgid "Bushehr Province"
+msgstr ""
+
+#: languages/states.php:2228
+msgid "Zanjan Province"
+msgstr ""
+
+#: languages/states.php:2229
+msgid "Semnan Province"
+msgstr ""
+
+#: languages/states.php:2230
+msgid "Yazd Province"
+msgstr ""
+
+#: languages/states.php:2231
+msgid "Hormozgan Province"
+msgstr ""
+
+#: languages/states.php:2232
+msgid "Tehran Province"
+msgstr ""
+
+#: languages/states.php:2233
+msgid "Ardabil Province"
+msgstr ""
+
+#: languages/states.php:2234
+msgid "Qom Province"
+msgstr ""
+
+#: languages/states.php:2235
+msgid "Qazvin Province"
+msgstr ""
+
+#: languages/states.php:2236
+msgid "Golestan Province"
+msgstr ""
+
+#: languages/states.php:2237
+msgid "North Khorasan Province"
+msgstr ""
+
+#: languages/states.php:2238
+msgid "South Khorasan Province"
+msgstr ""
+
+#: languages/states.php:2239
+msgid "Alborz Province"
+msgstr ""
+
+#: languages/states.php:2240
+msgid "East Azerbaijan Province"
+msgstr ""
+
+#: languages/states.php:2241
+msgid "Fars Province"
+msgstr ""
+
+#: languages/states.php:2242
+msgid "Gilan Province"
+msgstr ""
+
+#: languages/states.php:2243
+msgid "Kerman Province"
+msgstr ""
+
+#: languages/states.php:2244
+msgid "Kermanshah Province"
+msgstr ""
+
+#: languages/states.php:2245
+msgid "Khuzestan Province"
+msgstr ""
+
+#: languages/states.php:2246
+msgid "Markazi Province"
+msgstr ""
+
+#: languages/states.php:2247
+msgid "Mazandaran Province"
+msgstr ""
+
+#: languages/states.php:2248
+msgid "Razavi Khorasan Province"
+msgstr ""
+
+#: languages/states.php:2249
+msgid "West Azarbaijan Province"
+msgstr ""
+
+#: languages/states.php:2252
+msgid "Capital Region"
+msgstr ""
+
+#: languages/states.php:2253
+msgid "Southern Peninsula Region"
+msgstr ""
+
+#: languages/states.php:2255
+msgid "Westfjords"
+msgstr ""
+
+#: languages/states.php:2256
+msgid "Northwestern Region"
+msgstr ""
+
+#: languages/states.php:2257
+msgid "Northeastern Region"
+msgstr ""
+
+#: languages/states.php:2259
+#: languages/states.php:3441
+msgid "Southern Region"
+msgstr ""
+
+#: languages/states.php:2262
+msgid "Agrigento"
+msgstr ""
+
+#: languages/states.php:2263
+msgid "Alessandria"
+msgstr ""
+
+#: languages/states.php:2264
+msgid "Ancona"
+msgstr ""
+
+#: languages/states.php:2266
+msgid "Aosta"
+msgstr ""
+
+#: languages/states.php:2267
+msgid "Ascoli Piceno"
+msgstr ""
+
+#: languages/states.php:2269
+msgid "Arezzo"
+msgstr ""
+
+#: languages/states.php:2270
+msgid "Asti"
+msgstr ""
+
+#: languages/states.php:2271
+msgid "Avellino"
+msgstr ""
+
+#: languages/states.php:2272
+#: languages/states.php:4500
+msgid "Bari"
+msgstr ""
+
+#: languages/states.php:2273
+msgid "Barletta-Andria-Trani"
+msgstr ""
+
+#: languages/states.php:2274
+msgid "Belluno"
+msgstr ""
+
+#: languages/states.php:2276
+msgid "Benevento"
+msgstr ""
+
+#: languages/states.php:2277
+msgid "Bergamo"
+msgstr ""
+
+#: languages/states.php:2278
+msgid "Biella"
+msgstr ""
+
+#: languages/states.php:2279
+msgid "Bologna"
+msgstr ""
+
+#: languages/states.php:2280
+msgid "Brescia"
+msgstr ""
+
+#: languages/states.php:2281
+msgid "Brindisi"
+msgstr ""
+
+#: languages/states.php:2282
+msgid "Cagliari"
+msgstr ""
+
+#: languages/states.php:2283
+msgid "Caltanissetta"
+msgstr ""
+
+#: languages/states.php:2284
+msgid "Campobasso"
+msgstr ""
+
+#: languages/states.php:2286
+msgid "Sulcis Iglesiente"
+msgstr ""
+
+#: languages/states.php:2287
+msgid "Caserta"
+msgstr ""
+
+#: languages/states.php:2288
+msgid "Catania"
+msgstr ""
+
+#: languages/states.php:2289
+msgid "Catanzaro"
+msgstr ""
+
+#: languages/states.php:2290
+msgid "Chieti"
+msgstr ""
+
+#: languages/states.php:2291
+msgid "Como"
+msgstr ""
+
+#: languages/states.php:2292
+msgid "Cosenza"
+msgstr ""
+
+#: languages/states.php:2293
+msgid "Cremona"
+msgstr ""
+
+#: languages/states.php:2294
+msgid "Crotone"
+msgstr ""
+
+#: languages/states.php:2295
+msgid "Cuneo"
+msgstr ""
+
+#: languages/states.php:2296
+msgid "Enna"
+msgstr ""
+
+#: languages/states.php:2297
+msgid "Fermo"
+msgstr ""
+
+#: languages/states.php:2298
+msgid "Ferrara"
+msgstr ""
+
+#: languages/states.php:2299
+msgid "Florence"
+msgstr ""
+
+#: languages/states.php:2300
+msgid "Foggia"
+msgstr ""
+
+#: languages/states.php:2301
+msgid "Forlì-Cesena"
+msgstr ""
+
+#: languages/states.php:2302
+msgid "Frosinone"
+msgstr ""
+
+#: languages/states.php:2303
+msgid "Genoa"
+msgstr ""
+
+#: languages/states.php:2304
+msgid "Gorizia"
+msgstr ""
+
+#: languages/states.php:2305
+msgid "Grosseto"
+msgstr ""
+
+#: languages/states.php:2306
+msgid "Imperia"
+msgstr ""
+
+#: languages/states.php:2307
+msgid "Isernia"
+msgstr ""
+
+#: languages/states.php:2308
+msgid "L'Aquila"
+msgstr ""
+
+#: languages/states.php:2309
+msgid "La Spezia"
+msgstr ""
+
+#: languages/states.php:2310
+msgid "Latina"
+msgstr ""
+
+#: languages/states.php:2311
+msgid "Lecce"
+msgstr ""
+
+#: languages/states.php:2312
+msgid "Lecco"
+msgstr ""
+
+#: languages/states.php:2313
+msgid "Livorno"
+msgstr ""
+
+#: languages/states.php:2314
+msgid "Lodi"
+msgstr ""
+
+#: languages/states.php:2315
+msgid "Lucca"
+msgstr ""
+
+#: languages/states.php:2316
+msgid "Macerata"
+msgstr ""
+
+#: languages/states.php:2317
+msgid "Mantua"
+msgstr ""
+
+#: languages/states.php:2319
+msgid "Massa-Carrara"
+msgstr ""
+
+#: languages/states.php:2320
+msgid "Matera"
+msgstr ""
+
+#: languages/states.php:2321
+msgid "Medio Campidano"
+msgstr ""
+
+#: languages/states.php:2322
+msgid "Messina"
+msgstr ""
+
+#: languages/states.php:2323
+msgid "Milan"
+msgstr ""
+
+#: languages/states.php:2324
+msgid "Modena"
+msgstr ""
+
+#: languages/states.php:2325
+msgid "Monza and Brianza"
+msgstr ""
+
+#: languages/states.php:2326
+msgid "Naples"
+msgstr ""
+
+#: languages/states.php:2327
+msgid "Novara"
+msgstr ""
+
+#: languages/states.php:2328
+msgid "Nuoro"
+msgstr ""
+
+#: languages/states.php:2329
+msgid "Ogliastra"
+msgstr ""
+
+#: languages/states.php:2331
+msgid "North-East Sardinia"
+msgstr ""
+
+#: languages/states.php:2332
+msgid "Oristano"
+msgstr ""
+
+#: languages/states.php:2333
+msgid "Padua"
+msgstr ""
+
+#: languages/states.php:2334
+msgid "Palermo"
+msgstr ""
+
+#: languages/states.php:2335
+msgid "Parma"
+msgstr ""
+
+#: languages/states.php:2336
+msgid "Pavia"
+msgstr ""
+
+#: languages/states.php:2337
+msgid "Perugia"
+msgstr ""
+
+#: languages/states.php:2339
+msgid "Pesaro and Urbino"
+msgstr ""
+
+#: languages/states.php:2340
+msgid "Pescara"
+msgstr ""
+
+#: languages/states.php:2341
+msgid "Piacenza"
+msgstr ""
+
+#: languages/states.php:2342
+msgid "Pisa"
+msgstr ""
+
+#: languages/states.php:2343
+msgid "Pistoia"
+msgstr ""
+
+#: languages/states.php:2344
+msgid "Pordenone"
+msgstr ""
+
+#: languages/states.php:2345
+msgid "Potenza"
+msgstr ""
+
+#: languages/states.php:2346
+msgid "Prato"
+msgstr ""
+
+#: languages/states.php:2347
+msgid "Ragusa"
+msgstr ""
+
+#: languages/states.php:2348
+msgid "Ravenna"
+msgstr ""
+
+#: languages/states.php:2349
+msgid "Reggio Calabria"
+msgstr ""
+
+#: languages/states.php:2350
+msgid "Reggio Emilia"
+msgstr ""
+
+#: languages/states.php:2351
+msgid "Rieti"
+msgstr ""
+
+#: languages/states.php:2352
+msgid "Rimini"
+msgstr ""
+
+#: languages/states.php:2353
+msgid "Rome"
+msgstr ""
+
+#: languages/states.php:2354
+msgid "Rovigo"
+msgstr ""
+
+#: languages/states.php:2355
+msgid "Salerno"
+msgstr ""
+
+#: languages/states.php:2356
+msgid "Sassari"
+msgstr ""
+
+#: languages/states.php:2357
+msgid "Savona"
+msgstr ""
+
+#: languages/states.php:2358
+msgid "Siena"
+msgstr ""
+
+#: languages/states.php:2359
+msgid "Siracusa"
+msgstr ""
+
+#: languages/states.php:2360
+msgid "Sondrio"
+msgstr ""
+
+#: languages/states.php:2362
+msgid "Bolzano"
+msgstr ""
+
+#: languages/states.php:2363
+msgid "Taranto"
+msgstr ""
+
+#: languages/states.php:2364
+msgid "Teramo"
+msgstr ""
+
+#: languages/states.php:2365
+msgid "Terni"
+msgstr ""
+
+#: languages/states.php:2366
+msgid "Trapani"
+msgstr ""
+
+#: languages/states.php:2368
+msgid "Trento"
+msgstr ""
+
+#: languages/states.php:2369
+msgid "Treviso"
+msgstr ""
+
+#: languages/states.php:2370
+msgid "Trieste"
+msgstr ""
+
+#: languages/states.php:2371
+msgid "Turin"
+msgstr ""
+
+#: languages/states.php:2372
+msgid "Udine"
+msgstr ""
+
+#: languages/states.php:2373
+msgid "Varese"
+msgstr ""
+
+#: languages/states.php:2374
+msgid "Venice"
+msgstr ""
+
+#: languages/states.php:2375
+msgid "Verbano-Cusio-Ossola"
+msgstr ""
+
+#: languages/states.php:2376
+msgid "Vercelli"
+msgstr ""
+
+#: languages/states.php:2377
+msgid "Verona"
+msgstr ""
+
+#: languages/states.php:2378
+msgid "Vibo Valentia"
+msgstr ""
+
+#: languages/states.php:2379
+msgid "Vicenza"
+msgstr ""
+
+#: languages/states.php:2380
+msgid "Viterbo"
+msgstr ""
+
+#: languages/states.php:2384
+msgid "Westmoreland Parish"
+msgstr ""
+
+#: languages/states.php:2385
+msgid "Saint Elizabeth Parish"
+msgstr ""
+
+#: languages/states.php:2386
+msgid "Manchester Parish"
+msgstr ""
+
+#: languages/states.php:2387
+msgid "Clarendon Parish"
+msgstr ""
+
+#: languages/states.php:2388
+msgid "Saint Catherine Parish"
+msgstr ""
+
+#: languages/states.php:2389
+msgid "Hanover Parish"
+msgstr ""
+
+#: languages/states.php:2390
+msgid "Kingston Parish"
+msgstr ""
+
+#: languages/states.php:2391
+msgid "Portland Parish"
+msgstr ""
+
+#: languages/states.php:2393
+msgid "Saint Ann Parish"
+msgstr ""
+
+#: languages/states.php:2394
+msgid "Saint James Parish"
+msgstr ""
+
+#: languages/states.php:2396
+msgid "Saint Thomas Parish"
+msgstr ""
+
+#: languages/states.php:2397
+msgid "Trelawny Parish"
+msgstr ""
+
+#: languages/states.php:2400
+msgid "Ajloun Governorate"
+msgstr ""
+
+#: languages/states.php:2401
+msgid "Amman Governorate"
+msgstr ""
+
+#: languages/states.php:2402
+msgid "Aqaba Governorate"
+msgstr ""
+
+#: languages/states.php:2403
+msgid "Balqa Governorate"
+msgstr ""
+
+#: languages/states.php:2404
+msgid "Irbid Governorate"
+msgstr ""
+
+#: languages/states.php:2405
+msgid "Jerash Governorate"
+msgstr ""
+
+#: languages/states.php:2406
+msgid "Karak Governorate"
+msgstr ""
+
+#: languages/states.php:2407
+msgid "Ma'an Governorate"
+msgstr ""
+
+#: languages/states.php:2408
+msgid "Madaba Governorate"
+msgstr ""
+
+#: languages/states.php:2409
+msgid "Mafraq Governorate"
+msgstr ""
+
+#: languages/states.php:2410
+msgid "Tafilah Governorate"
+msgstr ""
+
+#: languages/states.php:2411
+msgid "Zarqa Governorate"
+msgstr ""
+
+#: languages/states.php:2414
+msgid "Gunma Prefecture"
+msgstr ""
+
+#: languages/states.php:2415
+msgid "Saitama Prefecture"
+msgstr ""
+
+#: languages/states.php:2416
+msgid "Chiba Prefecture"
+msgstr ""
+
+#: languages/states.php:2417
+msgid "Tokyo"
+msgstr ""
+
+#: languages/states.php:2418
+msgid "Kanagawa Prefecture"
+msgstr ""
+
+#: languages/states.php:2419
+msgid "Niigata Prefecture"
+msgstr ""
+
+#: languages/states.php:2420
+msgid "Toyama Prefecture"
+msgstr ""
+
+#: languages/states.php:2421
+msgid "Ishikawa Prefecture"
+msgstr ""
+
+#: languages/states.php:2422
+msgid "Fukui Prefecture"
+msgstr ""
+
+#: languages/states.php:2423
+msgid "Yamanashi Prefecture"
+msgstr ""
+
+#: languages/states.php:2424
+msgid "Nagano Prefecture"
+msgstr ""
+
+#: languages/states.php:2425
+msgid "Gifu Prefecture"
+msgstr ""
+
+#: languages/states.php:2426
+msgid "Shizuoka Prefecture"
+msgstr ""
+
+#: languages/states.php:2427
+msgid "Aichi Prefecture"
+msgstr ""
+
+#: languages/states.php:2428
+msgid "Mie Prefecture"
+msgstr ""
+
+#: languages/states.php:2429
+msgid "Shiga Prefecture"
+msgstr ""
+
+#: languages/states.php:2430
+msgid "Kyōto Prefecture"
+msgstr ""
+
+#: languages/states.php:2431
+msgid "Ōsaka Prefecture"
+msgstr ""
+
+#: languages/states.php:2432
+msgid "Hyōgo Prefecture"
+msgstr ""
+
+#: languages/states.php:2433
+msgid "Nara Prefecture"
+msgstr ""
+
+#: languages/states.php:2434
+msgid "Wakayama Prefecture"
+msgstr ""
+
+#: languages/states.php:2435
+msgid "Tottori Prefecture"
+msgstr ""
+
+#: languages/states.php:2436
+msgid "Shimane Prefecture"
+msgstr ""
+
+#: languages/states.php:2437
+msgid "Okayama Prefecture"
+msgstr ""
+
+#: languages/states.php:2438
+msgid "Hiroshima Prefecture"
+msgstr ""
+
+#: languages/states.php:2439
+msgid "Yamaguchi Prefecture"
+msgstr ""
+
+#: languages/states.php:2440
+msgid "Tokushima Prefecture"
+msgstr ""
+
+#: languages/states.php:2441
+msgid "Kagawa Prefecture"
+msgstr ""
+
+#: languages/states.php:2442
+msgid "Ehime Prefecture"
+msgstr ""
+
+#: languages/states.php:2443
+msgid "Fukuoka Prefecture"
+msgstr ""
+
+#: languages/states.php:2444
+msgid "Saga Prefecture"
+msgstr ""
+
+#: languages/states.php:2445
+msgid "Nagasaki Prefecture"
+msgstr ""
+
+#: languages/states.php:2446
+msgid "Kumamoto Prefecture"
+msgstr ""
+
+#: languages/states.php:2447
+msgid "Ōita Prefecture"
+msgstr ""
+
+#: languages/states.php:2448
+msgid "Miyazaki Prefecture"
+msgstr ""
+
+#: languages/states.php:2449
+msgid "Kagoshima Prefecture"
+msgstr ""
+
+#: languages/states.php:2450
+msgid "Okinawa Prefecture"
+msgstr ""
+
+#: languages/states.php:2451
+msgid "Akita Prefecture"
+msgstr ""
+
+#: languages/states.php:2452
+msgid "Aomori Prefecture"
+msgstr ""
+
+#: languages/states.php:2453
+msgid "Fukushima Prefecture"
+msgstr ""
+
+#: languages/states.php:2454
+msgid "Hokkaidō Prefecture"
+msgstr ""
+
+#: languages/states.php:2455
+msgid "Ibaraki Prefecture"
+msgstr ""
+
+#: languages/states.php:2456
+msgid "Iwate Prefecture"
+msgstr ""
+
+#: languages/states.php:2457
+msgid "Miyagi Prefecture"
+msgstr ""
+
+#: languages/states.php:2458
+msgid "Tochigi Prefecture"
+msgstr ""
+
+#: languages/states.php:2459
+msgid "Yamagata Prefecture"
+msgstr ""
+
+#: languages/states.php:2462
+msgid "Kajiado County"
+msgstr ""
+
+#: languages/states.php:2463
+msgid "Kakamega County"
+msgstr ""
+
+#: languages/states.php:2464
+msgid "Kericho County"
+msgstr ""
+
+#: languages/states.php:2465
+msgid "Kiambu County"
+msgstr ""
+
+#: languages/states.php:2466
+msgid "Kilifi County"
+msgstr ""
+
+#: languages/states.php:2467
+msgid "Kirinyaga County"
+msgstr ""
+
+#: languages/states.php:2468
+msgid "Kisii County"
+msgstr ""
+
+#: languages/states.php:2469
+msgid "Kisumu County"
+msgstr ""
+
+#: languages/states.php:2470
+msgid "Kitui County"
+msgstr ""
+
+#: languages/states.php:2471
+msgid "Kwale County"
+msgstr ""
+
+#: languages/states.php:2472
+msgid "Laikipia County"
+msgstr ""
+
+#: languages/states.php:2473
+msgid "Lamu County"
+msgstr ""
+
+#: languages/states.php:2474
+msgid "Machakos County"
+msgstr ""
+
+#: languages/states.php:2475
+msgid "Makueni County"
+msgstr ""
+
+#: languages/states.php:2476
+msgid "Mandera County"
+msgstr ""
+
+#: languages/states.php:2477
+msgid "Marsabit County"
+msgstr ""
+
+#: languages/states.php:2478
+msgid "Meru County"
+msgstr ""
+
+#: languages/states.php:2479
+msgid "Migori County"
+msgstr ""
+
+#: languages/states.php:2480
+msgid "Mombasa County"
+msgstr ""
+
+#: languages/states.php:2481
+msgid "Muranga County"
+msgstr ""
+
+#: languages/states.php:2482
+msgid "Nakuru District"
+msgstr ""
+
+#: languages/states.php:2483
+msgid "Nandi District"
+msgstr ""
+
+#: languages/states.php:2484
+msgid "Narok County"
+msgstr ""
+
+#: languages/states.php:2485
+msgid "Nyamira District"
+msgstr ""
+
+#: languages/states.php:2486
+msgid "Nyandarua County"
+msgstr ""
+
+#: languages/states.php:2487
+msgid "Nyeri County"
+msgstr ""
+
+#: languages/states.php:2488
+msgid "Samburu County"
+msgstr ""
+
+#: languages/states.php:2489
+msgid "Siaya County"
+msgstr ""
+
+#: languages/states.php:2490
+msgid "Taita–Taveta County"
+msgstr ""
+
+#: languages/states.php:2491
+msgid "Tana River County"
+msgstr ""
+
+#: languages/states.php:2492
+msgid "Tharaka Nithi County"
+msgstr ""
+
+#: languages/states.php:2493
+msgid "Trans-Nzoia District"
+msgstr ""
+
+#: languages/states.php:2494
+msgid "Turkana County"
+msgstr ""
+
+#: languages/states.php:2495
+msgid "Uasin Gishu District"
+msgstr ""
+
+#: languages/states.php:2496
+msgid "Vihiga District"
+msgstr ""
+
+#: languages/states.php:2497
+msgid "Wajir County"
+msgstr ""
+
+#: languages/states.php:2498
+msgid "West Pokot County"
+msgstr ""
+
+#: languages/states.php:2499
+msgid "Nairobi"
+msgstr ""
+
+#: languages/states.php:2500
+#: languages/states.php:2700
+#: languages/states.php:3400
+#: languages/states.php:3749
+#: languages/states.php:4152
+#: languages/states.php:5350
+msgid "Central Province"
+msgstr ""
+
+#: languages/states.php:2501
+msgid "Coast Province"
+msgstr ""
+
+#: languages/states.php:2502
+#: languages/states.php:2703
+#: languages/states.php:4130
+#: languages/states.php:4143
+#: languages/states.php:4464
+#: languages/states.php:5352
+msgid "Eastern Province"
+msgstr ""
+
+#: languages/states.php:2503
+msgid "North Eastern Province"
+msgstr ""
+
+#: languages/states.php:2504
+msgid "Nyanza Province"
+msgstr ""
+
+#: languages/states.php:2505
+msgid "Rift Valley Province"
+msgstr ""
+
+#: languages/states.php:2506
+#: languages/states.php:2699
+#: languages/states.php:3768
+#: languages/states.php:4134
+#: languages/states.php:4161
+#: languages/states.php:5358
+msgid "Western Province"
+msgstr ""
+
+#: languages/states.php:2507
+msgid "Baringo County"
+msgstr ""
+
+#: languages/states.php:2508
+msgid "Bomet County"
+msgstr ""
+
+#: languages/states.php:2509
+msgid "Bungoma County"
+msgstr ""
+
+#: languages/states.php:2510
+msgid "Busia County"
+msgstr ""
+
+#: languages/states.php:2511
+msgid "Elgeyo-Marakwet County"
+msgstr ""
+
+#: languages/states.php:2512
+msgid "Embu County"
+msgstr ""
+
+#: languages/states.php:2513
+msgid "Garissa County"
+msgstr ""
+
+#: languages/states.php:2514
+msgid "Homa Bay County"
+msgstr ""
+
+#: languages/states.php:2515
+msgid "Isiolo County"
+msgstr ""
+
+#: languages/states.php:2518
+msgid "Batken Region"
+msgstr ""
+
+#: languages/states.php:2519
+msgid "Bishkek"
+msgstr ""
+
+#: languages/states.php:2520
+msgid "Chuy Region"
+msgstr ""
+
+#: languages/states.php:2521
+msgid "Issyk-Kul Region"
+msgstr ""
+
+#: languages/states.php:2522
+msgid "Jalal-Abad Region"
+msgstr ""
+
+#: languages/states.php:2523
+msgid "Naryn Region"
+msgstr ""
+
+#: languages/states.php:2524
+msgid "Osh"
+msgstr ""
+
+#: languages/states.php:2525
+msgid "Osh Region"
+msgstr ""
+
+#: languages/states.php:2526
+msgid "Talas Region"
+msgstr ""
+
+#: languages/states.php:2529
+msgid "Banteay Meanchey Province"
+msgstr ""
+
+#: languages/states.php:2530
+msgid "Battambang Province"
+msgstr ""
+
+#: languages/states.php:2531
+msgid "Kampong Cham Province"
+msgstr ""
+
+#: languages/states.php:2532
+msgid "Kampong Chhnang Province"
+msgstr ""
+
+#: languages/states.php:2533
+msgid "Kampong Speu Province"
+msgstr ""
+
+#: languages/states.php:2534
+msgid "Kampot Province"
+msgstr ""
+
+#: languages/states.php:2535
+msgid "Kandal Province"
+msgstr ""
+
+#: languages/states.php:2536
+msgid "Koh Kong Province"
+msgstr ""
+
+#: languages/states.php:2537
+msgid "Kratié Province"
+msgstr ""
+
+#: languages/states.php:2538
+msgid "Mondulkiri Province"
+msgstr ""
+
+#: languages/states.php:2539
+msgid "Phnom Penh"
+msgstr ""
+
+#: languages/states.php:2540
+msgid "Preah Vihear Province"
+msgstr ""
+
+#: languages/states.php:2541
+msgid "Prey Veng Province"
+msgstr ""
+
+#: languages/states.php:2542
+msgid "Pursat Province"
+msgstr ""
+
+#: languages/states.php:2543
+msgid "Ratanakiri Province"
+msgstr ""
+
+#: languages/states.php:2544
+msgid "Siem Reap Province"
+msgstr ""
+
+#: languages/states.php:2545
+msgid "Sihanoukville Province"
+msgstr ""
+
+#: languages/states.php:2546
+msgid "Stung Treng Province"
+msgstr ""
+
+#: languages/states.php:2547
+msgid "Svay Rieng Province"
+msgstr ""
+
+#: languages/states.php:2548
+msgid "Takéo Province"
+msgstr ""
+
+#: languages/states.php:2549
+msgid "Oddar Meanchey Province"
+msgstr ""
+
+#: languages/states.php:2550
+msgid "Kep Province"
+msgstr ""
+
+#: languages/states.php:2551
+msgid "Pailin Province"
+msgstr ""
+
+#: languages/states.php:2554
+msgid "Gilbert Islands"
+msgstr ""
+
+#: languages/states.php:2555
+msgid "Line Islands"
+msgstr ""
+
+#: languages/states.php:2556
+msgid "Phoenix Islands"
+msgstr ""
+
+#: languages/states.php:2559
+msgid "Anjouan"
+msgstr ""
+
+#: languages/states.php:2560
+msgid "Grande Comore"
+msgstr ""
+
+#: languages/states.php:2561
+msgid "Mohéli"
+msgstr ""
+
+#: languages/states.php:2564
+msgid "Saint Paul Charlestown Parish"
+msgstr ""
+
+#: languages/states.php:2565
+msgid "Saint Peter Basseterre Parish"
+msgstr ""
+
+#: languages/states.php:2566
+msgid "Saint Thomas Lowland Parish"
+msgstr ""
+
+#: languages/states.php:2567
+msgid "Saint Thomas Middle Island Parish"
+msgstr ""
+
+#: languages/states.php:2568
+msgid "Trinity Palmetto Point Parish"
+msgstr ""
+
+#: languages/states.php:2569
+msgid "Christ Church Nichola Town Parish"
+msgstr ""
+
+#: languages/states.php:2570
+msgid "Nevis"
+msgstr ""
+
+#: languages/states.php:2571
+msgid "Saint Anne Sandy Point Parish"
+msgstr ""
+
+#: languages/states.php:2572
+msgid "Saint George Gingerland Parish"
+msgstr ""
+
+#: languages/states.php:2573
+msgid "Saint James Windward Parish"
+msgstr ""
+
+#: languages/states.php:2574
+msgid "Saint John Capisterre Parish"
+msgstr ""
+
+#: languages/states.php:2575
+msgid "Saint John Figtree Parish"
+msgstr ""
+
+#: languages/states.php:2576
+msgid "Saint Kitts"
+msgstr ""
+
+#: languages/states.php:2577
+msgid "Saint Mary Cayon Parish"
+msgstr ""
+
+#: languages/states.php:2578
+msgid "Saint Paul Capisterre Parish"
+msgstr ""
+
+#: languages/states.php:2581
+msgid "Ryanggang Province"
+msgstr ""
+
+#: languages/states.php:2582
+msgid "Rason"
+msgstr ""
+
+#: languages/states.php:2583
+msgid "Chagang Province"
+msgstr ""
+
+#: languages/states.php:2584
+msgid "Kangwon Province"
+msgstr ""
+
+#: languages/states.php:2585
+msgid "North Hamgyong Province"
+msgstr ""
+
+#: languages/states.php:2586
+msgid "North Hwanghae Province"
+msgstr ""
+
+#: languages/states.php:2587
+msgid "North Pyongan Province"
+msgstr ""
+
+#: languages/states.php:2588
+msgid "Pyongyang"
+msgstr ""
+
+#: languages/states.php:2589
+msgid "South Hamgyong Province"
+msgstr ""
+
+#: languages/states.php:2590
+msgid "South Hwanghae Province"
+msgstr ""
+
+#: languages/states.php:2591
+msgid "South Pyongan Province"
+msgstr ""
+
+#: languages/states.php:2594
+msgid "Seoul"
+msgstr ""
+
+#: languages/states.php:2595
+msgid "Busan"
+msgstr ""
+
+#: languages/states.php:2596
+msgid "Daegu"
+msgstr ""
+
+#: languages/states.php:2597
+msgid "Incheon"
+msgstr ""
+
+#: languages/states.php:2598
+msgid "Gwangju"
+msgstr ""
+
+#: languages/states.php:2599
+msgid "Daejeon"
+msgstr ""
+
+#: languages/states.php:2600
+msgid "Ulsan"
+msgstr ""
+
+#: languages/states.php:2601
+msgid "Gyeonggi Province"
+msgstr ""
+
+#: languages/states.php:2602
+msgid "Gangwon Province"
+msgstr ""
+
+#: languages/states.php:2603
+msgid "North Chungcheong Province"
+msgstr ""
+
+#: languages/states.php:2604
+msgid "South Chungcheong Province"
+msgstr ""
+
+#: languages/states.php:2605
+msgid "North Jeolla Province"
+msgstr ""
+
+#: languages/states.php:2606
+msgid "South Jeolla Province"
+msgstr ""
+
+#: languages/states.php:2607
+msgid "North Gyeongsang Province"
+msgstr ""
+
+#: languages/states.php:2608
+msgid "South Gyeongsang Province"
+msgstr ""
+
+#: languages/states.php:2609
+msgid "Jeju"
+msgstr ""
+
+#: languages/states.php:2610
+msgid "Sejong City"
+msgstr ""
+
+#: languages/states.php:2613
+msgid "Al Ahmadi Governorate"
+msgstr ""
+
+#: languages/states.php:2614
+msgid "Al Farwaniyah Governorate"
+msgstr ""
+
+#: languages/states.php:2615
+msgid "Al Jahra Governorate"
+msgstr ""
+
+#: languages/states.php:2617
+msgid "Hawalli Governorate"
+msgstr ""
+
+#: languages/states.php:2618
+msgid "Mubarak Al-Kabeer Governorate"
+msgstr ""
+
+#: languages/states.php:2622
+msgid "Akmola Region"
+msgstr ""
+
+#: languages/states.php:2623
+msgid "Aktobe Region"
+msgstr ""
+
+#: languages/states.php:2624
+msgid "Almaty"
+msgstr ""
+
+#: languages/states.php:2625
+msgid "Almaty Region"
+msgstr ""
+
+#: languages/states.php:2626
+msgid "Atyrau Region"
+msgstr ""
+
+#: languages/states.php:2627
+msgid "Baikonur"
+msgstr ""
+
+#: languages/states.php:2628
+msgid "East Kazakhstan Region"
+msgstr ""
+
+#: languages/states.php:2629
+msgid "Jambyl Region"
+msgstr ""
+
+#: languages/states.php:2630
+msgid "Karaganda Region"
+msgstr ""
+
+#: languages/states.php:2631
+msgid "Kostanay Region"
+msgstr ""
+
+#: languages/states.php:2632
+msgid "Kyzylorda Region"
+msgstr ""
+
+#: languages/states.php:2633
+msgid "Mangystau Region"
+msgstr ""
+
+#: languages/states.php:2634
+msgid "North Kazakhstan Region"
+msgstr ""
+
+#: languages/states.php:2635
+msgid "Nur-Sultan"
+msgstr ""
+
+#: languages/states.php:2636
+msgid "Pavlodar Region"
+msgstr ""
+
+#: languages/states.php:2637
+msgid "Turkestan Region"
+msgstr ""
+
+#: languages/states.php:2638
+msgid "West Kazakhstan Province"
+msgstr ""
+
+#: languages/states.php:2641
+msgid "Attapeu Province"
+msgstr ""
+
+#: languages/states.php:2642
+msgid "Bokeo Province"
+msgstr ""
+
+#: languages/states.php:2643
+msgid "Bolikhamsai Province"
+msgstr ""
+
+#: languages/states.php:2644
+msgid "Champasak Province"
+msgstr ""
+
+#: languages/states.php:2645
+msgid "Houaphanh Province"
+msgstr ""
+
+#: languages/states.php:2646
+msgid "Khammouane Province"
+msgstr ""
+
+#: languages/states.php:2647
+msgid "Luang Namtha Province"
+msgstr ""
+
+#: languages/states.php:2648
+msgid "Luang Prabang Province"
+msgstr ""
+
+#: languages/states.php:2649
+msgid "Oudomxay Province"
+msgstr ""
+
+#: languages/states.php:2650
+msgid "Phongsaly Province"
+msgstr ""
+
+#: languages/states.php:2651
+msgid "Sainyabuli Province"
+msgstr ""
+
+#: languages/states.php:2652
+msgid "Salavan Province"
+msgstr ""
+
+#: languages/states.php:2653
+msgid "Savannakhet Province"
+msgstr ""
+
+#: languages/states.php:2654
+msgid "Sekong Province"
+msgstr ""
+
+#: languages/states.php:2655
+msgid "Vientiane Prefecture"
+msgstr ""
+
+#: languages/states.php:2656
+msgid "Vientiane Province"
+msgstr ""
+
+#: languages/states.php:2657
+msgid "Xaisomboun"
+msgstr ""
+
+#: languages/states.php:2658
+msgid "Xaisomboun Province"
+msgstr ""
+
+#: languages/states.php:2659
+msgid "Xiangkhouang Province"
+msgstr ""
+
+#: languages/states.php:2662
+msgid "Akkar Governorate"
+msgstr ""
+
+#: languages/states.php:2663
+msgid "Baalbek-Hermel Governorate"
+msgstr ""
+
+#: languages/states.php:2664
+msgid "Beirut Governorate"
+msgstr ""
+
+#: languages/states.php:2665
+msgid "Beqaa Governorate"
+msgstr ""
+
+#: languages/states.php:2666
+msgid "Mount Lebanon Governorate"
+msgstr ""
+
+#: languages/states.php:2667
+msgid "Nabatieh Governorate"
+msgstr ""
+
+#: languages/states.php:2668
+msgid "North Governorate"
+msgstr ""
+
+#: languages/states.php:2669
+msgid "South Governorate"
+msgstr ""
+
+#: languages/states.php:2672
+msgid "Soufrière Quarter"
+msgstr ""
+
+#: languages/states.php:2673
+msgid "Vieux Fort Quarter"
+msgstr ""
+
+#: languages/states.php:2674
+msgid "Canaries"
+msgstr ""
+
+#: languages/states.php:2675
+msgid "Anse la Raye Quarter"
+msgstr ""
+
+#: languages/states.php:2676
+msgid "Castries Quarter"
+msgstr ""
+
+#: languages/states.php:2677
+msgid "Choiseul Quarter"
+msgstr ""
+
+#: languages/states.php:2678
+msgid "Dauphin Quarter"
+msgstr ""
+
+#: languages/states.php:2679
+msgid "Dennery Quarter"
+msgstr ""
+
+#: languages/states.php:2680
+msgid "Gros Islet Quarter"
+msgstr ""
+
+#: languages/states.php:2681
+msgid "Laborie Quarter"
+msgstr ""
+
+#: languages/states.php:2682
+msgid "Micoud Quarter"
+msgstr ""
+
+#: languages/states.php:2683
+msgid "Praslin Quarter"
+msgstr ""
+
+#: languages/states.php:2686
+msgid "Triesenberg"
+msgstr ""
+
+#: languages/states.php:2687
+msgid "Vaduz"
+msgstr ""
+
+#: languages/states.php:2688
+msgid "Balzers"
+msgstr ""
+
+#: languages/states.php:2689
+msgid "Eschen"
+msgstr ""
+
+#: languages/states.php:2690
+msgid "Gamprin"
+msgstr ""
+
+#: languages/states.php:2691
+msgid "Mauren"
+msgstr ""
+
+#: languages/states.php:2692
+msgid "Planken"
+msgstr ""
+
+#: languages/states.php:2693
+msgid "Ruggell"
+msgstr ""
+
+#: languages/states.php:2694
+msgid "Schaan"
+msgstr ""
+
+#: languages/states.php:2695
+msgid "Schellenberg"
+msgstr ""
+
+#: languages/states.php:2696
+msgid "Triesen"
+msgstr ""
+
+#: languages/states.php:2701
+#: languages/states.php:4133
+#: languages/states.php:4466
+#: languages/states.php:5357
+msgid "Southern Province"
+msgstr ""
+
+#: languages/states.php:2702
+#: languages/states.php:4132
+#: languages/states.php:4465
+#: languages/states.php:5355
+msgid "Northern Province"
+msgstr ""
+
+#: languages/states.php:2704
+msgid "North Western Province"
+msgstr ""
+
+#: languages/states.php:2705
+#: languages/states.php:3405
+msgid "North Central Province"
+msgstr ""
+
+#: languages/states.php:2706
+msgid "Uva Province"
+msgstr ""
+
+#: languages/states.php:2707
+msgid "Sabaragamuwa Province"
+msgstr ""
+
+#: languages/states.php:2708
+msgid "Colombo District"
+msgstr ""
+
+#: languages/states.php:2709
+msgid "Gampaha District"
+msgstr ""
+
+#: languages/states.php:2710
+msgid "Kalutara District"
+msgstr ""
+
+#: languages/states.php:2711
+msgid "Kandy District"
+msgstr ""
+
+#: languages/states.php:2712
+msgid "Matale District"
+msgstr ""
+
+#: languages/states.php:2713
+msgid "Nuwara Eliya District"
+msgstr ""
+
+#: languages/states.php:2714
+msgid "Galle District"
+msgstr ""
+
+#: languages/states.php:2715
+msgid "Matara District"
+msgstr ""
+
+#: languages/states.php:2716
+msgid "Hambantota District"
+msgstr ""
+
+#: languages/states.php:2717
+msgid "Jaffna District"
+msgstr ""
+
+#: languages/states.php:2718
+msgid "Kilinochchi District"
+msgstr ""
+
+#: languages/states.php:2719
+msgid "Mannar District"
+msgstr ""
+
+#: languages/states.php:2720
+msgid "Vavuniya District"
+msgstr ""
+
+#: languages/states.php:2721
+msgid "Mullaitivu District"
+msgstr ""
+
+#: languages/states.php:2722
+msgid "Batticaloa District"
+msgstr ""
+
+#: languages/states.php:2723
+msgid "Ampara District"
+msgstr ""
+
+#: languages/states.php:2724
+msgid "Trincomalee District"
+msgstr ""
+
+#: languages/states.php:2725
+msgid "Puttalam District"
+msgstr ""
+
+#: languages/states.php:2726
+msgid "Anuradhapura District"
+msgstr ""
+
+#: languages/states.php:2727
+msgid "Polonnaruwa District"
+msgstr ""
+
+#: languages/states.php:2728
+msgid "Badulla District"
+msgstr ""
+
+#: languages/states.php:2729
+msgid "Monaragala District"
+msgstr ""
+
+#: languages/states.php:2730
+msgid "Ratnapura district"
+msgstr ""
+
+#: languages/states.php:2731
+msgid "Kegalle District"
+msgstr ""
+
+#: languages/states.php:2734
+msgid "Bomi County"
+msgstr ""
+
+#: languages/states.php:2735
+msgid "Bong County"
+msgstr ""
+
+#: languages/states.php:2736
+msgid "Gbarpolu County"
+msgstr ""
+
+#: languages/states.php:2737
+msgid "Grand Bassa County"
+msgstr ""
+
+#: languages/states.php:2738
+msgid "Grand Cape Mount County"
+msgstr ""
+
+#: languages/states.php:2739
+msgid "Grand Gedeh County"
+msgstr ""
+
+#: languages/states.php:2740
+msgid "Grand Kru County"
+msgstr ""
+
+#: languages/states.php:2741
+msgid "Lofa County"
+msgstr ""
+
+#: languages/states.php:2742
+msgid "Margibi County"
+msgstr ""
+
+#: languages/states.php:2743
+msgid "Maryland County"
+msgstr ""
+
+#: languages/states.php:2744
+msgid "Montserrado County"
+msgstr ""
+
+#: languages/states.php:2745
+msgid "Nimba"
+msgstr ""
+
+#: languages/states.php:2746
+msgid "River Cess County"
+msgstr ""
+
+#: languages/states.php:2747
+msgid "River Gee County"
+msgstr ""
+
+#: languages/states.php:2748
+msgid "Sinoe County"
+msgstr ""
+
+#: languages/states.php:2751
+msgid "Berea District"
+msgstr ""
+
+#: languages/states.php:2752
+msgid "Butha-Buthe District"
+msgstr ""
+
+#: languages/states.php:2753
+msgid "Leribe District"
+msgstr ""
+
+#: languages/states.php:2754
+msgid "Mafeteng District"
+msgstr ""
+
+#: languages/states.php:2755
+msgid "Maseru District"
+msgstr ""
+
+#: languages/states.php:2756
+msgid "Mohale's Hoek District"
+msgstr ""
+
+#: languages/states.php:2757
+msgid "Mokhotlong District"
+msgstr ""
+
+#: languages/states.php:2758
+msgid "Qacha's Nek District"
+msgstr ""
+
+#: languages/states.php:2759
+msgid "Quthing District"
+msgstr ""
+
+#: languages/states.php:2760
+msgid "Thaba-Tseka District"
+msgstr ""
+
+#: languages/states.php:2763
+msgid "Jonava District Municipality"
+msgstr ""
+
+#: languages/states.php:2764
+msgid "Joniškis District Municipality"
+msgstr ""
+
+#: languages/states.php:2765
+msgid "Jurbarkas District Municipality"
+msgstr ""
+
+#: languages/states.php:2766
+msgid "Kaišiadorys District Municipality"
+msgstr ""
+
+#: languages/states.php:2767
+msgid "Kalvarija municipality"
+msgstr ""
+
+#: languages/states.php:2768
+msgid "Kaunas City Municipality"
+msgstr ""
+
+#: languages/states.php:2769
+msgid "Kaunas District Municipality"
+msgstr ""
+
+#: languages/states.php:2770
+msgid "Kazlų Rūda municipality"
+msgstr ""
+
+#: languages/states.php:2771
+msgid "Kėdainiai District Municipality"
+msgstr ""
+
+#: languages/states.php:2772
+msgid "Kelmė District Municipality"
+msgstr ""
+
+#: languages/states.php:2773
+msgid "Klaipeda City Municipality"
+msgstr ""
+
+#: languages/states.php:2774
+msgid "Klaipėda District Municipality"
+msgstr ""
+
+#: languages/states.php:2775
+msgid "Kretinga District Municipality"
+msgstr ""
+
+#: languages/states.php:2776
+msgid "Kupiškis District Municipality"
+msgstr ""
+
+#: languages/states.php:2777
+msgid "Lazdijai District Municipality"
+msgstr ""
+
+#: languages/states.php:2778
+msgid "Marijampolė Municipality"
+msgstr ""
+
+#: languages/states.php:2779
+msgid "Mažeikiai District Municipality"
+msgstr ""
+
+#: languages/states.php:2780
+msgid "Molėtai District Municipality"
+msgstr ""
+
+#: languages/states.php:2781
+msgid "Neringa Municipality"
+msgstr ""
+
+#: languages/states.php:2782
+msgid "Pagėgiai municipality"
+msgstr ""
+
+#: languages/states.php:2783
+msgid "Pakruojis District Municipality"
+msgstr ""
+
+#: languages/states.php:2784
+msgid "Palanga City Municipality"
+msgstr ""
+
+#: languages/states.php:2785
+msgid "Panevėžys City Municipality"
+msgstr ""
+
+#: languages/states.php:2786
+msgid "Panevėžys District Municipality"
+msgstr ""
+
+#: languages/states.php:2787
+msgid "Pasvalys District Municipality"
+msgstr ""
+
+#: languages/states.php:2788
+msgid "Plungė District Municipality"
+msgstr ""
+
+#: languages/states.php:2789
+msgid "Prienai District Municipality"
+msgstr ""
+
+#: languages/states.php:2790
+msgid "Radviliškis District Municipality"
+msgstr ""
+
+#: languages/states.php:2791
+msgid "Raseiniai District Municipality"
+msgstr ""
+
+#: languages/states.php:2792
+msgid "Rietavas municipality"
+msgstr ""
+
+#: languages/states.php:2793
+msgid "Rokiškis District Municipality"
+msgstr ""
+
+#: languages/states.php:2794
+msgid "Šakiai District Municipality"
+msgstr ""
+
+#: languages/states.php:2795
+msgid "Šalčininkai District Municipality"
+msgstr ""
+
+#: languages/states.php:2796
+msgid "Šiauliai City Municipality"
+msgstr ""
+
+#: languages/states.php:2797
+msgid "Šiauliai District Municipality"
+msgstr ""
+
+#: languages/states.php:2798
+msgid "Šilalė District Municipality"
+msgstr ""
+
+#: languages/states.php:2799
+msgid "Šilutė District Municipality"
+msgstr ""
+
+#: languages/states.php:2800
+msgid "Širvintos District Municipality"
+msgstr ""
+
+#: languages/states.php:2801
+msgid "Skuodas District Municipality"
+msgstr ""
+
+#: languages/states.php:2802
+msgid "Švenčionys District Municipality"
+msgstr ""
+
+#: languages/states.php:2803
+msgid "Tauragė District Municipality"
+msgstr ""
+
+#: languages/states.php:2804
+msgid "Telšiai District Municipality"
+msgstr ""
+
+#: languages/states.php:2805
+msgid "Trakai District Municipality"
+msgstr ""
+
+#: languages/states.php:2806
+msgid "Ukmergė District Municipality"
+msgstr ""
+
+#: languages/states.php:2807
+msgid "Utena District Municipality"
+msgstr ""
+
+#: languages/states.php:2808
+msgid "Varėna District Municipality"
+msgstr ""
+
+#: languages/states.php:2809
+msgid "Vilkaviškis District Municipality"
+msgstr ""
+
+#: languages/states.php:2810
+msgid "Vilnius City Municipality"
+msgstr ""
+
+#: languages/states.php:2811
+msgid "Vilnius District Municipality"
+msgstr ""
+
+#: languages/states.php:2812
+msgid "Visaginas Municipality"
+msgstr ""
+
+#: languages/states.php:2813
+msgid "Zarasai District Municipality"
+msgstr ""
+
+#: languages/states.php:2814
+msgid "Akmenė District Municipality"
+msgstr ""
+
+#: languages/states.php:2815
+msgid "Alytus City Municipality"
+msgstr ""
+
+#: languages/states.php:2816
+msgid "Alytus County"
+msgstr ""
+
+#: languages/states.php:2817
+msgid "Alytus District Municipality"
+msgstr ""
+
+#: languages/states.php:2818
+msgid "Birštonas Municipality"
+msgstr ""
+
+#: languages/states.php:2819
+msgid "Biržai District Municipality"
+msgstr ""
+
+#: languages/states.php:2820
+msgid "Druskininkai municipality"
+msgstr ""
+
+#: languages/states.php:2821
+msgid "Elektrėnai municipality"
+msgstr ""
+
+#: languages/states.php:2822
+msgid "Ignalina District Municipality"
+msgstr ""
+
+#: languages/states.php:2823
+msgid "Kaunas County"
+msgstr ""
+
+#: languages/states.php:2824
+msgid "Klaipėda County"
+msgstr ""
+
+#: languages/states.php:2825
+msgid "Marijampolė County"
+msgstr ""
+
+#: languages/states.php:2826
+msgid "Panevėžys County"
+msgstr ""
+
+#: languages/states.php:2827
+msgid "Tauragė County"
+msgstr ""
+
+#: languages/states.php:2828
+msgid "Telšiai County"
+msgstr ""
+
+#: languages/states.php:2829
+msgid "Utena County"
+msgstr ""
+
+#: languages/states.php:2830
+msgid "Vilnius County"
+msgstr ""
+
+#: languages/states.php:2831
+msgid "Šiauliai County"
+msgstr ""
+
+#: languages/states.php:2834
+msgid "Canton of Capellen"
+msgstr ""
+
+#: languages/states.php:2835
+msgid "Canton of Clervaux"
+msgstr ""
+
+#: languages/states.php:2836
+msgid "Canton of Diekirch"
+msgstr ""
+
+#: languages/states.php:2837
+msgid "Canton of Echternach"
+msgstr ""
+
+#: languages/states.php:2838
+msgid "Canton of Esch-sur-Alzette"
+msgstr ""
+
+#: languages/states.php:2839
+msgid "Canton of Grevenmacher"
+msgstr ""
+
+#: languages/states.php:2840
+msgid "Canton of Luxembourg"
+msgstr ""
+
+#: languages/states.php:2841
+msgid "Canton of Mersch"
+msgstr ""
+
+#: languages/states.php:2842
+msgid "Canton of Redange"
+msgstr ""
+
+#: languages/states.php:2843
+msgid "Canton of Remich"
+msgstr ""
+
+#: languages/states.php:2844
+msgid "Canton of Vianden"
+msgstr ""
+
+#: languages/states.php:2845
+msgid "Canton of Wiltz"
+msgstr ""
+
+#: languages/states.php:2846
+msgid "Diekirch District"
+msgstr ""
+
+#: languages/states.php:2847
+msgid "Grevenmacher District"
+msgstr ""
+
+#: languages/states.php:2848
+msgid "Luxembourg District"
+msgstr ""
+
+#: languages/states.php:2851
+msgid "Vaiņode Municipality"
+msgstr ""
+
+#: languages/states.php:2852
+msgid "Valka Municipality"
+msgstr ""
+
+#: languages/states.php:2853
+msgid "Varakļāni Municipality"
+msgstr ""
+
+#: languages/states.php:2854
+msgid "Vārkava Municipality"
+msgstr ""
+
+#: languages/states.php:2855
+msgid "Vecpiebalga Municipality"
+msgstr ""
+
+#: languages/states.php:2856
+msgid "Vecumnieki Municipality"
+msgstr ""
+
+#: languages/states.php:2857
+msgid "Ventspils Municipality"
+msgstr ""
+
+#: languages/states.php:2858
+msgid "Viesīte Municipality"
+msgstr ""
+
+#: languages/states.php:2859
+msgid "Viļaka Municipality"
+msgstr ""
+
+#: languages/states.php:2860
+msgid "Viļāni Municipality"
+msgstr ""
+
+#: languages/states.php:2861
+msgid "Zilupe Municipality"
+msgstr ""
+
+#: languages/states.php:2862
+msgid "Aglona Municipality"
+msgstr ""
+
+#: languages/states.php:2863
+msgid "Aizkraukle Municipality"
+msgstr ""
+
+#: languages/states.php:2864
+msgid "Aizpute Municipality"
+msgstr ""
+
+#: languages/states.php:2865
+msgid "Aknīste Municipality"
+msgstr ""
+
+#: languages/states.php:2866
+msgid "Aloja Municipality"
+msgstr ""
+
+#: languages/states.php:2867
+msgid "Alsunga Municipality"
+msgstr ""
+
+#: languages/states.php:2868
+msgid "Alūksne Municipality"
+msgstr ""
+
+#: languages/states.php:2869
+msgid "Amata Municipality"
+msgstr ""
+
+#: languages/states.php:2870
+msgid "Ape Municipality"
+msgstr ""
+
+#: languages/states.php:2871
+msgid "Auce Municipality"
+msgstr ""
+
+#: languages/states.php:2872
+msgid "Babīte Municipality"
+msgstr ""
+
+#: languages/states.php:2873
+msgid "Baldone Municipality"
+msgstr ""
+
+#: languages/states.php:2874
+msgid "Baltinava Municipality"
+msgstr ""
+
+#: languages/states.php:2875
+msgid "Balvi Municipality"
+msgstr ""
+
+#: languages/states.php:2876
+msgid "Bauska Municipality"
+msgstr ""
+
+#: languages/states.php:2877
+msgid "Beverīna Municipality"
+msgstr ""
+
+#: languages/states.php:2878
+msgid "Brocēni Municipality"
+msgstr ""
+
+#: languages/states.php:2879
+msgid "Burtnieki Municipality"
+msgstr ""
+
+#: languages/states.php:2880
+msgid "Carnikava Municipality"
+msgstr ""
+
+#: languages/states.php:2881
+msgid "Cesvaine Municipality"
+msgstr ""
+
+#: languages/states.php:2882
+msgid "Cibla Municipality"
+msgstr ""
+
+#: languages/states.php:2883
+msgid "Cēsis Municipality"
+msgstr ""
+
+#: languages/states.php:2884
+msgid "Dagda Municipality"
+msgstr ""
+
+#: languages/states.php:2885
+msgid "Daugavpils"
+msgstr ""
+
+#: languages/states.php:2886
+msgid "Daugavpils Municipality"
+msgstr ""
+
+#: languages/states.php:2887
+msgid "Dobele Municipality"
+msgstr ""
+
+#: languages/states.php:2888
+msgid "Dundaga Municipality"
+msgstr ""
+
+#: languages/states.php:2889
+msgid "Durbe Municipality"
+msgstr ""
+
+#: languages/states.php:2890
+msgid "Engure Municipality"
+msgstr ""
+
+#: languages/states.php:2891
+msgid "Garkalne Municipality"
+msgstr ""
+
+#: languages/states.php:2892
+msgid "Grobiņa Municipality"
+msgstr ""
+
+#: languages/states.php:2893
+msgid "Gulbene Municipality"
+msgstr ""
+
+#: languages/states.php:2894
+msgid "Iecava Municipality"
+msgstr ""
+
+#: languages/states.php:2895
+msgid "Ikšķile Municipality"
+msgstr ""
+
+#: languages/states.php:2896
+msgid "Ilūkste Municipality"
+msgstr ""
+
+#: languages/states.php:2897
+msgid "Inčukalns Municipality"
+msgstr ""
+
+#: languages/states.php:2898
+msgid "Jaunjelgava Municipality"
+msgstr ""
+
+#: languages/states.php:2899
+msgid "Jaunpiebalga Municipality"
+msgstr ""
+
+#: languages/states.php:2900
+msgid "Jaunpils Municipality"
+msgstr ""
+
+#: languages/states.php:2901
+msgid "Jelgava"
+msgstr ""
+
+#: languages/states.php:2902
+msgid "Jelgava Municipality"
+msgstr ""
+
+#: languages/states.php:2903
+msgid "Jēkabpils"
+msgstr ""
+
+#: languages/states.php:2904
+msgid "Jēkabpils Municipality"
+msgstr ""
+
+#: languages/states.php:2905
+msgid "Jūrmala"
+msgstr ""
+
+#: languages/states.php:2906
+msgid "Kandava Municipality"
+msgstr ""
+
+#: languages/states.php:2907
+msgid "Kocēni Municipality"
+msgstr ""
+
+#: languages/states.php:2908
+msgid "Koknese Municipality"
+msgstr ""
+
+#: languages/states.php:2909
+msgid "Krimulda Municipality"
+msgstr ""
+
+#: languages/states.php:2910
+msgid "Krustpils Municipality"
+msgstr ""
+
+#: languages/states.php:2911
+msgid "Krāslava Municipality"
+msgstr ""
+
+#: languages/states.php:2912
+msgid "Kuldīga Municipality"
+msgstr ""
+
+#: languages/states.php:2913
+msgid "Kārsava Municipality"
+msgstr ""
+
+#: languages/states.php:2914
+msgid "Lielvārde Municipality"
+msgstr ""
+
+#: languages/states.php:2915
+msgid "Liepāja"
+msgstr ""
+
+#: languages/states.php:2916
+msgid "Limbaži Municipality"
+msgstr ""
+
+#: languages/states.php:2917
+msgid "Lubāna Municipality"
+msgstr ""
+
+#: languages/states.php:2918
+msgid "Ludza Municipality"
+msgstr ""
+
+#: languages/states.php:2919
+msgid "Līgatne Municipality"
+msgstr ""
+
+#: languages/states.php:2920
+msgid "Līvāni Municipality"
+msgstr ""
+
+#: languages/states.php:2921
+msgid "Madona Municipality"
+msgstr ""
+
+#: languages/states.php:2922
+msgid "Mazsalaca Municipality"
+msgstr ""
+
+#: languages/states.php:2923
+msgid "Mālpils Municipality"
+msgstr ""
+
+#: languages/states.php:2924
+msgid "Mārupe Municipality"
+msgstr ""
+
+#: languages/states.php:2925
+msgid "Mērsrags Municipality"
+msgstr ""
+
+#: languages/states.php:2926
+msgid "Naukšēni Municipality"
+msgstr ""
+
+#: languages/states.php:2927
+msgid "Nereta Municipality"
+msgstr ""
+
+#: languages/states.php:2928
+msgid "Nīca Municipality"
+msgstr ""
+
+#: languages/states.php:2929
+msgid "Ogre Municipality"
+msgstr ""
+
+#: languages/states.php:2930
+msgid "Olaine Municipality"
+msgstr ""
+
+#: languages/states.php:2931
+msgid "Ozolnieki Municipality"
+msgstr ""
+
+#: languages/states.php:2932
+msgid "Preiļi Municipality"
+msgstr ""
+
+#: languages/states.php:2933
+msgid "Priekule Municipality"
+msgstr ""
+
+#: languages/states.php:2934
+msgid "Priekuļi Municipality"
+msgstr ""
+
+#: languages/states.php:2935
+msgid "Pārgauja Municipality"
+msgstr ""
+
+#: languages/states.php:2936
+msgid "Pāvilosta Municipality"
+msgstr ""
+
+#: languages/states.php:2937
+msgid "Pļaviņas Municipality"
+msgstr ""
+
+#: languages/states.php:2938
+msgid "Rauna Municipality"
+msgstr ""
+
+#: languages/states.php:2939
+msgid "Riebiņi Municipality"
+msgstr ""
+
+#: languages/states.php:2940
+msgid "Riga"
+msgstr ""
+
+#: languages/states.php:2941
+msgid "Roja Municipality"
+msgstr ""
+
+#: languages/states.php:2942
+msgid "Ropaži Municipality"
+msgstr ""
+
+#: languages/states.php:2943
+msgid "Rucava Municipality"
+msgstr ""
+
+#: languages/states.php:2944
+msgid "Rugāji Municipality"
+msgstr ""
+
+#: languages/states.php:2945
+msgid "Rundāle Municipality"
+msgstr ""
+
+#: languages/states.php:2946
+msgid "Rēzekne"
+msgstr ""
+
+#: languages/states.php:2947
+msgid "Rēzekne Municipality"
+msgstr ""
+
+#: languages/states.php:2948
+msgid "Rūjiena Municipality"
+msgstr ""
+
+#: languages/states.php:2949
+msgid "Sala Municipality"
+msgstr ""
+
+#: languages/states.php:2950
+msgid "Salacgrīva Municipality"
+msgstr ""
+
+#: languages/states.php:2951
+msgid "Salaspils Municipality"
+msgstr ""
+
+#: languages/states.php:2952
+msgid "Saldus Municipality"
+msgstr ""
+
+#: languages/states.php:2953
+msgid "Saulkrasti Municipality"
+msgstr ""
+
+#: languages/states.php:2954
+msgid "Sigulda Municipality"
+msgstr ""
+
+#: languages/states.php:2955
+msgid "Skrunda Municipality"
+msgstr ""
+
+#: languages/states.php:2956
+msgid "Skrīveri Municipality"
+msgstr ""
+
+#: languages/states.php:2957
+msgid "Smiltene Municipality"
+msgstr ""
+
+#: languages/states.php:2958
+msgid "Stopiņi Municipality"
+msgstr ""
+
+#: languages/states.php:2959
+msgid "Strenči Municipality"
+msgstr ""
+
+#: languages/states.php:2960
+msgid "Sēja Municipality"
+msgstr ""
+
+#: languages/states.php:2961
+msgid "Talsi Municipality"
+msgstr ""
+
+#: languages/states.php:2962
+msgid "Tukums Municipality"
+msgstr ""
+
+#: languages/states.php:2963
+msgid "Tērvete Municipality"
+msgstr ""
+
+#: languages/states.php:2964
+msgid "Valmiera"
+msgstr ""
+
+#: languages/states.php:2965
+msgid "Ventspils"
+msgstr ""
+
+#: languages/states.php:2966
+msgid "Ērgļi Municipality"
+msgstr ""
+
+#: languages/states.php:2967
+msgid "Ķegums Municipality"
+msgstr ""
+
+#: languages/states.php:2968
+msgid "Ķekava Municipality"
+msgstr ""
+
+#: languages/states.php:2971
+msgid "Al Wahat District"
+msgstr ""
+
+#: languages/states.php:2972
+msgid "Benghazi"
+msgstr ""
+
+#: languages/states.php:2973
+msgid "Derna District"
+msgstr ""
+
+#: languages/states.php:2974
+msgid "Ghat District"
+msgstr ""
+
+#: languages/states.php:2975
+msgid "Jabal al Akhdar"
+msgstr ""
+
+#: languages/states.php:2976
+msgid "Jabal al Gharbi District"
+msgstr ""
+
+#: languages/states.php:2977
+msgid "Jafara"
+msgstr ""
+
+#: languages/states.php:2978
+msgid "Jufra"
+msgstr ""
+
+#: languages/states.php:2979
+msgid "Kufra District"
+msgstr ""
+
+#: languages/states.php:2980
+msgid "Marj District"
+msgstr ""
+
+#: languages/states.php:2981
+msgid "Misrata District"
+msgstr ""
+
+#: languages/states.php:2982
+msgid "Murqub"
+msgstr ""
+
+#: languages/states.php:2983
+msgid "Murzuq District"
+msgstr ""
+
+#: languages/states.php:2984
+msgid "Nalut District"
+msgstr ""
+
+#: languages/states.php:2985
+msgid "Nuqat al Khams"
+msgstr ""
+
+#: languages/states.php:2986
+msgid "Sabha District"
+msgstr ""
+
+#: languages/states.php:2987
+msgid "Sirte District"
+msgstr ""
+
+#: languages/states.php:2988
+msgid "Tripoli District"
+msgstr ""
+
+#: languages/states.php:2989
+msgid "Wadi al Hayaa District"
+msgstr ""
+
+#: languages/states.php:2990
+msgid "Wadi al Shatii District"
+msgstr ""
+
+#: languages/states.php:2991
+msgid "Zawiya District"
+msgstr ""
+
+#: languages/states.php:2994
+msgid "Guelmim-Oued Noun"
+msgstr ""
+
+#: languages/states.php:2995
+msgid "Laâyoune-Sakia El Hamra"
+msgstr ""
+
+#: languages/states.php:2996
+msgid "Dakhla-Oued Ed-Dahab"
+msgstr ""
+
+#: languages/states.php:2997
+msgid "Al Haouz Province"
+msgstr ""
+
+#: languages/states.php:2998
+msgid "Al Hoceïma Province"
+msgstr ""
+
+#: languages/states.php:2999
+msgid "Aousserd Province"
+msgstr ""
+
+#: languages/states.php:3000
+msgid "Assa-Zag Province"
+msgstr ""
+
+#: languages/states.php:3001
+msgid "Azilal Province"
+msgstr ""
+
+#: languages/states.php:3002
+msgid "Ben Slimane Province"
+msgstr ""
+
+#: languages/states.php:3003
+msgid "Berkane Province"
+msgstr ""
+
+#: languages/states.php:3004
+msgid "Boujdour Province"
+msgstr ""
+
+#: languages/states.php:3005
+msgid "Boulemane Province"
+msgstr ""
+
+#: languages/states.php:3006
+msgid "Béni Mellal-Khénifra"
+msgstr ""
+
+#: languages/states.php:3007
+msgid "Béni-Mellal Province"
+msgstr ""
+
+#: languages/states.php:3008
+msgid "Casablanca-Settat"
+msgstr ""
+
+#: languages/states.php:3009
+msgid "Chefchaouen Province"
+msgstr ""
+
+#: languages/states.php:3010
+msgid "Chichaoua Province"
+msgstr ""
+
+#: languages/states.php:3011
+msgid "Drâa-Tafilalet"
+msgstr ""
+
+#: languages/states.php:3012
+msgid "El Hajeb Province"
+msgstr ""
+
+#: languages/states.php:3013
+msgid "El Jadida Province"
+msgstr ""
+
+#: languages/states.php:3014
+msgid "Errachidia Province"
+msgstr ""
+
+#: languages/states.php:3015
+msgid "Es Semara Province"
+msgstr ""
+
+#: languages/states.php:3016
+msgid "Essaouira Province"
+msgstr ""
+
+#: languages/states.php:3017
+msgid "Fahs Anjra Province"
+msgstr ""
+
+#: languages/states.php:3018
+msgid "Figuig Province"
+msgstr ""
+
+#: languages/states.php:3019
+msgid "Fès-Meknès"
+msgstr ""
+
+#: languages/states.php:3020
+msgid "Guelmim Province"
+msgstr ""
+
+#: languages/states.php:3021
+msgid "Ifrane Province"
+msgstr ""
+
+#: languages/states.php:3022
+msgid "Inezgane-Aït Melloul Prefecture"
+msgstr ""
+
+#: languages/states.php:3023
+msgid "Jerada Province"
+msgstr ""
+
+#: languages/states.php:3024
+msgid "Kelaat Sraghna Province"
+msgstr ""
+
+#: languages/states.php:3025
+msgid "Khouribga Province"
+msgstr ""
+
+#: languages/states.php:3026
+msgid "Khémisset Province"
+msgstr ""
+
+#: languages/states.php:3027
+msgid "Khénifra Province"
+msgstr ""
+
+#: languages/states.php:3028
+msgid "Kénitra Province"
+msgstr ""
+
+#: languages/states.php:3029
+msgid "Larache Province"
+msgstr ""
+
+#: languages/states.php:3030
+msgid "Laâyoune Province"
+msgstr ""
+
+#: languages/states.php:3031
+msgid "Marrakesh-Safi"
+msgstr ""
+
+#: languages/states.php:3032
+msgid "Mediouna Province"
+msgstr ""
+
+#: languages/states.php:3033
+msgid "Moulay Yacoub Province"
+msgstr ""
+
+#: languages/states.php:3034
+msgid "Nador Province"
+msgstr ""
+
+#: languages/states.php:3035
+msgid "Nouaceur Province"
+msgstr ""
+
+#: languages/states.php:3036
+msgid "Oriental"
+msgstr ""
+
+#: languages/states.php:3037
+msgid "Ouarzazate Province"
+msgstr ""
+
+#: languages/states.php:3038
+msgid "Oued Ed-Dahab Province"
+msgstr ""
+
+#: languages/states.php:3039
+msgid "Safi Province"
+msgstr ""
+
+#: languages/states.php:3040
+msgid "Sefrou Province"
+msgstr ""
+
+#: languages/states.php:3041
+msgid "Settat Province"
+msgstr ""
+
+#: languages/states.php:3042
+msgid "Shtouka Ait Baha Province"
+msgstr ""
+
+#: languages/states.php:3043
+msgid "Sidi Kacem Province"
+msgstr ""
+
+#: languages/states.php:3044
+msgid "Sidi Youssef Ben Ali"
+msgstr ""
+
+#: languages/states.php:3045
+msgid "Souss-Massa"
+msgstr ""
+
+#: languages/states.php:3046
+msgid "Tan-Tan Province"
+msgstr ""
+
+#: languages/states.php:3047
+msgid "Tanger-Tétouan-Al Hoceïma"
+msgstr ""
+
+#: languages/states.php:3048
+msgid "Taounate Province"
+msgstr ""
+
+#: languages/states.php:3049
+msgid "Taourirt Province"
+msgstr ""
+
+#: languages/states.php:3050
+msgid "Taroudant Province"
+msgstr ""
+
+#: languages/states.php:3051
+msgid "Tata Province"
+msgstr ""
+
+#: languages/states.php:3052
+msgid "Taza Province"
+msgstr ""
+
+#: languages/states.php:3053
+msgid "Tiznit Province"
+msgstr ""
+
+#: languages/states.php:3054
+msgid "Tétouan Province"
+msgstr ""
+
+#: languages/states.php:3055
+msgid "Zagora Province"
+msgstr ""
+
+#: languages/states.php:3058
+msgid "La Colle"
+msgstr ""
+
+#: languages/states.php:3059
+msgid "La Condamine"
+msgstr ""
+
+#: languages/states.php:3060
+msgid "Moneghetti"
+msgstr ""
+
+#: languages/states.php:3063
+msgid "Anenii Noi District"
+msgstr ""
+
+#: languages/states.php:3064
+msgid "Basarabeasca District"
+msgstr ""
+
+#: languages/states.php:3065
+msgid "Bender Municipality"
+msgstr ""
+
+#: languages/states.php:3066
+msgid "Briceni District"
+msgstr ""
+
+#: languages/states.php:3067
+msgid "Bălți Municipality"
+msgstr ""
+
+#: languages/states.php:3068
+msgid "Cahul District"
+msgstr ""
+
+#: languages/states.php:3069
+msgid "Cantemir District"
+msgstr ""
+
+#: languages/states.php:3070
+msgid "Chișinău Municipality"
+msgstr ""
+
+#: languages/states.php:3071
+msgid "Cimișlia District"
+msgstr ""
+
+#: languages/states.php:3072
+msgid "Criuleni District"
+msgstr ""
+
+#: languages/states.php:3073
+msgid "Călărași District"
+msgstr ""
+
+#: languages/states.php:3074
+msgid "Căușeni District"
+msgstr ""
+
+#: languages/states.php:3075
+msgid "Dondușeni District"
+msgstr ""
+
+#: languages/states.php:3076
+msgid "Drochia District"
+msgstr ""
+
+#: languages/states.php:3077
+msgid "Dubăsari District"
+msgstr ""
+
+#: languages/states.php:3078
+msgid "Edineț District"
+msgstr ""
+
+#: languages/states.php:3079
+msgid "Florești District"
+msgstr ""
+
+#: languages/states.php:3080
+msgid "Fălești District"
+msgstr ""
+
+#: languages/states.php:3081
+msgid "Gagauzia"
+msgstr ""
+
+#: languages/states.php:3082
+msgid "Glodeni District"
+msgstr ""
+
+#: languages/states.php:3083
+msgid "Hîncești District"
+msgstr ""
+
+#: languages/states.php:3084
+msgid "Ialoveni District"
+msgstr ""
+
+#: languages/states.php:3085
+msgid "Nisporeni District"
+msgstr ""
+
+#: languages/states.php:3086
+msgid "Ocnița District"
+msgstr ""
+
+#: languages/states.php:3087
+msgid "Orhei District"
+msgstr ""
+
+#: languages/states.php:3088
+msgid "Rezina District"
+msgstr ""
+
+#: languages/states.php:3089
+msgid "Rîșcani District"
+msgstr ""
+
+#: languages/states.php:3090
+msgid "Soroca District"
+msgstr ""
+
+#: languages/states.php:3091
+msgid "Strășeni District"
+msgstr ""
+
+#: languages/states.php:3092
+msgid "Sîngerei District"
+msgstr ""
+
+#: languages/states.php:3093
+msgid "Taraclia District"
+msgstr ""
+
+#: languages/states.php:3094
+msgid "Telenești District"
+msgstr ""
+
+#: languages/states.php:3095
+msgid "Transnistria autonomous territorial unit"
+msgstr ""
+
+#: languages/states.php:3096
+msgid "Ungheni District"
+msgstr ""
+
+#: languages/states.php:3097
+msgid "Șoldănești District"
+msgstr ""
+
+#: languages/states.php:3098
+msgid "Ștefan Vodă District"
+msgstr ""
+
+#: languages/states.php:3101
+msgid "Kotor Municipality"
+msgstr ""
+
+#: languages/states.php:3102
+msgid "Mojkovac Municipality"
+msgstr ""
+
+#: languages/states.php:3103
+msgid "Nikšić Municipality"
+msgstr ""
+
+#: languages/states.php:3104
+msgid "Plav Municipality"
+msgstr ""
+
+#: languages/states.php:3105
+msgid "Pljevlja Municipality"
+msgstr ""
+
+#: languages/states.php:3106
+msgid "Plužine Municipality"
+msgstr ""
+
+#: languages/states.php:3107
+msgid "Podgorica Municipality"
+msgstr ""
+
+#: languages/states.php:3108
+msgid "Rožaje Municipality"
+msgstr ""
+
+#: languages/states.php:3109
+msgid "Šavnik Municipality"
+msgstr ""
+
+#: languages/states.php:3110
+msgid "Tivat Municipality"
+msgstr ""
+
+#: languages/states.php:3111
+msgid "Ulcinj Municipality"
+msgstr ""
+
+#: languages/states.php:3112
+msgid "Žabljak Municipality"
+msgstr ""
+
+#: languages/states.php:3113
+msgid "Gusinje Municipality"
+msgstr ""
+
+#: languages/states.php:3114
+msgid "Petnjica Municipality"
+msgstr ""
+
+#: languages/states.php:3115
+msgid "Andrijevica Municipality"
+msgstr ""
+
+#: languages/states.php:3116
+msgid "Bar Municipality"
+msgstr ""
+
+#: languages/states.php:3117
+msgid "Berane Municipality"
+msgstr ""
+
+#: languages/states.php:3118
+msgid "Bijelo Polje Municipality"
+msgstr ""
+
+#: languages/states.php:3119
+msgid "Budva Municipality"
+msgstr ""
+
+#: languages/states.php:3120
+msgid "Danilovgrad Municipality"
+msgstr ""
+
+#: languages/states.php:3121
+msgid "Kolašin Municipality"
+msgstr ""
+
+#: languages/states.php:3122
+msgid "Old Royal Capital Cetinje"
+msgstr ""
+
+#: languages/states.php:3126
+msgid "Antananarivo Province"
+msgstr ""
+
+#: languages/states.php:3127
+msgid "Antsiranana Province"
+msgstr ""
+
+#: languages/states.php:3128
+msgid "Fianarantsoa Province"
+msgstr ""
+
+#: languages/states.php:3129
+msgid "Mahajanga Province"
+msgstr ""
+
+#: languages/states.php:3130
+msgid "Toamasina Province"
+msgstr ""
+
+#: languages/states.php:3131
+msgid "Toliara Province"
+msgstr ""
+
+#: languages/states.php:3134
+msgid "Ralik Chain"
+msgstr ""
+
+#: languages/states.php:3135
+msgid "Ratak Chain"
+msgstr ""
+
+#: languages/states.php:3138
+msgid "Valandovo Municipality"
+msgstr ""
+
+#: languages/states.php:3139
+msgid "Vasilevo Municipality"
+msgstr ""
+
+#: languages/states.php:3140
+msgid "Vevčani Municipality"
+msgstr ""
+
+#: languages/states.php:3141
+msgid "Veles Municipality"
+msgstr ""
+
+#: languages/states.php:3142
+msgid "Vinica Municipality"
+msgstr ""
+
+#: languages/states.php:3143
+msgid "Vraneštica Municipality"
+msgstr ""
+
+#: languages/states.php:3144
+msgid "Vrapčište Municipality"
+msgstr ""
+
+#: languages/states.php:3145
+msgid "Gazi Baba Municipality"
+msgstr ""
+
+#: languages/states.php:3146
+msgid "Gevgelija Municipality"
+msgstr ""
+
+#: languages/states.php:3147
+msgid "Gostivar Municipality"
+msgstr ""
+
+#: languages/states.php:3148
+msgid "Gradsko Municipality"
+msgstr ""
+
+#: languages/states.php:3149
+msgid "Debarca Municipality"
+msgstr ""
+
+#: languages/states.php:3150
+msgid "Delčevo Municipality"
+msgstr ""
+
+#: languages/states.php:3151
+msgid "Demir Kapija Municipality"
+msgstr ""
+
+#: languages/states.php:3152
+msgid "Demir Hisar Municipality"
+msgstr ""
+
+#: languages/states.php:3153
+msgid "Dojran Municipality"
+msgstr ""
+
+#: languages/states.php:3154
+msgid "Dolneni Municipality"
+msgstr ""
+
+#: languages/states.php:3155
+msgid "Drugovo Municipality"
+msgstr ""
+
+#: languages/states.php:3156
+msgid "Gjorče Petrov Municipality"
+msgstr ""
+
+#: languages/states.php:3157
+msgid "Želino Municipality"
+msgstr ""
+
+#: languages/states.php:3158
+msgid "Zajas Municipality"
+msgstr ""
+
+#: languages/states.php:3159
+msgid "Zelenikovo Municipality"
+msgstr ""
+
+#: languages/states.php:3160
+msgid "Zrnovci Municipality"
+msgstr ""
+
+#: languages/states.php:3161
+msgid "Ilinden Municipality"
+msgstr ""
+
+#: languages/states.php:3162
+msgid "Jegunovce Municipality"
+msgstr ""
+
+#: languages/states.php:3163
+msgid "Kavadarci Municipality"
+msgstr ""
+
+#: languages/states.php:3164
+msgid "Karbinci"
+msgstr ""
+
+#: languages/states.php:3165
+msgid "Karpoš Municipality"
+msgstr ""
+
+#: languages/states.php:3166
+msgid "Kisela Voda Municipality"
+msgstr ""
+
+#: languages/states.php:3167
+msgid "Kičevo Municipality"
+msgstr ""
+
+#: languages/states.php:3168
+msgid "Konče Municipality"
+msgstr ""
+
+#: languages/states.php:3169
+msgid "Kočani Municipality"
+msgstr ""
+
+#: languages/states.php:3170
+msgid "Kratovo Municipality"
+msgstr ""
+
+#: languages/states.php:3171
+msgid "Kriva Palanka Municipality"
+msgstr ""
+
+#: languages/states.php:3172
+msgid "Krivogaštani Municipality"
+msgstr ""
+
+#: languages/states.php:3173
+msgid "Kruševo Municipality"
+msgstr ""
+
+#: languages/states.php:3174
+msgid "Kumanovo Municipality"
+msgstr ""
+
+#: languages/states.php:3175
+msgid "Lipkovo Municipality"
+msgstr ""
+
+#: languages/states.php:3176
+msgid "Lozovo Municipality"
+msgstr ""
+
+#: languages/states.php:3177
+msgid "Mavrovo and Rostuša Municipality"
+msgstr ""
+
+#: languages/states.php:3178
+msgid "Makedonska Kamenica Municipality"
+msgstr ""
+
+#: languages/states.php:3179
+msgid "Makedonski Brod Municipality"
+msgstr ""
+
+#: languages/states.php:3180
+msgid "Mogila Municipality"
+msgstr ""
+
+#: languages/states.php:3181
+msgid "Negotino Municipality"
+msgstr ""
+
+#: languages/states.php:3182
+msgid "Novaci Municipality"
+msgstr ""
+
+#: languages/states.php:3183
+msgid "Novo Selo Municipality"
+msgstr ""
+
+#: languages/states.php:3184
+msgid "Oslomej Municipality"
+msgstr ""
+
+#: languages/states.php:3185
+msgid "Ohrid Municipality"
+msgstr ""
+
+#: languages/states.php:3186
+msgid "Petrovec Municipality"
+msgstr ""
+
+#: languages/states.php:3187
+msgid "Pehčevo Municipality"
+msgstr ""
+
+#: languages/states.php:3188
+msgid "Plasnica Municipality"
+msgstr ""
+
+#: languages/states.php:3189
+msgid "Prilep Municipality"
+msgstr ""
+
+#: languages/states.php:3190
+msgid "Probištip Municipality"
+msgstr ""
+
+#: languages/states.php:3191
+msgid "Radoviš Municipality"
+msgstr ""
+
+#: languages/states.php:3192
+msgid "Rankovce Municipality"
+msgstr ""
+
+#: languages/states.php:3193
+msgid "Resen Municipality"
+msgstr ""
+
+#: languages/states.php:3194
+msgid "Rosoman Municipality"
+msgstr ""
+
+#: languages/states.php:3195
+msgid "Saraj Municipality"
+msgstr ""
+
+#: languages/states.php:3196
+msgid "Sveti Nikole Municipality"
+msgstr ""
+
+#: languages/states.php:3197
+msgid "Sopište Municipality"
+msgstr ""
+
+#: languages/states.php:3198
+msgid "Staro Nagoričane Municipality"
+msgstr ""
+
+#: languages/states.php:3199
+msgid "Struga Municipality"
+msgstr ""
+
+#: languages/states.php:3200
+msgid "Strumica Municipality"
+msgstr ""
+
+#: languages/states.php:3201
+msgid "Studeničani Municipality"
+msgstr ""
+
+#: languages/states.php:3202
+msgid "Tearce Municipality"
+msgstr ""
+
+#: languages/states.php:3203
+msgid "Tetovo Municipality"
+msgstr ""
+
+#: languages/states.php:3204
+msgid "Centar Municipality"
+msgstr ""
+
+#: languages/states.php:3205
+msgid "Centar Župa Municipality"
+msgstr ""
+
+#: languages/states.php:3206
+msgid "Čair Municipality"
+msgstr ""
+
+#: languages/states.php:3207
+msgid "Čaška Municipality"
+msgstr ""
+
+#: languages/states.php:3208
+msgid "Češinovo-Obleševo Municipality"
+msgstr ""
+
+#: languages/states.php:3209
+msgid "Čučer-Sandevo Municipality"
+msgstr ""
+
+#: languages/states.php:3210
+msgid "Štip Municipality"
+msgstr ""
+
+#: languages/states.php:3211
+msgid "Šuto Orizari Municipality"
+msgstr ""
+
+#: languages/states.php:3212
+msgid "Greater Skopje"
+msgstr ""
+
+#: languages/states.php:3213
+msgid "Aerodrom Municipality"
+msgstr ""
+
+#: languages/states.php:3214
+msgid "Aračinovo Municipality"
+msgstr ""
+
+#: languages/states.php:3215
+msgid "Berovo Municipality"
+msgstr ""
+
+#: languages/states.php:3216
+msgid "Bitola Municipality"
+msgstr ""
+
+#: languages/states.php:3217
+msgid "Bogdanci Municipality"
+msgstr ""
+
+#: languages/states.php:3218
+msgid "Bogovinje Municipality"
+msgstr ""
+
+#: languages/states.php:3219
+msgid "Bosilovo Municipality"
+msgstr ""
+
+#: languages/states.php:3220
+msgid "Brvenica Municipality"
+msgstr ""
+
+#: languages/states.php:3221
+msgid "Butel Municipality"
+msgstr ""
+
+#: languages/states.php:3224
+msgid "Kayes Region"
+msgstr ""
+
+#: languages/states.php:3225
+msgid "Koulikoro Region"
+msgstr ""
+
+#: languages/states.php:3226
+msgid "Sikasso Region"
+msgstr ""
+
+#: languages/states.php:3227
+msgid "Ségou Region"
+msgstr ""
+
+#: languages/states.php:3228
+msgid "Mopti Region"
+msgstr ""
+
+#: languages/states.php:3229
+msgid "Tombouctou Region"
+msgstr ""
+
+#: languages/states.php:3230
+msgid "Gao Region"
+msgstr ""
+
+#: languages/states.php:3231
+msgid "Kidal Region"
+msgstr ""
+
+#: languages/states.php:3232
+msgid "Ménaka Region"
+msgstr ""
+
+#: languages/states.php:3233
+msgid "Taoudénit Region"
+msgstr ""
+
+#: languages/states.php:3234
+msgid "Bamako"
+msgstr ""
+
+#: languages/states.php:3237
+msgid "Kachin State"
+msgstr ""
+
+#: languages/states.php:3238
+msgid "Kayah State"
+msgstr ""
+
+#: languages/states.php:3239
+msgid "Kayin State"
+msgstr ""
+
+#: languages/states.php:3240
+msgid "Chin State"
+msgstr ""
+
+#: languages/states.php:3241
+msgid "Mon State"
+msgstr ""
+
+#: languages/states.php:3242
+msgid "Rakhine State"
+msgstr ""
+
+#: languages/states.php:3243
+msgid "Shan State"
+msgstr ""
+
+#: languages/states.php:3244
+msgid "Naypyidaw Union Territory"
+msgstr ""
+
+#: languages/states.php:3245
+msgid "Ayeyarwady Region"
+msgstr ""
+
+#: languages/states.php:3246
+msgid "Bago"
+msgstr ""
+
+#: languages/states.php:3247
+msgid "Magway Region"
+msgstr ""
+
+#: languages/states.php:3248
+msgid "Mandalay Region"
+msgstr ""
+
+#: languages/states.php:3249
+msgid "Sagaing Region"
+msgstr ""
+
+#: languages/states.php:3250
+msgid "Tanintharyi Region"
+msgstr ""
+
+#: languages/states.php:3251
+msgid "Yangon Region"
+msgstr ""
+
+#: languages/states.php:3254
+msgid "Arkhangai Province"
+msgstr ""
+
+#: languages/states.php:3255
+msgid "Bayan-Ölgii Province"
+msgstr ""
+
+#: languages/states.php:3256
+msgid "Bayankhongor Province"
+msgstr ""
+
+#: languages/states.php:3257
+msgid "Bulgan Province"
+msgstr ""
+
+#: languages/states.php:3258
+msgid "Darkhan-Uul Province"
+msgstr ""
+
+#: languages/states.php:3259
+msgid "Dornod Province"
+msgstr ""
+
+#: languages/states.php:3260
+msgid "Dornogovi Province"
+msgstr ""
+
+#: languages/states.php:3261
+msgid "Dundgovi Province"
+msgstr ""
+
+#: languages/states.php:3262
+msgid "Govi-Altai Province"
+msgstr ""
+
+#: languages/states.php:3263
+msgid "Govisümber Province"
+msgstr ""
+
+#: languages/states.php:3264
+msgid "Khentii Province"
+msgstr ""
+
+#: languages/states.php:3265
+msgid "Khovd Province"
+msgstr ""
+
+#: languages/states.php:3266
+msgid "Khövsgöl Province"
+msgstr ""
+
+#: languages/states.php:3267
+msgid "Orkhon Province"
+msgstr ""
+
+#: languages/states.php:3268
+msgid "Selenge Province"
+msgstr ""
+
+#: languages/states.php:3269
+msgid "Sükhbaatar Province"
+msgstr ""
+
+#: languages/states.php:3270
+msgid "Töv Province"
+msgstr ""
+
+#: languages/states.php:3271
+msgid "Uvs Province"
+msgstr ""
+
+#: languages/states.php:3272
+msgid "Zavkhan Province"
+msgstr ""
+
+#: languages/states.php:3273
+msgid "Ömnögovi Province"
+msgstr ""
+
+#: languages/states.php:3274
+msgid "Övörkhangai Province"
+msgstr ""
+
+#: languages/states.php:3280
+msgid "Guidimaka Region"
+msgstr ""
+
+#: languages/states.php:3281
+msgid "Tiris Zemmour Region"
+msgstr ""
+
+#: languages/states.php:3282
+msgid "Inchiri Region"
+msgstr ""
+
+#: languages/states.php:3283
+msgid "Nouakchott-Ouest Region"
+msgstr ""
+
+#: languages/states.php:3284
+msgid "Nouakchott-Nord Region"
+msgstr ""
+
+#: languages/states.php:3285
+msgid "Nouakchott-Sud Region"
+msgstr ""
+
+#: languages/states.php:3286
+msgid "Adrar Region"
+msgstr ""
+
+#: languages/states.php:3287
+msgid "Assaba Region"
+msgstr ""
+
+#: languages/states.php:3288
+msgid "Brakna Region"
+msgstr ""
+
+#: languages/states.php:3289
+msgid "Dakhlet Nouadhibou"
+msgstr ""
+
+#: languages/states.php:3290
+msgid "Gorgol Region"
+msgstr ""
+
+#: languages/states.php:3291
+msgid "Hodh Ech Chargui Region"
+msgstr ""
+
+#: languages/states.php:3292
+msgid "Hodh El Gharbi Region"
+msgstr ""
+
+#: languages/states.php:3293
+msgid "Tagant Region"
+msgstr ""
+
+#: languages/states.php:3294
+msgid "Trarza Region"
+msgstr ""
+
+#: languages/states.php:3298
+msgid "Fontana"
+msgstr ""
+
+#: languages/states.php:3299
+msgid "Gudja"
+msgstr ""
+
+#: languages/states.php:3300
+msgid "Gżira"
+msgstr ""
+
+#: languages/states.php:3301
+msgid "Għajnsielem"
+msgstr ""
+
+#: languages/states.php:3302
+msgid "Għarb"
+msgstr ""
+
+#: languages/states.php:3303
+msgid "Għargħur"
+msgstr ""
+
+#: languages/states.php:3304
+msgid "Għasri"
+msgstr ""
+
+#: languages/states.php:3305
+msgid "Għaxaq"
+msgstr ""
+
+#: languages/states.php:3306
+msgid "Ħamrun"
+msgstr ""
+
+#: languages/states.php:3307
+msgid "Iklin"
+msgstr ""
+
+#: languages/states.php:3308
+msgid "Senglea"
+msgstr ""
+
+#: languages/states.php:3309
+msgid "Kalkara"
+msgstr ""
+
+#: languages/states.php:3310
+msgid "Kerċem"
+msgstr ""
+
+#: languages/states.php:3311
+msgid "Kirkop"
+msgstr ""
+
+#: languages/states.php:3312
+msgid "Lija"
+msgstr ""
+
+#: languages/states.php:3313
+msgid "Luqa"
+msgstr ""
+
+#: languages/states.php:3314
+msgid "Marsa"
+msgstr ""
+
+#: languages/states.php:3315
+msgid "Marsaskala"
+msgstr ""
+
+#: languages/states.php:3316
+msgid "Marsaxlokk"
+msgstr ""
+
+#: languages/states.php:3317
+msgid "Mdina"
+msgstr ""
+
+#: languages/states.php:3318
+msgid "Mellieħa"
+msgstr ""
+
+#: languages/states.php:3319
+msgid "Mġarr"
+msgstr ""
+
+#: languages/states.php:3320
+msgid "Mosta"
+msgstr ""
+
+#: languages/states.php:3321
+msgid "Mqabba"
+msgstr ""
+
+#: languages/states.php:3322
+msgid "Msida"
+msgstr ""
+
+#: languages/states.php:3323
+msgid "Mtarfa"
+msgstr ""
+
+#: languages/states.php:3324
+msgid "Munxar"
+msgstr ""
+
+#: languages/states.php:3325
+msgid "Nadur"
+msgstr ""
+
+#: languages/states.php:3326
+msgid "Naxxar"
+msgstr ""
+
+#: languages/states.php:3327
+msgid "Paola"
+msgstr ""
+
+#: languages/states.php:3328
+msgid "Pembroke"
+msgstr ""
+
+#: languages/states.php:3329
+msgid "Pietà"
+msgstr ""
+
+#: languages/states.php:3330
+msgid "Qala"
+msgstr ""
+
+#: languages/states.php:3331
+msgid "Qormi"
+msgstr ""
+
+#: languages/states.php:3332
+msgid "Qrendi"
+msgstr ""
+
+#: languages/states.php:3334
+msgid "Rabat"
+msgstr ""
+
+#: languages/states.php:3335
+msgid "St. Julian's"
+msgstr ""
+
+#: languages/states.php:3336
+msgid "San Ġwann"
+msgstr ""
+
+#: languages/states.php:3337
+msgid "Saint Lawrence"
+msgstr ""
+
+#: languages/states.php:3338
+msgid "St. Paul's Bay"
+msgstr ""
+
+#: languages/states.php:3339
+msgid "Sannat"
+msgstr ""
+
+#: languages/states.php:3340
+msgid "Santa Luċija"
+msgstr ""
+
+#: languages/states.php:3341
+msgid "Santa Venera"
+msgstr ""
+
+#: languages/states.php:3342
+msgid "Siġġiewi"
+msgstr ""
+
+#: languages/states.php:3343
+msgid "Sliema"
+msgstr ""
+
+#: languages/states.php:3344
+msgid "Swieqi"
+msgstr ""
+
+#: languages/states.php:3345
+msgid "Ta' Xbiex"
+msgstr ""
+
+#: languages/states.php:3346
+msgid "Tarxien"
+msgstr ""
+
+#: languages/states.php:3347
+msgid "Valletta"
+msgstr ""
+
+#: languages/states.php:3348
+msgid "Xagħra"
+msgstr ""
+
+#: languages/states.php:3349
+msgid "Xewkija"
+msgstr ""
+
+#: languages/states.php:3350
+msgid "Xgħajra"
+msgstr ""
+
+#: languages/states.php:3351
+msgid "Żabbar"
+msgstr ""
+
+#: languages/states.php:3352
+msgid "Żebbuġ Gozo"
+msgstr ""
+
+#: languages/states.php:3353
+msgid "Żebbuġ Malta"
+msgstr ""
+
+#: languages/states.php:3354
+msgid "Żejtun"
+msgstr ""
+
+#: languages/states.php:3355
+msgid "Żurrieq"
+msgstr ""
+
+#: languages/states.php:3356
+msgid "Attard"
+msgstr ""
+
+#: languages/states.php:3357
+msgid "Balzan"
+msgstr ""
+
+#: languages/states.php:3358
+msgid "Birgu"
+msgstr ""
+
+#: languages/states.php:3359
+msgid "Birkirkara"
+msgstr ""
+
+#: languages/states.php:3360
+msgid "Birżebbuġa"
+msgstr ""
+
+#: languages/states.php:3361
+msgid "Cospicua"
+msgstr ""
+
+#: languages/states.php:3362
+msgid "Dingli"
+msgstr ""
+
+#: languages/states.php:3363
+msgid "Fgura"
+msgstr ""
+
+#: languages/states.php:3364
+msgid "Floriana"
+msgstr ""
+
+#: languages/states.php:3367
+msgid "Agaléga"
+msgstr ""
+
+#: languages/states.php:3368
+msgid "Beau Bassin-Rose Hill"
+msgstr ""
+
+#: languages/states.php:3369
+msgid "Cargados Carajos"
+msgstr ""
+
+#: languages/states.php:3370
+msgid "Curepipe"
+msgstr ""
+
+#: languages/states.php:3371
+msgid "Flacq District"
+msgstr ""
+
+#: languages/states.php:3372
+msgid "Grand Port District"
+msgstr ""
+
+#: languages/states.php:3373
+msgid "Moka District"
+msgstr ""
+
+#: languages/states.php:3374
+msgid "Pamplemousses District"
+msgstr ""
+
+#: languages/states.php:3375
+msgid "Plaines Wilhems District"
+msgstr ""
+
+#: languages/states.php:3376
+msgid "Port Louis"
+msgstr ""
+
+#: languages/states.php:3377
+msgid "Port Louis District"
+msgstr ""
+
+#: languages/states.php:3378
+msgid "Quatre Bornes"
+msgstr ""
+
+#: languages/states.php:3379
+msgid "Rivière Noire District"
+msgstr ""
+
+#: languages/states.php:3380
+msgid "Rivière du Rempart District"
+msgstr ""
+
+#: languages/states.php:3381
+msgid "Rodrigues"
+msgstr ""
+
+#: languages/states.php:3382
+msgid "Savanne District"
+msgstr ""
+
+#: languages/states.php:3383
+msgid "Vacoas-Phoenix"
+msgstr ""
+
+#: languages/states.php:3386
+msgid "Meemu Atoll"
+msgstr ""
+
+#: languages/states.php:3387
+msgid "Raa Atoll"
+msgstr ""
+
+#: languages/states.php:3388
+msgid "Faafu Atoll"
+msgstr ""
+
+#: languages/states.php:3389
+msgid "Dhaalu Atoll"
+msgstr ""
+
+#: languages/states.php:3390
+msgid "Haa Dhaalu Atoll"
+msgstr ""
+
+#: languages/states.php:3391
+msgid "Shaviyani Atoll"
+msgstr ""
+
+#: languages/states.php:3392
+msgid "Noonu Atoll"
+msgstr ""
+
+#: languages/states.php:3393
+msgid "Kaafu Atoll"
+msgstr ""
+
+#: languages/states.php:3394
+msgid "Gaafu Alif Atoll"
+msgstr ""
+
+#: languages/states.php:3395
+msgid "Gaafu Dhaalu Atoll"
+msgstr ""
+
+#: languages/states.php:3396
+msgid "Gnaviyani Atoll"
+msgstr ""
+
+#: languages/states.php:3397
+msgid "Addu Atoll"
+msgstr ""
+
+#: languages/states.php:3398
+msgid "Alif Alif Atoll"
+msgstr ""
+
+#: languages/states.php:3399
+msgid "Alif Dhaal Atoll"
+msgstr ""
+
+#: languages/states.php:3401
+msgid "Haa Alif Atoll"
+msgstr ""
+
+#: languages/states.php:3402
+msgid "Laamu Atoll"
+msgstr ""
+
+#: languages/states.php:3403
+msgid "Lhaviyani Atoll"
+msgstr ""
+
+#: languages/states.php:3404
+msgid "Malé"
+msgstr ""
+
+#: languages/states.php:3406
+msgid "North Province"
+msgstr ""
+
+#: languages/states.php:3407
+msgid "South Central Province"
+msgstr ""
+
+#: languages/states.php:3408
+msgid "South Province"
+msgstr ""
+
+#: languages/states.php:3409
+msgid "Thaa Atoll"
+msgstr ""
+
+#: languages/states.php:3410
+msgid "Upper South Province"
+msgstr ""
+
+#: languages/states.php:3411
+msgid "Vaavu Atoll"
+msgstr ""
+
+#: languages/states.php:3414
+msgid "Balaka District"
+msgstr ""
+
+#: languages/states.php:3415
+msgid "Blantyre District"
+msgstr ""
+
+#: languages/states.php:3417
+msgid "Chikwawa District"
+msgstr ""
+
+#: languages/states.php:3418
+msgid "Chiradzulu District"
+msgstr ""
+
+#: languages/states.php:3419
+msgid "Chitipa district"
+msgstr ""
+
+#: languages/states.php:3420
+msgid "Dedza District"
+msgstr ""
+
+#: languages/states.php:3421
+msgid "Dowa District"
+msgstr ""
+
+#: languages/states.php:3422
+msgid "Karonga District"
+msgstr ""
+
+#: languages/states.php:3423
+msgid "Kasungu District"
+msgstr ""
+
+#: languages/states.php:3424
+msgid "Likoma District"
+msgstr ""
+
+#: languages/states.php:3425
+msgid "Lilongwe District"
+msgstr ""
+
+#: languages/states.php:3426
+msgid "Machinga District"
+msgstr ""
+
+#: languages/states.php:3427
+msgid "Mangochi District"
+msgstr ""
+
+#: languages/states.php:3428
+msgid "Mchinji District"
+msgstr ""
+
+#: languages/states.php:3429
+msgid "Mulanje District"
+msgstr ""
+
+#: languages/states.php:3430
+msgid "Mwanza District"
+msgstr ""
+
+#: languages/states.php:3431
+msgid "Mzimba District"
+msgstr ""
+
+#: languages/states.php:3432
+msgid "Nkhata Bay District"
+msgstr ""
+
+#: languages/states.php:3433
+msgid "Nkhotakota District"
+msgstr ""
+
+#: languages/states.php:3435
+msgid "Nsanje District"
+msgstr ""
+
+#: languages/states.php:3436
+msgid "Ntcheu District"
+msgstr ""
+
+#: languages/states.php:3437
+msgid "Ntchisi District"
+msgstr ""
+
+#: languages/states.php:3438
+msgid "Phalombe District"
+msgstr ""
+
+#: languages/states.php:3439
+msgid "Rumphi District"
+msgstr ""
+
+#: languages/states.php:3440
+msgid "Salima District"
+msgstr ""
+
+#: languages/states.php:3442
+msgid "Thyolo District"
+msgstr ""
+
+#: languages/states.php:3443
+msgid "Zomba District"
+msgstr ""
+
+#: languages/states.php:3446
+msgid "Aguascalientes"
+msgstr ""
+
+#: languages/states.php:3447
+msgid "Baja California"
+msgstr ""
+
+#: languages/states.php:3448
+msgid "Baja California Sur"
+msgstr ""
+
+#: languages/states.php:3449
+msgid "Campeche"
+msgstr ""
+
+#: languages/states.php:3450
+msgid "Chiapas"
+msgstr ""
+
+#: languages/states.php:3451
+msgid "Chihuahua"
+msgstr ""
+
+#: languages/states.php:3452
+msgid "Coahuila"
+msgstr ""
+
+#: languages/states.php:3453
+msgid "Colima"
+msgstr ""
+
+#: languages/states.php:3454
+msgid "Durango"
+msgstr ""
+
+#: languages/states.php:3455
+msgid "Guanajuato"
+msgstr ""
+
+#: languages/states.php:3456
+msgid "Guerrero"
+msgstr ""
+
+#: languages/states.php:3457
+msgid "Hidalgo"
+msgstr ""
+
+#: languages/states.php:3458
+msgid "Jalisco"
+msgstr ""
+
+#: languages/states.php:3459
+msgid "Mexico City"
+msgstr ""
+
+#: languages/states.php:3460
+msgid "Michoacán"
+msgstr ""
+
+#: languages/states.php:3461
+msgid "Morelos"
+msgstr ""
+
+#: languages/states.php:3462
+msgid "México"
+msgstr ""
+
+#: languages/states.php:3463
+msgid "Nayarit"
+msgstr ""
+
+#: languages/states.php:3464
+msgid "Nuevo León"
+msgstr ""
+
+#: languages/states.php:3465
+msgid "Oaxaca"
+msgstr ""
+
+#: languages/states.php:3466
+msgid "Puebla"
+msgstr ""
+
+#: languages/states.php:3467
+msgid "Querétaro"
+msgstr ""
+
+#: languages/states.php:3468
+msgid "Quintana Roo"
+msgstr ""
+
+#: languages/states.php:3469
+msgid "San Luis Potosí"
+msgstr ""
+
+#: languages/states.php:3470
+msgid "Sinaloa"
+msgstr ""
+
+#: languages/states.php:3471
+msgid "Sonora"
+msgstr ""
+
+#: languages/states.php:3472
+msgid "Tabasco"
+msgstr ""
+
+#: languages/states.php:3473
+msgid "Tamaulipas"
+msgstr ""
+
+#: languages/states.php:3474
+msgid "Tlaxcala"
+msgstr ""
+
+#: languages/states.php:3475
+msgid "Veracruz"
+msgstr ""
+
+#: languages/states.php:3476
+msgid "Yucatán"
+msgstr ""
+
+#: languages/states.php:3477
+msgid "Zacatecas"
+msgstr ""
+
+#: languages/states.php:3480
+msgid "Selangor"
+msgstr ""
+
+#: languages/states.php:3481
+msgid "Terengganu"
+msgstr ""
+
+#: languages/states.php:3482
+msgid "Sabah"
+msgstr ""
+
+#: languages/states.php:3483
+msgid "Sarawak"
+msgstr ""
+
+#: languages/states.php:3484
+msgid "Kuala Lumpur"
+msgstr ""
+
+#: languages/states.php:3485
+msgid "Labuan"
+msgstr ""
+
+#: languages/states.php:3486
+msgid "Putrajaya"
+msgstr ""
+
+#: languages/states.php:3487
+msgid "Johor"
+msgstr ""
+
+#: languages/states.php:3488
+msgid "Kedah"
+msgstr ""
+
+#: languages/states.php:3489
+msgid "Kelantan"
+msgstr ""
+
+#: languages/states.php:3490
+msgid "Malacca"
+msgstr ""
+
+#: languages/states.php:3491
+msgid "Negeri Sembilan"
+msgstr ""
+
+#: languages/states.php:3492
+msgid "Pahang"
+msgstr ""
+
+#: languages/states.php:3493
+msgid "Penang"
+msgstr ""
+
+#: languages/states.php:3494
+msgid "Perak"
+msgstr ""
+
+#: languages/states.php:3495
+msgid "Perlis"
+msgstr ""
+
+#: languages/states.php:3498
+msgid "Cabo Delgado Province"
+msgstr ""
+
+#: languages/states.php:3499
+msgid "Gaza Province"
+msgstr ""
+
+#: languages/states.php:3500
+msgid "Inhambane Province"
+msgstr ""
+
+#: languages/states.php:3501
+msgid "Manica Province"
+msgstr ""
+
+#: languages/states.php:3502
+msgid "Maputo"
+msgstr ""
+
+#: languages/states.php:3503
+msgid "Maputo Province"
+msgstr ""
+
+#: languages/states.php:3504
+msgid "Nampula Province"
+msgstr ""
+
+#: languages/states.php:3505
+msgid "Niassa Province"
+msgstr ""
+
+#: languages/states.php:3506
+msgid "Sofala Province"
+msgstr ""
+
+#: languages/states.php:3507
+msgid "Tete Province"
+msgstr ""
+
+#: languages/states.php:3508
+msgid "Zambezia Province"
+msgstr ""
+
+#: languages/states.php:3511
+msgid "Erongo Region"
+msgstr ""
+
+#: languages/states.php:3512
+msgid "Hardap Region"
+msgstr ""
+
+#: languages/states.php:3513
+msgid "Karas Region"
+msgstr ""
+
+#: languages/states.php:3514
+msgid "Kavango East Region"
+msgstr ""
+
+#: languages/states.php:3515
+msgid "Kavango West Region"
+msgstr ""
+
+#: languages/states.php:3516
+msgid "Khomas Region"
+msgstr ""
+
+#: languages/states.php:3517
+msgid "Kunene Region"
+msgstr ""
+
+#: languages/states.php:3518
+msgid "Ohangwena Region"
+msgstr ""
+
+#: languages/states.php:3519
+msgid "Omaheke Region"
+msgstr ""
+
+#: languages/states.php:3520
+msgid "Omusati Region"
+msgstr ""
+
+#: languages/states.php:3521
+msgid "Oshana Region"
+msgstr ""
+
+#: languages/states.php:3522
+msgid "Oshikoto Region"
+msgstr ""
+
+#: languages/states.php:3523
+msgid "Otjozondjupa Region"
+msgstr ""
+
+#: languages/states.php:3524
+msgid "Zambezi Region"
+msgstr ""
+
+#: languages/states.php:3528
+msgid "Agadez Region"
+msgstr ""
+
+#: languages/states.php:3529
+msgid "Diffa Region"
+msgstr ""
+
+#: languages/states.php:3530
+msgid "Dosso Region"
+msgstr ""
+
+#: languages/states.php:3531
+msgid "Maradi Region"
+msgstr ""
+
+#: languages/states.php:3532
+msgid "Tahoua Region"
+msgstr ""
+
+#: languages/states.php:3533
+msgid "Tillabéri Region"
+msgstr ""
+
+#: languages/states.php:3534
+msgid "Zinder Region"
+msgstr ""
+
+#: languages/states.php:3538
+msgid "Abia State"
+msgstr ""
+
+#: languages/states.php:3539
+msgid "Adamawa State"
+msgstr ""
+
+#: languages/states.php:3540
+msgid "Akwa Ibom State"
+msgstr ""
+
+#: languages/states.php:3541
+msgid "Anambra State"
+msgstr ""
+
+#: languages/states.php:3542
+msgid "Bauchi State"
+msgstr ""
+
+#: languages/states.php:3543
+msgid "Bayelsa State"
+msgstr ""
+
+#: languages/states.php:3544
+msgid "Benue State"
+msgstr ""
+
+#: languages/states.php:3545
+msgid "Borno State"
+msgstr ""
+
+#: languages/states.php:3546
+msgid "Cross River State"
+msgstr ""
+
+#: languages/states.php:3547
+msgid "Delta State"
+msgstr ""
+
+#: languages/states.php:3548
+msgid "Ebonyi State"
+msgstr ""
+
+#: languages/states.php:3549
+msgid "Edo State"
+msgstr ""
+
+#: languages/states.php:3550
+msgid "Ekiti State"
+msgstr ""
+
+#: languages/states.php:3551
+msgid "Enugu State"
+msgstr ""
+
+#: languages/states.php:3552
+msgid "Federal Capital Territory"
+msgstr ""
+
+#: languages/states.php:3553
+msgid "Gombe State"
+msgstr ""
+
+#: languages/states.php:3554
+msgid "Imo State"
+msgstr ""
+
+#: languages/states.php:3555
+msgid "Jigawa State"
+msgstr ""
+
+#: languages/states.php:3556
+msgid "Kaduna State"
+msgstr ""
+
+#: languages/states.php:3557
+msgid "Kano State"
+msgstr ""
+
+#: languages/states.php:3558
+msgid "Katsina State"
+msgstr ""
+
+#: languages/states.php:3559
+msgid "Kebbi State"
+msgstr ""
+
+#: languages/states.php:3560
+msgid "Kogi State"
+msgstr ""
+
+#: languages/states.php:3561
+msgid "Kwara State"
+msgstr ""
+
+#: languages/states.php:3562
+msgid "Lagos"
+msgstr ""
+
+#: languages/states.php:3563
+msgid "Nasarawa State"
+msgstr ""
+
+#: languages/states.php:3564
+msgid "Niger State"
+msgstr ""
+
+#: languages/states.php:3565
+msgid "Ogun State"
+msgstr ""
+
+#: languages/states.php:3566
+msgid "Ondo State"
+msgstr ""
+
+#: languages/states.php:3567
+msgid "Osun State"
+msgstr ""
+
+#: languages/states.php:3568
+msgid "Oyo State"
+msgstr ""
+
+#: languages/states.php:3569
+msgid "Plateau State"
+msgstr ""
+
+#: languages/states.php:3570
+msgid "Sokoto State"
+msgstr ""
+
+#: languages/states.php:3571
+msgid "Taraba State"
+msgstr ""
+
+#: languages/states.php:3572
+msgid "Yobe State"
+msgstr ""
+
+#: languages/states.php:3573
+msgid "Zamfara State"
+msgstr ""
+
+#: languages/states.php:3576
+msgid "Boaco Department"
+msgstr ""
+
+#: languages/states.php:3577
+msgid "Carazo Department"
+msgstr ""
+
+#: languages/states.php:3578
+msgid "Chinandega Department"
+msgstr ""
+
+#: languages/states.php:3579
+msgid "Chontales Department"
+msgstr ""
+
+#: languages/states.php:3580
+msgid "Estelí Department"
+msgstr ""
+
+#: languages/states.php:3581
+msgid "Granada Department"
+msgstr ""
+
+#: languages/states.php:3582
+msgid "Jinotega Department"
+msgstr ""
+
+#: languages/states.php:3583
+msgid "León Department"
+msgstr ""
+
+#: languages/states.php:3584
+msgid "Madriz Department"
+msgstr ""
+
+#: languages/states.php:3585
+msgid "Managua Department"
+msgstr ""
+
+#: languages/states.php:3586
+msgid "Masaya Department"
+msgstr ""
+
+#: languages/states.php:3587
+msgid "Matagalpa Department"
+msgstr ""
+
+#: languages/states.php:3588
+msgid "North Caribbean Coast Autonomous Region"
+msgstr ""
+
+#: languages/states.php:3589
+msgid "Rivas Department"
+msgstr ""
+
+#: languages/states.php:3590
+msgid "Río San Juan Department"
+msgstr ""
+
+#: languages/states.php:3591
+msgid "South Caribbean Coast Autonomous Region"
+msgstr ""
+
+#: languages/states.php:3594
+msgid "Bonaire"
+msgstr ""
+
+#: languages/states.php:3595
+msgid "Drenthe"
+msgstr ""
+
+#: languages/states.php:3596
+msgid "Flevoland"
+msgstr ""
+
+#: languages/states.php:3597
+msgid "Friesland"
+msgstr ""
+
+#: languages/states.php:3598
+msgid "Gelderland"
+msgstr ""
+
+#: languages/states.php:3599
+msgid "Groningen"
+msgstr ""
+
+#: languages/states.php:3601
+msgid "North Brabant"
+msgstr ""
+
+#: languages/states.php:3602
+msgid "North Holland"
+msgstr ""
+
+#: languages/states.php:3603
+msgid "Overijssel"
+msgstr ""
+
+#: languages/states.php:3604
+msgid "Saba"
+msgstr ""
+
+#: languages/states.php:3605
+msgid "Sint Eustatius"
+msgstr ""
+
+#: languages/states.php:3606
+msgid "South Holland"
+msgstr ""
+
+#: languages/states.php:3607
+msgid "Utrecht"
+msgstr ""
+
+#: languages/states.php:3608
+msgid "Zeeland"
+msgstr ""
+
+#: languages/states.php:3611
+msgid "Vest-Agder"
+msgstr ""
+
+#: languages/states.php:3612
+msgid "Rogaland"
+msgstr ""
+
+#: languages/states.php:3613
+msgid "Hordaland"
+msgstr ""
+
+#: languages/states.php:3614
+msgid "Sogn og Fjordane"
+msgstr ""
+
+#: languages/states.php:3615
+msgid "Møre og Romsdal"
+msgstr ""
+
+#: languages/states.php:3616
+msgid "Sør-Trøndelag"
+msgstr ""
+
+#: languages/states.php:3617
+msgid "Nord-Trøndelag"
+msgstr ""
+
+#: languages/states.php:3618
+msgid "Nordland"
+msgstr ""
+
+#: languages/states.php:3619
+msgid "Troms"
+msgstr ""
+
+#: languages/states.php:3620
+msgid "Finnmark"
+msgstr ""
+
+#: languages/states.php:3621
+msgid "Svalbard"
+msgstr ""
+
+#: languages/states.php:3622
+msgid "Jan Mayen"
+msgstr ""
+
+#: languages/states.php:3623
+msgid "Trøndelag"
+msgstr ""
+
+#: languages/states.php:3624
+msgid "Akershus"
+msgstr ""
+
+#: languages/states.php:3625
+msgid "Buskerud"
+msgstr ""
+
+#: languages/states.php:3626
+msgid "Hedmark"
+msgstr ""
+
+#: languages/states.php:3627
+msgid "Oppland"
+msgstr ""
+
+#: languages/states.php:3628
+msgid "Oslo"
+msgstr ""
+
+#: languages/states.php:3629
+msgid "Telemark"
+msgstr ""
+
+#: languages/states.php:3630
+msgid "Vestfold"
+msgstr ""
+
+#: languages/states.php:3631
+msgid "Østfold"
+msgstr ""
+
+#: languages/states.php:3635
+msgid "Mid-Western Region"
+msgstr ""
+
+#: languages/states.php:3637
+msgid "Eastern Development Region"
+msgstr ""
+
+#: languages/states.php:3638
+msgid "Far-Western Development Region"
+msgstr ""
+
+#: languages/states.php:3639
+msgid "Bagmati Zone"
+msgstr ""
+
+#: languages/states.php:3640
+msgid "Bheri Zone"
+msgstr ""
+
+#: languages/states.php:3641
+msgid "Dhaulagiri Zone"
+msgstr ""
+
+#: languages/states.php:3642
+msgid "Gandaki Zone"
+msgstr ""
+
+#: languages/states.php:3643
+msgid "Janakpur Zone"
+msgstr ""
+
+#: languages/states.php:3644
+msgid "Karnali Zone"
+msgstr ""
+
+#: languages/states.php:3645
+msgid "Kosi Zone"
+msgstr ""
+
+#: languages/states.php:3646
+msgid "Lumbini Zone"
+msgstr ""
+
+#: languages/states.php:3647
+msgid "Mahakali Zone"
+msgstr ""
+
+#: languages/states.php:3648
+msgid "Mechi Zone"
+msgstr ""
+
+#: languages/states.php:3649
+msgid "Narayani Zone"
+msgstr ""
+
+#: languages/states.php:3650
+msgid "Rapti Zone"
+msgstr ""
+
+#: languages/states.php:3651
+msgid "Sagarmatha Zone"
+msgstr ""
+
+#: languages/states.php:3652
+msgid "Seti Zone"
+msgstr ""
+
+#: languages/states.php:3655
+msgid "Ijuw District"
+msgstr ""
+
+#: languages/states.php:3656
+msgid "Meneng District"
+msgstr ""
+
+#: languages/states.php:3657
+msgid "Nibok District"
+msgstr ""
+
+#: languages/states.php:3658
+msgid "Uaboe District"
+msgstr ""
+
+#: languages/states.php:3659
+msgid "Yaren District"
+msgstr ""
+
+#: languages/states.php:3660
+msgid "Aiwo District"
+msgstr ""
+
+#: languages/states.php:3661
+msgid "Anabar District"
+msgstr ""
+
+#: languages/states.php:3662
+msgid "Anetan District"
+msgstr ""
+
+#: languages/states.php:3663
+msgid "Anibare District"
+msgstr ""
+
+#: languages/states.php:3664
+msgid "Baiti District"
+msgstr ""
+
+#: languages/states.php:3665
+msgid "Boe District"
+msgstr ""
+
+#: languages/states.php:3666
+msgid "Buada District"
+msgstr ""
+
+#: languages/states.php:3667
+msgid "Denigomodu District"
+msgstr ""
+
+#: languages/states.php:3668
+msgid "Ewa District"
+msgstr ""
+
+#: languages/states.php:3672
+msgid "Auckland Region"
+msgstr ""
+
+#: languages/states.php:3673
+msgid "Bay of Plenty Region"
+msgstr ""
+
+#: languages/states.php:3674
+msgid "Canterbury Region"
+msgstr ""
+
+#: languages/states.php:3675
+msgid "Chatham Islands"
+msgstr ""
+
+#: languages/states.php:3676
+msgid "Gisborne District"
+msgstr ""
+
+#: languages/states.php:3677
+msgid "Hawke's Bay Region"
+msgstr ""
+
+#: languages/states.php:3678
+msgid "Manawatu-Wanganui Region"
+msgstr ""
+
+#: languages/states.php:3679
+msgid "Marlborough Region"
+msgstr ""
+
+#: languages/states.php:3680
+msgid "Nelson Region"
+msgstr ""
+
+#: languages/states.php:3681
+msgid "Northland Region"
+msgstr ""
+
+#: languages/states.php:3682
+msgid "Otago Region"
+msgstr ""
+
+#: languages/states.php:3683
+msgid "Southland Region"
+msgstr ""
+
+#: languages/states.php:3684
+msgid "Taranaki Region"
+msgstr ""
+
+#: languages/states.php:3685
+msgid "Tasman District"
+msgstr ""
+
+#: languages/states.php:3686
+msgid "Waikato Region"
+msgstr ""
+
+#: languages/states.php:3687
+msgid "Wellington Region"
+msgstr ""
+
+#: languages/states.php:3688
+msgid "West Coast Region"
+msgstr ""
+
+#: languages/states.php:3691
+msgid "Ad Dakhiliyah Governorate"
+msgstr ""
+
+#: languages/states.php:3692
+msgid "Ad Dhahirah Governorate"
+msgstr ""
+
+#: languages/states.php:3693
+msgid "Al Batinah North Governorate"
+msgstr ""
+
+#: languages/states.php:3694
+msgid "Al Batinah Region"
+msgstr ""
+
+#: languages/states.php:3695
+msgid "Al Batinah South Governorate"
+msgstr ""
+
+#: languages/states.php:3696
+msgid "Al Buraimi Governorate"
+msgstr ""
+
+#: languages/states.php:3697
+msgid "Al Wusta Governorate"
+msgstr ""
+
+#: languages/states.php:3698
+msgid "Ash Sharqiyah North Governorate"
+msgstr ""
+
+#: languages/states.php:3699
+msgid "Ash Sharqiyah Region"
+msgstr ""
+
+#: languages/states.php:3700
+msgid "Ash Sharqiyah South Governorate"
+msgstr ""
+
+#: languages/states.php:3701
+msgid "Dhofar Governorate"
+msgstr ""
+
+#: languages/states.php:3702
+msgid "Musandam Governorate"
+msgstr ""
+
+#: languages/states.php:3703
+msgid "Muscat Governorate"
+msgstr ""
+
+#: languages/states.php:3706
+msgid "Bocas del Toro Province"
+msgstr ""
+
+#: languages/states.php:3707
+msgid "Coclé Province"
+msgstr ""
+
+#: languages/states.php:3708
+msgid "Colón Province"
+msgstr ""
+
+#: languages/states.php:3709
+msgid "Chiriquí Province"
+msgstr ""
+
+#: languages/states.php:3710
+msgid "Darién Province"
+msgstr ""
+
+#: languages/states.php:3711
+msgid "Herrera Province"
+msgstr ""
+
+#: languages/states.php:3712
+msgid "Los Santos Province"
+msgstr ""
+
+#: languages/states.php:3713
+msgid "Panamá Province"
+msgstr ""
+
+#: languages/states.php:3714
+msgid "Veraguas Province"
+msgstr ""
+
+#: languages/states.php:3715
+msgid "Panamá Oeste Province"
+msgstr ""
+
+#: languages/states.php:3716
+msgid "Emberá-Wounaan Comarca"
+msgstr ""
+
+#: languages/states.php:3717
+msgid "Guna Yala"
+msgstr ""
+
+#: languages/states.php:3718
+msgid "Ngöbe-Buglé Comarca"
+msgstr ""
+
+#: languages/states.php:3722
+msgid "Apurímac"
+msgstr ""
+
+#: languages/states.php:3723
+msgid "Arequipa"
+msgstr ""
+
+#: languages/states.php:3724
+msgid "Ayacucho"
+msgstr ""
+
+#: languages/states.php:3725
+msgid "Cajamarca"
+msgstr ""
+
+#: languages/states.php:3726
+msgid "Callao"
+msgstr ""
+
+#: languages/states.php:3727
+msgid "Cusco"
+msgstr ""
+
+#: languages/states.php:3728
+msgid "Huancavelica"
+msgstr ""
+
+#: languages/states.php:3729
+msgid "Huanuco"
+msgstr ""
+
+#: languages/states.php:3730
+msgid "Ica"
+msgstr ""
+
+#: languages/states.php:3731
+msgid "Junín"
+msgstr ""
+
+#: languages/states.php:3732
+msgid "La Libertad"
+msgstr ""
+
+#: languages/states.php:3733
+msgid "Lambayeque"
+msgstr ""
+
+#: languages/states.php:3734
+msgid "Lima"
+msgstr ""
+
+#: languages/states.php:3735
+msgid "Madre de Dios"
+msgstr ""
+
+#: languages/states.php:3736
+msgid "Moquegua"
+msgstr ""
+
+#: languages/states.php:3737
+msgid "Pasco"
+msgstr ""
+
+#: languages/states.php:3738
+msgid "Piura"
+msgstr ""
+
+#: languages/states.php:3739
+msgid "Puno"
+msgstr ""
+
+#: languages/states.php:3740
+msgid "San Martín"
+msgstr ""
+
+#: languages/states.php:3741
+msgid "Tacna"
+msgstr ""
+
+#: languages/states.php:3742
+msgid "Tumbes"
+msgstr ""
+
+#: languages/states.php:3743
+msgid "Ucayali"
+msgstr ""
+
+#: languages/states.php:3744
+msgid "Áncash"
+msgstr ""
+
+#: languages/states.php:3748
+msgid "Bougainville"
+msgstr ""
+
+#: languages/states.php:3750
+msgid "Chimbu Province"
+msgstr ""
+
+#: languages/states.php:3751
+msgid "East New Britain"
+msgstr ""
+
+#: languages/states.php:3752
+msgid "Eastern Highlands Province"
+msgstr ""
+
+#: languages/states.php:3753
+msgid "Enga Province"
+msgstr ""
+
+#: languages/states.php:3754
+msgid "Gulf"
+msgstr ""
+
+#: languages/states.php:3755
+msgid "Hela"
+msgstr ""
+
+#: languages/states.php:3756
+msgid "Jiwaka Province"
+msgstr ""
+
+#: languages/states.php:3757
+msgid "Madang Province"
+msgstr ""
+
+#: languages/states.php:3758
+msgid "Manus Province"
+msgstr ""
+
+#: languages/states.php:3759
+msgid "Milne Bay Province"
+msgstr ""
+
+#: languages/states.php:3760
+msgid "Morobe Province"
+msgstr ""
+
+#: languages/states.php:3761
+msgid "New Ireland Province"
+msgstr ""
+
+#: languages/states.php:3762
+msgid "Oro Province"
+msgstr ""
+
+#: languages/states.php:3763
+msgid "Port Moresby"
+msgstr ""
+
+#: languages/states.php:3764
+msgid "Sandaun Province"
+msgstr ""
+
+#: languages/states.php:3765
+msgid "Southern Highlands Province"
+msgstr ""
+
+#: languages/states.php:3766
+msgid "West New Britain Province"
+msgstr ""
+
+#: languages/states.php:3767
+msgid "Western Highlands Province"
+msgstr ""
+
+#: languages/states.php:3771
+msgid "Northern Mindanao"
+msgstr ""
+
+#: languages/states.php:3772
+msgid "Davao Region"
+msgstr ""
+
+#: languages/states.php:3773
+msgid "Soccsksargen"
+msgstr ""
+
+#: languages/states.php:3774
+msgid "Caraga"
+msgstr ""
+
+#: languages/states.php:3775
+msgid "Autonomous Region in Muslim Mindanao"
+msgstr ""
+
+#: languages/states.php:3776
+msgid "Cordillera Administrative Region"
+msgstr ""
+
+#: languages/states.php:3777
+msgid "Calabarzon"
+msgstr ""
+
+#: languages/states.php:3778
+msgid "Mimaropa"
+msgstr ""
+
+#: languages/states.php:3779
+msgid "Abra"
+msgstr ""
+
+#: languages/states.php:3780
+msgid "Agusan del Norte"
+msgstr ""
+
+#: languages/states.php:3781
+msgid "Agusan del Sur"
+msgstr ""
+
+#: languages/states.php:3782
+msgid "Aklan"
+msgstr ""
+
+#: languages/states.php:3783
+msgid "Albay"
+msgstr ""
+
+#: languages/states.php:3784
+msgid "Antique"
+msgstr ""
+
+#: languages/states.php:3785
+msgid "Apayao"
+msgstr ""
+
+#: languages/states.php:3786
+msgid "Aurora"
+msgstr ""
+
+#: languages/states.php:3787
+msgid "Basilan"
+msgstr ""
+
+#: languages/states.php:3788
+msgid "Bataan"
+msgstr ""
+
+#: languages/states.php:3789
+msgid "Batanes"
+msgstr ""
+
+#: languages/states.php:3790
+msgid "Batangas"
+msgstr ""
+
+#: languages/states.php:3791
+msgid "Benguet"
+msgstr ""
+
+#: languages/states.php:3792
+msgid "Bicol Region"
+msgstr ""
+
+#: languages/states.php:3793
+msgid "Biliran"
+msgstr ""
+
+#: languages/states.php:3794
+msgid "Bohol"
+msgstr ""
+
+#: languages/states.php:3795
+msgid "Bukidnon"
+msgstr ""
+
+#: languages/states.php:3796
+msgid "Bulacan"
+msgstr ""
+
+#: languages/states.php:3797
+msgid "Cagayan"
+msgstr ""
+
+#: languages/states.php:3798
+msgid "Cagayan Valley"
+msgstr ""
+
+#: languages/states.php:3799
+msgid "Camarines Norte"
+msgstr ""
+
+#: languages/states.php:3800
+msgid "Camarines Sur"
+msgstr ""
+
+#: languages/states.php:3801
+msgid "Camiguin"
+msgstr ""
+
+#: languages/states.php:3802
+msgid "Capiz"
+msgstr ""
+
+#: languages/states.php:3803
+msgid "Catanduanes"
+msgstr ""
+
+#: languages/states.php:3804
+msgid "Cavite"
+msgstr ""
+
+#: languages/states.php:3805
+msgid "Cebu"
+msgstr ""
+
+#: languages/states.php:3806
+msgid "Central Luzon"
+msgstr ""
+
+#: languages/states.php:3807
+msgid "Central Visayas"
+msgstr ""
+
+#: languages/states.php:3808
+msgid "Compostela Valley"
+msgstr ""
+
+#: languages/states.php:3809
+msgid "Cotabato"
+msgstr ""
+
+#: languages/states.php:3810
+msgid "Davao Occidental"
+msgstr ""
+
+#: languages/states.php:3811
+msgid "Davao Oriental"
+msgstr ""
+
+#: languages/states.php:3812
+msgid "Davao del Norte"
+msgstr ""
+
+#: languages/states.php:3813
+msgid "Davao del Sur"
+msgstr ""
+
+#: languages/states.php:3814
+msgid "Dinagat Islands"
+msgstr ""
+
+#: languages/states.php:3815
+msgid "Eastern Samar"
+msgstr ""
+
+#: languages/states.php:3816
+msgid "Eastern Visayas"
+msgstr ""
+
+#: languages/states.php:3817
+msgid "Guimaras"
+msgstr ""
+
+#: languages/states.php:3818
+msgid "Ifugao"
+msgstr ""
+
+#: languages/states.php:3819
+msgid "Ilocos Norte"
+msgstr ""
+
+#: languages/states.php:3820
+msgid "Ilocos Region"
+msgstr ""
+
+#: languages/states.php:3821
+msgid "Ilocos Sur"
+msgstr ""
+
+#: languages/states.php:3822
+msgid "Iloilo"
+msgstr ""
+
+#: languages/states.php:3823
+msgid "Isabela"
+msgstr ""
+
+#: languages/states.php:3824
+msgid "Kalinga"
+msgstr ""
+
+#: languages/states.php:3825
+msgid "La Union"
+msgstr ""
+
+#: languages/states.php:3826
+msgid "Laguna"
+msgstr ""
+
+#: languages/states.php:3827
+msgid "Lanao del Norte"
+msgstr ""
+
+#: languages/states.php:3828
+msgid "Lanao del Sur"
+msgstr ""
+
+#: languages/states.php:3829
+msgid "Leyte"
+msgstr ""
+
+#: languages/states.php:3830
+msgid "Maguindanao"
+msgstr ""
+
+#: languages/states.php:3831
+msgid "Marinduque"
+msgstr ""
+
+#: languages/states.php:3832
+msgid "Masbate"
+msgstr ""
+
+#: languages/states.php:3833
+msgid "Metro Manila"
+msgstr ""
+
+#: languages/states.php:3834
+msgid "Misamis Occidental"
+msgstr ""
+
+#: languages/states.php:3835
+msgid "Misamis Oriental"
+msgstr ""
+
+#: languages/states.php:3836
+msgid "Mountain Province"
+msgstr ""
+
+#: languages/states.php:3837
+msgid "Negros Occidental"
+msgstr ""
+
+#: languages/states.php:3838
+msgid "Negros Oriental"
+msgstr ""
+
+#: languages/states.php:3839
+msgid "Northern Samar"
+msgstr ""
+
+#: languages/states.php:3840
+msgid "Nueva Ecija"
+msgstr ""
+
+#: languages/states.php:3841
+msgid "Nueva Vizcaya"
+msgstr ""
+
+#: languages/states.php:3842
+msgid "Occidental Mindoro"
+msgstr ""
+
+#: languages/states.php:3843
+msgid "Oriental Mindoro"
+msgstr ""
+
+#: languages/states.php:3844
+msgid "Palawan"
+msgstr ""
+
+#: languages/states.php:3845
+msgid "Pampanga"
+msgstr ""
+
+#: languages/states.php:3846
+msgid "Pangasinan"
+msgstr ""
+
+#: languages/states.php:3847
+msgid "Quezon"
+msgstr ""
+
+#: languages/states.php:3848
+msgid "Quirino"
+msgstr ""
+
+#: languages/states.php:3849
+msgid "Rizal"
+msgstr ""
+
+#: languages/states.php:3850
+msgid "Romblon"
+msgstr ""
+
+#: languages/states.php:3851
+msgid "Sarangani"
+msgstr ""
+
+#: languages/states.php:3852
+msgid "Siquijor"
+msgstr ""
+
+#: languages/states.php:3853
+msgid "Sorsogon"
+msgstr ""
+
+#: languages/states.php:3854
+msgid "South Cotabato"
+msgstr ""
+
+#: languages/states.php:3855
+msgid "Southern Leyte"
+msgstr ""
+
+#: languages/states.php:3856
+msgid "Sultan Kudarat"
+msgstr ""
+
+#: languages/states.php:3857
+msgid "Sulu"
+msgstr ""
+
+#: languages/states.php:3858
+msgid "Surigao del Norte"
+msgstr ""
+
+#: languages/states.php:3859
+msgid "Surigao del Sur"
+msgstr ""
+
+#: languages/states.php:3860
+msgid "Tarlac"
+msgstr ""
+
+#: languages/states.php:3861
+msgid "Tawi-Tawi"
+msgstr ""
+
+#: languages/states.php:3862
+msgid "Western Visayas"
+msgstr ""
+
+#: languages/states.php:3863
+msgid "Zambales"
+msgstr ""
+
+#: languages/states.php:3864
+msgid "Zamboanga Peninsula"
+msgstr ""
+
+#: languages/states.php:3865
+msgid "Zamboanga Sibugay"
+msgstr ""
+
+#: languages/states.php:3866
+msgid "Zamboanga del Norte"
+msgstr ""
+
+#: languages/states.php:3867
+msgid "Zamboanga del Sur"
+msgstr ""
+
+#: languages/states.php:3870
+msgid "Azad Kashmir"
+msgstr ""
+
+#: languages/states.php:3871
+msgid "Balochistan"
+msgstr ""
+
+#: languages/states.php:3872
+msgid "Federally Administered Tribal Areas"
+msgstr ""
+
+#: languages/states.php:3873
+msgid "Gilgit-Baltistan"
+msgstr ""
+
+#: languages/states.php:3874
+msgid "Islamabad Capital Territory"
+msgstr ""
+
+#: languages/states.php:3875
+msgid "Khyber Pakhtunkhwa"
+msgstr ""
+
+#: languages/states.php:3877
+msgid "Sindh"
+msgstr ""
+
+#: languages/states.php:3880
+msgid "Greater Poland Voivodeship"
+msgstr ""
+
+#: languages/states.php:3881
+msgid "Kuyavian-Pomeranian Voivodeship"
+msgstr ""
+
+#: languages/states.php:3882
+msgid "Lesser Poland Voivodeship"
+msgstr ""
+
+#: languages/states.php:3883
+msgid "Lower Silesian Voivodeship"
+msgstr ""
+
+#: languages/states.php:3884
+msgid "Lublin Voivodeship"
+msgstr ""
+
+#: languages/states.php:3885
+msgid "Lubusz Voivodeship"
+msgstr ""
+
+#: languages/states.php:3886
+msgid "Masovian Voivodeship"
+msgstr ""
+
+#: languages/states.php:3887
+msgid "Opole Voivodeship"
+msgstr ""
+
+#: languages/states.php:3888
+msgid "Podkarpackie Voivodeship"
+msgstr ""
+
+#: languages/states.php:3889
+msgid "Podlaskie Voivodeship"
+msgstr ""
+
+#: languages/states.php:3890
+msgid "Pomeranian Voivodeship"
+msgstr ""
+
+#: languages/states.php:3891
+msgid "Silesian Voivodeship"
+msgstr ""
+
+#: languages/states.php:3892
+msgid "Warmian-Masurian Voivodeship"
+msgstr ""
+
+#: languages/states.php:3893
+msgid "West Pomeranian Voivodeship"
+msgstr ""
+
+#: languages/states.php:3894
+msgid "Łódź Voivodeship"
+msgstr ""
+
+#: languages/states.php:3895
+msgid "Świętokrzyskie Voivodeship"
+msgstr ""
+
+#: languages/states.php:3902
+msgid "Leiria"
+msgstr ""
+
+#: languages/states.php:3903
+msgid "Lisbon"
+msgstr ""
+
+#: languages/states.php:3904
+msgid "Portalegre"
+msgstr ""
+
+#: languages/states.php:3905
+msgid "Porto"
+msgstr ""
+
+#: languages/states.php:3906
+msgid "Santarém"
+msgstr ""
+
+#: languages/states.php:3907
+msgid "Setúbal"
+msgstr ""
+
+#: languages/states.php:3908
+msgid "Viana do Castelo"
+msgstr ""
+
+#: languages/states.php:3909
+msgid "Vila Real"
+msgstr ""
+
+#: languages/states.php:3910
+msgid "Viseu"
+msgstr ""
+
+#: languages/states.php:3911
+msgid "Açores"
+msgstr ""
+
+#: languages/states.php:3912
+msgid "Madeira"
+msgstr ""
+
+#: languages/states.php:3913
+msgid "Aveiro"
+msgstr ""
+
+#: languages/states.php:3914
+msgid "Beja"
+msgstr ""
+
+#: languages/states.php:3915
+msgid "Braga"
+msgstr ""
+
+#: languages/states.php:3916
+msgid "Bragança"
+msgstr ""
+
+#: languages/states.php:3917
+msgid "Castelo Branco"
+msgstr ""
+
+#: languages/states.php:3918
+msgid "Coimbra"
+msgstr ""
+
+#: languages/states.php:3919
+msgid "Faro"
+msgstr ""
+
+#: languages/states.php:3920
+msgid "Guarda"
+msgstr ""
+
+#: languages/states.php:3921
+msgid "Évora"
+msgstr ""
+
+#: languages/states.php:3924
+msgid "Kayangel"
+msgstr ""
+
+#: languages/states.php:3925
+msgid "Koror"
+msgstr ""
+
+#: languages/states.php:3926
+msgid "Melekeok"
+msgstr ""
+
+#: languages/states.php:3927
+msgid "Ngaraard"
+msgstr ""
+
+#: languages/states.php:3928
+msgid "Ngarchelong"
+msgstr ""
+
+#: languages/states.php:3929
+msgid "Ngardmau"
+msgstr ""
+
+#: languages/states.php:3930
+msgid "Ngatpang"
+msgstr ""
+
+#: languages/states.php:3931
+msgid "Ngchesar"
+msgstr ""
+
+#: languages/states.php:3932
+msgid "Ngeremlengui"
+msgstr ""
+
+#: languages/states.php:3933
+msgid "Ngiwal"
+msgstr ""
+
+#: languages/states.php:3934
+msgid "Peleliu"
+msgstr ""
+
+#: languages/states.php:3935
+msgid "Sonsorol"
+msgstr ""
+
+#: languages/states.php:3936
+msgid "Aimeliik"
+msgstr ""
+
+#: languages/states.php:3937
+msgid "Airai"
+msgstr ""
+
+#: languages/states.php:3938
+msgid "Angaur"
+msgstr ""
+
+#: languages/states.php:3939
+msgid "Hatohobei"
+msgstr ""
+
+#: languages/states.php:3942
+msgid "Concepción Department"
+msgstr ""
+
+#: languages/states.php:3943
+msgid "San Pedro Department"
+msgstr ""
+
+#: languages/states.php:3944
+msgid "Cordillera Department"
+msgstr ""
+
+#: languages/states.php:3945
+msgid "Guairá Department"
+msgstr ""
+
+#: languages/states.php:3946
+msgid "Caaguazú"
+msgstr ""
+
+#: languages/states.php:3947
+msgid "Caazapá"
+msgstr ""
+
+#: languages/states.php:3948
+msgid "Itapúa"
+msgstr ""
+
+#: languages/states.php:3949
+msgid "Misiones Department"
+msgstr ""
+
+#: languages/states.php:3950
+msgid "Paraguarí Department"
+msgstr ""
+
+#: languages/states.php:3951
+msgid "Alto Paraná Department"
+msgstr ""
+
+#: languages/states.php:3952
+msgid "Central Department"
+msgstr ""
+
+#: languages/states.php:3953
+msgid "Ñeembucú Department"
+msgstr ""
+
+#: languages/states.php:3954
+msgid "Amambay Department"
+msgstr ""
+
+#: languages/states.php:3955
+msgid "Canindeyú"
+msgstr ""
+
+#: languages/states.php:3956
+msgid "Presidente Hayes Department"
+msgstr ""
+
+#: languages/states.php:3957
+msgid "Alto Paraguay Department"
+msgstr ""
+
+#: languages/states.php:3958
+msgid "Boquerón Department"
+msgstr ""
+
+#: languages/states.php:3961
+msgid "Al Daayen"
+msgstr ""
+
+#: languages/states.php:3962
+msgid "Al Khor"
+msgstr ""
+
+#: languages/states.php:3963
+msgid "Al Rayyan Municipality"
+msgstr ""
+
+#: languages/states.php:3964
+msgid "Al Wakrah"
+msgstr ""
+
+#: languages/states.php:3965
+msgid "Al-Shahaniya"
+msgstr ""
+
+#: languages/states.php:3966
+msgid "Doha"
+msgstr ""
+
+#: languages/states.php:3967
+msgid "Madinat ash Shamal"
+msgstr ""
+
+#: languages/states.php:3968
+msgid "Umm Salal Municipality"
+msgstr ""
+
+#: languages/states.php:3972
+msgid "Alba"
+msgstr ""
+
+#: languages/states.php:3973
+msgid "Arad County"
+msgstr ""
+
+#: languages/states.php:3974
+msgid "Arges"
+msgstr ""
+
+#: languages/states.php:3975
+msgid "Bacău County"
+msgstr ""
+
+#: languages/states.php:3976
+msgid "Bihor County"
+msgstr ""
+
+#: languages/states.php:3977
+msgid "Bistrița-Năsăud County"
+msgstr ""
+
+#: languages/states.php:3978
+msgid "Botoșani County"
+msgstr ""
+
+#: languages/states.php:3979
+msgid "Braila"
+msgstr ""
+
+#: languages/states.php:3980
+msgid "Brașov County"
+msgstr ""
+
+#: languages/states.php:3981
+msgid "Bucharest"
+msgstr ""
+
+#: languages/states.php:3982
+msgid "Buzău County"
+msgstr ""
+
+#: languages/states.php:3983
+msgid "Caraș-Severin County"
+msgstr ""
+
+#: languages/states.php:3984
+msgid "Cluj County"
+msgstr ""
+
+#: languages/states.php:3985
+msgid "Constanța County"
+msgstr ""
+
+#: languages/states.php:3986
+msgid "Covasna County"
+msgstr ""
+
+#: languages/states.php:3987
+msgid "Călărași County"
+msgstr ""
+
+#: languages/states.php:3988
+msgid "Dolj County"
+msgstr ""
+
+#: languages/states.php:3989
+msgid "Dâmbovița County"
+msgstr ""
+
+#: languages/states.php:3990
+msgid "Galați County"
+msgstr ""
+
+#: languages/states.php:3991
+msgid "Giurgiu County"
+msgstr ""
+
+#: languages/states.php:3992
+msgid "Gorj County"
+msgstr ""
+
+#: languages/states.php:3993
+msgid "Harghita County"
+msgstr ""
+
+#: languages/states.php:3994
+msgid "Hunedoara County"
+msgstr ""
+
+#: languages/states.php:3995
+msgid "Ialomița County"
+msgstr ""
+
+#: languages/states.php:3996
+msgid "Iași County"
+msgstr ""
+
+#: languages/states.php:3997
+msgid "Ilfov County"
+msgstr ""
+
+#: languages/states.php:3998
+msgid "Maramureș County"
+msgstr ""
+
+#: languages/states.php:3999
+msgid "Mehedinți County"
+msgstr ""
+
+#: languages/states.php:4000
+msgid "Mureș County"
+msgstr ""
+
+#: languages/states.php:4001
+msgid "Neamț County"
+msgstr ""
+
+#: languages/states.php:4002
+msgid "Olt County"
+msgstr ""
+
+#: languages/states.php:4003
+msgid "Prahova County"
+msgstr ""
+
+#: languages/states.php:4004
+msgid "Satu Mare County"
+msgstr ""
+
+#: languages/states.php:4005
+msgid "Sibiu County"
+msgstr ""
+
+#: languages/states.php:4006
+msgid "Suceava County"
+msgstr ""
+
+#: languages/states.php:4007
+msgid "Sălaj County"
+msgstr ""
+
+#: languages/states.php:4008
+msgid "Teleorman County"
+msgstr ""
+
+#: languages/states.php:4009
+msgid "Timiș County"
+msgstr ""
+
+#: languages/states.php:4010
+msgid "Tulcea County"
+msgstr ""
+
+#: languages/states.php:4011
+msgid "Vaslui County"
+msgstr ""
+
+#: languages/states.php:4012
+msgid "Vrancea County"
+msgstr ""
+
+#: languages/states.php:4013
+msgid "Vâlcea County"
+msgstr ""
+
+#: languages/states.php:4016
+msgid "Podunavlje District"
+msgstr ""
+
+#: languages/states.php:4017
+msgid "Braničevo District"
+msgstr ""
+
+#: languages/states.php:4018
+msgid "Šumadija District"
+msgstr ""
+
+#: languages/states.php:4019
+msgid "Pomoravlje District"
+msgstr ""
+
+#: languages/states.php:4020
+msgid "Bor District"
+msgstr ""
+
+#: languages/states.php:4021
+msgid "Zaječar District"
+msgstr ""
+
+#: languages/states.php:4022
+msgid "Zlatibor District"
+msgstr ""
+
+#: languages/states.php:4023
+msgid "Moravica District"
+msgstr ""
+
+#: languages/states.php:4024
+msgid "Raška District"
+msgstr ""
+
+#: languages/states.php:4025
+msgid "Rasina District"
+msgstr ""
+
+#: languages/states.php:4026
+msgid "Nišava District"
+msgstr ""
+
+#: languages/states.php:4027
+msgid "Toplica District"
+msgstr ""
+
+#: languages/states.php:4028
+msgid "Pirot District"
+msgstr ""
+
+#: languages/states.php:4029
+msgid "Jablanica District"
+msgstr ""
+
+#: languages/states.php:4030
+msgid "Pčinja District"
+msgstr ""
+
+#: languages/states.php:4031
+msgid "Belgrade"
+msgstr ""
+
+#: languages/states.php:4032
+msgid "Central Banat District"
+msgstr ""
+
+#: languages/states.php:4033
+msgid "Kolubara District"
+msgstr ""
+
+#: languages/states.php:4034
+msgid "Mačva District"
+msgstr ""
+
+#: languages/states.php:4035
+msgid "North Banat District"
+msgstr ""
+
+#: languages/states.php:4036
+msgid "North Bačka District"
+msgstr ""
+
+#: languages/states.php:4037
+msgid "South Banat District"
+msgstr ""
+
+#: languages/states.php:4038
+msgid "South Bačka District"
+msgstr ""
+
+#: languages/states.php:4039
+msgid "Srem District"
+msgstr ""
+
+#: languages/states.php:4040
+msgid "Vojvodina"
+msgstr ""
+
+#: languages/states.php:4041
+msgid "West Bačka District"
+msgstr ""
+
+#: languages/states.php:4044
+msgid "Altai Krai"
+msgstr ""
+
+#: languages/states.php:4045
+msgid "Altai Republic"
+msgstr ""
+
+#: languages/states.php:4046
+msgid "Amur Oblast"
+msgstr ""
+
+#: languages/states.php:4047
+msgid "Arkhangelsk"
+msgstr ""
+
+#: languages/states.php:4048
+msgid "Astrakhan Oblast"
+msgstr ""
+
+#: languages/states.php:4049
+msgid "Belgorod Oblast"
+msgstr ""
+
+#: languages/states.php:4050
+msgid "Bryansk Oblast"
+msgstr ""
+
+#: languages/states.php:4051
+msgid "Chechen Republic"
+msgstr ""
+
+#: languages/states.php:4052
+msgid "Chelyabinsk Oblast"
+msgstr ""
+
+#: languages/states.php:4053
+msgid "Chukotka Autonomous Okrug"
+msgstr ""
+
+#: languages/states.php:4054
+msgid "Chuvash Republic"
+msgstr ""
+
+#: languages/states.php:4055
+msgid "Irkutsk"
+msgstr ""
+
+#: languages/states.php:4056
+msgid "Ivanovo Oblast"
+msgstr ""
+
+#: languages/states.php:4057
+msgid "Jewish Autonomous Oblast"
+msgstr ""
+
+#: languages/states.php:4058
+msgid "Kabardino-Balkar Republic"
+msgstr ""
+
+#: languages/states.php:4059
+msgid "Kaliningrad"
+msgstr ""
+
+#: languages/states.php:4060
+msgid "Kaluga Oblast"
+msgstr ""
+
+#: languages/states.php:4061
+msgid "Kamchatka Krai"
+msgstr ""
+
+#: languages/states.php:4062
+msgid "Karachay-Cherkess Republic"
+msgstr ""
+
+#: languages/states.php:4063
+msgid "Kemerovo Oblast"
+msgstr ""
+
+#: languages/states.php:4064
+msgid "Khabarovsk Krai"
+msgstr ""
+
+#: languages/states.php:4065
+msgid "Khanty-Mansi Autonomous Okrug"
+msgstr ""
+
+#: languages/states.php:4066
+msgid "Kirov Oblast"
+msgstr ""
+
+#: languages/states.php:4067
+msgid "Komi Republic"
+msgstr ""
+
+#: languages/states.php:4068
+msgid "Kostroma Oblast"
+msgstr ""
+
+#: languages/states.php:4069
+msgid "Krasnodar Krai"
+msgstr ""
+
+#: languages/states.php:4070
+msgid "Krasnoyarsk Krai"
+msgstr ""
+
+#: languages/states.php:4071
+msgid "Kurgan Oblast"
+msgstr ""
+
+#: languages/states.php:4072
+msgid "Kursk Oblast"
+msgstr ""
+
+#: languages/states.php:4073
+msgid "Leningrad Oblast"
+msgstr ""
+
+#: languages/states.php:4074
+msgid "Lipetsk Oblast"
+msgstr ""
+
+#: languages/states.php:4075
+msgid "Magadan Oblast"
+msgstr ""
+
+#: languages/states.php:4076
+msgid "Mari El Republic"
+msgstr ""
+
+#: languages/states.php:4077
+msgid "Moscow"
+msgstr ""
+
+#: languages/states.php:4078
+msgid "Moscow Oblast"
+msgstr ""
+
+#: languages/states.php:4079
+msgid "Murmansk Oblast"
+msgstr ""
+
+#: languages/states.php:4080
+msgid "Nenets Autonomous Okrug"
+msgstr ""
+
+#: languages/states.php:4081
+msgid "Nizhny Novgorod Oblast"
+msgstr ""
+
+#: languages/states.php:4082
+msgid "Novgorod Oblast"
+msgstr ""
+
+#: languages/states.php:4083
+msgid "Novosibirsk"
+msgstr ""
+
+#: languages/states.php:4084
+msgid "Omsk Oblast"
+msgstr ""
+
+#: languages/states.php:4085
+msgid "Orenburg Oblast"
+msgstr ""
+
+#: languages/states.php:4086
+msgid "Oryol Oblast"
+msgstr ""
+
+#: languages/states.php:4087
+msgid "Penza Oblast"
+msgstr ""
+
+#: languages/states.php:4088
+msgid "Perm Krai"
+msgstr ""
+
+#: languages/states.php:4089
+msgid "Primorsky Krai"
+msgstr ""
+
+#: languages/states.php:4090
+msgid "Pskov Oblast"
+msgstr ""
+
+#: languages/states.php:4091
+msgid "Republic of Adygea"
+msgstr ""
+
+#: languages/states.php:4092
+msgid "Republic of Bashkortostan"
+msgstr ""
+
+#: languages/states.php:4093
+msgid "Republic of Buryatia"
+msgstr ""
+
+#: languages/states.php:4094
+msgid "Republic of Dagestan"
+msgstr ""
+
+#: languages/states.php:4095
+msgid "Republic of Ingushetia"
+msgstr ""
+
+#: languages/states.php:4096
+msgid "Republic of Kalmykia"
+msgstr ""
+
+#: languages/states.php:4097
+msgid "Republic of Karelia"
+msgstr ""
+
+#: languages/states.php:4098
+msgid "Republic of Khakassia"
+msgstr ""
+
+#: languages/states.php:4099
+msgid "Republic of Mordovia"
+msgstr ""
+
+#: languages/states.php:4100
+msgid "Republic of North Ossetia-Alania"
+msgstr ""
+
+#: languages/states.php:4101
+msgid "Republic of Tatarstan"
+msgstr ""
+
+#: languages/states.php:4102
+msgid "Rostov Oblast"
+msgstr ""
+
+#: languages/states.php:4103
+msgid "Ryazan Oblast"
+msgstr ""
+
+#: languages/states.php:4104
+msgid "Saint Petersburg"
+msgstr ""
+
+#: languages/states.php:4105
+msgid "Sakha Republic"
+msgstr ""
+
+#: languages/states.php:4106
+msgid "Sakhalin"
+msgstr ""
+
+#: languages/states.php:4107
+msgid "Samara Oblast"
+msgstr ""
+
+#: languages/states.php:4108
+msgid "Saratov Oblast"
+msgstr ""
+
+#: languages/states.php:4109
+msgid "Sevastopol"
+msgstr ""
+
+#: languages/states.php:4110
+msgid "Smolensk Oblast"
+msgstr ""
+
+#: languages/states.php:4111
+msgid "Stavropol Krai"
+msgstr ""
+
+#: languages/states.php:4112
+msgid "Sverdlovsk"
+msgstr ""
+
+#: languages/states.php:4113
+msgid "Tambov Oblast"
+msgstr ""
+
+#: languages/states.php:4114
+msgid "Tomsk Oblast"
+msgstr ""
+
+#: languages/states.php:4115
+msgid "Tula Oblast"
+msgstr ""
+
+#: languages/states.php:4116
+msgid "Tuva Republic"
+msgstr ""
+
+#: languages/states.php:4117
+msgid "Tver Oblast"
+msgstr ""
+
+#: languages/states.php:4118
+msgid "Tyumen Oblast"
+msgstr ""
+
+#: languages/states.php:4119
+msgid "Udmurt Republic"
+msgstr ""
+
+#: languages/states.php:4120
+msgid "Ulyanovsk Oblast"
+msgstr ""
+
+#: languages/states.php:4121
+msgid "Vladimir Oblast"
+msgstr ""
+
+#: languages/states.php:4122
+msgid "Volgograd Oblast"
+msgstr ""
+
+#: languages/states.php:4123
+msgid "Vologda Oblast"
+msgstr ""
+
+#: languages/states.php:4124
+msgid "Voronezh Oblast"
+msgstr ""
+
+#: languages/states.php:4125
+msgid "Yamalo-Nenets Autonomous Okrug"
+msgstr ""
+
+#: languages/states.php:4126
+msgid "Yaroslavl Oblast"
+msgstr ""
+
+#: languages/states.php:4127
+msgid "Zabaykalsky Krai"
+msgstr ""
+
+#: languages/states.php:4131
+msgid "Kigali district"
+msgstr ""
+
+#: languages/states.php:4137
+msgid "Najran Region"
+msgstr ""
+
+#: languages/states.php:4138
+msgid "Al Bahah Region"
+msgstr ""
+
+#: languages/states.php:4139
+msgid "Al Jawf Region"
+msgstr ""
+
+#: languages/states.php:4140
+msgid "'Asir Region"
+msgstr ""
+
+#: languages/states.php:4141
+msgid "Al Madinah Region"
+msgstr ""
+
+#: languages/states.php:4142
+msgid "Al-Qassim Region"
+msgstr ""
+
+#: languages/states.php:4144
+msgid "Ha'il Region"
+msgstr ""
+
+#: languages/states.php:4145
+msgid "Jizan Region"
+msgstr ""
+
+#: languages/states.php:4146
+msgid "Makkah Region"
+msgstr ""
+
+#: languages/states.php:4147
+msgid "Northern Borders Region"
+msgstr ""
+
+#: languages/states.php:4148
+msgid "Riyadh Region"
+msgstr ""
+
+#: languages/states.php:4149
+msgid "Tabuk Region"
+msgstr ""
+
+#: languages/states.php:4153
+msgid "Choiseul Province"
+msgstr ""
+
+#: languages/states.php:4154
+msgid "Guadalcanal Province"
+msgstr ""
+
+#: languages/states.php:4155
+msgid "Honiara"
+msgstr ""
+
+#: languages/states.php:4156
+msgid "Isabel Province"
+msgstr ""
+
+#: languages/states.php:4157
+msgid "Makira-Ulawa Province"
+msgstr ""
+
+#: languages/states.php:4158
+msgid "Malaita Province"
+msgstr ""
+
+#: languages/states.php:4159
+msgid "Rennell and Bellona Province"
+msgstr ""
+
+#: languages/states.php:4160
+msgid "Temotu Province"
+msgstr ""
+
+#: languages/states.php:4164
+msgid "Bel Ombre"
+msgstr ""
+
+#: languages/states.php:4165
+msgid "Cascade"
+msgstr ""
+
+#: languages/states.php:4166
+msgid "Glacis"
+msgstr ""
+
+#: languages/states.php:4167
+msgid "Grand'Anse Mahé"
+msgstr ""
+
+#: languages/states.php:4168
+msgid "Grand'Anse Praslin"
+msgstr ""
+
+#: languages/states.php:4169
+msgid "La Digue"
+msgstr ""
+
+#: languages/states.php:4170
+msgid "La Rivière Anglaise"
+msgstr ""
+
+#: languages/states.php:4171
+msgid "Mont Buxton"
+msgstr ""
+
+#: languages/states.php:4172
+msgid "Mont Fleuri"
+msgstr ""
+
+#: languages/states.php:4173
+msgid "Plaisance"
+msgstr ""
+
+#: languages/states.php:4174
+msgid "Pointe La Rue"
+msgstr ""
+
+#: languages/states.php:4175
+msgid "Port Glaud"
+msgstr ""
+
+#: languages/states.php:4176
+msgid "Saint Louis"
+msgstr ""
+
+#: languages/states.php:4177
+msgid "Takamaka"
+msgstr ""
+
+#: languages/states.php:4178
+msgid "Les Mamelles"
+msgstr ""
+
+#: languages/states.php:4179
+msgid "Roche Caiman"
+msgstr ""
+
+#: languages/states.php:4180
+msgid "Anse Boileau"
+msgstr ""
+
+#: languages/states.php:4181
+msgid "Anse Royale"
+msgstr ""
+
+#: languages/states.php:4182
+msgid "Anse-aux-Pins"
+msgstr ""
+
+#: languages/states.php:4183
+msgid "Au Cap"
+msgstr ""
+
+#: languages/states.php:4184
+msgid "Baie Lazare"
+msgstr ""
+
+#: languages/states.php:4185
+msgid "Baie Sainte Anne"
+msgstr ""
+
+#: languages/states.php:4186
+msgid "Beau Vallon"
+msgstr ""
+
+#: languages/states.php:4187
+msgid "Bel Air"
+msgstr ""
+
+#: languages/states.php:4190
+msgid "Al Jazirah"
+msgstr ""
+
+#: languages/states.php:4191
+msgid "Al Qadarif"
+msgstr ""
+
+#: languages/states.php:4192
+msgid "Blue Nile"
+msgstr ""
+
+#: languages/states.php:4193
+msgid "Central Darfur"
+msgstr ""
+
+#: languages/states.php:4194
+msgid "East Darfur"
+msgstr ""
+
+#: languages/states.php:4195
+msgid "Kassala"
+msgstr ""
+
+#: languages/states.php:4196
+msgid "Khartoum"
+msgstr ""
+
+#: languages/states.php:4197
+msgid "North Darfur"
+msgstr ""
+
+#: languages/states.php:4198
+msgid "North Kordofan"
+msgstr ""
+
+#: languages/states.php:4199
+msgid "Northern"
+msgstr ""
+
+#: languages/states.php:4200
+msgid "Red Sea"
+msgstr ""
+
+#: languages/states.php:4201
+msgid "River Nile"
+msgstr ""
+
+#: languages/states.php:4202
+msgid "Sennar"
+msgstr ""
+
+#: languages/states.php:4203
+msgid "South Darfur"
+msgstr ""
+
+#: languages/states.php:4204
+msgid "South Kordofan"
+msgstr ""
+
+#: languages/states.php:4205
+msgid "West Darfur"
+msgstr ""
+
+#: languages/states.php:4206
+msgid "West Kordofan"
+msgstr ""
+
+#: languages/states.php:4207
+msgid "White Nile"
+msgstr ""
+
+#: languages/states.php:4210
+msgid "Blekinge"
+msgstr ""
+
+#: languages/states.php:4211
+msgid "Dalarna County"
+msgstr ""
+
+#: languages/states.php:4212
+msgid "Gotland County"
+msgstr ""
+
+#: languages/states.php:4213
+msgid "Gävleborg County"
+msgstr ""
+
+#: languages/states.php:4214
+msgid "Halland County"
+msgstr ""
+
+#: languages/states.php:4215
+msgid "Jönköping County"
+msgstr ""
+
+#: languages/states.php:4216
+msgid "Kalmar County"
+msgstr ""
+
+#: languages/states.php:4217
+msgid "Kronoberg County"
+msgstr ""
+
+#: languages/states.php:4218
+msgid "Norrbotten County"
+msgstr ""
+
+#: languages/states.php:4219
+msgid "Skåne County"
+msgstr ""
+
+#: languages/states.php:4220
+msgid "Stockholm County"
+msgstr ""
+
+#: languages/states.php:4221
+msgid "Södermanland County"
+msgstr ""
+
+#: languages/states.php:4222
+msgid "Uppsala County"
+msgstr ""
+
+#: languages/states.php:4223
+msgid "Värmland County"
+msgstr ""
+
+#: languages/states.php:4224
+msgid "Västerbotten County"
+msgstr ""
+
+#: languages/states.php:4225
+msgid "Västernorrland County"
+msgstr ""
+
+#: languages/states.php:4226
+msgid "Västmanland County"
+msgstr ""
+
+#: languages/states.php:4227
+msgid "Västra Götaland County"
+msgstr ""
+
+#: languages/states.php:4228
+msgid "Örebro County"
+msgstr ""
+
+#: languages/states.php:4229
+msgid "Östergötland County"
+msgstr ""
+
+#: languages/states.php:4232
+msgid "Central Singapore Community Development Council"
+msgstr ""
+
+#: languages/states.php:4233
+msgid "North East Community Development Council"
+msgstr ""
+
+#: languages/states.php:4234
+msgid "North West Community Development Council"
+msgstr ""
+
+#: languages/states.php:4235
+msgid "South East Community Development Council"
+msgstr ""
+
+#: languages/states.php:4236
+msgid "South West Community Development Council"
+msgstr ""
+
+#: languages/states.php:4240
+msgid "Radenci Municipality"
+msgstr ""
+
+#: languages/states.php:4241
+msgid "Radlje ob Dravi Municipality"
+msgstr ""
+
+#: languages/states.php:4242
+msgid "Radovljica Municipality"
+msgstr ""
+
+#: languages/states.php:4243
+msgid "Ravne na Koroškem Municipality"
+msgstr ""
+
+#: languages/states.php:4244
+msgid "Ribnica Municipality"
+msgstr ""
+
+#: languages/states.php:4245
+msgid "Rogašovci Municipality"
+msgstr ""
+
+#: languages/states.php:4246
+msgid "Rogaška Slatina Municipality"
+msgstr ""
+
+#: languages/states.php:4247
+msgid "Rogatec Municipality"
+msgstr ""
+
+#: languages/states.php:4248
+msgid "Ruše Municipality"
+msgstr ""
+
+#: languages/states.php:4249
+msgid "Semič Municipality"
+msgstr ""
+
+#: languages/states.php:4250
+msgid "Sevnica Municipality"
+msgstr ""
+
+#: languages/states.php:4251
+msgid "Sežana Municipality"
+msgstr ""
+
+#: languages/states.php:4252
+msgid "Slovenj Gradec City Municipality"
+msgstr ""
+
+#: languages/states.php:4253
+msgid "Slovenska Bistrica Municipality"
+msgstr ""
+
+#: languages/states.php:4254
+msgid "Slovenske Konjice Municipality"
+msgstr ""
+
+#: languages/states.php:4255
+msgid "Starše Municipality"
+msgstr ""
+
+#: languages/states.php:4256
+msgid "Sveti Jurij ob Ščavnici Municipality"
+msgstr ""
+
+#: languages/states.php:4257
+msgid "Šenčur Municipality"
+msgstr ""
+
+#: languages/states.php:4258
+msgid "Šentilj Municipality"
+msgstr ""
+
+#: languages/states.php:4259
+msgid "Šentjernej Municipality"
+msgstr ""
+
+#: languages/states.php:4260
+msgid "Šentjur Municipality"
+msgstr ""
+
+#: languages/states.php:4261
+msgid "Škocjan Municipality"
+msgstr ""
+
+#: languages/states.php:4262
+msgid "Škofja Loka Municipality"
+msgstr ""
+
+#: languages/states.php:4263
+msgid "Municipality of Škofljica"
+msgstr ""
+
+#: languages/states.php:4264
+msgid "Šmarje pri Jelšah Municipality"
+msgstr ""
+
+#: languages/states.php:4265
+msgid "Šmartno ob Paki Municipality"
+msgstr ""
+
+#: languages/states.php:4266
+msgid "Šoštanj Municipality"
+msgstr ""
+
+#: languages/states.php:4267
+msgid "Štore Municipality"
+msgstr ""
+
+#: languages/states.php:4268
+msgid "Tolmin Municipality"
+msgstr ""
+
+#: languages/states.php:4269
+msgid "Trbovlje Municipality"
+msgstr ""
+
+#: languages/states.php:4270
+msgid "Trebnje Municipality"
+msgstr ""
+
+#: languages/states.php:4271
+msgid "Tržič Municipality"
+msgstr ""
+
+#: languages/states.php:4272
+msgid "Turnišče Municipality"
+msgstr ""
+
+#: languages/states.php:4273
+msgid "Velike Lašče Municipality"
+msgstr ""
+
+#: languages/states.php:4274
+msgid "Videm Municipality"
+msgstr ""
+
+#: languages/states.php:4275
+msgid "Vipava Municipality"
+msgstr ""
+
+#: languages/states.php:4276
+msgid "Vitanje Municipality"
+msgstr ""
+
+#: languages/states.php:4277
+msgid "Vodice Municipality"
+msgstr ""
+
+#: languages/states.php:4278
+msgid "Vojnik Municipality"
+msgstr ""
+
+#: languages/states.php:4279
+msgid "Vrhnika Municipality"
+msgstr ""
+
+#: languages/states.php:4280
+msgid "Vuzenica Municipality"
+msgstr ""
+
+#: languages/states.php:4281
+msgid "Zagorje ob Savi Municipality"
+msgstr ""
+
+#: languages/states.php:4282
+msgid "Zavrč Municipality"
+msgstr ""
+
+#: languages/states.php:4283
+msgid "Zreče Municipality"
+msgstr ""
+
+#: languages/states.php:4284
+msgid "Železniki Municipality"
+msgstr ""
+
+#: languages/states.php:4285
+msgid "Žiri Municipality"
+msgstr ""
+
+#: languages/states.php:4286
+msgid "Benedikt Municipality"
+msgstr ""
+
+#: languages/states.php:4287
+msgid "Bistrica ob Sotli Municipality"
+msgstr ""
+
+#: languages/states.php:4288
+msgid "Bloke Municipality"
+msgstr ""
+
+#: languages/states.php:4289
+msgid "Braslovče Municipality"
+msgstr ""
+
+#: languages/states.php:4290
+msgid "Cankova Municipality"
+msgstr ""
+
+#: languages/states.php:4291
+msgid "Cerkvenjak Municipality"
+msgstr ""
+
+#: languages/states.php:4292
+msgid "Dobje Municipality"
+msgstr ""
+
+#: languages/states.php:4293
+msgid "Dobrna Municipality"
+msgstr ""
+
+#: languages/states.php:4294
+msgid "Dobrovnik Municipality"
+msgstr ""
+
+#: languages/states.php:4295
+msgid "Dolenjske Toplice Municipality"
+msgstr ""
+
+#: languages/states.php:4296
+msgid "Grad Municipality"
+msgstr ""
+
+#: languages/states.php:4297
+msgid "Hajdina Municipality"
+msgstr ""
+
+#: languages/states.php:4298
+msgid "Hoče–Slivnica Municipality"
+msgstr ""
+
+#: languages/states.php:4299
+msgid "Hodoš Municipality"
+msgstr ""
+
+#: languages/states.php:4300
+msgid "Horjul Municipality"
+msgstr ""
+
+#: languages/states.php:4301
+msgid "Jezersko Municipality"
+msgstr ""
+
+#: languages/states.php:4302
+msgid "Komenda Municipality"
+msgstr ""
+
+#: languages/states.php:4303
+msgid "Kostel Municipality"
+msgstr ""
+
+#: languages/states.php:4304
+msgid "Križevci Municipality"
+msgstr ""
+
+#: languages/states.php:4305
+msgid "Lovrenc na Pohorju Municipality"
+msgstr ""
+
+#: languages/states.php:4306
+msgid "Markovci Municipality"
+msgstr ""
+
+#: languages/states.php:4307
+msgid "Miklavž na Dravskem Polju Municipality"
+msgstr ""
+
+#: languages/states.php:4308
+msgid "Mirna Peč Municipality"
+msgstr ""
+
+#: languages/states.php:4309
+msgid "Oplotnica"
+msgstr ""
+
+#: languages/states.php:4310
+msgid "Podlehnik Municipality"
+msgstr ""
+
+#: languages/states.php:4311
+msgid "Polzela Municipality"
+msgstr ""
+
+#: languages/states.php:4312
+msgid "Prebold Municipality"
+msgstr ""
+
+#: languages/states.php:4313
+msgid "Prevalje Municipality"
+msgstr ""
+
+#: languages/states.php:4314
+msgid "Razkrižje Municipality"
+msgstr ""
+
+#: languages/states.php:4315
+msgid "Ribnica na Pohorju Municipality"
+msgstr ""
+
+#: languages/states.php:4316
+msgid "Selnica ob Dravi Municipality"
+msgstr ""
+
+#: languages/states.php:4317
+msgid "Sodražica Municipality"
+msgstr ""
+
+#: languages/states.php:4318
+msgid "Solčava Municipality"
+msgstr ""
+
+#: languages/states.php:4319
+msgid "Sveta Ana Municipality"
+msgstr ""
+
+#: languages/states.php:4320
+msgid "Sveti Andraž v Slovenskih Goricah Municipality"
+msgstr ""
+
+#: languages/states.php:4321
+msgid "Šempeter–Vrtojba Municipality"
+msgstr ""
+
+#: languages/states.php:4322
+msgid "Tabor Municipality"
+msgstr ""
+
+#: languages/states.php:4323
+msgid "Trnovska Vas Municipality"
+msgstr ""
+
+#: languages/states.php:4324
+msgid "Trzin Municipality"
+msgstr ""
+
+#: languages/states.php:4325
+msgid "Velika Polana Municipality"
+msgstr ""
+
+#: languages/states.php:4326
+msgid "Veržej Municipality"
+msgstr ""
+
+#: languages/states.php:4327
+msgid "Vransko Municipality"
+msgstr ""
+
+#: languages/states.php:4328
+msgid "Žalec Municipality"
+msgstr ""
+
+#: languages/states.php:4329
+msgid "Žetale Municipality"
+msgstr ""
+
+#: languages/states.php:4330
+msgid "Žirovnica Municipality"
+msgstr ""
+
+#: languages/states.php:4331
+msgid "Žužemberk Municipality"
+msgstr ""
+
+#: languages/states.php:4332
+msgid "Šmartno pri Litiji Municipality"
+msgstr ""
+
+#: languages/states.php:4333
+msgid "Municipality of Apače"
+msgstr ""
+
+#: languages/states.php:4334
+msgid "Municipality of Cirkulane"
+msgstr ""
+
+#: languages/states.php:4335
+msgid "Kostanjevica na Krki Municipality"
+msgstr ""
+
+#: languages/states.php:4336
+msgid "Makole Municipality"
+msgstr ""
+
+#: languages/states.php:4337
+msgid "Mokronog–Trebelno Municipality"
+msgstr ""
+
+#: languages/states.php:4338
+msgid "Poljčane Municipality"
+msgstr ""
+
+#: languages/states.php:4339
+msgid "Renče–Vogrsko Municipality"
+msgstr ""
+
+#: languages/states.php:4340
+msgid "Središče ob Dravi"
+msgstr ""
+
+#: languages/states.php:4341
+msgid "Straža Municipality"
+msgstr ""
+
+#: languages/states.php:4342
+msgid "Sveta Trojica v Slovenskih Goricah Municipality"
+msgstr ""
+
+#: languages/states.php:4343
+msgid "Sveti Tomaž Municipality"
+msgstr ""
+
+#: languages/states.php:4344
+msgid "Šmarješke Toplice Municipality"
+msgstr ""
+
+#: languages/states.php:4345
+msgid "Gorje Municipality"
+msgstr ""
+
+#: languages/states.php:4346
+msgid "Log–Dragomer Municipality"
+msgstr ""
+
+#: languages/states.php:4347
+msgid "Rečica ob Savinji Municipality"
+msgstr ""
+
+#: languages/states.php:4348
+msgid "Sveti Jurij v Slovenskih Goricah Municipality"
+msgstr ""
+
+#: languages/states.php:4349
+msgid "Šentrupert Municipality"
+msgstr ""
+
+#: languages/states.php:4350
+msgid "Mirna Municipality"
+msgstr ""
+
+#: languages/states.php:4351
+msgid "Ankaran Municipality"
+msgstr ""
+
+#: languages/states.php:4352
+msgid "Ajdovščina Municipality"
+msgstr ""
+
+#: languages/states.php:4353
+msgid "Beltinci Municipality"
+msgstr ""
+
+#: languages/states.php:4354
+msgid "Bled Municipality"
+msgstr ""
+
+#: languages/states.php:4355
+msgid "Bohinj Municipality"
+msgstr ""
+
+#: languages/states.php:4356
+msgid "Borovnica Municipality"
+msgstr ""
+
+#: languages/states.php:4357
+msgid "Bovec Municipality"
+msgstr ""
+
+#: languages/states.php:4358
+msgid "Brda Municipality"
+msgstr ""
+
+#: languages/states.php:4359
+msgid "Brezovica Municipality"
+msgstr ""
+
+#: languages/states.php:4360
+msgid "Brežice Municipality"
+msgstr ""
+
+#: languages/states.php:4361
+msgid "Cerklje na Gorenjskem Municipality"
+msgstr ""
+
+#: languages/states.php:4362
+msgid "Cerknica Municipality"
+msgstr ""
+
+#: languages/states.php:4363
+msgid "Cerkno Municipality"
+msgstr ""
+
+#: languages/states.php:4364
+msgid "City Municipality of Celje"
+msgstr ""
+
+#: languages/states.php:4365
+msgid "City Municipality of Novo Mesto"
+msgstr ""
+
+#: languages/states.php:4366
+msgid "Destrnik Municipality"
+msgstr ""
+
+#: languages/states.php:4367
+msgid "Divača Municipality"
+msgstr ""
+
+#: languages/states.php:4368
+msgid "Dobrepolje Municipality"
+msgstr ""
+
+#: languages/states.php:4369
+msgid "Dobrova–Polhov Gradec Municipality"
+msgstr ""
+
+#: languages/states.php:4370
+msgid "Dol pri Ljubljani Municipality"
+msgstr ""
+
+#: languages/states.php:4371
+msgid "Domžale Municipality"
+msgstr ""
+
+#: languages/states.php:4372
+msgid "Dornava Municipality"
+msgstr ""
+
+#: languages/states.php:4373
+msgid "Dravograd Municipality"
+msgstr ""
+
+#: languages/states.php:4374
+msgid "Duplek Municipality"
+msgstr ""
+
+#: languages/states.php:4375
+msgid "Gorenja Vas–Poljane Municipality"
+msgstr ""
+
+#: languages/states.php:4376
+msgid "Gorišnica Municipality"
+msgstr ""
+
+#: languages/states.php:4377
+msgid "Gornja Radgona Municipality"
+msgstr ""
+
+#: languages/states.php:4378
+msgid "Gornji Grad Municipality"
+msgstr ""
+
+#: languages/states.php:4379
+msgid "Gornji Petrovci Municipality"
+msgstr ""
+
+#: languages/states.php:4380
+msgid "Grosuplje Municipality"
+msgstr ""
+
+#: languages/states.php:4381
+msgid "Hrastnik Municipality"
+msgstr ""
+
+#: languages/states.php:4382
+msgid "Hrpelje–Kozina Municipality"
+msgstr ""
+
+#: languages/states.php:4383
+msgid "Idrija Municipality"
+msgstr ""
+
+#: languages/states.php:4384
+msgid "Ig Municipality"
+msgstr ""
+
+#: languages/states.php:4385
+msgid "Ivančna Gorica Municipality"
+msgstr ""
+
+#: languages/states.php:4386
+msgid "Izola Municipality"
+msgstr ""
+
+#: languages/states.php:4387
+msgid "Jesenice Municipality"
+msgstr ""
+
+#: languages/states.php:4388
+msgid "Juršinci Municipality"
+msgstr ""
+
+#: languages/states.php:4389
+msgid "Kamnik Municipality"
+msgstr ""
+
+#: languages/states.php:4390
+msgid "Kanal ob Soči Municipality"
+msgstr ""
+
+#: languages/states.php:4391
+msgid "Kidričevo Municipality"
+msgstr ""
+
+#: languages/states.php:4392
+msgid "Kobarid Municipality"
+msgstr ""
+
+#: languages/states.php:4393
+msgid "Kobilje Municipality"
+msgstr ""
+
+#: languages/states.php:4394
+msgid "Komen Municipality"
+msgstr ""
+
+#: languages/states.php:4395
+msgid "Koper City Municipality"
+msgstr ""
+
+#: languages/states.php:4396
+msgid "Kozje Municipality"
+msgstr ""
+
+#: languages/states.php:4397
+msgid "Kočevje Municipality"
+msgstr ""
+
+#: languages/states.php:4398
+msgid "Kranj City Municipality"
+msgstr ""
+
+#: languages/states.php:4399
+msgid "Kranjska Gora Municipality"
+msgstr ""
+
+#: languages/states.php:4400
+msgid "Kungota"
+msgstr ""
+
+#: languages/states.php:4401
+msgid "Kuzma Municipality"
+msgstr ""
+
+#: languages/states.php:4402
+msgid "Laško Municipality"
+msgstr ""
+
+#: languages/states.php:4403
+msgid "Lenart Municipality"
+msgstr ""
+
+#: languages/states.php:4404
+msgid "Lendava Municipality"
+msgstr ""
+
+#: languages/states.php:4405
+msgid "Litija Municipality"
+msgstr ""
+
+#: languages/states.php:4406
+msgid "Ljubljana City Municipality"
+msgstr ""
+
+#: languages/states.php:4407
+msgid "Ljubno Municipality"
+msgstr ""
+
+#: languages/states.php:4408
+msgid "Ljutomer Municipality"
+msgstr ""
+
+#: languages/states.php:4409
+msgid "Logatec Municipality"
+msgstr ""
+
+#: languages/states.php:4410
+msgid "Loška Dolina Municipality"
+msgstr ""
+
+#: languages/states.php:4411
+msgid "Loški Potok Municipality"
+msgstr ""
+
+#: languages/states.php:4412
+msgid "Lukovica Municipality"
+msgstr ""
+
+#: languages/states.php:4413
+msgid "Luče Municipality"
+msgstr ""
+
+#: languages/states.php:4414
+msgid "Majšperk Municipality"
+msgstr ""
+
+#: languages/states.php:4415
+msgid "Maribor City Municipality"
+msgstr ""
+
+#: languages/states.php:4416
+msgid "Medvode Municipality"
+msgstr ""
+
+#: languages/states.php:4417
+msgid "Mengeš Municipality"
+msgstr ""
+
+#: languages/states.php:4418
+msgid "Metlika Municipality"
+msgstr ""
+
+#: languages/states.php:4419
+msgid "Mežica Municipality"
+msgstr ""
+
+#: languages/states.php:4420
+msgid "Miren–Kostanjevica Municipality"
+msgstr ""
+
+#: languages/states.php:4421
+msgid "Mislinja Municipality"
+msgstr ""
+
+#: languages/states.php:4422
+msgid "Moravske Toplice Municipality"
+msgstr ""
+
+#: languages/states.php:4423
+msgid "Moravče Municipality"
+msgstr ""
+
+#: languages/states.php:4424
+msgid "Mozirje Municipality"
+msgstr ""
+
+#: languages/states.php:4425
+msgid "Municipality of Ilirska Bistrica"
+msgstr ""
+
+#: languages/states.php:4426
+msgid "Municipality of Krško"
+msgstr ""
+
+#: languages/states.php:4427
+msgid "Murska Sobota City Municipality"
+msgstr ""
+
+#: languages/states.php:4428
+msgid "Muta Municipality"
+msgstr ""
+
+#: languages/states.php:4429
+msgid "Naklo Municipality"
+msgstr ""
+
+#: languages/states.php:4430
+msgid "Nazarje Municipality"
+msgstr ""
+
+#: languages/states.php:4431
+msgid "Nova Gorica City Municipality"
+msgstr ""
+
+#: languages/states.php:4432
+msgid "Odranci Municipality"
+msgstr ""
+
+#: languages/states.php:4433
+msgid "Ormož Municipality"
+msgstr ""
+
+#: languages/states.php:4434
+msgid "Osilnica Municipality"
+msgstr ""
+
+#: languages/states.php:4435
+msgid "Pesnica Municipality"
+msgstr ""
+
+#: languages/states.php:4436
+msgid "Piran Municipality"
+msgstr ""
+
+#: languages/states.php:4437
+msgid "Pivka Municipality"
+msgstr ""
+
+#: languages/states.php:4438
+msgid "Podvelka Municipality"
+msgstr ""
+
+#: languages/states.php:4439
+msgid "Podčetrtek Municipality"
+msgstr ""
+
+#: languages/states.php:4440
+msgid "Postojna Municipality"
+msgstr ""
+
+#: languages/states.php:4441
+msgid "Preddvor Municipality"
+msgstr ""
+
+#: languages/states.php:4442
+msgid "Ptuj City Municipality"
+msgstr ""
+
+#: languages/states.php:4443
+msgid "Puconci Municipality"
+msgstr ""
+
+#: languages/states.php:4444
+msgid "Radeče Municipality"
+msgstr ""
+
+#: languages/states.php:4445
+msgid "Rače–Fram Municipality"
+msgstr ""
+
+#: languages/states.php:4446
+msgid "Tišina Municipality"
+msgstr ""
+
+#: languages/states.php:4447
+msgid "Črenšovci Municipality"
+msgstr ""
+
+#: languages/states.php:4448
+msgid "Črna na Koroškem Municipality"
+msgstr ""
+
+#: languages/states.php:4449
+msgid "Črnomelj Municipality"
+msgstr ""
+
+#: languages/states.php:4450
+msgid "Šalovci Municipality"
+msgstr ""
+
+#: languages/states.php:4454
+msgid "Banská Bystrica Region"
+msgstr ""
+
+#: languages/states.php:4455
+msgid "Bratislava Region"
+msgstr ""
+
+#: languages/states.php:4456
+msgid "Košice Region"
+msgstr ""
+
+#: languages/states.php:4457
+msgid "Nitra Region"
+msgstr ""
+
+#: languages/states.php:4458
+msgid "Prešov Region"
+msgstr ""
+
+#: languages/states.php:4459
+msgid "Trenčín Region"
+msgstr ""
+
+#: languages/states.php:4460
+msgid "Trnava Region"
+msgstr ""
+
+#: languages/states.php:4461
+msgid "Žilina Region"
+msgstr ""
+
+#: languages/states.php:4467
+msgid "Western Area"
+msgstr ""
+
+#: languages/states.php:4470
+msgid "Acquaviva"
+msgstr ""
+
+#: languages/states.php:4471
+msgid "Borgo Maggiore"
+msgstr ""
+
+#: languages/states.php:4472
+msgid "Chiesanuova"
+msgstr ""
+
+#: languages/states.php:4473
+msgid "Domagnano"
+msgstr ""
+
+#: languages/states.php:4474
+msgid "Faetano"
+msgstr ""
+
+#: languages/states.php:4475
+msgid "Fiorentino"
+msgstr ""
+
+#: languages/states.php:4476
+msgid "Montegiardino"
+msgstr ""
+
+#: languages/states.php:4478
+msgid "Serravalle"
+msgstr ""
+
+#: languages/states.php:4481
+msgid "Dakar"
+msgstr ""
+
+#: languages/states.php:4482
+msgid "Diourbel Region"
+msgstr ""
+
+#: languages/states.php:4483
+msgid "Fatick"
+msgstr ""
+
+#: languages/states.php:4484
+msgid "Kaffrine"
+msgstr ""
+
+#: languages/states.php:4485
+msgid "Kaolack"
+msgstr ""
+
+#: languages/states.php:4486
+msgid "Kolda"
+msgstr ""
+
+#: languages/states.php:4487
+msgid "Kédougou"
+msgstr ""
+
+#: languages/states.php:4488
+msgid "Louga"
+msgstr ""
+
+#: languages/states.php:4489
+msgid "Matam"
+msgstr ""
+
+#: languages/states.php:4490
+msgid "Saint-Louis"
+msgstr ""
+
+#: languages/states.php:4491
+msgid "Sédhiou"
+msgstr ""
+
+#: languages/states.php:4492
+msgid "Tambacounda Region"
+msgstr ""
+
+#: languages/states.php:4493
+msgid "Thiès Region"
+msgstr ""
+
+#: languages/states.php:4494
+msgid "Ziguinchor"
+msgstr ""
+
+#: languages/states.php:4497
+msgid "Awdal Region"
+msgstr ""
+
+#: languages/states.php:4498
+msgid "Bakool"
+msgstr ""
+
+#: languages/states.php:4499
+msgid "Banaadir"
+msgstr ""
+
+#: languages/states.php:4501
+msgid "Bay"
+msgstr ""
+
+#: languages/states.php:4502
+msgid "Galguduud"
+msgstr ""
+
+#: languages/states.php:4503
+msgid "Gedo"
+msgstr ""
+
+#: languages/states.php:4504
+msgid "Hiran"
+msgstr ""
+
+#: languages/states.php:4505
+msgid "Lower Juba"
+msgstr ""
+
+#: languages/states.php:4506
+msgid "Lower Shebelle"
+msgstr ""
+
+#: languages/states.php:4507
+msgid "Middle Juba"
+msgstr ""
+
+#: languages/states.php:4508
+msgid "Middle Shebelle"
+msgstr ""
+
+#: languages/states.php:4509
+msgid "Mudug"
+msgstr ""
+
+#: languages/states.php:4510
+msgid "Nugal"
+msgstr ""
+
+#: languages/states.php:4511
+msgid "Sanaag Region"
+msgstr ""
+
+#: languages/states.php:4512
+msgid "Togdheer Region"
+msgstr ""
+
+#: languages/states.php:4515
+msgid "Brokopondo District"
+msgstr ""
+
+#: languages/states.php:4516
+msgid "Commewijne District"
+msgstr ""
+
+#: languages/states.php:4517
+msgid "Coronie District"
+msgstr ""
+
+#: languages/states.php:4518
+msgid "Marowijne District"
+msgstr ""
+
+#: languages/states.php:4519
+msgid "Nickerie District"
+msgstr ""
+
+#: languages/states.php:4520
+msgid "Para District"
+msgstr ""
+
+#: languages/states.php:4521
+msgid "Paramaribo District"
+msgstr ""
+
+#: languages/states.php:4522
+msgid "Saramacca District"
+msgstr ""
+
+#: languages/states.php:4523
+msgid "Sipaliwini District"
+msgstr ""
+
+#: languages/states.php:4524
+msgid "Wanica District"
+msgstr ""
+
+#: languages/states.php:4527
+msgid "Central Equatoria"
+msgstr ""
+
+#: languages/states.php:4528
+msgid "Eastern Equatoria"
+msgstr ""
+
+#: languages/states.php:4529
+msgid "Jonglei State"
+msgstr ""
+
+#: languages/states.php:4530
+msgid "Lakes"
+msgstr ""
+
+#: languages/states.php:4531
+msgid "Northern Bahr el Ghazal"
+msgstr ""
+
+#: languages/states.php:4532
+msgid "Unity"
+msgstr ""
+
+#: languages/states.php:4533
+msgid "Upper Nile"
+msgstr ""
+
+#: languages/states.php:4534
+msgid "Warrap"
+msgstr ""
+
+#: languages/states.php:4535
+msgid "Western Bahr el Ghazal"
+msgstr ""
+
+#: languages/states.php:4536
+msgid "Western Equatoria"
+msgstr ""
+
+#: languages/states.php:4539
+msgid "Príncipe Province"
+msgstr ""
+
+#: languages/states.php:4540
+msgid "São Tomé Province"
+msgstr ""
+
+#: languages/states.php:4543
+msgid "Ahuachapán Department"
+msgstr ""
+
+#: languages/states.php:4544
+msgid "Cabañas Department"
+msgstr ""
+
+#: languages/states.php:4545
+msgid "Chalatenango Department"
+msgstr ""
+
+#: languages/states.php:4546
+msgid "Cuscatlán Department"
+msgstr ""
+
+#: languages/states.php:4547
+msgid "La Libertad Department"
+msgstr ""
+
+#: languages/states.php:4549
+msgid "La Unión Department"
+msgstr ""
+
+#: languages/states.php:4550
+msgid "Morazán Department"
+msgstr ""
+
+#: languages/states.php:4551
+msgid "San Miguel Department"
+msgstr ""
+
+#: languages/states.php:4552
+msgid "San Salvador Department"
+msgstr ""
+
+#: languages/states.php:4553
+msgid "San Vicente Department"
+msgstr ""
+
+#: languages/states.php:4554
+msgid "Santa Ana Department"
+msgstr ""
+
+#: languages/states.php:4555
+msgid "Sonsonate Department"
+msgstr ""
+
+#: languages/states.php:4556
+msgid "Usulután Department"
+msgstr ""
+
+#: languages/states.php:4560
+msgid "Al-Hasakah Governorate"
+msgstr ""
+
+#: languages/states.php:4561
+msgid "Al-Raqqah Governorate"
+msgstr ""
+
+#: languages/states.php:4562
+msgid "Aleppo Governorate"
+msgstr ""
+
+#: languages/states.php:4563
+msgid "As-Suwayda Governorate"
+msgstr ""
+
+#: languages/states.php:4564
+msgid "Damascus Governorate"
+msgstr ""
+
+#: languages/states.php:4565
+msgid "Daraa Governorate"
+msgstr ""
+
+#: languages/states.php:4566
+msgid "Deir ez-Zor Governorate"
+msgstr ""
+
+#: languages/states.php:4567
+msgid "Hama Governorate"
+msgstr ""
+
+#: languages/states.php:4568
+msgid "Homs Governorate"
+msgstr ""
+
+#: languages/states.php:4569
+msgid "Idlib Governorate"
+msgstr ""
+
+#: languages/states.php:4570
+msgid "Latakia Governorate"
+msgstr ""
+
+#: languages/states.php:4571
+msgid "Quneitra Governorate"
+msgstr ""
+
+#: languages/states.php:4572
+msgid "Rif Dimashq Governorate"
+msgstr ""
+
+#: languages/states.php:4573
+msgid "Tartus Governorate"
+msgstr ""
+
+#: languages/states.php:4576
+msgid "Hhohho District"
+msgstr ""
+
+#: languages/states.php:4577
+msgid "Lubombo District"
+msgstr ""
+
+#: languages/states.php:4578
+msgid "Manzini District"
+msgstr ""
+
+#: languages/states.php:4579
+msgid "Shiselweni District"
+msgstr ""
+
+#: languages/states.php:4583
+msgid "Bahr el Gazel"
+msgstr ""
+
+#: languages/states.php:4584
+msgid "Batha Region"
+msgstr ""
+
+#: languages/states.php:4585
+msgid "Borkou"
+msgstr ""
+
+#: languages/states.php:4586
+msgid "Ennedi Region"
+msgstr ""
+
+#: languages/states.php:4587
+msgid "Ennedi-Est"
+msgstr ""
+
+#: languages/states.php:4588
+msgid "Ennedi-Ouest"
+msgstr ""
+
+#: languages/states.php:4589
+msgid "Guéra Region"
+msgstr ""
+
+#: languages/states.php:4590
+msgid "Hadjer-Lamis"
+msgstr ""
+
+#: languages/states.php:4591
+msgid "Kanem Region"
+msgstr ""
+
+#: languages/states.php:4592
+msgid "Lac Region"
+msgstr ""
+
+#: languages/states.php:4593
+msgid "Logone Occidental Region"
+msgstr ""
+
+#: languages/states.php:4594
+msgid "Logone Oriental Region"
+msgstr ""
+
+#: languages/states.php:4595
+msgid "Mandoul Region"
+msgstr ""
+
+#: languages/states.php:4596
+msgid "Mayo-Kebbi Est Region"
+msgstr ""
+
+#: languages/states.php:4597
+msgid "Mayo-Kebbi Ouest Region"
+msgstr ""
+
+#: languages/states.php:4598
+msgid "Moyen-Chari Region"
+msgstr ""
+
+#: languages/states.php:4599
+msgid "N'Djamena"
+msgstr ""
+
+#: languages/states.php:4600
+msgid "Ouaddaï Region"
+msgstr ""
+
+#: languages/states.php:4601
+msgid "Salamat Region"
+msgstr ""
+
+#: languages/states.php:4602
+msgid "Sila Region"
+msgstr ""
+
+#: languages/states.php:4603
+msgid "Tandjilé Region"
+msgstr ""
+
+#: languages/states.php:4604
+msgid "Tibesti Region"
+msgstr ""
+
+#: languages/states.php:4605
+msgid "Wadi Fira Region"
+msgstr ""
+
+#: languages/states.php:4609
+msgid "Centrale Region"
+msgstr ""
+
+#: languages/states.php:4610
+msgid "Kara Region"
+msgstr ""
+
+#: languages/states.php:4611
+msgid "Maritime"
+msgstr ""
+
+#: languages/states.php:4612
+msgid "Plateaux Region"
+msgstr ""
+
+#: languages/states.php:4616
+msgid "Bangkok"
+msgstr ""
+
+#: languages/states.php:4617
+msgid "Samut Prakan"
+msgstr ""
+
+#: languages/states.php:4618
+msgid "Nonthaburi"
+msgstr ""
+
+#: languages/states.php:4619
+msgid "Pathum Thani"
+msgstr ""
+
+#: languages/states.php:4620
+msgid "Phra Nakhon Si Ayutthaya"
+msgstr ""
+
+#: languages/states.php:4621
+msgid "Ang Thong"
+msgstr ""
+
+#: languages/states.php:4622
+msgid "Lopburi"
+msgstr ""
+
+#: languages/states.php:4623
+msgid "Sing Buri"
+msgstr ""
+
+#: languages/states.php:4624
+msgid "Chai Nat"
+msgstr ""
+
+#: languages/states.php:4625
+msgid "Saraburi"
+msgstr ""
+
+#: languages/states.php:4626
+msgid "Chon Buri"
+msgstr ""
+
+#: languages/states.php:4627
+msgid "Rayong"
+msgstr ""
+
+#: languages/states.php:4628
+msgid "Chanthaburi"
+msgstr ""
+
+#: languages/states.php:4629
+msgid "Trat"
+msgstr ""
+
+#: languages/states.php:4630
+msgid "Chachoengsao"
+msgstr ""
+
+#: languages/states.php:4631
+msgid "Prachin Buri"
+msgstr ""
+
+#: languages/states.php:4632
+msgid "Nakhon Nayok"
+msgstr ""
+
+#: languages/states.php:4633
+msgid "Sa Kaeo"
+msgstr ""
+
+#: languages/states.php:4634
+msgid "Nakhon Ratchasima"
+msgstr ""
+
+#: languages/states.php:4635
+msgid "Buri Ram"
+msgstr ""
+
+#: languages/states.php:4636
+msgid "Surin"
+msgstr ""
+
+#: languages/states.php:4637
+msgid "Si Sa Ket"
+msgstr ""
+
+#: languages/states.php:4638
+msgid "Ubon Ratchathani"
+msgstr ""
+
+#: languages/states.php:4639
+msgid "Yasothon"
+msgstr ""
+
+#: languages/states.php:4641
+msgid "Chaiyaphum"
+msgstr ""
+
+#: languages/states.php:4642
+msgid "Amnat Charoen"
+msgstr ""
+
+#: languages/states.php:4643
+msgid "Bueng Kan"
+msgstr ""
+
+#: languages/states.php:4644
+msgid "Nong Bua Lam Phu"
+msgstr ""
+
+#: languages/states.php:4645
+msgid "Khon Kaen"
+msgstr ""
+
+#: languages/states.php:4646
+msgid "Udon Thani"
+msgstr ""
+
+#: languages/states.php:4647
+msgid "Loei"
+msgstr ""
+
+#: languages/states.php:4648
+msgid "Nong Khai"
+msgstr ""
+
+#: languages/states.php:4649
+msgid "Maha Sarakham"
+msgstr ""
+
+#: languages/states.php:4650
+msgid "Roi Et"
+msgstr ""
+
+#: languages/states.php:4651
+msgid "Kalasin"
+msgstr ""
+
+#: languages/states.php:4652
+msgid "Sakon Nakhon"
+msgstr ""
+
+#: languages/states.php:4653
+msgid "Nakhon Phanom"
+msgstr ""
+
+#: languages/states.php:4654
+msgid "Mukdahan"
+msgstr ""
+
+#: languages/states.php:4655
+msgid "Chiang Mai"
+msgstr ""
+
+#: languages/states.php:4656
+msgid "Lamphun"
+msgstr ""
+
+#: languages/states.php:4657
+msgid "Lampang"
+msgstr ""
+
+#: languages/states.php:4658
+msgid "Uttaradit"
+msgstr ""
+
+#: languages/states.php:4659
+msgid "Phrae"
+msgstr ""
+
+#: languages/states.php:4660
+msgid "Nan"
+msgstr ""
+
+#: languages/states.php:4661
+msgid "Phayao"
+msgstr ""
+
+#: languages/states.php:4662
+msgid "Chiang Rai"
+msgstr ""
+
+#: languages/states.php:4663
+msgid "Mae Hong Son"
+msgstr ""
+
+#: languages/states.php:4664
+msgid "Nakhon Sawan"
+msgstr ""
+
+#: languages/states.php:4665
+msgid "Uthai Thani"
+msgstr ""
+
+#: languages/states.php:4666
+msgid "Kamphaeng Phet"
+msgstr ""
+
+#: languages/states.php:4667
+msgid "Tak"
+msgstr ""
+
+#: languages/states.php:4668
+msgid "Sukhothai"
+msgstr ""
+
+#: languages/states.php:4669
+msgid "Phitsanulok"
+msgstr ""
+
+#: languages/states.php:4670
+msgid "Phichit"
+msgstr ""
+
+#: languages/states.php:4671
+msgid "Phetchabun"
+msgstr ""
+
+#: languages/states.php:4672
+msgid "Ratchaburi"
+msgstr ""
+
+#: languages/states.php:4673
+msgid "Kanchanaburi"
+msgstr ""
+
+#: languages/states.php:4674
+msgid "Suphanburi"
+msgstr ""
+
+#: languages/states.php:4675
+msgid "Nakhon Pathom"
+msgstr ""
+
+#: languages/states.php:4676
+msgid "Samut Sakhon"
+msgstr ""
+
+#: languages/states.php:4677
+msgid "Samut Songkhram"
+msgstr ""
+
+#: languages/states.php:4678
+msgid "Phetchaburi"
+msgstr ""
+
+#: languages/states.php:4679
+msgid "Prachuap Khiri Khan"
+msgstr ""
+
+#: languages/states.php:4680
+msgid "Nakhon Si Thammarat"
+msgstr ""
+
+#: languages/states.php:4681
+msgid "Krabi"
+msgstr ""
+
+#: languages/states.php:4682
+msgid "Phang Nga"
+msgstr ""
+
+#: languages/states.php:4683
+msgid "Phuket"
+msgstr ""
+
+#: languages/states.php:4684
+msgid "Surat Thani"
+msgstr ""
+
+#: languages/states.php:4685
+msgid "Ranong"
+msgstr ""
+
+#: languages/states.php:4686
+msgid "Chumphon"
+msgstr ""
+
+#: languages/states.php:4687
+msgid "Songkhla"
+msgstr ""
+
+#: languages/states.php:4688
+msgid "Satun"
+msgstr ""
+
+#: languages/states.php:4689
+msgid "Trang"
+msgstr ""
+
+#: languages/states.php:4690
+msgid "Phatthalung"
+msgstr ""
+
+#: languages/states.php:4691
+msgid "Pattani"
+msgstr ""
+
+#: languages/states.php:4692
+msgid "Yala"
+msgstr ""
+
+#: languages/states.php:4693
+msgid "Narathiwat"
+msgstr ""
+
+#: languages/states.php:4694
+msgid "Pattaya"
+msgstr ""
+
+#: languages/states.php:4697
+msgid "Gorno-Badakhshan Autonomous Province"
+msgstr ""
+
+#: languages/states.php:4698
+msgid "Khatlon Province"
+msgstr ""
+
+#: languages/states.php:4699
+msgid "Sughd Province"
+msgstr ""
+
+#: languages/states.php:4700
+msgid "districts of Republican Subordination"
+msgstr ""
+
+#: languages/states.php:4704
+msgid "Aileu municipality"
+msgstr ""
+
+#: languages/states.php:4705
+msgid "Ainaro Municipality"
+msgstr ""
+
+#: languages/states.php:4706
+msgid "Baucau Municipality"
+msgstr ""
+
+#: languages/states.php:4707
+msgid "Bobonaro Municipality"
+msgstr ""
+
+#: languages/states.php:4708
+msgid "Cova Lima Municipality"
+msgstr ""
+
+#: languages/states.php:4709
+msgid "Dili municipality"
+msgstr ""
+
+#: languages/states.php:4710
+msgid "Ermera District"
+msgstr ""
+
+#: languages/states.php:4711
+msgid "Lautém Municipality"
+msgstr ""
+
+#: languages/states.php:4712
+msgid "Liquiçá Municipality"
+msgstr ""
+
+#: languages/states.php:4713
+msgid "Manatuto District"
+msgstr ""
+
+#: languages/states.php:4714
+msgid "Manufahi Municipality"
+msgstr ""
+
+#: languages/states.php:4715
+msgid "Viqueque Municipality"
+msgstr ""
+
+#: languages/states.php:4718
+msgid "Ahal Region"
+msgstr ""
+
+#: languages/states.php:4719
+msgid "Ashgabat"
+msgstr ""
+
+#: languages/states.php:4720
+msgid "Balkan Region"
+msgstr ""
+
+#: languages/states.php:4721
+msgid "Daşoguz Region"
+msgstr ""
+
+#: languages/states.php:4722
+msgid "Lebap Region"
+msgstr ""
+
+#: languages/states.php:4723
+msgid "Mary Region"
+msgstr ""
+
+#: languages/states.php:4726
+msgid "Tunis Governorate"
+msgstr ""
+
+#: languages/states.php:4727
+msgid "Ariana Governorate"
+msgstr ""
+
+#: languages/states.php:4728
+msgid "Ben Arous Governorate"
+msgstr ""
+
+#: languages/states.php:4729
+msgid "Manouba Governorate"
+msgstr ""
+
+#: languages/states.php:4730
+msgid "Zaghouan Governorate"
+msgstr ""
+
+#: languages/states.php:4731
+msgid "Bizerte Governorate"
+msgstr ""
+
+#: languages/states.php:4732
+msgid "Kassrine"
+msgstr ""
+
+#: languages/states.php:4733
+msgid "Jendouba Governorate"
+msgstr ""
+
+#: languages/states.php:4734
+msgid "Kef Governorate"
+msgstr ""
+
+#: languages/states.php:4735
+msgid "Siliana Governorate"
+msgstr ""
+
+#: languages/states.php:4736
+msgid "Kairouan Governorate"
+msgstr ""
+
+#: languages/states.php:4737
+msgid "Kasserine Governorate"
+msgstr ""
+
+#: languages/states.php:4738
+msgid "Sidi Bouzid Governorate"
+msgstr ""
+
+#: languages/states.php:4739
+msgid "Sousse Governorate"
+msgstr ""
+
+#: languages/states.php:4740
+msgid "Monastir Governorate"
+msgstr ""
+
+#: languages/states.php:4741
+msgid "Mahdia Governorate"
+msgstr ""
+
+#: languages/states.php:4742
+msgid "Sfax Governorate"
+msgstr ""
+
+#: languages/states.php:4743
+msgid "Gafsa Governorate"
+msgstr ""
+
+#: languages/states.php:4744
+msgid "Tozeur Governorate"
+msgstr ""
+
+#: languages/states.php:4745
+msgid "Kebili Governorate"
+msgstr ""
+
+#: languages/states.php:4746
+msgid "Gabès Governorate"
+msgstr ""
+
+#: languages/states.php:4747
+msgid "Medenine Governorate"
+msgstr ""
+
+#: languages/states.php:4748
+msgid "Tataouine Governorate"
+msgstr ""
+
+#: languages/states.php:4751
+msgid "Haʻapai"
+msgstr ""
+
+#: languages/states.php:4752
+msgid "Niuas"
+msgstr ""
+
+#: languages/states.php:4753
+msgid "Tongatapu"
+msgstr ""
+
+#: languages/states.php:4754
+msgid "Vavaʻu"
+msgstr ""
+
+#: languages/states.php:4755
+msgid "ʻEua"
+msgstr ""
+
+#: languages/states.php:4758
+msgid "Balıkesir Province"
+msgstr ""
+
+#: languages/states.php:4759
+msgid "Bilecik Province"
+msgstr ""
+
+#: languages/states.php:4760
+msgid "Bingöl Province"
+msgstr ""
+
+#: languages/states.php:4761
+msgid "Bitlis Province"
+msgstr ""
+
+#: languages/states.php:4762
+msgid "Bolu Province"
+msgstr ""
+
+#: languages/states.php:4763
+msgid "Burdur Province"
+msgstr ""
+
+#: languages/states.php:4764
+msgid "Bursa Province"
+msgstr ""
+
+#: languages/states.php:4765
+msgid "Çanakkale Province"
+msgstr ""
+
+#: languages/states.php:4766
+msgid "Çankırı Province"
+msgstr ""
+
+#: languages/states.php:4767
+msgid "Çorum Province"
+msgstr ""
+
+#: languages/states.php:4768
+msgid "Denizli Province"
+msgstr ""
+
+#: languages/states.php:4769
+msgid "Diyarbakır Province"
+msgstr ""
+
+#: languages/states.php:4770
+msgid "Edirne Province"
+msgstr ""
+
+#: languages/states.php:4771
+msgid "Elazığ Province"
+msgstr ""
+
+#: languages/states.php:4772
+msgid "Erzincan Province"
+msgstr ""
+
+#: languages/states.php:4773
+msgid "Erzurum Province"
+msgstr ""
+
+#: languages/states.php:4774
+msgid "Eskişehir Province"
+msgstr ""
+
+#: languages/states.php:4775
+msgid "Gaziantep Province"
+msgstr ""
+
+#: languages/states.php:4776
+msgid "Giresun Province"
+msgstr ""
+
+#: languages/states.php:4777
+msgid "Gümüşhane Province"
+msgstr ""
+
+#: languages/states.php:4778
+msgid "Hakkâri Province"
+msgstr ""
+
+#: languages/states.php:4779
+msgid "Hatay Province"
+msgstr ""
+
+#: languages/states.php:4780
+msgid "Isparta Province"
+msgstr ""
+
+#: languages/states.php:4781
+msgid "Mersin Province"
+msgstr ""
+
+#: languages/states.php:4782
+msgid "Istanbul Province"
+msgstr ""
+
+#: languages/states.php:4783
+msgid "İzmir Province"
+msgstr ""
+
+#: languages/states.php:4784
+msgid "Kars Province"
+msgstr ""
+
+#: languages/states.php:4785
+msgid "Kastamonu Province"
+msgstr ""
+
+#: languages/states.php:4786
+msgid "Kayseri Province"
+msgstr ""
+
+#: languages/states.php:4787
+msgid "Kırklareli Province"
+msgstr ""
+
+#: languages/states.php:4788
+msgid "Kırşehir Province"
+msgstr ""
+
+#: languages/states.php:4789
+msgid "Kocaeli Province"
+msgstr ""
+
+#: languages/states.php:4790
+msgid "Konya Province"
+msgstr ""
+
+#: languages/states.php:4791
+msgid "Kütahya Province"
+msgstr ""
+
+#: languages/states.php:4792
+msgid "Malatya Province"
+msgstr ""
+
+#: languages/states.php:4793
+msgid "Manisa Province"
+msgstr ""
+
+#: languages/states.php:4794
+msgid "Kahramanmaraş Province"
+msgstr ""
+
+#: languages/states.php:4795
+msgid "Mardin Province"
+msgstr ""
+
+#: languages/states.php:4796
+msgid "Muğla Province"
+msgstr ""
+
+#: languages/states.php:4797
+msgid "Muş Province"
+msgstr ""
+
+#: languages/states.php:4798
+msgid "Nevşehir Province"
+msgstr ""
+
+#: languages/states.php:4799
+msgid "Niğde Province"
+msgstr ""
+
+#: languages/states.php:4800
+msgid "Ordu Province"
+msgstr ""
+
+#: languages/states.php:4801
+msgid "Rize Province"
+msgstr ""
+
+#: languages/states.php:4802
+msgid "Sakarya Province"
+msgstr ""
+
+#: languages/states.php:4803
+msgid "Samsun Province"
+msgstr ""
+
+#: languages/states.php:4804
+msgid "Siirt Province"
+msgstr ""
+
+#: languages/states.php:4805
+msgid "Sinop Province"
+msgstr ""
+
+#: languages/states.php:4806
+msgid "Sivas Province"
+msgstr ""
+
+#: languages/states.php:4807
+msgid "Tekirdağ Province"
+msgstr ""
+
+#: languages/states.php:4808
+msgid "Tokat Province"
+msgstr ""
+
+#: languages/states.php:4809
+msgid "Trabzon Province"
+msgstr ""
+
+#: languages/states.php:4810
+msgid "Tunceli Province"
+msgstr ""
+
+#: languages/states.php:4811
+msgid "Şanlıurfa Province"
+msgstr ""
+
+#: languages/states.php:4812
+msgid "Uşak Province"
+msgstr ""
+
+#: languages/states.php:4813
+msgid "Van Province"
+msgstr ""
+
+#: languages/states.php:4814
+msgid "Yozgat Province"
+msgstr ""
+
+#: languages/states.php:4815
+msgid "Zonguldak Province"
+msgstr ""
+
+#: languages/states.php:4816
+msgid "Aksaray Province"
+msgstr ""
+
+#: languages/states.php:4817
+msgid "Bayburt Province"
+msgstr ""
+
+#: languages/states.php:4818
+msgid "Karaman Province"
+msgstr ""
+
+#: languages/states.php:4819
+msgid "Kırıkkale Province"
+msgstr ""
+
+#: languages/states.php:4820
+msgid "Batman Province"
+msgstr ""
+
+#: languages/states.php:4821
+msgid "Şırnak Province"
+msgstr ""
+
+#: languages/states.php:4822
+msgid "Bartın Province"
+msgstr ""
+
+#: languages/states.php:4823
+msgid "Ardahan Province"
+msgstr ""
+
+#: languages/states.php:4824
+msgid "Iğdır Province"
+msgstr ""
+
+#: languages/states.php:4825
+msgid "Yalova Province"
+msgstr ""
+
+#: languages/states.php:4826
+msgid "Karabük Province"
+msgstr ""
+
+#: languages/states.php:4827
+msgid "Kilis Province"
+msgstr ""
+
+#: languages/states.php:4828
+msgid "Osmaniye Province"
+msgstr ""
+
+#: languages/states.php:4829
+msgid "Düzce Province"
+msgstr ""
+
+#: languages/states.php:4830
+msgid "Adana Province"
+msgstr ""
+
+#: languages/states.php:4831
+msgid "Adıyaman Province"
+msgstr ""
+
+#: languages/states.php:4832
+msgid "Afyonkarahisar Province"
+msgstr ""
+
+#: languages/states.php:4833
+msgid "Amasya Province"
+msgstr ""
+
+#: languages/states.php:4834
+msgid "Ankara Province"
+msgstr ""
+
+#: languages/states.php:4835
+msgid "Antalya Province"
+msgstr ""
+
+#: languages/states.php:4836
+msgid "Artvin Province"
+msgstr ""
+
+#: languages/states.php:4837
+msgid "Aydın Province"
+msgstr ""
+
+#: languages/states.php:4838
+msgid "Ağrı Province"
+msgstr ""
+
+#: languages/states.php:4841
+msgid "Arima"
+msgstr ""
+
+#: languages/states.php:4842
+msgid "Chaguanas"
+msgstr ""
+
+#: languages/states.php:4843
+msgid "Couva-Tabaquite-Talparo Regional Corporation"
+msgstr ""
+
+#: languages/states.php:4844
+msgid "Diego Martin Regional Corporation"
+msgstr ""
+
+#: languages/states.php:4845
+msgid "Eastern Tobago"
+msgstr ""
+
+#: languages/states.php:4846
+msgid "Penal-Debe Regional Corporation"
+msgstr ""
+
+#: languages/states.php:4847
+msgid "Point Fortin"
+msgstr ""
+
+#: languages/states.php:4848
+msgid "Port of Spain"
+msgstr ""
+
+#: languages/states.php:4849
+msgid "Princes Town Regional Corporation"
+msgstr ""
+
+#: languages/states.php:4850
+msgid "Rio Claro-Mayaro Regional Corporation"
+msgstr ""
+
+#: languages/states.php:4851
+msgid "San Fernando"
+msgstr ""
+
+#: languages/states.php:4852
+msgid "San Juan-Laventille Regional Corporation"
+msgstr ""
+
+#: languages/states.php:4853
+msgid "Sangre Grande Regional Corporation"
+msgstr ""
+
+#: languages/states.php:4854
+msgid "Siparia Regional Corporation"
+msgstr ""
+
+#: languages/states.php:4855
+msgid "Tunapuna-Piarco Regional Corporation"
+msgstr ""
+
+#: languages/states.php:4856
+msgid "Western Tobago"
+msgstr ""
+
+#: languages/states.php:4859
+msgid "Funafuti"
+msgstr ""
+
+#: languages/states.php:4860
+msgid "Nanumanga"
+msgstr ""
+
+#: languages/states.php:4861
+msgid "Nanumea"
+msgstr ""
+
+#: languages/states.php:4862
+msgid "Niutao Island Council"
+msgstr ""
+
+#: languages/states.php:4863
+msgid "Nui"
+msgstr ""
+
+#: languages/states.php:4864
+msgid "Nukufetau"
+msgstr ""
+
+#: languages/states.php:4865
+msgid "Nukulaelae"
+msgstr ""
+
+#: languages/states.php:4866
+msgid "Vaitupu"
+msgstr ""
+
+#: languages/states.php:4869
+msgid "Changhua County"
+msgstr ""
+
+#: languages/states.php:4870
+msgid "Chiayi City"
+msgstr ""
+
+#: languages/states.php:4871
+msgid "Chiayi County"
+msgstr ""
+
+#: languages/states.php:4872
+msgid "Hsinchu"
+msgstr ""
+
+#: languages/states.php:4873
+msgid "Hsinchu County"
+msgstr ""
+
+#: languages/states.php:4874
+msgid "Hualien County"
+msgstr ""
+
+#: languages/states.php:4875
+msgid "Kaohsiung"
+msgstr ""
+
+#: languages/states.php:4876
+msgid "Kaohsiung County"
+msgstr ""
+
+#: languages/states.php:4877
+msgid "Kinmen"
+msgstr ""
+
+#: languages/states.php:4878
+msgid "Lienchiang County"
+msgstr ""
+
+#: languages/states.php:4879
+msgid "Miaoli County"
+msgstr ""
+
+#: languages/states.php:4880
+msgid "Nantou County"
+msgstr ""
+
+#: languages/states.php:4881
+msgid "Penghu County"
+msgstr ""
+
+#: languages/states.php:4882
+msgid "Pingtung County"
+msgstr ""
+
+#: languages/states.php:4883
+msgid "Taichung"
+msgstr ""
+
+#: languages/states.php:4884
+msgid "Taichung County"
+msgstr ""
+
+#: languages/states.php:4885
+msgid "Tainan"
+msgstr ""
+
+#: languages/states.php:4886
+msgid "Tainan County"
+msgstr ""
+
+#: languages/states.php:4887
+msgid "Taipei"
+msgstr ""
+
+#: languages/states.php:4888
+msgid "Taitung County"
+msgstr ""
+
+#: languages/states.php:4889
+msgid "Taoyuan City"
+msgstr ""
+
+#: languages/states.php:4890
+msgid "Yilan County"
+msgstr ""
+
+#: languages/states.php:4891
+msgid "Yunlin County"
+msgstr ""
+
+#: languages/states.php:4894
+msgid "South Pemba Region"
+msgstr ""
+
+#: languages/states.php:4895
+msgid "Zanzibar Central/South Region"
+msgstr ""
+
+#: languages/states.php:4896
+msgid "Lindi Region"
+msgstr ""
+
+#: languages/states.php:4897
+msgid "Mara Region"
+msgstr ""
+
+#: languages/states.php:4898
+msgid "Zanzibar Urban/West Region"
+msgstr ""
+
+#: languages/states.php:4899
+msgid "Morogoro Region"
+msgstr ""
+
+#: languages/states.php:4900
+msgid "Mtwara Region"
+msgstr ""
+
+#: languages/states.php:4901
+msgid "Mwanza Region"
+msgstr ""
+
+#: languages/states.php:4902
+msgid "Pwani Region"
+msgstr ""
+
+#: languages/states.php:4903
+msgid "Rukwa Region"
+msgstr ""
+
+#: languages/states.php:4904
+msgid "Ruvuma Region"
+msgstr ""
+
+#: languages/states.php:4905
+msgid "Shinyanga Region"
+msgstr ""
+
+#: languages/states.php:4906
+msgid "Singida Region"
+msgstr ""
+
+#: languages/states.php:4907
+msgid "Tabora Region"
+msgstr ""
+
+#: languages/states.php:4908
+msgid "Tanga Region"
+msgstr ""
+
+#: languages/states.php:4909
+msgid "Manyara Region"
+msgstr ""
+
+#: languages/states.php:4910
+msgid "Geita Region"
+msgstr ""
+
+#: languages/states.php:4911
+msgid "Katavi Region"
+msgstr ""
+
+#: languages/states.php:4912
+msgid "Njombe Region"
+msgstr ""
+
+#: languages/states.php:4913
+msgid "Simiyu Region"
+msgstr ""
+
+#: languages/states.php:4914
+msgid "Arusha Region"
+msgstr ""
+
+#: languages/states.php:4915
+msgid "Dar es Salaam Region"
+msgstr ""
+
+#: languages/states.php:4916
+msgid "Dodoma Region"
+msgstr ""
+
+#: languages/states.php:4917
+msgid "Iringa Region"
+msgstr ""
+
+#: languages/states.php:4918
+msgid "Kagera Region"
+msgstr ""
+
+#: languages/states.php:4919
+msgid "Kigoma Region"
+msgstr ""
+
+#: languages/states.php:4920
+msgid "Kilimanjaro Region"
+msgstr ""
+
+#: languages/states.php:4921
+msgid "North Pemba Region"
+msgstr ""
+
+#: languages/states.php:4922
+msgid "Zanzibar North Region"
+msgstr ""
+
+#: languages/states.php:4925
+msgid "Dnipropetrovsk Oblast"
+msgstr ""
+
+#: languages/states.php:4926
+msgid "Donetsk Oblast"
+msgstr ""
+
+#: languages/states.php:4927
+msgid "Zhytomyr Oblast"
+msgstr ""
+
+#: languages/states.php:4928
+msgid "Zakarpattia Oblast"
+msgstr ""
+
+#: languages/states.php:4929
+msgid "Zaporizhzhya Oblast"
+msgstr ""
+
+#: languages/states.php:4930
+msgid "Ivano-Frankivsk Oblast"
+msgstr ""
+
+#: languages/states.php:4931
+msgid "Kiev"
+msgstr ""
+
+#: languages/states.php:4932
+msgid "Kyiv Oblast"
+msgstr ""
+
+#: languages/states.php:4933
+msgid "Kirovohrad Oblast"
+msgstr ""
+
+#: languages/states.php:4934
+msgid "Autonomous Republic of Crimea"
+msgstr ""
+
+#: languages/states.php:4935
+msgid "Lviv Oblast"
+msgstr ""
+
+#: languages/states.php:4936
+msgid "Mykolaiv Oblast"
+msgstr ""
+
+#: languages/states.php:4937
+msgid "Odessa Oblast"
+msgstr ""
+
+#: languages/states.php:4938
+msgid "Rivne Oblast"
+msgstr ""
+
+#: languages/states.php:4939
+msgid "Sumy Oblast"
+msgstr ""
+
+#: languages/states.php:4940
+msgid "Ternopil Oblast"
+msgstr ""
+
+#: languages/states.php:4941
+msgid "Kharkiv Oblast"
+msgstr ""
+
+#: languages/states.php:4942
+msgid "Kherson Oblast"
+msgstr ""
+
+#: languages/states.php:4943
+msgid "Khmelnytsky Oblast"
+msgstr ""
+
+#: languages/states.php:4944
+msgid "Cherkasy Oblast"
+msgstr ""
+
+#: languages/states.php:4945
+msgid "Chernihiv Oblast"
+msgstr ""
+
+#: languages/states.php:4946
+msgid "Chernivtsi Oblast"
+msgstr ""
+
+#: languages/states.php:4947
+msgid "Luhansk Oblast"
+msgstr ""
+
+#: languages/states.php:4948
+msgid "Vinnytsia Oblast"
+msgstr ""
+
+#: languages/states.php:4949
+msgid "Volyn Oblast"
+msgstr ""
+
+#: languages/states.php:4952
+msgid "Kalangala District"
+msgstr ""
+
+#: languages/states.php:4953
+msgid "Kampala District"
+msgstr ""
+
+#: languages/states.php:4954
+msgid "Kiboga District"
+msgstr ""
+
+#: languages/states.php:4955
+msgid "Luwero District"
+msgstr ""
+
+#: languages/states.php:4956
+msgid "Masaka District"
+msgstr ""
+
+#: languages/states.php:4957
+msgid "Mpigi District"
+msgstr ""
+
+#: languages/states.php:4958
+msgid "Mubende District"
+msgstr ""
+
+#: languages/states.php:4959
+msgid "Mukono District"
+msgstr ""
+
+#: languages/states.php:4960
+msgid "Nakasongola District"
+msgstr ""
+
+#: languages/states.php:4961
+msgid "Rakai District"
+msgstr ""
+
+#: languages/states.php:4962
+msgid "Sembabule District"
+msgstr ""
+
+#: languages/states.php:4963
+msgid "Kayunga District"
+msgstr ""
+
+#: languages/states.php:4964
+msgid "Wakiso District"
+msgstr ""
+
+#: languages/states.php:4965
+msgid "Lyantonde District"
+msgstr ""
+
+#: languages/states.php:4966
+msgid "Mityana District"
+msgstr ""
+
+#: languages/states.php:4967
+msgid "Nakaseke District"
+msgstr ""
+
+#: languages/states.php:4968
+msgid "Buikwe District"
+msgstr ""
+
+#: languages/states.php:4969
+msgid "Bukomansimbi District"
+msgstr ""
+
+#: languages/states.php:4970
+msgid "Butambala District"
+msgstr ""
+
+#: languages/states.php:4971
+msgid "Buvuma District"
+msgstr ""
+
+#: languages/states.php:4972
+msgid "Gomba District"
+msgstr ""
+
+#: languages/states.php:4973
+msgid "Kalungu District"
+msgstr ""
+
+#: languages/states.php:4974
+msgid "Kyankwanzi District"
+msgstr ""
+
+#: languages/states.php:4975
+msgid "Lwengo District"
+msgstr ""
+
+#: languages/states.php:4976
+msgid "Kyotera District"
+msgstr ""
+
+#: languages/states.php:4977
+msgid "Bugiri District"
+msgstr ""
+
+#: languages/states.php:4978
+msgid "Busia District"
+msgstr ""
+
+#: languages/states.php:4979
+msgid "Iganga District"
+msgstr ""
+
+#: languages/states.php:4980
+msgid "Jinja District"
+msgstr ""
+
+#: languages/states.php:4981
+msgid "Kamuli District"
+msgstr ""
+
+#: languages/states.php:4982
+msgid "Kapchorwa District"
+msgstr ""
+
+#: languages/states.php:4983
+msgid "Katakwi District"
+msgstr ""
+
+#: languages/states.php:4984
+msgid "Kumi District"
+msgstr ""
+
+#: languages/states.php:4985
+msgid "Mbale District"
+msgstr ""
+
+#: languages/states.php:4986
+msgid "Pallisa District"
+msgstr ""
+
+#: languages/states.php:4987
+msgid "Soroti District"
+msgstr ""
+
+#: languages/states.php:4988
+msgid "Tororo District"
+msgstr ""
+
+#: languages/states.php:4989
+msgid "Kaberamaido District"
+msgstr ""
+
+#: languages/states.php:4990
+msgid "Mayuge District"
+msgstr ""
+
+#: languages/states.php:4991
+msgid "Sironko District"
+msgstr ""
+
+#: languages/states.php:4992
+msgid "Amuria District"
+msgstr ""
+
+#: languages/states.php:4993
+msgid "Budaka District"
+msgstr ""
+
+#: languages/states.php:4994
+msgid "Bududa District"
+msgstr ""
+
+#: languages/states.php:4995
+msgid "Bukedea District"
+msgstr ""
+
+#: languages/states.php:4996
+msgid "Bukwo District"
+msgstr ""
+
+#: languages/states.php:4997
+msgid "Butaleja District"
+msgstr ""
+
+#: languages/states.php:4998
+msgid "Kaliro District"
+msgstr ""
+
+#: languages/states.php:4999
+msgid "Manafwa District"
+msgstr ""
+
+#: languages/states.php:5000
+msgid "Namutumba District"
+msgstr ""
+
+#: languages/states.php:5001
+msgid "Bulambuli District"
+msgstr ""
+
+#: languages/states.php:5002
+msgid "Buyende District"
+msgstr ""
+
+#: languages/states.php:5003
+msgid "Kibuku District"
+msgstr ""
+
+#: languages/states.php:5004
+msgid "Kween District"
+msgstr ""
+
+#: languages/states.php:5005
+msgid "Luuka District"
+msgstr ""
+
+#: languages/states.php:5006
+msgid "Namayingo District"
+msgstr ""
+
+#: languages/states.php:5007
+msgid "Ngora District"
+msgstr ""
+
+#: languages/states.php:5008
+msgid "Serere District"
+msgstr ""
+
+#: languages/states.php:5009
+msgid "Butebo District"
+msgstr ""
+
+#: languages/states.php:5010
+msgid "Namisindwa District"
+msgstr ""
+
+#: languages/states.php:5011
+msgid "Adjumani District"
+msgstr ""
+
+#: languages/states.php:5012
+msgid "Apac District"
+msgstr ""
+
+#: languages/states.php:5013
+msgid "Arua District"
+msgstr ""
+
+#: languages/states.php:5014
+msgid "Gulu District"
+msgstr ""
+
+#: languages/states.php:5015
+msgid "Kitgum District"
+msgstr ""
+
+#: languages/states.php:5016
+msgid "Kotido District"
+msgstr ""
+
+#: languages/states.php:5017
+msgid "Lira District"
+msgstr ""
+
+#: languages/states.php:5018
+msgid "Moroto District"
+msgstr ""
+
+#: languages/states.php:5019
+msgid "Moyo District"
+msgstr ""
+
+#: languages/states.php:5020
+msgid "Nebbi District"
+msgstr ""
+
+#: languages/states.php:5021
+msgid "Nakapiripirit District"
+msgstr ""
+
+#: languages/states.php:5022
+msgid "Pader District"
+msgstr ""
+
+#: languages/states.php:5023
+msgid "Yumbe District"
+msgstr ""
+
+#: languages/states.php:5024
+msgid "Abim District"
+msgstr ""
+
+#: languages/states.php:5025
+msgid "Amolatar District"
+msgstr ""
+
+#: languages/states.php:5026
+msgid "Amuru District"
+msgstr ""
+
+#: languages/states.php:5027
+msgid "Dokolo District"
+msgstr ""
+
+#: languages/states.php:5028
+msgid "Kaabong District"
+msgstr ""
+
+#: languages/states.php:5029
+msgid "Koboko District"
+msgstr ""
+
+#: languages/states.php:5030
+msgid "Maracha District"
+msgstr ""
+
+#: languages/states.php:5031
+msgid "Oyam District"
+msgstr ""
+
+#: languages/states.php:5032
+msgid "Agago District"
+msgstr ""
+
+#: languages/states.php:5033
+msgid "Alebtong District"
+msgstr ""
+
+#: languages/states.php:5034
+msgid "Amudat District"
+msgstr ""
+
+#: languages/states.php:5035
+msgid "Kole District"
+msgstr ""
+
+#: languages/states.php:5036
+msgid "Lamwo District"
+msgstr ""
+
+#: languages/states.php:5037
+msgid "Napak District"
+msgstr ""
+
+#: languages/states.php:5038
+msgid "Nwoya District"
+msgstr ""
+
+#: languages/states.php:5039
+msgid "Otuke District"
+msgstr ""
+
+#: languages/states.php:5040
+msgid "Zombo District"
+msgstr ""
+
+#: languages/states.php:5041
+msgid "Omoro District"
+msgstr ""
+
+#: languages/states.php:5042
+msgid "Pakwach District"
+msgstr ""
+
+#: languages/states.php:5043
+msgid "Bundibugyo District"
+msgstr ""
+
+#: languages/states.php:5044
+msgid "Bushenyi District"
+msgstr ""
+
+#: languages/states.php:5045
+msgid "Kabale District"
+msgstr ""
+
+#: languages/states.php:5046
+msgid "Kabarole District"
+msgstr ""
+
+#: languages/states.php:5047
+msgid "Kasese District"
+msgstr ""
+
+#: languages/states.php:5048
+msgid "Kibaale District"
+msgstr ""
+
+#: languages/states.php:5049
+msgid "Kisoro District"
+msgstr ""
+
+#: languages/states.php:5050
+msgid "Masindi District"
+msgstr ""
+
+#: languages/states.php:5051
+msgid "Mbarara District"
+msgstr ""
+
+#: languages/states.php:5052
+msgid "Ntungamo District"
+msgstr ""
+
+#: languages/states.php:5053
+msgid "Rukungiri District"
+msgstr ""
+
+#: languages/states.php:5054
+msgid "Kamwenge District"
+msgstr ""
+
+#: languages/states.php:5055
+msgid "Kanungu District"
+msgstr ""
+
+#: languages/states.php:5056
+msgid "Kyenjojo District"
+msgstr ""
+
+#: languages/states.php:5057
+msgid "Buliisa District"
+msgstr ""
+
+#: languages/states.php:5058
+msgid "Ibanda District"
+msgstr ""
+
+#: languages/states.php:5059
+msgid "Isingiro District"
+msgstr ""
+
+#: languages/states.php:5060
+msgid "Kiruhura District"
+msgstr ""
+
+#: languages/states.php:5061
+msgid "Buhweju District"
+msgstr ""
+
+#: languages/states.php:5062
+msgid "Kiryandongo District"
+msgstr ""
+
+#: languages/states.php:5063
+msgid "Kyegegwa District"
+msgstr ""
+
+#: languages/states.php:5064
+msgid "Mitooma District"
+msgstr ""
+
+#: languages/states.php:5065
+msgid "Ntoroko District"
+msgstr ""
+
+#: languages/states.php:5066
+msgid "Rubirizi District"
+msgstr ""
+
+#: languages/states.php:5067
+msgid "Sheema District"
+msgstr ""
+
+#: languages/states.php:5068
+msgid "Kagadi District"
+msgstr ""
+
+#: languages/states.php:5069
+msgid "Kakumiro District"
+msgstr ""
+
+#: languages/states.php:5070
+msgid "Rubanda District"
+msgstr ""
+
+#: languages/states.php:5071
+msgid "Bunyangabu District"
+msgstr ""
+
+#: languages/states.php:5072
+msgid "Rukiga District"
+msgstr ""
+
+#: languages/states.php:5080
+msgid "Alabama"
+msgstr ""
+
+#: languages/states.php:5081
+msgid "Alaska"
+msgstr ""
+
+#: languages/states.php:5083
+msgid "Arizona"
+msgstr ""
+
+#: languages/states.php:5084
+msgid "Arkansas"
+msgstr ""
+
+#: languages/states.php:5086
+msgid "Armed Forces (Americas)"
+msgstr ""
+
+#: languages/states.php:5087
+msgid "Armed Forces (Europe, Canada, Africa, Middle East)"
+msgstr ""
+
+#: languages/states.php:5088
+msgid "Armed Forces (Pacific)"
+msgstr ""
+
+#: languages/states.php:5089
+msgid "California"
+msgstr ""
+
+#: languages/states.php:5090
+msgid "Colorado"
+msgstr ""
+
+#: languages/states.php:5091
+msgid "Connecticut"
+msgstr ""
+
+#: languages/states.php:5092
+msgid "Delaware"
+msgstr ""
+
+#: languages/states.php:5093
+msgid "District of Columbia"
+msgstr ""
+
+#: languages/states.php:5094
+msgid "Florida"
+msgstr ""
+
+#: languages/states.php:5097
+msgid "Hawaii"
+msgstr ""
+
+#: languages/states.php:5098
+msgid "Idaho"
+msgstr ""
+
+#: languages/states.php:5099
+msgid "Illinois"
+msgstr ""
+
+#: languages/states.php:5100
+msgid "Indiana"
+msgstr ""
+
+#: languages/states.php:5101
+msgid "Iowa"
+msgstr ""
+
+#: languages/states.php:5102
+msgid "Kansas"
+msgstr ""
+
+#: languages/states.php:5103
+msgid "Kentucky"
+msgstr ""
+
+#: languages/states.php:5104
+msgid "Louisiana"
+msgstr ""
+
+#: languages/states.php:5105
+msgid "Maine"
+msgstr ""
+
+#: languages/states.php:5106
+msgid "Maryland"
+msgstr ""
+
+#: languages/states.php:5107
+msgid "Massachusetts"
+msgstr ""
+
+#: languages/states.php:5108
+msgid "Michigan"
+msgstr ""
+
+#: languages/states.php:5109
+msgid "Minnesota"
+msgstr ""
+
+#: languages/states.php:5110
+msgid "Mississippi"
+msgstr ""
+
+#: languages/states.php:5111
+msgid "Missouri"
+msgstr ""
+
+#: languages/states.php:5112
+msgid "Montana"
+msgstr ""
+
+#: languages/states.php:5113
+msgid "Nebraska"
+msgstr ""
+
+#: languages/states.php:5114
+msgid "Nevada"
+msgstr ""
+
+#: languages/states.php:5115
+msgid "New Hampshire"
+msgstr ""
+
+#: languages/states.php:5116
+msgid "New Jersey"
+msgstr ""
+
+#: languages/states.php:5117
+msgid "New Mexico"
+msgstr ""
+
+#: languages/states.php:5118
+msgid "New York"
+msgstr ""
+
+#: languages/states.php:5119
+msgid "North Carolina"
+msgstr ""
+
+#: languages/states.php:5120
+msgid "North Dakota"
+msgstr ""
+
+#: languages/states.php:5122
+msgid "Ohio"
+msgstr ""
+
+#: languages/states.php:5123
+msgid "Oklahoma"
+msgstr ""
+
+#: languages/states.php:5124
+msgid "Oregon"
+msgstr ""
+
+#: languages/states.php:5125
+msgid "Pennsylvania"
+msgstr ""
+
+#: languages/states.php:5127
+msgid "Rhode Island"
+msgstr ""
+
+#: languages/states.php:5128
+msgid "South Carolina"
+msgstr ""
+
+#: languages/states.php:5129
+msgid "South Dakota"
+msgstr ""
+
+#: languages/states.php:5130
+msgid "Tennessee"
+msgstr ""
+
+#: languages/states.php:5131
+msgid "Texas"
+msgstr ""
+
+#: languages/states.php:5133
+msgid "United States Virgin Islands"
+msgstr ""
+
+#: languages/states.php:5134
+msgid "Utah"
+msgstr ""
+
+#: languages/states.php:5135
+msgid "Vermont"
+msgstr ""
+
+#: languages/states.php:5136
+msgid "Virginia"
+msgstr ""
+
+#: languages/states.php:5137
+msgid "Washington"
+msgstr ""
+
+#: languages/states.php:5138
+msgid "West Virginia"
+msgstr ""
+
+#: languages/states.php:5139
+msgid "Wisconsin"
+msgstr ""
+
+#: languages/states.php:5140
+msgid "Wyoming"
+msgstr ""
+
+#: languages/states.php:5143
+msgid "Artigas Department"
+msgstr ""
+
+#: languages/states.php:5144
+msgid "Canelones Department"
+msgstr ""
+
+#: languages/states.php:5145
+msgid "Cerro Largo Department"
+msgstr ""
+
+#: languages/states.php:5146
+msgid "Colonia Department"
+msgstr ""
+
+#: languages/states.php:5147
+msgid "Durazno Department"
+msgstr ""
+
+#: languages/states.php:5148
+msgid "Flores Department"
+msgstr ""
+
+#: languages/states.php:5149
+msgid "Florida Department"
+msgstr ""
+
+#: languages/states.php:5150
+msgid "Lavalleja Department"
+msgstr ""
+
+#: languages/states.php:5151
+msgid "Maldonado Department"
+msgstr ""
+
+#: languages/states.php:5152
+msgid "Montevideo Department"
+msgstr ""
+
+#: languages/states.php:5153
+msgid "Paysandú Department"
+msgstr ""
+
+#: languages/states.php:5154
+msgid "Rivera Department"
+msgstr ""
+
+#: languages/states.php:5155
+msgid "Rocha Department"
+msgstr ""
+
+#: languages/states.php:5156
+msgid "Río Negro Department"
+msgstr ""
+
+#: languages/states.php:5157
+msgid "Salto Department"
+msgstr ""
+
+#: languages/states.php:5158
+msgid "San José Department"
+msgstr ""
+
+#: languages/states.php:5159
+msgid "Soriano Department"
+msgstr ""
+
+#: languages/states.php:5160
+msgid "Tacuarembó Department"
+msgstr ""
+
+#: languages/states.php:5161
+msgid "Treinta y Tres Department"
+msgstr ""
+
+#: languages/states.php:5164
+msgid "Andijan Region"
+msgstr ""
+
+#: languages/states.php:5165
+msgid "Bukhara Region"
+msgstr ""
+
+#: languages/states.php:5166
+msgid "Fergana Region"
+msgstr ""
+
+#: languages/states.php:5167
+msgid "Jizzakh Region"
+msgstr ""
+
+#: languages/states.php:5168
+msgid "Karakalpakstan"
+msgstr ""
+
+#: languages/states.php:5169
+msgid "Namangan Region"
+msgstr ""
+
+#: languages/states.php:5170
+msgid "Navoiy Region"
+msgstr ""
+
+#: languages/states.php:5171
+msgid "Qashqadaryo Region"
+msgstr ""
+
+#: languages/states.php:5172
+msgid "Samarqand Region"
+msgstr ""
+
+#: languages/states.php:5173
+msgid "Sirdaryo Region"
+msgstr ""
+
+#: languages/states.php:5174
+msgid "Surxondaryo Region"
+msgstr ""
+
+#: languages/states.php:5175
+msgid "Tashkent"
+msgstr ""
+
+#: languages/states.php:5176
+msgid "Tashkent Region"
+msgstr ""
+
+#: languages/states.php:5177
+msgid "Xorazm Region"
+msgstr ""
+
+#: languages/states.php:5181
+msgid "Charlotte Parish"
+msgstr ""
+
+#: languages/states.php:5182
+msgid "Grenadines Parish"
+msgstr ""
+
+#: languages/states.php:5190
+msgid "Anzoátegui"
+msgstr ""
+
+#: languages/states.php:5191
+msgid "Apure"
+msgstr ""
+
+#: languages/states.php:5192
+msgid "Aragua"
+msgstr ""
+
+#: languages/states.php:5193
+msgid "Barinas"
+msgstr ""
+
+#: languages/states.php:5194
+msgid "Bolívar"
+msgstr ""
+
+#: languages/states.php:5195
+msgid "Capital District"
+msgstr ""
+
+#: languages/states.php:5196
+msgid "Carabobo"
+msgstr ""
+
+#: languages/states.php:5197
+msgid "Cojedes"
+msgstr ""
+
+#: languages/states.php:5198
+msgid "Delta Amacuro"
+msgstr ""
+
+#: languages/states.php:5199
+msgid "Falcón"
+msgstr ""
+
+#: languages/states.php:5200
+msgid "Federal Dependencies of Venezuela"
+msgstr ""
+
+#: languages/states.php:5201
+msgid "Guárico"
+msgstr ""
+
+#: languages/states.php:5202
+msgid "Lara"
+msgstr ""
+
+#: languages/states.php:5203
+msgid "Miranda"
+msgstr ""
+
+#: languages/states.php:5204
+msgid "Monagas"
+msgstr ""
+
+#: languages/states.php:5205
+msgid "Mérida"
+msgstr ""
+
+#: languages/states.php:5206
+msgid "Nueva Esparta"
+msgstr ""
+
+#: languages/states.php:5207
+msgid "Portuguesa"
+msgstr ""
+
+#: languages/states.php:5208
+msgid "Sucre"
+msgstr ""
+
+#: languages/states.php:5209
+msgid "Trujillo"
+msgstr ""
+
+#: languages/states.php:5210
+msgid "Táchira"
+msgstr ""
+
+#: languages/states.php:5211
+msgid "Vargas"
+msgstr ""
+
+#: languages/states.php:5212
+msgid "Yaracuy"
+msgstr ""
+
+#: languages/states.php:5213
+msgid "Zulia"
+msgstr ""
+
+#: languages/states.php:5218
+msgid "Quảng Ninh"
+msgstr ""
+
+#: languages/states.php:5219
+msgid "Hòa Bình"
+msgstr ""
+
+#: languages/states.php:5220
+msgid "Hà Tây"
+msgstr ""
+
+#: languages/states.php:5221
+msgid "Ninh Bình"
+msgstr ""
+
+#: languages/states.php:5222
+msgid "Thái Bình"
+msgstr ""
+
+#: languages/states.php:5223
+msgid "Thanh Hóa"
+msgstr ""
+
+#: languages/states.php:5224
+msgid "Nghệ An"
+msgstr ""
+
+#: languages/states.php:5225
+msgid "Hà Tĩnh"
+msgstr ""
+
+#: languages/states.php:5226
+msgid "Quảng Bình"
+msgstr ""
+
+#: languages/states.php:5227
+msgid "Quảng Trị"
+msgstr ""
+
+#: languages/states.php:5228
+msgid "Thừa Thiên-Huế"
+msgstr ""
+
+#: languages/states.php:5229
+msgid "Quảng Nam"
+msgstr ""
+
+#: languages/states.php:5230
+msgid "Kon Tum"
+msgstr ""
+
+#: languages/states.php:5231
+msgid "Quảng Ngãi"
+msgstr ""
+
+#: languages/states.php:5232
+msgid "Gia Lai"
+msgstr ""
+
+#: languages/states.php:5233
+msgid "Bình Định"
+msgstr ""
+
+#: languages/states.php:5234
+msgid "Phú Yên"
+msgstr ""
+
+#: languages/states.php:5235
+msgid "Đắk Lắk"
+msgstr ""
+
+#: languages/states.php:5236
+msgid "Khánh Hòa"
+msgstr ""
+
+#: languages/states.php:5237
+msgid "Lâm Đồng"
+msgstr ""
+
+#: languages/states.php:5238
+msgid "Ninh Thuận"
+msgstr ""
+
+#: languages/states.php:5239
+msgid "Tây Ninh"
+msgstr ""
+
+#: languages/states.php:5240
+msgid "Đồng Nai"
+msgstr ""
+
+#: languages/states.php:5241
+msgid "Bình Thuận"
+msgstr ""
+
+#: languages/states.php:5242
+msgid "Long An"
+msgstr ""
+
+#: languages/states.php:5243
+msgid "Bà Rịa-Vũng Tàu"
+msgstr ""
+
+#: languages/states.php:5244
+msgid "An Giang"
+msgstr ""
+
+#: languages/states.php:5245
+msgid "Đồng Tháp"
+msgstr ""
+
+#: languages/states.php:5246
+msgid "Tiền Giang"
+msgstr ""
+
+#: languages/states.php:5247
+msgid "Kiên Giang"
+msgstr ""
+
+#: languages/states.php:5248
+msgid "Vĩnh Long"
+msgstr ""
+
+#: languages/states.php:5249
+msgid "Bến Tre"
+msgstr ""
+
+#: languages/states.php:5250
+msgid "Trà Vinh"
+msgstr ""
+
+#: languages/states.php:5251
+msgid "Sóc Trăng"
+msgstr ""
+
+#: languages/states.php:5252
+msgid "Bắc Kạn"
+msgstr ""
+
+#: languages/states.php:5253
+msgid "Bắc Giang"
+msgstr ""
+
+#: languages/states.php:5254
+msgid "Bạc Liêu"
+msgstr ""
+
+#: languages/states.php:5255
+msgid "Bắc Ninh"
+msgstr ""
+
+#: languages/states.php:5256
+msgid "Bình Dương"
+msgstr ""
+
+#: languages/states.php:5257
+msgid "Bình Phước"
+msgstr ""
+
+#: languages/states.php:5258
+msgid "Cà Mau"
+msgstr ""
+
+#: languages/states.php:5259
+msgid "Hải Dương"
+msgstr ""
+
+#: languages/states.php:5260
+msgid "Hà Nam"
+msgstr ""
+
+#: languages/states.php:5261
+msgid "Hưng Yên"
+msgstr ""
+
+#: languages/states.php:5262
+msgid "Nam Định"
+msgstr ""
+
+#: languages/states.php:5263
+msgid "Phú Thọ"
+msgstr ""
+
+#: languages/states.php:5264
+msgid "Thái Nguyên"
+msgstr ""
+
+#: languages/states.php:5265
+msgid "Vĩnh Phúc"
+msgstr ""
+
+#: languages/states.php:5266
+msgid "Điện Biên"
+msgstr ""
+
+#: languages/states.php:5267
+msgid "Đắk Nông"
+msgstr ""
+
+#: languages/states.php:5268
+msgid "Hậu Giang"
+msgstr ""
+
+#: languages/states.php:5269
+msgid "Cao Bằng"
+msgstr ""
+
+#: languages/states.php:5270
+msgid "Da Nang"
+msgstr ""
+
+#: languages/states.php:5271
+msgid "Haiphong"
+msgstr ""
+
+#: languages/states.php:5272
+msgid "Hanoi"
+msgstr ""
+
+#: languages/states.php:5273
+msgid "Ho Chi Minh City"
+msgstr ""
+
+#: languages/states.php:5274
+msgid "Hà Giang"
+msgstr ""
+
+#: languages/states.php:5275
+msgid "Lai Châu"
+msgstr ""
+
+#: languages/states.php:5276
+msgid "Lào Cai"
+msgstr ""
+
+#: languages/states.php:5277
+msgid "Lạng Sơn"
+msgstr ""
+
+#: languages/states.php:5278
+msgid "Sơn La"
+msgstr ""
+
+#: languages/states.php:5279
+msgid "Tuyên Quang"
+msgstr ""
+
+#: languages/states.php:5280
+msgid "Yên Bái"
+msgstr ""
+
+#: languages/states.php:5283
+msgid "Malampa"
+msgstr ""
+
+#: languages/states.php:5284
+msgid "Penama"
+msgstr ""
+
+#: languages/states.php:5285
+msgid "Sanma"
+msgstr ""
+
+#: languages/states.php:5286
+msgid "Shefa"
+msgstr ""
+
+#: languages/states.php:5287
+msgid "Tafea"
+msgstr ""
+
+#: languages/states.php:5288
+msgid "Torba"
+msgstr ""
+
+#: languages/states.php:5292
+msgid "A'ana"
+msgstr ""
+
+#: languages/states.php:5293
+msgid "Aiga-i-le-Tai"
+msgstr ""
+
+#: languages/states.php:5294
+msgid "Atua"
+msgstr ""
+
+#: languages/states.php:5295
+msgid "Fa'asaleleaga"
+msgstr ""
+
+#: languages/states.php:5296
+msgid "Gaga'emauga"
+msgstr ""
+
+#: languages/states.php:5297
+msgid "Gaga'ifomauga"
+msgstr ""
+
+#: languages/states.php:5298
+msgid "Palauli"
+msgstr ""
+
+#: languages/states.php:5299
+msgid "Satupa'itea"
+msgstr ""
+
+#: languages/states.php:5300
+msgid "Tuamasaga"
+msgstr ""
+
+#: languages/states.php:5301
+msgid "Va'a-o-Fonoti"
+msgstr ""
+
+#: languages/states.php:5302
+msgid "Vaisigano"
+msgstr ""
+
+#: languages/states.php:5305
+msgid "Gjilan District"
+msgstr ""
+
+#: languages/states.php:5306
+msgid "Kosovska Mitrovica District"
+msgstr ""
+
+#: languages/states.php:5307
+msgid "Peć District"
+msgstr ""
+
+#: languages/states.php:5308
+msgid "Pristina (Priştine)"
+msgstr ""
+
+#: languages/states.php:5309
+msgid "Prizren District"
+msgstr ""
+
+#: languages/states.php:5310
+msgid "Uroševac District (Ferizaj)"
+msgstr ""
+
+#: languages/states.php:5311
+msgid "Đakovica District (Gjakove)"
+msgstr ""
+
+#: languages/states.php:5314
+msgid "'Adan Governorate"
+msgstr ""
+
+#: languages/states.php:5315
+msgid "'Amran Governorate"
+msgstr ""
+
+#: languages/states.php:5316
+msgid "Abyan Governorate"
+msgstr ""
+
+#: languages/states.php:5317
+msgid "Al Bayda' Governorate"
+msgstr ""
+
+#: languages/states.php:5318
+msgid "Al Hudaydah Governorate"
+msgstr ""
+
+#: languages/states.php:5319
+msgid "Al Jawf Governorate"
+msgstr ""
+
+#: languages/states.php:5320
+msgid "Al Mahrah Governorate"
+msgstr ""
+
+#: languages/states.php:5321
+msgid "Al Mahwit Governorate"
+msgstr ""
+
+#: languages/states.php:5322
+msgid "Dhamar Governorate"
+msgstr ""
+
+#: languages/states.php:5323
+msgid "Hadhramaut Governorate"
+msgstr ""
+
+#: languages/states.php:5324
+msgid "Hajjah Governorate"
+msgstr ""
+
+#: languages/states.php:5325
+msgid "Ibb Governorate"
+msgstr ""
+
+#: languages/states.php:5326
+msgid "Lahij Governorate"
+msgstr ""
+
+#: languages/states.php:5327
+msgid "Ma'rib Governorate"
+msgstr ""
+
+#: languages/states.php:5328
+msgid "Raymah Governorate"
+msgstr ""
+
+#: languages/states.php:5329
+msgid "Saada Governorate"
+msgstr ""
+
+#: languages/states.php:5330
+msgid "Sana'a"
+msgstr ""
+
+#: languages/states.php:5331
+msgid "Sana'a Governorate"
+msgstr ""
+
+#: languages/states.php:5332
+msgid "Shabwah Governorate"
+msgstr ""
+
+#: languages/states.php:5333
+msgid "Socotra Governorate"
+msgstr ""
+
+#: languages/states.php:5334
+msgid "Ta'izz Governorate"
+msgstr ""
+
+#: languages/states.php:5338
+msgid "Eastern Cape"
+msgstr ""
+
+#: languages/states.php:5339
+msgid "Free State"
+msgstr ""
+
+#: languages/states.php:5340
+msgid "Gauteng"
+msgstr ""
+
+#: languages/states.php:5341
+msgid "KwaZulu-Natal"
+msgstr ""
+
+#: languages/states.php:5342
+msgid "Limpopo"
+msgstr ""
+
+#: languages/states.php:5343
+msgid "Mpumalanga"
+msgstr ""
+
+#: languages/states.php:5344
+msgid "North West"
+msgstr ""
+
+#: languages/states.php:5345
+msgid "Northern Cape"
+msgstr ""
+
+#: languages/states.php:5346
+msgid "Western Cape"
+msgstr ""
+
+#: languages/states.php:5349
+msgid "Muchinga Province"
+msgstr ""
+
+#: languages/states.php:5351
+msgid "Copperbelt Province"
+msgstr ""
+
+#: languages/states.php:5353
+msgid "Luapula Province"
+msgstr ""
+
+#: languages/states.php:5354
+msgid "Lusaka Province"
+msgstr ""
+
+#: languages/states.php:5356
+msgid "Northwestern Province"
+msgstr ""
+
+#: languages/states.php:5361
+msgid "Bulawayo Province"
+msgstr ""
+
+#: languages/states.php:5362
+msgid "Harare Province"
+msgstr ""
+
+#: languages/states.php:5363
+msgid "Manicaland"
+msgstr ""
+
+#: languages/states.php:5364
+msgid "Mashonaland Central Province"
+msgstr ""
+
+#: languages/states.php:5365
+msgid "Mashonaland East Province"
+msgstr ""
+
+#: languages/states.php:5366
+msgid "Mashonaland West Province"
+msgstr ""
+
+#: languages/states.php:5367
+msgid "Masvingo Province"
+msgstr ""
+
+#: languages/states.php:5368
+msgid "Matabeleland North Province"
+msgstr ""
+
+#: languages/states.php:5369
+msgid "Matabeleland South Province"
+msgstr ""
+
+#: languages/states.php:5370
+msgid "Midlands Province"
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-syllabus-block.php:104
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-abstract-block.php:113
+msgid "No HTML was returned."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-instructors-block.php:96
+msgid "No visible instructors were found."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-pricing-table-block.php:93
+msgid "No access plans found."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-post-instructors.php:137
+msgid "Sorry, you are not allowed to edit the object instructors."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-post-types.php:87
+msgid "Add a short description of your course visible to all visitors..."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-post-types.php:117
+msgid "Add a short description of your membership visible to all visitors..."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-post-types.php:142
+msgid "Add your lesson content..."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-post-visibility.php:82
+msgid "Sorry, you are not allowed to edit the object visibility."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-post-visibility.php:116
+msgid "Post visibility."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-status-tools.php:51
+msgid "Removes block editor code from all courses and lessons which were migrated to the block editor during an upgrade to WordPress 5.0 or later. If you installed the Classic Editor plugin after upgrading and see duplicate content items (such as the course syllabus or lesson mark complete button) this tool will remove the duplicates."
+msgstr ""
+
+#. Translators: %d = number of affected courses/lessons.
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-status-tools.php:54
+msgid "Currently %d courses and/or lessons are affected."
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-status-tools.php:58
+msgid "Remove LifterLMS Block Code"
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks-status-tools.php:59
+msgid "Remove Block Code"
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks.php:58
+msgid "LifterLMS Blocks"
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks.php:65
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Custom User Information"
+msgstr ""
+
+#: libraries/lifterlms-blocks/includes/class-llms-blocks.php:73
+msgid "User Information"
+msgstr ""
+
+#. Translators: %s = License key.
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:195
+msgid "\"%s\" has been saved!"
+msgstr ""
+
+#. Translators: %s = License Key
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:236
+msgid "License key \"%s\" was removed from this site."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:289
+msgid "Manage Saved License Keys"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:301
+msgid "Remove Selected"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:305
+msgid "Add New License Keys"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:306
+msgid "Enter each license on a new line"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:343
+msgid "View add-on details"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:377
+msgid "View update details"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php:401
+msgid "My Add-Ons"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-betas.php:46
+msgid "Beta Testing"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-install.php:106
+msgid "Welcome to the LifterLMS Helper"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-install.php:107
+msgid "This plugin allows your website to interact with your subscriptions at LifterLMS.com to ensure your add-ons stay up to date."
+msgstr ""
+
+#. Translators: %1$s = Opening anchor tag; %2$s = closing anchor tag.
+#: libraries/lifterlms-helper/includes/class-llms-helper-install.php:109
+msgid "You can activate your add-ons from the %1$sAdd-Ons & More%2$s screen."
+msgstr ""
+
+#. Translators: %d = Number of keys that have been migrated.
+#: libraries/lifterlms-helper/includes/class-llms-helper-install.php:145
+msgid "%d license has been automatically migrated from the previous version of the LifterLMS Helper"
+msgid_plural "%d licenses have been automatically migrated from the previous version of the LifterLMS Helper."
+msgstr[0] ""
+msgstr[1] ""
+
+#. Translators: %s = License Key
+#: libraries/lifterlms-helper/includes/class-llms-helper-keys.php:145
+msgid "The license \"%s\" is no longer valid and was deactivated. Please visit your account dashboard at https://lifterlms.com/my-account for more information."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:122
+msgid "Invalid add-on ID."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:130
+msgid "Add-on cannot be installable."
+msgstr ""
+
+#. Translators: %s = Add-on name.
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:136
+msgid "%s is already installed"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:145
+msgid "An error occured while attempting to retrieve add-on download information. Please try again."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:164
+msgid "The requested action is not possible."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:181
+msgid "Unable to connect to the filesystem. Please confirm your credentials."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:205
+msgid "Your LifterLMS add-on is currently unlicensed and cannot be updated!"
+msgstr ""
+
+#. Translators: %1$s = Opening anchor tag; %2$s = Closing anchor tag.
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:210
+msgid "If you already have a license, you can activate it on the %1$sadd-ons management screen%2$s."
+msgstr ""
+
+#. Translators: %s = URI to licensing FAQ.
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:215
+msgid "Learn more about LifterLMS add-on licensing at %s."
+msgstr ""
+
+#. Translators: %s = URL for the changelog website.
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:444
+msgid "There was an error retrieving the changelog. Try visiting %s for recent changelogs."
+msgstr ""
+
+#. Translators: %1$s - Version number; %2$s - Release date.
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:482
+msgid "Version %1$s - %2$s"
+msgstr ""
+
+#. Translators: %s = URL to the full changelog.
+#: libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php:489
+msgid "View the full changelog at %s."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:80
+msgid "Unable to locate a license key for the selected add-on."
+msgstr ""
+
+#. Translators: %s = Add-on name
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:176
+msgid "%s was successfully installed."
+msgstr ""
+
+#. Translators: %s = Add-on name
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:185
+msgid "Could not install %s."
+msgstr ""
+
+#. Translators: %s = Add-on name
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:240
+msgid "%s was successfully updated."
+msgstr ""
+
+#. Translators: %s = Add-on name
+#: libraries/lifterlms-helper/includes/models/class-llms-helper-add-on.php:249
+msgid "Could not update %s."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:17
+msgid "Beta Testing Warnings and FAQs"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:19
+msgid "Always test with caution!"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:20
+msgid "Beta releases may not be stable. We may not be able to fix issues caused by using a beta release. We urge you to only use beta versions in testing environments!"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:21
+msgid "Subscribing to the beta channel for LifterLMS or any available add-ons will allow you to automatically update to the latest beta release for the given plugin or theme."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:22
+msgid "When no beta versions are available, automatic updates will be to the latest stable version of the plugin or theme."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:24
+msgid "Rolling back and restoring data"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:25
+msgid "This plugin does not provide you with the ability to rollback from a beta version."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:26
+msgid "To rollback you should subscribe to the stable channel, delete the beta version of the plugin, and then re-install the latest version. If a database migration was run you should also restore your database from a backup."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:28
+msgid "Reporting bugs and contributing"
+msgstr ""
+
+#. Translators: %1$s = Opening anchor link; %2$s = closing anchor link.
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:32
+msgid "We welcome contributions of all kinds, review our contribution guidelines on %1$sGitHub%2$s to get started."
+msgstr ""
+
+#. Translators: %s = Link to bug report.
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:38
+msgid "If you encounter a bug while beta testing, please report it at %s."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:42
+msgid "Still have questions?"
+msgstr ""
+
+#. Translators: %s = Link to guide.
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:46
+msgid "Check out our Guide to Beta Testing at %s."
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:56
+msgid "Channel"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:57
+msgid "Installed Version"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:58
+msgid "Beta Version"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:70
+msgid "Stable"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:71
+msgid "Beta"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:81
+msgid "Save & Update"
+msgstr ""
+
+#: libraries/lifterlms-helper/includes/views/beta-testing.php:88
+msgid "Are you sure you want to enable or disable beta testing for these plugins and themes?"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:87
+msgid "Cannot create an existing resource."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:232
+msgid "Column names to be searched. Accepts a single column or a comma separated list of columns."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:244
+msgid "Order sort attribute ascending or descending."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:252
+msgid "Sort collection by object attribute."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:260
+msgid "Limit results to a list of ids. Accepts a single id or a comma separated list of ids."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:269
+msgid "Exclude a list of ids from results. Accepts a single id or a comma separated list of ids."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:333
+msgid "The page number requested is larger than the number of pages available."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:408
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:440
+msgid "You must provide a valid set of columns to search into."
+msgstr ""
+
+#. Translators: %1$s comma separated list of search columns.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:423
+msgid "You are not allowed to search into the provided column(s): %1$s"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:451
+msgid "You need to define a search term to order by relevance."
+msgstr ""
+
+#. translators: %s: register_rest_field
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:800
+msgid "Please use %s to add new schema properties."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php:944
+msgid "Unique identifier for the resource."
+msgstr ""
+
+#. Translators: %s = name of the resource type (for example: "API Key").
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-database-resource.php:105
+msgid "Cannot create a new %s with a pre-defined ID."
+msgstr ""
+
+#. Translators: %1$s = name of the resource type; %2$s = field name.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-database-resource.php:118
+msgid "%1$s \"%2$s\" is required."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-database-resource.php:193
+msgid "Resource"
+msgstr ""
+
+#. Translators: %s = name of the resource type (for example: "API Key").
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-database-resource.php:212
+msgid "No %s ID was supplied."
+msgstr ""
+
+#. Translators: %s = name of the resource type (for example: "API Key").
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-database-resource.php:218
+msgid "The requested %s could not be located."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:107
+msgid "Bypass the trash and force course deletion."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:129
+msgid "Post password. Required if the post is password protected."
+msgstr ""
+
+#. Translators: %s = The post type name.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:211
+msgid "Cannot create existing %s."
+msgstr ""
+
+#. Translators: %s = The post type name.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:216
+msgid "Sorry, you are not allowed to create %s as this user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:220
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:517
+msgid "Sorry, you are not allowed to assign the provided terms."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:365
+msgid "Incorrect password."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:396
+msgid "Limit result set to posts assigned one or more statuses."
+msgstr ""
+
+#. Translators: %s = The post type name.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:513
+msgid "Sorry, you are not allowed to update %s as this user."
+msgstr ""
+
+#. Translators: %s = The post type name.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:669
+msgid "Sorry, you are not allowed to delete %s as this user."
+msgstr ""
+
+#. translators: %1$s: post type name, %2$s: force=true
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:720
+msgid "The %1$s does not support trashing. Set '%2$s' to delete."
+msgstr ""
+
+#. translators: %s: post type name
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:744
+msgid "The %s cannot be deleted."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1114
+msgid "Unique Identifier. The WordPress Post ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1120
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-progress-controller.php:229
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:182
+msgid "Creation date. Format: Y-m-d H:i:s"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1125
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1142
+msgid "Creation date (in GMT). Format: Y-m-d H:i:s"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1130
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-progress-controller.php:238
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:189
+msgid "Date last modified. Format: Y-m-d H:i:s"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1136
+msgid "Date last modified (in GMT). Format: Y-m-d H:i:s"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1151
+msgid "Post title."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1161
+msgid "Raw title. Useful when displaying title in the WP Block Editor. Only returned in edit context."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1166
+msgid "Rendered title."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1175
+msgid "The HTML content of the post."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1184
+msgid "Rendered HTML content."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1190
+msgid "Raw HTML content. Useful when displaying title in the WP Block Editor. Only returned in edit context."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1195
+msgid "Whether the content is protected with a password."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1204
+msgid "The HTML excerpt of the post."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1212
+msgid "Rendered HTML excerpt."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1218
+msgid "Raw HTML excerpt. Useful when displaying title in the WP Block Editor. Only returned in edit context."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1223
+msgid "Whether the excerpt is protected with a password."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1231
+msgid "Post URL."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1238
+msgid "Post URL slug."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1246
+msgid "LifterLMS custom post type"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1252
+msgid "The publication status of the post."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1266
+msgid "Password used to protect access to the content."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1271
+msgid "Featured image ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1276
+msgid "Post comment status. Default comment status dependent upon general WordPress post discussion settings."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1283
+msgid "Post ping status. Default ping status dependent upon general WordPress post discussion settings."
+msgstr ""
+
+#. translators: %s: post type
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1324
+msgid "The %s cannot be retrieved."
+msgstr ""
+
+#. translators: %s: post type
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1350
+msgid "The %s cannot be created."
+msgstr ""
+
+#. Translators: %s = The post type name.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1532
+msgid "Sorry, you are not allowed to create private %s."
+msgstr ""
+
+#. Translators: $s = The post type name.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1539
+msgid "Sorry, you are not allowed to publish %s."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1572
+msgid "Invalid featured media ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php:1847
+msgid "Status is forbidden."
+msgstr ""
+
+#. Translators: %s = role key.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:101
+msgid "The role %s does not exist."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:115
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:125
+msgid "You are not allowed to give users this role."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:174
+msgid "Invalid user ID for reassignment."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:184
+msgid "The user could not be deleted."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:215
+msgid "Include only users keys matching matching a specific role. Accepts a single role or a comma separated list of roles."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:238
+msgid "Reassign the deleted user's posts and links to this user ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:274
+msgid "Unique identifier for the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:280
+msgid "Login name for the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:288
+msgid "Display name for the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:296
+msgid "First name for the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:304
+msgid "Last name for the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:312
+msgid "The email address for the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:319
+msgid "URL of the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:325
+msgid "Description of the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:330
+msgid "The nickname for the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:338
+msgid "Registration date for the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:345
+msgid "Roles assigned to the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:355
+msgid "Password for the user (never included)."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:363
+msgid "User address line 1."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:371
+msgid "User address line 2."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:379
+msgid "User address city name."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:387
+msgid "User address ISO code for the state, province, or district."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:395
+msgid "User address postal code."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:403
+msgid "User address ISO code for the country."
+msgstr ""
+
+#. Translators: %d = avatar image size in pixels.
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:419
+msgid "Avatar URL with image size of %d pixels."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:427
+msgid "Avatar URLs for the user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:641
+msgid "Passwords cannot contain the \"\\\" character."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:665
+msgid "Username contains invalid characters."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:677
+msgid "Username is not allowed."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:752
+msgid "Invalid email address."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php:757
+msgid "Username is not editable."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-form-controller.php:46
+msgid "The API Key has been successfully deleted."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-form-controller.php:54
+msgid "The webhook has been successfully deleted."
+msgstr ""
+
+#. Translators: %s = Consumer Key.
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-form-controller.php:84
+msgid "Consumer Key: %s"
+msgstr ""
+
+#. Translators: %s = Consumer Secret.
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-form-controller.php:87
+msgid "Consumer Secret: %s"
+msgstr ""
+
+#. Translators: %s = Webhook ID.
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-form-controller.php:127
+msgid "\"%s\" is not a valid Webhook."
+msgstr ""
+
+#. Translators: %1$s = error message; %2$s = error code.
+#. Translators: %1$s = Error message; %2$s = Error code.
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-form-controller.php:139
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:249
+msgid "Error: %1$s [Code: %2$s]"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:54
+msgid "API Key Details"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:54
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-page.php:79
+msgid "API Keys"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:57
+msgid "Add API Key"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:72
+msgid "A friendly, human-readable, name used to identify the key."
+msgstr ""
+
+#. Translators: %1$s = opening anchor tag to capabilities doc; %2$s closing anchor tag.
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:86
+msgid "The owner is used to determine what user %1$scapabilities%2$s are available to the API key."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:99
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-api-keys.php:152
+msgid "Permissions"
+msgstr ""
+
+#. Translators: %1$s = opening anchor tag to doc; %2$s closing anchor tag.
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:102
+msgid "Determines what kind of requests can be made with the API key. %1$sRead more%2$s."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:115
+msgid "Consumer key ending in"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:126
+msgid "Last accessed at"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:140
+msgid "Make sure to copy or download the consumer key and consumer secret. After leaving this page they will not be displayed again."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:144
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-api-keys.php:150
+msgid "Consumer key"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:156
+msgid "Consumer secret"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:184
+msgid "Download Keys"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:190
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-api-keys.php:50
+msgid "Revoke"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:205
+msgid "Invalid api key."
+msgstr ""
+
+#. Translators: %s = Invalid API Key ID.
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php:296
+msgid "\"%s\" is not a valid API Key."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-page.php:83
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:44
+msgid "Webhooks"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:44
+msgid "Webhook Details"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:47
+msgid "Add Webhook"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:61
+msgid "A friendly, human-readable, name used to identify the webhook."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:83
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-webhooks.php:138
+msgid "Topic"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:92
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:238
+#: blocks/access-plan-button/index.js:1
+msgid "Action"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:94
+msgid "Any registered WordPress, plugin, or theme action hook."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:100
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-webhooks.php:139
+msgid "Delivery URL"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:102
+msgid "URL where the webhook payload will be delivered."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:113
+msgid "Secret Key"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:115
+msgid "The secret key can be used to verify received payloads originated from this website."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-webhooks.php:152
+msgid "Invalid webhook."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-api-keys.php:49
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-webhooks.php:50
+msgid "View/Edit"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/admin/tables/class-llms-rest-table-api-keys.php:153
+msgid "Last Access"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-api-keys.php:138
+msgid "API Key"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-api-keys.php:150
+msgid "Read"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-api-keys.php:151
+msgid "Write"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-api-keys.php:152
+msgid "Read / Write"
+msgstr ""
+
+#. Translators: %s = Invalid user id.
+#: libraries/lifterlms-rest/includes/class-llms-rest-api-keys.php:176
+msgid "\"%s\" is not a valid user ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-api-keys.php:181
+msgid "An API Description is required."
+msgstr ""
+
+#. Translators: %s = Invalid permission string.
+#: libraries/lifterlms-rest/includes/class-llms-rest-api-keys.php:187
+msgid "\"%s\" is not a valid permission."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-authentication.php:286
+msgid "LifterLMS REST API"
+msgstr ""
+
+#. Translators: %1$s = created date.
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:127
+msgid "Webhook created on %1$s"
+msgstr ""
+
+#. Translators: %1$s Date format as specified in the WordPress General Settings, %1$s Time format as specified in the WordPress General Settings.
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:131
+msgctxt "Webhook created on date parsed by wp_date"
+msgid "%1$s @ %2$s"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:151
+msgid "Webhook"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:174
+msgid "Paused"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:202
+msgid "Course created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:203
+msgid "Course updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:204
+msgid "Course deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:205
+msgid "Course restored"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:206
+msgid "Section created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:207
+msgid "Section updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:208
+msgid "Section deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:209
+msgid "Lesson created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:210
+msgid "Lesson updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:211
+msgid "Lesson deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:212
+msgid "Lesson restored"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:213
+msgid "Membership created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:214
+msgid "Membership updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:215
+msgid "Membership deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:216
+msgid "Membership restored"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:217
+msgid "Access Plan created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:218
+msgid "Access Plan updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:219
+msgid "Access Plan deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:220
+msgid "Order created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:221
+msgid "Order updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:222
+msgid "Order deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:223
+msgid "Order restored"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:224
+msgid "Transaction created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:225
+msgid "Transaction updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:226
+msgid "Transaction deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:227
+msgid "Student created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:228
+msgid "Student updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:229
+msgid "Student deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:230
+msgid "Enrollment created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:231
+msgid "Enrollment updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:232
+msgid "Enrollment deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:233
+msgid "Progress updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:234
+msgid "Progress deleted"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:235
+msgid "Instructor created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:236
+msgid "Instructor updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:237
+msgid "Instructor deleted"
+msgstr ""
+
+#. Translators: %s = Invalid permission string.
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:442
+msgid "\"%s\" is not a valid status."
+msgstr ""
+
+#. Translators: %s = Invalid permission string.
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:448
+msgid "\"%s\" is not a valid topic."
+msgstr ""
+
+#. Translators: %s = field name.
+#: libraries/lifterlms-rest/includes/class-llms-rest-webhooks.php:455
+msgid "\"%s\" is required."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/models/class-llms-rest-webhook.php:128
+msgid "M j, Y @ H:i"
+msgstr ""
+
+#. Translators: %s = Error message.
+#: libraries/lifterlms-rest/includes/models/class-llms-rest-webhook.php:386
+msgid "Could not reach the delivery url: \"%s\"."
+msgstr ""
+
+#. Translators: %d = Response code.
+#: libraries/lifterlms-rest/includes/models/class-llms-rest-webhook.php:391
+msgid "The delivery url returned the response code \"%d\"."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-access-plans-controller.php:87
+msgid "Retrieve access plans for a specific list of one or more posts. Accepts a course/membership id or comma separated list of course/membership ids."
+msgstr ""
+
+#. Translators: %1$d = access plans limit per product, %2$s access plan post type plural name, %3$s product post type singular name.
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-access-plans-controller.php:771
+msgid "Only %1$d %2$s allowed per %3$s"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-api-keys-controller.php:86
+msgid "Include only API keys matching a specific permission."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-api-keys-controller.php:92
+msgid "Include only keys for the specified user(s). Accepts a single id or a comma separated list of ids."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-api-keys-controller.php:97
+msgid "Exclude keys for the specified user(s). Accepts a single id or a comma separated list of ids."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-api-keys-controller.php:120
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:147
+msgid "Friendly, human-readable name or description."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-api-keys-controller.php:129
+msgid "Determines the capabilities and permissions of the key."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-api-keys-controller.php:136
+msgid "The WordPress User ID of the key owner."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-api-keys-controller.php:146
+msgid "The last 7 characters of the Consumer Key."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-api-keys-controller.php:152
+msgid "The date the key was last used. Format: Y-m-d H:i:s."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:133
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:153
+msgid "Unique Course Identifier. The WordPress Post ID"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:197
+msgid "Visibility of the course in catalogs and search results."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:205
+msgid "List of course categories."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:213
+msgid "List of course tags."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:221
+msgid "List of course difficulties."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:229
+msgid "List of course tracks."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:237
+msgid "List of course instructors. Defaults to current user when creating a new post."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:248
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:367
+msgid "URL to an oEmbed enable audio URL."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:257
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:376
+msgid "URL to an oEmbed enable video URL."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:266
+msgid "Determines if an enrollment capacity limit is enabled."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:271
+msgid "Number of students who can be enrolled in the course before enrollment closes."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:279
+msgid "Message displayed when enrollment capacity has been reached."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:288
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:348
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:383
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:417
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:451
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:485
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:205
+msgid "Raw message content."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:293
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:354
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:388
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:422
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:456
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:490
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:210
+msgid "Rendered message content."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:301
+msgid "Course ID of the prerequisite course."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:309
+msgid "Term ID of a prerequisite track."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:317
+msgid "User defined course length."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:326
+msgid "Raw length description."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:331
+msgid "Rendered length description."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:339
+msgid "Message displayed when non-enrolled visitors try to access restricted course content (lessons, quizzes, etc..) directly."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:363
+msgid ""
+"Date when the course closes. After this date enrolled students may no longer view and interact with the restricted course content.\n"
+"\t\t\t\t\tIf blank the course is open indefinitely after the the access_opens_date has passed.\n"
+"\t\t\t\t\tDoes not affect course enrollment, see enrollment_opens_date to control the course enrollment close date.\n"
+"\t\t\t\t\tFormat: Y-m-d H:i:s."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:374
+msgid "Message displayed to enrolled students when the course is accessed after the access_closes_date has passed."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:394
+msgid "This course closed on [lifterlms_course_info id=\"{{course_id}}\" key=\"end_date\"]."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:397
+msgid ""
+"Date when the course opens, allowing enrolled students to begin to view and interact with the restricted course content.\n"
+"\t\t\t\t\tIf blank the course is open until after the access_closes_date has passed.\n"
+"\t\t\t\t\tDoes not affect course enrollment, see enrollment_opens_date to control the course enrollment start date.\n"
+"\t\t\t\t\tFormat: Y-m-d H:i:s."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:408
+msgid "Message displayed to enrolled students when the course is accessed before the access_opens_date has passed."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:428
+msgid "This course opens on [lifterlms_course_info id=\"{{course_id}}\" key=\"start_date\"]."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:431
+msgid ""
+"Date when the course enrollment closes.\n"
+"\t\t\t\t\tIf blank course enrollment is open indefinitely after the the enrollment_opens_date has passed.\n"
+"\t\t\t\t\tDoes not affect course content access, see access_opens_date to control course access close date.\n"
+"\t\t\t\t\tFormat: Y-m-d H:i:s."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:442
+msgid "Message displayed to visitors when attempting to enroll into a course after the enrollment_closes_date has passed."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:462
+msgid "Enrollment in this course closed on [lifterlms_course_info id=\"{{course_id}}\" key=\"enrollment_end_date\"]."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:465
+msgid ""
+"Date when the course enrollment opens.\n"
+"\t\t\t\t\tIf blank course enrollment is open until after the enrollment_closes_date has passed.\n"
+"\t\t\t\t\tDoes not affect course content access, see access_opens_date to control course access start date.\n"
+"\t\t\t\t\tFormat: Y-m-d H:i:s."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:476
+msgid "Message displayed to visitors when attempting to enroll into a course before the enrollment_opens_date has passed."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:496
+msgid "Enrollment in this course opens on [lifterlms_course_info id=\"{{course_id}}\" key=\"enrollment_start_date\"]."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:499
+msgid "The WordPress page ID of the sales page. Required when sales_page_type equals page. Only returned when the sales_page_type equals page."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:510
+msgid "Determines the type of sales page content to display. - none
displays the course content. - content
displays alternate content from the excerpt
property. - page
redirects to the WordPress page defined in content_page_id
. - url
redirects to the URL defined in content_page_url
"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:520
+msgid "The URL of the sales page content. Required when content_type
equals url
. Only returned when the content_type
equals url
."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:532
+msgid "When true the video_embed will be used on the course tiles (on the catalog, for example) instead of the featured image."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-courses-controller.php:1199
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:79
+msgid "Limit results to a specific student or a list of students. Accepts a single student id or a comma separated list of student ids."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:91
+msgid "The trigger of the enrollment to act on."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:138
+msgid "Unique course or membership Identifier. The WordPress Post `ID.`"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:281
+msgid "Cannot create existing enrollment. Use the PATCH method if you want to update an existing enrollment"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:285
+msgid "Sorry, you are not allowed to create an enrollment as this user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:333
+msgid "The enrollment could not be created"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:375
+msgid "Sorry, you are not allowed to update an enrollment as this user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:427
+msgid "The enrollment status could not be updated"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:441
+msgid "The enrollment creation date could not be updated"
+msgstr ""
+
+#. Translators: %s = The post type name.
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:487
+msgid "Sorry, you are not allowed to delete enrollments as this user."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:527
+msgid "The enrollment cannot be deleted."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:660
+msgid "Filter results to records matching the specified status."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:667
+msgid "Limit results to a specific course or membership or a list of courses and/or memberships. Accepts a single post id or a comma separated list of post ids."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:690
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-progress-controller.php:223
+msgid "The ID of the course/membership."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:696
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-progress-controller.php:217
+msgid "The ID of the student."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:702
+msgid "Creation date. Format: `Y-m-d H:i:s`"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:707
+msgid "Date last modified. Format: `Y-m-d H:i:s`"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:713
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-progress-controller.php:245
+msgid "The status of the enrollment."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-enrollments-controller.php:719
+msgid "The enrollment trigger. Default is `any`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-instructors-controller.php:91
+msgid "You are not allowed to create new instructors."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-instructors-controller.php:108
+msgid "You are not allowed to delete this instructor."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-instructors-controller.php:126
+msgid "Retrieve only instructors for the specified course(s) and/or membership(s). Accepts a single WP Post ID or a comma separated list of IDs."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-instructors-controller.php:134
+msgid "Exclude instructors who do not have permissions for the specified course(s) and/or membership(s). Accepts a single WP Post ID or a comma separated list of IDs."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-instructors-controller.php:155
+msgid "You are not allowed to view this instructor."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-instructors-controller.php:189
+msgid "You are not allowed to list instructors."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-instructors-controller.php:273
+msgid "You are not allowed to edit this instructor."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:168
+msgid "Invalid course_id param. It must be a valid Course ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:179
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-sections-controller.php:221
+msgid "Invalid order param. It must be greater than 0."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:200
+msgid "Invalid drip_days param. It must be greater than 0."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:323
+msgid "WordPress post ID of the parent item. Must be a Section ID. 0 indicates an \"orphaned\" lesson which can be edited and viewed by instructors and admins but cannot be read by students."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:331
+msgid "WordPress post ID of the lesson's parent course."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:340
+msgid "Order of the lesson within its immediate parent."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:350
+msgid "Lesson ID of the prerequisite lesson."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:358
+msgid "Determines the weight of the lesson when grading the course."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:385
+msgid "The date and time when the lesson becomes available. Applicable only when drip_method is date. Format: Y-m-d H:i:s."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:393
+msgid "Number of days to wait before allowing access to the lesson. Applicable only when drip_method is enrollment, start, or prerequisite."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:402
+msgid ""
+"Determine the method with which to make the lesson content available.\n"
+"\t\t\t\t\t\n"
+"\t\t\t\t\t\tnone: Drip is disabled; the lesson is immediately available. \n"
+"\t\t\t\t\t\tdate: Lesson is made available at a specific date and time. \n"
+"\t\t\t\t\t\tenrollment: Lesson is made available a specific number of days after enrollment into the course. \n"
+"\t\t\t\t\t\tstart: Lesson is made available a specific number of days after the course's start date. Only available on courses with a access_opens_date. \n"
+"\t\t\t\t\t\tprerequisite: Lesson is made available a specific number of days after the prerequisite lesson is completed. \n"
+"\t\t\t\t\t "
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:419
+msgid "Denotes a lesson that's publicly accessible regardless of course enrollment."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:425
+msgid "Associate a quiz with this lesson."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:434
+msgid "Determines if a quiz is enabled for the lesson."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:440
+msgid "The post ID of the associated quiz."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:449
+msgid ""
+"Determines lesson progression requirements related to the quiz.\n"
+"\t\t\t\t\t\t\t\n"
+"\t\t\t\t\t\t\t\tcomplete: The quiz must be completed (with any grade) to progress the lesson. \n"
+"\t\t\t\t\t\t\t\tpass: A passing grade must be earned to progress the lesson. \n"
+"\t\t\t\t\t\t\t "
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-lessons-controller.php:506
+msgid "Filter lessons by the parent post (section) ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:138
+msgid "List of courses to automatically enroll students into when they're enrolled into the membership."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:150
+msgid "Visibility of the membership in catalogs and search results."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:158
+msgid "List of membership categories."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:167
+msgid "List of post instructors. Defaults to current user when creating a new post."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:182
+msgid "Determines the action to take when content restricted by the membership is accessed by a non-member. - `none`: Remain on page and display the message `restriction_message`. - `membership`: Redirect to the membership's permalink. - `page`: Redirect to the permalink of the page identified by `restriction_page_id`. - `custom`: Redirect to the URL identified by `restriction_url`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:193
+msgid "Message to display to non-members after a `restriction_action` redirect. When `restriction_action` is `none` replaces the page content with this message."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:216
+msgid "You must belong to the [lifterlms_membership_link id=\"{{membership_id}}\"] membership to access this content."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:223
+msgid "WordPress page ID used for redirecting non-members when `restriction_action` is `page`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:235
+msgid "URL used for redirecting non-members when `restriction_action` is `custom`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:248
+msgid "The WordPress page ID of the sales page. Required when `sales_page_type` equals `page`. Only returned when the `sales_page_type` equals `page`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:260
+msgid "Defines alternate content displayed to visitors and non-enrolled students when accessing the post. - `none` displays the post content. - `content` displays alternate content from the `excerpt` property. - `page` redirects to the WordPress page defined in `content_page_id`. - `url` redirects to the URL defined in `content_page_url`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:271
+msgid "The URL of the sales page content. Required when `sales_page_type` equals `url`. Only returned when the `sales_page_type` equals `url`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:284
+msgid "List of membership tags."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-memberships-controller.php:572
+msgid "Unique Membership Identifier. The WordPress Post ID"
+msgstr ""
+
+#. translators: %1$s the post type name.
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-sections-controller.php:117
+msgid "Unique %1$s Identifier. The WordPress Post ID"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-sections-controller.php:210
+msgid "Invalid parent_id param. It must be a valid Course ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-sections-controller.php:247
+msgid "WordPress post ID of the parent item. Must be a Course ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-sections-controller.php:258
+msgid "Order of the section within the course."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-sections-controller.php:326
+msgid "Filter sections by the parent post (course) ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-controller.php:74
+msgid "You are not allowed to create new students."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-controller.php:91
+msgid "You are not allowed to delete this student."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-controller.php:109
+msgid "Retrieve only students enrolled in the specified course(s) and/or membership(s). Accepts a single WP Post ID or a comma separated list of IDs."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-controller.php:117
+msgid "Retrieve only students not enrolled in the specified course(s) and/or membership(s). Accepts a single WP Post ID or a comma separated list of IDs."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-controller.php:153
+msgid "You are not allowed to view this student."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-controller.php:170
+msgid "You are not allowed to filter students by role."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-controller.php:174
+msgid "You are not allowed to list students."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-controller.php:393
+msgid "You are not allowed to edit this student."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-progress-controller.php:252
+msgid "Student's progress as a percentage."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-progress-controller.php:418
+msgid "Unique identifier for the student. The WP User ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-progress-controller.php:422
+msgid "Unique course, lesson, or section Identifer. The WordPress Post ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-students-progress-controller.php:516
+msgid "Created date cannot be in the future."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:117
+msgid "Include only webhooks matching a specific status."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:141
+msgid "Webhook ID."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:155
+msgid "The status of the webhook."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:162
+msgid "The webhook topic"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:171
+msgid "The webhook payload delivery URL."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:177
+msgid "An optional secret key used to generate the delivery signature."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:196
+msgid "The parsed resource from the `topic`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:202
+msgid "The parsed event from the `topic`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/class-llms-rest-webhooks-controller.php:208
+msgid "List of WordPress action hook associated with the webhook."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/llms-rest-server-functions.php:29
+msgid "You are not authorized to perform this request."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/llms-rest-server-functions.php:34
+msgid "The API credentials were invalid."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/llms-rest-server-functions.php:53
+msgid "Invalid or malformed request syntax."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/llms-rest-server-functions.php:68
+msgid "The requested resource could not be found."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/llms-rest-server-functions.php:82
+msgid "Internal Server Error."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:19
+msgid "Access plan price."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:28
+msgid "Access expiration type. `lifetime` provides access until cancelled or until a recurring payment fails. `limited-period` provides access for a limited period as specified by `access_length` and `access_period` `limited-date` provides access until the date specified by access_expires_date`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:39
+msgid "Date when access expires. Only applicable when `access_expiration` is `limited-date`. `Format: Y-m-d H:i:s`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:44
+msgid "Determine the length of access from time of purchase. Only applicable when `access_expiration` is `limited-period`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:54
+msgid "Determine the length of access from time of purchase. Only applicable when `access_expiration` is `limited-period`"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:61
+msgid "Restrict usage of this access plan to students enrolled in at least one of the specified memberships. Applicable only when `post_id` refers to a Course."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:75
+msgid "Text of the \"Purchase\" button"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:77
+#: templates/checkout/form-checkout.php:136
+msgid "Buy Now"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:81
+msgid "Billing frequency [0-6]. `0` denotes a one-time payment. `>= 1` denotes a recurring plan."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:89
+msgid "Must be an integer in the range 0-6"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:96
+msgid "For recurring plans only. Determines the number of intervals a plan should run for. `0` denotes the plan should run until cancelled."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:105
+msgid "For recurring plans only. Determines the interval of recurring payments."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:112
+msgid "Determines the course or membership which can be accessed through the plan."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:120
+msgid "Must be a valid course or membership ID"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:127
+msgid "Use this plans's redirect settings when purchasing a Membership this plan is restricted to. Applicable only when `availability_restrictions` exist for the plan"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:133
+msgid "WordPress page ID to use for checkout success redirection. Applicable only when `redirect_type` is page."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:142
+msgid "Determines the redirection behavior of the user's browser upon successful checkout or registration through the plan. `self`: Redirect to the permalink of the specified `post_id`. `page`: Redirect to the permalink of the WordPress page specified by `redirect_page_id`. `url`: Redirect to the URL specified by `redirect_url`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:153
+msgid "URL to use for checkout success redirection. Applicable only when `redirect_type` is `url`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:162
+msgid "Used to automatically end a scheduled sale. If empty, the plan remains on sale indefinitely. Only applies when `sale_enabled` is `true`. Format: `Y-m-d H:i:s`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:167
+msgid "Used to automatically start a scheduled sale. If empty, the plan is on sale immediately. Only applies when `sale_enabled` is `true`. Format: `Y-m-d H:i:s`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:172
+msgid "Mark the plan as \"On Sale\" allowing for temporary price adjustments."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:178
+msgid "Sale price. Only applies when `sale_enabled` is `true`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:186
+msgid "External identifier"
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:191
+msgid "Enable a trial period for a recurring access plan."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:197
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:207
+msgid "Determines the length of trial access. Only applies when `trial_enabled` is `true`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:219
+msgid "Determines the price of the trial period. Only applies when `trial_enabled` is `true`."
+msgstr ""
+
+#: libraries/lifterlms-rest/includes/server/schemas/schema-access-plans.php:228
+msgid "Access plan visibility."
+msgstr ""
+
+#: templates/achievements/loop.php:64
+msgid "You do not have any achievements yet. Enroll in a course to get started!"
+msgstr ""
+
+#: templates/achievements/template.php:25
+msgctxt "achievement earned date"
+msgid "Awarded on %s"
+msgstr ""
+
+#: templates/admin/analytics/analytics.php:52
+#: templates/admin/reporting/nav-filters.php:33
+msgid "Last 7 Days"
+msgstr ""
+
+#: templates/admin/analytics/analytics.php:58
+#: templates/admin/reporting/nav-filters.php:39
+msgid "Custom"
+msgstr ""
+
+#: templates/admin/analytics/analytics.php:62
+#: templates/admin/reporting/nav-filters.php:43
+msgid "Go"
+msgstr ""
+
+#: templates/admin/analytics/analytics.php:66
+#: templates/admin/reporting/nav-filters.php:47
+msgid "Toggle Filters"
+msgstr ""
+
+#: templates/admin/analytics/analytics.php:99
+#: templates/admin/reporting/nav-filters.php:79
+msgid "Filter by Course(s)"
+msgstr ""
+
+#. Translators: %d = Course ID.
+#. Translators: %d = Membership ID.
+#: templates/admin/analytics/analytics.php:101
+#: templates/admin/analytics/analytics.php:113
+#: templates/admin/reporting/nav-filters.php:85
+#: templates/admin/reporting/nav-filters.php:105
+msgid "(ID# %d)"
+msgstr ""
+
+#: templates/admin/analytics/analytics.php:111
+#: templates/admin/reporting/nav-filters.php:99
+msgid "Filter by Memberships(s)"
+msgstr ""
+
+#: templates/admin/analytics/analytics.php:120
+#: templates/admin/reporting/nav-filters.php:115
+msgid "Apply Filters"
+msgstr ""
+
+#: templates/admin/notices/staging.php:18
+msgid "It looks like you may have installed LifterLMS on a staging site!"
+msgstr ""
+
+#: templates/admin/notices/staging.php:20
+msgid "LifterLMS watches for potential signs of a staging site and disables automatic payments so that your students do not receive duplicate charges."
+msgstr ""
+
+#: templates/admin/notices/staging.php:25
+msgid "You can choose to enable automatic recurring payments using the buttons below. If you're not sure what to do, you can learn more %1$shere%2$s. You can always change your mind later by clicking \"Reset Automatic Payments\" on the LifterLMS General Settings screen under Tools and Utilities."
+msgstr ""
+
+#: templates/admin/notices/staging.php:33
+msgid "Leave Automatic Payments Disabled"
+msgstr ""
+
+#: templates/admin/notices/staging.php:35
+msgid "Enable Automatic Payments"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:30
+msgid "Refunded"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:33
+msgid "Source"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:91
+msgid "Resend Receipt"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:110
+msgid "View all"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:114
+msgid "Show Less Info"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:114
+msgid "Show More Info"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:127
+msgid "Refund Amount:"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:132
+msgid "Refund Note (optional):"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:137
+msgid "The refund will be recorded and you will need to manually issue a refund"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:137
+msgid "Refund Manually"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:138
+msgctxt "refund via payment gateway"
+msgid "Refund via %s"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:159
+msgid "Payment Amount:"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:164
+msgid "Payment Source (optional):"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:169
+msgid "Payment Transaction ID (optional):"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:174
+msgid "Payment Note (optional):"
+msgstr ""
+
+#: templates/admin/post-types/order-transactions.php:179
+msgid "Record Payment"
+msgstr ""
+
+#: templates/admin/post-types/students.php:31
+msgid "Enroll New Students"
+msgstr ""
+
+#: templates/admin/post-types/students.php:38
+msgid "Enroll Students"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:38
+msgid "Course Overview"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:51
+#: templates/admin/reporting/tabs/memberships/overview.php:51
+msgid "Currently enrolled students"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:62
+msgid "Current average progress"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:73
+msgid "Current average grade"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:83
+#: templates/admin/reporting/tabs/memberships/overview.php:62
+msgid "New orders %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:94
+#: templates/admin/reporting/tabs/memberships/overview.php:74
+msgid "Total sales %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:105
+#: templates/admin/reporting/tabs/memberships/overview.php:84
+msgid "New enrollments %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:115
+#: templates/admin/reporting/tabs/memberships/overview.php:94
+msgid "Unenrollments %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:126
+msgid "Lessons completed %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:136
+msgid "Course completions %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:147
+#: templates/admin/reporting/tabs/memberships/overview.php:106
+msgid "Achievements earned %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:158
+#: templates/admin/reporting/tabs/memberships/overview.php:117
+msgid "Certificates earned %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:169
+#: templates/admin/reporting/tabs/memberships/overview.php:128
+msgid "Emails sent %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/courses/overview.php:180
+#: templates/admin/reporting/tabs/memberships/overview.php:139
+#: templates/admin/reporting/tabs/quizzes/overview.php:97
+#: templates/admin/reporting/tabs/students/information.php:119
+msgid "Recent events"
+msgstr ""
+
+#: templates/admin/reporting/tabs/memberships/overview.php:38
+msgid "Membership Overview"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/attempt.php:60
+msgid "Correct answers"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/attempt.php:71
+msgid "Points earned"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/attempt.php:129
+msgid "Time Elapsed"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/attempt.php:138
+msgid "Answers"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/attempt.php:149
+msgid "Start a Review"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/attempt.php:153
+msgid "Save Review"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/attempt.php:159
+msgid "Delete Attempt"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/attempt.php:173
+msgid "Additional Attempts"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/overview.php:39
+msgid "Quiz Overview"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/overview.php:53
+msgid "Attempts %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/overview.php:65
+msgid "Average grade %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/overview.php:75
+msgid "Passed attempts %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/overview.php:85
+msgid "Failed attempts %s"
+msgstr ""
+
+#: templates/admin/reporting/tabs/quizzes/overview.php:99
+msgid "Quiz events coming soon..."
+msgstr ""
+
+#: templates/admin/reporting/tabs/students/courses-course.php:54
+msgid "Edit course"
+msgstr ""
+
+#: templates/admin/reporting/tabs/students/courses-course.php:70
+msgid "View course reports"
+msgstr ""
+
+#: templates/admin/reporting/tabs/students/courses-course.php:131
+msgid "Completed Date"
+msgstr ""
+
+#: templates/admin/reporting/tabs/students/courses-course.php:131
+msgid "Last Activity Date"
+msgstr ""
+
+#: templates/admin/reporting/tabs/students/information.php:39
+msgid "Registered"
+msgstr ""
+
+#: templates/admin/reporting/tabs/students/information.php:50
+msgid "Overall Progress"
+msgstr ""
+
+#: templates/admin/reporting/tabs/students/information.php:61
+#: templates/myaccount/my-grades-single.php:29
+msgid "Overall Grade"
+msgstr ""
+
+#: templates/admin/reporting/tabs/students/information.php:71
+msgid "Achievements earned"
+msgstr ""
+
+#: templates/admin/reporting/tabs/students/information.php:81
+msgid "Certificates earned"
+msgstr ""
+
+#: templates/admin/user-edit.php:25
+msgid "required"
+msgstr ""
+
+#: templates/certificates/actions.php:26
+msgid "Print"
+msgstr ""
+
+#: templates/certificates/actions.php:39
+msgid "Disable sharing"
+msgstr ""
+
+#: templates/certificates/actions.php:39
+msgid "Enable sharing"
+msgstr ""
+
+#: templates/certificates/actions.php:46
+msgid "Copy Shareable Link"
+msgstr ""
+
+#: templates/certificates/actions.php:48
+msgid "Copied"
+msgstr ""
+
+#: templates/certificates/actions.php:85
+msgid "Copy to clipboard is not supported or not available. You can copy and share the URL of this page from the address bar."
+msgstr ""
+
+#: templates/certificates/content-legacy.php:20
+msgid "Certificate Background"
+msgstr ""
+
+#: templates/certificates/loop.php:63
+msgid "You do not have any certificates yet."
+msgstr ""
+
+#: templates/checkout/form-checkout.php:62
+#: templates/checkout/form-confirm-payment.php:71
+msgid "Order Summary"
+msgstr ""
+
+#: templates/checkout/form-checkout.php:96
+#: templates/checkout/form-confirm-payment.php:92
+msgid "Payment Details"
+msgstr ""
+
+#: templates/checkout/form-checkout.php:98
+msgid "Enrollment Confirmation"
+msgstr ""
+
+#: templates/checkout/form-checkout.php:136
+msgid "Enroll Now"
+msgstr ""
+
+#. Translators: %1$s = opening anchor tag; %2$s = closing anchor tag.
+#: templates/checkout/form-confirm-payment.php:31
+msgid "Only pending orders can be confirmed. View your %1$sorder history%2$s for more information"
+msgstr ""
+
+#: templates/checkout/form-confirm-payment.php:97
+#: templates/checkout/form-switch-source.php:81
+msgid "Payment Method:"
+msgstr ""
+
+#: templates/checkout/form-coupon.php:22
+msgid "Have a coupon?"
+msgstr ""
+
+#: templates/checkout/form-coupon.php:23
+msgid "Click here to enter your code"
+msgstr ""
+
+#: templates/checkout/form-coupon.php:35
+msgid "Coupon Code"
+msgstr ""
+
+#: templates/checkout/form-coupon.php:50
+msgid "Apply Coupon"
+msgstr ""
+
+#. Translators: %s = coupon code.
+#: templates/checkout/form-coupon.php:64
+msgid "Coupon code \"%s\" has been applied to your order."
+msgstr ""
+
+#: templates/checkout/form-coupon.php:75
+msgid "Remove Coupon"
+msgstr ""
+
+#: templates/checkout/form-gateways.php:40
+msgid "Payment processing is currently disabled."
+msgstr ""
+
+#: templates/checkout/form-gateways.php:93
+msgid "There are no gateways enabled which can support the necessary transaction type for this access plan."
+msgstr ""
+
+#: templates/checkout/form-summary.php:24
+msgid "Terms"
+msgstr ""
+
+#: templates/checkout/form-summary.php:44
+msgid "Access"
+msgstr ""
+
+#: templates/checkout/form-switch-source.php:26
+msgid "Save Payment Method"
+msgstr ""
+
+#: templates/checkout/form-switch-source.php:28
+#: templates/checkout/form-switch-source.php:42
+msgid "Reactivate Subscription"
+msgstr ""
+
+#: templates/checkout/form-switch-source.php:30
+msgid "Save and Pay Now"
+msgstr ""
+
+#. Translators: %s = formatted price / amount due.
+#: templates/checkout/form-switch-source.php:71
+msgid "Due Now: %s"
+msgstr ""
+
+#: templates/course/categories.php:21
+msgid "Categories: "
+msgstr ""
+
+#: templates/course/complete-lesson-link.php:113
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Take Quiz"
+msgstr ""
+
+#: templates/course/difficulty.php:21
+msgid "Difficulty: %s "
+msgstr ""
+
+#: templates/course/favorite.php:53
+msgid "Remove favorite for this lesson"
+msgstr ""
+
+#: templates/course/favorite.php:57
+msgid "Add favorite for this lesson"
+msgstr ""
+
+#: templates/course/favorite.php:63
+msgid "Total favorites for this lesson"
+msgstr ""
+
+#: templates/course/length.php:20
+msgid "Estimated Time: %s "
+msgstr ""
+
+#. Translators: %1$s = Lessons Count.
+#: templates/course/lesson-count.php:23
+msgid "Number of lessons: %1$s"
+msgstr ""
+
+#: templates/course/lesson-navigation.php:32
+msgid "Previous Lesson"
+msgstr ""
+
+#: templates/course/lesson-navigation.php:45
+msgid "Back to Course"
+msgstr ""
+
+#: templates/course/lesson-navigation.php:61
+#: templates/quiz/start-button.php:65
+msgid "Next Lesson"
+msgstr ""
+
+#: templates/course/lesson-preview.php:45
+msgctxt "lesson order within section"
+msgid "%1$d of %2$d"
+msgstr ""
+
+#: templates/course/meta-wrapper-start.php:20
+msgctxt "course meta info title"
+msgid "Course Information"
+msgstr ""
+
+#: templates/course/outline-list-small.php:98
+msgid "Open All"
+msgstr ""
+
+#: templates/course/outline-list-small.php:100
+msgid "Close All"
+msgstr ""
+
+#: templates/course/parent-course.php:18
+msgid "Back to: %2$s
"
+msgstr ""
+
+#: templates/course/prerequisites.php:22
+msgid "Before starting this course you must complete the required prerequisite course: %s"
+msgstr ""
+
+#: templates/course/prerequisites.php:31
+msgid "Before starting this course you must complete the required prerequisite track: %s"
+msgstr ""
+
+#: templates/course/syllabus.php:26
+msgid "This course does not have any sections."
+msgstr ""
+
+#: templates/course/syllabus.php:58
+msgid "This section does not have any lessons."
+msgstr ""
+
+#: templates/course/tags.php:21
+msgid "Tags: "
+msgstr ""
+
+#: templates/course/tracks.php:21
+msgid "Tracks: "
+msgstr ""
+
+#: templates/emails/reset-password.php:11
+msgid "Someone recently requested that the password be reset for %s."
+msgstr ""
+
+#: templates/emails/reset-password.php:13
+msgid "To reset your password, click on the button below:"
+msgstr ""
+
+#: templates/emails/reset-password.php:17
+msgid "If this was a mistake you can ignore this email and your password will not be changed."
+msgstr ""
+
+#. Translators: %s = Enrollment date.
+#: templates/loop/enroll-date.php:24
+msgid "Enrolled: %s"
+msgstr ""
+
+#. Translators: %s = enrollment status.
+#: templates/loop/enroll-status.php:24
+msgid "Status: %s"
+msgstr ""
+
+#: templates/membership/price.php:34
+msgid "or"
+msgstr ""
+
+#: templates/myaccount/form-redeem-voucher.php:28
+msgctxt "Voucher Code"
+msgid "Submit"
+msgstr ""
+
+#: templates/myaccount/my-grades-single.php:24
+msgid "Complete"
+msgstr ""
+
+#: templates/myaccount/my-grades-single.php:36
+msgid "Latest Achievement"
+msgstr ""
+
+#: templates/myaccount/my-grades-single.php:38
+msgid "No achievements"
+msgstr ""
+
+#: templates/myaccount/my-grades-single.php:43
+msgid "No activity"
+msgstr ""
+
+#: templates/myaccount/my-grades-single.php:62
+msgid "Invalid course."
+msgstr ""
+
+#: templates/myaccount/my-grades.php:66
+msgid "Sort: "
+msgstr ""
+
+#: templates/myaccount/my-grades.php:68
+msgid "Enrollment Date (Most Recent)"
+msgstr ""
+
+#: templates/myaccount/my-grades.php:69
+msgid "Enrollment Date (Oldest)"
+msgstr ""
+
+#: templates/myaccount/my-grades.php:70
+msgid "Course Title (A-Z)"
+msgstr ""
+
+#: templates/myaccount/my-grades.php:71
+msgid "Course Title (Z-A)"
+msgstr ""
+
+#: templates/myaccount/my-notifications.php:17
+msgid "You have no notifications."
+msgstr ""
+
+#: templates/myaccount/my-orders.php:17
+msgid "No orders found."
+msgstr ""
+
+#: templates/myaccount/my-orders.php:25
+#: templates/myaccount/my-orders.php:38
+msgid "Expires"
+msgstr ""
+
+#: templates/myaccount/my-orders.php:26
+#: templates/myaccount/my-orders.php:45
+msgid "Next Payment"
+msgstr ""
+
+#: templates/myaccount/view-order-actions.php:56
+msgid "Cancel Subscription"
+msgstr ""
+
+#: templates/myaccount/view-order-information.php:45
+#: templates/myaccount/view-order-information.php:70
+msgid "Original Total"
+msgstr ""
+
+#: templates/myaccount/view-order-information.php:50
+#: templates/myaccount/view-order-information.php:86
+msgid "Coupon Discount"
+msgstr ""
+
+#: templates/myaccount/view-order-information.php:60
+msgid "Trial Total"
+msgstr ""
+
+#: templates/myaccount/view-order-information.php:76
+msgid "Sale Discount"
+msgstr ""
+
+#: templates/myaccount/view-order-information.php:97
+msgid "Total"
+msgstr ""
+
+#: templates/myaccount/view-order-information.php:152
+msgid "Last Payment Date"
+msgstr ""
+
+#: templates/product/access-plan-feature.php:15
+msgid "FEATURED"
+msgstr ""
+
+#: templates/product/access-plan-pricing.php:22
+msgid "SALE"
+msgstr ""
+
+#: templates/product/access-plan-pricing.php:42
+msgid "sale ends %s"
+msgstr ""
+
+#: templates/product/access-plan-restrictions.php:19
+msgid "MEMBER PRICING"
+msgstr ""
+
+#: templates/product/access-plan-trial.php:22
+msgid "TRIAL"
+msgstr ""
+
+#: templates/quiz/meta-information.php:30
+msgid "Quiz Information"
+msgstr ""
+
+#: templates/quiz/meta-information.php:34
+msgid "Minimum Passing Grade: %s"
+msgstr ""
+
+#: templates/quiz/meta-information.php:39
+msgid "Remaining Attempts: %s"
+msgstr ""
+
+#: templates/quiz/meta-information.php:43
+msgid "Questions: %s"
+msgstr ""
+
+#: templates/quiz/meta-information.php:48
+msgid "Time Limit: %s"
+msgstr ""
+
+#: templates/quiz/results-attempt-questions-list.php:27
+msgid "This question has been deleted"
+msgstr ""
+
+#: templates/quiz/results-attempt-questions-list.php:29
+#: templates/quiz/results-attempt-questions-list.php:52
+msgid "%1$d / %2$d points"
+msgstr ""
+
+#: templates/quiz/results-attempt-questions-list.php:71
+msgid "Selected answer: "
+msgstr ""
+
+#: templates/quiz/results-attempt-questions-list.php:80
+msgid "Correct answer: "
+msgstr ""
+
+#: templates/quiz/results-attempt-questions-list.php:88
+msgid "Clarification: "
+msgstr ""
+
+#: templates/quiz/results-attempt-questions-list.php:97
+msgid "Instructor remarks: "
+msgstr ""
+
+#: templates/quiz/results-attempt.php:21
+msgid "Attempt #%d Results"
+msgstr ""
+
+#: templates/quiz/results-attempt.php:29
+msgid "Correct Answers: %1$d / %2$d"
+msgstr ""
+
+#: templates/quiz/results-attempt.php:31
+msgid "Completed: %s"
+msgstr ""
+
+#: templates/quiz/results-attempt.php:32
+msgid "Total time: %s"
+msgstr ""
+
+#: templates/quiz/results.php:69
+msgid "View Previous Attempts"
+msgstr ""
+
+#: templates/quiz/results.php:71
+msgid "Select an Attempt"
+msgstr ""
+
+#. Translators: %1$d = Attempt number; %2$s = Grade percentage; %3$s = Pass/fail text.
+#: templates/quiz/results.php:75
+msgid "Attempt #%1$d - %2$s (%3$s)"
+msgstr ""
+
+#: templates/quiz/return-to-lesson.php:23
+msgid "Return to Lesson"
+msgstr ""
+
+#: templates/quiz/start-button.php:56
+msgid "Start Quiz"
+msgstr ""
+
+#: templates/quiz/start-button.php:61
+#: templates/quiz/start-button.php:71
+msgid "You are not able to take this quiz"
+msgstr ""
+
+#. Translators: %s = The singular name of the post type, eg: "Course".
+#: templates/shared/instructors.php:33
+msgid "%s Instructor"
+msgid_plural "%s Instructors"
+msgstr[0] ""
+msgstr[1] ""
+
+#. Translators: %d = Number of add-ons to perform the specified action against.
+#: assets/js/llms-admin-addons.js:3
+msgid "%d add-on"
+msgid_plural "%d add-ons"
+msgstr[0] ""
+msgstr[1] ""
+
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Award a New Certificate"
+msgstr ""
+
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Create a new certificate award from the selected template for the selected student."
+msgstr ""
+
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Create a new certificate award from this template for the selected student."
+msgstr ""
+
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Create a new certificate award from the selected template for this student."
+msgstr ""
+
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Award to"
+msgstr ""
+
+#: assets/js/llms-admin-award-certificate.js:1
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Search for a certificate template…"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:1
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Insert"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:1
+msgid "LifterLMS Certificate Merge Codes"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:1
+msgid "Merge code"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:1
+msgid "The certificate award has been created as a draft."
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:1
+msgid "Background Color"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Top"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Right"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Bottom"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Left"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Inner Margins"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Orientation"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Used for the {sequential_id} merge code when generating a certificate from this template."
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Custom Size Width"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Custom Size Height"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Custom Size Dimension"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "in (Inches)"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "mm (Millimeters)"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgctxt "certificate sizing option"
+msgid "Custom"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+#: blocks/access-plan-button/index.js:1
+#: blocks/login/index.js:1
+msgid "Size"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Used as the title for certificates generated from this template."
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Are you sure you wish to replace the certificate content with the original default layout? This action cannot be undone!"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Are you sure you wish to unpublish the certificate and replace it's content with the original default layout? This action cannot be undone!"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Confirm template reset"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:20
+msgid "Reset template"
+msgstr ""
+
+#: assets/js/llms-admin-certificate-editor.js:22
+#: assets/js/llms-components.js:17
+#: assets/js/llms-spinner.js:1
+#: assets/js/llms.js:2468
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Loading…"
+msgstr ""
+
+#: assets/js/llms-components.js:1
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Click to copy."
+msgstr ""
+
+#: assets/js/llms-components.js:13
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Search…"
+msgstr ""
+
+#: assets/js/llms-components.js:13
+msgid "Search for posts…"
+msgstr ""
+
+#. Translators: %1$s = Post title; %2$s = Post id.
+#: assets/js/llms-components.js:15
+msgctxt "Post search result label"
+msgid "%1$s (ID# %2$d)"
+msgstr ""
+
+#: assets/js/llms-components.js:15
+msgid "Search users by email or name…"
+msgstr ""
+
+#. Translators: %1$s = User's name; %2$s = User's id.
+#: assets/js/llms-components.js:17
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:8
+msgctxt "User search result label"
+msgid "%1$s (ID# %2$d)"
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "No Access Plans Found"
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "Select access plan"
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "No Access Plans found matching your selection. This block will not be displayed."
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "No Access Plan selected. Please choose an Access Plan from the block sidebar panel."
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+#: blocks/course-author/index.js:5
+#: blocks/course-continue/index.js:5
+#: blocks/course-meta-info/index.js:5
+#: blocks/course-outline/index.js:5
+#: blocks/course-prerequisites/index.js:5
+#: blocks/course-reviews/index.js:5
+#: blocks/course-syllabus/index.js:5
+#: blocks/courses/index.js:3
+#: blocks/login/index.js:1
+#: blocks/my-account/index.js:1
+#: blocks/my-achievements/index.js:1
+#: blocks/pricing-table/index.js:5
+#: blocks/registration/index.js:1
+msgid "Error loading content. Please check block settings are valid. This block will not be displayed."
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "Access Plan Button Settings"
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "Select the access plan to display a button for."
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+#: blocks/login/index.js:1
+msgid "Controls the size of the button."
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "Controls the style of the button. Your theme and/or custom CSS may alter the colors defined by these styles."
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "Primary"
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "Secondary"
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "Danger"
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Text"
+msgstr ""
+
+#: blocks/access-plan-button/index.js:1
+msgid "The text to display on the button."
+msgstr ""
+
+#: blocks/certificate-title/index.js:13
+msgid "Certificate of Achievement"
+msgstr ""
+
+#: blocks/checkout/index.js:1
+msgid "One"
+msgstr ""
+
+#: blocks/checkout/index.js:1
+msgid "Two"
+msgstr ""
+
+#: blocks/checkout/index.js:1
+msgid "There was an error loading the content. This block will not be displayed."
+msgstr ""
+
+#: blocks/checkout/index.js:1
+msgid "Checkout not available. This block will not be displayed."
+msgstr ""
+
+#: blocks/checkout/index.js:1
+msgid "Determines the number of columns on the checkout screen. 1 or 2 are the only acceptable values."
+msgstr ""
+
+#: blocks/checkout/index.js:1
+msgid "Number of Columns"
+msgstr ""
+
+#: blocks/course-author/index.js:1
+#: blocks/course-continue/index.js:1
+#: blocks/course-meta-info/index.js:1
+#: blocks/course-outline/index.js:1
+#: blocks/course-prerequisites/index.js:1
+#: blocks/course-reviews/index.js:1
+#: blocks/course-syllabus/index.js:1
+#: blocks/courses/index.js:1
+#: blocks/pricing-table/index.js:1
+msgid "Select course"
+msgstr ""
+
+#. Translators: %s = Post type name.
+#: blocks/course-author/index.js:3
+#: blocks/course-continue/index.js:3
+#: blocks/course-meta-info/index.js:3
+#: blocks/course-outline/index.js:3
+#: blocks/course-prerequisites/index.js:3
+#: blocks/course-reviews/index.js:3
+#: blocks/course-syllabus/index.js:3
+#: blocks/courses/index.js:3
+#: blocks/pricing-table/index.js:3
+msgid "Inherit from current %s"
+msgstr ""
+
+#: blocks/course-author/index.js:3
+#: blocks/course-continue/index.js:3
+#: blocks/course-meta-info/index.js:3
+#: blocks/course-outline/index.js:3
+#: blocks/course-prerequisites/index.js:3
+#: blocks/course-reviews/index.js:3
+#: blocks/course-syllabus/index.js:3
+#: blocks/courses/index.js:3
+#: blocks/pricing-table/index.js:3
+msgid "Loading"
+msgstr ""
+
+#. Translators: %s = Post type name.
+#: blocks/course-author/index.js:5
+#: blocks/course-continue/index.js:5
+#: blocks/course-meta-info/index.js:5
+#: blocks/course-outline/index.js:5
+#: blocks/course-prerequisites/index.js:5
+#: blocks/course-reviews/index.js:5
+#: blocks/course-syllabus/index.js:5
+#: blocks/pricing-table/index.js:5
+msgid "Select the %s to associate with this block."
+msgstr ""
+
+#: blocks/course-author/index.js:5
+#: blocks/pricing-table/index.js:5
+msgid "Author not found. This block will not be displayed."
+msgstr ""
+
+#: blocks/course-author/index.js:5
+#: blocks/course-continue/index.js:5
+#: blocks/course-meta-info/index.js:5
+#: blocks/course-prerequisites/index.js:5
+#: blocks/course-reviews/index.js:5
+#: blocks/pricing-table/index.js:5
+msgid "No course selected. Please choose a Course from the block sidebar panel."
+msgstr ""
+
+#: blocks/course-author/index.js:5
+msgid "Course Author Settings"
+msgstr ""
+
+#: blocks/course-author/index.js:5
+msgid "Avatar Size"
+msgstr ""
+
+#: blocks/course-author/index.js:5
+msgid "The size of the avatar in pixels."
+msgstr ""
+
+#: blocks/course-author/index.js:5
+msgid "Display Bio"
+msgstr ""
+
+#: blocks/course-author/index.js:5
+msgid "Author bio is displayed."
+msgstr ""
+
+#: blocks/course-author/index.js:5
+msgid "Author bio is hidden."
+msgstr ""
+
+#: blocks/course-continue/index.js:5
+msgid "No progress data found for this course. This block will not be displayed."
+msgstr ""
+
+#: blocks/course-continue/index.js:5
+msgid "Course Continue Settings"
+msgstr ""
+
+#: blocks/course-meta-info/index.js:5
+msgid "No meta information available for this course. This block will not be displayed."
+msgstr ""
+
+#: blocks/course-meta-info/index.js:5
+msgid "Course Meta Info Settings"
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "No outline information available for this course. This block will not be displayed."
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "Course Outline Settings"
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "Collapse"
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "If true, will make the outline sections collapsible via click events."
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "Toggles"
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "If true, will display \"Collapse All\" and \"Expand All\" toggles at the bottom of the outline. Only functions if \"collapse\" is true."
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "Outline Type"
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "Select the type of outline to display."
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "Full"
+msgstr ""
+
+#: blocks/course-outline/index.js:5
+msgid "Current Section"
+msgstr ""
+
+#: blocks/course-prerequisites/index.js:5
+msgid "No prerequisites available for this course. This block will not be displayed."
+msgstr ""
+
+#: blocks/course-prerequisites/index.js:5
+msgid "Course Prerequisites Settings"
+msgstr ""
+
+#: blocks/course-reviews/index.js:5
+msgid "No reviews found for this course. This block will not be displayed."
+msgstr ""
+
+#: blocks/course-reviews/index.js:5
+msgid "Course Reviews Settings"
+msgstr ""
+
+#: blocks/course-syllabus/index.js:5
+msgid "No syllabus found for this course. This block will not be displayed."
+msgstr ""
+
+#: blocks/course-syllabus/index.js:5
+msgid "Course Syllabus Settings"
+msgstr ""
+
+#: blocks/courses/index.js:1
+#: blocks/memberships/index.js:1
+msgid "- All -"
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "No courses found matching your selection. This block will not be displayed."
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Courses Settings"
+msgstr ""
+
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Category"
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Display courses from a specific Course Category only."
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Show hidden courses?"
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Whether or not courses with a \"hidden\" visibility should be included. Defaults to \"yes\" (hidden courses displayed). Switch to \"no\" to exclude hidden courses."
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Display only specific course(s). You can select multiple courses."
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Search available courses"
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Show only my courses"
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "No"
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Show only courses the current student is enrolled in. By default (\"no\") shows courses regardless of enrollment."
+msgstr ""
+
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Ascending"
+msgstr ""
+
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Descending"
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Display courses in ascending or descending order."
+msgstr ""
+
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Order by"
+msgstr ""
+
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Date modified"
+msgstr ""
+
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Random"
+msgstr ""
+
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Menu Order"
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid "Determines which field is used to order courses in the courses list."
+msgstr ""
+
+#: blocks/courses/index.js:3
+#: blocks/memberships/index.js:1
+msgid "Per Page"
+msgstr ""
+
+#: blocks/courses/index.js:3
+msgid " Determines the number of results to display. Default returns all available courses."
+msgstr ""
+
+#: blocks/login/index.js:1
+msgid "Displays LifterLMS register form. This block will not be displayed."
+msgstr ""
+
+#: blocks/login/index.js:1
+msgid "Login Form Settings"
+msgstr ""
+
+#: blocks/login/index.js:1
+#: blocks/my-account/index.js:1
+msgid "Login redirect URL"
+msgstr ""
+
+#: blocks/memberships/index.js:1
+msgid "Error loading content. Please check block settings are valid."
+msgstr ""
+
+#: blocks/memberships/index.js:1
+msgid "No memberships found matching this criteria."
+msgstr ""
+
+#: blocks/memberships/index.js:1
+msgid "Memberships Settings"
+msgstr ""
+
+#: blocks/memberships/index.js:1
+msgid "Display memberships from a specific Membership Category only."
+msgstr ""
+
+#: blocks/memberships/index.js:1
+msgid "Membership ID"
+msgstr ""
+
+#: blocks/memberships/index.js:1
+msgid "Display only a specific membership. Use the memberships’s post ID. If using this option, all other options are rendered irrelevant."
+msgstr ""
+
+#: blocks/memberships/index.js:1
+msgid "Display memberships in ascending or descending order."
+msgstr ""
+
+#: blocks/memberships/index.js:1
+msgid "Determines which field is used to order memberships in the memberships list. This block will not be displayed."
+msgstr ""
+
+#: blocks/memberships/index.js:1
+msgid " Determines the number of results to display. Default returns all available memberships. This block will not be displayed."
+msgstr ""
+
+#: blocks/my-account/index.js:1
+msgid "Account preview not available. This block will not be displayed."
+msgstr ""
+
+#: blocks/my-account/index.js:1
+#: blocks/my-achievements/index.js:1
+msgid "My Account Settings"
+msgstr ""
+
+#: blocks/my-achievements/index.js:1
+msgid "Current user"
+msgstr ""
+
+#: blocks/my-achievements/index.js:1
+msgid "No achievements found matching your selection. This block will not be displayed."
+msgstr ""
+
+#: blocks/my-achievements/index.js:1
+msgid "Count"
+msgstr ""
+
+#: blocks/my-achievements/index.js:1
+msgid "Number of achievements to display. Leave empty to display all achievements for user."
+msgstr ""
+
+#: blocks/my-achievements/index.js:1
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Columns"
+msgstr ""
+
+#: blocks/my-achievements/index.js:1
+msgid "Number of columns to display."
+msgstr ""
+
+#: blocks/my-achievements/index.js:1
+msgid "Select a user to display achievements for. Leave empty to display achievements for the current user."
+msgstr ""
+
+#: blocks/navigation-link/index.js:1
+msgid "LifterLMS Link Settings"
+msgstr ""
+
+#: blocks/navigation-link/index.js:1
+msgid "URL"
+msgstr ""
+
+#: blocks/pricing-table/index.js:5
+msgid "Pricing Table Settings"
+msgstr ""
+
+#: blocks/pricing-table/index.js:5
+msgid "Post Type"
+msgstr ""
+
+#: blocks/registration/index.js:1
+msgid "Registration form preview not available. This block will not be displayed."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:1
+msgid "everyone"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:1
+msgid "enrolled users"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:1
+msgid "non-enrolled users or visitors"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:1
+msgid "logged in users"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:1
+msgid "logged out users"
+msgstr ""
+
+#. Translators: %s = visibility setting label.
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:3
+msgid "This block is only visible to %s"
+msgstr ""
+
+#. Translators: %1$s = Post title; %2$ = post id.
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgctxt "Search result label"
+msgid "%1$s (ID# %2$d)"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "in this course"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "in any course"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "in this membership"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "in any membership"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "in any course or membership"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "in all of the selected courses or memberships"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "in any of the selected courses or memberships"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Enrollment Visibility"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Display to"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Enrolled In"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Not Enrolled In"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Search by course title…"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Search by membership title…"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "User Email is a required field."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Restore user email field?"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Course Information Options"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Title Headline Size"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Headline size for the information title element."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Estimated Completion Time"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "How many hours, days, weeks, etc… should a student expect to spend in order to complete this course."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Display Estimated Time"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Displaying estimated time"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Hiding estimated time"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Display Difficulty"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Displaying difficulty"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Hiding difficulty"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Display Tracks"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Displaying tracks list"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Hiding tracks list"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Display Categories"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Displaying categories list"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Hiding categories list"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Display Tags"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Displaying tags list"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Hiding tags list"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Estimated Time"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Difficulty"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Tracks"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Categories"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Tags"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Memebership"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Lesson Navigation"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Lesson Progression (Mark Complete)"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Validation errors were encountered while attempting to save your access plans."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "LifterLMS Pricing Table"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "LifterLMS PHP Template"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Attention: Do not remove this block!"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:5
+msgid "Removal will cause unintended effects on your LMS site."
+msgstr ""
+
+#. translators: %s is the template title
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:6
+msgid "This is an editor placeholder for the %s. On your site this will be replaced by the relevant template. You can move this placeholder around and add further blocks around it to extend the template."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:6
+msgid "Add optional placeholder text"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:8
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Reorder instructor"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:8
+msgid "Reorder option"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:8
+msgid "Make default"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:8
+msgid "Option label"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:8
+msgid "Database key value"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:8
+msgid "Delete Option"
+msgstr ""
+
+#. Translators: %d = Option index in the list of options.
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:10
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:24
+msgid "Option %d"
+msgstr ""
+
+#. Translators: %d = Option index in the list of options.
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:26
+msgid "option_%d"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "Options"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "Add option"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "Hide keys"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "Show keys"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "100%"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "75%"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "66.66%"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "50%"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "33.33%"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "25%"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:12
+msgid "Select a field"
+msgstr ""
+
+#. Translators: %s = user-submitted value.
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:14
+msgid "The value \"%s\" contains invalid characters. Only letters, numbers, underscores, and hyphens are allowed."
+msgstr ""
+
+#. Translators: %s = user-submitted value.
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:16
+msgid "The user meta key \"%s\" is not unique. Please choose a unique value."
+msgstr ""
+
+#. Translators: %s = user-submitted value.
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:18
+msgid "The ID \"%s\" is not unique. Please choose a unique field ID."
+msgstr ""
+
+#. Translators: %s = user-submitted value.
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:20
+msgid "The name \"%s\" is not unique. Please choose a globally unique field name."
+msgstr ""
+
+#. Translators: %s = user-submitted value.
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "The chosen value \"%s\" is invalid."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "The value cannot be blank."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Required"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Field is required."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Field is optional."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Field Width"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Determines the width of the form field."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Placeholder"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Displays a placeholder option as the selected instead of a default value."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Confirmation Field"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "A Confirmation field is active."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "No confirmation field."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Data Storage"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Usermeta Key"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Database field key name. Only accepts alphanumeric characters, hyphens, and underscores."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Field Name"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "The field's HTML name attribute."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Field ID"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "The field's HTML id attribute."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Field Layout"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
+msgid "Stacked"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Input Confirmation Group"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Adds a required confirmation field to an input field."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Remove confirmation field"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Checkboxes"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A single checkbox toggle or a group of multiple checkboxes."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Radio"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A group of radio inputs which can be populated with any number of options."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Dropdown"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A select field which can be populated with any number of options."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "An input field which accepts any form of text."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A text input field which only accepts an email address."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User password confirmation field."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Number"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "An input field which only accepts numeric input."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "An input field which only accepts phone numbers."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Website Address / URL"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "An input field which only accepts a website address or URL."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A simple text input field."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Minimum Value"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Specify the minimum allowed value. Leave blank for no minimum."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Maximum Value"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Specify the maximum allowed value. Leave blank for no maximum."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Textarea"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A text field accepting multiple lines of user information."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Rows"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Specify the number of text rows for the textarea input."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Voucher Code Redemption"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Allows user to redeem a voucher code during account registration."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Toggleable"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Field is revealed when the toggle is clicked."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Field is always visible."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Display Name"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Allows a user to choose how their name will be displayed publicly on the site."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Login"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Field used to collect a user's account username. If this field is omitted a username will be automatically generated based off their email address. Users can always login using either their email address or username."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Email"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A special field used to collect a user's account email address."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A special field used to collect a user's first name."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A special field used to collect a user's last name."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User name"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A special field used to collect a user's first and last name."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Password"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A special field used to collect a user's account password."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A strong password is required with at least 8 characters. To make it stronger, use both upper and lower case letters, numbers, and symbols."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Password strength meter description"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Enter a description for the password strength meter"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Password strength meter"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Password strength meter is enabled."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Password strength meter is disabled."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Minimum Password Strength"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Minimum Password Length"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Address"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A group of fields used to collect a user's full address."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Street Address"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Collect a user's street address."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A special field used to collect a user's street address."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Street Address Additional Information"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Apartment, suite, etc…"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User City"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A special field used to collect a user's billing city."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Country"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A special field used to collect a user's billing country."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Postal Code"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A special field used to collect a user's postal or zip code."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "User Phone"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "A field used to collect a user's phone number."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Visible in the catalog and search results."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Only visible in the catalog."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Only visible in search results."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Hidden from catalog and search results."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Catalog & Search Visibility"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Catalog Visibility"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "No fields found matching your search but you can use the shortcode below if the meta information exists in the database."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Shortcode"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "LifterLMS User Information Shortcodes"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Filter by label, key, or ID…"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Default value"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Optional text displayed when no information exists or the user is logged out."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Primary Instructor"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Edit instructor"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Instructor is visible on frontend"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Instructor is hidden on frontend"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Remove"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "The form has been restored to the default template."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Undo"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Form Settings"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Display Form Title"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Displaying form title."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Not displaying form title."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Free Access Plan Form Title"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "The form title to be shown for free access plans."
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Revert to Default"
+msgstr ""
+
+#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:28
+msgid "Replace the existing content of the form with the original default content."
+msgstr ""
+
+#: blocks/access-plan-button/block.json
+msgctxt "block title"
+msgid "Access Plan Button"
+msgstr ""
+
+#: blocks/access-plan-button/block.json
+msgctxt "block description"
+msgid "Outputs a button which links to the purchase page for a LifterLMS access plan. Useful if you’re creating custom sales pages for courses or memberships."
+msgstr ""
+
+#: blocks/certificate-title/block.json
+msgctxt "block title"
+msgid "Certificate Title"
+msgstr ""
+
+#: blocks/certificate-title/block.json
+msgctxt "block description"
+msgid "Displays the title of a certificate."
+msgstr ""
+
+#: blocks/checkout/block.json
+msgctxt "block title"
+msgid "Checkout"
+msgstr ""
+
+#: blocks/checkout/block.json
+msgctxt "block description"
+msgid "Outputs the checkout page for purchasing courses and memberships in LifterLMS."
+msgstr ""
+
+#: blocks/course-author/block.json
+msgctxt "block title"
+msgid "Course Author"
+msgstr ""
+
+#: blocks/course-author/block.json
+msgctxt "block description"
+msgid "Display the Course Author’s name, avatar, and (optionally) biography for a specific course."
+msgstr ""
+
+#: blocks/course-continue/block.json
+msgctxt "block title"
+msgid "Course Progress with Continue Button"
+msgstr ""
+
+#: blocks/course-continue/block.json
+msgctxt "block description"
+msgid "Display a progress bar with continue button for a specific course. Renders only for enrolled students."
+msgstr ""
+
+#: blocks/course-meta-info/block.json
+msgctxt "block title"
+msgid "Course Meta Information"
+msgstr ""
+
+#: blocks/course-meta-info/block.json
+msgctxt "block description"
+msgid "Display all meta information for a course."
+msgstr ""
+
+#: blocks/course-outline/block.json
+msgctxt "block title"
+msgid "Course Outline"
+msgstr ""
+
+#: blocks/course-outline/block.json
+msgctxt "block description"
+msgid "Outputs the course outline as displayed by the widget of the same name. Can show full course outline or just the current section outline. Setting the Outline Type to Current Sections refers to the section that contains the next uncompleted lesson for current student. If the student is not enrolled then the first section in the course will be displayed."
+msgstr ""
+
+#: blocks/course-prerequisites/block.json
+msgctxt "block title"
+msgid "Course Prerequisites"
+msgstr ""
+
+#: blocks/course-prerequisites/block.json
+msgctxt "block description"
+msgid "Display a notice describing unfulfilled prerequisites for a course."
+msgstr ""
+
+#: blocks/course-reviews/block.json
+msgctxt "block title"
+msgid "Course Reviews"
+msgstr ""
+
+#: blocks/course-reviews/block.json
+msgctxt "block description"
+msgid "Display reviews and review form for a LifterLMS Course."
+msgstr ""
+
+#: blocks/course-syllabus/block.json
+msgctxt "block title"
+msgid "Course Syllabus"
+msgstr ""
+
+#: blocks/course-syllabus/block.json
+msgctxt "block description"
+msgid "Display the Course Syllabus for a specific course."
+msgstr ""
+
+#: blocks/courses/block.json
+msgctxt "block title"
+msgid "Courses"
+msgstr ""
+
+#: blocks/courses/block.json
+msgctxt "block description"
+msgid "Displays a loop of LifterLMS Course \"Tiles\" as displayed on the default \"Courses\" page."
+msgstr ""
+
+#: blocks/login/block.json
+msgctxt "block title"
+msgid "LifterLMS Login"
+msgstr ""
+
+#: blocks/login/block.json
+msgctxt "block description"
+msgid "Displays the LifterLMS login form. If a user is already logged in, nothing is displayed."
+msgstr ""
+
+#: blocks/memberships/block.json
+msgctxt "block title"
+msgid "Memberships"
+msgstr ""
+
+#: blocks/memberships/block.json
+msgctxt "block description"
+msgid "Display a loop of LifterLMS Membership \"Tiles\" as displayed on the default \"Memberships\" page."
+msgstr ""
+
+#: blocks/my-account/block.json
+msgctxt "block title"
+msgid "My Account"
+msgstr ""
+
+#: blocks/my-account/block.json
+msgctxt "block description"
+msgid "Outputs the login, registration, dashboard, profile and reset password templates."
+msgstr ""
+
+#: blocks/my-achievements/block.json
+msgctxt "block title"
+msgid "My Achievements"
+msgstr ""
+
+#: blocks/my-achievements/block.json
+msgctxt "block description"
+msgid "Outputs achievements using the achievement loop templates."
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block title"
+msgid "LifterLMS Link"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block description"
+msgid "Add dynamic LifterLMS links to navigation menus."
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "LifterLMS"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "Dashboard"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "My Courses"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "My Grades"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "My Memberships"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "My Achievements"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "My Certificates"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "Notifications"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "Edit Account"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "Redeem a Voucher"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "Order History"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "Sign In"
+msgstr ""
+
+#: blocks/navigation-link/block.json
+msgctxt "block keyword"
+msgid "Sign Out"
+msgstr ""
+
+#: blocks/pricing-table/block.json
+msgctxt "block title"
+msgid "Pricing Table"
+msgstr ""
+
+#: blocks/pricing-table/block.json
+msgctxt "block description"
+msgid "Outputs a LifterLMS Pricing table (like those found on a course or membership page) for a course or membership outside of a course or membership. Useful if you want to create custom sales pages."
+msgstr ""
+
+#: blocks/registration/block.json
+msgctxt "block title"
+msgid "LifterLMS Register"
+msgstr ""
+
+#: blocks/registration/block.json
+msgctxt "block description"
+msgid "Displays the LifterLMS registration form. If a user is already logged in, nothing is displayed."
+msgstr ""
diff --git a/lerna.json b/lerna.json
deleted file mode 100644
index a2bb50ba7c..0000000000
--- a/lerna.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "packages": [
- "packages/*"
- ],
- "version": "independent"
-}
diff --git a/libraries/README.md b/libraries/README.md
deleted file mode 100644
index 44ab13842b..0000000000
--- a/libraries/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-External Libraries
-==================
-
-Installation directory for plugin libraries included in the core plugin but developed outside of this repository.
-
-See [Installing for Development](../docs/installing.md) for installation instructions.
diff --git a/libraries/lifterlms-blocks/CHANGELOG.md b/libraries/lifterlms-blocks/CHANGELOG.md
new file mode 100644
index 0000000000..286e1a88dd
--- /dev/null
+++ b/libraries/lifterlms-blocks/CHANGELOG.md
@@ -0,0 +1,573 @@
+LifterLMS Blocks Changelog
+==========================
+
+v2.5.8 - 2024-09-13
+-------------------
+
+##### Bug Fixes
+
++ Avoid an unsaved error prompt after saving the details of an access plan. [#232](https://github.com/gocodebox/lifterlms-blocks/issues/232)
+
+
+v2.5.7 - 2024-08-09
+-------------------
+
+##### Bug Fixes
+
++ Fixed issues with featured video thumbnails.
+
+
+v2.5.6 - 2024-07-30
+-------------------
+
+##### Bug Fixes
+
++ Avoids breaking the output of certain blocks that contain forms.
+
+
+v2.5.5 - 2024-07-09
+-------------------
+
+##### Security Fixes
+
++ Adds additional security checks and escaping.
+
+
+v2.5.4 - 2024-04-25
+-------------------
+
+##### Bug Fixes
+
++ Re-adds the Launch Course Builder button to the top of the Course Edit page. [#220](https://github.com/gocodebox/lifterlms-blocks/issues/220)
+
+
+v2.5.3 - 2024-04-17
+-------------------
+
+##### New Features
+
++ Added LifterLMS icon to LifterLMS Blocks block category.
+
+##### Bug Fixes
+
++ Fixed Lesson Progression (Mark Complete) button appearance in editor.
+
+
+v2.5.2 - 2023-11-01
+-------------------
+
+##### Bug Fixes
+
++ Fixed an issue when duplicating a LifterLMS preset form field. [#169](https://github.com/gocodebox/lifterlms-blocks#169)
+
+##### Developer Notes
+
++ Improved compatibility with PHP 8.2.
+
+
+v2.5.1 - 2023-06-13
+-------------------
+
+##### Bug Fixes
+
++ Fixes Launch Course Builder buttons not working when WordPress was installed in a subdirectory.
+
+
+v2.5.0 - 2023-06-06
+-------------------
+
+##### New Features
+
++ Replaced font-based block icons with SVG icons.
+
+##### Updates and Enhancements
+
++ Changes to Launch Course Builder buttons and Course Builder meta-box.
++ Update default icon color to `currentColor`.
++ Updated minimum LifterLMS core version to 7.2.0.
+
+##### Bug Fixes
+
++ Fixed issue when new Course/Membership visibility options were added via JS filter hook. [#190](https://github.com/gocodebox/lifterlms-blocks#190)
+
+##### Developer Notes
+
++ Deprecated LLMS_Blocks_Course_Syllabus_Block class. The Syllabus Block is now implemented in the LifterLMS core plugin.
+
+
+v2.4.3 - 2022-06-09
+-------------------
+
+##### Bug Fixes
+
++ Fixed an issue that prevented editing form confirmation fields when running WordPress 6.0. [#170](https://github.com/gocodebox/lifterlms-blocks#170)
++ Fixed field columns sizing in the block editor.
+
+
+v2.4.2 - 2022-04-07
+-------------------
+
+##### Bug Fixes
+
++ Fixed issue where the User Login form field was shown to logged-in users. [gocodebox/lifterlms#2071](https://github.com/gocodebox/lifterlms#2071)
+
+
+v2.4.1 - 2022-03-30
+-------------------
+
+##### Bug Fixes
+
++ Fixed issue when adding two custom fields of the same type resulting in the first changing its usermeta key. [#160](https://github.com/gocodebox/lifterlms-blocks/issues/160)
+
+
+v2.4.0 - 2022-02-25
+-------------------
+
+##### Updates and Enhancements
+
++ Components added to `window.llms.components` are now aware of components added to the object from other sources.
+
+##### Bug Fixes
+
++ Fixed access to non-existing variable when current user tries to edit course/membership instructors without proper permissions. [#140](https://github.com/gocodebox/lifterlms-blocks#140)
+
+
+v2.3.2 - 2022-02-22
+-------------------
+
+##### Updates and Enhancements
+
++ Added an option to specify a custom checkout form title for free access plans.
+
+
+v2.3.1 - 2022-01-26
+-------------------
+
+##### Updates and Enhancements
+
++ Resolved PHP 8.1 deprecation warnings.
+
+
+v2.3.0 - 2022-01-25
+-------------------
+
+##### New Features
+
++ Added the llms/php-template block, used by the Site Editor to load php templates.
+
+##### Updates and Enhancements
+
++ Adds support for WordPress 5.9.
++ The minimum required WordPress version is now 5.5.
+
+
+v2.2.1 - 2021-09-29
+-------------------
+
++ Bugfix: Fixed deprecated filter warning encountered when using certain development versions of the WordPress core.
+
+
+v2.2.0 - 2021-07-19
+-------------------
+
+##### Updates
+
++ **Increases minimum WordPress Core version requirement to version 5.4!**.
++ Tested and compatible with WordPress core 5.8
++ Don't load block editor assets on the "blockified" widgets screen.
++ Remove timeouts and subscription debouncing used by blocks watcher which handles the `llms/user-info-fields` redux store.
++ Stop debouncing the blocks watcher.
+
+##### Bug fixes
+
++ Confirm group blocks now configure the block's id, name, and match attributes instead of being configured in the block render via the `blocks/form-fields/group-data` module.
++ Don't define the `match` attribute during creation of a user password block.
+
+
+v2.1.1 - 2021-07-08
+-------------------
+
++ Fixed issue causing visibility controls to display for blocks which have no visibility attributes defined.
+
+
+v2.1.0 - 2021-06-28
+-------------------
+
+##### Updates
+
++ Adjusted priority of block editor JS assets to load at priority `5` instead of `999`. Resolves plugin conflicts encountered when using block-level visibility on blocks registered after visibility filters are applied.
++ Removed usage of [react-sortable-hoc](https://github.com/clauderic/react-sortable-hoc) and replaced with [dndkit](https://github.com/clauderic/dnd-kit) for drag and drop UX within the editor.
++ Refactored the instructors sidebar (on courses and memberships) as well as the option shorting (for fields with options) to utilize `dndkit`.
+
+##### Bugfixes
+
++ Fixed an issue encountered on password confirmation fields when adjusting the minimum password length option on the user password block.
+
+
+v2.0.1 - 2021-06-21
+-------------------
+
++ Use non-unique error notice IDs for reusable multiple error notice.
+
+
+v2.0.0 - 2021-06-21
+-------------------
+
+##### Updates
+
++ Adds LifterLMS User Information form building via the block editor.
++ Initially compatibility for WordPress 5.8 (full site editing). Ensures core functionality but doesn't add any exciting features.
++ Improve the visual feedback inside the editor for a block with visibility restrictions.
++ Added reusable block support for form fields.
++ Adds a user information (`[llms-user]`) shortcode inserter to rich text block toolbars.
++ Use rich text `allowedFormats` in favor of deprecated `formattingControls`
++ Improved localization of Javascript files.
+
+##### Bug Fixes
+
++ Fixed issue encountered when using lesson progression blocks outside of a lesson, thanks [@reedhewitt](https://github.com/reedhewitt)!
++ Fixed fatal errors encountered if LifterLMS core isn't active when this plugin is activated.
++ Currently selected instructors are excluded from queries for instructor users.
++ Fixed issue encountered on courses and memberships when attempting to edit instructor information.
+
+##### Backwards Incompatible Changes
+
++ Major refactor of all field-related blocks.
++ The names of many field blocks have changed.
++ Use `getDisallowedBlocks()` in favor of removed `getBlacklist()` in `block-visibility/check`.
++ Blocks restricted to specific posts have had the post object stored on the block attribute reduced to include only the minimum required properties.
++ The `Search`, `SearchPost`, and `SearchUser` components have had major changes to make them more extendable.
++ Don't render InspectorControls since the block doesn't have any actual settings.
+
+
+v2.0.0-rc.2 - 2021-06-18
+------------------------
+
++ Only load the plugin if LifterLMS is loaded
++ Update version checking method.
++ Fixed typo causing errors on WP 5.6 and earlier.
++ Fix WP 5.7 compatibility issues
++ Fixed issue encountered when using lesson progression blocks outside of a lesson, thanks [@reedhewitt](https://github.com/reedhewitt)!
+
+
+v2.0.0-rc.1 - 2021-06-15
+------------------------
+
++ Fixes issue encountered when adding a confirm group
++ Stop using merge codes in the password block
++ Improve block duplication handlers
++ Prevent confirm fields from being manually pasted outside of a confirm group
++ Adds the `llms/user-information-fields` redux store to allow for better field validation and handling
++ Improves and adds field attribute validation
++ Use rich text `allowedFormats` in favor of deprecated `formattingControls`
++ Remove the now unnecessary `uuid` field block attribute.
++ Adds WP core 5.8 compatibility on the widget and customizer screens.
++ Exclude LifterLMS field block reusables from the widgets reusable blocks screen.
++ Adds backwards compatibility for WordPress < 5.6
+
+
+v2.0.0-beta.6 - 2021-06-01
+--------------------------
+
++ (Re-)introduces user information shortcode through a block editor rich text area format button.
++ Prevent usage the "User Login" block on account edit forms (usersnames cannot be edited in WordPress).
++ Only prevent form posts from being made "draft" status on the "core" forms.
++ Modifies field localization data strategy for field validation and others.
+
+
+v2.0.0-beta.5 - 2021-05-18
+--------------------------
+
++ Add WP core 5.8 compatibility for deprecated filter `block_categories`.
++ Fixed issue encountered on courses and memberships when attempting to edit instructor information.
++ Added validation to ensure all fields have unique HTML name attributes.
++ Simplified field data storage interface to enable saving only to the usermeta table.
+
+
+v2.0.0-beta.4 - 2021-05-07
+--------------------------
+
++ Fixed error encountered when opening the block editor options menu on an `llms_form` post type.
++ Added UUID generation to all form field blocks.
++ Fixed visual issues encountered with form field blocks on wide screens in the block editor.
++ Fixed issue preventing column widths from being set after switching from a stacked layout to a columns layout for a field group.
++ Added CSS classes to various option elements in the block editor
++ Moved most inline css in the editor into a static file
++ Fixed issue encountered when reverting a form to it's default
++ Fixed dynamic block rendering errors encountered when the block is restricted to specific courses/memberships.
++ Added CSS to make input placeholder text look like a placeholder
+
+
+v2.0.0-beta.3 - 2021-04-26
+--------------------------
+
++ All form field blocks refactored and many were removed or renamed.
++ Added column support to form field blocks.
++ Added reusable block support to form field blocks.
++ Removed support for block visibility on required field blocks (email and password).
++ Added reusable block filtering to only show "supported" reusable blocks when editing a form.
++ Added utility function support for reusable blocks.
++ Fixed issues related to visual rendering of checkboxes / radio elements on custom fields.
+
+
+v2.0.0-beta.2 - 2021-03-22
+--------------------------
+
++ Fixed block editor visual issues encountered on certain blocks when block-level visibility restrictions are enabled.
+
+
+v2.0.0-beta.1 - 2021-03-22
+--------------------------
+
++ Improved Javascript localization.
++ Updated JS source files to follow (slightly modified) eslint standards as defined by `@wordpress/eslint-plugin/recommended`.
++ Disabled import of incomplete module `./formats/merge-codes`.
++ Improved the information displayed for a restricted block.
++ Don't render `InspectorControls` for the Course Syllabus block since it doesn't have any actual settings to inspect.
++ Improved the Search, SearchPost, and SearchUser components and made backwards incompatible changes to their usage.
+
+
+v1.12.0 - 2021-01-07
+--------------------
+
++ Various form and field updates in preparation for LifterLMS 5.0.0.
+
+
+v1.11.1 - 2021-01-05
+--------------------
+
++ Update the hook used for the Instructors block when displayed on membership post types.
+
+
+v1.11.0 - 2020-12-29
+--------------------
+
++ Allow the "Instructors" block to be used for memberships, thanks [@alaa-alshamy](https://github.com/alaa-alshamy)!
+
+
+v1.10.0 - 2020-11-24
+--------------------
+
++ Use the `LLMS_Assets` class to define, register, and enqueue plugin assets.
++ Added Javascript localization for block editor scripts.
+
+
+v1.9.1 - 2020-04-29
+-------------------
+
++ Fix course progress block template used when migrating a course to the block editor.
+
+
+v1.9.0 - 2020-04-29
+-------------------
+
++ Converted the course progress block into a dynamic block. Fixes an issue allowing the progress block to be visible to non-enrolled students.
++ Added a filter on the output of the Pricing Table block: `llms_blocks_render_pricing_table_block`.
+
+
+v1.8.0 - 2020-04-28
+-------------------
+
+##### Updates
+
++ Improved script dependencies definitions.
++ Updated asset paths for consistency with other LifterLMS projects.
++ Updated various WP Core references that have been deprecated (maintains backwards compatibility).
++ The Lesson Progression block is no longer rendered server-side in the block editor (minor performance improvement).
+
+##### Changes to the Classic Editor Block
+
++ The classic editor block will no longer show block visibility settings because it is impossible to use those settings to filter the block on the frontend.
++ In order to apply visibility settings to the classic editor block, place the Classic Editor within a "Group" block and apply visibility settings to the Group.
+
+##### Bug fixes
+
++ Fixed an issue encountered when using the WP Core "Table" block.
++ Fixed a few areas where `class` was being used instead of `className` to define CSS classes on elements in the block editor.
++ Fixed a user-experience issues encountered on the Course Information block when all possible information is disabled.
++ Fixed an issue causing visibility attributes to render on blocks that don't support them.
++ Fixed an issue preventing 3rd party blocks from modifying default block visibility settings.
++ Fixed a spelling error visible inside the block editor.
++ Fixed an issue causing the "Course Progress" block to be shown to non-enrolled students and visitors.
++ Removed redundant CSS from frontend.
++ Stop outputting editor CSS on the frontend.
++ Dynamic blocks with no content to render will now only output their empty render messages inside the block editor, not on the frontend.
+
+
+v1.7.3 - 2019-12-19
+-------------------
+
++ Move form ready event from domReady to block registration to ensure blocks are exposed before blocks are parsed.
+
+
+v1.7.2 - 2019-12-09
+-------------------
+
++ Bug fix: fix issue causing the block editor to encounter a fatal error when using custom post types that don't support custom fields.
+
+
+v1.7.1 - 2019-12-05
+-------------------
+
++ Bug fix: Fixed a WordPress 5.3 issues with JSON data affecting the ability to save course/membership instructors.
++ Update: Added filter, `llms_block_supports_visibility` to allow modification of the return of the check.
++ Update: Disabled block visibility on registration & account forms to prevent a potentially confusing form creation experience.
++ Update: Added block editor rendering for password type fields.
+
+
+v1.7.0 - 2019-11-08
+-------------------
+
+##### Updates
+
++ Membership post types can now use the LifterLMS Pricing Table block.
++ Membership post types are automatically migrated to the block editor (use the pricing table block instead of the pricing table action).
++ Added a block editor template for the Membership post type.
++ The block 'llms/form-field-redeem-voucher' is now only available on registration forms.
+
+##### Bug Fixes
+
++ Backwards compatibility fixes for WP Core 5.2 and earlier.
++ Perform post migrations on `current_screen` instead of `admin_enqueue_scripts`.
++ Fix an issue causing "No HTML Returned" to be displayed in place of the Lesson Progression block on free lessons when viewed by a logged-out user.
++ Import `InspectorControls` from `wp.blockEditor` and fallback to `wp.editor` to maintain backwards compatibility.
++ Fall back to `wp.editor` for `RichText` import when `wp.blockEditor` is not found.
++ Import from `wp.editor` when `wp.blockEditor` is not available.
++ Return early during renders on WP Core 5.2 and earlier where the `PluginDocumentSettingPanel` doesn't exist.
+
+
+v1.6.0 - 2019-10-24
+-------------------
+
++ Feature: Added form field blocks for use on the Forms manager.
++ Feature: Add logic for `logged_in` and `logged_out` block visibility options.
++ Update: Added isDisabled property to Search component.
++ Update: Adjusted priority of `render_block` filter to 20.
++ Bug fix: Import `InspectorControls` from `wp.blockEditor` in favor of deprecated `wp.editor`
++ Bug fix: Automatically store course/membership instructor with `post_author` data when the post is created.
++ Bug fix: Pass style rules as camelCase.
+
+
+v1.5.2 - 2019-08-14
+-------------------
+
++ Only enable REST for authenticated users with the `lifterlms_instructor` capability.
+
+
+v1.5.1 - 2019-05-17
+-------------------
+
++ Only register block visibility settings on static blocks. Fixes an issue causing core (or 3rd party) dynamic blocks from being managed within the block editor.
+
+
+v1.5.0 - 2019-05-16
+-------------------
+
++ All blocks are now registered only for post types where they can actually be used.
+
+
+v1.4.1 - 2019-05-13
+-------------------
+
++ Fixed double slashes in asset path of CSS and JS files, thanks [@pondermatic](https://github.com/pondermatic)!
+
+
+v1.4.0 - 2019-04-26
+-------------------
+
++ Added an "unmigration" utility to LifterLMS -> Status -> Tools & Utilities which can be used to remove LifterLMS blocks from courses and lessons which were migrated to the block editor structure. This tool is only available when the Classic Editor plugin is installed and enabled and it will remove blocks from ALL courses and lessons regardless of whether or not the block editor is being utilized on that post.
+
+
+v1.3.8 - 2019-03-19
+-------------------
+
++ Explicitly import jQuery when used within blocks.
+
+
+v1.3.7 - 2019-02-27
+-------------------
+
++ Fixed an issue preventing "Pricing Table" blocks from displaying on the admin panel when the current user was enrolled in the course or no payment gateways were enabled on the site.
+
+
+v1.3.6 - 2019-02-22
+-------------------
+
++ Updated the editor icons to use the new LifterLMS Icon
++ Change method for Pricing Table block re-rendering to prevent an issue resulting it always appearing that the post has unsaved data.
+
+
+v1.3.5 - 2019-02-21
+-------------------
+
++ Automatically re-renders Pricing Table blocks when access plans are saved or deleted via the course / membership access plan metabox.
+
+
+v1.3.4 - 2019-01-30
+-------------------
+
++ Add support for the Divi Builder's "Classic Editor" mode
++ Skip post migration when "Classic" mode is enabled
+
+
+v1.3.3 - 2019-01-23
+-------------------
+
++ Add conditions to check for Classic Editor settings configured to enforce classic/block for all posts.
+
+
+v1.3.2 - 2019-01-16
+-------------------
+
++ Fix issue preventing template actions from being removed from migrated courses & lessons.
+
+
+v1.3.1 - 2019-01-15
+-------------------
+
++ Move post migration checks to a callable function `llms_blocks_is_post_migrated()`
+
+
+v1.3.0 - 2019-01-09
+-------------------
+
++ Add course and membership catalog visibility settings into the block editor.
++ Fixed issue preventing the course instructors metabox from displaying when using the classic editor plugin.
+
+v1.2.0 - 2018-12-27
+-------------------
+
++ Add conditional support for page builders: Beaver Builder, Divi Builder, and Elementor.
++ Fixed issue causing LifterLMS core sales pages from outputting automatic content (like pricing tables) on migrated posts.
+
+
+v1.1.2 - 2018-12-17
+-------------------
+
++ Add a filter to the migration check on lessons & courses.
+
+
+v1.1.1 - 2018-12-14
+-------------------
+
++ Fix issue causing LifterLMS Core Actions to be removed when using the Classic Editor plugin.
+
+
+v1.1.0 - 2018-12-12
+-------------------
+
++ Editor blocks now display a lock icon when hovering/selecting a block which corresponds to the enrollment visibility settings of the block.
++ Removal of core actions is now handled by a general migrator function instead of by individual blocks.
++ Fix issue causing block visibility options to not be properly set when enrollment visibility is first enabled for a block.
+
+
+v1.0.1 - 2018-12-05
+-------------------
+
++ Made plugin url relative
+
+
+v1.0.0 - 2018-12-05
+-------------------
+
++ Initial public release
diff --git a/libraries/lifterlms-blocks/assets/css/llms-blocks-rtl.css b/libraries/lifterlms-blocks/assets/css/llms-blocks-rtl.css
new file mode 100644
index 0000000000..fd8209f6eb
--- /dev/null
+++ b/libraries/lifterlms-blocks/assets/css/llms-blocks-rtl.css
@@ -0,0 +1 @@
+.llms-cols:after,.llms-cols:before{content:" ";display:table}.llms-cols:after{clear:both}.llms-cols .llms-col{width:100%}@media (min-width:600px){.llms-cols [class*=llms-col-]{float:right}.llms-cols .llms-col-1{width:100%}.llms-cols .llms-col-2{width:50%}.llms-cols .llms-col-3{width:33.3333333333%}.llms-cols .llms-col-4{width:25%}.llms-cols .llms-col-5{width:20%}.llms-cols .llms-col-6{width:16.6666666667%}.llms-cols .llms-col-7{width:14.2857142857%}.llms-cols .llms-col-8{width:12.5%}.llms-cols .llms-col-9{width:11.1111111111%}.llms-cols .llms-col-10{width:10%}.llms-cols .llms-col-11{width:9.0909090909%}.llms-cols .llms-col-12{width:8.3333333333%}.edit-post-visual-editor .editor-block-list__block .editor-block-list__block-edit{padding-right:0;padding-left:0}}.llms-block-visibility{margin-right:auto;margin-left:auto;max-width:840px;position:relative}.llms-block-visibility>:first-child{margin-bottom:28px;margin-top:28px}.llms-block-visibility:before{border:1px solid #e0e0e0;bottom:-6px;content:"";right:-6px;position:absolute;left:-6px;top:-6px}.llms-block-visibility .llms-block-visibility--indicator{border-top:1px solid #e0e0e0;color:#555d66;margin-top:-22px;padding:0 6px}.llms-block-visibility .llms-block-visibility--indicator .dashicon,.llms-block-visibility .llms-block-visibility--indicator .llms-block-visibility--msg{vertical-align:middle}.llms-block-visibility .llms-block-visibility--indicator .llms-block-visibility--msg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-style:italic;line-height:1.4;margin-right:6px}.edit-post-settings-sidebar__panel-block .components-panel__body .llms-search input,.edit-post-sidebar .components-panel__body .llms-search input{box-shadow:none}.llms-search__menu{background:#fff!important;z-index:9999999!important}.llms-search__value-container{width:100%}#wpwrap .edit-post-visual-editor .wp-block-llms-course-information ul{list-style-type:none;margin-right:0;margin-top:.5em}.wp-block-llms-course-progress{display:flex}.wp-block-llms-course-progress .progress-bar{background:#dedede;border-radius:4px;flex:1;margin:10px 0;overflow:hidden}.wp-block-llms-course-progress .progress-bar .progress--fill{background:#2295ff;height:100%;width:50%}.wp-block-llms-course-progress span{padding-right:5px;vertical-align:middle}.llms-author .label,.llms-author .name{margin-right:5px}.llms-author .avatar{border-radius:50%}.llms-author .bio{margin-top:5px}.llms-instructor-info .llms-instructors .llms-col:first-child .llms-author{margin-right:0}.llms-instructor-info .llms-instructors .llms-col:last-child .llms-author{margin-left:0}.llms-instructor-info .llms-instructors .llms-author{background:#f5f5f5;border-top:4px solid #2295ff;margin:45px 5px 5px;padding:0 10px 10px;text-align:center}.llms-instructor-info .llms-instructors .llms-author .avatar{background:#2295ff;border:4px solid #2295ff;display:block;margin:-35px auto 10px}.llms-instructor-info .llms-instructors .llms-author .llms-author-info{display:block}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.name{font-weight:700}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.label{font-size:85%}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.bio{font-size:90%;margin-bottom:0}.wp-block[data-type="llms/lesson-progression"]{text-align:center}.wp-block[data-type="llms/lesson-progression"] button{margin:0 2px}.llms-access-plans:after,.llms-access-plans:before{content:" ";display:table}.llms-access-plans:after{clear:both}@media (min-width:600px){.llms-access-plans.cols-1 .llms-access-plan{width:100%}.llms-access-plans.cols-2 .llms-access-plan{width:50%}.llms-access-plans.cols-3 .llms-access-plan{width:33.3333333333%}.llms-access-plans.cols-4 .llms-access-plan{width:25%}.llms-access-plans.cols-5 .llms-access-plan{width:20%}}.llms-free-enroll-form{margin-bottom:0}.llms-access-plan{box-sizing:border-box;float:right;text-align:center;width:100%}.llms-access-plan .llms-access-plan-content,.llms-access-plan .llms-access-plan-footer{background:#f1f1f1}.llms-access-plan.featured .llms-access-plan-featured{background:#4ba9ff}.llms-access-plan.featured .llms-access-plan-content,.llms-access-plan.featured .llms-access-plan-footer{border-right:3px solid #2295ff;border-left:3px solid #2295ff}.llms-access-plan.featured .llms-access-plan-footer{border-bottom-color:#2295ff}.llms-access-plan.on-sale .price-regular{text-decoration:line-through}.llms-access-plan .stamp{background:#2295ff;color:#fff;font-size:11px;font-style:normal;font-weight:300;padding:2px 3px;vertical-align:top}.llms-access-plan .llms-access-plan-restrictions ul{margin:0}.llms-access-plan-featured{color:#fff;font-size:14px;font-weight:400;margin:0 2px}.llms-access-plan-content{margin:0 2px}.llms-access-plan-content .llms-access-plan-pricing{padding:10px 0 0}.llms-access-plan-title{background:#2295ff;color:#fff;margin-bottom:0;padding:10px}.llms-access-plan-pricing .llms-price-currency-symbol{font-size:14px;vertical-align:top}.llms-access-plan-price{font-size:18px;font-variant:small-caps;line-height:20px}.llms-access-plan-price .lifterlms-price{font-weight:700}.llms-access-plan-price.sale{border-bottom:1px solid #d0d0d0;border-top:1px solid #d0d0d0;padding:5px 0}.llms-access-plan-expiration,.llms-access-plan-sale-end,.llms-access-plan-schedule,.llms-access-plan-trial{font-size:15px;font-variant:small-caps;line-height:1.2}.llms-access-plan-description{font-size:16px;padding:10px 10px 0}.llms-access-plan-description ul{margin:0}.llms-access-plan-description ul li{border-bottom:1px solid #d0d0d0;list-style-type:none}.llms-access-plan-description ul li:last-child{border-bottom:none}.llms-access-plan-description div:last-child,.llms-access-plan-description img:last-child,.llms-access-plan-description li:last-child,.llms-access-plan-description p:last-child,.llms-access-plan-description ul:last-child{margin-bottom:0}.llms-access-plan-restrictions .stamp{vertical-align:baseline}.llms-access-plan-restrictions ul{margin:0}.llms-access-plan-restrictions ul li{font-size:12px;line-height:14px;list-style-type:none}.llms-access-plan-restrictions a{color:#f8954f}.llms-access-plan-restrictions a:hover{color:#f67d28}.llms-access-plan-footer{border-bottom:3px solid #f1f1f1;margin:0 2px 2px;padding:10px}.llms-access-plan-footer .llms-access-plan-pricing{padding:0 0 10px}.llms-invalid-control{margin-bottom:24px}.llms-invalid-control .components-base-control{margin-bottom:0}.llms-invalid-control .components-base-control .components-text-control__input{background-color:rgba(204,24,24,.05);border-color:#cc1818}.llms-invalid-control .llms-invalid-control--msg{background-color:rgba(204,24,24,.05);border-right:4px solid #cc1818;color:#cc1818;font-size:12px;font-style:italic;margin-bottom:0;padding:6px 8px 6px 2px}.llms-pwd-meter{border:1px solid #e35b5b;border-radius:4px;margin-top:5px;overflow:hidden}.llms-pwd-meter>div{background:rgba(227,91,91,.25);font-size:75%;padding:0 5px;width:25%}.llms-field-group .block-editor-block-list__layout *{box-sizing:border-box}.llms-fields input,.llms-fields textarea{border:1px solid #999;color:#757575;padding:4px 8px}.llms-fields input:focus::-moz-placeholder,.llms-fields textarea:focus::-moz-placeholder{opacity:0}.llms-fields input:focus:-ms-input-placeholder,.llms-fields textarea:focus:-ms-input-placeholder{opacity:0}.llms-fields input:focus::placeholder,.llms-fields textarea:focus::placeholder{opacity:0}.llms-fields input::-moz-placeholder,.llms-fields textarea::-moz-placeholder{color:#757575}.llms-fields input:-ms-input-placeholder,.llms-fields textarea:-ms-input-placeholder{color:#757575}.llms-fields input::placeholder,.llms-fields textarea::placeholder{color:#757575}.llms-fields input:not([type=radio]):not([type=checkbox]),.llms-fields select,.llms-fields textarea{width:100%}.llms-fields input:not([type=radio]){border-radius:4px}.llms-fields textarea{resize:none}.llms-fields select{max-Width:none;pointer-events:none}.llms-fields .llms-field .block-editor-rich-text__editable{display:block}.llms-fields .llms-field label.llms-is-required>div{display:inline}.llms-fields .llms-field label.llms-is-required:after{color:#dc5757;content:" *"}.llms-field-option{align-items:top;display:flex;margin-bottom:4px}.llms-field-option.llms-sort-helper{background:#fff;border:1px solid #dedede;height:auto!important;padding:5px 10px;z-index:999}.llms-field-option .llms-field-opt-default{margin-top:6px}.llms-field-option .llms-field-opt-default .components-radio-control__input{margin-left:0}.llms-field-option .llms-field-opt-default,.llms-field-option .llms-field-opt-text,.llms-field-option .llms-field-opt-text .components-base-control__field{margin-bottom:0!important}.llms-field-option .llms-field-opt-db-key{display:flex;margin-top:2px}.llms-field-option .llms-field-opt-db-key .dashicon{color:#5a5a5a;margin-top:5px}.llms-field-option .llms-field-opt-db-key .components-text-control__input{background:#f5f5f5;font-family:monospace}.llms-field-option .llms-drag-handle{cursor:-webkit-grab;cursor:grab;flex:.8;margin-top:3px;padding-top:6px}.llms-field-option .llms-del-field-opt-wrap,.llms-field-option .llms-field-opt-default-wrap{flex:1;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.llms-field-option .llms-del-field-opt-wrap{margin-right:4px}.llms-field-option .llms-del-field-opt-wrap button{margin-top:3px}.llms-field-option .llms-del-field-opt-wrap button:hover,.llms-field-option .llms-del-field-opt-wrap button[aria-expanded=true]{color:#cc1818}.llms-field-option .llms-field-opt-text-wrap{flex:7}.llms-field-options--footer{margin-top:10px}.llms-cols-12 .llms-field{width:100%}.llms-cols-9 .llms-field{width:75%}.llms-cols-8 .llms-field{width:66.66%}.llms-cols-6 .llms-field{width:50%}.llms-cols-4 .llms-field{width:33.33%}.llms-cols-3 .llms-field{width:25%}.llms-field-group[data-field-layout=columns] .llms-cols-12,.llms-field-group[data-field-layout=columns] [class*=llms-cols-] .llms-field{width:100%}.llms-field-group[data-field-layout=columns] .llms-cols-9{width:75%}.llms-field-group[data-field-layout=columns] .llms-cols-8{width:66.66%}.llms-field-group[data-field-layout=columns] .llms-cols-6{width:50%}.llms-field-group[data-field-layout=columns] .llms-cols-4{width:33.33%}.llms-field-group[data-field-layout=columns] .llms-cols-3{width:25%}.llms-field-group[data-field-layout=columns] .block-editor-block-list__layout>.wp-block.llms-fields{display:inline-block}.llms-field-group[data-field-layout=columns] .block-editor-block-list__layout>.wp-block.llms-fields:nth-child(odd){padding-left:28px}.llms-field-group[data-field-layout=columns] .block-editor-block-list__layout>.wp-block.llms-fields:nth-child(2n){padding-right:28px}.llms-shortcodes-modal{width:800px}.llms-shortcodes-modal .llms-shortcodes-modal--main{display:flex}.llms-shortcodes-modal .llms-shortcodes-modal--main aside{flex:1;padding-left:16px}.llms-shortcodes-modal .llms-shortcodes-modal--main section{flex:2;padding-right:16px}.llms-shortcodes-modal .llms-shortcodes-modal--main .llms-table tr td,.llms-shortcodes-modal .llms-shortcodes-modal--main .llms-table tr th{text-align:right}.llms-instructor{border:1px solid #dedede;margin-bottom:-1px;padding:10px;position:relative;z-index:100}.llms-instructor .llms-instructor--header{align-items:center;display:flex}.llms-instructor .llms-instructor--header section{flex:2}.llms-instructor .llms-instructor--header section small{margin-right:3px}.llms-instructor .llms-instructor--header aside{flex:1;text-align:left}.llms-instructor .llms-instructor--header .components-button.is-small.has-icon:not(.has-text){min-width:24px;padding:0}.llms-instructor .llms-instructor--header .dashicons-star-filled{color:#ffb900;margin:2px 0 0 2px}.llms-instructor.llms-is-dragging{background:#fff;border:1px solid #dedede;box-shadow:0 4px 8px 2px #dedede;z-index:999}.llms-instructor .llms-instructor--settings{margin-top:10px}.edit-post-post-status{display:flex;flex-direction:column;flex-wrap:wrap}.edit-post-post-status h2{order:-2}.llms-launch-course-builder{margin:0 0 16px;order:-1}.llms-primary-background-color{background-color:#466dd8!important;color:#fff!important}.llms-primary-background-color.clicked,.llms-primary-background-color:hover{background-color:#2b55cb!important}.llms-course-builder-panel--close .components-panel__body-title{margin-bottom:-16px!important}.llms-course-builder-panel--close .components-panel__arrow{transform:rotate(-180deg) translateY(50%)!important}#side-sortables #course_builder,.llms-course-builder-panel--close>div{display:none}.post-type-course .llms-button-primary,.post-type-lesson .llms-button-primary,.post-type-llms_membership .llms-button-primary{-webkit-appearance:none;border-radius:2px;display:inline-flex;font-size:14px;font-weight:400;height:38px;justify-content:center}.llms-launch-course-builder .llms-button-primary{width:100%}
\ No newline at end of file
diff --git a/libraries/lifterlms-blocks/assets/css/llms-blocks.css b/libraries/lifterlms-blocks/assets/css/llms-blocks.css
new file mode 100644
index 0000000000..2a0b8938c3
--- /dev/null
+++ b/libraries/lifterlms-blocks/assets/css/llms-blocks.css
@@ -0,0 +1 @@
+.llms-cols:after,.llms-cols:before{content:" ";display:table}.llms-cols:after{clear:both}.llms-cols .llms-col{width:100%}@media (min-width:600px){.llms-cols [class*=llms-col-]{float:left}.llms-cols .llms-col-1{width:100%}.llms-cols .llms-col-2{width:50%}.llms-cols .llms-col-3{width:33.3333333333%}.llms-cols .llms-col-4{width:25%}.llms-cols .llms-col-5{width:20%}.llms-cols .llms-col-6{width:16.6666666667%}.llms-cols .llms-col-7{width:14.2857142857%}.llms-cols .llms-col-8{width:12.5%}.llms-cols .llms-col-9{width:11.1111111111%}.llms-cols .llms-col-10{width:10%}.llms-cols .llms-col-11{width:9.0909090909%}.llms-cols .llms-col-12{width:8.3333333333%}.edit-post-visual-editor .editor-block-list__block .editor-block-list__block-edit{padding-left:0;padding-right:0}}.llms-block-visibility{margin-left:auto;margin-right:auto;max-width:840px;position:relative}.llms-block-visibility>:first-child{margin-bottom:28px;margin-top:28px}.llms-block-visibility:before{border:1px solid #e0e0e0;bottom:-6px;content:"";left:-6px;position:absolute;right:-6px;top:-6px}.llms-block-visibility .llms-block-visibility--indicator{border-top:1px solid #e0e0e0;color:#555d66;margin-top:-22px;padding:0 6px}.llms-block-visibility .llms-block-visibility--indicator .dashicon,.llms-block-visibility .llms-block-visibility--indicator .llms-block-visibility--msg{vertical-align:middle}.llms-block-visibility .llms-block-visibility--indicator .llms-block-visibility--msg{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-style:italic;line-height:1.4;margin-left:6px}.edit-post-settings-sidebar__panel-block .components-panel__body .llms-search input,.edit-post-sidebar .components-panel__body .llms-search input{box-shadow:none}.llms-search__menu{background:#fff!important;z-index:9999999!important}.llms-search__value-container{width:100%}#wpwrap .edit-post-visual-editor .wp-block-llms-course-information ul{list-style-type:none;margin-left:0;margin-top:.5em}.wp-block-llms-course-progress{display:flex}.wp-block-llms-course-progress .progress-bar{background:#dedede;border-radius:4px;flex:1;margin:10px 0;overflow:hidden}.wp-block-llms-course-progress .progress-bar .progress--fill{background:#2295ff;height:100%;width:50%}.wp-block-llms-course-progress span{padding-left:5px;vertical-align:middle}.llms-author .label,.llms-author .name{margin-left:5px}.llms-author .avatar{border-radius:50%}.llms-author .bio{margin-top:5px}.llms-instructor-info .llms-instructors .llms-col:first-child .llms-author{margin-left:0}.llms-instructor-info .llms-instructors .llms-col:last-child .llms-author{margin-right:0}.llms-instructor-info .llms-instructors .llms-author{background:#f5f5f5;border-top:4px solid #2295ff;margin:45px 5px 5px;padding:0 10px 10px;text-align:center}.llms-instructor-info .llms-instructors .llms-author .avatar{background:#2295ff;border:4px solid #2295ff;display:block;margin:-35px auto 10px}.llms-instructor-info .llms-instructors .llms-author .llms-author-info{display:block}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.name{font-weight:700}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.label{font-size:85%}.llms-instructor-info .llms-instructors .llms-author .llms-author-info.bio{font-size:90%;margin-bottom:0}.wp-block[data-type="llms/lesson-progression"]{text-align:center}.wp-block[data-type="llms/lesson-progression"] button{margin:0 2px}.llms-access-plans:after,.llms-access-plans:before{content:" ";display:table}.llms-access-plans:after{clear:both}@media (min-width:600px){.llms-access-plans.cols-1 .llms-access-plan{width:100%}.llms-access-plans.cols-2 .llms-access-plan{width:50%}.llms-access-plans.cols-3 .llms-access-plan{width:33.3333333333%}.llms-access-plans.cols-4 .llms-access-plan{width:25%}.llms-access-plans.cols-5 .llms-access-plan{width:20%}}.llms-free-enroll-form{margin-bottom:0}.llms-access-plan{box-sizing:border-box;float:left;text-align:center;width:100%}.llms-access-plan .llms-access-plan-content,.llms-access-plan .llms-access-plan-footer{background:#f1f1f1}.llms-access-plan.featured .llms-access-plan-featured{background:#4ba9ff}.llms-access-plan.featured .llms-access-plan-content,.llms-access-plan.featured .llms-access-plan-footer{border-left:3px solid #2295ff;border-right:3px solid #2295ff}.llms-access-plan.featured .llms-access-plan-footer{border-bottom-color:#2295ff}.llms-access-plan.on-sale .price-regular{text-decoration:line-through}.llms-access-plan .stamp{background:#2295ff;color:#fff;font-size:11px;font-style:normal;font-weight:300;padding:2px 3px;vertical-align:top}.llms-access-plan .llms-access-plan-restrictions ul{margin:0}.llms-access-plan-featured{color:#fff;font-size:14px;font-weight:400;margin:0 2px}.llms-access-plan-content{margin:0 2px}.llms-access-plan-content .llms-access-plan-pricing{padding:10px 0 0}.llms-access-plan-title{background:#2295ff;color:#fff;margin-bottom:0;padding:10px}.llms-access-plan-pricing .llms-price-currency-symbol{font-size:14px;vertical-align:top}.llms-access-plan-price{font-size:18px;font-variant:small-caps;line-height:20px}.llms-access-plan-price .lifterlms-price{font-weight:700}.llms-access-plan-price.sale{border-bottom:1px solid #d0d0d0;border-top:1px solid #d0d0d0;padding:5px 0}.llms-access-plan-expiration,.llms-access-plan-sale-end,.llms-access-plan-schedule,.llms-access-plan-trial{font-size:15px;font-variant:small-caps;line-height:1.2}.llms-access-plan-description{font-size:16px;padding:10px 10px 0}.llms-access-plan-description ul{margin:0}.llms-access-plan-description ul li{border-bottom:1px solid #d0d0d0;list-style-type:none}.llms-access-plan-description ul li:last-child{border-bottom:none}.llms-access-plan-description div:last-child,.llms-access-plan-description img:last-child,.llms-access-plan-description li:last-child,.llms-access-plan-description p:last-child,.llms-access-plan-description ul:last-child{margin-bottom:0}.llms-access-plan-restrictions .stamp{vertical-align:baseline}.llms-access-plan-restrictions ul{margin:0}.llms-access-plan-restrictions ul li{font-size:12px;line-height:14px;list-style-type:none}.llms-access-plan-restrictions a{color:#f8954f}.llms-access-plan-restrictions a:hover{color:#f67d28}.llms-access-plan-footer{border-bottom:3px solid #f1f1f1;margin:0 2px 2px;padding:10px}.llms-access-plan-footer .llms-access-plan-pricing{padding:0 0 10px}.llms-invalid-control{margin-bottom:24px}.llms-invalid-control .components-base-control{margin-bottom:0}.llms-invalid-control .components-base-control .components-text-control__input{background-color:rgba(204,24,24,.05);border-color:#cc1818}.llms-invalid-control .llms-invalid-control--msg{background-color:rgba(204,24,24,.05);border-left:4px solid #cc1818;color:#cc1818;font-size:12px;font-style:italic;margin-bottom:0;padding:6px 2px 6px 8px}.llms-pwd-meter{border:1px solid #e35b5b;border-radius:4px;margin-top:5px;overflow:hidden}.llms-pwd-meter>div{background:rgba(227,91,91,.25);font-size:75%;padding:0 5px;width:25%}.llms-field-group .block-editor-block-list__layout *{box-sizing:border-box}.llms-fields input,.llms-fields textarea{border:1px solid #999;color:#757575;padding:4px 8px}.llms-fields input:focus::-moz-placeholder,.llms-fields textarea:focus::-moz-placeholder{opacity:0}.llms-fields input:focus:-ms-input-placeholder,.llms-fields textarea:focus:-ms-input-placeholder{opacity:0}.llms-fields input:focus::placeholder,.llms-fields textarea:focus::placeholder{opacity:0}.llms-fields input::-moz-placeholder,.llms-fields textarea::-moz-placeholder{color:#757575}.llms-fields input:-ms-input-placeholder,.llms-fields textarea:-ms-input-placeholder{color:#757575}.llms-fields input::placeholder,.llms-fields textarea::placeholder{color:#757575}.llms-fields input:not([type=radio]):not([type=checkbox]),.llms-fields select,.llms-fields textarea{width:100%}.llms-fields input:not([type=radio]){border-radius:4px}.llms-fields textarea{resize:none}.llms-fields select{max-Width:none;pointer-events:none}.llms-fields .llms-field .block-editor-rich-text__editable{display:block}.llms-fields .llms-field label.llms-is-required>div{display:inline}.llms-fields .llms-field label.llms-is-required:after{color:#dc5757;content:" *"}.llms-field-option{align-items:top;display:flex;margin-bottom:4px}.llms-field-option.llms-sort-helper{background:#fff;border:1px solid #dedede;height:auto!important;padding:5px 10px;z-index:999}.llms-field-option .llms-field-opt-default{margin-top:6px}.llms-field-option .llms-field-opt-default .components-radio-control__input{margin-right:0}.llms-field-option .llms-field-opt-default,.llms-field-option .llms-field-opt-text,.llms-field-option .llms-field-opt-text .components-base-control__field{margin-bottom:0!important}.llms-field-option .llms-field-opt-db-key{display:flex;margin-top:2px}.llms-field-option .llms-field-opt-db-key .dashicon{color:#5a5a5a;margin-top:5px}.llms-field-option .llms-field-opt-db-key .components-text-control__input{background:#f5f5f5;font-family:monospace}.llms-field-option .llms-drag-handle{cursor:-webkit-grab;cursor:grab;flex:.8;margin-top:3px;padding-top:6px}.llms-field-option .llms-del-field-opt-wrap,.llms-field-option .llms-field-opt-default-wrap{flex:1;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.llms-field-option .llms-del-field-opt-wrap{margin-left:4px}.llms-field-option .llms-del-field-opt-wrap button{margin-top:3px}.llms-field-option .llms-del-field-opt-wrap button:hover,.llms-field-option .llms-del-field-opt-wrap button[aria-expanded=true]{color:#cc1818}.llms-field-option .llms-field-opt-text-wrap{flex:7}.llms-field-options--footer{margin-top:10px}.llms-cols-12 .llms-field{width:100%}.llms-cols-9 .llms-field{width:75%}.llms-cols-8 .llms-field{width:66.66%}.llms-cols-6 .llms-field{width:50%}.llms-cols-4 .llms-field{width:33.33%}.llms-cols-3 .llms-field{width:25%}.llms-field-group[data-field-layout=columns] .llms-cols-12,.llms-field-group[data-field-layout=columns] [class*=llms-cols-] .llms-field{width:100%}.llms-field-group[data-field-layout=columns] .llms-cols-9{width:75%}.llms-field-group[data-field-layout=columns] .llms-cols-8{width:66.66%}.llms-field-group[data-field-layout=columns] .llms-cols-6{width:50%}.llms-field-group[data-field-layout=columns] .llms-cols-4{width:33.33%}.llms-field-group[data-field-layout=columns] .llms-cols-3{width:25%}.llms-field-group[data-field-layout=columns] .block-editor-block-list__layout>.wp-block.llms-fields{display:inline-block}.llms-field-group[data-field-layout=columns] .block-editor-block-list__layout>.wp-block.llms-fields:nth-child(odd){padding-right:28px}.llms-field-group[data-field-layout=columns] .block-editor-block-list__layout>.wp-block.llms-fields:nth-child(2n){padding-left:28px}.llms-shortcodes-modal{width:800px}.llms-shortcodes-modal .llms-shortcodes-modal--main{display:flex}.llms-shortcodes-modal .llms-shortcodes-modal--main aside{flex:1;padding-right:16px}.llms-shortcodes-modal .llms-shortcodes-modal--main section{flex:2;padding-left:16px}.llms-shortcodes-modal .llms-shortcodes-modal--main .llms-table tr td,.llms-shortcodes-modal .llms-shortcodes-modal--main .llms-table tr th{text-align:left}.llms-instructor{border:1px solid #dedede;margin-bottom:-1px;padding:10px;position:relative;z-index:100}.llms-instructor .llms-instructor--header{align-items:center;display:flex}.llms-instructor .llms-instructor--header section{flex:2}.llms-instructor .llms-instructor--header section small{margin-left:3px}.llms-instructor .llms-instructor--header aside{flex:1;text-align:right}.llms-instructor .llms-instructor--header .components-button.is-small.has-icon:not(.has-text){min-width:24px;padding:0}.llms-instructor .llms-instructor--header .dashicons-star-filled{color:#ffb900;margin:2px 2px 0 0}.llms-instructor.llms-is-dragging{background:#fff;border:1px solid #dedede;box-shadow:0 4px 8px 2px #dedede;z-index:999}.llms-instructor .llms-instructor--settings{margin-top:10px}.edit-post-post-status{display:flex;flex-direction:column;flex-wrap:wrap}.edit-post-post-status h2{order:-2}.llms-launch-course-builder{margin:0 0 16px;order:-1}.llms-primary-background-color{background-color:#466dd8!important;color:#fff!important}.llms-primary-background-color.clicked,.llms-primary-background-color:hover{background-color:#2b55cb!important}.llms-course-builder-panel--close .components-panel__body-title{margin-bottom:-16px!important}.llms-course-builder-panel--close .components-panel__arrow{transform:rotate(180deg) translateY(50%)!important}#side-sortables #course_builder,.llms-course-builder-panel--close>div{display:none}.post-type-course .llms-button-primary,.post-type-lesson .llms-button-primary,.post-type-llms_membership .llms-button-primary{-webkit-appearance:none;border-radius:2px;display:inline-flex;font-size:14px;font-weight:400;height:38px;justify-content:center}.llms-launch-course-builder .llms-button-primary{width:100%}
\ No newline at end of file
diff --git a/libraries/lifterlms-blocks/assets/js/llms-blocks-backwards-compat.asset.php b/libraries/lifterlms-blocks/assets/js/llms-blocks-backwards-compat.asset.php
new file mode 100644
index 0000000000..7e1565e685
--- /dev/null
+++ b/libraries/lifterlms-blocks/assets/js/llms-blocks-backwards-compat.asset.php
@@ -0,0 +1 @@
+ array('lodash', 'wp-polyfill', 'wp-redux-routine'), 'version' => '53993548b9007dfafb6c');
diff --git a/libraries/lifterlms-blocks/assets/js/llms-blocks-backwards-compat.js b/libraries/lifterlms-blocks/assets/js/llms-blocks-backwards-compat.js
new file mode 100644
index 0000000000..141927a3d0
--- /dev/null
+++ b/libraries/lifterlms-blocks/assets/js/llms-blocks-backwards-compat.js
@@ -0,0 +1 @@
+(()=>{var e={909:e=>{"use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}function r(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:this;this._map.forEach((function(o,i){null!==i&&"object"===t(i)&&(o=o[1]),e.call(n,o,i,r)}))}},{key:"clear",value:function(){this._map=new Map,this._arrayTreeMap=new Map,this._objectTreeMap=new Map}},{key:"size",get:function(){return this._map.size}}],i&&r(o.prototype,i),e}();e.exports=o},884:e=>{e.exports=function(e){var t,r=Object.keys(e);return t=function(){var e,t,n;for(e="return {",t=0;t{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e={};r.r(e),r.d(e,{getCachedResolvers:()=>U,getIsResolving:()=>N,hasFinishedResolution:()=>j,hasStartedResolution:()=>A,isResolving:()=>L});var t={};function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;tk,finishResolutions:()=>x,invalidateResolution:()=>V,invalidateResolutionForStore:()=>C,invalidateResolutionForStoreSelector:()=>D,startResolution:()=>P,startResolutions:()=>F});var c="function"==typeof Symbol&&Symbol.observable||"@@observable",u=function(){return Math.random().toString(36).substring(7).split("").join(".")},a={INIT:"@@redux/INIT"+u(),REPLACE:"@@redux/REPLACE"+u(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+u()}};function l(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function f(e,t,r){var n;if("function"==typeof t&&"function"==typeof r||"function"==typeof r&&"function"==typeof arguments[3])throw new Error(s(0));if("function"==typeof t&&void 0===r&&(r=t,t=void 0),void 0!==r){if("function"!=typeof r)throw new Error(s(1));return r(f)(e,t)}if("function"!=typeof e)throw new Error(s(2));var o=e,i=t,u=[],p=u,d=!1;function h(){p===u&&(p=u.slice())}function g(){if(d)throw new Error(s(3));return i}function y(e){if("function"!=typeof e)throw new Error(s(4));if(d)throw new Error(s(5));var t=!0;return h(),p.push(e),function(){if(t){if(d)throw new Error(s(6));t=!1,h();var r=p.indexOf(e);p.splice(r,1),u=null}}}function v(e){if(!l(e))throw new Error(s(7));if(void 0===e.type)throw new Error(s(8));if(d)throw new Error(s(9));try{d=!0,i=o(i,e)}finally{d=!1}for(var t=u=p,r=0;r({storeKey:t,selectorName:r,args:n})=>e.select(t)[r](...n))),"@@data/RESOLVE_SELECT":_((e=>({storeKey:t,selectorName:r,args:n})=>{const o=e.select(t)[r].hasResolver?"resolveSelect":"select";return e[o](t)[r](...n)})),"@@data/DISPATCH":_((e=>({storeKey:t,actionName:r,args:n})=>e.dispatch(t)[r](...n)))},w=()=>e=>t=>{return!(r=t)||"object"!=typeof r&&"function"!=typeof r||"function"!=typeof r.then?e(t):t.then((t=>{if(t)return e(t)}));var r},E="core/data",m=(e,t)=>()=>r=>n=>{const o=e.select(E).getCachedResolvers(t);return Object.entries(o).forEach((([r,o])=>{const i=(0,h.get)(e.stores,[t,"resolvers",r]);i&&i.shouldInvalidate&&o.forEach(((o,s)=>{!1===o&&i.shouldInvalidate(n,...s)&&e.dispatch(E).invalidateResolution(t,r,s)}))})),r(n)},T=("selectorName",e=>(t={},r)=>{const n=r.selectorName;if(void 0===n)return t;const o=e(t[n],r);return o===t[n]?t:{...t,[n]:o}})(((e=new(S()),t)=>{switch(t.type){case"START_RESOLUTION":case"FINISH_RESOLUTION":{const r="START_RESOLUTION"===t.type,n=new(S())(e);return n.set(t.args,r),n}case"START_RESOLUTIONS":case"FINISH_RESOLUTIONS":{const r="START_RESOLUTIONS"===t.type,n=new(S())(e);for(const e of t.args)n.set(e,r);return n}case"INVALIDATE_RESOLUTION":{const r=new(S())(e);return r.delete(t.args),r}}return e}));const I=(e={},t)=>{switch(t.type){case"INVALIDATE_RESOLUTION_FOR_STORE":return{};case"INVALIDATE_RESOLUTION_FOR_STORE_SELECTOR":return(0,h.has)(e,[t.selectorName])?(0,h.omit)(e,[t.selectorName]):e;case"START_RESOLUTION":case"FINISH_RESOLUTION":case"START_RESOLUTIONS":case"FINISH_RESOLUTIONS":case"INVALIDATE_RESOLUTION":return T(e,t)}return e};function N(e,t,r){const n=(0,h.get)(e,[t]);if(n)return n.get(r)}function A(e,t,r=[]){return void 0!==N(e,t,r)}function j(e,t,r=[]){return!1===N(e,t,r)}function L(e,t,r=[]){return!0===N(e,t,r)}function U(e){return e}function P(e,t){return{type:"START_RESOLUTION",selectorName:e,args:t}}function k(e,t){return{type:"FINISH_RESOLUTION",selectorName:e,args:t}}function F(e,t){return{type:"START_RESOLUTIONS",selectorName:e,args:t}}function x(e,t){return{type:"FINISH_RESOLUTIONS",selectorName:e,args:t}}function V(e,t){return{type:"INVALIDATE_RESOLUTION",selectorName:e,args:t}}function C(){return{type:"INVALIDATE_RESOLUTION_FOR_STORE"}}function D(e){return{type:"INVALIDATE_RESOLUTION_FOR_STORE_SELECTOR",selectorName:e}}function M(r,n){return{name:r,instantiate:o=>{const i=n.reducer,s=function(e,t,r,n){const o={...t.controls,...R},i=(0,h.mapValues)(o,(e=>e.isRegistryControl?e(r):e)),s=[m(r,e),w,b()(i)];var c;t.__experimentalUseThunks&&s.push((c=n,()=>e=>t=>"function"==typeof t?t(c):e(t)));const u=[d(...s)];"undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&u.push(window.__REDUX_DEVTOOLS_EXTENSION__({name:e,instanceId:e}));const{reducer:a,initialState:l}=t;return f(y()({metadata:I,root:a}),{root:l},(0,h.flowRight)(u))}(r,n,o,{registry:o,get dispatch(){return Object.assign((e=>s.dispatch(e)),v())},get select(){return Object.assign((e=>e(s.__unstableOriginalGetState())),g())},get resolveSelect(){return O()}}),c=function(){const e={};return{isRunning:(t,r)=>e[t]&&e[t].get(r),clear(t,r){e[t]&&e[t].delete(r)},markAsRunning(t,r){e[t]||(e[t]=new(S())),e[t].set(r,!0)}}}();let u;const a=function(e,t){return(0,h.mapValues)(e,(e=>(...r)=>Promise.resolve(t.dispatch(e(...r)))))}({...t,...n.actions},s);let l=function(e,t){return(0,h.mapValues)(e,(e=>{const r=function(){const r=arguments.length,n=new Array(r+1);n[0]=t.__unstableOriginalGetState();for(let e=0;e(t,...r)=>e(t.metadata,...r))),...(0,h.mapValues)(n.selectors,(e=>(e.isRegistrySelector&&(e.registry=o),(t,...r)=>e(t.root,...r))))},s);if(n.resolvers){const e=function(e,t,r,n){const o=(0,h.mapValues)(e,(e=>e.fulfill?e:{...e,fulfill:e}));return{resolvers:o,selectors:(0,h.mapValues)(t,((t,i)=>{const s=e[i];if(!s)return t.hasResolver=!1,t;const c=(...e)=>(async function(){const t=r.getState();if(n.isRunning(i,e)||"function"==typeof s.isFulfilled&&s.isFulfilled(t,...e))return;const{metadata:c}=r.__unstableOriginalGetState();A(c,i,e)||(n.markAsRunning(i,e),setTimeout((async()=>{n.clear(i,e),r.dispatch(P(i,e)),await async function(e,t,r,...n){const o=(0,h.get)(t,[r]);if(!o)return;const i=o.fulfill(...n);i&&await e.dispatch(i)}(r,o,i,...e),r.dispatch(k(i,e))})))}(...e),t(...e));return c.hasResolver=!0,c}))}}(n.resolvers,l,s,c);u=e.resolvers,l=e.selectors}const p=function(e,t){return(0,h.mapValues)((0,h.omit)(e,["getIsResolving","hasStartedResolution","hasFinishedResolution","isResolving","getCachedResolvers"]),((r,n)=>(...o)=>new Promise((i=>{const s=()=>e.hasFinishedResolution(n,o),c=()=>r.apply(null,o),u=c();if(s())return i(u);const a=t.subscribe((()=>{s()&&(a(),i(c()))}))}))))}(l,s),g=()=>l,v=()=>a,O=()=>p;s.__unstableOriginalGetState=s.getState,s.getState=()=>s.__unstableOriginalGetState().root;const _=s&&(e=>{let t=s.__unstableOriginalGetState();return s.subscribe((()=>{const r=s.__unstableOriginalGetState(),n=r!==t;t=r,n&&e()}))});return{reducer:i,store:s,actions:a,selectors:l,resolvers:u,getSelectors:g,getResolveSelectors:O,getActions:v,subscribe:_}}}}const G=function(e={},t=null){const r={};let n=[];const o=new Set;function i(){n.forEach((e=>e()))}const s=e=>(n.push(e),()=>{n=(0,h.without)(n,e)});function c(e,t){if("function"!=typeof t.getSelectors)throw new TypeError("config.getSelectors must be a function");if("function"!=typeof t.getActions)throw new TypeError("config.getActions must be a function");if("function"!=typeof t.subscribe)throw new TypeError("config.subscribe must be a function");r[e]=t,t.subscribe(i)}let u={registerGenericStore:c,stores:r,namespaces:r,subscribe:s,select:function(e){const n=(0,h.isObject)(e)?e.name:e;o.add(n);const i=r[n];return i?i.getSelectors():t&&t.select(n)},resolveSelect:function(e){const n=(0,h.isObject)(e)?e.name:e;o.add(n);const i=r[n];return i?i.getResolveSelectors():t&&t.resolveSelect(n)},dispatch:function(e){const n=(0,h.isObject)(e)?e.name:e,o=r[n];return o?o.getActions():t&&t.dispatch(n)},use:function(e,t){return u={...u,...e(u,t)},u},register:function(e){c(e.name,e.instantiate(u))},__experimentalMarkListeningStores:function(e,t){o.clear();const r=e.call(this);return t.current=Array.from(o),r},__experimentalSubscribeStore:function(e,n){return e in r?r[e].subscribe(n):t?t.__experimentalSubscribeStore(e,n):s(n)},registerStore:(e,t)=>{if(!t.reducer)throw new TypeError("Must specify store reducer");const r=M(e,t).instantiate(u);return c(e,r),r.store}};return c(E,function(e){const t=t=>(r,...n)=>e.select(r)[t](...n),r=t=>(r,...n)=>e.dispatch(r)[t](...n);return{getSelectors:()=>["getIsResolving","hasStartedResolution","hasFinishedResolution","isResolving","getCachedResolvers"].reduce(((e,r)=>({...e,[r]:t(r)})),{}),getActions:()=>["startResolution","finishResolution","invalidateResolution","invalidateResolutionForStore","invalidateResolutionForStoreSelector"].reduce(((e,t)=>({...e,[t]:r(t)})),{}),subscribe:()=>()=>{}}}(u)),Object.entries(e).forEach((([e,t])=>u.registerStore(e,t))),t&&t.subscribe(i),a=u,(0,h.mapValues)(a,((e,t)=>"function"!=typeof e?e:function(){return u[t].apply(null,arguments)}));var a}(),H=(G.select,G.resolveSelect,G.dispatch,G.subscribe,G.registerGenericStore,G.registerStore,G.use,G.register);window.wp.blockEditor.store="core/block-editor",window.wp.editor.store="core/editor",window.wp.notices.store="core/notices",window.wp.data={...window.wp.data,createReduxStore:M,register:H}})()})();
\ No newline at end of file
diff --git a/libraries/lifterlms-blocks/assets/js/llms-blocks.asset.php b/libraries/lifterlms-blocks/assets/js/llms-blocks.asset.php
new file mode 100644
index 0000000000..5fa26daf61
--- /dev/null
+++ b/libraries/lifterlms-blocks/assets/js/llms-blocks.asset.php
@@ -0,0 +1 @@
+ array('jquery', 'lodash', 'react', 'react-dom', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-dom-ready', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-notices', 'wp-plugins', 'wp-polyfill', 'wp-primitives', 'wp-rich-text', 'wp-server-side-render', 'wp-url'), 'version' => '667dc5d30890c5424b1c');
diff --git a/libraries/lifterlms-blocks/assets/js/llms-blocks.js b/libraries/lifterlms-blocks/assets/js/llms-blocks.js
new file mode 100644
index 0000000000..aa86bfe1dd
--- /dev/null
+++ b/libraries/lifterlms-blocks/assets/js/llms-blocks.js
@@ -0,0 +1,28 @@
+(()=>{var e={679:(e,t,n)=>{"use strict";var r=n(296),l={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},s={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},o={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},i={};function a(e){return r.isMemo(e)?o:i[e.$$typeof]||l}i[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},i[r.Memo]=o;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,m=Object.getPrototypeOf,f=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(f){var l=m(n);l&&l!==f&&e(t,l,r)}var o=u(n);d&&(o=o.concat(d(n)));for(var i=a(t),h=a(n),g=0;g{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,l=n?Symbol.for("react.portal"):60106,s=n?Symbol.for("react.fragment"):60107,o=n?Symbol.for("react.strict_mode"):60108,i=n?Symbol.for("react.profiler"):60114,a=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,m=n?Symbol.for("react.suspense"):60113,f=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,_=n?Symbol.for("react.responder"):60118,y=n?Symbol.for("react.scope"):60119;function w(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case s:case i:case o:case m:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case h:case a:return e;default:return t}}case l:return t}}}function E(e){return w(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=a,t.Element=r,t.ForwardRef=p,t.Fragment=s,t.Lazy=g,t.Memo=h,t.Portal=l,t.Profiler=i,t.StrictMode=o,t.Suspense=m,t.isAsyncMode=function(e){return E(e)||w(e)===u},t.isConcurrentMode=E,t.isContextConsumer=function(e){return w(e)===c},t.isContextProvider=function(e){return w(e)===a},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return w(e)===p},t.isFragment=function(e){return w(e)===s},t.isLazy=function(e){return w(e)===g},t.isMemo=function(e){return w(e)===h},t.isPortal=function(e){return w(e)===l},t.isProfiler=function(e){return w(e)===i},t.isStrictMode=function(e){return w(e)===o},t.isSuspense=function(e){return w(e)===m},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===s||e===d||e===i||e===o||e===m||e===f||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===a||e.$$typeof===c||e.$$typeof===p||e.$$typeof===b||e.$$typeof===_||e.$$typeof===y||e.$$typeof===v)},t.typeOf=w},296:(e,t,n)=>{"use strict";e.exports=n(103)},703:(e,t,n)=>{"use strict";var r=n(414);function l(){}function s(){}s.resetWarningCache=l,e.exports=function(){function e(e,t,n,l,s,o){if(o!==r){var i=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw i.name="Invariant Violation",i}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:s,resetWarningCache:l};return n.PropTypes=n,n}},697:(e,t,n)=>{e.exports=n(703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},639:(e,t,n)=>{"use strict";var r=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(this.props,[]);return function(e){u.forEach((function(t){return delete e[t]}))}(l),l.className=this.props.inputClassName,l.id=this.state.inputId,l.style=n,o.default.createElement("div",{className:this.props.className,style:t},this.renderStyles(),o.default.createElement("input",r({},l,{ref:this.inputRef})),o.default.createElement("div",{ref:this.sizerRef,style:c},e),this.props.placeholder?o.default.createElement("div",{ref:this.placeHolderSizerRef,style:c},this.props.placeholder):null)}}]),t}(s.Component);f.propTypes={className:i.default.string,defaultValue:i.default.any,extraWidth:i.default.oneOfType([i.default.number,i.default.string]),id:i.default.string,injectStyles:i.default.bool,inputClassName:i.default.string,inputRef:i.default.func,inputStyle:i.default.object,minWidth:i.default.oneOfType([i.default.number,i.default.string]),onAutosize:i.default.func,onChange:i.default.func,placeholder:i.default.string,placeholderIsMinWidth:i.default.bool,style:i.default.object,value:i.default.any},f.defaultProps={minWidth:1,injectStyles:!0},t.Z=f},774:function(e,t){!function(e){"use strict";function t(e,t,n,r){var l,s=!1,o=0;function i(){l&&clearTimeout(l)}function a(){for(var a=arguments.length,c=new Array(a),u=0;ue?m():!0!==t&&(l=setTimeout(r?f:m,void 0===r?e-p:e)))}return"boolean"!=typeof t&&(r=n,n=t,t=void 0),a.cancel=function(){i(),s=!0},a}e.debounce=function(e,n,r){return void 0===r?t(e,n,!1):t(e,r,!1!==n)},e.throttle=t,Object.defineProperty(e,"__esModule",{value:!0})}(t)},196:e=>{"use strict";e.exports=window.React}},t={};function n(r){var l=t[r];if(void 0!==l)return l.exports;var s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,n),s.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e={};n.r(e),n.d(e,{addField:()=>sl,deleteField:()=>ol,editField:()=>il,loadField:()=>al,receiveFields:()=>ul,renameField:()=>dl,resetFields:()=>pl,unloadField:()=>cl});var t={};n.r(t),n.d(t,{fieldExists:()=>ml,getField:()=>fl,getFieldBy:()=>hl,getFields:()=>gl,getLoadedFields:()=>vl,isDuplicate:()=>bl,isLoaded:()=>_l});var r={};n.r(r),n.d(r,{name:()=>Ol,postTypes:()=>Il,settings:()=>Tl});var l={};n.r(l),n.d(l,{name:()=>Ll,postTypes:()=>Rl,settings:()=>Vl});var s={};n.r(s),n.d(s,{name:()=>Fl,postTypes:()=>Al,settings:()=>Bl});var o={};n.r(o),n.d(o,{name:()=>ql,postTypes:()=>Gl,settings:()=>Wl});var i={};n.r(i),n.d(i,{name:()=>Yl,postTypes:()=>Xl,settings:()=>Ql});var a={};n.r(a),n.d(a,{name:()=>Jl,postTypes:()=>es,settings:()=>ts});var c={};n.r(c),n.d(c,{name:()=>os,postTypes:()=>is,settings:()=>as});var u={};n.r(u),n.d(u,{name:()=>cs,settings:()=>us});var d={};n.r(d),n.d(d,{Search:()=>Br,SearchPost:()=>Hr,SearchUser:()=>Cs,SortableDragHandle:()=>Ei,SortableList:()=>Ci});var p={};n.r(p),n.d(p,{composed:()=>ji,name:()=>$i,postTypes:()=>Ui,settings:()=>Qi});var m={};n.r(m),n.d(m,{composed:()=>ta,name:()=>Ji,postTypes:()=>ea,settings:()=>na});var f={};n.r(f),n.d(f,{composed:()=>oa,name:()=>la,postTypes:()=>sa,settings:()=>ia});var h={};n.r(h),n.d(h,{composed:()=>da,name:()=>ca,postTypes:()=>ua,settings:()=>pa});var g={};n.r(g),n.d(g,{composed:()=>Ea,name:()=>ya,postTypes:()=>wa,settings:()=>Ca});var v={};n.r(v),n.d(v,{composed:()=>Oa,name:()=>Sa,postTypes:()=>wa,settings:()=>Ia});var b={};n.r(b),n.d(b,{composed:()=>Ma,name:()=>Pa,postTypes:()=>wa,settings:()=>Da});var _={};n.r(_),n.d(_,{composed:()=>Va,name:()=>Ra,postTypes:()=>wa,settings:()=>Na});var y={};n.r(y),n.d(y,{composed:()=>Ba,name:()=>Fa,postTypes:()=>wa,settings:()=>Ha});var w={};n.r(w),n.d(w,{composed:()=>$a,name:()=>za,postTypes:()=>wa,settings:()=>Ua});var E={};n.r(E),n.d(E,{composed:()=>Ga,name:()=>qa,postTypes:()=>wa,settings:()=>Wa});var x={};n.r(x),n.d(x,{composed:()=>Ya,name:()=>Ka,postTypes:()=>wa,settings:()=>Xa});var C={};n.r(C),n.d(C,{composed:()=>Ja,name:()=>Qa,postTypes:()=>Za,settings:()=>ec});var k={};n.r(k),n.d(k,{composed:()=>nc,name:()=>tc,postTypes:()=>wa,settings:()=>lc});var S={};n.r(S),n.d(S,{composed:()=>ac,name:()=>oc,postTypes:()=>ic,settings:()=>cc});var O={};n.r(O),n.d(O,{composed:()=>pc,name:()=>uc,postTypes:()=>dc,settings:()=>mc});var I={};n.r(I),n.d(I,{composed:()=>gc,name:()=>hc,postTypes:()=>wa,settings:()=>vc});var T={};n.r(T),n.d(T,{composed:()=>_c,name:()=>bc,postTypes:()=>wa,settings:()=>yc});var P={};n.r(P),n.d(P,{composed:()=>xc,name:()=>Ec,postTypes:()=>wa,settings:()=>Cc});var M={};n.r(M),n.d(M,{composed:()=>Oc,name:()=>Sc,postTypes:()=>ua,settings:()=>Ic});var D={};n.r(D),n.d(D,{composed:()=>Mc,name:()=>Tc,postTypes:()=>Pc,settings:()=>Dc});var L={};n.r(L),n.d(L,{composed:()=>Vc,name:()=>Rc,postTypes:()=>ua,settings:()=>Nc});var R={};n.r(R),n.d(R,{composed:()=>Bc,name:()=>Fc,postTypes:()=>wa,settings:()=>Hc});var V={};n.r(V),n.d(V,{composed:()=>$c,name:()=>zc,postTypes:()=>wa,settings:()=>Uc});var N={};n.r(N),n.d(N,{checkboxes:()=>m,confirmGroup:()=>p,radio:()=>f,redeemVoucher:()=>b,select:()=>h,text:()=>g,textarea:()=>v,userAddress:()=>S,userAddressCity:()=>P,userAddressCountry:()=>M,userAddressPostalCode:()=>R,userAddressRegion:()=>D,userAddressState:()=>L,userAddressStreet:()=>O,userAddressStreetPrimary:()=>I,userAddressStreetSecondary:()=>T,userDisplayName:()=>_,userEmail:()=>w,userFirstName:()=>E,userLastName:()=>x,userLogin:()=>y,userNames:()=>C,userPassword:()=>k,userPhone:()=>V});const A=window.wp.element,F=window.wp.primitives,B=()=>(0,A.createElement)(A.Fragment,null,(0,A.createElement)(F.SVG,{width:"20px",height:"20px",viewBox:"0 0 85 85",version:"1.1",style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinejoin:"round",strokeMiterlimit:1.41421}},(0,A.createElement)(F.G,{id:"lifterlms-icon"},(0,A.createElement)(F.Path,{d:"M29.061,50.631l-2.258,-1.29l-6.066,10.452c-5.483,-7.613 -6.58,-17.873 -2.322,-26.712l0.064,-0.065c0.258,-0.581 0.581,-1.097 0.839,-1.613c4.323,-7.485 11.873,-12.067 19.873,-12.905c1.42,-1.935 2.969,-3.614 4.711,-5.226c-11.421,-0.645 -22.843,5.032 -28.972,15.615c-7.872,13.679 -4.258,30.841 7.872,40.263l6.065,-18.003c0.065,-0.128 0.13,-0.323 0.194,-0.516m36.908,-16.712c3.227,7.421 3.033,16.195 -1.291,23.681c-0.257,0.516 -0.58,1.031 -0.903,1.548l-0.064,0.066c-5.549,8.129 -14.97,12.323 -24.326,11.355l6.066,-10.453l-2.259,-1.291c-0.129,0.13 -0.258,0.259 -0.387,0.389l-12.518,14.259c14.196,5.808 30.907,0.323 38.779,-13.357c6.13,-10.581 5.356,-23.293 -0.967,-32.842c-0.517,2.257 -1.162,4.516 -2.13,6.645"}),(0,A.createElement)(F.Path,{d:"M44.999,50.243c-1.614,2.13 -4.194,3.228 -6.968,3.485c-0.839,0.065 -1.614,-0.387 -2.001,-1.161c-1.162,-2.517 -1.548,-5.291 -0.451,-7.743l-12.648,-7.291c-0.838,-0.516 -1.225,-1.356 -0.967,-2.258c0.193,-0.904 0.967,-1.55 1.871,-1.55l12.84,-0.451c0.968,-3.936 2.581,-7.678 4.904,-11.163c3.678,-5.484 8.904,-9.549 15.034,-12.001c1.485,-0.581 2.968,-1.096 4.453,-1.484c1.096,-0.258 2.193,0.388 2.451,1.421c0.452,1.482 0.775,3.031 1.033,4.579c0.903,6.582 -0.065,13.163 -2.903,19.099c-1.807,3.743 -4.324,6.97 -7.228,9.808l6.001,11.292c0.452,0.839 0.323,1.807 -0.387,2.452c-0.645,0.645 -1.614,0.71 -2.387,0.258l-12.647,-7.292Zm9.549,-27.035c1.936,1.162 2.581,3.614 1.485,5.549c-1.098,1.936 -3.613,2.582 -5.55,1.485c-1.935,-1.098 -2.58,-3.614 -1.484,-5.55c1.162,-1.935 3.614,-2.581 5.549,-1.484"}),(0,A.createElement)(F.Path,{d:"M26.093,72.118l13.679,-15.551c-0.516,0.065 -1.032,0.129 -1.549,0.194c-2.064,0.129 -4,-0.968 -4.902,-2.903c-0.259,-0.452 -0.453,-0.904 -0.646,-1.42l-6.582,19.68Z"})))),H=window.wp.hooks;function z(e,t){let n=!0;return(-1!==window.llms.dynamic_blocks.indexOf(t)||e.supports&&!1===e.supports.llms_visibility||(0,H.applyFilters)("llms_block_visibility_disallowed_blocks",["core/freeform","llms/php-template"]).includes(t))&&(n=!1),(0,H.applyFilters)("llms_block_supports_visibility",n,e,t)}const $=window.wp.i18n,U=window.wp.compose,j=window.wp.blockEditor,q=window.wp.components,G={all:(0,$.__)("everyone","lifterlms"),enrolled:(0,$.__)("enrolled users","lifterlms"),not_enrolled:(0,$.__)("non-enrolled users or visitors","lifterlms"),logged_in:(0,$.__)("logged in users","lifterlms"),logged_out:(0,$.__)("logged out users","lifterlms")},W=Object.keys(G).map((e=>({label:G[e],value:e})));class K extends A.Component{render(){const{llms_visibility:e}=this.props.attributes,{children:t}=this.props;return"all"===e?t:(0,A.createElement)("div",{className:"llms-block-visibility"},t,(0,A.createElement)("div",{className:"llms-block-visibility--indicator"},(0,A.createElement)(q.Dashicon,{icon:"visibility"}),(0,A.createElement)("span",{className:"llms-block-visibility--msg"},(0,$.sprintf)(
+// Translators: %s = visibility setting label.
+(0,$.__)("This block is only visible to %s","lifterlms"),G[n=e]||n))));var n}}function Y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var X=n(774);function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var J=n(196),ee=n.n(J),te=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t0?ae(be,--ge):0,fe--,10===ve&&(fe=1,me--),ve}function Ee(){return ve=ge2||Se(ve)>3?"":" "}function Me(e,t){for(;--t&&Ee()&&!(ve<48||ve>102||ve>57&&ve<65||ve>70&&ve<97););return ke(e,Ce()+(t<6&&32==xe()&&32==Ee()))}function De(e){for(;Ee();)switch(ve){case e:return ge;case 34:case 39:34!==e&&39!==e&&De(ve);break;case 40:41===e&&De(e);break;case 92:Ee()}return ge}function Le(e,t){for(;Ee()&&e+ve!==57&&(e+ve!==84||47!==xe()););return"/*"+ke(t,ge-1)+"*"+re(47===e?e:Ee())}function Re(e){for(;!Se(xe());)Ee();return ke(e,ge)}var Ve="-ms-",Ne="-moz-",Ae="-webkit-",Fe="comm",Be="rule",He="decl",ze="@keyframes";function $e(e,t){for(var n="",r=de(e),l=0;l6)switch(ae(e,t+1)){case 109:if(45!==ae(e,t+4))break;case 102:return oe(e,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+Ne+(108==ae(e,t+3)?"$3":"$2-$3"))+e;case 115:return~ie(e,"stretch")?je(oe(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==ae(e,t+1))break;case 6444:switch(ae(e,ue(e)-3-(~ie(e,"!important")&&10))){case 107:return oe(e,":",":"+Ae)+e;case 101:return oe(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Ae+(45===ae(e,14)?"inline-":"")+"box$3$1"+Ae+"$2$3$1"+Ve+"$2box$3")+e}break;case 5936:switch(ae(e,t+11)){case 114:return Ae+e+Ve+oe(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Ae+e+Ve+oe(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Ae+e+Ve+oe(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Ae+e+Ve+e+e}return e}function qe(e){return Ie(Ge("",null,null,null,[""],e=Oe(e),0,[0],e))}function Ge(e,t,n,r,l,s,o,i,a){for(var c=0,u=0,d=o,p=0,m=0,f=0,h=1,g=1,v=1,b=0,_="",y=l,w=s,E=r,x=_;g;)switch(f=b,b=Ee()){case 40:if(108!=f&&58==x.charCodeAt(d-1)){-1!=ie(x+=oe(Te(b),"&","&\f"),"&\f")&&(v=-1);break}case 34:case 39:case 91:x+=Te(b);break;case 9:case 10:case 13:case 32:x+=Pe(f);break;case 92:x+=Me(Ce()-1,7);continue;case 47:switch(xe()){case 42:case 47:pe(Ke(Le(Ee(),Ce()),t,n),a);break;default:x+="/"}break;case 123*h:i[c++]=ue(x)*v;case 125*h:case 59:case 0:switch(b){case 0:case 125:g=0;case 59+u:m>0&&ue(x)-d&&pe(m>32?Ye(x+";",r,n,d-1):Ye(oe(x," ","")+";",r,n,d-2),a);break;case 59:x+=";";default:if(pe(E=We(x,t,n,c,u,l,i,_,y=[],w=[],d),s),123===b)if(0===u)Ge(x,t,E,E,y,s,d,i,w);else switch(p){case 100:case 109:case 115:Ge(e,E,E,r&&pe(We(e,E,E,0,0,l,i,_,l,y=[],d),w),l,w,d,i,r?y:w);break;default:Ge(x,E,E,E,[""],w,0,i,w)}}c=u=m=0,h=v=1,_=x="",d=o;break;case 58:d=1+ue(x),m=f;default:if(h<1)if(123==b)--h;else if(125==b&&0==h++&&125==we())continue;switch(x+=re(b),b*h){case 38:v=u>0?1:(x+="\f",-1);break;case 44:i[c++]=(ue(x)-1)*v,v=1;break;case 64:45===xe()&&(x+=Te(Ee())),p=xe(),u=d=ue(_=x+=Re(Ce())),b++;break;case 45:45===f&&2==ue(x)&&(h=0)}}return s}function We(e,t,n,r,l,s,o,i,a,c,u){for(var d=l-1,p=0===l?s:[""],m=de(p),f=0,h=0,g=0;f0?p[v]+" "+b:oe(b,/&\f/g,p[v])))&&(a[g++]=_);return _e(e,t,n,0===l?Be:i,a,c,u)}function Ke(e,t,n){return _e(e,t,n,Fe,re(ve),ce(e,2,-2),0)}function Ye(e,t,n,r){return _e(e,t,n,He,ce(e,0,r),ce(e,r+1,-1),r)}var Xe=function(e,t,n){for(var r=0,l=0;r=l,l=xe(),38===r&&12===l&&(t[n]=1),!Se(l);)Ee();return ke(e,ge)},Qe=new WeakMap,Ze=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Qe.get(n))&&!r){Qe.set(e,!0);for(var l=[],s=function(e,t){return Ie(function(e,t){var n=-1,r=44;do{switch(Se(r)){case 0:38===r&&12===xe()&&(t[n]=1),e[n]+=Xe(ge-1,t,n);break;case 2:e[n]+=Te(r);break;case 4:if(44===r){e[++n]=58===xe()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=re(r)}}while(r=Ee());return e}(Oe(e),t))}(t,l),o=n.props,i=0,a=0;i-1&&!e.return)switch(e.type){case He:e.return=je(e.value,e.length);break;case ze:return $e([ye(e,{value:oe(e.value,"@","@"+Ae)})],r);case Be:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return $e([ye(e,{props:[oe(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return $e([ye(e,{props:[oe(t,/:(plac\w+)/,":-webkit-input-$1")]}),ye(e,{props:[oe(t,/:(plac\w+)/,":-moz-$1")]}),ye(e,{props:[oe(t,/:(plac\w+)/,Ve+"input-$1")]})],r)}return""}))}}];const tt=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var r,l,s=e.stylisPlugins||et,o={},i=[];r=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n=4;++r,l-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(l){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},ot={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var it=/[A-Z]|^ms/g,at=/_EMO_([^_]+?)_([^]*?)_EMO_/g,ct=function(e){return 45===e.charCodeAt(1)},ut=function(e){return null!=e&&"boolean"!=typeof e},dt=function(e){var t=Object.create(null);return function(e){return void 0===t[e]&&(t[e]=ct(n=e)?n:n.replace(it,"-$&").toLowerCase()),t[e];var n}}(),pt=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(at,(function(e,t,n){return ft={name:t,styles:n,next:ft},t}))}return 1===ot[e]||ct(e)||"number"!=typeof t||0===t?t:t+"px"};function mt(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return ft={name:n.name,styles:n.styles,next:ft},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)ft={name:r.name,styles:r.styles,next:ft},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var l=0;l-1}function Jt(e){return Zt(e)?window.pageYOffset:e.scrollTop}function en(e,t){Zt(e)?window.scrollTo(0,t):e.scrollTop=t}function tn(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function nn(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Wt,l=Jt(e),s=t-l,o=10,i=0;function a(){var t=tn(i+=o,l,s,n);en(e,t),i=m)return{placement:"bottom",maxHeight:t};if(x>=m&&!o)return s&&nn(a,C,S),{placement:"bottom",maxHeight:t};if(!o&&x>=r||o&&w>=r)return s&&nn(a,C,S),{placement:"bottom",maxHeight:o?w-b:x-b};if("auto"===l||o){var O=t,I=o?y:E;return I>=r&&(O=Math.min(I-b-i.controlHeight,t)),{placement:"top",maxHeight:O}}if("bottom"===l)return s&&en(a,C),{placement:"bottom",maxHeight:t};break;case"top":if(y>=m)return{placement:"top",maxHeight:t};if(E>=m&&!o)return s&&nn(a,k,S),{placement:"top",maxHeight:t};if(!o&&E>=r||o&&y>=r){var T=t;return(!o&&E>=r||o&&y>=r)&&(T=o?y-_:E-_),s&&nn(a,k,S),{placement:"top",maxHeight:T}}return{placement:"bottom",maxHeight:t};default:throw new Error('Invalid placement provided "'.concat(l,'".'))}return c}var un=function(e){return"auto"===e?"bottom":e},dn=(0,J.createContext)({getPortalPlacement:null}),pn=function(e){Bt(n,e);var t=Gt(n);function n(){var e;Vt(this,n);for(var r=arguments.length,l=new Array(r),s=0;se.length)&&(t=e.length);for(var n=0,r=new Array(t);n0,h=d-p-u,g=!1;h>t&&o.current&&(r&&r(e),o.current=!1),f&&i.current&&(s&&s(e),i.current=!1),f&&t>h?(n&&!o.current&&n(e),m.scrollTop=d,g=!0,o.current=!0):!f&&-t>u&&(l&&!i.current&&l(e),m.scrollTop=0,g=!0,i.current=!0),g&&function(e){e.preventDefault(),e.stopPropagation()}(e)}}),[]),d=(0,J.useCallback)((function(e){u(e,e.deltaY)}),[u]),p=(0,J.useCallback)((function(e){a.current=e.changedTouches[0].clientY}),[]),m=(0,J.useCallback)((function(e){var t=a.current-e.changedTouches[0].clientY;u(e,t)}),[u]),f=(0,J.useCallback)((function(e){if(e){var t=!!an&&{passive:!1};"function"==typeof e.addEventListener&&e.addEventListener("wheel",d,t),"function"==typeof e.addEventListener&&e.addEventListener("touchstart",p,t),"function"==typeof e.addEventListener&&e.addEventListener("touchmove",m,t)}}),[m,p,d]),h=(0,J.useCallback)((function(e){e&&("function"==typeof e.removeEventListener&&e.removeEventListener("wheel",d,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchstart",p,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchmove",m,!1))}),[m,p,d]);return(0,J.useEffect)((function(){if(t){var e=c.current;return f(e),function(){h(e)}}}),[t,f,h]),function(e){c.current=e}}({isEnabled:void 0===r||r,onBottomArrive:e.onBottomArrive,onBottomLeave:e.onBottomLeave,onTopArrive:e.onTopArrive,onTopLeave:e.onTopLeave}),s=function(e){var t=e.isEnabled,n=e.accountForScrollbars,r=void 0===n||n,l=(0,J.useRef)({}),s=(0,J.useRef)(null),o=(0,J.useCallback)((function(e){if(ur){var t=document.body,n=t&&t.style;if(r&&lr.forEach((function(e){var t=n&&n[e];l.current[e]=t})),r&&dr<1){var s=parseInt(l.current.paddingRight,10)||0,o=document.body?document.body.clientWidth:0,i=window.innerWidth-o+s||0;Object.keys(sr).forEach((function(e){var t=sr[e];n&&(n[e]=t)})),n&&(n.paddingRight="".concat(i,"px"))}t&&cr()&&(t.addEventListener("touchmove",or,pr),e&&(e.addEventListener("touchstart",ar,pr),e.addEventListener("touchmove",ir,pr))),dr+=1}}),[]),i=(0,J.useCallback)((function(e){if(ur){var t=document.body,n=t&&t.style;dr=Math.max(dr-1,0),r&&dr<1&&lr.forEach((function(e){var t=l.current[e];n&&(n[e]=t)})),t&&cr()&&(t.removeEventListener("touchmove",or,pr),e&&(e.removeEventListener("touchstart",ar,pr),e.removeEventListener("touchmove",ir,pr)))}}),[]);return(0,J.useEffect)((function(){if(t){var e=s.current;return o(e),function(){i(e)}}}),[t,o,i]),function(e){s.current=e}}({isEnabled:n});return Ot(ee().Fragment,null,n&&Ot("div",{onClick:mr,css:fr}),t((function(e){l(e),s(e)})))}var gr={clearIndicator:Tn,container:function(e){var t=e.isDisabled;return{label:"container",direction:e.isRtl?"rtl":null,pointerEvents:t?"none":null,position:"relative"}},control:function(e){var t=e.isDisabled,n=e.isFocused,r=e.theme,l=r.colors,s=r.borderRadius,o=r.spacing;return{label:"control",alignItems:"center",backgroundColor:t?l.neutral5:l.neutral0,borderColor:t?l.neutral10:n?l.primary:l.neutral20,borderRadius:s,borderStyle:"solid",borderWidth:1,boxShadow:n?"0 0 0 1px ".concat(l.primary):null,cursor:"default",display:"flex",flexWrap:"wrap",justifyContent:"space-between",minHeight:o.controlHeight,outline:"0 !important",position:"relative",transition:"all 100ms","&:hover":{borderColor:n?l.primary:l.neutral30}}},dropdownIndicator:In,group:function(e){var t=e.theme.spacing;return{paddingBottom:2*t.baseUnit,paddingTop:2*t.baseUnit}},groupHeading:function(e){var t=e.theme.spacing;return{label:"group",color:"#999",cursor:"default",display:"block",fontSize:"75%",fontWeight:"500",marginBottom:"0.25em",paddingLeft:3*t.baseUnit,paddingRight:3*t.baseUnit,textTransform:"uppercase"}},indicatorsContainer:function(){return{alignItems:"center",alignSelf:"stretch",display:"flex",flexShrink:0}},indicatorSeparator:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing.baseUnit,l=n.colors;return{label:"indicatorSeparator",alignSelf:"stretch",backgroundColor:t?l.neutral10:l.neutral20,marginBottom:2*r,marginTop:2*r,width:1}},input:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,l=n.colors;return{margin:r.baseUnit/2,paddingBottom:r.baseUnit/2,paddingTop:r.baseUnit/2,visibility:t?"hidden":"visible",color:l.neutral80}},loadingIndicator:function(e){var t=e.isFocused,n=e.size,r=e.theme,l=r.colors,s=r.spacing.baseUnit;return{label:"loadingIndicator",color:t?l.neutral60:l.neutral20,display:"flex",padding:2*s,transition:"color 150ms",alignSelf:"center",fontSize:n,lineHeight:1,marginRight:n,textAlign:"center",verticalAlign:"middle"}},loadingMessage:hn,menu:function(e){var t,n=e.placement,r=e.theme,l=r.borderRadius,s=r.spacing,o=r.colors;return Y(t={label:"menu"},function(e){return e?{bottom:"top",top:"bottom"}[e]:"bottom"}(n),"100%"),Y(t,"backgroundColor",o.neutral0),Y(t,"borderRadius",l),Y(t,"boxShadow","0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)"),Y(t,"marginBottom",s.menuGutter),Y(t,"marginTop",s.menuGutter),Y(t,"position","absolute"),Y(t,"width","100%"),Y(t,"zIndex",1),t},menuList:function(e){var t=e.maxHeight,n=e.theme.spacing.baseUnit;return{maxHeight:t,overflowY:"auto",paddingBottom:n,paddingTop:n,position:"relative",WebkitOverflowScrolling:"touch"}},menuPortal:function(e){var t=e.rect,n=e.offset,r=e.position;return{left:t.left,position:r,top:n,width:t.width,zIndex:1}},multiValue:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius;return{label:"multiValue",backgroundColor:t.colors.neutral10,borderRadius:r/2,display:"flex",margin:n.baseUnit/2,minWidth:0}},multiValueLabel:function(e){var t=e.theme,n=t.borderRadius,r=t.colors,l=e.cropWithEllipsis;return{borderRadius:n/2,color:r.neutral80,fontSize:"85%",overflow:"hidden",padding:3,paddingLeft:6,textOverflow:l?"ellipsis":null,whiteSpace:"nowrap"}},multiValueRemove:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius,l=t.colors;return{alignItems:"center",borderRadius:r/2,backgroundColor:e.isFocused&&l.dangerLight,display:"flex",paddingLeft:n.baseUnit,paddingRight:n.baseUnit,":hover":{backgroundColor:l.dangerLight,color:l.danger}}},noOptionsMessage:fn,option:function(e){var t=e.isDisabled,n=e.isFocused,r=e.isSelected,l=e.theme,s=l.spacing,o=l.colors;return{label:"option",backgroundColor:r?o.primary:n?o.primary25:"transparent",color:t?o.neutral20:r?o.neutral0:"inherit",cursor:"default",display:"block",fontSize:"inherit",padding:"".concat(2*s.baseUnit,"px ").concat(3*s.baseUnit,"px"),width:"100%",userSelect:"none",WebkitTapHighlightColor:"rgba(0, 0, 0, 0)",":active":{backgroundColor:!t&&(r?o.primary:o.primary50)}}},placeholder:function(e){var t=e.theme,n=t.spacing;return{label:"placeholder",color:t.colors.neutral50,marginLeft:n.baseUnit/2,marginRight:n.baseUnit/2,position:"absolute",top:"50%",transform:"translateY(-50%)"}},singleValue:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,l=n.colors;return{label:"singleValue",color:t?l.neutral40:l.neutral80,marginLeft:r.baseUnit/2,marginRight:r.baseUnit/2,maxWidth:"calc(100% - ".concat(2*r.baseUnit,"px)"),overflow:"hidden",position:"absolute",textOverflow:"ellipsis",whiteSpace:"nowrap",top:"50%",transform:"translateY(-50%)"}},valueContainer:function(e){var t=e.theme.spacing;return{alignItems:"center",display:"flex",flex:1,flexWrap:"wrap",padding:"".concat(t.baseUnit/2,"px ").concat(2*t.baseUnit,"px"),WebkitOverflowScrolling:"touch",position:"relative",overflow:"hidden"}}},vr={borderRadius:4,colors:{primary:"#2684FF",primary75:"#4C9AFF",primary50:"#B2D4FF",primary25:"#DEEBFF",danger:"#DE350B",dangerLight:"#FFBDAD",neutral0:"hsl(0, 0%, 100%)",neutral5:"hsl(0, 0%, 95%)",neutral10:"hsl(0, 0%, 90%)",neutral20:"hsl(0, 0%, 80%)",neutral30:"hsl(0, 0%, 70%)",neutral40:"hsl(0, 0%, 60%)",neutral50:"hsl(0, 0%, 50%)",neutral60:"hsl(0, 0%, 40%)",neutral70:"hsl(0, 0%, 30%)",neutral80:"hsl(0, 0%, 20%)",neutral90:"hsl(0, 0%, 10%)"},spacing:{baseUnit:4,controlHeight:38,menuGutter:8}},br={"aria-live":"polite",backspaceRemovesValue:!0,blurInputOnSelect:rn(),captureMenuScroll:!rn(),closeMenuOnSelect:!0,closeMenuOnScroll:!1,components:{},controlShouldRenderValue:!0,escapeClearsValue:!1,filterOption:function(e,t){var n=Ut({ignoreCase:!0,ignoreAccents:!0,stringify:nr,trim:!0,matchFrom:"any"},undefined),r=n.ignoreCase,l=n.ignoreAccents,s=n.stringify,o=n.trim,i=n.matchFrom,a=o?tr(t):t,c=o?tr(s(e)):s(e);return r&&(a=a.toLowerCase(),c=c.toLowerCase()),l&&(a=er(a),c=Jn(c)),"start"===i?c.substr(0,a.length)===a:c.indexOf(a)>-1},formatGroupLabel:function(e){return e.label},getOptionLabel:function(e){return e.label},getOptionValue:function(e){return e.value},isDisabled:!1,isLoading:!1,isMulti:!1,isRtl:!1,isSearchable:!0,isOptionDisabled:function(e){return!!e.isDisabled},loadingMessage:function(){return"Loading..."},maxMenuHeight:300,minMenuHeight:140,menuIsOpen:!1,menuPlacement:"bottom",menuPosition:"absolute",menuShouldBlockScroll:!1,menuShouldScrollIntoView:!function(){try{return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}catch(e){return!1}}(),noOptionsMessage:function(){return"No options"},openMenuOnFocus:!1,openMenuOnClick:!0,options:[],pageSize:5,placeholder:"Select...",screenReaderStatus:function(e){var t=e.count;return"".concat(t," result").concat(1!==t?"s":""," available")},styles:{},tabIndex:"0",tabSelectsValue:!0};function _r(e,t,n,r){return{type:"option",data:t,isDisabled:kr(e,t,n),isSelected:Sr(e,t,n),label:xr(e,t),value:Cr(e,t),index:r}}function yr(e,t){return e.options.map((function(n,r){if(n.options){var l=n.options.map((function(n,r){return _r(e,n,t,r)})).filter((function(t){return Er(e,t)}));return l.length>0?{type:"group",data:n,options:l,index:r}:void 0}var s=_r(e,n,t,r);return Er(e,s)?s:void 0})).filter((function(e){return!!e}))}function wr(e){return e.reduce((function(e,t){return"group"===t.type?e.push.apply(e,Hn(t.options.map((function(e){return e.data})))):e.push(t.data),e}),[])}function Er(e,t){var n=e.inputValue,r=void 0===n?"":n,l=t.data,s=t.isSelected,o=t.label,i=t.value;return(!Ir(e)||!s)&&Or(e,{label:o,value:i,data:l},r)}var xr=function(e,t){return e.getOptionLabel(t)},Cr=function(e,t){return e.getOptionValue(t)};function kr(e,t,n){return"function"==typeof e.isOptionDisabled&&e.isOptionDisabled(t,n)}function Sr(e,t,n){if(n.indexOf(t)>-1)return!0;if("function"==typeof e.isOptionSelected)return e.isOptionSelected(t,n);var r=Cr(e,t);return n.some((function(t){return Cr(e,t)===r}))}function Or(e,t,n){return!e.filterOption||e.filterOption(t,n)}var Ir=function(e){var t=e.hideSelectedOptions,n=e.isMulti;return void 0===t?n:t},Tr=1,Pr=function(e){Bt(n,e);var t=Gt(n);function n(e){var r;return Vt(this,n),(r=t.call(this,e)).state={ariaSelection:null,focusedOption:null,focusedValue:null,inputIsHidden:!1,isFocused:!1,selectValue:[],clearFocusValueOnUpdate:!1,inputIsHiddenAfterUpdate:void 0,prevProps:void 0},r.blockOptionHover=!1,r.isComposing=!1,r.commonProps=void 0,r.initialTouchX=0,r.initialTouchY=0,r.instancePrefix="",r.openAfterFocus=!1,r.scrollToFocusedOptionOnUpdate=!1,r.userIsDragging=void 0,r.controlRef=null,r.getControlRef=function(e){r.controlRef=e},r.focusedOptionRef=null,r.getFocusedOptionRef=function(e){r.focusedOptionRef=e},r.menuListRef=null,r.getMenuListRef=function(e){r.menuListRef=e},r.inputRef=null,r.getInputRef=function(e){r.inputRef=e},r.focus=r.focusInput,r.blur=r.blurInput,r.onChange=function(e,t){var n=r.props,l=n.onChange,s=n.name;t.name=s,r.ariaOnChange(e,t),l(e,t)},r.setValue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"set-value",n=arguments.length>2?arguments[2]:void 0,l=r.props,s=l.closeMenuOnSelect,o=l.isMulti;r.onInputChange("",{action:"set-value"}),s&&(r.setState({inputIsHiddenAfterUpdate:!o}),r.onMenuClose()),r.setState({clearFocusValueOnUpdate:!0}),r.onChange(e,{action:t,option:n})},r.selectOption=function(e){var t=r.props,n=t.blurInputOnSelect,l=t.isMulti,s=t.name,o=r.state.selectValue,i=l&&r.isOptionSelected(e,o),a=r.isOptionDisabled(e,o);if(i){var c=r.getOptionValue(e);r.setValue(o.filter((function(e){return r.getOptionValue(e)!==c})),"deselect-option",e)}else{if(a)return void r.ariaOnChange(e,{action:"select-option",name:s});l?r.setValue([].concat(Hn(o),[e]),"select-option",e):r.setValue(e,"select-option")}n&&r.blurInput()},r.removeValue=function(e){var t=r.props.isMulti,n=r.state.selectValue,l=r.getOptionValue(e),s=n.filter((function(e){return r.getOptionValue(e)!==l})),o=t?s:s[0]||null;r.onChange(o,{action:"remove-value",removedValue:e}),r.focusInput()},r.clearValue=function(){var e=r.state.selectValue;r.onChange(r.props.isMulti?[]:null,{action:"clear",removedValues:e})},r.popValue=function(){var e=r.props.isMulti,t=r.state.selectValue,n=t[t.length-1],l=t.slice(0,t.length-1),s=e?l:l[0]||null;r.onChange(s,{action:"pop-value",removedValue:n})},r.getValue=function(){return r.state.selectValue},r.cx=function(){for(var e=arguments.length,t=new Array(e),n=0;n5||s>5}},r.onTouchEnd=function(e){r.userIsDragging||(r.controlRef&&!r.controlRef.contains(e.target)&&r.menuListRef&&!r.menuListRef.contains(e.target)&&r.blurInput(),r.initialTouchX=0,r.initialTouchY=0)},r.onControlTouchEnd=function(e){r.userIsDragging||r.onControlMouseDown(e)},r.onClearIndicatorTouchEnd=function(e){r.userIsDragging||r.onClearIndicatorMouseDown(e)},r.onDropdownIndicatorTouchEnd=function(e){r.userIsDragging||r.onDropdownIndicatorMouseDown(e)},r.handleInputChange=function(e){var t=e.currentTarget.value;r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange(t,{action:"input-change"}),r.props.menuIsOpen||r.onMenuOpen()},r.onInputFocus=function(e){r.props.onFocus&&r.props.onFocus(e),r.setState({inputIsHiddenAfterUpdate:!1,isFocused:!0}),(r.openAfterFocus||r.props.openMenuOnFocus)&&r.openMenu("first"),r.openAfterFocus=!1},r.onInputBlur=function(e){r.menuListRef&&r.menuListRef.contains(document.activeElement)?r.inputRef.focus():(r.props.onBlur&&r.props.onBlur(e),r.onInputChange("",{action:"input-blur"}),r.onMenuClose(),r.setState({focusedValue:null,isFocused:!1}))},r.onOptionHover=function(e){r.blockOptionHover||r.state.focusedOption===e||r.setState({focusedOption:e})},r.shouldHideSelectedOptions=function(){return Ir(r.props)},r.onKeyDown=function(e){var t=r.props,n=t.isMulti,l=t.backspaceRemovesValue,s=t.escapeClearsValue,o=t.inputValue,i=t.isClearable,a=t.isDisabled,c=t.menuIsOpen,u=t.onKeyDown,d=t.tabSelectsValue,p=t.openMenuOnFocus,m=r.state,f=m.focusedOption,h=m.focusedValue,g=m.selectValue;if(!(a||"function"==typeof u&&(u(e),e.defaultPrevented))){switch(r.blockOptionHover=!0,e.key){case"ArrowLeft":if(!n||o)return;r.focusValue("previous");break;case"ArrowRight":if(!n||o)return;r.focusValue("next");break;case"Delete":case"Backspace":if(o)return;if(h)r.removeValue(h);else{if(!l)return;n?r.popValue():i&&r.clearValue()}break;case"Tab":if(r.isComposing)return;if(e.shiftKey||!c||!d||!f||p&&r.isOptionSelected(f,g))return;r.selectOption(f);break;case"Enter":if(229===e.keyCode)break;if(c){if(!f)return;if(r.isComposing)return;r.selectOption(f);break}return;case"Escape":c?(r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange("",{action:"menu-close"}),r.onMenuClose()):i&&s&&r.clearValue();break;case" ":if(o)return;if(!c){r.openMenu("first");break}if(!f)return;r.selectOption(f);break;case"ArrowUp":c?r.focusOption("up"):r.openMenu("last");break;case"ArrowDown":c?r.focusOption("down"):r.openMenu("first");break;case"PageUp":if(!c)return;r.focusOption("pageup");break;case"PageDown":if(!c)return;r.focusOption("pagedown");break;case"Home":if(!c)return;r.focusOption("first");break;case"End":if(!c)return;r.focusOption("last");break;default:return}e.preventDefault()}},r.instancePrefix="react-select-"+(r.props.instanceId||++Tr),r.state.selectValue=Xt(e.value),r}return At(n,[{key:"componentDidMount",value:function(){this.startListeningComposition(),this.startListeningToTouch(),this.props.closeMenuOnScroll&&document&&document.addEventListener&&document.addEventListener("scroll",this.onScroll,!0),this.props.autoFocus&&this.focusInput()}},{key:"componentDidUpdate",value:function(e){var t,n,r,l,s,o=this.props,i=o.isDisabled,a=o.menuIsOpen,c=this.state.isFocused;(c&&!i&&e.isDisabled||c&&a&&!e.menuIsOpen)&&this.focusInput(),c&&i&&!e.isDisabled&&this.setState({isFocused:!1},this.onMenuClose),this.menuListRef&&this.focusedOptionRef&&this.scrollToFocusedOptionOnUpdate&&(t=this.menuListRef,n=this.focusedOptionRef,r=t.getBoundingClientRect(),l=n.getBoundingClientRect(),s=n.offsetHeight/3,l.bottom+s>r.bottom?en(t,Math.min(n.offsetTop+n.clientHeight-t.offsetHeight+s,t.scrollHeight)):l.top-s-1&&(o=i)}this.scrollToFocusedOptionOnUpdate=!(l&&this.menuListRef),this.setState({inputIsHiddenAfterUpdate:!1,focusedValue:null,focusedOption:s[o]},(function(){return t.onMenuOpen()}))}},{key:"focusValue",value:function(e){var t=this.state,n=t.selectValue,r=t.focusedValue;if(this.props.isMulti){this.setState({focusedOption:null});var l=n.indexOf(r);r||(l=-1);var s=n.length-1,o=-1;if(n.length){switch(e){case"previous":o=0===l?0:-1===l?s:l-1;break;case"next":l>-1&&l0&&void 0!==arguments[0]?arguments[0]:"first",t=this.props.pageSize,n=this.state.focusedOption,r=this.getFocusableOptions();if(r.length){var l=0,s=r.indexOf(n);n||(s=-1),"up"===e?l=s>0?s-1:r.length-1:"down"===e?l=(s+1)%r.length:"pageup"===e?(l=s-t)<0&&(l=0):"pagedown"===e?(l=s+t)>r.length-1&&(l=r.length-1):"last"===e&&(l=r.length-1),this.scrollToFocusedOptionOnUpdate=!0,this.setState({focusedOption:r[l],focusedValue:null})}}},{key:"getTheme",value:function(){return this.props.theme?"function"==typeof this.props.theme?this.props.theme(vr):Ut(Ut({},vr),this.props.theme):vr}},{key:"getCommonProps",value:function(){var e=this.clearValue,t=this.cx,n=this.getStyles,r=this.getValue,l=this.selectOption,s=this.setValue,o=this.props,i=o.isMulti,a=o.isRtl,c=o.options;return{clearValue:e,cx:t,getStyles:n,getValue:r,hasValue:this.hasValue(),isMulti:i,isRtl:a,options:c,selectOption:l,selectProps:o,setValue:s,theme:this.getTheme()}}},{key:"hasValue",value:function(){return this.state.selectValue.length>0}},{key:"hasOptions",value:function(){return!!this.getFocusableOptions().length}},{key:"isClearable",value:function(){var e=this.props,t=e.isClearable,n=e.isMulti;return void 0===t?n:t}},{key:"isOptionDisabled",value:function(e,t){return kr(this.props,e,t)}},{key:"isOptionSelected",value:function(e,t){return Sr(this.props,e,t)}},{key:"filterOption",value:function(e,t){return Or(this.props,e,t)}},{key:"formatOptionLabel",value:function(e,t){if("function"==typeof this.props.formatOptionLabel){var n=this.props.inputValue,r=this.state.selectValue;return this.props.formatOptionLabel(e,{context:t,inputValue:n,selectValue:r})}return this.getOptionLabel(e)}},{key:"formatGroupLabel",value:function(e){return this.props.formatGroupLabel(e)}},{key:"startListeningComposition",value:function(){document&&document.addEventListener&&(document.addEventListener("compositionstart",this.onCompositionStart,!1),document.addEventListener("compositionend",this.onCompositionEnd,!1))}},{key:"stopListeningComposition",value:function(){document&&document.removeEventListener&&(document.removeEventListener("compositionstart",this.onCompositionStart),document.removeEventListener("compositionend",this.onCompositionEnd))}},{key:"startListeningToTouch",value:function(){document&&document.addEventListener&&(document.addEventListener("touchstart",this.onTouchStart,!1),document.addEventListener("touchmove",this.onTouchMove,!1),document.addEventListener("touchend",this.onTouchEnd,!1))}},{key:"stopListeningToTouch",value:function(){document&&document.removeEventListener&&(document.removeEventListener("touchstart",this.onTouchStart),document.removeEventListener("touchmove",this.onTouchMove),document.removeEventListener("touchend",this.onTouchEnd))}},{key:"renderInput",value:function(){var e=this.props,t=e.isDisabled,n=e.isSearchable,r=e.inputId,l=e.inputValue,s=e.tabIndex,o=e.form,i=this.getComponents().Input,a=this.state.inputIsHidden,c=this.commonProps,u=r||this.getElementId("input"),d={"aria-autocomplete":"list","aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"]};return n?ee().createElement(i,Q({},c,{autoCapitalize:"none",autoComplete:"off",autoCorrect:"off",id:u,innerRef:this.getInputRef,isDisabled:t,isHidden:a,onBlur:this.onInputBlur,onChange:this.handleInputChange,onFocus:this.onInputFocus,spellCheck:"false",tabIndex:s,form:o,type:"text",value:l},d)):ee().createElement(rr,Q({id:u,innerRef:this.getInputRef,onBlur:this.onInputBlur,onChange:Wt,onFocus:this.onInputFocus,readOnly:!0,disabled:t,tabIndex:s,form:o,value:""},d))}},{key:"renderPlaceholderOrValue",value:function(){var e=this,t=this.getComponents(),n=t.MultiValue,r=t.MultiValueContainer,l=t.MultiValueLabel,s=t.MultiValueRemove,o=t.SingleValue,i=t.Placeholder,a=this.commonProps,c=this.props,u=c.controlShouldRenderValue,d=c.isDisabled,p=c.isMulti,m=c.inputValue,f=c.placeholder,h=this.state,g=h.selectValue,v=h.focusedValue,b=h.isFocused;if(!this.hasValue()||!u)return m?null:ee().createElement(i,Q({},a,{key:"placeholder",isDisabled:d,isFocused:b}),f);if(p)return g.map((function(t,o){var i=t===v;return ee().createElement(n,Q({},a,{components:{Container:r,Label:l,Remove:s},isFocused:i,isDisabled:d,key:"".concat(e.getOptionValue(t)).concat(o),index:o,removeProps:{onClick:function(){return e.removeValue(t)},onTouchEnd:function(){return e.removeValue(t)},onMouseDown:function(e){e.preventDefault(),e.stopPropagation()}},data:t}),e.formatOptionLabel(t,"value"))}));if(m)return null;var _=g[0];return ee().createElement(o,Q({},a,{data:_,isDisabled:d}),this.formatOptionLabel(_,"value"))}},{key:"renderClearIndicator",value:function(){var e=this.getComponents().ClearIndicator,t=this.commonProps,n=this.props,r=n.isDisabled,l=n.isLoading,s=this.state.isFocused;if(!this.isClearable()||!e||r||!this.hasValue()||l)return null;var o={onMouseDown:this.onClearIndicatorMouseDown,onTouchEnd:this.onClearIndicatorTouchEnd,"aria-hidden":"true"};return ee().createElement(e,Q({},t,{innerProps:o,isFocused:s}))}},{key:"renderLoadingIndicator",value:function(){var e=this.getComponents().LoadingIndicator,t=this.commonProps,n=this.props,r=n.isDisabled,l=n.isLoading,s=this.state.isFocused;return e&&l?ee().createElement(e,Q({},t,{innerProps:{"aria-hidden":"true"},isDisabled:r,isFocused:s})):null}},{key:"renderIndicatorSeparator",value:function(){var e=this.getComponents(),t=e.DropdownIndicator,n=e.IndicatorSeparator;if(!t||!n)return null;var r=this.commonProps,l=this.props.isDisabled,s=this.state.isFocused;return ee().createElement(n,Q({},r,{isDisabled:l,isFocused:s}))}},{key:"renderDropdownIndicator",value:function(){var e=this.getComponents().DropdownIndicator;if(!e)return null;var t=this.commonProps,n=this.props.isDisabled,r=this.state.isFocused,l={onMouseDown:this.onDropdownIndicatorMouseDown,onTouchEnd:this.onDropdownIndicatorTouchEnd,"aria-hidden":"true"};return ee().createElement(e,Q({},t,{innerProps:l,isDisabled:n,isFocused:r}))}},{key:"renderMenu",value:function(){var e=this,t=this.getComponents(),n=t.Group,r=t.GroupHeading,l=t.Menu,s=t.MenuList,o=t.MenuPortal,i=t.LoadingMessage,a=t.NoOptionsMessage,c=t.Option,u=this.commonProps,d=this.state.focusedOption,p=this.props,m=p.captureMenuScroll,f=p.inputValue,h=p.isLoading,g=p.loadingMessage,v=p.minMenuHeight,b=p.maxMenuHeight,_=p.menuIsOpen,y=p.menuPlacement,w=p.menuPosition,E=p.menuPortalTarget,x=p.menuShouldBlockScroll,C=p.menuShouldScrollIntoView,k=p.noOptionsMessage,S=p.onMenuScrollToTop,O=p.onMenuScrollToBottom;if(!_)return null;var I,T=function(t,n){var r=t.type,l=t.data,s=t.isDisabled,o=t.isSelected,i=t.label,a=t.value,p=d===l,m=s?void 0:function(){return e.onOptionHover(l)},f=s?void 0:function(){return e.selectOption(l)},h="".concat(e.getElementId("option"),"-").concat(n),g={id:h,onClick:f,onMouseMove:m,onMouseOver:m,tabIndex:-1};return ee().createElement(c,Q({},u,{innerProps:g,data:l,isDisabled:s,isSelected:o,key:h,label:i,type:r,value:a,isFocused:p,innerRef:p?e.getFocusedOptionRef:void 0}),e.formatOptionLabel(t.data,"menu"))};if(this.hasOptions())I=this.getCategorizedOptions().map((function(t){if("group"===t.type){var l=t.data,s=t.options,o=t.index,i="".concat(e.getElementId("group"),"-").concat(o),a="".concat(i,"-heading");return ee().createElement(n,Q({},u,{key:i,data:l,options:s,Heading:r,headingProps:{id:a,data:t.data},label:e.formatGroupLabel(t.data)}),t.options.map((function(e){return T(e,"".concat(o,"-").concat(e.index))})))}if("option"===t.type)return T(t,"".concat(t.index))}));else if(h){var P=g({inputValue:f});if(null===P)return null;I=ee().createElement(i,u,P)}else{var M=k({inputValue:f});if(null===M)return null;I=ee().createElement(a,u,M)}var D={minMenuHeight:v,maxMenuHeight:b,menuPlacement:y,menuPosition:w,menuShouldScrollIntoView:C},L=ee().createElement(pn,Q({},u,D),(function(t){var n=t.ref,r=t.placerProps,o=r.placement,i=r.maxHeight;return ee().createElement(l,Q({},u,D,{innerRef:n,innerProps:{onMouseDown:e.onMenuMouseDown,onMouseMove:e.onMenuMouseMove},isLoading:h,placement:o}),ee().createElement(hr,{captureEnabled:m,onTopArrive:S,onBottomArrive:O,lockEnabled:x},(function(t){return ee().createElement(s,Q({},u,{innerRef:function(n){e.getMenuListRef(n),t(n)},isLoading:h,maxHeight:i,focusedOption:d}),I)})))}));return E||"fixed"===w?ee().createElement(o,Q({},u,{appendTo:E,controlElement:this.controlRef,menuPlacement:y,menuPosition:w}),L):L}},{key:"renderFormField",value:function(){var e=this,t=this.props,n=t.delimiter,r=t.isDisabled,l=t.isMulti,s=t.name,o=this.state.selectValue;if(s&&!r){if(l){if(n){var i=o.map((function(t){return e.getOptionValue(t)})).join(n);return ee().createElement("input",{name:s,type:"hidden",value:i})}var a=o.length>0?o.map((function(t,n){return ee().createElement("input",{key:"i-".concat(n),name:s,type:"hidden",value:e.getOptionValue(t)})})):ee().createElement("input",{name:s,type:"hidden"});return ee().createElement("div",null,a)}var c=o[0]?this.getOptionValue(o[0]):"";return ee().createElement("input",{name:s,type:"hidden",value:c})}}},{key:"renderLiveRegion",value:function(){var e=this.commonProps,t=this.state,n=t.ariaSelection,r=t.focusedOption,l=t.focusedValue,s=t.isFocused,o=t.selectValue,i=this.getFocusableOptions();return ee().createElement(Gn,Q({},e,{ariaSelection:n,focusedOption:r,focusedValue:l,isFocused:s,selectValue:o,focusableOptions:i}))}},{key:"render",value:function(){var e=this.getComponents(),t=e.Control,n=e.IndicatorsContainer,r=e.SelectContainer,l=e.ValueContainer,s=this.props,o=s.className,i=s.id,a=s.isDisabled,c=s.menuIsOpen,u=this.state.isFocused,d=this.commonProps=this.getCommonProps();return ee().createElement(r,Q({},d,{className:o,innerProps:{id:i,onKeyDown:this.onKeyDown},isDisabled:a,isFocused:u}),this.renderLiveRegion(),ee().createElement(t,Q({},d,{innerRef:this.getControlRef,innerProps:{onMouseDown:this.onControlMouseDown,onTouchEnd:this.onControlTouchEnd},isDisabled:a,isFocused:u,menuIsOpen:c}),ee().createElement(l,Q({},d,{isDisabled:a}),this.renderPlaceholderOrValue(),this.renderInput()),ee().createElement(n,Q({},d,{isDisabled:a}),this.renderClearIndicator(),this.renderLoadingIndicator(),this.renderIndicatorSeparator(),this.renderDropdownIndicator())),this.renderMenu(),this.renderFormField())}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=t.prevProps,r=t.clearFocusValueOnUpdate,l=t.inputIsHiddenAfterUpdate,s=e.options,o=e.value,i=e.menuIsOpen,a=e.inputValue,c={};if(n&&(o!==n.value||s!==n.options||i!==n.menuIsOpen||a!==n.inputValue)){var u=Xt(o),d=i?function(e,t){return wr(yr(e,t))}(e,u):[],p=r?function(e,t){var n=e.focusedValue,r=e.selectValue.indexOf(n);if(r>-1){if(t.indexOf(n)>-1)return n;if(r-1?n:t[0]}(t,d);c={selectValue:u,focusedOption:m,focusedValue:p,clearFocusValueOnUpdate:!1}}var f=null!=l&&e!==n?{inputIsHidden:l,inputIsHiddenAfterUpdate:void 0}:{};return Ut(Ut(Ut({},c),f),{},{prevProps:e})}}]),n}(J.Component);Pr.defaultProps=br;var Mr,Dr,Lr,Rr={cacheOptions:!1,defaultOptions:!1,filterOption:null,isLoading:!1},Vr=(Mr=Pr,Lr=Dr=function(e){Bt(n,e);var t=Gt(n);function n(){var e;Vt(this,n);for(var r=arguments.length,l=new Array(r),s=0;s1?n-1:0),l=1;l"llms-search")),Y(this,"getSearchPath",(()=>this.props.searchPath)),Y(this,"getSearchUrl",(e=>wp.url.addQueryArgs(this.getSearchPath(),this.getSearchArgs(e)))),Y(this,"formatSearchResultLabel",(e=>e.id)),Y(this,"formatSearchResultValue",(e=>e.id)),Y(this,"onSearch",(0,X.debounce)(300,((e,t)=>{wp.apiFetch({path:this.getSearchUrl(e)}).then((e=>{t(this.formatSearchResults(e))}))})))}getSearchArgs(e){return Object.assign({per_page:20,search:encodeURI(e)},this.props.searchArgs)}formatSearchResults(e){return e.map((e=>({...e,label:this.formatSearchResultLabel(e),value:this.formatSearchResultValue(e)})))}render(){const{label:e,isMulti:t,isDisabled:n,onChange:r,placeholder:l,selected:s}=this.props,o=this.props.className||this.getDefaultClassName();return(0,A.createElement)(q.BaseControl,{id:(0,Fr.uniqueId)(`${o}--`),label:e},(0,A.createElement)(Ar,{ref:e=>this.selectRef=e,className:o,classNamePrefix:"llms-search",isMulti:t,isDisabled:n,value:this.formatSearchResults(s||[]),defaultOptions:s,placeholder:l,loadOptions:this.onSearch,onChange:r,styles:{control:e=>({...e,borderColor:"#8d96a0","&:hover":{...e["&:hover"],borderColor:"#8d96a0"}})},theme:e=>({...e,colors:{...e.colors,primary:"#008dbe",primary25:"#ccf2ff",primary50:"#b3ecff",primary75:"#4dd2ff"},spacing:{...e.spacing,baseUnit:2,controlHeight:28,menuGutter:4}})}))}}class Hr extends Br{constructor(){super(...arguments),Y(this,"getDefaultClassName",(()=>`llms-search--${this.props.postType.replace("llms_","")}`)),Y(this,"getSearchPath",(()=>this.props.searchPath||`/wp/v2/${this.props.postType}`)),Y(this,"formatSearchResultLabel",(e=>(0,$.sprintf)(
+// Translators: %1$s = Post title; %2$ = post id.
+(0,$._x)("%1$s (ID# %2$d)","Search result label","lifterlms"),e.title.rendered,e.id)))}}const zr=(0,U.createHigherOrderComponent)((e=>t=>{if(!z(wp.blocks.getBlockType(t.name),t.name))return(0,A.createElement)(e,t);const{attributes:{llms_visibility:n,llms_visibility_in:r},setAttributes:l}=t;if(!n||"off"===n)return(0,A.createElement)(e,t);let{llms_visibility_posts:s}=t.attributes;void 0===s&&(s="[]"),s=JSON.parse(s);const o=()=>{const e=wp.data.select("core/editor").getCurrentPost(),t=[];return-1!==["course","lesson"].indexOf(e.type)&&t.push({value:"this",label:(0,$.__)("in this course","lifterlms")}),t.push({value:"any_course",label:(0,$.__)("in any course","lifterlms")}),-1!==["llms_membership"].indexOf(e.type)&&t.push({value:"this",label:(0,$.__)("in this membership","lifterlms")}),t.push({value:"any_membership",label:(0,$.__)("in any membership","lifterlms")},{value:"any",label:(0,$.__)("in any course or membership","lifterlms")},{value:"list_all",label:(0,$.__)("in all of the selected courses or memberships","lifterlms")},{value:"list_any",label:(0,$.__)("in any of the selected courses or memberships","lifterlms")}),(0,H.applyFilters)("llms_blocks_block_visibility_in_options",t,e)},i=(e,t)=>{"select-option"===t.action?a(t.option):"remove-value"===t.action&&c(t.removedValue)},a=e=>{s.map((e=>{let{id:t}=e;return t})).includes(e.id)||s.push(e),u()},c=e=>{s.splice(s.map((e=>{let{id:t}=e;return t})).indexOf(e.id),1),u()},u=()=>{const e=s.map((e=>{const{id:t,title:n,type:r}=e,l={id:t,title:n,type:r};return(0,H.applyFilters)("llms_block_visibility_stored_post_props",l,e)}));l({llms_visibility_posts:JSON.stringify(e)})};return(0,A.createElement)(A.Fragment,null,(0,A.createElement)(K,t,(0,A.createElement)(e,t)),(0,A.createElement)(j.InspectorControls,null,(0,A.createElement)(q.PanelBody,{title:(0,$.__)("Enrollment Visibility","lifterlms")},(0,A.createElement)(q.SelectControl,{className:"llms-visibility-select",label:(0,$.__)("Display to","lifterlms"),value:n,onChange:e=>{l({llms_visibility:e,llms_visibility_in:o()[0].value})},options:(0,H.applyFilters)("llms_block_visibility_settings_options",W)}),-1===["all","logged_in","logged_out"].indexOf(n)&&(0,A.createElement)(A.Fragment,null,(0,A.createElement)(q.SelectControl,{className:"llms-visibility-select--in",label:(d=n,"enrolled"===d?(0,$.__)("Enrolled In","lifterlms"):(0,$.__)("Not Enrolled In","lifterlms")),value:r,onChange:e=>l({llms_visibility_in:e}),options:o()}),("list_all"===r||"list_any"===r)&&(0,A.createElement)("div",null,(0,A.createElement)(Hr,{isMulti:!0,postType:"course",label:(0,$.__)("Courses","lifterlms"),placeholder:(0,$.__)("Search by course title…","lifterlms"),onChange:i,selected:s.filter((e=>"course"===e.type))}),(0,A.createElement)(Hr,{isMulti:!0,postType:"llms_membership",label:(0,$.__)("Memberships","lifterlms"),placeholder:(0,$.__)("Search by membership title…","lifterlms"),onChange:i,selected:s.filter((e=>"llms_membership"===e.type))}))))));var d}),"withInspectorControl");(0,H.addFilter)("blocks.registerBlockType","llms/visibility-attributes",(function(e,t){if(!z(e,t))return e;e.attributes||(e.attributes={});const n={llms_visibility:{default:"all",type:"string"},llms_visibility_in:{default:"",type:"string"},llms_visibility_posts:{default:"[]",type:"string"}};return Object.keys(n).forEach((t=>{var r,l,s;e.attributes=(r=e.attributes,s=n[t],r[l=t]&&r[l].default?r[l].type=s.type:r[l]=s,r)})),e})),(0,H.addFilter)("editor.BlockEdit","llms/visibility-controls",zr);const $r=window.wp.domReady;var Ur=n.n($r);const jr=window.wp.data,qr=window.wp.editor,Gr=window.wp.blocks,Wr=e=>{let t=[];return e.forEach((e=>{if("core/block"===e.name){const{getBlocks:n}=(0,jr.select)(j.store);t=t.concat(Wr(n(e.clientId)))}else e.innerBlocks.length?t=t.concat(Wr(e.innerBlocks)):t.push(e)})),t},Kr=()=>{const{getBlocks:e}=(0,jr.select)(j.store);return Wr(e())},Yr=()=>!!(window.llms&&window.llms.post&&window.llms.post.post_type)&&window.llms.post.post_type;const Xr=()=>{!function(){const{_llms_form_location:e}=(0,jr.select)(qr.store).getEditedPostAttribute("meta");["registration","account"].includes(e)&&(0,H.addFilter)("llms_block_supports_visibility","llms/form-block-visibility",(()=>!1))}(),function(){const e={"llms/form-field-user-email":["all","logged_out"],"llms/form-field-user-password":["all","logged_out"],"llms/form-field-user-login":["logged_out"]},t=Object.keys(e);(0,H.addFilter)("llms_block_visibility_settings_options","llms/form-block-visibility-options",(n=>{const{getSelectedBlock:r}=(0,jr.select)(j.store),l=r();return l&&(e=>{let{name:n,innerBlocks:r}=e;return"llms/form-field-confirm-group"===n?(0,Fr.some)(r,(e=>t.includes(e.name))):t.includes(n)})(l)?n.filter((n=>{let{value:r}=n;return(n=>{let{name:r,innerBlocks:l}=n,s=r;if("llms/form-field-confirm-group"===r){const e=l.find((e=>t.includes(e.name)));s=e?e.name:s}return e[s]||[]})(l).includes(r)})):n}))}(),function(){const{_llms_form_is_core:e}=(0,jr.select)(qr.store).getEditedPostAttribute("meta"),t=[".edit-post-layout .components-panel__body.edit-post-post-status"];"yes"===e&&t.push(".edit-post-layout button.editor-post-switch-to-draft"),(0,jr.subscribe)((()=>{setTimeout((()=>{document.querySelectorAll(t.join(",")).forEach((e=>{e.style.display="none"}))}),1)}))}(),function(){const e="llms/form-field-user-email",t="llms-forms-no-email-error-notice",{getNotices:n}=(0,jr.select)("core/notices"),{createErrorNotice:r,removeNotice:l}=(0,jr.dispatch)("core/notices");(0,jr.subscribe)((0,Fr.debounce)((()=>{const s=(0,jr.select)("core/editor").getCurrentPost(),o=Kr().map((e=>e.name));if(!s.content.includes("\x3c!-- wp:")||!o.length)return;const i=n().map((e=>e.id)).includes(t),a=document.querySelector("button.editor-post-publish-button");o.includes(e)||i?o.includes(e)&&i&&(l(t),a.disabled=!1):(r((0,$.__)("User Email is a required field.","lifterlms"),{id:t,isDismissible:!1,actions:[{label:(0,$.__)("Restore user email field?","lifterlms"),onClick:()=>{((0,jr.dispatch)("core/block-editor")||(0,jr.dispatch)("core/editor")).insertBlock((0,Gr.createBlock)(e),0)}}]}),a.disabled=!0)}),500))}()};function Qr(e){return e.reduce(((e,t)=>({...e,[t.name]:t})),{})}function Zr(e){return Object.values(e)}const Jr=Qr(window.llms.userInfoFields.map((e=>({...e,isPersisted:!0}))));function el(e,t){return{...e,[t.name]:{...t}}}function tl(e,t){return e=Zr(e).filter((e=>{let{name:n}=e;return n!==t})),Qr(e)}function nl(e,t,n){return{...e,[t]:{...e[t],...n}}}function rl(e,t,n){const r={...e[t]};return el(e=tl(e,t),{...r,name:n})}function ll(){return Jr}function sl(e){return{type:"ADD_FIELD",field:e}}function ol(e){return{type:"DELETE_FIELD",name:e}}function il(e,t){return{type:"EDIT_FIELD",name:e,edits:t}}function al(e,t){return{type:"EDIT_FIELD",name:e,edits:{clientId:t}}}function cl(e){return{type:"EDIT_FIELD",name:e,edits:{clientId:null}}}function ul(e){return{type:"RECEIVE_FIELDS",fields:e}}function dl(e,t){return{type:"RENAME_FIELD",oldName:e,newName:t}}function pl(){return{type:"RESET_FIELDS"}}function ml(e,t){let{fields:n}=e;return!!n[t]}function fl(e,t){let{fields:n}=e;return n[t]||null}function hl(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"global";const l="global"===r?e.fields:vl(e);return Zr(l).find((e=>e[n]===t))||null}function gl(e){let{fields:t}=e;return t}function vl(e){let{fields:t}=e;return Qr(Zr(t).filter((e=>{let{clientId:t}=e;return t})))}function bl(e,t,n){const r=fl(e,t);return!(!r||!r.clientId||r.clientId===n)}function _l(e,t){return!!hl(e,t,"clientId","local")}const yl={reducer:(0,jr.combineReducers)({fields:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Jr,t=arguments.length>1?arguments[1]:void 0;const{type:n}=t;switch(n){case"ADD_FIELD":return el(e,t.field);case"DELETE_FIELD":return tl(e,t.name);case"EDIT_FIELD":return nl(e,t.name,t.edits);case"RECEIVE_FIELDS":return Qr(t.fields);case"RENAME_FIELD":return rl(e,t.oldName,t.newName);case"RESET_FIELDS":return ll();default:return e}}}),actions:{...e},selectors:{...t}},wl=(0,jr.createReduxStore)("llms/user-info-fields",yl);(0,jr.register)(wl);let El=[];const xl=(e,t)=>(0,Fr.differenceBy)(e,t,"clientId").filter((e=>{let{name:t}=e;return 0===t.indexOf("llms/form-")}));function Cl(){const e=Kr(),t=xl(El,e),n=xl(e,El);El=e,(e=>{e.forEach((e=>{let{attributes:t}=e;const{name:n}=t,{getField:r}=(0,jr.select)(wl),{deleteField:l,unloadField:s}=(0,jr.dispatch)(wl),o=r(n);o&&(o.isPersisted?s(n):l(n))}))})(t),setTimeout((()=>{(e=>{const{fieldExists:t}=(0,jr.select)(wl),{loadField:n,addField:r}=(0,jr.dispatch)(wl);e.forEach((e=>{let{attributes:l,clientId:s}=e;const{name:o}=l;t(o)?n(o,s):r({name:o,clientId:s,id:l.id,label:l.label,data_store:l.data_store,data_store_key:l.data_store_key})}))})(n)}),100)}function kl(){(0,jr.subscribe)(Cl)}const Sl=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(F.Path,{d:"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416V96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4L224 214.3V256v41.7L52.5 440.6zM256 352V256 128 96c0-12.4 7.2-23.7 18.4-29s24.5-3.6 34.1 4.4l192 160c7.3 6.1 11.5 15.1 11.5 24.6s-4.2 18.5-11.5 24.6l-192 160c-9.5 7.9-22.8 9.7-34.1 4.4s-18.4-16.6-18.4-29V352z"})),Ol="llms/course-continue-button",Il=["course"],Tl={title:(0,$.__)("Course Continue Button","lifterlms"),icon:Sl,category:"llms-blocks",keywords:[(0,$.__)("LifterLMS","lifterlms")],edit:e=>(0,A.createElement)("div",{className:e.className},(0,A.createElement)("p",{style:{textAlign:"center"}},(0,A.createElement)(q.Button,{isPrimary:!0,isLarge:!0},(0,$.__)("Continue","lifterlms")))),save:e=>(0,A.createElement)("div",{className:e.className,style:{textAlign:"center"}},"[lifterlms_course_continue_button]")};class Pl extends A.Component{render(){const{attributes:{length:e,show_cats:t,show_difficulty:n,show_length:r,show_tags:l,show_tracks:s,title_size:o},setAttributes:i}=this.props;return(0,A.createElement)(j.InspectorControls,null,(0,A.createElement)(q.PanelBody,{title:(0,$.__)("Course Information Options","lifterlms")},(0,A.createElement)(q.SelectControl,{label:(0,$.__)("Title Headline Size","lifterlms"),value:o,onChange:e=>i({title_size:e}),help:(0,$.__)("Headline size for the information title element.","lifterlms"),options:[{value:"h1",label:"h1"},{value:"h2",label:"h2"},{value:"h3",label:"h3"},{value:"h4",label:"h4"},{value:"h5",label:"h5"},{value:"h6",label:"h6"}]}),(0,A.createElement)(q.TextControl,{label:(0,$.__)("Estimated Completion Time","lifterlms"),value:e,onChange:e=>i({length:e}),help:(0,$.__)("How many hours, days, weeks, etc… should a student expect to spend in order to complete this course.","lifterlms")}),(0,A.createElement)(q.ToggleControl,{label:(0,$.__)("Display Estimated Time","lifterlms"),checked:!!r,onChange:()=>i({show_length:!r}),help:r?(0,$.__)("Displaying estimated time","lifterlms"):(0,$.__)("Hiding estimated time","lifterlms")}),(0,A.createElement)(q.ToggleControl,{label:(0,$.__)("Display Difficulty","lifterlms"),checked:!!n,onChange:()=>i({show_difficulty:!n}),help:n?(0,$.__)("Displaying difficulty","lifterlms"):(0,$.__)("Hiding difficulty","lifterlms")}),(0,A.createElement)(q.ToggleControl,{label:(0,$.__)("Display Tracks","lifterlms"),checked:!!s,onChange:()=>i({show_tracks:!s}),help:s?(0,$.__)("Displaying tracks list","lifterlms"):(0,$.__)("Hiding tracks list","lifterlms")}),(0,A.createElement)(q.ToggleControl,{label:(0,$.__)("Display Categories","lifterlms"),checked:!!t,onChange:()=>i({show_cats:!t}),help:t?(0,$.__)("Displaying categories list","lifterlms"):(0,$.__)("Hiding categories list","lifterlms")}),(0,A.createElement)(q.ToggleControl,{label:(0,$.__)("Display Tags","lifterlms"),checked:!!l,onChange:()=>i({show_tags:!l}),help:l?(0,$.__)("Displaying tags list","lifterlms"):(0,$.__)("Hiding tags list","lifterlms")})))}}class Ml extends A.Component{constructor(){super(...arguments),Y(this,"state",{terms:!1})}getTerms(){const{currentPost:e,taxonomy:t}=this.props,n=e._links["wp:term"].filter((e=>e.taxonomy===t))[0].href;wp.apiFetch({url:wp.url.addQueryArgs(n,{per_page:-1})}).then((e=>{this.setState({terms:e})}))}componentDidUpdate(e){e.currentPost[this.props.taxonomy]!==this.props.currentPost[this.props.taxonomy]&&this.getTerms()}componentWillMount(){this.getTerms()}renderTerms(e){const t=e.length-1;return(0,A.createElement)(A.Fragment,null,e?e.map(((e,n)=>this.renderTerm(e,t===n))):(0,$.__)("Loading…","lifterlms"))}renderTerm(e,t){return(0,A.createElement)(A.Fragment,null,(0,A.createElement)("a",{href:e.link,target:"_blank",rel:"noreferrer"},e.name),t?"":", ")}render(){const{terms:e}=this.state,{taxonomyName:t}=this.props;return Array.isArray(e)&&!e.length?"":(0,A.createElement)("li",null,(0,A.createElement)("strong",null,t),": ",this.renderTerms(e))}}const Dl=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(F.Path,{d:"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm64 0v64h64V96H64zm384 0H192v64H448V96zM64 224v64h64V224H64zm384 0H192v64H448V224zM64 352v64h64V352H64zm384 0H192v64H448V352z"})),Ll="llms/course-information",Rl=["course"],Vl={title:(0,$.__)("Course Information","lifterlms"),icon:Dl,category:"llms-blocks",keywords:[(0,$.__)("LifterLMS","lifterlms")],attributes:{title:{type:"string",default:(0,$.__)("Course Information","lifterlms")},title_size:{type:"string",default:"h3"},length:{type:"string",default:"",source:"meta",meta:"_llms_length"},show_cats:{type:"boolean",default:!0},show_difficulty:{type:"boolean",default:!0},show_length:{type:"boolean",default:!0},show_tags:{type:"boolean",default:!0},show_tracks:{type:"boolean",default:!0}},supports:{multiple:!1},edit:e=>{const{attributes:t,setAttributes:n}=e,{length:r,show_cats:l,show_difficulty:s,show_length:o,show_tags:i,show_tracks:a,title:c,title_size:u}=t,d=wp.data.select("core/editor").getCurrentPost(),p=o||s||a||l||i;return(0,A.createElement)(A.Fragment,null,(0,A.createElement)(Pl,{attributes:t,setAttributes:n}),(0,A.createElement)("div",{className:e.className},(0,A.createElement)(j.RichText,{tagName:u,value:c,onChange:e=>n({title:e})}),p&&(0,A.createElement)(A.Fragment,null,(0,A.createElement)("ul",null,o&&r&&(0,A.createElement)("li",null,(0,A.createElement)("strong",null,(0,$.__)("Estimated Time","lifterlms")),": ",r),s&&(0,A.createElement)(Ml,{currentPost:d,taxonomy:"course_difficulty",taxonomyName:(0,$.__)("Difficulty","lifterlms")}),a&&(0,A.createElement)(Ml,{currentPost:d,taxonomy:"course_track",taxonomyName:(0,$.__)("Tracks","lifterlms")}),l&&(0,A.createElement)(Ml,{currentPost:d,taxonomy:"course_cat",taxonomyName:(0,$.__)("Categories","lifterlms")}),i&&(0,A.createElement)(Ml,{currentPost:d,taxonomy:"course_tag",taxonomyName:(0,$.__)("Tags","lifterlms")})))))},save:()=>null},Nl=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(F.Path,{d:"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V400c0 44.2 35.8 80 80 80H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H80c-8.8 0-16-7.2-16-16V64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L240 221.3l57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z"})),Al=["course"],Fl="llms/course-progress",Bl={title:(0,$.__)("Course Progress","lifterlms"),icon:Nl,category:"llms-blocks",keywords:[(0,$.__)("LifterLMS","lifterlms")],supports:{llms_visibility:!1},edit:e=>(0,A.createElement)("div",{className:e.className},(0,A.createElement)("div",{className:"progress-bar",value:"50",max:"100"},(0,A.createElement)("div",{className:"progress--fill"})),(0,A.createElement)("span",null,"50%")),save:()=>null,deprecated:[{save:e=>(0,A.createElement)("div",{className:e.className},"[lifterlms_course_progress]")}]},Hl=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 640 512"},(0,A.createElement)(F.Path,{d:"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V192h56 64 16c17.7 0 32-14.3 32-32s-14.3-32-32-32H384V64H576V256H384V224H320v48c0 26.5 21.5 48 48 48H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H368c-26.5 0-48 21.5-48 48v80H243.1 177.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9V480c0 17.7 14.3 32 32 32s32-14.3 32-32z"})),zl=window.wp.serverSideRender;var $l=n.n(zl);class Ul extends A.Component{constructor(){super(...arguments),Y(this,"render",(()=>{const{name:e,attributes:t,post_id:n}=this.props;return(0,A.createElement)(A.Fragment,null,(0,A.createElement)($l(),{block:e,attributes:t,urlQueryArgs:{post_id:n}}))})),this.state={instructors:this.props.instructors}}}const jl=(0,U.compose)([(0,jr.withSelect)((e=>{const{getEditedPostAttribute:t,getCurrentPostId:n}=e("core/editor");return{post_id:n(),instructors:t("instructors")}}))])(Ul),ql="llms/instructors",Gl=["course","llms_membership"],Wl={title:(0,$.__)("Instructors","lifterlms"),icon:Hl,category:"llms-blocks",keywords:[(0,$.__)("LifterLMS","lifterlms"),(0,$.__)("Course","lifterlms"),(0,$.__)("Memebership","lifterlms")],attributes:{post_id:{type:"int",default:0}},edit:jl,save:()=>null},Kl=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 640 512"},(0,A.createElement)(F.Path,{d:"M32 64c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32V96C0 78.3 14.3 64 32 64zm214.6 73.4c12.5 12.5 12.5 32.8 0 45.3L205.3 224l229.5 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 288l-229.5 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0zM640 96V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V96c0-17.7 14.3-32 32-32s32 14.3 32 32z"})),Yl="llms/lesson-navigation",Xl=["lesson"],Ql={title:(0,$.__)("Lesson Navigation","lifterlms"),icon:Kl,category:"llms-blocks",keywords:[(0,$.__)("LifterLMS","lifterlms")],edit(e){const t=wp.data.select("core/editor").getCurrentPost(),{attributes:n}=e;return(0,A.createElement)(A.Fragment,null,(0,A.createElement)($l(),{block:Yl,attributes:n,urlQueryArgs:{post_id:t.id}}))},save:()=>null},Zl=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(F.Path,{d:"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"})),Jl="llms/lesson-progression",es=["lesson"],ts={title:(0,$.__)("Lesson Progression (Mark Complete)","lifterlms"),icon:Zl,category:"llms-blocks",keywords:[(0,$.__)("LifterLMS","lifterlms")],supports:{llms_visibility:!1},edit(){const e=1*(0,jr.select)("core/editor").getCurrentPost().meta._llms_quiz;let t=!e;return t=(0,H.applyFilters)("llms.lessonProgressBlock.showMainBtn",t),(0,A.createElement)(A.Fragment,null,(0,A.createElement)("div",{className:"llms-lesson-button-wrapper"},(0,A.createElement)(A.Fragment,null,!!e&&(0,A.createElement)(q.Button,{className:"llms-prog-btn--quiz llms-button-action auto button"},(0,$.__)("Take Quiz","lifterlms")),t&&(0,A.createElement)(q.Button,{className:"llms-prog-btn--complete llms-field-button llms-button-primary auto button"},(0,$.__)("Mark Complete","lifterlms")))))},save:()=>null},ns=window.jQuery;var rs=n.n(ns);const ls=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},(0,A.createElement)(F.Path,{d:"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zM272 192H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H272c-8.8 0-16-7.2-16-16s7.2-16 16-16zM256 304c0-8.8 7.2-16 16-16H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H272c-8.8 0-16-7.2-16-16zM164 152v13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9V360c0 11-9 20-20 20s-20-9-20-20V345.4c-10.3-2.2-20-5.5-28.2-8.4l0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5V152c0-11 9-20 20-20s20 9 20 20z"}));let ss=null;(0,jr.subscribe)((()=>{const{getCurrentPostLastRevisionId:e,isCurrentPostPublished:t,isSavingPost:n,isPublishingPost:r}=(0,jr.select)("core/editor");if(!t())return;const l=rs()("#llms-save-access-plans");l.length&&ss!==e()&&"disabled"!==l.attr("disabled")&&(n()||r())&&(ss=e(),l.trigger("click"))})),rs()(document).on("llms-access-plan-validation-errors",(function(){(0,jr.dispatch)("core/notices").createErrorNotice((0,$.__)("Validation errors were encountered while attempting to save your access plans.","lifterlms"),{id:"llms-access-plan-error-notice"})}));const os="llms/pricing-table",is=["course","llms_membership"],as={title:(0,$.__)("LifterLMS Pricing Table","lifterlms"),icon:ls,category:"llms-blocks",keywords:[(0,$.__)("LifterLMS","lifterlms")],attributes:{post_id:{type:"int",default:0}},edit:e=>{const{attributes:t}=e,[n,r]=(0,A.useState)(0);return rs()(document).one("llms-access-plans-updated",(function(){r((e=>e+1))})),(0,A.createElement)(A.Fragment,null,(0,A.createElement)($l(),{block:os,attributes:t,urlQueryArgs:{post_id:(0,jr.select)("core/editor").getCurrentPostId()},key:n}))},save:()=>null},cs="llms/php-template",us={title:(0,$.__)("LifterLMS PHP Template","lifterlms"),category:"llms-blocks",keywords:[(0,$.__)("LifterLMS","lifterlms")],attributes:{template:{type:"string",default:""},title:{type:"string",default:""}},supports:{html:!1,multiple:!1,reusable:!1,inserter:!1},edit:function(e){const{attributes:t}=e,{template:n}=t,r=(0,j.useBlockProps)();let{title:l}=t;if(!l){const e=window.llmsBlockTemplatesL10n;l=e&&e[n]?e[n]:n}return(0,A.createElement)("div",r,(0,A.createElement)(q.Placeholder,{label:l,className:"wp-block-liftelrms-php-template__placeholder"},(0,A.createElement)("div",{className:"wp-block-liftelrms-php-template__placeholder-copy"},(0,A.createElement)("p",{className:"wp-block-liftelrms-php-template__placeholder-warning"},(0,A.createElement)("strong",null,(0,$.__)("Attention: Do not remove this block!","lifterlms"))," ",(0,$.__)("Removal will cause unintended effects on your LMS site.","lifterlms")),(0,A.createElement)("p",null,(0,$.sprintf)(/* translators: %s is the template title */
+(0,$.__)("This is an editor placeholder for the %s. On your site this will be replaced by the relevant template. You can move this placeholder around and add further blocks around it to extend the template.","lifterlms"),l)))))},save:()=>null};function ds(e){if(!e)return[e];if(e.innerBlocks.length)return ps(e.innerBlocks);if("core/block"===e.name){const{blocks:t}=(0,jr.select)("core").getEditedEntityRecord("postType","wp_block",e.attributes.ref);return ps(t)}return-1===e.name.indexOf("llms/form-field")?[]:[e]}function ps(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=[];return(0,Fr.forEach)(e,(e=>{const n=ds(e);n.length&&(t=t.concat(n))})),t}const ms=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"global";const{getFieldBy:r}=(0,jr.select)(wl);return!r(t,e,n)};if("wp_block"===Yr()){let e="";(0,jr.subscribe)((()=>{const t=(0,jr.select)("core/editor").getEditedPostContent();if(void 0===t||t===e)return;e=t;const n=t.includes("\x3c!-- wp:llms/form-field")?"yes":"no";(0,jr.dispatch)("core/editor").editPost({is_llms_field:n})}))}(0,H.addFilter)("blocks.getSaveElement","llms/core-block/save",((e,t,n)=>{if("core/block"!==t.name)return e;const{ref:r}=n;if((0,jr.select)("core").hasFinishedResolution("getEntityRecord",["postType","wp_block",r])){const e=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Array.isArray(e)||(e=[e]),ps(e)}(function(e){let t=!1;return(0,Fr.some)((0,jr.select)("core/block-editor").getBlocks(),(n=>{const r=n.attributes.ref===e;return r&&(t=n),r})),t}(r));e.length&&setTimeout((()=>{(0,jr.dispatch)("core").editEntityRecord("postType","wp_block",n.ref,{is_llms_field:e.length>0?"yes":"no"})}))}return e}));const fs=(0,U.withInstanceId)((function(e){let{options:t,fieldType:n,instanceId:r}=e;return(0,A.createElement)(A.Fragment,null,t.map(((e,t)=>(0,A.createElement)("label",{htmlFor:`llms-${n}-${r}-${t}`,key:t,style:{display:"block",pointerEvents:"none"}},(0,A.createElement)("input",{id:`llms-${n}-${r}-${t}`,type:n,checked:"yes"===e.default,readOnly:!0})," ",e.text))))}));class hs extends A.Component{getFieldType(){const{attributes:{field:e}}=this.props;return-1!==["email","text","number","url","tel"].indexOf(e)?"input":e}render(){const{attributes:e,setAttributes:t,block:n,clientId:r}=this.props,{description:l,label:s,options:o,placeholder:i,required:a}=e,c=n.supports.llms_edit_fill,u=[];a&&u.push("llms-is-required");const d=this.getFieldType();return(0,A.createElement)(A.Fragment,null,(0,A.createElement)("div",{className:"llms-field"},"html"!==d&&(0,A.createElement)(j.RichText,{tagName:"label",className:u.join(" "),value:s,onChange:e=>{t({label:e})},allowedFormats:["bold","italic"],"aria-label":s?(0,$.__)("Field label"):(0,$.__)("Empty field label; start writing to add a label"),placeholder:(0,$.__)("Enter a label")}),"input"===d&&(0,A.createElement)("input",{onChange:e=>t({placeholder:e.target.value}),value:i,placeholder:(0,$.__)("Add optional placeholder text","lifterlms")}),"password"===d&&(0,A.createElement)("input",{disabled:"disabed",type:"password",value:"F4K3p4$50Rd"}),"textarea"===d&&(0,A.createElement)("textarea",{rows:this.props.attributes.html_attrs.rows,onChange:e=>t({placeholder:e.target.value}),value:i,placeholder:(0,$.__)("Add optional placeholder text","lifterlms")}),"select"===d&&(0,A.createElement)("select",null,(0,A.createElement)("option",null,(()=>{if(i)return i;if(!o.length)return"";let e=o[0].text;const t=o.filter((e=>"yes"===e.default));return t.length&&(e=t[0].text),e})())),(0,A.createElement)(j.RichText,{tagName:"span",value:l,onChange:e=>{t({description:e})},allowedFormats:["bold","strikethrough","link"],"aria-label":s?(0,$.__)("Optional field description"):(0,$.__)("Empty field description; start writing to add a description"),placeholder:(0,$.__)("Add optional description text"),style:{color:"#808285",fontStyle:"italic"}}),("radio"===d||"checkbox"===d)&&(0,A.createElement)(fs,{options:o,fieldType:d})),c.after&&(0,A.createElement)(q.Slot,{name:`llmsEditFill.after.${c.after}.${r}`}))}}var gs,vs=new Uint8Array(16);function bs(){if(!gs&&!(gs="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return gs(vs)}const _s=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ys=function(e){return"string"==typeof e&&_s.test(e)};for(var ws=[],Es=0;Es<256;++Es)ws.push((Es+256).toString(16).substr(1));const xs=function(e,t,n){var r=(e=e||{}).random||(e.rng||bs)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var l=0;l<16;++l)t[n+l]=r[l];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(ws[e[t+0]]+ws[e[t+1]]+ws[e[t+2]]+ws[e[t+3]]+"-"+ws[e[t+4]]+ws[e[t+5]]+"-"+ws[e[t+6]]+ws[e[t+7]]+"-"+ws[e[t+8]]+ws[e[t+9]]+"-"+ws[e[t+10]]+ws[e[t+11]]+ws[e[t+12]]+ws[e[t+13]]+ws[e[t+14]]+ws[e[t+15]]).toLowerCase();if(!ys(n))throw TypeError("Stringified UUID is invalid");return n}(r)};class Cs extends Br{constructor(){super(...arguments),Y(this,"getDefaultClassName",(()=>"llms-search--user")),Y(this,"getSearchPath",(()=>this.props.searchPath||"/wp/v2/users")),Y(this,"formatSearchResultLabel",(e=>(0,$.sprintf)(
+// Translators: %1$s = User's name; %2$s = User's id.
+(0,$._x)("%1$s (ID# %2$d)","User search result label","lifterlms"),e.name,e.id)))}getSearchArgs(e){const t=super.getSearchArgs(e),{roles:n}=this.props;return n&&(t.roles=Array.isArray(n)?n.join(","):n),t}}const ks="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,Ss=ks?J.useLayoutEffect:J.useEffect;function Os(e,t){const n=(0,J.useRef)();return(0,J.useMemo)((()=>{const t=e(n.current);return n.current=t,t}),[...t])}function Is(){const e=(0,J.useRef)(null),t=(0,J.useCallback)((t=>{e.current=t}),[]);return[e,t]}let Ts={};function Ps(e,t){return(0,J.useMemo)((()=>{if(t)return t;const n=null==Ts[e]?0:Ts[e]+1;return Ts[e]=n,`${e}-${n}`}),[e,t])}function Ms(e){return(t,...n)=>n.reduce(((t,n)=>{const r=Object.entries(n);for(const[n,l]of r){const r=t[n];null!=r&&(t[n]=r+e*l)}return t}),{...t})}const Ds=Ms(1),Ls=Ms(-1),Rs=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return`translate3d(${t?Math.round(t):0}px, ${n?Math.round(n):0}px, 0)`}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return`scaleX(${t}) scaleY(${n})`}},Transform:{toString(e){if(e)return[Rs.Translate.toString(e),Rs.Scale.toString(e)].join(" ")}},Transition:{toString:({property:e,duration:t,easing:n})=>`${e} ${t}ms ${n}`}}),Vs={display:"none"};function Ns(e){let{id:t,value:n}=e;return ee().createElement("div",{id:t,style:Vs},n)}const As={position:"fixed",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};function Fs(e){let{id:t,announcement:n}=e;return ee().createElement("div",{id:t,style:As,role:"status","aria-live":"assertive","aria-atomic":!0},n)}const Bs={draggable:"\n To pick up a draggable item, press the space bar.\n While dragging, use the arrow keys to move the item.\n Press space again to drop the item in its new position, or press escape to cancel.\n "},Hs={onDragStart:e=>`Picked up draggable item ${e}.`,onDragOver:(e,t)=>t?`Draggable item ${e} was moved over droppable area ${t}.`:`Draggable item ${e} is no longer over a droppable area.`,onDragEnd:(e,t)=>t?`Draggable item ${e} was dropped over droppable area ${t}`:`Draggable item ${e} was dropped.`,onDragCancel:e=>`Dragging was cancelled. Draggable item ${e} was dropped.`};var zs;!function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"}(zs||(zs={}));const $s=e=>Us(e,((e,t)=>e{const n=Xs(t,t.left,t.top),r=e.map((([e,t])=>Ks(Xs(t),n))),l=$s(r);return e[l]?e[l][0]:null};function Zs(e){return function(t,...n){return n.reduce(((t,n)=>({...t,top:t.top+e*n.y,bottom:t.bottom+e*n.y,left:t.left+e*n.x,right:t.right+e*n.x,offsetLeft:t.offsetLeft+e*n.x,offsetTop:t.offsetTop+e*n.y})),{...t})}}const Js=Zs(1);function eo(e){const t=[];return e?function e(n){return n?n instanceof Document&&null!=n.scrollingElement?(t.push(n.scrollingElement),t):!(n instanceof HTMLElement)||n instanceof SVGElement?t:(function(e){const t=window.getComputedStyle(e),n=/(auto|scroll|overlay)/;return null!=["overflow","overflowX","overflowY"].find((e=>{const r=t[e];return"string"==typeof r&&n.test(r)}))}(n)&&t.push(n),e(n.parentNode)):t}(e.parentNode):t}function to(e){return ks?e===document.scrollingElement||e instanceof Document?window:e instanceof HTMLElement?e:null:null}function no(e){return e instanceof Window?{x:e.scrollX,y:e.scrollY}:{x:e.scrollLeft,y:e.scrollTop}}var ro;function lo(e){const t={x:0,y:0},n={x:e.scrollWidth-e.clientWidth,y:e.scrollHeight-e.clientHeight};return{isTop:e.scrollTop<=t.y,isLeft:e.scrollLeft<=t.x,isBottom:e.scrollTop>=n.y,isRight:e.scrollLeft>=n.x,maxScroll:n,minScroll:t}}!function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"}(ro||(ro={}));const so={x:.2,y:.2};function oo(e,t,{top:n,left:r,right:l,bottom:s},o=10,i=so){const{clientHeight:a,clientWidth:c}=e,u=(d=e,ks&&d&&d===document.scrollingElement?{top:0,left:0,right:c,bottom:a,width:c,height:a}:t);var d;const{isTop:p,isBottom:m,isLeft:f,isRight:h}=lo(e),g={x:0,y:0},v={x:0,y:0},b=u.height*i.y,_=u.width*i.x;return!p&&n<=u.top+b?(g.y=ro.Backward,v.y=o*Math.abs((u.top+b-n)/b)):!m&&s>=u.bottom-b&&(g.y=ro.Forward,v.y=o*Math.abs((u.bottom-b-s)/b)),!h&&l>=u.right-_?(g.x=ro.Forward,v.x=o*Math.abs((u.right-_-l)/_)):!f&&r<=u.left+_&&(g.x=ro.Backward,v.x=o*Math.abs((u.left+_-r)/_)),{direction:g,speed:v}}function io(e){if(e===document.scrollingElement){const{innerWidth:e,innerHeight:t}=window;return{top:0,left:0,right:e,bottom:t,width:e,height:t}}const{top:t,left:n,right:r,bottom:l}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:l,width:e.clientWidth,height:e.clientHeight}}function ao(e){return e.reduce(((e,t)=>Ds(e,no(t))),Ws)}function co(e,t,n=Ws){if(!(e&&e instanceof HTMLElement))return n;const r={x:n.x+e.offsetLeft,y:n.y+e.offsetTop};return e.offsetParent===t?r:co(e.offsetParent,t,r)}function uo(e){const{offsetWidth:t,offsetHeight:n}=e,{x:r,y:l}=co(e,null);return{width:t,height:n,offsetTop:l,offsetLeft:r}}function po(e){if(e instanceof Window){const e=window.innerWidth,t=window.innerHeight;return{top:0,left:0,right:e,bottom:t,width:e,height:t,offsetTop:0,offsetLeft:0}}const{offsetTop:t,offsetLeft:n}=uo(e),{width:r,height:l,top:s,bottom:o,left:i,right:a}=e.getBoundingClientRect();return{width:r,height:l,top:s,bottom:o,right:a,left:i,offsetTop:t,offsetLeft:n}}function mo(e){const{width:t,height:n,offsetTop:r,offsetLeft:l}=uo(e),s=ao(eo(e)),o=r-s.y,i=l-s.x;return{width:t,height:n,top:o,bottom:o+n,right:i+t,left:i,offsetTop:r,offsetLeft:l}}function fo(e){return"top"in e}function ho(e,t=e.offsetLeft,n=e.offsetTop){return[{x:t,y:n},{x:t+e.width,y:n},{x:t,y:n+e.height},{x:t+e.width,y:n+e.height}]}const go=(e,t)=>{const n=e.map((([e,n])=>function(e,t){const n=Math.max(t.top,e.offsetTop),r=Math.max(t.left,e.offsetLeft),l=Math.min(t.left+t.width,e.offsetLeft+e.width),s=Math.min(t.top+t.height,e.offsetTop+e.height),o=l-r,i=s-n;if(re>t));return n[r]<=0?null:e[r]?e[r][0]:null};function vo(e){return e instanceof HTMLElement?e.ownerDocument:document}function bo(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:{},translate:{x:0,y:0}},droppable:{containers:{}}}}function _o(e,t){switch(t.type){case zs.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case zs.DragMove:return e.draggable.active?{...e,draggable:{...e.draggable,translate:{x:t.coordinates.x-e.draggable.initialCoordinates.x,y:t.coordinates.y-e.draggable.initialCoordinates.y}}}:e;case zs.DragEnd:case zs.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case zs.RegisterDroppable:{const{element:n}=t,{id:r}=n;return{...e,droppable:{...e.droppable,containers:{...e.droppable.containers,[r]:n}}}}case zs.SetDroppableDisabled:{const{id:n,disabled:r}=t,l=e.droppable.containers[n];return l?{...e,droppable:{...e.droppable,containers:{...e.droppable.containers,[n]:{...l,disabled:r}}}}:e}case zs.UnregisterDroppable:{const{id:n}=t;return{...e,droppable:{...e.droppable,containers:qs(n,e.droppable.containers)}}}default:return e}}const yo=(0,J.createContext)({type:null,event:null});function wo({announcements:e=Hs,hiddenTextDescribedById:t,screenReaderInstructions:n}){const{announce:r,announcement:l}=function(){const[e,t]=(0,J.useState)("");return{announce:(0,J.useCallback)((e=>{null!=e&&t(e)}),[]),announcement:e}}(),s=Ps("DndLiveRegion"),[o,i]=(0,J.useState)(!1);return(0,J.useEffect)((()=>{i(!0)}),[]),function({onDragStart:e,onDragMove:t,onDragOver:n,onDragEnd:r,onDragCancel:l}){const s=(0,J.useContext)(yo),o=(0,J.useRef)(s);(0,J.useEffect)((()=>{if(s!==o.current){const{type:i,event:a}=s;switch(i){case zs.DragStart:null==e||e(a);break;case zs.DragMove:null==t||t(a);break;case zs.DragOver:null==n||n(a);break;case zs.DragCancel:null==l||l(a);break;case zs.DragEnd:null==r||r(a)}o.current=s}}),[s,e,t,n,r,l])}((0,J.useMemo)((()=>({onDragStart({active:t}){r(e.onDragStart(t.id))},onDragMove({active:t,over:n}){e.onDragMove&&r(e.onDragMove(t.id,null==n?void 0:n.id))},onDragOver({active:t,over:n}){r(e.onDragOver(t.id,null==n?void 0:n.id))},onDragEnd({active:t,over:n}){r(e.onDragEnd(t.id,null==n?void 0:n.id))},onDragCancel({active:t}){r(e.onDragCancel(t.id))}})),[r,e])),o?(0,Ht.createPortal)(ee().createElement(ee().Fragment,null,ee().createElement(Ns,{id:t,value:n.draggable}),ee().createElement(Fs,{id:s,announcement:l})),document.body):null}var Eo,xo,Co,ko;function So(e){const t=(0,J.useRef)(e);return Ss((()=>{t.current!==e&&(t.current=e)}),[e]),t}!function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"}(Eo||(Eo={})),function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"}(xo||(xo={})),function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"}(Co||(Co={})),function(e){e.Optimized="optimized"}(ko||(ko={}));const Oo=new Map;const Io={strategy:Co.WhileDragging,frequency:ko.Optimized},To=[],Po=Lo(po),Mo=Ro(po),Do=Lo(mo);function Lo(e){return function(t,n){const r=(0,J.useRef)(t);return Os((l=>t?n||!l&&t||t!==r.current?t instanceof HTMLElement&&null==t.parentNode?null:e(t):null!=l?l:null:null),[t,n])}}function Ro(e){const t=[];return function(n,r){const l=(0,J.useRef)(n);return Os((s=>n.length?r||!s&&n.length||n!==l.current?n.map((t=>e(t))):null!=s?s:t:t),[n,r])}}function Vo(e,t){return(0,J.useMemo)((()=>({sensor:e,options:null!=t?t:{}})),[e,t])}class No{constructor(e){this.target=e,this.listeners=[]}add(e,t,n){this.target.addEventListener(e,t,n),this.listeners.push({eventName:e,handler:t})}removeAll(){this.listeners.forEach((({eventName:e,handler:t})=>this.target.removeEventListener(e,t)))}}function Ao(e,t){const n=Math.abs(e.x),r=Math.abs(e.y);return"number"==typeof t?Math.sqrt(n**2+r**2)>t:"x"in t&&"y"in t?n>t.x&&r>t.y:"x"in t?n>t.x:"y"in t&&r>t.y}var Fo;!function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"}(Fo||(Fo={}));const Bo={start:[Fo.Space,Fo.Enter],cancel:[Fo.Esc],end:[Fo.Space,Fo.Enter]},Ho=(e,{currentCoordinates:t})=>{switch(e.code){case Fo.Right:return{...t,x:t.x+25};case Fo.Left:return{...t,x:t.x-25};case Fo.Down:return{...t,y:t.y+25};case Fo.Up:return{...t,y:t.y-25}}};class zo{constructor(e){this.props=e,this.autoScrollEnabled=!1,this.coordinates=Ws;const{event:{target:t}}=e;this.props=e,this.listeners=new No(vo(t)),this.windowListeners=new No(function(e){var t;return null!=(t=vo(e).defaultView)?t:window}(t)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),setTimeout((()=>{this.listeners.add("keydown",this.handleKeyDown),this.windowListeners.add("resize",this.handleCancel)}))}handleStart(){const{activeNode:e,onStart:t}=this.props;if(!e.node.current)throw new Error("Active draggable node is undefined");const n=po(e.node.current),r={x:n.left,y:n.top};this.coordinates=r,t(r)}handleKeyDown(e){if(e instanceof KeyboardEvent){const{coordinates:t}=this,{active:n,context:r,options:l}=this.props,{keyboardCodes:s=Bo,coordinateGetter:o=Ho,scrollBehavior:i="smooth"}=l,{code:a}=e;if(s.end.includes(a))return void this.handleEnd(e);if(s.cancel.includes(a))return void this.handleCancel(e);const c=o(e,{active:n,context:r.current,currentCoordinates:t});if(c){const n={x:0,y:0},{scrollableAncestors:l}=r.current;for(const r of l){const l=e.code,s=Ls(c,t),{isTop:o,isRight:a,isLeft:u,isBottom:d,maxScroll:p,minScroll:m}=lo(r),f=io(r),h={x:Math.min(l===Fo.Right?f.right-f.width/2:f.right,Math.max(l===Fo.Right?f.left:f.left+f.width/2,c.x)),y:Math.min(l===Fo.Down?f.bottom-f.height/2:f.bottom,Math.max(l===Fo.Down?f.top:f.top+f.height/2,c.y))},g=l===Fo.Right&&!a||l===Fo.Left&&!u,v=l===Fo.Down&&!d||l===Fo.Up&&!o;if(g&&h.x!==c.x){if(l===Fo.Right&&r.scrollLeft+s.x<=p.x||l===Fo.Left&&r.scrollLeft+s.x>=m.x)return void r.scrollBy({left:s.x,behavior:i});n.x=l===Fo.Right?r.scrollLeft-p.x:r.scrollLeft-m.x,r.scrollBy({left:-n.x,behavior:i});break}if(v&&h.y!==c.y){if(l===Fo.Down&&r.scrollTop+s.y<=p.y||l===Fo.Up&&r.scrollTop+s.y>=m.y)return void r.scrollBy({top:s.y,behavior:i});n.y=l===Fo.Down?r.scrollTop-p.y:r.scrollTop-m.y,r.scrollBy({top:-n.y,behavior:i});break}}this.handleMove(e,Ds(c,n))}}}handleMove(e,t){const{onMove:n}=this.props;e.preventDefault(),n(t),this.coordinates=t}handleEnd(e){const{onEnd:t}=this.props;e.preventDefault(),this.detach(),t()}handleCancel(e){const{onCancel:t}=this.props;e.preventDefault(),this.detach(),t()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}function $o(e){return Boolean(e&&"distance"in e)}function Uo(e){return Boolean(e&&"delay"in e)}var jo;zo.activators=[{eventName:"onKeyDown",handler:(e,{keyboardCodes:t=Bo,onActivation:n})=>{const{code:r}=e.nativeEvent;return!!t.start.includes(r)&&(e.preventDefault(),null==n||n({event:e.nativeEvent}),!0)}}],function(e){e.Keydown="keydown"}(jo||(jo={}));class qo{constructor(e,t,n=function(e){return e instanceof EventTarget?e:vo(e)}(e.event.target)){this.props=e,this.events=t,this.autoScrollEnabled=!0,this.activated=!1,this.timeoutId=null;const{event:r}=e;this.props=e,this.events=t,this.ownerDocument=vo(r.target),this.listeners=new No(n),this.initialCoordinates=Ys(r),this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.attach()}attach(){const{events:e,props:{options:{activationConstraint:t}}}=this;if(this.listeners.add(e.move.name,this.handleMove,!1),this.listeners.add(e.end.name,this.handleEnd),this.ownerDocument.addEventListener(jo.Keydown,this.handleKeydown),t){if($o(t))return;if(Uo(t))return void(this.timeoutId=setTimeout(this.handleStart,t.delay))}this.handleStart()}detach(){this.listeners.removeAll(),this.ownerDocument.removeEventListener(jo.Keydown,this.handleKeydown),null!==this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handleStart(){const{initialCoordinates:e}=this,{onStart:t}=this.props;e&&(this.activated=!0,t(e))}handleMove(e){const{activated:t,initialCoordinates:n,props:r}=this,{onMove:l,options:{activationConstraint:s}}=r;if(!n)return;const o=Ys(e),i=Ls(n,o);if(!t&&s){if(Uo(s))return Ao(i,s.tolerance)?this.handleCancel():void 0;if($o(s))return Ao(i,s.distance)?this.handleStart():void 0}e.cancelable&&e.preventDefault(),l(o)}handleEnd(){const{onEnd:e}=this.props;this.detach(),e()}handleCancel(){const{onCancel:e}=this.props;this.detach(),e()}handleKeydown(e){e.code===Fo.Esc&&this.handleCancel()}}const Go={move:{name:"pointermove"},end:{name:"pointerup"}};class Wo extends qo{constructor(e){const{event:t}=e,n=vo(t.target);super(e,Go,n)}}Wo.activators=[{eventName:"onPointerDown",handler:({nativeEvent:e},{onActivation:t})=>!(!e.isPrimary||0!==e.button||(null==t||t({event:e}),0))}];const Ko={move:{name:"mousemove"},end:{name:"mouseup"}};var Yo;!function(e){e[e.RightClick=2]="RightClick"}(Yo||(Yo={})),class extends qo{constructor(e){super(e,Ko,vo(e.event.target))}}.activators=[{eventName:"onMouseDown",handler:({nativeEvent:e},{onActivation:t})=>e.button!==Yo.RightClick&&(null==t||t({event:e}),!0)}];const Xo={move:{name:"touchmove"},end:{name:"touchend"}};(class extends qo{constructor(e){super(e,Xo)}}).activators=[{eventName:"onTouchStart",handler:({nativeEvent:e},{onActivation:t})=>{const{touches:n}=e;return!(n.length>1||(null==t||t({event:e}),0))}}];const Qo=[{sensor:Wo,options:{}},{sensor:zo,options:{}}],Zo={current:{}},Jo=(0,J.createContext)({...Ws,scaleX:1,scaleY:1}),ei=(0,J.memo)((function({id:e,autoScroll:t=!0,announcements:n,children:r,sensors:l=Qo,collisionDetection:s=go,layoutMeasuring:o,modifiers:i,screenReaderInstructions:a=Bs,...c}){var u,d,p;const m=(0,J.useReducer)(_o,void 0,bo),[f,h]=m,[g,v]=(0,J.useState)((()=>({type:null,event:null}))),{draggable:{active:b,nodes:_,translate:y},droppable:{containers:w}}=f,E=b?_[b]:null,x=(0,J.useRef)({initial:null,translated:null}),C=(0,J.useMemo)((()=>{var e;return null!=b?{id:b,data:null!=(e=null==E?void 0:E.data)?e:Zo,rect:x}:null}),[b,E]),k=(0,J.useRef)(null),[S,O]=(0,J.useState)(null),[I,T]=(0,J.useState)(null),P=(0,J.useRef)(c),M=Ps("DndDescribedBy",e),{layoutRectMap:D,recomputeLayouts:L,willRecomputeLayouts:R}=function(e,{dragging:t,dependencies:n,config:r}){const[l,s]=(0,J.useState)(!1),{frequency:o,strategy:i}=(a=r)?{...Io,...a}:Io;var a;const c=(0,J.useRef)(e),u=(0,J.useCallback)((()=>s(!0)),[]),d=(0,J.useRef)(null),p=function(){switch(i){case Co.Always:return!1;case Co.BeforeDragging:return t;default:return!t}}(),m=Os((n=>{if(p&&!t)return Oo;if(!n||n===Oo||c.current!==e||l){for(let t of Object.values(e))t&&(t.rect.current=t.node.current?uo(t.node.current):null);return function(e){const t=new Map;if(e)for(const n of Object.values(e)){if(!n)continue;const{id:e,rect:r,disabled:l}=n;l||null==r.current||t.set(e,r.current)}return t}(e)}return n}),[e,t,p,l]);return(0,J.useEffect)((()=>{c.current=e}),[e]),(0,J.useEffect)((()=>{l&&s(!1)}),[l]),(0,J.useEffect)((function(){p||requestAnimationFrame(u)}),[t,p]),(0,J.useEffect)((function(){p||"number"!=typeof o||null!==d.current||(d.current=setTimeout((()=>{u(),d.current=null}),o))}),[o,p,u,...n]),{layoutRectMap:m,recomputeLayouts:u,willRecomputeLayouts:l}}(w,{dragging:null!=b,dependencies:[y.x,y.y],config:o}),V=function(e,t){const n=null!==t?e[t]:void 0,r=n?n.node.current:null;return Os((e=>{var n;return null===t?null:null!=(n=null!=r?r:e)?n:null}),[r,t])}(_,b),N=I?Ys(I):null,A=Do(V),F=Po(V),B=(0,J.useRef)(null),H=($=B.current,(z=A)&&$?{x:z.left-$.left,y:z.top-$.top}:Ws);var z,$;const U=(0,J.useRef)({active:null,activeNode:V,collisionRect:null,droppableRects:D,draggableNodes:_,draggingNodeRect:null,droppableContainers:w,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null,translatedRect:null}),j=function(e,t){var n,r;return e&&null!=(n=null==(r=t[e])?void 0:r.node.current)?n:null}(null!=(u=null==(d=U.current.over)?void 0:d.id)?u:null,w),q=Po(V?V.ownerDocument.defaultView:null),G=Po(V?V.parentElement:null),W=function(e){const t=(0,J.useRef)(e),n=Os((n=>e?n&&e&&t.current&&e.parentNode===t.current.parentNode?n:eo(e):To),[e]);return(0,J.useEffect)((()=>{t.current=e}),[e]),n}(b?null!=j?j:V:null),K=Mo(W),[Y,X]=Is(),Q=Po(b?Y.current:null,R),Z=null!=Q?Q:F,te=function(e,{transform:t,...n}){return(null==e?void 0:e.length)?e.reduce(((e,t)=>t({transform:e,...n})),t):t}(i,{transform:{x:y.x-H.x,y:y.y-H.y,scaleX:1,scaleY:1},active:C,over:U.current.over,activeNodeRect:F,draggingNodeRect:Z,containerNodeRect:G,overlayNodeRect:Q,scrollableAncestors:W,scrollableAncestorRects:K,windowRect:q}),ne=N?Ds(N,y):null,re=function(e){const[t,n]=(0,J.useState)(null),r=(0,J.useRef)(e),l=(0,J.useCallback)((e=>{const t=to(e.target);t&&n((e=>e?(e.set(t,no(t)),new Map(e)):null))}),[]);return(0,J.useEffect)((()=>{const t=r.current;if(e!==t){s(t);const o=e.map((e=>{const t=to(e);return t?(t.addEventListener("scroll",l,{passive:!0}),[t,no(t)]):null})).filter((e=>null!=e));n(o.length?new Map(o):null),r.current=e}return()=>{s(e),s(t)};function s(e){e.forEach((e=>{const t=to(e);null==t||t.removeEventListener("scroll",l)}))}}),[l,e]),(0,J.useMemo)((()=>e.length?t?Array.from(t.values()).reduce(((e,t)=>Ds(e,t)),Ws):ao(e):Ws),[e,t])}(W),le=Ds(te,re),se=A?Js(A,te):null,oe=se?Js(se,re):null,ie=function(e,t){var n;return e&&null!=(n=t[e])?n:null}(C&&oe?s(Array.from(D.entries()),oe):null,w),ae=(0,J.useMemo)((()=>ie&&ie.rect.current?{id:ie.id,rect:ie.rect.current,data:ie.data,disabled:ie.disabled}:null),[ie]),ce=function(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}(te,null!=(p=null==ie?void 0:ie.rect.current)?p:null,A),ue=(0,J.useCallback)(((e,{sensor:t,options:n})=>{if(!k.current)return;const r=_[k.current];if(!r)return;const l=new t({active:k.current,activeNode:r,event:e.nativeEvent,options:n,context:U,onStart(e){const t=k.current;if(!t)return;const n=_[t];if(!n)return;const{onDragStart:r}=P.current,l={active:{id:t,data:n.data,rect:x}};h({type:zs.DragStart,initialCoordinates:e,active:t}),v({type:zs.DragStart,event:l}),null==r||r(l)},onMove(e){h({type:zs.DragMove,coordinates:e})},onEnd:s(zs.DragEnd),onCancel:s(zs.DragCancel)});function s(e){return async function(){const{active:t,over:n,scrollAdjustedTranslate:r}=U.current;let l=null;if(t&&r){const{cancelDrop:s}=P.current;l={active:t,delta:r,over:n},e===zs.DragEnd&&"function"==typeof s&&await Promise.resolve(s(l))&&(e=zs.DragCancel)}if(k.current=null,h({type:e}),O(null),T(null),l){const{onDragCancel:t,onDragEnd:n}=P.current,r=e===zs.DragEnd?n:t;v({type:e,event:l}),null==r||r(l)}}}O(l),T(e.nativeEvent)}),[h,_]),de=(0,J.useCallback)(((e,t)=>(n,r)=>{const l=n.nativeEvent;null!==k.current||l.dndKit||l.defaultPrevented||!0===e(n,t.options)&&(l.dndKit={capturedBy:t.sensor},k.current=r,ue(n,t))}),[ue]),pe=function(e,t){return(0,J.useMemo)((()=>e.reduce(((e,n)=>{const{sensor:r}=n;return[...e,...r.activators.map((e=>({eventName:e.eventName,handler:t(e.handler,n)})))]}),[])),[e,t])}(l,de);Ss((()=>{P.current=c}),Object.values(c)),(0,J.useEffect)((()=>{C||(B.current=null),C&&A&&!B.current&&(B.current=A)}),[A,C]),(0,J.useEffect)((()=>{const{onDragMove:e}=P.current,{active:t,over:n}=U.current;if(!t)return;const r={active:t,delta:{x:le.x,y:le.y},over:n};v({type:zs.DragMove,event:r}),null==e||e(r)}),[le.x,le.y]),(0,J.useEffect)((()=>{const{active:e,scrollAdjustedTranslate:t}=U.current;if(!e||!k.current||!t)return;const{onDragOver:n}=P.current,r={active:e,delta:{x:t.x,y:t.y},over:ae};v({type:zs.DragOver,event:r}),null==n||n(r)}),[null==ae?void 0:ae.id]),Ss((()=>{U.current={active:C,activeNode:V,collisionRect:oe,droppableRects:D,draggableNodes:_,draggingNodeRect:Z,droppableContainers:w,over:ae,scrollableAncestors:W,scrollAdjustedTranslate:le,translatedRect:se},x.current={initial:Z,translated:se}}),[C,V,oe,_,Z,D,w,ae,W,le,se]),function({acceleration:e,activator:t=Eo.Pointer,canScroll:n,draggingRect:r,enabled:l,interval:s=5,order:o=xo.TreeOrder,pointerCoordinates:i,scrollableAncestors:a,scrollableAncestorRects:c,threshold:u}){const[d,p]=function(){const e=(0,J.useRef)(null);return[(0,J.useCallback)(((t,n)=>{e.current=setInterval(t,n)}),[]),(0,J.useCallback)((()=>{null!==e.current&&(clearInterval(e.current),e.current=null)}),[])]}(),m=(0,J.useRef)({x:1,y:1}),f=(0,J.useMemo)((()=>{switch(t){case Eo.Pointer:return i?{top:i.y,bottom:i.y,left:i.x,right:i.x}:null;case Eo.DraggableRect:return r}return null}),[t,r,i]),h=(0,J.useRef)(Ws),g=(0,J.useRef)(null),v=(0,J.useCallback)((()=>{const e=g.current;if(!e)return;const t=m.current.x*h.current.x,n=m.current.y*h.current.y;e.scrollBy(t,n)}),[]),b=(0,J.useMemo)((()=>o===xo.TreeOrder?[...a].reverse():a),[o,a]);(0,J.useEffect)((()=>{if(l&&a.length&&f){for(const t of b){if(!1===(null==n?void 0:n(t)))continue;const r=a.indexOf(t),l=c[r];if(!l)continue;const{direction:o,speed:i}=oo(t,l,f,e,u);if(i.x>0||i.y>0)return p(),g.current=t,d(v,s),m.current=i,void(h.current=o)}m.current={x:0,y:0},h.current={x:0,y:0},p()}else p()}),[e,v,n,p,l,s,JSON.stringify(f),d,a,b,c,JSON.stringify(u)])}({...function(){const e=!1===(null==S?void 0:S.autoScrollEnabled),n="object"==typeof t?!1===t.enabled:!1===t,r=!e&&!n;return"object"==typeof t?{...t,enabled:r}:{enabled:r}}(),draggingRect:se,pointerCoordinates:ne,scrollableAncestors:W,scrollableAncestorRects:K});const me=(0,J.useMemo)((()=>({active:C,activeNode:V,activeNodeRect:A,activeNodeClientRect:F,activatorEvent:I,activators:pe,ariaDescribedById:{draggable:M},overlayNode:{nodeRef:Y,rect:Q,setRef:X},containerNodeRect:G,dispatch:h,draggableNodes:_,droppableContainers:w,droppableRects:D,over:ae,recomputeLayouts:L,scrollableAncestors:W,scrollableAncestorRects:K,willRecomputeLayouts:R,windowRect:q})),[C,V,F,A,I,pe,G,Q,Y,h,_,M,w,D,ae,L,W,K,X,R,q]);return ee().createElement(yo.Provider,{value:g},ee().createElement(Gs.Provider,{value:me},ee().createElement(Jo.Provider,{value:ce},r)),ee().createElement(wo,{announcements:n,hiddenTextDescribedById:M,screenReaderInstructions:a}))})),ti=(0,J.createContext)(null),ni="button";function ri(e,t,n){const r=e.slice();return r.splice(n<0?r.length+n:n,0,r.splice(t,1)[0]),r}function li(e){return null!==e&&e>=0}const si=({layoutRects:e,activeIndex:t,overIndex:n,index:r})=>{const l=ri(e,n,t),s=e[r],o=l[r];return o&&s?{x:o.offsetLeft-s.offsetLeft,y:o.offsetTop-s.offsetTop,scaleX:o.width/s.width,scaleY:o.height/s.height}:null},oi={scaleX:1,scaleY:1},ii=({activeIndex:e,activeNodeRect:t,index:n,layoutRects:r,overIndex:l})=>{var s;const o=null!=(s=r[e])?s:t;if(!o)return null;if(n===e){const t=r[l];return t?{x:0,y:ee&&n<=l?{x:0,y:-o.height-i,...oi}:n=l?{x:0,y:o.height+i,...oi}:{x:0,y:0,...oi}},ai="Sortable",ci=ee().createContext({activeIndex:-1,containerId:ai,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:si,wasSorting:{current:!1}});function ui({children:e,id:t,items:n,strategy:r=si}){const{active:l,overlayNode:s,droppableRects:o,over:i,recomputeLayouts:a,willRecomputeLayouts:c}=(0,J.useContext)(Gs),u=Ps(ai,t),d=Boolean(null!==s.rect),p=(0,J.useMemo)((()=>n.map((e=>"string"==typeof e?e:e.id))),[n]),m=l?p.indexOf(l.id):-1,f=-1!==m,h=(0,J.useRef)(f),g=i?p.indexOf(i.id):-1,v=(0,J.useRef)(p),b=function(e,t){return e.reduce(((e,n,r)=>{const l=t.get(n);return l&&(e[r]=l),e}),Array(e.length))}(p,o),_=(y=p,w=v.current,!(y.join()===w.join()));var y,w;const E=-1!==g&&-1===m||_;Ss((()=>{_&&f&&!c&&a()}),[_,f,a,c]),(0,J.useEffect)((()=>{v.current=p}),[p]),(0,J.useEffect)((()=>{requestAnimationFrame((()=>{h.current=f}))}),[f]);const x=(0,J.useMemo)((()=>({activeIndex:m,containerId:u,disableTransforms:E,items:p,overIndex:g,useDragOverlay:d,sortedRects:b,strategy:r,wasSorting:h})),[m,u,E,p,g,b,d,r,h]);return ee().createElement(ci.Provider,{value:x},e)}const di=({isSorting:e,index:t,newIndex:n,transition:r})=>!(!r||!e&&n===t),pi={duration:200,easing:"ease"},mi="transform",fi=Rs.Transition.toString({property:mi,duration:0,easing:"linear"}),hi={roleDescription:"sortable"};function gi({animateLayoutChanges:e=di,attributes:t,disabled:n,data:r,id:l,strategy:s,transition:o=pi}){const{items:i,containerId:a,activeIndex:c,disableTransforms:u,sortedRects:d,overIndex:p,useDragOverlay:m,strategy:f,wasSorting:h}=(0,J.useContext)(ci),g=i.indexOf(l),v=(0,J.useMemo)((()=>({sortable:{containerId:a,index:g,items:i},...r})),[a,r,g,i]),{rect:b,node:_,setNodeRef:y}=function({data:e,disabled:t=!1,id:n}){const{active:r,dispatch:l,over:s}=(0,J.useContext)(Gs),o=(0,J.useRef)(null),[i,a]=Is(),c=So(e);return Ss((()=>(l({type:zs.RegisterDroppable,element:{id:n,disabled:t,node:i,rect:o,data:c}}),()=>l({type:zs.UnregisterDroppable,id:n}))),[n]),(0,J.useEffect)((()=>{l({type:zs.SetDroppableDisabled,id:n,disabled:t})}),[t]),{active:r,rect:o,isOver:(null==s?void 0:s.id)===n,node:i,over:s,setNodeRef:a}}({id:l,data:v}),{active:w,activeNodeRect:E,activatorEvent:x,attributes:C,setNodeRef:k,listeners:S,isDragging:O,over:I,transform:T}=function({id:e,data:t,disabled:n=!1,attributes:r}){const{active:l,activeNodeRect:s,activatorEvent:o,ariaDescribedById:i,draggableNodes:a,droppableRects:c,activators:u,over:d}=(0,J.useContext)(Gs),{role:p=ni,roleDescription:m="draggable",tabIndex:f=0}=null!=r?r:{},h=(null==l?void 0:l.id)===e,g=(0,J.useContext)(h?Jo:ti),[v,b]=Is(),_=function(e,t){return(0,J.useMemo)((()=>e.reduce(((e,{eventName:n,handler:r})=>(e[n]=e=>{r(e,t)},e)),{})),[e,t])}(u,e),y=So(t);return(0,J.useEffect)((()=>(a[e]={node:v,data:y},()=>{delete a[e]})),[a,e]),{active:l,activeNodeRect:s,activatorEvent:o,attributes:(0,J.useMemo)((()=>({role:p,tabIndex:f,"aria-pressed":!(!h||p!==ni)||void 0,"aria-roledescription":m,"aria-describedby":i.draggable})),[p,f,h,m,i.draggable]),droppableRects:c,isDragging:h,listeners:n?void 0:_,node:v,over:d,setNodeRef:b,transform:g}}({id:l,data:v,attributes:{...hi,...t},disabled:n}),P=function(...e){return(0,J.useMemo)((()=>t=>{e.forEach((e=>e(t)))}),e)}(y,k),M=Boolean(w),D=M&&h.current&&!u&&li(c)&&li(p),L=!m&&O,R=L&&D?T:null,V=D?null!=R?R:(null!=s?s:f)({layoutRects:d,activeNodeRect:E,activeIndex:c,overIndex:p,index:g}):null,N=li(c)&&li(p)?ri(i,c,p).indexOf(l):g,A=(0,J.useRef)(N),F=e({active:w,isDragging:O,isSorting:M,id:l,index:g,items:i,newIndex:A.current,transition:o,wasSorting:h.current}),B=function({rect:e,disabled:t,index:n,node:r}){const[l,s]=(0,J.useState)(null),o=(0,J.useRef)(n);return(0,J.useEffect)((()=>{if(!t&&n!==o.current&&r.current){const t=e.current;if(t){const e=po(r.current),n={x:t.offsetLeft-e.offsetLeft,y:t.offsetTop-e.offsetTop,scaleX:t.width/e.width,scaleY:t.height/e.height};(n.x||n.y)&&s(n)}}n!==o.current&&(o.current=n)}),[t,n,r,e]),(0,J.useEffect)((()=>{l&&requestAnimationFrame((()=>{s(null)}))}),[l]),l}({disabled:!F,index:g,node:_,rect:b});return(0,J.useEffect)((()=>{M&&(A.current=N)}),[M,N]),{active:w,attributes:C,activatorEvent:x,rect:b,index:g,isSorting:M,isDragging:O,listeners:S,node:_,overIndex:p,over:I,setNodeRef:P,setDroppableNodeRef:y,setDraggableNodeRef:k,transform:null!=B?B:V,transition:B?fi:L||!o?null:M||F?Rs.Transition.toString({...o,property:mi}):null}}const vi=[Fo.Down,Fo.Right,Fo.Up,Fo.Left],bi=(e,{context:{droppableContainers:t,translatedRect:n,scrollableAncestors:r}})=>{if(vi.includes(e.code)){if(e.preventDefault(),!n)return;const s=[];Object.entries(t).forEach((([t,r])=>{if(null==r?void 0:r.disabled)return;const l=null==r?void 0:r.node.current;if(!l)return;const o=mo(l);switch(e.code){case Fo.Down:n.top+n.height<=o.top&&s.push([t,o]);break;case Fo.Up:n.top>=o.top+o.height&&s.push([t,o]);break;case Fo.Left:n.left>=o.left+o.width&&s.push([t,o]);break;case Fo.Right:n.left+n.width<=o.left&&s.push([t,o])}}));const o=((e,t)=>{const n=ho(t,t.left,t.top),r=e.map((([e,t])=>{const r=ho(t,fo(t)?t.left:void 0,fo(t)?t.top:void 0),l=n.reduce(((e,t,n)=>e+Ks(r[n],t)),0);return Number((l/4).toFixed(4))})),l=$s(r);return e[l]?e[l][0]:null})(s,n);if(o){var l;const e=null==(l=t[o])?void 0:l.node.current;if(e){const t=eo(e).some(((e,t)=>r[t]!==e)),l=mo(e),s=t?{x:0,y:0}:{x:n.width-l.width,y:n.height-l.height};return{x:l.left-s.x,y:l.top-s.y}}}}};const _i=({transform:e})=>({...e,x:0}),yi=({transform:e,activeNodeRect:t,windowRect:n})=>t&&n?function(e,t,n){const r={...e};return t.top+e.y<=n.top?r.y=n.top-t.top:t.bottom+e.y>=n.top+n.height&&(r.y=n.top+n.height-t.bottom),t.left+e.x<=n.left?r.x=n.left-t.left:t.right+e.x>=n.left+n.width&&(r.x=n.left+n.width-t.right),r}(e,t,n):e,wi=(0,A.createElement)("svg",{width:"18",height:"18",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 18 18"},(0,A.createElement)("path",{d:"M5 4h2V2H5v2zm6-2v2h2V2h-2zm-6 8h2V8H5v2zm6 0h2V8h-2v2zm-6 6h2v-2H5v2zm6 0h2v-2h-2v2z"}));function Ei(e){let{label:t,setNodeRef:n,listeners:r}=e;return t=t||(0,$.__)("Reorder instructor","lifterlms"),(0,A.createElement)(q.Button,Q({isSmall:!0,showTooltip:!0,label:t,icon:wi,ref:n,className:"llms-drag-handle"},r))}function xi(e){let{id:t,index:n,item:r,isDragging:l,dragHandle:s,ListItem:o,itemClassName:i="",manageState:a,extraProps:c={}}=e;const{attributes:u,listeners:d,setNodeRef:p,transform:m,transition:f}=gi({id:t}),h={transform:Rs.Transform.toString(m),transition:f};return l&&m&&m.scaleX&&m.scaleY&&(m.scaleX=.9,m.scaleY=.9),l&&(i+=" llms-is-dragging"),(0,A.createElement)("div",Q({style:h,ref:s?void 0:p,className:`llms-sortable-list--item ${i}`},u,s?{}:d),(0,A.createElement)(o,{id:t,item:r,index:n,isDragging:l,setNodeRef:p,listeners:d,manageState:a,extraProps:c}))}function Ci(e){let{ListItem:t,manageState:n,items:r=[],sortableStrategy:l=ii,ctxModifiers:s=[_i,yi],dragHandle:o=!0,listClassName:i="",itemClassName:a="",extraProps:c={}}=e;const[u,d]=(0,A.useState)(!1),p=function(...e){return(0,J.useMemo)((()=>[...e].filter((e=>null!=e))),[...e])}(Vo(Wo),Vo(zo,{coordinateGetter:bi}));return(0,A.createElement)(ei,{sensors:p,collisionDetection:Qs,onDragStart:function(e){d(e.active.id)},onDragEnd:function(e){d(!1);const{active:t,over:l}=e;if(t.id!==l.id){const e=(0,Fr.findIndex)(r,{id:t.id}),s=(0,Fr.findIndex)(r,{id:l.id});n.updateItems(ri(r,e,s))}},modifiers:s},(0,A.createElement)("div",{className:`llms-sortable-list ${i}`},(0,A.createElement)(ui,{items:r,strategy:l},r.map(((e,r)=>(0,A.createElement)(xi,{id:e.id,key:e.id,index:r,item:e,isDragging:e.id===u,dragHandle:o,ListItem:t,itemClassName:a,manageState:n,extraProps:c}))))))}function ki(e){let{id:t,item:n,extraProps:r,manageState:l,listeners:s,setNodeRef:o}=e;const{showKeys:i,type:a,optionCount:c}=r,{updateItem:u,deleteItem:d}=l;return(0,A.createElement)(A.Fragment,null,(0,A.createElement)(Ei,{label:(0,$.__)("Reorder option","lifterlms"),setNodeRef:o,listeners:s}),(0,A.createElement)(q.Tooltip,{text:(0,$.__)("Make default","lifterlms")},(0,A.createElement)("div",{className:"llms-field-opt-default-wrap"},"checkbox"===a&&(0,A.createElement)((()=>(0,A.createElement)(q.CheckboxControl,{className:"llms-field-opt-default",checked:"yes"===n.default,onChange:e=>{u(t,{...n,default:!0===e?"yes":"no"})},tabIndex:"-1"})),null),"checkbox"!==a&&(0,A.createElement)((()=>(0,A.createElement)(q.RadioControl,{className:"llms-field-opt-default",selected:n.default,onChange:e=>{u(t,{...n,default:e})},options:[{label:"",value:"yes"}],tabIndex:"-1"})),null))),(0,A.createElement)("div",{className:"llms-field-opt-text-wrap"},(0,A.createElement)(q.TextControl,{className:"llms-field-opt-text",value:n.text,onChange:e=>u(t,{...n,text:e}),placeholder:(0,$.__)("Option label","lifterlms")}),i&&(0,A.createElement)("div",{className:"llms-field-opt-db-key"},(0,A.createElement)(q.Tooltip,{text:(0,$.__)("Database key value","lifterlms")},(0,A.createElement)(q.Dashicon,{icon:"database"})),(0,A.createElement)(q.TextControl,{className:"llms-field-opt-text ",value:n.key,onChange:e=>u(t,{...n,key:e}),placeholder:(0,$.__)("Database key value","lifterlms")}))),c>1&&(0,A.createElement)("div",{className:"llms-del-field-opt-wrap"},(0,A.createElement)(q.Button,{style:{flex:1},icon:"trash",label:(0,$.__)("Delete Option","lifterlms"),onClick:()=>d(t),tabIndex:"-1",isSmall:!0})))}class Si extends A.Component{constructor(){super(...arguments),Y(this,"addOption",(()=>{const{options:e}=this.state,{length:t}=e,[n,r]=this.getUniqueKeyNumber(t+1),l={key:n,id:xs(),
+// Translators: %d = Option index in the list of options.
+text:(0,$.sprintf)((0,$.__)("Option %d","lifterlms"),r),default:"no"};e.push(l),this.updateOptions(e)})),Y(this,"getManageState",(()=>({createItem:this.addOption,deleteItem:this.removeOption,updateItem:this.updateOption,updateItems:this.updateOptions}))),Y(this,"getUniqueKeyNumber",(e=>{const t=e=>{const{options:t}=this.state;return-1===t.findIndex((t=>{let{key:n}=t;return n===e}))};
+// Translators: %d = Option index in the list of options.
+let n=(0,$.sprintf)((0,$.__)("option_%d","lifterlms"),e);for(;!t(n);)[n,e]=this.getUniqueKeyNumber(++e);return[n,e]})),Y(this,"updateOption",((e,t)=>{const{options:n}=this.state,{field:r}=this.props.attributes,l="yes"===t.default&&"checkbox"!==r,s=n.map((n=>(e===n.id?n={...n,...t}:l&&(n={...n,default:"no"}),n)));this.updateOptions(s)})),Y(this,"updateOptions",(e=>{const{setAttributes:t}=this.props;this.setState({options:e}),t({options:e.map((e=>{let{id:t,...n}=e;return n}))})})),Y(this,"removeOption",(e=>{const{options:t}=this.state,{field:n}=this.props.attributes;let r=null;if("checkbox"!==n){const n=t.find((t=>{let{id:n}=t;return n===e}));r="yes"===n.default}this.updateOptions(t.filter((t=>{let{id:n}=t;return n!==e})).map(((e,t)=>(r&&0===t&&(e={...e,default:"yes"}),e))))}));const{options:e}=this.props.attributes;this.state={showKeys:!1,options:e.map((e=>({...e,id:xs()})))}}render(){const{props:e,state:t}=this,{attributes:n}=e,{id:r,field:l}=n,{options:s,showKeys:o}=t,{length:i}=s;return(0,A.createElement)(q.BaseControl,{id:r,label:(0,$.__)("Options","lifterlms")},(0,A.createElement)(Ci,{ListItem:ki,items:s,itemClassName:"llms-field-option",manageState:this.getManageState(),extraProps:{type:l,showKeys:o,optionCount:i}}),(0,A.createElement)("div",{className:"llms-field-options--footer"},(0,A.createElement)(q.Button,{isSecondary:!0,onClick:this.addOption},(0,$.__)("Add option","lifterlms")),(0,A.createElement)(q.Button,{isTertiary:!0,onClick:()=>this.setState({showKeys:!o})},o?(0,$.__)("Hide keys","lifterlms"):(0,$.__)("Show keys","lifterlms"))))}}class Oi extends A.Component{constructor(e){super(e),this.state={validationErrors:{}}}getBlockByFieldId(e){const t=Kr().filter((t=>e===t.attributes.id));return!!t&&t[0]}getColumnsOptions(e){let t=[];return e&&(!e||e["llms/fieldGroup/fieldLayout"]&&"stacked"!==e["llms/fieldGroup/fieldLayout"])||t.push({value:12,label:(0,$.__)("100%","lifterlms")}),t=t.concat([{value:9,label:(0,$.__)("75%","lifterlms")},{value:8,label:(0,$.__)("66.66%","lifterlms")},{value:6,label:(0,$.__)("50%","lifterlms")},{value:4,label:(0,$.__)("33.33%","lifterlms")},{value:3,label:(0,$.__)("25%","lifterlms")}]),t}getMatchFieldOptions(){const{clientId:e,name:t}=this.props;return[{value:"",label:(0,$.__)("Select a field","lifterlms")}].concat(Kr().filter((n=>n.clientId!==e&&-1!==t.indexOf("llms/form-field-"))).map((e=>{const{id:t,label:n}=e.attributes;return{value:t,label:`${n} (${t})`}})))}hasInspectorSupport(){const{inspectorSupports:e}=this.props;return Object.keys(e).filter((t=>e[t])).length>=1}hasInspectorControlSupport(e){const{inspectorSupports:t}=this.props;return t[e]}canTransformToGroup(e){return!(!e||this.isInAConfirmGroup(e))&&(0,Gr.getPossibleBlockTransformations)([e]).map((e=>{let{name:t}=e;return t})).includes("llms/form-field-confirm-group")}isInAConfirmGroup(e){return!!this.getParentGroupClientId(e)}getParentGroupClientId(e){if(!e)return!1;const{clientId:t}=e,{getBlockParentsByBlockName:n}=(0,jr.select)(j.store),r=n(t,"llms/form-field-confirm-group");return!!r.length&&r[0]}getBlockSiblings(e){const t=this.getParentGroupClientId(e);if(!t)return[];const{getBlock:n}=(0,jr.select)(j.store);return n(t).innerBlocks.filter((t=>{let{clientId:n}=t;return n!==e.clientId}))}getValidationErrText(e){let t="";const n=this.state.validationErrors[e];if(n)if(this.containsInvalidCharacters(n))
+// Translators: %s = user-submitted value.
+t=(0,$.__)('The value "%s" contains invalid characters. Only letters, numbers, underscores, and hyphens are allowed.',"lifterlms");else switch(e){case"data_store_key":
+// Translators: %s = user-submitted value.
+t=(0,$.__)('The user meta key "%s" is not unique. Please choose a unique value.',"lifterlms");break;case"id":
+// Translators: %s = user-submitted value.
+t=(0,$.__)('The ID "%s" is not unique. Please choose a unique field ID.',"lifterlms");break;case"name":
+// Translators: %s = user-submitted value.
+t=(0,$.__)('The name "%s" is not unique. Please choose a globally unique field name.',"lifterlms");break;default:
+// Translators: %s = user-submitted value.
+t=(0,$.__)('The chosen value "%s" is invalid.',"lifterlms")}else t=(0,$.__)("The value cannot be blank.","lifterlms");return(0,$.sprintf)(t,n)}containsInvalidCharacters(e){return!!e.match(/[^A-Za-z0-9\-\_]/g)}setValidationError(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.setState({validationErrors:{...this.state.validationErrors,[e]:t}})}hasValidationErr(e){return"string"==typeof this.state.validationErrors[e]}ValidatedTextControl(e){let{parent:t,attrKey:n,label:r,help:l}=e;const{attributes:s}=t.props,o=s[n],i=t.hasValidationErr(n),a=i?"llms-invalid-control":"";return(0,A.createElement)("div",{className:a},(0,A.createElement)(q.TextControl,{label:r,help:l,value:o,onChange:e=>t.updateValueWithValidation(n,e,"name"===n?"global":"local")}),i&&(0,A.createElement)("p",{className:"llms-invalid-control--msg"},t.getValidationErrText(n)))}updateValueWithValidation(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"local";const{clientId:r,attributes:l,setAttributes:s}=this.props,{name:o}=l,i=l[e],{editField:a,renameField:c}=(0,jr.dispatch)(wl),{lockPostSaving:u,unlockPostSaving:d}=(0,jr.dispatch)(qr.store),p=`llms-${e}-validation-err-${r}-${o}`;if(t===i)return;const m=!t,f=this.containsInvalidCharacters(t),h=ms(t,e,n),g=!m&&!f&&h;if(this.setValidationError(e),d(p),!g){if(this.setValidationError(e,t),m)return;u(p)}"name"===e?(h||(t=t.slice(0,-1)),c(l.name,t)):a(l.name,{[e]:t}),s({[e]:t})}render(){if(!this.hasInspectorSupport())return"";const{attributes:e,setAttributes:t,clientId:n,context:r}=this.props,l=(0,jr.select)(j.store).getBlock(n),{required:s,placeholder:o,columns:i,isConfirmationField:a,isConfirmationControlField:c}=e,u=this.canTransformToGroup(l),d=this.isInAConfirmGroup(l);return(0,A.createElement)(A.Fragment,null,(0,A.createElement)(j.InspectorControls,null,(0,A.createElement)(q.PanelBody,null,!a&&this.hasInspectorControlSupport("required")&&(0,A.createElement)(q.ToggleControl,{className:"llms-required-field-toggle",label:(0,$.__)("Required","lifterlms"),checked:!!s,onChange:()=>t({required:!s}),help:s?(0,$.__)("Field is required.","lifterlms"):(0,$.__)("Field is optional.","lifterlms")}),(0,A.createElement)(q.SelectControl,{className:"llms-field-width-select",label:(0,$.__)("Field Width","lifterlms"),onChange:e=>{e=parseInt(e,10),t({columns:e});const n=this.getBlockSiblings(l);if(n.length&&e+n[0].attributes.columns>12){const{updateBlockAttributes:t}=(0,jr.dispatch)(j.store);t(n[0].clientId,{columns:12-e})}},help:(0,$.__)("Determines the width of the form field.","lifterlms"),value:i,options:this.getColumnsOptions(r)}),this.hasInspectorControlSupport("options")&&(0,A.createElement)(Si,{attributes:e,setAttributes:t}),this.hasInspectorControlSupport("placeholder")&&(0,A.createElement)(q.TextControl,{label:(0,$.__)("Placeholder","lifterlms"),value:o,onChange:e=>t({placeholder:e}),help:(0,$.__)("Displays a placeholder option as the selected instead of a default value.","lifterlms")}),(u||c&&d)&&(0,A.createElement)(q.ToggleControl,{className:"llms-confirmation-field-toggle",label:(0,$.__)("Confirmation Field","lifterlms"),checked:d,onChange:()=>{const{replaceBlock:e,selectBlock:t}=(0,jr.dispatch)(j.store),{findControllerBlockIndex:r}=(0,Gr.getBlockType)("llms/form-field-confirm-group"),{getBlock:s}=(0,jr.select)(j.store);let o=n,i="llms/form-field-confirm-group",a=l,c=null;d&&(o=this.getParentGroupClientId(l),a=s(o),i=l.name);const u=(0,Gr.switchToBlockType)(a,i);if(e(o,u),d)c=u[0].clientId;else{const{innerBlocks:e}=u[0];c=e[r(e)].clientId}t(c)},help:d?(0,$.__)("A Confirmation field is active.","lifterlms"):(0,$.__)("No confirmation field.","lifterlms")}),this.hasInspectorControlSupport("customFill")&&(0,A.createElement)(q.Slot,{name:`llmsInspectorControlsFill.${this.hasInspectorControlSupport("customFill")}.${n}`})),!a&&this.hasInspectorControlSupport("storage")&&(0,A.createElement)(q.PanelBody,{title:(0,$.__)("Data Storage","lifterlms")},(0,A.createElement)(this.ValidatedTextControl,{parent:this,attrKey:"data_store_key",label:(0,$.__)("Usermeta Key","lifterlms"),help:(0,$.__)("Database field key name. Only accepts alphanumeric characters, hyphens, and underscores.","lifterlms")}))),(0,A.createElement)(j.InspectorAdvancedControls,null,!a&&this.hasInspectorControlSupport("name")&&(0,A.createElement)(this.ValidatedTextControl,{parent:this,attrKey:"name",label:(0,$.__)("Field Name","lifterlms"),help:(0,$.__)("The field's HTML name attribute.","lifterlms")}),!a&&this.hasInspectorControlSupport("id")&&(0,A.createElement)(this.ValidatedTextControl,{parent:this,attrKey:"id",label:(0,$.__)("Field ID","lifterlms"),help:(0,$.__)("The field's HTML id attribute.","lifterlms")})))}}function Ii(e){const t=function(e){const{getBlock:t,getBlockParentsByBlockName:n}=(0,jr.select)("core/block-editor");return t(n(e,function(){const{getBlockTypes:e,hasBlockSupport:t}=(0,jr.select)("core/blocks");return e().filter((e=>t(e,"llms_field_group")))}().map((e=>{let{name:t}=e;return t}))))}(e);return t&&t.innerBlocks.length?(0,Fr.find)(t.innerBlocks,(t=>t.clientId!==e)):null}function Ti(){let{setAttributes:e,currentUpdates:t,siblingClientId:n,siblingUpdates:r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{updateBlockAttributes:l}=(0,jr.dispatch)("core/block-editor");setTimeout((()=>{(0,Fr.isEmpty)(t)||e(t),n&&!(0,Fr.isEmpty)(r)&&l(n,r)}))}function Pi(e,t){const n={};return e.required!==t.required&&(n.required=e.required),e.field!==t.field&&(n.field=e.field),{currentUpdates:{},siblingUpdates:n}}function Mi(e){const{attributes:t,block:n,setAttributes:r}=e,{fieldLayout:l}=t,{innerBlocks:s}=n;return(0,A.createElement)(q.RadioControl,{label:(0,$.__)("Field Layout","lifterlms"),selected:l,onChange:e=>function(e){let{fieldLayout:t,setAttributes:n,innerBlocks:r}=e;const{updateBlockAttributes:l}=(0,jr.dispatch)(j.store);n({fieldLayout:t});const s="columns"===t?6:12;r.forEach(((e,n)=>{let{clientId:r}=e,o=1===n;0===n&&"stacked"===t&&(o=!0),l(r,{columns:s,last_column:o})}))}({fieldLayout:e,setAttributes:r,innerBlocks:s}),options:[{value:"columns",label:(0,$.__)("Columns","lifterlms")},{value:"stacked",label:(0,$.__)("Stacked","lifterlms")}]})}const Di=e=>{const{getCurrentPostId:t}=(0,jr.select)("core/editor");return(0,Fr.snakeCase)((0,Fr.uniqueId)(`${e}_${t()}_`))},Li=e=>(0,Fr.kebabCase)(e),Ri={apiVersion:2,icon:{foreground:"currentColor"},category:"llms-user-info-fields",keywords:[(0,$.__)("LifterLMS","lifterlms"),"llms"],attributes:{},supports:{llms_visibility:!0},example:{},fillInspectorControls(e,t,n){},fillEditAfter(e,t,n){}},Vi={attributes:{description:{type:"string",__default:""},field:{type:"string",__default:"text"},required:{type:"boolean",__default:!1},label:{type:"string",__default:""},label_show_empty:{type:"string",__default:!1},match:{type:"string",__default:""},options:{type:"array",__default:[]},options_preset:{type:"string",__default:""},placeholder:{type:"string",__default:""},columns:{type:"integer",__default:12},last_column:{type:"boolean",__default:!0},name:{type:"string",__default:""},id:{type:"string",__default:""},data_store:{type:"string",__default:"usermeta"},data_store_key:{type:"string",__default:""},html_attrs:{type:"object",__default:{}},isConfirmationField:{type:"boolean",__default:!1},isConfirmationControlField:{type:"boolean",__default:!1}},supports:{llms_field_inspector:{id:!0,name:!0,options:!1,placeholder:!1,required:!0,customFill:!1,storage:!0},llms_edit_fill:{after:!1},llms_field_group:!1},edit:function(e){let{attributes:t}=e,n=!0;const{name:r}=e,l=(0,Gr.getBlockType)(r),{clientId:s,context:o,setAttributes:i}=e,a=l.supports.llms_field_inspector,c=l.supports.llms_edit_fill,{fillEditAfter:u,fillInspectorControls:d}=l,{getSelectedBlockClientId:p}=(0,jr.select)(j.store),{isDuplicate:m}=(0,jr.select)(wl),f=!!o["llms/fieldGroup/fieldLayout"],h=t.name&&m(t.name,s)&&0!==r.indexOf("llms/form-field-user-"),g=!f&&t.isConfirmationField;g&&(n=!1),t=n?((e,t,n)=>{if(Object.keys(t).forEach((n=>{const r=t[n].__default;void 0!==r&&void 0===e[n]&&(e[n]=r)})),!e.name||n&&!e.isConfirmationField){let t=Di(e.field);for(;!ms("name",t);)t=Di(e.field);e.name=t}if(!e.id||n&&!e.isConfirmationField){let t=Li(e.name);for(;!ms("id",t,"local");)t=Li((0,Fr.uniqueId)(`${e.field}-field-`));e.id=t}return(""===e.data_store_key||n&&!e.isConfirmationField)&&(e.data_store_key=e.name),e})(t,l.attributes,h):t,f&&n&&function(){let{attributes:e,clientId:t,setAttributes:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r=Ii(t);let l={},s={};if(!r)return;const o=r.clientId;if(e.isConfirmationControlField||e.isConfirmationField){const t=Pi(e,r.attributes);l=(0,Fr.merge)(l,t.currentUpdates),s=(0,Fr.merge)(s,t.siblingUpdates)}Ti({setAttributes:n,currentUpdates:l,siblingClientId:o,siblingUpdates:s})}(e);const v=(0,j.useBlockProps)({className:`llms-fields llms-cols-${t.columns}`});return(0,A.useEffect)((()=>{if(l.variations&&l.variations.length&&s===p()){const e=setInterval((()=>{const n=document.querySelector(".block-editor-block-inspector .block-editor-block-variation-transforms");return n&&(n.style.display=t.isConfirmationField?"none":"inline-block",clearInterval(e)),()=>{clearInterval(e)}}),10)}})),g?(setTimeout((()=>{(0,jr.dispatch)(j.store).removeBlock(s)}),10),null):(0,A.createElement)("div",v,(0,A.createElement)(Oi,{attributes:t,clientId:s,name:r,setAttributes:i,inspectorSupports:a,context:o}),(0,A.createElement)(hs,{attributes:t,setAttributes:i,block:l,clientId:s,context:o}),a.customFill&&(0,A.createElement)(q.Fill,{name:`llmsInspectorControlsFill.${a.customFill}.${s}`},d(t,i,e)),c.after&&(0,A.createElement)(q.Fill,{name:`llmsEditFill.after.${c.after}.${s}`},u(t,i,e)))},save:function(e){const{attributes:t}=e;return t}},Ni={attributes:{fieldLayout:{type:"string",default:"columns"}},supports:{llms_field_group:!0,llms_field_inspector:!1},providesContext:{"llms/fieldGroup/fieldLayout":"fieldLayout"},llmsInnerBlocks:{template:[],allowed:[],lock:"insert"},edit:function(e){const{attributes:t,clientId:n,name:r,setAttributes:l}=e,{fieldLayout:s}=t,{getBlock:o}=(0,jr.select)(j.store),i=o(n),a=(0,Gr.getBlockType)(r),{allowed:c,template:u,lock:d}=a.llmsInnerBlocks,p=i&&i.innerBlocks.length&&"llms/form-field-confirm-group"===i.name?i.innerBlocks[a.findControllerBlockIndex(i.innerBlocks)]:null,m=p?(0,Gr.getBlockType)(p.name):null,f=m?m.supports.llms_edit_fill:{after:!1},h=a.supports.llms_field_inspector,g=a.providesContext&&a.providesContext["llms/fieldGroup/fieldLayout"];let v="columns"===s?"horizontal":"vertical";return g||(v="vertical"),(0,A.createElement)("div",(0,j.useBlockProps)(),(0,A.createElement)(j.InspectorControls,null,(0,A.createElement)(q.PanelBody,null,g&&(0,A.createElement)(Mi,Q({},e,{block:i})),h.customFill&&a.fillInspectorControls(t,l,e))),(0,A.createElement)("div",{className:"llms-field-group","data-field-layout":g?s:"stacked"},(0,A.createElement)(j.InnerBlocks,{allowedBlocks:c,template:"function"==typeof u?u({attributes:t,clientId:n,block:i,blockType:a}):u,templateLock:d,orientation:v})),f.after&&(0,A.createElement)(q.Slot,{name:`llmsEditFill.after.${f.after}.${p.clientId}`}))},save:function(){return(0,A.createElement)(j.InnerBlocks.Content,null)}},Ai=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"field";const t="field"===e?Vi:Ni;return(0,Fr.merge)({},(0,Fr.cloneDeep)(Ri),t)};function Fi(){return(0,Fr.cloneDeep)(["llms_form","wp_block"])}function Bi(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];e=(0,Fr.cloneDeep)(e);for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:2,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const n=[];for(let r=1;r<=e;r++)n.push({default:t&&t>0?"yes":"no",
+// Translators: %d = Option index in the list of options.
+text:(0,$.sprintf)((0,$.__)("Option %d","lifterlms"),r),
+// Translators: %d = Option index in the list of options.
+key:(0,$.sprintf)((0,$.__)("option_%d","lifterlms"),r)}),t--;return n}const zi=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512"},(0,A.createElement)(q.Path,{d:"M32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 288zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z"})),$i="llms/form-field-confirm-group",Ui=Fi(),ji=!0;function qi(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{id:t}=e;let{match:n}=e;return t&&!n&&(n=`${t}_confirm`),{...e,match:n,columns:6,last_column:!1,isConfirmationControlField:!0,llms_visibility:"off"}}function Gi(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{id:t,name:n,match:r}=e;return t&&!r&&(r=t,t=`${t}_confirm`,n=`${n}_confirm`),{...e,id:t,name:n,match:r,label:e.label?
+// Translators: %s label of the controller field.
+(0,$.sprintf)((0,$.__)("Confirm %s","lifterlms"),e.label):"",columns:6,last_column:!0,data_store:!1,data_store_key:!1,isConfirmationField:!0,llms_visibility:"off"}}function Wi(e){const{unloadField:t}=(0,jr.dispatch)(wl);t(e)}const Ki=["llms/form-field-text","llms/form-field-user-email","llms/form-field-user-login","llms/form-field-user-password"],Yi={from:[],to:[]};Ki.forEach((e=>{Yi.from.push({type:"block",blocks:[e],transform:t=>{Wi(t.name);const{llms_visibility:n}=t,r=qi(t),l=Gi(t),s=[(0,Gr.createBlock)(e,r),(0,Gr.createBlock)("llms/form-field-text",l)];return(0,Gr.createBlock)($i,{llms_visibility:n},(0,$.isRTL)()?s.reverse():s)}}),Yi.to.push({type:"block",blocks:[e],isMatch:()=>{const{getSelectedBlock:t}=(0,jr.select)(j.store),{innerBlocks:n}=t(),r=n[Xi(n)],{name:l}=r||{};return l===e},transform:(e,t)=>{const{llms_visibility:n}=e,r=t[Xi(t)],{name:l,attributes:s}=r;return Wi(s.name),(0,Gr.createBlock)(l,{...s,columns:12,last_column:!0,isConfirmationControlField:!1,match:"",llms_visibility:n})}})}));const Xi=e=>e.findIndex((e=>{let{attributes:t}=e;return t.isConfirmationControlField})),Qi=Bi(Ai("group"),{title:(0,$.__)("Input Confirmation Group","lifterlms"),description:(0,$.__)("Adds a required confirmation field to an input field.","lifterlms"),icon:zi,category:"llms-custom-fields",transforms:Yi,fillInspectorControls:(e,t,n)=>{const{clientId:r}=n;return(0,A.createElement)(q.Button,{isDestructive:!0,onClick:()=>function(e){const{getBlock:t}=(0,jr.select)(j.store),{replaceBlock:n}=(0,jr.dispatch)(j.store),r=t(e),{innerBlocks:l}=r,{llms_visibility:s}=r.attributes,{name:o,attributes:i}=l[Xi(l)];Wi(i.name),n(e,(0,Gr.createBlock)(o,{...i,columns:12,last_column:!0,isConfirmationControlField:!1,match:"",llms_visibility:s}))}(r)},(0,$.__)("Remove confirmation field","lifterlms"))},findControllerBlockIndex:Xi,supports:{llms_field_inspector:{customFill:"confirmGroupAdditionalControls"},inserter:!1},llmsInnerBlocks:{allowed:Ki,template:e=>{let{block:t}=e,n=null;return t&&t.innerBlocks.length||(n=[["llms/form-field-text",qi()],["llms/form-field-text",Gi()]]),n}}}),Zi=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512"},(0,A.createElement)(F.Path,{d:"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"})),Ji="llms/form-field-checkboxes",ea=Fi(),ta=!1,na=Bi(Ai(),{title:(0,$.__)("Checkboxes","lifterlms"),description:(0,$.__)("A single checkbox toggle or a group of multiple checkboxes.","lifterlms"),icon:Zi,category:"llms-custom-fields",supports:{llms_field_inspector:{options:!0}},attributes:{field:{__default:"checkbox"},options:{__default:Hi(2,0)}},transforms:{from:[{type:"block",blocks:["llms/form-field-radio","llms/form-field-select"],transform:e=>(0,Gr.createBlock)(Ji,{...e,field:na.attributes.field.__default})}]}}),ra=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(F.Path,{d:"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z"})),la="llms/form-field-radio",sa=Fi(),oa=!1,ia=Bi(na,{title:(0,$.__)("Radio","lifterlms"),description:(0,$.__)("A group of radio inputs which can be populated with any number of options.","lifterlms"),icon:ra,attributes:{field:{__default:"radio"},options:{__default:Hi(2,1)}},transforms:{from:[{type:"block",blocks:["llms/form-field-checkboxes","llms/form-field-select"],transform:e=>(0,Gr.createBlock)(la,{...e,field:ia.attributes.field.__default})}]}}),aa=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512"},(0,A.createElement)(q.Path,{d:"M384 432c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0zm64-16c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z"})),ca="llms/form-field-select",ua=Fi(),da=!1,pa=Bi(ia,{title:(0,$.__)("Dropdown","lifterlms"),description:(0,$.__)("A select field which can be populated with any number of options.","lifterlms"),icon:aa,attributes:{field:{__default:"select"}},supports:{llms_field_inspector:{placeholder:!0}},transforms:{from:[{type:"block",blocks:["llms/form-field-checkboxes","llms/form-field-radio"],transform:e=>(0,Gr.createBlock)(ca,{...e,field:pa.attributes.field.__default})}]}}),ma=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(q.Path,{d:"M448 0h-384c-8.832 0-16 7.168-16 16v96c0 8.832 7.168 16 16 16h16c8.832 0 16-7.168 16-16l32-48h96v384l-80 32c-8.832 0-16 7.152-16 16s7.168 16 16 16h224c8.848 0 16-7.152 16-16s-7.152-16-16-16l-80-32v-384h96l32 48c0 8.832 7.152 16 16 16h16c8.848 0 16-7.168 16-16v-96c0-8.832-7.152-16-16-16z"})),fa=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512"},(0,A.createElement)(F.Path,{d:"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128h95.1l11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H347.1L325.8 320H384c17.7 0 32 14.3 32 32s-14.3 32-32 32H315.1l-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7H155.1l-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h68.9l21.3-128H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h68.9l11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320h95.1l21.3-128H187.1z"})),ha=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(q.Path,{d:"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"})),ga=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512"},(0,A.createElement)(F.Path,{d:"M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"})),va=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(F.Path,{d:"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z"})),ba=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 640 512"},(0,A.createElement)(q.Path,{d:"M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z"})),_a=Ai(),ya="llms/form-field-text",wa=Fi(),Ea=!0,xa=[{name:"text",title:(0,$.__)("Text","lifterlms"),description:(0,$.__)("An input field which accepts any form of text.","lifterlms"),isDefault:!0,icon:ma},{name:"email",title:(0,$.__)("Email","lifterlms"),description:(0,$.__)("A text input field which only accepts an email address.","lifterlms"),icon:ha},{name:"password",title:(0,$.__)("Password","lifterlms"),description:(0,$.__)("User password confirmation field.","lifterlms"),icon:ga,scope:[]},{name:"number",title:(0,$.__)("Number","lifterlms"),description:(0,$.__)("An input field which only accepts numeric input.","lifterlms"),icon:fa,attributes:{html_attrs:{min:"",max:""}}},{name:"tel",title:(0,$.__)("Phone Number","lifterlms"),description:(0,$.__)("An input field which only accepts phone numbers.","lifterlms"),icon:va},{name:"url",title:(0,$.__)("Website Address / URL","lifterlms"),description:(0,$.__)("An input field which only accepts a website address or URL.","lifterlms"),icon:ba}];xa.forEach((e=>{e.scope=e.scope||["block","inserter","transform"],window.llmsBlocks.variationIconCanBeObject&&(e.icon={..._a.icon,src:e.icon}),e.attributes||(e.attributes={}),e.attributes.field=e.name,e.isActive=(e,t)=>e.field===t.field}));const Ca=Bi(_a,{title:(0,$.__)("Text","lifterlms"),description:(0,$.__)("A simple text input field.","lifterlms"),icon:ma,usesContext:["llms/fieldGroup/fieldLayout"],supports:{inserter:!1,llms_field_inspector:{customFill:"fieldTextAdditionalControls"}},variations:xa,fillInspectorControls:(e,t)=>{if(e.isConfirmationField||"number"!==e.field)return;const{html_attrs:n}=e,{min:r,max:l}=n;return(0,A.createElement)(A.Fragment,null,(0,A.createElement)(q.TextControl,{label:(0,$.__)("Minimum Value","lifterlms"),help:(0,$.__)("Specify the minimum allowed value. Leave blank for no minimum.","lifterlms"),value:r,type:"number",onChange:e=>t({html_attrs:{...n,min:e}})}),(0,A.createElement)(q.TextControl,{label:(0,$.__)("Maximum Value","lifterlms"),help:(0,$.__)("Specify the maximum allowed value. Leave blank for no maximum.","lifterlms"),value:l,type:"number",onChange:e=>t({html_attrs:{...n,max:e}})}))}}),ka=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512"},(0,A.createElement)(q.Path,{d:"M192 32h64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H384l0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352H288V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H192c-88.4 0-160-71.6-160-160s71.6-160 160-160z"})),Sa="llms/form-field-textarea",Oa=!1,Ia=Bi(Ca,{title:(0,$.__)("Textarea","lifterlms"),description:(0,$.__)("A text field accepting multiple lines of user information.","lifterlms"),icon:ka,category:"llms-custom-fields",supports:{inserter:!0,llms_field_inspector:{customFill:"fieldTextarea"}},attributes:{field:{__default:"textarea"},html_attrs:{__default:{rows:4}}},fillInspectorControls:(e,t)=>{const{html_attrs:n}=e,{rows:r}=n;return(0,A.createElement)(q.TextControl,{label:(0,$.__)("Rows","lifterlms"),help:(0,$.__)("Specify the number of text rows for the textarea input.","lifterlms"),value:r,type:"number",onChange:e=>t({html_attrs:{...n,rows:e}}),min:"2",step:"1"})},transforms:{from:[{type:"block",blocks:["llms/form-field-text"],transform:e=>(0,Gr.createBlock)(Sa,{...e,html_attrs:{...e.html_attrs,rows:4},field:"textarea"})}],to:[{type:"block",blocks:["llms/form-field-text"],transform:e=>(0,Gr.createBlock)("llms/form-field-text",{...e,field:"text"})}]}},["transforms","variations"]),Ta=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},(0,A.createElement)(F.Path,{d:"M64 64C28.7 64 0 92.7 0 128v64c0 8.8 7.4 15.7 15.7 18.6C34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320v64c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V320c0-8.8-7.4-15.7-15.7-18.6C541.5 294.9 528 277 528 256s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6V128c0-35.3-28.7-64-64-64H64zm64 112l0 160c0 8.8 7.2 16 16 16H432c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16zM96 160c0-17.7 14.3-32 32-32H448c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V160z"})),Pa="llms/form-field-redeem-voucher",Ma=!0,Da=Bi(Ca,{title:(0,$.__)("Voucher Code Redemption","lifterlms"),description:(0,$.__)("Allows user to redeem a voucher code during account registration.","lifterlms"),icon:Ta,supports:{inserter:!0,multiple:!1,llms_field_inspector:{id:!1,name:!1,storage:!1,customFill:"redeemVoucher"}},attributes:{id:{__default:"llms_voucher"},field:{__default:"text"},label:{__default:(0,$.__)("Have a voucher?","lifterlms")},name:{__default:"llms_voucher"},placeholder:{__default:(0,$.__)("Voucher Code","lifterlms")},data_store:{__default:!1},data_store_key:{__default:!1},toggleable:{__default:!1}},fillInspectorControls:(e,t)=>{const{toggleable:n,required:r}=e;return r?null:(0,A.createElement)(q.ToggleControl,{label:(0,$.__)("Toggleable","lifterlms"),checked:!!n,onChange:()=>t({toggleable:!n}),help:n?(0,$.__)("Field is revealed when the toggle is clicked.","lifterlms"):(0,$.__)("Field is always visible.","lifterlms")})}},["transforms","variations"]),La=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 384 512"},(0,A.createElement)(F.Path,{d:"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM128 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 432c0-44.2 35.8-80 80-80h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16z"})),Ra="llms/form-field-user-display-name",Va=!0,Na=Bi(Ca,{title:(0,$.__)("User Display Name","lifterlms"),description:(0,$.__)("Allows a user to choose how their name will be displayed publicly on the site.","lifterlms"),icon:La,supports:{inserter:!0,multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!1,storage:!1}},attributes:{id:{__default:"display_name"},field:{__default:"text"},label:{__default:(0,$.__)("Display Name","lifterlms")},name:{__default:"display_name"},required:{__default:!0},data_store:{__default:"users"},data_store_key:{__default:"display_name"}}},["transforms","variations"]),Aa=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(F.Path,{d:"M399 384.2C376.9 345.8 335.4 320 288 320H224c-47.4 0-88.9 25.8-111 64.2c35.2 39.2 86.2 63.8 143 63.8s107.8-24.7 143-63.8zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 16a72 72 0 1 0 0-144 72 72 0 1 0 0 144z"})),Fa="llms/form-field-user-login",Ba=!0,Ha=Bi(Ca,{title:(0,$.__)("User Login","lifterlms"),description:(0,$.__)("Field used to collect a user's account username. If this field is omitted a username will be automatically generated based off their email address. Users can always login using either their email address or username.","lifterlms"),icon:Aa,supports:{inserter:!0,multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!1,storage:!1}},attributes:{id:{__default:"user_login"},field:{__default:"text"},label:{__default:(0,$.__)("Username","lifterlms")},name:{__default:"user_login"},required:{__default:!0},data_store:{__default:"users"},data_store_key:{__default:"user_login"},llms_visibility:{default:"logged_out"}}},["transforms","variations"]),za="llms/form-field-user-email",$a=!0,Ua=Bi(Ca,{title:(0,$.__)("User Email","lifterlms"),description:(0,$.__)("A special field used to collect a user's account email address.","lifterlms"),icon:ha,supports:{inserter:!0,multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!1,storage:!1}},attributes:{id:{__default:"email_address"},field:{__default:"email"},label:{__default:(0,$.__)("Email Address","lifterlms")},name:{__default:"email_address"},required:{__default:!0},data_store:{__default:"users"},data_store_key:{__default:"user_email"}}},["transforms","variations"]),ja=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512"},(0,A.createElement)(F.Path,{d:"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3z"})),qa="llms/form-field-user-first-name",Ga=!0,Wa=Bi(Ca,{title:(0,$.__)("First Name","lifterlms"),description:(0,$.__)("A special field used to collect a user's first name.","lifterlms"),icon:ja,supports:{multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!0,storage:!1}},attributes:{id:{__default:"first_name"},field:{__default:"text"},label:{__default:(0,$.__)("First Name","lifterlms")},name:{__default:"first_name"},required:{__default:!0},data_store:{__default:"usermeta"},data_store_key:{__default:"first_name"}},parent:["llms/form-field-user-name"],usesContext:["llms/fieldGroup/fieldLayout"]},["transforms","variations"]),Ka="llms/form-field-user-last-name",Ya=!0,Xa=Bi(Wa,{title:(0,$.__)("Last Name","lifterlms"),description:(0,$.__)("A special field used to collect a user's last name.","lifterlms"),attributes:{id:{__default:"last_name"},label:{__default:(0,$.__)("Last Name","lifterlms")},name:{__default:"last_name"},data_store_key:{__default:"last_name"}}}),Qa="llms/form-field-user-name",Za=Fi(),Ja=!0,ec=Bi(Ai("group"),{title:(0,$.__)("User name","lifterlms"),description:(0,$.__)("A special field used to collect a user's first and last name.","lifterlms"),icon:ja,supports:{inserter:!0,multiple:!1},llmsInnerBlocks:{allowed:["llms/form-field-user-first-name","llms/form-field-user-last-name"],template:[["llms/form-field-user-first-name",{columns:6,last_column:!1}],["llms/form-field-user-last-name",{columns:6,last_column:!0}]]}}),tc="llms/form-field-user-password",nc=!0;function rc(e,t){return{html_attrs:{...e,minlength:t}}}const lc=Bi(Ca,{title:(0,$.__)("User Password","lifterlms"),description:(0,$.__)("A special field used to collect a user's account password.","lifterlms"),icon:ga,supports:{inserter:!0,multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!1,storage:!1,customFill:"userPassAdditionalControls"},llms_edit_fill:{after:"userPassStrengthMeter"}},attributes:{id:{__default:"password"},field:{__default:"password"},label:{__default:(0,$.__)("Password","lifterlms")},name:{__default:"password"},required:{__default:!0},data_store:{__default:"users"},data_store_key:{__default:"user_pass"},meter:{type:"boolean",__default:!0},meter_description:{type:"string",__default:(0,$.__)("A strong password is required with at least 8 characters. To make it stronger, use both upper and lower case letters, numbers, and symbols.","lifterlms")},min_strength:{type:"string",__default:"strong"},html_attrs:{__default:{minlength:8}}},fillEditAfter:(e,t)=>{const{meter:n,meter_description:r}=e;return n?(0,A.createElement)(A.Fragment,null,(0,A.createElement)("div",{className:"llms-pwd-meter"},(0,A.createElement)("div",null,(0,$.__)("Very Weak","lifterlms"))),(0,A.createElement)(j.RichText,{style:{marginTop:0},tagName:"p",value:r,onChange:e=>t({meter_description:e}),allowedFormats:["core/bold","core/italic"],"aria-label":r?(0,$.__)("Password strength meter description","lifterlms"):(0,$.__)("Empty Password strength meter description; start writing to add a label"),placeholder:(0,$.__)("Enter a description for the password strength meter","lifterlms")})):null},fillInspectorControls:(e,t)=>{const{isConfirmationControlField:n,isConfirmationField:r,meter:l,min_strength:s,html_attrs:o}=e,{minlength:i}=o;if(r)return;return(0,A.createElement)(A.Fragment,null,(0,A.createElement)(q.ToggleControl,{label:(0,$.__)("Password strength meter","lifterlms"),help:l?(0,$.__)("Password strength meter is enabled.","lifterlms"):(0,$.__)("Password strength meter is disabled.","lifterlms"),checked:l,onChange:()=>t({meter:!l})}),l&&(0,A.createElement)(q.SelectControl,{label:(0,$.__)("Minimum Password Strength","lifterlms"),value:s,onChange:e=>t({min_strength:e}),options:[{value:"strong",label:(0,$.__)("Strong","lifterlms")},{value:"medium",label:(0,$.__)("Medium","lifterlms")},{value:"weak",label:(0,$.__)("Weak","lifterlms")}]}),(0,A.createElement)(q.TextControl,{label:(0,$.__)("Minimum Password Length","lifterlms"),value:i,type:"number",min:"6",onChange:e=>(e=>{t(rc(o,e)),n&&function(e){const{getSelectedBlockClientId:t}=(0,jr.select)(j.store),{updateBlockAttributes:n}=(0,jr.dispatch)(j.store),r=Ii(t()),{attributes:l,clientId:s}=r,{html_attrs:o}=l;n(s,rc(o,e))}(e)})(1*e)}))}},["transforms","variations"]),sc=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},(0,A.createElement)(q.Path,{d:"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm80 256h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm256-32H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16z"})),oc="llms/form-field-user-address",ic=Fi(),ac=!0,cc=Bi(Ai("group"),{title:(0,$.__)("User Address","lifterlms"),description:(0,$.__)("A group of fields used to collect a user's full address.","lifterlms"),icon:sc,supports:{inserter:!0,multiple:!1},llmsInnerBlocks:{allowed:["llms/form-field-user-address-street","llms/form-field-user-address-city","llms/form-field-user-address-country","llms/form-field-user-address-region"],template:[["llms/form-field-user-address-street"],["llms/form-field-user-address-city"],["llms/form-field-user-address-country"],["llms/form-field-user-address-region"]]}},["providesContext"]),uc="llms/form-field-user-address-street",dc=Fi(),pc=!0,mc=Bi(Ai("group"),{title:(0,$.__)("User Street Address","lifterlms"),description:(0,$.__)("Collect a user's street address.","lifterlms"),icon:sc,supports:{multiple:!1},llmsInnerBlocks:{allowed:["llms/form-field-user-address-street-primary","llms/form-field-user-address-street-secondary"],template:[["llms/form-field-user-address-street-primary",{columns:8,last_column:!1}],["llms/form-field-user-address-street-secondary",{columns:4,last_column:!0}]]},parent:["llms/form-field-user-name"]}),fc=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},(0,A.createElement)(q.Path,{d:"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c0 2.7-.2 5.4-.5 8.1V472c0 22.1-17.9 40-40 40H456c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1H416 392c-22.1 0-40-17.9-40-40V448 384c0-17.7-14.3-32-32-32H256c-17.7 0-32 14.3-32 32v64 24c0 22.1-17.9 40-40 40H160 128.1c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2H104c-22.1 0-40-17.9-40-40V360c0-.9 0-1.9 .1-2.8V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z"})),hc="llms/form-field-user-address-street-primary",gc=!0,vc=Bi(Ca,{title:(0,$.__)("User Street Address","lifterlms"),description:(0,$.__)("A special field used to collect a user's street address.","lifterlms"),icon:fc,supports:{multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!0,storage:!1}},attributes:{id:{__default:"llms_billing_address_1"},label:{__default:(0,$.__)("Address","lifterlms")},name:{__default:"llms_billing_address_1"},required:{__default:!0},data_store:{__default:"usermeta"},data_store_key:{__default:"llms_billing_address_1"}},parent:["llms/form-field-user-address-street"],usesContext:["llms/fieldGroup/fieldLayout"]},["transforms","variations"]),bc="llms/form-field-user-address-street-secondary",_c=!0,yc=Bi(vc,{title:(0,$.__)("User Street Address Additional Information","lifterlms"),description:(0,$.__)("A special field used to collect a user's street address.","lifterlms"),attributes:{id:{__default:"llms_billing_address_2"},label:{__default:""},placeholder:{__default:(0,$.__)("Apartment, suite, etc…","lifterlms")},name:{__default:"llms_billing_address_2"},required:{__default:!1},data_store_key:{__default:"llms_billing_address_2"},label_show_empty:{__default:!0}},usesContext:["llms/fieldGroup/fieldLayout"]},["transforms","variations"]),wc=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},(0,A.createElement)(q.Path,{d:"M408 120c0 54.6-73.1 151.9-105.2 192c-7.7 9.6-22 9.6-29.6 0C241.1 271.9 168 174.6 168 120C168 53.7 221.7 0 288 0s120 53.7 120 120zm8 80.4c3.5-6.9 6.7-13.8 9.6-20.6c.5-1.2 1-2.5 1.5-3.7l116-46.4C558.9 123.4 576 135 576 152V422.8c0 9.8-6 18.6-15.1 22.3L416 503V200.4zM137.6 138.3c2.4 14.1 7.2 28.3 12.8 41.5c2.9 6.8 6.1 13.7 9.6 20.6V451.8L32.9 502.7C17.1 509 0 497.4 0 480.4V209.6c0-9.8 6-18.6 15.1-22.3l122.6-49zM327.8 332c13.9-17.4 35.7-45.7 56.2-77V504.3L192 449.4V255c20.5 31.3 42.3 59.6 56.2 77c20.5 25.6 59.1 25.6 79.6 0zM288 152a40 40 0 1 0 0-80 40 40 0 1 0 0 80z"})),Ec="llms/form-field-user-address-city",xc=!0,Cc=Bi(Ca,{title:(0,$.__)("User City","lifterlms"),description:(0,$.__)("A special field used to collect a user's billing city.","lifterlms"),icon:wc,supports:{multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!0,match:!1,storage:!1}},attributes:{id:{__default:"llms_billing_city"},label:{__default:(0,$.__)("City","lifterlms")},name:{__default:"llms_billing_city"},required:{__default:!0},data_store:{__default:"usermeta"},data_store_key:{__default:"llms_billing_city"}},parent:["llms/form-field-user-address"]},["transforms","variations"]),kc=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},(0,A.createElement)(q.Path,{d:"M57.7 193l9.4 16.4c8.3 14.5 21.9 25.2 38 29.8L163 255.7c17.2 4.9 29 20.6 29 38.5v39.9c0 11 6.2 21 16 25.9s16 14.9 16 25.9v39c0 15.6 14.9 26.9 29.9 22.6c16.1-4.6 28.6-17.5 32.7-33.8l2.8-11.2c4.2-16.9 15.2-31.4 30.3-40l8.1-4.6c15-8.5 24.2-24.5 24.2-41.7v-8.3c0-12.7-5.1-24.9-14.1-33.9l-3.9-3.9c-9-9-21.2-14.1-33.9-14.1H257c-11.1 0-22.1-2.9-31.8-8.4l-34.5-19.7c-4.3-2.5-7.6-6.5-9.2-11.2c-3.2-9.6 1.1-20 10.2-24.5l5.9-3c6.6-3.3 14.3-3.9 21.3-1.5l23.2 7.7c8.2 2.7 17.2-.4 21.9-7.5c4.7-7 4.2-16.3-1.2-22.8l-13.6-16.3c-10-12-9.9-29.5 .3-41.3l15.7-18.3c8.8-10.3 10.2-25 3.5-36.7l-2.4-4.2c-3.5-.2-6.9-.3-10.4-.3C163.1 48 84.4 108.9 57.7 193zM464 256c0-36.8-9.6-71.4-26.4-101.5L412 164.8c-15.7 6.3-23.8 23.8-18.5 39.8l16.9 50.7c3.5 10.4 12 18.3 22.6 20.9l29.1 7.3c1.2-9 1.8-18.2 1.8-27.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"})),Sc="llms/form-field-user-address-country",Oc=!0,Ic=Bi(pa,{title:(0,$.__)("User Country","lifterlms"),description:(0,$.__)("A special field used to collect a user's billing country.","lifterlms"),icon:kc,supports:{multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!0,match:!1,storage:!1,options:!1}},attributes:{id:{__default:"llms_billing_country"},label:{__default:(0,$.__)("Country","lifterlms")},name:{__default:"llms_billing_country"},required:{__default:!0},data_store:{__default:"usermeta"},data_store_key:{__default:"llms_billing_country"},options_preset:{__default:"countries"},placeholder:{__default:(0,$.__)("Select a Country","lifterlms")}},parent:["llms/form-field-user-address"]},["transforms"]),Tc="llms/form-field-user-address-region",Pc=Fi(),Mc=!0,Dc=Bi(Ai("group"),{title:(0,$.__)("User Street Address","lifterlms"),description:(0,$.__)("Collect a user's street address.","lifterlms"),icon:{src:sc},supports:{multiple:!1},parent:["llms/form-field-user-name"],llmsInnerBlocks:{allowed:["llms/form-field-user-address-state","llms/form-field-user-address-postal-code"],template:[["llms/form-field-user-address-state",{columns:6,last_column:!1}],["llms/form-field-user-address-postal-code",{columns:6,last_column:!0}]]}}),Lc=(0,A.createElement)(F.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 384 512"},(0,A.createElement)(F.Path,{d:"M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"})),Rc="llms/form-field-user-address-state",Vc=!0,Nc=Bi(pa,{title:(0,$.__)("User Country","lifterlms"),description:(0,$.__)("A special field used to collect a user's billing country.","lifterlms"),icon:Lc,supports:{multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!0,storage:!1,options:!1}},attributes:{id:{__default:"llms_billing_state"},label:{__default:(0,$.__)("State / Region","lifterlms")},name:{__default:"llms_billing_state"},required:{__default:!0},data_store:{__default:"usermeta"},data_store_key:{__default:"llms_billing_state"},options_preset:{__default:"states"},placeholder:{__default:(0,$.__)("Select a State / Region","lifterlms")}},parent:["llms/form-field-user-address-region"],usesContext:["llms/fieldGroup/fieldLayout"]},["transforms"]),Ac=(0,A.createElement)(q.SVG,{className:"llms-block-icon",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 320 512"},(0,A.createElement)(q.Path,{d:"M16 144a144 144 0 1 1 288 0A144 144 0 1 1 16 144zM160 80c8.8 0 16-7.2 16-16s-7.2-16-16-16c-53 0-96 43-96 96c0 8.8 7.2 16 16 16s16-7.2 16-16c0-35.3 28.7-64 64-64zM128 480V317.1c10.4 1.9 21.1 2.9 32 2.9s21.6-1 32-2.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32z"})),Fc="llms/form-field-user-address-postal-code",Bc=!0,Hc=Bi(Ca,{title:(0,$.__)("User Postal Code","lifterlms"),description:(0,$.__)("A special field used to collect a user's postal or zip code.","lifterlms"),icon:Ac,supports:{multiple:!1,llms_field_inspector:{id:!1,name:!1,required:!0,match:!1,storage:!1}},attributes:{id:{__default:"llms_billing_zip"},label:{__default:(0,$.__)("Postal / Zip Code","lifterlms")},name:{__default:"llms_billing_zip"},required:{__default:!0},data_store:{__default:"usermeta"},data_store_key:{__default:"llms_billing_zip"}},parent:["llms/form-field-user-address-region"],usesContext:["llms/fieldGroup/fieldLayout"]},["transforms","variations"]),zc="llms/form-field-user-phone",$c=!0,Uc=Bi(Ca,{title:(0,$.__)("User Phone","lifterlms"),description:(0,$.__)("A field used to collect a user's phone number.","lifterlms"),icon:va,supports:{inserter:!0,multiple:!1,llms_field_inspector:{id:!1,name:!1,storage:!1}},attributes:{id:{__default:"llms_phone"},field:{__default:"tel"},label:{__default:(0,$.__)("Phone Number","lifterlms")},name:{__default:"llms_phone"},data_store:{__default:"usermeta"},data_store_key:{__default:"llms_phone"}}},["transforms","variations"]),jc=()=>{const e=(0,H.applyFilters)("llms.formBlocksSafelist",["core/block","core/paragraph","core/heading","core/image","core/html","core/column","core/columns","core/group","core/separator","core/spacer"]),{getCurrentPost:t}=(0,jr.select)(qr.store),{meta:n={}}=t(),{_llms_form_location:r}=n;(0,Gr.getBlockTypes)().forEach((t=>{let{name:n}=t;(t=>-1===e.indexOf(t)&&(0===t.indexOf("llms/form-field-redeem-voucher")?"registration"!==r:0===t.indexOf("llms/form-field-user-login")?"account"===r:-1===t.indexOf("llms/form-field")))(n)&&(0,Gr.unregisterBlockType)(n)}))};Ur()((()=>{const{getCurrentPost:e}=(0,jr.select)(qr.store);let t=!1;const n=(0,jr.subscribe)((()=>{const r=e();if(!1===t&&0!==Object.keys(r).length){t=!0,n();const{type:e,is_llms_field:l}=r;"llms_form"===e?(Xr(),jc(),kl()):"wp_block"===e&&"yes"===l&&(jc(),kl())}}))}));const qc=window.wp.plugins,Gc=window.wp.editPost,Wc=(0,H.applyFilters)("llms_blocks_post_visibility_options",[{value:"catalog_search",label:(0,$.__)("Visible","lifterlms"),info:(0,$.__)("Visible in the catalog and search results.","lifterlms")},{value:"catalog",label:(0,$.__)("Catalog only","lifterlms"),info:(0,$.__)("Only visible in the catalog.","lifterlms")},{value:"search",label:(0,$.__)("Search only","lifterlms"),info:(0,$.__)("Only visible in search results.","lifterlms")},{value:"hidden",label:(0,$.__)("Hidden","lifterlms"),info:(0,$.__)("Hidden from catalog and search results.","lifterlms")}]),Kc=(0,jr.withSelect)((e=>({visibility:e("core/editor").getEditedPostAttribute("visibility")})))((function(e){let{visibility:t}=e;return Wc.find((e=>{let{value:n}=e;return n===t})).label}));class Yc extends A.Component{render(){const{onUpdateVisibility:e,instanceId:t,visibility:n}=this.props;return(0,A.createElement)(Gc.PluginPostStatusInfo,{className:"llms-post-visibility"},(0,A.createElement)("span",null,(0,$.__)("Catalog & Search Visibility","lifterlms")),(0,A.createElement)("div",null,(0,A.createElement)(q.Dropdown,{className:"llms-post-visibility-dropdown",contentClassName:"llms-post-visibility-content edit-post-post-visibility__dialog",renderToggle:e=>{let{isOpen:t,onToggle:n}=e;return(0,A.createElement)(q.Button,{onClick:n,"aria-expanded":t,isLink:!0},(0,A.createElement)(Kc,null))},renderContent:()=>(0,A.createElement)("fieldset",{key:"visibility-selector",className:"editor-post-visibility__dialog-fieldset"},(0,A.createElement)("legend",{className:"editor-post-visibility__dialog-legend"},(0,$.__)("Catalog Visibility","lifterlms")),Wc.map((r=>{let{value:l,label:s,info:o}=r;return(0,A.createElement)("div",{key:l,className:"editor-post-visibility__choice"},(0,A.createElement)("input",{type:"radio",name:`llms-editor-post-visibility__setting-${t}`,value:l,onChange:()=>e(l),checked:l===n,id:`editor-post-${l}-${t}`,"aria-describedby":`editor-post-${l}-${t}-description`,className:"editor-post-visibility__dialog-radio"}),(0,A.createElement)("label",{htmlFor:`editor-post-${l}-${t}`,className:"editor-post-visibility__dialog-label"},s),(0,A.createElement)("p",{id:`llms-editor-post-${l}-${t}-description`,className:"editor-post-visibility__dialog-info"},o))})))})))}}const Xc=(0,U.compose)([(0,jr.withSelect)((e=>{const{getCurrentPostType:t,getEditedPostAttribute:n}=e("core/editor");return{postType:t(),visibility:n("visibility")}})),(0,jr.withDispatch)((e=>{const{editPost:t}=e("core/editor");return{onUpdateVisibility(e){t({visibility:e})}}})),(0,U.ifCondition)((e=>{let{postType:t}=e;return-1!==["course","llms_membership"].indexOf(t)})),U.withInstanceId])(Yc);(0,qc.registerPlugin)("llms-post-visibility",{render:Xc});const Qc=window.wp.richText;function Zc(e){let{text:t,onSuccess:n}=e;const r=void 0!==U.useCopyToClipboard;return(0,A.createElement)(q.Tooltip,{text:(0,$.__)("Click to copy.","lifterlms")},r&&(0,A.createElement)((()=>{const e=(0,U.useCopyToClipboard)(t,n);return(0,A.createElement)(q.Button,{isLink:!0,ref:e},t)}),null),!r&&(0,A.createElement)((()=>(0,A.createElement)(q.ClipboardButton,{isLink:!0,text:t,onCopy:n},t)),null))}function Jc(e){let{closeModal:t,isActive:n,onChange:r,searchQuery:l,value:s,defaultValue:o}=e,{userInfoFields:i}=window.llms;l&&(i=i.filter((e=>function(e,t){let{label:n,name:r,id:l,data_store_key:s}=t;const o=[n,r,l,s],i=e.toLowerCase();return o.some((e=>e.toLowerCase().includes(i)))}(l,e))));const a=!i.length;a&&i.push({data_store_key:l,label:(0,$.__)("Custom User Information","lifterlms"),id:"custom",name:l});const c=(0,H.applyFilters)("llms/userInfoShortcodes/exclude",["password"]);return i=i.filter((e=>{let{id:t}=e;return!c.includes(t)})),(0,A.createElement)(A.Fragment,null,a&&(0,A.createElement)("p",{className:"llms-error"},(0,$.__)("No fields found matching your search but you can use the shortcode below if the meta information exists in the database.","lifterlms")),(0,A.createElement)("table",{className:"llms-table zebra"},(0,A.createElement)("thead",null,(0,A.createElement)("tr",null,(0,A.createElement)("th",null,(0,$.__)("Name","lifterlms")),(0,A.createElement)("th",null,(0,$.__)("Shortcode","lifterlms")),(0,A.createElement)("th",null,(0,$.__)("Insert","lifterlms")))),(0,A.createElement)("tbody",null,i.map((e=>function(e,t,n,r,l,s){let{label:o,name:i,data_store_key:a}=e;const c=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return`[llms-user ${e}${t?` or="${t}"`:""}]`}(a,s);return(0,A.createElement)("tr",{key:i},(0,A.createElement)("td",null,o),(0,A.createElement)("td",null,(0,A.createElement)(Zc,{text:c,onSuccess:n})),(0,A.createElement)("td",null,(0,A.createElement)(q.Button,{isSecondary:!0,isSmall:!0,onClick:()=>{const e=(0,Qc.create)({html:`${c} `});n(),r(t?(0,Qc.replace)(l,/\[user .+?\]/,e):(0,Qc.insert)(l,e))}},(0,$.__)("Insert","lifterlms"))))}(e,n,t,r,s,o))))))}(0,Qc.registerFormatType)("llms/user-info-shortcodes",{title:(0,$.__)("LifterLMS User Information Shortcodes","lifterlms"),tagName:"span",className:"llms-user-sc-wrap",edit:function(e){const[t,n]=(0,A.useState)(!1),[r,l]=(0,A.useState)(""),[s,o]=(0,A.useState)(""),i=()=>n(!1),{value:a,onChange:c,isActive:u}=e;return(0,A.createElement)(A.Fragment,null,(0,A.createElement)(j.RichTextToolbarButton,{icon:(0,A.createElement)(B,null),title:(0,$.__)("Shortcodes","lifterlms"),onClick:()=>n(!0)}),t&&(0,A.createElement)(q.Modal,{className:"llms-shortcodes-modal",title:(0,$.__)("LifterLMS User Information Shortcodes","lifterlms"),onRequestClose:i},(0,A.createElement)("div",{className:"llms-shortcodes-modal--main"},(0,A.createElement)("aside",null,(0,A.createElement)(q.TextControl,{type:"search",label:(0,$.__)("Filter by label, key, or ID…","lifterlms"),onChange:e=>l(e)}),(0,A.createElement)(q.TextControl,{label:(0,$.__)("Default value","lifterlms"),onChange:e=>o(e),help:(0,$.__)("Optional text displayed when no information exists or the user is logged out.","lifterlms")})),(0,A.createElement)("section",null,(0,A.createElement)(Jc,{closeModal:i,isActive:u,onChange:c,searchQuery:r,value:a,defaultValue:s})))))}});const eu=window.wp.url;function tu(e){const{id:t,item:n,index:r,setNodeRef:l,listeners:s,manageState:o}=e,{visibility:i,name:a,label:c}=n,{updateItem:u,deleteItem:d}=o,p="visible"===i,m=0===r,[f,h]=(0,A.useState)(!1);return(0,A.createElement)(A.Fragment,null,(0,A.createElement)("div",{className:"llms-instructor--header"},(0,A.createElement)("section",null,(0,A.createElement)("strong",null,a),(0,A.createElement)("small",null,"(#",t,")")),(0,A.createElement)("aside",null,m&&(0,A.createElement)(q.Tooltip,{text:(0,$.__)("Primary Instructor","lifterlms")},(0,A.createElement)(q.Dashicon,{icon:"star-filled"})),(0,A.createElement)(Ei,{label:(0,$.__)("Reorder instructor","lifterlms"),setNodeRef:l,listeners:s}),(0,A.createElement)(q.Button,{isSmall:!0,showTooltip:!0,label:(0,$.__)("Edit instructor","lifterlms"),icon:f?"arrow-up-alt2":"arrow-down-alt2",onClick:()=>h(!f)}))),f&&(0,A.createElement)("div",{className:"llms-instructor--settings"},(0,A.createElement)(q.ToggleControl,{label:(0,$.__)("Visibility","lifterlms"),help:p?(0,$.__)("Instructor is visible on frontend","lifterlms"):(0,$.__)("Instructor is hidden on frontend","lifterlms"),checked:p,onChange:e=>u(t,{visibility:e?"visible":"hidden"})}),p&&(0,A.createElement)(q.TextControl,{label:(0,$.__)("Label","lifterlms"),value:c,onChange:e=>u(t,{label:e})}),(0,A.createElement)(q.Button,{isSecondary:!0,iconPosition:"right",href:(0,eu.addQueryArgs)("/wp-admin/user-edit.php",{user_id:t}),target:"_blank",rel:"noreferrer",style:{marginRight:"5px"}},(0,$.__)("Edit","lifterlms"),(0,A.createElement)(q.Dashicon,{icon:"external"})),!m&&(0,A.createElement)(q.Button,{isDestructive:!0,onClick:()=>d(n)},(0,$.__)("Remove","lifterlms"))))}function nu(e){let{instructors:t,roles:n,addInstructor:r}=e;return(0,A.createElement)(Cs,{roles:n,placeholder:(0,$.__)("Search…","lifterlms"),searchArgs:{exclude:t.map((e=>{let{id:t}=e;return t}))},onChange:r})}class ru extends A.Component{constructor(){super(...arguments),Y(this,"onSearchChange",(e=>{this.setState({search:e})})),Y(this,"updateInstructor",((e,t)=>{const{instructors:n}=this.state,r=n.map((n=>(e===n.id&&(n={...n,...t}),n)));this.updateInstructors(r)})),Y(this,"updateInstructors",(e=>{this.setState({instructors:e}),this.props.updateInstructors(e)})),Y(this,"addInstructor",(e=>{let{id:t,name:n}=e;const{instructors:r}=this.state;r.push({...this.getInstructorDefaults(),id:t,name:n}),this.updateInstructors(r)})),Y(this,"removeInstructor",(e=>{let{instructors:t}=this.state;t=t.filter((t=>{let{id:n}=t;return e.id!==n})),this.updateInstructors(t)})),Y(this,"render",(()=>(0,A.createElement)(q.PanelBody,{title:(0,$.__)("Instructors","lifterlms")},(0,A.createElement)(nu,{roles:this.getRoles(),instructors:this.state.instructors,addInstructor:this.addInstructor}),(0,A.createElement)(Ci,{ListItem:tu,items:this.state.instructors,itemClassName:"llms-instructor",manageState:{createItem:this.addInstructor,deleteItem:this.removeInstructor,updateItem:this.updateInstructor,updateItems:this.updateInstructors}}))));let{instructors:e}=this.props;e="string"==typeof e?JSON.parse(e):e,this.state={instructors:e||[],search:""}}getRoles(){return(0,H.applyFilters)("llms_instructor_roles",["administrator","lms_manager","instructor","instructors_assistant"])}getInstructorDefaults(){return(0,H.applyFilters)("llms_instructor_defaults",{label:(0,$.__)("Author","lifterlms"),visibility:"visible"})}}const lu=(0,jr.withSelect)((e=>{const{getEditedPostAttribute:t}=e("core/editor");return{instructors:t("instructors")}})),su=(0,jr.withDispatch)((e=>{const{editPost:t}=e("core/editor");return{updateInstructors(e){t({instructors:JSON.stringify(e)})}}})),ou=(0,U.compose)([lu,su])(ru),iu=window.wp.notices,{Fill:au,Slot:cu}=(0,q.createSlotFill)("LLMSFormDocSettings"),uu=e=>{let{children:t}=e;return(0,A.createElement)(au,null,t)};uu.Slot=cu,window.llms.plugins=window.llms.plugins||{},window.llms.plugins.LLMSFormDocSettings=uu;const du=uu;class pu extends A.Component{constructor(){super(...arguments),Y(this,"render",(()=>{if(void 0===Gc.PluginDocumentSettingPanel)return null;if("llms_form"!==(0,jr.select)(qr.store).getCurrentPostType())return null;const{location:e,link:t,showTitle:n,freeApTitle:r,setFormMetas:l}=this.props,{formLocations:s}=window.llms,o=s[e];function i(e){(0,jr.dispatch)(j.store).replaceBlocks((0,jr.select)(j.store).getBlocks().map((e=>e.clientId)),(0,Gr.parse)(e))}function a(){const e="llms-form-restore-default",t=(0,jr.select)(qr.store).getEditedPostAttribute("content"),{createSuccessNotice:n,removeNotice:r}=(0,jr.dispatch)(iu.store),{resetFields:l}=(0,jr.dispatch)(wl);l(),i(o.template),n((0,$.__)("The form has been restored to the default template.","lifterlms"),{id:e,actions:[{label:(0,$.__)("Undo","lifterlms"),onClick:()=>{l(),i(t),r(e)}}]})}return""===n&&l({_llms_form_show_title:"yes"}),(0,A.createElement)(A.Fragment,null,(0,A.createElement)(Gc.PluginDocumentSettingPanel,{className:"llms-forms-doc-settings",name:"llms-forms-doc-settings",title:(0,$.__)("Form Settings","lifterlms"),opened:!0},(0,A.createElement)(du.Slot,null,(s=>(0,A.createElement)(A.Fragment,null,(0,A.createElement)(q.PanelRow,null,(0,A.createElement)("strong",null,(0,$.__)("Location","lifterlms")),!t&&(0,A.createElement)("strong",null,o.name),t&&(0,A.createElement)(q.ExternalLink,{href:t},o.name)),(0,A.createElement)("p",{style:{marginTop:"5px"}},(0,A.createElement)("em",null,o.description)),s,(0,A.createElement)("br",null),(0,A.createElement)(q.ToggleControl,{label:(0,$.__)("Display Form Title","lifterlms"),checked:"yes"===n,help:"yes"===n?(0,$.__)("Displaying form title.","lifterlms"):(0,$.__)("Not displaying form title.","lifterlms"),onChange:e=>l({_llms_form_show_title:e?"yes":"no"})}),"checkout"===e&&"yes"===n&&(0,A.createElement)(q.TextControl,{label:(0,$.__)("Free Access Plan Form Title","lifterlms"),value:r,onChange:e=>l({_llms_form_title_free_access_plans:e}),help:(0,$.__)("The form title to be shown for free access plans.","lifterlms")}),(0,A.createElement)("br",null),(0,A.createElement)(q.PanelRow,null,(0,A.createElement)(q.Button,{isDestructive:!0,onClick:a},(0,$.__)("Revert to Default","lifterlms"))),(0,A.createElement)("p",{style:{marginTop:"5px"}},(0,A.createElement)("em",null,(0,$.__)("Replace the existing content of the form with the original default content.","lifterlms"))))))))}))}}const mu=(0,jr.withSelect)((e=>{const{getCurrentPost:t,getCurrentPostType:n,getEditedPostAttribute:r}=e(qr.store);if("llms_form"!==n())return{};const l=r("meta");return{link:t().link,location:l._llms_form_location,showTitle:l._llms_form_show_title,freeApTitle:l._llms_form_title_free_access_plans}})),fu=(0,jr.withDispatch)((e=>{const{editPost:t}=e("core/editor");return{setFormMetas(e){t({meta:e})}}})),hu=(0,U.compose)([mu,fu])(pu),gu=()=>{const e=(0,A.useRef)(null);(0,A.useEffect)((()=>{const t=document.querySelectorAll(".llms-builder-launcher")[0];if(!t)return null;for(;e.current.firstChild;)e.current.removeChild(e.current.firstChild);const n=t.cloneNode(!0);e.current.appendChild(n)}),[]);const t="llms-course-builder-panel";return(0,A.createElement)(A.Fragment,null,(0,A.createElement)(q.PanelBody,{title:(0,$.__)("Course Builder","lifterlms"),className:t,opened:!0,onToggle:()=>{document.getElementsByClassName(t)[0].classList.toggle("llms-course-builder-panel--close")}},(0,A.createElement)("div",{ref:e})))},vu="llms-launch-course-builder-top-button",bu=()=>{var e,t;let n=document.getElementsByClassName("edit-post-header-toolbar__left")[0];if(n||(n=document.getElementsByClassName("editor-document-tools__left")[0]),!n)return;const r=null!==(e=null!==(t=window?.llmsBlocks?.courseId)&&void 0!==t?t:(0,jr.select)("core/editor")?.getCurrentPostId())&&void 0!==e?e:0;setTimeout((()=>{if(document.getElementById(vu))return;const e=document.createElement("a");e.id=vu,e.href=window.llms.admin_url+"admin.php?page=llms-course-builder&course_id="+r,e.className="llms-button-primary",e.style.marginLeft="16px",e.innerHTML=(0,$.__)("Launch Course Builder","lifterlms"),n.appendChild(e)}),1)};(0,qc.registerPlugin)("post-status-info-test",{render:()=>{var e,t,n;const r=null!==(e=(0,jr.select)("core/editor")?.getCurrentPostType())&&void 0!==e?e:"";if(!["course","lesson"].includes(r))return null;const l=null!==(t=null!==(n=window?.llmsBlocks?.courseId)&&void 0!==n?n:(0,jr.select)("core/editor")?.getCurrentPostId())&&void 0!==t?t:0;return(0,A.createElement)(Gc.PluginPostStatusInfo,{className:"llms-launch-course-builder"},(0,A.createElement)(q.Button,{href:window.llms.admin_url+"admin.php?page=llms-course-builder&course_id="+l,className:"llms-button-primary"},(0,$.__)("Launch Course Builder","lifterlms")))}}),(0,qc.registerPlugin)("llms",{render:()=>{const e=(0,jr.select)("core/editor").getCurrentPostType();return["course","lesson","llms_membership"].includes(e)?(["course","lesson"].includes(e)&&(0,jr.subscribe)(bu),(0,A.createElement)(A.Fragment,null,(0,A.createElement)(Gc.PluginSidebarMoreMenuItem,{target:"llms-sidebar",icon:(0,A.createElement)(B,null)},"LifterLMS"),(0,A.createElement)(Gc.PluginSidebar,{name:"llms-sidebar",title:"LifterLMS"},["course","lesson"].includes(e)&&(0,A.createElement)(gu,null),["course","llms_membership"].includes(e)&&(0,A.createElement)(ou,null)))):null},icon:(0,A.createElement)(B,null)}),(0,qc.registerPlugin)("llms-forms-doc-settings",{render:hu,icon:""}),(()=>{const e=Yr(),t=[r,l,s,o,i,a,c,u];Object.keys(N).forEach((e=>{N[e].composed&&t.push(N[e])})),["llms_form","wp_block"].includes(e)&&(0,H.doAction)("llms_form_fields_ready",N),t.forEach((t=>{const{name:n,postTypes:r,settings:l}=t;r&&-1===r.indexOf(e)||(0,Gr.registerBlockType)(n,l)}))})();const{components:_u={}}=window.llms;window.llms.components={..._u,...d},wp.blocks.updateCategory("llms-blocks",{icon:B})})()})();
\ No newline at end of file
diff --git a/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-information-block.php b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-information-block.php
new file mode 100644
index 0000000000..c00f0d42a7
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-information-block.php
@@ -0,0 +1,183 @@
+ __( 'Course Information', 'lifterlms' ),
+ 'title_size' => 'h3',
+ 'show_length' => true,
+ 'show_difficulty' => true,
+ 'show_tracks' => true,
+ 'show_cats' => true,
+ 'show_tags' => true,
+ )
+ );
+
+ $show_wrappers = false;
+
+ if ( $attributes['show_length'] ) {
+ $show_wrappers = true;
+ add_action( $this->get_render_hook(), 'lifterlms_template_single_length', 10 );
+ }
+
+ if ( $attributes['show_difficulty'] ) {
+ $show_wrappers = true;
+ add_action( $this->get_render_hook(), 'lifterlms_template_single_difficulty', 20 );
+ }
+
+ if ( $attributes['show_tracks'] ) {
+ $show_wrappers = true;
+ add_action( $this->get_render_hook(), 'lifterlms_template_single_course_tracks', 25 );
+ }
+
+ if ( $attributes['show_cats'] ) {
+ $show_wrappers = true;
+ add_action( $this->get_render_hook(), 'lifterlms_template_single_course_categories', 30 );
+ }
+
+ if ( $attributes['show_tags'] ) {
+ $show_wrappers = true;
+ add_action( $this->get_render_hook(), 'lifterlms_template_single_course_tags', 35 );
+ }
+
+ if ( $show_wrappers ) {
+
+ $this->title = $attributes['title'];
+ $this->title_size = $attributes['title_size'];
+
+ add_filter( 'llms_course_meta_info_title', array( $this, 'filter_title' ) );
+ add_filter( 'llms_course_meta_info_title_size', array( $this, 'filter_title_size' ) );
+
+ add_action( $this->get_render_hook(), 'lifterlms_template_single_meta_wrapper_start', 5 );
+ add_action( $this->get_render_hook(), 'lifterlms_template_single_meta_wrapper_end', 50 );
+
+ }
+
+ }
+
+ /**
+ * Filters the title of the course information headline per block settings.
+ *
+ * @param string $title default title.
+ * @return string
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function filter_title( $title ) {
+ return $this->title;
+ }
+
+ /**
+ * Filters the title headline element size of the course information headline per block settings.
+ *
+ * @param string $size default size.
+ * @return string
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function filter_title_size( $size ) {
+ return $this->title_size;
+ }
+
+ /**
+ * Register meta attributes stub.
+ *
+ * Called after registering the block type.
+ *
+ * @return void
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function register_meta() {
+
+ register_meta(
+ 'post',
+ '_llms_length',
+ array(
+ 'object_subtype' => 'course',
+ 'sanitize_callback' => 'sanitize_text_field',
+ 'auth_callback' => array( $this, 'meta_auth_callback' ),
+ 'type' => 'string',
+ 'single' => true,
+ 'show_in_rest' => true,
+ )
+ );
+
+ }
+
+ /**
+ * Meta field update authorization callback.
+ *
+ * @param bool $allowed Is the update allowed.
+ * @param string $meta_key Meta keyname.
+ * @param int $object_id WP Object ID (post,comment,etc)...
+ * @param int $user_id WP User ID.
+ * @param string $cap requested capability.
+ * @param array $caps user capabilities.
+ * @return bool
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function meta_auth_callback( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ) {
+ return true;
+ }
+
+}
+
+return new LLMS_Blocks_Course_Information_Block();
diff --git a/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-progress-block.php b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-progress-block.php
new file mode 100644
index 0000000000..40b9e61f8e
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-progress-block.php
@@ -0,0 +1,90 @@
+get_render_hook(), array( $this, 'output' ), 10 );
+ }
+
+ /**
+ * Output the course progress bar
+ *
+ * @since 1.9.0
+ *
+ * @param array $attributes Optional. Block attributes. Default empty array.
+ * @return void
+ */
+ public function output( $attributes = array() ) {
+
+ $block_content = '';
+ $progress = do_shortcode( '[lifterlms_course_progress check_enrollment=1]' );
+ $class = empty( $attributes['className'] ) ? '' : $attributes['className'];
+
+ if ( $progress ) {
+ $block_content = sprintf(
+ '%4$s
',
+ $this->vendor,
+ $this->id,
+ // Take into account the custom class attribute.
+ empty( $attributes['className'] ) ? '' : ' ' . esc_attr( $attributes['className'] ),
+ $progress
+ );
+ }
+
+ /**
+ * Filters the block html
+ *
+ * @since 1.9.0
+ *
+ * @param string $block_content The block's html.
+ * @param array $attributes The block's array of attributes.
+ * @param LLMS_Blocks_Course_Progress_Block $block This block object.
+ */
+ $block_content = apply_filters( 'llms_blocks_render_course_progress_block', $block_content, $attributes, $this );
+
+ if ( $block_content ) {
+ echo wp_kses( $block_content, LLMS_ALLOWED_HTML_FORM_FIELDS );
+ }
+ }
+}
+
+return new LLMS_Blocks_Course_Progress_Block();
diff --git a/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-syllabus-block.php b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-syllabus-block.php
new file mode 100644
index 0000000000..2d2b5251ba
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-syllabus-block.php
@@ -0,0 +1,176 @@
+get_render_hook(), 'lifterlms_template_single_syllabus', 10 );
+ }
+
+ /**
+ * Retrieve custom block attributes.
+ * Necessary to override when creating ServerSideRender blocks.
+ *
+ * @since 1.0.0
+ * @deprecated 2.5.0
+ *
+ * @return array
+ */
+ public function get_attributes() {
+ llms_deprecated_function( __METHOD__, '2.5.0' );
+
+ return array_merge(
+ parent::get_attributes(),
+ array(
+ 'course_id' => array(
+ 'type' => 'int',
+ 'default' => 0,
+ ),
+ )
+ );
+ }
+
+ /**
+ * Retrieve the ID/Name of the block.
+ *
+ * @since 1.0.0
+ * @deprecated 2.5.0
+ *
+ * @return string
+ */
+ public function get_block_id() {
+ llms_deprecated_function( __METHOD__, '2.5.0' );
+
+ return sprintf( '%1$s/%2$s', $this->vendor, $this->id );
+ }
+
+ /**
+ * Output a message when no HTML was rendered.
+ *
+ * @since 1.0.0
+ * @since 1.8.0 Don't output empty render messages on the frontend.
+ * @deprecated 2.5.0
+ *
+ * @return string
+ */
+ public function get_empty_render_message() {
+ llms_deprecated_function( __METHOD__, '2.5.0' );
+
+ if ( ! is_admin() ) {
+ return '';
+ }
+
+ return __( 'No HTML was returned.', 'lifterlms' );
+ }
+
+ /**
+ * Retrieve a string which can be used to render the block.
+ *
+ * @since 1.0.0
+ * @deprecated 2.5.0
+ *
+ * @return string
+ */
+ public function get_render_hook() {
+ llms_deprecated_function( __METHOD__, '2.5.0' );
+
+ return sprintf( '%1$s_%2$s_block_render', $this->vendor, $this->id );
+ }
+
+ /**
+ * Removed hooks stub.
+ *
+ * Extending classes can use this class to remove hooks attached to the render function action.
+ *
+ * @since 1.0.0
+ * @deprecated 2.5.0
+ *
+ * @return void
+ */
+ public function remove_hooks() {
+ llms_deprecated_function( __METHOD__, '2.5.0' );
+ }
+
+ /**
+ * Renders the block type output for given attributes.
+ *
+ * @since 1.0.0
+ * @deprecated 2.5.0
+ *
+ * @param array $attributes Optional. Block attributes. Default empty array.
+ * @param string $content Optional. Block content. Default empty string.
+ * @return string
+ */
+ public function render_callback( $attributes = array(), $content = '' ) {
+ llms_deprecated_function( __METHOD__, '2.5.0' );
+
+ $this->add_hooks( $attributes, $content );
+
+ ob_start();
+ do_action( $this->get_render_hook(), $attributes, $content );
+ $ret = ob_get_clean();
+
+ $this->remove_hooks();
+
+ if ( ! $ret ) {
+ $ret = $this->get_empty_render_message();
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Register meta attributes stub.
+ *
+ * Called after registering the block type.
+ *
+ * @since 1.0.0
+ * @deprecated 2.5.0
+ *
+ * @return void
+ */
+ public function register_meta() {
+ llms_deprecated_function( __METHOD__, '2.5.0' );
+ }
+}
diff --git a/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-instructors-block.php b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-instructors-block.php
new file mode 100644
index 0000000000..04aed6ec84
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-instructors-block.php
@@ -0,0 +1,101 @@
+get_render_hook(), $func, 10 );
+
+ }
+
+ /**
+ * Retrieve custom block attributes.
+ *
+ * Necessary to override when creating ServerSideRender blocks.
+ *
+ * @since 1.0.0
+ *
+ * @return array
+ */
+ public function get_attributes() {
+ return array_merge(
+ parent::get_attributes(),
+ array(
+ 'post_id' => array(
+ 'type' => 'int',
+ 'default' => 0,
+ ),
+ )
+ );
+ }
+
+ /**
+ * Output a message when no HTML was rendered
+ *
+ * @since 1.0.0
+ * @since 1.8.0 Fixed spelling error.
+ *
+ * @return string
+ */
+ public function get_empty_render_message() {
+ return __( 'No visible instructors were found.', 'lifterlms' );
+ }
+
+}
+
+return new LLMS_Blocks_Instructors_Block();
diff --git a/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-lesson-navigation-block.php b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-lesson-navigation-block.php
new file mode 100644
index 0000000000..3a8b287593
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-lesson-navigation-block.php
@@ -0,0 +1,71 @@
+get_render_hook(), 'lifterlms_template_lesson_navigation', 10 );
+
+ }
+
+ /**
+ * Retrieve custom block attributes.
+ * Necessary to override when creating ServerSideRender blocks.
+ *
+ * @return array
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function get_attributes() {
+ return array_merge(
+ parent::get_attributes(),
+ array(
+ 'post_id' => array(
+ 'type' => 'int',
+ 'default' => 0,
+ ),
+ )
+ );
+ }
+
+}
+
+return new LLMS_Blocks_Lesson_Navigation_Block();
diff --git a/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-lesson-progression-block.php b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-lesson-progression-block.php
new file mode 100644
index 0000000000..de07ea34d6
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-lesson-progression-block.php
@@ -0,0 +1,120 @@
+get_render_hook(), 'lifterlms_template_complete_lesson_link', 10 );
+
+ }
+
+ /**
+ * Output a message when no HTML was rendered
+ *
+ * @since 1.7.0
+ * @since 2.0.0 Ensure the queried object is an `LLMS_Lesson` before checking if it's free.
+ *
+ * @return string
+ */
+ public function get_empty_render_message() {
+ $lesson = llms_get_post( get_the_ID() );
+ if ( $lesson && is_a( $lesson, 'LLMS_Lesson' ) && $lesson->is_free() ) {
+ return '';
+ }
+ return parent::get_empty_render_message();
+ }
+
+ /**
+ * Retrieve custom block attributes.
+ *
+ * Necessary to override when creating ServerSideRender blocks.
+ *
+ * @since 1.0.0
+ *
+ * @return array
+ */
+ public function get_attributes() {
+ return array_merge(
+ parent::get_attributes(),
+ array(
+ 'post_id' => array(
+ 'type' => 'int',
+ 'default' => 0,
+ ),
+ )
+ );
+ }
+
+ /**
+ * Register meta attributes.
+ *
+ * Called after registering the block type.
+ *
+ * @since 1.0.0
+ *
+ * @return void
+ */
+ public function register_meta() {
+
+ register_meta(
+ 'post',
+ '_llms_quiz',
+ array(
+ 'object_subtype' => 'lesson',
+ 'sanitize_callback' => 'absint',
+ 'auth_callback' => '__return_true',
+ 'type' => 'string',
+ 'single' => true,
+ 'show_in_rest' => true,
+ )
+ );
+
+ }
+
+}
+
+return new LLMS_Blocks_Lesson_Progression_Block();
diff --git a/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-php-template-block.php b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-php-template-block.php
new file mode 100644
index 0000000000..791d410000
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-php-template-block.php
@@ -0,0 +1,145 @@
+ 'loop-main',
+ 'archive-llms_membership' => 'loop-main',
+ 'taxonomy-course_cat' => 'loop-main',
+ 'taxonomy-course_difficulty' => 'loop-main',
+ 'taxonomy-course_tag' => 'loop-main',
+ 'taxonomy-course_track' => 'loop-main',
+ 'taxonomy-membership_cat' => 'loop-main',
+ 'taxonomy-membership_tag' => 'loop-main',
+ 'single-certificate' => 'content-certificate',
+ 'single-no-access' => 'content-no-access',
+ );
+
+ /**
+ * Add actions attached to the render function action.
+ *
+ * @since 2.3.0
+ *
+ * @param array $attributes Optional. Block attributes. Default empty array.
+ * @param string $content Optional. Block content. Default empty string.
+ * @return void
+ */
+ public function add_hooks( $attributes = array(), $content = '' ) {
+
+ add_action( $this->get_render_hook(), array( $this, 'output' ), 10 );
+
+ }
+
+ /**
+ * Retrieve custom block attributes.
+ *
+ * Necessary to override when creating ServerSideRender blocks.
+ *
+ * @since 2.3.0
+ *
+ * @return array
+ */
+ public function get_attributes() {
+ return array(
+ 'template' => array(
+ 'type' => 'string',
+ 'default' => '',
+ ),
+ 'title' => array(
+ 'type' => 'string',
+ 'default' => '',
+ ),
+ );
+ }
+
+ /**
+ * Output the template.
+ *
+ * @since 2.3.0
+ *
+ * @param array $attributes Optional. Block attributes. Default empty array.
+ * @return void
+ */
+ public function output( $attributes = array() ) {
+
+ if ( empty( $attributes['template'] ) ) {
+ return;
+ }
+
+ /**
+ * Filters the php templates that can be render via this block.
+ *
+ * @since 2.3.0
+ *
+ * @param array $templates Templates map, where the keys are the template attribute value and the values are the php file names (w/o extension).
+ */
+ $templates = apply_filters( 'llms_blocks_php_templates_block', $this->templates );
+
+ if ( ! array_key_exists( $attributes['template'], $templates ) ) {
+ return;
+ }
+
+ ob_start();
+
+ llms_get_template( "{$templates[$attributes['template']]}.php" );
+
+ $block_content = ob_get_clean();
+
+ /**
+ * Filters the block html.
+ *
+ * @since 2.3.0
+ *
+ * @param string $block_content The block's html.
+ * @param array $attributes The block's array of attributes.
+ * @param array $template The template file basename to be rendered.
+ * @param LLMS_Blocks_PHP_Template_Block $block This block object.
+ */
+ $block_content = apply_filters( 'llms_blocks_render_php_template_block', $block_content, $attributes, $templates[ $attributes['template'] ], $this );
+
+ if ( $block_content ) {
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+ echo $block_content;
+ }
+
+ }
+
+}
+
+return new LLMS_Blocks_PHP_Template_Block();
diff --git a/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-pricing-table-block.php b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-pricing-table-block.php
new file mode 100644
index 0000000000..572f4fd2e4
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-pricing-table-block.php
@@ -0,0 +1,127 @@
+get_render_hook(), array( $this, 'output' ), 10 );
+ }
+
+ /**
+ * Retrieve custom block attributes
+ *
+ * Necessary to override when creating ServerSideRender blocks.
+ *
+ * @since 1.0.0
+ * @since 1.3.6 Unknown.
+ *
+ * @return array
+ */
+ public function get_attributes() {
+ return array_merge(
+ parent::get_attributes(),
+ array(
+ 'post_id' => array(
+ 'type' => 'int',
+ 'default' => 0,
+ ),
+ )
+ );
+ }
+
+ /**
+ * Output the pricing table.
+ *
+ * @since 1.0.0
+ * @since 1.3.7 Unknown.
+ * @since 1.9.0 Added `llms_blocks_render_pricing_table_block` filter.
+ *
+ * @param array $attributes Optional. Block attributes. Default empty array.
+ * @return void
+ */
+ public function output( $attributes = array() ) {
+
+ ob_start();
+ if ( 'edit' === filter_input( INPUT_GET, 'context' ) ) {
+ $id = filter_input( INPUT_GET, 'post_id', FILTER_SANITIZE_NUMBER_INT );
+ if ( $id ) {
+ $product = new LLMS_Product( $id );
+ if ( ! $product->get_access_plans() ) {
+ echo '' . esc_html__( 'No access plans found.', 'lifterlms' ) . '
';
+ }
+ }
+
+ // force display of the table on the admin panel.
+ add_filter( 'llms_product_pricing_table_enrollment_status', '__return_false' );
+ add_filter( 'llms_product_is_purchasable', '__return_true' );
+
+ }
+
+ lifterlms_template_pricing_table( $attributes['post_id'] );
+
+ $block_content = ob_get_clean();
+
+ /**
+ * Filters the block html
+ *
+ * @since 1.9.0
+ *
+ * @param string $block_content The block's html.
+ * @param array $attributes The block's array of attributes.
+ * @param LLMS_Blocks_Pricing_Table_Block $block This block object.
+ */
+ $block_content = apply_filters( 'llms_blocks_render_pricing_table_block', $block_content, $attributes, $this );
+
+ remove_filter( 'llms_product_pricing_table_enrollment_status', '__return_false' );
+ remove_filter( 'llms_product_is_purchasable', '__return_true' );
+
+ if ( $block_content ) {
+ echo wp_kses( $block_content, LLMS_ALLOWED_HTML_FORM_FIELDS );
+ }
+ }
+}
+
+return new LLMS_Blocks_Pricing_Table_Block();
diff --git a/libraries/lifterlms-blocks/includes/blocks/index.php b/libraries/lifterlms-blocks/includes/blocks/index.php
new file mode 100644
index 0000000000..82e2315c6b
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/index.php
@@ -0,0 +1,2 @@
+is_dynamic ) {
+
+ register_block_type(
+ $this->get_block_id(),
+ array(
+ 'attributes' => $this->get_attributes(),
+ 'render_callback' => array( $this, 'render_callback' ),
+ )
+ );
+
+ }
+
+ $this->register_meta();
+
+ }
+
+ /**
+ * Add hooks stub.
+ * Extending classes can use this class to add hooks attached to the render function action.
+ *
+ * @param array $attributes Optional. Block attributes. Default empty array.
+ * @param string $content Optional. Block content. Default empty string.
+ * @return void
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function add_hooks( $attributes = array(), $content = '' ) {}
+
+ /**
+ * Retrieve custom block attributes.
+ * Necessary to override when creating ServerSideRender blocks.
+ *
+ * @return array
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function get_attributes() {
+ return LLMS_Blocks_Visibility::get_attributes();
+ }
+
+ /**
+ * Retrieve the ID/Name of the block.
+ *
+ * @return string
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function get_block_id() {
+ return sprintf( '%1$s/%2$s', $this->vendor, $this->id );
+ }
+
+ /**
+ * Output a message when no HTML was rendered
+ *
+ * @since 1.0.0
+ * @since 1.8.0 Don't output empty render messages on the frontend.
+ *
+ * @return string
+ */
+ public function get_empty_render_message() {
+ if ( ! is_admin() ) {
+ return '';
+ }
+ return __( 'No HTML was returned.', 'lifterlms' );
+ }
+
+ /**
+ * Retrieve a string which can be used to render the block.
+ *
+ * @return string
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function get_render_hook() {
+ return sprintf( '%1$s_%2$s_block_render', $this->vendor, $this->id );
+ }
+
+ /**
+ * Removed hooks stub.
+ * Extending classes can use this class to remove hooks attached to the render function action.
+ *
+ * @return void
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function remove_hooks() {}
+
+ /**
+ * Renders the block type output for given attributes.
+ *
+ * @param array $attributes Optional. Block attributes. Default empty array.
+ * @param string $content Optional. Block content. Default empty string.
+ * @return string
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function render_callback( $attributes = array(), $content = '' ) {
+
+ $this->add_hooks( $attributes, $content );
+
+ ob_start();
+ do_action( $this->get_render_hook(), $attributes, $content );
+ $ret = ob_get_clean();
+
+ $this->remove_hooks();
+
+ if ( ! $ret ) {
+ $ret = $this->get_empty_render_message();
+ }
+
+ return $ret;
+
+ }
+
+ /**
+ * Register meta attributes stub.
+ *
+ * Called after registering the block type.
+ *
+ * @return void
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function register_meta() {}
+
+}
diff --git a/libraries/lifterlms-blocks/includes/class-llms-blocks-assets.php b/libraries/lifterlms-blocks/includes/class-llms-blocks-assets.php
new file mode 100644
index 0000000000..a48bd0df6d
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-assets.php
@@ -0,0 +1,238 @@
+assets = new LLMS_Assets(
+ 'llms-blocks',
+ array(
+ // Base defaults shared by all asset types.
+ 'base' => array(
+ 'base_file' => LLMS_BLOCKS_PLUGIN_FILE,
+ 'base_url' => LLMS_BLOCKS_PLUGIN_DIR_URL,
+ 'version' => LLMS_BLOCKS_VERSION,
+ 'suffix' => '', // Only minified files are distributed.
+ ),
+ // Script specific defaults.
+ 'script' => array(
+ 'translate' => true, // All scripts in the blocks plugin are translated.
+ ),
+ )
+ );
+
+ // Define plugin assets.
+ $this->define();
+ $this->define_bc();
+
+ // Enqueue editor assets.
+ add_action( 'enqueue_block_editor_assets', array( $this, 'editor_assets' ), 5 );
+
+ }
+
+ /**
+ * Define block plugin assets.
+ *
+ * @since 1.10.0
+ *
+ * @return void
+ */
+ private function define() {
+
+ $asset = include LLMS_BLOCKS_PLUGIN_DIR . '/assets/js/llms-blocks.asset.php';
+
+ $this->assets->define(
+ 'scripts',
+ array(
+ 'llms-blocks-editor' => array(
+ 'dependencies' => $asset['dependencies'],
+ 'file_name' => 'llms-blocks',
+ 'version' => $asset['version'],
+ ),
+ )
+ );
+
+ $this->assets->define(
+ 'styles',
+ array(
+ 'llms-blocks-editor' => array(
+ 'dependencies' => array( 'wp-edit-blocks' ),
+ 'file_name' => 'llms-blocks',
+ 'version' => $asset['version'],
+ ),
+ )
+ );
+
+ }
+
+ /**
+ * Define backwards compatibility assets
+ *
+ * @since 2.0.0
+ *
+ * @return void
+ */
+ protected function define_bc() {
+
+ if ( ! $this->use_bc_assets() ) {
+ return;
+ }
+
+ $asset = include LLMS_BLOCKS_PLUGIN_DIR . '/assets/js/llms-blocks-backwards-compat.asset.php';
+
+ $this->assets->define(
+ 'scripts',
+ array(
+ 'llms-blocks-editor-bc' => array(
+ 'dependencies' => $asset['dependencies'],
+ 'file_name' => 'llms-blocks-backwards-compat',
+ 'version' => $asset['version'],
+ ),
+ )
+ );
+
+ }
+
+ /**
+ * Enqueue block editor assets.
+ *
+ * @since 1.0.0
+ * @since 1.4.1 Fix double slash in asset path.
+ * @since 1.8.0 Update asset paths and improve script dependencies.
+ * @since 1.10.0 Use `LLMS_Assets` class methods for asset enqueues.
+ * @since 2.0.0 Maybe load backwards compatibility script.
+ * @since 2.2.0 Only load assets on post screens.
+ * @since 2.3.0 Also load assets on site editor screen.
+ * @since 2.4.3 Added script localization.
+ * @since 2.5.0 Add courseId to script localization.
+ *
+ * @return void
+ */
+ public function editor_assets() {
+
+ $screen = get_current_screen();
+ if ( $screen && ! in_array( $screen->base, array( 'post', 'site-editor' ), true ) ) {
+ return;
+ }
+
+ if ( $this->use_bc_assets() ) {
+ $this->assets->enqueue_script( 'llms-blocks-editor-bc' );
+ }
+
+ $this->assets->enqueue_script( 'llms-blocks-editor' );
+ $this->assets->enqueue_style( 'llms-blocks-editor' );
+
+ wp_localize_script(
+ 'llms-blocks-editor',
+ 'llmsBlocks',
+ array(
+ 'variationIconCanBeObject' => self::can_variation_transform_icon_be_an_object(),
+ 'courseId' => self::get_course_id(),
+ )
+ );
+
+ }
+
+ /**
+ * Determines if WP Core backwards compatibility scripts should defined & be loaded.
+ *
+ * @since 2.0.0
+ *
+ * @return boolean
+ */
+ private function use_bc_assets() {
+ return ( ! LLMS_Forms::instance()->are_requirements_met() &&
+ /**
+ * Filter allowing opt-out of block editor backwards compatibility scripts.
+ *
+ * @since 2.0.0
+ *
+ * @example
+ * ```
+ * // Disable backwards compatibility scripts.
+ * add_filter( 'llms_blocks_load_bc_scripts', '__return_false' );
+ * ```
+ *
+ * @param boolean $load_scripts Whether or not to load the scripts.
+ */
+ apply_filters( 'llms_blocks_load_bc_scripts', true )
+ );
+ }
+
+ /**
+ * Can a variation transform icon be an object.
+ *
+ * @link https://github.com/gocodebox/lifterlms-blocks/issues/170
+ *
+ * @since 2.4.3
+ *
+ * @return bool
+ */
+ private static function can_variation_transform_icon_be_an_object(): bool {
+ global $wp_version;
+
+ return version_compare( $wp_version, '6.0-src', '<' ) && ! defined( 'GUTENBERG_VERSION' )
+ || ( defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, '13.0', '<' ) );
+ }
+
+ /**
+ * Returns the current course or lesson's parent course ID.
+ *
+ * @since 2.5.0
+ *
+ * @return int
+ */
+ private static function get_course_id(): int {
+ $post_type = get_post_type();
+ $post_id = get_the_ID() ?? 0;
+
+ if ( 'lesson' === $post_type ) {
+ $parent = llms_get_post_parent_course( $post_id );
+
+ if ( $parent ) {
+ $post_id = $parent->get( 'id' );
+ }
+ }
+
+ return $post_id;
+ }
+
+}
+
+return new LLMS_Blocks_Assets();
diff --git a/libraries/lifterlms-blocks/includes/class-llms-blocks-migrate.php b/libraries/lifterlms-blocks/includes/class-llms-blocks-migrate.php
new file mode 100644
index 0000000000..db8f5ccac9
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-migrate.php
@@ -0,0 +1,433 @@
+update_post_content( $post->ID, $post->post_content . "\r\r" . $this->get_template( $post->post_type ) ) ) {
+ // Save migration state.
+ $this->update_migration_status( $post->ID );
+ return true;
+ }
+
+ return false;
+
+ }
+
+ /**
+ * Don't remove core template actions when a sales page is enabled and the page is restricted.
+
+ * @since 1.2.0
+ * @since 1.3.1 Unknown.
+ *
+ * @param bool $ret Default migration status.
+ * @param int $post_id WP_Post ID.
+ * @return bool
+ */
+ public static function check_sales_page( $ret, $post_id ) {
+
+ $page_restricted = llms_page_restricted( $post_id );
+ if ( $page_restricted['is_restricted'] ) {
+ $sales_page = get_post_meta( $post_id, '_llms_sales_page_content_type', true );
+ if ( '' === $sales_page || 'content' === $sales_page ) {
+ $ret = false;
+ }
+ }
+
+ return $ret;
+
+ }
+
+ /**
+ * Get an array of post types which can be migrated.
+ *
+ * @since 1.3.3
+ * @since 1.7.0 Memberships are migrateable.
+ *
+ * @return array
+ */
+ public function get_migrateable_post_types() {
+ /**
+ * Filters the post types that can be migrated
+ *
+ * @since 1.3.3
+ *
+ * @param string[] $post_types An array of string representing the post types that can be migrated.
+ */
+ return apply_filters( 'llms_blocks_migrateable_post_types', array( 'course', 'lesson', 'llms_membership' ) );
+ }
+
+ /**
+ * Retrieve a WP_Query for posts which have already been migrated.
+ *
+ * @since 1.4.0
+ *
+ * @param array $args Optional query arguments to pass to WP_Query.
+ * @return WP_Query
+ */
+ public function get_migrated_posts( $args = array() ) {
+
+ return new WP_Query(
+ wp_parse_args(
+ $args,
+ array(
+ 'post_type' => $this->get_migrateable_post_types(),
+ 'meta_query' => array(
+ array(
+ 'key' => '_llms_blocks_migrated',
+ 'value' => 'yes',
+ ),
+ ),
+ )
+ )
+ );
+
+ }
+
+ /**
+ * Retrieve the block template by post type.
+ *
+ * @since 1.0.0
+ * @since 1.7.0 Add membership template.
+ * @since 1.8.0 Updated course progress shortcode and added the `$merge_deprecated_versions` param.
+ * @since 1.9.1 Fix course progress block.
+ *
+ * @param string $post_type WP post type.
+ * @param boolean $merge_deprecated_versions Optional. Whether or not getting the deprecated blocks merged, useful when removing templates. Default `false`.
+ * @return string
+ */
+ private function get_template( $post_type, $merge_deprecated_versions = false ) {
+
+ if ( 'course' === $post_type ) {
+ ob_start();
+
+ ?>
+
+
+
+
+
+
+
+
+
+[lifterlms_course_progress check_enrollment=1]
+[lifterlms_course_progress]
+
+
+
+
+[lifterlms_course_continue_button]
+
+
+
+
+
+
+
+
+
+ should_migrate_post( $post->ID ) ) {
+ return;
+ }
+
+ if ( 'llms_membership' === $post->post_type ) {
+ if ( has_block( 'llms/pricing-table', $post->post_content ) ) {
+ $this->update_migration_status( $post->ID );
+ return;
+ }
+ } elseif ( has_blocks( $post->post_content ) ) {
+ $this->update_migration_status( $post->ID );
+ return;
+ }
+
+ $this->add_template_to_post( $post );
+
+ // Reload.
+ wp_safe_redirect(
+ add_query_arg(
+ array(
+ 'post' => $post->ID,
+ 'action' => 'edit',
+ ),
+ admin_url( 'post.php' )
+ )
+ );
+ exit;
+
+ }
+
+ /**
+ * Remove post type templates and any LifterLMS Blocks from a given post.
+ *
+ * @since 1.4.0
+ * @since 1.8.0 Get all post type's template with deprecated blocks versions merged.
+ *
+ * @param WP_Post $post Post object.
+ * @return bool
+ */
+ private function remove_template_from_post( $post ) {
+
+ $template = $this->get_template( $post->post_type, true );
+ if ( ! $template ) {
+ return;
+ }
+
+ // explicitly remove template pieces.
+ $parts = array_filter( array_map( 'trim', explode( "\n", $template ) ) );
+ $content = str_replace( $parts, '', $post->post_content );
+
+ // replace any remaining LLMS blocks not found in the template (also grabs any openers that have block settings JSON).
+ $content = trim( preg_replace( '##', '', $content ) );
+
+ if ( $this->update_post_content( $post->ID, $content ) ) {
+ $this->update_migration_status( $post->ID, 'no' );
+ return true;
+ }
+
+ return false;
+
+ }
+
+ /**
+ * Removes core template action hooks from posts which have been migrated to the block editor
+ *
+ * @since 1.3.2 Unknown.
+ *
+ * @return void
+ * @since 1.1.0
+ */
+ public function remove_template_hooks() {
+
+ if ( ! llms_blocks_is_post_migrated( get_the_ID() ) ) {
+ return;
+ }
+
+ // Course Information.
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_single_meta_wrapper_start', 5 );
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_single_length', 10 );
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_single_difficulty', 20 );
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_single_course_tracks', 25 );
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_single_course_categories', 30 );
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_single_course_tags', 35 );
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_single_meta_wrapper_end', 50 );
+
+ // Remove Course Progress.
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_single_course_progress', 60 );
+
+ // Course Syllabus.
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_single_syllabus', 90 );
+
+ // Instructors.
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_course_author', 40 );
+
+ // Lesson Navigation.
+ remove_action( 'lifterlms_single_lesson_after_summary', 'lifterlms_template_lesson_navigation', 20 );
+
+ // Lesson Progression.
+ remove_action( 'lifterlms_single_lesson_after_summary', 'lifterlms_template_complete_lesson_link', 10 );
+
+ // Pricing Table.
+ remove_action( 'lifterlms_single_course_after_summary', 'lifterlms_template_pricing_table', 60 );
+ remove_action( 'lifterlms_single_membership_after_summary', 'lifterlms_template_pricing_table', 10 );
+
+ }
+
+ /**
+ * Determine if a post should be migrated.
+ *
+ * @since 1.3.3
+ *
+ * @param int $post_id WP_Post ID.
+ * @return bool
+ */
+ public function should_migrate_post( $post_id ) {
+
+ $ret = true;
+
+ // Not a valid post type.
+ if ( ! in_array( get_post_type( $post_id ), $this->get_migrateable_post_types(), true ) ) {
+
+ $ret = false;
+
+ // Classic is enabled, don't migrate.
+ } elseif ( llms_blocks_is_classic_enabled_for_post( $post_id ) ) {
+
+ $ret = false;
+
+ // Already Migrated.
+ } elseif ( llms_parse_bool( get_post_meta( $post_id, '_llms_blocks_migrated', true ) ) ) {
+
+ $ret = false;
+
+ }
+
+ /**
+ * Filters whether or not a post should be migrated
+ *
+ * @since 1.3.3
+ *
+ * @param bool $migrate Whether or not a post should be migrated.
+ * @param int $post_id WP_Post ID.
+ */
+ return apply_filters( 'llms_blocks_should_migrate_post', $ret, $post_id );
+
+ }
+
+ /**
+ * Unmigrates migrated posts.
+ *
+ * @since 1.4.0
+ *
+ * @return void.
+ */
+ public function unmigrate_posts() {
+
+ $posts = $this->get_migrated_posts( array( 'posts_per_page' => 250 ) ); // phpcs:ignore WordPress.WP.PostsPerPage.posts_per_page_posts_per_page
+
+ if ( $posts->posts ) {
+ foreach ( $posts->posts as $post ) {
+ $this->remove_template_from_post( $post );
+ }
+ }
+
+ }
+
+ /**
+ * Update post meta data to signal status of the editor migration.
+ *
+ * @since 1.1.0
+ *
+ * @param int $post_id WP_Post ID.
+ * @param string $status Yes or no.
+ * @return void
+ */
+ private function update_migration_status( $post_id, $status = 'yes' ) {
+ update_post_meta( $post_id, '_llms_blocks_migrated', $status );
+ }
+
+ /**
+ * Update the post content for a given post.
+ *
+ * @since 1.4.0
+ *
+ * @param int $id WP_Post ID.
+ * @param string $content Post content to update.
+ * @return bool
+ */
+ private function update_post_content( $id, $content ) {
+
+ global $wpdb;
+ $update = $wpdb->update(
+ $wpdb->posts,
+ array(
+ 'post_content' => $content,
+ ),
+ array(
+ 'ID' => $id,
+ ),
+ array( '%s' ),
+ array( '%d' )
+ ); // db no-cache okay.
+
+ return false === $update ? false : true;
+
+ }
+
+}
+
+global $llms_blocks_migrate;
+$llms_blocks_migrate = new LLMS_Blocks_Migrate();
+return $llms_blocks_migrate;
diff --git a/libraries/lifterlms-blocks/includes/class-llms-blocks-page-builders.php b/libraries/lifterlms-blocks/includes/class-llms-blocks-page-builders.php
new file mode 100644
index 0000000000..a635193b2c
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-page-builders.php
@@ -0,0 +1,133 @@
+instructors()->get_instructors( false );
+ foreach ( $ret as &$instructor ) {
+ $name = '';
+ $student = llms_get_student( $instructor['id'] );
+ if ( $student ) {
+ $name = $student->get_name();
+ }
+ $instructor['name'] = $name;
+ }
+ }
+ return $ret;
+
+ }
+
+ /**
+ * Automatically sets instructor data when a new course/membership is created.
+ *
+ * @since 1.6.0
+ *
+ * @link https://developer.wordpress.org/reference/hooks/save_post_post-post_type/
+ *
+ * @param int $post_id WP_Post ID.
+ * @param WP_Post $post Post object.
+ * @param bool $update Whether the save is an update (`true`) or a creation (`false`).
+ * @return bool
+ */
+ public function maybe_set_default_instructor( $post_id, $post, $update ) {
+
+ if ( $update || ! $post->post_author ) {
+ return false;
+ }
+
+ $obj = llms_get_post( $post );
+ if ( ! $obj || ! is_a( $obj, 'LLMS_Post_Model' ) || ! in_array( $obj->get( 'type' ), $this->post_types, true ) ) {
+ return false;
+ }
+
+ remove_action( 'save_post_course', array( $this, 'maybe_set_instructors' ), 50, 3 );
+ $obj->instructors()->set_instructors( array( array( 'id' => $post->post_author ) ) );
+
+ return true;
+
+ }
+
+ /**
+ * Update instructor information for a given object.
+ *
+ * @since 1.0.0
+ * @since 1.7.1 Decode JSON prior to saving.
+ * @since 2.4.0 Fix access to non-existing variable when current user canno edit the course/membership.
+ *
+ * @param string $value Instructor data to add to the object (JSON).
+ * @param WP_Post $object WP_Post object.
+ * @param string $key Name of the field.
+ * @return null|WP_Error
+ */
+ public function update_callback( $value, $object, $key ) {
+
+ if ( ! current_user_can( 'edit_post', $object->ID ) ) {
+ return new WP_Error(
+ 'rest_cannot_update',
+ __( 'Sorry, you are not allowed to edit the object instructors.', 'lifterlms' ),
+ array(
+ 'key' => $key,
+ 'status' => rest_authorization_required_code(),
+ )
+ );
+ }
+
+ $value = json_decode( $value, true );
+
+ $obj = llms_get_post( $object );
+ if ( $obj ) {
+ $obj->instructors()->set_instructors( $value );
+ }
+
+ return null;
+ }
+
+ /**
+ * Register custom meta fields.
+ *
+ * @since 1.0.0
+ * @since 1.6.0 Use `$this->post_types` for loop.
+ * @since 1.7.1 Don't define a schema.
+ *
+ * @return void
+ */
+ public function register_meta() {
+
+ foreach ( $this->post_types as $post_type ) {
+
+ register_rest_field(
+ $post_type,
+ 'instructors',
+ array(
+ 'get_callback' => array( $this, 'get_callback' ),
+ 'update_callback' => array( $this, 'update_callback' ),
+ 'schema' => null,
+ )
+ );
+
+ }
+
+ }
+
+}
+
+return new LLMS_Blocks_Post_Instructors();
diff --git a/libraries/lifterlms-blocks/includes/class-llms-blocks-post-types.php b/libraries/lifterlms-blocks/includes/class-llms-blocks-post-types.php
new file mode 100644
index 0000000000..4fe0c64dab
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-post-types.php
@@ -0,0 +1,155 @@
+ __( 'Add a short description of your course visible to all visitors...', 'lifterlms' ),
+ ),
+ ),
+ array( 'llms/course-information' ),
+ array( 'llms/instructors' ),
+ array( 'llms/pricing-table' ),
+ array( 'llms/course-progress' ),
+ array( 'llms/course-continue-button' ),
+ array( 'llms/course-syllabus' ),
+ );
+
+ return $post_type;
+
+ }
+
+ /**
+ * Add an editor template for memberships.
+ *
+ * @since 1.7.0
+ * @since 1.11.0 Add instructors block.
+ *
+ * @param array $post_type Post type registration data.
+ * @return array
+ */
+ public function add_membership_template( $post_type ) {
+
+ $post_type['template'] = array(
+ array(
+ 'core/paragraph',
+ array(
+ 'placeholder' => __( 'Add a short description of your membership visible to all visitors...', 'lifterlms' ),
+ ),
+ ),
+ array( 'llms/instructors' ),
+ array( 'llms/pricing-table' ),
+ );
+
+ return $post_type;
+
+ }
+
+ /**
+ * Add an editor template for lessons
+ *
+ * @param array $post_type post type data.
+ * @return array
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+ public function add_lesson_template( $post_type ) {
+
+ $post_type['template'] = array(
+ array(
+ 'core/paragraph',
+ array(
+ 'placeholder' => __( 'Add your lesson content...', 'lifterlms' ),
+ ),
+ ),
+ array( 'llms/lesson-progression' ),
+ array( 'llms/lesson-navigation' ),
+ );
+
+ return $post_type;
+
+ }
+
+}
+
+return new LLMS_Blocks_Post_Types();
diff --git a/libraries/lifterlms-blocks/includes/class-llms-blocks-post-visibility.php b/libraries/lifterlms-blocks/includes/class-llms-blocks-post-visibility.php
new file mode 100644
index 0000000000..71b8e70353
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-post-visibility.php
@@ -0,0 +1,134 @@
+get_catalog_visibility();
+ }
+ return $ret;
+
+ }
+
+ /**
+ * Update visibility information for a given object.
+ *
+ * @param string $value new visibility status value.
+ * @param WP_Post $object WP_Post object.
+ * @param string $key name of the field.
+ * @return null|WP_Error
+ * @since 1.3.0
+ * @version 1.3.0
+ */
+ public function update_callback( $value, $object, $key ) {
+
+ if ( ! current_user_can( 'edit_post', $object->ID ) ) {
+ return new WP_Error(
+ 'rest_cannot_update',
+ __( 'Sorry, you are not allowed to edit the object visibility.', 'lifterlms' ),
+ array(
+ 'key' => $name,
+ 'status' => rest_authorization_required_code(),
+ )
+ );
+ }
+
+ $obj = new LLMS_Product( $object->ID );
+ if ( $obj ) {
+ $obj->set_catalog_visibility( $value );
+ }
+
+ return null;
+ }
+
+ /**
+ * Register custom meta fields.
+ *
+ * @return void
+ * @since 1.3.0
+ * @version 1.3.0
+ */
+ public function register_meta() {
+
+ foreach ( array( 'course', 'llms_membership' ) as $post_type ) {
+
+ register_rest_field(
+ $post_type,
+ 'visibility',
+ array(
+ 'get_callback' => array( $this, 'get_callback' ),
+ 'update_callback' => array( $this, 'update_callback' ),
+ 'schema' => array(
+ 'description' => __( 'Post visibility.', 'lifterlms' ),
+ 'type' => 'object',
+ 'context' => array( 'view', 'edit' ),
+ 'properties' => array(),
+ 'arg_options' => array(
+ 'sanitize_callback' => null,
+ 'validate_callback' => null,
+ ),
+ ),
+ )
+ );
+
+ }
+
+ }
+
+}
+
+return new LLMS_Blocks_Post_Visibility();
diff --git a/libraries/lifterlms-blocks/includes/class-llms-blocks-reusable.php b/libraries/lifterlms-blocks/includes/class-llms-blocks-reusable.php
new file mode 100644
index 0000000000..3a39b7e6e6
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-reusable.php
@@ -0,0 +1,200 @@
+ID, '_is_llms_field', $value ) ? true : false;
+ }
+
+ /**
+ * Register custom rest fields
+ *
+ * @since 2.0.0
+ *
+ * @return void
+ */
+ public function rest_register_fields() {
+
+ register_rest_field(
+ 'wp_block',
+ 'is_llms_field',
+ array(
+ 'get_callback' => array( $this, 'rest_callback_get' ),
+ 'update_callback' => array( $this, 'rest_callback_update' ),
+ )
+ );
+
+ }
+
+ /**
+ * Modify the rest request query used to list reusable blocks within the block editor
+ *
+ * Ensures that reusable blocks containing LifterLMS Form Fields can only be inserted/viewed
+ * in the context that we allow them to be used within.
+ *
+ * + When viewing a `wp_block` post, all reusable blocks should be displayed.
+ * + When viewing an `llms_form` post, only blocks that specify `is_llms_field` as 'yes' can be displayed.
+ * + When viewing any other post, any post with `is_llms_field` of 'yes' is excluded.
+ *
+ * @since 2.0.0
+ *
+ * @see [Reference]
+ * @link [URL]
+ *
+ * @param arrays $args WP_Query arguments.
+ * @param WP_REST_Request $request Request object.
+ * @return array
+ */
+ public function mod_wp_block_query( $args, $request ) {
+
+ $referer = $request->get_header( 'referer' );
+ $screen = empty( $referer ) ? false : $this->get_screen_from_referer( $referer );
+
+ // We don't care about the screen or it's a reusable block screen.
+ if ( empty( $screen ) || 'wp_block' === $screen ) {
+ return $args;
+ }
+
+ // Add a meta query if it doesn't already exist.
+ if ( empty( $args['meta_query'] ) ) {
+ $args['meta_query'] = array(
+ 'relation' => 'AND',
+ );
+ }
+
+ // Forms should show only blocks with forms and everything else should exclude blocks with forms.
+ $include_fields = 'llms_form' === $screen;
+ $args['meta_query'][] = $this->get_meta_query( $include_fields );
+
+ return $args;
+
+ }
+
+ /**
+ * Retrieve a meta query array depending on the post type of the referring rest request
+ *
+ * @since 2.0.0
+ *
+ * @param boolean $include_fields Whether or not to include form fields.
+ * @return array
+ */
+ private function get_meta_query( $include_fields ) {
+
+ // Default query when including fields.
+ $meta_query = array(
+ 'key' => '_is_llms_field',
+ 'value' => 'yes',
+ );
+
+ // Excluding fields.
+ if ( ! $include_fields ) {
+
+ $meta_query = array(
+ 'relation' => 'OR',
+ wp_parse_args(
+ array(
+ 'compare' => '!=',
+ ),
+ $meta_query
+ ),
+ array(
+ 'key' => '_is_llms_field',
+ 'compare' => 'NOT EXISTS',
+ ),
+ );
+ }
+
+ return $meta_query;
+
+ }
+
+ /**
+ * Determine the screen where a reusable blocks rest query originated
+ *
+ * The screen name will either be "widgets" or the WP_Post name of a registered WP_Post type.
+ *
+ * For any other screen we return `false` because we don't care about it.
+ *
+ * @since 2.0.0
+ * @since 2.3.1 Don't pass `null` to `basename()`.
+ *
+ * @param string $referer Referring URL for the REST request.
+ * @return string|boolean Returns the screen name or `false` if we don't care about the screen.
+ */
+ private function get_screen_from_referer( $referer ) {
+
+ // Blockified widgets screen.
+ $url_path = wp_parse_url( $referer, PHP_URL_PATH );
+ if ( $url_path && 'widgets.php' === basename( $url_path ) ) {
+ return 'widgets';
+ }
+
+ $query_args = array();
+ wp_parse_str( wp_parse_url( $referer, PHP_URL_QUERY ), $query_args );
+
+ // Something else.
+ if ( empty( $query_args['post'] ) ) {
+ return false;
+ }
+
+ // Block editor for a WP_Post.
+ return get_post_type( $query_args['post'] );
+
+ }
+
+}
+
+return new LLMS_Blocks_Reusable();
diff --git a/libraries/lifterlms-blocks/includes/class-llms-blocks-status-tools.php b/libraries/lifterlms-blocks/includes/class-llms-blocks-status-tools.php
new file mode 100644
index 0000000000..66c486f1cb
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-status-tools.php
@@ -0,0 +1,88 @@
+get_migrated_posts();
+
+ if ( $posts->found_posts ) {
+
+ $desc = __( 'Removes block editor code from all courses and lessons which were migrated to the block editor during an upgrade to WordPress 5.0 or later. If you installed the Classic Editor plugin after upgrading and see duplicate content items (such as the course syllabus or lesson mark complete button) this tool will remove the duplicates.', 'lifterlms' );
+ $desc .= ' ';
+ // Translators: %d = number of affected courses/lessons.
+ $desc .= sprintf( __( 'Currently %d courses and/or lessons are affected.', 'lifterlms' ), $posts->found_posts );
+
+ $tools['blocks-unmigrate'] = array(
+ 'description' => $desc,
+ 'label' => __( 'Remove LifterLMS Block Code', 'lifterlms' ),
+ 'text' => __( 'Remove Block Code', 'lifterlms' ),
+ );
+
+ }
+
+ return $tools;
+
+ }
+
+ /**
+ * Run tool actions on tool page form submission.
+ *
+ * @since 1.4.0
+ *
+ * @param string $tool ID of the tool being run.
+ * @return void
+ */
+ public function maybe_toggle_mode( $tool ) {
+
+ if ( 'blocks-unmigrate' !== $tool ) {
+ return;
+ }
+
+ do_action( 'llms_blocks_unmigrate_posts' );
+
+ }
+
+}
+
+return new LLMS_Blocks_Status_Tools();
diff --git a/libraries/lifterlms-blocks/includes/class-llms-blocks-visibility.php b/libraries/lifterlms-blocks/includes/class-llms-blocks-visibility.php
new file mode 100644
index 0000000000..6ccf56222c
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-visibility.php
@@ -0,0 +1,266 @@
+ array(
+ 'default' => 'all',
+ 'type' => 'string',
+ ),
+ 'llms_visibility_in' => array(
+ 'default' => '',
+ 'type' => 'string',
+ ),
+ 'llms_visibility_posts' => array(
+ 'default' => '[]',
+ 'type' => 'string',
+ ),
+ );
+ }
+
+ /**
+ * Get the number of enrollments for a user by post type.
+ *
+ * @since 1.0.0
+ *
+ * @param int $uid WP_User ID.
+ * @param string $type Post type.
+ * @return int
+ */
+ private function get_enrollment_count_by_type( $uid, $type ) {
+
+ $found = 0;
+ $student = llms_get_student( $uid );
+
+ $type = str_replace( 'any_', '', $type );
+
+ if ( 'course' === $type || 'membership' === $type ) {
+ $enrollments = $student->get_enrollments( $type, array( 'limit' => 1 ) );
+ $found = $enrollments['found'];
+ } elseif ( 'any' === $type ) {
+ $found = $this->get_enrollment_count_by_type( $uid, 'course' );
+ if ( ! $found ) {
+ $found = $this->get_enrollment_count_by_type( $uid, 'membership' );
+ }
+ }
+
+ return $found;
+
+ }
+
+ /**
+ * Parse post ids from block visibility in attributes.
+ *
+ * @since 1.0.0
+ *
+ * @param array $attrs Block attributes.
+ * @return array
+ */
+ private function get_post_ids_from_block_attributes( $attrs ) {
+
+ $ids = array();
+ if ( 'this' === $attrs['llms_visibility_in'] ) {
+ $ids[] = get_the_ID();
+ } elseif ( ! empty( $attrs['llms_visibility_posts'] ) ) {
+ $ids = wp_list_pluck( json_decode( $attrs['llms_visibility_posts'] ), 'id' );
+ }
+
+ return $ids;
+
+ }
+
+ /**
+ * Filter block output.
+ *
+ * @since 1.0.0
+ * @since 1.6.0 Add logic for `logged_in` and `logged_out` block visibility options.
+ * @since 2.0.0 Added a conditional prior to checking the block's visibility attributes.
+ * @since 2.4.2 Set the `user_login` field block's visibility to its default 'logged_out' if not set.
+ *
+ * @param string $content Block inner content.
+ * @param array $block Block data array.
+ * @return string
+ */
+ public function maybe_filter_block( $content, $block ) {
+
+ // Allow conditionally filtering the block based on external context.
+ if ( ! $this->should_filter_block( $block ) ) {
+ return $content;
+ }
+
+ // Set the `user_login` field block's visibility to its default 'logged_out' if not set.
+ // The WordPress serializer `getCommentAttributes()` function removes the attribute before being
+ // serialized into `post_content` if the attribute can have only one value and it's the default.
+ if ( 'llms/form-field-user-login' === $block['blockName'] && empty( $block['attrs']['llms_visibility'] ) ) {
+ $block['attrs']['llms_visibility'] = 'logged_out';
+ }
+
+ // No attributes or no llms visibility settings (visible to "all").
+ if ( empty( $block['attrs'] ) || empty( $block['attrs']['llms_visibility'] ) ) {
+ return $content;
+ }
+
+ $uid = get_current_user_id();
+
+ // Show only to logged in users.
+ if ( 'logged_in' === $block['attrs']['llms_visibility'] && ! $uid ) {
+
+ $content = '';
+
+ // Show only to logged out users.
+ } elseif ( 'logged_out' === $block['attrs']['llms_visibility'] && $uid ) {
+ $content = '';
+
+ // Enrolled checks.
+ } elseif ( 'enrolled' === $block['attrs']['llms_visibility'] && ! empty( $block['attrs']['llms_visibility_in'] ) ) {
+
+ // Don't have to run any further checks if we don't have a user.
+ if ( ! $uid ) {
+
+ $content = '';
+
+ // Checks for the "any" conditions.
+ } elseif ( in_array( $block['attrs']['llms_visibility_in'], array( 'any', 'any_course', 'any_membership' ), true ) ) {
+
+ $found = $this->get_enrollment_count_by_type( $uid, $block['attrs']['llms_visibility_in'] );
+ if ( ! $found ) {
+ $content = '';
+ }
+
+ // Checks for specifics.
+ } elseif ( in_array( $block['attrs']['llms_visibility_in'], array( 'this', 'list_all', 'list_any' ), true ) ) {
+
+ $relation = 'list_any' === $block['attrs']['llms_visibility_in'] ? 'any' : 'all'; // "this" becomes an "all" relationship
+ if ( ! llms_is_user_enrolled( $uid, $this->get_post_ids_from_block_attributes( $block['attrs'] ), $relation ) ) {
+ $content = '';
+ }
+ }
+
+ // Not-Enrolled checks.
+ } elseif ( 'not_enrolled' === $block['attrs']['llms_visibility'] && ! empty( $block['attrs']['llms_visibility_in'] ) ) {
+
+ // Only need to check logged in users.
+ if ( $uid ) {
+
+ // Checks for the "any" conditions.
+ if ( in_array( $block['attrs']['llms_visibility_in'], array( 'any', 'any_course', 'any_membership' ), true ) ) {
+
+ $found = $this->get_enrollment_count_by_type( $uid, $block['attrs']['llms_visibility_in'] );
+ if ( $found ) {
+ $content = '';
+ }
+
+ // Checks for specifics.
+ } elseif ( in_array( $block['attrs']['llms_visibility_in'], array( 'this', 'list_all', 'list_any' ), true ) ) {
+
+ $relation = 'list_any' === $block['attrs']['llms_visibility_in'] ? 'any' : 'all'; // "this" becomes an "all" relationship
+ if ( llms_is_user_enrolled( $uid, $this->get_post_ids_from_block_attributes( $block['attrs'] ), $relation ) ) {
+ $content = '';
+ }
+ }
+ }
+ }
+
+ /**
+ * Filters a blocks content after it has been run through visibility attribute filters
+ *
+ * @since 1.0.0
+ *
+ * @param string $content The HTML content for a block. May be an empty string if the block should be invisible to the current user.
+ * @param array $block Block data array.
+ */
+ return apply_filters( 'llms_blocks_visibility_render_block', $content, $block );
+
+ }
+
+ /**
+ * Determine whether or not a block's rendering should be modified by block-level visibility settings
+ *
+ * This method does not determine whether or not the block will be rendered, it only determines whether
+ * or not we should check if it should be rendered.
+ *
+ * This method is primarily used to ensure that LifterLMS core dynamic blocks (pricing table, course syllabus, etc...)
+ * are *always* displayed to creators when editing content within the block editor. This parses data from a block-renderer
+ * WP Core API request.
+ *
+ * @since 2.0.0
+ * @since 2.3.1 Don't use deprecated `FILTER_SANITIZE_STRING`.
+ *
+ * @link https://developer.wordpress.org/rest-api/reference/rendered-blocks/
+ *
+ * @param array $block Block data array.
+ * @return boolean If `true`, block filters should be checked, other wise they will be skipped.
+ */
+ private function should_filter_block( $block ) {
+
+ // Always filter unless explicitly told not to.
+ $should_filter = true;
+
+ if ( llms_is_rest() ) {
+
+ $context = llms_filter_input( INPUT_GET, 'context' );
+ $post_id = llms_filter_input( INPUT_GET, 'post_id', FILTER_SANITIZE_NUMBER_INT );
+
+ // Always render blocks when a valid user is requesting the block in the edit context.
+ if ( 'edit' === $context && $post_id && current_user_can( 'edit_post', $post_id ) ) {
+ $should_filter = false;
+ }
+ }
+
+ /**
+ * Filters whether or not a block's rendering should be modified by block-level visibility settings
+ *
+ * This filter does not determine whether or not the block will be rendered, it only determines whether
+ * or not we should check if it should be rendered.
+ *
+ * @since 2.0.0
+ *
+ * @param boolean $should_filter Whether or not to apply visibility filters.
+ * @param array $block Block data array.
+ */
+ return apply_filters( 'llms_blocks_visibility_should_filter_block', $should_filter, $block );
+
+ }
+
+}
+
+return new LLMS_Blocks_Visibility();
diff --git a/libraries/lifterlms-blocks/includes/class-llms-blocks.php b/libraries/lifterlms-blocks/includes/class-llms-blocks.php
new file mode 100644
index 0000000000..2cc8f2a051
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks.php
@@ -0,0 +1,262 @@
+ 'llms-blocks',
+ 'title' => __( 'LifterLMS Blocks', 'lifterlms' ),
+ );
+
+ array_unshift(
+ $categories,
+ array(
+ 'slug' => 'llms-custom-fields',
+ 'title' => __( 'Custom User Information', 'lifterlms' ),
+ )
+ );
+
+ array_unshift(
+ $categories,
+ array(
+ 'slug' => 'llms-user-info-fields',
+ 'title' => __( 'User Information', 'lifterlms' ),
+ )
+ );
+
+ return $categories;
+ }
+
+
+ /**
+ * Print dynamic block information as a JS variable.
+ *
+ * Allows us to ensure we only add visibility attributes to static blocks.
+ * Prevents an issue causing rest api validation issues during attribute validation
+ * because it's impossible to register custom attributes on a block.
+ *
+ * @link https://github.com/gocodebox/lifterlms-blocks/issues/30
+ *
+ * @since 1.5.1
+ * @since 2.0.0 Since WordPress 5.8 blocks are available in widgets and customizer screen too.
+ *
+ * @return void
+ */
+ public function admin_print_scripts() {
+
+ $screen = get_current_screen();
+ if ( ! $screen || ( empty( $screen->is_block_editor ) && 'customize' !== $screen->base ) ) {
+ return;
+ }
+
+ echo '';
+
+ }
+
+ /**
+ * Retrieve a list of dynamic block names registered with WordPress (excluding LifterLMS blocks).
+ *
+ * @since 1.5.1
+ *
+ * @return array
+ */
+ private function get_dynamic_block_names() {
+ $blocks = array();
+ foreach ( get_dynamic_block_names() as $name ) {
+ if ( 0 !== strpos( $name, 'llms/' ) ) {
+ $blocks[] = $name;
+ }
+ }
+ return apply_filters( 'llms_blocks_get_dynamic_block_names', $blocks );
+ }
+
+ /**
+ * Include all files.
+ *
+ * @since 2.0.0
+ * @since 2.3.0 Include php template block file.
+ *
+ * @return void
+ */
+ private function includes() {
+
+ // Functions.
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/functions-llms-blocks.php';
+
+ // Classes.
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-assets.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-abstract-block.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-migrate.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-page-builders.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-post-instructors.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-post-types.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-post-visibility.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-reusable.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-status-tools.php';
+
+ // Block Visibility Component.
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/class-llms-blocks-visibility.php';
+
+ // Dynamic Blocks.
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/blocks/class-llms-blocks-course-information-block.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/blocks/class-llms-blocks-course-syllabus-block.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/blocks/class-llms-blocks-course-progress-block.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/blocks/class-llms-blocks-instructors-block.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/blocks/class-llms-blocks-lesson-navigation-block.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/blocks/class-llms-blocks-lesson-progression-block.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/blocks/class-llms-blocks-pricing-table-block.php';
+ require_once LLMS_BLOCKS_PLUGIN_DIR . '/includes/blocks/class-llms-blocks-php-template-block.php';
+
+ }
+
+ /**
+ * Register all blocks & components.
+ *
+ * @since 1.0.0
+ * @since 1.4.0 Add status tools class.
+ * @since 1.9.0 Added course progress block class.
+ * @since 2.0.0 Return early if LifterLMS isn't installed, move file inclusion to `$this->includes()`,
+ * and moved actions and filters from the constructor.
+ * @since 2.2.1 Handle '-src' in WordPress version numbers.
+ * @since 2.5.0 Updated minimum LifterLMS core version to 7.2.0.
+ *
+ * @return void
+ */
+ public function init() {
+
+ if ( ! function_exists( 'llms' ) || ! version_compare( self::MIN_CORE_VERSION, llms()->version, '<=' ) ) {
+ return;
+ }
+
+ $this->includes();
+
+ add_action( 'add_meta_boxes', array( $this, 'remove_metaboxes' ), 999, 2 );
+
+ global $wp_version;
+ $filter = version_compare( $wp_version, '5.8-src', '>=' ) ? 'block_categories_all' : 'block_categories';
+
+ add_filter( $filter, array( $this, 'add_block_category' ) );
+ add_action( 'admin_print_scripts', array( $this, 'admin_print_scripts' ), 15 );
+
+ /**
+ * When loaded as a library included by the LifterLMS core localization is handled by the LifterLMS core.
+ *
+ * When the plugin is loaded by itself as a plugin, we must localize it independently.
+ */
+ if ( ! defined( 'LLMS_BLOCKS_LIB' ) || ! LLMS_BLOCKS_LIB ) {
+ add_action( 'init', array( $this, 'load_textdomain' ), 0 );
+ }
+
+ }
+
+ /**
+ * Load l10n files.
+ *
+ * This method is only used when the plugin is loaded as a standalone plugin (for development purposes),
+ * otherwise (when loaded as a library from within the LifterLMS core plugin) the localization
+ * strings are included into the LifterLMS Core plugin's po/mo files and are localized by the LifterLMS
+ * core plugin.
+ *
+ * Files can be found in the following order (The first loaded file takes priority):
+ * 1. WP_LANG_DIR/lifterlms/lifterlms-blocks-LOCALE.mo
+ * 2. WP_LANG_DIR/plugins/lifterlms-blocks-LOCALE.mo
+ * 3. WP_CONTENT_DIR/plugins/lifterlms-blocks/i18n/lifterlms-blocks-LOCALE.mo
+ *
+ * Note: The function `load_plugin_textdomain()` is not used because the same textdomain as the LifterLMS core
+ * is used for this plugin but the file is named `lifterlms-blocks` in order to allow using a separate language
+ * file for each codebase.
+ *
+ * @since 1.10.0
+ *
+ * @return void
+ */
+ public function load_textdomain() {
+
+ // load locale.
+ $locale = apply_filters( 'plugin_locale', get_locale(), 'lifterlms' );
+
+ // Load from the LifterLMS "safe" directory if it exists.
+ load_textdomain( 'lifterlms', WP_LANG_DIR . '/lifterlms/lifterlms-blocks-' . $locale . '.mo' );
+
+ // Load from the default plugins language file directory.
+ load_textdomain( 'lifterlms', WP_LANG_DIR . '/plugins/lifterlms-blocks-' . $locale . '.mo' );
+
+ // Load from the plugin's language file directory.
+ load_textdomain( 'lifterlms', LLMS_BLOCKS_PLUGIN_DIR . '/i18n/lifterlms-blocks-' . $locale . '.mo' );
+
+ }
+
+ /**
+ * Remove deprecated core metaboxes.
+ *
+ * @since 1.0.0
+ * @since 1.3.0 Updated.
+ *
+ * @param string $post_type WP post type of the current post.
+ * @param string $post WP_Post.
+ * @return void
+ */
+ public function remove_metaboxes( $post_type, $post ) {
+
+ if ( ! llms_blocks_is_classic_enabled_for_post( $post ) ) {
+
+ remove_meta_box( 'llms-instructors', 'course', 'normal' );
+ remove_meta_box( 'llms-instructors', 'llms_membership', 'normal' );
+
+ }
+
+ }
+
+}
+
+return new LLMS_Blocks();
diff --git a/libraries/lifterlms-blocks/includes/functions-llms-blocks.php b/libraries/lifterlms-blocks/includes/functions-llms-blocks.php
new file mode 100644
index 0000000000..9102605455
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/functions-llms-blocks.php
@@ -0,0 +1,75 @@
+ID, 'classic-editor-remember', true ) );
+ }
+
+ // Uses same editor for all posts.
+ } else {
+
+ $ret = ( 'classic' === get_option( 'classic-editor-replace', 'classic' ) );
+
+ }
+ }
+
+ return apply_filters( 'llms_blocks_is_classic_enabled_for_post', $ret, $post );
+
+}
+
+/**
+ * Determine if a post is migrated
+ *
+ * @param mixed $post WP_Post or WP_Post ID.
+ * @return boolean
+ * @since 1.3.1
+ * @version 1.3.1
+ */
+function llms_blocks_is_post_migrated( $post ) {
+
+ $post_id = null;
+ $ret = false;
+
+ $post = get_post( $post );
+ if ( $post ) {
+
+ $post_id = $post->ID;
+
+ // Classic editor is being used for this post.
+ if ( llms_blocks_is_classic_enabled_for_post( $post_id ) ) {
+ $ret = false;
+ } else {
+ $ret = llms_parse_bool( get_post_meta( $post_id, '_llms_blocks_migrated', true ) );
+ }
+ }
+
+ return apply_filters( 'llms_blocks_is_post_migrated', $ret, $post_id );
+
+}
diff --git a/libraries/lifterlms-blocks/includes/index.php b/libraries/lifterlms-blocks/includes/index.php
new file mode 100644
index 0000000000..82e2315c6b
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/index.php
@@ -0,0 +1,2 @@
+chaining = true;
+ $this->$command( $args, $assoc_args );
+ $this->chaining = false;
+ }
+
+ /**
+ * Retrieve an LLMS_Add_On object for a given add-on by it's slug.
+ *
+ * @since 0.0.1
+ *
+ * @param string $slug An add-on slug. Must be prefixed.
+ * @param bool|WP_Error|string $err If truthy, will return `null` and use log to the console using a WP_CLI method as defined by $err_type.
+ * Pass `true` to output a default error message.
+ * Pass a WP_Error object or string to use as the error.
+ * @param string $err_type Method to pass `$err` to when an error is encountered. Default `\WP_CLI::error()`.
+ * Use `\WP_CLI::warning()` or `\WP_CLI::log()` where appropriate.
+ * @return LLMS_Add_On|boolean|null Returns an add-on object if the add-on can be located or `false` if not found.
+ * Returns `null` when an error is encountered and `$err` is a truthy.
+ */
+ protected function get_addon( $slug, $err = false, $err_type = 'error' ) {
+
+ $addon = llms_get_add_on( $this->prefix_slug( $slug ), 'slug' );
+ $exists = ! empty( $addon->get( 'id' ) );
+
+ if ( ! $exists && $err ) {
+ $err = is_bool( $err ) ? sprintf( 'Invalid slug: %s.', $slug ) : $err;
+ return \WP_CLI::$err_type( $err );
+ }
+
+ return ! $exists ? false : $addon;
+ }
+
+ /**
+ * Prefix an add-on slug with `lifterlms-` if it's not already present.
+ *
+ * @since 0.0.1
+ *
+ * @param string $slug Add-on slug.
+ * @return string
+ */
+ protected function prefix_slug( $slug ) {
+ if ( 0 !== strpos( $slug, 'lifterlms-' ) ) {
+ $slug = "lifterlms-{$slug}";
+ }
+ return $slug;
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/AddOn/Activate.php b/libraries/lifterlms-cli/src/Commands/AddOn/Activate.php
new file mode 100644
index 0000000000..a7973ba0dc
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/AddOn/Activate.php
@@ -0,0 +1,101 @@
+...]
+ * : The slug of one or more LifterLMS add-on to install.
+ *
+ * [--all]
+ * : If set, all of the LifterLMS add-ons installed on the site will be activated.
+ *
+ * ## EXAMPLES
+ *
+ * # Activate the LifterLMS Groups add-on.
+ * $ wp llms addon activate lifterlms-groups
+ *
+ * # Activate an add-on without using the `lifterlms-` prefix.
+ * $ wp llms addon activate advanced-videos
+ *
+ * # Activate multiple LifterLMS add-ons.
+ * $ wp llms addon activate lifterlms-groups lifterlms-assignments lifterlms-pdfs
+ *
+ * # Activate all installed LifterLMS add-ons.
+ * $ wp llms addon activate --all
+ *
+ * @since 0.0.1
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @param array $assoc_args Associative array of command options.
+ * @return null
+ */
+ public function activate( $args, $assoc_args ) {
+
+ if ( ! empty( $assoc_args['all'] ) ) {
+ $args = $this->get_available_addons( 'inactive', false );
+ if ( empty( $args ) ) {
+ return \WP_CLI::warning( 'No add-ons to activate.' );
+ }
+ }
+
+ $results = $this->loop( $args, $assoc_args, 'activate_one' );
+ if ( ! $this->chaining ) {
+ \WP_CLI\Utils\report_batch_operation_results( 'add-on', 'activate', count( $args ), $results['successes'], $results['errors'] );
+ }
+
+ }
+
+ /**
+ * Loop callback function for activate()
+ *
+ * Ensures add-on can be activated and actually activates the add-on.
+ *
+ * @since 0.0.1
+ * @since 0.0.2 Fixed unmerged placeholder in warning message when add-on is not installed.
+ *
+ * @param string $slug Add-on slug.
+ * @param LLMS_Add_On $addon Add-on object.
+ * @param array $assoc_args Associative array of command options.
+ * @return null|true Returns `null` if an error is encountered and `true` on success.
+ */
+ private function activate_one( $slug, $addon, $assoc_args ) {
+
+ if ( $addon->is_active() ) {
+ return \WP_CLI::warning( sprintf( 'Add-on "%s" is already active.', $slug ) );
+ }
+
+ if ( ! $addon->is_installed() ) {
+ return \WP_CLI::warning( sprintf( 'Add-on "%1$s" is not installed. Run \'wp llms addon install %s\' to install it.', $slug ) );
+ }
+
+ $res = $addon->activate();
+ if ( is_wp_error( $res ) ) {
+ return \WP_CLI::warning( $res );
+ }
+
+ \WP_CLI::log( $res );
+
+ return true;
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/AddOn/ChannelSet.php b/libraries/lifterlms-cli/src/Commands/AddOn/ChannelSet.php
new file mode 100644
index 0000000000..256c6fe07f
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/AddOn/ChannelSet.php
@@ -0,0 +1,61 @@
+
+ * : The slug of the add-on.
+ *
+ * []
+ * : The update channel to subscribe to.
+ * ---
+ * default: 'stable'
+ * options:
+ * - stable
+ * - beta
+ * ---
+ *
+ * ## EXAMPLES
+ *
+ * # Subscribe the Groups add-on to the beta channel.
+ * $ wp llms addon channel-set lifterlms-groups stable
+ *
+ * # Subscribe to the stable channel.
+ * $ wp llms addon channel-set lifterlms-groups stable
+ *
+ * @subcommand channel-set
+ *
+ * @since 0.0.1
+ * @since 0.0.2 Updated success message.
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @return null
+ */
+ public function channel_set( $args ) {
+
+ $addon = $this->get_addon( $args[0], true );
+ $addon->subscribe_to_channel( $args[1] );
+ return \WP_CLI::success( sprintf( 'Subscribed to the %s channel.', $args[1] ) );
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/AddOn/Deactivate.php b/libraries/lifterlms-cli/src/Commands/AddOn/Deactivate.php
new file mode 100644
index 0000000000..117e898e4b
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/AddOn/Deactivate.php
@@ -0,0 +1,111 @@
+...]
+ * : The slug of one or more add-on to deactivate.
+ *
+ * [--uninstall]
+ * : Uninstall the add-ons after deactivation.
+ *
+ * [--all]
+ * : If set, all of the plugin add-ons installed on the site will be activated.
+ *
+ * ## EXAMPLES
+ *
+ * # Deactivate the LifterLMS Groups add-on.
+ * $ wp llms addon deactivate lifterlms-groups
+ *
+ * # Deactivate an add-on without using the `lifterlms-` prefix.
+ * $ wp llms addon deactivate advanced-videos
+ *
+ * # Deactivate multiple LifterLMS add-ons.
+ * $ wp llms addon deactivate lifterlms-groups lifterlms-assignments lifterlms-pdfs
+ *
+ * # Deactivate all installed LifterLMS add-ons.
+ * $ wp llms addon deactivate --all
+ *
+ * # Deactivate and uninstall the LifterLMS Groups add-on.
+ * $ wp llms addon deactivate lifterlms-groups --uninstall
+ *
+ * @since 0.0.1
+ * @since 0.0.2 Completion messages use says "deactivate(d)" in favor of "activate(d)".
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @param array $assoc_args Associative array of command options.
+ * @return null
+ */
+ public function deactivate( $args, $assoc_args ) {
+
+ if ( ! empty( $assoc_args['all'] ) ) {
+ $args = $this->get_available_addons( 'active', false, 'plugin' );
+ if ( empty( $args ) ) {
+ return \WP_CLI::warning( 'No add-ons to deactivate.' );
+ }
+ }
+
+ $results = $this->loop( $args, $assoc_args, 'deactivate_one' );
+ if ( ! $this->chaining ) {
+ \WP_CLI\Utils\report_batch_operation_results( 'add-on', 'deactivate', count( $args ), $results['successes'], $results['errors'] );
+ }
+
+ }
+
+ /**
+ * Loop callback function for deactivate()
+ *
+ * Ensures add-on can be deactivated and actually deactivates (and maybe uninstalls) the add-on.
+ *
+ * @since 0.0.1
+ *
+ * @param string $slug Add-on slug.
+ * @param LLMS_Add_On $addon Add-on object.
+ * @param array $assoc_args Associative array of command options.
+ * @return null|true Returns `null` if an error is encountered and `true` on success.
+ */
+ private function deactivate_one( $slug, $addon, $assoc_args ) {
+
+ if ( ! $addon->is_installed() ) {
+ return \WP_CLI::warning( sprintf( 'Add-on "%1$s" is not installed.', $slug ) );
+ }
+
+ if ( ! $addon->is_active() ) {
+ return \WP_CLI::warning( sprintf( 'Add-on "%s" is already deactivated.', $slug ) );
+ }
+
+ $res = $addon->deactivate();
+ if ( is_wp_error( $res ) ) {
+ return \WP_CLI::warning( $res );
+ }
+
+ if ( ! empty( $assoc_args['uninstall'] ) ) {
+ $this->chain_command( 'uninstall', array( $slug ) );
+ }
+
+ \WP_CLI::log( $res );
+
+ return true;
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/AddOn/Enumerate.php b/libraries/lifterlms-cli/src/Commands/AddOn/Enumerate.php
new file mode 100644
index 0000000000..d98d9eed07
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/AddOn/Enumerate.php
@@ -0,0 +1,127 @@
+=]
+ * : Filter results based on the value of a field.
+ *
+ * [--field=]
+ * : Prints the value of a single field for each add-on.
+ *
+ * [--fields=]
+ * : Limit the output to only the specified fields. Use "all" to display all available fields.
+ *
+ * [--format=]
+ * : Render output in a particular format.
+ * ---
+ * default: table
+ * options:
+ * - table
+ * - csv
+ * - count
+ * - json
+ * - yaml
+ * ---
+ *
+ * ## AVAILABLE FIELDS
+ *
+ * These fields will be displayed by default for each add-on:
+ *
+ * * name
+ * * status
+ * * update
+ * * version
+ *
+ * These fields are optionally available:
+ *
+ * * update_version
+ * * license
+ * * title
+ * * channel
+ * * type
+ * * file
+ *
+ * ## EXAMPLES
+ *
+ * # List all add-ons.
+ * $ wp llms addon list
+ *
+ * # List all add-ons in JSON format.
+ * $ wp llms addon list --format=json
+ *
+ * # List all add-ons by name only.
+ * $ wp llms addon list --field=name
+ *
+ * # List all add-ons with all available fields.
+ * $ wp llms addon list --fields=all
+ *
+ * # List all add-ons with a custom fields list.
+ * $ wp llms addon list --fields=title,status,version
+ *
+ * # List currently activated add-ons.
+ * $ wp llms addon list --status=active
+ *
+ * # List all theme add-ons.
+ * $ wp llms addon list --type=theme
+ *
+ * # List all add-ons with available updates.
+ * $ wp llms addon list --update=available
+ *
+ * # List all add-ons licensed on the site.
+ * $ wp llms addon list --license=active
+ *
+ * @since 0.0.1
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @param array $assoc_args Associative array of command options.
+ * @return null
+ */
+ public function list( $args, $assoc_args ) {
+
+ $fields = array( 'name', 'status', 'update', 'version' );
+ $all_fields = array_merge( $fields, array( 'update_version', 'license', 'title', 'channel', 'type', 'file' ) );
+
+ // Determine if there's a user filter submitted through`--=`.
+ $filter_field = array_values( array_intersect( $all_fields, array_keys( $assoc_args ) ) );
+
+ $list = $this->get_filtered_items( $assoc_args, ! empty( $filter_field ) ? $filter_field[0] : '' );
+
+ if ( ! empty( $assoc_args['fields'] ) && 'all' === $assoc_args['fields'] ) {
+ $assoc_args['fields'] = $all_fields;
+ }
+
+ $formatter = new Formatter( $assoc_args, $fields );
+ return $formatter->display_items( $list );
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/AddOn/Get.php b/libraries/lifterlms-cli/src/Commands/AddOn/Get.php
new file mode 100644
index 0000000000..0ea53099ee
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/AddOn/Get.php
@@ -0,0 +1,120 @@
+
+ * : The slug of the add-on to get information about.
+ *
+ * ## OPTIONS
+ *
+ * [--field=]
+ * : Retrieve a single piece of information about the add-on.
+ *
+ * [--fields=]
+ * : Limit the output to only the specified fields. Use "all" to display all available fields.
+ *
+ * [--format=]
+ * : Render output in a particular format.
+ * ---
+ * default: table
+ * options:
+ * - table
+ * - csv
+ * - json
+ * - yaml
+ * ---
+ *
+ * ## AVAILABLE FIELDS
+ *
+ * These fields will be displayed by default for each add-on:
+ *
+ * * name
+ * * title
+ * * version
+ * * description
+ * * status
+ *
+ * These fields are optionally available:
+ *
+ * * update
+ * * update_version
+ * * license
+ * * title
+ * * channel
+ * * type
+ * * file
+ * * permalink
+ * * changelog
+ * * documentation
+ *
+ * @since 0.0.1
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @param array $assoc_args Associative array of command options.
+ * @return null
+ */
+ public function get( $args, $assoc_args ) {
+
+ $addon = $this->get_addon( $args[0], true );
+ $fields = array( 'name', 'title', 'version', 'description', 'status' );
+ $all_fields = array_merge( $fields, array( 'update', 'update_version', 'license', 'title', 'channel', 'type', 'file', 'permalink', 'changelog', 'documentation' ) );
+
+ if ( ! empty( $assoc_args['fields'] ) ) {
+ $assoc_args['fields'] = 'all' === $assoc_args['fields'] ? $all_fields : $assoc_args['fields'];
+ } else {
+ $assoc_args['fields'] = $fields;
+ }
+
+ // Get formatted item.
+ $item = $this->format_item( $addon );
+
+ // Put the keys in the order defined by input args.
+ $item = array_merge( array_flip( $assoc_args['fields'] ), $item );
+
+ // Pass the item as an array and all fields for proper formatting when --field= is passed.
+ $list = array( $item );
+ $format_fields = $all_fields;
+
+ // Format when displaying multiple fields.
+ if ( empty( $assoc_args['field'] ) ) {
+
+ $list = array();
+ foreach ( $item as $Field => $Value ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
+ if ( ! in_array( $Field, $assoc_args['fields'], true ) ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
+ continue;
+ }
+ $list[] = compact( 'Field', 'Value' );
+ }
+ $format_fields = array( 'Field', 'Value' );
+ unset( $assoc_args['fields'] );
+
+ }
+
+ $formatter = new Formatter( $assoc_args, $format_fields );
+ return $formatter->display_items( $list );
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/AddOn/Install.php b/libraries/lifterlms-cli/src/Commands/AddOn/Install.php
new file mode 100644
index 0000000000..91892b1df0
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/AddOn/Install.php
@@ -0,0 +1,106 @@
+...]
+ * : The slug of one or more add-on to install.
+ *
+ * [--key=]
+ * : If set, will attempt to activate and use the provided license key.
+ *
+ * [--activate]
+ * : If set, the add-on(s) will be activated immediately after install.
+ *
+ * [--all]
+ * : If set, all of the add-ons available to the site will be installed.
+ * All existing license keys stored on the site will be queried for the list of available add-ons.
+ *
+ * [--type=]
+ * : When using '--all', determines the type of add-on to be installed.
+ * ---
+ * default: 'all'
+ * options:
+ * - all
+ * - plugin
+ * - theme
+ * ---
+ *
+ * @since 0.0.1
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @param array $assoc_args Associative array of command options.
+ * @return null
+ */
+ public function install( $args, $assoc_args ) {
+
+ // If a key is provided, activate it first.
+ if ( ! empty( $assoc_args['key'] ) ) {
+ \WP_CLI::runcommand( "llms license activate {$assoc_args['key']}" );
+ }
+
+ if ( ! empty( $assoc_args['all'] ) ) {
+ $args = $this->get_available_addons( 'uninstalled', true, $assoc_args['type'] );
+ if ( empty( $args ) ) {
+ return \WP_CLI::warning( 'No add-ons to install.' );
+ }
+ }
+
+ $results = $this->loop( $args, $assoc_args, 'install_one' );
+ \WP_CLI\Utils\report_batch_operation_results( 'add-on', 'install', count( $args ), $results['successes'], $results['errors'] );
+
+ }
+
+ /**
+ * Loop callback function for install()
+ *
+ * Ensures add-on can be installed and actually installs (and maybe activates) the add-on.
+ *
+ * @since 0.0.1
+ *
+ * @param string $slug Add-on slug.
+ * @param LLMS_Add_On $addon Add-on object.
+ * @param array $assoc_args Associative array of command options.
+ * @return null|true Returns `null` if an error is encountered and `true` on success.
+ */
+ private function install_one( $slug, $addon, $assoc_args ) {
+
+ if ( $addon->is_installed() ) {
+ return \WP_CLI::warning( sprintf( 'Add-on "%s" is already installed.', $slug ) );
+ }
+
+ \WP_CLI::log( sprintf( 'Installing add-on: %s...', $addon->get( 'title' ) ) );
+ $res = $addon->install();
+ if ( is_wp_error( $res ) ) {
+ return \WP_CLI::warning( $res );
+ }
+
+ \WP_CLI::log( $res );
+ if ( ! empty( $assoc_args['activate'] ) ) {
+ $this->chain_command( 'activate', array( $slug ) );
+ }
+
+ return true;
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/AddOn/Main.php b/libraries/lifterlms-cli/src/Commands/AddOn/Main.php
new file mode 100644
index 0000000000..b5beab0b95
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/AddOn/Main.php
@@ -0,0 +1,202 @@
+ $addon->get( 'slug' ),
+ 'description' => $addon->get( 'description' ),
+ 'status' => $addon->get_status(),
+ 'license' => str_replace( 'license_', '', $addon->get_license_status() ),
+ 'update' => $addon->has_available_update() ? 'available' : 'none',
+ 'version' => $addon->is_installed() ? $addon->get_installed_version() : 'N/A',
+ 'update_version' => $addon->get( 'version' ),
+ 'title' => $addon->get( 'title' ),
+ 'channel' => $addon->get_channel_subscription(),
+ 'type' => $addon->get( 'type' ),
+ 'file' => $addon->get( 'update_file' ),
+ 'permalink' => $addon->get( 'permalink' ),
+ 'changelog' => $addon->get( 'changelog' ),
+ 'documentation' => $addon->get( 'documentation' ),
+ );
+
+ return $formatted;
+ }
+
+ /**
+ * Retrieve an array of available add-on slugs based on the supplied query criteria.
+ *
+ * This function passes data to `wp llms addon list` with specific filters and returns an associative
+ * array of add-on slugs from that list.
+ *
+ * This is used, mostly, to generate a list of available addons for various commands which provide an `--all` flag/option.
+ *
+ * @since 0.0.1
+ *
+ * @param string $status Add-on status, passed as the `--status` option to `llms addon list`.
+ * @param bool $check_license Whether or not the add-on should be licensed. This is used to determine what is installable / upgradeable.
+ * @param string $type Add-on type. Accepts 'all' (default), 'plugin' or 'theme'.
+ * @return string[] Array of add-on slugs meeting the specified filters.
+ */
+ private function get_available_addons( $status, $check_license, $type = 'all' ) {
+
+ $list = \WP_CLI::runcommand(
+ "llms addon list --format=json --status={$status} --fields=name,license,type",
+ array(
+ 'return' => true,
+ )
+ );
+ $list = array_filter(
+ json_decode( $list, true ),
+ function( $item ) use ( $check_license, $type ) {
+ return ( ( $check_license && 'active' === $item['license'] ) || ! $check_license ) && ( 'all' === $type || $type === $item['type'] );
+ }
+ );
+
+ return wp_list_pluck( $list, 'name' );
+
+ }
+
+ /**
+ * Retrieves an optionally filtered list of add-ons for use in the `list` command.
+ *
+ * @since 0.0.1
+ *
+ * @param array $assoc_args Associative array of command options.
+ * @param string $filter_field The optional name of the field to filter results by.
+ * @return array[] Array of add-on items.
+ */
+ private function get_filtered_items( $assoc_args, $filter_field = '' ) {
+
+ $addons = llms_get_add_ons();
+
+ $list = array_filter(
+ $addons['items'],
+ function( $item ) {
+ return // Skip anything without a slug.
+ ! empty( $item['slug'] ) &&
+ // Skip the LifterLMS core.
+ 'lifterlms' !== $item['slug'] &&
+ // Skip third party add-ons.
+ ! in_array( 'third-party', array_keys( $item['categories'] ), true );
+ }
+ );
+
+ // Format remaining items.
+ $list = array_map( array( $this, 'format_item' ), $list );
+
+ // Filter by field value.
+ if ( $filter_field ) {
+ $field_val = $assoc_args[ $filter_field ];
+ $list = array_filter(
+ $list,
+ function( $item ) use ( $filter_field, $field_val ) {
+ return $item[ $filter_field ] === $field_val;
+ }
+ );
+ }
+
+ // Alpha sort the list by slug.
+ usort(
+ $list,
+ function( $a, $b ) {
+ return strcmp( $a['name'], $b['name'] );
+ }
+ );
+
+ return $list;
+
+ }
+
+ /**
+ * Reusable loop function for handling commands which accept one or more slugs as the commands first argument
+ *
+ * @since 0.0.1
+ *
+ * @param string[] $slugs Array of add-on slugs, with or without the `lifterlms-` prefix.
+ * @param array $assoc_args Associative array of command options from the original command.
+ * @param string $callback Name of the method to use for handling a single add-on for the given command.
+ * The callback should accept three arguments:
+ * + @type string $slug Add-on slug for the current item.
+ * + @type LLMS_Add_On $addon Add-on object for the current item.
+ * + @type array $assoc_args Array of arguments from the initial command.
+ * The callback should return a truthy to signal success and
+ * a falsy to signal an error.
+ * @return array {
+ * Associative arrays containing details on the errors and successes encountered during the loop.
+ *
+ * @type int $errors Number of errors encountered in the loop.
+ * @type int $successes Number of success encountered in the loop.
+ * }
+ */
+ private function loop( $slugs, $assoc_args, $callback ) {
+
+ $successes = 0;
+ $errors = 0;
+
+ foreach ( $slugs as $slug ) {
+
+ if ( empty( $slug ) ) {
+ \WP_CLI::warning( 'Ignoring ambiguous empty slug value.' );
+ continue;
+ }
+
+ $addon = $this->get_addon( $slug, true, 'warning' );
+ if ( empty( $addon ) ) {
+ $errors++;
+ continue;
+ }
+
+ if ( ! $this->$callback( $slug, $addon, $assoc_args ) ) {
+ $errors++;
+ continue;
+ }
+
+ $successes++;
+
+ }
+
+ return compact( 'errors', 'successes' );
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/AddOn/Uninstall.php b/libraries/lifterlms-cli/src/Commands/AddOn/Uninstall.php
new file mode 100644
index 0000000000..101a92202e
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/AddOn/Uninstall.php
@@ -0,0 +1,104 @@
+...]
+ * : The slug of one or more add-on to install.
+ *
+ * [--deactivate]
+ * : If set, the plugin add-on(s) will be deactivated prior to uninstalling. Default behavior is to warn and skip if the plugin is active.
+ * Themes cannot be deactivated, another theme must be activated and then an add-on theme can be uninstalled.
+ *
+ * [--all]
+ * : If set, all of the add-ons available to the site will be uninstalled.
+ *
+ * [--type=]
+ * : When using '--all', determines the type of add-on to be uninstalled.
+ * ---
+ * default: 'all'
+ * options:
+ * - all
+ * - plugin
+ * - theme
+ * ---
+ *
+ * @since 0.0.1
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @param array $assoc_args Associative array of command options.
+ * @return null
+ */
+ public function uninstall( $args, $assoc_args ) {
+
+ if ( ! empty( $assoc_args['all'] ) ) {
+ $args = $this->get_available_addons( 'inactive', false, $assoc_args['type'] );
+ if ( empty( $args ) ) {
+ return \WP_CLI::warning( 'No add-ons to uninstall.' );
+ }
+ }
+
+ $results = $this->loop( $args, $assoc_args, 'uninstall_one' );
+ if ( ! $this->chaining ) {
+ \WP_CLI\Utils\report_batch_operation_results( 'add-on', 'uninstall', count( $args ), $results['successes'], $results['errors'] );
+ }
+
+ }
+
+ /**
+ * Loop callback function for uninstall()
+ *
+ * Ensures add-on can be uninstalled and actually installs (and maybe deactivates) the add-on.
+ *
+ * @since 0.0.1
+ *
+ * @param string $slug Add-on slug.
+ * @param LLMS_Add_On $addon Add-on object.
+ * @param array $assoc_args Associative array of command options.
+ * @return null|true Returns `null` if an error is encountered and `true` on success.
+ */
+ private function uninstall_one( $slug, $addon, $assoc_args ) {
+
+ if ( ! $addon->is_installed() ) {
+ return \WP_CLI::warning( sprintf( 'Add-on "%s" is not installed.', $slug ) );
+ }
+
+ if ( $addon->is_active() ) {
+ if ( ! empty( $assoc_args['deactivate'] ) ) {
+ $this->chain_command( 'deactivate', array( $slug ) );
+ } else {
+ return \WP_CLI::warning( sprintf( 'Add-on "%s" is active.', $slug ) );
+ }
+ }
+
+ $res = $addon->uninstall();
+ if ( is_wp_error( $res ) ) {
+ return \WP_CLI::warning( $res );
+ }
+
+ \WP_CLI::log( $res );
+
+ return true;
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/AddOn/Update.php b/libraries/lifterlms-cli/src/Commands/AddOn/Update.php
new file mode 100644
index 0000000000..b179dbdcee
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/AddOn/Update.php
@@ -0,0 +1,165 @@
+...]
+ * : The slug of one or more add-on to update.
+ *
+ * [--exclude]
+ * : A comma-separated list of add-on slugs which should be excluded from updating.
+ *
+ * [--all]
+ * : If set, all of the add-ons available to the site will be uninstalled.
+ *
+ * [--type=]
+ * : When using '--all', determines the type of add-on to be uninstalled.
+ * ---
+ * default: 'all'
+ * options:
+ * - all
+ * - plugin
+ * - theme
+ * ---
+ *
+ * [--format=]
+ * : Render output in a particular format.
+ * ---
+ * default: table
+ * options:
+ * - table
+ * - csv
+ * - json
+ * - yaml
+ * ---
+ *
+ * [--dry-run]
+ * : Preview which plugins would be updated.
+ *
+ * @since 0.0.1
+ *
+ * @param array $include List of add-on slugs to be updated.
+ * @param array $assoc_args Associative array of command options.
+ * @return null
+ */
+ public function update( $include, $assoc_args ) {
+
+ $include = array_map( array( $this, 'prefix_slug' ), $include );
+
+ $fields = array( 'name', 'status', 'version', 'update_version' );
+
+ $exclude = ! empty( $assoc_args['exclude'] ) ? array_map( array( $this, 'prefix_slug' ), explode( ',', $assoc_args['exclude'] ) ) : array();
+
+ // Retrieve all available updates and we'll filter it down.
+ $list = \WP_CLI::runcommand(
+ "llms addon list --format=json {$fieldopt}--update=available --fields=name,status,version,update_version",
+ array(
+ 'return' => true,
+ )
+ );
+ $list = array_filter(
+ json_decode( $list, true ),
+ function( $item ) use ( $include, $exclude ) {
+ // Add-on is active and an update is available.
+ return // Add-on is installed.
+ in_array( $item['status'], array( 'active', 'inactive' ), true ) &&
+ // Not excluded.
+ ! in_array( $item['name'], $exclude, true ) &&
+ // No add-ons specified or the add-on is in the specified list.
+ ( empty( $include ) || in_array( $item['name'], $include, true ) );
+ }
+ );
+
+ // WP-CLI `wp plugin update` shows a string when displaying table and no output for other formats.
+ if ( empty( $list ) ) {
+ if ( 'table' === $assoc_args['format'] ) {
+ return \WP_CLI::log( 'No add-on updates available.' );
+ }
+ return;
+ }
+
+ /**
+ * The WP Core upgrader pulls information from the site transient.
+ * If the update check cron or a manual visit to an update screen on the admin panel
+ * hasn't recently occurred the transient won't be set and we'll know there's an update
+ * but the transient will not and the upgrader won't be able to upgrade.
+ *
+ * So we'll force a redundant check to take place here to ensure that we can upgrade.
+ */
+ wp_update_plugins();
+ wp_update_themes();
+
+ if ( empty( $assoc_args['dry-run'] ) ) {
+
+ $fields = array( 'name', 'status', 'old_version', 'new_version' );
+
+ $errors = 0;
+ $successes = 0;
+ foreach ( $list as &$item ) {
+
+ if ( $this->update_one( $item ) ) {
+ $successes++;
+ } else {
+ $errors++;
+ }
+ }
+
+ \WP_CLI\Utils\report_batch_operation_results( 'add-on', 'update', count( $list ), $successes, $errors );
+
+ }
+
+ $formatter = new Formatter( $assoc_args, $fields );
+ return $formatter->display_items( $list );
+
+ }
+
+
+ /**
+ * Update a single add-on
+ *
+ * @since 0.0.1
+ *
+ * @param array $item Associative array of add-on data.
+ * @return boolean Returns `false` when an error is encountered and `true` otherwise.
+ */
+ private function update_one( &$item ) {
+
+ $addon = $this->get_addon( $item['name'] );
+
+ \WP_CLI::log( sprintf( 'Updating add-on: %s...', $addon->get( 'title' ) ) );
+ $res = $addon->update();
+ if ( is_wp_error( $res ) ) {
+ \WP_CLI::warning( $res );
+ return false;
+ }
+
+ $item['old_version'] = $item['version'];
+ $item['new_version'] = $item['update_version'];
+
+ \WP_CLI::log( $res );
+ return true;
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/License.php b/libraries/lifterlms-cli/src/Commands/License.php
new file mode 100644
index 0000000000..650ec36dc9
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/License.php
@@ -0,0 +1,105 @@
+]
+ * : The license key to be activated.
+ *
+ * @since 0.0.1
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @return null
+ */
+ public function activate( $args ) {
+
+ $res = \LLMS_Helper_Keys::activate_keys( $args[0] );
+ if ( ! empty( $res['data']['errors'] ) ) {
+ return \WP_CLI::error( $res['data']['errors'][0] );
+ } elseif ( ! empty( $res['data']['activations'] ) ) {
+ \LLMS_Helper_Keys::add_license_key( $res['data']['activations'][0] );
+ return \WP_CLI::success( sprintf( 'License key "%s" has been activated on this site.', $args[0] ) );
+ }
+
+ return \WP_CLI::error( 'An unknown error was encountered.' );
+
+ }
+
+ /**
+ * Deactivate a license key.
+ *
+ * ## OPTIONS
+ *
+ * []
+ * : The license key to be deactivated.
+ *
+ * @since 0.0.1
+ * @since 0.0.2 Use a strict comparison when checking response status.
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @return null
+ */
+ public function deactivate( $args ) {
+
+ $res = \LLMS_Helper_Keys::deactivate_keys( array( $args[0] ) );
+ if ( ! empty( $res['data']['errors'] ) ) {
+ return \WP_CLI::error( $res['data']['errors'][0] );
+ } elseif ( ! empty( $res['data']['deactivations'] ) ) {
+ \LLMS_Helper_Keys::remove_license_key( $args[0] );
+ return \WP_CLI::success( sprintf( 'License key "%s" has been deactivated from this site.', $args[0] ) );
+ } elseif ( ! empty( $res['data']['status'] ) && 200 === absint( $res['data']['status'] ) ) {
+ return \WP_CLI::error( sprintf( 'License key "%s" was not active on this site.', $args[0] ) );
+ }
+
+ return \WP_CLI::error( 'An unknown error was encountered.' );
+
+ }
+
+ /**
+ * List activated license keys.
+ *
+ * ## OPTIONS
+ *
+ * []
+ * : The license key to be deactivated.
+ *
+ * @since 0.0.1
+ *
+ * @return null
+ */
+ public function list() {
+
+ $list = array_keys( llms_helper_options()->get_license_keys() );
+
+ if ( 0 === count( $list ) ) {
+ return \WP_CLI::warning( 'No license keys found on this site.' );
+ }
+
+ foreach ( $list as $key ) {
+ \WP_CLI::log( $key );
+ }
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/Restful/Command.php b/libraries/lifterlms-cli/src/Commands/Restful/Command.php
new file mode 100644
index 0000000000..c7eaa3a5dd
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/Restful/Command.php
@@ -0,0 +1,670 @@
+name = $name;
+ $parsed_args = preg_match_all( '#\([^\)]+\)#', $route, $matches );
+ $this->resource_identifier = ! empty( $matches[0] ) ? array_pop( $matches[0] ) : null;
+ $this->route = rtrim( $route );
+ $this->schema = $schema;
+ }
+
+ /**
+ * Create a new item.
+ *
+ * @subcommand create
+ */
+ public function create_item( $args, $assoc_args ) {
+ list( $status, $body ) = $this->do_request( 'POST', $this->get_base_route(), $assoc_args );
+ if ( \WP_CLI\Utils\get_flag_value( $assoc_args, 'porcelain' ) ) {
+ \WP_CLI::line( $body['id'] );
+ } else {
+ \WP_CLI::success( "Created {$this->name} {$body['id']}." );
+ }
+ }
+
+ /**
+ * Generate some items.
+ *
+ * @subcommand generate
+ */
+ public function generate_items( $args, $assoc_args ) {
+
+ $count = $assoc_args['count'];
+ unset( $assoc_args['count'] );
+ $format = $assoc_args['format'];
+ unset( $assoc_args['format'] );
+
+ $notify = false;
+ if ( 'progress' === $format ) {
+ $notify = \WP_CLI\Utils\make_progress_bar( 'Generating items', $count );
+ }
+
+ for ( $i = 0; $i < $count; $i++ ) {
+
+ list( $status, $body ) = $this->do_request( 'POST', $this->get_base_route(), $assoc_args );
+
+ if ( 'progress' === $format ) {
+ $notify->tick();
+ } elseif ( 'ids' === $format ) {
+ echo esc_html( $body['id'] );
+ if ( $i < $count - 1 ) {
+ echo ' ';
+ }
+ }
+ }
+
+ if ( 'progress' === $format ) {
+ $notify->finish();
+ }
+ }
+
+ /**
+ * Delete an existing item.
+ *
+ * @subcommand delete
+ */
+ public function delete_item( $args, $assoc_args ) {
+ list( $status, $body ) = $this->do_request( 'DELETE', $this->get_filled_route( $args ), $assoc_args );
+ $id = isset( $body['previous'] ) ? $body['previous']['id'] : $body['id'];
+ if ( \WP_CLI\Utils\get_flag_value( $assoc_args, 'porcelain' ) ) {
+ \WP_CLI::line( $id );
+ } else {
+ if ( empty( $assoc_args['force'] ) ) {
+ \WP_CLI::success( "Trashed {$this->name} {$id}." );
+ } else {
+ \WP_CLI::success( "Deleted {$this->name} {$id}." );
+ }
+ }
+ }
+
+ /**
+ * Get a single item.
+ *
+ * @subcommand get
+ */
+ public function get_item( $args, $assoc_args ) {
+ list( $status, $body, $headers ) = $this->do_request( 'GET', $this->get_filled_route( $args ), $assoc_args );
+
+ if ( ! empty( $assoc_args['fields'] ) ) {
+ $body = self::limit_item_to_fields( $body, $fields );
+ }
+
+ if ( 'headers' === $assoc_args['format'] ) {
+ echo json_encode( $headers );
+ } elseif ( 'body' === $assoc_args['format'] ) {
+ echo json_encode( $body );
+ } elseif ( 'envelope' === $assoc_args['format'] ) {
+ echo json_encode(
+ array(
+ 'body' => $body,
+ 'headers' => $headers,
+ 'status' => $status,
+ 'api_url' => $this->api_url,
+ )
+ );
+ } else {
+ $formatter = $this->get_formatter( $assoc_args );
+ $formatter->display_item( $body );
+ }
+ }
+
+ /**
+ * List all items.
+ *
+ * @subcommand list
+ */
+ public function list_items( $args, $assoc_args ) {
+ if ( ! empty( $assoc_args['format'] ) && 'count' === $assoc_args['format'] ) {
+ $method = 'HEAD';
+ } else {
+ $method = 'GET';
+ }
+ list( $status, $body, $headers ) = $this->do_request( $method, $this->get_base_route(), $assoc_args );
+ if ( ! empty( $assoc_args['format'] ) && 'ids' === $assoc_args['format'] ) {
+ $items = array_column( $body, 'id' );
+ } else {
+ $items = $body;
+ }
+
+ if ( ! empty( $assoc_args['fields'] ) ) {
+ foreach ( $items as $key => $item ) {
+ $items[ $key ] = self::limit_item_to_fields( $item, $fields );
+ }
+ }
+
+ if ( ! empty( $assoc_args['format'] ) && 'count' === $assoc_args['format'] ) {
+ echo (int) $headers['X-WP-Total'];
+ } elseif ( 'headers' === $assoc_args['format'] ) {
+ echo json_encode( $headers );
+ } elseif ( 'body' === $assoc_args['format'] ) {
+ echo json_encode( $body );
+ } elseif ( 'envelope' === $assoc_args['format'] ) {
+ echo json_encode(
+ array(
+ 'body' => $body,
+ 'headers' => $headers,
+ 'status' => $status,
+ 'api_url' => $this->api_url,
+ )
+ );
+ } else {
+ $formatter = $this->get_formatter( $assoc_args );
+ $formatter->display_items( $items );
+ }
+ }
+
+ /**
+ * Compare items between environments.
+ *
+ *
+ * : Alias for the WordPress site to compare to.
+ *
+ * []
+ * : Limit comparison to a specific resource, instead of the collection.
+ *
+ * [--fields=]
+ * : Limit comparison to specific fields.
+ *
+ * @subcommand diff
+ */
+ public function diff_items( $args, $assoc_args ) {
+
+ list( $alias ) = $args;
+ if ( ! array_key_exists( $alias, \WP_CLI::get_runner()->aliases ) ) {
+ \WP_CLI::error( "Alias '{$alias}' not found." );
+ }
+ $resource = isset( $args[1] ) ? $args[1] : null;
+ $fields = \WP_CLI\Utils\get_flag_value( $assoc_args, 'fields', null );
+
+ list( $from_status, $from_body, $from_headers ) = $this->do_request( 'GET', $this->get_base_route(), array() );
+
+ $php_bin = \WP_CLI::get_php_binary();
+ $script_path = $GLOBALS['argv'][0];
+ $other_args = implode( ' ', array_map( 'escapeshellarg', array( $alias, 'rest', $this->name, 'list' ) ) );
+ $other_assoc_args = \WP_CLI\Utils\assoc_args_to_str( array( 'format' => 'envelope' ) );
+ $full_command = "{$php_bin} {$script_path} {$other_args} {$other_assoc_args}";
+ $process = \WP_CLI\Process::create(
+ $full_command,
+ null,
+ array(
+ 'HOME' => getenv( 'HOME' ),
+ 'WP_CLI_PACKAGES_DIR' => getenv( 'WP_CLI_PACKAGES_DIR' ),
+ 'WP_CLI_CONFIG_PATH' => getenv( 'WP_CLI_CONFIG_PATH' ),
+ )
+ );
+ $result = $process->run();
+ $response = json_decode( $result->stdout, true );
+ $to_headers = $response['headers'];
+ $to_body = $response['body'];
+ $to_api_url = $response['api_url'];
+
+ if ( ! is_null( $resource ) ) {
+ $field = is_numeric( $resource ) ? 'id' : 'slug';
+ $callback = function( $value ) use ( $field, $resource ) {
+ if ( isset( $value[ $field ] ) && $resource == $value[ $field ] ) {
+ return true;
+ }
+ return false;
+ };
+ foreach ( array( 'to_body', 'from_body' ) as $response_type ) {
+ $$response_type = array_filter( $$response_type, $callback );
+ }
+ }
+
+ $display_items = array();
+ do {
+ $from_item = $to_item = array();
+ if ( ! empty( $from_body ) ) {
+ $from_item = array_shift( $from_body );
+ if ( ! empty( $to_body ) && ! empty( $from_item['slug'] ) ) {
+ foreach ( $to_body as $i => $item ) {
+ if ( ! empty( $item['slug'] ) && $item['slug'] === $from_item['slug'] ) {
+ $to_item = $item;
+ unset( $to_body[ $i ] );
+ break;
+ }
+ }
+ }
+ } elseif ( ! empty( $to_body ) ) {
+ $to_item = array_shift( $to_body );
+ }
+
+ if ( ! empty( $to_item ) ) {
+ foreach ( array( 'to_item', 'from_item' ) as $item ) {
+ if ( isset( $$item['_links'] ) ) {
+ unset( $$item['_links'] );
+ }
+ }
+ $display_items[] = array(
+ 'from' => self::limit_item_to_fields( $from_item, $fields ),
+ 'to' => self::limit_item_to_fields( $to_item, $fields ),
+ );
+ }
+ } while ( count( $from_body ) || count( $to_body ) );
+
+ \WP_CLI::line( \cli\Colors::colorize( "%R(-) {$this->api_url} %G(+) {$to_api_url}%n" ) );
+ foreach ( $display_items as $display_item ) {
+ $this->show_difference(
+ $this->name,
+ array(
+ 'from' => $display_item['from'],
+ 'to' => $display_item['to'],
+ )
+ );
+ }
+ }
+
+ /**
+ * Update an existing item.
+ *
+ * @subcommand update
+ */
+ public function update_item( $args, $assoc_args ) {
+ list( $status, $body ) = $this->do_request( 'POST', $this->get_filled_route( $args ), $assoc_args );
+ if ( \WP_CLI\Utils\get_flag_value( $assoc_args, 'porcelain' ) ) {
+ \WP_CLI::line( $body['id'] );
+ } else {
+ \WP_CLI::success( "Updated {$this->name} {$body['id']}." );
+ }
+ }
+
+ /**
+ * Open an existing item in the editor
+ *
+ * @subcommand edit
+ */
+ public function edit_item( $args, $assoc_args ) {
+ $assoc_args['context'] = 'edit';
+ list( $status, $options_body ) = $this->do_request( 'OPTIONS', $this->get_filled_route( $args ), $assoc_args );
+ if ( empty( $options_body['schema'] ) ) {
+ \WP_CLI::error( 'Cannot edit - no schema found for resource.' );
+ }
+ $schema = $options_body['schema'];
+ list( $status, $resource_fields ) = $this->do_request( 'GET', $this->get_filled_route( $args ), $assoc_args );
+ $editable_fields = array();
+ foreach ( $resource_fields as $key => $value ) {
+ if ( ! isset( $schema['properties'][ $key ] ) || ! empty( $schema['properties'][ $key ]['readonly'] ) ) {
+ continue;
+ }
+ $properties = $schema['properties'][ $key ];
+ if ( isset( $properties['properties'] ) ) {
+ $parent_key = $key;
+ $properties = $properties['properties'];
+ foreach ( $value as $key => $value ) {
+ if ( isset( $properties[ $key ] ) && empty( $properties[ $key ]['readonly'] ) ) {
+ if ( ! isset( $editable_fields[ $parent_key ] ) ) {
+ $editable_fields[ $parent_key ] = array();
+ }
+ $editable_fields[ $parent_key ][ $key ] = $value;
+ }
+ }
+ continue;
+ }
+ if ( empty( $properties['readonly'] ) ) {
+ $editable_fields[ $key ] = $value;
+ }
+ }
+ if ( empty( $editable_fields ) ) {
+ \WP_CLI::error( 'Cannot edit - no editable fields found on schema.' );
+ }
+ $ret = \WP_CLI\Utils\launch_editor_for_input( \Spyc::YAMLDump( $editable_fields ), sprintf( 'Editing %s %s', $schema['title'], $args[0] ) );
+ if ( false === $ret ) {
+ \WP_CLI::warning( 'No edits made.' );
+ } else {
+ list( $status, $body ) = $this->do_request( 'POST', $this->get_filled_route( $args ), \Spyc::YAMLLoadString( $ret ) );
+ \WP_CLI::success( "Updated {$schema['title']} {$args[0]}." );
+ }
+ }
+
+ /**
+ * Do a REST Request
+ *
+ * @param string $method
+ */
+ private function do_request( $method, $route, $assoc_args ) {
+ if ( 'internal' === $this->scope ) {
+ if ( ! defined( 'REST_REQUEST' ) ) {
+ define( 'REST_REQUEST', true );
+ }
+ $request = new \WP_REST_Request( $method, $route );
+ if ( in_array( $method, array( 'POST', 'PUT' ) ) ) {
+ $request->set_body_params( $assoc_args );
+ } else {
+ foreach ( $assoc_args as $key => $value ) {
+ $request->set_param( $key, $value );
+ }
+ }
+ if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) {
+ $original_queries = is_array( $GLOBALS['wpdb']->queries ) ? array_keys( $GLOBALS['wpdb']->queries ) : array();
+ }
+ $response = rest_do_request( $request );
+ if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) {
+ $performed_queries = array();
+ foreach ( (array) $GLOBALS['wpdb']->queries as $key => $query ) {
+ if ( in_array( $key, $original_queries ) ) {
+ continue;
+ }
+ $performed_queries[] = $query;
+ }
+ usort(
+ $performed_queries,
+ function( $a, $b ) {
+ if ( $a[1] === $b[1] ) {
+ return 0;
+ }
+ return ( $a[1] > $b[1] ) ? -1 : 1;
+ }
+ );
+
+ $query_count = count( $performed_queries );
+ $query_total_time = 0;
+ foreach ( $performed_queries as $query ) {
+ $query_total_time += $query[1];
+ }
+ $slow_query_message = '';
+ if ( $performed_queries && 'rest' === \WP_CLI::get_config( 'debug' ) ) {
+ $slow_query_message .= '. Ordered by slowness, the queries are:' . PHP_EOL;
+ foreach ( $performed_queries as $i => $query ) {
+ $i++;
+ $bits = explode( ', ', $query[2] );
+ $backtrace = implode( ', ', array_slice( $bits, 13 ) );
+ $seconds = round( $query[1], 6 );
+ $slow_query_message .= <<as_error() ) {
+ \WP_CLI::error( $error );
+ }
+ return array( $response->get_status(), $response->get_data(), $response->get_headers() );
+ } elseif ( 'http' === $this->scope ) {
+ $headers = array();
+ if ( ! empty( $this->auth ) && 'basic' === $this->auth['type'] ) {
+ $headers['Authorization'] = 'Basic ' . base64_encode( $this->auth['username'] . ':' . $this->auth['password'] );
+ }
+ if ( 'OPTIONS' === $method ) {
+ $method = 'GET';
+ $assoc_args['_method'] = 'OPTIONS';
+ }
+ $response = \WP_CLI\Utils\http_request( $method, rtrim( $this->api_url, '/' ) . $route, $assoc_args, $headers );
+ $body = json_decode( $response->body, true );
+ if ( $response->status_code >= 400 ) {
+ if ( ! empty( $body['message'] ) ) {
+ \WP_CLI::error( $body['message'] . ' ' . json_encode( array( 'status' => $response->status_code ) ) );
+ } else {
+ switch ( $response->status_code ) {
+ case 404:
+ \WP_CLI::error( "No {$this->name} found." );
+ break;
+ default:
+ \WP_CLI::error( 'Could not complete request.' );
+ break;
+ }
+ }
+ }
+ return array( $response->status_code, json_decode( $response->body, true ), $response->headers->getAll() );
+ }
+ \WP_CLI::error( 'Invalid scope for REST command.' );
+ }
+
+ /**
+ * Get Formatter object based on supplied parameters.
+ *
+ * @param array $assoc_args Parameters passed to command. Determines formatting.
+ * @return \WP_CLI\Formatter
+ */
+ protected function get_formatter( &$assoc_args ) {
+ if ( ! empty( $assoc_args['fields'] ) ) {
+ if ( is_string( $assoc_args['fields'] ) ) {
+ $fields = explode( ',', $assoc_args['fields'] );
+ } else {
+ $fields = $assoc_args['fields'];
+ }
+ } else {
+ if ( ! empty( $assoc_args['context'] ) ) {
+ $fields = $this->get_context_fields( $assoc_args['context'] );
+ } else {
+ $fields = $this->get_context_fields( 'view' );
+ }
+ }
+ return new \WP_CLI\Formatter( $assoc_args, $fields );
+ }
+
+ /**
+ * Get a list of fields present in a given context
+ *
+ * @param string $context
+ * @return array
+ */
+ private function get_context_fields( $context ) {
+ $fields = array();
+ foreach ( $this->schema['properties'] as $key => $args ) {
+ if ( empty( $args['context'] ) || in_array( $context, $args['context'] ) ) {
+ $fields[] = $key;
+ }
+ }
+ return $fields;
+ }
+
+ /**
+ * Get the base route for this resource
+ *
+ * @return string
+ */
+ private function get_base_route() {
+ return substr( $this->route, 0, strlen( $this->route ) - strlen( $this->resource_identifier ) );
+ }
+
+ /**
+ * Fill the route based on provided $args
+ */
+ private function get_filled_route( $args ) {
+ return rtrim( $this->get_base_route(), '/' ) . '/' . $args[0];
+ }
+
+ /**
+ * Visually depict the difference between "dictated" and "current"
+ *
+ * @param array
+ */
+ private function show_difference( $slug, $difference ) {
+ $this->output_nesting_level = 0;
+ $this->nested_line( $slug . ': ' );
+ $this->recursively_show_difference( $difference['to'], $difference['from'] );
+ $this->output_nesting_level = 0;
+ }
+
+ /**
+ * Recursively output the difference between "dictated" and "current"
+ */
+ private function recursively_show_difference( $dictated, $current = null ) {
+
+ $this->output_nesting_level++;
+
+ if ( $this->is_assoc_array( $dictated ) ) {
+
+ foreach ( $dictated as $key => $value ) {
+
+ if ( $this->is_assoc_array( $value ) || is_array( $value ) ) {
+
+ $new_current = isset( $current[ $key ] ) ? $current[ $key ] : null;
+ if ( $new_current ) {
+ $this->nested_line( $key . ': ' );
+ } else {
+ $this->add_line( $key . ': ' );
+ }
+
+ $this->recursively_show_difference( $value, $new_current );
+
+ } elseif ( is_string( $value ) ) {
+
+ $pre = $key . ': ';
+
+ if ( isset( $current[ $key ] ) && $current[ $key ] !== $value ) {
+
+ $this->remove_line( $pre . $current[ $key ] );
+ $this->add_line( $pre . $value );
+
+ } elseif ( ! isset( $current[ $key ] ) ) {
+
+ $this->add_line( $pre . $value );
+
+ }
+ }
+ }
+ } elseif ( is_array( $dictated ) ) {
+
+ foreach ( $dictated as $value ) {
+
+ if ( ! $current
+ || ! in_array( $value, $current ) ) {
+ $this->add_line( '- ' . $value );
+ }
+ }
+ } elseif ( is_string( $value ) ) {
+
+ $pre = $key . ': ';
+
+ if ( isset( $current[ $key ] ) && $current[ $key ] !== $value ) {
+
+ $this->remove_line( $pre . $current[ $key ] );
+ $this->add_line( $pre . $value );
+
+ } elseif ( ! isset( $current[ $key ] ) ) {
+
+ $this->add_line( $pre . $value );
+
+ } else {
+
+ $this->nested_line( $pre );
+
+ }
+ }
+
+ $this->output_nesting_level--;
+
+ }
+
+ /**
+ * Output a line to be added
+ *
+ * @param string
+ */
+ private function add_line( $line ) {
+ $this->nested_line( $line, 'add' );
+ }
+
+ /**
+ * Output a line to be removed
+ *
+ * @param string
+ */
+ private function remove_line( $line ) {
+ $this->nested_line( $line, 'remove' );
+ }
+
+ /**
+ * Output a line that's appropriately nested
+ */
+ private function nested_line( $line, $change = false ) {
+
+ if ( 'add' == $change ) {
+ $color = '%G';
+ $label = '+ ';
+ } elseif ( 'remove' == $change ) {
+ $color = '%R';
+ $label = '- ';
+ } else {
+ $color = false;
+ $label = false;
+ }
+
+ $spaces = ( $this->output_nesting_level * 2 ) + 2;
+ if ( $color && $label ) {
+ $line = \cli\Colors::colorize( "{$color}{$label}" ) . $line . \cli\Colors::colorize( '%n' );
+ $spaces = $spaces - 2;
+ }
+ \WP_CLI::line( str_pad( ' ', $spaces ) . $line );
+ }
+
+ /**
+ * Whether or not this is an associative array
+ *
+ * @param array
+ * @return bool
+ */
+ private function is_assoc_array( $array ) {
+
+ if ( ! is_array( $array ) ) {
+ return false;
+ }
+
+ return array_keys( $array ) !== range( 0, count( $array ) - 1 );
+ }
+
+ /**
+ * Reduce an item to specific fields.
+ *
+ * @param array $item
+ * @param array $fields
+ * @return array
+ */
+ private static function limit_item_to_fields( $item, $fields ) {
+ if ( empty( $fields ) ) {
+ return $item;
+ }
+ if ( is_string( $fields ) ) {
+ $fields = explode( ',', $fields );
+ }
+ foreach ( $item as $i => $field ) {
+ if ( ! in_array( $i, $fields ) ) {
+ unset( $item[ $i ] );
+ }
+ }
+ return $item;
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/Restful/Runner.php b/libraries/lifterlms-cli/src/Commands/Restful/Runner.php
new file mode 100644
index 0000000000..a6d2a3f739
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/Restful/Runner.php
@@ -0,0 +1,391 @@
+set_param( 'context', 'help' );
+
+ $response = $wp_rest_server->dispatch( $request );
+ $response_data = $response->get_data();
+ if ( empty( $response_data ) ) {
+ return;
+ }
+
+ foreach ( $response_data['routes'] as $route => $route_data ) {
+
+ // Skip non LifterLMS routes.
+ if ( 0 !== strpos( $route, '/llms/' ) ) {
+ continue;
+ }
+
+ if ( empty( $route_data['schema']['title'] ) ) {
+ \WP_CLI::debug( "No schema title found for {$route}, skipping LifterLMS CLI REST command registration.", 'lifterlms' );
+ continue;
+ }
+
+ $name = $route_data['schema']['title'];
+ $rest_command = new Command( $name, $route, $route_data['schema'] );
+ self::register_route_commands( $rest_command, $route, $route_data );
+
+ }
+
+ }
+
+
+ private static function get_command_root_desc( $resource ) {
+ $resource = str_replace( array( '-', 'students', 'api' ), array( ' ', 'student', 'API' ), $resource );
+ if ( 's' !== substr( $resource, -1 ) ) {
+ $resource .= 's';
+ }
+ return sprintf( 'Manage %s.', $resource );
+ }
+
+ private static function get_command_short_desc( $command, $resource ) {
+
+ $before = '';
+ $after = '';
+
+
+ switch ( $command ) {
+ case 'create':
+ $before = 'Creates a new';
+ break;
+
+ case 'delete':
+ $before = 'Deletes an existing';
+ break;
+
+ case 'diff':
+ $before = 'Compare';
+ $resource = self::pluralize_resource( $resource );
+ $after = 'between environments';
+ break;
+
+ case 'edit':
+ $before = 'Launches system editor to edit the';
+ $after = 'content';
+ break;
+
+ case 'generate':
+ $before = 'Generates some';
+ $resource = self::pluralize_resource( $resource );
+ break;
+
+ case 'get':
+ $before = 'Gets details about a';
+ break;
+
+ case 'list':
+ $before = 'Gets a list of ';
+ $resource = self::pluralize_resource( $resource );
+ break;
+
+ case 'update':
+ $before = 'Updates an existing';
+ break;
+ }
+
+ return trim( implode( ' ', array( $before, $resource, $after ) ) ) . '.';
+ }
+
+ private static function pluralize_resource( $resource ) {
+
+ switch ( $resource ) {
+ default:
+ $resource .= 's';
+ }
+
+ return $resource;
+ }
+
+ private static function get_supported_commands( $route, $route_data ) {
+
+ $supported_commands = array();
+ foreach ( $route_data['endpoints'] as $endpoint ) {
+
+ $parsed_args = preg_match_all( '#\([^\)]+\)#', $route, $matches );
+ $resource_id = ! empty( $matches[0] ) ? array_pop( $matches[0] ) : null;
+ $trimmed_route = rtrim( $route );
+ $is_singular = $resource_id === substr( $trimmed_route, - strlen( $resource_id ) );
+
+ // List a collection
+ if ( array( 'GET' ) == $endpoint['methods']
+ && ! $is_singular ) {
+ $supported_commands['list'] = ! empty( $endpoint['args'] ) ? $endpoint['args'] : array();
+ }
+
+ // Create a specific resource
+ if ( array( 'POST' ) == $endpoint['methods']
+ && ! $is_singular ) {
+ $supported_commands['create'] = ! empty( $endpoint['args'] ) ? $endpoint['args'] : array();
+ }
+
+ // Get a specific resource
+ if ( array( 'GET' ) == $endpoint['methods']
+ && $is_singular ) {
+ $supported_commands['get'] = ! empty( $endpoint['args'] ) ? $endpoint['args'] : array();
+ }
+
+ // Update a specific resource
+ if ( in_array( 'POST', $endpoint['methods'] )
+ && $is_singular ) {
+ $supported_commands['update'] = ! empty( $endpoint['args'] ) ? $endpoint['args'] : array();
+ }
+
+ // Delete a specific resource
+ if ( array( 'DELETE' ) == $endpoint['methods']
+ && $is_singular ) {
+ $supported_commands['delete'] = ! empty( $endpoint['args'] ) ? $endpoint['args'] : array();
+ }
+ }
+
+ return $supported_commands;
+
+ }
+
+ public static function before_invoke_command() {
+
+ /**
+ * If `--user` was passed the user will already be set, otherwise there won't be a user.
+ *
+ * It is "safe" to assume that someone using the CLI has admin access and we'll set the current
+ * user to be the first admin we find in the DB that has the `manage_options` cap.
+ */
+ if ( ! get_current_user_id() ) {
+ $user = \LLMS_Install::get_can_install_user_id();
+ if ( $user ) {
+ wp_set_current_user( $user );
+ }
+ }
+
+ if ( \WP_CLI::get_config( 'debug' ) && ! defined( 'SAVEQUERIES' ) ) {
+ define( 'SAVEQUERIES', true );
+ }
+
+ }
+
+ /**
+ * Register WP-CLI commands for all endpoints on a route
+ *
+ * @param string
+ * @param array $endpoints
+ */
+ private static function register_route_commands( $rest_command, $route, $route_data ) {
+
+ $resource = str_replace( array( 'llms_', '_' ), array( '', '-' ), $route_data['schema']['title'] );
+ $parent = "llms {$resource}";
+
+ $supported_commands = self::get_supported_commands( $route, $route_data );
+ foreach ( $supported_commands as $command => $endpoint_args ) {
+
+ $synopsis = array();
+ if ( in_array( $command, array( 'delete', 'get', 'update' ) ) ) {
+ $synopsis[] = array(
+ 'name' => 'id',
+ 'type' => 'positional',
+ 'description' => 'The id for the resource.',
+ 'optional' => false,
+ );
+ }
+
+ foreach ( $endpoint_args as $name => $args ) {
+ $arg_reg = array(
+ 'name' => $name,
+ 'type' => 'assoc',
+ 'description' => ! empty( $args['description'] ) ? $args['description'] : '',
+ 'optional' => empty( $args['required'] ) ? true : false,
+ );
+ foreach ( array( 'enum', 'default' ) as $key ) {
+ if ( isset( $args[ $key ] ) ) {
+ $new_key = 'enum' === $key ? 'options' : $key;
+ $arg_reg[ $new_key ] = $args[ $key ];
+ }
+ }
+ $synopsis[] = $arg_reg;
+ }
+
+ if ( in_array( $command, array( 'list', 'get' ) ) ) {
+ $synopsis[] = array(
+ 'name' => 'fields',
+ 'type' => 'assoc',
+ 'description' => 'Limit response to specific fields. Defaults to all fields.',
+ 'optional' => true,
+ );
+ $synopsis[] = array(
+ 'name' => 'field',
+ 'type' => 'assoc',
+ 'description' => 'Get the value of an individual field.',
+ 'optional' => true,
+ );
+ $synopsis[] = array(
+ 'name' => 'format',
+ 'type' => 'assoc',
+ 'description' => 'Render response in a particular format.',
+ 'optional' => true,
+ 'default' => 'table',
+ 'options' => array(
+ 'table',
+ 'json',
+ 'csv',
+ 'ids',
+ 'yaml',
+ 'count',
+ 'headers',
+ 'body',
+ 'envelope',
+ ),
+ );
+ }
+
+ if ( in_array( $command, array( 'create', 'update', 'delete' ) ) ) {
+ $synopsis[] = array(
+ 'name' => 'porcelain',
+ 'type' => 'flag',
+ 'description' => 'Output just the id when the operation is successful.',
+ 'optional' => true,
+ );
+ }
+
+ $methods = array(
+ 'list' => 'list_items',
+ 'create' => 'create_item',
+ 'delete' => 'delete_item',
+ 'get' => 'get_item',
+ 'update' => 'update_item',
+ );
+
+ // Add the root command, eg: wp llms course.
+ \WP_CLI::add_command(
+ "{$parent}",
+ $rest_command,
+ array(
+ 'shortdesc' => self::get_command_root_desc( $resource ),
+ )
+ );
+
+ // Register main subcommands, eg: wp llms course create, wp llms course delete, etc...
+ \WP_CLI::add_command(
+ "{$parent} {$command}",
+ array( $rest_command, $methods[ $command ] ),
+ array(
+ 'shortdesc' => self::get_command_short_desc( $command, $resource ),
+ 'synopsis' => $synopsis,
+ 'before_invoke' => array( __CLASS__, 'before_invoke_command' ),
+ )
+ );
+
+ // If listing is supported, add the diff command.
+ if ( 'list' === $command ) {
+ \WP_CLI::add_command(
+ "{$parent} diff",
+ array( $rest_command, 'diff_items' ),
+ array(
+ 'shortdesc' => self::get_command_short_desc( 'diff', $resource ),
+ 'before_invoke' => array( __CLASS__, 'before_invoke_command' ),
+ )
+ );
+ }
+
+ // If creation is supported, add the generate command.
+ if ( 'create' === $command ) {
+ \WP_CLI::add_command(
+ "{$parent} generate",
+ array( $rest_command, 'generate_items' ),
+ array(
+ 'shortdesc' => self::get_command_short_desc( 'generate', $resource ),
+ 'synopsis' => self::get_generate_command_synopsis( $synopsis ),
+ 'before_invoke' => array( __CLASS__, 'before_invoke_command' ),
+ )
+ );
+ }
+
+
+ // If updating and getting is supported, add the edit command.
+ if ( 'update' === $command && array_key_exists( 'get', $supported_commands ) ) {
+ $synopsis = array();
+ $synopsis[] = array(
+ 'name' => 'id',
+ 'type' => 'positional',
+ 'description' => 'The id for the resource.',
+ 'optional' => false,
+ );
+ \WP_CLI::add_command(
+ "{$parent} edit",
+ array( $rest_command, 'edit_item' ),
+ array(
+ 'shortdesc' => self::get_command_short_desc( 'edit', $resource ),
+ 'synopsis' => $synopsis,
+ 'before_invoke' => array( __CLASS__, 'before_invoke_command' ),
+ )
+ );
+ }
+ }
+ }
+
+ private static function get_generate_command_synopsis( $create_synopsis ) {
+
+ $generate_synopsis = array(
+ array(
+ 'name' => 'count',
+ 'type' => 'assoc',
+ 'description' => 'Number of items to generate.',
+ 'optional' => true,
+ 'default' => 10,
+ ),
+ array(
+ 'name' => 'format',
+ 'type' => 'assoc',
+ 'description' => 'Render generation in specific format.',
+ 'optional' => true,
+ 'default' => 'progress',
+ 'options' => array(
+ 'progress',
+ 'ids',
+ ),
+ ),
+ );
+
+ return array_merge( $generate_synopsis, $create_synopsis );
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Commands/Root.php b/libraries/lifterlms-cli/src/Commands/Root.php
new file mode 100644
index 0000000000..0da54b4a48
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Commands/Root.php
@@ -0,0 +1,83 @@
+]
+ * : The slug of the LifterLMS plugin or theme. Default: lifterlms.
+ *
+ * ## EXAMPLES
+ *
+ * # Show the LifterLMS core plugin version
+ * wp llms version
+ *
+ * # Show the LifterLMS core plugin version
+ * wp llms version core
+ *
+ * # Show an add-on version without the "lifterlms-" prefix.
+ * wp llms version groups
+ *
+ * # Show an add-on version with the "lifterlms-" prefix.
+ * wp llms version lifterlms-assignments
+ *
+ * @since 0.0.1
+ * @since 0.0.2 Remove `--db` option. This will be implemented in a separate command.
+ *
+ * @param array $args Indexed array of positional command arguments.
+ * @param array $assoc_args Associative array of command options.
+ * @return null
+ */
+ public function version( $args, $assoc_args ) {
+
+ $slug = empty( $args[0] ) ? 'core' : $args[0];
+ if ( in_array( $slug, array( 'core', 'lifterlms' ), true ) ) {
+ return \WP_CLI::log( llms()->version );
+ }
+
+ $addon = $this->get_addon( $slug );
+ if ( empty( $addon ) ) {
+ return \WP_CLI::error( 'Invalid slug.' );
+ }
+
+ if ( $addon->is_installed() ) {
+ return \WP_CLI::log( $addon->get_installed_version() );
+ }
+
+ return \WP_CLI::error(
+ sprintf(
+ "The requested add-on is not installed. Run 'wp llms addon install %s.' to install it.",
+ $args[0]
+ )
+ );
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/Main.php b/libraries/lifterlms-cli/src/Main.php
new file mode 100644
index 0000000000..4cd19b55e3
--- /dev/null
+++ b/libraries/lifterlms-cli/src/Main.php
@@ -0,0 +1,140 @@
+version );
+ }
+
+ // Get started (after REST).
+ add_action( 'plugins_loaded', array( $this, 'init' ) );
+
+ }
+
+ /**
+ * Add all LifterLMS CLI commands
+ *
+ * This includes a separate file so that commands can be included on their own
+ * when generating documentation.
+ *
+ * @since 0.0.1
+ *
+ * @return void
+ */
+ public function commands() {
+ require_once LLMS_CLI_PLUGIN_DIR . 'src/commands.php';
+ }
+
+ /**
+ * Register WP_CLI hooks
+ *
+ * Loads all commands and sets up license and addon commands to be aborted
+ * if the LifterLMS Helper is not present.
+ *
+ * @since 0.0.1
+ *
+ * @return void
+ */
+ private function hooks() {
+
+ \WP_CLI::add_hook( 'after_wp_load', array( $this, 'commands' ) );
+
+ // If the Helper doesn't exist abort command addition.
+ if ( ! class_exists( 'LifterLMS_Helper' ) ) {
+ $helper_commands = array(
+ 'license',
+ 'addon install',
+ 'addon uninstall',
+ 'addon activate',
+ 'addon deactivate',
+ 'addon update',
+ );
+ foreach ( $helper_commands as $command ) {
+ \WP_CLI::add_hook(
+ "before_add_command:llms {$command}",
+ function( CommandAddition $command_addition ) {
+ $command_addition->abort( 'The LifterLMS Helper is required to use this command.' );
+ }
+ );
+ }
+ }
+
+ }
+ /**
+ * Include all required files and classes
+ *
+ * @since [version
+ *
+ * @return void
+ */
+ public function init() {
+
+ // Only load if we have the minimum LifterLMS version installed & activated.
+ if ( function_exists( 'llms' ) && version_compare( '5.0.0', llms()->version, '<=' ) ) {
+
+ $this->hooks();
+
+ }
+
+ }
+
+}
diff --git a/libraries/lifterlms-cli/src/commands.php b/libraries/lifterlms-cli/src/commands.php
new file mode 100644
index 0000000000..e97b5f5d89
--- /dev/null
+++ b/libraries/lifterlms-cli/src/commands.php
@@ -0,0 +1,42 @@
+
+ * Jordi Boggiano
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier
+ * @author Jordi Boggiano
+ * @see https://www.php-fig.org/psr/psr-0/
+ * @see https://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ /** @var ?string */
+ private $vendorDir;
+
+ // PSR-4
+ /**
+ * @var array[]
+ * @psalm-var array>
+ */
+ private $prefixLengthsPsr4 = array();
+ /**
+ * @var array[]
+ * @psalm-var array>
+ */
+ private $prefixDirsPsr4 = array();
+ /**
+ * @var array[]
+ * @psalm-var array
+ */
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ /**
+ * @var array[]
+ * @psalm-var array>
+ */
+ private $prefixesPsr0 = array();
+ /**
+ * @var array[]
+ * @psalm-var array
+ */
+ private $fallbackDirsPsr0 = array();
+
+ /** @var bool */
+ private $useIncludePath = false;
+
+ /**
+ * @var string[]
+ * @psalm-var array
+ */
+ private $classMap = array();
+
+ /** @var bool */
+ private $classMapAuthoritative = false;
+
+ /**
+ * @var bool[]
+ * @psalm-var array
+ */
+ private $missingClasses = array();
+
+ /** @var ?string */
+ private $apcuPrefix;
+
+ /**
+ * @var self[]
+ */
+ private static $registeredLoaders = array();
+
+ /**
+ * @param ?string $vendorDir
+ */
+ public function __construct($vendorDir = null)
+ {
+ $this->vendorDir = $vendorDir;
+ }
+
+ /**
+ * @return string[]
+ */
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
+ }
+
+ return array();
+ }
+
+ /**
+ * @return array[]
+ * @psalm-return array>
+ */
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ /**
+ * @return array[]
+ * @psalm-return array
+ */
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ /**
+ * @return array[]
+ * @psalm-return array
+ */
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ /**
+ * @return string[] Array of classname => path
+ * @psalm-return array
+ */
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param string[] $classMap Class to filename map
+ * @psalm-param array $classMap
+ *
+ * @return void
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param string[]|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @return void
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param string[]|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return void
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param string[]|string $paths The PSR-0 base directories
+ *
+ * @return void
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param string[]|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return void
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ *
+ * @return void
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ *
+ * @return void
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ *
+ * @return void
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ *
+ * @return void
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+
+ if (null === $this->vendorDir) {
+ return;
+ }
+
+ if ($prepend) {
+ self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
+ } else {
+ unset(self::$registeredLoaders[$this->vendorDir]);
+ self::$registeredLoaders[$this->vendorDir] = $this;
+ }
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ *
+ * @return void
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+
+ if (null !== $this->vendorDir) {
+ unset(self::$registeredLoaders[$this->vendorDir]);
+ }
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return true|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+
+ return null;
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ /**
+ * Returns the currently registered loaders indexed by their corresponding vendor directories.
+ *
+ * @return self[]
+ */
+ public static function getRegisteredLoaders()
+ {
+ return self::$registeredLoaders;
+ }
+
+ /**
+ * @param string $class
+ * @param string $ext
+ * @return string|false
+ */
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath . '\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ if (file_exists($file = $dir . $pathEnd)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ *
+ * @param string $file
+ * @return void
+ * @private
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/libraries/lifterlms-cli/vendor/composer/InstalledVersions.php b/libraries/lifterlms-cli/vendor/composer/InstalledVersions.php
new file mode 100644
index 0000000000..c6b54af7ba
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/InstalledVersions.php
@@ -0,0 +1,352 @@
+
+ * Jordi Boggiano
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer;
+
+use Composer\Autoload\ClassLoader;
+use Composer\Semver\VersionParser;
+
+/**
+ * This class is copied in every Composer installed project and available to all
+ *
+ * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
+ *
+ * To require its presence, you can require `composer-runtime-api ^2.0`
+ *
+ * @final
+ */
+class InstalledVersions
+{
+ /**
+ * @var mixed[]|null
+ * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null
+ */
+ private static $installed;
+
+ /**
+ * @var bool|null
+ */
+ private static $canGetVendors;
+
+ /**
+ * @var array[]
+ * @psalm-var array}>
+ */
+ private static $installedByVendor = array();
+
+ /**
+ * Returns a list of all package names which are present, either by being installed, replaced or provided
+ *
+ * @return string[]
+ * @psalm-return list
+ */
+ public static function getInstalledPackages()
+ {
+ $packages = array();
+ foreach (self::getInstalled() as $installed) {
+ $packages[] = array_keys($installed['versions']);
+ }
+
+ if (1 === \count($packages)) {
+ return $packages[0];
+ }
+
+ return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
+ }
+
+ /**
+ * Returns a list of all package names with a specific type e.g. 'library'
+ *
+ * @param string $type
+ * @return string[]
+ * @psalm-return list
+ */
+ public static function getInstalledPackagesByType($type)
+ {
+ $packagesByType = array();
+
+ foreach (self::getInstalled() as $installed) {
+ foreach ($installed['versions'] as $name => $package) {
+ if (isset($package['type']) && $package['type'] === $type) {
+ $packagesByType[] = $name;
+ }
+ }
+ }
+
+ return $packagesByType;
+ }
+
+ /**
+ * Checks whether the given package is installed
+ *
+ * This also returns true if the package name is provided or replaced by another package
+ *
+ * @param string $packageName
+ * @param bool $includeDevRequirements
+ * @return bool
+ */
+ public static function isInstalled($packageName, $includeDevRequirements = true)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (isset($installed['versions'][$packageName])) {
+ return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks whether the given package satisfies a version constraint
+ *
+ * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
+ *
+ * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
+ *
+ * @param VersionParser $parser Install composer/semver to have access to this class and functionality
+ * @param string $packageName
+ * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
+ * @return bool
+ */
+ public static function satisfies(VersionParser $parser, $packageName, $constraint)
+ {
+ $constraint = $parser->parseConstraints($constraint);
+ $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
+
+ return $provided->matches($constraint);
+ }
+
+ /**
+ * Returns a version constraint representing all the range(s) which are installed for a given package
+ *
+ * It is easier to use this via isInstalled() with the $constraint argument if you need to check
+ * whether a given version of a package is installed, and not just whether it exists
+ *
+ * @param string $packageName
+ * @return string Version constraint usable with composer/semver
+ */
+ public static function getVersionRanges($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ $ranges = array();
+ if (isset($installed['versions'][$packageName]['pretty_version'])) {
+ $ranges[] = $installed['versions'][$packageName]['pretty_version'];
+ }
+ if (array_key_exists('aliases', $installed['versions'][$packageName])) {
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
+ }
+ if (array_key_exists('replaced', $installed['versions'][$packageName])) {
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
+ }
+ if (array_key_exists('provided', $installed['versions'][$packageName])) {
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
+ }
+
+ return implode(' || ', $ranges);
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+ */
+ public static function getVersion($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ if (!isset($installed['versions'][$packageName]['version'])) {
+ return null;
+ }
+
+ return $installed['versions'][$packageName]['version'];
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+ */
+ public static function getPrettyVersion($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ if (!isset($installed['versions'][$packageName]['pretty_version'])) {
+ return null;
+ }
+
+ return $installed['versions'][$packageName]['pretty_version'];
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
+ */
+ public static function getReference($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ if (!isset($installed['versions'][$packageName]['reference'])) {
+ return null;
+ }
+
+ return $installed['versions'][$packageName]['reference'];
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
+ */
+ public static function getInstallPath($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @return array
+ * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
+ */
+ public static function getRootPackage()
+ {
+ $installed = self::getInstalled();
+
+ return $installed[0]['root'];
+ }
+
+ /**
+ * Returns the raw installed.php data for custom implementations
+ *
+ * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
+ * @return array[]
+ * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}
+ */
+ public static function getRawData()
+ {
+ @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
+
+ if (null === self::$installed) {
+ // only require the installed.php file if this file is loaded from its dumped location,
+ // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+ if (substr(__DIR__, -8, 1) !== 'C') {
+ self::$installed = include __DIR__ . '/installed.php';
+ } else {
+ self::$installed = array();
+ }
+ }
+
+ return self::$installed;
+ }
+
+ /**
+ * Returns the raw data of all installed.php which are currently loaded for custom implementations
+ *
+ * @return array[]
+ * @psalm-return list}>
+ */
+ public static function getAllRawData()
+ {
+ return self::getInstalled();
+ }
+
+ /**
+ * Lets you reload the static array from another file
+ *
+ * This is only useful for complex integrations in which a project needs to use
+ * this class but then also needs to execute another project's autoloader in process,
+ * and wants to ensure both projects have access to their version of installed.php.
+ *
+ * A typical case would be PHPUnit, where it would need to make sure it reads all
+ * the data it needs from this class, then call reload() with
+ * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
+ * the project in which it runs can then also use this class safely, without
+ * interference between PHPUnit's dependencies and the project's dependencies.
+ *
+ * @param array[] $data A vendor/composer/installed.php data set
+ * @return void
+ *
+ * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data
+ */
+ public static function reload($data)
+ {
+ self::$installed = $data;
+ self::$installedByVendor = array();
+ }
+
+ /**
+ * @return array[]
+ * @psalm-return list}>
+ */
+ private static function getInstalled()
+ {
+ if (null === self::$canGetVendors) {
+ self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
+ }
+
+ $installed = array();
+
+ if (self::$canGetVendors) {
+ foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
+ if (isset(self::$installedByVendor[$vendorDir])) {
+ $installed[] = self::$installedByVendor[$vendorDir];
+ } elseif (is_file($vendorDir.'/composer/installed.php')) {
+ $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
+ if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
+ self::$installed = $installed[count($installed) - 1];
+ }
+ }
+ }
+ }
+
+ if (null === self::$installed) {
+ // only require the installed.php file if this file is loaded from its dumped location,
+ // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+ if (substr(__DIR__, -8, 1) !== 'C') {
+ self::$installed = require __DIR__ . '/installed.php';
+ } else {
+ self::$installed = array();
+ }
+ }
+ $installed[] = self::$installed;
+
+ return $installed;
+ }
+}
diff --git a/libraries/lifterlms-cli/vendor/composer/LICENSE b/libraries/lifterlms-cli/vendor/composer/LICENSE
new file mode 100644
index 0000000000..f27399a042
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/libraries/lifterlms-cli/vendor/composer/autoload_classmap.php b/libraries/lifterlms-cli/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000000..0fb0a2c194
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/autoload_classmap.php
@@ -0,0 +1,10 @@
+ $vendorDir . '/composer/InstalledVersions.php',
+);
diff --git a/libraries/lifterlms-cli/vendor/composer/autoload_namespaces.php b/libraries/lifterlms-cli/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000000..15a2ff3ad6
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+ array($baseDir . '/src'),
+);
diff --git a/libraries/lifterlms-cli/vendor/composer/autoload_real.php b/libraries/lifterlms-cli/vendor/composer/autoload_real.php
new file mode 100644
index 0000000000..25e6de279e
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/autoload_real.php
@@ -0,0 +1,38 @@
+register(true);
+
+ return $loader;
+ }
+}
diff --git a/libraries/lifterlms-cli/vendor/composer/autoload_static.php b/libraries/lifterlms-cli/vendor/composer/autoload_static.php
new file mode 100644
index 0000000000..c8ba9be2f1
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/autoload_static.php
@@ -0,0 +1,36 @@
+
+ array (
+ 'LifterLMS\\CLI\\' => 14,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'LifterLMS\\CLI\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/src',
+ ),
+ );
+
+ public static $classMap = array (
+ 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInit16df5b8f40af5029c6e71d2c9e914805::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInit16df5b8f40af5029c6e71d2c9e914805::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInit16df5b8f40af5029c6e71d2c9e914805::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/libraries/lifterlms-cli/vendor/composer/installed.json b/libraries/lifterlms-cli/vendor/composer/installed.json
new file mode 100644
index 0000000000..f20a6c47c6
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/installed.json
@@ -0,0 +1,5 @@
+{
+ "packages": [],
+ "dev": false,
+ "dev-package-names": []
+}
diff --git a/libraries/lifterlms-cli/vendor/composer/installed.php b/libraries/lifterlms-cli/vendor/composer/installed.php
new file mode 100644
index 0000000000..0ee85066c0
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/installed.php
@@ -0,0 +1,23 @@
+ array(
+ 'name' => 'lifterlms/lifterlms-cli',
+ 'pretty_version' => 'dev-trunk',
+ 'version' => 'dev-trunk',
+ 'reference' => 'ac1b9f6556cc27f08fa54f02414dd11a5d9b0cb3',
+ 'type' => 'wordpress-plugin',
+ 'install_path' => __DIR__ . '/../../',
+ 'aliases' => array(),
+ 'dev' => false,
+ ),
+ 'versions' => array(
+ 'lifterlms/lifterlms-cli' => array(
+ 'pretty_version' => 'dev-trunk',
+ 'version' => 'dev-trunk',
+ 'reference' => 'ac1b9f6556cc27f08fa54f02414dd11a5d9b0cb3',
+ 'type' => 'wordpress-plugin',
+ 'install_path' => __DIR__ . '/../../',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
+ ),
+);
diff --git a/libraries/lifterlms-cli/vendor/composer/platform_check.php b/libraries/lifterlms-cli/vendor/composer/platform_check.php
new file mode 100644
index 0000000000..92370c5a0c
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/platform_check.php
@@ -0,0 +1,26 @@
+= 70300)) {
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.';
+}
+
+if ($issues) {
+ if (!headers_sent()) {
+ header('HTTP/1.1 500 Internal Server Error');
+ }
+ if (!ini_get('display_errors')) {
+ if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
+ fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
+ } elseif (!headers_sent()) {
+ echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
+ }
+ }
+ trigger_error(
+ 'Composer detected issues in your platform: ' . implode(' ', $issues),
+ E_USER_ERROR
+ );
+}
diff --git a/libraries/lifterlms-helper/CHANGELOG.md b/libraries/lifterlms-helper/CHANGELOG.md
new file mode 100644
index 0000000000..33dc02deaa
--- /dev/null
+++ b/libraries/lifterlms-helper/CHANGELOG.md
@@ -0,0 +1,279 @@
+LifterLMS Helper Changelog
+==========================
+
+v3.5.4 - 2024-07-30
+-------------------
+
+##### Bug Fixes
+
++ Avoid conflicts with other plugins using the translation loader library.
+
+
+v3.5.3 - 2024-07-19
+-------------------
+
+##### New Features
+
++ Check for translations in add-ons when available.
+
+##### Bug Fixes
+
++ Fix "View Details" showing for core LifterLMS. [#52](https://github.com/gocodebox/lifterlms-helper#52)
+
+
+v3.5.2 - 2024-07-09
+-------------------
+
+##### Security Fixes
+
++ Adding additional security checks.
+
+
+v3.5.1 - 2024-04-16
+-------------------
+
+##### New Features
+
++ Obfuscates license keys. [#47](https://github.com/gocodebox/lifterlms-helper#47)
+
+
+v3.5.0 - 2023-02-28
+-------------------
+
+##### Updates and Enhancements
+
++ Updated the appearance of the license dropdown.
+
+##### Bug Fixes
+
++ Fixed incorrect HTML code for single Add On displayed on the LifterLMS > Add-ons & more screen.
+
+##### Developer Notes
+
++ Added new paramater `$force`, `false` by default, to the static method `LLMS_Helper_Keys::activate_keys()`. It'll allow to force a remote call instead of using ccached results.
+
+##### Performance Improvements
+
++ Cache results from the activate keys calls to the LifterLMS license API. This prevents issues where sites are pinging the license server too often, specifically if they are "cloned" sites.
+
+
+v3.4.2 - 2022-04-01
+-------------------
+
+##### Bug Fixes
+
++ Fixed an issue where adding new license keys with an end-of-line symbol after the last key would result in an invalid license key error.
++ Fixed an issue that caused PHP warnings in the "Plugins -> Add New" page because the `plugin` property was missing. [#36](https://github.com/gocodebox/lifterlms-helper/issues/36)
+
+
+v3.4.1 - 2021-08-17
+-------------------
+
++ Fixed undefined index error encountered when programmatically deactivating a key that was not previously activated on the site.
+
+
+v3.4.0 - 2021-08-04
+-------------------
+
+##### Localization updates
+
++ Only runs localization functions when loaded as an independent plugin.
++ Replace the textdoman 'lifterlms-helper' with 'lifterlms'.
+
+##### Updates
+
++ Use `llms_helper()` in favor of deprecated `LLMS_Helper()` in various locations.
+
+##### Bugfix
+
++ Don't attempt to run migrations from versions less than 3.0.0 during first run when loaded as a library.
+
+
+v3.3.1 - 2021-07-26
+-------------------
+
++ Load `llms_helper()->upgrader` WP_CLI context in preparation for forthcoming the `lifterlms-cli`.
+
+
+v3.3.0 - 2021-06-14
+-------------------
+
++ This plugin is now included by default via the LifterLMS core in versions 5.0+. Installing this plugin directly will use the plugin version instead of the version included with the core. Direct installation is likely only required for development purposes when using LifterLMS 5.0+.
++ The main function `llms_helper()` is declared conditionally when the class `LifterLMS_Helper` is not yet declared.
++ Added a constant `LLMS_HELPER_DISABLE` which allows disabling of the plugin.
++ Distribution release zips now include a `composer.json` file to allow for installation via composer.
+
+
+v3.2.1 - 2021-06-03
+-------------------
+
+##### Updates
+
++ Flush cached update and add-on data when adding or removing license keys and when changing channel subscription for a package.
++ Enable updating to beta versions of packages that don't require a license when no license is present.
+
+
+v3.2.0 - 2020-12-02
+-------------------
+
+##### Updates
+
++ Moved the class `LifterLMS_Helper` class to its own file from `lifterlms-helper.php`.
++ Use `self::$instance` in favor of `self::$_instance`.
++ Use `llms()` in favor of deprecated `LLMS()`.
++ Use `llms_filter_input()` to access `$_POST` data in various places.
++ Use strict comparison for `in_array()`.
+
+##### Bug fixes
+
++ Fixed usage of incorrect textdomain in various places.
+
+##### Deprecations
+
++ Replaced usage of protected class property `$instance` in favor of `$_instance` in various singleton classes.
++ Function `LLMS_Helper()` is deprecated in favor of `llms_helper()`.
++ File `includes/model-llms-helper-add-on.php` is deprecated, use `includes/models/class-llms-helper-add-on.php` instead.
+
+
+v3.1.0 - 2020-05-22
+-------------------
+
++ Load changelogs from the make.lifterlms.com release notes archive in favor of from static html files.
++ Remove reliance on `file_get_contents()` causing errors on servers without access to the function.
+
+
+v3.0.2 - 2018-08-29
+-------------------
+
++ Fixed fatal errors encountered as a result of failed API calls
++ Fixed broken links output on the plugins update screen when an add-on is unlicensed and has an update available
++ Fixed issue causing non-beta versions of the LifterLMS core to be served from LifterLMS.com instead of from WordPress.org
+
+
+v3.0.1 - 2018-08-02
+-------------------
+
++ Fixed an issue causing key migration to run on the frontend resulting in a fatal error related to missing admin-only functions
++ Fixed an issue causing multiple submitted keys to not work properly on certain environments
++ Fixed issue causing installation script to make an activation API call even when no keys exist
++ Improved installation script message to only display a migration message when keys are actually migrated
+
+
+v3.0.0 - 2018-08-01
+-------------------
+
++ **This is nearly a complete rewrite of the codebase. Things have moved but no features have been removed.**
++ Requires LifterLMS version 3.22.0 or later
++ License key activation is now on a per-site basis as opposed to a per product basis. This means that if you have a license key for a bundle you don't have to enter the key for each add-on, you enter the key only once and it will activate ALL the add-ons.
++ The "Licenses" tab has been removed and your add-ons and licenses are now managed via LifterLMS -> Add-ons & More
++ A migration script exists to move license keys from previous versions of the helper to this version. After upgrading check LifterLMS -> Add-ons & More to ensure your keys were successfully migrated.
++ You can now install add-ons through the this plugin without having to download and install them manually. Enter your license key(s) and select the add-ons you wish to install to have them installed automatically. You can bulk install as well.
++ You can now subscribe to beta channels of LifterLMS and any LifterLMS add-ons. Visit the LifterLMS -> Status -> Betas screen to subscribe to betas. Always use betas at your own risk, by nature they're unstable!
++ Uses the LifterLMS.com v3 REST api for all API calls
++ Added RTL language support
++ Added i18n support
++ Removed and replaced various functions
++ Fixes many bugs and almost certainly introduces some new ones
+
+
+v2.5.1 - 2017-11-08
+-------------------
+
++ Fix issue causing false activations which cannot be deactivated due to blank activation keys
+
+
+v2.5.0 - 2017-07-18
+-------------------
+
++ Allow add-ons to be bulk deactivated
++ Integrates with LifterLMS site clone detection in order to automatically activate plugins on your new URL when cloning to staging / production.
++ Following clone detection if activation fails the plugin will no longer show the add-ons as activated (since they're not activated on the new URL)
++ Minor admin-panel performance improvements
++ Now uses minified JS and CSS assets
++ Now fully translateable!
+
+
+v2.4.3 - 2017-02-09
+-------------------
+
++ Handle undefined errors during post plugin install from zip file
+
+
+v2.4.2 - 2017-01-20
+-------------------
+
++ Handle failed api calls gracefully
+
+
+v2.4.1 - 2016-12-30
+-------------------
+
++ Cache add-on list prior to filtering
+
+
+v2.4.0 - 2016-12-20
+-------------------
+
++ Added a unified Helper sceen accessible via LifterLMS -> Settings -> Helper
++ Activate multiple addons simultaneously via one API call
++ Site deactivation now deactivates from remote activation server in addition to local deactivation
++ Upgraded database key handling prevents accidental duplicate activation attempts
++ Fixed several undefined index warnings
++ Normalized option fields keys
+
+
+v2.3.1 - 2016-10-12
+-------------------
+
++ Fixes issue with theme upgrade post install not working resulting in themes existing in the wrong directory after an upgrade
+
+
+v2.3.0 - 2016-10-10
+-------------------
+
++ Significantly upgrades the speed of version checks. Previously checked each LifterLMS Add-on separately, now makes one API call to retreive versions of all installed LifterLMS Add-ons.
++ Adds support for the Universe Bundle which is one key associated with multiple products
+
+
+v2.2.0 - 2016-07-06
+-------------------
+
++ After updates, clear cached update data so the upgrade doesn't still appear as pending
++ After changing license keys, clear cahced data so the next upgrade attempt will not fail again (unless it's still supposed to fail)
++ After updating the currently active theme, correctly reactivate the theme
+
+
+v2.1.0 - 2016-06-14
+-------------------
+
++ Prevent hijacking the LifterLMS Core lightbox data when attempting to view update details on the plugin update screen.
++ Added [Parsedown](https://github.com/erusev/parsedown) to render Markdown style changelogs into HTML when viewing extension changelogs in the the lightbox on plugin update screens.
+
+
+v2.0.0 - 2016-04-08
+-------------------
+
++ Includes theme-related APIs for serving updates for themes
++ Better error reporting and handling
++ A few very exciting performance enhancements
+
+
+v1.0.2 - 2016-03-07
+-------------------
+
++ Fixed an undefined variable which produced a php warning when `WP_DEBUG` was enabled
++ Resolved an issue that caused the LifterLMS Helper to hijack the "details" and related plugin screens that display inside a lightbox in the plugins admin page.
++ Added a .editorconfig file
++ Added changelog file
+
+
+v1.0.1 - 2016-02-11
+-------------------
+
++ Actual public release
+
+
+v1.0.0 - 2016-02-10
+-------------------
+
++ Initial public release
diff --git a/libraries/lifterlms-helper/assets/css/llms-helper-rtl.css b/libraries/lifterlms-helper/assets/css/llms-helper-rtl.css
new file mode 100644
index 0000000000..eaf51ceb9a
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper-rtl.css
@@ -0,0 +1,91 @@
+.wrap.lifterlms-addons .llms-licenses {
+ display: block;
+ position: relative;
+ vertical-align: middle;
+ z-index: 1;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-button-primary {
+ width: 100%;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-license-header {
+ margin: 0 0 5px 0;
+}
+.wrap.lifterlms-addons .llms-licenses label {
+ display: block;
+ margin-top: 20px;
+}
+.wrap.lifterlms-addons .llms-licenses label:first-child {
+ margin-top: 0;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-active-keys {
+ list-style-type: none;
+ margin: 15px 0;
+ padding: 0;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-active-keys li {
+ margin: 0 0 10px;
+ padding: 0;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-active-keys li input:checked + span {
+ color: #e5554e;
+ font-style: italic;
+}
+.wrap.lifterlms-addons .llms-licenses .fa-chevron-down {
+ margin-right: 10px;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-key-field {
+ background: #fff;
+ border: 1px solid #ddd;
+ display: none;
+ margin-right: 0;
+ position: absolute;
+ right: -1px;
+ padding: 20px;
+ top: calc( 100% - 2px );
+ width: 90%;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-key-field textarea {
+ display: inline-block;
+ height: 86px;
+ font-size: 14px;
+ font-family: monospace;
+ line-height: 1.8;
+ margin: 5px 0;
+ padding: 5px 10px;
+ resize: none;
+ vertical-align: middle;
+ width: 100%;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.lifterlms-addons .llms-licenses {
+ display: inline-block;
+ margin-right: 20px;
+ }
+ .wrap.lifterlms-addons .llms-licenses .llms-button-primary {
+ width: auto;
+ }
+ .wrap.lifterlms-addons .llms-licenses .llms-key-field {
+ width: 340px;
+ }
+}
+
+@media only screen and (min-width: 800px) {
+ .llms-status--betas .llms-beta-main {
+ display: flex;
+ }
+ .llms-status--betas .llms-beta-table {
+ flex: 2;
+ }
+ .llms-status--betas .llms-beta-aside {
+ flex: 1;
+ margin-left: 20px;
+ }
+}
+.llms-status--betas .llms-beta-aside {
+ background: #fef7f7;
+ border: 1px solid #e5554e;
+ padding: 20px;
+}
+.llms-status--betas .llms-beta-aside h1 {
+ padding-top: 0;
+}
diff --git a/libraries/lifterlms-helper/assets/css/llms-helper-rtl.min.css b/libraries/lifterlms-helper/assets/css/llms-helper-rtl.min.css
new file mode 100644
index 0000000000..d860570f1f
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper-rtl.min.css
@@ -0,0 +1 @@
+.wrap.lifterlms-addons .llms-licenses{display:block;position:relative;vertical-align:middle;z-index:1}.wrap.lifterlms-addons .llms-licenses .llms-button-primary{width:100%}.wrap.lifterlms-addons .llms-licenses .llms-license-header{margin:0 0 5px 0}.wrap.lifterlms-addons .llms-licenses label{display:block;margin-top:20px}.wrap.lifterlms-addons .llms-licenses label:first-child{margin-top:0}.wrap.lifterlms-addons .llms-licenses .llms-active-keys{list-style-type:none;margin:15px 0;padding:0}.wrap.lifterlms-addons .llms-licenses .llms-active-keys li{margin:0 0 10px;padding:0}.wrap.lifterlms-addons .llms-licenses .llms-active-keys li input:checked+span{color:#e5554e;font-style:italic}.wrap.lifterlms-addons .llms-licenses .fa-chevron-down{margin-right:10px}.wrap.lifterlms-addons .llms-licenses .llms-key-field{background:#fff;border:1px solid #ddd;display:none;margin-right:0;position:absolute;right:-1px;padding:20px;top:calc( 100% - 2px );width:90%}.wrap.lifterlms-addons .llms-licenses .llms-key-field textarea{display:inline-block;height:86px;font-size:14px;font-family:monospace;line-height:1.8;margin:5px 0;padding:5px 10px;resize:none;vertical-align:middle;width:100%}@media only screen and (min-width: 782px){.wrap.lifterlms-addons .llms-licenses{display:inline-block;margin-right:20px}.wrap.lifterlms-addons .llms-licenses .llms-button-primary{width:auto}.wrap.lifterlms-addons .llms-licenses .llms-key-field{width:340px}}@media only screen and (min-width: 800px){.llms-status--betas .llms-beta-main{display:flex}.llms-status--betas .llms-beta-table{flex:2}.llms-status--betas .llms-beta-aside{flex:1;margin-left:20px}}.llms-status--betas .llms-beta-aside{background:#fef7f7;border:1px solid #e5554e;padding:20px}.llms-status--betas .llms-beta-aside h1{padding-top:0}
diff --git a/libraries/lifterlms-helper/assets/css/llms-helper.css b/libraries/lifterlms-helper/assets/css/llms-helper.css
new file mode 100644
index 0000000000..577497fc75
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper.css
@@ -0,0 +1,93 @@
+.wrap.lifterlms-addons .llms-licenses {
+ display: block;
+ position: relative;
+ vertical-align: middle;
+ z-index: 1;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-button-primary {
+ width: 100%;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-license-header {
+ margin: 0 0 5px 0;
+}
+.wrap.lifterlms-addons .llms-licenses label {
+ display: block;
+ margin-top: 20px;
+}
+.wrap.lifterlms-addons .llms-licenses label:first-child {
+ margin-top: 0;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-active-keys {
+ list-style-type: none;
+ margin: 15px 0;
+ padding: 0;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-active-keys li {
+ margin: 0 0 10px;
+ padding: 0;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-active-keys li input:checked + span {
+ color: #e5554e;
+ font-style: italic;
+}
+.wrap.lifterlms-addons .llms-licenses .fa-chevron-down {
+ margin-left: 10px;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-key-field {
+ background: #fff;
+ border: 1px solid #ddd;
+ display: none;
+ margin-left: 0;
+ position: absolute;
+ left: -1px;
+ padding: 20px;
+ top: calc( 100% - 2px );
+ width: 90%;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-key-field textarea {
+ display: inline-block;
+ height: 86px;
+ font-size: 14px;
+ font-family: monospace;
+ line-height: 1.8;
+ margin: 5px 0;
+ padding: 5px 10px;
+ resize: none;
+ vertical-align: middle;
+ width: 100%;
+}
+@media only screen and (min-width: 782px) {
+ .wrap.lifterlms-addons .llms-licenses {
+ display: inline-block;
+ margin-left: 20px;
+ }
+ .wrap.lifterlms-addons .llms-licenses .llms-button-primary {
+ width: auto;
+ }
+ .wrap.lifterlms-addons .llms-licenses .llms-key-field {
+ width: 340px;
+ }
+}
+
+@media only screen and (min-width: 800px) {
+ .llms-status--betas .llms-beta-main {
+ display: flex;
+ }
+ .llms-status--betas .llms-beta-table {
+ flex: 2;
+ }
+ .llms-status--betas .llms-beta-aside {
+ flex: 1;
+ margin-right: 20px;
+ }
+}
+.llms-status--betas .llms-beta-aside {
+ background: #fef7f7;
+ border: 1px solid #e5554e;
+ padding: 20px;
+}
+.llms-status--betas .llms-beta-aside h1 {
+ padding-top: 0;
+}
+
+/*# sourceMappingURL=llms-helper.css.map */
diff --git a/libraries/lifterlms-helper/assets/css/llms-helper.css.map b/libraries/lifterlms-helper/assets/css/llms-helper.css.map
new file mode 100644
index 0000000000..13dfa0f031
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../scss/llms-helper.scss"],"names":[],"mappings":"AAKC;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;EACA;;AACA;EAAgB;;AAGjB;EACC;EACA;EACA;;AACA;EACC;EACA;;AACA;EACC,OAjCO;EAkCP;;AAKH;EAAmB;;AAEnB;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOH;EACC;IACC;IACA;;EAEA;IACC;;EAGD;IACC;;;;AASH;EAEC;IACC;;EAED;IACC;;EAED;IACC;IACA;;;AAKF;EACC;EACA;EACA;;AAEA;EACC","file":"llms-helper.css"}
\ No newline at end of file
diff --git a/libraries/lifterlms-helper/assets/css/llms-helper.min.css b/libraries/lifterlms-helper/assets/css/llms-helper.min.css
new file mode 100644
index 0000000000..7233ede9bd
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper.min.css
@@ -0,0 +1 @@
+.wrap.lifterlms-addons .llms-licenses{display:block;position:relative;vertical-align:middle;z-index:1}.wrap.lifterlms-addons .llms-licenses .llms-button-primary{width:100%}.wrap.lifterlms-addons .llms-licenses .llms-license-header{margin:0 0 5px 0}.wrap.lifterlms-addons .llms-licenses label{display:block;margin-top:20px}.wrap.lifterlms-addons .llms-licenses label:first-child{margin-top:0}.wrap.lifterlms-addons .llms-licenses .llms-active-keys{list-style-type:none;margin:15px 0;padding:0}.wrap.lifterlms-addons .llms-licenses .llms-active-keys li{margin:0 0 10px;padding:0}.wrap.lifterlms-addons .llms-licenses .llms-active-keys li input:checked+span{color:#e5554e;font-style:italic}.wrap.lifterlms-addons .llms-licenses .fa-chevron-down{margin-left:10px}.wrap.lifterlms-addons .llms-licenses .llms-key-field{background:#fff;border:1px solid #ddd;display:none;margin-left:0;position:absolute;left:-1px;padding:20px;top:calc( 100% - 2px );width:90%}.wrap.lifterlms-addons .llms-licenses .llms-key-field textarea{display:inline-block;height:86px;font-size:14px;font-family:monospace;line-height:1.8;margin:5px 0;padding:5px 10px;resize:none;vertical-align:middle;width:100%}@media only screen and (min-width: 782px){.wrap.lifterlms-addons .llms-licenses{display:inline-block;margin-left:20px}.wrap.lifterlms-addons .llms-licenses .llms-button-primary{width:auto}.wrap.lifterlms-addons .llms-licenses .llms-key-field{width:340px}}@media only screen and (min-width: 800px){.llms-status--betas .llms-beta-main{display:flex}.llms-status--betas .llms-beta-table{flex:2}.llms-status--betas .llms-beta-aside{flex:1;margin-right:20px}}.llms-status--betas .llms-beta-aside{background:#fef7f7;border:1px solid #e5554e;padding:20px}.llms-status--betas .llms-beta-aside h1{padding-top:0}/*# sourceMappingURL=llms-helper.min.css.map */
diff --git a/libraries/lifterlms-helper/assets/css/llms-helper.min.css.map b/libraries/lifterlms-helper/assets/css/llms-helper.min.css.map
new file mode 100644
index 0000000000..c0ce142341
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sourceRoot":"","sources":["../scss/llms-helper.scss"],"names":[],"mappings":"AAKC,sCACC,cACA,kBACA,sBACA,UAEA,2DACC,WAGD,2DACC,iBAGD,4CACC,cACA,gBACA,qEAGD,wDACC,qBACA,cACA,UACA,2DACC,gBACA,UACA,8EACC,MAjCO,QAkCP,kBAKH,wEAEA,sDACC,gBACA,sBACA,aACA,cACA,kBACA,UACA,aACA,uBACA,UAEA,+DACC,qBACA,YACA,eACA,sBACA,gBACA,aACA,iBACA,YACA,sBACA,WAOH,0CACC,sCACC,qBACA,iBAEA,2DACC,WAGD,sDACC,aASH,0CAEC,oCACC,aAED,qCACC,OAED,qCACC,OACA,mBAKF,qCACC,mBACA,yBACA,aAEA,wCACC","file":"llms-helper.min.css"}
\ No newline at end of file
diff --git a/libraries/lifterlms-helper/class-lifterlms-helper.php b/libraries/lifterlms-helper/class-lifterlms-helper.php
new file mode 100644
index 0000000000..6ab23b0d1a
--- /dev/null
+++ b/libraries/lifterlms-helper/class-lifterlms-helper.php
@@ -0,0 +1,212 @@
+upgrader().
+ *
+ * @var null|LLMS_Helper_Upgrader
+ */
+ private $upgrader = null;
+
+ /**
+ * Retrieve the main Instance of LifterLMS_Helper
+ *
+ * @since 3.0.0
+ * @since 3.2.0 Use `self::$instance` in favor of `self::$_instance`.
+ *
+ * @return LifterLMS_Helper
+ */
+ public static function instance() {
+ if ( is_null( self::$instance ) ) {
+ self::$instance = new self();
+ }
+ return self::$instance;
+ }
+
+ /**
+ * Constructor, get things started!
+ *
+ * @since 1.0.0
+ * @since 3.4.0 Only localize when loaded as an independent plugin.
+ *
+ * @return void
+ */
+ private function __construct() {
+
+ // Define class constants.
+ $this->define_constants();
+
+ /**
+ * When loaded as a library included by the LifterLMS core localization is handled by the LifterLMS core.
+ *
+ * When the plugin is loaded by itself as a plugin, we must localize it independently.
+ */
+ if ( ! defined( 'LLMS_HELPER_LIB' ) || ! LLMS_HELPER_LIB ) {
+ add_action( 'init', array( $this, 'load_textdomain' ), 0 );
+ }
+
+ add_action( 'plugins_loaded', array( $this, 'init' ) );
+ }
+
+ /**
+ * Inititalize the Plugin
+ *
+ * @since 1.0.0
+ * @since 3.0.0 Unknown.
+ * @since 3.2.0 Use `llms()` in favor of deprecated `LLMS()`.
+ * @since 3.3.1 Load the upgrader instance in WP_CLI context.
+ *
+ * @return void
+ */
+ public function init() {
+
+ // Only load if we have the minimum LifterLMS version installed & activated.
+ if ( function_exists( 'llms' ) && version_compare( '3.22.0', llms()->version, '<=' ) ) {
+
+ $this->includes();
+ $this->crons();
+
+ if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
+ $this->upgrader = LLMS_Helper_Upgrader::instance();
+ }
+ }
+ }
+
+ /**
+ * Schedule and handle cron functions
+ *
+ * @since 3.0.0
+ *
+ * @return void
+ */
+ private function crons() {
+
+ add_action( 'llms_helper_check_license_keys', array( 'LLMS_Helper_Keys', 'check_keys' ) );
+
+ if ( ! wp_next_scheduled( 'llms_helper_check_license_keys' ) ) {
+ wp_schedule_event( time(), 'daily', 'llms_helper_check_license_keys' );
+ }
+ }
+
+ /**
+ * Define constants for plugin
+ *
+ * @since 1.0.0
+ *
+ * @return void
+ */
+ private function define_constants() {
+
+ if ( ! defined( 'LLMS_HELPER_VERSION' ) ) {
+ define( 'LLMS_HELPER_VERSION', $this->version );
+ }
+ }
+
+ /**
+ * Include all clasess required by the plugin
+ *
+ * @since 1.0.0
+ * @since 3.0.0 Include new files.
+ *
+ * @return void
+ */
+ private function includes() {
+
+ require_once 'vendor-prefixed/autoload.php';
+
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/class-llms-helper-admin-add-ons.php';
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/class-llms-helper-assets.php';
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/class-llms-helper-betas.php';
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/class-llms-helper-cloned.php';
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/class-llms-helper-install.php';
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/class-llms-helper-keys.php';
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/class-llms-helper-options.php';
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/class-llms-helper-upgrader.php';
+
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/models/class-llms-helper-add-on.php';
+
+ require_once LLMS_HELPER_PLUGIN_DIR . 'includes/functions-llms-helper.php';
+ }
+
+ /**
+ * Load l10n files.
+ *
+ * This method is only used when the plugin is loaded as a standalone plugin (for development purposes),
+ * otherwise (when loaded as a library from within the LifterLMS core plugin) the localization
+ * strings are included into the LifterLMS Core plugin's po/mo files and are localized by the LifterLMS
+ * core plugin.
+ *
+ * Files can be found in the following order (The first loaded file takes priority):
+ * 1. WP_LANG_DIR/lifterlms/lifterlms-rest-LOCALE.mo
+ * 2. WP_LANG_DIR/plugins/lifterlms-rest-LOCALE.mo
+ * 3. WP_CONTENT_DIR/plugins/lifterlms-rest/i18n/lifterlms-rest-LOCALE.mo
+ *
+ * Note: The function `load_plugin_textdomain()` is not used because the same textdomain as the LifterLMS core
+ * is used for this plugin but the file is named `lifterlms-rest` in order to allow using a separate language
+ * file for each codebase.
+ *
+ * @since 2.5.0
+ * @since 3.4.0 Updated to the core textdomain.
+ *
+ * @return void
+ */
+ public function load_textdomain() {
+
+ // Load locale.
+ $locale = apply_filters( 'plugin_locale', get_locale(), 'lifterlms' );
+
+ // Load from the LifterLMS "safe" directory if it exists.
+ load_textdomain( 'lifterlms', WP_LANG_DIR . '/lifterlms/lifterlms-helper-' . $locale . '.mo' );
+
+ // Load from the default plugins language file directory.
+ load_textdomain( 'lifterlms', WP_LANG_DIR . '/plugins/lifterlms-helper-' . $locale . '.mo' );
+
+ // Load from the plugin's language file directory.
+ load_textdomain( 'lifterlms', LLMS_HELPER_PLUGIN_DIR . '/i18n/lifterlms-helper-' . $locale . '.mo' );
+ }
+
+ /**
+ * Return the singleton instance of the LLMS_Helper_Upgader
+ *
+ * @since 3.0.0
+ *
+ * @return LLMS_Helper_Upgrader
+ */
+ public function upgrader() {
+ return $this->upgrader;
+ }
+}
diff --git a/libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php b/libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php
new file mode 100644
index 0000000000..bf24e4396b
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php
@@ -0,0 +1,407 @@
+has_keys() to retrieve the value.
+ *
+ * @var bool
+ */
+ private $has_keys = null;
+
+ /**
+ * Constructor
+ *
+ * @since 3.0.0
+ */
+ public function __construct() {
+
+ add_action( 'admin_init', array( $this, 'handle_actions' ) );
+
+ // Output navigation items.
+ add_action( 'lifterlms_before_addons_nav', array( $this, 'output_navigation_items' ) );
+
+ // Output the license manager interface button / dropdown.
+ add_action( 'llms_addons_page_after_title', array( $this, 'output_license_manager' ) );
+
+ // Filter current section default.
+ add_filter( 'llms_admin_add_ons_get_current_section', array( $this, 'filter_get_current_section' ) );
+
+ // Filter the content display for a section.
+ add_filter( 'llms_admin_add_ons_get_current_section_default_content', array( $this, 'filter_get_current_section_content' ), 10, 2 );
+
+ // Add install & update actions to the list of available management actions powered by the bulk actions functions in core.
+ add_filter( 'llms_admin_add_ons_manage_actions', array( $this, 'filter_manage_actions' ) );
+
+ // Output html for helper-powered actions (install & update).
+ add_action( 'llms_add_ons_single_item_actions', array( $this, 'output_single_install_action' ), 5, 2 );
+ add_action( 'llms_add_ons_single_item_after_actions', array( $this, 'output_single_update_action' ), 5, 2 );
+
+ add_filter( 'llms_admin_addon_features_exclude_ids', array( $this, 'filter_feature_exclude_ids' ) );
+ }
+
+ /**
+ * Change the default section from "All" to "Mine" but only if license keys have been saved
+ *
+ * @since 3.0.0
+ *
+ * @param string $section Section slug.
+ * @return string
+ */
+ public function filter_get_current_section( $section ) {
+
+ if ( 'all' === $section && empty( $_GET['section'] ) && $this->has_keys() ) {
+ return 'mine';
+ }
+
+ return $section;
+ }
+
+ /**
+ * Add "mine" tab content
+ *
+ * @since 3.0.0
+ * @since 3.0.2 Unknown.
+ *
+ * @param array $content Default items to display.
+ * @param string $section Current tab slug.
+ * @return array
+ */
+ public function filter_get_current_section_content( $content, $section ) {
+
+ if ( 'mine' === $section ) {
+ $mine = llms_helper_get_available_add_ons();
+ $addons = llms_get_add_ons();
+ if ( ! is_wp_error( $addons ) && isset( $addons['items'] ) ) {
+ foreach ( $addons['items'] as $item ) {
+ if ( in_array( $item['id'], $mine ) ) {
+ $content[] = $item;
+ }
+ }
+ }
+ }
+
+ return $content;
+ }
+
+ /**
+ * Exclude IDs for all add-ons that are currently available on the site
+ *
+ * @since 3.0.0
+ *
+ * @param array $ids Existing product ids to exclude.
+ * @return array
+ */
+ public function filter_feature_exclude_ids( $ids ) {
+ return array_unique( array_merge( $ids, llms_helper_get_available_add_ons( false ) ) );
+ }
+
+ /**
+ * Add installatino & update actions to the list of available management actions
+ *
+ * @since 3.0.0
+ *
+ * @param array $actions List of available actions, the action should correspond to a method in the LLMS_Helper_Add_On class.
+ * @return array
+ */
+ public function filter_manage_actions( $actions ) {
+ return array_merge( array( 'install', 'update' ), $actions );
+ }
+
+ /**
+ * Handle form submission actions
+ *
+ * @since 3.0.0
+ * @since 3.2.0 Let the LifterLMS Core output flashed notices
+ * @since 3.2.1 Flush cached addon and package update data when adding or removing keys.
+ *
+ * @return void
+ */
+ public function handle_actions() {
+
+ // License key addition & removal.
+ if ( ! llms_verify_nonce( '_llms_manage_keys_nonce', 'llms_manage_keys' ) ) {
+ return;
+ }
+
+ $flush = false;
+
+ if ( isset( $_POST['llms_activate_keys'] ) && ! empty( $_POST['llms_add_keys'] ) ) {
+
+ $flush = true;
+ $this->handle_activations();
+
+ } elseif ( isset( $_POST['llms_deactivate_keys'] ) && ! empty( $_POST['llms_remove_keys'] ) ) {
+
+ $flush = true;
+ $this->handle_deactivations();
+
+ }
+
+ if ( $flush ) {
+ llms_helper_flush_cache();
+ }
+ }
+
+ /**
+ * Activate license keys with LifterLMS.com api
+ *
+ * Output errors / successes & saves successful keys to the db.
+ *
+ * @since 3.0.0
+ * @since 3.2.0 Don't access $_POST directly.
+ * @since 3.4.0 Use core textdomain.
+ * @since 3.5.0 Passing force parameter to activate_keys() method.
+ *
+ * @return void
+ */
+ private function handle_activations() {
+
+ $res = LLMS_Helper_Keys::activate_keys( llms_filter_input( INPUT_POST, 'llms_add_keys', FILTER_SANITIZE_STRING ), true );
+
+ if ( is_wp_error( $res ) ) {
+ LLMS_Admin_Notices::flash_notice( $res->get_error_message(), 'error' );
+ return;
+ }
+
+ $data = $res['data'];
+ if ( isset( $data['errors'] ) ) {
+ foreach ( $data['errors'] as $error ) {
+ LLMS_Admin_Notices::flash_notice( make_clickable( $error ), 'error' );
+ }
+ }
+
+ if ( isset( $data['activations'] ) ) {
+ foreach ( $data['activations'] as $activation ) {
+ LLMS_Helper_Keys::add_license_key( $activation );
+ // Translators: %s = License key.
+ LLMS_Admin_Notices::flash_notice( sprintf( __( '"%s" has been saved!', 'lifterlms' ), $activation['license_key'] ), 'success' );
+ }
+ }
+ }
+
+ /**
+ * Deactivate license keys with LifterLMS.com api
+ *
+ * Output errors / successes & removes keys from the db.
+ *
+ * @since 3.0.0
+ * @since 3.2.0 Don't access $_POST directly.
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @return void
+ */
+ private function handle_deactivations() {
+
+ $obfuscated_keys = llms_filter_input( INPUT_POST, 'llms_remove_keys', FILTER_UNSAFE_RAW, FILTER_REQUIRE_ARRAY );
+ $keys = array();
+
+ // De-obfuscate the keys before sending to deactivation server or removing from the site.
+ $my_keys = llms_helper_options()->get_license_keys();
+ foreach ( $my_keys as $key ) {
+ foreach ( $obfuscated_keys as $obfuscated_key ) {
+ if ( llms_obfuscate_license_key( $key['license_key'] ) === $obfuscated_key ) {
+ $keys[] = $key['license_key'];
+ }
+ }
+ }
+
+ $res = LLMS_Helper_Keys::deactivate_keys( $keys );
+
+ if ( is_wp_error( $res ) ) {
+ LLMS_Admin_Notices::flash_notice( $res->get_error_message(), 'error' );
+ return;
+ }
+
+ foreach ( $keys as $key ) {
+ LLMS_Helper_Keys::remove_license_key( $key );
+ /* Translators: %s = License Key */
+ LLMS_Admin_Notices::flash_notice( sprintf( __( 'License key "%s" was removed from this site.', 'lifterlms' ), llms_obfuscate_license_key( $key ) ), 'info' );
+ }
+
+ if ( isset( $data['errors'] ) ) {
+ foreach ( $data['errors'] as $error ) {
+ LLMS_Admin_Notices::flash_notice( make_clickable( $error ), 'error' );
+ }
+ }
+ }
+
+ /**
+ * Determine if the current site has active license keys
+ *
+ * @since 3.0.0
+ *
+ * @return bool
+ */
+ public function has_keys() {
+
+ if ( is_null( $this->has_keys ) ) {
+ $this->has_keys = ( count( llms_helper_options()->get_license_keys() ) );
+ }
+
+ return $this->has_keys;
+ }
+
+ /**
+ * Output the HTML for the license manager area
+ *
+ * @since 3.0.0
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @return void
+ */
+ public function output_license_manager() {
+
+ $my_keys = llms_helper_options()->get_license_keys();
+ if ( $my_keys ) {
+ wp_enqueue_style( 'plugin-install' );
+ wp_enqueue_script( 'plugin-install' );
+ add_thickbox();
+ }
+
+ ?>
+
+
+ is_installable() && ! $addon->is_installed() && ( ! $addon->requires_license() || $addon->is_licensed() ) ) {
+ ?>
+
+
+
+
+
+
+
+
+
+ is_installable() && $addon->is_installed() && ( ! $addon->requires_license() || $addon->is_licensed() ) && $addon->has_available_update() ) {
+ ?>
+
+
+
+
+
+
+
+
+
+ has_keys() ) {
+ return;
+ }
+
+ ?>
+
+
+
+ id && isset( $_GET['tab'] ) && 'betas' === $_GET['tab'] ) {
+ $load = true;
+ } elseif ( 'lifterlms_page_llms-add-ons' === $screen->id ) {
+ $load = true;
+ }
+
+ if ( ! $load ) {
+ return;
+ }
+
+ wp_register_style( 'llms-helper', LLMS_HELPER_PLUGIN_URL . 'assets/css/llms-helper' . LLMS_ASSETS_SUFFIX . '.css', array(), LLMS_HELPER_VERSION );
+ wp_enqueue_style( 'llms-helper' );
+
+ wp_style_add_data( 'llms-sl', 'rtl', 'replace' );
+ wp_style_add_data( 'llms-sl', 'suffix', LLMS_ASSETS_SUFFIX );
+ }
+}
+return new LLMS_Helper_Assets();
diff --git a/libraries/lifterlms-helper/includes/class-llms-helper-betas.php b/libraries/lifterlms-helper/includes/class-llms-helper-betas.php
new file mode 100644
index 0000000000..45765d701d
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-betas.php
@@ -0,0 +1,107 @@
+ $channel ) {
+
+ $addon = llms_get_add_on( $id );
+ if ( 'channel' !== $addon->get_channel_subscription() ) {
+ $addon->subscribe_to_channel( sanitize_text_field( $channel ) );
+ $new_subscription = true;
+ }
+ }
+
+ // When a channel subscription changes also flush caches so we'll get the most recent add-on data immediately and allow upgrading immediately from wp core update screens.
+ if ( $new_subscription ) {
+ llms_helper_flush_cache();
+ }
+
+ return $subs;
+ }
+
+ /**
+ * Output content for the beta testing screen
+ *
+ * @since 3.0.0
+ *
+ * @param string $curr_tab Current status screen tab.
+ * @return void
+ */
+ public function output_tab( $curr_tab ) {
+
+ if ( 'betas' !== $curr_tab ) {
+ return;
+ }
+
+ $addons = llms_helper_get_available_add_ons();
+ array_unshift( $addons, 'lifterlms-com-lifterlms', 'lifterlms-com-lifterlms-helper' );
+ include 'views/beta-testing.php';
+ }
+}
+return new LLMS_Helper_Betas();
diff --git a/libraries/lifterlms-helper/includes/class-llms-helper-cloned.php b/libraries/lifterlms-helper/includes/class-llms-helper-cloned.php
new file mode 100644
index 0000000000..5d9e4f45c7
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-cloned.php
@@ -0,0 +1,65 @@
+get_license_keys();
+
+ if ( ! $keys ) {
+ return;
+ }
+
+ $res = LLMS_Helper_Keys::activate_keys( array_keys( $keys ) );
+
+ if ( ! is_wp_error( $res ) ) {
+
+ $data = $res['data'];
+ if ( isset( $data['activations'] ) ) {
+ foreach ( $data['activations'] as $activation ) {
+ LLMS_Helper_Keys::add_license_key( $activation );
+ }
+ }
+ }
+ }
+}
+
+return new LLMS_Helper_Cloned();
diff --git a/libraries/lifterlms-helper/includes/class-llms-helper-install.php b/libraries/lifterlms-helper/includes/class-llms-helper-install.php
new file mode 100644
index 0000000000..9c9f0f7a7b
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-install.php
@@ -0,0 +1,172 @@
+version ) {
+
+ self::install();
+
+ /**
+ * Action run after the helper library is updated.
+ *
+ * @since 3.0.0
+ */
+ do_action( 'llms_helper_updated' );
+
+ }
+ }
+
+ /**
+ * Core install function
+ *
+ * @since 3.0.0
+ * @since 3.4.0 Skip migration when loaded as a library.
+ *
+ * @return void
+ */
+ public static function install() {
+
+ if ( ! is_blog_installed() ) {
+ return;
+ }
+
+ do_action( 'llms_helper_before_install' );
+
+ if ( ( ! defined( 'LLMS_HELPER_LIB' ) || ! LLMS_HELPER_LIB ) && ! get_option( 'llms_helper_version', '' ) ) {
+ self::_migrate_300();
+ }
+
+ self::update_version();
+
+ do_action( 'llms_helper_after_install' );
+ }
+
+ /**
+ * Update the LifterLMS version record to the latest version
+ *
+ * @since 3.0.0
+ * @since 3.4.0 Use llms_helper() in favor of deprecated LLMS_Helper().
+ *
+ * @param string $version version number.
+ * @return void
+ */
+ public static function update_version( $version = null ) {
+ delete_option( 'llms_helper_version' );
+ add_option( 'llms_helper_version', is_null( $version ) ? llms_helper()->version : $version );
+ }
+
+ /**
+ * Migrate to version 3.0.0
+ *
+ * @since 3.0.0
+ * @since 3.0.2 Unknown.
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @return void
+ */
+ private static function _migrate_300() {
+
+ $text = '' . __( 'Welcome to the LifterLMS Helper', 'lifterlms' ) . '
';
+ $text .= '' . __( 'This plugin allows your website to interact with your subscriptions at LifterLMS.com to ensure your add-ons stay up to date.', 'lifterlms' ) . '
';
+ // Translators: %1$s = Opening anchor tag; %2$s = closing anchor tag.
+ $text .= '' . sprintf( __( 'You can activate your add-ons from the %1$sAdd-Ons & More%2$s screen.', 'lifterlms' ), '', ' ' ) . '
';
+
+ $keys = array();
+ $addons = llms_get_add_ons();
+ if ( ! is_wp_error( $addons ) && isset( $addons['items'] ) ) {
+ foreach ( $addons['items'] as $addon ) {
+
+ $addon = llms_get_add_on( $addon );
+
+ if ( ! $addon->is_installable() ) {
+ continue;
+ }
+
+ $option_name = sprintf( '%s_activation_key', $addon->get( 'slug' ) );
+
+ $key = get_option( $option_name );
+ if ( $key ) {
+ $keys[] = get_option( $option_name );
+ }
+
+ delete_option( $option_name );
+ delete_option( sprintf( '%s_update_key', $addon->get( 'slug' ) ) );
+
+ }
+ }
+
+ if ( $keys ) {
+
+ $res = LLMS_Helper_Keys::activate_keys( $keys );
+
+ if ( ! is_wp_error( $res ) ) {
+
+ $data = $res['data'];
+ if ( isset( $data['activations'] ) ) {
+
+ // Translators: %d = Number of keys that have been migrated.
+ $text .= '' . sprintf( _n( '%d license has been automatically migrated from the previous version of the LifterLMS Helper', '%d licenses have been automatically migrated from the previous version of the LifterLMS Helper.', count( $data['activations'] ), 'lifterlms' ), count( $data['activations'] ) ) . ':
';
+
+ foreach ( $data['activations'] as $activation ) {
+ LLMS_Helper_Keys::add_license_key( $activation );
+ $text .= '' . $activation['license_key'] . '
';
+ }
+ }
+ }
+ }
+
+ LLMS_Admin_Notices::flash_notice( $text, 'info' );
+
+ // Clean up legacy options.
+ $remove = array(
+ 'lifterlms_stripe_activation_key',
+ 'lifterlms_paypal_activation_key',
+ 'lifterlms_gravityforms_activation_key',
+ 'lifterlms_mailchimp_activation_key',
+ 'llms_helper_key_migration',
+ );
+
+ foreach ( $remove as $opt ) {
+ delete_option( $opt );
+ }
+ }
+}
+
+LLMS_Helper_Install::init();
diff --git a/libraries/lifterlms-helper/includes/class-llms-helper-keys.php b/libraries/lifterlms-helper/includes/class-llms-helper-keys.php
new file mode 100644
index 0000000000..67325a1020
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-keys.php
@@ -0,0 +1,249 @@
+ $keys,
+ 'url' => get_site_url(),
+ );
+
+ // Check for a cached result based on the keys and url input.
+ $cache_hash = md5( wp_json_encode( $data ) );
+ if ( $force ) {
+ // Delete cache if forcing a remote check.
+ delete_site_transient( 'llms_helper_keys_activation_response_' . $cache_hash );
+ } else {
+ // Use the cached result if present.
+ $cached_req_result = get_site_transient( 'llms_helper_keys_activation_response_' . $cache_hash );
+ if ( ! empty( $cached_req_result ) ) {
+ return $cached_req_result;
+ }
+ }
+
+ $req = new LLMS_Dot_Com_API( '/license/activate', $data );
+ set_site_transient( 'llms_helper_keys_activation_response_' . $cache_hash, $req->get_result(), HOUR_IN_SECONDS );
+
+ return $req->get_result();
+ }
+
+ /**
+ * Add a single license key
+ *
+ * @since 3.0.0
+ *
+ * @param string $activation_data Array of activation details from api call.
+ * @return boolean True if option value has changed, false if not or if update failed.
+ */
+ public static function add_license_key( $activation_data ) {
+
+ $keys = llms_helper_options()->get_license_keys();
+ $keys[ $activation_data['license_key'] ] = array(
+ 'product_id' => $activation_data['id'],
+ 'status' => 1,
+ 'license_key' => $activation_data['license_key'],
+ 'update_key' => $activation_data['update_key'],
+ 'addons' => $activation_data['addons'],
+ );
+
+ return llms_helper_options()->set_license_keys( $keys );
+ }
+
+ /**
+ * Check all saved keys to ensure they're still active
+ *
+ * Outputs warnings if the key has expired or the status has changed remotely.
+ *
+ * Runs on daily cron (`llms_check_license_keys`).
+ *
+ * Only make api calls to check once / week.
+ *
+ * @since 3.0.0
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @param bool $force Ignore the once/week setting and force a check.
+ * @return void
+ */
+ public static function check_keys( $force = false ) {
+
+ // Don't trigger during AJAX Requests.
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
+ return;
+ }
+
+ // Don't proceed if we don't have any keys to check.
+ $keys = llms_helper_options()->get_license_keys();
+ if ( ! $keys ) {
+ return;
+ }
+
+ if ( ! $force ) {
+ // Only check keys once a week.
+ $last_send = llms_helper_options()->get_last_keys_cron_check();
+ if ( $last_send > apply_filters( 'llms_check_license_keys_interval', strtotime( '-1 week' ) ) ) {
+ return;
+ }
+ }
+
+ // Record check time.
+ llms_helper_options()->set_last_keys_cron_check( time() );
+
+ $data = array(
+ 'keys' => array(),
+ 'url' => get_site_url(),
+ );
+
+ foreach ( $keys as $key ) {
+ $data['keys'][ $key['license_key'] ] = $key['update_key'];
+ }
+
+ $req = new LLMS_Dot_Com_API( '/license/status', $data );
+ if ( ! $req->is_error() ) {
+
+ $res = $req->get_result();
+ include_once LLMS_PLUGIN_DIR . 'includes/admin/class.llms.admin.notices.php';
+
+ /* Translators: %s = License Key */
+ $msg = __( 'The license "%s" is no longer valid and was deactivated. Please visit your account dashboard at https://lifterlms.com/my-account for more information.', 'lifterlms' );
+
+ // Output error responses.
+ if ( isset( $res['data']['errors'] ) ) {
+ foreach ( array_keys( $res['data']['errors'] ) as $key ) {
+ self::remove_license_key( $key );
+ LLMS_Admin_Notices::add_notice(
+ 'key_check_' . sanitize_text_field( $key ),
+ make_clickable( sprintf( $msg, $key ) ),
+ array(
+ 'type' => 'error',
+ 'dismiss_for_days' => 0,
+ )
+ );
+ }
+ }
+
+ // Check status of keys, if the status has changed remove it locally.
+ if ( isset( $res['data']['keys'] ) ) {
+ foreach ( $res['data']['keys'] as $key => $data ) {
+
+ if ( $data['status'] ) {
+ continue;
+ }
+
+ self::remove_license_key( $key );
+ LLMS_Admin_Notices::add_notice(
+ 'key_check_' . sanitize_text_field( $key ),
+ make_clickable( sprintf( $msg, $key ) ),
+ array(
+ 'type' => 'error',
+ 'dismiss_for_days' => 0,
+ )
+ );
+
+ }
+ }
+ }
+ }
+
+ /**
+ * Deactivate LifterLMS API keys with remote server
+ *
+ * @since 3.0.0
+ * @since 3.4.1 Ensure key exists before attempting to deactivate it.
+ * @since 3.5.0 Deleting any cached activation result.
+ *
+ * @param array $keys Array of keys.
+ * @return array
+ */
+ public static function deactivate_keys( $keys ) {
+
+ $keys = array_map( 'sanitize_text_field', $keys );
+ $keys = array_map( 'trim', $keys );
+
+ $data = array(
+ 'keys' => array(),
+ 'url' => get_site_url(),
+ );
+
+ // Delete any cached activation result.
+ $cache_hash = md5( wp_json_encode( $data ) );
+ delete_site_transient( 'llms_helper_keys_activation_response_' . $cache_hash );
+
+ $saved = llms_helper_options()->get_license_keys();
+ foreach ( $keys as $key ) {
+ if ( isset( $saved[ $key ] ) && $saved[ $key ]['update_key'] ) {
+ $data['keys'][ $key ] = $saved[ $key ]['update_key'];
+ }
+ }
+
+ $req = new LLMS_Dot_Com_API( '/license/deactivate', $data );
+ return $req->get_result();
+ }
+
+ /**
+ * Retrieve stored information about a key by the license key
+ *
+ * @since 3.3.1
+ *
+ * @param string $key License key.
+ * @return array|false Associative array of license key information. Returns `false` if the provided license key was not found.
+ */
+ public static function get( $key ) {
+
+ $saved = llms_helper_options()->get_license_keys();
+ return isset( $saved[ $key ] ) ? $saved[ $key ] : false;
+ }
+
+ /**
+ * Remove a single license key
+ *
+ * @since 3.0.0
+ *
+ * @param string $key License key.
+ * @return boolean True if option value has changed, false if not or if update failed.
+ */
+ public static function remove_license_key( $key ) {
+ $keys = llms_helper_options()->get_license_keys();
+ if ( isset( $keys[ $key ] ) ) {
+ unset( $keys[ $key ] );
+ }
+ return llms_helper_options()->set_license_keys( $keys );
+ }
+}
diff --git a/libraries/lifterlms-helper/includes/class-llms-helper-options.php b/libraries/lifterlms-helper/includes/class-llms-helper-options.php
new file mode 100644
index 0000000000..5d471f9388
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-options.php
@@ -0,0 +1,158 @@
+get_options();
+
+ if ( isset( $options[ $key ] ) ) {
+ return $options[ $key ];
+ }
+
+ return $default;
+ }
+
+ /**
+ * Retrieve all upgrader options array
+ *
+ * @since 3.0.0
+ *
+ * @return array
+ */
+ private function get_options() {
+ return get_option( 'llms_helper_options', array() );
+ }
+
+ /**
+ * Update the value of an option
+ *
+ * @since 3.0.0
+ *
+ * @param string $key Option name.
+ * @param mixed $val Option value.
+ * @return boolean True if option value has changed, false if not or if update failed.
+ */
+ private function set_option( $key, $val ) {
+
+ $options = $this->get_options();
+ $options[ $key ] = $val;
+ return update_option( 'llms_helper_options', $options, false );
+ }
+
+ /**
+ * Get info about addon channel subscriptions
+ *
+ * @since 3.0.0
+ *
+ * @return array
+ */
+ public function get_channels() {
+ return $this->get_option( 'channels', array() );
+ }
+
+ /**
+ * Set info about addon channel subscriptions
+ *
+ * @since 3.0.0
+ *
+ * @param array $channels Array of channel information.
+ * @return boolean True if option value has changed, false if not or if update failed.
+ */
+ public function set_channels( $channels ) {
+ return $this->set_option( 'channels', $channels );
+ }
+
+ /**
+ * Retrieve a timestamp for the last time the keys check cron was run
+ *
+ * @since 3.0.0
+ *
+ * @return int
+ */
+ public function get_last_keys_cron_check() {
+ return $this->get_option( 'last_keys_cron_check', 0 );
+ }
+
+ /**
+ * Set the last cron check time
+ *
+ * @since 3.0.0
+ *
+ * @param int $time Timestamp.
+ * @return boolean True if option value has changed, false if not or if update failed.
+ */
+ public function set_last_keys_cron_check( $time ) {
+ return $this->set_option( 'last_keys_cron_check', $time );
+ }
+
+ /**
+ * Retrieve saved license key data
+ *
+ * @since 3.0.0
+ *
+ * @return array
+ */
+ public function get_license_keys() {
+ return $this->get_option( 'license_keys', array() );
+ }
+
+ /**
+ * Update saved license key data
+ *
+ * @since 3.0.0
+ *
+ * @param array $keys Key data to save.
+ * @return boolean True if option value has changed, false if not or if update failed.
+ */
+ public function set_license_keys( $keys ) {
+ return $this->set_option( 'license_keys', $keys );
+ }
+}
diff --git a/libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php b/libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php
new file mode 100644
index 0000000000..e14b63f38f
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php
@@ -0,0 +1,538 @@
+is_installable() || ! $addon->is_installed() ) {
+ continue;
+ }
+
+ Lifterlms\Lifterlms_Helper\Required\Traduttore_Registry\add_project(
+ $product['type'],
+ $product['slug'],
+ 'https://translate.lifterlms.com/translate/api/translations/' . $product['slug']
+ );
+ }
+ }
+ }
+
+ /**
+ * Install an add-on from LifterLMS.com
+ *
+ * @since 3.0.0
+ * @since 3.2.0 Use strict comparison for `in_array()`.
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @param string|obj $addon_or_id ID for the add-on or an instance of the LLMS_Add_On.
+ * @param string $action Installation type [install|update].
+ * @return WP_Error|true
+ */
+ public function install_addon( $addon_or_id, $action = 'install' ) {
+
+ // Setup the addon.
+ $addon = is_a( $addon_or_id, 'LLMS_Add_On' ) ? $addon_or_id : llms_get_add_on( $addon_or_id );
+ if ( ! $addon ) {
+ return new WP_Error( 'invalid_addon', __( 'Invalid add-on ID.', 'lifterlms' ) );
+ }
+
+ if ( ! in_array( $action, array( 'install', 'update' ), true ) ) {
+ return new WP_Error( 'invalid_action', __( 'Invalid action.', 'lifterlms' ) );
+ }
+
+ if ( ! $addon->is_installable() ) {
+ return new WP_Error( 'not_installable', __( 'Add-on cannot be installable.', 'lifterlms' ) );
+ }
+
+ // Make sure it's not already installed.
+ if ( 'install' === $action && $addon->is_installed() ) {
+ // Translators: %s = Add-on name.
+ return new WP_Error( 'installed', sprintf( __( '%s is already installed', 'lifterlms' ), $addon->get( 'title' ) ) );
+ }
+
+ // Get download info via llms.com api.
+ $dl_info = $addon->get_download_info();
+ if ( is_wp_error( $dl_info ) ) {
+ return $dl_info;
+ }
+ if ( ! isset( $dl_info['data']['url'] ) ) {
+ return new WP_Error( 'no_url', __( 'An error occured while attempting to retrieve add-on download information. Please try again.', 'lifterlms' ) );
+ }
+
+ require_once ABSPATH . 'wp-admin/includes/file.php';
+ include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
+ WP_Filesystem();
+
+ $skin = new Automatic_Upgrader_Skin();
+
+ if ( 'plugin' === $addon->get_type() ) {
+
+ $upgrader = new Plugin_Upgrader( $skin );
+
+ } elseif ( 'theme' === $addon->get_type() ) {
+
+ $upgrader = new Theme_Upgrader( $skin );
+
+ } else {
+
+ return new WP_Error( 'inconceivable', __( 'The requested action is not possible.', 'lifterlms' ) );
+
+ }
+
+ if ( 'install' === $action ) {
+ remove_filter( 'upgrader_package_options', array( $this, 'upgrader_package_options' ) );
+ $result = $upgrader->install( $dl_info['data']['url'] );
+ add_filter( 'upgrader_package_options', array( $this, 'upgrader_package_options' ) );
+ } elseif ( 'update' === $action ) {
+ $result = $upgrader->upgrade( $addon->get( 'update_file' ) );
+ }
+
+ if ( is_wp_error( $result ) ) {
+ return $result;
+ } elseif ( is_wp_error( $skin->result ) ) {
+ return $skin->result;
+ } elseif ( is_null( $result ) ) {
+ return new WP_Error( 'filesystem', __( 'Unable to connect to the filesystem. Please confirm your credentials.', 'lifterlms' ) );
+ }
+
+ return true;
+ }
+
+ /**
+ * Output additional information on plugins update screen when updates are available for an unlicensed addon
+ *
+ * @since 3.0.0
+ * @since 3.0.2 Unknown.
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @param array $plugin_data Array of plugin data.
+ * @param array $res Response data.
+ * @return void
+ */
+ public function in_plugin_update_message( $plugin_data, $res ) {
+
+ if ( empty( $plugin_data['package'] ) ) {
+
+ echo '';
+
+ echo '';
+ esc_html_e( 'Your LifterLMS add-on is currently unlicensed and cannot be updated!', 'lifterlms' );
+ echo '
';
+
+ echo '';
+ // Translators: %1$s = Opening anchor tag; %2$s = Closing anchor tag.
+ printf( esc_html__( 'If you already have a license, you can activate it on the %1$sadd-ons management screen%2$s.', 'lifterlms' ), '', ' ' );
+ echo '
';
+
+ echo '';
+ // Translators: %s = URI to licensing FAQ.
+ printf( esc_html__( 'Learn more about LifterLMS add-on licensing at %s.', 'lifterlms' ), wp_kses_post( make_clickable( 'https://lifterlms.com/docs/lifterlms-helper/' ) ) );
+ echo '
';
+
+ }
+ }
+
+ /**
+ * Filter API calls to get plugin information and replace it with data from LifterLMS.com API for our addons
+ *
+ * @since 3.0.0
+ *
+ * @param bool $response False (denotes API call should be made to wp.org for plugin info).
+ * @param string $action Name of the API action.
+ * @param obj $args Additional API call args.
+ * @return false|obj
+ */
+ public function plugins_api( $response, $action = '', $args = null ) {
+
+ if ( 'plugin_information' !== $action ) {
+ return $response;
+ }
+
+ if ( empty( $args->slug ) ) {
+ return $response;
+ }
+
+ $core = false;
+
+ if ( 'lifterlms' === $args->slug ) {
+ $addon = llms_get_add_on( 'lifterlms-com-lifterlms' );
+ if ( false !== strpos( $addon->get_channel_subscription(), 'beta' ) ) {
+ remove_filter( 'plugins_api', array( $this, 'plugins_api' ), 10, 3 );
+ $args->slug = 'lifterlms-com-lifterlms';
+ $core = true;
+ }
+ }
+
+ if ( 0 !== strpos( $args->slug, 'lifterlms-com-' ) ) {
+ return $response;
+ }
+
+ $response = $this->set_plugins_api( $args->slug, true );
+
+ if ( $core ) {
+ add_filter( 'plugins_api', array( $this, 'plugins_api' ), 10, 3 );
+ }
+
+ return $response;
+ }
+
+ /**
+ * Handle setting the site transient for plugin updates
+ *
+ * @since 3.0.0
+ * @since 3.0.2 Unknown.
+ *
+ * @param obj $value Transient value.
+ * @return obj
+ */
+ public function pre_set_site_transient_update_things( $value ) {
+
+ if ( empty( $value ) ) {
+ return $value;
+ }
+
+ $which = current_filter();
+ if ( 'pre_set_site_transient_update_plugins' === $which ) {
+ $type = 'plugin';
+ } elseif ( 'pre_set_site_transient_update_themes' === $which ) {
+ $type = 'theme';
+ } else {
+ return $value;
+ }
+
+ $all_products = llms_get_add_ons( false );
+ if ( is_wp_error( $all_products ) || ! isset( $all_products['items'] ) ) {
+ return $value;
+ }
+
+ foreach ( $all_products['items'] as $addon_data ) {
+
+ $addon = llms_get_add_on( $addon_data );
+
+ if ( ! $addon->is_installable() || ! $addon->is_installed() ) {
+ continue;
+ }
+
+ if ( $type !== $addon->get_type() ) {
+ continue;
+ }
+
+ $file = $addon->get( 'update_file' );
+
+ if ( 'plugin' === $type ) {
+
+ if ( 'lifterlms-com-lifterlms' === $addon->get( 'id' ) ) {
+ if ( 'stable' === $addon->get_channel_subscription() || ! $addon->get( 'version_beta' ) ) {
+ continue;
+ }
+ }
+
+ $item = (object) $this->set_plugins_api( $addon->get( 'id' ), false );
+
+ } elseif ( 'theme' === $type ) {
+
+ $item = array(
+ 'theme' => $file,
+ 'new_version' => $addon->get_latest_version(),
+ 'url' => $addon->get_permalink(),
+ 'package' => true,
+ );
+ }
+
+ if ( $addon->has_available_update() ) {
+
+ $value->response[ $file ] = $item;
+ unset( $value->no_update[ $file ] );
+
+ } else {
+
+ $value->no_update[ $file ] = $item;
+ unset( $value->response[ $file ] );
+
+ }
+ }
+
+ return $value;
+ }
+
+ /**
+ * Setup an object of addon data for use when requesting plugin information normally acquired from wp.org.
+ *
+ * @since 3.0.0
+ * @since 3.2.1 Set package to `true` for add-ons which don't require a license.
+ * @since 3.4.2 Added a `plugin` property to the returned plugin object,
+ * which is required by `WP_Plugin_Install_List_Table::prepare_items()`.
+ *
+ * @param string $id Addon id.
+ * @param bool $include_sections Whether or not to include additional sections like the description and changelog.
+ * @return object
+ */
+ private function set_plugins_api( $id, $include_sections = true ) {
+
+ $addon = llms_get_add_on( $id );
+
+ if ( 'lifterlms-com-lifterlms' === $id && false !== strpos( $addon->get_latest_version(), 'beta' ) ) {
+
+ require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
+ $item = plugins_api(
+ 'plugin_information',
+ array(
+ 'slug' => 'lifterlms',
+ 'fields' => array(
+ 'banners' => true,
+ 'icons' => true,
+ ),
+ )
+ );
+ $item->version = $addon->get_latest_version();
+ $item->new_version = $addon->get_latest_version();
+ $item->package = true;
+
+ unset( $item->versions );
+
+ $item->sections['changelog'] = $this->get_changelog_for_api( $addon );
+
+ return $item;
+
+ }
+
+ $item = array(
+ 'name' => $addon->get( 'title' ),
+ 'slug' => $id,
+ 'plugin' => $addon->get( 'update_file' ),
+ 'version' => $addon->get_latest_version(),
+ 'new_version' => $addon->get_latest_version(),
+ 'author' => '' . $addon->get( 'author' )['name'] . ' ',
+ 'author_profile' => $addon->get( 'author' )['link'],
+ 'requires' => $addon->get( 'version_wp' ),
+ 'tested' => '',
+ 'requires_php' => $addon->get( 'version_php' ),
+ 'compatibility' => '',
+ 'homepage' => $addon->get( 'permalink' ),
+ 'download_link' => '',
+ 'package' => ( $addon->is_licensed() || ! $addon->requires_license() ),
+ 'banners' => array(
+ 'low' => $addon->get( 'image' ),
+ ),
+ );
+
+ if ( $include_sections ) {
+
+ $item['sections'] = array(
+ 'description' => $addon->get( 'description' ),
+ 'changelog' => $this->get_changelog_for_api( $addon ),
+ );
+
+ }
+
+ return (object) $item;
+ }
+
+ /**
+ * Retrieve the changelog for an addon
+ *
+ * Attempts to retrieve changelog HTML from the make blog.
+ *
+ * If the add-on's changelog is empty or a static html file, returns an error
+ * with a link to the release notes category on the make blog.
+ *
+ * @since 3.0.0
+ * @since 3.1.0 Retrieve changelog from the make blog in favor of legacy static html changelogs.
+ * @since 3.2.0 Fix usage of incorrect textdomain.
+ *
+ * @param LLMS_Add_On $addon Add-on object.
+ * @return string
+ */
+ private function get_changelog_for_api( $addon ) {
+
+ $src = $addon->get( 'changelog' );
+ $split = array_filter( explode( '/', $src ) );
+ $tag = end( $split );
+
+ $logs = false;
+ if ( ! empty( $tag ) && false === strpos( $tag, '.html' ) ) {
+ $logs = $this->get_changelog_html( $tag, $src );
+ }
+
+ // Translators: %s = URL for the changelog website.
+ return $logs ? $logs : make_clickable( sprintf( __( 'There was an error retrieving the changelog. Try visiting %s for recent changelogs.', 'lifterlms' ), 'https://make.lifterlms.com/category/release-notes/' ) );
+ }
+
+ /**
+ * Retrieve changelog information from the make blog
+ *
+ * Retrieves the most recent 10 changelog entries for the add-on, formats the returned information
+ * into a format suitable to display within the thickbox, adds a link to the full changelog,
+ * and returns the html string.
+ *
+ * If an error is encountered, returns an empty string.
+ *
+ * @since 3.1.0
+ * @since 3.2.0 Fix usage of incorrect textdomain.
+ *
+ * @param string $tag Tag slug for the add-on on the blog.
+ * @param string $url Full URL to the changelog entries for the add-on.
+ * @return string
+ */
+ private function get_changelog_html( $tag, $url ) {
+
+ $ret = '';
+ $req = wp_remote_get( add_query_arg( 'slug', $tag, 'https://make.lifterlms.com/wp-json/wp/v2/tags' ) );
+ $body = json_decode( wp_remote_retrieve_body( $req ), true );
+
+ if ( ! empty( $body ) && ! empty( $body[0]['_links']['wp:post_type'][0]['href'] ) ) {
+
+ $logs_url = $body[0]['_links']['wp:post_type'][0]['href'];
+ $logs_req = wp_remote_get( $logs_url );
+ $logs = json_decode( wp_remote_retrieve_body( $logs_req ), true );
+
+ if ( ! empty( $logs ) && is_array( $logs ) ) {
+ foreach ( $logs as $log ) {
+ $ts = strtotime( $log['date_gmt'] );
+ $date = function_exists( 'wp_date' ) ? wp_date( 'Y-m-d', $ts ) : gmdate( 'Y-m-d', $ts );
+ $split = array_filter( explode( ' ', $log['title']['rendered'] ) );
+ $ver = end( $split );
+ // Translators: %1$s - Version number; %2$s - Release date.
+ $ret .= '
' . sprintf( __( 'Version %1$s - %2$s', 'lifterlms' ), sanitize_text_field( wp_strip_all_tags( trim( $ver ) ) ), $date ) . ' ';
+ $ret .= strip_tags( $log['content']['rendered'], '' );
+ }
+ }
+
+ $ret .= ' ';
+ // Translators: %s = URL to the full changelog.
+ $ret .= ' ' . make_clickable( sprintf( __( 'View the full changelog at %s.', 'lifterlms' ), $url ) ) . '
';
+
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Get a real package download url for a LifterLMS add-on
+ *
+ * This is called immediately prior to package upgrades.
+ *
+ * @since 3.0.0
+ * @since 3.0.2 Unknown.
+ * @since 3.2.1 Correctly process addons which do not require a license (e.g. free products).
+ *
+ * @param array $options Package option data.
+ * @return array
+ */
+ public function upgrader_package_options( $options ) {
+
+ if ( ! isset( $options['hook_extra'] ) ) {
+ return $options;
+ }
+
+ if ( isset( $options['hook_extra']['plugin'] ) ) {
+ $file = $options['hook_extra']['plugin'];
+ } elseif ( isset( $options['hook_extra']['theme'] ) ) {
+ $file = $options['hook_extra']['theme'];
+ } else {
+ return $options;
+ }
+
+ $addon = llms_get_add_on( $file, 'update_file' );
+ if ( ! $addon || ! $addon->is_installable() || ( $addon->requires_license() && ! $addon->is_licensed() ) ) {
+ return $options;
+ }
+
+ $info = $addon->get_download_info();
+ if ( is_wp_error( $info ) || ! isset( $info['data'] ) || ! isset( $info['data']['url'] ) ) {
+ return $options;
+ }
+
+ if ( true === $options['package'] ) {
+ $options['package'] = $info['data']['url'];
+ }
+
+ return $options;
+ }
+}
diff --git a/libraries/lifterlms-helper/includes/functions-llms-helper.php b/libraries/lifterlms-helper/includes/functions-llms-helper.php
new file mode 100644
index 0000000000..436625bafd
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/functions-llms-helper.php
@@ -0,0 +1,70 @@
+get_license_keys() as $key ) {
+ if ( 1 == $key['status'] ) {
+ $ids = array_merge( $ids, $key['addons'] );
+ }
+ if ( false === $installable_only ) {
+ $ids[] = $key['product_id'];
+ }
+ }
+
+ return array_unique( $ids );
+}
+
+/**
+ * Deletes transient data related to plugin and theme updates
+ *
+ * @since 3.2.1
+ *
+ * @return void
+ */
+function llms_helper_flush_cache() {
+
+ delete_transient( 'llms_products_api_result' );
+ delete_site_transient( 'update_plugins' );
+ delete_site_transient( 'update_themes' );
+}
diff --git a/libraries/lifterlms-helper/includes/model-llms-helper-add-on.php b/libraries/lifterlms-helper/includes/model-llms-helper-add-on.php
new file mode 100644
index 0000000000..b69203b4f9
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/model-llms-helper-add-on.php
@@ -0,0 +1,18 @@
+requires_license();
+
+ $id = $this->get( 'id' );
+ foreach ( llms_helper_options()->get_license_keys() as $data ) {
+ /**
+ * 1. If license is not required, return the first license found.
+ * 2. If the addon matches the licensed product
+ * 3. If the addon is included in the licensed bundle product.
+ */
+ if ( ! $requires_license || $id === $data['product_id'] || in_array( $id, $data['addons'], true ) ) {
+ return $data;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Retrieve the update channel for the addon
+ *
+ * @since 3.0.0
+ *
+ * @return string
+ */
+ public function get_channel_subscription() {
+ $channels = llms_helper_options()->get_channels();
+ return isset( $channels[ $this->get( 'id' ) ] ) ? $channels[ $this->get( 'id' ) ] : 'stable';
+ }
+
+ /**
+ * Retrieve download information for an add-on
+ *
+ * @since 3.0.0
+ * @since 3.2.1 Allow getting download info for add-ons which do not require licenses.
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @return WP_Error|array
+ */
+ public function get_download_info() {
+
+ $key = $this->find_license();
+
+ if ( $this->requires_license() && ! $key ) {
+ return new WP_Error( 'no_license', __( 'Unable to locate a license key for the selected add-on.', 'lifterlms' ) );
+ }
+
+ $args = array(
+ 'url' => get_site_url(),
+ 'add_on_slug' => $this->get( 'slug' ),
+ 'channel' => $this->get_channel_subscription(),
+ );
+
+ if ( $key ) {
+ $args['license_key'] = $key['license_key'];
+ $args['update_key'] = $key['update_key'];
+ }
+
+ $req = new LLMS_Dot_Com_API(
+ '/license/download',
+ $args
+ );
+
+ $data = $req->get_result();
+
+ if ( $req->is_error() ) {
+ return $data;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Translate strings
+ *
+ * @since 3.0.0
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @param string $string Untranslated string / key.
+ * @return string
+ */
+ public function get_l10n( $string ) {
+
+ $strings = array(
+
+ 'active' => __( 'Active', 'lifterlms' ),
+ 'inactive' => __( 'Inactive', 'lifterlms' ),
+
+ 'installed' => __( 'Installed', 'lifterlms' ),
+ 'uninstalled' => __( 'Not Installed', 'lifterlms' ),
+
+ 'activate' => __( 'Activate', 'lifterlms' ),
+ 'deactivate' => __( 'Deactivate', 'lifterlms' ),
+ 'install' => __( 'Install', 'lifterlms' ),
+
+ 'none' => __( 'N/A', 'lifterlms' ),
+
+ 'license_active' => __( 'Licensed', 'lifterlms' ),
+ 'license_inactive' => __( 'Unlicensed', 'lifterlms' ),
+
+ );
+
+ return $strings[ $string ];
+ }
+
+ /**
+ * Determine the status of an addon's license
+ *
+ * @since 3.0.0
+ * @since 3.2.1 Use `requires_license()` instead of checking `has_license` prop directly.
+ *
+ * @param bool $translate If true, returns the translated string for on-screen display.
+ * @return string
+ */
+ public function get_license_status( $translate = false ) {
+
+ if ( ! $this->requires_license() ) {
+ $ret = 'none';
+ } else {
+ $ret = $this->is_licensed() ? 'license_active' : 'license_inactive';
+ }
+
+ return $translate ? $this->get_l10n( $ret ) : $ret;
+ }
+
+ /**
+ * Install the add-on via LifterLMS.com
+ *
+ * @since 3.0.0
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @return string|WP_Error
+ */
+ public function install() {
+
+ $ret = LLMS_Helper()->upgrader()->install_addon( $this );
+
+ if ( true === $ret ) {
+
+ /* Translators: %s = Add-on name */
+ return sprintf( __( '%s was successfully installed.', 'lifterlms' ), $this->get( 'title' ) );
+
+ } elseif ( is_wp_error( $ret ) ) {
+
+ return $ret;
+
+ }
+
+ /* Translators: %s = Add-on name */
+ return new WP_Error( 'activation', sprintf( __( 'Could not install %s.', 'lifterlms' ), $this->get( 'title' ) ) );
+ }
+
+ /**
+ * Determines if the add-on is licensed
+ *
+ * @since 3.0.0
+ *
+ * @return bool
+ */
+ public function is_licensed() {
+ return ( false !== $this->find_license() );
+ }
+
+ /**
+ * Determines if the add-on requires a license
+ *
+ * @since 3.2.1
+ *
+ * @return bool
+ */
+ public function requires_license() {
+ return llms_parse_bool( $this->get( 'has_license' ) );
+ }
+
+ /**
+ * Update the addons update channel subscription
+ *
+ * @since 3.0.0
+ *
+ * @param string $channel Channel name [stable|beta].
+ * @return boolean
+ */
+ public function subscribe_to_channel( $channel = 'stable' ) {
+
+ $channels = llms_helper_options()->get_channels();
+ $channels[ $this->get( 'id' ) ] = $channel;
+ return llms_helper_options()->set_channels( $channels );
+ }
+
+ /**
+ * Install the add-on via LifterLMS.com
+ *
+ * @since 3.0.0
+ * @since 3.4.0 Use core textdomain.
+ *
+ * @return string|WP_Error
+ */
+ public function update() {
+
+ $ret = LLMS_Helper()->upgrader()->install_addon( $this, 'update' );
+
+ if ( true === $ret ) {
+
+ /* Translators: %s = Add-on name */
+ return sprintf( __( '%s was successfully updated.', 'lifterlms' ), $this->get( 'title' ) );
+
+ } elseif ( is_wp_error( $ret ) ) {
+
+ return $ret;
+
+ }
+
+ /* Translators: %s = Add-on name */
+ return new WP_Error( 'activation', sprintf( __( 'Could not update %s.', 'lifterlms' ), $this->get( 'title' ) ) );
+ }
+}
diff --git a/libraries/lifterlms-helper/includes/models/index.php b/libraries/lifterlms-helper/includes/models/index.php
new file mode 100644
index 0000000000..ff2b6071fd
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/models/index.php
@@ -0,0 +1 @@
+
+
+
+ for LifterLMS or any available add-ons will allow you to automatically update to the latest beta release for the given plugin or theme.', 'lifterlms' ); ?>
+
+
+
+
+
+
+
+
+ ', '
' );
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ get( 'title' ); ?>
+
+
+ get_channel_subscription() ); ?>>
+ get_channel_subscription() ); ?>>
+
+
+ get_installed_version(); ?>
+ get( 'version_beta' ) ? $addon->get( 'version_beta' ) : __( 'N/A', 'lifterlms' ); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+translations ) ) {
+ $value->translations = [];
+ }
+
+ $translations = get_translations( $type, $slug, $api_url );
+
+ if ( ! isset( $translations['translations'] ) ) {
+ return $value;
+ }
+
+ $installed_translations = get_installed_translations( $type );
+ $locales = get_available_locales();
+
+ /** This filter is documented in wp-includes/update.php */
+ $locales = apply_filters( $type . 's_update_check_locales', $locales );
+ $active_locales = array_unique( $locales );
+
+ foreach ( (array) $translations['translations'] as $translation ) {
+ if ( ! \in_array( $translation['language'], $active_locales, true ) ) {
+ continue;
+ }
+
+ if ( $translation['updated'] && isset( $installed_translations[ $slug ][ $translation['language'] ] ) ) {
+ $local = sanitize_date( $installed_translations[ $slug ][ $translation['language'] ]['PO-Revision-Date'] );
+ $remote = new DateTime( $translation['updated'] );
+
+ if ( $local >= $remote ) {
+ continue;
+ }
+ }
+
+ $translation['type'] = $type;
+ $translation['slug'] = $slug;
+
+ $value->translations[] = $translation;
+ }
+
+ return $value;
+ }
+ );
+}
+
+/**
+ * Registers actions for clearing translation caches.
+ *
+ * @since 1.1.0
+ */
+function register_clean_translations_cache() {
+ $clear_plugin_translations = static function() {
+ clean_translations_cache( 'plugin' );
+ };
+ $clear_theme_translations = static function() {
+ clean_translations_cache( 'theme' );
+ };
+
+ add_action( 'set_site_transient_update_plugins', $clear_plugin_translations );
+ add_action( 'delete_site_transient_update_plugins', $clear_plugin_translations );
+
+ add_action( 'set_site_transient_update_themes', $clear_theme_translations );
+ add_action( 'delete_site_transient_update_themes', $clear_theme_translations );
+}
+
+/**
+ * Clears existing translation cache for a given type.
+ *
+ * @since 1.1.0
+ *
+ * @param string $type Project type. Either plugin or theme.
+ */
+function clean_translations_cache( $type ) {
+ $transient_key = constant( __NAMESPACE__ . '\TRANSIENT_KEY_' . strtoupper( $type ) );
+ $translations = get_site_transient( $transient_key );
+
+ if ( ! \is_object( $translations ) ) {
+ return;
+ }
+
+ /*
+ * Don't delete the cache if the transient gets changed multiple times
+ * during a single request. Set cache lifetime to maximum 15 seconds.
+ */
+ $cache_lifespan = 15;
+ $time_not_changed = isset( $translations->_last_checked ) && ( time() - $translations->_last_checked ) > $cache_lifespan;
+
+ if ( ! $time_not_changed ) {
+ return;
+ }
+
+ delete_site_transient( $transient_key );
+}
+
+/**
+ * Gets the translations for a given project.
+ *
+ * @since 1.0.0
+ *
+ * @param string $type Project type. Either plugin or theme.
+ * @param string $slug Project directory slug.
+ * @param string $url Full GlotPress API URL for the project.
+ * @return array Translation data.
+ */
+function get_translations( $type, $slug, $url ) {
+ $transient_key = constant( __NAMESPACE__ . '\TRANSIENT_KEY_' . strtoupper( $type ) );
+ $translations = get_site_transient( $transient_key );
+
+ if ( ! \is_object( $translations ) ) {
+ $translations = new \stdClass();
+ }
+
+ if ( isset( $translations->{$slug} ) && \is_array( $translations->{$slug} ) ) {
+ return $translations->{$slug};
+ }
+
+ $result = json_decode( wp_remote_retrieve_body( wp_remote_get( $url, [ 'timeout' => 2 ] ) ), true );
+ if ( ! \is_array( $result ) ) {
+ // Cache an empty result in case of a failure
+ // and retry on next update check.
+ $result = [];
+ }
+
+ $translations->{$slug} = $result;
+ $translations->_last_checked = time();
+
+ set_site_transient( $transient_key, $translations );
+
+ return $result;
+}
+
+/**
+ * Sanitizes a date string.
+ *
+ * DateTime fails to parse date strings that contain brackets, such as
+ * “Tue Dec 22 2015 12:52:19 GMT+0100 (West-Europa)”, which appears in
+ * PO-Revision-Date headers. Sanitization ensures such date headers are
+ * parsed correctly into DateTime instances.
+ *
+ * @since 2.1.0
+ *
+ * @param string $date_string The date string to sanitize.
+ * @return \DateTime Date from string if parsable, otherwise the Unix epoch.
+ */
+function sanitize_date( $date_string ) {
+ $date_and_timezone = explode( '(', $date_string );
+ $date_no_timezone = trim( $date_and_timezone[0] );
+
+ try {
+ $date = new DateTime( $date_no_timezone );
+ } catch ( \Exception $e ) {
+ return new DateTime( '1970-01-01' );
+ }
+
+ return $date;
+}
+
+/**
+ * Gets the installed translations.
+ *
+ * Results are cached.
+ *
+ * @since 2.2.0
+ *
+ * @see wp_get_installed_translations()
+ *
+ * @param string $type Project type. Either plugin or theme.
+ * @return array Translation data.
+ */
+function get_installed_translations( $type ) {
+ static $cache = [];
+
+ if ( ! isset( $cache[ $type ] ) ) {
+ $cache[ $type ] = wp_get_installed_translations( $type . 's' );
+ }
+
+ return $cache[ $type ];
+}
+
+/**
+ * Gets all available and installed locales.
+ *
+ * Results are cached.
+ *
+ * @since 2.2.0
+ *
+ * @see get_available_languages()
+ *
+ * @return array List of installed locales.
+ */
+function get_available_locales() {
+ static $cache = null;
+
+ if ( ! isset( $cache ) ) {
+ $cache = array_values( get_available_languages() );
+ }
+
+ return $cache;
+}
diff --git a/libraries/lifterlms-rest/class-lifterlms-rest-api.php b/libraries/lifterlms-rest/class-lifterlms-rest-api.php
new file mode 100644
index 0000000000..6b6fddae72
--- /dev/null
+++ b/libraries/lifterlms-rest/class-lifterlms-rest-api.php
@@ -0,0 +1,297 @@
+version );
+ }
+
+ /**
+ * When loaded as a library included by the LifterLMS core localization is handled by the LifterLMS core.
+ *
+ * When the plugin is loaded by itself as a plugin, we must localize it independently.
+ */
+ if ( ! defined( 'LLMS_REST_API_LIB' ) || ! LLMS_REST_API_LIB ) {
+ add_action( 'init', array( $this, 'load_textdomain' ), 0 );
+ }
+
+ // Authentication needs to run early to handle basic auth.
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-authentication.php';
+
+ // Load everything else.
+ add_action( 'plugins_loaded', array( $this, 'init' ), 10 );
+
+ }
+
+ /**
+ * Include files and instantiate classes.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.4 Load authentication early.
+ *
+ * @return void
+ */
+ public function includes() {
+
+ // Abstracts.
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/abstracts/class-llms-rest-database-resource.php';
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/abstracts/class-llms-rest-webhook-data.php';
+
+ // Functions.
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/llms-rest-functions.php';
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/server/llms-rest-server-functions.php';
+
+ // Models.
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/models/class-llms-rest-api-key.php';
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/models/class-llms-rest-webhook.php';
+
+ // Classes.
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-api-keys.php';
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-api-keys-query.php';
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-capabilities.php';
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-install.php';
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-webhooks.php';
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/class-llms-rest-webhooks-query.php';
+
+ // Include admin classes.
+ if ( is_admin() ) {
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/admin/class-llms-rest-admin-settings.php';
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/admin/class-llms-rest-admin-form-controller.php';
+ }
+
+ add_action( 'rest_api_init', array( $this, 'rest_api_includes' ), 5 );
+ add_action( 'rest_api_init', array( $this, 'rest_api_controllers_init' ), 10 );
+
+ }
+
+ /**
+ * Retrieve an instance of the API Keys management singleton.
+ *
+ * @example $keys = LLMS_REST_API()->keys();
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return LLMS_REST_API_Keys
+ */
+ public function keys() {
+ return LLMS_REST_API_Keys::instance();
+ }
+
+ /**
+ * Include REST api specific files.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.9 Include memberships controller class file.
+ * @since 1.0.0-beta.18 Include access plans controller class file.
+ *
+ * @return void
+ */
+ public function rest_api_includes() {
+
+ $includes = array(
+
+ // Abstracts first.
+ 'abstracts/class-llms-rest-controller-stubs',
+ 'abstracts/class-llms-rest-controller',
+ 'abstracts/class-llms-rest-users-controller',
+ 'abstracts/class-llms-rest-posts-controller',
+
+ // Functions.
+ 'server/llms-rest-server-functions',
+
+ // Controllers.
+ 'server/class-llms-rest-api-keys-controller',
+ 'server/class-llms-rest-access-plans-controller',
+ 'server/class-llms-rest-courses-controller',
+ 'server/class-llms-rest-sections-controller',
+ 'server/class-llms-rest-lessons-controller',
+ 'server/class-llms-rest-memberships-controller',
+ 'server/class-llms-rest-enrollments-controller',
+ 'server/class-llms-rest-instructors-controller',
+ 'server/class-llms-rest-students-controller',
+ 'server/class-llms-rest-students-progress-controller',
+ 'server/class-llms-rest-webhooks-controller',
+
+ );
+
+ foreach ( $includes as $include ) {
+ include_once LLMS_REST_API_PLUGIN_DIR . 'includes/' . $include . '.php';
+ }
+ }
+
+ /**
+ * Instantiate REST api Controllers.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.9 Init memberships controller.
+ * @since 1.0.0-beta.18 Init access plans controller.
+ *
+ * @return void
+ */
+ public function rest_api_controllers_init() {
+
+ $controllers = array(
+ 'LLMS_REST_API_Keys_Controller',
+ 'LLMS_REST_Courses_Controller',
+ 'LLMS_REST_Sections_Controller',
+ 'LLMS_REST_Lessons_Controller',
+ 'LLMS_REST_Memberships_Controller',
+ 'LLMS_REST_Instructors_Controller',
+ 'LLMS_REST_Students_Controller',
+ 'LLMS_REST_Students_Progress_Controller',
+ 'LLMS_REST_Enrollments_Controller',
+ 'LLMS_REST_Webhooks_Controller',
+ 'LLMS_REST_Access_Plans_Controller',
+ );
+
+ foreach ( $controllers as $controller ) {
+ $controller_instance = new $controller();
+ $controller_instance->register_routes();
+ }
+
+ }
+
+ /**
+ * Include all required files and classes.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.6 Load webhooks actions at init 1 instead of init 10.
+ * @since 1.0.0-beta.8 Load webhooks actions a little bit later: at init 6 instead of init 10,
+ * just after all the db tables are created (init 5),
+ * to avoid PHP warnings on first plugin activation.
+ * @since 1.0.0-beta.22 Bump minimum required version to 6.0.0-alpha.1.
+ * Use `llms()` in favor of deprecated `LLMS()`.
+ * @since 1.0.0-beta.25 Perform some db clean-up on user deletion.
+ * Bump minimum required version to 6.5.0.
+ * @since 1.0.0-beta.26 Bump minimum required version to 7.0.2.
+ *
+ * @return void
+ */
+ public function init() {
+
+ // Only load if we have the minimum LifterLMS version installed & activated.
+ if ( ! function_exists( 'llms' ) || version_compare( '7.0.2', llms()->version, '>' ) ) {
+ return;
+ }
+
+ // Load includes.
+ $this->includes();
+
+ add_action( 'init', array( $this->webhooks(), 'load' ), 6 );
+ add_action( 'deleted_user', array( $this, 'on_user_deletion' ) );
+
+ }
+
+ /**
+ * When a user is deleted in WordPress, delete corresponding LifterLMS REST API data.
+ *
+ * @since 1.0.0-beta.25
+ *
+ * @param int $user_id The ID of the just deleted WP_User.
+ * @return void
+ */
+ public function on_user_deletion( $user_id ) {
+
+ global $wpdb;
+
+ // Delete user's API keys.
+ $wpdb->delete(
+ "{$wpdb->prefix}lifterlms_api_keys",
+ array(
+ 'user_id' => $user_id,
+ ),
+ array( '%d' )
+ );// db-cache ok.
+ }
+
+ /**
+ * Load l10n files.
+ *
+ * This method is only used when the plugin is loaded as a standalone plugin (for development purposes),
+ * otherwise (when loaded as a library from within the LifterLMS core plugin) the localization
+ * strings are included into the LifterLMS Core plugin's po/mo files and are localized by the LifterLMS
+ * core plugin.
+ *
+ * Files can be found in the following order (The first loaded file takes priority):
+ * 1. WP_LANG_DIR/lifterlms/lifterlms-rest-LOCALE.mo
+ * 2. WP_LANG_DIR/plugins/lifterlms-rest-LOCALE.mo
+ * 3. WP_CONTENT_DIR/plugins/lifterlms-rest/i18n/lifterlms-rest-LOCALE.mo
+ *
+ * Note: The function `load_plugin_textdomain()` is not used because the same textdomain as the LifterLMS core
+ * is used for this plugin but the file is named `lifterlms-rest` in order to allow using a separate language
+ * file for each codebase.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.17 Fixed the name of the MO loaded from the safe directory: `lifterlms-{$locale}.mo` to `lifterlms-rest-{$locale}.mo`.
+ * Fixed double slash typo in plugin textdomain path argument.
+ * Fixed issue causing language files to not load properly.
+ *
+ * @return void
+ */
+ public function load_textdomain() {
+
+ // Load locale.
+ $locale = apply_filters( 'plugin_locale', get_locale(), 'lifterlms' );
+
+ // Load from the LifterLMS "safe" directory if it exists.
+ load_textdomain( 'lifterlms', WP_LANG_DIR . '/lifterlms/lifterlms-rest-' . $locale . '.mo' );
+
+ // Load from the default plugins language file directory.
+ load_textdomain( 'lifterlms', WP_LANG_DIR . '/plugins/lifterlms-rest-' . $locale . '.mo' );
+
+ // Load from the plugin's language file directory.
+ load_textdomain( 'lifterlms', LLMS_REST_API_PLUGIN_DIR . '/i18n/lifterlms-rest-' . $locale . '.mo' );
+
+ }
+
+ /**
+ * Retrieve an instance of the webhooks management singleton.
+ *
+ * @example $webhooks = LLMS_REST_API()->webhooks();
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return LLMS_REST_Webhooks
+ */
+ public function webhooks() {
+ return LLMS_REST_Webhooks::instance();
+ }
+
+}
diff --git a/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php
new file mode 100644
index 0000000000..ec654c8379
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php
@@ -0,0 +1,266 @@
+get_object().
+ */
+ protected function create_object( $prepared, $request ) {
+
+ // @todo: add version to message.
+
+ // Translators: %s = method name.
+ _doing_it_wrong( 'LLMS_REST_Controller::create_object', esc_html( sprintf( __( "Method '%s' must be overridden.", 'lifterlms' ), __METHOD__ ) ), '1.0.0-beta.1' );
+
+ // For example.
+ return $this->get_object( $this->get_object_id( $prepared ) );
+ }
+
+ /**
+ * Retrieve an ID from the object
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param obj $object Item object.
+ * @return int
+ */
+ protected function get_object_id( $object ) {
+ if ( is_object( $object ) && ! empty( $object->id ) ) {
+ return $object->id;
+ } elseif ( is_array( $object ) && ! empty( $object['id'] ) ) {
+ return $object['id'];
+ } elseif ( method_exists( $object, 'get_id' ) ) {
+ return $object->get_id();
+ } elseif ( method_exists( $object, 'get' ) ) {
+ return $object->get( 'id' );
+ }
+
+ // @todo: add version to message.
+
+ // Translators: %s = method name.
+ _doing_it_wrong( 'LLMS_REST_Controller::get_object_id', esc_html( sprintf( __( "Method '%s' must be overridden.", 'lifterlms' ), __METHOD__ ) ), '1.0.0-beta.1' );
+
+ // For example.
+ return 0;
+ }
+
+ /**
+ * Retrieve a query object based on arguments from a `get_items()` (collection) request.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $prepared Array of collection arguments.
+ * @param WP_REST_Request $request Request object.
+ * @return object
+ */
+ protected function get_objects_query( $prepared, $request ) {
+
+ // Translators: %s = method name.
+ _doing_it_wrong( 'LLMS_REST_Controller::get_objects_query', esc_html( sprintf( __( "Method '%s' must be overridden.", 'lifterlms' ), __METHOD__ ) ), '1.0.0-beta.1' );
+
+ // For example.
+ return new WP_Query( $prepared );
+ }
+
+ /**
+ * Retrieve an array of objects from the result of $this->get_objects_query().
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param obj $query Objects query result.
+ * @return obj[]
+ */
+ protected function get_objects_from_query( $query ) {
+
+ // Translators: %s = method name.
+ _doing_it_wrong( 'LLMS_REST_Controller::get_objects_from_query', esc_html( sprintf( __( "Method '%s' must be overridden.", 'lifterlms' ), __METHOD__ ) ), '1.0.0-beta.1' );
+
+ // For example.
+ return array();
+ }
+
+ /**
+ * Retrieve pagination information from an objects query.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param obj $query Objects query result.
+ * @param array $prepared Array of collection arguments.
+ * @param WP_REST_Request $request Request object.
+ * @return array {
+ * Array of pagination information.
+ *
+ * @type int $current_page Current page number.
+ * @type int $total_results Total number of results.
+ * @type int $total_pages Total number of results pages.
+ * }
+ */
+ protected function get_pagination_data_from_query( $query, $prepared, $request ) {
+
+ // Translators: %s = method name.
+ _doing_it_wrong( 'LLMS_REST_Controller::get_pagination_data_from_query', esc_html( sprintf( __( "Method '%s' must be overridden.", 'lifterlms' ), __METHOD__ ) ), '1.0.0-beta.1' );
+
+ // For example.
+ return array(
+ 'current_page' => 1,
+ 'total_results' => 1,
+ 'total_pages' => 1,
+ );
+ }
+
+ /**
+ * Prepares data of a single object for response.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param obj $object Raw object from database.
+ * @param WP_REST_Request $request Request object.
+ * @return array
+ */
+ protected function prepare_object_data_for_response( $object, $request ) {
+
+ $data = $this->prepare_object_for_response( $object, $request );
+ $response_fields = $this->get_fields_for_response( $request );
+ // Include meta data registered via `register_meta()`.
+ if ( rest_is_field_included( 'meta', $response_fields ) ) {
+ $data['meta'] = $this->meta->get_value( $this->get_object_id( $object ), $request );
+ // Exclude disallowed meta.
+ $data['meta'] = $this->exclude_disallowed_meta_fields( $data['meta'] );
+ }
+
+ // Include custom REST fields registered via `register_rest_field()`.
+ $data = $this->add_additional_fields_to_object( $data, $request );
+
+ $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
+ $data = $this->filter_response_by_context( $data, $context );
+
+ return $data;
+ }
+
+ /**
+ * Prepare an object for response.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.3 Conditionally throw `_doing_it_wrong()`.
+ * @since 1.0.0-beta.27 Exclude additional fields added via `register_rest_field`.
+ *
+ * @param object $object Raw object from database.
+ * @param WP_REST_Request $request Request object.
+ * @return array
+ */
+ protected function prepare_object_for_response( $object, $request ) {
+
+ if ( ! method_exists( $object, 'get' ) ) {
+ // Translators: %s = method name.
+ _doing_it_wrong( 'LLMS_REST_Controller::prepare_object_for_response', esc_html( sprintf( __( "Method '%s' must be overridden.", 'lifterlms' ), __METHOD__ ) ), '1.0.0-beta.1' );
+ }
+
+ $prepared = array();
+ $map = array_flip( $this->map_schema_to_database() );
+ $fields = $this->get_fields_for_response( $request );
+ $additional_fields = array_keys( $this->get_additional_fields() );
+
+ foreach ( $map as $db_key => $schema_key ) {
+ if ( in_array( $schema_key, $fields, true ) && ! in_array( $schema_key, $additional_fields, true ) ) {
+ $prepared[ $schema_key ] = $object->get( $db_key );
+ }
+ }
+
+ return $prepared;
+ }
+
+ /**
+ * Update the object in the database with prepared data.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $prepared Prepared item data.
+ * @param WP_REST_Request $request Request object.
+ * @return obj Object Instance of object from $this->get_object().
+ */
+ protected function update_object( $prepared, $request ) {
+
+ // @todo: add version to message.
+
+ // Translators: %s = method name.
+ _doing_it_wrong( 'LLMS_REST_Controller::update_object', esc_html( sprintf( __( "Method '%s' must be overridden.", 'lifterlms' ), __METHOD__ ) ), '1.0.0-beta.1' );
+
+ // For example.
+ return $this->get_object( $prepared['id'] );
+ }
+}
diff --git a/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php
new file mode 100644
index 0000000000..bbcbaf3bb1
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php
@@ -0,0 +1,1051 @@
+get_item_schema();
+
+ $item = $this->prepare_item_for_database( $request );
+ // Exclude additional fields registered via `register_rest_field()`.
+ $item = array_diff_key( $item, $this->get_additional_fields() );
+ $object = $this->create_object( $item, $request );
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $this->object_inserted( $object, $request, $schema, true );
+
+ // Registered via `register_meta()`.
+ $meta_update = $this->update_meta( $object, $request, $schema );
+ if ( is_wp_error( $meta_update ) ) {
+ return $meta_update;
+ }
+
+ // Registered via `register_rest_field()`.
+ $fields_update = $this->update_additional_fields_for_object( $object, $request );
+ if ( is_wp_error( $fields_update ) ) {
+ return $fields_update;
+ }
+
+ $this->object_completely_inserted( $object, $request, $schema, true );
+
+ $request->set_param( 'context', 'edit' );
+
+ $response = $this->prepare_item_for_response( $object, $request );
+
+ $response->set_status( 201 );
+ $response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $this->get_object_id( $object ) ) ) );
+
+ return $response;
+ }
+
+ /**
+ * Called right after a resource is inserted (created/updated).
+ *
+ * @since 1.0.0-beta.12
+ *
+ * @param object $object Inserted or updated object.
+ * @param WP_REST_Request $request Request object.
+ * @param array $schema The item schema.
+ * @param bool $creating True when creating a post, false when updating.
+ */
+ protected function object_inserted( $object, $request, $schema, $creating ) {
+
+ $type = $this->get_object_type();
+ /**
+ * Fires after a single llms resource is created or updated via the REST API.
+ *
+ * The dynamic portion of the hook name, `$type`, refers to the object type this controller is responsible for managing.
+ *
+ * @since 1.0.0-beta.12
+ *
+ * @param object $object Inserted or updated object.
+ * @param WP_REST_Request $request Request object.
+ * @param array $schema The item schema.
+ * @param bool $creating True when creating a post, false when updating.
+ */
+ do_action( "llms_rest_insert_{$type}", $object, $request, $schema, $creating );
+ }
+
+ /**
+ * Called right after a resource is completely inserted (created/updated).
+ *
+ * @since 1.0.0-beta.12
+ *
+ * @param LLMS_Post $object Inserted or updated object.
+ * @param WP_REST_Request $request Request object.
+ * @param array $schema The item schema.
+ * @param bool $creating True when creating a post, false when updating.
+ */
+ protected function object_completely_inserted( $object, $request, $schema, $creating ) {
+
+ $type = $this->get_object_type();
+ /**
+ * Fires after a single llms resource is completely created or updated via the REST API.
+ *
+ * The dynamic portion of the hook name, `$type`, refers to the object type this controller is responsible for managing.
+ *
+ * @since 1.0.0-beta.12
+ *
+ * @param object $object Inserted or updated object.
+ * @param WP_REST_Request $request Request object.
+ * @param array $schema The item schema.
+ * @param bool $creating True when creating a post, false when updating.
+ */
+ do_action( "llms_rest_after_insert_{$type}", $object, $request, $schema, $creating );
+ }
+
+ /**
+ * Delete the item.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_REST_Request $request Request object.
+ * @return WP_REST_Response|WP_Error
+ */
+ public function delete_item( $request ) {
+
+ $object = $this->get_object( $request['id'], false );
+
+ // We don't return 404s for items that are not found.
+ if ( ! is_wp_error( $object ) ) {
+
+ // If there was an error deleting the object return the error. If the error is that the object doesn't exist return 204 below!
+ $del = $this->delete_object( $object, $request );
+ if ( is_wp_error( $del ) ) {
+ return $del;
+ }
+ }
+
+ $response = rest_ensure_response( null );
+ $response->set_status( 204 );
+
+ return $response;
+ }
+
+ /**
+ * Retrieves the query params for the objects collection.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.12 Added `search_columns` collection param for searchable resources.
+ *
+ * @return array Collection parameters.
+ */
+ public function get_collection_params() {
+
+ $query_params = parent::get_collection_params();
+
+ $query_params['context']['default'] = 'view';
+
+ // We're not currently implementing searching for all of our controllers.
+ if ( empty( $this->is_searchable ) ) {
+ unset( $query_params['search'] );
+ } elseif ( ! empty( $this->search_columns_mapping ) ) {
+
+ $search_columns = array_keys( $this->search_columns_mapping );
+
+ $query_params['search_columns'] = array(
+ 'description' => __( 'Column names to be searched. Accepts a single column or a comma separated list of columns.', 'lifterlms' ),
+ 'type' => 'array',
+ 'items' => array(
+ 'type' => 'string',
+ 'enum' => $search_columns,
+ ),
+ 'default' => $search_columns,
+ );
+ }
+
+ // page and per_page params are already specified in WP_Rest_Controller->get_collection_params().
+ $query_params['order'] = array(
+ 'description' => __( 'Order sort attribute ascending or descending.', 'lifterlms' ),
+ 'type' => 'string',
+ 'default' => 'asc',
+ 'enum' => array( 'asc', 'desc' ),
+ 'validate_callback' => 'rest_validate_request_arg',
+ );
+
+ $query_params['orderby'] = array(
+ 'description' => __( 'Sort collection by object attribute.', 'lifterlms' ),
+ 'type' => 'string',
+ 'default' => $this->orderby_properties[0],
+ 'enum' => $this->orderby_properties,
+ 'validate_callback' => 'rest_validate_request_arg',
+ );
+
+ $query_params['include'] = array(
+ 'description' => __( 'Limit results to a list of ids. Accepts a single id or a comma separated list of ids.', 'lifterlms' ),
+ 'type' => 'array',
+ 'items' => array(
+ 'type' => 'integer',
+ ),
+ 'validate_callback' => 'rest_validate_request_arg',
+ );
+
+ $query_params['exclude'] = array(
+ 'description' => __( 'Exclude a list of ids from results. Accepts a single id or a comma separated list of ids.', 'lifterlms' ),
+ 'type' => 'array',
+ 'items' => array(
+ 'type' => 'integer',
+ ),
+ 'validate_callback' => 'rest_validate_request_arg',
+ );
+
+ return $query_params;
+ }
+
+ /**
+ * Get a single item.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.27 Don't call `rest_ensure_response()` twice, already called in `$this->prepare_item_for_response()`.
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_Error|WP_REST_Response
+ */
+ public function get_item( $request ) {
+
+ $object = $this->get_object( (int) $request['id'] );
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $response = $this->prepare_item_for_response( $object, $request );
+
+ return $response;
+ }
+
+ /**
+ * Retrieves all items.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.3 Fix an issue displaying a last page for lists with 0 possible results.
+ * @since 1.0.0-beta.7 Broken into several methods so to improve abstraction.
+ * @since 1.0.0-beta.12 Return early if `prepare_collection_query_args()` is a `WP_Error`.
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
+ */
+ public function get_items( $request ) {
+
+ $prepared = $this->prepare_collection_query_args( $request );
+ if ( is_wp_error( $prepared ) ) {
+ return $prepared;
+ }
+
+ $query = $this->get_objects_query( $prepared, $request );
+ $pagination = $this->get_pagination_data_from_query( $query, $prepared, $request );
+
+ // Out-of-bounds, run the query again on page one to get a proper total count.
+ if ( $pagination['total_results'] < 1 ) {
+
+ $prepared_for_total_count = $this->prepare_args_for_total_count_query( $prepared, $request );
+ $count_query = $this->get_objects_query( $prepared_for_total_count, $request );
+ $count_results = $this->get_pagination_data_from_query( $count_query, $prepared_for_total_count, $request );
+
+ $pagination['total_results'] = $count_results['total_results'];
+ }
+
+ if ( $pagination['current_page'] > $pagination['total_pages'] && $pagination['total_results'] > 0 ) {
+ return llms_rest_bad_request_error( __( 'The page number requested is larger than the number of pages available.', 'lifterlms' ) );
+ }
+
+ $objects = $this->get_objects_from_query( $query );
+ $items = $this->prepare_collection_items_for_response( $objects, $request );
+
+ $response = rest_ensure_response( $items );
+ $response = $this->add_header_pagination( $response, $pagination, $request );
+
+ return $response;
+ }
+
+ /**
+ * Format query arguments to retrieve a collection of objects.
+ *
+ * @since 1.0.0-beta.7
+ * @since 1.0.0-beta.12 Prepare args for search and call collection params to query args map method.
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array|WP_Error
+ */
+ protected function prepare_collection_query_args( $request ) {
+
+ // Prepare all set args.
+ $registered = $this->get_collection_params();
+ $prepared = array();
+
+ foreach ( $registered as $key => $value ) {
+ if ( isset( $request[ $key ] ) ) {
+ $prepared[ $key ] = $request[ $key ];
+ }
+ }
+
+ $prepared = $this->prepare_collection_query_search_args( $prepared, $request );
+ if ( is_wp_error( $prepared ) ) {
+ return $prepared;
+ }
+
+ $prepared = $this->map_params_to_query_args( $prepared, $registered, $request );
+
+ return $prepared;
+ }
+
+ /**
+ * Map schema to query arguments to retrieve a collection of objects.
+ *
+ * @since 1.0.0-beta.12
+ *
+ * @param array $prepared Array of collection arguments.
+ * @param array $registered Registered collection params.
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array|WP_Error
+ */
+ protected function map_params_to_query_args( $prepared, $registered, $request ) {
+ return $prepared;
+ }
+
+ /**
+ * Format search query arguments to retrieve a collection of objects.
+ *
+ * @since 1.0.0-beta.12
+ * @since 1.0.0-beta.21 Return an error if requesting a list ordered by 'relevance' without providing a search string.
+ *
+ * @param array $prepared Array of collection arguments.
+ * @param WP_REST_Request $request Request object.
+ * @return array|WP_Error
+ */
+ protected function prepare_collection_query_search_args( $prepared, $request ) {
+
+ // Search?
+ if ( ! empty( $prepared['search'] ) ) {
+
+ if ( ! empty( $this->search_columns_mapping ) ) {
+
+ if ( empty( $prepared['search_columns'] ) ) {
+ return llms_rest_bad_request_error( __( 'You must provide a valid set of columns to search into.', 'lifterlms' ) );
+ }
+
+ // Filter search columns by context.
+ $search_columns = array_keys( $this->filter_response_by_context( array_flip( $prepared['search_columns'] ), $request['context'] ) );
+
+ // Check if one of more unallowed search columns have been provided as request query params (not merged with defaults).
+ if ( ! empty( $request->get_query_params()['search_columns'] ) ) {
+
+ $forbidden_columns = array_diff( $prepared['search_columns'], $search_columns );
+
+ if ( ! empty( $forbidden_columns ) ) {
+ return llms_rest_authorization_required_error(
+ sprintf(
+ // Translators: %1$s comma separated list of search columns.
+ __( 'You are not allowed to search into the provided column(s): %1$s', 'lifterlms' ),
+ implode( ',', $forbidden_columns )
+ )
+ );
+ }
+ }
+
+ $prepared['search_columns'] = array();
+
+ // Map our search columns into query compatible ones.
+ foreach ( $search_columns as $search_column ) {
+ if ( isset( $this->search_columns_mapping[ $search_column ] ) ) {
+ $prepared['search_columns'][] = $this->search_columns_mapping[ $search_column ];
+ }
+ }
+
+ if ( empty( $prepared['search_columns'] ) ) {
+ return llms_rest_bad_request_error( __( 'You must provide a valid set of columns to search into.', 'lifterlms' ) );
+ }
+ }
+
+ $prepared['search'] = '*' . $prepared['search'] . '*';
+
+ } else {
+
+ // Ensure a search string is set in case the orderby is set to 'relevance'.
+ if ( ! empty( $request['orderby'] ) && 'relevance' === $request['orderby'] ) {
+ return llms_rest_bad_request_error(
+ __( 'You need to define a search term to order by relevance.', 'lifterlms' )
+ );
+ }
+ }
+
+ return $prepared;
+ }
+
+ /**
+ * Prepare query args for total count query.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param array $args Array of query args.
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array
+ */
+ protected function prepare_args_for_total_count_query( $args, $request ) {
+ // Run the query again without pagination to get a proper total count.
+ unset( $args['paged'], $args['page'] );
+ return $args;
+ }
+
+ /**
+ * Prepare collection items for response.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param array $objects Array of objects to be prepared for response.
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array
+ */
+ protected function prepare_collection_items_for_response( $objects, $request ) {
+
+ $items = array();
+
+ foreach ( $objects as $object ) {
+ $object = $this->get_object( $object, false );
+
+ if ( ! $this->check_read_object_permissions( $object ) ) {
+ continue;
+ }
+
+ $item = $this->prepare_item_for_response( $object, $request );
+ if ( ! is_wp_error( $item ) ) {
+ $items[] = $this->prepare_response_for_collection( $item );
+ }
+ }
+
+ return $items;
+ }
+
+ /**
+ * Add pagination info and links to the response header.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param WP_REST_Response $response Current response being served.
+ * @param array $pagination Pagination array.
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_REST_Response
+ */
+ protected function add_header_pagination( $response, $pagination, $request ) {
+
+ $response->header( 'X-WP-Total', $pagination['total_results'] );
+ $response->header( 'X-WP-TotalPages', $pagination['total_pages'] );
+
+ $base = add_query_arg( urlencode_deep( $request->get_query_params() ), rest_url( $request->get_route() ) );
+
+ // First page link.
+ if ( 1 !== $pagination['current_page'] ) {
+ $first_link = add_query_arg( 'page', 1, $base );
+ $response->link_header( 'first', $first_link );
+ }
+
+ // Previous page link.
+ if ( $pagination['current_page'] > 1 ) {
+ $prev_page = $pagination['current_page'] - 1;
+ if ( $prev_page > $pagination['total_pages'] ) {
+ $prev_page = $pagination['total_pages'];
+ }
+ $prev_link = add_query_arg( 'page', $prev_page, $base );
+ $response->link_header( 'prev', $prev_link );
+ }
+
+ // Next page link.
+ if ( $pagination['total_pages'] > $pagination['current_page'] ) {
+ $next_link = add_query_arg( 'page', $pagination['current_page'] + 1, $base );
+ $response->link_header( 'next', $next_link );
+ }
+
+ // Last page link.
+ if ( $pagination['total_pages'] && $pagination['total_pages'] !== $pagination['current_page'] ) {
+ $last_link = add_query_arg( 'page', $pagination['total_pages'], $base );
+ $response->link_header( 'last', $last_link );
+ }
+
+ return $response;
+ }
+
+ /**
+ * Retrieves the query params for retrieving a single resource.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array
+ */
+ public function get_get_item_params() {
+
+ return array(
+ 'context' => $this->get_context_param(
+ array(
+ 'default' => 'view',
+ )
+ ),
+ );
+ }
+
+ /**
+ * Retrieve arguments for deleting a resource.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array
+ */
+ public function get_delete_item_args() {
+ return array();
+ }
+
+ /**
+ * Map request keys to database keys for insertion.
+ *
+ * Array keys are the request fields (as defined in the schema) and
+ * array values are the database fields.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array
+ */
+ protected function map_schema_to_database() {
+
+ $schema = $this->get_item_schema();
+ $keys = array_keys( $schema['properties'] );
+ return array_combine( $keys, $keys );
+ }
+
+ /**
+ * Get the LLMS REST resource schema, conforming to JSON Schema.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @return array
+ */
+ public function get_item_schema() {
+
+ if ( isset( $this->schema ) ) {
+ // Additional fields are not cached in the schema, @see https://core.trac.wordpress.org/ticket/47871#comment:5.
+ return $this->add_additional_fields_schema( $this->schema );
+ }
+
+ $schema = $this->get_item_schema_base();
+
+ // Add custom fields registered via `register_meta()`.
+ $schema = $this->add_meta_fields_schema( $schema );
+
+ // Allow the schema to be filtered.
+ $schema = $this->filter_item_schema( $schema );
+
+ /**
+ * Set `$this->schema` here so that we can exclude additional fields
+ * already covered by the base, filtered, schema.
+ *
+ * Additional fields are added through the call to add_additional_fields_schema() below,
+ * which will call {@see LLMS_REST_Controller::get_additional_fields()}, which requires
+ * `$this->schema` to be set.
+ */
+ $this->schema = $schema;
+
+ /**
+ * Adds the schema from additional fields (registered via `register_rest_field()`) to the schema array.
+ * Note: WordPress core doesn't cache the additional fields in the schema, see https://core.trac.wordpress.org/ticket/47871#comment:5
+ */
+ return $this->add_additional_fields_schema( $this->schema );
+ }
+
+ /**
+ * Add custom fields registered via `register_meta()`.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param array $schema The resource item schema.
+ * @return array
+ */
+ protected function add_meta_fields_schema( $schema ) {
+
+ if ( ! empty( $this->meta ) ) {
+ $schema['properties']['meta'] = $this->meta->get_field_schema();
+ $schema['properties']['meta']['properties'] = $this->exclude_disallowed_meta_fields(
+ $schema['properties']['meta']['properties'],
+ $schema
+ );
+ }
+
+ return $schema;
+ }
+
+ /**
+ * Retrieves all of the registered additional fields for a given object-type.
+ *
+ * Overrides wp core `get_additional_fields()` to allow excluding fields.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param string $object_type The object type.
+ * @return array Registered additional fields (if any), empty array if none or if the object type could
+ * not be inferred.
+ */
+ protected function get_additional_fields( $object_type = null ) {
+
+ // We require the `$this->schema['properties']` to be set in order to exclude additional fields already covered by our schema definition.
+ if ( ! isset( $this->schema['properties'] ) ) {
+ return parent::get_additional_fields( $object_type );
+ }
+
+ $additional_fields = parent::get_additional_fields( $object_type );
+ if ( ! empty( $additional_fields ) ) {
+ /**
+ * Filters the disallowed additional fields.
+ *
+ * The dynamic portion of the hook name, `$object_type`, refers the object type this controller is responsible for managing.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param string[] $disallowed_additional_fields Additional rest field names to skip (added via `register_rest_field()`).
+ */
+ $disallowed_fields = apply_filters( "llms_rest_{$object_type}_disallowed_additional_fields", $this->disallowed_additional_fields );
+
+ /**
+ * Exclude:
+ * - disallowed fields defined in the instance's property `disallowed_additional_fields`.
+ * - additional fields already covered in the schema.
+ *
+ * This is meant to run only once, because otherwise we have no way
+ * to determine whether the property comes from the original schema
+ * definition, or has been added via `register_rest_field()`.
+ */
+ $additional_fields = array_diff_key(
+ $additional_fields,
+ array_flip( array_keys( $this->schema['properties'] ) ),
+ array_flip( $disallowed_fields )
+ );
+
+ }
+
+ return $additional_fields;
+ }
+
+ /**
+ * Exclude disallowed meta fields.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param array $meta Array of meta fields.
+ * @param array $schema The resource item schema. Falls back on the defined schema if not supplied.
+ * @return array
+ */
+ protected function exclude_disallowed_meta_fields( $meta, $schema = array() ) {
+
+ $schema = empty( $schema ) ? $this->schema : $schema;
+
+ if ( empty( $schema ) || empty( $meta ) ) {
+ return $meta;
+ }
+
+ $object_type = $this->get_object_type( $schema );
+
+ /**
+ * Filters the disallowed meta fields.
+ *
+ * The dynamic portion of the hook name, `$object_type`, refers the object type this controller is responsible for managing.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param string[] $disallowed_meta_fields Meta field names to skip (added via `register_meta()`).
+ */
+ $disallowed_meta_fields = apply_filters( "llms_rest_{$object_type}_disallowed_meta_fields", $this->disallowed_meta_fields );
+
+ $meta = array_diff_key(
+ $meta,
+ array_flip( $disallowed_meta_fields )
+ );
+
+ return $meta;
+ }
+
+ /**
+ * Get the LLMS REST resource schema base properties, conforming to JSON Schema.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @return array
+ */
+ protected function get_item_schema_base() {
+ return array();
+ }
+
+ /**
+ * Filter the item schema.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param array $schema The resource item schema.
+ * @return array
+ */
+ protected function filter_item_schema( $schema ) {
+
+ $object_type = $this->get_object_type( $schema );
+ $unfiltered_schema = $schema;
+
+ /**
+ * Filters the item schema.
+ *
+ * The dynamic portion of the hook name, `$object_type`, refers the object type this controller is responsible for managing.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param array $schema The item schema.
+ */
+ $schema = apply_filters( "llms_rest_{$object_type}_item_schema", $schema );
+
+ /**
+ * Filters whether to allow filtering the item schema to add fields.
+ *
+ * The dynamic portion of the hook name, `$object_type`, refers the object type this controller is responsible for managing.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param bool $allow Whether to allow filtering the item schema to add fields.
+ * @param array $schema The item schema.
+ */
+ if ( ! apply_filters( "llms_rest_allow_filtering_{$object_type}_item_schema_to_add_fields", false, $schema ) ) {
+ // Emit a _doing_it_wrong warning if user tries to add new properties using this filter.
+ $new_fields = array_diff_key( $schema['properties'], $unfiltered_schema['properties'] );
+ if ( count( $new_fields ) > 0 ) {
+ _doing_it_wrong(
+ esc_html( "llms_rest_{$object_type}_item_schema" ),
+ esc_html(
+ sprintf(
+ /* translators: %s: register_rest_field */
+ __( 'Please use %s to add new schema properties.', 'lifterlms' ),
+ 'register_rest_field()'
+ )
+ ),
+ '[version]'
+ );
+ }
+ }
+
+ return $schema;
+ }
+
+ /**
+ * Retrieves the resource object-type this controller is responsible for managing.
+ *
+ * Overrides wp core `get_object_type()` to allow passing an item schema to retrieve the type from.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param null|array $schema Optional. The item schema. Default `null`.
+ * @return string
+ */
+ protected function get_object_type( $schema = null ) {
+
+ if ( empty( $schema ) ) {
+ return parent::get_object_type();
+ }
+
+ return $schema['title'];
+ }
+
+ /**
+ * Prepare request arguments for a database insert/update.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_Rest_Request $request Request object.
+ * @return array
+ */
+ protected function prepare_item_for_database( $request ) {
+
+ $prepared = array();
+ $map = $this->map_schema_to_database();
+ $schema = $this->get_item_schema();
+
+ foreach ( $map as $req_key => $db_key ) {
+ if ( ! empty( $request[ $req_key ] ) ) {
+ $prepared[ $db_key ] = $request[ $req_key ];
+ }
+ }
+
+ return $prepared;
+ }
+
+ /**
+ * Prepares a single object for response.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.3 Return early with a WP_Error if `$object` is a WP_Error.
+ * @since 1.0.0-beta.14 Pass the `$request` parameter to `prepare_links()`.
+ * @since 1.0.0-beta.27 Move big part of the logic to the new method `LLMS_REST_Controller_Stubs::prepare_object_data_for_response()`.
+ *
+ * @param obj $object Raw object from database.
+ * @param WP_REST_Request $request Request object.
+ * @return WP_Error|WP_REST_Response
+ */
+ public function prepare_item_for_response( $object, $request ) {
+
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $data = $this->prepare_object_data_for_response( $object, $request );
+
+ // Wrap the data in a response object.
+ $response = rest_ensure_response( $data );
+
+ // Add links.
+ $response->add_links( $this->prepare_links( $object, $request ) );
+
+ return $response;
+ }
+
+ /**
+ * Prepare links for the request.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.14 Added $request parameter.
+ *
+ * @param obj $object Item object.
+ * @param WP_REST_Request $request Request object.
+ * @return array
+ */
+ protected function prepare_links( $object, $request ) {
+
+ $base = rest_url( sprintf( '/%1$s/%2$s', $this->namespace, $this->rest_base ) );
+
+ $links = array(
+ 'self' => array(
+ 'href' => sprintf( '%1$s/%2$d', $base, $this->get_object_id( $object ) ),
+ ),
+ 'collection' => array(
+ 'href' => $base,
+ ),
+ );
+
+ return $links;
+ }
+
+ /**
+ * Register routes.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return void
+ */
+ public function register_routes() {
+
+ register_rest_route(
+ $this->namespace,
+ '/' . $this->rest_base,
+ array(
+ array(
+ 'methods' => WP_REST_Server::READABLE,
+ 'callback' => array( $this, 'get_items' ),
+ 'permission_callback' => array( $this, 'get_items_permissions_check' ),
+ 'args' => $this->get_collection_params(),
+ ),
+ array(
+ 'methods' => WP_REST_Server::CREATABLE,
+ 'callback' => array( $this, 'create_item' ),
+ 'permission_callback' => array( $this, 'create_item_permissions_check' ),
+ 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
+ ),
+ 'schema' => array( $this, 'get_public_item_schema' ),
+ )
+ );
+
+ register_rest_route(
+ $this->namespace,
+ '/' . $this->rest_base . '/(?P[\d]+)',
+ array(
+ 'args' => array(
+ 'id' => array(
+ 'description' => __( 'Unique identifier for the resource.', 'lifterlms' ),
+ 'type' => 'integer',
+ ),
+ ),
+ array(
+ 'methods' => WP_REST_Server::READABLE,
+ 'callback' => array( $this, 'get_item' ),
+ 'permission_callback' => array( $this, 'get_item_permissions_check' ),
+ 'args' => $this->get_get_item_params(),
+ ),
+ array(
+ 'methods' => WP_REST_Server::EDITABLE,
+ 'callback' => array( $this, 'update_item' ),
+ 'permission_callback' => array( $this, 'update_item_permissions_check' ),
+ 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), // see class-wp-rest-controller.php.
+ ),
+ array(
+ 'methods' => WP_REST_Server::DELETABLE,
+ 'callback' => array( $this, 'delete_item' ),
+ 'permission_callback' => array( $this, 'delete_item_permissions_check' ),
+ 'args' => $this->get_delete_item_args(),
+ ),
+ 'schema' => array( $this, 'get_public_item_schema' ),
+ )
+ );
+ }
+
+ /**
+ * Update item.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.12 Call `object_inserted` and `object_completely_inserted` after an object is
+ * respectively inserted in the DB and all its additional fields have been
+ * updated as well (completely inserted).
+ * @since 1.0.0-beta.27 Handle custom meta registered via `register_meta()` and custom rest fields registered via `register_rest_field()`.
+ *
+ * @param WP_REST_Request $request Request object.
+ * @return WP_REST_Response|WP_Error Response object or WP_Error on failure.
+ */
+ public function update_item( $request ) {
+
+ $object = $this->get_object( $request['id'] );
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $schema = $this->get_item_schema();
+ $item = $this->prepare_item_for_database( $request );
+ // Exclude additional fields registered via `register_rest_field()`.
+ $item = array_diff_key( $item, $this->get_additional_fields() );
+ $object = $this->update_object( $item, $request );
+
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $this->object_inserted( $object, $request, $schema, false );
+
+ // Registered via `register_meta()`.
+ $meta_update = $this->update_meta( $object, $request, $schema );
+ if ( is_wp_error( $meta_update ) ) {
+ return $meta_update;
+ }
+
+ // Registered via `register_rest_field()`.
+ $fields_update = $this->update_additional_fields_for_object( $object, $request );
+ if ( is_wp_error( $fields_update ) ) {
+ return $fields_update;
+ }
+
+ $this->object_completely_inserted( $object, $request, $schema, false );
+
+ $request->set_param( 'context', 'edit' );
+
+ $response = $this->prepare_item_for_response( $object, $request );
+
+ return $response;
+ }
+
+ /**
+ * Update meta.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param object $object Inserted or updated object.
+ * @param WP_REST_Request $request Request object.
+ * @param array $schema The item schema.
+ * @return void|WP_Error
+ */
+ protected function update_meta( $object, $request, $schema ) {
+
+ if ( empty( $schema['properties']['meta'] ) || empty( $request['meta'] ) ) {
+ return;
+ }
+
+ $request['meta'] = $this->exclude_disallowed_meta_fields( $request['meta'] );
+
+ if ( empty( $request['meta'] ) ) {
+ return;
+ }
+
+ $meta_update = $this->meta->update_value( $request['meta'], $this->get_object_id( $object ) );
+
+ if ( is_wp_error( $meta_update ) ) {
+ return $meta_update;
+ }
+ }
+}
diff --git a/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-database-resource.php b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-database-resource.php
new file mode 100644
index 0000000000..f16dec60f4
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-database-resource.php
@@ -0,0 +1,273 @@
+create_prepare( $data );
+ if ( is_wp_error( $data ) ) {
+ return $data;
+ }
+
+ return $this->save( new $this->model(), $data );
+
+ }
+
+ /**
+ * Prepare data for creation.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $data Array of data.
+ * @return array
+ */
+ public function create_prepare( $data ) {
+
+ if ( ! empty( $data['id'] ) ) {
+ // Translators: %s = name of the resource type (for example: "API Key").
+ return new WP_Error( 'llms_rest_' . $this->id . '_exists', sprintf( __( 'Cannot create a new %s with a pre-defined ID.', 'lifterlms' ), $this->get_i18n_name() ) );
+ }
+
+ // Merge in default values.
+ $data = wp_parse_args( array_filter( $data ), $this->get_default_column_values() );
+
+ // Required Fields.
+ foreach ( $this->required_columns as $key ) {
+
+ if ( empty( $data[ $key ] ) ) {
+ return new WP_Error(
+ 'llms_rest_' . $this->id . '_missing_' . $key,
+ // Translators: %1$s = name of the resource type; %2$s = field name.
+ sprintf( __( '%1$s "%2$s" is required.', 'lifterlms' ), $this->get_i18n_name(), $key )
+ );
+ }
+ }
+
+ $err = $this->is_data_valid( $data );
+ if ( is_wp_error( $err ) ) {
+ return $err;
+ }
+
+ return $data;
+
+ }
+
+ /**
+ * Delete a the resource.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param int $id Resource ID.
+ * @return bool `true` on success, `false` if the resource couldn't be found or an error was encountered during deletion.
+ */
+ public function delete( $id ) {
+ $obj = $this->get( $id, false );
+ if ( $obj ) {
+ return $obj->delete();
+ }
+ return false;
+ }
+
+ /**
+ * Retrieve an API Key object instance.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param int $id API Key ID.
+ * @param bool $hydrate If true, pulls all key data from the database on instantiation.
+ * @return obj|false
+ */
+ public function get( $id, $hydrate = true ) {
+ $obj = new $this->model( $id, $hydrate );
+ if ( $obj && $obj->exists() ) {
+ return $obj;
+ }
+ return false;
+ }
+
+ /**
+ * Get default column values.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array
+ */
+ public function get_default_column_values() {
+
+ /**
+ * Allow customization of default Resource values.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $values An associative array of default values.
+ */
+ return apply_filters( 'llms_rest_' . $this->id . '_default_properties', $this->default_column_values );
+
+ }
+
+ /**
+ * Retrieve the translated resource name.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return string
+ */
+ protected function get_i18n_name() {
+ return __( 'Resource', 'lifterlms' );
+ }
+
+ /**
+ * Update a resource.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $data {
+ * Array of data to update.
+ *
+ * @type int $id (Required). Resource ID.
+ * }
+ * @return [type]
+ */
+ public function update( $data ) {
+
+ if ( empty( $data['id'] ) ) {
+ // Translators: %s = name of the resource type (for example: "API Key").
+ return new WP_Error( 'llms_rest_' . $this->id . '_missing_id', sprintf( __( 'No %s ID was supplied.', 'lifterlms' ), $this->get_i18n_name() ) );
+ }
+
+ $obj = $this->get( $data['id'] );
+ if ( ! $obj || ! $obj->exists() ) {
+ // Translators: %s = name of the resource type (for example: "API Key").
+ return new WP_Error( 'llms_rest_' . $this->id . '_invalid_' . $this->id, sprintf( __( 'The requested %s could not be located.', 'lifterlms' ), $this->get_i18n_name() ) );
+ }
+
+ $data = $this->update_prepare( $data );
+ if ( is_wp_error( $data ) ) {
+ return $data;
+ }
+
+ return $this->save( $obj, $data );
+
+ }
+
+ /**
+ * Prepare data for an update.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $data Associative array of data to set to a resources properties.
+ * @return object|WP_Error
+ */
+ protected function update_prepare( $data ) {
+
+ // Filter out write-protected keys.
+ $data = array_diff_key(
+ $data,
+ array_fill_keys( $this->read_only_columns, false )
+ );
+
+ $err = $this->is_data_valid( $data );
+ if ( is_wp_error( $err ) ) {
+ return $err;
+ }
+
+ return $data;
+
+ }
+
+ /**
+ * Persist data.
+ *
+ * This method assumes the supplied data has already been validated and sanitized.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param obj $obj Instantiated object.
+ * @param array $data Associative array of data to persist.
+ * @return obj
+ */
+ protected function save( $obj, $data ) {
+
+ $obj->setup( $data )->save();
+ return $obj;
+
+ }
+
+}
diff --git a/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php
new file mode 100644
index 0000000000..e2a87f0b3e
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php
@@ -0,0 +1,1854 @@
+set_bulk()` when there's no data to update.
+ * Fix wp:featured_media link, we don't expose any embeddable field.
+ * Also `self` and `collection` links prepared in the parent class.
+ * Added `"llms_rest_insert_{$this->post_type}"` and `"llms_rest_insert_{$this->post_type}"` action hooks:
+ * fired after inserting/updating an llms post into the database.
+ * @since 1.0.0-beta.8 Return links to those taxonomies which have an accessible rest route.
+ * Initialize `$prepared_item` array before adding values to it.
+ * @since 1.0.0-beta.9 Implemented a generic way to create and get an llms post object instance given a `post_type`.
+ * In `get_objects_from_query()` avoid performing an additional query, just return the already retrieved posts.
+ * Removed `"llms_rest_{$this->post_type}_filters_removed_for_response"` filter hooks,
+ * `"llms_rest_{$this->post_type}_filters_removed_for_response"` added.
+ * @since 1.0.0-beta.11 Fixed `"llms_rest_insert_{$this->post_type}"` and `"llms_rest_insert_{$this->post_type}"` action hooks fourth param:
+ * must be false when updating.
+ * @since 1.0.0-beta.12 Moved parameters to query args mapping from `$this->prepare_collection_params()` to `$this->map_params_to_query_args()`.
+ * @since 1.0.0-beta.14 Update `prepare_links()` to accept a second parameter, `WP_REST_Request`.
+ * @since 1.0.0-beta.21 Enable search.
+ */
+abstract class LLMS_REST_Posts_Controller extends LLMS_REST_Controller {
+
+ /**
+ * Post type.
+ *
+ * @var string
+ */
+ protected $post_type;
+
+ /**
+ * Route base.
+ *
+ * @var string
+ */
+ protected $collection_route_base_for_pagination;
+
+ /**
+ * Schema properties available for ordering the collection.
+ *
+ * @var string[]
+ */
+ protected $orderby_properties = array(
+ 'id',
+ 'title',
+ 'date_created',
+ 'date_updated',
+ 'menu_order',
+ 'relevance',
+ );
+
+ /**
+ * Whether search is allowed
+ *
+ * @var boolean
+ */
+ protected $is_searchable = true;
+
+ /**
+ * LLMS post class name.
+ *
+ * @since 1.0.0-beta.9
+ *
+ * @var string
+ */
+ protected $llms_post_class;
+
+ /**
+ * Constructor.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @return void
+ */
+ public function __construct() {
+ $this->meta = new WP_REST_Post_Meta_Fields( $this->post_type );
+ }
+
+ /**
+ * Retrieves an array of arguments for the delete endpoint.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array Delete endpoint arguments.
+ */
+ public function get_delete_item_args() {
+
+ return array(
+ 'force' => array(
+ 'description' => __( 'Bypass the trash and force course deletion.', 'lifterlms' ),
+ 'type' => 'boolean',
+ 'default' => false,
+ ),
+ );
+
+ }
+
+ /**
+ * Retrieves the query params for retrieving a single resource.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array
+ */
+ public function get_get_item_params() {
+
+ $params = parent::get_get_item_params();
+ $schema = $this->get_item_schema();
+
+ if ( isset( $schema['properties']['password'] ) ) {
+ $params['password'] = array(
+ 'description' => __( 'Post password. Required if the post is password protected.', 'lifterlms' ),
+ 'type' => 'string',
+ );
+ }
+
+ return $params;
+
+ }
+
+ /**
+ * Determine if the current user can view the object.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param object $object Object.
+ * @return bool
+ */
+ protected function check_read_object_permissions( $object ) {
+ return $this->check_read_permission( $object );
+ }
+
+ /**
+ * Check if a given request has access to read items.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_Error|boolean
+ */
+ public function get_items_permissions_check( $request ) {
+
+ // Everybody can list llms posts (in read mode).
+ if ( 'edit' === $request['context'] && ! $this->check_update_permission() ) {
+ return llms_rest_authorization_required_error();
+ }
+
+ return true;
+
+ }
+
+ /**
+ * Retrieve pagination information from an objects query.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param WP_Query $query Objects query result returned by {@see LLMS_REST_Posts_Controller::get_objects_query()}.
+ * @param array $prepared Array of collection arguments.
+ * @param WP_REST_Request $request Request object.
+ * @return array {
+ * Array of pagination information.
+ *
+ * @type int $current_page Current page number.
+ * @type int $total_results Total number of results.
+ * @type int $total_pages Total number of results pages.
+ * }
+ */
+ protected function get_pagination_data_from_query( $query, $prepared, $request ) {
+
+ $total_results = (int) $query->found_posts;
+ $current_page = isset( $prepared['paged'] ) ? (int) $prepared['paged'] : 1;
+ $total_pages = (int) ceil( $total_results / (int) $query->get( 'posts_per_page' ) );
+
+ return compact( 'current_page', 'total_results', 'total_pages' );
+
+ }
+
+ /**
+ * Check if a given request has access to create an item.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.18 Use plural post type name.
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_Error|boolean
+ */
+ public function create_item_permissions_check( $request ) {
+
+ $post_type_object = get_post_type_object( $this->post_type );
+ $post_type_name = $post_type_object->labels->name;
+
+ if ( ! empty( $request['id'] ) ) {
+ // Translators: %s = The post type name.
+ return llms_rest_bad_request_error( sprintf( __( 'Cannot create existing %s.', 'lifterlms' ), $post_type_name ) );
+ }
+
+ if ( ! $this->check_create_permission() ) {
+ // Translators: %s = The post type name.
+ return llms_rest_authorization_required_error( sprintf( __( 'Sorry, you are not allowed to create %s as this user.', 'lifterlms' ), $post_type_name ) );
+ }
+
+ if ( ! $this->check_assign_terms_permission( $request ) ) {
+ return llms_rest_authorization_required_error( __( 'Sorry, you are not allowed to assign the provided terms.', 'lifterlms' ) );
+ }
+
+ return true;
+ }
+
+
+ /**
+ * Creates a single LLMS post.
+ *
+ * Extending classes can add additional object fields by overriding the method `update_additional_object_fields()`.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.7 Added `"llms_rest_insert_{$this->post_type}"` and `"llms_rest_insert_{$this->post_type}"` action hooks:
+ * fired after inserting/updating an llms post into the database.
+ * @since 1.0.0-beta.25 Allow updating meta with the same value as the stored one.
+ * @since 1.0.0-beta.27 Handle custom meta registered via `register_meta()` and custom rest fields registered via `register_rest_field()`.
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
+ */
+ public function create_item( $request ) {
+
+ $schema = $this->get_item_schema();
+
+ $prepared_item = $this->prepare_item_for_database( $request );
+ if ( is_wp_error( $prepared_item ) ) {
+ return $prepared_item;
+ }
+
+ $prepared_item = array_diff_key( $prepared_item, $this->get_additional_fields() );
+ $object = $this->create_llms_post( $prepared_item );
+ if ( is_wp_error( $object ) ) {
+
+ if ( 'db_insert_error' === $object->get_error_code() ) {
+ $object->add_data( array( 'status' => 500 ) );
+ } else {
+ $object->add_data( array( 'status' => 400 ) );
+ }
+
+ return $object;
+ }
+
+ /**
+ * Fires after a single llms post is created or updated via the REST API.
+ *
+ * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param LLMS_Post $object Inserted or updated llms object.
+ * @param WP_REST_Request $request Request object.
+ * @param array $schema The item schema.
+ * @param bool $creating True when creating a post, false when updating.
+ */
+ do_action( "llms_rest_insert_{$this->post_type}", $object, $request, $schema, true );
+
+ // Set all the other properties.
+ // TODO: maybe we want to filter the post properties that have already been inserted before.
+ $set_bulk_result = $object->set_bulk( $prepared_item, true, true );
+ if ( is_wp_error( $set_bulk_result ) ) {
+
+ if ( 'db_update_error' === $set_bulk_result->get_error_code() ) {
+ $set_bulk_result->add_data( array( 'status' => 500 ) );
+ } else {
+ $set_bulk_result->add_data( array( 'status' => 400 ) );
+ }
+
+ return $set_bulk_result;
+ }
+
+ $object_id = $object->get( 'id' );
+
+ $additional_fields = $this->update_additional_object_fields( $object, $request, $schema, $prepared_item );
+ if ( is_wp_error( $additional_fields ) ) {
+ return $additional_fields;
+ }
+
+ if ( ! empty( $schema['properties']['featured_media'] ) && isset( $request['featured_media'] ) ) {
+ $this->handle_featured_media( $request['featured_media'], $object_id );
+ }
+
+ $terms_update = $this->handle_terms( $object_id, $request );
+ if ( is_wp_error( $terms_update ) ) {
+ return $terms_update;
+ }
+
+ $meta_update = $this->update_meta( $object, $request, $schema );
+ if ( is_wp_error( $meta_update ) ) {
+ return $meta_update;
+ }
+
+ // Fields registered via `register_rest_field()`.
+ $fields_update = $this->update_additional_fields_for_object( $object, $request );
+ if ( is_wp_error( $fields_update ) ) {
+ return $fields_update;
+ }
+
+ $request->set_param( 'context', 'edit' );
+
+ /**
+ * Fires after a single llms post is completely created or updated via the REST API.
+ *
+ * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param LLMS_Post $object Inserted or updated llms object.
+ * @param WP_REST_Request $request Request object.
+ * @param array $schema The item schema.
+ * @param bool $creating True when creating a post, false when updating.
+ */
+ do_action( "llms_rest_after_insert_{$this->post_type}", $object, $request, $schema, true );
+
+ $response = $this->prepare_item_for_response( $object, $request );
+
+ $response->set_status( 201 );
+
+ $response->header( 'Location', rest_url( sprintf( '%s/%s/%d', $this->namespace, $this->rest_base, $object_id ) ) );
+
+ return $response;
+ }
+
+ /**
+ * Check if a given request has access to read an item.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_Error|boolean
+ */
+ public function get_item_permissions_check( $request ) {
+
+ $object = $this->get_object( (int) $request['id'] );
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ if ( 'edit' === $request['context'] && ! $this->check_update_permission( $object ) ) {
+ return llms_rest_authorization_required_error();
+ }
+
+ if ( ! empty( $request['password'] ) ) {
+ // Check post password, and return error if invalid.
+ if ( ! hash_equals( $object->get( 'password' ), $request['password'] ) ) {
+ return llms_rest_authorization_required_error( __( 'Incorrect password.', 'lifterlms' ) );
+ }
+ }
+
+ // Allow access to all password protected posts if the context is edit.
+ if ( 'edit' === $request['context'] ) {
+ add_filter( 'post_password_required', '__return_false' );
+ }
+
+ if ( ! $this->check_read_permission( $object ) ) {
+ return llms_rest_authorization_required_error();
+ }
+
+ return true;
+ }
+
+ /**
+ * Retrieves the query params for the objects collection
+ *
+ * @since 1.0.0-beta.19
+ *
+ * @return array Collection parameters.
+ */
+ public function get_collection_params() {
+
+ $query_params = parent::get_collection_params();
+ $schema = $this->get_item_schema();
+
+ if ( isset( $schema['properties']['status'] ) ) {
+ $query_params['status'] = array(
+ 'default' => 'publish',
+ 'description' => __( 'Limit result set to posts assigned one or more statuses.', 'lifterlms' ),
+ 'type' => 'array',
+ 'items' => array(
+ 'enum' => array_merge(
+ array_keys(
+ get_post_stati()
+ ),
+ array(
+ 'any',
+ )
+ ),
+ 'type' => 'string',
+ ),
+ 'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
+ );
+ }
+
+ return $query_params;
+
+ }
+
+ /**
+ * Format query arguments to retrieve a collection of objects.
+ *
+ * @since 1.0.0-beta.7
+ * @since 1.0.0-beta.12 Moved parameters to query args mapping into a different method.
+ * @since 1.0.0-beta.18 Correctly return errors.
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array|WP_Error
+ */
+ protected function prepare_collection_query_args( $request ) {
+
+ $prepared = parent::prepare_collection_query_args( $request );
+ if ( is_wp_error( $prepared ) ) {
+ return $prepared;
+ }
+
+ // Force the post_type argument, since it's not a user input variable.
+ $prepared['post_type'] = $this->post_type;
+
+ $query_args = $this->prepare_items_query( $prepared, $request );
+
+ return $query_args;
+
+ }
+
+ /**
+ * Map schema to query arguments to retrieve a collection of objects.
+ *
+ * @since 1.0.0-beta.12
+ * @since 1.0.0-beta.19 Map 'status' collection param to to 'post_status' query arg.
+ *
+ * @param array $prepared Array of collection arguments.
+ * @param array $registered Registered collection params.
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array|WP_Error
+ */
+ protected function map_params_to_query_args( $prepared, $registered, $request ) {
+
+ $args = array();
+
+ /*
+ * This array defines mappings between public API query parameters whose
+ * values are accepted as-passed, and their internal WP_Query parameter
+ * name equivalents (some are the same). Only values which are also
+ * present in $registered will be set.
+ */
+ $parameter_mappings = array(
+ 'order' => 'order',
+ 'orderby' => 'orderby',
+ 'page' => 'paged',
+ 'exclude' => 'post__not_in',
+ 'include' => 'post__in',
+ 'search' => 's',
+ 'status' => 'post_status',
+ );
+
+ /*
+ * For each known parameter which is both registered and present in the request,
+ * set the parameter's value on the query $args.
+ */
+ foreach ( $parameter_mappings as $api_param => $wp_param ) {
+ if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {
+ $args[ $wp_param ] = $request[ $api_param ];
+ }
+ }
+
+ // Ensure our per_page parameter overrides any provided posts_per_page filter.
+ if ( isset( $registered['per_page'] ) ) {
+ $args['posts_per_page'] = $request['per_page'];
+ }
+
+ return $args;
+ }
+
+ /**
+ * Check if a given request has access to update an item.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.18 Use plural post type name.
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_Error|boolean
+ */
+ public function update_item_permissions_check( $request ) {
+
+ $object = $this->get_object( (int) $request['id'] );
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $post_type_object = get_post_type_object( $this->post_type );
+ $post_type_name = $post_type_object->labels->name;
+
+ if ( ! $this->check_update_permission( $object ) ) {
+ // Translators: %s = The post type name.
+ return llms_rest_authorization_required_error( sprintf( __( 'Sorry, you are not allowed to update %s as this user.', 'lifterlms' ), $post_type_name ) );
+ }
+
+ if ( ! $this->check_assign_terms_permission( $request ) ) {
+ return llms_rest_authorization_required_error( __( 'Sorry, you are not allowed to assign the provided terms.', 'lifterlms' ) );
+ }
+
+ return true;
+ }
+
+ /**
+ * Updates a single llms post.
+ *
+ * Extending classes can add additional object fields by overriding the method `update_additional_object_fields()`.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.7 Don't execute `$object->set_bulk()` when there's no data to update:
+ * this fixes an issue when updating only properties which are not handled in `prepare_item_for_database()`.
+ * Added `"llms_rest_insert_{$this->post_type}"` and `"llms_rest_insert_{$this->post_type}"` action hooks:
+ * fired after inserting/updating an llms post into the database.
+ * @since 1.0.0-beta.11 Fixed `"llms_rest_insert_{$this->post_type}"` and `"llms_rest_insert_{$this->post_type}"` action hooks fourth param:
+ * must be false when updating.
+ * @since 1.0.0-beta.25 Allow updating meta with the same value as the stored one.
+ * @since 1.0.0-beta.27 Handle custom meta registered via `register_meta()` and custom rest fields registered via `register_rest_field()`.
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
+ */
+ public function update_item( $request ) {
+
+ $object = $this->get_object( (int) $request['id'] );
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $schema = $this->get_item_schema();
+ $prepared_item = $this->prepare_item_for_database( $request );
+
+ if ( is_wp_error( $prepared_item ) ) {
+ return $prepared_item;
+ }
+ $prepared_item = array_diff_key( $prepared_item, $this->get_additional_fields() );
+ $update_result = empty( array_diff_key( $prepared_item, array_flip( array( 'id' ) ) ) ) ? false : $object->set_bulk( $prepared_item, true, true );
+ if ( is_wp_error( $update_result ) ) {
+
+ if ( 'db_update_error' === $update_result->get_error_code() ) {
+ $update_result->add_data( array( 'status' => 500 ) );
+ } else {
+ $update_result->add_data( array( 'status' => 400 ) );
+ }
+
+ return $update_result;
+ }
+
+ /**
+ * Fires after a single llms post is created or updated via the REST API.
+ *
+ * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param LLMS_Post $object Inserted or updated llms object.
+ * @param WP_REST_Request $request Request object.
+ * @param array $schema The item schema.
+ * @param bool $creating True when creating a post, false when updating.
+ */
+ do_action( "llms_rest_insert_{$this->post_type}", $object, $request, $schema, false );
+
+ $additional_fields = $this->update_additional_object_fields( $object, $request, $schema, $prepared_item, false );
+ if ( is_wp_error( $additional_fields ) ) {
+ return $additional_fields;
+ }
+
+ $object_id = $object->get( 'id' );
+
+ if ( ! empty( $schema['properties']['featured_media'] ) && isset( $request['featured_media'] ) ) {
+ $this->handle_featured_media( $request['featured_media'], $object_id );
+ }
+
+ $terms_update = $this->handle_terms( $object_id, $request );
+ if ( is_wp_error( $terms_update ) ) {
+ return $terms_update;
+ }
+
+ $meta_update = $this->update_meta( $object, $request, $schema );
+ if ( is_wp_error( $meta_update ) ) {
+ return $meta_update;
+ }
+
+ // Fields registered via `register_rest_field()`.
+ $fields_update = $this->update_additional_fields_for_object( $object, $request );
+ if ( is_wp_error( $fields_update ) ) {
+ return $fields_update;
+ }
+
+ $request->set_param( 'context', 'edit' );
+
+ /**
+ * Fires after a single llms post is completely created or updated via the REST API.
+ *
+ * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param LLMS_Post $object Inserted or updated llms object.
+ * @param WP_REST_Request $request Request object.
+ * @param array $schema The item schema.
+ * @param bool $creating True when creating a post, false when updating.
+ */
+ do_action( "llms_rest_after_insert_{$this->post_type}", $object, $request, $schema, false );
+
+ return $this->prepare_item_for_response( $object, $request );
+
+ }
+
+ /**
+ * Updates a single llms post.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.7 return description updated.
+ *
+ * @param LLMS_Post_Model $object LMMS_Post_Model instance.
+ * @param array $prepared_item Array.
+ * @param WP_REST_Request $request Full details about the request.
+ * @param array $schema The item schema.
+ * @return bool|WP_Error True on success or false if nothing to update, WP_Error object if something went wrong during the update.
+ */
+ protected function update_additional_object_fields( $object, $prepared_item, $request, $schema ) {
+ return true;
+ }
+
+ /**
+ * Check if a given request has access to delete an item.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.18 Provide a more significant error message when trying to delete an item without permissions.
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return bool|WP_Error
+ */
+ public function delete_item_permissions_check( $request ) {
+
+ $object = $this->get_object( (int) $request['id'] );
+ if ( is_wp_error( $object ) ) {
+ // LLMS_Post not found, we don't return a 404.
+ if ( in_array( 'llms_rest_not_found', $object->get_error_codes(), true ) ) {
+ return true;
+ }
+
+ return $object;
+ }
+
+ if ( ! $this->check_delete_permission( $object ) ) {
+ return llms_rest_authorization_required_error(
+ sprintf(
+ // Translators: %s = The post type name.
+ __( 'Sorry, you are not allowed to delete %s as this user.', 'lifterlms' ),
+ get_post_type_object( $this->post_type )->labels->name
+ )
+ );
+ }
+
+ return true;
+
+ }
+
+ /**
+ * Deletes a single llms post.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
+ */
+ public function delete_item( $request ) {
+
+ $object = $this->get_object( (int) $request['id'] );
+ $response = new WP_REST_Response();
+ $response->set_status( 204 );
+
+ if ( is_wp_error( $object ) ) {
+ // Course not found, we don't return a 404.
+ if ( in_array( 'llms_rest_not_found', $object->get_error_codes(), true ) ) {
+ return $response;
+ }
+
+ return $object;
+ }
+
+ $post_type_object = get_post_type_object( $this->post_type );
+ $post_type_name = $post_type_object->labels->singular_name;
+
+ $id = $object->get( 'id' );
+ $force = $this->is_delete_forced( $request );
+
+ // If we're forcing, then delete permanently.
+ if ( $force ) {
+ $result = wp_delete_post( $id, true );
+ } else {
+
+ $supports_trash = $this->is_trash_supported();
+
+ // If we don't support trashing for this type, error out.
+ if ( ! $supports_trash ) {
+ return new WP_Error(
+ 'llms_rest_trash_not_supported',
+ /* translators: %1$s: post type name, %2$s: force=true */
+ sprintf( __( 'The %1$s does not support trashing. Set \'%2$s\' to delete.', 'lifterlms' ), $post_type_name, 'force=true' ),
+ array( 'status' => 501 )
+ );
+ }
+
+ // Otherwise, only trash if we haven't already.
+ if ( 'trash' !== $object->get( 'status' ) ) {
+ // (Note that internally this falls through to `wp_delete_post` if
+ // the trash is disabled.)
+ $result = wp_trash_post( $id );
+ } else {
+ $result = true;
+ }
+
+ $request->set_param( 'context', 'edit' );
+ $object = $this->get_object( $id );
+ $response = $this->prepare_item_for_response( $object, $request );
+
+ }
+
+ if ( ! $result ) {
+ return new WP_Error(
+ 'llms_rest_cannot_delete',
+ /* translators: %s: post type name */
+ sprintf( __( 'The %s cannot be deleted.', 'lifterlms' ), $post_type_name ),
+ array( 'status' => 500 )
+ );
+ }
+
+ return $response;
+
+ }
+
+ /**
+ * Whether the delete should be forced.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return bool True if the delete should be forced, false otherwise.
+ */
+ protected function is_delete_forced( $request ) {
+ return isset( $request['force'] ) && (bool) $request['force'];
+ }
+
+ /**
+ * Whether the trash is supported.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return bool True if the trash is supported, false otherwise.
+ */
+ protected function is_trash_supported() {
+ return ( EMPTY_TRASH_DAYS > 0 );
+ }
+
+
+ /**
+ * Retrieve a query object based on arguments from a `get_items()` (collection) request.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param array $prepared Array of collection arguments.
+ * @param WP_REST_Request $request Full details about the request.
+ * @return WP_Query
+ */
+ protected function get_objects_query( $prepared, $request ) {
+
+ return new WP_Query( $prepared );
+
+ }
+
+ /**
+ * Retrieve an array of objects from the result of `$this->get_objects_query()`.
+ *
+ * @since 1.0.0-beta.7
+ * @since 1.0.0-beta.9 Avoid performing an additional query, just return the already retrieved posts.
+ *
+ * @param WP_Query $query WP_Query query result.
+ * @return WP_Post[]
+ */
+ protected function get_objects_from_query( $query ) {
+
+ return $query->posts;
+
+ }
+
+ /**
+ * Prepare collection items for response.
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param array $objects Array of objects to be prepared for response.
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array
+ */
+ protected function prepare_collection_items_for_response( $objects, $request ) {
+
+ $items = array();
+
+ // Allow access to all password protected posts if the context is edit.
+ if ( 'edit' === $request['context'] ) {
+ add_filter( 'post_password_required', '__return_false' );
+ }
+
+ $items = parent::prepare_collection_items_for_response( $objects, $request );
+
+ // Reset filter.
+ if ( 'edit' === $request['context'] ) {
+ remove_filter( 'post_password_required', '__return_false' );
+ }
+
+ return $items;
+
+ }
+
+ /**
+ * Prepare a single object output for response.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param LLMS_Post_Model $object object object.
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array
+ */
+ protected function prepare_object_for_response( $object, $request ) {
+
+ $object_id = $object->get( 'id' );
+ $password_required = post_password_required( $object_id );
+ $password = $object->get( 'password' );
+
+ $data = array(
+ 'id' => $object->get( 'id' ),
+ 'date_created' => $object->get_date( 'date', 'Y-m-d H:i:s' ),
+ 'date_created_gmt' => $object->get_date( 'date_gmt', 'Y-m-d H:i:s' ),
+ 'date_updated' => $object->get_date( 'modified', 'Y-m-d H:i:s' ),
+ 'date_updated_gmt' => $object->get_date( 'modified_gmt', 'Y-m-d H:i:s' ),
+ 'menu_order' => $object->get( 'menu_order' ),
+ 'title' => array(
+ 'raw' => $object->get( 'title', true ),
+ 'rendered' => $object->get( 'title' ),
+ ),
+ 'password' => $password,
+ 'slug' => $object->get( 'name' ),
+ 'post_type' => $this->post_type,
+ 'permalink' => get_permalink( $object_id ),
+ 'status' => $object->get( 'status' ),
+ 'featured_media' => (int) get_post_thumbnail_id( $object_id ),
+ 'comment_status' => $object->get( 'comment_status' ),
+ 'ping_status' => $object->get( 'ping_status' ),
+ 'content' => array(
+ 'raw' => $object->get( 'content', true ),
+ 'rendered' => $password_required ? '' : apply_filters( 'the_content', $object->get( 'content', true ) ),
+ 'protected' => (bool) $password,
+ ),
+ 'excerpt' => array(
+ 'raw' => $object->get( 'excerpt', true ),
+ 'rendered' => $password_required ? '' : apply_filters( 'the_excerpt', $object->get( 'excerpt' ) ),
+ 'protected' => (bool) $password,
+ ),
+ );
+
+ return $data;
+
+ }
+
+ /**
+ * Prepares data of a single object for response.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param obj $object Raw object from database.
+ * @param WP_REST_Request $request Request object.
+ * @return array
+ */
+ protected function prepare_object_data_for_response( $object, $request ) {
+
+ // Need to set the global $post because of references to the global $post when e.g. filtering the content, or processing blocks/shortcodes.
+ global $post;
+ $temp = $post;
+ $post = $object->get( 'post' ); // phpcs:ignore
+ setup_postdata( $post );
+
+ $removed_filters_for_response = $this->maybe_remove_filters_for_response( $object );
+
+ $has_password_filter = false;
+
+ if ( $this->can_access_password_content( $object, $request ) ) {
+ // Allow access to the post, permissions already checked before.
+ add_filter( 'post_password_required', '__return_false' );
+ $has_password_filter = true;
+ }
+
+ $data = parent::prepare_object_data_for_response( $object, $request );
+
+ // Filter data including only schema props.
+ $data = array_intersect_key( $data, array_flip( $this->get_fields_for_response( $request ) ) );
+
+ if ( $has_password_filter ) {
+ // Reset filter.
+ remove_filter( 'post_password_required', '__return_false' );
+ }
+
+ $this->maybe_add_removed_filters_for_response( $removed_filters_for_response );
+ $post = $temp; // phpcs:ignore
+ wp_reset_postdata();
+
+ return $data;
+
+ }
+
+ /**
+ * Determines the allowed query_vars for a get_items() response and prepares
+ * them for WP_Query.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $prepared_args Optional. Prepared WP_Query arguments. Default empty array.
+ * @param WP_REST_Request $request Optional. Full details about the request.
+ * @return array Items query arguments.
+ */
+ protected function prepare_items_query( $prepared_args = array(), $request = null ) {
+
+ $query_args = array();
+
+ foreach ( $prepared_args as $key => $value ) {
+ $query_args[ $key ] = $value;
+ }
+
+ $query_args = $this->prepare_items_query_orderby_mappings( $query_args, $request );
+
+ // Turn exclude and include params into proper arrays.
+ foreach ( array( 'post__in', 'post__not_in' ) as $arg ) {
+ if ( isset( $query_args[ $arg ] ) && ! is_array( $query_args[ $arg ] ) ) {
+ $query_args[ $arg ] = array_map( 'absint', explode( ',', $query_args[ $arg ] ) );
+ }
+ }
+
+ return $query_args;
+
+ }
+
+ /**
+ * Map to proper WP_Query orderby param.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $query_args WP_Query arguments.
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array Query arguments.
+ */
+ protected function prepare_items_query_orderby_mappings( $query_args, $request ) {
+
+ // Map to proper WP_Query orderby param.
+ if ( isset( $query_args['orderby'] ) && isset( $request['orderby'] ) ) {
+ $orderby_mappings = array(
+ 'id' => 'ID',
+ 'title' => 'title',
+ 'data_created' => 'post_date',
+ 'date_updated' => 'post_modified',
+ );
+
+ if ( isset( $orderby_mappings[ $request['orderby'] ] ) ) {
+ $query_args['orderby'] = $orderby_mappings[ $request['orderby'] ];
+ }
+ }
+
+ return $query_args;
+
+ }
+
+ /**
+ * Prepares a single post for create or update.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.8 Initialize `$prepared_item` array before adding values to it.
+ *
+ * @param WP_REST_Request $request Request object.
+ * @return array|WP_Error Array of llms post args or WP_Error.
+ */
+ protected function prepare_item_for_database( $request ) {
+
+ $prepared_item = array();
+
+ // LLMS Post ID.
+ if ( isset( $request['id'] ) ) {
+ $existing_object = $this->get_object( absint( $request['id'] ) );
+ if ( is_wp_error( $existing_object ) ) {
+ return $existing_object;
+ }
+
+ $prepared_item['id'] = absint( $request['id'] );
+ }
+
+ $schema = $this->get_item_schema();
+
+ // LLMS Post title.
+ if ( ! empty( $schema['properties']['title'] ) && isset( $request['title'] ) ) {
+ if ( is_string( $request['title'] ) ) {
+ $prepared_item['post_title'] = $request['title'];
+ } elseif ( ! empty( $request['title']['raw'] ) ) {
+ $prepared_item['post_title'] = $request['title']['raw'];
+ }
+ }
+
+ // LLMS Post content.
+ if ( ! empty( $schema['properties']['content'] ) && isset( $request['content'] ) ) {
+ if ( is_string( $request['content'] ) ) {
+ $prepared_item['post_content'] = $request['content'];
+ } elseif ( isset( $request['content']['raw'] ) ) {
+ $prepared_item['post_content'] = $request['content']['raw'];
+ }
+ }
+
+ // LLMS Post excerpt.
+ if ( ! empty( $schema['properties']['excerpt'] ) && isset( $request['excerpt'] ) ) {
+ if ( is_string( $request['excerpt'] ) ) {
+ $prepared_item['post_excerpt'] = $request['excerpt'];
+ } elseif ( isset( $request['excerpt']['raw'] ) ) {
+ $prepared_item['post_excerpt'] = $request['excerpt']['raw'];
+ }
+ }
+
+ // LLMS Post status.
+ if ( ! empty( $schema['properties']['status'] ) && isset( $request['status'] ) ) {
+ $status = $this->handle_status_param( $request['status'] );
+ if ( is_wp_error( $status ) ) {
+ return $status;
+ }
+
+ $prepared_item['post_status'] = $status;
+ }
+
+ // LLMS Post date.
+ if ( ! empty( $schema['properties']['date_created'] ) && ! empty( $request['date_created'] ) ) {
+ $date_data = rest_get_date_with_gmt( $request['date_created'] );
+
+ if ( ! empty( $date_data ) ) {
+ list( $prepared_item['post_date'], $prepared_item['post_date_gmt'] ) = $date_data;
+ $prepared_item['edit_date'] = true;
+ }
+ } elseif ( ! empty( $schema['properties']['date_gmt'] ) && ! empty( $request['date_gmt'] ) ) {
+ $date_data = rest_get_date_with_gmt( $request['date_created_gmt'], true );
+
+ if ( ! empty( $date_data ) ) {
+ list( $prepared_item['post_date'], $prepared_item['post_date_gmt'] ) = $date_data;
+ $prepared_item['edit_date'] = true;
+ }
+ }
+
+ // LLMS Post slug.
+ if ( ! empty( $schema['properties']['slug'] ) && isset( $request['slug'] ) ) {
+ $prepared_item['post_name'] = $request['slug'];
+ }
+
+ // LLMS Post password.
+ if ( ! empty( $schema['properties']['password'] ) && isset( $request['password'] ) ) {
+ $prepared_item['post_password'] = $request['password'];
+ }
+
+ // LLMS Post Menu order.
+ if ( ! empty( $schema['properties']['menu_order'] ) && isset( $request['menu_order'] ) ) {
+ $prepared_item['menu_order'] = (int) $request['menu_order'];
+ }
+
+ // LLMS Post Comment status.
+ if ( ! empty( $schema['properties']['comment_status'] ) && ! empty( $request['comment_status'] ) ) {
+ $prepared_item['comment_status'] = $request['comment_status'];
+ }
+
+ // LLMS Post Ping status.
+ if ( ! empty( $schema['properties']['ping_status'] ) && ! empty( $request['ping_status'] ) ) {
+ $prepared_item['ping_status'] = $request['ping_status'];
+ }
+
+ return $prepared_item;
+
+ }
+
+ /**
+ * Get the LLMS Posts's schema, conforming to JSON Schema.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @return array
+ */
+ protected function get_item_schema_base() {
+
+ $schema = array(
+ '$schema' => 'http://json-schema.org/draft-04/schema#',
+ 'title' => $this->post_type,
+ 'type' => 'object',
+ 'properties' => array(
+ 'id' => array(
+ 'description' => __( 'Unique Identifier. The WordPress Post ID.', 'lifterlms' ),
+ 'type' => 'integer',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ 'date_created' => array(
+ 'description' => __( 'Creation date. Format: Y-m-d H:i:s', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ ),
+ 'date_created_gmt' => array(
+ 'description' => __( 'Creation date (in GMT). Format: Y-m-d H:i:s', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ ),
+ 'date_updated' => array(
+ 'description' => __( 'Date last modified. Format: Y-m-d H:i:s', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ 'date_updated_gmt' => array(
+ 'description' => __( 'Date last modified (in GMT). Format: Y-m-d H:i:s', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ 'menu_order' => array(
+ 'description' => __( 'Creation date (in GMT). Format: Y-m-d H:i:s', 'lifterlms' ),
+ 'type' => 'integer',
+ 'default' => 0,
+ 'context' => array( 'view', 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'absint',
+ ),
+ ),
+ 'title' => array(
+ 'description' => __( 'Post title.', 'lifterlms' ),
+ 'type' => 'object',
+ 'context' => array( 'view', 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
+ 'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
+ ),
+ 'required' => true,
+ 'properties' => array(
+ 'raw' => array(
+ 'description' => __( 'Raw title. Useful when displaying title in the WP Block Editor. Only returned in edit context.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ ),
+ 'rendered' => array(
+ 'description' => __( 'Rendered title.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ ),
+ ),
+ 'content' => array(
+ 'type' => 'object',
+ 'description' => __( 'The HTML content of the post.', 'lifterlms' ),
+ 'context' => array( 'view', 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
+ 'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
+ ),
+ 'required' => true,
+ 'properties' => array(
+ 'rendered' => array(
+ 'description' => __( 'Rendered HTML content.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ 'raw' => array(
+ 'description' => __( 'Raw HTML content. Useful when displaying title in the WP Block Editor. Only returned in edit context.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ ),
+ 'protected' => array(
+ 'description' => __( 'Whether the content is protected with a password.', 'lifterlms' ),
+ 'type' => 'boolean',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ ),
+ ),
+ 'excerpt' => array(
+ 'type' => 'object',
+ 'description' => __( 'The HTML excerpt of the post.', 'lifterlms' ),
+ 'context' => array( 'view', 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database().
+ 'validate_callback' => null, // Note: validation implemented in self::prepare_item_for_database().
+ ),
+ 'properties' => array(
+ 'rendered' => array(
+ 'description' => __( 'Rendered HTML excerpt.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ 'raw' => array(
+ 'description' => __( 'Raw HTML excerpt. Useful when displaying title in the WP Block Editor. Only returned in edit context.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ ),
+ 'protected' => array(
+ 'description' => __( 'Whether the excerpt is protected with a password.', 'lifterlms' ),
+ 'type' => 'boolean',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ ),
+ ),
+ 'permalink' => array(
+ 'description' => __( 'Post URL.', 'lifterlms' ),
+ 'type' => 'string',
+ 'format' => 'uri',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ 'slug' => array(
+ 'description' => __( 'Post URL slug.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => array( $this, 'sanitize_slug' ),
+ ),
+ ),
+ 'post_type' => array(
+ 'description' => __( 'LifterLMS custom post type', 'lifterlms' ),
+ 'type' => 'string',
+ 'readonly' => true,
+ 'context' => array( 'view', 'edit' ),
+ ),
+ 'status' => array(
+ 'description' => __( 'The publication status of the post.', 'lifterlms' ),
+ 'type' => 'string',
+ 'default' => 'publish',
+ 'enum' => array_keys(
+ get_post_stati(
+ array(
+ '_builtin' => true,
+ 'internal' => false,
+ )
+ )
+ ),
+ 'context' => array( 'view', 'edit' ),
+ ),
+ 'password' => array(
+ 'description' => __( 'Password used to protect access to the content.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ ),
+ 'featured_media' => array(
+ 'description' => __( 'Featured image ID.', 'lifterlms' ),
+ 'type' => 'integer',
+ 'context' => array( 'view', 'edit' ),
+ ),
+ 'comment_status' => array(
+ 'description' => __( 'Post comment status. Default comment status dependent upon general WordPress post discussion settings.', 'lifterlms' ),
+ 'type' => 'string',
+ 'default' => 'open',
+ 'enum' => array( 'open', 'closed' ),
+ 'context' => array( 'view', 'edit' ),
+ ),
+ 'ping_status' => array(
+ 'description' => __( 'Post ping status. Default ping status dependent upon general WordPress post discussion settings.', 'lifterlms' ),
+ 'type' => 'string',
+ 'default' => 'open',
+ 'enum' => array( 'open', 'closed' ),
+ 'context' => array( 'view', 'edit' ),
+ ),
+ ),
+ );
+
+ return $schema;
+
+ }
+
+ /**
+ * Add custom fields registered via `register_meta`.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @param array $schema The resource item schema.
+ * @return array
+ */
+ protected function add_meta_fields_schema( $schema ) {
+ return post_type_supports( $this->post_type, 'custom-fields' ) ? parent::add_meta_fields_schema( $schema ) : $schema;
+ }
+
+ /**
+ * Get object.
+ *
+ * @since 1.0.0-beta.9
+ *
+ * @param int $id Object ID.
+ * @return LLMS_Course|WP_Error
+ */
+ protected function get_object( $id ) {
+
+ $class = $this->llms_post_class_from_post_type();
+
+ if ( ! $class ) {
+ return new WP_Error(
+ 'llms_rest_cannot_get_object',
+ /* translators: %s: post type */
+ sprintf( __( 'The %s cannot be retrieved.', 'lifterlms' ), $this->post_type ),
+ array( 'status' => 500 )
+ );
+ }
+
+ $object = llms_get_post( $id );
+ return $object && is_a( $object, $class ) ? $object : llms_rest_not_found_error();
+ }
+
+ /**
+ * Create an LLMS_Post_Model
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.9 Implement generic llms post creation.
+ *
+ * @param array $object_args Object args.
+ * @return LLMS_Post_Model|WP_Error
+ */
+ protected function create_llms_post( $object_args ) {
+
+ $class = $this->llms_post_class_from_post_type();
+
+ if ( ! $class ) {
+ return new WP_Error(
+ 'llms_rest_cannot_create_object',
+ /* translators: %s: post type */
+ sprintf( __( 'The %s cannot be created.', 'lifterlms' ), $this->post_type ),
+ array( 'status' => 500 )
+ );
+ }
+
+ $object = new $class( 'new', $object_args );
+ return $object && is_a( $object, $class ) ? $object : llms_rest_not_found_error();
+ }
+
+ /**
+ * Prepare links for the request.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.2 Filter taxonomies by `public` property instead of `show_in_rest`.
+ * @since 1.0.0-beta.3 Filter taxonomies by `show_in_llms_rest` property instead of `public`.
+ * @since 1.0.0-beta.7 `self` and `collection` links prepared in the parent class.
+ * Fix wp:featured_media link, we don't expose any embeddable field.
+ * @since 1.0.0-beta.8 Return links to those taxonomies which have an accessible rest route.
+ * @since 1.0.0-beta.14 Added $request parameter.
+ *
+ * @param LLMS_Post_Model $object Object data.
+ * @param WP_REST_Request $request Request object.
+ * @return array Links for the given object.
+ */
+ protected function prepare_links( $object, $request ) {
+
+ $links = parent::prepare_links( $object, $request );
+
+ $object_id = $object->get( 'id' );
+
+ // Content.
+ $links['content'] = array(
+ 'href' => rest_url( sprintf( '/%s/%s/%d/%s', $this->namespace, $this->rest_base, $object_id, 'content' ) ),
+ );
+
+ // If we have a featured media, add that.
+ $featured_media = get_post_thumbnail_id( $object_id );
+ if ( $featured_media ) {
+ $image_url = rest_url( 'wp/v2/media/' . $featured_media );
+
+ $links['https://api.w.org/featuredmedia'] = array(
+ 'href' => $image_url,
+ );
+ }
+
+ $taxonomies = get_object_taxonomies( $this->post_type );
+
+ if ( ! empty( $taxonomies ) ) {
+ $links['https://api.w.org/term'] = array();
+
+ foreach ( $taxonomies as $tax ) {
+ $taxonomy_obj = get_taxonomy( $tax );
+
+ // Skip taxonomies that are not set to be shown in REST and LLMS REST.
+ if ( empty( $taxonomy_obj->show_in_rest ) || empty( $taxonomy_obj->show_in_llms_rest ) ) {
+ continue;
+ }
+
+ $tax_base = ! empty( $taxonomy_obj->rest_base ) ? $taxonomy_obj->rest_base : $tax;
+
+ $terms_url = add_query_arg(
+ 'post',
+ $object_id,
+ rest_url( 'wp/v2/' . $tax_base )
+ );
+
+ $links['https://api.w.org/term'][] = array(
+ 'href' => $terms_url,
+ 'taxonomy' => $tax,
+ );
+ }
+ }
+
+ return $links;
+
+ }
+
+ /**
+ * Re-add filters previously removed
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param LLMS_Post_Model $object Object.
+ * @return array Array of filters removed for response.
+ */
+ protected function maybe_remove_filters_for_response( $object ) {
+
+ $filters_to_be_removed = $this->get_filters_to_be_removed_for_response( $object );
+ $filters_removed = array();
+
+ // Need to remove some filters.
+ foreach ( $filters_to_be_removed as $hook => $filters ) {
+ foreach ( $filters as $filter_data ) {
+ $has_filter = has_filter( $hook, $filter_data['callback'] );
+
+ if ( false !== $has_filter && $filter_data['priority'] === $has_filter ) {
+ remove_filter( $hook, $filter_data['callback'], $filter_data['priority'] );
+ if ( ! isset( $filters_removed[ $hook ] ) ) {
+ $filters_removed[ $hook ] = array();
+ }
+ $filters_removed[ $hook ][] = $filter_data;
+
+ }
+ }
+ }
+
+ return $filters_removed;
+
+ }
+
+ /**
+ * Re-add filters previously removed
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $filters_removed Array of filters removed to be re-added.
+ * @return void
+ */
+ protected function maybe_add_removed_filters_for_response( $filters_removed ) {
+
+ if ( ! empty( $filters_removed ) ) {
+ foreach ( $filters_removed as $hook => $filters ) {
+ foreach ( $filters as $filter_data ) {
+ add_filter(
+ $hook,
+ $filter_data['callback'],
+ $filter_data['priority'],
+ isset( $filter_data['accepted_args'] ) ? $filter_data['accepted_args'] : 1
+ );
+ }
+ }
+ }
+ }
+
+ /**
+ * Get action/filters to be removed before preparing the item for response.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.9 Removed `"llms_rest_{$this->post_type}_filters_removed_for_reponse"` filter hooks,
+ * `"llms_rest_{$this->post_type}_filters_removed_for_response"` added.
+ *
+ * @param LLMS_Post_Model $object LLMS_Post_Model object.
+ * @return array Array of action/filters to be removed for response.
+ */
+ protected function get_filters_to_be_removed_for_response( $object ) {
+
+ /**
+ * Modify the array of filters to be removed before building the response.
+ *
+ * The dynamic portion of the hook name, `$this->post_type`, refers to the post type slug.
+ *
+ * @since 1.0.0-beta.9
+ *
+ * @param array $filters Array of filters to be removed.
+ * @param LLMS_Post_Model $object LLMS_Post_Model object.
+ */
+ return apply_filters( "llms_rest_{$this->post_type}_filters_removed_for_response", array(), $object );
+
+ }
+
+ /**
+ * Determines validity and normalizes the given status parameter.
+ * Heavily based on WP_REST_Posts_Controller::handle_status_param().
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.18 Use plural post type name.
+ *
+ * @param string $status Status.
+ * @return string|WP_Error Status or WP_Error if lacking the proper permission.
+ */
+ protected function handle_status_param( $status ) {
+
+ $post_type_object = get_post_type_object( $this->post_type );
+ $post_type_name = $post_type_object->labels->name;
+
+ switch ( $status ) {
+ case 'draft':
+ case 'pending':
+ break;
+ case 'private':
+ if ( ! current_user_can( $post_type_object->cap->publish_posts ) ) {
+ // Translators: %s = The post type name.
+ return llms_rest_authorization_required_error( sprintf( __( 'Sorry, you are not allowed to create private %s.', 'lifterlms' ), $post_type_name ) );
+ }
+ break;
+ case 'publish':
+ case 'future':
+ if ( ! current_user_can( $post_type_object->cap->publish_posts ) ) {
+ // Translators: $s = The post type name.
+ return llms_rest_authorization_required_error( sprintf( __( 'Sorry, you are not allowed to publish %s.', 'lifterlms' ), $post_type_name ) );
+ }
+ break;
+ default:
+ if ( ! get_post_status_object( $status ) ) {
+ $status = 'draft';
+ }
+ break;
+ }
+
+ return $status;
+ }
+
+ /**
+ * Determines the featured media based on a request param
+ *
+ * Heavily based on WP_REST_Posts_Controller::handle_featured_media().
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.18 Fixed call to undefined function `llms_bad_request_error()`, must be `llms_rest_bad_request_error()`.
+ *
+ * @param int $featured_media Featured Media ID.
+ * @param int $object_id LLMS object ID.
+ * @return bool|WP_Error Whether the post thumbnail was successfully deleted, otherwise WP_Error.
+ */
+ protected function handle_featured_media( $featured_media, $object_id ) {
+
+ $featured_media = (int) $featured_media;
+ if ( $featured_media ) {
+ $result = set_post_thumbnail( $object_id, $featured_media );
+ if ( $result ) {
+ return true;
+ } else {
+ return llms_rest_bad_request_error( __( 'Invalid featured media ID.', 'lifterlms' ) );
+ }
+ } else {
+ return delete_post_thumbnail( $object_id );
+ }
+
+ }
+
+ /**
+ * Updates the post's terms from a REST request.
+ *
+ * Heavily based on WP_REST_Posts_Controller::handle_terms().
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.2 Filter taxonomies by `public` property instead of `show_in_rest`.
+ * @since 1.0.0-beta.3 Filter taxonomies by `show_in_llms_rest` property instead of `public`.
+ *
+ * @param int $object_id The post ID to update the terms form.
+ * @param WP_REST_Request $request The request object with post and terms data.
+ * @return null|WP_Error WP_Error on an error assigning any of the terms, otherwise null.
+ */
+ protected function handle_terms( $object_id, $request ) {
+
+ $taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_llms_rest' => true ) );
+
+ foreach ( $taxonomies as $taxonomy ) {
+ $base = $this->get_taxonomy_rest_base( $taxonomy );
+
+ if ( ! isset( $request[ $base ] ) ) {
+ continue;
+ }
+
+ // We could use LLMS_Post_Model::set_terms() but it doesn't return a WP_Error which can be useful here.
+ $result = wp_set_object_terms( $object_id, $request[ $base ], $taxonomy->name );
+ if ( is_wp_error( $result ) ) {
+ return $result;
+ }
+ }
+ }
+
+ /**
+ * Checks whether current user can assign all terms sent with the current request.
+ *
+ * Heavily based on WP_REST_Posts_Controller::check_assign_terms_permission().
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.3 Filter taxonomies by `show_in_llms_rest` property instead of `public`.
+ *
+ * @param WP_REST_Request $request The request object with post and terms data.
+ * @return bool Whether the current user can assign the provided terms.
+ */
+ protected function check_assign_terms_permission( $request ) {
+ $taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_llms_rest' => true ) );
+ foreach ( $taxonomies as $taxonomy ) {
+ $base = $this->get_taxonomy_rest_base( $taxonomy );
+
+ if ( ! isset( $request[ $base ] ) ) {
+ continue;
+ }
+
+ foreach ( $request[ $base ] as $term_id ) {
+ // Invalid terms will be rejected later.
+ if ( ! get_term( $term_id, $taxonomy->name ) ) {
+ continue;
+ }
+
+ if ( ! current_user_can( 'assign_term', (int) $term_id ) ) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Maps a taxonomy name to the relative rest base
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param object $taxonomy The taxonomy object.
+ * @return string The taxonomy rest base.
+ */
+ protected function get_taxonomy_rest_base( $taxonomy ) {
+
+ return ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;
+
+ }
+
+ /**
+ * Checks if a post can be edited.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return bool Whether the post can be created
+ */
+ protected function check_create_permission() {
+
+ $post_type = get_post_type_object( $this->post_type );
+ return current_user_can( $post_type->cap->publish_posts );
+
+ }
+
+ /**
+ * Checks if an llms post can be edited.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param LLMS_Post_Model $object Optional. The LLMS_Post_model object. Default null.
+ * @return bool Whether the post can be edited.
+ */
+ protected function check_update_permission( $object = null ) {
+
+ $post_type = get_post_type_object( $this->post_type );
+ return is_null( $object ) ? current_user_can( $post_type->cap->edit_posts ) : current_user_can( $post_type->cap->edit_post, $object->get( 'id' ) );
+
+ }
+
+ /**
+ * Checks if an llms post can be deleted.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param LLMS_Post_Model $object The LLMS_Post_model object.
+ * @return bool Whether the post can be deleted.
+ */
+ protected function check_delete_permission( $object ) {
+
+ $post_type = get_post_type_object( $this->post_type );
+ return current_user_can( $post_type->cap->delete_post, $object->get( 'id' ) );
+
+ }
+
+ /**
+ * Checks if an llms post can be read.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0 Fix fatals when searching for llms post type based resources
+ * but the query post type parameter is forced to be something else.
+ *
+ * @param LLMS_Post_Model $object The LLMS_Post_model object.
+ * @return bool Whether the post can be read.
+ */
+ protected function check_read_permission( $object ) {
+
+ if ( is_wp_error( $object ) ) {
+ return false;
+ }
+
+ $post_type = get_post_type_object( $this->post_type );
+ $status = $object->get( 'status' );
+ $id = $object->get( 'id' );
+ $wp_post = $object->get( 'post' );
+
+ // Is the post readable?
+ if ( 'publish' === $status || current_user_can( $post_type->cap->read_post, $id ) ) {
+ return true;
+ }
+
+ $post_status_obj = get_post_status_object( $status );
+ if ( $post_status_obj && $post_status_obj->public ) {
+ return true;
+ }
+
+ // Can we read the parent if we're inheriting?
+ if ( 'inherit' === $status && $wp_post->post_parent > 0 ) {
+ $parent = get_post( $wp_post->post_parent );
+ if ( $parent ) {
+ return $this->check_read_permission( $parent );
+ }
+ }
+
+ /*
+ * If there isn't a parent, but the status is set to inherit, assume
+ * it's published (as per get_post_status()).
+ */
+ if ( 'inherit' === $status ) {
+ return true;
+ }
+
+ return false;
+
+ }
+
+
+ /**
+ * Checks if the user can access password-protected content.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param LLMS_Post_Model $object The LLMS_Post_model object.
+ * @param WP_REST_Request $request Request data to check.
+ * @return bool True if the user can access password-protected content, otherwise false.
+ */
+ public function can_access_password_content( $object, $request ) {
+
+ if ( empty( $object->get( 'password' ) ) ) {
+ // No filter required.
+ return false;
+ }
+
+ // Edit context always gets access to password-protected posts.
+ if ( 'edit' === $request['context'] ) {
+ return true;
+ }
+
+ // No password, no auth.
+ if ( empty( $request['password'] ) ) {
+ return false;
+ }
+
+ // Double-check the request password.
+ return hash_equals( $object->get( 'password' ), $request['password'] );
+ }
+
+ /**
+ * Get the llms post model class from the controller post type.
+ *
+ * @since 1.0.0-beta.9
+ *
+ * @return string|bool The llms post model class name if it exists or FALSE if it doesn't.
+ */
+ protected function llms_post_class_from_post_type() {
+
+ if ( isset( $this->llms_post_class ) ) {
+ return $this->llms_post_class;
+ }
+
+ $post_type = explode( '_', str_replace( 'llms_', '', $this->post_type ) );
+ $class = 'LLMS';
+
+ foreach ( $post_type as $part ) {
+ $class .= '_' . ucfirst( $part );
+ }
+
+ if ( class_exists( $class ) ) {
+ $this->llms_post_class = $class;
+ } else {
+ $this->llms_post_class = false;
+ }
+
+ return $this->llms_post_class;
+ }
+
+ /**
+ * Sanitizes and validates the list of post statuses, including whether the user can query private statuses
+ *
+ * Heavily based on the WordPress WP_REST_Posts_Controller::sanitize_post_statuses().
+ *
+ * @since 1.0.0-beta.19
+ *
+ * @param string|array $statuses One or more post statuses.
+ * @param WP_REST_Request $request Full details about the request.
+ * @param string $parameter Additional parameter to pass to validation.
+ * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
+ */
+ public function sanitize_post_statuses( $statuses, $request, $parameter ) {
+ $statuses = wp_parse_slug_list( $statuses );
+
+ $attributes = $request->get_attributes();
+ $default_status = $attributes['args']['status']['default'];
+
+ foreach ( $statuses as $status ) {
+ if ( $status === $default_status ) {
+ continue;
+ }
+
+ $post_type_obj = get_post_type_object( $this->post_type );
+
+ if ( current_user_can( $post_type_obj->cap->edit_posts ) || 'private' === $status && current_user_can( $post_type_obj->cap->read_private_posts ) ) {
+ $result = rest_validate_request_arg( $status, $request, $parameter );
+ if ( is_wp_error( $result ) ) {
+ return $result;
+ }
+ } else {
+ return llms_rest_authorization_required_error( __( 'Status is forbidden.', 'lifterlms' ) );
+ }
+ }
+
+ return $statuses;
+ }
+
+}
diff --git a/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php
new file mode 100644
index 0000000000..57e664442f
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php
@@ -0,0 +1,788 @@
+ 'ID',
+ 'username' => 'user_login',
+ 'email' => 'user_email',
+ 'url' => 'user_url',
+ 'name' => 'display_name',
+ );
+
+ /**
+ * Constructor.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @return void
+ */
+ public function __construct() {
+ $this->meta = new WP_REST_User_Meta_Fields();
+ }
+
+ /**
+ * Determine if the current user has permissions to manage the role(s) present in a request
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_REST_Request $request Request object.
+ * @return true|WP_Error
+ */
+ protected function check_roles_permissions( $request ) {
+
+ global $wp_roles;
+
+ $schema = $this->get_item_schema();
+ $roles = array();
+ if ( ! empty( $request['roles'] ) ) {
+ $roles = $request['roles'];
+ } elseif ( ! empty( $schema['properties']['roles']['default'] ) ) {
+ $roles = $schema['properties']['roles']['default'];
+ }
+
+ foreach ( $roles as $role ) {
+
+ if ( ! isset( $wp_roles->role_objects[ $role ] ) ) {
+ // Translators: %s = role key.
+ return llms_rest_bad_request_error( sprintf( __( 'The role %s does not exist.', 'lifterlms' ), $role ) );
+ }
+
+ $potential_role = $wp_roles->role_objects[ $role ];
+
+ /*
+ * Don't let anyone with 'edit_users' (admins) edit their own role to something without it.
+ * Multisite super admins can freely edit their blog roles -- they possess all caps.
+ */
+ if ( ! ( is_multisite()
+ && current_user_can( 'manage_sites' ) )
+ && get_current_user_id() === $request['id']
+ && ! $potential_role->has_cap( 'edit_users' )
+ ) {
+ return llms_rest_authorization_required_error( __( 'You are not allowed to give users this role.', 'lifterlms' ) );
+ }
+
+ // Include admin functions to get access to `get_editable_roles()`.
+ require_once ABSPATH . 'wp-admin/includes/admin.php';
+
+ // The new role must be editable by the logged-in user.
+ $editable_roles = get_editable_roles();
+
+ if ( empty( $editable_roles[ $role ] ) ) {
+ return llms_rest_authorization_required_error( __( 'You are not allowed to give users this role.', 'lifterlms' ) );
+ }
+ }
+
+ return true;
+
+ }
+
+ /**
+ * Insert the prepared data into the database
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $prepared Prepared item data.
+ * @param WP_REST_Request $request Request object.
+ * @return obj Object Instance of object from `$this->get_object()`.
+ */
+ protected function create_object( $prepared, $request ) {
+
+ $object_id = wp_insert_user( $prepared );
+
+ if ( is_wp_error( $object_id ) ) {
+ return $object_id;
+ }
+
+ return $this->update_additional_data( $object_id, $prepared, $request );
+
+ }
+
+
+ /**
+ * Delete the object
+ *
+ * Note: we do not return 404s when the resource to delete cannot be found. We assume it's already been deleted and respond with 204.
+ * Errors returned by this method should be any error other than a 404!
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param obj $object Instance of the object from `$this->get_object()`.
+ * @param WP_REST_Request $request Request object.
+ * @return true|WP_Error `true` when the object is removed, `WP_Error` on failure.
+ */
+ protected function delete_object( $object, $request ) {
+
+ $id = $object->get( 'id' );
+ $reassign = 0 === $request['reassign'] ? null : $request['reassign'];
+
+ if ( ! empty( $reassign ) ) {
+ if ( $reassign === $id || ! get_userdata( $reassign ) ) {
+ return llms_rest_bad_request_error( __( 'Invalid user ID for reassignment.', 'lifterlms' ) );
+ }
+ }
+
+ // Include admin user functions to get access to `wp_delete_user()`.
+ require_once ABSPATH . 'wp-admin/includes/user.php';
+
+ $result = wp_delete_user( $id, $reassign );
+
+ if ( ! $result ) {
+ return llms_rest_server_error( __( 'The user could not be deleted.', 'lifterlms' ) );
+ }
+
+ return true;
+
+ }
+
+ /**
+ * Determine if the current user can view the object
+ *
+ * @since 1.0.0-beta.7
+ *
+ * @param object $object Object.
+ * @return bool
+ */
+ protected function check_read_object_permissions( $object ) {
+ return $this->check_read_item_permissions( $this->get_object_id( $object ) );
+ }
+
+ /**
+ * Retrieves the query params for the objects collection
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array Collection parameters.
+ */
+ public function get_collection_params() {
+
+ $params = parent::get_collection_params();
+
+ $params['roles'] = array(
+ 'description' => __( 'Include only users keys matching matching a specific role. Accepts a single role or a comma separated list of roles.', 'lifterlms' ),
+ 'type' => 'array',
+ 'items' => array(
+ 'type' => 'string',
+ 'enum' => $this->get_enum_roles(),
+ ),
+ );
+
+ return $params;
+
+ }
+
+ /**
+ * Retrieve arguments for deleting a resource
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array
+ */
+ public function get_delete_item_args() {
+ return array(
+ 'reassign' => array(
+ 'type' => 'integer',
+ 'description' => __( 'Reassign the deleted user\'s posts and links to this user ID.', 'lifterlms' ),
+ 'default' => 0,
+ 'sanitize_callback' => 'absint',
+ ),
+ );
+ }
+
+ /**
+ * Retrieve an array of allowed user role values.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return string[]
+ */
+ protected function get_enum_roles() {
+
+ global $wp_roles;
+ return array_keys( $wp_roles->roles );
+
+ }
+
+ /**
+ * Get the item schema base.
+ *
+ * @since 1.0.0-beta.27
+ *
+ * @return array
+ */
+ protected function get_item_schema_base() {
+
+ $schema = array(
+ '$schema' => 'http://json-schema.org/draft-04/schema#',
+ 'title' => $this->resource_name,
+ 'type' => 'object',
+ 'properties' => array(
+ 'id' => array(
+ 'description' => __( 'Unique identifier for the user.', 'lifterlms' ),
+ 'type' => 'integer',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ ),
+ 'username' => array(
+ 'description' => __( 'Login name for the user.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => array( $this, 'sanitize_username' ),
+ ),
+ ),
+ 'name' => array(
+ 'description' => __( 'Display name for the user.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ 'first_name' => array(
+ 'description' => __( 'First name for the user.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ 'last_name' => array(
+ 'description' => __( 'Last name for the user.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ 'email' => array(
+ 'description' => __( 'The email address for the user.', 'lifterlms' ),
+ 'type' => 'string',
+ 'format' => 'email',
+ 'context' => array( 'edit' ),
+ 'required' => true,
+ ),
+ 'url' => array(
+ 'description' => __( 'URL of the user.', 'lifterlms' ),
+ 'type' => 'string',
+ 'format' => 'uri',
+ 'context' => array( 'view', 'edit' ),
+ ),
+ 'description' => array(
+ 'description' => __( 'Description of the user.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'view', 'edit' ),
+ ),
+ 'nickname' => array(
+ 'description' => __( 'The nickname for the user.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ 'registered_date' => array(
+ 'description' => __( 'Registration date for the user.', 'lifterlms' ),
+ 'type' => 'string',
+ 'format' => 'date-time',
+ 'context' => array( 'edit' ),
+ 'readonly' => true,
+ ),
+ 'roles' => array(
+ 'description' => __( 'Roles assigned to the user.', 'lifterlms' ),
+ 'type' => 'array',
+ 'items' => array(
+ 'type' => 'string',
+ 'enum' => $this->get_enum_roles(),
+ ),
+ 'context' => array( 'edit' ),
+ 'default' => array( 'student' ),
+ ),
+ 'password' => array(
+ 'description' => __( 'Password for the user (never included).', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array(), // Password is never displayed.
+ 'arg_options' => array(
+ 'sanitize_callback' => array( $this, 'sanitize_password' ),
+ ),
+ ),
+ 'billing_address_1' => array(
+ 'description' => __( 'User address line 1.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ 'billing_address_2' => array(
+ 'description' => __( 'User address line 2.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ 'billing_city' => array(
+ 'description' => __( 'User address city name.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ 'billing_state' => array(
+ 'description' => __( 'User address ISO code for the state, province, or district.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ 'billing_postcode' => array(
+ 'description' => __( 'User address postal code.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ 'billing_country' => array(
+ 'description' => __( 'User address ISO code for the country.', 'lifterlms' ),
+ 'type' => 'string',
+ 'context' => array( 'edit' ),
+ 'arg_options' => array(
+ 'sanitize_callback' => 'sanitize_text_field',
+ ),
+ ),
+ ),
+ );
+
+ if ( get_option( 'show_avatars' ) ) {
+
+ $avatar_properties = array();
+ foreach ( rest_get_avatar_sizes() as $size ) {
+ $avatar_properties[ $size ] = array(
+ // Translators: %d = avatar image size in pixels.
+ 'description' => sprintf( __( 'Avatar URL with image size of %d pixels.', 'lifterlms' ), $size ),
+ 'type' => 'string',
+ 'format' => 'uri',
+ 'context' => array( 'view', 'edit' ),
+ );
+ }
+
+ $schema['properties']['avatar_urls'] = array(
+ 'description' => __( 'Avatar URLs for the user.', 'lifterlms' ),
+ 'type' => 'object',
+ 'context' => array( 'view', 'edit' ),
+ 'readonly' => true,
+ 'properties' => $avatar_properties,
+ );
+
+ }
+
+ return $schema;
+
+ }
+
+ /**
+ * Retrieve a query object based on arguments from a `get_items()` (collection) request
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.12 Parse `search` and `search_columns` args.
+ *
+ * @param array $prepared Array of collection arguments.
+ * @param WP_REST_Request $request Request object.
+ * @return WP_User_Query
+ */
+ protected function get_objects_query( $prepared, $request ) {
+
+ if ( 'id' === $prepared['orderby'] ) {
+ $prepared['orderby'] = 'ID';
+ } elseif ( 'registered_date' === $prepared['orderby'] ) {
+ $prepared['orderby'] = 'registered';
+ }
+
+ $args = array(
+ 'paged' => $prepared['page'],
+ 'number' => $prepared['per_page'],
+ 'order' => strtoupper( $prepared['order'] ),
+ 'orderby' => $prepared['orderby'],
+ );
+
+ if ( ! empty( $prepared['roles'] ) ) {
+ $args['role__in'] = $prepared['roles'];
+ }
+
+ if ( ! empty( $prepared['include'] ) ) {
+ $args['include'] = $prepared['include'];
+ }
+
+ if ( ! empty( $prepared['exclude'] ) ) {
+ $args['exclude'] = $prepared['exclude'];
+ }
+
+ if ( ! empty( $prepared['search'] ) ) {
+ $args['search'] = $prepared['search'];
+ }
+
+ if ( ! empty( $prepared['search_columns'] ) ) {
+ $args['search_columns'] = $prepared['search_columns'];
+ }
+
+ return new WP_User_Query( $args );
+
+ }
+
+
+ /**
+ * Retrieve an array of objects from the result of `$this->get_objects_query()`
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param obj $query Objects query result.
+ * @return WP_User[]
+ */
+ protected function get_objects_from_query( $query ) {
+ return $query->get_results();
+ }
+
+ /**
+ * Retrieve pagination information from an objects query.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_User_Query $query Objects query result returned by {@see LLMS_REST_Users_Controller::get_objects_query()}.
+ * @param array $prepared Array of collection arguments.
+ * @param WP_REST_Request $request Request object.
+ * @return array {
+ * Array of pagination information.
+ *
+ * @type int $current_page Current page number.
+ * @type int $total_results Total number of results.
+ * @type int $total_pages Total number of results pages.
+ * }
+ */
+ protected function get_pagination_data_from_query( $query, $prepared, $request ) {
+
+ $current_page = absint( $prepared['page'] );
+ $total_results = $query->get_total();
+ $total_pages = absint( ceil( $total_results / $prepared['per_page'] ) );
+
+ return compact( 'current_page', 'total_results', 'total_pages' );
+
+ }
+
+ /**
+ * Map request keys to database keys for insertion
+ *
+ * Array keys are the request fields (as defined in the schema) and
+ * array values are the database fields.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.11 Correctly map request's `billing_postcode` param to `billing_zip` meta.
+ *
+ * @return array
+ */
+ protected function map_schema_to_database() {
+
+ $map = parent::map_schema_to_database();
+
+ $map['username'] = 'user_login';
+ $map['password'] = 'user_pass';
+ $map['name'] = 'display_name';
+ $map['email'] = 'user_email';
+ $map['url'] = 'user_url';
+ $map['registered_date'] = 'user_registered';
+ $map['billing_postcode'] = 'billing_zip';
+
+ // Not inserted/read via database calls.
+ unset( $map['roles'], $map['avatar_urls'] );
+
+ return $map;
+
+ }
+
+ /**
+ * Prepare request arguments for a database insert/update
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_Rest_Request $request Request object.
+ * @return array
+ */
+ protected function prepare_item_for_database( $request ) {
+
+ $prepared = parent::prepare_item_for_database( $request );
+
+ // If we're creating a new item, maybe add some defaults.
+ if ( empty( $prepared['id'] ) ) {
+
+ // Pass an explicit false to `wp_insert_user()`.
+ $prepared['role'] = false;
+
+ if ( empty( $prepared['user_pass'] ) ) {
+ $prepared['user_pass'] = wp_generate_password( 22 );
+ }
+
+ if ( empty( $prepared['user_login'] ) ) {
+ $prepared['user_login'] = LLMS_Person_Handler::generate_username( $prepared['user_email'] );
+ }
+ }
+
+ return $prepared;
+
+ }
+
+ /**
+ * Prepare an object for response
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.14 Only add remapped keys to the response when the schema key is present in the expected response fields array.
+ *
+ * @param LLMS_Abstract_User_Data $object User object.
+ * @param WP_REST_Request $request Request object.
+ * @return array
+ */
+ protected function prepare_object_for_response( $object, $request ) {
+
+ $prepared = array();
+ $map = array_flip( $this->map_schema_to_database() );
+ $fields = $this->get_fields_for_response( $request );
+
+ // Write Only.
+ unset( $map['user_pass'] );
+
+ foreach ( $map as $db_key => $schema_key ) {
+ if ( in_array( $schema_key, $fields, true ) ) {
+ $prepared[ $schema_key ] = $object->get( $db_key );
+ }
+ }
+
+ if ( in_array( 'roles', $fields, true ) ) {
+ $prepared['roles'] = $object->get_user()->roles;
+ }
+
+ if ( in_array( 'avatar_urls', $fields, true ) ) {
+ $prepared['avatar_urls'] = rest_get_avatar_urls( $object->get( 'user_email' ) );
+ }
+
+ return $prepared;
+
+ }
+
+ /**
+ * Validate a username is valid and allowed
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param string $value User-submitted username.
+ * @param WP_REST_Request $request Request object.
+ * @param string $param Parameter name.
+ * @return WP_Error|string Sanitized username if valid or error object.
+ */
+ public function sanitize_password( $value, $request, $param ) {
+
+ $password = (string) $value;
+
+ if ( false !== strpos( $password, '\\' ) ) {
+ return llms_rest_bad_request_error( __( 'Passwords cannot contain the "\\" character.', 'lifterlms' ) );
+ }
+
+ // @todo: Should validate against password strength too, maybe?
+
+ return $password;
+
+ }
+
+ /**
+ * Validate a username is valid and allowed
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param string $value User-submitted username.
+ * @param WP_REST_Request $request Request object.
+ * @param string $param Parameter name.
+ * @return WP_Error|string Sanitized username if valid or error object.
+ */
+ public function sanitize_username( $value, $request, $param ) {
+
+ $username = (string) $value;
+
+ if ( ! validate_username( $username ) ) {
+ return llms_rest_bad_request_error( __( 'Username contains invalid characters.', 'lifterlms' ) );
+ }
+
+ /**
+ * Filter defined in WP Core.
+ *
+ * @link https://developer.wordpress.org/reference/hooks/illegal_user_logins/
+ *
+ * @param array $illegal_logins Array of banned usernames.
+ */
+ $illegal_logins = (array) apply_filters( 'illegal_user_logins', array() );
+ if ( in_array( strtolower( $username ), array_map( 'strtolower', $illegal_logins ), true ) ) {
+ return llms_rest_bad_request_error( __( 'Username is not allowed.', 'lifterlms' ) );
+ }
+
+ return $username;
+
+ }
+
+ /**
+ * Updates additional information not handled by WP Core insert/update user functions
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.10 Fixed setting roles instead of appending them.
+ * @since 1.0.0-beta.11 Made sure to set user's meta with the correct db key.
+ *
+ * @param int $object_id WP User id.
+ * @param array $prepared Prepared item data.
+ * @param WP_REST_Request $request Request object.
+ * @return LLMS_Abstract_User_Data|WP_error
+ */
+ protected function update_additional_data( $object_id, $prepared, $request ) {
+
+ $object = $this->get_object( $object_id );
+
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $metas = array(
+ 'billing_address_1',
+ 'billing_address_2',
+ 'billing_city',
+ 'billing_state',
+ 'billing_postcode',
+ 'billing_country',
+ );
+
+ $map = $this->map_schema_to_database();
+
+ foreach ( $metas as $meta ) {
+ if ( ! empty( $map[ $meta ] ) && ! empty( $prepared[ $map[ $meta ] ] ) ) {
+ $object->set( $map[ $meta ], $prepared[ $map[ $meta ] ] );
+ }
+ }
+
+ if ( ! empty( $request['roles'] ) ) {
+ $user = $object->get_user();
+ $user->set_role( '' );
+ foreach ( $request['roles'] as $role ) {
+ $user->add_role( $role );
+ }
+ }
+
+ return $object;
+
+ }
+
+ /**
+ * Update item
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param WP_REST_Request $request Request object.
+ * @return WP_REST_Response|WP_Error Response object or `WP_Error` on failure.
+ */
+ public function update_item( $request ) {
+
+ $object = $this->get_object( $request['id'] );
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ // Ensure we're not trying to update the email to an email that already exists.
+ $owner_id = email_exists( $request['email'] );
+
+ if ( $owner_id && $owner_id !== $request['id'] ) {
+ return llms_rest_bad_request_error( __( 'Invalid email address.', 'lifterlms' ) );
+ }
+
+ // Cannot change a username.
+ if ( ! empty( $request['username'] ) && $request['username'] !== $object->get( 'user_login' ) ) {
+ return llms_rest_bad_request_error( __( 'Username is not editable.', 'lifterlms' ) );
+ }
+
+ return parent::update_item( $request );
+
+ }
+
+ /**
+ * Update the object in the database with prepared data
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $prepared Prepared item data.
+ * @param WP_REST_Request $request Request object.
+ * @return obj Object Instance of object from `$this->get_object()`.
+ */
+ protected function update_object( $prepared, $request ) {
+
+ $prepared['ID'] = $prepared['id'];
+
+ $object_id = wp_update_user( $prepared );
+ if ( is_wp_error( $object_id ) ) {
+ return $object_id;
+ }
+
+ unset( $prepared['ID'] );
+
+ return $this->update_additional_data( $object_id, $prepared, $request );
+
+ }
+
+}
diff --git a/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-webhook-data.php b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-webhook-data.php
new file mode 100644
index 0000000000..b064d9c743
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-webhook-data.php
@@ -0,0 +1,323 @@
+ format
+ *
+ * @var string[]
+ */
+ protected $columns = array(
+
+ 'status' => '%s',
+ 'name' => '%s',
+ 'delivery_url' => '%s',
+ 'secret' => '%s',
+ 'topic' => '%s',
+ 'user_id' => '%d',
+ 'created' => '%s',
+ 'updated' => '%s',
+ 'failure_count' => '%d',
+
+ );
+
+ /**
+ * Database Table Name
+ *
+ * @var string
+ */
+ protected $table = 'webhooks';
+
+ /**
+ * The record type
+ *
+ * Used for filters/actions.
+ *
+ * @var string
+ */
+ protected $type = 'webhook';
+
+ /**
+ * Constructor
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param int $id API Key ID.
+ * @param bool $hydrate If true, hydrates the object on instantiation if an ID is supplied.
+ */
+ public function __construct( $id = null, $hydrate = true ) {
+
+ $this->id = $id;
+ if ( $this->id && $hydrate ) {
+ $this->hydrate();
+ }
+
+ // Adds created and updated dates on instantiation.
+ parent::__construct();
+
+ }
+
+
+ /**
+ * Retrieve an admin nonce url for deleting an API key.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return string
+ */
+ public function get_delete_link() {
+
+ return add_query_arg(
+ array(
+ 'section' => 'webhooks',
+ 'delete-webhook' => $this->get( 'id' ),
+ 'delete-webhook-nonce' => wp_create_nonce( 'delete' ),
+ ),
+ LLMS_REST_API()->keys()->get_admin_url()
+ );
+
+ }
+
+ /**
+ * Generate a delivery signature from a delivery payload.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param string $payload JSON-encoded payload.
+ * @return string
+ */
+ public function get_delivery_signature( $payload ) {
+
+ /**
+ * Allow overriding of signature generation.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param string $signature Custom signature. Return a string to replace the default signature.
+ * @param string $payload JSON-encoded body to be delivered.
+ * @param int $id Webhook id.
+ */
+ $signature = apply_filters( 'llms_rest_webhook_signature_pre', null, $payload, $this->get( 'id' ) );
+ if ( $signature && is_string( $signature ) ) {
+ return $signature;
+ }
+
+ /**
+ * Customize the hash algorithm used to generate the webhook delivery signature.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param string $algo Hash algorithm. Defaults to 'sha256'. List of supported algorithms available at https://www.php.net/manual/en/function.hash-hmac-algos.php.
+ * @param string $payload JSON-encoded body to be delivered.
+ * @param int $id Webhook ID.
+ */
+ $hash_algo = apply_filters( 'llms_rest_webhook_hash_algorithm', 'sha256', $payload, $this->get( 'id' ) );
+ $ts = llms_current_time( 'timestamp' );
+ $message = $ts . '.' . $payload;
+ $hash = hash_hmac( $hash_algo, $message, $this->get( 'secret' ) );
+
+ return sprintf( 't=%1$d,v1=%2$s', $ts, $hash );
+
+ }
+
+ /**
+ * Retrieve the admin URL where the api key is managed.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return string
+ */
+ public function get_edit_link() {
+ return add_query_arg(
+ array(
+ 'section' => 'webhooks',
+ 'edit-webhook' => $this->get( 'id' ),
+ ),
+ LLMS_REST_API()->keys()->get_admin_url()
+ );
+ }
+
+ /**
+ * Retrieve the topic event
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return string
+ */
+ public function get_event() {
+
+ $topic = explode( '.', $this->get( 'topic' ) );
+ return apply_filters( 'llms_rest_webhook_get_event', isset( $topic[1] ) ? $topic[1] : '', $this->get( 'id' ) );
+
+ }
+
+ /**
+ * Retrieve an array of hooks for the webhook topic.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return string[]
+ */
+ public function get_hooks() {
+
+ if ( 'action' === $this->get_resource() ) {
+ $hooks = array( $this->get_event() => 1 );
+ } else {
+ $all_hooks = LLMS_REST_API()->webhooks()->get_hooks();
+ $topic = $this->get( 'topic' );
+ $hooks = isset( $all_hooks[ $topic ] ) ? $all_hooks[ $topic ] : array();
+ }
+
+ return apply_filters( 'llms_rest_webhook_get_hooks', $hooks, $this->get( 'id' ) );
+
+ }
+
+ /**
+ * Retrieve a payload for webhook delivery.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.6 Retrieve proper payload for enrollment and progress resources.
+ *
+ * @param array $args Numeric array of arguments from the originating hook.
+ * @return array
+ */
+ protected function get_payload( $args ) {
+
+ // Switch current user to the user who created the webhook.
+ $current_user = get_current_user_id();
+ wp_set_current_user( $this->get( 'user_id' ) );
+
+ $resource = $this->get_resource();
+ $event = $this->get_event();
+
+ $payload = array();
+ if ( 'deleted' === $event ) {
+
+ if ( in_array( $this->get_resource(), array( 'enrollment', 'progress' ), true ) ) {
+ $payload['student_id'] = $args[0];
+ $payload['post_id'] = $args[1];
+ } else {
+ $payload['id'] = $args[0];
+ }
+ } elseif ( 'action' === $resource ) {
+
+ $payload['action'] = current( $this->get_hooks() );
+ $payload['args'] = $args;
+
+ } else {
+
+ if ( 'enrollment' === $resource ) {
+ $endpoint = sprintf( '/llms/v1/students/%1$d/enrollments/%2$d', $args[0], $args[1] );
+ } elseif ( 'progress' === $resource ) {
+ $endpoint = sprintf( '/llms/v1/students/%1$d/progress/%2$d', $args[0], $args[1] );
+ } else {
+ $endpoint = sprintf( '/llms/v1/%1$ss/%2$d', $resource, $args[0] );
+ }
+
+ $payload = llms_rest_get_api_endpoint_data( $endpoint );
+
+ }
+
+ // Restore the current user.
+ wp_set_current_user( $current_user );
+
+ /**
+ * Filter the webhook payload prior to delivery
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $payload Webhook payload.
+ * @param string $resource Webhook resource.
+ * @param string $event Webhook event.
+ * @param array $args Numeric array of arguments from the originating hook.
+ * @param LLMS_REST_Webhook $this Webhook object.
+ */
+ return apply_filters( 'llms_rest_webhook_get_payload', $payload, $resource, $event, $args, $this );
+
+ }
+
+ /**
+ * Retrieve the topic resource.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return string
+ */
+ public function get_resource() {
+
+ $topic = explode( '.', $this->get( 'topic' ) );
+ return apply_filters( 'llms_rest_webhook_get_resource', $topic[0], $this->get( 'id' ) );
+
+ }
+
+ /**
+ * Retrieve a user agent string to use for delivering webhooks.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return string
+ */
+ protected function get_user_agent() {
+ global $wp_version;
+ return sprintf( 'LifterLMS/%1$s Hookshot (WordPress/%2$s)', LLMS()->version, $wp_version );
+ }
+
+ /**
+ * Increment delivery failures and after max allowed failures are reached, set status to disabled.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return LLMS_REST_Webhook
+ */
+ protected function set_delivery_failure() {
+
+ $failures = absint( $this->get( 'failure_count' ) );
+
+ $this->set( 'failure_count', ++$failures );
+
+ /**
+ * Filter the number of times a webhook is allowed to fail before it is automatically disabled.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param int $num Number of allowed failures. Default: 5.
+ */
+ $max_allowed = apply_filters( 'llms_rest_webhook_max_delivery_failures', 5 );
+
+ if ( $failures > $max_allowed ) {
+
+ $this->set( 'status', 'disabled' );
+
+ /**
+ * Fires immediately after a webhook has been disabled due to exceeding its maximum allowed failures.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param int $webhook_id ID of the webhook.
+ */
+ do_action( 'llms_rest_webhook_disabled_by_delivery_failures', $this->get( 'id' ) );
+
+ }
+
+ return $this;
+
+ }
+
+}
diff --git a/libraries/lifterlms-rest/includes/abstracts/index.php b/libraries/lifterlms-rest/includes/abstracts/index.php
new file mode 100644
index 0000000000..9c65c1efa6
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/index.php
@@ -0,0 +1 @@
+keys()->delete( llms_filter_input( INPUT_GET, 'revoke-key', FILTER_VALIDATE_INT ) );
+ if ( $delete ) {
+ LLMS_Admin_Notices::flash_notice( esc_html__( 'The API Key has been successfully deleted.', 'lifterlms' ), 'success' );
+ return llms_redirect_and_exit( admin_url( 'admin.php?page=llms-settings&tab=rest-api§ion=keys' ) );
+ }
+ } elseif ( llms_verify_nonce( 'llms_rest_webhook_nonce', 'create-update-webhook', 'POST' ) ) {
+ return $this->handle_webhook_upsert();
+ } elseif ( llms_verify_nonce( 'delete-webhook-nonce', 'delete', 'GET' ) ) {
+ $delete = LLMS_REST_API()->webhooks()->delete( llms_filter_input( INPUT_GET, 'delete-webhook', FILTER_VALIDATE_INT ) );
+ if ( $delete ) {
+ LLMS_Admin_Notices::flash_notice( esc_html__( 'The webhook has been successfully deleted.', 'lifterlms' ), 'success' );
+ return llms_redirect_and_exit( admin_url( 'admin.php?page=llms-settings&tab=rest-api§ion=webhooks' ) );
+ }
+ } elseif ( llms_verify_nonce( 'dl-key-nonce', 'dl-key', 'GET' ) ) {
+ return $this->handle_key_download();
+ }
+
+ return false;
+ }
+
+ /**
+ * Generate and download a api key credentials file.
+ *
+ * @since 1.0.0-beta.3
+ *
+ * @return false|void
+ */
+ protected function handle_key_download() {
+
+ $info = $this->prepare_key_download();
+ if ( ! $info ) {
+ return false;
+ }
+
+ header( 'Content-type: text/plain' );
+ header( 'Content-Disposition: attachment; filename="' . $info['fn'] );
+ header( 'Pragma: no-cache' );
+ header( 'Expires: 0' );
+
+ // Translators: %s = Consumer Key.
+ printf( esc_html__( 'Consumer Key: %s', 'lifterlms' ), esc_html( $info['ck'] ) );
+ echo "\r\n";
+ // Translators: %s = Consumer Secret.
+ printf( esc_html__( 'Consumer Secret: %s', 'lifterlms' ), esc_html( $info['cs'] ) );
+ die();
+ }
+
+ /**
+ * Handle creating/updating a webhook via admin interfaces.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.27 Replaced use of the deprecated `FILTER_SANITIZE_STRING` constant.
+ *
+ * @return true|void|WP_Error true on update success, void (redirect) on creation success, WP_Error on failure.
+ */
+ protected function handle_webhook_upsert() {
+
+ $data = array(
+ 'name' => llms_filter_input_sanitize_string( INPUT_POST, 'llms_rest_webhook_name' ),
+ 'status' => llms_filter_input_sanitize_string( INPUT_POST, 'llms_rest_webhook_status' ),
+ 'topic' => llms_filter_input_sanitize_string( INPUT_POST, 'llms_rest_webhook_topic' ),
+ 'delivery_url' => llms_filter_input( INPUT_POST, 'llms_rest_webhook_delivery_url', FILTER_SANITIZE_URL ),
+ 'secret' => llms_filter_input_sanitize_string( INPUT_POST, 'llms_rest_webhook_secret' ),
+ );
+
+ if ( 'action' === $data['topic'] ) {
+ $data['topic'] .= '.' . llms_filter_input_sanitize_string( INPUT_POST, 'llms_rest_webhook_action' );
+ }
+
+ $hook_id = llms_filter_input( INPUT_POST, 'llms_rest_webhook_id', FILTER_SANITIZE_NUMBER_INT );
+
+ if ( ! $hook_id ) {
+
+ $hook = LLMS_REST_API()->webhooks()->create( $data );
+ if ( ! is_wp_error( $hook ) ) {
+ return llms_redirect_and_exit( $hook->get_edit_link(), array( 'status' => 301 ) );
+ }
+ } else {
+
+ $hook = LLMS_REST_API()->webhooks()->get( $hook_id );
+ if ( ! $hook ) {
+
+ // Translators: %s = Webhook ID.
+ $hook = new WP_Error( 'llms_rest_api_webhook_not_found', sprintf( __( '"%s" is not a valid Webhook.', 'lifterlms' ), $hook_id ) );
+
+ } else {
+
+ $data['id'] = $hook_id;
+ $hook = LLMS_REST_API()->webhooks()->update( $data );
+
+ }
+ }
+
+ if ( is_wp_error( $hook ) ) {
+ // Translators: %1$s = error message; %2$s = error code.
+ LLMS_Admin_Notices::flash_notice( sprintf( __( 'Error: %1$s [Code: %2$s]', 'lifterlms' ), $hook->get_error_message(), $hook->get_error_code() ), 'error' );
+ return $hook;
+ }
+
+ return true;
+ }
+
+ /**
+ * Validates `GET` information from the credential download URL and prepares information for generating the file.
+ *
+ * @since 1.0.0-beta.3
+ * @since 1.0.0-beta.27 Replaced use of the deprecated `FILTER_SANITIZE_STRING` constant.
+ *
+ * @return false|array
+ */
+ protected function prepare_key_download() {
+
+ $key_id = llms_filter_input( INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT );
+ $consumer_key = llms_filter_input_sanitize_string( INPUT_GET, 'ck' );
+
+ // return if missing required fields.
+ if ( ! $key_id || ! $consumer_key ) {
+ return false;
+ }
+
+ // return if key doesn't exist.
+ $key = LLMS_REST_API()->keys()->get( $key_id );
+ if ( ! $key ) {
+ return false;
+ }
+
+ // validate the decoded consumer key looks like the stored truncated key.
+ $consumer_key = base64_decode( $consumer_key ); //phpcs:disable WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode -- This is benign usage.
+ if ( substr( $consumer_key, -7 ) !== $key->get( 'truncated_key' ) ) {
+ return false;
+ }
+
+ return array(
+ 'fn' => sanitize_file_name( $key->get( 'description' ) ) . '.txt',
+ 'ck' => $consumer_key,
+ 'cs' => $key->get( 'consumer_secret' ),
+ );
+ }
+}
+
+return new LLMS_REST_Admin_Form_Controller();
diff --git a/libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php b/libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php
new file mode 100644
index 0000000000..45560080b2
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php
@@ -0,0 +1,313 @@
+ 'top',
+ 'id' => 'rest_keys_options_start',
+ 'type' => 'sectionstart',
+ );
+
+ $settings[] = array(
+ 'title' => $key_id || $add_key ? __( 'API Key Details', 'lifterlms' ) : __( 'API Keys', 'lifterlms' ),
+ 'type' => 'title-with-html',
+ 'id' => 'rest_keys_options_title',
+ 'html' => $key_id || $add_key ? '' : '' . __( 'Add API Key', 'lifterlms' ) . ' ',
+ );
+
+ if ( $add_key || $key_id ) {
+
+ $key = $add_key ? false : new LLMS_REST_API_Key( $key_id );
+ if ( self::$generated_key ) {
+ $key = self::$generated_key;
+ }
+ if ( $add_key || $key->exists() ) {
+
+ $user_id = $key ? $key->get( 'user_id' ) : get_current_user_id();
+
+ $settings[] = array(
+ 'title' => __( 'Description', 'lifterlms' ),
+ 'desc' => ' ' . __( 'A friendly, human-readable, name used to identify the key.', 'lifterlms' ),
+ 'id' => 'llms_rest_key_description',
+ 'type' => 'text',
+ 'value' => $key ? $key->get( 'description' ) : '',
+ 'custom_attributes' => array(
+ 'required' => 'required',
+ ),
+ );
+
+ $settings[] = array(
+ 'title' => __( 'User', 'lifterlms' ),
+ 'class' => 'llms-select2-student',
+ 'desc' => sprintf(
+ // Translators: %1$s = opening anchor tag to capabilities doc; %2$s closing anchor tag.
+ __( 'The owner is used to determine what user %1$scapabilities%2$s are available to the API key.', 'lifterlms' ),
+ '',
+ ' '
+ ),
+ 'custom_attributes' => array(
+ 'data-placeholder' => __( 'Select a user', 'lifterlms' ),
+ ),
+ 'id' => 'llms_rest_key_user_id',
+ 'options' => llms_make_select2_student_array( array( $user_id ) ),
+ 'type' => 'select',
+ );
+
+ $settings[] = array(
+ 'title' => __( 'Permissions', 'lifterlms' ),
+ 'desc' => ' ' . sprintf(
+ // Translators: %1$s = opening anchor tag to doc; %2$s closing anchor tag.
+ __( 'Determines what kind of requests can be made with the API key. %1$sRead more%2$s.', 'lifterlms' ),
+ '',
+ ' '
+ ),
+ 'id' => 'llms_rest_key_permissions',
+ 'type' => 'select',
+ 'options' => LLMS_REST_API()->keys()->get_permissions(),
+ 'value' => $key ? $key->get( 'permissions' ) : '',
+ );
+
+ if ( $key && ! self::$generated_key ) {
+
+ $settings[] = array(
+ 'title' => __( 'Consumer key ending in', 'lifterlms' ),
+ 'custom_attributes' => array(
+ 'readonly' => 'readonly',
+ ),
+ 'class' => 'code',
+ 'id' => 'llms_rest_key__read_only_key',
+ 'type' => 'text',
+ 'value' => '…' . $key->get( 'truncated_key' ),
+ );
+
+ $settings[] = array(
+ 'title' => __( 'Last accessed at', 'lifterlms' ),
+ 'custom_attributes' => array(
+ 'readonly' => 'readonly',
+ ),
+ 'id' => 'llms_rest_key__read_only_date',
+ 'type' => 'text',
+ 'value' => $key->get_last_access_date(),
+ );
+
+ } elseif ( self::$generated_key ) {
+
+ $settings[] = array(
+ 'type' => 'custom-html',
+ 'id' => 'llms_rest_key_onetime_notice',
+ 'value' => '' . __( 'Make sure to copy or download the consumer key and consumer secret. After leaving this page they will not be displayed again.', 'lifterlms' ) . '
',
+ );
+
+ $settings[] = array(
+ 'title' => __( 'Consumer key', 'lifterlms' ),
+ 'custom_attributes' => array(
+ 'readonly' => 'readonly',
+ ),
+ 'css' => 'width:400px',
+ 'class' => 'code widefat',
+ 'id' => 'llms_rest_key__read_only_key',
+ 'type' => 'text',
+ 'value' => $key->get( 'consumer_key_one_time' ),
+ );
+
+ $settings[] = array(
+ 'title' => __( 'Consumer secret', 'lifterlms' ),
+ 'custom_attributes' => array(
+ 'readonly' => 'readonly',
+ ),
+ 'css' => 'width:400px',
+ 'class' => 'code widefat',
+ 'id' => 'llms_rest_key__read_only_secret',
+ 'type' => 'text',
+ 'value' => $key->get( 'consumer_secret' ),
+ );
+
+ }
+
+ $buttons = ' ';
+ if ( self::$generated_key ) {
+ $download_url = wp_nonce_url(
+ admin_url(
+ add_query_arg(
+ array(
+ 'id' => $key->get( 'id' ),
+ 'ck' => base64_encode( $key->get( 'consumer_key_one_time' ) ), //phpcs:disable WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode -- This is benign usage.
+ ),
+ 'admin.php'
+ )
+ ),
+ 'dl-key',
+ 'dl-key-nonce'
+ );
+ $buttons .= ' ' . __( 'Download Keys', 'lifterlms' ) . ' ';
+ } else {
+ $buttons .= '' . __( 'Save', 'lifterlms' ) . ' ';
+ }
+ if ( $key ) {
+ $buttons .= $buttons ? ' ' : ' ';
+ $buttons .= '' . __( 'Revoke', 'lifterlms' ) . ' ';
+ }
+ $buttons .= wp_nonce_field( 'lifterlms-settings', '_wpnonce', true, false );
+
+ $settings[] = array(
+ 'type' => 'custom-html',
+ 'id' => 'llms_rest_key_buttons',
+ 'value' => $buttons,
+ );
+
+ } else {
+
+ $settings[] = array(
+ 'id' => 'rest_keys_options_invalid_error',
+ 'type' => 'custom-html',
+ 'value' => __( 'Invalid api key.', 'lifterlms' ),
+ );
+
+ }
+ } else {
+
+ $settings[] = array(
+ 'id' => 'llms_api_keys_table',
+ 'table' => new LLMS_REST_Table_API_Keys(),
+ 'type' => 'table',
+ );
+
+ }
+
+ $settings[] = array(
+ 'id' => 'rest_keys_options_end',
+ 'type' => 'sectionend',
+ );
+
+ return $settings;
+
+ }
+
+ /**
+ * Form handler to save Create / Update an API key.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.3 Remove key copy message in favor of message directly above the key fields.
+ *
+ * @return null|LLMS_REST_API_Key|WP_Error
+ */
+ public static function save() {
+
+ $ret = null;
+
+ $key_id = llms_filter_input( INPUT_GET, 'edit-key', FILTER_SANITIZE_NUMBER_INT );
+ if ( $key_id ) {
+ $ret = self::save_update( $key_id );
+ } elseif ( llms_filter_input( INPUT_GET, 'add-key', FILTER_SANITIZE_NUMBER_INT ) ) {
+ $ret = self::save_create();
+ }
+
+ if ( is_wp_error( $ret ) ) {
+ // Translators: %1$s = Error message; %2$s = Error code.
+ LLMS_Admin_Settings::set_error( sprintf( __( 'Error: %1$s [Code: %2$s]', 'lifterlms' ), $ret->get_error_message(), $ret->get_error_code() ) );
+ }
+
+ return $ret;
+
+ }
+
+ /**
+ * Form handler to create a new API key.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.27 Replaced use of the deprecated `FILTER_SANITIZE_STRING` constant.
+ *
+ * @return LLMS_REST_API_Key|WP_Error
+ */
+ protected static function save_create() {
+
+ $create = LLMS_REST_API()->keys()->create(
+ array(
+ 'description' => llms_filter_input_sanitize_string( INPUT_POST, 'llms_rest_key_description' ),
+ 'user_id' => llms_filter_input( INPUT_POST, 'llms_rest_key_user_id', FILTER_SANITIZE_NUMBER_INT ),
+ 'permissions' => llms_filter_input_sanitize_string( INPUT_POST, 'llms_rest_key_permissions' ),
+ )
+ );
+
+ if ( ! is_wp_error( $create ) ) {
+ self::$generated_key = $create;
+ }
+
+ return $create;
+
+ }
+
+ /**
+ * Form handler to save an API key.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.27 Replaced use of the deprecated `FILTER_SANITIZE_STRING` constant.
+ *
+ * @param int $key_id API Key ID.
+ * @return LLMS_REST_API_Key|WP_Error
+ */
+ protected static function save_update( $key_id ) {
+
+ $key = LLMS_REST_API()->keys()->get( $key_id );
+ if ( ! $key ) {
+ // Translators: %s = Invalid API Key ID.
+ return new WP_Error( 'llms_rest_api_key_not_found', sprintf( __( '"%s" is not a valid API Key.', 'lifterlms' ), $key_id ) );
+ }
+
+ $update = LLMS_REST_API()->keys()->update(
+ array(
+ 'id' => $key_id,
+ 'description' => llms_filter_input_sanitize_string( INPUT_POST, 'llms_rest_key_description' ),
+ 'user_id' => llms_filter_input( INPUT_POST, 'llms_rest_key_user_id', FILTER_SANITIZE_NUMBER_INT ),
+ 'permissions' => llms_filter_input_sanitize_string( INPUT_POST, 'llms_rest_key_permissions' ),
+ )
+ );
+
+ return $update;
+
+ }
+
+}
+
diff --git a/libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-page.php b/libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-page.php
new file mode 100644
index 0000000000..6d9cab4b0a
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-page.php
@@ -0,0 +1,149 @@
+id = 'rest-api';
+ $this->label = __( 'REST API', 'lifterlms' );
+
+ // Output Stuff.
+ add_filter( 'lifterlms_settings_tabs_array', array( $this, 'add_settings_page' ), 20 );
+ add_action( 'lifterlms_sections_' . $this->id, array( $this, 'output_sections_nav' ) );
+ add_action( 'lifterlms_settings_' . $this->id, array( $this, 'output' ) );
+
+ // Maybe Save API Keys.
+ add_action( 'lifterlms_settings_save_' . $this->id, array( 'LLMS_Rest_Admin_Settings_API_Keys', 'save' ) );
+
+ // Disable the default page's save button.
+ add_filter( 'llms_settings_rest-api_has_save_button', '__return_false' );
+
+ add_filter( 'llms_table_get_table_classes', array( $this, 'get_table_classes' ), 10, 2 );
+ add_action( 'lifterlms_admin_field_title-with-html', array( $this, 'output_title_field' ), 10 );
+ }
+
+ /**
+ * Retrieve the id of the current tab/section
+ *
+ * Overrides parent function to set "keys" as the default section instead of the nonexistant "main".
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return string
+ */
+ protected function get_current_section() {
+
+ $current = parent::get_current_section();
+ if ( 'main' === $current ) {
+ $all = array_keys( $this->get_sections() );
+ $current = $all ? $all[0] : 'main';
+ }
+ return $current;
+ }
+
+ /**
+ * Get the page sections
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array
+ */
+ public function get_sections() {
+
+ $sections = array();
+
+ if ( current_user_can( 'manage_lifterlms_api_keys' ) ) {
+ $sections['keys'] = __( 'API Keys', 'lifterlms' );
+ }
+
+ if ( current_user_can( 'manage_lifterlms_webhooks' ) ) {
+ $sections['webhooks'] = __( 'Webhooks', 'lifterlms' );
+ }
+
+ /**
+ * Modify the available tabs on the REST API settings screen.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $sections Array of settings page tabs.
+ */
+ return apply_filters( 'llms_rest_api_settings_sections', $sections );
+ }
+
+ /**
+ * Get settings array
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array
+ */
+ public function get_settings() {
+
+ $curr_section = $this->get_current_section();
+
+ $settings = array();
+ if ( current_user_can( 'manage_lifterlms_api_keys' ) && 'keys' === $curr_section ) {
+ $settings = LLMS_Rest_Admin_Settings_API_Keys::get_fields();
+ } elseif ( current_user_can( 'manage_lifterlms_webhooks' ) && 'webhooks' === $curr_section ) {
+ $settings = LLMS_Rest_Admin_Settings_Webhooks::get_fields();
+ }
+
+ return apply_filters( 'llms_rest_api_settings_' . $curr_section, $settings );
+ }
+
+ /**
+ * Add CSS classes to the API Keys Table.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param string[] $classes Array of css class names.
+ * @param string $id Table ID.
+ * @return string[]
+ */
+ public function get_table_classes( $classes, $id ) {
+
+ if ( in_array( $id, array( 'rest-api-keys', 'rest-webhooks' ), true ) ) {
+ $classes[] = 'text-left';
+ }
+ return $classes;
+ }
+
+ /**
+ * Outputs a custom "title" field with HTML content as the settings section title.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @param array $field Settings field arguments.
+ * @return void
+ */
+ public function output_title_field( $field ) {
+
+ echo '' . esc_html( $field['title'] ) . ' ' . wp_kses_post( $field['html'] ) . '
';
+ echo '