-
-[![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]
-
-
-
- button {\n float: right;\n }\n}\n\n.postbox .inside {\n overflow: auto;\n}\n",".llms-widget {\n\tbackground: $color-white;\n\tbox-sizing: border-box;\n\tmargin-bottom: 20px;\n\tpadding: 10px 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\th1 {\n\t\tfont-size: 2.4em;\n\t}\n\n\th2 {\n\t\tfont-size: 1.8em;\n\t}\n\n\t.llms-label {\n\t\tborder-bottom: 1px solid $color-lightgrey;\n\t\tbox-sizing: border-box;\n\t\tcolor: $color-grey;\n\t\tfont-size: 18px;\n\t\tfont-weight: 300;\n\t\tletter-spacing: 1px;\n\t\tmargin: 0 0 15px;\n\t\tpadding-bottom: 10px;\n\t\ttext-align: center;\n\t\ttext-transform: uppercase;\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: $color-lightgrey;\n\t\tcursor: pointer;\n\t\tfont-size: 16px;\n\t\tposition: absolute;\n\t\tright: 25px;\n\t\ttop: 13px;\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: 3px;\n\t\tborder-bottom: 1px solid #fff;\n\t\tdisplay: inline-block;\n\t\tfont-size: 80%;\n\t\tpadding: 3px 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: darken( $color-green, 45 );\n\t\t\tbackground-color: $color-green;\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: darken( $color-red, 40 );\n\t\t\tbackground-color: $color-red;\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: darken( orange, 30 );\n\t\t\tbackground-color: orange;\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-white;\n padding: 15px;\n\n ul:not(.select2-selection__rendered) {\n margin: 0;\n\n > li {\n padding: 20px 0;\n margin: 0;\n border-bottom: 1px solid $color-lightgrey;\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\timg {\n\t\tmargin-right: 3px;\n\t\tmargin-top: -3px;\n\t\tvertical-align: middle;\n\t}\n}\n\n.llms-mb-container {\n\t.button.llms-merge-code-button img { margin-right: 4px; }\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: 160px;\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-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/quiz-attempt-review\";\n\n@import \"_includes/llms-form-field\";\n@import \"_includes/vendor/_font-awesome\";\n\n@import \"_includes/spinner\";\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","#post_course_difficulty {\n\tmin-width: 200px;\n}\n#_video-embed, #_audio-embed {\n\twidth: 100%;\n}\n\n.clear {\n\tclear: both;\n\twidth: 100%;\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.llms-admin-notice {\n\tposition: relative;\n\t.notice-dismiss {\n\t\ttext-decoration: none;\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\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",".llms-table-wrap {\n\tposition: relative;\n}\n\n.llms-table-header {\n\tpadding: 0 10px;\n\tmargin-bottom: 10px;\n\n\t@include clearfix();\n\n\th2 {\n\t\tpadding: 0;\n\t\tdisplay: inline-block;\n\t\tline-height: 1;\n\t\tmargin: 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: 5px;\n\t}\n\n}\n\n.llms-table {\n\n\tborder: 1px solid #cecece;\n\tborder-collapse: collapse;\n\twidth: 100%;\n\n\ta {\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 #cecece;\n\t\tfont-size: 95%;\n\t\tpadding: 4px;\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: #eaeaea;\n\t\tfont-weight: 500;\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: #fafafa;\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: #fafafa; }\n\t}\n\n\t&.zebra tbody tr:nth-child( odd ) {\n\t\tth, td { background-color: #fff; }\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: 105%;\n\t\t\tpadding: 8px;\n\t\t}\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: 11px;\n\t\tfont-weight: 300;\n\t\tpadding: 0 5px;\n\t}\n\n}\n\n// progress bars within the tables\n.llms-table-progress {\n\tbackground: #eee;\n\theight: 16px;\n\tposition: relative;\n\t.llms-table-progress-text {\n\t\tfont-size: 11px;\n\t\tline-height: 16px;\n\t\tposition: absolute;\n\t\tright: 4px;\n\t\ttop: 0;\n\t}\n\t.llms-table-progress-inner {\n\t\tbackground: $color-brand-blue;\n\t\theight: 100%;\n\t\ttransition: width 0.2s ease;\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-weight: bold;\n\t\twidth: 100%;\n\t\tdisplay: block;\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\tfont-weight: 300;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\th2 {\n\t\tfont-size: 22px;\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}\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}\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",".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: 25px;\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\n\t\t.dashicons-warning {\n\t\t\tdisplay: none;\n\t\t}\n\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\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","// ahhhhhhhh\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\t.llms-button-primary {\n\t\tbox-sizing: border-box;\n\t}\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: 13px;\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-item {\n\t\t\tbackground: inherit;\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 3px 0 0;\n\t\t\t}\n\t\t\t.llms-nav-link:hover,\n\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\tbackground: inherit;\n\t\t\t\tcolor: $color-brand-blue;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t\t.llms-nav-link {\n\t\t\t\tcolor: $color-brand-dark-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-transform: none;\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}\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-dark;\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: 300;\n\t\t\t\tfont-size: 14px;\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\t\tbackground: #fff;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );\n\t\tmargin: 0 0 20px;\n\t\tpadding: 20px;\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\tbackground: #fafafa;\n\t\t\tbox-shadow: none;\n\t\t\tmargin: 0 -20px 40px;\n\t\t\tpadding: 0 20px;\n\t\t\t.llms-nav-link {\n\t\t\t\tpadding: 8px 14px;\n\t\t\t}\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.name, td.name,\n\tth.title, td.title { 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--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-item.llms-analytics-form {\n\t\t\tcolor: #414141;\n\t\t\tfont-size: 13px;\n\t\t\tpadding: 6px 14px;\n\n\t\t\tinput {\n\t\t\t\tborder: 0;\n\t\t\t\tfont-size: 13px;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 3px 6px;\n\t\t\t\tvertical-align: middle;\n\t\t\t}\n\n\t\t\t.select2-container {\n\t\t\t\tinput {\n\t\t\t\t\twidth: 100% !important;\n\t\t\t\t}\n\t\t\t}\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\n\t\t.llms-analytics-filters {\n\t\t\tdisplay: none;\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}\n\t\t\t}\n\n\t\t\t.button {\n\t\t\t\tfloat: right;\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\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-dark-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\n\t.llms-reporting-header {\n\n\t\tbackground: #fafafa;\n\t\tpadding: 20px;\n\t\tmargin: 0 -20px;\n\n\t\t.llms-reporting-header-img {\n\t\t\tborder-radius: 50%;\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-right: 10px;\n\t\t\toverflow: hidden;\n\t\t\tvertical-align: middle;\n\t\t\timg {\n\t\t\t\tdisplay: block;\n\t\t\t\tmax-height: 64px;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t}\n\n\t\t.llms-reporting-header-info {\n\t\t\tdisplay: inline-block;\n\t\t\tvertical-align: middle;\n\n\t\t}\n\n\t}\n\n}\n\n.llms-reporting-breadcrumbs {\n\tbackground: #fafafa;\n\tmargin: -20px -20px 0;\n\tpadding: 20px 20px 10px;\n\ta {\n\t\tcolor: $color-brand-blue;\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: #555;\n\t\t}\n\n\t\t&:last-child {\n\t\t\tcolor: $color-brand-dark-blue;\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}\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: 0.75em;\n\tpadding: 18px 15px 15px;\n\t@include clearfix;\n\n\t.fa {\n\t\tcolor: #555;\n\t\tfloat: left;\n\t\tfont-size: 32px;\n\t\tmargin-right: 10px;\n\t}\n\n\t.llms-reporting-widget-data {\n\t\tline-height: 0.8;\n\t}\n\n\tstrong {\n\t\tcolor: #333;\n\t\tfont-size: 20px;\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\tcolor: #888;\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@import \"../_includes/quiz-result-question-list\";\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\tmargin: 0 0 10px;\n\t\tposition: relative;\n\n\t\t.toggle-answer {\n\t\t\t@include clearfix();\n\t\t\tcolor: inherit;\n\t\t\tdisplay: block;\n\t\t\tpadding: 10px 35px 10px 10px;\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.2 );\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.2 );\n\t\t\t.llms-status-icon {\n\t\t\t\tbackground-color: $color-red;\n\t\t\t}\n\t\t}\n\n\t\t.llms-question-title {\n\t\t\tfloat: left;\n\t\t\tmargin: 0;\n\t\t\tline-height: 1;\n\t\t}\n\n\t\t.llms-points {\n\t\t\tfloat: right;\n\t\t\tline-height: 1;\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 10px 10px;\n\n\t\t\t.llms-quiz-results-label {\n\t\t\t\tfont-weight: 700;\n\t\t\t\tmargin-bottom: 10px;\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\n\t.llms-header {\n\t\tbackground: #fff;\n\t\tborder-bottom: 1px solid #efefef;\n\t\tmargin: -10px -20px 0;\n\t\tpadding: 10px 0;\n\t\tz-index: 1;\n\n\t\t.lifterlms-logo {\n\t\t\tmax-width: 140px;\n\t\t}\n\n\t\t.llms-save {\n\t\t\tfloat: right;\n\t\t}\n\n\t\t.llms-inside-wrap {\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t}\n\n\t.llms-inside-wrap {\n\t\tbox-sizing: border-box;\n\t\tmax-width: 1000px;\n\t\tmargin: 0 auto;\n\t}\n\n\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\tbackground: #fff;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );\n\t\tmargin: 0 -20px 20px;\n\t\tz-index: 1;\n\n\t\t.llms-nav-item {\n\t\t\t.llms-nav-link:hover,\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\n\t\tbackground: #fff;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );\n\t\tmargin: 0 0 20px;\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\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\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-nav-link:hover,\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\tfont-size: 16px;\n\t\theight: auto;\n\t\tmargin: 0 0 6px;\n\t\tpadding: 8px 14px;\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\tfont-size: 16px;\n\t\theight: auto;\n\t\tmargin: 0 0 6px;\n\t\tpadding: 8px 14px;\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-header {\n\t\t\tposition: sticky;\n\t\t\ttop: 30px;\n\t\t}\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\tposition: sticky;\n\t\t\ttop: 93px;\n\t\t}\n\t}\n}\n\n.wrap.llms-reporting {\n\t.llms-inside-wrap {\n\t\tbox-sizing: border-box;\n\t\tmax-width: 1000px;\n\t\tmargin: 0 0 0 20px;\n\t}\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\n\t&.flush {\n\t\t.llms-form-field {\n\t\t\tpadding: 0 0 10px;\n\t\t}\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 10px;\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&.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: $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;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t\tinput {\n\t\t\t\tmargin-right: 5px;\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}\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\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",".llms-spinning {\n\tbackground: rgba( 250, 250, 250, 0.7 );\n\tbottom: 0;\n\tdisplay: none;\n\tleft: 0;\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n}\n\n.llms-spinner {\n\tanimation: llms-spinning 1.5s linear infinite;\n\tbox-sizing: border-box;\n\tborder: 4px solid #313131;\n\tborder-radius: 50%;\n\theight: 40px;\n\tleft: 50%;\n\tmargin-left: -20px;\n\tmargin-top: -20px;\n\tposition: absolute;\n\ttop: 50%;\n\twidth: 40px;\n\n\t&.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\n@keyframes llms-spinning{\n\t0% {\n\t\ttransform: rotate(0deg)\n\t}\n\t50% {\n\t\tborder-radius: 5%;\n\t}\n\t100% {\n\t\ttransform: rotate(220deg)\n\t}\n}\n"],"sourceRoot":"../../scss"}
\ No newline at end of file
+{"version":3,"sources":["_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-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/_quiz-attempt-review.scss","_includes/_llms-form-field.scss","_includes/vendor/_font-awesome.scss","_includes/_spinner.scss"],"names":[],"mappings":"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BAAuB,EACxB;;AACD;EACE,iFAAgF;EAChF,gCAA+B;EAE/B,wBAAuB,EACxB;;AACD;;;;;EAKE,qBAAY;UAAZ,aAAY,EACb;;AACD;EACE,mBAAkB;EAClB,sBAAqB;EACrB,WAAU;EACV,YAAW;EACX,iBAAgB;EAChB,uBAAsB,EACvB;;AACD;;EAEE,mBAAkB;EAClB,QAAO;EACP,YAAW;EACX,mBAAkB,EACnB;;AACD;EACE,qBAAoB,EACrB;;AACD;EACE,eAAc,EACf;;AACD;EACE,eAAc,EACf;;AACD;oEACoE;AACpE;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;;;EAIE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;;;EAKE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;;EAGE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;;EAEE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,iBAAgB,EACjB;;AACD;EACE,mBAAkB;EAClB,WAAU;EACV,YAAW;EACX,WAAU;EACV,aAAY;EACZ,iBAAgB;EAChB,uBAAsB;EACtB,UAAS,EACV;;AACD;;EAEE,iBAAgB;EAChB,YAAW;EACX,aAAY;EACZ,UAAS;EACT,kBAAiB;EACjB,WAAU,EACX;;AChyED;EACC,qCAAsC;EACtC,UAAS;EACT,cAAa;EACb,QAAO;EACP,mBAAkB;EAClB,SAAQ;EACR,OAAM,EACN;;AAED;EACC,sDAA6C;UAA7C,8CAA6C;EAC7C,+BAAsB;UAAtB,uBAAsB;EACtB,0BAAyB;EACzB,mBAAkB;EAClB,aAAY;EACZ,UAAS;EACT,mBAAkB;EAClB,kBAAiB;EACjB,mBAAkB;EAClB,SAAQ;EACR,YAAW,EASX;EApBD;IAcE,kBAAiB;IACjB,aAAY;IACZ,mBAAkB;IAClB,kBAAiB;IACjB,YAAW,EACX;;AAGF;EACC;IACC,gCAAuB;YAAvB,wBAAuB,EAAA;EAExB;IACC,kBAAiB,EAAA;EAElB;IACC,kCAAyB;YAAzB,0BAAyB,EAAA,EAAA;;AAR3B;EACC;IACC,gCAAuB;YAAvB,wBAAuB,EAAA;EAExB;IACC,kBAAiB,EAAA;EAElB;IACC,kCAAyB;YAAzB,0BAAyB,EAAA,EAAA","file":"../../css/admin.css","sourcesContent":["%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: 0;\n\tcolor: $color-white;\n\tcursor: pointer;\n\tfont-size: 16px;\n\tfont-weight: 300;\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\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: #414141;\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\n.llms-button-action {\n\tbackground: $color-brand-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","// ----- LifterLMS Brand Colors ----- \\\\\n$color-brand-dark-blue: #243c56;\n\n$color-brand-blue: #2295ff;\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: #83c373;\n$color-blue: $color-brand-blue;\n$color-red: #e5554e;\n$color-white: #fefefe;\n$color-aqua: #35bbaa;\n$color-purple: #845ef7;\n$color-orange: #ff922b;\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: #efefef;\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// 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.2s 0.6s 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-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-white;\n\tbox-sizing: border-box;\n\tmargin-bottom: 20px;\n\tpadding: 10px 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\th1 {\n\t\tfont-size: 2.4em;\n\t}\n\n\th2 {\n\t\tfont-size: 1.8em;\n\t}\n\n\t.llms-label {\n\t\tborder-bottom: 1px solid $color-lightgrey;\n\t\tbox-sizing: border-box;\n\t\tcolor: $color-grey;\n\t\tfont-size: 18px;\n\t\tfont-weight: 300;\n\t\tletter-spacing: 1px;\n\t\tmargin: 0 0 15px;\n\t\tpadding-bottom: 10px;\n\t\ttext-align: center;\n\t\ttext-transform: uppercase;\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: $color-lightgrey;\n\t\tcursor: pointer;\n\t\tfont-size: 16px;\n\t\tposition: absolute;\n\t\tright: 25px;\n\t\ttop: 13px;\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: 3px;\n\t\tborder-bottom: 1px solid #fff;\n\t\tdisplay: inline-block;\n\t\tfont-size: 80%;\n\t\tpadding: 3px 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: darken( $color-green, 45 );\n\t\t\tbackground-color: $color-green;\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: darken( $color-red, 40 );\n\t\t\tbackground-color: $color-red;\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: darken( orange, 30 );\n\t\t\tbackground-color: orange;\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-white;\n padding: 15px;\n\n ul:not(.select2-selection__rendered) {\n margin: 0;\n\n > li {\n padding: 20px 0;\n margin: 0;\n border-bottom: 1px solid $color-lightgrey;\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\timg {\n\t\tmargin-right: 3px;\n\t\tmargin-top: -3px;\n\t\tvertical-align: middle;\n\t}\n}\n\n.llms-mb-container {\n\t.button.llms-merge-code-button img { margin-right: 4px; }\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: 160px;\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-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/quiz-attempt-review\";\n\n@import \"_includes/llms-form-field\";\n@import \"_includes/vendor/_font-awesome\";\n\n@import \"_includes/spinner\";\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","#post_course_difficulty {\n\tmin-width: 200px;\n}\n#_video-embed, #_audio-embed {\n\twidth: 100%;\n}\n\n.clear {\n\tclear: both;\n\twidth: 100%;\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.llms-admin-notice {\n\tposition: relative;\n\t.notice-dismiss {\n\t\ttext-decoration: none;\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\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",".llms-table-wrap {\n\tposition: relative;\n}\n\n.llms-table-header {\n\tpadding: 0 10px;\n\tmargin-bottom: 10px;\n\n\t@include clearfix();\n\n\th2 {\n\t\tpadding: 0;\n\t\tdisplay: inline-block;\n\t\tline-height: 1;\n\t\tmargin: 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: 5px;\n\t}\n\n}\n\n.llms-table {\n\n\tborder: 1px solid #cecece;\n\tborder-collapse: collapse;\n\twidth: 100%;\n\n\ta {\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 #cecece;\n\t\tfont-size: 95%;\n\t\tpadding: 4px;\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: #eaeaea;\n\t\tfont-weight: 500;\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: #fafafa;\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: #fafafa; }\n\t}\n\n\t&.zebra tbody tr:nth-child( odd ) {\n\t\tth, td { background-color: #fff; }\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: 105%;\n\t\t\tpadding: 8px;\n\t\t}\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: 11px;\n\t\tfont-weight: 300;\n\t\tpadding: 0 5px;\n\t}\n\n}\n\n// progress bars within the tables\n.llms-table-progress {\n\tbackground: #eee;\n\theight: 16px;\n\tposition: relative;\n\t.llms-table-progress-text {\n\t\tfont-size: 11px;\n\t\tline-height: 16px;\n\t\tposition: absolute;\n\t\tright: 4px;\n\t\ttop: 0;\n\t}\n\t.llms-table-progress-inner {\n\t\tbackground: $color-brand-blue;\n\t\theight: 100%;\n\t\ttransition: width 0.2s ease;\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-weight: bold;\n\t\twidth: 100%;\n\t\tdisplay: block;\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\tfont-weight: 300;\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\th2 {\n\t\tfont-size: 22px;\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}\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}\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",".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: 25px;\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\n\t\t.dashicons-warning {\n\t\t\tdisplay: none;\n\t\t}\n\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\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","// ahhhhhhhh\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\t.llms-button-primary {\n\t\tbox-sizing: border-box;\n\t}\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: 13px;\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-item {\n\t\t\tbackground: inherit;\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 3px 0 0;\n\t\t\t}\n\t\t\t.llms-nav-link:hover,\n\t\t\t&.llms-active .llms-nav-link {\n\t\t\t\tbackground: inherit;\n\t\t\t\tcolor: $color-brand-blue;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t\t.llms-nav-link {\n\t\t\t\tcolor: $color-brand-dark-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-transform: none;\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}\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-dark;\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: 300;\n\t\t\t\tfont-size: 14px;\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\t\tbackground: #fff;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );\n\t\tmargin: 0 0 20px;\n\t\tpadding: 20px;\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\tbackground: #fafafa;\n\t\t\tbox-shadow: none;\n\t\t\tmargin: 0 -20px 40px;\n\t\t\tpadding: 0 20px;\n\t\t\t.llms-nav-link {\n\t\t\t\tpadding: 8px 14px;\n\t\t\t}\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.name, td.name,\n\tth.title, td.title { 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--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-item.llms-analytics-form {\n\t\t\tcolor: #414141;\n\t\t\tfont-size: 13px;\n\t\t\tpadding: 6px 14px;\n\n\t\t\tinput {\n\t\t\t\tborder: 0;\n\t\t\t\tfont-size: 13px;\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 3px 6px;\n\t\t\t\tvertical-align: middle;\n\t\t\t}\n\n\t\t\t.select2-container {\n\t\t\t\tinput {\n\t\t\t\t\twidth: 100% !important;\n\t\t\t\t}\n\t\t\t}\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\n\t\t.llms-analytics-filters {\n\t\t\tdisplay: none;\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}\n\t\t\t}\n\n\t\t\t.button {\n\t\t\t\tfloat: right;\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\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-dark-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\n\t.llms-reporting-header {\n\n\t\tbackground: #fafafa;\n\t\tpadding: 20px;\n\t\tmargin: 0 -20px;\n\n\t\t.llms-reporting-header-img {\n\t\t\tborder-radius: 50%;\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-right: 10px;\n\t\t\toverflow: hidden;\n\t\t\tvertical-align: middle;\n\t\t\timg {\n\t\t\t\tdisplay: block;\n\t\t\t\tmax-height: 64px;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t}\n\n\t\t.llms-reporting-header-info {\n\t\t\tdisplay: inline-block;\n\t\t\tvertical-align: middle;\n\n\t\t}\n\n\t}\n\n}\n\n.llms-reporting-breadcrumbs {\n\tbackground: #fafafa;\n\tmargin: -20px -20px 0;\n\tpadding: 20px 20px 10px;\n\ta {\n\t\tcolor: $color-brand-blue;\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: #555;\n\t\t}\n\n\t\t&:last-child {\n\t\t\tcolor: $color-brand-dark-blue;\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}\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: 0.75em;\n\tpadding: 18px 15px 15px;\n\t@include clearfix;\n\n\t.fa {\n\t\tcolor: #555;\n\t\tfloat: left;\n\t\tfont-size: 32px;\n\t\tmargin-right: 10px;\n\t}\n\n\t.llms-reporting-widget-data {\n\t\tline-height: 0.8;\n\t}\n\n\tstrong {\n\t\tcolor: #333;\n\t\tfont-size: 20px;\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\tcolor: #888;\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@import \"../_includes/quiz-result-question-list\";\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\tmargin: 0 0 10px;\n\t\tposition: relative;\n\n\t\t.toggle-answer {\n\t\t\t@include clearfix();\n\t\t\tcolor: inherit;\n\t\t\tdisplay: block;\n\t\t\tpadding: 10px 35px 10px 10px;\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.2 );\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.2 );\n\t\t\t.llms-status-icon {\n\t\t\t\tbackground-color: $color-red;\n\t\t\t}\n\t\t}\n\n\t\t.llms-question-title {\n\t\t\tfloat: left;\n\t\t\tmargin: 0;\n\t\t\tline-height: 1;\n\t\t}\n\n\t\t.llms-points {\n\t\t\tfloat: right;\n\t\t\tline-height: 1;\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 10px 10px;\n\n\t\t\t.llms-quiz-results-label {\n\t\t\t\tfont-weight: 700;\n\t\t\t\tmargin-bottom: 10px;\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\n\t.llms-header {\n\t\tbackground: #fff;\n\t\tborder-bottom: 1px solid #efefef;\n\t\tmargin: -10px -20px 0;\n\t\tpadding: 10px 0;\n\t\tz-index: 1;\n\n\t\t.lifterlms-logo {\n\t\t\tmax-width: 140px;\n\t\t}\n\n\t\t.llms-save {\n\t\t\tfloat: right;\n\t\t}\n\n\t\t.llms-inside-wrap {\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t}\n\n\t.llms-inside-wrap {\n\t\tbox-sizing: border-box;\n\t\tmax-width: 1000px;\n\t\tmargin: 0 auto;\n\t}\n\n\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\tbackground: #fff;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );\n\t\tmargin: 0 -20px 20px;\n\t\tz-index: 1;\n\n\t\t.llms-nav-item {\n\t\t\t.llms-nav-link:hover,\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\n\t\tbackground: #fff;\n\t\tbox-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );\n\t\tmargin: 0 0 20px;\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\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\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-nav-link:hover,\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\tfont-size: 16px;\n\t\theight: auto;\n\t\tmargin: 0 0 6px;\n\t\tpadding: 8px 14px;\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\tfont-size: 16px;\n\t\theight: auto;\n\t\tmargin: 0 0 6px;\n\t\tpadding: 8px 14px;\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-header {\n\t\t\tposition: sticky;\n\t\t\ttop: 30px;\n\t\t}\n\t\t.llms-nav-tab-wrapper.llms-nav-secondary {\n\t\t\tposition: sticky;\n\t\t\ttop: 93px;\n\t\t}\n\t}\n}\n\n.wrap.llms-reporting {\n\t.llms-inside-wrap {\n\t\tbox-sizing: border-box;\n\t\tmax-width: 1000px;\n\t\tmargin: 0 0 0 20px;\n\t}\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\n\t&.flush {\n\t\t.llms-form-field {\n\t\t\tpadding: 0 0 10px;\n\t\t}\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 10px;\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&.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: $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;\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t\tinput {\n\t\t\t\tmargin-right: 5px;\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}\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\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",".llms-spinning {\n\tbackground: rgba( 250, 250, 250, 0.7 );\n\tbottom: 0;\n\tdisplay: none;\n\tleft: 0;\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n}\n\n.llms-spinner {\n\tanimation: llms-spinning 1.5s linear infinite;\n\tbox-sizing: border-box;\n\tborder: 4px solid #313131;\n\tborder-radius: 50%;\n\theight: 40px;\n\tleft: 50%;\n\tmargin-left: -20px;\n\tmargin-top: -20px;\n\tposition: absolute;\n\ttop: 50%;\n\twidth: 40px;\n\n\t&.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\n@keyframes llms-spinning{\n\t0% {\n\t\ttransform: rotate(0deg)\n\t}\n\t50% {\n\t\tborder-radius: 5%;\n\t}\n\t100% {\n\t\ttransform: rotate(220deg)\n\t}\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
index b4ebdef961..b553cf9246 100644
--- a/assets/maps/css/admin.min.css.map
+++ b/assets/maps/css/admin.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["admin.css"],"names":[],"mappings":"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","file":"../../css/admin.min.css","sourcesContent":["#poststuff .llms-metabox:before, #poststuff .llms-metabox:after,\n.llms-collapsible:before,\n.llms-collapsible .llms-collapsible-header:before,\n.llms-collapsible .llms-collapsible-body:before,\n.llms-metabox .llms-access-plans:before,\n.llms-form-fields:before,\n.llms-collapsible:after,\n.llms-collapsible .llms-collapsible-header:after,\n.llms-collapsible .llms-collapsible-body:after,\n.llms-metabox .llms-access-plans:after,\n.llms-form-fields:after {\n content: \" \";\n display: table; }\n\n#poststuff .llms-metabox:after,\n.llms-collapsible:after,\n.llms-collapsible .llms-collapsible-header:after,\n.llms-collapsible .llms-collapsible-body:after,\n.llms-metabox .llms-access-plans:after,\n.llms-form-fields:after {\n clear: both; }\n\n.llms-button-action,\n.llms-button-danger,\n.llms-button-primary,\n.llms-button-secondary {\n border: none;\n border-radius: 0;\n color: #fefefe;\n cursor: pointer;\n font-size: 16px;\n font-weight: 300;\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 .5s ease;\n transition: all .5s ease; }\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 .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 .llms-button-action:focus,\n .llms-button-danger:focus,\n .llms-button-primary:focus,\n .llms-button-secondary:focus {\n color: #fefefe; }\n .llms-button-action.auto,\n .llms-button-danger.auto,\n .llms-button-primary.auto,\n .llms-button-secondary.auto {\n width: auto; }\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 .llms-button-action.square,\n .llms-button-danger.square,\n .llms-button-primary.square,\n .llms-button-secondary.square {\n padding: 12px; }\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 .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 .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 .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 .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.llms-button-primary {\n background: #466dd8; }\n .llms-button-primary:hover, .llms-button-primary.clicked {\n background: #2b55cb; }\n .llms-button-primary:focus, .llms-button-primary:active {\n background: #6888df; }\n\n.llms-button-secondary {\n background: #e1e1e1;\n color: #414141; }\n .llms-button-secondary:hover {\n color: #414141;\n background: #cdcdcd; }\n .llms-button-secondary:focus, .llms-button-secondary:active {\n color: #414141;\n background: #ebebeb; }\n\n.llms-button-action {\n background: #f8954f; }\n .llms-button-action:hover, .llms-button-action.clicked {\n background: #f67d28; }\n .llms-button-action:focus, .llms-button-action:active {\n background: #faad76; }\n\n.llms-button-danger {\n background: #e5554e; }\n .llms-button-danger:hover {\n background: #e0332a; }\n .llms-button-danger:focus, .llms-button-danger:active {\n background: #e86660; }\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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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.2s 0.6s ease;\n transition: all 0.2s 0.6s 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#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: #ff922b; }\n\n/******************************************************************\n\nGrids for Breakpoints\n\n******************************************************************/\n.last-col {\n float: right;\n padding-right: 0 !important; }\n\n.last-col:after {\n clear: both; }\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 .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 .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 .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 .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 .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 .m-right {\n text-align: center; }\n .m-center {\n text-align: center; }\n .m-left {\n text-align: center; }\n .d-right {\n text-align: right; }\n .d-center {\n text-align: center; }\n .d-left {\n text-align: left; } }\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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .d-right {\n text-align: right; }\n .d-center {\n text-align: center; }\n .d-left {\n text-align: left; } }\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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .d-1of11 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 9.09090909091%; }\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 .d-right {\n text-align: right; }\n .d-center {\n text-align: center; }\n .d-left {\n text-align: left; } }\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: .5s;\n transition: .5s; }\n #llms-form-wrapper #llms_analytics_search:hover {\n background: #0185a3 !important; }\n #llms-form-wrapper #llms_analytics_search:active {\n background: #33b1cb !important; }\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 #llms-skip-setup-form .llms-admin-link:hover {\n color: #2ea2cc; }\n #llms-skip-setup-form .llms-admin-link:focus {\n color: #124964; }\n\n/**\n * Toggle Switch ( replaces checkbox on admin panels )\n */\n.llms-switch {\n position: relative; }\n .llms-switch .llms-toggle {\n position: absolute;\n margin-left: -9999px;\n visibility: hidden; }\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 .llms-switch input.llms-toggle-round + label {\n border: 2px solid #6c7781;\n border-radius: 10px;\n height: 20px;\n width: 36px; }\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 .llms-switch input.llms-toggle-round:checked + label {\n border-color: #11a0d2;\n background-color: #11a0d2; }\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 .llms-switch input.llms-toggle-round:checked + label:after {\n background-color: #fefefe;\n margin-left: 16px; }\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 .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#llms-profile-fields {\n margin: 50px 0; }\n #llms-profile-fields .llms-form-field {\n padding-left: 0; }\n #llms-profile-fields label {\n display: block;\n font-weight: bold;\n padding: 8px 0 2px; }\n #llms-profile-fields .type-checkbox .type-checkbox label {\n display: initial;\n font-weight: initial;\n padding: 0; }\n #llms-profile-fields .type-checkbox .type-checkbox input {\n display: inline-block;\n margin-bottom: 0;\n width: 1rem; }\n #llms-profile-fields select {\n max-width: 100%; }\n\na.llms-voucher-delete {\n background: #e5554e;\n color: #fefefe;\n display: block;\n padding: 4px 2px;\n text-decoration: none;\n -webkit-transition: ease .3s all;\n transition: ease .3s all; }\n a.llms-voucher-delete:hover {\n background: #af3a26; }\n\n.llms-voucher-codes-wrapper table,\n.llms-voucher-redemption-wrapper table {\n width: 100%;\n border-collapse: collapse; }\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 .llms-voucher-codes-wrapper table thead,\n .llms-voucher-redemption-wrapper table thead {\n background-color: #466dd8;\n color: #fff; }\n .llms-voucher-codes-wrapper table thead th,\n .llms-voucher-redemption-wrapper table thead th {\n padding: 10px 10px; }\n .llms-voucher-codes-wrapper table tr,\n .llms-voucher-redemption-wrapper table tr {\n counter-increment: row-counter; }\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 .llms-voucher-codes-wrapper table tr td,\n .llms-voucher-redemption-wrapper table tr td {\n padding: 5px; }\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.llms-voucher-codes-wrapper table {\n width: 100%;\n border-collapse: collapse; }\n .llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td {\n border: none; }\n .llms-voucher-codes-wrapper table thead {\n background-color: #466dd8;\n color: #fff; }\n .llms-voucher-codes-wrapper table tr:nth-child(even) {\n background-color: #F1F1F1; }\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 .llms-voucher-codes-wrapper .llms-voucher-add-codes input[type=\"text\"] {\n width: 30px; }\n\n.llms-voucher-export-wrapper .llms-voucher-export-type {\n width: 100%; }\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 .llms-voucher-export-wrapper .llms-voucher-email-wrapper input[type=\"text\"] {\n width: 100%; }\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.postbox .inside {\n overflow: auto; }\n\n.llms-widget {\n background: #fefefe;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n margin-bottom: 20px;\n padding: 10px 20px;\n position: relative;\n width: 100%; }\n .llms-widget.alt {\n border: 1px solid #ccc;\n background-color: #efefef;\n margin-bottom: 10px; }\n .llms-widget.alt .llms-label {\n color: #777;\n font-size: 14px;\n margin-bottom: 10px;\n padding-bottom: 5px; }\n .llms-widget.alt h2 {\n color: #444;\n font-weight: 300; }\n .llms-widget h1 {\n font-size: 2.4em; }\n .llms-widget h2 {\n font-size: 1.8em; }\n .llms-widget .llms-label {\n border-bottom: 1px solid #ccc;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #999;\n font-size: 18px;\n font-weight: 300;\n letter-spacing: 1px;\n margin: 0 0 15px;\n padding-bottom: 10px;\n text-align: center;\n text-transform: uppercase; }\n .llms-widget .llms-chart {\n width: 100%;\n padding: 10px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n .llms-widget mark.yes {\n background-color: #7ad03a; }\n .llms-widget .llms-subtitle {\n margin-bottom: 0; }\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 .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 .llms-widget.is-loading .spinner {\n visibility: visible; }\n .llms-widget td[colspan=\"2\"] {\n padding-left: 0; }\n .llms-widget tr.llms-disabled-field {\n opacity: 0.5;\n pointer-events: none; }\n\n.llms-widget-1-3,\n.llms-widget-1-4,\n.llms-widget-1-5 {\n text-align: center; }\n\n.llms-widget .llms-widget-info-toggle {\n color: #ccc;\n cursor: pointer;\n font-size: 16px;\n position: absolute;\n right: 25px;\n top: 13px; }\n\n.llms-widget.info-showing .llms-widget-info {\n display: block; }\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 .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 .llms-widget-info p {\n margin: 0; }\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 .no-padding {\n padding: 0 !important; }\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 button 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 svg.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 svg.icon.tree-icon {\n height: 13px;\n width: 13px;\n vertical-align: middle; }\n svg.icon.section-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom; }\n svg.icon.button-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom; }\n svg.icon.button-icon-attr {\n height: 10px;\n width: 10px;\n vertical-align: middle; }\n svg.icon.list-icon {\n height: 12px;\n width: 12px;\n vertical-align: middle; }\n svg.icon.list-icon.on {\n color: #466dd8; }\n svg.icon.list-icon.off {\n color: #444; }\n svg.icon.detail-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n cursor: default; }\n svg.icon.detail-icon.on {\n color: #466dd8; }\n svg.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\nMetabox Tabs\n\n******************************************************************/\n#side-sortables .tab-content {\n padding: 0; }\n\n.llms-mb-container .tab-content {\n display: none;\n background: #fefefe;\n padding: 15px; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) {\n margin: 0; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li {\n padding: 20px 0;\n margin: 0;\n border-bottom: 1px solid #ccc; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.select:not([class*=\"d-\"]) {\n width: 100%; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li:last-child {\n border: 0;\n padding-bottom: 0; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.top {\n border-bottom: 0;\n padding-bottom: 0; }\n .llms-mb-container .tab-content .full-width {\n width: 100%; }\n .llms-mb-container .tab-content #wp-content-editor-tools {\n background: none; }\n\n.llms-mb-container .tab-content.llms-active {\n display: inherit; }\n\n.llms-mb-container .tab-content .no-border {\n border-bottom: 0px; }\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.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 -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: auto;\n overflow-y: hidden; }\n\nbody.modal-open {\n overflow: hidden; }\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#llms-icon-modal-close {\n width: 16px;\n height: 16px;\n fill: #fefefe; }\n\n.llms-modal-content {\n padding: 20px; }\n .llms-modal-content h3 {\n margin-top: 0; }\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 .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 #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 .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: .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 .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 .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 .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: .5s;\n transition: .5s;\n -webkit-box-shadow: 0 1px 1px #ccc;\n box-shadow: 0 1px 1px #ccc; }\n .llms-modal-form .llms-button-primary.full, .llms-modal-form .llms-button-secondary.full {\n width: 100%; }\n\n.modal-open .select2-dropdown {\n z-index: 1000005; }\n\n.button.llms-merge-code-button {\n vertical-align: middle; }\n .button.llms-merge-code-button img {\n margin-right: 3px;\n margin-top: -3px;\n vertical-align: middle; }\n\n.llms-mb-container .button.llms-merge-code-button img {\n margin-right: 4px; }\n\n.llms-mb-container .llms-merge-code-wrapper {\n float: right;\n top: -5px; }\n\n.llms-merge-code-wrapper {\n display: inline;\n position: relative; }\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: 160px; }\n .llms-merge-codes ul {\n margin: 0;\n padding: 0; }\n .llms-merge-codes li {\n cursor: pointer;\n margin: 0;\n padding: 4px 8px !important;\n border-bottom: 1px solid #ccc; }\n .llms-merge-codes li:hover {\n color: #23282d;\n background: #fefefe; }\n .llms-merge-codes.active {\n display: block;\n z-index: 777; }\n\n/******************************************************************\n\nBase Mobile\n\n******************************************************************/\n.llms-nav-tab,\n.llms-nav-tab-filters {\n display: block;\n width: 100%; }\n\nform.llms-nav-tab-filters.full-width {\n width: 100%; }\n form.llms-nav-tab-filters.full-width label {\n display: inline-block;\n width: 10%;\n text-align: left; }\n form.llms-nav-tab-filters.full-width .select2-container {\n width: 85% !important; }\n\n.llms-nav-tab-settings {\n display: block;\n width: 100%; }\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 #llms-form-wrapper .llms-date-select input[type=\"text\"] {\n width: 100%; }\n\nul.tabs li {\n display: block; }\n\n@media only screen and (min-width: 481px) {\n /******************************************************************\n\nLarger Phones\n\n******************************************************************/\n #llms-form-wrapper .llms-checkbox {\n width: 33%; } }\n\n@media only screen and (min-width: 768px) {\n /******************************************************************\n\nTablets and small computers\n\n******************************************************************/\n ul.tabs li {\n display: inline-block; }\n .llms-nav-tab {\n display: inline-block;\n width: 33%; }\n .llms-nav-tab-settings {\n display: inline-block;\n width: 25%; }\n #llms-form-wrapper .llms-select {\n width: 50%;\n max-width: 500px; }\n #llms-form-wrapper .llms-filter-options {\n width: 50%;\n max-width: 500px; }\n #llms-form-wrapper .llms-date-select {\n width: 47.5%; }\n #llms-form-wrapper .llms-date-select:first-child {\n margin-right: 5%; }\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 .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 .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 .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@media only screen and (min-width: 1030px) {\n /******************************************************************\n\nDesktop Stylesheet\n\n******************************************************************/\n .llms-nav-tab {\n display: inline-block;\n width: 33.333%; }\n .llms-nav-tab-settings {\n display: inline-block;\n width: 25%; }\n #llms-form-wrapper .llms-select {\n display: inline-block;\n width: 47.5%; }\n #llms-form-wrapper .llms-select:first-child {\n margin-right: 5%; }\n #llms-form-wrapper .llms-filter-options {\n display: inline-block;\n width: 47.5%; }\n #llms-form-wrapper .llms-filter-options.date-filter {\n margin-right: 5%; }\n #llms-form-wrapper .llms-filter-options .llms-date-select {\n margin-bottom: 0; }\n #llms-form-wrapper .llms-date-select {\n width: 47.5%; }\n #llms-form-wrapper .llms-date-select:first-child {\n margin-right: 5%; }\n .llms-widget-row:before, .llms-widget-row:after {\n content: \" \";\n display: table; }\n .llms-widget-row:after {\n clear: both; }\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 .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 .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 .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@media only screen and (min-width: 1240px) {\n /******************************************************************\n\nlarge Monitor Stylesheet\n\n******************************************************************/\n .llms-nav-tab-filters,\n .llms-nav-tab-settings {\n float: left;\n width: 12.5%; } }\n\n#post_course_difficulty {\n min-width: 200px; }\n\n#_video-embed, #_audio-embed {\n width: 100%; }\n\n.clear {\n clear: both;\n width: 100%; }\n\n.llms_certificate_default_image, .llms_certificate_image {\n width: 300px; }\n\n.llms_achievement_default_image, .llms_achievement_image {\n width: 120px; }\n\ndiv[id^=\"lifterlms-\"] .inside {\n overflow: visible; }\n\n.llms-admin-notice {\n position: relative; }\n .llms-admin-notice .notice-dismiss {\n text-decoration: none; }\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\na.llms-view-as {\n line-height: 2;\n margin-right: 8px; }\n\n.llms-image-field-preview {\n max-height: 80px;\n vertical-align: middle;\n width: auto; }\n\n.llms-image-field-remove.hidden {\n display: none; }\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 .llms-log-viewer pre {\n font-family: monospace;\n margin: 0;\n padding: 0;\n white-space: pre-wrap; }\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 .llms-status--tools .llms-table td, .llms-status--tools .llms-table th {\n padding: 10px;\n vertical-align: top; }\n .llms-status--tools .llms-table th {\n width: 28%; }\n .llms-status--tools .llms-table p {\n margin: 0 0 10px; }\n\n.llms-error {\n color: #e5554e;\n font-style: italic; }\n\n.llms-table-wrap {\n position: relative; }\n\n.llms-table-header {\n padding: 0 10px;\n margin-bottom: 10px; }\n .llms-table-header:before, .llms-table-header:after {\n content: \" \";\n display: table; }\n .llms-table-header:after {\n clear: both; }\n .llms-table-header h2 {\n padding: 0;\n display: inline-block;\n line-height: 1;\n margin: 0;\n vertical-align: middle; }\n .llms-table-header .llms-table-search,\n .llms-table-header .llms-table-filters {\n float: right;\n padding-left: 10px; }\n .llms-table-header .llms-table-search input {\n margin: 0;\n padding: 5px; }\n\n.llms-table {\n border: 1px solid #cecece;\n border-collapse: collapse;\n width: 100%; }\n .llms-table a {\n color: #466dd8; }\n .llms-table a:hover {\n color: #2b55cb; }\n .llms-table td, .llms-table th {\n border-bottom: 1px solid #cecece;\n font-size: 95%;\n padding: 4px;\n text-align: center; }\n .llms-table td.expandable.closed, .llms-table th.expandable.closed {\n display: none; }\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 .llms-table tr.llms-quiz-pending td {\n font-weight: 700; }\n .llms-table thead th,\n .llms-table tfoot th {\n background-color: #eaeaea;\n font-weight: 500; }\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 .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 .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 .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 .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 .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 .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 .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 .llms-table tfoot th {\n border-bottom: none; }\n .llms-table tfoot th .llms-table-export {\n float: left; }\n .llms-table tfoot th .llms-table-export .llms-table-progress {\n background: #fafafa;\n display: none;\n margin-left: 8px;\n vertical-align: middle;\n width: 100px; }\n .llms-table tfoot th .llms-table-pagination {\n float: right; }\n .llms-table.zebra tbody tr:nth-child(even) th, .llms-table.zebra tbody tr:nth-child(even) td {\n background-color: #fafafa; }\n .llms-table.zebra tbody tr:nth-child(odd) th, .llms-table.zebra tbody tr:nth-child(odd) td {\n background-color: #fff; }\n .llms-table.text-left td, .llms-table.text-left th {\n text-align: left; }\n .llms-table.size-large td, .llms-table.size-large th {\n font-size: 105%;\n padding: 8px; }\n .llms-table .llms-action-icon {\n color: #777;\n text-decoration: none; }\n .llms-table .llms-action-icon .tooltip {\n cursor: pointer; }\n .llms-table .llms-action-icon:hover {\n color: #466dd8; }\n .llms-table .llms-action-icon.danger:hover {\n color: #e5554e; }\n .llms-table .llms-table-page-count {\n font-size: 11px;\n font-weight: 300;\n padding: 0 5px; }\n\n.llms-table-progress {\n background: #eee;\n height: 16px;\n position: relative; }\n .llms-table-progress .llms-table-progress-text {\n font-size: 11px;\n line-height: 16px;\n position: absolute;\n right: 4px;\n top: 0; }\n .llms-table-progress .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.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.llms-gb-table-notifications th, .llms-gb-table-notifications td {\n text-align: left; }\n\n.llms-order-note .llms-order-note-content {\n background: #efefef;\n margin-bottom: 10px;\n padding: 10px;\n position: relative; }\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 .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.llms-mb-list label {\n font-weight: bold;\n width: 100%;\n display: block; }\n\n.llms-mb-list .input-full {\n width: 100%; }\n\n#poststuff .llms-metabox h2, #poststuff .llms-metabox h3, #poststuff .llms-metabox h6 {\n font-weight: 300;\n margin: 0;\n padding: 0; }\n\n#poststuff .llms-metabox h2 {\n font-size: 22px; }\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 #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.llms-metabox-section {\n background: #fff;\n margin-top: 25px;\n position: relative; }\n .llms-metabox-section.no-top-margin {\n margin-top: 0; }\n .llms-metabox-section .llms-metabox-field {\n margin: 15px 0;\n position: relative; }\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 .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 .llms-metabox-section .llms-metabox-field input.md-text {\n width: 105px; }\n .llms-metabox-section .llms-metabox-field input.sm-text {\n width: 45px; }\n .llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-date-input {\n width: 95px; }\n .llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-time-input {\n width: 45px; }\n .llms-metabox-section .llms-metabox-field .llms-datetime-field em {\n font-style: normal;\n padding: 0 3px; }\n\n.llms-collapsible {\n border: 1px solid #e5e5e5;\n position: relative;\n margin-top: 0;\n margin-bottom: -1px; }\n .llms-collapsible:last-child {\n margin-bottom: 0; }\n .llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-down {\n display: none; }\n .llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-up {\n display: inline; }\n .llms-collapsible .llms-collapsible-header {\n padding: 10px; }\n .llms-collapsible .llms-collapsible-header h3 {\n color: #777;\n margin: 0;\n font-size: 16px; }\n .llms-collapsible .llms-collapsible-header .dashicons-arrow-up {\n display: inline; }\n .llms-collapsible .llms-collapsible-header .dashicons-arrow-up {\n display: none; }\n .llms-collapsible .llms-collapsible-header a {\n text-decoration: none; }\n .llms-collapsible .llms-collapsible-header .dashicons {\n color: #777;\n cursor: pointer;\n -webkit-transition: color .4s ease;\n transition: color .4s ease; }\n .llms-collapsible .llms-collapsible-header .dashicons:hover {\n color: #466dd8; }\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: #e5554e; }\n .llms-collapsible .llms-collapsible-body {\n display: none;\n padding: 10px; }\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.post-type-llms_order #post-body-content {\n display: none; }\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.llms-table tbody tr.llms-txn-failed td {\n background-color: rgba(229, 85, 78, 0.5);\n border-bottom-color: rgba(229, 85, 78, 0.5); }\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.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 .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 .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.llms-manual-txn-form {\n background-color: #eaeaea; }\n .llms-manual-txn-form .llms-metabox-section {\n background-color: #eaeaea; }\n\n#llms-remaining-edit {\n display: none; }\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.llms-metabox #llms-new-access-plan-model {\n display: none; }\n\n.llms-metabox .llms-access-plans {\n margin-top: 25px; }\n .llms-metabox .llms-access-plans > .llms-no-plans-msg {\n display: none; }\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 .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 .llms-metabox .llms-access-plans .llms-spinning {\n z-index: 1; }\n .llms-metabox .llms-access-plans .llms-invalid {\n border-color: #e5554e; }\n .llms-metabox .llms-access-plans .llms-invalid .dashicons-warning {\n display: inline; }\n .llms-metabox .llms-access-plans .dashicons-warning {\n display: none; }\n\n.llms-metabox .llms-access-plan {\n text-align: left; }\n .llms-metabox .llms-access-plan [data-tip]:before {\n text-align: center; }\n .llms-metabox .llms-access-plan .llms-plan-link,\n .llms-metabox .llms-access-plan [data-controller] {\n display: none; }\n .llms-metabox .llms-access-plan:hover .llms-plan-link, .llms-metabox .llms-access-plan.opened .llms-plan-link {\n display: inline-block; }\n .llms-metabox .llms-access-plan .llms-metabox-field {\n margin: 5px 0; }\n .llms-metabox .llms-access-plan .llms-required {\n color: #e5554e;\n margin-left: 3px; }\n\n.llms-metabox-students .llms-table tr .name {\n text-align: left; }\n\n.llms-metabox-students .llms-add-student:hover {\n color: #83c373; }\n\n.llms-metabox-students .llms-remove-student:hover {\n color: #e5554e; }\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.llms-mb-list.repeater .llms-repeater-rows {\n position: relative;\n margin-top: 10px;\n min-height: 10px; }\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.llms-builder-launcher .llms-button-primary {\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n\n.wp-list-table .llms-status {\n border-radius: 3px;\n border-bottom: 1px solid #fff;\n display: inline-block;\n font-size: 80%;\n padding: 3px 6px;\n vertical-align: middle; }\n .wp-list-table .llms-status.llms-size--large {\n font-size: 105%;\n padding: 6px 12px; }\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: #1f3818;\n background-color: #83c373; }\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: #5a110d;\n background-color: #e5554e; }\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: #664200;\n background-color: orange; }\n\n#lifterlms-order-transactions .llms-table tfoot th {\n text-align: right; }\n\n.llms-post-table-post-filter {\n display: inline-block;\n margin-right: 6px;\n max-width: 100%;\n width: 220px; }\n\n.llms-nav-tab-wrapper {\n background: #466dd8;\n margin: 20px 0; }\n .llms-nav-tab-wrapper.llms-nav-secondary {\n background: #e1e1e1; }\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item {\n margin: 0; }\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #cdcdcd; }\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {\n color: #414141;\n font-size: 13px;\n padding: 8px 14px; }\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link .dashicons {\n font-size: 15px;\n height: 15px;\n width: 15px; }\n .llms-nav-tab-wrapper.llms-nav-text {\n background: inherit; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item {\n background: inherit; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:last-child:after {\n display: none; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:after {\n content: '|';\n display: inline-block;\n margin: 0 3px 0 0; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link:hover,\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item.llms-active .llms-nav-link {\n background: inherit;\n color: #466dd8;\n text-decoration: underline; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link {\n color: #1c3987;\n display: inline-block;\n letter-spacing: 0;\n margin: 0;\n padding: 0;\n text-transform: none; }\n .llms-nav-tab-wrapper .llms-nav-items {\n margin: 0; }\n .llms-nav-tab-wrapper .llms-nav-items:before, .llms-nav-tab-wrapper .llms-nav-items:after {\n content: \" \";\n display: table; }\n .llms-nav-tab-wrapper .llms-nav-items:after {\n clear: both; }\n .llms-nav-tab-wrapper .llms-nav-item {\n margin: 0; }\n .llms-nav-tab-wrapper .llms-nav-item .llms-nav-link:hover {\n background: #2b55cb; }\n .llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {\n background: #1c3987; }\n .llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {\n font-weight: 400; }\n @media only screen and (min-width: 768px) {\n .llms-nav-tab-wrapper .llms-nav-item {\n float: left; }\n .llms-nav-tab-wrapper .llms-nav-item.llms-nav-item-right {\n float: right; } }\n .llms-nav-tab-wrapper .llms-nav-link {\n color: #fff;\n cursor: pointer;\n display: block;\n font-weight: 300;\n font-size: 14px;\n padding: 9px 18px;\n text-align: center;\n text-decoration: none;\n -webkit-transition: all .3s ease;\n transition: all .3s ease; }\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.llms-reporting.wrap .llms-options-page-contents {\n background: #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: 0 0 20px;\n padding: 20px; }\n .llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {\n background: #fafafa;\n -webkit-box-shadow: none;\n box-shadow: none;\n margin: 0 -20px 40px;\n padding: 0 20px; }\n .llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {\n padding: 8px 14px; }\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.name, .llms-reporting.wrap td.name,\n.llms-reporting.wrap th.title, .llms-reporting.wrap td.title {\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 .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 .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--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-item.llms-analytics-form, .llms-reporting.wrap.tab--sales .llms-nav-item.llms-analytics-form {\n color: #414141;\n font-size: 13px;\n padding: 6px 14px; }\n .llms-reporting.wrap.tab--enrollments .llms-nav-item.llms-analytics-form input, .llms-reporting.wrap.tab--sales .llms-nav-item.llms-analytics-form input {\n border: 0;\n font-size: 13px;\n margin: 0;\n padding: 3px 6px;\n vertical-align: middle; }\n .llms-reporting.wrap.tab--enrollments .llms-nav-item.llms-analytics-form .select2-container input, .llms-reporting.wrap.tab--sales .llms-nav-item.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 .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 .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 .llms-reporting.wrap.tab--enrollments .llms-analytics-filters .button, .llms-reporting.wrap.tab--sales .llms-analytics-filters .button {\n float: right; }\n\n.llms-reporting.wrap .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap {\n width: 160px; }\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 .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: #1c3987;\n text-decoration: none; }\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 .llms-reporting-header {\n background: #fafafa;\n padding: 20px;\n margin: 0 -20px; }\n .llms-reporting-tab .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 .llms-reporting-tab .llms-reporting-header .llms-reporting-header-img img {\n display: block;\n max-height: 64px;\n width: auto; }\n .llms-reporting-tab .llms-reporting-header .llms-reporting-header-info {\n display: inline-block;\n vertical-align: middle; }\n\n.llms-reporting-breadcrumbs {\n background: #fafafa;\n margin: -20px -20px 0;\n padding: 20px 20px 10px; }\n .llms-reporting-breadcrumbs a {\n color: #466dd8;\n text-decoration: none; }\n .llms-reporting-breadcrumbs a:hover {\n color: #2b55cb; }\n .llms-reporting-breadcrumbs a:after {\n content: ' > ';\n color: #555; }\n .llms-reporting-breadcrumbs a:last-child {\n color: #1c3987; }\n .llms-reporting-breadcrumbs a:last-child:after {\n display: none; }\n\n#llms-students-table .name {\n text-align: left; }\n\n.llms-reporting-tab-content {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex; }\n .llms-reporting-tab-content > header:before, .llms-reporting-tab-content > header:after {\n content: \" \";\n display: table; }\n .llms-reporting-tab-content > header:after {\n clear: both; }\n .llms-reporting-tab-content h3 {\n margin-bottom: 20px; }\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 .llms-reporting-tab-content .llms-reporting-tab-main {\n -webkit-box-flex: 3;\n -ms-flex: 3;\n flex: 3; }\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 .llms-reporting-tab-content > .llms-table-wrap {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1; }\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.llms-reporting-widget {\n border-top: 4px solid #466dd8;\n background: #fafafa;\n margin-bottom: 0.75em;\n padding: 18px 15px 15px; }\n .llms-reporting-widget:before, .llms-reporting-widget:after {\n content: \" \";\n display: table; }\n .llms-reporting-widget:after {\n clear: both; }\n .llms-reporting-widget .fa {\n color: #555;\n float: left;\n font-size: 32px;\n margin-right: 10px; }\n .llms-reporting-widget .llms-reporting-widget-data {\n line-height: 0.8; }\n .llms-reporting-widget strong {\n color: #333;\n font-size: 20px; }\n .llms-reporting-widget.llms-reporting-student-address strong {\n line-height: 1.1; }\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 .llms-reporting-widget small {\n color: #888; }\n .llms-reporting-widget small.compare {\n margin-left: 5px; }\n .llms-reporting-widget small.compare.positive {\n color: #83c373; }\n .llms-reporting-widget small.compare.negative {\n color: #e5554e; }\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 .llms-reporting-event:before, .llms-reporting-event:after {\n content: \" \";\n display: table; }\n .llms-reporting-event:after {\n clear: both; }\n .llms-reporting-event.color--blue {\n border-left-color: #466dd8; }\n .llms-reporting-event.color--green, .llms-reporting-event._enrollment_trigger, .llms-reporting-event._is_complete.yes {\n border-left-color: #83c373; }\n .llms-reporting-event.color--purple, .llms-reporting-event._status.enrolled {\n border-left-color: #845ef7; }\n .llms-reporting-event.color--red, .llms-reporting-event._status.expired, .llms-reporting-event._status.cancelled {\n border-left-color: #e5554e; }\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: #ff922b; }\n .llms-reporting-event time {\n color: #888; }\n .llms-reporting-event .llms-student-avatar {\n margin-left: 10px;\n float: right; }\n .llms-reporting-event a {\n text-decoration: none;\n color: inherit; }\n\n.llms-quiz-attempt-results {\n margin: 0;\n padding: 0;\n list-style-type: none; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question {\n background: #efefef;\n margin: 0 0 10px;\n position: relative; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {\n color: inherit;\n display: block;\n padding: 10px 35px 10px 10px;\n text-decoration: none; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer:before, .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer:after {\n content: \" \";\n display: table; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer:after {\n clear: both; }\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(255, 146, 43, 0.2); }\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: #ff922b; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {\n background: rgba(131, 195, 115, 0.2); }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {\n background-color: #83c373; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {\n background: rgba(229, 85, 78, 0.2); }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {\n background-color: #e5554e; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {\n float: left;\n margin: 0;\n line-height: 1; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {\n float: right;\n line-height: 1; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {\n position: absolute;\n right: -12px;\n top: -2px; }\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 .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {\n display: none;\n padding: 0 10px 10px; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {\n font-weight: 700;\n margin-bottom: 10px; }\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 .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 .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 .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {\n height: auto;\n max-width: 200px; }\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 .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 .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 .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 .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {\n opacity: .5; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {\n font-style: italic;\n font-weight: normal; }\n\n.wrap.llms-reporting .llms-header,\n.wrap.lifterlms-settings .llms-header {\n background: #fff;\n border-bottom: 1px solid #efefef;\n margin: -10px -20px 0;\n padding: 10px 0;\n z-index: 1; }\n .wrap.llms-reporting .llms-header .lifterlms-logo,\n .wrap.lifterlms-settings .llms-header .lifterlms-logo {\n max-width: 140px; }\n .wrap.llms-reporting .llms-header .llms-save,\n .wrap.lifterlms-settings .llms-header .llms-save {\n float: right; }\n .wrap.llms-reporting .llms-header .llms-inside-wrap,\n .wrap.lifterlms-settings .llms-header .llms-inside-wrap {\n padding: 0 10px; }\n\n.wrap.llms-reporting .llms-inside-wrap,\n.wrap.lifterlms-settings .llms-inside-wrap {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n max-width: 1000px;\n margin: 0 auto; }\n\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary {\n background: #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: 0 -20px 20px;\n z-index: 1; }\n .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,\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-nav-link:hover,\n .wrap.lifterlms-settings .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 .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 font-weight: 700; }\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 border-top: 2px solid transparent;\n padding: 14px; }\n\n.wrap.llms-reporting .llms-setting-group,\n.wrap.lifterlms-settings .llms-setting-group {\n background: #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: 0 0 20px;\n padding: 20px; }\n .wrap.llms-reporting .llms-setting-group .llms-label,\n .wrap.lifterlms-settings .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 .wrap.llms-reporting .llms-setting-group .llms-help-tooltip .dashicons,\n .wrap.lifterlms-settings .llms-setting-group .llms-help-tooltip .dashicons {\n color: #444;\n cursor: help; }\n .wrap.llms-reporting .llms-setting-group .form-table,\n .wrap.lifterlms-settings .llms-setting-group .form-table {\n margin: 0; }\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 margin-top: 0; }\n .wrap.llms-reporting .llms-setting-group td[colspan=\"2\"],\n .wrap.lifterlms-settings .llms-setting-group td[colspan=\"2\"] {\n padding-top: 0;\n padding-left: 0; }\n .wrap.llms-reporting .llms-setting-group tr.llms-disabled-field,\n .wrap.lifterlms-settings .llms-setting-group tr.llms-disabled-field {\n opacity: 0.5;\n pointer-events: none; }\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 width: 50%; }\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 width: 30%; }\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 width: 20%; }\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 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-nav-link:hover,\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-nav-link:hover,\n .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #fff; } }\n\n.wrap.llms-reporting #llms-mailhawk-connect,\n.wrap.lifterlms-settings #llms-mailhawk-connect {\n font-size: 16px;\n height: auto;\n margin: 0 0 6px;\n padding: 8px 14px;\n position: relative; }\n .wrap.llms-reporting #llms-mailhawk-connect .dashicons,\n .wrap.lifterlms-settings #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 font-size: 16px;\n height: auto;\n margin: 0 0 6px;\n padding: 8px 14px;\n position: relative; }\n .wrap.llms-reporting #llms-sendwp-connect .fa,\n .wrap.lifterlms-settings #llms-sendwp-connect .fa {\n margin-right: 4px; }\n\n@media only screen and (min-width: 782px) {\n .wrap.lifterlms-settings .llms-header {\n position: -webkit-sticky;\n position: sticky;\n top: 30px; }\n .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary {\n position: -webkit-sticky;\n position: sticky;\n top: 93px; } }\n\n.wrap.llms-reporting .llms-inside-wrap {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n max-width: 1000px;\n margin: 0 0 0 20px; }\n\n.llms-remarks .llms-remarks-field {\n height: 120px;\n width: 100%; }\n\n.llms-remarks input[type=\"number\"] {\n width: 60px; }\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.llms-form-fields {\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n .llms-form-fields.flush .llms-form-field {\n padding: 0 0 10px; }\n .llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {\n margin-bottom: 0; }\n\n.llms-form-heading {\n padding: 0 10px 10px; }\n\n.llms-form-field {\n float: left;\n padding: 0 10px 10px;\n position: relative;\n width: 100%; }\n .llms-form-field label:empty:after {\n content: '\\00a0'; }\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 .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(229, 85, 78, 0.3);\n border-color: #e5554e; }\n .llms-form-field.llms-visually-hidden-field {\n display: none; }\n .llms-form-field.align-right {\n text-align: right; }\n @media screen and (min-width: 600px) {\n .llms-form-field.llms-cols-1 {\n width: 8.33333%; }\n .llms-form-field.llms-cols-2 {\n width: 16.66667%; }\n .llms-form-field.llms-cols-3 {\n width: 25%; }\n .llms-form-field.llms-cols-4 {\n width: 33.33333%; }\n .llms-form-field.llms-cols-5 {\n width: 41.66667%; }\n .llms-form-field.llms-cols-6 {\n width: 50%; }\n .llms-form-field.llms-cols-7 {\n width: 58.33333%; }\n .llms-form-field.llms-cols-8 {\n width: 66.66667%; }\n .llms-form-field.llms-cols-9 {\n width: 75%; }\n .llms-form-field.llms-cols-10 {\n width: 83.33333%; }\n .llms-form-field.llms-cols-11 {\n width: 91.66667%; }\n .llms-form-field.llms-cols-12 {\n width: 100%; } }\n .llms-form-field.type-hidden {\n padding: 0; }\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;\n width: auto; }\n .llms-form-field.type-radio input, .llms-form-field.type-checkbox input {\n margin-right: 5px; }\n .llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {\n display: block; }\n .llms-form-field.type-radio:not(.is-group) input[type=\"radio\"] {\n position: absolute;\n opacity: 0;\n visibility: none; }\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: rgba(255, 255, 255, 0.15) 0 1px 1px, inset rgba(0, 0, 0, 0.35) 0 0 0 1px;\n box-shadow: rgba(255, 255, 255, 0.15) 0 1px 1px, inset rgba(0, 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 .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 .llms-form-field .llms-input-group {\n margin-top: 5px; }\n .llms-form-field .llms-input-group .llms-form-field {\n padding: 0 0 5px 5px; }\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 .llms-form-field .llms-description {\n font-size: 14px;\n font-style: italic; }\n .llms-form-field .llms-required {\n color: #e5554e;\n margin-left: 4px; }\n .llms-form-field input, .llms-form-field textarea, .llms-form-field select {\n width: 100%;\n margin-bottom: 5px; }\n .llms-form-field .select2-container .select2-selection--single {\n height: auto;\n padding: 4px 6px; }\n .llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {\n height: 100%; }\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 .llms-password-strength-meter:before {\n bottom: 0;\n content: '';\n left: 0;\n position: absolute;\n top: 0;\n -webkit-transition: width .4s ease;\n transition: width .4s ease; }\n .llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {\n border-color: #e35b5b; }\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 .llms-password-strength-meter.too-short:before {\n width: 0; }\n .llms-password-strength-meter.weak {\n border-color: #f78b53; }\n .llms-password-strength-meter.weak:before {\n background: rgba(247, 139, 83, 0.25);\n width: 50%; }\n .llms-password-strength-meter.medium {\n border-color: #ffc733; }\n .llms-password-strength-meter.medium:before {\n background: rgba(255, 199, 51, 0.25);\n width: 75%; }\n .llms-password-strength-meter.strong {\n border-color: #83c373; }\n .llms-password-strength-meter.strong:before {\n background: rgba(131, 195, 115, 0.25);\n width: 100%; }\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 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg); } }\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg); } }\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.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-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 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 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 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 -webkit-filter: none;\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.llms-spinning {\n background: rgba(250, 250, 250, 0.7);\n bottom: 0;\n display: none;\n left: 0;\n position: absolute;\n right: 0;\n top: 0; }\n\n.llms-spinner {\n -webkit-animation: llms-spinning 1.5s linear infinite;\n animation: llms-spinning 1.5s linear infinite;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border: 4px solid #313131;\n border-radius: 50%;\n height: 40px;\n left: 50%;\n margin-left: -20px;\n margin-top: -20px;\n position: absolute;\n top: 50%;\n width: 40px; }\n .llms-spinner.small {\n border-width: 2px;\n height: 20px;\n margin-left: -10px;\n margin-top: -10px;\n width: 20px; }\n\n@-webkit-keyframes llms-spinning {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 50% {\n border-radius: 5%; }\n 100% {\n -webkit-transform: rotate(220deg);\n transform: rotate(220deg); } }\n\n@keyframes llms-spinning {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 50% {\n border-radius: 5%; }\n 100% {\n -webkit-transform: rotate(220deg);\n transform: rotate(220deg); } }\n\n/*# sourceMappingURL=../maps/css/admin.css.map */\n"],"sourceRoot":"../../css"}
\ No newline at end of file
+{"version":3,"sources":["admin.css"],"names":[],"mappings":"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","file":"../../css/admin.min.css","sourcesContent":["#poststuff .llms-metabox:before, #poststuff .llms-metabox:after,\n.llms-collapsible:before,\n.llms-collapsible .llms-collapsible-header:before,\n.llms-collapsible .llms-collapsible-body:before,\n.llms-metabox .llms-access-plans:before,\n.llms-form-fields:before,\n.llms-collapsible:after,\n.llms-collapsible .llms-collapsible-header:after,\n.llms-collapsible .llms-collapsible-body:after,\n.llms-metabox .llms-access-plans:after,\n.llms-form-fields:after {\n content: \" \";\n display: table; }\n\n#poststuff .llms-metabox:after,\n.llms-collapsible:after,\n.llms-collapsible .llms-collapsible-header:after,\n.llms-collapsible .llms-collapsible-body:after,\n.llms-metabox .llms-access-plans:after,\n.llms-form-fields:after {\n clear: both; }\n\n.llms-button-action,\n.llms-button-danger,\n.llms-button-primary,\n.llms-button-secondary {\n border: none;\n border-radius: 0;\n color: #fefefe;\n cursor: pointer;\n font-size: 16px;\n font-weight: 300;\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 .5s ease;\n transition: all .5s ease; }\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 .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 .llms-button-action:focus,\n .llms-button-danger:focus,\n .llms-button-primary:focus,\n .llms-button-secondary:focus {\n color: #fefefe; }\n .llms-button-action.auto,\n .llms-button-danger.auto,\n .llms-button-primary.auto,\n .llms-button-secondary.auto {\n width: auto; }\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 .llms-button-action.square,\n .llms-button-danger.square,\n .llms-button-primary.square,\n .llms-button-secondary.square {\n padding: 12px; }\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 .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 .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 .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 .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.llms-button-primary {\n background: #466dd8; }\n .llms-button-primary:hover, .llms-button-primary.clicked {\n background: #2b55cb; }\n .llms-button-primary:focus, .llms-button-primary:active {\n background: #6888df; }\n\n.llms-button-secondary {\n background: #e1e1e1;\n color: #414141; }\n .llms-button-secondary:hover {\n color: #414141;\n background: #cdcdcd; }\n .llms-button-secondary:focus, .llms-button-secondary:active {\n color: #414141;\n background: #ebebeb; }\n\n.llms-button-action {\n background: #f8954f; }\n .llms-button-action:hover, .llms-button-action.clicked {\n background: #f67d28; }\n .llms-button-action:focus, .llms-button-action:active {\n background: #faad76; }\n\n.llms-button-danger {\n background: #e5554e; }\n .llms-button-danger:hover {\n background: #e0332a; }\n .llms-button-danger:focus, .llms-button-danger:active {\n background: #e86660; }\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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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.2s 0.6s ease;\n transition: all 0.2s 0.6s 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#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: #ff922b; }\n\n/******************************************************************\n\nGrids for Breakpoints\n\n******************************************************************/\n.last-col {\n float: right;\n padding-right: 0 !important; }\n\n.last-col:after {\n clear: both; }\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 .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 .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 .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 .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 .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 .m-right {\n text-align: center; }\n .m-center {\n text-align: center; }\n .m-left {\n text-align: center; }\n .d-right {\n text-align: right; }\n .d-center {\n text-align: center; }\n .d-left {\n text-align: left; } }\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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .d-right {\n text-align: right; }\n .d-center {\n text-align: center; }\n .d-left {\n text-align: left; } }\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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .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 .d-1of11 {\n float: left;\n padding-right: 0.75em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 9.09090909091%; }\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 .d-right {\n text-align: right; }\n .d-center {\n text-align: center; }\n .d-left {\n text-align: left; } }\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: .5s;\n transition: .5s; }\n #llms-form-wrapper #llms_analytics_search:hover {\n background: #0185a3 !important; }\n #llms-form-wrapper #llms_analytics_search:active {\n background: #33b1cb !important; }\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 #llms-skip-setup-form .llms-admin-link:hover {\n color: #2ea2cc; }\n #llms-skip-setup-form .llms-admin-link:focus {\n color: #124964; }\n\n/**\n * Toggle Switch ( replaces checkbox on admin panels )\n */\n.llms-switch {\n position: relative; }\n .llms-switch .llms-toggle {\n position: absolute;\n margin-left: -9999px;\n visibility: hidden; }\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 .llms-switch input.llms-toggle-round + label {\n border: 2px solid #6c7781;\n border-radius: 10px;\n height: 20px;\n width: 36px; }\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 .llms-switch input.llms-toggle-round:checked + label {\n border-color: #11a0d2;\n background-color: #11a0d2; }\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 .llms-switch input.llms-toggle-round:checked + label:after {\n background-color: #fefefe;\n margin-left: 16px; }\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 .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#llms-profile-fields {\n margin: 50px 0; }\n #llms-profile-fields .llms-form-field {\n padding-left: 0; }\n #llms-profile-fields label {\n display: block;\n font-weight: bold;\n padding: 8px 0 2px; }\n #llms-profile-fields .type-checkbox .type-checkbox label {\n display: initial;\n font-weight: initial;\n padding: 0; }\n #llms-profile-fields .type-checkbox .type-checkbox input {\n display: inline-block;\n margin-bottom: 0;\n width: 1rem; }\n #llms-profile-fields select {\n max-width: 100%; }\n\na.llms-voucher-delete {\n background: #e5554e;\n color: #fefefe;\n display: block;\n padding: 4px 2px;\n text-decoration: none;\n -webkit-transition: ease .3s all;\n transition: ease .3s all; }\n a.llms-voucher-delete:hover {\n background: #af3a26; }\n\n.llms-voucher-codes-wrapper table,\n.llms-voucher-redemption-wrapper table {\n width: 100%;\n border-collapse: collapse; }\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 .llms-voucher-codes-wrapper table thead,\n .llms-voucher-redemption-wrapper table thead {\n background-color: #466dd8;\n color: #fff; }\n .llms-voucher-codes-wrapper table thead th,\n .llms-voucher-redemption-wrapper table thead th {\n padding: 10px 10px; }\n .llms-voucher-codes-wrapper table tr,\n .llms-voucher-redemption-wrapper table tr {\n counter-increment: row-counter; }\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 .llms-voucher-codes-wrapper table tr td,\n .llms-voucher-redemption-wrapper table tr td {\n padding: 5px; }\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.llms-voucher-codes-wrapper table {\n width: 100%;\n border-collapse: collapse; }\n .llms-voucher-codes-wrapper table th, .llms-voucher-codes-wrapper table td {\n border: none; }\n .llms-voucher-codes-wrapper table thead {\n background-color: #466dd8;\n color: #fff; }\n .llms-voucher-codes-wrapper table tr:nth-child(even) {\n background-color: #F1F1F1; }\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 .llms-voucher-codes-wrapper .llms-voucher-add-codes input[type=\"text\"] {\n width: 30px; }\n\n.llms-voucher-export-wrapper .llms-voucher-export-type {\n width: 100%; }\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 .llms-voucher-export-wrapper .llms-voucher-email-wrapper input[type=\"text\"] {\n width: 100%; }\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.postbox .inside {\n overflow: auto; }\n\n.llms-widget {\n background: #fefefe;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n margin-bottom: 20px;\n padding: 10px 20px;\n position: relative;\n width: 100%; }\n .llms-widget.alt {\n border: 1px solid #ccc;\n background-color: #efefef;\n margin-bottom: 10px; }\n .llms-widget.alt .llms-label {\n color: #777;\n font-size: 14px;\n margin-bottom: 10px;\n padding-bottom: 5px; }\n .llms-widget.alt h2 {\n color: #444;\n font-weight: 300; }\n .llms-widget h1 {\n font-size: 2.4em; }\n .llms-widget h2 {\n font-size: 1.8em; }\n .llms-widget .llms-label {\n border-bottom: 1px solid #ccc;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #999;\n font-size: 18px;\n font-weight: 300;\n letter-spacing: 1px;\n margin: 0 0 15px;\n padding-bottom: 10px;\n text-align: center;\n text-transform: uppercase; }\n .llms-widget .llms-chart {\n width: 100%;\n padding: 10px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n .llms-widget mark.yes {\n background-color: #7ad03a; }\n .llms-widget .llms-subtitle {\n margin-bottom: 0; }\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 .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 .llms-widget.is-loading .spinner {\n visibility: visible; }\n .llms-widget td[colspan=\"2\"] {\n padding-left: 0; }\n .llms-widget tr.llms-disabled-field {\n opacity: 0.5;\n pointer-events: none; }\n\n.llms-widget-1-3,\n.llms-widget-1-4,\n.llms-widget-1-5 {\n text-align: center; }\n\n.llms-widget .llms-widget-info-toggle {\n color: #ccc;\n cursor: pointer;\n font-size: 16px;\n position: absolute;\n right: 25px;\n top: 13px; }\n\n.llms-widget.info-showing .llms-widget-info {\n display: block; }\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 .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 .llms-widget-info p {\n margin: 0; }\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 .no-padding {\n padding: 0 !important; }\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 button 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 svg.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 svg.icon.tree-icon {\n height: 13px;\n width: 13px;\n vertical-align: middle; }\n svg.icon.section-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom; }\n svg.icon.button-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom; }\n svg.icon.button-icon-attr {\n height: 10px;\n width: 10px;\n vertical-align: middle; }\n svg.icon.list-icon {\n height: 12px;\n width: 12px;\n vertical-align: middle; }\n svg.icon.list-icon.on {\n color: #466dd8; }\n svg.icon.list-icon.off {\n color: #444; }\n svg.icon.detail-icon {\n height: 16px;\n width: 16px;\n vertical-align: text-bottom;\n cursor: default; }\n svg.icon.detail-icon.on {\n color: #466dd8; }\n svg.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\nMetabox Tabs\n\n******************************************************************/\n#side-sortables .tab-content {\n padding: 0; }\n\n.llms-mb-container .tab-content {\n display: none;\n background: #fefefe;\n padding: 15px; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) {\n margin: 0; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li {\n padding: 20px 0;\n margin: 0;\n border-bottom: 1px solid #ccc; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.select:not([class*=\"d-\"]) {\n width: 100%; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li:last-child {\n border: 0;\n padding-bottom: 0; }\n .llms-mb-container .tab-content ul:not(.select2-selection__rendered) > li.top {\n border-bottom: 0;\n padding-bottom: 0; }\n .llms-mb-container .tab-content .full-width {\n width: 100%; }\n .llms-mb-container .tab-content #wp-content-editor-tools {\n background: none; }\n\n.llms-mb-container .tab-content.llms-active {\n display: inherit; }\n\n.llms-mb-container .tab-content .no-border {\n border-bottom: 0px; }\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.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 -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: auto;\n overflow-y: hidden; }\n\nbody.modal-open {\n overflow: hidden; }\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#llms-icon-modal-close {\n width: 16px;\n height: 16px;\n fill: #fefefe; }\n\n.llms-modal-content {\n padding: 20px; }\n .llms-modal-content h3 {\n margin-top: 0; }\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 .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 #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 .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: .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 .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 .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 .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: .5s;\n transition: .5s;\n -webkit-box-shadow: 0 1px 1px #ccc;\n box-shadow: 0 1px 1px #ccc; }\n .llms-modal-form .llms-button-primary.full, .llms-modal-form .llms-button-secondary.full {\n width: 100%; }\n\n.modal-open .select2-dropdown {\n z-index: 1000005; }\n\n.button.llms-merge-code-button {\n vertical-align: middle; }\n .button.llms-merge-code-button img {\n margin-right: 3px;\n margin-top: -3px;\n vertical-align: middle; }\n\n.llms-mb-container .button.llms-merge-code-button img {\n margin-right: 4px; }\n\n.llms-mb-container .llms-merge-code-wrapper {\n float: right;\n top: -5px; }\n\n.llms-merge-code-wrapper {\n display: inline;\n position: relative; }\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: 160px; }\n .llms-merge-codes ul {\n margin: 0;\n padding: 0; }\n .llms-merge-codes li {\n cursor: pointer;\n margin: 0;\n padding: 4px 8px !important;\n border-bottom: 1px solid #ccc; }\n .llms-merge-codes li:hover {\n color: #23282d;\n background: #fefefe; }\n .llms-merge-codes.active {\n display: block;\n z-index: 777; }\n\n/******************************************************************\n\nBase Mobile\n\n******************************************************************/\n.llms-nav-tab,\n.llms-nav-tab-filters {\n display: block;\n width: 100%; }\n\nform.llms-nav-tab-filters.full-width {\n width: 100%; }\n form.llms-nav-tab-filters.full-width label {\n display: inline-block;\n width: 10%;\n text-align: left; }\n form.llms-nav-tab-filters.full-width .select2-container {\n width: 85% !important; }\n\n.llms-nav-tab-settings {\n display: block;\n width: 100%; }\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 #llms-form-wrapper .llms-date-select input[type=\"text\"] {\n width: 100%; }\n\nul.tabs li {\n display: block; }\n\n@media only screen and (min-width: 481px) {\n /******************************************************************\n\nLarger Phones\n\n******************************************************************/\n #llms-form-wrapper .llms-checkbox {\n width: 33%; } }\n\n@media only screen and (min-width: 768px) {\n /******************************************************************\n\nTablets and small computers\n\n******************************************************************/\n ul.tabs li {\n display: inline-block; }\n .llms-nav-tab {\n display: inline-block;\n width: 33%; }\n .llms-nav-tab-settings {\n display: inline-block;\n width: 25%; }\n #llms-form-wrapper .llms-select {\n width: 50%;\n max-width: 500px; }\n #llms-form-wrapper .llms-filter-options {\n width: 50%;\n max-width: 500px; }\n #llms-form-wrapper .llms-date-select {\n width: 47.5%; }\n #llms-form-wrapper .llms-date-select:first-child {\n margin-right: 5%; }\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 .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 .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 .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@media only screen and (min-width: 1030px) {\n /******************************************************************\n\nDesktop Stylesheet\n\n******************************************************************/\n .llms-nav-tab {\n display: inline-block;\n width: 33.333%; }\n .llms-nav-tab-settings {\n display: inline-block;\n width: 25%; }\n #llms-form-wrapper .llms-select {\n display: inline-block;\n width: 47.5%; }\n #llms-form-wrapper .llms-select:first-child {\n margin-right: 5%; }\n #llms-form-wrapper .llms-filter-options {\n display: inline-block;\n width: 47.5%; }\n #llms-form-wrapper .llms-filter-options.date-filter {\n margin-right: 5%; }\n #llms-form-wrapper .llms-filter-options .llms-date-select {\n margin-bottom: 0; }\n #llms-form-wrapper .llms-date-select {\n width: 47.5%; }\n #llms-form-wrapper .llms-date-select:first-child {\n margin-right: 5%; }\n .llms-widget-row:before, .llms-widget-row:after {\n content: \" \";\n display: table; }\n .llms-widget-row:after {\n clear: both; }\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 .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 .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 .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@media only screen and (min-width: 1240px) {\n /******************************************************************\n\nlarge Monitor Stylesheet\n\n******************************************************************/\n .llms-nav-tab-filters,\n .llms-nav-tab-settings {\n float: left;\n width: 12.5%; } }\n\n#post_course_difficulty {\n min-width: 200px; }\n\n#_video-embed, #_audio-embed {\n width: 100%; }\n\n.clear {\n clear: both;\n width: 100%; }\n\n.llms_certificate_default_image, .llms_certificate_image {\n width: 300px; }\n\n.llms_achievement_default_image, .llms_achievement_image {\n width: 120px; }\n\ndiv[id^=\"lifterlms-\"] .inside {\n overflow: visible; }\n\n.llms-admin-notice {\n position: relative; }\n .llms-admin-notice .notice-dismiss {\n text-decoration: none; }\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\na.llms-view-as {\n line-height: 2;\n margin-right: 8px; }\n\n.llms-image-field-preview {\n max-height: 80px;\n vertical-align: middle;\n width: auto; }\n\n.llms-image-field-remove.hidden {\n display: none; }\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 .llms-log-viewer pre {\n font-family: monospace;\n margin: 0;\n padding: 0;\n white-space: pre-wrap; }\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 .llms-status--tools .llms-table td, .llms-status--tools .llms-table th {\n padding: 10px;\n vertical-align: top; }\n .llms-status--tools .llms-table th {\n width: 28%; }\n .llms-status--tools .llms-table p {\n margin: 0 0 10px; }\n\n.llms-error {\n color: #e5554e;\n font-style: italic; }\n\n.llms-table-wrap {\n position: relative; }\n\n.llms-table-header {\n padding: 0 10px;\n margin-bottom: 10px; }\n .llms-table-header:before, .llms-table-header:after {\n content: \" \";\n display: table; }\n .llms-table-header:after {\n clear: both; }\n .llms-table-header h2 {\n padding: 0;\n display: inline-block;\n line-height: 1;\n margin: 0;\n vertical-align: middle; }\n .llms-table-header .llms-table-search,\n .llms-table-header .llms-table-filters {\n float: right;\n padding-left: 10px; }\n .llms-table-header .llms-table-search input {\n margin: 0;\n padding: 5px; }\n\n.llms-table {\n border: 1px solid #cecece;\n border-collapse: collapse;\n width: 100%; }\n .llms-table a {\n color: #466dd8; }\n .llms-table a:hover {\n color: #2b55cb; }\n .llms-table td, .llms-table th {\n border-bottom: 1px solid #cecece;\n font-size: 95%;\n padding: 4px;\n text-align: center; }\n .llms-table td.expandable.closed, .llms-table th.expandable.closed {\n display: none; }\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 .llms-table tr.llms-quiz-pending td {\n font-weight: 700; }\n .llms-table thead th,\n .llms-table tfoot th {\n background-color: #eaeaea;\n font-weight: 500; }\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 .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 .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 .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 .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 .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 .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 .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 .llms-table tfoot th {\n border-bottom: none; }\n .llms-table tfoot th .llms-table-export {\n float: left; }\n .llms-table tfoot th .llms-table-export .llms-table-progress {\n background: #fafafa;\n display: none;\n margin-left: 8px;\n vertical-align: middle;\n width: 100px; }\n .llms-table tfoot th .llms-table-pagination {\n float: right; }\n .llms-table.zebra tbody tr:nth-child(even) th, .llms-table.zebra tbody tr:nth-child(even) td {\n background-color: #fafafa; }\n .llms-table.zebra tbody tr:nth-child(odd) th, .llms-table.zebra tbody tr:nth-child(odd) td {\n background-color: #fff; }\n .llms-table.text-left td, .llms-table.text-left th {\n text-align: left; }\n .llms-table.size-large td, .llms-table.size-large th {\n font-size: 105%;\n padding: 8px; }\n .llms-table .llms-action-icon {\n color: #777;\n text-decoration: none; }\n .llms-table .llms-action-icon .tooltip {\n cursor: pointer; }\n .llms-table .llms-action-icon:hover {\n color: #466dd8; }\n .llms-table .llms-action-icon.danger:hover {\n color: #e5554e; }\n .llms-table .llms-table-page-count {\n font-size: 11px;\n font-weight: 300;\n padding: 0 5px; }\n\n.llms-table-progress {\n background: #eee;\n height: 16px;\n position: relative; }\n .llms-table-progress .llms-table-progress-text {\n font-size: 11px;\n line-height: 16px;\n position: absolute;\n right: 4px;\n top: 0; }\n .llms-table-progress .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.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.llms-gb-table-notifications th, .llms-gb-table-notifications td {\n text-align: left; }\n\n.llms-order-note .llms-order-note-content {\n background: #efefef;\n margin-bottom: 10px;\n padding: 10px;\n position: relative; }\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 .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.llms-mb-list label {\n font-weight: bold;\n width: 100%;\n display: block; }\n\n.llms-mb-list .input-full {\n width: 100%; }\n\n#poststuff .llms-metabox h2, #poststuff .llms-metabox h3, #poststuff .llms-metabox h6 {\n font-weight: 300;\n margin: 0;\n padding: 0; }\n\n#poststuff .llms-metabox h2 {\n font-size: 22px; }\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 #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.llms-metabox-section {\n background: #fff;\n margin-top: 25px;\n position: relative; }\n .llms-metabox-section.no-top-margin {\n margin-top: 0; }\n .llms-metabox-section .llms-metabox-field {\n margin: 15px 0;\n position: relative; }\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 .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 .llms-metabox-section .llms-metabox-field input.md-text {\n width: 105px; }\n .llms-metabox-section .llms-metabox-field input.sm-text {\n width: 45px; }\n .llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-date-input {\n width: 95px; }\n .llms-metabox-section .llms-metabox-field .llms-datetime-field .llms-time-input {\n width: 45px; }\n .llms-metabox-section .llms-metabox-field .llms-datetime-field em {\n font-style: normal;\n padding: 0 3px; }\n\n.llms-collapsible {\n border: 1px solid #e5e5e5;\n position: relative;\n margin-top: 0;\n margin-bottom: -1px; }\n .llms-collapsible:last-child {\n margin-bottom: 0; }\n .llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-down {\n display: none; }\n .llms-collapsible.opened .llms-collapsible-header .dashicons-arrow-up {\n display: inline; }\n .llms-collapsible .llms-collapsible-header {\n padding: 10px; }\n .llms-collapsible .llms-collapsible-header h3 {\n color: #777;\n margin: 0;\n font-size: 16px; }\n .llms-collapsible .llms-collapsible-header .dashicons-arrow-up {\n display: inline; }\n .llms-collapsible .llms-collapsible-header .dashicons-arrow-up {\n display: none; }\n .llms-collapsible .llms-collapsible-header a {\n text-decoration: none; }\n .llms-collapsible .llms-collapsible-header .dashicons {\n color: #777;\n cursor: pointer;\n -webkit-transition: color .4s ease;\n transition: color .4s ease; }\n .llms-collapsible .llms-collapsible-header .dashicons:hover {\n color: #466dd8; }\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: #e5554e; }\n .llms-collapsible .llms-collapsible-body {\n display: none;\n padding: 10px; }\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.post-type-llms_order #post-body-content {\n display: none; }\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.llms-table tbody tr.llms-txn-failed td {\n background-color: rgba(229, 85, 78, 0.5);\n border-bottom-color: rgba(229, 85, 78, 0.5); }\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.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 .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 .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.llms-manual-txn-form {\n background-color: #eaeaea; }\n .llms-manual-txn-form .llms-metabox-section {\n background-color: #eaeaea; }\n\n#llms-remaining-edit {\n display: none; }\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.llms-metabox #llms-new-access-plan-model {\n display: none; }\n\n.llms-metabox .llms-access-plans {\n margin-top: 25px; }\n .llms-metabox .llms-access-plans > .llms-no-plans-msg {\n display: none; }\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 .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 .llms-metabox .llms-access-plans .llms-spinning {\n z-index: 1; }\n .llms-metabox .llms-access-plans .llms-invalid {\n border-color: #e5554e; }\n .llms-metabox .llms-access-plans .llms-invalid .dashicons-warning {\n display: inline; }\n .llms-metabox .llms-access-plans .dashicons-warning {\n display: none; }\n\n.llms-metabox .llms-access-plan {\n text-align: left; }\n .llms-metabox .llms-access-plan [data-tip]:before {\n text-align: center; }\n .llms-metabox .llms-access-plan .llms-plan-link,\n .llms-metabox .llms-access-plan [data-controller] {\n display: none; }\n .llms-metabox .llms-access-plan:hover .llms-plan-link, .llms-metabox .llms-access-plan.opened .llms-plan-link {\n display: inline-block; }\n .llms-metabox .llms-access-plan .llms-metabox-field {\n margin: 5px 0; }\n .llms-metabox .llms-access-plan .llms-required {\n color: #e5554e;\n margin-left: 3px; }\n\n.llms-metabox-students .llms-table tr .name {\n text-align: left; }\n\n.llms-metabox-students .llms-add-student:hover {\n color: #83c373; }\n\n.llms-metabox-students .llms-remove-student:hover {\n color: #e5554e; }\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.llms-mb-list.repeater .llms-repeater-rows {\n position: relative;\n margin-top: 10px;\n min-height: 10px; }\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.llms-builder-launcher .llms-button-primary {\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n\n.wp-list-table .llms-status {\n border-radius: 3px;\n border-bottom: 1px solid #fff;\n display: inline-block;\n font-size: 80%;\n padding: 3px 6px;\n vertical-align: middle; }\n .wp-list-table .llms-status.llms-size--large {\n font-size: 105%;\n padding: 6px 12px; }\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: #1f3818;\n background-color: #83c373; }\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: #5a110d;\n background-color: #e5554e; }\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: #664200;\n background-color: orange; }\n\n#lifterlms-order-transactions .llms-table tfoot th {\n text-align: right; }\n\n.llms-post-table-post-filter {\n display: inline-block;\n margin-right: 6px;\n max-width: 100%;\n width: 220px; }\n\n.llms-nav-tab-wrapper {\n background: #466dd8;\n margin: 20px 0; }\n .llms-nav-tab-wrapper.llms-nav-secondary {\n background: #e1e1e1; }\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item {\n margin: 0; }\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #cdcdcd; }\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {\n color: #414141;\n font-size: 13px;\n padding: 8px 14px; }\n .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link .dashicons {\n font-size: 15px;\n height: 15px;\n width: 15px; }\n .llms-nav-tab-wrapper.llms-nav-text {\n background: inherit; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item {\n background: inherit; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:last-child:after {\n display: none; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:after {\n content: '|';\n display: inline-block;\n margin: 0 3px 0 0; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link:hover,\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item.llms-active .llms-nav-link {\n background: inherit;\n color: #466dd8;\n text-decoration: underline; }\n .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item .llms-nav-link {\n color: #1c3987;\n display: inline-block;\n letter-spacing: 0;\n margin: 0;\n padding: 0;\n text-transform: none; }\n .llms-nav-tab-wrapper .llms-nav-items {\n margin: 0; }\n .llms-nav-tab-wrapper .llms-nav-items:before, .llms-nav-tab-wrapper .llms-nav-items:after {\n content: \" \";\n display: table; }\n .llms-nav-tab-wrapper .llms-nav-items:after {\n clear: both; }\n .llms-nav-tab-wrapper .llms-nav-item {\n margin: 0; }\n .llms-nav-tab-wrapper .llms-nav-item .llms-nav-link:hover {\n background: #2b55cb; }\n .llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {\n background: #1c3987; }\n .llms-nav-tab-wrapper .llms-nav-item.llms-active .llms-nav-link {\n font-weight: 400; }\n @media only screen and (min-width: 768px) {\n .llms-nav-tab-wrapper .llms-nav-item {\n float: left; }\n .llms-nav-tab-wrapper .llms-nav-item.llms-nav-item-right {\n float: right; } }\n .llms-nav-tab-wrapper .llms-nav-link {\n color: #fff;\n cursor: pointer;\n display: block;\n font-weight: 300;\n font-size: 14px;\n padding: 9px 18px;\n text-align: center;\n text-decoration: none;\n -webkit-transition: all .3s ease;\n transition: all .3s ease; }\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.llms-reporting.wrap .llms-options-page-contents {\n background: #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: 0 0 20px;\n padding: 20px; }\n .llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary {\n background: #fafafa;\n -webkit-box-shadow: none;\n box-shadow: none;\n margin: 0 -20px 40px;\n padding: 0 20px; }\n .llms-reporting.wrap .llms-options-page-contents .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-link {\n padding: 8px 14px; }\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.name, .llms-reporting.wrap td.name,\n.llms-reporting.wrap th.title, .llms-reporting.wrap td.title {\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 .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 .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--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-item.llms-analytics-form, .llms-reporting.wrap.tab--sales .llms-nav-item.llms-analytics-form {\n color: #414141;\n font-size: 13px;\n padding: 6px 14px; }\n .llms-reporting.wrap.tab--enrollments .llms-nav-item.llms-analytics-form input, .llms-reporting.wrap.tab--sales .llms-nav-item.llms-analytics-form input {\n border: 0;\n font-size: 13px;\n margin: 0;\n padding: 3px 6px;\n vertical-align: middle; }\n .llms-reporting.wrap.tab--enrollments .llms-nav-item.llms-analytics-form .select2-container input, .llms-reporting.wrap.tab--sales .llms-nav-item.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 .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 .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 .llms-reporting.wrap.tab--enrollments .llms-analytics-filters .button, .llms-reporting.wrap.tab--sales .llms-analytics-filters .button {\n float: right; }\n\n.llms-reporting.wrap .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap {\n width: 160px; }\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 .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: #1c3987;\n text-decoration: none; }\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 .llms-reporting-header {\n background: #fafafa;\n padding: 20px;\n margin: 0 -20px; }\n .llms-reporting-tab .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 .llms-reporting-tab .llms-reporting-header .llms-reporting-header-img img {\n display: block;\n max-height: 64px;\n width: auto; }\n .llms-reporting-tab .llms-reporting-header .llms-reporting-header-info {\n display: inline-block;\n vertical-align: middle; }\n\n.llms-reporting-breadcrumbs {\n background: #fafafa;\n margin: -20px -20px 0;\n padding: 20px 20px 10px; }\n .llms-reporting-breadcrumbs a {\n color: #466dd8;\n text-decoration: none; }\n .llms-reporting-breadcrumbs a:hover {\n color: #2b55cb; }\n .llms-reporting-breadcrumbs a:after {\n content: ' > ';\n color: #555; }\n .llms-reporting-breadcrumbs a:last-child {\n color: #1c3987; }\n .llms-reporting-breadcrumbs a:last-child:after {\n display: none; }\n\n#llms-students-table .name {\n text-align: left; }\n\n.llms-reporting-tab-content {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex; }\n .llms-reporting-tab-content > header:before, .llms-reporting-tab-content > header:after {\n content: \" \";\n display: table; }\n .llms-reporting-tab-content > header:after {\n clear: both; }\n .llms-reporting-tab-content h3 {\n margin-bottom: 20px; }\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 .llms-reporting-tab-content .llms-reporting-tab-main {\n -webkit-box-flex: 3;\n -ms-flex: 3;\n flex: 3; }\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 .llms-reporting-tab-content > .llms-table-wrap {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1; }\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.llms-reporting-widget {\n border-top: 4px solid #466dd8;\n background: #fafafa;\n margin-bottom: 0.75em;\n padding: 18px 15px 15px; }\n .llms-reporting-widget:before, .llms-reporting-widget:after {\n content: \" \";\n display: table; }\n .llms-reporting-widget:after {\n clear: both; }\n .llms-reporting-widget .fa {\n color: #555;\n float: left;\n font-size: 32px;\n margin-right: 10px; }\n .llms-reporting-widget .llms-reporting-widget-data {\n line-height: 0.8; }\n .llms-reporting-widget strong {\n color: #333;\n font-size: 20px; }\n .llms-reporting-widget.llms-reporting-student-address strong {\n line-height: 1.1; }\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 .llms-reporting-widget small {\n color: #888; }\n .llms-reporting-widget small.compare {\n margin-left: 5px; }\n .llms-reporting-widget small.compare.positive {\n color: #83c373; }\n .llms-reporting-widget small.compare.negative {\n color: #e5554e; }\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 .llms-reporting-event:before, .llms-reporting-event:after {\n content: \" \";\n display: table; }\n .llms-reporting-event:after {\n clear: both; }\n .llms-reporting-event.color--blue {\n border-left-color: #466dd8; }\n .llms-reporting-event.color--green, .llms-reporting-event._enrollment_trigger, .llms-reporting-event._is_complete.yes {\n border-left-color: #83c373; }\n .llms-reporting-event.color--purple, .llms-reporting-event._status.enrolled {\n border-left-color: #845ef7; }\n .llms-reporting-event.color--red, .llms-reporting-event._status.expired, .llms-reporting-event._status.cancelled {\n border-left-color: #e5554e; }\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: #ff922b; }\n .llms-reporting-event time {\n color: #888; }\n .llms-reporting-event .llms-student-avatar {\n margin-left: 10px;\n float: right; }\n .llms-reporting-event a {\n text-decoration: none;\n color: inherit; }\n\n.llms-quiz-attempt-results {\n margin: 0;\n padding: 0;\n list-style-type: none; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question {\n background: #efefef;\n margin: 0 0 10px;\n position: relative; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer {\n color: inherit;\n display: block;\n padding: 10px 35px 10px 10px;\n text-decoration: none; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer:before, .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer:after {\n content: \" \";\n display: table; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .toggle-answer:after {\n clear: both; }\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(255, 146, 43, 0.2); }\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: #ff922b; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct {\n background: rgba(131, 195, 115, 0.2); }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.correct .llms-status-icon {\n background-color: #83c373; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect {\n background: rgba(229, 85, 78, 0.2); }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.status--graded.incorrect .llms-status-icon {\n background-color: #e5554e; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-question-title {\n float: left;\n margin: 0;\n line-height: 1; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-points {\n float: right;\n line-height: 1; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-status-icon-tip {\n position: absolute;\n right: -12px;\n top: -2px; }\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 .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main {\n display: none;\n padding: 0 10px 10px; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main .llms-quiz-results-label {\n font-weight: 700;\n margin-bottom: 10px; }\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 .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 .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 .llms-quiz-attempt-results .llms-quiz-attempt-question .llms-quiz-attempt-question-main img {\n height: auto;\n max-width: 200px; }\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 .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 .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 .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 .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed {\n opacity: .5; }\n .llms-quiz-attempt-results .llms-quiz-attempt-question.type--removed .llms-question-title {\n font-style: italic;\n font-weight: normal; }\n\n.wrap.llms-reporting .llms-header,\n.wrap.lifterlms-settings .llms-header {\n background: #fff;\n border-bottom: 1px solid #efefef;\n margin: -10px -20px 0;\n padding: 10px 0;\n z-index: 1; }\n .wrap.llms-reporting .llms-header .lifterlms-logo,\n .wrap.lifterlms-settings .llms-header .lifterlms-logo {\n max-width: 140px; }\n .wrap.llms-reporting .llms-header .llms-save,\n .wrap.lifterlms-settings .llms-header .llms-save {\n float: right; }\n .wrap.llms-reporting .llms-header .llms-inside-wrap,\n .wrap.lifterlms-settings .llms-header .llms-inside-wrap {\n padding: 0 10px; }\n\n.wrap.llms-reporting .llms-inside-wrap,\n.wrap.lifterlms-settings .llms-inside-wrap {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n max-width: 1000px;\n margin: 0 auto; }\n\n.wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary,\n.wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary {\n background: #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: 0 -20px 20px;\n z-index: 1; }\n .wrap.llms-reporting .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item .llms-nav-link:hover,\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-nav-link:hover,\n .wrap.lifterlms-settings .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 .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 font-weight: 700; }\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 border-top: 2px solid transparent;\n padding: 14px; }\n\n.wrap.llms-reporting .llms-setting-group,\n.wrap.lifterlms-settings .llms-setting-group {\n background: #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: 0 0 20px;\n padding: 20px; }\n .wrap.llms-reporting .llms-setting-group .llms-label,\n .wrap.lifterlms-settings .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 .wrap.llms-reporting .llms-setting-group .llms-help-tooltip .dashicons,\n .wrap.lifterlms-settings .llms-setting-group .llms-help-tooltip .dashicons {\n color: #444;\n cursor: help; }\n .wrap.llms-reporting .llms-setting-group .form-table,\n .wrap.lifterlms-settings .llms-setting-group .form-table {\n margin: 0; }\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 margin-top: 0; }\n .wrap.llms-reporting .llms-setting-group td[colspan=\"2\"],\n .wrap.lifterlms-settings .llms-setting-group td[colspan=\"2\"] {\n padding-top: 0;\n padding-left: 0; }\n .wrap.llms-reporting .llms-setting-group tr.llms-disabled-field,\n .wrap.lifterlms-settings .llms-setting-group tr.llms-disabled-field {\n opacity: 0.5;\n pointer-events: none; }\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 width: 50%; }\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 width: 30%; }\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 width: 20%; }\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 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-nav-link:hover,\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-nav-link:hover,\n .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary .llms-nav-item.llms-active .llms-nav-link {\n background: #fff; } }\n\n.wrap.llms-reporting #llms-mailhawk-connect,\n.wrap.lifterlms-settings #llms-mailhawk-connect {\n font-size: 16px;\n height: auto;\n margin: 0 0 6px;\n padding: 8px 14px;\n position: relative; }\n .wrap.llms-reporting #llms-mailhawk-connect .dashicons,\n .wrap.lifterlms-settings #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 font-size: 16px;\n height: auto;\n margin: 0 0 6px;\n padding: 8px 14px;\n position: relative; }\n .wrap.llms-reporting #llms-sendwp-connect .fa,\n .wrap.lifterlms-settings #llms-sendwp-connect .fa {\n margin-right: 4px; }\n\n@media only screen and (min-width: 782px) {\n .wrap.lifterlms-settings .llms-header {\n position: sticky;\n top: 30px; }\n .wrap.lifterlms-settings .llms-nav-tab-wrapper.llms-nav-secondary {\n position: sticky;\n top: 93px; } }\n\n.wrap.llms-reporting .llms-inside-wrap {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n max-width: 1000px;\n margin: 0 0 0 20px; }\n\n.llms-remarks .llms-remarks-field {\n height: 120px;\n width: 100%; }\n\n.llms-remarks input[type=\"number\"] {\n width: 60px; }\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.llms-form-fields {\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n .llms-form-fields.flush .llms-form-field {\n padding: 0 0 10px; }\n .llms-form-fields .wp-block-columns, .llms-form-fields .wp-block-column {\n margin-bottom: 0; }\n\n.llms-form-heading {\n padding: 0 10px 10px; }\n\n.llms-form-field {\n float: left;\n padding: 0 10px 10px;\n position: relative;\n width: 100%; }\n .llms-form-field label:empty:after {\n content: '\\00a0'; }\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 .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(229, 85, 78, 0.3);\n border-color: #e5554e; }\n .llms-form-field.llms-visually-hidden-field {\n display: none; }\n .llms-form-field.align-right {\n text-align: right; }\n @media screen and (min-width: 600px) {\n .llms-form-field.llms-cols-1 {\n width: 8.33333%; }\n .llms-form-field.llms-cols-2 {\n width: 16.66667%; }\n .llms-form-field.llms-cols-3 {\n width: 25%; }\n .llms-form-field.llms-cols-4 {\n width: 33.33333%; }\n .llms-form-field.llms-cols-5 {\n width: 41.66667%; }\n .llms-form-field.llms-cols-6 {\n width: 50%; }\n .llms-form-field.llms-cols-7 {\n width: 58.33333%; }\n .llms-form-field.llms-cols-8 {\n width: 66.66667%; }\n .llms-form-field.llms-cols-9 {\n width: 75%; }\n .llms-form-field.llms-cols-10 {\n width: 83.33333%; }\n .llms-form-field.llms-cols-11 {\n width: 91.66667%; }\n .llms-form-field.llms-cols-12 {\n width: 100%; } }\n .llms-form-field.type-hidden {\n padding: 0; }\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;\n width: auto; }\n .llms-form-field.type-radio input, .llms-form-field.type-checkbox input {\n margin-right: 5px; }\n .llms-form-field.type-radio label + .llms-description, .llms-form-field.type-checkbox label + .llms-description {\n display: block; }\n .llms-form-field.type-radio:not(.is-group) input[type=\"radio\"] {\n position: absolute;\n opacity: 0;\n visibility: none; }\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: rgba(255, 255, 255, 0.15) 0 1px 1px, inset rgba(0, 0, 0, 0.35) 0 0 0 1px;\n box-shadow: rgba(255, 255, 255, 0.15) 0 1px 1px, inset rgba(0, 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 .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 .llms-form-field .llms-input-group {\n margin-top: 5px; }\n .llms-form-field .llms-input-group .llms-form-field {\n padding: 0 0 5px 5px; }\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 .llms-form-field .llms-description {\n font-size: 14px;\n font-style: italic; }\n .llms-form-field .llms-required {\n color: #e5554e;\n margin-left: 4px; }\n .llms-form-field input, .llms-form-field textarea, .llms-form-field select {\n width: 100%;\n margin-bottom: 5px; }\n .llms-form-field .select2-container .select2-selection--single {\n height: auto;\n padding: 4px 6px; }\n .llms-form-field .select2-container--default .select2-selection--single .select2-selection__arrow {\n height: 100%; }\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 .llms-password-strength-meter:before {\n bottom: 0;\n content: '';\n left: 0;\n position: absolute;\n top: 0;\n -webkit-transition: width .4s ease;\n transition: width .4s ease; }\n .llms-password-strength-meter.mismatch, .llms-password-strength-meter.too-short, .llms-password-strength-meter.very-weak {\n border-color: #e35b5b; }\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 .llms-password-strength-meter.too-short:before {\n width: 0; }\n .llms-password-strength-meter.weak {\n border-color: #f78b53; }\n .llms-password-strength-meter.weak:before {\n background: rgba(247, 139, 83, 0.25);\n width: 50%; }\n .llms-password-strength-meter.medium {\n border-color: #ffc733; }\n .llms-password-strength-meter.medium:before {\n background: rgba(255, 199, 51, 0.25);\n width: 75%; }\n .llms-password-strength-meter.strong {\n border-color: #83c373; }\n .llms-password-strength-meter.strong:before {\n background: rgba(131, 195, 115, 0.25);\n width: 100%; }\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 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg); } }\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg); } }\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.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-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 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 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 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 -webkit-filter: none;\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.llms-spinning {\n background: rgba(250, 250, 250, 0.7);\n bottom: 0;\n display: none;\n left: 0;\n position: absolute;\n right: 0;\n top: 0; }\n\n.llms-spinner {\n -webkit-animation: llms-spinning 1.5s linear infinite;\n animation: llms-spinning 1.5s linear infinite;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border: 4px solid #313131;\n border-radius: 50%;\n height: 40px;\n left: 50%;\n margin-left: -20px;\n margin-top: -20px;\n position: absolute;\n top: 50%;\n width: 40px; }\n .llms-spinner.small {\n border-width: 2px;\n height: 20px;\n margin-left: -10px;\n margin-top: -10px;\n width: 20px; }\n\n@-webkit-keyframes llms-spinning {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 50% {\n border-radius: 5%; }\n 100% {\n -webkit-transform: rotate(220deg);\n transform: rotate(220deg); } }\n\n@keyframes llms-spinning {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg); }\n 50% {\n border-radius: 5%; }\n 100% {\n -webkit-transform: rotate(220deg);\n transform: rotate(220deg); } }\n\n/*# sourceMappingURL=../maps/css/admin.css.map */\n"],"sourceRoot":"../../css"}
\ No newline at end of file
diff --git a/assets/maps/js/llms-admin-addons.min.js.map b/assets/maps/js/llms-admin-addons.min.js.map
index 2357f55006..692a6aa653 100644
--- a/assets/maps/js/llms-admin-addons.min.js.map
+++ b/assets/maps/js/llms-admin-addons.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["llms-admin-addons.js"],"names":["$","actions","update","install","activate","deactivate","on","e","preventDefault","filter","prop","trigger","action","this","attr","is","$el","addClass","removeClass","each","key","count","html","$desc","find","LLMS","l10n","replace","%d","translate","show","hide","update_ui","toggle","jQuery"],"mappings":"CASA,SAAYA,GAOX,IAAIC,EAAU,CACbC,OAAQ,EACRC,QAAS,EACTC,SAAU,EACVC,WAAY,GASbL,EAAG,oBAAqBM,GAAI,QAAS,SAAUC,GAC9CA,EAAEC,iBACFR,EAAG,yBAA0BS,OAAQ,YAAaC,KAAM,WAAW,GAAQC,QAAS,YASrFX,EAAG,yBAA0BM,GAAI,SAAU,WAE1C,IAAIM,EAASZ,EAAGa,MAAOC,KAAM,eAExBd,EAAGa,MAAOE,GAAI,YAClBd,EAASW,KAETX,EAASW,KAeX,WAEC,IAAII,EAAMhB,EAAG,6BACRC,EAAQC,QAAUD,EAAQE,SAAWF,EAAQG,UAAYH,EAAQI,WACrEW,EAAIC,SAAU,UAEdD,EAAIE,YAAa,UAGlBlB,EAAEmB,KAAMlB,EAAS,SAAUmB,EAAKC,GAE/B,IAAIC,EAAQ,GACXC,EAAQP,EAAIQ,KAAM,mBAAqBJ,GAEnCnB,EAASmB,IAEZE,EADqB,EAAjBrB,EAASmB,GACNK,KAAKC,KAAKC,QAAS,aAAc,CAAEC,KAAM3B,EAASmB,KAElDK,KAAKC,KAAKG,UAAW,YAE7BN,EAAMO,QAENP,EAAMQ,OAEPR,EAAMC,KAAM,QAASF,KAAMA,KApC5BU,KAgDDhC,EAAG,4BAA6BM,GAAI,QAAS,WAC5CN,EAAG,wBAAyBiC,WA1F9B,CA6FKC","file":"../../js/llms-admin-addons.min.js","sourcesContent":["/**\n * UI & UX for the Admin add-ons management screen\n *\n * @package LifterLMS/Scripts\n *\n * @since 3.22.0\n * @version 3.22.0\n */\n\n( function( $ ) {\n\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\tvar 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 * @version 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 * @version 3.22.0\n\t */\n\t$( 'input.llms-bulk-check' ).on( 'change', function() {\n\n\t\tvar 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\tupdate_ui();\n\n\t} );\n\n\t/**\n\t * Updates the UI when bulk actions are changed\n\t * Shows # of each action to be applied & shows the form submission / cancel buttons\n\t *\n\t * @return void\n\t * @since 3.22.0\n\t * @version 3.22.0\n\t */\n\tfunction update_ui() {\n\n\t\tvar $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\n\t\t\tvar html = '',\n\t\t\t\t$desc = $el.find( '.llms-bulk-desc.' + key );\n\n\t\t\tif ( actions[ key ] ) {\n\t\t\t\tif ( actions[ key ] > 1 ) {\n\t\t\t\t\thtml = LLMS.l10n.replace( '%d add-ons', { '%d': actions[ key ] } );\n\t\t\t\t} else {\n\t\t\t\t\thtml = LLMS.l10n.translate( '1 add-on' );\n\t\t\t\t}\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' ).html( html );\n\n\t\t} );\n\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 * @version 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} )( jQuery );\n"],"sourceRoot":"../../js"}
\ No newline at end of file
+{"version":3,"sources":["llms-admin-addons.js"],"names":["e","t","n","__esModule","default","d","a","c","o","Object","defineProperty","enumerable","get","prototype","hasOwnProperty","call","window","wp","i18n","jQuery","i","update","install","activate","deactivate","on","preventDefault","filter","prop","trigger","this","attr","is","addClass","removeClass","each","find","sprintf","_n","show","hide","text","toggle"],"mappings":"CAAC,WAAW,aAAa,IAAIA,EAAEC,EAAE,CAACC,EAAE,SAASF,GAAG,IAAIE,EAAEF,GAAGA,EAAEG,WAAW,WAAW,OAAOH,EAAEI,SAAS,WAAW,OAAOJ,GAAG,OAAOC,EAAEI,EAAEH,EAAE,CAACI,EAAEJ,IAAIA,GAAGG,EAAE,SAASL,EAAEE,GAAG,IAAI,IAAIK,KAAKL,EAAED,EAAEO,EAAEN,EAAEK,KAAKN,EAAEO,EAAER,EAAEO,IAAIE,OAAOC,eAAeV,EAAEO,EAAE,CAACI,YAAW,EAAGC,IAAIV,EAAEK,MAAMC,EAAE,SAASR,EAAEC,GAAG,OAAOQ,OAAOI,UAAUC,eAAeC,KAAKf,EAAEC,KAAKC,EAAEc,OAAOC,GAAGC,KAAKX,EAAES,OAAOG,OAAOC,EAAEnB,EAAEC,EAAEK,GAAGP,EAAE,CAACqB,OAAO,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,WAAW,GAAGJ,GAAAA,CAAI,oBAAoBK,GAAG,QAAQ,SAAUzB,GAAGA,EAAE0B,iBAAiBN,GAAAA,CAAI,yBAAyBO,OAAO,YAAYC,KAAK,WAAU,GAAIC,QAAQ,YAAaT,GAAAA,CAAI,yBAAyBK,GAAG,SAAS,WAAY,IAAIxB,EAAEM,EAAEa,GAAAA,CAAIU,MAAMC,KAAK,eAAeX,GAAAA,CAAIU,MAAME,GAAG,YAAYhC,EAAEO,KAAKP,EAAEO,KAAKN,EAAEmB,GAAAA,CAAI,6BAA6BpB,EAAEqB,QAAQrB,EAAEsB,SAAStB,EAAEuB,UAAUvB,EAAEwB,WAAWvB,EAAEgC,SAAS,UAAUhC,EAAEiC,YAAY,UAAUd,IAAIe,KAAKnC,EAAE,SAAUA,EAAEO,GAAG,IAAIa,EAAEnB,EAAEmC,KAAK,mBAAmBpC,GAAGM,EAAE,GAAGC,GAEj3BD,GAAE,EAAGJ,EAAEmC,UAAS,EAAGnC,EAAEoC,IAAI,YAAY,aAAa/B,EAAE,aAAaA,GAAGa,EAAEmB,QAAQnB,EAAEoB,OAAOpB,EAAEgB,KAAK,QAAQK,KAAKnC,OAASc,GAAAA,CAAI,4BAA4BK,GAAG,QAAQ,WAAYL,GAAAA,CAAI,wBAAwBsB,WAFtM","file":"../../js/llms-admin-addons.min.js","sourcesContent":["!function(){\"use strict\";var e,t={n:function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},d:function(e,n){for(var c in n)t.o(n,c)&&!t.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:n[c]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},n=window.wp.i18n,c=window.jQuery,i=t.n(c);e={update:0,install:0,activate:0,deactivate:0},i()(\".llms-bulk-close\").on(\"click\",(function(e){e.preventDefault(),i()(\"input.llms-bulk-check\").filter(\":checked\").prop(\"checked\",!1).trigger(\"change\")})),i()(\"input.llms-bulk-check\").on(\"change\",(function(){var t,c=i()(this).attr(\"data-action\");i()(this).is(\":checked\")?e[c]++:e[c]--,t=i()(\"#llms-addons-bulk-actions\"),e.update||e.install||e.activate||e.deactivate?t.addClass(\"active\"):t.removeClass(\"active\"),i().each(e,(function(e,c){var i=t.find(\".llms-bulk-desc.\"+e),a=\"\";c?(\n// Translators: %d = Number of add-ons to perform the specified action against.\na=(0,n.sprintf)((0,n._n)(\"%d add-on\",\"%d add-ons\",c,\"lifterlms\"),c),i.show()):i.hide(),i.find(\"span\").text(a)}))})),i()(\"#llms-active-keys-toggle\").on(\"click\",(function(){i()(\"#llms-key-field-form\").toggle()}))}();"],"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 a0fbe6d7b2..0000000000
--- a/assets/scss/_includes/_buttons.scss
+++ /dev/null
@@ -1,111 +0,0 @@
-.llms-button-action,
-.llms-button-danger,
-.llms-button-primary,
-.llms-button-secondary {
- border:none;
- border-radius: 0;
- color: $color-white;
- cursor: pointer;
- font-size: 16px;
- font-weight: 300;
- 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;
- }
- }
-
-
-}
-
-.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: #414141;
- &:hover {
- color: #414141;
- background: darken( #e1e1e1, 8 );
- }
- &:focus,
- &:active {
- color: #414141;
- background: lighten( #e1e1e1, 4 );
- }
-}
-
-.llms-button-action {
- background: $color-brand-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 );
- }
-}
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 1b790ecfb2..0000000000
--- a/assets/scss/_includes/_grid.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-.llms-cols {
- @extend %clearfix;
-
- .llms-col {
- width: 100%;
- }
-
- @media all and (min-width: 600px) {
- [class*="llms-col-"] {
- float: left;
- }
-
- $cols: 1;
- @while $cols <= 12 {
- .llms-col-#{$cols} {
- width: 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 f01a645b49..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-pink;
- 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-pink;
- }
-
- &.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: 50%;
- }
-
-}
diff --git a/assets/scss/_includes/_llms-form-field.scss b/assets/scss/_includes/_llms-form-field.scss
deleted file mode 100644
index 009081827a..0000000000
--- a/assets/scss/_includes/_llms-form-field.scss
+++ /dev/null
@@ -1,211 +0,0 @@
-.llms-form-fields {
- @extend %clearfix;
- box-sizing: border-box;
-
- &.flush {
- .llms-form-field {
- padding: 0 0 10px;
- }
- }
-
- .wp-block-columns, .wp-block-column {
- margin-bottom: 0;
- }
-}
-
- .llms-form-heading {
- padding: 0 10px 10px;
- }
-
- .llms-form-field {
- float: left;
- padding: 0 10px 10px;
- 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';
- }
-
- &.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: $i / 12 * 100%;
- $i: $i + 1;
- }
- }
- }
-
- &.type-hidden { padding: 0; }
-
- &.type-radio,
- &.type-checkbox {
- input,
- label {
- display: inline;
- width: auto;
- }
- input {
- margin-right: 5px;
- }
- 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;
- }
-
- .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%;
- }
- }
- }
diff --git a/assets/scss/_includes/_mixins.scss b/assets/scss/_includes/_mixins.scss
deleted file mode 100644
index 876bb299ff..0000000000
--- a/assets/scss/_includes/_mixins.scss
+++ /dev/null
@@ -1,120 +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: 3px;
- border-bottom: 1px solid #fff;
- display: inline-block;
- font-size: 80%;
- padding: 3px 6px;
- vertical-align: middle;
-
- &.llms-size--large {
- font-size: 105%;
- padding: 6px 12px;
- }
-
- &.llms-active,
- &.llms-completed,
- &.llms-pass, // quiz
- &.llms-txn-succeeded {
- color: darken( $color-green, 45 );
- background-color: $color-green;
- }
-
- &.llms-fail, // quiz
- &.llms-failed,
- &.llms-expired,
- &.llms-cancelled,
- &.llms-txn-failed {
- color: darken( $color-red, 40 );
- background-color: $color-red;
- }
-
- &.llms-incomplete, // assignment
- &.llms-on-hold,
- &.llms-pending,
- &.llms-pending-cancel,
- &.llms-refunded,
- &.llms-txn-pending,
- &.llms-txn-refunded {
- color: darken( orange, 30 );
- background-color: orange;
- }
-
- }
-
-}
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 fc85ba61b7..0000000000
--- a/assets/scss/_includes/_quiz-result-question-list.scss
+++ /dev/null
@@ -1,132 +0,0 @@
-.llms-quiz-attempt-results {
- margin: 0;
- padding: 0;
- list-style-type: none;
-
- .llms-quiz-attempt-question {
- background: #efefef;
- margin: 0 0 10px;
- position: relative;
-
- .toggle-answer {
- @include clearfix();
- color: inherit;
- display: block;
- padding: 10px 35px 10px 10px;
- 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.2 );
- .llms-status-icon {
- background-color: $color-green;
- }
- }
- &.status--graded.incorrect {
- background: rgba( $color-red, 0.2 );
- .llms-status-icon {
- background-color: $color-red;
- }
- }
-
- .llms-question-title {
- float: left;
- margin: 0;
- line-height: 1;
- }
-
- .llms-points {
- float: right;
- line-height: 1;
- }
-
- .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 10px 10px;
-
- .llms-quiz-results-label {
- font-weight: 700;
- margin-bottom: 10px;
- }
-
- 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/_spinner.scss b/assets/scss/_includes/_spinner.scss
deleted file mode 100644
index 2444d3f075..0000000000
--- a/assets/scss/_includes/_spinner.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-.llms-spinning {
- background: rgba( 250, 250, 250, 0.7 );
- bottom: 0;
- display: none;
- left: 0;
- position: absolute;
- right: 0;
- top: 0;
-}
-
-.llms-spinner {
- animation: llms-spinning 1.5s linear infinite;
- box-sizing: border-box;
- border: 4px solid #313131;
- border-radius: 50%;
- height: 40px;
- left: 50%;
- margin-left: -20px;
- margin-top: -20px;
- position: absolute;
- top: 50%;
- width: 40px;
-
- &.small {
- border-width: 2px;
- height: 20px;
- margin-left: -10px;
- margin-top: -10px;
- width: 20px;
- }
-}
-
-@keyframes llms-spinning{
- 0% {
- transform: rotate(0deg)
- }
- 50% {
- border-radius: 5%;
- }
- 100% {
- transform: rotate(220deg)
- }
-}
diff --git a/assets/scss/_includes/_tooltip.scss b/assets/scss/_includes/_tooltip.scss
deleted file mode 100644
index 39e5f77f15..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.2s 0.6s 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 57eda78b9f..0000000000
--- a/assets/scss/_includes/_vars.scss
+++ /dev/null
@@ -1,69 +0,0 @@
-// ----- LifterLMS Brand Colors ----- \\
-$color-brand-dark-blue: #243c56;
-
-$color-brand-blue: #2295ff;
-$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: #83c373;
-$color-blue: $color-brand-blue;
-$color-red: #e5554e;
-$color-white: #fefefe;
-$color-aqua: #35bbaa;
-$color-purple: #845ef7;
-$color-orange: #ff922b;
-
-$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: #efefef;
-
-$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;
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-add-ons.scss b/assets/scss/admin-add-ons.scss
deleted file mode 100644
index cfe8b83716..0000000000
--- a/assets/scss/admin-add-ons.scss
+++ /dev/null
@@ -1,318 +0,0 @@
-@import "_includes/vars";
-@import "_includes/mixins";
-
-.wrap.lifterlms-addons {
-
- .wp-heading-inline {
- vertical-align: middle;
- }
-
- .llms-nav-tab-wrapper.llms-nav-text .llms-nav-item:after {
- margin: 0 3px;
- }
-
-}
-
-.llms-addons-bulk-actions {
- background: #fff;
- border: 1px solid #ddd;
- box-shadow: inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.1);
- padding: 40px;
- left: 50%;
- margin-left: -100px;
- position: fixed;
- text-align: center;
- transition: top 0.2s ease;
- top: -100%;
- width: 240px;
- z-index: 1;
- &.active {
- top: 80px;
- }
-
- .llms-bulk-close {
- background: #fff;
- border: 1px solid #ddd;
- border-bottom-width: 0;
- border-left-width: 0;
- border-radius: 50%;
- color: $color-red;
- font-size: 25px;
- height: 25px;
- padding: 5px;
- position: absolute;
- right: -10px;
- top: -10px;
- width: 25px;
- }
-
- .llms-bulk-desc {
- font-size: 18px;
- margin-bottom: 20px;
- .fa {
- color: $color-blue;
- display: block;
- font-size: 30px;
- margin-bottom: 10px;
- }
- &.deactivate .fa {
- color: #777;
- }
- }
-
-}
-
-.llms-addons-wrap {
-
- @include clearfix();
-
- .llms-add-on-item {
- display: block;
- list-style: none;
- margin-bottom: 20px;
- position: relative;
-
- @media only screen and ( min-width: 680px ) {
- float: left;
- margin-right: 30px;
- width: calc( 33.333% - 20px );
- &:nth-of-type(3n) {
- margin-right: 0;
- }
- &:nth-of-type(3n+1) {
- clear: left;
- }
- }
-
- }
-
- .llms-add-on {
-
- background-color: #f5f5f5;
- border: 1px solid #ddd;
- box-shadow: inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.1);
- position: relative;
-
- .llms-add-on-link {
- color: #444;
- display: block;
- text-decoration: none;
- }
-
- header {
- margin-bottom: 0;
- h4 {
- color: #23282d;
- font-size: 16px;
- margin: 8px 8px 0;
- }
- img {
- display: block;
- max-width: 100%;
- }
- }
-
- section {
- padding: 8px;
- p {
- margin: 0 0 8px;
- }
- ul, li {
- margin: 0;
- padding: 0;
- }
- img {
- border-radius: 50%;
- display: inline-block;
- width: 18px;
- vertical-align: bottom;
- }
- }
-
- footer.llms-actions {
- background: #e8e8e8;
- border-top: 1px solid #ddd;
- padding: 16px 8px;
- margin-top: 8px;
-
- a.open-plugin-details-modal {
- font-size: 18px;
- padding: 5px;
- vertical-align: middle;
- }
-
- .llms-status-icon {
-
- background: #ececec;
- border: 1px solid #b7b7b7;
- color: #444;
- border-radius: 4px;
- margin-right: 4px;
- padding: 8px;
- text-decoration: none;
- vertical-align: middle;
-
- &:hover {
- background: #f0f0f0;
- .fa.show-on-hover { display: inline-block; }
- .fa.hide-on-hover { display: none; }
- }
-
- .fa {
- color: #777;
- display: inline-block;
- font-size: 16px;
- height: 16px;
- text-align: center;
- margin-right: 2px;
- width: 16px;
- }
-
- .fa.show-on-hover { display: none; }
- .fa.hide-on-hover { display: inline-block; }
-
- input,
- input + .fa {
- display: none;
- color: $color-blue !important;
- }
-
- input:checked + .fa {
- display: inline-block;
- & + .fa {
- display: none;
- }
- }
-
- .llms-status-text {
- font-weight: 400;
- font-size: 14px;
- }
-
-
- &.status--installed,
- &.status--license_active {
- .fa {
- color: darken( $color-green, 16 );
- }
- }
-
- // &.status--uninstalled,
- &.status--active,
- &.status--license_inactive {
- .fa {
- color: $color-red;
- }
- }
-
- &.external.status--none,
- &.external.status--license_active, // fixes xapi
- &.external.status--license_inactive { // fixes xapi
- .fa {
- color: $color-blue;
- }
- }
-
- }
-
- // .llms-action-row {
- // @include clearfix();
-
- // &:last-child {
- // margin-bottom: 0;
- // }
-
- // &.channel--beta,
- // &.status--active,
- // &.status--license_active {
- // span em {
- // color: darken( $color-green, 16 );
- // }
- // .llms-button-secondary .fa {
- // color: $color-red;
- // }
- // }
-
- // &.channel--stable,
- // &.status--inactive,
- // &.status--license_inactive {
- // span em {
- // color: $color-red;
- // }
- // .llms-button-secondary .fa {
- // color: darken( $color-green, 16 );
- // transform: rotate( 180deg );
- // }
- // }
- // &.status--none,
- // &.status--uninstalled {
- // span em,
- // .llms-button-secondary .fa {
- // color: #777;
- // }
- // }
-
- // .llms-manage-addon-toggle.llms-button-secondary .fa-cog {
- // color: inherit;
- // }
-
- // }
-
- // span {
- // font-weight: 500;
- // line-height: 2.5;
- // em {
- // font-style: normal;
- // }
- // }
- .llms-button-secondary {
- border: 1px solid #b7b7b7;
- border-radius: 4px;
- float: right;
- &:hover {
- background: #f0f0f0;
- }
- }
-
- .llms-addon-actions {
- background: #f0f0f0;
- border: 1px solid #b7b7b7;
- box-shadow: inset 0 1px 0 rgba(255,255,255,.2), inset 0 -1px 0 rgba(0,0,0,.1);
- display: none;
- left: 16px;
- margin: 0;
- padding: 16px;
- position: absolute;
- right: 16px;
- z-index: 1;
- &:before, &:after {
- content: '';
- position: absolute;
- }
- &:before {
- border: 10px solid transparent;
- border-bottom-color: #b7b7b7;
- position: absolute;
- top: -20px;
- right: 34px;
- }
- &:after {
- border: 8px solid transparent;
- border-bottom-color: #f0f0f0;
- top: -16px;
- right: 36px;
- }
-
- li {
- margin-bottom: 8px;
- &:last-child {
- margin-bottom: 0;
- }
- }
- }
-
- }
-
- }
-
-}
diff --git a/assets/scss/admin-importer.scss b/assets/scss/admin-importer.scss
deleted file mode 100644
index f06b43c3ef..0000000000
--- a/assets/scss/admin-importer.scss
+++ /dev/null
@@ -1,71 +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;
-}
-
-ul.llms-importable-courses {
- margin: 0 -10px;
- li.llms-importable-course {
- background: #fff;
- margin: 10px;
- img {
- display: block;
- max-width: 100%;
- }
- h3 {
- margin: 20px 20px 10px;
- }
- p {
- margin: 0 20px;
- }
-
- &.has-action-button {
- padding-bottom: 80px;
- 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-setup.scss b/assets/scss/admin-setup.scss
deleted file mode 100644
index 9a688ae95d..0000000000
--- a/assets/scss/admin-setup.scss
+++ /dev/null
@@ -1,178 +0,0 @@
-@import "_includes/vars";
-
-#wpadminbar, #adminmenumain, #wpfooter {
- display: none;
-}
-
-#llms-setup-wizard {
-
- background-color: #f1f1f1;
- height: 100%;
- left: 0;
- overflow: scroll;
- position: fixed;
- top: 0;
- width: 100%;
-}
-
-.llms-setup-wrapper {
- margin: 20px auto;
- max-width: 640px;
-}
-
-#llms-logo {
- text-align: center;
-
- img {
- max-width: 200px;
- }
-}
-
-.llms-setup-content {
- background-color: #fff;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );
- padding: 15px 30px;
-
- h1, h2, h3, h4, h5, h6 {
- color: #444;
- }
-
- a:not( .llms-button-primary ):not( .llms-button-secondary ) {
- color: $color-brand-blue;
- }
-
- p, li {
- color: #666;
- font-size: 16px;
- }
-
- p.error {
- color: $color-red;
- text-align: center;
- }
-
- label {
- font-weight: 500;
- }
-
- .llms-setup-actions {
- margin-top: 40px;
- text-align: right;
- }
-
- .llms-exit-setup {
- color: inherit !important;
- margin-right: 10px;
- }
-
- 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;
- }
- }
- }
-
- ul.llms-importable-courses {
- display: block;
- li.llms-importable-course {
- border-bottom: 1px solid #f1f1f1;
- display: block;
- max-width: 100%;
- padding-bottom: 15px;
-
- img {
- float: left;
- margin-right: 15px;
- width: 20%;
- }
-
- .llms-switch {
- float: right;
-
- input.llms-toggle-round:checked + label {
- border-color: $color-brand-blue;
- background-color: $color-brand-blue;
- }
-
- }
- }
- }
-
-
- .llms-importing-msgs {
- a { color: $color-brand-blue; }
- .llms-importing-msg {
- display: none;
- font-size: 14px;
- font-style: italic;
- text-align: right;
- }
- }
-
-}
-
-.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;
- }
- }
-
- }
-}
-
diff --git a/assets/scss/admin.scss b/assets/scss/admin.scss
deleted file mode 100644
index fd85a22e9f..0000000000
--- a/assets/scss/admin.scss
+++ /dev/null
@@ -1,91 +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-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/quiz-attempt-review";
-
-@import "_includes/llms-form-field";
-@import "_includes/vendor/_font-awesome";
-
-@import "_includes/spinner";
diff --git a/assets/scss/admin/_course-builder.scss b/assets/scss/admin/_course-builder.scss
deleted file mode 100644
index 7a2ecbc217..0000000000
--- a/assets/scss/admin/_course-builder.scss
+++ /dev/null
@@ -1,1677 +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;
- }
-
- // &.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;
- }
- }
-
- }
-}
-
-
-
-
-// @media (max-width: 960px) {
-// body.admin_page_llms-course-builder.auto-fold {
-// .llms-course-builder {
-// left: 56px;
-// }
-// }
-// }
-
-.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: 400px;
- }
- .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;
- }
- }
- }
-
- .llms-headline {
- display: inline-block;
- font-weight: 300;
- margin: 0;
- padding: 0;
- transition: width 0.3s ease-in-out;
- vertical-align: middle;
- }
-
- .llms-builder-main {
- padding: 20px 20px 20px 0;
- position: relative;
- width: calc( 100% - 340px );
- z-index: 2;
-
- .llms-action-icons {
- display: inline-block;
- left: -20px;
- opacity: 0;
- position: relative;
- transition: left 0.2s ease, opacity 0.2s ease;
- vertical-align: middle;
- }
- .llms-builder-header:hover > .llms-action-icons,
- .llms-builder-header .llms-action-icons.static {
- left: 0;
- opacity: 1;
- }
-
- /*
-
-
- /$$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$
- /$$_____/ /$$__ $$| $$ | $$ /$$__ $$ /$$_____/ /$$__ $$
- | $$ | $$ \ $$| $$ | $$| $$ \__/| $$$$$$ | $$$$$$$$
- | $$ | $$ | $$| $$ | $$| $$ \____ $$| $$_____/
- | $$$$$$$| $$$$$$/| $$$$$$/| $$ /$$$$$$$/| $$$$$$$
- \_______/ \______/ \______/ |__/ |_______/ \_______/
- */
-
- .llms-course-header {
- position: relative;
- z-index: 1;
- }
-
-
- /*
- /$$ /$$
- | $$ |__/
- /$$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$$
- /$$_____/ /$$__ $$ /$$_____/|_ $$_/ | $$ /$$__ $$| $$__ $$ /$$_____/
- | $$$$$$ | $$$$$$$$| $$ | $$ | $$| $$ \ $$| $$ \ $$| $$$$$$
- \____ $$| $$_____/| $$ | $$ /$$| $$| $$ | $$| $$ | $$ \____ $$
- /$$$$$$$/| $$$$$$$| $$$$$$$ | $$$$/| $$| $$$$$$/| $$ | $$ /$$$$$$$/
- |_______/ \_______/ \_______/ \___/ |__/ \______/ |__/ |__/|_______/
- */
- 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;
- position: relative;
- margin: 0;
- padding: 20px 20px 20px 40px;
-
- &.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;
- }
- }
-
- }
-
- // tree line
- li.llms-section:before {
- background: #ccc;
- bottom: 0;
- content: '';
- left: 19px;
- position: absolute;
- top: 0;
- width: 2px;
- }
-
- 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;
- }
-
- /*
- /$$
- | $$
- | $$ /$$$$$$ /$$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$
- | $$ /$$__ $$ /$$_____//$$_____/ /$$__ $$| $$__ $$ /$$_____/
- | $$| $$$$$$$$| $$$$$$| $$$$$$ | $$ \ $$| $$ \ $$| $$$$$$
- | $$| $$_____/ \____ $$\____ $$| $$ | $$| $$ | $$ \____ $$
- | $$| $$$$$$$ /$$$$$$$//$$$$$$$/| $$$$$$/| $$ | $$ /$$$$$$$/
- |__/ \_______/|_______/|_______/ \______/ |__/ |__/|_______/
- */
- ul.llms-lessons {
- box-shadow: 0 0 0 3px transparent;
- height: 0;
- margin: 10px 0 0;
- overflow: hidden;
- padding: 10px 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;
- margin: 0;
- padding: 10px 20px 10px 30px;
- position: relative;
- pointer-events: none;
- visibility: hidden;
-
- &.selected {
- .llms-drag-utility.drag-lesson {
- border-color: $color-brand-blue;
- }
- > .llms-builder-header .llms-headline {
- font-weight: 400;
- color: $color-brand-blue;
- }
- }
-
- }
-
- // line on left of each lesson
- li.llms-lesson:before {
- background: #ccc;
- content: '';
- height: 2px;
- left: -20px;
- position: absolute;
- top: 20px;
- width: 30px;
- }
-
-
- /*
- /$$ /$$ /$$ /$$
- | $$ | $$ | $$| $$
- /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$| $$ /$$$$$$ /$$$$$$$
- /$$__ $$ /$$__ $$|____ $$ /$$__ $$ | $$__ $$ |____ $$| $$__ $$ /$$__ $$| $$ /$$__ $$ /$$_____/
- | $$ | $$| $$ \__/ /$$$$$$$| $$ \ $$ | $$ \ $$ /$$$$$$$| $$ \ $$| $$ | $$| $$| $$$$$$$$| $$$$$$
- | $$ | $$| $$ /$$__ $$| $$ | $$ | $$ | $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/ \____ $$
- | $$$$$$$| $$ | $$$$$$$| $$$$$$$ | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$| $$| $$$$$$$ /$$$$$$$/
- \_______/|__/ \_______/ \____ $$ |__/ |__/ \_______/|__/ |__/ \_______/|__/ \_______/|_______/
- /$$ \ $$
- | $$$$$$/
- \______/
- */
- 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: 5px;
- top: 16px !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;
- }
- }
-
- /*
- /$$ /$$ /$$
- | $$ | $$ | $$
- /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ | $$$$$$$ | $$ /$$$$$$
- /$$_____/ /$$__ $$ /$$__ $$|_ $$_/ |____ $$| $$__ $$| $$ /$$__ $$
- | $$$$$$ | $$ \ $$| $$ \__/ | $$ /$$$$$$$| $$ \ $$| $$| $$$$$$$$
- \____ $$| $$ | $$| $$ | $$ /$$ /$$__ $$| $$ | $$| $$| $$_____/
- /$$$$$$$/| $$$$$$/| $$ | $$$$/| $$$$$$$| $$$$$$$/| $$| $$$$$$$
- |_______/ \______/ |__/ \___/ \_______/|_______/ |__/ \_______/
- */
- 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;
-
- // hide tree line on the helper
- &:before { display: none; }
-
- // prevent action icon hover display
- .llms-action-icons,
- .llms-builder-header:hover > .llms-action-icons {
- display: none;
- }
- }
-
- &.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;
- }
- }
-
- }
-
- /*
- /$$ /$$ /$$ /$$ /$$
- | $$|__/ | $$ | $$ | $$
- /$$$$$$ /$$$$$$$ /$$ /$$$$$$ /$$$$$$ | $$$$$$$ | $$ /$$$$$$
- /$$__ $$ /$$__ $$| $$|_ $$_/ |____ $$| $$__ $$| $$ /$$__ $$
- | $$$$$$$$| $$ | $$| $$ | $$ /$$$$$$$| $$ \ $$| $$| $$$$$$$$
- | $$_____/| $$ | $$| $$ | $$ /$$ /$$__ $$| $$ | $$| $$| $$_____/
- | $$$$$$$| $$$$$$$| $$ | $$$$/| $$$$$$$| $$$$$$$/| $$| $$$$$$$
- \_______/ \_______/|__/ \___/ \_______/|_______/ |__/ \_______/
- */
-
- .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: 500;
- 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 {
- .llms-settings-group-header {
- .fa-caret-square-o-up { display: block; }
- .fa-caret-square-o-down { display: none; }
- }
- &.hidden {
- .llms-settings-group-header {
- .fa-caret-square-o-up { display: none; }
- .fa-caret-square-o-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: 300;
- margin: 0 5px;
- padding: 0;
- }
- .llms-settings-group-toggle {
- float: right;
- font-size: 18px;
- padding: 2px;
- }
- }
-
- .llms-settings-group-body {
- margin-top: 5px;
- }
-
- .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;
- }
- }
- }
-
- /*
- /$$
- |__/
- /$$ /$$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$
- | $$ /$$_____/ /$$__ $$| $$__ $$ /$$_____/
- | $$| $$ | $$ \ $$| $$ \ $$| $$$$$$
- | $$| $$ | $$ | $$| $$ | $$ \____ $$
- | $$| $$$$$$$| $$$$$$/| $$ | $$ /$$$$$$$/
- |__/ \_______/ \______/ |__/ |__/|_______/
- */
- .llms-action-icon {
- color: #aaa;
- display: inline-block;
- font-size: 16px;
- padding: 0 5px;
- 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 {
- @include clearfix();
- margin: 0;
- padding: 0;
- li.llms-info-item {
- color: #aaa;
- font-size: 16px;
- margin: 0;
- padding: 10px;
- float: left;
- &.active,
- &.active .llms-action-icon {
- color: $color-brand-blue;
- }
- .llms-action-icon {
- margin: -10px;
- padding: 10px;
- }
- }
-
- }
-
- /*
- /$$ /$$ /$$
- |__/ | $$ | $$
- /$$$$$$$ /$$ /$$$$$$$ /$$$$$$ | $$$$$$$ /$$$$$$ /$$$$$$
- /$$_____/| $$ /$$__ $$ /$$__ $$| $$__ $$ |____ $$ /$$__ $$
- | $$$$$$ | $$| $$ | $$| $$$$$$$$| $$ \ $$ /$$$$$$$| $$ \__/
- \____ $$| $$| $$ | $$| $$_____/| $$ | $$ /$$__ $$| $$
- /$$$$$$$/| $$| $$$$$$$| $$$$$$$| $$$$$$$/| $$$$$$$| $$
- |_______/ |__/ \_______/ \_______/|_______/ \_______/|__/
- */
- .llms-builder-sidebar {
- background: #e6e6e6;
- bottom: 0;
- overflow: hidden;
- padding: 20px;
- position: fixed;
- transition: width 0.3s ease-in-out;
- top: 32px;
- right: 0;
- width: 280px;
- z-index: 1;
-
- .llms-utilities {
-
- ul, li {
- margin: 0;
- padding: 0;
- }
-
- ul {
- display: flex;
- li {
- flex: 1;
- margin-right: 5px;
- &:last-child {
- margin-right: 0;
- }
- }
- }
-
-
- a.llms-utility {
- background: #efefef;
- border-radius: 4px;
- display: block;
- overflow: hidden;
- padding: 4px;
- position: relative;
- text-align: center;
-
- &: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;
- font-weight: 300;
- letter-spacing: 2px;
- text-transform: uppercase;
- }
-
- .llms-elements-list {
- margin-bottom: 40px;
- li {
- margin-bottom: 10px;
- }
- }
-
- .llms-utility {
- color: #444;
- text-decoration: none;
- }
-
- .llms-element-button {
-
- background: $color-brand-blue;
- border-radius: 4px;
- 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: #b0b0b0;
- 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;
- padding: 0;
-
- &.right {
- float: right;
- }
-
- > .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,
- &.active > a {
- background: #cacaca;
- }
-
- &.active > a {
- box-shadow: inset 0 -3px 0 $color-brand-blue;
- &:focus {
- box-shadow: inset 0 -3px 0 $color-brand-blue;
- }
- }
-
- &.active > .llms-editor-menu {
- display: inline-block;
- }
-
- a {
- color: #444;
- display: inline-block;
- padding: 13px 20px;
- text-decoration: none;
- transition: background 0.2s ease;
- font-size: 14px;
- &:focus {
- box-shadow: inset 0 0 0 2px $color-brand-blue;
- }
- }
-
- }
- }
- }
-
- .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;
- 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 {
- 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"] .status--unsaved { display: block; }
- button[data-status="saving"] .status--saving { display: block; }
- button[data-status="error"] .status--error { display: block; }
-
- }
-
- }
-
-
- /*
- /$$
- | $$
- /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$$| $$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$
- /$$_____/ /$$__ $$ |____ $$ /$$__ $$ /$$_____/| $$__ $$ /$$__ $$ /$$__ $$ /$$__ $$ /$$__ $$| $$ /$$//$$__ $$ /$$__ $$
- | $$$$$$ | $$$$$$$$ /$$$$$$$| $$ \__/| $$ | $$ \ $$ | $$ \ $$| $$ \ $$| $$ \ $$| $$ \ $$ \ $$/$$/| $$$$$$$$| $$ \__/
- \____ $$| $$_____/ /$$__ $$| $$ | $$ | $$ | $$ | $$ | $$| $$ | $$| $$ | $$| $$ | $$ \ $$$/ | $$_____/| $$
- /$$$$$$$/| $$$$$$$| $$$$$$$| $$ | $$$$$$$| $$ | $$ | $$$$$$$/| $$$$$$/| $$$$$$$/| $$$$$$/ \ $/ | $$$$$$$| $$
- |_______/ \_______/ \_______/|__/ \_______/|__/ |__/ | $$____/ \______/ | $$____/ \______/ \_/ \_______/|__/
- | $$ | $$
- | $$ | $$
- |__/ |__/
- */
-
- .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;
- }
-
- }
-
-
- }
-
-
- /*
- /$$
- |__/
- /$$$$$$ /$$ /$$ /$$ /$$$$$$$$
- /$$__ $$| $$ | $$| $$|____ /$$/
- | $$ \ $$| $$ | $$| $$ /$$$$/
- | $$ | $$| $$ | $$| $$ /$$__/
- | $$$$$$$| $$$$$$/| $$ /$$$$$$$$
- \____ $$ \______/ |__/|________/
- | $$
- | $$
- |__/
- */
-
- .llms-quiz-empty {
- margin: 100px auto;
- text-align: center;
-
- p { font-size: 18px; }
- button.llms-element-button {
- max-width: 320px;
- margin: 0 auto;
- }
-
- }
-
-
- .llms-model-header,
- .llms-model-settings {
- background: #fff;
- padding: 10px;
- @include clearfix();
- }
-
- .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 {
- border-bottom: 5px solid #e6e6e6;
-
- .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;
- .fa {
- max-width: 15px;
- }
- }
-
- .llms-model-settings {
- padding: 0;
- }
-
- }
-
- .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;
- }
- }
- }
-
- /*
- /$$ /$$ /$$ /$$
- | $$ |__/ | $$ | $$
- /$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$ /$$ /$$$$$$ /$$$$$$$ | $$$$$$$ /$$$$$$ /$$$$$$$ | $$ /$$
- /$$__ $$| $$ | $$ /$$__ $$ /$$_____/|_ $$_/ | $$ /$$__ $$| $$__ $$ | $$__ $$ |____ $$| $$__ $$| $$ /$$/
- | $$ \ $$| $$ | $$| $$$$$$$$| $$$$$$ | $$ | $$| $$ \ $$| $$ \ $$ | $$ \ $$ /$$$$$$$| $$ \ $$| $$$$$$/
- | $$ | $$| $$ | $$| $$_____/ \____ $$ | $$ /$$| $$| $$ | $$| $$ | $$ | $$ | $$ /$$__ $$| $$ | $$| $$_ $$
- | $$$$$$$| $$$$$$/| $$$$$$$ /$$$$$$$/ | $$$$/| $$| $$$$$$/| $$ | $$ | $$$$$$$/| $$$$$$$| $$ | $$| $$ \ $$
- \____ $$ \______/ \_______/|_______/ \___/ |__/ \______/ |__/ |__/ |_______/ \_______/|__/ |__/|__/ \__/
- | $$
- | $$
- |__/
- */
-
- .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;
- }
- }
-
- }
-
- }
-
- /*
- /$$ /$$ /$$
- |__/ | $$ |__/
- /$$$$$$ /$$ /$$ /$$ /$$$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$$
- /$$__ $$| $$ | $$| $$|____ /$$/ /$$__ $$| $$ | $$ /$$__ $$ /$$_____/|_ $$_/ | $$ /$$__ $$| $$__ $$ /$$_____/
- | $$ \ $$| $$ | $$| $$ /$$$$/ | $$ \ $$| $$ | $$| $$$$$$$$| $$$$$$ | $$ | $$| $$ \ $$| $$ \ $$| $$$$$$
- | $$ | $$| $$ | $$| $$ /$$__/ | $$ | $$| $$ | $$| $$_____/ \____ $$ | $$ /$$| $$| $$ | $$| $$ | $$ \____ $$
- | $$$$$$$| $$$$$$/| $$ /$$$$$$$$ | $$$$$$$| $$$$$$/| $$$$$$$ /$$$$$$$/ | $$$$/| $$| $$$$$$/| $$ | $$ /$$$$$$$/
- \____ $$ \______/ |__/|________/ \____ $$ \______/ \_______/|_______/ \___/ |__/ \______/ |__/ |__/|_______/
- | $$ | $$
- | $$ | $$
- |__/ |__/
- */
- 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;
- }
-
- }
-
- }
-
-}
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 d1afc175fc..0000000000
--- a/assets/scss/admin/_llms-table.scss
+++ /dev/null
@@ -1,213 +0,0 @@
-.llms-table-wrap {
- position: relative;
-}
-
-.llms-table-header {
- padding: 0 10px;
- margin-bottom: 10px;
-
- @include clearfix();
-
- h2 {
- padding: 0;
- display: inline-block;
- line-height: 1;
- margin: 0;
- vertical-align: middle;
- }
-
- .llms-table-search,
- .llms-table-filters {
- float: right;
- padding-left: 10px;
- }
-
- .llms-table-search input {
- margin: 0;
- padding: 5px;
- }
-
-}
-
-.llms-table {
-
- border: 1px solid #cecece;
- border-collapse: collapse;
- width: 100%;
-
- a {
- color: $color-brand-blue;
- &:hover {
- color: $color-brand-blue-dark;
- }
- }
-
- td, th {
- border-bottom: 1px solid #cecece;
- font-size: 95%;
- padding: 4px;
- 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: #eaeaea;
- font-weight: 500;
-
- 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: #fafafa;
- 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: #fafafa; }
- }
-
- &.zebra tbody tr:nth-child( odd ) {
- th, td { background-color: #fff; }
- }
-
- &.text-left {
- td, th {
- text-align: left;
- }
- }
-
- &.size-large {
- td, th {
- font-size: 105%;
- padding: 8px;
- }
- }
-
- .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: 11px;
- font-weight: 300;
- padding: 0 5px;
- }
-
-}
-
-// progress bars within the tables
-.llms-table-progress {
- background: #eee;
- height: 16px;
- position: relative;
- .llms-table-progress-text {
- font-size: 11px;
- line-height: 16px;
- position: absolute;
- right: 4px;
- top: 0;
- }
- .llms-table-progress-inner {
- background: $color-brand-blue;
- height: 100%;
- transition: width 0.2s ease;
- }
-}
-
-
-.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 f420a91301..0000000000
--- a/assets/scss/admin/_main.scss
+++ /dev/null
@@ -1,94 +0,0 @@
-#post_course_difficulty {
- min-width: 200px;
-}
-#_video-embed, #_audio-embed {
- width: 100%;
-}
-
-.clear {
- clear: both;
- width: 100%;
-}
-
-.llms_certificate_default_image, .llms_certificate_image {
- width: 300px;
-}
-
-.llms_achievement_default_image, .llms_achievement_image {
- width: 120px;
-}
-
-div[id^="lifterlms-"] .inside {
- overflow: visible;
-}
-
-.llms-admin-notice {
- position: relative;
- .notice-dismiss {
- text-decoration: none;
- }
-}
-
-.llms-button-action,
-.llms-button-danger,
-.llms-button-primary,
-.llms-button-secondary {
- &.small .dashicons {
- font-size: 13px;
- height: 13px;
- width: 13px;
- }
-}
-
-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;
-}
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 936119a424..0000000000
--- a/assets/scss/admin/_reporting.scss
+++ /dev/null
@@ -1,341 +0,0 @@
-.llms-reporting.wrap {
-
- .llms-options-page-contents {
- background: #fff;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );
- margin: 0 0 20px;
- padding: 20px;
- .llms-nav-tab-wrapper.llms-nav-secondary {
- background: #fafafa;
- box-shadow: none;
- margin: 0 -20px 40px;
- padding: 0 20px;
- .llms-nav-link {
- padding: 8px 14px;
- }
- }
- }
-
- .llms-stab-title {
- color: $color-brand-dark-blue;
- font-size: 36px;
- font-weight: 300;
- margin-bottom: 20px;
- }
-
- td.id a {
- text-decoration: none;
- }
-
- th.name, td.name,
- th.title, td.title { 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--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-item.llms-analytics-form {
- color: #414141;
- font-size: 13px;
- padding: 6px 14px;
-
- input {
- border: 0;
- font-size: 13px;
- margin: 0;
- padding: 3px 6px;
- vertical-align: middle;
- }
-
- .select2-container {
- input {
- width: 100% !important;
- }
- }
- }
-
- .button.small {
- height: 23px;
- line-height: 23px;
- }
-
-
- .llms-analytics-filters {
- display: none;
-
- .llms-nav-item {
- box-sizing: border-box;
- width: 100%;
-
- label {
- display: block;
- }
- }
-
- .button {
- float: right;
- }
-
- }
- }
-
- .llms-reporting-tab.llms-reporting-quiz .llms-table-filter-wrap {
- width: 160px;
- }
-
-
-}
-
-
-.llms-reporting-tab {
-
- h1, h2, h3, h4, h5, h6 {
- margin: 0;
- a {
- color: $color-brand-dark-blue;
- text-decoration: none;
- &:hover {
- color: $color-brand-blue;
- }
- }
- }
-
-
- .llms-reporting-header {
-
- background: #fafafa;
- padding: 20px;
- margin: 0 -20px;
-
- .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 {
- background: #fafafa;
- margin: -20px -20px 0;
- padding: 20px 20px 10px;
- a {
- color: $color-brand-blue;
- text-decoration: none;
- &:hover {
- color: $color-brand-blue-dark;
- }
- &:after {
- content: ' > ';
- color: #555;
- }
-
- &:last-child {
- color: $color-brand-dark-blue;
- &: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;
- }
- .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: 0.75em;
- padding: 18px 15px 15px;
- @include clearfix;
-
- .fa {
- color: #555;
- float: left;
- font-size: 32px;
- margin-right: 10px;
- }
-
- .llms-reporting-widget-data {
- line-height: 0.8;
- }
-
- strong {
- color: #333;
- font-size: 20px;
- }
-
- &.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 {
- color: #888;
- &.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;
- }
-
-}
-
-@import "../_includes/quiz-result-question-list";
-
diff --git a/assets/scss/admin/_settings.scss b/assets/scss/admin/_settings.scss
deleted file mode 100644
index 09d2f3e490..0000000000
--- a/assets/scss/admin/_settings.scss
+++ /dev/null
@@ -1,174 +0,0 @@
-.wrap.llms-reporting,
-.wrap.lifterlms-settings {
-
- .llms-header {
- background: #fff;
- border-bottom: 1px solid #efefef;
- margin: -10px -20px 0;
- padding: 10px 0;
- z-index: 1;
-
- .lifterlms-logo {
- max-width: 140px;
- }
-
- .llms-save {
- float: right;
- }
-
- .llms-inside-wrap {
- padding: 0 10px;
- }
-
- }
-
- .llms-inside-wrap {
- box-sizing: border-box;
- max-width: 1000px;
- margin: 0 auto;
- }
-
- .llms-nav-tab-wrapper.llms-nav-secondary {
- background: #fff;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );
- margin: 0 -20px 20px;
- z-index: 1;
-
- .llms-nav-item {
- .llms-nav-link:hover,
- &.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: #fff;
- box-shadow: 0 1px 3px rgba( 0, 0, 0, .13 );
- margin: 0 0 20px;
- padding: 20px;
-
- .llms-label {
- border-bottom: 1px solid #efefef;
- font-weight: 700;
- font-size: 20px;
- padding: 20px;
- margin: -20px -20px 20px;
- }
-
- .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;
- }
-
- 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-nav-link:hover,
- &.llms-active .llms-nav-link {
- background: #fff;
- }
- }
- }
- }
-
- // Email Delivery providers.
- #llms-mailhawk-connect {
- font-size: 16px;
- height: auto;
- margin: 0 0 6px;
- padding: 8px 14px;
- position: relative;
-
- .dashicons {
- margin: -4px 4px 0 0;
- vertical-align: middle;
- }
- }
- #llms-sendwp-connect {
- font-size: 16px;
- height: auto;
- margin: 0 0 6px;
- padding: 8px 14px;
- position: relative;
-
- .fa {
- margin-right: 4px;
- }
- }
-
-}
-
-@media only screen and (min-width: 782px) {
- .wrap.lifterlms-settings {
- .llms-header {
- position: sticky;
- top: 30px;
- }
- .llms-nav-tab-wrapper.llms-nav-secondary {
- position: sticky;
- top: 93px;
- }
- }
-}
-
-.wrap.llms-reporting {
- .llms-inside-wrap {
- box-sizing: border-box;
- max-width: 1000px;
- margin: 0 0 0 20px;
- }
-}
diff --git a/assets/scss/admin/_tabs.scss b/assets/scss/admin/_tabs.scss
deleted file mode 100644
index c184ac2c03..0000000000
--- a/assets/scss/admin/_tabs.scss
+++ /dev/null
@@ -1,103 +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: 13px;
- padding: 8px 14px;
-
- .dashicons {
- font-size: 15px;
- height: 15px;
- width: 15px;
- }
- }
-
- }
-
- &.llms-nav-text {
- background: inherit;
- .llms-nav-item {
- background: inherit;
- &:last-child:after {
- display: none;
- }
- &:after {
- content: '|';
- display: inline-block;
- margin: 0 3px 0 0;
- }
- .llms-nav-link:hover,
- &.llms-active .llms-nav-link {
- background: inherit;
- color: $color-brand-blue;
- text-decoration: underline;
- }
- .llms-nav-link {
- color: $color-brand-dark-blue;
- display: inline-block;
- letter-spacing: 0;
- margin: 0;
- padding: 0;
- text-transform: none;
- }
- }
- }
-
- .llms-nav-items {
- @include clearfix;
- margin: 0;
- }
-
- .llms-nav-item {
- margin: 0;
-
- .llms-nav-link:hover {
- background: $color-brand-blue-dark;
- }
- &.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: 300;
- font-size: 14px;
- 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 ba81cd6235..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-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 2704fe7895..0000000000
--- a/assets/scss/admin/metaboxes/_builder-launcher.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-.llms-builder-launcher {
- .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 8fa2649ac2..0000000000
--- a/assets/scss/admin/metaboxes/_llms-metabox.scss
+++ /dev/null
@@ -1,199 +0,0 @@
-
-// This is a "legacy" rule that may be removable
-.llms-mb-list {
-
- label {
- font-weight: bold;
- width: 100%;
- display: block;
- }
-
- .input-full {
- width: 100%;
- }
-}
-
-
-#poststuff .llms-metabox {
-
- @extend %cf;
-
- h2, h3, h6 {
- font-weight: 300;
- margin: 0;
- padding: 0;
- }
-
- h2 {
- font-size: 22px;
- }
-
- 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-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;
- }
- }
-
- }
-
- .llms-collapsible-body {
- @extend %clearfix;
- display: none;
- padding: 10px;
- }
-
-}
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 439a4e6849..0000000000
--- a/assets/scss/admin/metaboxes/_metabox-field-repeater.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-// ahhhhhhhh
-.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 62544c37f8..0000000000
--- a/assets/scss/admin/metaboxes/_metabox-product.scss
+++ /dev/null
@@ -1,72 +0,0 @@
-.llms-metabox {
-
- #llms-new-access-plan-model {
- display: none;
- }
-
- .llms-access-plans {
- @extend %clearfix;
- margin-top: 25px;
-
- > .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;
- }
- }
-
- .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;
- }
-
- }
-
-}
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 d409d9b635..0000000000
--- a/assets/scss/admin/modules/_mb-tabs.scss
+++ /dev/null
@@ -1,58 +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-white;
- padding: 15px;
-
- ul:not(.select2-selection__rendered) {
- margin: 0;
-
- > li {
- padding: 20px 0;
- margin: 0;
- border-bottom: 1px solid $color-lightgrey;
-
- &.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 dc31a9789e..0000000000
--- a/assets/scss/admin/modules/_merge-codes.scss
+++ /dev/null
@@ -1,58 +0,0 @@
-.button.llms-merge-code-button {
- vertical-align: middle;
- img {
- margin-right: 3px;
- margin-top: -3px;
- vertical-align: middle;
- }
-}
-
-.llms-mb-container {
- .button.llms-merge-code-button img { margin-right: 4px; }
- .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: 160px;
-
- 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 a3ef13b305..0000000000
--- a/assets/scss/admin/modules/_widgets.scss
+++ /dev/null
@@ -1,160 +0,0 @@
-.llms-widget {
- background: $color-white;
- box-sizing: border-box;
- margin-bottom: 20px;
- padding: 10px 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;
- }
-
- }
-
- h1 {
- font-size: 2.4em;
- }
-
- h2 {
- font-size: 1.8em;
- }
-
- .llms-label {
- border-bottom: 1px solid $color-lightgrey;
- box-sizing: border-box;
- color: $color-grey;
- font-size: 18px;
- font-weight: 300;
- letter-spacing: 1px;
- margin: 0 0 15px;
- padding-bottom: 10px;
- text-align: center;
- text-transform: uppercase;
- }
-
- .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: $color-lightgrey;
- cursor: pointer;
- font-size: 16px;
- position: absolute;
- right: 25px;
- top: 13px;
- }
-
- &.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 c9fd4b6ee9..0000000000
--- a/assets/scss/certificates.scss
+++ /dev/null
@@ -1,138 +0,0 @@
-body {
- background-color: #fff;
- background-image: none;
- margin: 0 auto;
-}
-
-// .header {
-// display: none;
-// }
-
-// #content {
-// background: none;
-// }
-
-// .entry {
-// top: 120px;
-// width: 100%;
-// margin-bottom: 40px !important;
-// background: none;
-// }
-
-// .hentry,
-// .llms_certificate.hentry,
-// .llms_my_certificate.hentry {
-// margin-bottom: 40px !important;
-// padding: 50px 90px !important;
-// background: none;
-// border: none;
-// }
-
-.header, .footer,
-.wrap-header, .wrap-footer,
-.site-header, .site-footer,
-.nav-primary, .primary-nav {
- display: none;
-}
-
-// .llms-certificate-container {
-// position: relative;
-// padding: 20px;
-// margin: auto;
-// margin-bottom: 20px;
-// -webkit-print-color-adjust: exact;
-// overflow: hidden;
-// }
-
-.llms-certificate-container h1:first-child {
- text-align: center;
-}
-
-.llms-print-certificate {
- margin-top: 40px;
- text-align: center;
-
- form {
- display: inline;
- }
-}
-
-.llms-certificate-container {
-
- margin: 0 auto;
- padding: 0;
- overflow: hidden;
-
- .certificate-background {
- position: relative;
- z-index: 1;
- width: 100%;
- display: block;
- // position: absolute;
- // z-index: 1;
- // top: 0;
- // left: 0;
- // right: 0;
- // margin: 0 auto;
- }
-
- .llms_certificate,
- .llms_my_certificate {
- margin: 80px;
- position: relative;
- // top: -100%;
- // width: 100%;
- z-index: 2;
- }
-
-}
-
-
-
-@media print {
-
- @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 {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- margin: 0 auto;
- background: #fff none;
- }
-
-}
diff --git a/assets/scss/frontend/_checkout.scss b/assets/scss/frontend/_checkout.scss
deleted file mode 100644
index 1ac62a5fbe..0000000000
--- a/assets/scss/frontend/_checkout.scss
+++ /dev/null
@@ -1,184 +0,0 @@
-.llms-checkout-wrapper {
- form.llms-login {
- border: 3px solid $color-brand-blue;
- display: none;
- margin-bottom: 10px;
- }
- .llms-form-heading {
- background: $color-brand-blue;
- color: #fff;
- margin: 0 0 5px;
- padding: 10px;
- }
-}
-
-.llms-checkout {
- background: #fff;
- position: relative;
-}
-
-.llms-checkout-cols-2 {
- @extend %clearfix;
-
- @media all and (min-width: 800px) {
-
- .llms-checkout-col {
- float: left;
-
- &.llms-col-1 {
- margin-right: 5px;
- width: calc( 58% - 5px );
- }
- &.llms-col-2 {
- margin-left: 5px;
- width: calc( 42% - 5px );
-
- button {
- width: 100%;
- }
- }
- }
-
- }
-
-}
-
- .llms-checkout-section {
- border: 3px solid $color-brand-blue;
- margin-bottom: 10px;
- position: relative;
- }
-
- .llms-checkout-section-content {
- margin: 10px;
- &.llms-form-fields {
- margin: 0px;
- }
-
- .llms-label {
- font-weight: 400;
- font-variant: small-caps;
- text-transform: lowercase;
- }
-
- .llms-order-summary {
- list-style-type: none;
- margin: 0;
- padding: 0;
-
- li { list-style-type: none; }
-
- li.llms-pricing {
- &.on-sale,
- &.has-coupon {
- .price-regular { text-decoration: line-through; }
- }
- }
-
-
- }
-
- .llms-coupon-wrapper {
- border-top: 1px solid #dadada;
- margin-top: 10px;
- padding-top: 10px;
-
- .llms-coupon-entry {
- display: none;
- margin-top: 10px;
- }
- }
-
- }
-
- .llms-form-field.llms-payment-gateway-option {
-
- 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 #dadada;
- content: '';
- display: block;
- margin: 10px;
- }
-
- .llms-payment-gateway {
- margin-bottom: 5px;
- 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 10px;
- }
-
- .llms-payment-method {
- margin: 10px 10px 0;
- }
-
- .llms-gateway-description {
- p {
- font-size: 85%;
- font-style: italic;
- margin-bottom: 0;
- }
- }
diff --git a/assets/scss/frontend/_course.scss b/assets/scss/frontend/_course.scss
deleted file mode 100644
index 2296f78086..0000000000
--- a/assets/scss/frontend/_course.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-.course {
- .llms-meta-info {
- margin: 20px 0;
- .llms-meta-title {
- margin-bottom: 5px;
- }
- .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 b8f3eda2a2..0000000000
--- a/assets/scss/frontend/_llms-access-plans.scss
+++ /dev/null
@@ -1,192 +0,0 @@
-.llms-access-plans {
- @extend %clearfix;
-
- @media all and (min-width: 600px) {
- $cols: 1;
- @while $cols <= 5 {
- &.cols-#{$cols} .llms-access-plan {
- width: 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-footer,
- .llms-access-plan-content {
- background: #f1f1f1;
- }
-
- &.featured {
-
- .llms-access-plan-featured {
- background: lighten( $color-brand-blue, 8 );
- }
-
- .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; }
- }
-
- .stamp {
- background: $color-brand-blue;
- color: #fff;
- font-size: 11px;
- font-style: normal;
- font-weight: 300;
- padding: 2px 3px;
- vertical-align: top;
- }
-
- .llms-access-plan-restrictions ul { margin: 0; }
-
-}
- .llms-access-plan-featured {
- color: #fff;
- font-size: 14px;
- font-weight: 400;
- margin: 0 2px 0 2px;
- }
-
- .llms-access-plan-content {
- margin: 0 2px 0;
-
- .llms-access-plan-pricing {
- padding: 10px 0 0;
- }
- }
-
- .llms-access-plan-title {
- background: $color-brand-blue;
- 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;
-
- .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: 15px;
- font-variant: small-caps;
- line-height: 1.2;
- }
-
- .llms-access-plan-description {
- 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 {
- .stamp {
- vertical-align: baseline;
- }
- ul {
- margin: 0;
- li {
- font-size: 12px;
- line-height: 14px;
- list-style-type: none;
- }
- }
- a {
- color: $color-brand-orange;
- &:hover {
- color: $color-brand-orange-dark;
- }
- }
- }
-
- .llms-access-plan-footer {
- border-bottom: 3px solid #f1f1f1;
- padding: 10px;
- margin: 0 2px 2px 2px;
-
- .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 3999faae21..0000000000
--- a/assets/scss/frontend/_llms-achievements-certs.scss
+++ /dev/null
@@ -1,106 +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: 100% / $cols;
- }
- $cols: $cols + 1;
- }
- }
-
-}
-
-.llms-achievement,
-.llms-certificate {
-
- background: #f1f1f1;
- border: none;
- color: inherit;
- display: block;
- text-decoration: none;
- width: 100%;
-
- &:hover {
- background: #eaeaea;
- }
-
- .llms-achievement-img {
- display: block;
- margin: 0;
- width: 100%;
- }
-
- .llms-achievement-title {
- font-size: 16px;
- margin: 0;
- padding: 10px;
- text-align: center;
- }
-
- .llms-certificate-title {
- 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 #f1f1f1;
- padding: 20px 10px;
- background: #fff;
- text-align: center;
- &:hover {
- background: #fff;
- 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 5f92792c91..0000000000
--- a/assets/scss/frontend/_llms-author.scss
+++ /dev/null
@@ -1,62 +0,0 @@
-.llms-author {
- .name {
- margin-left: 5px;
- }
- .label {
- margin-left: 5px;
- }
- .avatar {
- border-radius: 50%;
- }
- .bio {
- margin-top: 5px;
- }
-}
-
-
-.llms-instructor-info {
- .llms-instructors {
-
- .llms-col {
- &:first-child .llms-author {
- margin-left: 0;
- }
- &:last-child .llms-author {
- margin-right: 0;
- }
- }
-
- .llms-author {
-
- background: #f5f5f5;
- border-top: 4px solid $color-brand-blue;
- text-align: center;
- margin: 45px 5px 5px;
- padding: 0 10px 10px;
-
- .avatar {
- background: $color-brand-blue;
- border: 4px solid $color-brand-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 8a1da8d02e..0000000000
--- a/assets/scss/frontend/_llms-notifications.scss
+++ /dev/null
@@ -1,177 +0,0 @@
-.llms-notification {
-
- @include clearfix();
-
- background: #fff;
- box-shadow: 0 1px 2px -2px #333, 0 1px 1px -1px #333;
- border-top: 4px solid $color-blue;
- left: 12px;
- opacity: 0;
- padding: 12px;
- position: fixed;
- right: 12px;
- top: 24px;
- transition:
- opacity 0.4s ease-in-out,
- right 0.4s ease-in-out,
- ;
- visibility: none;
- width: auto;
- z-index: 9999999;
-
- &.visible {
- opacity: 1;
- 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 {
- font-size: 18px;
- margin: 0;
- }
-
- .llms-notification-body {
- font-size: 14px;
- line-height: 1.4;
- p, li {
- font-size: inherit;
- }
- p {
- margin-bottom: 8px;
- }
-
- .llms-mini-cert {
- background: #f6f6f6;
- border: 4px double #b0b0b0;
- padding: 24px 8px;
- .llms-mini-cert-title {
- font-size: 16px;
- font-weight: 700;
- margin-bottom: 8px;
- text-align: center;
- }
- p,li {
- font-size: 14px;
- &:last-child { 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;
- }
-
- .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 {
- left: auto;
- right: -800px;
- width: 360px;
- &.visible {
- 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 d0585c70a2..0000000000
--- a/assets/scss/frontend/_llms-pagination.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-.llms-pagination {
-
- ul {
- list-style-type: none;
- @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 a43869179d..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: #f1f2f1;
- 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 831da49059..0000000000
--- a/assets/scss/frontend/_llms-quizzes.scss
+++ /dev/null
@@ -1,343 +0,0 @@
-.single-llms_quiz {
-
- @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,
- .llms-quiz-results-history {
- float: left;
- width: calc( 100% - 300px );
- }
- }
-
- }
-
- ul.llms-quiz-meta-info,
- ul.llms-quiz-meta-info li {
- list-style-type: none;
- margin: 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-quiz-ui {
- background: #fcfcfc;
- padding: 20px;
- position: relative;
-
- .llms-quiz-header {
- align-items: center;
- display: flex;
- margin: 0 0 30px;
- }
-
- .llms-progress {
- background-color: #f1f2f1;
- 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: $color-danger;
- border-radius: 4px;
- color: #fff;
- margin: 10px 0;
- padding: 10px;
-
- a {
- color: rgba( #fff, 0.6 );
- 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 {
- 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;
- width: 100%;
- }
- }
- input:checked ~ .llms-choice-image {
- background: #efefef
- }
- }
-
- input {
- display: none;
- left: 0;
- pointer-events: none;
- position: absolute;
- top: 0;
- visibility: hidden;
- }
-
- label {
- margin: 0;
- padding: 10px 20px;
- position: relative;
- // &:hover {
- &.hovered {
- .llms-marker:not(.type--lister) {
- .iterator {
- display: none;
- }
- .fa {
- display: inline;
- }
- }
- }
- }
-
- .llms-marker {
-
- background: #f0f0f0;
- 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-bottom: 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 5eb2234cd1..0000000000
--- a/assets/scss/frontend/_llms-table.scss
+++ /dev/null
@@ -1,59 +0,0 @@
-.llms-table {
- border: 1px solid #efefef;
- 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 #efefef;
- padding: 8px 12px;
-
- // 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 784245d64c..0000000000
--- a/assets/scss/frontend/_loop.scss
+++ /dev/null
@@ -1,263 +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: 100% / $cols;
- }
- $cols: $cols + 1;
- }
- }
-
-
-}
-
-.llms-loop-item {
- float: left;
- list-style: none;
- margin: 0;
- padding: 0;
- width: 100%;
-}
-
-
- .llms-loop-item-content {
- background: #f1f1f1;
- padding-bottom: 10px;
- margin: 10px;
-
- &:hover {
- background: #eaeaea;
- }
-
- .llms-loop-link {
- color: #212121;
- display: block;
- &:visited {
- color: #212121;
- }
- }
-
- .llms-featured-image {
- display: block;
- max-width: 100%;
- }
-
- .llms-loop-title {
- margin-top: 5px;
- &:hover {
- color: $color-brand-blue;
- }
- }
-
- .llms-meta,
- .llms-author,
- .llms-loop-title {
- padding: 0 10px;
- }
-
- .llms-meta,
- .llms-author {
- color: #444;
- display: block;
- font-size: 13px;
- margin-bottom: 3px;
- &:last-child {
- margin-bottom: 0;
- }
- }
-
- .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 26e216b91e..0000000000
--- a/assets/scss/frontend/_main.scss
+++ /dev/null
@@ -1,480 +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;
-}
-
-/* Genesis Overrides */
-h1, h2, h3, h4, h5, h6 {
- font-weight: 300;
-}
-
-#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;
- }
-
- .llms-lesson-complete, .lesson-complete-placeholder {
- font-size: 1.2em;
- margin-right: 6px;
- color: #ccc;
- &.done {
- color: #e5554e;
- }
- }.section-title {
- font-weight: bold;
- }.lesson-title {
- a {
- text-decoration: none;
- &:hover {
- text-decoration: none !important;
- }
- }
- &.done {
- a {
- color: #999;
- text-decoration: line-through;
- }
- }
- }
- ul {
- list-style-type: none;
- li {
- list-style-type: none;
- ul li {
- margin: 0 0 2px 0;
- padding: 0;
- }
- }
- }
-}
-
-
-
-.llms-remove-coupon {
- float: right;
-}
-
-
-
-
-
-.llms-lesson-link-locked, .llms-lesson-link-locked:hover {
- background: #f1f1f1;
- box-shadow: 0 1px 2px 0 rgba(1, 1, 1, 0.4);
- 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;
-}
diff --git a/assets/scss/frontend/_notices.scss b/assets/scss/frontend/_notices.scss
deleted file mode 100644
index 477078366d..0000000000
--- a/assets/scss/frontend/_notices.scss
+++ /dev/null
@@ -1,41 +0,0 @@
-.llms-notice {
- background: rgba( $color-brand-blue, .3 );
- border-color: $color-brand-blue;
- border-style: solid;
- border-width: 3px;
- padding: 10px;
- margin-bottom: 10px;
-
- 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, .3 );
- border-color: $color-red;
- }
-
- &.llms-success {
- background: rgba( $color-green, .3 );
- 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 10px;
- li {
- list-style-type: none;
- }
-}
diff --git a/assets/scss/frontend/_student-dashboard.scss b/assets/scss/frontend/_student-dashboard.scss
deleted file mode 100644
index debab768e0..0000000000
--- a/assets/scss/frontend/_student-dashboard.scss
+++ /dev/null
@@ -1,342 +0,0 @@
-.llms-student-dashboard {
-
- .llms-sd-nav {}
-
- .llms-sd-title {
- margin: 25px 0;
- }
-
- .llms-sd-items { // ul
- @extend %clearfix;
- list-style-type: none;
- margin: 0;
- padding: 0;
- }
- .llms-sd-item { // li
- float: left;
- list-style-type: none;
- margin: 0;
- padding: 0;
-
- &:last-child {
- .llms-sep {
- display: none;
- }
- }
-
- .llms-sep {
- color: #333;
- margin: 0 5px;
- }
- }
-
- .llms-sd-section {
- margin-bottom: 25px;
- .llms-sd-section-footer {
- margin-top: 10px;
- }
- }
-
- .orders-table {
-
- border: 1px solid #f5f5f5;
- width: 100%;
-
- thead {
- display: none;
- th,td {
- font-weight: 700;
- }
- @media all and ( min-width: 600px ) {
- display: table-header-group;
- }
- }
-
- tbody {
- tr:nth-child( even ) {
- td, th {
- background: #f9f9f9;
- }
- }
- }
-
- tfoot {
- th, td {
- padding: 10px;
- text-align: right;
- &:last-child { border-bottom-width: 0; }
- }
- }
-
- th {
- font-weight: 700;
- }
-
- th, td {
- border-color: #efefef;
- border-style: solid;
- border-width: 0;
- display: block;
- padding: 8px 12px;
- 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();
-
- .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
- */
- .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 {
-
- th {
- font-weight: 400;
- }
-
- 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 {
- padding-left: 36px;
- 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: #f9f9f9;
- 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;
- }
- }
-
- }
-
-
-}
-
-
-.llms-sd-pagination {
- margin-top: 24px;
- @include clearfix;
- .llms-button-secondary {
- display: inline-block;
- &.prev { float: left; }
- &.next { float: right; }
- }
-}
-
-
-.llms-sd-notification-center {
- .llms-notification {
- z-index: 1;
- }
-}
diff --git a/assets/scss/frontend/_syllabus.scss b/assets/scss/frontend/_syllabus.scss
deleted file mode 100644
index 95c553fbdc..0000000000
--- a/assets/scss/frontend/_syllabus.scss
+++ /dev/null
@@ -1,147 +0,0 @@
-.llms-syllabus-wrapper {
-
- margin: 15px;
- text-align: center;
-
- .llms-section-title {
- margin: 25px 0 0;
- }
-
-}
-
-.llms-course-navigation {
- @extend %clearfix;
-
- .llms-prev-lesson,
- .llms-next-lesson,
- .llms-back-to-course {
- width: 49%;
- }
-
- .llms-prev-lesson,
- .llms-back-to-course {
- float: left;
- margin-right: 0.5%;
- }
-
- .llms-next-lesson,
- .llms-prev-lesson + .llms-back-to-course {
- float: right;
- margin-left: 0.5%;
- }
-
-}
-
-.llms-lesson-preview {
- display: inline-block;
- margin-top: 15px;
- max-width: 100%;
- position: relative;
- width: 480px;
-
- .llms-lesson-link {
- background: #f1f1f1;
- color: #212121;
- display: block;
- // height: 100%;
- padding: 15px;
- text-decoration: none;
-
- @include clearfix();
-
- &:hover {
- background: #eaeaea;
- }
-
- &:visited {
- color: #212121;
- }
-
- }
-
- .llms-lesson-thumbnail {
- margin-bottom: 10px;
- img {
- display: block;
- width: 100%;
- }
- }
-
- .llms-pre-text {
- text-align: left;
- }
-
- .llms-lesson-title {
- font-weight: 700;
- margin: 0 auto 10px;
- text-align: left;
- &:last-child {
- margin-bottom: 0;
- }
- }
-
- .llms-lesson-excerpt {
- text-align: left;
- }
-
- .llms-main {
- float: left;
- width: 100%;
- }
- .llms-extra {
- float: right;
- width: 15%;
- }
-
- .llms-extra + .llms-main {
- width: 85%;
- }
-
- .llms-lesson-counter,
- .llms-free-lesson-svg,
- .llms-lesson-complete,
- .llms-lesson-complete-placeholder {
- display: block;
- font-size: 32px;
- margin-bottom: 15px;
- }
-
- &.is-free,
- &.is-complete {
- .llms-lesson-complete {
- color: $color-brand-blue;
- }
- }
-
- .llms-icon-free {
- background: $color-brand-blue;
- border-radius: 4px;
- color: #f1f1f1;
- display: inline-block;
- padding: 5px 6px 4px;
- line-height: 1;
- font-size: 14px;
- }
-
- &.is-incomplete {
- .llms-lesson-complete {
- color: #cacaca;
- }
- }
-
- .llms-lesson-counter {
- font-size: 16px;
- line-height: 1;
- }
-
- .llms-free-lesson-svg {
- fill: currentColor;
- height: 23px;
- width: 50px;
- }
-
- p {
- margin-bottom: 0;
- }
-
-}
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 a91e040adb..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/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";
-@import "_includes/spinner";
diff --git a/babel.config.js b/babel.config.js
deleted file mode 100644
index 06a3c51389..0000000000
--- a/babel.config.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * Babel config
- *
- * @package LifterLMS/Dev/Scripts
- *
- * @since Unknown
- * @version Unknown
- */
-
-const presets = [ [ "@babel/env", ] ];
-
-module.exports = { presets };
diff --git a/class-lifterlms.php b/class-lifterlms.php
index d61f22f860..6399040489 100644
--- a/class-lifterlms.php
+++ b/class-lifterlms.php
@@ -34,7 +34,7 @@ final class LifterLMS {
*
* @var string
*/
- public $version = '5.4.1';
+ public $version = '5.5.0';
/**
* LLMS_Assets instance
diff --git a/composer.json b/composer.json
deleted file mode 100644
index 8e669fb68a..0000000000
--- a/composer.json
+++ /dev/null
@@ -1,133 +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"
- }
- },
- "minimum-stability": "dev",
- "require": {
- "php": ">=7.3",
- "composer/installers": "~1.9.0",
- "deliciousbrains/wp-background-processing": "1.0.2",
- "lifterlms/lifterlms-blocks": "2.2.1",
- "lifterlms/lifterlms-rest": "1.0.0-beta.20",
- "woocommerce/action-scheduler": "3.3.0",
- "lifterlms/lifterlms-helper": "3.4.1"
- },
- "require-dev": {
- "lifterlms/lifterlms-tests": "^3.1.0",
- "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",
- "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 installed_paths ../../../vendor/wp-coding-standards/wpcs,../../../vendor/lifterlms/lifterlms-cs,../../../vendor/phpcompatibility/php-compatibility,../../../vendor/phpcompatibility/phpcompatibility-paragonie,../../../vendor/phpcompatibility/phpcompatibility-wp",
- "\"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": [
- "\"vendor/bin/llms-env\" wp plugin activate lifterlms",
- "echo The next two lines are a workaround for https://core.trac.wordpress.org/ticket/52086",
- "\"vendor/bin/llms-env\" wp config set SCRIPT_DEBUG true --raw",
- "\"vendor/bin/llms-env\" wp user create voucher voucher@email.tld --role=student --user_pass=password"
- ],
- "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/"
- ],
- "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:-trunk}\"",
- "tests-reinstall": [
- "@tests-remove",
- "@tests-install"
- ],
- "tests": "\"vendor/bin/phpunit\"",
- "tests-run": "\"vendor/bin/phpunit\"",
- "install-php8": "composer install --ignore-platform-reqs"
- },
- "extra": {
- "installer-paths": {
- "libraries/{$name}": [
- "lifterlms/lifterlms-blocks",
- "lifterlms/lifterlms-helper",
- "lifterlms/lifterlms-rest"
- ],
- "vendor/{$vendor}/{$name}": [
- "type:wordpress-plugin"
- ]
- }
- }
-}
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/coding-standards.md b/docs/coding-standards.md
deleted file mode 100644
index 4b555e6ab2..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://make.wordpress.org/core/handbook/best-practices/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 52129fd0ca..0000000000
--- a/docs/documentation-standards.md
+++ /dev/null
@@ -1,396 +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
-+ Constants
-
-## 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, an `@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 Warrating 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 differening lengths should not be alinged 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
-[wp-core-docs]: https://make.wordpress.org/core/handbook/best-practices/inline-documentation-standards/php/
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 6bb012f3c3..0000000000
--- a/docs/installing.md
+++ /dev/null
@@ -1,80 +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.
-
-
-### 2. Install composer dependencies:
-
-```sh
-$ composer install
-```
-
-### 3. Install npm dependencies:
-
-```sh
-$ npm install --global gulp
-$ npm install
-```
-
-### 4. Build static assets
-
-```sh
-$ gulp 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 ab40f29978..0000000000
--- a/docs/releases.md
+++ /dev/null
@@ -1,85 +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).
-
-This build process relies on the use of the `llms-dev` CLI. The CLI is not available publicly. Any core contributor will be provided access to the CLI as needed.
-
-
-## 1. Pre-release Tests
-
-1. Ensure the release passes all automated testing. Use `composer run tests-run`.
-2. Ensure the release passes coding standard checks. Use `composer run check-cs-errors`.
-
-_Note: files in the `tmp` directory used during tests are currently parsed by the certain gulp tasks. Remove the `tmp` directory before proceeding to the next steps._
-
-
-## 2. Build the Release
-
-### 2A. Generate the Changelog
-
-1. Automatically generate the changelog from `@since [version]` tags in the codebase: `llms-dev log:write`.
-2. Update the changelog, grouping changes into relevant headings (Updates, Bug Fixes, Deprecations, & Templates Updated).
-3. Remove redundant, irrelevant, and superfluous entries.
-
-### 2B. Update file version numbers
-
-Replace all `[version]` tags with the release version number: run `llms-dev ver:update`. Use the `-i` or `-F` flags to update the release according to the next version number.
-
-### 2C. Build static assets
-
-The following steps can be run in a single command, `npm run build`.
-
-+ Generate static assets and language files: `npm run build:scripts && npm run build:styles && npm run build:pot`
-+ Generate the readme.txt file: `llms-dev readme`
-+ Update contributors list in README.md: `npm run contributors`
-
-
-## 3. Generate the Distribution Archive
-
-Run `llms-dev archive`.
-
-
-## 4. Run pre-release tests on the archived
-
-Install and activate the zip file on a temporary sandbox site.
-
- 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 (unlikely but possible) errors occurred in the build steps above._
-
-
-## 5. Publish the Release
-
-Run `llms-dev publish:gh`.
-
-The following steps are performed automatically by the above task:
-
-1. Publish to GitHub
-
- A. The contents of the distribution archive is force-pushed to the `release` branch.
- B. A new release tag draft is created for the current version number using `release` as the commit target.
- C. The distribution archive is uploaded to the release.
- D. The release is published.
- E. A webhook ping notifies the `llms-releaser` server which performs the remaining steps of the release:
-
-2. Publish to WordPress plugin repository
-
- A. Create a new SVN tag using the release asset (distribution archive) as the base.
- B. Update the `trunk` branch to match the new tag.
-
-3. A changelog blog post is published to make.lifterlms.com.
-
-4. The number is updated at LifterLMS.com
-
-5. The distribution archive is synced to the release asset bucket in AWS S3 as a backup.
-
-
-## 6. Update documentation at developer.lifterlms.com
-
-Via SSH run `./updateDocs.sh` and follow the prompts.
diff --git a/gulpfile.js/index.js b/gulpfile.js/index.js
deleted file mode 100644
index 6b6010bbd7..0000000000
--- a/gulpfile.js/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Main Gulp File
- *
- * Requires all task files
- */
-var gulp = require('gulp');
-
-// All custom tasks.
-require( './tasks/js-additional' );
-require( './tasks/js-builder' );
-
-// All tasks from lib-tasks.
-require( 'lifterlms-lib-tasks' )( gulp );
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 869fa7758e..0000000000
--- a/gulpfile.js/tasks/js-builder.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * -----------------------------------------------------------
- * js-builder
- * -----------------------------------------------------------
- * Compile Admin builder Javascript
- */
-
-var gulp = require( 'gulp' )
- , notify = require( 'gulp-notify' )
- , 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', notify.onError( {
- message: '<%= error.message %>',
- sound: 'Frog',
- title: 'js-builder error'
- } ) ) )
- .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', notify.onError( {
- message: '<%= error.message %>',
- sound: 'Frog',
- title: 'js-builder error'
- } ) ) )
- .pipe( rename( 'llms-builder.min.js' ) )
- .pipe( sourcemaps.write( '../maps/js', { destPath: 'assets/js' } ) )
- .pipe( gulp.dest( 'assets/js/' ) );
-
- cb();
-
-});
diff --git a/includes/admin/class.llms.admin.assets.php b/includes/admin/class.llms.admin.assets.php
index 3e46a7aca7..c1b8b950f3 100644
--- a/includes/admin/class.llms.admin.assets.php
+++ b/includes/admin/class.llms.admin.assets.php
@@ -69,7 +69,8 @@ public function is_llms_page() {
* @since 1.0.0
* @since 3.29.0 Unknown.
* @since 3.35.0 Explicitly set asset versions.
- * @since 5.0.0 Use `LLMS_Assets` for registration/enqueue of
+ * @since 5.0.0 Use `LLMS_Assets` for registration/enqueue of styles.
+ * @since 5.5.0 Use `LLMS_Assets` for the enqueue of `llms-addons`.
*
* @return void
*/
@@ -88,10 +89,7 @@ public function admin_styles() {
$screen = get_current_screen();
if ( 'lifterlms_page_llms-add-ons' === $screen->id || 'lifterlms_page_llms-settings' === $screen->id ) {
- wp_register_style( 'llms-admin-add-ons', LLMS_PLUGIN_URL . 'assets/css/admin-add-ons' . LLMS_ASSETS_SUFFIX . '.css', array(), LLMS()->version, 'all' );
- wp_enqueue_style( 'llms-admin-add-ons' );
- wp_style_add_data( 'llms-admin-add-ons', 'rtl', 'replace' );
- wp_style_add_data( 'llms-admin-add-ons', 'suffix', LLMS_ASSETS_SUFFIX );
+ llms()->assets->enqueue_style( 'llms-admin-add-ons' );
}
}
@@ -108,6 +106,7 @@ public function admin_styles() {
* @since 5.0.0 Clean up duplicate references to llms-select2 and register the script using `LLMS_Assets`.
* Remove topModal vendor dependency.
* Add `llms-admin-forms` on the forms post table screen.
+ * @since 5.5.0 Use `LLMS_Assets` for the enqueue of `llms-admin-add-ons`.
*
* @return void
*/
@@ -233,9 +232,7 @@ public function admin_scripts() {
wp_enqueue_script( 'llms-builder', LLMS_PLUGIN_URL . 'assets/js/llms-builder' . LLMS_ASSETS_SUFFIX . '.js', array( 'jquery', 'jquery-ui-sortable', 'jquery-ui-draggable', 'backbone', 'underscore', 'post', 'llms-quill' ), LLMS()->version, true );
} elseif ( 'lifterlms_page_llms-add-ons' === $screen->id ) {
-
- wp_enqueue_script( 'llms-addons', LLMS_PLUGIN_URL . '/assets/js/llms-admin-addons' . LLMS_ASSETS_SUFFIX . '.js', array( 'jquery', 'llms' ), LLMS()->version, true );
-
+ llms()->assets->enqueue_script( 'llms-addons' );
}
}
diff --git a/includes/assets/llms-assets-scripts.php b/includes/assets/llms-assets-scripts.php
index 1b8547b6ff..645ad550ea 100644
--- a/includes/assets/llms-assets-scripts.php
+++ b/includes/assets/llms-assets-scripts.php
@@ -18,7 +18,7 @@
* @package LifterLMS/Assets
*
* @since 4.4.0
- * @version 5.0.0
+ * @version 5.5.0
*/
defined( 'ABSPATH' ) || exit;
@@ -29,6 +29,7 @@
* @since 4.4.0
* @since 4.8.0 Added llms-admin-setup.
* @since 5.0.0 Added llms-select2.
+ * @since 5.5.0 Added llms-addons.
*/
return array(
@@ -47,6 +48,11 @@
),
// Admin.
+ 'llms-addons' => array(
+ 'asset_file' => true,
+ 'file_name' => 'llms-admin-addons',
+ 'suffix' => '',
+ ),
'llms-admin-setup' => array(
'dependencies' => array( 'jquery' ),
),
diff --git a/includes/assets/llms-assets-styles.php b/includes/assets/llms-assets-styles.php
index 98bb0df6dc..d2b9b9771a 100644
--- a/includes/assets/llms-assets-styles.php
+++ b/includes/assets/llms-assets-styles.php
@@ -18,7 +18,7 @@
* @package LifterLMS/Assets
*
* @since 4.4.0
- * @version 5.0.0
+ * @version 5.5.0
*/
defined( 'ABSPATH' ) || exit;
@@ -30,6 +30,7 @@
* @since 4.4.4 Added llms-admin-setup.
* @since 4.8.0 Added llms-admin-importer.
* @since 5.0.0 Added llms-select2.
+ * @since 5.5.0 Added llms-admin-add-ons.
*/
return array(
@@ -40,6 +41,10 @@
'certificates' => array(),
// Admin.
+ 'llms-admin-add-ons' => array(
+ 'file_name' => 'llms-admin-addons',
+ 'suffix' => '',
+ ),
'llms-admin-setup' => array(
'file_name' => 'admin-setup',
),
diff --git a/includes/class-llms-assets.php b/includes/class-llms-assets.php
index 4206b4c930..0fcf7237c0 100644
--- a/includes/class-llms-assets.php
+++ b/includes/class-llms-assets.php
@@ -15,7 +15,7 @@
* @package LifterLMS/Classes
*
* @since 4.4.0
- * @version 4.9.0
+ * @version 5.5.0
*/
defined( 'ABSPATH' ) || exit;
@@ -25,6 +25,7 @@
*
* @since 4.4.0
* @since 4.9.0 Added new default values related to script localization.
+ * @since 5.5.0 Added new script default for `asset_file`.
*/
class LLMS_Assets {
@@ -58,10 +59,11 @@ class LLMS_Assets {
),
// Script specific defaults.
'script' => array(
- 'path' => 'assets/js',
- 'extension' => '.js',
- 'in_footer' => true,
- 'translate' => false,
+ 'path' => 'assets/js',
+ 'extension' => '.js',
+ 'in_footer' => true,
+ 'translate' => false,
+ 'asset_file' => false,
),
// Stylesheet specific defaults.
'style' => array(
@@ -246,6 +248,7 @@ public function enqueue_style( $handle ) {
*
* @since 4.4.0
* @since 4.4.1 Replace truthy check with an strict check against `false` to ensure assets defined with an empty array signifying all default values should be used.
+ * @since 5.5.0 Load dependency and version info from an asset.php file when `$asset_file` is `true`.
*
* @param string $type The asset type. Accepts either "script" or "style".
* @param string $handle The asset handle.
@@ -262,6 +265,7 @@ public function enqueue_style( $handle ) {
* @type string $package_id An ID used to identify the originating plugin or theme that defined the asset.
* @type boolean $in_footer (For `script` assets only) Whether or not the script should be output in the footer. Defaults to `true`.
* @type boolean $translate (For `script` assets only) Whether or not script translations should be set. Defaults to `false`.
+ * @type boolean $asset_file (For `script` assets only) Whether or not the script has an asset file (generated via the @wordpress/dependency-extraction-webpack-plugin).
* @type boolean $rtl (For `style` assets only) Whether or not to automatically add RTL style data for the stylesheet. Defaults to `true`.
* @type boolean $media (For `style` assets only) The stylesheet's media type. Defaults to `all`.
* }
@@ -304,6 +308,8 @@ protected function get( $type, $handle ) {
)
);
+ $asset = $this->merge_asset_file( $asset );
+
}
/**
@@ -462,6 +468,34 @@ public function is_inline_enqueued( $handle ) {
return in_array( $handle, array_keys( $this->inline ), true );
}
+ /**
+ * Retrieve dependency and version info from a script asset's asset.php file
+ *
+ * Loads the asset.php file (generated via the @wordpress/dependency-extraction-webpack-plugin) and merges it
+ * into an existing asset array.
+ *
+ * @since 5.5.0
+ *
+ * @param array $asset An asset definition array.
+ * @return array
+ */
+ protected function merge_asset_file( $asset ) {
+
+ if ( empty( $asset['asset_file'] ) ) {
+ return $asset;
+ }
+
+ $asset_file_path = plugin_dir_path( $asset['base_file'] ) . trailingslashit( $asset['path'] ) . $asset['file_name'] . '.asset.php';
+ if ( file_exists( $asset_file_path ) ) {
+ $info = include $asset_file_path;
+ $asset['dependencies'] = array_merge( $asset['dependencies'], $info['dependencies'] );
+ $asset['version'] = $info['version'];
+ }
+
+ return $asset;
+
+ }
+
/**
* Output inline scripts
*
@@ -539,6 +573,7 @@ protected function prepare_inline_asset_for_output( $asset, $location ) {
*
* @since 4.4.0
* @since 4.9.0 Automatically set script translations when `translate=true`.
+ * @since 5.5.0 Automatically register all of the asset's dependencies.
*
* @param string $handle The script's handle.
* @return boolean
@@ -548,6 +583,8 @@ public function register_script( $handle ) {
$script = $this->get( 'script', $handle );
if ( $script ) {
+ array_map( array( $this, 'register_script' ), $script['dependencies'] );
+
$reg = wp_register_script( $handle, $script['src'], $script['dependencies'], $script['version'], $script['in_footer'] );
if ( $reg && $script['translate'] ) {
$this->set_script_translations( $script );
@@ -580,6 +617,7 @@ public function register_script( $handle ) {
* `llms.css` (or `llms.min.css`) would add the RTL stylesheet `llms-rtl.css` (or `llms-rtl.min.css`).
*
* @since 4.4.0
+ * @since 5.5.0 Automatically register all of the asset's dependencies.
*
* @param string $handle The stylesheets's handle.
* @return boolean
@@ -589,6 +627,8 @@ public function register_style( $handle ) {
$style = $this->get( 'style', $handle );
if ( $style ) {
+ array_map( array( $this, 'register_style' ), $style['dependencies'] );
+
$reg = wp_register_style( $handle, $style['src'], $style['dependencies'], $style['version'], $style['media'] );
if ( $reg && $style['rtl'] ) {
diff --git a/includes/class-llms-loader.php b/includes/class-llms-loader.php
index fa167e2a7e..50eb17e96f 100644
--- a/includes/class-llms-loader.php
+++ b/includes/class-llms-loader.php
@@ -5,7 +5,7 @@
* @package LifterLMS/Classes
*
* @since 4.0.0
- * @version 5.3.0
+ * @version 5.5.0
*/
defined( 'ABSPATH' ) || exit;
@@ -308,6 +308,7 @@ public function includes_admin() {
* @since 4.9.0 Adds constants which can be used to identify when included libraries have been loaded.
* @since 5.0.0 Load core libraries from new location, add WP Background Processing lib, add LLMS Helper.
* @since 5.1.3 Add keys to the $libs array and pass them through a filter.
+ * @since 5.5.0 Add LLMS-CLI to the list of included libraries.
*
* @return void
*/
@@ -319,6 +320,11 @@ public function includes_libraries() {
'test' => function_exists( 'has_blocks' ) && ! defined( 'LLMS_BLOCKS_VERSION' ),
'file' => LLMS_PLUGIN_DIR . 'libraries/lifterlms-blocks/lifterlms-blocks.php',
),
+ 'cli' => array(
+ 'const' => 'LLMS_CLI_LIB',
+ 'test' => ! function_exists( 'llms_cli' ),
+ 'file' => LLMS_PLUGIN_DIR . 'libraries/lifterlms-cli/lifterlms-cli.php',
+ ),
'rest' => array(
'const' => 'LLMS_REST_API_LIB',
'test' => ! class_exists( 'LifterLMS_REST_API' ),
@@ -336,10 +342,13 @@ public function includes_libraries() {
*
* @since 5.1.3
*
- * @param array $libs Array of library data. Array key is a unique ID for the library and each array contains the following keys:
- * @type string $const Name of the constant used to identify if the library is loaded as a library.
- * @type bool $test A test which is evaluated to determine if the library should be loaded. Returning `false` causes the library not to load.
- * @type string $file Path to the main library file's location in the LifterLMS core plugin.
+ * @param array $libs {
+ * Array of library data. Each array key serves as a unique ID for the library.
+ *
+ * @type string $const Name of the constant used to identify if the library is loaded as a library.
+ * @type bool $test A test which is evaluated to determine if the library should be loaded. Returning `false` causes the library not to load.
+ * @type string $file Path to the main library file's location in the LifterLMS core plugin.
+ * }
*/
$libs = apply_filters( 'llms_included_libs', $libs );
foreach ( $libs as $lib ) {
diff --git a/includes/class.llms.ajax.handler.php b/includes/class.llms.ajax.handler.php
index a20f8f2a48..4eef04715c 100644
--- a/includes/class.llms.ajax.handler.php
+++ b/includes/class.llms.ajax.handler.php
@@ -1,11 +1,11 @@
post_type ] ) ) {
$obj = get_post_type_object( $post->post_type );
$items[ $post->post_type ] = array(
diff --git a/includes/class.llms.l10n.js.php b/includes/class.llms.l10n.js.php
index dae1fb1f05..fe1a3e76f4 100644
--- a/includes/class.llms.l10n.js.php
+++ b/includes/class.llms.l10n.js.php
@@ -7,7 +7,7 @@
*
* @package LifterLMS/Classes/Localization
* @since 3.17.8
- * @version 5.0.0
+ * @version 5.4.0
*/
defined( 'ABSPATH' ) || exit;
@@ -33,7 +33,7 @@ public function __construct() {
* @param array $strings existing strings from core / 3rd parties.
* @return array
* @since 3.17.8
- * @version 5.0.0
+ * @version 5.4.0
*/
public function get_strings( $strings ) {
// phpcs:disable
@@ -201,7 +201,7 @@ public function get_strings( $strings ) {
* File: assets/js/builder/Views/Assignment.js.
*
* @since 3.17.0
- * @version 3.17.7
+ * @version 5.4.0
*/
'%1$s Assignment' => esc_html__( '%1$s Assignment', 'lifterlms' ),
'Add Existing Assignment' => esc_html__( 'Add Existing Assignment', 'lifterlms' ),
@@ -242,7 +242,7 @@ public function get_strings( $strings ) {
* File: assets/js/builder/Views/QuestionType.js.
*
* @since 3.16.0
- * @version 3.27.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' ),
@@ -251,7 +251,7 @@ public function get_strings( $strings ) {
* File: assets/js/builder/Views/Quiz.js.
*
* @since 3.16.0
- * @version 3.24.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' ),
@@ -268,15 +268,6 @@ public function get_strings( $strings ) {
'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-addons.js.
- *
- * @since 3.22.0
- * @version 3.22.0
- */
- '%d add-ons' => esc_html__( '%d add-ons', 'lifterlms' ),
- '1 add-on' => esc_html__( '1 add-on', 'lifterlms' ),
-
/**
* File: assets/js/llms-admin-settings.js.
*
@@ -415,7 +406,7 @@ public function get_strings( $strings ) {
* File: assets/js/llms-metaboxes.js.
*
* @since 3.0.0
- * @version 4.21.2
+ * @version 5.3.0
*/
'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' ),
@@ -432,7 +423,7 @@ public function get_strings( $strings ) {
* File: assets/js/llms-quiz-attempt-review.js.
*
* @since 3.16.0
- * @version 3.30.3
+ * @version 5.3.0
*/
'Remarks to Student' => esc_html__( 'Remarks to Student', 'lifterlms' ),
'points' => esc_html__( 'points', 'lifterlms' ),
@@ -459,7 +450,7 @@ public function get_strings( $strings ) {
* File: assets/js/llms.js.
*
* @since 1.0.0
- * @version 3.24.3
+ * @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' ),
@@ -477,7 +468,7 @@ public function get_strings( $strings ) {
* File: assets/js/partials/_metabox-field-repeater.js.
*
* @since 3.11.0
- * @version 3.23.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' ),
@@ -485,7 +476,7 @@ public function get_strings( $strings ) {
* File: assets/js/private/llms-metaboxes.js.
*
* @since 3.0.0
- * @version 4.21.2
+ * @version 5.3.0
*/
'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' ),
diff --git a/includes/class.llms.post-types.php b/includes/class.llms.post-types.php
index 82a7ff42ab..c85ec9548b 100644
--- a/includes/class.llms.post-types.php
+++ b/includes/class.llms.post-types.php
@@ -1,11 +1,11 @@
array(
- 'name' => __( 'Engagements', 'lifterlms' ),
- 'singular_name' => __( 'Engagement', 'lifterlms' ),
- 'add_new' => __( 'Add Engagement', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Engagement', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Engagement', 'lifterlms' ),
- 'new_item' => __( 'New Engagement', 'lifterlms' ),
- 'view' => __( 'View Engagement', 'lifterlms' ),
- 'view_item' => __( 'View Engagement', 'lifterlms' ),
- 'search_items' => __( 'Search Engagement', 'lifterlms' ),
- 'not_found' => __( 'No Engagement found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Engagement found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Engagement', 'lifterlms' ),
- 'menu_name' => _x( 'Engagements', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where engagements are stored.', 'lifterlms' ),
- 'public' => false,
- 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_engagements_access', 'manage_lifterlms' ) ) ) ? true : false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => false,
- 'exclude_from_search' => true,
- 'menu_position' => 52,
- 'menu_icon' => 'dashicons-awards',
- 'hierarchical' => false,
- 'show_in_nav_menus' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'supports' => array( 'title' ),
- 'has_archive' => false,
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Engagements', 'lifterlms' ),
+ 'singular_name' => __( 'Engagement', 'lifterlms' ),
+ 'add_new' => __( 'Add Engagement', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Engagement', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Engagement', 'lifterlms' ),
+ 'new_item' => __( 'New Engagement', 'lifterlms' ),
+ 'view' => __( 'View Engagement', 'lifterlms' ),
+ 'view_item' => __( 'View Engagement', 'lifterlms' ),
+ 'search_items' => __( 'Search Engagement', 'lifterlms' ),
+ 'not_found' => __( 'No Engagement found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Engagement found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Engagement', 'lifterlms' ),
+ 'menu_name' => _x( 'Engagements', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where engagements are stored.', 'lifterlms' ),
+ 'public' => false,
+ 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_engagements_access', 'manage_lifterlms' ) ) ) ? true : false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => false,
+ 'exclude_from_search' => true,
+ 'menu_position' => 52,
+ 'menu_icon' => 'dashicons-awards',
+ 'hierarchical' => false,
+ 'show_in_nav_menus' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'supports' => array( 'title' ),
+ 'has_archive' => false,
)
);
// Order.
- register_post_type(
+ self::register_post_type(
'llms_order',
- apply_filters(
- 'lifterlms_register_post_type_order',
- array(
- 'labels' => array(
- 'name' => __( 'Orders', 'lifterlms' ),
- 'singular_name' => __( 'Order', 'lifterlms' ),
- 'add_new' => __( 'Add Order', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Order', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Order', 'lifterlms' ),
- 'new_item' => __( 'New Order', 'lifterlms' ),
- 'view' => __( 'View Order', 'lifterlms' ),
- 'view_item' => __( 'View Order', 'lifterlms' ),
- 'search_items' => __( 'Search Orders', 'lifterlms' ),
- 'not_found' => __( 'No Orders found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Orders found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Orders', 'lifterlms' ),
- 'menu_name' => _x( 'Orders', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where orders are managed', 'lifterlms' ),
- 'public' => false,
- 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_order_access', 'manage_lifterlms' ) ) ) ? true : false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => false,
- 'menu_icon' => 'dashicons-cart',
- 'menu_position' => 52,
- 'exclude_from_search' => true,
- 'hierarchical' => false,
- 'show_in_nav_menus' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'supports' => array( 'title', 'comments', 'custom-fields' ),
- 'has_archive' => false,
- 'capabilities' => array(
- 'create_posts' => 'do_not_allow',
- ),
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Orders', 'lifterlms' ),
+ 'singular_name' => __( 'Order', 'lifterlms' ),
+ 'add_new' => __( 'Add Order', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Order', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Order', 'lifterlms' ),
+ 'new_item' => __( 'New Order', 'lifterlms' ),
+ 'view' => __( 'View Order', 'lifterlms' ),
+ 'view_item' => __( 'View Order', 'lifterlms' ),
+ 'search_items' => __( 'Search Orders', 'lifterlms' ),
+ 'not_found' => __( 'No Orders found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Orders found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Orders', 'lifterlms' ),
+ 'menu_name' => _x( 'Orders', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where orders are managed', 'lifterlms' ),
+ 'public' => false,
+ 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_order_access', 'manage_lifterlms' ) ) ) ? true : false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => false,
+ 'menu_icon' => 'dashicons-cart',
+ 'menu_position' => 52,
+ 'exclude_from_search' => true,
+ 'hierarchical' => false,
+ 'show_in_nav_menus' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'supports' => array( 'title', 'comments', 'custom-fields' ),
+ 'has_archive' => false,
+ 'capabilities' => array(
+ 'create_posts' => 'do_not_allow',
+ ),
)
);
// Transaction.
- register_post_type(
+ self::register_post_type(
'llms_transaction',
- apply_filters(
- 'lifterlms_register_post_type_transaction',
- array(
- 'labels' => array(
- 'name' => __( 'Transactions', 'lifterlms' ),
- 'singular_name' => __( 'Transaction', 'lifterlms' ),
- 'add_new' => __( 'Add Transaction', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Transaction', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Transaction', 'lifterlms' ),
- 'new_item' => __( 'New Transaction', 'lifterlms' ),
- 'view' => __( 'View Transaction', 'lifterlms' ),
- 'view_item' => __( 'View Transaction', 'lifterlms' ),
- 'search_items' => __( 'Search Transactions', 'lifterlms' ),
- 'not_found' => __( 'No Transactions found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Transactions found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Transactions', 'lifterlms' ),
- 'menu_name' => _x( 'Orders', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where single and recurring order transactions are stored', 'lifterlms' ),
- 'public' => false,
- 'show_ui' => false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => false,
- 'exclude_from_search' => true,
- 'show_in_menu' => false,
- 'hierarchical' => false,
- 'show_in_nav_menus' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'supports' => array( '' ),
- 'has_archive' => false,
- 'capabilities' => array(
- 'create_posts' => 'do_not_allow',
- ),
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Transactions', 'lifterlms' ),
+ 'singular_name' => __( 'Transaction', 'lifterlms' ),
+ 'add_new' => __( 'Add Transaction', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Transaction', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Transaction', 'lifterlms' ),
+ 'new_item' => __( 'New Transaction', 'lifterlms' ),
+ 'view' => __( 'View Transaction', 'lifterlms' ),
+ 'view_item' => __( 'View Transaction', 'lifterlms' ),
+ 'search_items' => __( 'Search Transactions', 'lifterlms' ),
+ 'not_found' => __( 'No Transactions found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Transactions found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Transactions', 'lifterlms' ),
+ 'menu_name' => _x( 'Orders', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where single and recurring order transactions are stored', 'lifterlms' ),
+ 'public' => false,
+ 'show_ui' => false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => false,
+ 'exclude_from_search' => true,
+ 'show_in_menu' => false,
+ 'hierarchical' => false,
+ 'show_in_nav_menus' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'supports' => array( '' ),
+ 'has_archive' => false,
+ 'capabilities' => array(
+ 'create_posts' => 'do_not_allow',
+ ),
)
);
// Achievement.
- register_post_type(
+ self::register_post_type(
'llms_achievement',
- apply_filters(
- 'lifterlms_register_post_type_llms_achievement',
- array(
- 'labels' => array(
- 'name' => __( 'Achievements', 'lifterlms' ),
- 'singular_name' => __( 'Achievement', 'lifterlms' ),
- 'add_new' => __( 'Add Achievement', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Achievement', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Achievement', 'lifterlms' ),
- 'new_item' => __( 'New Achievement', 'lifterlms' ),
- 'view' => __( 'View Achievement', 'lifterlms' ),
- 'view_item' => __( 'View Achievement', 'lifterlms' ),
- 'search_items' => __( 'Search Achievement', 'lifterlms' ),
- 'not_found' => __( 'No Achievement found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Achievement found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Achievement', 'lifterlms' ),
- 'menu_name' => _x( 'Achievements', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where achievements are stored.', 'lifterlms' ),
- 'public' => false,
- 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_achievements_access', 'manage_lifterlms' ) ) ) ? true : false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => false,
- 'exclude_from_search' => true,
- 'show_in_menu' => 'edit.php?post_type=llms_engagement',
- 'hierarchical' => false,
- 'show_in_nav_menus' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'supports' => array( 'title' ),
- 'has_archive' => false,
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Achievements', 'lifterlms' ),
+ 'singular_name' => __( 'Achievement', 'lifterlms' ),
+ 'add_new' => __( 'Add Achievement', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Achievement', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Achievement', 'lifterlms' ),
+ 'new_item' => __( 'New Achievement', 'lifterlms' ),
+ 'view' => __( 'View Achievement', 'lifterlms' ),
+ 'view_item' => __( 'View Achievement', 'lifterlms' ),
+ 'search_items' => __( 'Search Achievement', 'lifterlms' ),
+ 'not_found' => __( 'No Achievement found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Achievement found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Achievement', 'lifterlms' ),
+ 'menu_name' => _x( 'Achievements', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where achievements are stored.', 'lifterlms' ),
+ 'public' => false,
+ 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_achievements_access', 'manage_lifterlms' ) ) ) ? true : false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => false,
+ 'exclude_from_search' => true,
+ 'show_in_menu' => 'edit.php?post_type=llms_engagement',
+ 'hierarchical' => false,
+ 'show_in_nav_menus' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'supports' => array( 'title' ),
+ 'has_archive' => false,
)
);
// Certificate.
- register_post_type(
+ self::register_post_type(
'llms_certificate',
- apply_filters(
- 'lifterlms_register_post_type_llms_certificate',
- array(
- 'labels' => array(
- 'name' => __( 'Certificates', 'lifterlms' ),
- 'singular_name' => __( 'Certificate', 'lifterlms' ),
- 'add_new' => __( 'Add Certificate', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Certificate', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Certificate', 'lifterlms' ),
- 'new_item' => __( 'New Certificate', 'lifterlms' ),
- 'view' => __( 'View Certificate', 'lifterlms' ),
- 'view_item' => __( 'View Certificate', 'lifterlms' ),
- 'search_items' => __( 'Search Certificates', 'lifterlms' ),
- 'not_found' => __( 'No Certificates found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Certificates found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Certificates', 'lifterlms' ),
- 'menu_name' => _x( 'Certificates', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where you can view all of the certificates.', 'lifterlms' ),
- 'public' => true,
- 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_certificates_access', 'manage_lifterlms' ) ) ) ? true : false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => ( current_user_can( apply_filters( 'lifterlms_admin_certificates_access', 'manage_lifterlms' ) ) ) ? true : false,
- 'exclude_from_search' => true,
- 'show_in_menu' => 'edit.php?post_type=llms_engagement',
- 'hierarchical' => false,
- 'rewrite' => array(
- 'slug' => untrailingslashit( _x( 'certificate', 'slug', 'lifterlms' ) ),
- 'with_front' => false,
- 'feeds' => true,
- ),
- 'show_in_nav_menus' => false,
- 'query_var' => true,
- 'supports' => array( 'title', 'editor' ),
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Certificates', 'lifterlms' ),
+ 'singular_name' => __( 'Certificate', 'lifterlms' ),
+ 'add_new' => __( 'Add Certificate', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Certificate', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Certificate', 'lifterlms' ),
+ 'new_item' => __( 'New Certificate', 'lifterlms' ),
+ 'view' => __( 'View Certificate', 'lifterlms' ),
+ 'view_item' => __( 'View Certificate', 'lifterlms' ),
+ 'search_items' => __( 'Search Certificates', 'lifterlms' ),
+ 'not_found' => __( 'No Certificates found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Certificates found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Certificates', 'lifterlms' ),
+ 'menu_name' => _x( 'Certificates', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where you can view all of the certificates.', 'lifterlms' ),
+ 'public' => true,
+ 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_certificates_access', 'manage_lifterlms' ) ) ) ? true : false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => ( current_user_can( apply_filters( 'lifterlms_admin_certificates_access', 'manage_lifterlms' ) ) ) ? true : false,
+ 'exclude_from_search' => true,
+ 'show_in_menu' => 'edit.php?post_type=llms_engagement',
+ 'hierarchical' => false,
+ 'rewrite' => array(
+ 'slug' => untrailingslashit( _x( 'certificate', 'slug', 'lifterlms' ) ),
+ 'with_front' => false,
+ 'feeds' => true,
+ ),
+ 'show_in_nav_menus' => false,
+ 'query_var' => true,
+ 'supports' => array( 'title', 'editor' ),
)
);
// Earned certificate.
- register_post_type(
+ self::register_post_type(
'llms_my_certificate',
- apply_filters(
- 'lifterlms_register_post_type_llms_my_certificate',
- array(
- 'labels' => array(
- 'name' => __( 'My Certificates', 'lifterlms' ),
- 'singular_name' => __( 'My Certificate', 'lifterlms' ),
- 'add_new' => __( 'Add My Certificate', 'lifterlms' ),
- 'add_new_item' => __( 'Add New My Certificate', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit My Certificate', 'lifterlms' ),
- 'new_item' => __( 'New My Certificate', 'lifterlms' ),
- 'view' => __( 'View My Certificate', 'lifterlms' ),
- 'view_item' => __( 'View My Certificate', 'lifterlms' ),
- 'search_items' => __( 'Search My Certificates', 'lifterlms' ),
- 'not_found' => __( 'No My Certificates found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No My Certificates found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent My Certificates', 'lifterlms' ),
- 'menu_name' => _x( 'My Certificates', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where you can view all of the certificates.', 'lifterlms' ),
- 'public' => true,
- 'show_ui' => true,
- 'map_meta_cap' => true,
- 'publicly_queryable' => true,
- 'exclude_from_search' => true,
- 'show_in_menu' => false,
- 'hierarchical' => false,
- 'rewrite' => array(
- 'slug' => untrailingslashit( _x( 'my_certificate', 'slug', 'lifterlms' ) ),
- 'with_front' => false,
- 'feeds' => true,
- ),
- 'show_in_nav_menus' => false,
- 'query_var' => true,
- 'supports' => array( 'title', 'editor' ),
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'My Certificates', 'lifterlms' ),
+ 'singular_name' => __( 'My Certificate', 'lifterlms' ),
+ 'add_new' => __( 'Add My Certificate', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New My Certificate', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit My Certificate', 'lifterlms' ),
+ 'new_item' => __( 'New My Certificate', 'lifterlms' ),
+ 'view' => __( 'View My Certificate', 'lifterlms' ),
+ 'view_item' => __( 'View My Certificate', 'lifterlms' ),
+ 'search_items' => __( 'Search My Certificates', 'lifterlms' ),
+ 'not_found' => __( 'No My Certificates found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No My Certificates found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent My Certificates', 'lifterlms' ),
+ 'menu_name' => _x( 'My Certificates', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where you can view all of the certificates.', 'lifterlms' ),
+ 'public' => true,
+ 'show_ui' => true,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => true,
+ 'exclude_from_search' => true,
+ 'show_in_menu' => false,
+ 'hierarchical' => false,
+ 'rewrite' => array(
+ 'slug' => untrailingslashit( _x( 'my_certificate', 'slug', 'lifterlms' ) ),
+ 'with_front' => false,
+ 'feeds' => true,
+ ),
+ 'show_in_nav_menus' => false,
+ 'query_var' => true,
+ 'supports' => array( 'title', 'editor' ),
)
);
// Email.
- register_post_type(
+ self::register_post_type(
'llms_email',
- apply_filters(
- 'lifterlms_register_post_type_llms_email',
- array(
- 'labels' => array(
- 'name' => __( 'Emails', 'lifterlms' ),
- 'singular_name' => __( 'Email', 'lifterlms' ),
- 'add_new' => __( 'Add Email', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Email', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Email', 'lifterlms' ),
- 'new_item' => __( 'New Email', 'lifterlms' ),
- 'view' => __( 'View Email', 'lifterlms' ),
- 'view_item' => __( 'View Email', 'lifterlms' ),
- 'search_items' => __( 'Search Emails', 'lifterlms' ),
- 'not_found' => __( 'No Emails found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Emails found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Emails', 'lifterlms' ),
- 'menu_name' => _x( 'Emails', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where emails are stored.', 'lifterlms' ),
- 'public' => false,
- 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_emails_access', 'manage_lifterlms' ) ) ) ? true : false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => false,
- 'exclude_from_search' => true,
- 'show_in_menu' => 'edit.php?post_type=llms_engagement',
- 'hierarchical' => false,
- 'show_in_nav_menus' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'supports' => array( 'title', 'editor' ),
- 'has_archive' => false,
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Emails', 'lifterlms' ),
+ 'singular_name' => __( 'Email', 'lifterlms' ),
+ 'add_new' => __( 'Add Email', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Email', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Email', 'lifterlms' ),
+ 'new_item' => __( 'New Email', 'lifterlms' ),
+ 'view' => __( 'View Email', 'lifterlms' ),
+ 'view_item' => __( 'View Email', 'lifterlms' ),
+ 'search_items' => __( 'Search Emails', 'lifterlms' ),
+ 'not_found' => __( 'No Emails found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Emails found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Emails', 'lifterlms' ),
+ 'menu_name' => _x( 'Emails', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where emails are stored.', 'lifterlms' ),
+ 'public' => false,
+ 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_emails_access', 'manage_lifterlms' ) ) ) ? true : false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => false,
+ 'exclude_from_search' => true,
+ 'show_in_menu' => 'edit.php?post_type=llms_engagement',
+ 'hierarchical' => false,
+ 'show_in_nav_menus' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'supports' => array( 'title', 'editor' ),
+ 'has_archive' => false,
)
);
// Coupon.
- register_post_type(
+ self::register_post_type(
'llms_coupon',
- apply_filters(
- 'lifterlms_register_post_type_llms_coupon',
- array(
- 'labels' => array(
- 'name' => __( 'Coupons', 'lifterlms' ),
- 'singular_name' => __( 'Coupon', 'lifterlms' ),
- 'add_new' => __( 'Add Coupon', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Coupon', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Coupon', 'lifterlms' ),
- 'new_item' => __( 'New Coupon', 'lifterlms' ),
- 'view' => __( 'View Coupon', 'lifterlms' ),
- 'view_item' => __( 'View Coupon', 'lifterlms' ),
- 'search_items' => __( 'Search Coupon', 'lifterlms' ),
- 'not_found' => __( 'No Coupon found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Coupon found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Coupon', 'lifterlms' ),
- 'menu_name' => _x( 'Coupons', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where coupons are stored.', 'lifterlms' ),
- 'public' => false,
- 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_coupons_access', 'manage_lifterlms' ) ) ) ? true : false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => false,
- 'exclude_from_search' => true,
- 'show_in_menu' => 'edit.php?post_type=llms_order',
- 'hierarchical' => false,
- 'show_in_nav_menus' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'supports' => array( 'title' ),
- 'has_archive' => false,
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Coupons', 'lifterlms' ),
+ 'singular_name' => __( 'Coupon', 'lifterlms' ),
+ 'add_new' => __( 'Add Coupon', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Coupon', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Coupon', 'lifterlms' ),
+ 'new_item' => __( 'New Coupon', 'lifterlms' ),
+ 'view' => __( 'View Coupon', 'lifterlms' ),
+ 'view_item' => __( 'View Coupon', 'lifterlms' ),
+ 'search_items' => __( 'Search Coupon', 'lifterlms' ),
+ 'not_found' => __( 'No Coupon found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Coupon found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Coupon', 'lifterlms' ),
+ 'menu_name' => _x( 'Coupons', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where coupons are stored.', 'lifterlms' ),
+ 'public' => false,
+ 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_coupons_access', 'manage_lifterlms' ) ) ) ? true : false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => false,
+ 'exclude_from_search' => true,
+ 'show_in_menu' => 'edit.php?post_type=llms_order',
+ 'hierarchical' => false,
+ 'show_in_nav_menus' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'supports' => array( 'title' ),
+ 'has_archive' => false,
)
);
// Voucher.
- register_post_type(
+ self::register_post_type(
'llms_voucher',
- apply_filters(
- 'lifterlms_register_post_type_llms_voucher',
- array(
- 'labels' => array(
- 'name' => __( 'Vouchers', 'lifterlms' ),
- 'singular_name' => __( 'Voucher', 'lifterlms' ),
- 'add_new' => __( 'Add Voucher', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Voucher', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Voucher', 'lifterlms' ),
- 'new_item' => __( 'New Voucher', 'lifterlms' ),
- 'view' => __( 'View Voucher', 'lifterlms' ),
- 'view_item' => __( 'View Voucher', 'lifterlms' ),
- 'search_items' => __( 'Search Voucher', 'lifterlms' ),
- 'not_found' => __( 'No Voucher found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Voucher found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Voucher', 'lifterlms' ),
- 'menu_name' => _x( 'Vouchers', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where voucher are stored.', 'lifterlms' ),
- 'public' => false,
- 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_vouchers_access', 'manage_lifterlms' ) ) ) ? true : false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => false,
- 'exclude_from_search' => true,
- 'show_in_menu' => 'edit.php?post_type=llms_order',
- 'hierarchical' => false,
- 'show_in_nav_menus' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'supports' => array( 'title' ),
- 'has_archive' => false,
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Vouchers', 'lifterlms' ),
+ 'singular_name' => __( 'Voucher', 'lifterlms' ),
+ 'add_new' => __( 'Add Voucher', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Voucher', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Voucher', 'lifterlms' ),
+ 'new_item' => __( 'New Voucher', 'lifterlms' ),
+ 'view' => __( 'View Voucher', 'lifterlms' ),
+ 'view_item' => __( 'View Voucher', 'lifterlms' ),
+ 'search_items' => __( 'Search Voucher', 'lifterlms' ),
+ 'not_found' => __( 'No Voucher found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Voucher found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Voucher', 'lifterlms' ),
+ 'menu_name' => _x( 'Vouchers', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where voucher are stored.', 'lifterlms' ),
+ 'public' => false,
+ 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_vouchers_access', 'manage_lifterlms' ) ) ) ? true : false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => false,
+ 'exclude_from_search' => true,
+ 'show_in_menu' => 'edit.php?post_type=llms_order',
+ 'hierarchical' => false,
+ 'show_in_nav_menus' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'supports' => array( 'title' ),
+ 'has_archive' => false,
)
);
// Review.
- register_post_type(
+ self::register_post_type(
'llms_review',
- apply_filters(
- 'lifterlms_register_post_type_review',
- array(
- 'labels' => array(
- 'name' => __( 'Reviews', 'lifterlms' ),
- 'singular_name' => __( 'Review', 'lifterlms' ),
- 'menu_name' => _x( 'Reviews', 'Admin menu name', 'lifterlms' ),
- 'add_new' => __( 'Add Review', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Review', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Review', 'lifterlms' ),
- 'new_item' => __( 'New Review', 'lifterlms' ),
- 'view' => __( 'View Review', 'lifterlms' ),
- 'view_item' => __( 'View Review', 'lifterlms' ),
- 'search_items' => __( 'Search Reviews', 'lifterlms' ),
- 'not_found' => __( 'No Reviews found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Reviews found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Review', 'lifterlms' ),
- ),
- 'description' => __( 'This is where you can add new reviews.', 'lifterlms' ),
- 'public' => false,
- 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_reviews_access', 'manage_lifterlms' ) ) ) ? true : false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => false,
- 'exclude_from_search' => true,
- 'show_in_menu' => 'edit.php?post_type=course',
- 'hierarchical' => false,
- 'show_in_nav_menus' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'has_archive' => false,
- 'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments', 'custom-fields', 'page-attributes' ),
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Reviews', 'lifterlms' ),
+ 'singular_name' => __( 'Review', 'lifterlms' ),
+ 'menu_name' => _x( 'Reviews', 'Admin menu name', 'lifterlms' ),
+ 'add_new' => __( 'Add Review', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Review', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Review', 'lifterlms' ),
+ 'new_item' => __( 'New Review', 'lifterlms' ),
+ 'view' => __( 'View Review', 'lifterlms' ),
+ 'view_item' => __( 'View Review', 'lifterlms' ),
+ 'search_items' => __( 'Search Reviews', 'lifterlms' ),
+ 'not_found' => __( 'No Reviews found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Reviews found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Review', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where you can add new reviews.', 'lifterlms' ),
+ 'public' => false,
+ 'show_ui' => ( current_user_can( apply_filters( 'lifterlms_admin_reviews_access', 'manage_lifterlms' ) ) ) ? true : false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => false,
+ 'exclude_from_search' => true,
+ 'show_in_menu' => 'edit.php?post_type=course',
+ 'hierarchical' => false,
+ 'show_in_nav_menus' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'has_archive' => false,
+ 'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments', 'custom-fields', 'page-attributes' ),
)
);
// Access Plan.
- register_post_type(
+ self::register_post_type(
'llms_access_plan',
- apply_filters(
- 'lifterlms_register_post_type_access_plan',
- array(
- 'labels' => array(
- 'name' => __( 'Access Plans', 'lifterlms' ),
- 'singular_name' => __( 'Access Plan', 'lifterlms' ),
- 'add_new' => __( 'Add Access Plan', 'lifterlms' ),
- 'add_new_item' => __( 'Add New Access Plan', 'lifterlms' ),
- 'edit' => __( 'Edit', 'lifterlms' ),
- 'edit_item' => __( 'Edit Access Plan', 'lifterlms' ),
- 'new_item' => __( 'New Access Plan', 'lifterlms' ),
- 'view' => __( 'View Access Plan', 'lifterlms' ),
- 'view_item' => __( 'View Access Plan', 'lifterlms' ),
- 'search_items' => __( 'Search Access Plans', 'lifterlms' ),
- 'not_found' => __( 'No Access Plans found', 'lifterlms' ),
- 'not_found_in_trash' => __( 'No Access Plans found in trash', 'lifterlms' ),
- 'parent' => __( 'Parent Access Plans', 'lifterlms' ),
- 'menu_name' => _x( 'Access Plans', 'Admin menu name', 'lifterlms' ),
- ),
- 'description' => __( 'This is where access plans are stored.', 'lifterlms' ),
- 'public' => false,
- 'show_ui' => false,
- 'map_meta_cap' => true,
- 'publicly_queryable' => false,
- 'exclude_from_search' => true,
- /**
- * Making this post type hierarchical prevents a conflict
- * with the Redirection plugin (https://wordpress.org/plugins/redirection/)
- * When 301 monitoring is turned on, Redirection creates access plans
- * for each access plan that redirect the course or membership
- * to the site's home page
- *
- * @since 3.0.4
- * @version 3.0.4
- */
- 'hierarchical' => true,
- 'show_in_nav_menus' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'supports' => array( 'title' ),
- 'has_archive' => false,
- )
+ array(
+ 'labels' => array(
+ 'name' => __( 'Access Plans', 'lifterlms' ),
+ 'singular_name' => __( 'Access Plan', 'lifterlms' ),
+ 'add_new' => __( 'Add Access Plan', 'lifterlms' ),
+ 'add_new_item' => __( 'Add New Access Plan', 'lifterlms' ),
+ 'edit' => __( 'Edit', 'lifterlms' ),
+ 'edit_item' => __( 'Edit Access Plan', 'lifterlms' ),
+ 'new_item' => __( 'New Access Plan', 'lifterlms' ),
+ 'view' => __( 'View Access Plan', 'lifterlms' ),
+ 'view_item' => __( 'View Access Plan', 'lifterlms' ),
+ 'search_items' => __( 'Search Access Plans', 'lifterlms' ),
+ 'not_found' => __( 'No Access Plans found', 'lifterlms' ),
+ 'not_found_in_trash' => __( 'No Access Plans found in trash', 'lifterlms' ),
+ 'parent' => __( 'Parent Access Plans', 'lifterlms' ),
+ 'menu_name' => _x( 'Access Plans', 'Admin menu name', 'lifterlms' ),
+ ),
+ 'description' => __( 'This is where access plans are stored.', 'lifterlms' ),
+ 'public' => false,
+ 'show_ui' => false,
+ 'map_meta_cap' => true,
+ 'publicly_queryable' => false,
+ 'exclude_from_search' => true,
+ /**
+ * Making this post type hierarchical prevents a conflict
+ * with the Redirection plugin (https://wordpress.org/plugins/redirection/)
+ * When 301 monitoring is turned on, Redirection creates access plans
+ * for each access plan that redirect the course or membership
+ * to the site's home page.
+ */
+ 'hierarchical' => true,
+ 'show_in_nav_menus' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'supports' => array( 'title' ),
+ 'has_archive' => false,
)
);
diff --git a/includes/controllers/class.llms.controller.certificates.php b/includes/controllers/class.llms.controller.certificates.php
index 2bff92c658..fa07e53779 100644
--- a/includes/controllers/class.llms.controller.certificates.php
+++ b/includes/controllers/class.llms.controller.certificates.php
@@ -5,7 +5,7 @@
* @package LifterLMS/Controllers/Classes
*
* @since 3.18.0
- * @version 4.5.0
+ * @version 5.5.0
*/
defined( 'ABSPATH' ) || exit;
@@ -26,12 +26,13 @@ class LLMS_Controller_Certificates {
*
* @since 3.18.0
* @since 3.37.4 Add filter hook for `lifterlms_register_post_type_llms_certificate`.
+ * @since 5.5.0 Drop usage of deprecated `lifterlms_register_post_type_llms_certificate` in favor of `lifterlms_register_post_type_certificate`.
*
* @return void
*/
public function __construct() {
- add_filter( 'lifterlms_register_post_type_llms_certificate', array( $this, 'maybe_allow_public_query' ) );
+ add_filter( 'lifterlms_register_post_type_certificate', array( $this, 'maybe_allow_public_query' ) );
add_action( 'init', array( $this, 'maybe_handle_reporting_actions' ) );
add_action( 'wp', array( $this, 'maybe_authenticate_export_generation' ) );
diff --git a/includes/models/model.llms.membership.php b/includes/models/model.llms.membership.php
index 535882ee30..633460f5e7 100644
--- a/includes/models/model.llms.membership.php
+++ b/includes/models/model.llms.membership.php
@@ -43,13 +43,13 @@ class LLMS_Membership extends LLMS_Post_Model implements LLMS_Interface_Post_Ins
* @var array
*/
protected $properties = array(
- 'auto_enroll' => 'array',
- 'instructors' => 'array',
- 'redirect_page_id' => 'absint',
- 'restriction_add_notice' => 'yesno',
- 'restriction_notice' => 'html',
- 'restriction_redirect_type' => 'text',
- 'redirect_custom_url' => 'text',
+ 'auto_enroll' => 'array',
+ 'instructors' => 'array',
+ 'redirect_page_id' => 'absint',
+ 'restriction_add_notice' => 'yesno',
+ 'restriction_notice' => 'html',
+ 'restriction_redirect_type' => 'text',
+ 'redirect_custom_url' => 'text',
);
/**
diff --git a/includes/traits/llms-trait-singleton.php b/includes/traits/llms-trait-singleton.php
index 867747f6c4..68ce5ff557 100644
--- a/includes/traits/llms-trait-singleton.php
+++ b/includes/traits/llms-trait-singleton.php
@@ -39,7 +39,7 @@ public static function instance() {
if ( is_null( self::$_instance ) ) {
- self::$instance = new self();
+ self::$instance = new self();
self::$_instance = self::$instance;
} else {
self::$instance = self::$_instance;
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
index dd25f4bed0..973d5e6462 100644
--- a/languages/lifterlms.pot
+++ b/languages/lifterlms.pot
@@ -2,16 +2,16 @@
# This file is distributed under the GPLv3.
msgid ""
msgstr ""
-"Project-Id-Version: LifterLMS 5.4.1\n"
+"Project-Id-Version: LifterLMS 5.5.0\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: 2021-10-26T16:18:07-06:00\n"
+"POT-Creation-Date: 2021-11-05T14:22:32-06:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"X-Generator: llms-dev 1.0.0\n"
+"X-Generator: llms/dev 0.0.1\n"
"X-Domain: lifterlms\n"
#. Plugin Name of the plugin
@@ -144,7 +144,7 @@ msgstr ""
#: includes/admin/post-types/post-tables/class.llms.admin.post.table.coupons.php:47
#: includes/admin/views/builder/question.php:66
#: includes/class.llms.l10n.js.php:163
-#: includes/class.llms.l10n.js.php:328
+#: includes/class.llms.l10n.js.php:319
#: 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
@@ -286,7 +286,7 @@ msgstr ""
#: includes/admin/reporting/tables/llms.table.course.students.php:416
#: includes/admin/reporting/tables/llms.table.membership.students.php:404
#: includes/admin/reporting/tables/llms.table.students.php:597
-#: includes/class.llms.post-types.php:847
+#: includes/class.llms.post-types.php:843
#: 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
@@ -333,7 +333,7 @@ msgstr ""
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:177
#: includes/admin/reporting/tables/llms.table.student.course.php:266
#: includes/admin/views/builder/editor.php:28
-#: includes/class.llms.post-types.php:477
+#: includes/class.llms.post-types.php:493
#: includes/functions/llms.functions.templates.dashboard.php:624
#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:75
msgid "Quiz"
@@ -342,7 +342,7 @@ msgstr ""
#: includes/abstracts/llms.abstract.notification.view.quiz.completion.php:55
#: includes/admin/reporting/tables/llms.table.quizzes.php:446
#: includes/admin/views/builder/editor.php:20
-#: includes/class.llms.post-types.php:437
+#: includes/class.llms.post-types.php:453
#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:76
msgid "Lesson"
msgstr ""
@@ -352,7 +352,7 @@ msgstr ""
#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:53
#: includes/admin/reporting/tables/llms.table.quizzes.php:441
#: includes/admin/views/builder/editor.php:16
-#: includes/class.llms.post-types.php:360
+#: includes/class.llms.post-types.php:376
#: includes/notifications/views/class.llms.notification.view.quiz.graded.php:77
#: templates/myaccount/my-grades.php:19
#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:3
@@ -517,7 +517,7 @@ msgstr ""
#: includes/admin/reporting/tables/llms.table.courses.php:181
#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:118
#: includes/admin/settings/class.llms.settings.courses.php:32
-#: includes/class.llms.post-types.php:359
+#: includes/class.llms.post-types.php:375
#: includes/integrations/class.llms.integration.buddypress.php:69
#: includes/integrations/class.llms.integration.buddypress.php:84
#: templates/admin/analytics/analytics.php:97
@@ -536,7 +536,7 @@ msgstr ""
#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:119
#: includes/admin/settings/class.llms.settings.memberships.php:32
#: includes/admin/views/access-plans/access-plan.php:276
-#: includes/class.llms.post-types.php:553
+#: includes/class.llms.post-types.php:569
#: includes/integrations/class.llms.integration.buddypress.php:95
#: templates/admin/analytics/analytics.php:109
#: templates/admin/reporting/nav-filters.php:91
@@ -717,8 +717,8 @@ msgstr ""
#: includes/admin/class.llms.admin.builder.php:1016
#: includes/admin/views/builder/elements.php:22
#: includes/class.llms.l10n.js.php:94
-#: includes/class.llms.l10n.js.php:360
-#: includes/class.llms.post-types.php:442
+#: includes/class.llms.l10n.js.php:351
+#: includes/class.llms.post-types.php:458
#: includes/models/model.llms.lesson.php:412
msgid "New Lesson"
msgstr ""
@@ -814,12 +814,12 @@ msgid "Authors"
msgstr ""
#: includes/admin/class.llms.admin.import.php:393
-#: includes/class.llms.post-types.php:401
+#: includes/class.llms.post-types.php:417
msgid "Sections"
msgstr ""
#: includes/admin/class.llms.admin.import.php:397
-#: includes/class.llms.post-types.php:436
+#: includes/class.llms.post-types.php:452
msgid "Lessons"
msgstr ""
@@ -830,13 +830,13 @@ msgstr ""
#: includes/admin/class.llms.admin.import.php:405
#: includes/admin/reporting/class.llms.admin.reporting.php:293
#: includes/admin/reporting/tables/llms.table.quizzes.php:304
-#: includes/class.llms.post-types.php:476
+#: includes/class.llms.post-types.php:492
#: templates/admin/reporting/tabs/quizzes/quiz.php:20
msgid "Quizzes"
msgstr ""
#: includes/admin/class.llms.admin.import.php:409
-#: includes/class.llms.post-types.php:516
+#: includes/class.llms.post-types.php:532
msgid "Questions"
msgstr ""
@@ -1076,7 +1076,7 @@ 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:963
+#: includes/class.llms.post-types.php:950
msgid "Reviews"
msgstr ""
@@ -1099,7 +1099,7 @@ msgstr ""
#: includes/admin/class.llms.admin.settings.php:705
#: includes/class.llms.l10n.js.php:147
-#: includes/class.llms.l10n.js.php:352
+#: includes/class.llms.l10n.js.php:343
#: libraries/lifterlms-rest/includes/models/class-llms-rest-api-key.php:128
msgid "None"
msgstr ""
@@ -1144,7 +1144,7 @@ msgid "Payments"
msgstr ""
#: includes/admin/class.llms.admin.setup.wizard.php:290
-#: includes/class.llms.post-types.php:886
+#: includes/class.llms.post-types.php:879
msgid "Coupon"
msgstr ""
@@ -1329,7 +1329,7 @@ msgstr ""
#: includes/admin/post-types/class.llms.post.tables.php:62
#: includes/class-llms-generator-courses.php:677
#: includes/class.llms.l10n.js.php:230
-#: includes/class.llms.l10n.js.php:378
+#: includes/class.llms.l10n.js.php:369
msgid "Clone"
msgstr ""
@@ -1425,7 +1425,7 @@ msgstr ""
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:63
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:69
-#: includes/class.llms.ajax.handler.php:887
+#: includes/class.llms.ajax.handler.php:889
#: includes/llms.functions.core.php:911
msgid "ID#"
msgstr ""
@@ -1512,7 +1512,7 @@ msgstr ""
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.coupon.php:181
#: 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:554
+#: includes/class.llms.post-types.php:570
msgid "Membership"
msgstr ""
@@ -1564,7 +1564,7 @@ msgstr ""
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.course.builder.php:177
#: includes/class.llms.l10n.js.php:97
-#: includes/class.llms.l10n.js.php:363
+#: includes/class.llms.l10n.js.php:354
#: templates/myaccount/my-grades-single-table.php:17
msgid "Section %1$d: %2$s"
msgstr ""
@@ -1986,7 +1986,7 @@ msgstr ""
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:56
#: includes/class.llms.l10n.js.php:148
-#: includes/class.llms.l10n.js.php:353
+#: includes/class.llms.l10n.js.php:344
msgid "On a specific date"
msgstr ""
@@ -2017,7 +2017,7 @@ msgstr ""
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.lesson.php:100
#: includes/admin/views/builder/lesson.php:129
#: includes/class.llms.l10n.js.php:139
-#: includes/class.llms.l10n.js.php:344
+#: includes/class.llms.l10n.js.php:335
msgid "Free Lesson"
msgstr ""
@@ -2084,14 +2084,14 @@ 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:423
-#: includes/class.llms.l10n.js.php:492
+#: includes/class.llms.l10n.js.php:414
+#: includes/class.llms.l10n.js.php:483
msgid "Remove course"
msgstr ""
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.membership.php:74
-#: includes/class.llms.l10n.js.php:424
-#: includes/class.llms.l10n.js.php:493
+#: includes/class.llms.l10n.js.php:415
+#: includes/class.llms.l10n.js.php:484
msgid "Enroll All Members"
msgstr ""
@@ -2283,7 +2283,7 @@ 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:681
+#: includes/class.llms.post-types.php:689
#: includes/privacy/class-llms-privacy-exporters.php:274
msgid "Transactions"
msgstr ""
@@ -2307,7 +2307,7 @@ 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:1002
+#: includes/class.llms.post-types.php:986
msgid "Access Plans"
msgstr ""
@@ -2324,23 +2324,23 @@ msgid "Catalog visibility:"
msgstr ""
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.visibility.php:63
-#: includes/class.llms.post-types.php:364
-#: includes/class.llms.post-types.php:405
-#: includes/class.llms.post-types.php:440
-#: includes/class.llms.post-types.php:480
-#: includes/class.llms.post-types.php:520
-#: includes/class.llms.post-types.php:558
-#: includes/class.llms.post-types.php:602
-#: includes/class.llms.post-types.php:642
-#: includes/class.llms.post-types.php:685
-#: includes/class.llms.post-types.php:727
-#: includes/class.llms.post-types.php:766
-#: includes/class.llms.post-types.php:808
-#: includes/class.llms.post-types.php:850
-#: includes/class.llms.post-types.php:889
-#: includes/class.llms.post-types.php:928
-#: includes/class.llms.post-types.php:968
-#: includes/class.llms.post-types.php:1006
+#: includes/class.llms.post-types.php:380
+#: includes/class.llms.post-types.php:421
+#: includes/class.llms.post-types.php:456
+#: includes/class.llms.post-types.php:496
+#: includes/class.llms.post-types.php:536
+#: includes/class.llms.post-types.php:574
+#: includes/class.llms.post-types.php:616
+#: includes/class.llms.post-types.php:653
+#: includes/class.llms.post-types.php:693
+#: includes/class.llms.post-types.php:732
+#: includes/class.llms.post-types.php:768
+#: includes/class.llms.post-types.php:807
+#: includes/class.llms.post-types.php:846
+#: includes/class.llms.post-types.php:882
+#: includes/class.llms.post-types.php:918
+#: includes/class.llms.post-types.php:955
+#: includes/class.llms.post-types.php:990
#: includes/forms/class-llms-form-post-type.php:234
#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
msgid "Edit"
@@ -2355,8 +2355,8 @@ msgid "OK"
msgstr ""
#: includes/admin/post-types/meta-boxes/class.llms.meta.box.visibility.php:74
-#: includes/class.llms.l10n.js.php:425
-#: includes/class.llms.l10n.js.php:494
+#: includes/class.llms.l10n.js.php:416
+#: includes/class.llms.l10n.js.php:485
msgid "Cancel"
msgstr ""
@@ -2432,8 +2432,8 @@ msgstr ""
#: includes/admin/post-types/post-tables/class-llms-admin-post-table-forms.php:119
#: includes/admin/reporting/tables/llms.table.certificates.php:47
-#: includes/class.llms.l10n.js.php:429
-#: includes/class.llms.l10n.js.php:498
+#: includes/class.llms.l10n.js.php:420
+#: includes/class.llms.l10n.js.php:489
#: templates/myaccount/my-orders.php:53
msgid "View"
msgstr ""
@@ -2498,21 +2498,21 @@ msgstr[1] ""
#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:54
#: includes/admin/views/builder/elements.php:16
-#: includes/class.llms.post-types.php:402
+#: includes/class.llms.post-types.php:418
msgid "Section"
msgstr ""
#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:55
#: includes/class.llms.l10n.js.php:145
-#: includes/class.llms.l10n.js.php:350
+#: includes/class.llms.l10n.js.php:341
msgid "Prerequisite"
msgstr ""
#: includes/admin/post-types/post-tables/class.llms.admin.post.table.lessons.php:57
#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:58
#: includes/class.llms.l10n.js.php:153
-#: includes/class.llms.l10n.js.php:317
-#: includes/class.llms.l10n.js.php:358
+#: includes/class.llms.l10n.js.php:308
+#: includes/class.llms.l10n.js.php:349
#: 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
@@ -2522,7 +2522,7 @@ msgid "Date"
msgstr ""
#: includes/admin/post-types/post-tables/class.llms.admin.post.table.orders.php:52
-#: includes/class.llms.post-types.php:639
+#: includes/class.llms.post-types.php:650
#: templates/myaccount/my-orders.php:23
#: templates/myaccount/my-orders.php:33
msgid "Order"
@@ -2654,7 +2654,7 @@ msgstr ""
#: includes/admin/reporting/tables/llms.table.student.memberships.php:128
#: includes/admin/reporting/tables/llms.table.students.php:592
#: includes/class.llms.l10n.js.php:231
-#: includes/class.llms.l10n.js.php:379
+#: includes/class.llms.l10n.js.php:370
#: templates/admin/post-types/order-transactions.php:26
msgid "ID"
msgstr ""
@@ -2935,7 +2935,7 @@ msgstr ""
#: includes/admin/reporting/tables/llms.table.students.php:643
#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:121
-#: includes/class.llms.post-types.php:762
+#: includes/class.llms.post-types.php:764
#: includes/integrations/class.llms.integration.buddypress.php:117
#: includes/privacy/class-llms-privacy-exporters.php:85
msgid "Certificates"
@@ -2943,7 +2943,7 @@ msgstr ""
#: includes/admin/reporting/tables/llms.table.students.php:647
#: includes/admin/reporting/tabs/class.llms.admin.reporting.tab.students.php:120
-#: includes/class.llms.post-types.php:723
+#: includes/class.llms.post-types.php:728
#: includes/integrations/class.llms.integration.buddypress.php:106
#: includes/privacy/class-llms-privacy-exporters.php:44
msgid "Achievements"
@@ -3598,7 +3598,7 @@ msgid "Catalog Sorting"
msgstr ""
#: includes/admin/settings/class.llms.settings.engagements.php:40
-#: includes/class.llms.post-types.php:598
+#: includes/class.llms.post-types.php:612
msgid "Engagements"
msgstr ""
@@ -3709,7 +3709,7 @@ msgstr ""
#: includes/admin/settings/class.llms.settings.general.php:123
#: includes/class.llms.l10n.js.php:136
#: includes/class.llms.l10n.js.php:162
-#: includes/class.llms.l10n.js.php:327
+#: includes/class.llms.l10n.js.php:318
msgid "General Settings"
msgstr ""
@@ -3941,7 +3941,7 @@ msgid "Purchase Link"
msgstr ""
#: includes/admin/views/access-plans/access-plan.php:55
-#: includes/class.llms.post-types.php:1008
+#: includes/class.llms.post-types.php:992
msgid "New Access Plan"
msgstr ""
@@ -4243,7 +4243,7 @@ msgstr ""
#: includes/admin/views/builder/assignment.php:26
#: includes/class.llms.l10n.js.php:207
-#: includes/class.llms.l10n.js.php:388
+#: includes/class.llms.l10n.js.php:379
msgid "Add Existing Assignment"
msgstr ""
@@ -4436,7 +4436,7 @@ msgid "Delete question"
msgstr ""
#: includes/admin/views/builder/question.php:51
-#: includes/class.llms.l10n.js.php:438
+#: includes/class.llms.l10n.js.php:429
msgid "points"
msgstr ""
@@ -4446,7 +4446,7 @@ msgstr ""
#: includes/admin/views/builder/question.php:120
#: includes/class.llms.l10n.js.php:269
-#: includes/class.llms.l10n.js.php:375
+#: includes/class.llms.l10n.js.php:366
msgid "Use YouTube, Vimeo, or Wistia video URLS."
msgstr ""
@@ -4480,7 +4480,7 @@ msgstr ""
#: includes/admin/views/builder/quiz.php:25
#: includes/class.llms.l10n.js.php:257
-#: includes/class.llms.l10n.js.php:384
+#: includes/class.llms.l10n.js.php:375
msgid "Add Existing Quiz"
msgstr ""
@@ -4513,7 +4513,7 @@ msgid "Expand All"
msgstr ""
#: includes/admin/views/builder/quiz.php:88
-#: includes/class.llms.post-types.php:518
+#: includes/class.llms.post-types.php:534
msgid "Add Question"
msgstr ""
@@ -5038,7 +5038,7 @@ msgstr ""
#: includes/class.llms.ajax.handler.php:50
#: includes/class.llms.ajax.handler.php:73
#: includes/class.llms.ajax.handler.php:206
-#: includes/class.llms.ajax.handler.php:935
+#: includes/class.llms.ajax.handler.php:937
msgid "Missing required parameters"
msgstr ""
@@ -5058,58 +5058,58 @@ msgstr ""
msgid "There was an error removing the course, please try again."
msgstr ""
-#: includes/class.llms.ajax.handler.php:567
-#: includes/class.llms.ajax.handler.php:630
-#: includes/class.llms.ajax.handler.php:700
+#: includes/class.llms.ajax.handler.php:568
+#: includes/class.llms.ajax.handler.php:631
+#: includes/class.llms.ajax.handler.php:701
#: includes/class.llms.template.loader.php:392
msgid "You must be logged in to take quizzes."
msgstr ""
-#: includes/class.llms.ajax.handler.php:579
+#: includes/class.llms.ajax.handler.php:580
msgid "There was an error starting the quiz. Please return to the lesson and begin again."
msgstr ""
-#: includes/class.llms.ajax.handler.php:589
+#: includes/class.llms.ajax.handler.php:590
msgid "Unable to start quiz because the quiz does not contain any questions."
msgstr ""
-#: includes/class.llms.ajax.handler.php:637
-#: includes/class.llms.ajax.handler.php:705
+#: includes/class.llms.ajax.handler.php:638
+#: includes/class.llms.ajax.handler.php:706
msgid "Missing required parameters. Could not proceed."
msgstr ""
-#: includes/class.llms.ajax.handler.php:648
+#: includes/class.llms.ajax.handler.php:649
msgid "There was an error recording your answer the quiz. Please return to the lesson and begin again."
msgstr ""
-#: includes/class.llms.ajax.handler.php:939
+#: includes/class.llms.ajax.handler.php:941
msgid "Invalid status"
msgstr ""
#. Translators: %s = action add|remove|delete.
-#: includes/class.llms.ajax.handler.php:961
+#: includes/class.llms.ajax.handler.php:963
msgid "Action \"%1$s\" failed. Please try again"
msgstr ""
-#: includes/class.llms.ajax.handler.php:989
+#: includes/class.llms.ajax.handler.php:991
msgid "Please enter a coupon code."
msgstr ""
-#: includes/class.llms.ajax.handler.php:993
+#: includes/class.llms.ajax.handler.php:995
msgid "Please enter a plan ID."
msgstr ""
#. Translators: %s = coupon code.
-#: includes/class.llms.ajax.handler.php:1002
+#: includes/class.llms.ajax.handler.php:1004
#: includes/functions/llms.functions.order.php:278
msgid "Coupon code \"%s\" not found."
msgstr ""
-#: includes/class.llms.ajax.handler.php:1378
+#: includes/class.llms.ajax.handler.php:1380
msgid "Missing Required Parameters."
msgstr ""
-#: includes/class.llms.ajax.handler.php:1432
+#: includes/class.llms.ajax.handler.php:1434
msgid "Missing tracking data."
msgstr ""
@@ -5253,491 +5253,483 @@ msgid "You are not allowed to perform the requested action."
msgstr ""
#: includes/class.llms.l10n.js.php:48
-#: includes/class.llms.l10n.js.php:464
+#: includes/class.llms.l10n.js.php:455
msgid "This is a %2$s %1$s String"
msgstr ""
#: includes/class.llms.l10n.js.php:56
-#: includes/class.llms.l10n.js.php:465
+#: includes/class.llms.l10n.js.php:456
#: includes/functions/llms.functions.access.php:196
msgid "You do not have permission to access this content"
msgstr ""
#: includes/class.llms.l10n.js.php:64
-#: includes/class.llms.l10n.js.php:466
+#: includes/class.llms.l10n.js.php:457
msgid "There is an issue with your chosen password."
msgstr ""
#: includes/class.llms.l10n.js.php:65
-#: includes/class.llms.l10n.js.php:467
+#: includes/class.llms.l10n.js.php:458
msgid "Too Short"
msgstr ""
#: includes/class.llms.l10n.js.php:66
-#: includes/class.llms.l10n.js.php:468
+#: includes/class.llms.l10n.js.php:459
#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
msgid "Very Weak"
msgstr ""
#: includes/class.llms.l10n.js.php:67
-#: includes/class.llms.l10n.js.php:469
+#: includes/class.llms.l10n.js.php:460
#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
msgid "Weak"
msgstr ""
#: includes/class.llms.l10n.js.php:68
-#: includes/class.llms.l10n.js.php:470
+#: includes/class.llms.l10n.js.php:461
#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
msgid "Medium"
msgstr ""
#: includes/class.llms.l10n.js.php:69
-#: includes/class.llms.l10n.js.php:471
+#: includes/class.llms.l10n.js.php:462
#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:22
msgid "Strong"
msgstr ""
#: includes/class.llms.l10n.js.php:70
-#: includes/class.llms.l10n.js.php:472
+#: includes/class.llms.l10n.js.php:463
msgid "Mismatch"
msgstr ""
#: includes/class.llms.l10n.js.php:78
-#: includes/class.llms.l10n.js.php:473
+#: includes/class.llms.l10n.js.php:464
msgid "Members Only Pricing"
msgstr ""
#: includes/class.llms.l10n.js.php:86
-#: includes/class.llms.l10n.js.php:474
+#: includes/class.llms.l10n.js.php:465
msgid "Are you sure you want to cancel your subscription?"
msgstr ""
#: includes/class.llms.l10n.js.php:95
-#: includes/class.llms.l10n.js.php:361
+#: includes/class.llms.l10n.js.php:352
msgid "lessons"
msgstr ""
#: includes/class.llms.l10n.js.php:96
-#: includes/class.llms.l10n.js.php:362
+#: includes/class.llms.l10n.js.php:353
msgid "lesson"
msgstr ""
#: includes/class.llms.l10n.js.php:98
-#: includes/class.llms.l10n.js.php:364
+#: includes/class.llms.l10n.js.php:355
#: templates/myaccount/my-grades-single-table.php:35
msgid "Lesson %1$d: %2$s"
msgstr ""
#: includes/class.llms.l10n.js.php:99
-#: includes/class.llms.l10n.js.php:365
+#: includes/class.llms.l10n.js.php:356
msgid "%1$s Quiz"
msgstr ""
#: includes/class.llms.l10n.js.php:107
-#: includes/class.llms.l10n.js.php:325
+#: includes/class.llms.l10n.js.php:316
msgid "questions"
msgstr ""
#: includes/class.llms.l10n.js.php:108
-#: includes/class.llms.l10n.js.php:326
+#: includes/class.llms.l10n.js.php:317
msgid "question"
msgstr ""
#: includes/class.llms.l10n.js.php:116
-#: includes/class.llms.l10n.js.php:339
-#: includes/class.llms.post-types.php:482
+#: includes/class.llms.l10n.js.php:330
+#: includes/class.llms.post-types.php:498
msgid "New Quiz"
msgstr ""
#: includes/class.llms.l10n.js.php:117
-#: includes/class.llms.l10n.js.php:340
+#: includes/class.llms.l10n.js.php:331
msgid "quizzes"
msgstr ""
#: includes/class.llms.l10n.js.php:118
-#: includes/class.llms.l10n.js.php:341
+#: includes/class.llms.l10n.js.php:332
#: includes/models/model.llms.user.postmeta.php:104
msgid "quiz"
msgstr ""
#: includes/class.llms.l10n.js.php:126
-#: includes/class.llms.l10n.js.php:366
-#: includes/class.llms.post-types.php:407
+#: includes/class.llms.l10n.js.php:357
+#: includes/class.llms.post-types.php:423
msgid "New Section"
msgstr ""
#: includes/class.llms.l10n.js.php:127
-#: includes/class.llms.l10n.js.php:367
+#: includes/class.llms.l10n.js.php:358
msgid "sections"
msgstr ""
#: includes/class.llms.l10n.js.php:128
-#: includes/class.llms.l10n.js.php:368
+#: includes/class.llms.l10n.js.php:359
msgid "section"
msgstr ""
#: includes/class.llms.l10n.js.php:137
-#: includes/class.llms.l10n.js.php:342
+#: includes/class.llms.l10n.js.php:333
msgid "Video Embed URL"
msgstr ""
#: includes/class.llms.l10n.js.php:138
-#: includes/class.llms.l10n.js.php:343
+#: includes/class.llms.l10n.js.php:334
msgid "Audio Embed URL"
msgstr ""
#: includes/class.llms.l10n.js.php:140
-#: includes/class.llms.l10n.js.php:345
+#: includes/class.llms.l10n.js.php:336
msgid "Require Passing Grade on Quiz"
msgstr ""
#: includes/class.llms.l10n.js.php:141
-#: includes/class.llms.l10n.js.php:346
+#: includes/class.llms.l10n.js.php:337
msgid "Require Passing Grade on Assignment"
msgstr ""
#: includes/class.llms.l10n.js.php:142
-#: includes/class.llms.l10n.js.php:347
+#: includes/class.llms.l10n.js.php:338
msgid "Lesson Weight"
msgstr ""
#: includes/class.llms.l10n.js.php:143
-#: includes/class.llms.l10n.js.php:348
+#: includes/class.llms.l10n.js.php:339
msgid "POINTS"
msgstr ""
#: includes/class.llms.l10n.js.php:144
-#: includes/class.llms.l10n.js.php:349
+#: includes/class.llms.l10n.js.php:340
msgid "Determines the weight of the lesson when calculating the overall grade of the course."
msgstr ""
#: includes/class.llms.l10n.js.php:146
-#: includes/class.llms.l10n.js.php:351
+#: includes/class.llms.l10n.js.php:342
msgid "Drip Method"
msgstr ""
#: includes/class.llms.l10n.js.php:149
-#: includes/class.llms.l10n.js.php:354
+#: includes/class.llms.l10n.js.php:345
msgid "# of days after course enrollment"
msgstr ""
#: includes/class.llms.l10n.js.php:150
-#: includes/class.llms.l10n.js.php:355
+#: includes/class.llms.l10n.js.php:346
msgid "# of days after course start date"
msgstr ""
#: includes/class.llms.l10n.js.php:151
-#: includes/class.llms.l10n.js.php:356
+#: includes/class.llms.l10n.js.php:347
msgid "# of days after prerequisite lesson completion"
msgstr ""
#: includes/class.llms.l10n.js.php:152
-#: includes/class.llms.l10n.js.php:357
+#: includes/class.llms.l10n.js.php:348
msgid "# of days"
msgstr ""
#: includes/class.llms.l10n.js.php:154
-#: includes/class.llms.l10n.js.php:359
+#: includes/class.llms.l10n.js.php:350
msgid "Time"
msgstr ""
#: includes/class.llms.l10n.js.php:164
-#: includes/class.llms.l10n.js.php:329
+#: includes/class.llms.l10n.js.php:320
msgid "Passing Percentage"
msgstr ""
#: includes/class.llms.l10n.js.php:165
-#: includes/class.llms.l10n.js.php:330
+#: includes/class.llms.l10n.js.php:321
msgid "Minimum percentage of total points required to pass the quiz"
msgstr ""
#: includes/class.llms.l10n.js.php:166
-#: includes/class.llms.l10n.js.php:331
+#: includes/class.llms.l10n.js.php:322
msgid "Limit Attempts"
msgstr ""
#: includes/class.llms.l10n.js.php:167
-#: includes/class.llms.l10n.js.php:332
+#: includes/class.llms.l10n.js.php:323
msgid "Limit the maximum number of times a student can take this quiz"
msgstr ""
#: includes/class.llms.l10n.js.php:168
-#: includes/class.llms.l10n.js.php:333
+#: includes/class.llms.l10n.js.php:324
msgid "Time Limit"
msgstr ""
#: includes/class.llms.l10n.js.php:169
-#: includes/class.llms.l10n.js.php:334
+#: includes/class.llms.l10n.js.php:325
msgid "Enforce a maximum number of minutes a student can spend on each attempt"
msgstr ""
#: includes/class.llms.l10n.js.php:170
-#: includes/class.llms.l10n.js.php:335
+#: includes/class.llms.l10n.js.php:326
msgid "Show Correct Answers"
msgstr ""
#: includes/class.llms.l10n.js.php:171
-#: includes/class.llms.l10n.js.php:336
+#: includes/class.llms.l10n.js.php:327
msgid "When enabled, students will be shown the correct answer to any question they answered incorrectly."
msgstr ""
#: includes/class.llms.l10n.js.php:172
-#: includes/class.llms.l10n.js.php:337
+#: includes/class.llms.l10n.js.php:328
msgid "Randomize Question Order"
msgstr ""
#: includes/class.llms.l10n.js.php:173
-#: includes/class.llms.l10n.js.php:338
+#: includes/class.llms.l10n.js.php:329
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:369
+#: includes/class.llms.l10n.js.php:360
msgid "Are you sure you want to detach this %s?"
msgstr ""
#: includes/class.llms.l10n.js.php:189
-#: includes/class.llms.l10n.js.php:370
+#: includes/class.llms.l10n.js.php:361
msgid "Select an image"
msgstr ""
#: includes/class.llms.l10n.js.php:190
-#: includes/class.llms.l10n.js.php:371
+#: includes/class.llms.l10n.js.php:362
msgid "Use this image"
msgstr ""
#: includes/class.llms.l10n.js.php:198
-#: includes/class.llms.l10n.js.php:372
+#: includes/class.llms.l10n.js.php:363
msgid "Are you sure you want to move this %s to the trash?"
msgstr ""
#: includes/class.llms.l10n.js.php:206
-#: includes/class.llms.l10n.js.php:387
+#: includes/class.llms.l10n.js.php:378
msgid "%1$s Assignment"
msgstr ""
#: includes/class.llms.l10n.js.php:208
-#: includes/class.llms.l10n.js.php:389
+#: includes/class.llms.l10n.js.php:380
msgid "Search for existing assignments..."
msgstr ""
#: includes/class.llms.l10n.js.php:209
-#: includes/class.llms.l10n.js.php:390
+#: includes/class.llms.l10n.js.php:381
msgid "Get Your Students Taking Action"
msgstr ""
#: includes/class.llms.l10n.js.php:210
-#: includes/class.llms.l10n.js.php:391
+#: includes/class.llms.l10n.js.php:382
msgid "Get Assignments Now!"
msgstr ""
#: includes/class.llms.l10n.js.php:211
-#: includes/class.llms.l10n.js.php:392
+#: includes/class.llms.l10n.js.php:383
msgid "Unlock LifterLMS Assignments"
msgstr ""
#: includes/class.llms.l10n.js.php:219
-#: includes/class.llms.l10n.js.php:393
+#: includes/class.llms.l10n.js.php:384
msgid "Add Existing Lesson"
msgstr ""
#: includes/class.llms.l10n.js.php:220
-#: includes/class.llms.l10n.js.php:394
+#: includes/class.llms.l10n.js.php:385
msgid "Search for existing lessons..."
msgstr ""
#: includes/class.llms.l10n.js.php:228
-#: includes/class.llms.l10n.js.php:376
+#: includes/class.llms.l10n.js.php:367
msgid "Searching..."
msgstr ""
#: includes/class.llms.l10n.js.php:229
-#: includes/class.llms.l10n.js.php:377
+#: includes/class.llms.l10n.js.php:368
msgid "Attach"
msgstr ""
#: includes/class.llms.l10n.js.php:239
-#: includes/class.llms.l10n.js.php:382
+#: includes/class.llms.l10n.js.php:373
msgid "Are you sure you want to delete this question?"
msgstr ""
#: includes/class.llms.l10n.js.php:247
-#: includes/class.llms.l10n.js.php:380
+#: includes/class.llms.l10n.js.php:371
#: includes/class.llms.question.types.php:157
msgid "Add Existing Question"
msgstr ""
#: includes/class.llms.l10n.js.php:248
-#: includes/class.llms.l10n.js.php:381
+#: includes/class.llms.l10n.js.php:372
msgid "Search for existing questions..."
msgstr ""
#: includes/class.llms.l10n.js.php:256
-#: includes/class.llms.l10n.js.php:383
+#: includes/class.llms.l10n.js.php:374
msgid "An error occurred while trying to load the questions. Please refresh the page and try again."
msgstr ""
#: includes/class.llms.l10n.js.php:258
-#: includes/class.llms.l10n.js.php:385
+#: includes/class.llms.l10n.js.php:376
msgid "Search for existing quizzes..."
msgstr ""
#: includes/class.llms.l10n.js.php:259
-#: includes/class.llms.l10n.js.php:386
+#: includes/class.llms.l10n.js.php:377
msgid "Add a Question"
msgstr ""
#: includes/class.llms.l10n.js.php:267
-#: includes/class.llms.l10n.js.php:373
+#: includes/class.llms.l10n.js.php:364
msgid "Use SoundCloud or Spotify audio URLS."
msgstr ""
#: includes/class.llms.l10n.js.php:268
-#: includes/class.llms.l10n.js.php:374
+#: includes/class.llms.l10n.js.php:365
msgid "Permalink"
msgstr ""
#: includes/class.llms.l10n.js.php:277
-msgid "%d add-ons"
-msgstr ""
-
-#: includes/class.llms.l10n.js.php:278
-msgid "1 add-on"
-msgstr ""
-
-#: includes/class.llms.l10n.js.php:286
msgid "Select an Image"
msgstr ""
-#: includes/class.llms.l10n.js.php:287
+#: includes/class.llms.l10n.js.php:278
msgid "Select Image"
msgstr ""
-#: includes/class.llms.l10n.js.php:295
+#: includes/class.llms.l10n.js.php:286
msgid "An error was encountered generating the export"
msgstr ""
-#: includes/class.llms.l10n.js.php:303
+#: includes/class.llms.l10n.js.php:294
msgid "Select a Course/Membership"
msgstr ""
-#: includes/class.llms.l10n.js.php:304
+#: includes/class.llms.l10n.js.php:295
msgid "Select a student"
msgstr ""
-#: includes/class.llms.l10n.js.php:305
+#: includes/class.llms.l10n.js.php:296
msgid "Error: %s"
msgstr ""
-#: includes/class.llms.l10n.js.php:313
+#: includes/class.llms.l10n.js.php:304
msgid "Filter by Student(s)"
msgstr ""
-#: includes/class.llms.l10n.js.php:314
+#: includes/class.llms.l10n.js.php:305
msgid "Error"
msgstr ""
-#: includes/class.llms.l10n.js.php:315
+#: includes/class.llms.l10n.js.php:306
msgid "Request timed out"
msgstr ""
-#: includes/class.llms.l10n.js.php:316
+#: includes/class.llms.l10n.js.php:307
msgid "Retry"
msgstr ""
-#: includes/class.llms.l10n.js.php:402
+#: includes/class.llms.l10n.js.php:393
msgid "There was an error loading the necessary resources. Please try again."
msgstr ""
-#: includes/class.llms.l10n.js.php:403
+#: includes/class.llms.l10n.js.php:394
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:404
+#: includes/class.llms.l10n.js.php:395
msgid "An error was encountered during the save attempt. Please try again."
msgstr ""
-#: includes/class.llms.l10n.js.php:412
+#: includes/class.llms.l10n.js.php:403
msgid "Please select a student to enroll"
msgstr ""
-#: includes/class.llms.l10n.js.php:420
-#: includes/class.llms.l10n.js.php:482
+#: includes/class.llms.l10n.js.php:411
+#: includes/class.llms.l10n.js.php:473
msgid "Are you sure you want to delete this row? This cannot be undone."
msgstr ""
-#: includes/class.llms.l10n.js.php:421
-#: includes/class.llms.l10n.js.php:490
+#: includes/class.llms.l10n.js.php:412
+#: includes/class.llms.l10n.js.php:481
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:422
-#: includes/class.llms.l10n.js.php:491
+#: includes/class.llms.l10n.js.php:413
+#: includes/class.llms.l10n.js.php:482
msgid "\"%s\" is already in the course list."
msgstr ""
-#: includes/class.llms.l10n.js.php:426
-#: includes/class.llms.l10n.js.php:495
+#: includes/class.llms.l10n.js.php:417
+#: includes/class.llms.l10n.js.php:486
#: templates/admin/post-types/order-transactions.php:89
msgid "Refund"
msgstr ""
-#: includes/class.llms.l10n.js.php:427
-#: includes/class.llms.l10n.js.php:496
+#: includes/class.llms.l10n.js.php:418
+#: includes/class.llms.l10n.js.php:487
#: templates/admin/post-types/order-transactions.php:113
msgid "Record a Manual Payment"
msgstr ""
-#: includes/class.llms.l10n.js.php:428
-#: includes/class.llms.l10n.js.php:497
+#: includes/class.llms.l10n.js.php:419
+#: includes/class.llms.l10n.js.php:488
msgid "Copy this code and paste it into the desired area"
msgstr ""
-#: includes/class.llms.l10n.js.php:437
+#: includes/class.llms.l10n.js.php:428
msgid "Remarks to Student"
msgstr ""
-#: includes/class.llms.l10n.js.php:446
+#: includes/class.llms.l10n.js.php:437
msgid "Are you sure you wish to quit this quiz attempt?"
msgstr ""
-#: includes/class.llms.l10n.js.php:447
+#: includes/class.llms.l10n.js.php:438
msgid "Grading Quiz..."
msgstr ""
-#: includes/class.llms.l10n.js.php:448
+#: includes/class.llms.l10n.js.php:439
msgid "Loading Question..."
msgstr ""
-#: includes/class.llms.l10n.js.php:449
+#: includes/class.llms.l10n.js.php:440
msgid "An unknown error occurred. Please try again."
msgstr ""
-#: includes/class.llms.l10n.js.php:450
+#: includes/class.llms.l10n.js.php:441
msgid "Loading Quiz..."
msgstr ""
-#: includes/class.llms.l10n.js.php:451
+#: includes/class.llms.l10n.js.php:442
msgid "Time Remaining"
msgstr ""
-#: includes/class.llms.l10n.js.php:452
+#: includes/class.llms.l10n.js.php:443
msgid "Next Question"
msgstr ""
-#: includes/class.llms.l10n.js.php:453
+#: includes/class.llms.l10n.js.php:444
msgid "Complete Quiz"
msgstr ""
-#: includes/class.llms.l10n.js.php:454
+#: includes/class.llms.l10n.js.php:445
msgid "Previous Question"
msgstr ""
-#: includes/class.llms.l10n.js.php:455
+#: includes/class.llms.l10n.js.php:446
msgid "Loading..."
msgstr ""
-#: includes/class.llms.l10n.js.php:456
+#: includes/class.llms.l10n.js.php:447
msgid "You must select an answer to continue."
msgstr ""
@@ -5956,7 +5948,7 @@ msgid "Refunded"
msgstr ""
#: includes/class.llms.post-types.php:175
-#: includes/class.llms.post-types.php:1082
+#: includes/class.llms.post-types.php:1062
msgid "Refunded (%s) "
msgid_plural "Refunded (%s) "
msgstr[0] ""
@@ -5968,1198 +5960,1198 @@ msgid "Failed"
msgstr ""
#: includes/class.llms.post-types.php:179
-#: includes/class.llms.post-types.php:1066
+#: includes/class.llms.post-types.php:1046
msgid "Failed (%s) "
msgid_plural "Failed (%s) "
msgstr[0] ""
msgstr[1] ""
-#: includes/class.llms.post-types.php:361
+#: includes/class.llms.post-types.php:377
msgctxt "Admin menu name"
msgid "Courses"
msgstr ""
-#: includes/class.llms.post-types.php:362
+#: includes/class.llms.post-types.php:378
msgid "Add Course"
msgstr ""
-#: includes/class.llms.post-types.php:363
+#: includes/class.llms.post-types.php:379
msgid "Add New Course"
msgstr ""
-#: includes/class.llms.post-types.php:365
+#: includes/class.llms.post-types.php:381
msgid "Edit Course"
msgstr ""
-#: includes/class.llms.post-types.php:366
+#: includes/class.llms.post-types.php:382
msgid "New Course"
msgstr ""
-#: includes/class.llms.post-types.php:367
-#: includes/class.llms.post-types.php:368
+#: includes/class.llms.post-types.php:383
+#: includes/class.llms.post-types.php:384
msgid "View Course"
msgstr ""
-#: includes/class.llms.post-types.php:369
+#: includes/class.llms.post-types.php:385
msgid "Search Courses"
msgstr ""
-#: includes/class.llms.post-types.php:370
+#: includes/class.llms.post-types.php:386
msgid "No Courses found"
msgstr ""
-#: includes/class.llms.post-types.php:371
+#: includes/class.llms.post-types.php:387
msgid "No Courses found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:372
+#: includes/class.llms.post-types.php:388
msgid "Parent Course"
msgstr ""
-#: includes/class.llms.post-types.php:374
+#: includes/class.llms.post-types.php:390
msgid "This is where you can add new courses."
msgstr ""
-#: includes/class.llms.post-types.php:384
+#: includes/class.llms.post-types.php:400
msgctxt "course url slug"
msgid "course"
msgstr ""
-#: includes/class.llms.post-types.php:390
+#: includes/class.llms.post-types.php:406
msgctxt "course archive url slug"
msgid "courses"
msgstr ""
-#: includes/class.llms.post-types.php:403
+#: includes/class.llms.post-types.php:419
msgid "Add Section"
msgstr ""
-#: includes/class.llms.post-types.php:404
+#: includes/class.llms.post-types.php:420
msgid "Add New Section"
msgstr ""
-#: includes/class.llms.post-types.php:406
+#: includes/class.llms.post-types.php:422
msgid "Edit Section"
msgstr ""
-#: includes/class.llms.post-types.php:408
-#: includes/class.llms.post-types.php:409
+#: includes/class.llms.post-types.php:424
+#: includes/class.llms.post-types.php:425
msgid "View Section"
msgstr ""
-#: includes/class.llms.post-types.php:410
+#: includes/class.llms.post-types.php:426
msgid "Search Sections"
msgstr ""
-#: includes/class.llms.post-types.php:411
+#: includes/class.llms.post-types.php:427
msgid "No Sections found"
msgstr ""
-#: includes/class.llms.post-types.php:412
+#: includes/class.llms.post-types.php:428
msgid "No Sections found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:413
+#: includes/class.llms.post-types.php:429
msgid "Parent Sections"
msgstr ""
-#: includes/class.llms.post-types.php:414
+#: includes/class.llms.post-types.php:430
msgctxt "Admin menu name"
msgid "Sections"
msgstr ""
-#: includes/class.llms.post-types.php:416
+#: includes/class.llms.post-types.php:432
msgid "This is where sections are stored."
msgstr ""
-#: includes/class.llms.post-types.php:438
+#: includes/class.llms.post-types.php:454
msgid "Add Lesson"
msgstr ""
-#: includes/class.llms.post-types.php:439
+#: includes/class.llms.post-types.php:455
msgid "Add New Lesson"
msgstr ""
-#: includes/class.llms.post-types.php:441
+#: includes/class.llms.post-types.php:457
msgid "Edit Lesson"
msgstr ""
-#: includes/class.llms.post-types.php:443
-#: includes/class.llms.post-types.php:444
+#: includes/class.llms.post-types.php:459
+#: includes/class.llms.post-types.php:460
msgid "View Lesson"
msgstr ""
-#: includes/class.llms.post-types.php:445
+#: includes/class.llms.post-types.php:461
msgid "Search Lessons"
msgstr ""
-#: includes/class.llms.post-types.php:446
+#: includes/class.llms.post-types.php:462
msgid "No Lessons found"
msgstr ""
-#: includes/class.llms.post-types.php:447
+#: includes/class.llms.post-types.php:463
msgid "No Lessons found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:448
+#: includes/class.llms.post-types.php:464
msgid "Parent Lessons"
msgstr ""
-#: includes/class.llms.post-types.php:449
+#: includes/class.llms.post-types.php:465
msgctxt "Admin menu name"
msgid "Lessons"
msgstr ""
-#: includes/class.llms.post-types.php:451
+#: includes/class.llms.post-types.php:467
msgid "This is where you can view all of the lessons."
msgstr ""
-#: includes/class.llms.post-types.php:461
+#: includes/class.llms.post-types.php:477
msgctxt "lesson url slug"
msgid "lesson"
msgstr ""
-#: includes/class.llms.post-types.php:478
+#: includes/class.llms.post-types.php:494
msgid "Add Quiz"
msgstr ""
-#: includes/class.llms.post-types.php:479
+#: includes/class.llms.post-types.php:495
msgid "Add New Quiz"
msgstr ""
-#: includes/class.llms.post-types.php:481
+#: includes/class.llms.post-types.php:497
msgid "Edit Quiz"
msgstr ""
-#: includes/class.llms.post-types.php:483
-#: includes/class.llms.post-types.php:484
+#: includes/class.llms.post-types.php:499
+#: includes/class.llms.post-types.php:500
msgid "View Quiz"
msgstr ""
-#: includes/class.llms.post-types.php:485
+#: includes/class.llms.post-types.php:501
msgid "Search Quiz"
msgstr ""
-#: includes/class.llms.post-types.php:486
+#: includes/class.llms.post-types.php:502
msgid "No Quizzes found"
msgstr ""
-#: includes/class.llms.post-types.php:487
+#: includes/class.llms.post-types.php:503
msgid "No Quizzes found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:488
+#: includes/class.llms.post-types.php:504
msgid "Parent Quizzes"
msgstr ""
-#: includes/class.llms.post-types.php:489
+#: includes/class.llms.post-types.php:505
msgctxt "Admin menu name"
msgid "Quizzes"
msgstr ""
-#: includes/class.llms.post-types.php:491
+#: includes/class.llms.post-types.php:507
msgid "This is where you can view all of the quizzes."
msgstr ""
-#: includes/class.llms.post-types.php:501
+#: includes/class.llms.post-types.php:517
msgctxt "quiz url slug"
msgid "quiz"
msgstr ""
-#: includes/class.llms.post-types.php:517
+#: includes/class.llms.post-types.php:533
#: includes/class.llms.question.types.php:66
msgid "Question"
msgstr ""
-#: includes/class.llms.post-types.php:519
+#: includes/class.llms.post-types.php:535
msgid "Add New Question"
msgstr ""
-#: includes/class.llms.post-types.php:521
+#: includes/class.llms.post-types.php:537
msgid "Edit Question"
msgstr ""
-#: includes/class.llms.post-types.php:522
+#: includes/class.llms.post-types.php:538
msgid "New Question"
msgstr ""
-#: includes/class.llms.post-types.php:523
-#: includes/class.llms.post-types.php:524
+#: includes/class.llms.post-types.php:539
+#: includes/class.llms.post-types.php:540
msgid "View Question"
msgstr ""
-#: includes/class.llms.post-types.php:525
+#: includes/class.llms.post-types.php:541
msgid "Search Questions"
msgstr ""
-#: includes/class.llms.post-types.php:526
+#: includes/class.llms.post-types.php:542
msgid "No Questions found"
msgstr ""
-#: includes/class.llms.post-types.php:527
+#: includes/class.llms.post-types.php:543
msgid "No Questions found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:528
+#: includes/class.llms.post-types.php:544
msgid "Parent Questions"
msgstr ""
-#: includes/class.llms.post-types.php:529
+#: includes/class.llms.post-types.php:545
msgctxt "Admin menu name"
msgid "Quiz Questions"
msgstr ""
-#: includes/class.llms.post-types.php:531
+#: includes/class.llms.post-types.php:547
msgid "This is where you can view all of the Quiz Questions."
msgstr ""
-#: includes/class.llms.post-types.php:555
+#: includes/class.llms.post-types.php:571
msgctxt "Admin menu name"
msgid "Memberships"
msgstr ""
-#: includes/class.llms.post-types.php:556
+#: includes/class.llms.post-types.php:572
msgid "Add Membership"
msgstr ""
-#: includes/class.llms.post-types.php:557
+#: includes/class.llms.post-types.php:573
msgid "Add New Membership"
msgstr ""
-#: includes/class.llms.post-types.php:559
+#: includes/class.llms.post-types.php:575
msgid "Edit Membership"
msgstr ""
-#: includes/class.llms.post-types.php:560
+#: includes/class.llms.post-types.php:576
msgid "New Membership"
msgstr ""
-#: includes/class.llms.post-types.php:561
-#: includes/class.llms.post-types.php:562
+#: includes/class.llms.post-types.php:577
+#: includes/class.llms.post-types.php:578
msgid "View Membership"
msgstr ""
-#: includes/class.llms.post-types.php:563
+#: includes/class.llms.post-types.php:579
msgid "Search Memberships"
msgstr ""
-#: includes/class.llms.post-types.php:564
+#: includes/class.llms.post-types.php:580
msgid "No Memberships found"
msgstr ""
-#: includes/class.llms.post-types.php:565
+#: includes/class.llms.post-types.php:581
msgid "No Memberships found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:566
+#: includes/class.llms.post-types.php:582
msgid "Parent Membership"
msgstr ""
-#: includes/class.llms.post-types.php:568
+#: includes/class.llms.post-types.php:584
msgid "This is where you can add new Membership levels."
msgstr ""
-#: includes/class.llms.post-types.php:579
+#: includes/class.llms.post-types.php:595
msgctxt "membership url slug"
msgid "membership"
msgstr ""
-#: includes/class.llms.post-types.php:585
+#: includes/class.llms.post-types.php:601
msgctxt "membership archive url slug"
msgid "memberships"
msgstr ""
-#: includes/class.llms.post-types.php:599
+#: includes/class.llms.post-types.php:613
msgid "Engagement"
msgstr ""
-#: includes/class.llms.post-types.php:600
+#: includes/class.llms.post-types.php:614
msgid "Add Engagement"
msgstr ""
-#: includes/class.llms.post-types.php:601
+#: includes/class.llms.post-types.php:615
msgid "Add New Engagement"
msgstr ""
-#: includes/class.llms.post-types.php:603
+#: includes/class.llms.post-types.php:617
msgid "Edit Engagement"
msgstr ""
-#: includes/class.llms.post-types.php:604
+#: includes/class.llms.post-types.php:618
msgid "New Engagement"
msgstr ""
-#: includes/class.llms.post-types.php:605
-#: includes/class.llms.post-types.php:606
+#: includes/class.llms.post-types.php:619
+#: includes/class.llms.post-types.php:620
msgid "View Engagement"
msgstr ""
-#: includes/class.llms.post-types.php:607
+#: includes/class.llms.post-types.php:621
msgid "Search Engagement"
msgstr ""
-#: includes/class.llms.post-types.php:608
+#: includes/class.llms.post-types.php:622
msgid "No Engagement found"
msgstr ""
-#: includes/class.llms.post-types.php:609
+#: includes/class.llms.post-types.php:623
msgid "No Engagement found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:610
+#: includes/class.llms.post-types.php:624
msgid "Parent Engagement"
msgstr ""
-#: includes/class.llms.post-types.php:611
+#: includes/class.llms.post-types.php:625
msgctxt "Admin menu name"
msgid "Engagements"
msgstr ""
-#: includes/class.llms.post-types.php:613
+#: includes/class.llms.post-types.php:627
msgid "This is where engagements are stored."
msgstr ""
-#: includes/class.llms.post-types.php:638
+#: includes/class.llms.post-types.php:649
#: includes/privacy/class-llms-privacy-exporters.php:515
msgid "Orders"
msgstr ""
-#: includes/class.llms.post-types.php:640
+#: includes/class.llms.post-types.php:651
msgid "Add Order"
msgstr ""
-#: includes/class.llms.post-types.php:641
+#: includes/class.llms.post-types.php:652
msgid "Add New Order"
msgstr ""
-#: includes/class.llms.post-types.php:643
+#: includes/class.llms.post-types.php:654
msgid "Edit Order"
msgstr ""
-#: includes/class.llms.post-types.php:644
+#: includes/class.llms.post-types.php:655
msgid "New Order"
msgstr ""
-#: includes/class.llms.post-types.php:645
-#: includes/class.llms.post-types.php:646
+#: includes/class.llms.post-types.php:656
+#: includes/class.llms.post-types.php:657
msgid "View Order"
msgstr ""
-#: includes/class.llms.post-types.php:647
+#: includes/class.llms.post-types.php:658
msgid "Search Orders"
msgstr ""
-#: includes/class.llms.post-types.php:648
+#: includes/class.llms.post-types.php:659
msgid "No Orders found"
msgstr ""
-#: includes/class.llms.post-types.php:649
+#: includes/class.llms.post-types.php:660
msgid "No Orders found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:650
+#: includes/class.llms.post-types.php:661
msgid "Parent Orders"
msgstr ""
-#: includes/class.llms.post-types.php:651
-#: includes/class.llms.post-types.php:694
+#: includes/class.llms.post-types.php:662
+#: includes/class.llms.post-types.php:702
msgctxt "Admin menu name"
msgid "Orders"
msgstr ""
-#: includes/class.llms.post-types.php:653
+#: includes/class.llms.post-types.php:664
msgid "This is where orders are managed"
msgstr ""
-#: includes/class.llms.post-types.php:682
+#: includes/class.llms.post-types.php:690
#: templates/myaccount/view-order-transactions.php:21
msgid "Transaction"
msgstr ""
-#: includes/class.llms.post-types.php:683
+#: includes/class.llms.post-types.php:691
msgid "Add Transaction"
msgstr ""
-#: includes/class.llms.post-types.php:684
+#: includes/class.llms.post-types.php:692
msgid "Add New Transaction"
msgstr ""
-#: includes/class.llms.post-types.php:686
+#: includes/class.llms.post-types.php:694
msgid "Edit Transaction"
msgstr ""
-#: includes/class.llms.post-types.php:687
+#: includes/class.llms.post-types.php:695
msgid "New Transaction"
msgstr ""
-#: includes/class.llms.post-types.php:688
-#: includes/class.llms.post-types.php:689
+#: includes/class.llms.post-types.php:696
+#: includes/class.llms.post-types.php:697
msgid "View Transaction"
msgstr ""
-#: includes/class.llms.post-types.php:690
+#: includes/class.llms.post-types.php:698
msgid "Search Transactions"
msgstr ""
-#: includes/class.llms.post-types.php:691
+#: includes/class.llms.post-types.php:699
msgid "No Transactions found"
msgstr ""
-#: includes/class.llms.post-types.php:692
+#: includes/class.llms.post-types.php:700
msgid "No Transactions found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:693
+#: includes/class.llms.post-types.php:701
msgid "Parent Transactions"
msgstr ""
-#: includes/class.llms.post-types.php:696
+#: includes/class.llms.post-types.php:704
msgid "This is where single and recurring order transactions are stored"
msgstr ""
-#: includes/class.llms.post-types.php:724
+#: includes/class.llms.post-types.php:729
msgid "Achievement"
msgstr ""
-#: includes/class.llms.post-types.php:725
+#: includes/class.llms.post-types.php:730
msgid "Add Achievement"
msgstr ""
-#: includes/class.llms.post-types.php:726
+#: includes/class.llms.post-types.php:731
msgid "Add New Achievement"
msgstr ""
-#: includes/class.llms.post-types.php:728
+#: includes/class.llms.post-types.php:733
msgid "Edit Achievement"
msgstr ""
-#: includes/class.llms.post-types.php:729
+#: includes/class.llms.post-types.php:734
msgid "New Achievement"
msgstr ""
-#: includes/class.llms.post-types.php:730
-#: includes/class.llms.post-types.php:731
+#: includes/class.llms.post-types.php:735
+#: includes/class.llms.post-types.php:736
msgid "View Achievement"
msgstr ""
-#: includes/class.llms.post-types.php:732
+#: includes/class.llms.post-types.php:737
msgid "Search Achievement"
msgstr ""
-#: includes/class.llms.post-types.php:733
+#: includes/class.llms.post-types.php:738
msgid "No Achievement found"
msgstr ""
-#: includes/class.llms.post-types.php:734
+#: includes/class.llms.post-types.php:739
msgid "No Achievement found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:735
+#: includes/class.llms.post-types.php:740
msgid "Parent Achievement"
msgstr ""
-#: includes/class.llms.post-types.php:736
+#: includes/class.llms.post-types.php:741
msgctxt "Admin menu name"
msgid "Achievements"
msgstr ""
-#: includes/class.llms.post-types.php:738
+#: includes/class.llms.post-types.php:743
msgid "This is where achievements are stored."
msgstr ""
-#: includes/class.llms.post-types.php:763
+#: includes/class.llms.post-types.php:765
msgid "Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:764
+#: includes/class.llms.post-types.php:766
msgid "Add Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:765
+#: includes/class.llms.post-types.php:767
msgid "Add New Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:767
+#: includes/class.llms.post-types.php:769
msgid "Edit Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:768
+#: includes/class.llms.post-types.php:770
msgid "New Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:769
-#: includes/class.llms.post-types.php:770
+#: includes/class.llms.post-types.php:771
+#: includes/class.llms.post-types.php:772
msgid "View Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:771
+#: includes/class.llms.post-types.php:773
msgid "Search Certificates"
msgstr ""
-#: includes/class.llms.post-types.php:772
+#: includes/class.llms.post-types.php:774
msgid "No Certificates found"
msgstr ""
-#: includes/class.llms.post-types.php:773
+#: includes/class.llms.post-types.php:775
msgid "No Certificates found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:774
+#: includes/class.llms.post-types.php:776
msgid "Parent Certificates"
msgstr ""
-#: includes/class.llms.post-types.php:775
+#: includes/class.llms.post-types.php:777
msgctxt "Admin menu name"
msgid "Certificates"
msgstr ""
-#: includes/class.llms.post-types.php:777
-#: includes/class.llms.post-types.php:819
+#: includes/class.llms.post-types.php:779
+#: includes/class.llms.post-types.php:818
msgid "This is where you can view all of the certificates."
msgstr ""
-#: includes/class.llms.post-types.php:786
+#: includes/class.llms.post-types.php:788
msgctxt "slug"
msgid "certificate"
msgstr ""
-#: includes/class.llms.post-types.php:804
+#: includes/class.llms.post-types.php:803
#: includes/class.llms.student.dashboard.php:186
#: includes/functions/llms.functions.templates.dashboard.php:437
msgid "My Certificates"
msgstr ""
-#: includes/class.llms.post-types.php:805
+#: includes/class.llms.post-types.php:804
msgid "My Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:806
+#: includes/class.llms.post-types.php:805
msgid "Add My Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:807
+#: includes/class.llms.post-types.php:806
msgid "Add New My Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:809
+#: includes/class.llms.post-types.php:808
msgid "Edit My Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:810
+#: includes/class.llms.post-types.php:809
msgid "New My Certificate"
msgstr ""
+#: includes/class.llms.post-types.php:810
#: includes/class.llms.post-types.php:811
-#: includes/class.llms.post-types.php:812
msgid "View My Certificate"
msgstr ""
-#: includes/class.llms.post-types.php:813
+#: includes/class.llms.post-types.php:812
msgid "Search My Certificates"
msgstr ""
-#: includes/class.llms.post-types.php:814
+#: includes/class.llms.post-types.php:813
msgid "No My Certificates found"
msgstr ""
-#: includes/class.llms.post-types.php:815
+#: includes/class.llms.post-types.php:814
msgid "No My Certificates found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:816
+#: includes/class.llms.post-types.php:815
msgid "Parent My Certificates"
msgstr ""
-#: includes/class.llms.post-types.php:817
+#: includes/class.llms.post-types.php:816
msgctxt "Admin menu name"
msgid "My Certificates"
msgstr ""
-#: includes/class.llms.post-types.php:828
+#: includes/class.llms.post-types.php:827
msgctxt "slug"
msgid "my_certificate"
msgstr ""
-#: includes/class.llms.post-types.php:846
+#: includes/class.llms.post-types.php:842
msgid "Emails"
msgstr ""
-#: includes/class.llms.post-types.php:848
+#: includes/class.llms.post-types.php:844
msgid "Add Email"
msgstr ""
-#: includes/class.llms.post-types.php:849
+#: includes/class.llms.post-types.php:845
msgid "Add New Email"
msgstr ""
-#: includes/class.llms.post-types.php:851
+#: includes/class.llms.post-types.php:847
msgid "Edit Email"
msgstr ""
-#: includes/class.llms.post-types.php:852
+#: includes/class.llms.post-types.php:848
msgid "New Email"
msgstr ""
-#: includes/class.llms.post-types.php:853
-#: includes/class.llms.post-types.php:854
+#: includes/class.llms.post-types.php:849
+#: includes/class.llms.post-types.php:850
msgid "View Email"
msgstr ""
-#: includes/class.llms.post-types.php:855
+#: includes/class.llms.post-types.php:851
msgid "Search Emails"
msgstr ""
-#: includes/class.llms.post-types.php:856
+#: includes/class.llms.post-types.php:852
msgid "No Emails found"
msgstr ""
-#: includes/class.llms.post-types.php:857
+#: includes/class.llms.post-types.php:853
msgid "No Emails found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:858
+#: includes/class.llms.post-types.php:854
msgid "Parent Emails"
msgstr ""
-#: includes/class.llms.post-types.php:859
+#: includes/class.llms.post-types.php:855
msgctxt "Admin menu name"
msgid "Emails"
msgstr ""
-#: includes/class.llms.post-types.php:861
+#: includes/class.llms.post-types.php:857
msgid "This is where emails are stored."
msgstr ""
-#: includes/class.llms.post-types.php:885
+#: includes/class.llms.post-types.php:878
msgid "Coupons"
msgstr ""
-#: includes/class.llms.post-types.php:887
+#: includes/class.llms.post-types.php:880
msgid "Add Coupon"
msgstr ""
-#: includes/class.llms.post-types.php:888
+#: includes/class.llms.post-types.php:881
msgid "Add New Coupon"
msgstr ""
-#: includes/class.llms.post-types.php:890
+#: includes/class.llms.post-types.php:883
msgid "Edit Coupon"
msgstr ""
-#: includes/class.llms.post-types.php:891
+#: includes/class.llms.post-types.php:884
msgid "New Coupon"
msgstr ""
-#: includes/class.llms.post-types.php:892
-#: includes/class.llms.post-types.php:893
+#: includes/class.llms.post-types.php:885
+#: includes/class.llms.post-types.php:886
msgid "View Coupon"
msgstr ""
-#: includes/class.llms.post-types.php:894
+#: includes/class.llms.post-types.php:887
msgid "Search Coupon"
msgstr ""
-#: includes/class.llms.post-types.php:895
+#: includes/class.llms.post-types.php:888
msgid "No Coupon found"
msgstr ""
-#: includes/class.llms.post-types.php:896
+#: includes/class.llms.post-types.php:889
msgid "No Coupon found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:897
+#: includes/class.llms.post-types.php:890
msgid "Parent Coupon"
msgstr ""
-#: includes/class.llms.post-types.php:898
+#: includes/class.llms.post-types.php:891
msgctxt "Admin menu name"
msgid "Coupons"
msgstr ""
-#: includes/class.llms.post-types.php:900
+#: includes/class.llms.post-types.php:893
msgid "This is where coupons are stored."
msgstr ""
-#: includes/class.llms.post-types.php:924
+#: includes/class.llms.post-types.php:914
msgid "Vouchers"
msgstr ""
-#: includes/class.llms.post-types.php:925
+#: includes/class.llms.post-types.php:915
msgid "Voucher"
msgstr ""
-#: includes/class.llms.post-types.php:926
+#: includes/class.llms.post-types.php:916
msgid "Add Voucher"
msgstr ""
-#: includes/class.llms.post-types.php:927
+#: includes/class.llms.post-types.php:917
msgid "Add New Voucher"
msgstr ""
-#: includes/class.llms.post-types.php:929
+#: includes/class.llms.post-types.php:919
msgid "Edit Voucher"
msgstr ""
-#: includes/class.llms.post-types.php:930
+#: includes/class.llms.post-types.php:920
msgid "New Voucher"
msgstr ""
-#: includes/class.llms.post-types.php:931
-#: includes/class.llms.post-types.php:932
+#: includes/class.llms.post-types.php:921
+#: includes/class.llms.post-types.php:922
msgid "View Voucher"
msgstr ""
-#: includes/class.llms.post-types.php:933
+#: includes/class.llms.post-types.php:923
msgid "Search Voucher"
msgstr ""
-#: includes/class.llms.post-types.php:934
+#: includes/class.llms.post-types.php:924
msgid "No Voucher found"
msgstr ""
-#: includes/class.llms.post-types.php:935
+#: includes/class.llms.post-types.php:925
msgid "No Voucher found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:936
+#: includes/class.llms.post-types.php:926
msgid "Parent Voucher"
msgstr ""
-#: includes/class.llms.post-types.php:937
+#: includes/class.llms.post-types.php:927
msgctxt "Admin menu name"
msgid "Vouchers"
msgstr ""
-#: includes/class.llms.post-types.php:939
+#: includes/class.llms.post-types.php:929
msgid "This is where voucher are stored."
msgstr ""
-#: includes/class.llms.post-types.php:964
+#: includes/class.llms.post-types.php:951
#: includes/functions/llms.functions.templates.dashboard.php:950
msgid "Review"
msgstr ""
-#: includes/class.llms.post-types.php:965
+#: includes/class.llms.post-types.php:952
msgctxt "Admin menu name"
msgid "Reviews"
msgstr ""
-#: includes/class.llms.post-types.php:966
+#: includes/class.llms.post-types.php:953
msgid "Add Review"
msgstr ""
-#: includes/class.llms.post-types.php:967
+#: includes/class.llms.post-types.php:954
msgid "Add New Review"
msgstr ""
-#: includes/class.llms.post-types.php:969
+#: includes/class.llms.post-types.php:956
msgid "Edit Review"
msgstr ""
-#: includes/class.llms.post-types.php:970
+#: includes/class.llms.post-types.php:957
msgid "New Review"
msgstr ""
-#: includes/class.llms.post-types.php:971
-#: includes/class.llms.post-types.php:972
+#: includes/class.llms.post-types.php:958
+#: includes/class.llms.post-types.php:959
msgid "View Review"
msgstr ""
-#: includes/class.llms.post-types.php:973
+#: includes/class.llms.post-types.php:960
msgid "Search Reviews"
msgstr ""
-#: includes/class.llms.post-types.php:974
+#: includes/class.llms.post-types.php:961
msgid "No Reviews found"
msgstr ""
-#: includes/class.llms.post-types.php:975
+#: includes/class.llms.post-types.php:962
msgid "No Reviews found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:976
+#: includes/class.llms.post-types.php:963
msgid "Parent Review"
msgstr ""
-#: includes/class.llms.post-types.php:978
+#: includes/class.llms.post-types.php:965
msgid "This is where you can add new reviews."
msgstr ""
-#: includes/class.llms.post-types.php:1003
+#: includes/class.llms.post-types.php:987
#: includes/functions/llms-functions-access-plans.php:92
#: templates/checkout/form-summary.php:12
#: templates/myaccount/view-order.php:45
msgid "Access Plan"
msgstr ""
-#: includes/class.llms.post-types.php:1004
+#: includes/class.llms.post-types.php:988
msgid "Add Access Plan"
msgstr ""
-#: includes/class.llms.post-types.php:1005
+#: includes/class.llms.post-types.php:989
msgid "Add New Access Plan"
msgstr ""
-#: includes/class.llms.post-types.php:1007
+#: includes/class.llms.post-types.php:991
msgid "Edit Access Plan"
msgstr ""
-#: includes/class.llms.post-types.php:1009
-#: includes/class.llms.post-types.php:1010
+#: includes/class.llms.post-types.php:993
+#: includes/class.llms.post-types.php:994
msgid "View Access Plan"
msgstr ""
-#: includes/class.llms.post-types.php:1011
+#: includes/class.llms.post-types.php:995
msgid "Search Access Plans"
msgstr ""
-#: includes/class.llms.post-types.php:1012
+#: includes/class.llms.post-types.php:996
msgid "No Access Plans found"
msgstr ""
-#: includes/class.llms.post-types.php:1013
+#: includes/class.llms.post-types.php:997
msgid "No Access Plans found in trash"
msgstr ""
-#: includes/class.llms.post-types.php:1014
+#: includes/class.llms.post-types.php:998
msgid "Parent Access Plans"
msgstr ""
-#: includes/class.llms.post-types.php:1015
+#: includes/class.llms.post-types.php:999
msgctxt "Admin menu name"
msgid "Access Plans"
msgstr ""
-#: includes/class.llms.post-types.php:1017
+#: includes/class.llms.post-types.php:1001
msgid "This is where access plans are stored."
msgstr ""
-#: includes/class.llms.post-types.php:1061
+#: includes/class.llms.post-types.php:1041
msgctxt "Transaction status"
msgid "Failed"
msgstr ""
-#: includes/class.llms.post-types.php:1069
+#: includes/class.llms.post-types.php:1049
msgctxt "Transaction status"
msgid "Pending"
msgstr ""
-#: includes/class.llms.post-types.php:1074
+#: includes/class.llms.post-types.php:1054
msgid "Pending (%s) "
msgid_plural "Pending (%s) "
msgstr[0] ""
msgstr[1] ""
-#: includes/class.llms.post-types.php:1077
+#: includes/class.llms.post-types.php:1057
msgctxt "Transaction status"
msgid "Refunded"
msgstr ""
-#: includes/class.llms.post-types.php:1085
+#: includes/class.llms.post-types.php:1065
msgctxt "Transaction status"
msgid "Succeeded"
msgstr ""
-#: includes/class.llms.post-types.php:1090
+#: includes/class.llms.post-types.php:1070
msgid "Succeeded (%s) "
msgid_plural "Succeeded (%s) "
msgstr[0] ""
msgstr[1] ""
-#: includes/class.llms.post-types.php:1143
-#: includes/class.llms.post-types.php:1145
+#: includes/class.llms.post-types.php:1123
+#: includes/class.llms.post-types.php:1125
msgid "Course Categories"
msgstr ""
-#: includes/class.llms.post-types.php:1146
+#: includes/class.llms.post-types.php:1126
msgid "Course Category"
msgstr ""
-#: includes/class.llms.post-types.php:1147
-#: includes/class.llms.post-types.php:1278
+#: includes/class.llms.post-types.php:1127
+#: includes/class.llms.post-types.php:1258
msgctxt "Admin menu name"
msgid "Categories"
msgstr ""
-#: includes/class.llms.post-types.php:1148
+#: includes/class.llms.post-types.php:1128
msgid "Search Course Categories"
msgstr ""
-#: includes/class.llms.post-types.php:1149
+#: includes/class.llms.post-types.php:1129
msgid "All Course Categories"
msgstr ""
-#: includes/class.llms.post-types.php:1150
+#: includes/class.llms.post-types.php:1130
msgid "Parent Course Category"
msgstr ""
-#: includes/class.llms.post-types.php:1151
+#: includes/class.llms.post-types.php:1131
msgid "Parent Course Category:"
msgstr ""
-#: includes/class.llms.post-types.php:1152
+#: includes/class.llms.post-types.php:1132
msgid "Edit Course Category"
msgstr ""
-#: includes/class.llms.post-types.php:1153
+#: includes/class.llms.post-types.php:1133
msgid "Update Course Category"
msgstr ""
-#: includes/class.llms.post-types.php:1154
+#: includes/class.llms.post-types.php:1134
msgid "Add New Course Category"
msgstr ""
-#: includes/class.llms.post-types.php:1155
+#: includes/class.llms.post-types.php:1135
msgid "New Course Category Name"
msgstr ""
-#: includes/class.llms.post-types.php:1163
+#: includes/class.llms.post-types.php:1143
msgctxt "slug"
msgid "course-category"
msgstr ""
-#: includes/class.llms.post-types.php:1176
-#: includes/class.llms.post-types.php:1178
+#: includes/class.llms.post-types.php:1156
+#: includes/class.llms.post-types.php:1158
msgid "Course Difficulties"
msgstr ""
-#: includes/class.llms.post-types.php:1179
+#: includes/class.llms.post-types.php:1159
msgid "Course Difficulty"
msgstr ""
-#: includes/class.llms.post-types.php:1180
+#: includes/class.llms.post-types.php:1160
msgctxt "Admin menu name"
msgid "Difficulties"
msgstr ""
-#: includes/class.llms.post-types.php:1181
+#: includes/class.llms.post-types.php:1161
msgid "Search Course Difficulties"
msgstr ""
-#: includes/class.llms.post-types.php:1182
+#: includes/class.llms.post-types.php:1162
msgid "All Course Difficulties"
msgstr ""
-#: includes/class.llms.post-types.php:1183
+#: includes/class.llms.post-types.php:1163
msgid "Parent Course Difficulty"
msgstr ""
-#: includes/class.llms.post-types.php:1184
+#: includes/class.llms.post-types.php:1164
msgid "Parent Course Difficulty:"
msgstr ""
-#: includes/class.llms.post-types.php:1185
+#: includes/class.llms.post-types.php:1165
msgid "Edit Course Difficulty"
msgstr ""
-#: includes/class.llms.post-types.php:1186
+#: includes/class.llms.post-types.php:1166
msgid "Update Course Difficulty"
msgstr ""
-#: includes/class.llms.post-types.php:1187
+#: includes/class.llms.post-types.php:1167
msgid "Add New Course Difficulty"
msgstr ""
-#: includes/class.llms.post-types.php:1188
+#: includes/class.llms.post-types.php:1168
msgid "New Course Difficulty Name"
msgstr ""
-#: includes/class.llms.post-types.php:1196
+#: includes/class.llms.post-types.php:1176
msgctxt "slug"
msgid "course-difficulty"
msgstr ""
-#: includes/class.llms.post-types.php:1208
-#: includes/class.llms.post-types.php:1210
+#: includes/class.llms.post-types.php:1188
+#: includes/class.llms.post-types.php:1190
msgid "Course Tags"
msgstr ""
-#: includes/class.llms.post-types.php:1211
+#: includes/class.llms.post-types.php:1191
msgid "Course Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1212
-#: includes/class.llms.post-types.php:1312
+#: includes/class.llms.post-types.php:1192
+#: includes/class.llms.post-types.php:1292
msgctxt "Admin menu name"
msgid "Tags"
msgstr ""
-#: includes/class.llms.post-types.php:1213
+#: includes/class.llms.post-types.php:1193
msgid "Search Course Tags"
msgstr ""
-#: includes/class.llms.post-types.php:1214
+#: includes/class.llms.post-types.php:1194
msgid "All Course Tags"
msgstr ""
-#: includes/class.llms.post-types.php:1215
+#: includes/class.llms.post-types.php:1195
msgid "Parent Course Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1216
+#: includes/class.llms.post-types.php:1196
msgid "Parent Course Tag:"
msgstr ""
-#: includes/class.llms.post-types.php:1217
+#: includes/class.llms.post-types.php:1197
msgid "Edit Course Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1218
+#: includes/class.llms.post-types.php:1198
msgid "Update Course Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1219
+#: includes/class.llms.post-types.php:1199
msgid "Add New Course Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1220
+#: includes/class.llms.post-types.php:1200
msgid "New Course Tag Name"
msgstr ""
-#: includes/class.llms.post-types.php:1228
+#: includes/class.llms.post-types.php:1208
msgctxt "slug"
msgid "course-tag"
msgstr ""
-#: includes/class.llms.post-types.php:1240
-#: includes/class.llms.post-types.php:1243
+#: includes/class.llms.post-types.php:1220
+#: includes/class.llms.post-types.php:1223
msgid "Course Track"
msgstr ""
-#: includes/class.llms.post-types.php:1242
+#: includes/class.llms.post-types.php:1222
msgid "Course Tracks"
msgstr ""
-#: includes/class.llms.post-types.php:1244
+#: includes/class.llms.post-types.php:1224
msgctxt "Admin menu name"
msgid "Tracks"
msgstr ""
-#: includes/class.llms.post-types.php:1245
+#: includes/class.llms.post-types.php:1225
msgid "Search Course Tracks"
msgstr ""
-#: includes/class.llms.post-types.php:1246
+#: includes/class.llms.post-types.php:1226
msgid "All Course Tracks"
msgstr ""
-#: includes/class.llms.post-types.php:1247
+#: includes/class.llms.post-types.php:1227
msgid "Parent Course Track"
msgstr ""
-#: includes/class.llms.post-types.php:1248
+#: includes/class.llms.post-types.php:1228
msgid "Parent Course Track:"
msgstr ""
-#: includes/class.llms.post-types.php:1249
+#: includes/class.llms.post-types.php:1229
msgid "Edit Course Track"
msgstr ""
-#: includes/class.llms.post-types.php:1250
+#: includes/class.llms.post-types.php:1230
msgid "Update Course Track"
msgstr ""
-#: includes/class.llms.post-types.php:1251
+#: includes/class.llms.post-types.php:1231
msgid "Add New Course Track"
msgstr ""
-#: includes/class.llms.post-types.php:1252
+#: includes/class.llms.post-types.php:1232
msgid "New Course Track Name"
msgstr ""
-#: includes/class.llms.post-types.php:1260
+#: includes/class.llms.post-types.php:1240
msgctxt "slug"
msgid "course-track"
msgstr ""
-#: includes/class.llms.post-types.php:1274
-#: includes/class.llms.post-types.php:1276
+#: includes/class.llms.post-types.php:1254
+#: includes/class.llms.post-types.php:1256
msgid "Membership Categories"
msgstr ""
-#: includes/class.llms.post-types.php:1277
+#: includes/class.llms.post-types.php:1257
msgid "Membership Category"
msgstr ""
-#: includes/class.llms.post-types.php:1279
+#: includes/class.llms.post-types.php:1259
msgid "Search Membership Categories"
msgstr ""
-#: includes/class.llms.post-types.php:1280
+#: includes/class.llms.post-types.php:1260
msgid "All Membership Categories"
msgstr ""
-#: includes/class.llms.post-types.php:1281
+#: includes/class.llms.post-types.php:1261
msgid "Parent Membership Category"
msgstr ""
-#: includes/class.llms.post-types.php:1282
+#: includes/class.llms.post-types.php:1262
msgid "Parent Membership Category:"
msgstr ""
-#: includes/class.llms.post-types.php:1283
+#: includes/class.llms.post-types.php:1263
msgid "Edit Membership Category"
msgstr ""
-#: includes/class.llms.post-types.php:1284
+#: includes/class.llms.post-types.php:1264
msgid "Update Membership Category"
msgstr ""
-#: includes/class.llms.post-types.php:1285
+#: includes/class.llms.post-types.php:1265
msgid "Add New Membership Category"
msgstr ""
-#: includes/class.llms.post-types.php:1286
+#: includes/class.llms.post-types.php:1266
msgid "New Membership Category Name"
msgstr ""
-#: includes/class.llms.post-types.php:1294
+#: includes/class.llms.post-types.php:1274
msgctxt "slug"
msgid "membership-category"
msgstr ""
-#: includes/class.llms.post-types.php:1308
-#: includes/class.llms.post-types.php:1310
+#: includes/class.llms.post-types.php:1288
+#: includes/class.llms.post-types.php:1290
msgid "Membership Tags"
msgstr ""
-#: includes/class.llms.post-types.php:1311
+#: includes/class.llms.post-types.php:1291
msgid "Membership Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1313
+#: includes/class.llms.post-types.php:1293
msgid "Search Membership Tags"
msgstr ""
-#: includes/class.llms.post-types.php:1314
+#: includes/class.llms.post-types.php:1294
msgid "All Membership Tags"
msgstr ""
-#: includes/class.llms.post-types.php:1315
+#: includes/class.llms.post-types.php:1295
msgid "Parent Membership Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1316
+#: includes/class.llms.post-types.php:1296
msgid "Parent Membership Tag:"
msgstr ""
-#: includes/class.llms.post-types.php:1317
+#: includes/class.llms.post-types.php:1297
msgid "Edit Membership Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1318
+#: includes/class.llms.post-types.php:1298
msgid "Update Membership Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1319
+#: includes/class.llms.post-types.php:1299
msgid "Add New Membership Tag"
msgstr ""
-#: includes/class.llms.post-types.php:1320
+#: includes/class.llms.post-types.php:1300
msgid "New Membership Tag Name"
msgstr ""
-#: includes/class.llms.post-types.php:1328
+#: includes/class.llms.post-types.php:1308
msgctxt "slug"
msgid "membership-tag"
msgstr ""
@@ -7384,7 +7376,7 @@ msgstr ""
msgid "You have already redeemed this voucher."
msgstr ""
-#: includes/controllers/class.llms.controller.certificates.php:147
+#: includes/controllers/class.llms.controller.certificates.php:148
msgid "You are not allowed to manage this certificate."
msgstr ""
@@ -34059,6 +34051,13 @@ 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] ""
+
#: libraries/lifterlms-blocks/assets/js/llms-blocks.js:1
msgid "everyone"
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..127d6e56ae
--- /dev/null
+++ b/libraries/lifterlms-blocks/CHANGELOG.md
@@ -0,0 +1,413 @@
+LifterLMS Blocks Changelog
+==========================
+
+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..f56150261d
--- /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%}}@media(min-width:600px){.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{color:#555d66;border-top:1px solid #e0e0e0;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-syllabus-wrapper{margin:15px;text-align:center}.llms-syllabus-wrapper .llms-section-title{margin:25px 0 0}.llms-course-navigation:after,.llms-course-navigation:before{content:" ";display:table}.llms-course-navigation:after{clear:both}.llms-course-navigation .llms-back-to-course,.llms-course-navigation .llms-next-lesson,.llms-course-navigation .llms-prev-lesson{width:49%}.llms-course-navigation .llms-back-to-course,.llms-course-navigation .llms-prev-lesson{float:right;margin-left:.5%}.llms-course-navigation .llms-next-lesson,.llms-course-navigation .llms-prev-lesson+.llms-back-to-course{float:left;margin-right:.5%}.llms-lesson-preview{display:inline-block;margin-top:15px;max-width:100%;position:relative;width:480px}.llms-lesson-preview .llms-lesson-link{background:#f1f1f1;color:#212121;display:block;padding:15px;text-decoration:none}.llms-lesson-preview .llms-lesson-link:after,.llms-lesson-preview .llms-lesson-link:before{content:" ";display:table}.llms-lesson-preview .llms-lesson-link:after{clear:both}.llms-lesson-preview .llms-lesson-link:hover{background:#eaeaea}.llms-lesson-preview .llms-lesson-link:visited{color:#212121}.llms-lesson-preview .llms-lesson-thumbnail{margin-bottom:10px}.llms-lesson-preview .llms-lesson-thumbnail img{display:block;width:100%}.llms-lesson-preview .llms-pre-text{text-align:right}.llms-lesson-preview .llms-lesson-title{font-weight:700;margin:0 auto 10px;text-align:right}.llms-lesson-preview .llms-lesson-title:last-child{margin-bottom:0}.llms-lesson-preview .llms-lesson-excerpt{text-align:right}.llms-lesson-preview .llms-main{float:right;width:100%}.llms-lesson-preview .llms-extra{float:left;width:15%}.llms-lesson-preview .llms-extra+.llms-main{width:85%}.llms-lesson-preview .llms-free-lesson-svg,.llms-lesson-preview .llms-lesson-complete,.llms-lesson-preview .llms-lesson-complete-placeholder,.llms-lesson-preview .llms-lesson-counter{display:block;font-size:32px;margin-bottom:15px}.llms-lesson-preview.is-complete .llms-lesson-complete,.llms-lesson-preview.is-free .llms-lesson-complete{color:#2295ff}.llms-lesson-preview .llms-icon-free{background:#2295ff;border-radius:4px;color:#f1f1f1;display:inline-block;padding:5px 6px 4px;line-height:1;font-size:14px}.llms-lesson-preview.is-incomplete .llms-lesson-complete{color:#cacaca}.llms-lesson-preview .llms-lesson-counter{font-size:16px;line-height:1}.llms-lesson-preview .llms-free-lesson-svg{fill:currentColor;height:23px;width:50px}.llms-lesson-preview p{margin-bottom:0;margin-top:0}.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;text-align:center;margin:45px 5px 5px;padding:0 10px 10px}.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{padding:5px 0;border-top:1px solid #d0d0d0;border-bottom:1px solid #d0d0d0}.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;padding:10px;margin:0 2px 2px}.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{border-color:#cc1818;background-color:rgba(204,24,24,.05)}.llms-invalid-control .llms-invalid-control--msg{background-color:rgba(204,24,24,.05);border-right:4px solid #cc1818;color:#cc1818;font-style:italic;font-size:12px;margin-bottom:0;padding:6px 8px 6px 2px}.llms-pwd-meter{border:1px solid #e35b5b;margin-top:5px;border-radius:4px;overflow:hidden}.llms-pwd-meter>div{background:rgba(227,91,91,.25);font-size:75%;padding:0 5px;width:25%}.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{content:" *";color:#dc5757}.llms-field-option{display:flex;align-items:top;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{margin-top:5px;color:#5a5a5a}.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;padding-top:6px;margin-top:3px}.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{display:flex;align-items:center}.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{box-shadow:0 4px 8px 2px #dedede;border:1px solid #dedede;background:#fff;z-index:999}.llms-instructor .llms-instructor--settings{margin-top:10px}
\ 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..a2c3cccb7c
--- /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%}}@media(min-width:600px){.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{color:#555d66;border-top:1px solid #e0e0e0;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-syllabus-wrapper{margin:15px;text-align:center}.llms-syllabus-wrapper .llms-section-title{margin:25px 0 0}.llms-course-navigation:after,.llms-course-navigation:before{content:" ";display:table}.llms-course-navigation:after{clear:both}.llms-course-navigation .llms-back-to-course,.llms-course-navigation .llms-next-lesson,.llms-course-navigation .llms-prev-lesson{width:49%}.llms-course-navigation .llms-back-to-course,.llms-course-navigation .llms-prev-lesson{float:left;margin-right:.5%}.llms-course-navigation .llms-next-lesson,.llms-course-navigation .llms-prev-lesson+.llms-back-to-course{float:right;margin-left:.5%}.llms-lesson-preview{display:inline-block;margin-top:15px;max-width:100%;position:relative;width:480px}.llms-lesson-preview .llms-lesson-link{background:#f1f1f1;color:#212121;display:block;padding:15px;text-decoration:none}.llms-lesson-preview .llms-lesson-link:after,.llms-lesson-preview .llms-lesson-link:before{content:" ";display:table}.llms-lesson-preview .llms-lesson-link:after{clear:both}.llms-lesson-preview .llms-lesson-link:hover{background:#eaeaea}.llms-lesson-preview .llms-lesson-link:visited{color:#212121}.llms-lesson-preview .llms-lesson-thumbnail{margin-bottom:10px}.llms-lesson-preview .llms-lesson-thumbnail img{display:block;width:100%}.llms-lesson-preview .llms-pre-text{text-align:left}.llms-lesson-preview .llms-lesson-title{font-weight:700;margin:0 auto 10px;text-align:left}.llms-lesson-preview .llms-lesson-title:last-child{margin-bottom:0}.llms-lesson-preview .llms-lesson-excerpt{text-align:left}.llms-lesson-preview .llms-main{float:left;width:100%}.llms-lesson-preview .llms-extra{float:right;width:15%}.llms-lesson-preview .llms-extra+.llms-main{width:85%}.llms-lesson-preview .llms-free-lesson-svg,.llms-lesson-preview .llms-lesson-complete,.llms-lesson-preview .llms-lesson-complete-placeholder,.llms-lesson-preview .llms-lesson-counter{display:block;font-size:32px;margin-bottom:15px}.llms-lesson-preview.is-complete .llms-lesson-complete,.llms-lesson-preview.is-free .llms-lesson-complete{color:#2295ff}.llms-lesson-preview .llms-icon-free{background:#2295ff;border-radius:4px;color:#f1f1f1;display:inline-block;padding:5px 6px 4px;line-height:1;font-size:14px}.llms-lesson-preview.is-incomplete .llms-lesson-complete{color:#cacaca}.llms-lesson-preview .llms-lesson-counter{font-size:16px;line-height:1}.llms-lesson-preview .llms-free-lesson-svg{fill:currentColor;height:23px;width:50px}.llms-lesson-preview p{margin-bottom:0;margin-top:0}.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;text-align:center;margin:45px 5px 5px;padding:0 10px 10px}.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{padding:5px 0;border-top:1px solid #d0d0d0;border-bottom:1px solid #d0d0d0}.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;padding:10px;margin:0 2px 2px}.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{border-color:#cc1818;background-color:rgba(204,24,24,.05)}.llms-invalid-control .llms-invalid-control--msg{background-color:rgba(204,24,24,.05);border-left:4px solid #cc1818;color:#cc1818;font-style:italic;font-size:12px;margin-bottom:0;padding:6px 2px 6px 8px}.llms-pwd-meter{border:1px solid #e35b5b;margin-top:5px;border-radius:4px;overflow:hidden}.llms-pwd-meter>div{background:rgba(227,91,91,.25);font-size:75%;padding:0 5px;width:25%}.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{content:" *";color:#dc5757}.llms-field-option{display:flex;align-items:top;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{margin-top:5px;color:#5a5a5a}.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;padding-top:6px;margin-top:3px}.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{display:flex;align-items:center}.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{box-shadow:0 4px 8px 2px #dedede;border:1px solid #dedede;background:#fff;z-index:999}.llms-instructor .llms-instructor--settings{margin-top:10px}
\ 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..eb1e21bada
--- /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' => '3522d2a2e5e9bf8f231f96c47d7fb93b');
\ No newline at end of file
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..5704248a3d
--- /dev/null
+++ b/libraries/lifterlms-blocks/assets/js/llms-blocks-backwards-compat.js
@@ -0,0 +1 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=76)}({17:function(e,t,r){"use strict";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}r.d(t,"a",(function(){return n}))},22:function(e,t,r){"use strict";function n(e){return(n="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})(e)}function o(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:this;this._map.forEach((function(o,i){null!==i&&"object"===n(i)&&(o=o[1]),e.call(r,o,i,t)}))}},{key:"clear",value:function(){this._map=new Map,this._arrayTreeMap=new Map,this._objectTreeMap=new Map}},{key:"size",get:function(){return this._map.size}}])&&o(t.prototype,r),e}();e.exports=s},28:function(e,t){e.exports=function(e){var t,r=Object.keys(e);return t=function(){var e,t,n;for(e="return {",t=0;t({storeKey:t,selectorName:r,args:n})=>e.select(t)[r](...n)),"@@data/RESOLVE_SELECT":E(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(e=>({storeKey:t,actionName:r,args:n})=>e.dispatch(t)[r](...n))};var T=r(41),I=r.n(T),N=()=>e=>t=>I()(t)?t.then(t=>{if(t)return e(t)}):e(t),A=(e,t)=>()=>r=>n=>{const o=e.select("core/data").getCachedResolvers(t);return Object.entries(o).forEach(([r,o])=>{const i=Object(g.get)(e.stores,[t,"resolvers",r]);i&&i.shouldInvalidate&&o.forEach((o,s)=>{!1===o&&i.shouldInvalidate(n,...s)&&e.dispatch("core/data").invalidateResolution(t,r,s)})}),r(n)};const L=("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 w.a,t)=>{switch(t.type){case"START_RESOLUTION":case"FINISH_RESOLUTION":{const r="START_RESOLUTION"===t.type,n=new w.a(e);return n.set(t.args,r),n}case"START_RESOLUTIONS":case"FINISH_RESOLUTIONS":{const r="START_RESOLUTIONS"===t.type,n=new w.a(e);for(const e of t.args)n.set(e,r);return n}case"INVALIDATE_RESOLUTION":{const r=new w.a(e);return r.delete(t.args),r}}return e});var P=(e={},t)=>{switch(t.type){case"INVALIDATE_RESOLUTION_FOR_STORE":return{};case"INVALIDATE_RESOLUTION_FOR_STORE_SELECTOR":return Object(g.has)(e,[t.selectorName])?Object(g.omit)(e,[t.selectorName]):e;case"START_RESOLUTION":case"FINISH_RESOLUTION":case"START_RESOLUTIONS":case"FINISH_RESOLUTIONS":case"INVALIDATE_RESOLUTION":return L(e,t)}return e};function x(e,t,r){const n=Object(g.get)(e,[t]);if(n)return n.get(r)}function U(e,t,r=[]){return void 0!==x(e,t,r)}function k(e,t,r=[]){return!1===x(e,t,r)}function F(e,t,r=[]){return!0===x(e,t,r)}function D(e){return e}function V(e,t){return{type:"START_RESOLUTION",selectorName:e,args:t}}function M(e,t){return{type:"FINISH_RESOLUTION",selectorName:e,args:t}}function C(e,t){return{type:"START_RESOLUTIONS",selectorName:e,args:t}}function G(e,t){return{type:"FINISH_RESOLUTIONS",selectorName:e,args:t}}function H(e,t){return{type:"INVALIDATE_RESOLUTION",selectorName:e,args:t}}function K(){return{type:"INVALIDATE_RESOLUTION_FOR_STORE"}}function X(e){return{type:"INVALIDATE_RESOLUTION_FOR_STORE_SELECTOR",selectorName:e}}function z(e,t){return{name:e,instantiate:r=>{const i=t.reducer,s=function(e,t,r,n){const o={...t.controls,...j},i=Object(g.mapValues)(o,e=>e.isRegistryControl?e(r):e),s=[A(r,e),N,m()(i)];var c;t.__experimentalUseThunks&&s.push((c=n,()=>e=>t=>"function"==typeof t?t(c):e(t)));const u=[h(...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 O(S()({metadata:P,root:a}),{root:l},Object(g.flowRight)(u))}(e,t,r,{registry:r,get dispatch(){return Object.assign(e=>s.dispatch(e),d())},get select(){return Object.assign(e=>e(s.__unstableOriginalGetState()),p())},get resolveSelect(){return b()}}),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 w.a),e[t].set(r,!0)}}}();let u;const a=function(e,t){return Object(g.mapValues)(e,e=>(...r)=>Promise.resolve(t.dispatch(e(...r))))}({...o,...t.actions},s);let l=function(e,t){return Object(g.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)),...Object(g.mapValues)(t.selectors,e=>(e.isRegistrySelector&&(e.registry=r),(t,...r)=>e(t.root,...r)))},s);if(t.resolvers){const e=function(e,t,r,n){const o=Object(g.mapValues)(e,e=>e.fulfill?e:{...e,fulfill:e});return{resolvers:o,selectors:Object(g.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();U(c,i,e)||(n.markAsRunning(i,e),setTimeout(async()=>{n.clear(i,e),r.dispatch(V(i,e)),await async function(e,t,r,...n){const o=Object(g.get)(t,[r]);if(!o)return;const i=o.fulfill(...n);i&&await e.dispatch(i)}(r,o,i,...e),r.dispatch(M(i,e))}))}(...e),t(...e));return c.hasResolver=!0,c})}}(t.resolvers,l,s,c);u=e.resolvers,l=e.selectors}const f=function(e,t){return Object(g.mapValues)(Object(g.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),p=()=>l,d=()=>a,b=()=>f;s.__unstableOriginalGetState=s.getState,s.getState=()=>s.__unstableOriginalGetState().root;const y=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:p,getResolveSelectors:b,getActions:d,subscribe:y}}}}var B=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=Object(g.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=Object(g.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=Object(g.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=Object(g.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=z(e,t).instantiate(u);return c(e,r),r.store}};return c("core/data",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,Object(g.mapValues)(a,(e,t)=>"function"!=typeof e?e:function(){return u[t].apply(null,arguments)});var a}();B.select,B.resolveSelect,B.dispatch,B.subscribe,B.registerGenericStore,B.registerStore,B.use;const W=B.register;function J(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 q(e){for(var t=1;t 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-rich-text', 'wp-server-side-render', 'wp-url'), 'version' => '0773d67df4d1030cde2039d836bef065');
\ No newline at end of file
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..c7e19ffc84
--- /dev/null
+++ b/libraries/lifterlms-blocks/assets/js/llms-blocks.js
@@ -0,0 +1,22 @@
+!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=75)}([function(e,t){e.exports=window.wp.element},function(e,t){e.exports=window.wp.i18n},function(e,t){e.exports=window.React},function(e,t){e.exports=window.wp.data},function(e,t){e.exports=window.wp.components},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=window.lodash},function(e,t){e.exports=window.wp.blockEditor},function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.default=e.exports,e.exports.__esModule=!0,n(t)}e.exports=n,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=window.wp.blocks},function(e,t){e.exports=window.wp.hooks},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){var r=n(48);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){var r=n(31).default,o=n(9);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?o(e):t},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){function n(e,t){for(var n=0;n=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]}))}(o),o.className=this.props.inputClassName,o.id=this.state.inputId,o.style=n,l.default.createElement("div",{className:this.props.className,style:t},this.renderStyles(),l.default.createElement("input",r({},o,{ref:this.inputRef})),l.default.createElement("div",{ref:this.sizerRef,style:c},e),this.props.placeholder?l.default.createElement("div",{ref:this.placeHolderSizerRef,style:c},this.props.placeholder):null)}}]),t}(i.Component);m.propTypes={className:s.default.string,defaultValue:s.default.any,extraWidth:s.default.oneOfType([s.default.number,s.default.string]),id:s.default.string,injectStyles:s.default.bool,inputClassName:s.default.string,inputRef:s.default.func,inputStyle:s.default.object,minWidth:s.default.oneOfType([s.default.number,s.default.string]),onAutosize:s.default.func,onChange:s.default.func,placeholder:s.default.string,placeholderIsMinWidth:s.default.bool,style:s.default.object,value:s.default.any},m.defaultProps={minWidth:1,injectStyles:!0},t.default=m},function(e,t,n){"use strict";var r=n(58),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},l={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function a(e){return r.isMemo(e)?l:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=l;var c=Object.defineProperty,u=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var l=u(n);f&&(l=l.concat(f(n)));for(var s=a(t),b=a(n),h=0;he.length)&&(t=e.length);for(var n=0,r=new Array(t);ne?p():!0!==t&&(o=setTimeout(r?m:p,void 0===r?e-d:e)))}return"boolean"!=typeof t&&(r=n,n=t,t=void 0),a.cancel=function(){s(),i=!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)},function(e,t){e.exports=window.wp.domReady},function(e,t,n){var r=n(68);e.exports=function(e,t){if(null==e)return{};var n,o,i=r(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){var r=n(72);function o(t,n,i){return"undefined"!=typeof Reflect&&Reflect.get?(e.exports=o=Reflect.get,e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=o=function(e,t,n){var o=r(e,t);if(o){var i=Object.getOwnPropertyDescriptor(o,t);return i.get?i.get.call(n):i.value}},e.exports.default=e.exports,e.exports.__esModule=!0),o(t,n,i||t)}e.exports=o,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=window.wp.url},function(e,t){e.exports=window.wp.notices},,,,,,,,function(e,t,n){},function(e,t){function n(t,r){return e.exports=n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},e.exports.default=e.exports,e.exports.__esModule=!0,n(t,r)}e.exports=n,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){},function(e,t){e.exports=function(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){e.exports=n(52)()},function(e,t,n){"use strict";var r=n(53);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,l){if(l!==r){var s=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 s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array: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:i,resetWarningCache:o};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){var r=n(55),o=n(56),i=n(33),l=n(57);e.exports=function(e){return r(e)||o(e)||i(e)||l()},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){var r=n(32);e.exports=function(e){if(Array.isArray(e))return r(e)},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){"use strict";e.exports=n(59)},function(e,t,n){"use strict";var r="function"==typeof Symbol&&Symbol.for,o=r?Symbol.for("react.element"):60103,i=r?Symbol.for("react.portal"):60106,l=r?Symbol.for("react.fragment"):60107,s=r?Symbol.for("react.strict_mode"):60108,a=r?Symbol.for("react.profiler"):60114,c=r?Symbol.for("react.provider"):60109,u=r?Symbol.for("react.context"):60110,f=r?Symbol.for("react.async_mode"):60111,d=r?Symbol.for("react.concurrent_mode"):60111,p=r?Symbol.for("react.forward_ref"):60112,m=r?Symbol.for("react.suspense"):60113,b=r?Symbol.for("react.suspense_list"):60120,h=r?Symbol.for("react.memo"):60115,v=r?Symbol.for("react.lazy"):60116,g=r?Symbol.for("react.block"):60121,y=r?Symbol.for("react.fundamental"):60117,O=r?Symbol.for("react.responder"):60118,_=r?Symbol.for("react.scope"):60119;function j(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case o:switch(e=e.type){case f:case d:case l:case a:case s:case m:return e;default:switch(e=e&&e.$$typeof){case u:case p:case v:case h:case c:return e;default:return t}}case i:return t}}}function w(e){return j(e)===d}t.AsyncMode=f,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=c,t.Element=o,t.ForwardRef=p,t.Fragment=l,t.Lazy=v,t.Memo=h,t.Portal=i,t.Profiler=a,t.StrictMode=s,t.Suspense=m,t.isAsyncMode=function(e){return w(e)||j(e)===f},t.isConcurrentMode=w,t.isContextConsumer=function(e){return j(e)===u},t.isContextProvider=function(e){return j(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===o},t.isForwardRef=function(e){return j(e)===p},t.isFragment=function(e){return j(e)===l},t.isLazy=function(e){return j(e)===v},t.isMemo=function(e){return j(e)===h},t.isPortal=function(e){return j(e)===i},t.isProfiler=function(e){return j(e)===a},t.isStrictMode=function(e){return j(e)===s},t.isSuspense=function(e){return j(e)===m},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===l||e===d||e===a||e===s||e===m||e===b||"object"==typeof e&&null!==e&&(e.$$typeof===v||e.$$typeof===h||e.$$typeof===c||e.$$typeof===u||e.$$typeof===p||e.$$typeof===y||e.$$typeof===O||e.$$typeof===_||e.$$typeof===g)},t.typeOf=j},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t){e.exports=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e){if(Array.isArray(e))return e},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e,t){var n=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=n){var r,o,i=[],l=!0,s=!1;try{for(n=n.call(e);!(l=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);l=!0);}catch(e){s=!0,o=e}finally{try{l||null==n.return||n.return()}finally{if(s)throw o}}return i}},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){var r=n(8);e.exports=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=r(e)););return e},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"addField",(function(){return ho})),n.d(r,"deleteField",(function(){return vo})),n.d(r,"editField",(function(){return go})),n.d(r,"loadField",(function(){return yo})),n.d(r,"unloadField",(function(){return Oo})),n.d(r,"receiveFields",(function(){return _o})),n.d(r,"renameField",(function(){return jo})),n.d(r,"resetFields",(function(){return wo}));var o={};n.r(o),n.d(o,"fieldExists",(function(){return xo})),n.d(o,"getField",(function(){return Eo})),n.d(o,"getFieldBy",(function(){return ko})),n.d(o,"getFields",(function(){return Co})),n.d(o,"getLoadedFields",(function(){return So})),n.d(o,"isDuplicate",(function(){return Po})),n.d(o,"isLoaded",(function(){return Io}));var i={};n.r(i),n.d(i,"name",(function(){return Bo})),n.d(i,"postTypes",(function(){return Vo})),n.d(i,"settings",(function(){return Uo}));var l={};n.r(l),n.d(l,"name",(function(){return zo})),n.d(l,"postTypes",(function(){return $o})),n.d(l,"settings",(function(){return Wo}));var s={};n.r(s),n.d(s,"postTypes",(function(){return Go})),n.d(s,"name",(function(){return Ko})),n.d(s,"settings",(function(){return Yo}));var a={};n.r(a),n.d(a,"name",(function(){return Jo})),n.d(a,"postTypes",(function(){return Zo})),n.d(a,"settings",(function(){return ei}));var c={};n.r(c),n.d(c,"name",(function(){return ri})),n.d(c,"postTypes",(function(){return oi})),n.d(c,"settings",(function(){return ii}));var u={};n.r(u),n.d(u,"name",(function(){return li})),n.d(u,"postTypes",(function(){return si})),n.d(u,"settings",(function(){return ai}));var f={};n.r(f),n.d(f,"name",(function(){return ci})),n.d(f,"postTypes",(function(){return ui})),n.d(f,"settings",(function(){return fi}));var d={};n.r(d),n.d(d,"name",(function(){return bi})),n.d(d,"postTypes",(function(){return hi})),n.d(d,"settings",(function(){return vi}));var p={};n.r(p),n.d(p,"Search",(function(){return zr})),n.d(p,"SearchPost",(function(){return $r})),n.d(p,"SearchUser",(function(){return Fi})),n.d(p,"SortableList",(function(){return Ms})),n.d(p,"SortableDragHandle",(function(){return Rs}));var m={};n.r(m),n.d(m,"name",(function(){return ia})),n.d(m,"postTypes",(function(){return la})),n.d(m,"composed",(function(){return sa})),n.d(m,"settings",(function(){return ma}));var b={};n.r(b),n.d(b,"name",(function(){return ga})),n.d(b,"postTypes",(function(){return ya})),n.d(b,"composed",(function(){return Oa})),n.d(b,"settings",(function(){return _a}));var h={};n.r(h),n.d(h,"name",(function(){return Ea})),n.d(h,"postTypes",(function(){return ka})),n.d(h,"composed",(function(){return Ca})),n.d(h,"settings",(function(){return Sa}));var v={};n.r(v),n.d(v,"name",(function(){return Ra})),n.d(v,"postTypes",(function(){return Ta})),n.d(v,"composed",(function(){return Ma})),n.d(v,"settings",(function(){return La}));var g={};n.r(g),n.d(g,"name",(function(){return Ua})),n.d(g,"postTypes",(function(){return Ha})),n.d(g,"composed",(function(){return qa})),n.d(g,"settings",(function(){return $a}));var y={};n.r(y),n.d(y,"name",(function(){return Ka})),n.d(y,"composed",(function(){return Ya})),n.d(y,"settings",(function(){return Xa})),n.d(y,"postTypes",(function(){return Ha}));var O={};n.r(O),n.d(O,"name",(function(){return Qa})),n.d(O,"composed",(function(){return Ja})),n.d(O,"settings",(function(){return Za})),n.d(O,"postTypes",(function(){return Ha}));var _={};n.r(_),n.d(_,"name",(function(){return ec})),n.d(_,"composed",(function(){return tc})),n.d(_,"settings",(function(){return nc})),n.d(_,"postTypes",(function(){return Ha}));var j={};n.r(j),n.d(j,"name",(function(){return rc})),n.d(j,"composed",(function(){return oc})),n.d(j,"settings",(function(){return ic})),n.d(j,"postTypes",(function(){return Ha}));var w={};n.r(w),n.d(w,"name",(function(){return lc})),n.d(w,"composed",(function(){return sc})),n.d(w,"settings",(function(){return ac})),n.d(w,"postTypes",(function(){return Ha}));var x={};n.r(x),n.d(x,"name",(function(){return cc})),n.d(x,"composed",(function(){return uc})),n.d(x,"settings",(function(){return fc})),n.d(x,"postTypes",(function(){return Ha}));var E={};n.r(E),n.d(E,"name",(function(){return dc})),n.d(E,"composed",(function(){return pc})),n.d(E,"settings",(function(){return mc})),n.d(E,"postTypes",(function(){return Ha}));var k={};n.r(k),n.d(k,"name",(function(){return bc})),n.d(k,"postTypes",(function(){return hc})),n.d(k,"composed",(function(){return vc})),n.d(k,"settings",(function(){return gc}));var C={};n.r(C),n.d(C,"name",(function(){return _c})),n.d(C,"composed",(function(){return jc})),n.d(C,"settings",(function(){return xc})),n.d(C,"postTypes",(function(){return Ha}));var S={};n.r(S),n.d(S,"name",(function(){return Ec})),n.d(S,"postTypes",(function(){return kc})),n.d(S,"composed",(function(){return Cc})),n.d(S,"settings",(function(){return Sc}));var P={};n.r(P),n.d(P,"name",(function(){return Pc})),n.d(P,"postTypes",(function(){return Ic})),n.d(P,"composed",(function(){return Dc})),n.d(P,"settings",(function(){return Rc}));var I={};n.r(I),n.d(I,"name",(function(){return Tc})),n.d(I,"composed",(function(){return Mc})),n.d(I,"settings",(function(){return Lc})),n.d(I,"postTypes",(function(){return Ha}));var D={};n.r(D),n.d(D,"name",(function(){return Ac})),n.d(D,"composed",(function(){return Nc})),n.d(D,"settings",(function(){return Fc})),n.d(D,"postTypes",(function(){return Ha}));var R={};n.r(R),n.d(R,"name",(function(){return Bc})),n.d(R,"composed",(function(){return Vc})),n.d(R,"settings",(function(){return Uc})),n.d(R,"postTypes",(function(){return Ha}));var T={};n.r(T),n.d(T,"name",(function(){return Hc})),n.d(T,"composed",(function(){return qc})),n.d(T,"settings",(function(){return zc})),n.d(T,"postTypes",(function(){return Ta}));var M={};n.r(M),n.d(M,"name",(function(){return $c})),n.d(M,"postTypes",(function(){return Wc})),n.d(M,"composed",(function(){return Gc})),n.d(M,"settings",(function(){return Kc}));var L={};n.r(L),n.d(L,"name",(function(){return Yc})),n.d(L,"composed",(function(){return Xc})),n.d(L,"settings",(function(){return Qc})),n.d(L,"postTypes",(function(){return Ta}));var A={};n.r(A),n.d(A,"name",(function(){return Jc})),n.d(A,"composed",(function(){return Zc})),n.d(A,"settings",(function(){return eu})),n.d(A,"postTypes",(function(){return Ha}));var N={};n.r(N),n.d(N,"name",(function(){return tu})),n.d(N,"composed",(function(){return nu})),n.d(N,"settings",(function(){return ru})),n.d(N,"postTypes",(function(){return Ha}));var F={};n.r(F),n.d(F,"confirmGroup",(function(){return m})),n.d(F,"checkboxes",(function(){return b})),n.d(F,"radio",(function(){return h})),n.d(F,"select",(function(){return v})),n.d(F,"text",(function(){return g})),n.d(F,"textarea",(function(){return y})),n.d(F,"redeemVoucher",(function(){return O})),n.d(F,"userAddress",(function(){return S})),n.d(F,"userAddressStreet",(function(){return P})),n.d(F,"userAddressStreetPrimary",(function(){return I})),n.d(F,"userAddressStreetSecondary",(function(){return D})),n.d(F,"userAddressCity",(function(){return R})),n.d(F,"userAddressCountry",(function(){return T})),n.d(F,"userAddressRegion",(function(){return M})),n.d(F,"userAddressState",(function(){return L})),n.d(F,"userAddressPostalCode",(function(){return A})),n.d(F,"userDisplayName",(function(){return _})),n.d(F,"userEmail",(function(){return w})),n.d(F,"userFirstName",(function(){return x})),n.d(F,"userLastName",(function(){return E})),n.d(F,"userLogin",(function(){return j})),n.d(F,"userNames",(function(){return k})),n.d(F,"userPassword",(function(){return C})),n.d(F,"userPhone",(function(){return N}));var B=n(5),V=n.n(B),U=(n(47),n(11));function H(e,t){var n=!0;return(-1!==window.llms.dynamic_blocks.indexOf(t)||e.supports&&!1===e.supports.llms_visibility||Object(U.applyFilters)("llms_block_visibility_disallowed_blocks",["core/freeform"]).includes(t))&&(n=!1),Object(U.applyFilters)("llms_block_supports_visibility",n,e,t)}var q=n(0),z=n(1),$=n(16),W=n(7),G=n(4),K=n(12),Y=n.n(K),X=n(15),Q=n.n(X),J=n(13),Z=n.n(J),ee=n(14),te=n.n(ee),ne=n(8),re=n.n(ne),oe=(n(49),{all:Object(z.__)("everyone","lifterlms"),enrolled:Object(z.__)("enrolled users","lifterlms"),not_enrolled:Object(z.__)("non-enrolled users or visitors","lifterlms"),logged_in:Object(z.__)("logged in users","lifterlms"),logged_out:Object(z.__)("logged out users","lifterlms")}),ie=Object.keys(oe).map((function(e){return{label:oe[e],value:e}}));var le=function(e){Z()(o,e);var t,n,r=(t=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,r=re()(t);if(n){var o=re()(this).constructor;e=Reflect.construct(r,arguments,o)}else e=r.apply(this,arguments);return te()(this,e)});function o(){return Y()(this,o),r.apply(this,arguments)}return Q()(o,[{key:"render",value:function(){var e,t=this.props.attributes.llms_visibility,n=this.props.children;return"all"===t?n:Object(q.createElement)("div",{className:"llms-block-visibility"},n,Object(q.createElement)("div",{className:"llms-block-visibility--indicator"},Object(q.createElement)(G.Dashicon,{icon:"visibility"}),Object(q.createElement)("span",{className:"llms-block-visibility--msg"},Object(z.sprintf)(// Translators: %s = visibility setting label.
+Object(z.__)("This block is only visible to %s","lifterlms"),oe[e=t]||e))))}}]),o}(q.Component),se=n(9),ae=n.n(se),ce=n(34);function ue(){return(ue=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var de=n(17),pe=n(2),me=n.n(pe),be=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?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.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?ke(Ae,--Me):0,Re--,10===Le&&(Re=1,De--),Le}function Ve(){return Le=Me2||ze(Le)>3?"":" "}function Ye(e,t){for(;--t&&Ve()&&!(Le<48||Le>102||Le>57&&Le<65||Le>70&&Le<97););return qe(e,He()+(t<6&&32==Ue()&&32==Ve()))}function Xe(e,t){for(;Ve()&&e+Le!==57&&(e+Le!==84||47!==Ue()););return"/*"+qe(t,Me-1)+"*"+je(47===e?e:Ve())}function Qe(e){for(;!ze(Ue());)Ve();return qe(e,Me)}function Je(e,t,n,r,o,i,l,s,a,c,u){for(var f=o-1,d=0===o?i:[""],p=Pe(d),m=0,b=0,h=0;m0?d[v]+" "+g:xe(g,/&\f/g,d[v])))&&(a[h++]=y);return Ne(e,t,n,0===o?"rule":s,a,c,u)}function Ze(e,t,n){return Ne(e,t,n,ye,je(Le),Ce(e,2,-2),0)}function et(e,t,n,r){return Ne(e,t,n,Oe,Ce(e,0,r),Ce(e,r+1,-1),r)}function tt(e,t){for(var n="",r=Pe(e),o=0;o6)switch(ke(t,n+1)){case 109:if(45!==ke(t,n+4))break;case 102:return xe(t,/(.+:)(.+)-([^]+)/,"$1"+ge+"$2-$3$1"+ve+(108==ke(t,n+3)?"$3":"$2-$3"))+t;case 115:return~Ee(t,"stretch")?e(xe(t,"stretch","fill-available"),n)+t:t}break;case 4949:if(115!==ke(t,n+1))break;case 6444:switch(ke(t,Se(t)-3-(~Ee(t,"!important")&&10))){case 107:return xe(t,":",":"+ge)+t;case 101:return xe(t,/(.+:)([^;!]+)(;|!.+)?/,"$1"+ge+(45===ke(t,14)?"inline-":"")+"box$3$1"+ge+"$2$3$1"+he+"$2box$3")+t}break;case 5936:switch(ke(t,n+11)){case 114:return ge+t+he+xe(t,/[svh]\w+-[tblr]{2}/,"tb")+t;case 108:return ge+t+he+xe(t,/[svh]\w+-[tblr]{2}/,"tb-rl")+t;case 45:return ge+t+he+xe(t,/[svh]\w+-[tblr]{2}/,"lr")+t}return ge+t+he+t+t}return t}(e.value,e.length);break;case"@keyframes":return tt([Fe(xe(e.value,"@","@"+ge),e,"")],r);case"rule":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 tt([Fe(xe(t,/:(read-\w+)/,":-moz-$1"),e,"")],r);case"::placeholder":return tt([Fe(xe(t,/:(plac\w+)/,":"+ge+"input-$1"),e,""),Fe(xe(t,/:(plac\w+)/,":-moz-$1"),e,""),Fe(xe(t,/:(plac\w+)/,he+"input-$1"),e,"")],r)}return""}))}}],ct=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){document.head.appendChild(e),e.setAttribute("data-s","")}))}var r,o,i=e.stylisPlugins||at,l={},s=[];r=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll("style[data-emotion]"),(function(e){var n=e.getAttribute("data-emotion").split(" ");if(n[0]===t){for(var r=1;r0&&Se(x)-d&&Ie(m>32?et(x+";",o,r,d-1):et(xe(x," ","")+";",o,r,d-2),c);break;case 59:x+=";";default:if(Ie(w=Je(x,n,r,u,f,i,a,O,_=[],j=[],d),l),123===y)if(0===f)e(x,n,w,w,_,l,d,a,j);else switch(p){case 100:case 109:case 115:e(t,w,w,o&&Ie(Je(t,w,w,0,0,i,a,O,i,_=[],d),j),i,j,d,a,o?_:j);break;default:e(x,w,w,w,[""],j,d,a,j)}}u=f=m=0,h=g=1,O=x="",d=s;break;case 58:d=1+Se(x),m=b;default:if(h<1)if(123==y)--h;else if(125==y&&0==h++&&125==Be())continue;switch(x+=je(y),y*h){case 38:g=f>0?1:(x+="\f",-1);break;case 44:a[u++]=(Se(x)-1)*g,g=1;break;case 64:45===Ue()&&(x+=Ge(Ve())),p=Ue(),f=Se(O=x+=Qe(He())),y++;break;case 45:45===b&&2==Se(x)&&(h=0)}}return l}("",null,null,null,[""],e=$e(e),0,[0],e))}(e?e+"{"+t.styles+"}":t.styles),f),r&&(d.inserted[t.name]=!0)};var d={key:t,sheet:new be({key:t,container:r,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend}),nonce:e.nonce,inserted:l,registered:{},insert:o};return d.sheet.hydrate(s),d};function ut(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}n(30);var ft=function(e,t,n){var r=e.key+"-"+t.name;if(!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles),void 0===e.inserted[t.name]){var o=t;do{e.insert(t===o?"."+r:"",o,e.sheet,!0),o=o.next}while(void 0!==o)}},dt=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=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(o){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)},pt={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},mt=/[A-Z]|^ms/g,bt=/_EMO_([^_]+?)_([^]*?)_EMO_/g,ht=function(e){return 45===e.charCodeAt(1)},vt=function(e){return null!=e&&"boolean"!=typeof e},gt=ot((function(e){return ht(e)?e:e.replace(mt,"-$&").toLowerCase()})),yt=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(bt,(function(e,t,n){return _t={name:t,styles:n,next:_t},t}))}return 1===pt[e]||ht(e)||"number"!=typeof t||0===t?t:t+"px"};function Ot(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 _t={name:n.name,styles:n.styles,next:_t},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)_t={name:r.name,styles:r.styles,next:_t},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o-1}function ln(e){return on(e)?window.pageYOffset:e.scrollTop}function sn(e,t){on(e)?window.scrollTo(0,t):e.scrollTop=t}function an(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function cn(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:200,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Zt,o=ln(e),i=t-o,l=10,s=0;function a(){var t=an(s+=l,o,i,n);sn(e,t),s=p)return{placement:"bottom",maxHeight:t};if(w>=p&&!l)return i&&cn(a,x,160),{placement:"bottom",maxHeight:t};if(!l&&w>=r||l&&_>=r)return i&&cn(a,x,160),{placement:"bottom",maxHeight:l?_-g:w-g};if("auto"===o||l){var k=t,C=l?O:j;return C>=r&&(k=Math.min(C-g-s.controlHeight,t)),{placement:"top",maxHeight:k}}if("bottom"===o)return i&&sn(a,x),{placement:"bottom",maxHeight:t};break;case"top":if(O>=p)return{placement:"top",maxHeight:t};if(j>=p&&!l)return i&&cn(a,E,160),{placement:"top",maxHeight:t};if(!l&&j>=r||l&&O>=r){var S=t;return(!l&&j>=r||l&&O>=r)&&(S=l?O-y:j-y),i&&cn(a,E,160),{placement:"top",maxHeight:S}}return{placement:"bottom",maxHeight:t};default:throw new Error('Invalid placement provided "'.concat(o,'".'))}return c}var hn=function(e){return"auto"===e?"bottom":e},vn=Object(pe.createContext)({getPortalPlacement:null}),gn=function(e){$t(n,e);var t=Jt(n);function n(){var e;Ut(this,n);for(var r=arguments.length,o=new Array(r),i=0;ie.length)&&(t=e.length);for(var n=0,r=new Array(t);n0,b=f-d-u,h=!1;b>t&&l.current&&(r&&r(e),l.current=!1),m&&s.current&&(i&&i(e),s.current=!1),m&&t>b?(n&&!l.current&&n(e),p.scrollTop=f,h=!0,l.current=!0):!m&&-t>u&&(o&&!s.current&&o(e),p.scrollTop=0,h=!0,s.current=!0),h&&function(e){e.preventDefault(),e.stopPropagation()}(e)}}),[]),f=Object(pe.useCallback)((function(e){u(e,e.deltaY)}),[u]),d=Object(pe.useCallback)((function(e){a.current=e.changedTouches[0].clientY}),[]),p=Object(pe.useCallback)((function(e){var t=a.current-e.changedTouches[0].clientY;u(e,t)}),[u]),m=Object(pe.useCallback)((function(e){if(e){var t=!!mn&&{passive:!1};"function"==typeof e.addEventListener&&e.addEventListener("wheel",f,t),"function"==typeof e.addEventListener&&e.addEventListener("touchstart",d,t),"function"==typeof e.addEventListener&&e.addEventListener("touchmove",p,t)}}),[p,d,f]),b=Object(pe.useCallback)((function(e){e&&("function"==typeof e.removeEventListener&&e.removeEventListener("wheel",f,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchstart",d,!1),"function"==typeof e.removeEventListener&&e.removeEventListener("touchmove",p,!1))}),[p,d,f]);return Object(pe.useEffect)((function(){if(t){var e=c.current;return m(e),function(){b(e)}}}),[t,m,b]),function(e){c.current=e}}({isEnabled:void 0===r||r,onBottomArrive:e.onBottomArrive,onBottomLeave:e.onBottomLeave,onTopArrive:e.onTopArrive,onTopLeave:e.onTopLeave}),i=function(e){var t=e.isEnabled,n=e.accountForScrollbars,r=void 0===n||n,o=Object(pe.useRef)({}),i=Object(pe.useRef)(null),l=Object(pe.useCallback)((function(e){if(br){var t=document.body,n=t&&t.style;if(r&&cr.forEach((function(e){var t=n&&n[e];o.current[e]=t})),r&&hr<1){var i=parseInt(o.current.paddingRight,10)||0,l=document.body?document.body.clientWidth:0,s=window.innerWidth-l+i||0;Object.keys(ur).forEach((function(e){var t=ur[e];n&&(n[e]=t)})),n&&(n.paddingRight="".concat(s,"px"))}t&&mr()&&(t.addEventListener("touchmove",fr,vr),e&&(e.addEventListener("touchstart",pr,vr),e.addEventListener("touchmove",dr,vr))),hr+=1}}),[]),s=Object(pe.useCallback)((function(e){if(br){var t=document.body,n=t&&t.style;hr=Math.max(hr-1,0),r&&hr<1&&cr.forEach((function(e){var t=o.current[e];n&&(n[e]=t)})),t&&mr()&&(t.removeEventListener("touchmove",fr,vr),e&&(e.removeEventListener("touchstart",pr,vr),e.removeEventListener("touchmove",dr,vr)))}}),[]);return Object(pe.useEffect)((function(){if(t){var e=i.current;return l(e),function(){s(e)}}}),[t,l,s]),function(e){i.current=e}}({isEnabled:n});return Tt(me.a.Fragment,null,n&&Tt("div",{onClick:gr,css:yr}),t((function(e){o(e),i(e)})))}var _r={clearIndicator:Mn,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,o=r.colors,i=r.borderRadius,l=r.spacing;return{label:"control",alignItems:"center",backgroundColor:t?o.neutral5:o.neutral0,borderColor:t?o.neutral10:n?o.primary:o.neutral20,borderRadius:i,borderStyle:"solid",borderWidth:1,boxShadow:n?"0 0 0 1px ".concat(o.primary):null,cursor:"default",display:"flex",flexWrap:"wrap",justifyContent:"space-between",minHeight:l.controlHeight,outline:"0 !important",position:"relative",transition:"all 100ms","&:hover":{borderColor:n?o.primary:o.neutral30}}},dropdownIndicator:Tn,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,o=n.colors;return{label:"indicatorSeparator",alignSelf:"stretch",backgroundColor:t?o.neutral10:o.neutral20,marginBottom:2*r,marginTop:2*r,width:1}},input:function(e){var t=e.isDisabled,n=e.theme,r=n.spacing,o=n.colors;return{margin:r.baseUnit/2,paddingBottom:r.baseUnit/2,paddingTop:r.baseUnit/2,visibility:t?"hidden":"visible",color:o.neutral80}},loadingIndicator:function(e){var t=e.isFocused,n=e.size,r=e.theme,o=r.colors,i=r.spacing.baseUnit;return{label:"loadingIndicator",color:t?o.neutral60:o.neutral20,display:"flex",padding:2*i,transition:"color 150ms",alignSelf:"center",fontSize:n,lineHeight:1,marginRight:n,textAlign:"center",verticalAlign:"middle"}},loadingMessage:_n,menu:function(e){var t,n=e.placement,r=e.theme,o=r.borderRadius,i=r.spacing,l=r.colors;return t={label:"menu"},Object(de.a)(t,function(e){return e?{bottom:"top",top:"bottom"}[e]:"bottom"}(n),"100%"),Object(de.a)(t,"backgroundColor",l.neutral0),Object(de.a)(t,"borderRadius",o),Object(de.a)(t,"boxShadow","0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)"),Object(de.a)(t,"marginBottom",i.menuGutter),Object(de.a)(t,"marginTop",i.menuGutter),Object(de.a)(t,"position","absolute"),Object(de.a)(t,"width","100%"),Object(de.a)(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,o=e.cropWithEllipsis;return{borderRadius:n/2,color:r.neutral80,fontSize:"85%",overflow:"hidden",padding:3,paddingLeft:6,textOverflow:o?"ellipsis":null,whiteSpace:"nowrap"}},multiValueRemove:function(e){var t=e.theme,n=t.spacing,r=t.borderRadius,o=t.colors;return{alignItems:"center",borderRadius:r/2,backgroundColor:e.isFocused&&o.dangerLight,display:"flex",paddingLeft:n.baseUnit,paddingRight:n.baseUnit,":hover":{backgroundColor:o.dangerLight,color:o.danger}}},noOptionsMessage:On,option:function(e){var t=e.isDisabled,n=e.isFocused,r=e.isSelected,o=e.theme,i=o.spacing,l=o.colors;return{label:"option",backgroundColor:r?l.primary:n?l.primary25:"transparent",color:t?l.neutral20:r?l.neutral0:"inherit",cursor:"default",display:"block",fontSize:"inherit",padding:"".concat(2*i.baseUnit,"px ").concat(3*i.baseUnit,"px"),width:"100%",userSelect:"none",WebkitTapHighlightColor:"rgba(0, 0, 0, 0)",":active":{backgroundColor:!t&&(r?l.primary:l.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,o=n.colors;return{label:"singleValue",color:t?o.neutral40:o.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"}}},jr={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}},wr={"aria-live":"polite",backspaceRemovesValue:!0,blurInputOnSelect:un(),captureMenuScroll:!un(),closeMenuOnSelect:!0,closeMenuOnScroll:!1,components:{},controlShouldRenderValue:!0,escapeClearsValue:!1,filterOption:function(e,t){var n=Yt({ignoreCase:!0,ignoreAccents:!0,stringify:sr,trim:!0,matchFrom:"any"},void 0),r=n.ignoreCase,o=n.ignoreAccents,i=n.stringify,l=n.trim,s=n.matchFrom,a=l?lr(t):t,c=l?lr(i(e)):i(e);return r&&(a=a.toLowerCase(),c=c.toLowerCase()),o&&(a=ir(a),c=or(c)),"start"===s?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 xr(e,t,n,r){return{type:"option",data:t,isDisabled:Ir(e,t,n),isSelected:Dr(e,t,n),label:Sr(e,t),value:Pr(e,t),index:r}}function Er(e,t){return e.options.map((function(n,r){if(n.options){var o=n.options.map((function(n,r){return xr(e,n,t,r)})).filter((function(t){return Cr(e,t)}));return o.length>0?{type:"group",data:n,options:o,index:r}:void 0}var i=xr(e,n,t,r);return Cr(e,i)?i:void 0})).filter((function(e){return!!e}))}function kr(e){return e.reduce((function(e,t){return"group"===t.type?e.push.apply(e,$n(t.options.map((function(e){return e.data})))):e.push(t.data),e}),[])}function Cr(e,t){var n=e.inputValue,r=void 0===n?"":n,o=t.data,i=t.isSelected,l=t.label,s=t.value;return(!Tr(e)||!i)&&Rr(e,{label:l,value:s,data:o},r)}var Sr=function(e,t){return e.getOptionLabel(t)},Pr=function(e,t){return e.getOptionValue(t)};function Ir(e,t,n){return"function"==typeof e.isOptionDisabled&&e.isOptionDisabled(t,n)}function Dr(e,t,n){if(n.indexOf(t)>-1)return!0;if("function"==typeof e.isOptionSelected)return e.isOptionSelected(t,n);var r=Pr(e,t);return n.some((function(t){return Pr(e,t)===r}))}function Rr(e,t,n){return!e.filterOption||e.filterOption(t,n)}var Tr=function(e){var t=e.hideSelectedOptions,n=e.isMulti;return void 0===t?n:t},Mr=1,Lr=function(e){$t(n,e);var t=Jt(n);function n(e){var r;return Ut(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,o=n.onChange,i=n.name;t.name=i,r.ariaOnChange(e,t),o(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,o=r.props,i=o.closeMenuOnSelect,l=o.isMulti;r.onInputChange("",{action:"set-value"}),i&&(r.setState({inputIsHiddenAfterUpdate:!l}),r.onMenuClose()),r.setState({clearFocusValueOnUpdate:!0}),r.onChange(e,{action:t,option:n})},r.selectOption=function(e){var t=r.props,n=t.blurInputOnSelect,o=t.isMulti,i=t.name,l=r.state.selectValue,s=o&&r.isOptionSelected(e,l),a=r.isOptionDisabled(e,l);if(s){var c=r.getOptionValue(e);r.setValue(l.filter((function(e){return r.getOptionValue(e)!==c})),"deselect-option",e)}else{if(a)return void r.ariaOnChange(e,{action:"select-option",name:i});o?r.setValue([].concat($n(l),[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,o=r.getOptionValue(e),i=n.filter((function(e){return r.getOptionValue(e)!==o})),l=t?i:i[0]||null;r.onChange(l,{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],o=t.slice(0,t.length-1),i=e?o:o[0]||null;r.onChange(i,{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||i>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 Tr(r.props)},r.onKeyDown=function(e){var t=r.props,n=t.isMulti,o=t.backspaceRemovesValue,i=t.escapeClearsValue,l=t.inputValue,s=t.isClearable,a=t.isDisabled,c=t.menuIsOpen,u=t.onKeyDown,f=t.tabSelectsValue,d=t.openMenuOnFocus,p=r.state,m=p.focusedOption,b=p.focusedValue,h=p.selectValue;if(!(a||"function"==typeof u&&(u(e),e.defaultPrevented))){switch(r.blockOptionHover=!0,e.key){case"ArrowLeft":if(!n||l)return;r.focusValue("previous");break;case"ArrowRight":if(!n||l)return;r.focusValue("next");break;case"Delete":case"Backspace":if(l)return;if(b)r.removeValue(b);else{if(!o)return;n?r.popValue():s&&r.clearValue()}break;case"Tab":if(r.isComposing)return;if(e.shiftKey||!c||!f||!m||d&&r.isOptionSelected(m,h))return;r.selectOption(m);break;case"Enter":if(229===e.keyCode)break;if(c){if(!m)return;if(r.isComposing)return;r.selectOption(m);break}return;case"Escape":c?(r.setState({inputIsHiddenAfterUpdate:!1}),r.onInputChange("",{action:"menu-close"}),r.onMenuClose()):s&&i&&r.clearValue();break;case" ":if(l)return;if(!c){r.openMenu("first");break}if(!m)return;r.selectOption(m);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||++Mr),r.state.selectValue=nn(e.value),r}return qt(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,o,i,l=this.props,s=l.isDisabled,a=l.menuIsOpen,c=this.state.isFocused;(c&&!s&&e.isDisabled||c&&a&&!e.menuIsOpen)&&this.focusInput(),c&&s&&!e.isDisabled&&this.setState({isFocused:!1},this.onMenuClose),this.menuListRef&&this.focusedOptionRef&&this.scrollToFocusedOptionOnUpdate&&(t=this.menuListRef,n=this.focusedOptionRef,r=t.getBoundingClientRect(),o=n.getBoundingClientRect(),i=n.offsetHeight/3,o.bottom+i>r.bottom?sn(t,Math.min(n.offsetTop+n.clientHeight-t.offsetHeight+i,t.scrollHeight)):o.top-i-1&&(l=s)}this.scrollToFocusedOptionOnUpdate=!(o&&this.menuListRef),this.setState({inputIsHiddenAfterUpdate:!1,focusedValue:null,focusedOption:i[l]},(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 o=n.indexOf(r);r||(o=-1);var i=n.length-1,l=-1;if(n.length){switch(e){case"previous":l=0===o?0:-1===o?i:o-1;break;case"next":o>-1&&o0&&void 0!==arguments[0]?arguments[0]:"first",t=this.props.pageSize,n=this.state.focusedOption,r=this.getFocusableOptions();if(r.length){var o=0,i=r.indexOf(n);n||(i=-1),"up"===e?o=i>0?i-1:r.length-1:"down"===e?o=(i+1)%r.length:"pageup"===e?(o=i-t)<0&&(o=0):"pagedown"===e?(o=i+t)>r.length-1&&(o=r.length-1):"last"===e&&(o=r.length-1),this.scrollToFocusedOptionOnUpdate=!0,this.setState({focusedOption:r[o],focusedValue:null})}}},{key:"getTheme",value:function(){return this.props.theme?"function"==typeof this.props.theme?this.props.theme(jr):Yt(Yt({},jr),this.props.theme):jr}},{key:"getCommonProps",value:function(){var e=this.clearValue,t=this.cx,n=this.getStyles,r=this.getValue,o=this.selectOption,i=this.setValue,l=this.props,s=l.isMulti,a=l.isRtl,c=l.options;return{clearValue:e,cx:t,getStyles:n,getValue:r,hasValue:this.hasValue(),isMulti:s,isRtl:a,options:c,selectOption:o,selectProps:l,setValue:i,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 Ir(this.props,e,t)}},{key:"isOptionSelected",value:function(e,t){return Dr(this.props,e,t)}},{key:"filterOption",value:function(e,t){return Rr(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,o=e.inputValue,i=e.tabIndex,l=e.form,s=this.getComponents().Input,a=this.state.inputIsHidden,c=this.commonProps,u=r||this.getElementId("input"),f={"aria-autocomplete":"list","aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"]};return n?me.a.createElement(s,ue({},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:i,form:l,type:"text",value:o},f)):me.a.createElement(ar,ue({id:u,innerRef:this.getInputRef,onBlur:this.onInputBlur,onChange:Zt,onFocus:this.onInputFocus,readOnly:!0,disabled:t,tabIndex:i,form:l,value:""},f))}},{key:"renderPlaceholderOrValue",value:function(){var e=this,t=this.getComponents(),n=t.MultiValue,r=t.MultiValueContainer,o=t.MultiValueLabel,i=t.MultiValueRemove,l=t.SingleValue,s=t.Placeholder,a=this.commonProps,c=this.props,u=c.controlShouldRenderValue,f=c.isDisabled,d=c.isMulti,p=c.inputValue,m=c.placeholder,b=this.state,h=b.selectValue,v=b.focusedValue,g=b.isFocused;if(!this.hasValue()||!u)return p?null:me.a.createElement(s,ue({},a,{key:"placeholder",isDisabled:f,isFocused:g}),m);if(d)return h.map((function(t,l){var s=t===v;return me.a.createElement(n,ue({},a,{components:{Container:r,Label:o,Remove:i},isFocused:s,isDisabled:f,key:"".concat(e.getOptionValue(t)).concat(l),index:l,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(p)return null;var y=h[0];return me.a.createElement(l,ue({},a,{data:y,isDisabled:f}),this.formatOptionLabel(y,"value"))}},{key:"renderClearIndicator",value:function(){var e=this.getComponents().ClearIndicator,t=this.commonProps,n=this.props,r=n.isDisabled,o=n.isLoading,i=this.state.isFocused;if(!this.isClearable()||!e||r||!this.hasValue()||o)return null;var l={onMouseDown:this.onClearIndicatorMouseDown,onTouchEnd:this.onClearIndicatorTouchEnd,"aria-hidden":"true"};return me.a.createElement(e,ue({},t,{innerProps:l,isFocused:i}))}},{key:"renderLoadingIndicator",value:function(){var e=this.getComponents().LoadingIndicator,t=this.commonProps,n=this.props,r=n.isDisabled,o=n.isLoading,i=this.state.isFocused;return e&&o?me.a.createElement(e,ue({},t,{innerProps:{"aria-hidden":"true"},isDisabled:r,isFocused:i})):null}},{key:"renderIndicatorSeparator",value:function(){var e=this.getComponents(),t=e.DropdownIndicator,n=e.IndicatorSeparator;if(!t||!n)return null;var r=this.commonProps,o=this.props.isDisabled,i=this.state.isFocused;return me.a.createElement(n,ue({},r,{isDisabled:o,isFocused:i}))}},{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,o={onMouseDown:this.onDropdownIndicatorMouseDown,onTouchEnd:this.onDropdownIndicatorTouchEnd,"aria-hidden":"true"};return me.a.createElement(e,ue({},t,{innerProps:o,isDisabled:n,isFocused:r}))}},{key:"renderMenu",value:function(){var e=this,t=this.getComponents(),n=t.Group,r=t.GroupHeading,o=t.Menu,i=t.MenuList,l=t.MenuPortal,s=t.LoadingMessage,a=t.NoOptionsMessage,c=t.Option,u=this.commonProps,f=this.state.focusedOption,d=this.props,p=d.captureMenuScroll,m=d.inputValue,b=d.isLoading,h=d.loadingMessage,v=d.minMenuHeight,g=d.maxMenuHeight,y=d.menuIsOpen,O=d.menuPlacement,_=d.menuPosition,j=d.menuPortalTarget,w=d.menuShouldBlockScroll,x=d.menuShouldScrollIntoView,E=d.noOptionsMessage,k=d.onMenuScrollToTop,C=d.onMenuScrollToBottom;if(!y)return null;var S,P=function(t,n){var r=t.type,o=t.data,i=t.isDisabled,l=t.isSelected,s=t.label,a=t.value,d=f===o,p=i?void 0:function(){return e.onOptionHover(o)},m=i?void 0:function(){return e.selectOption(o)},b="".concat(e.getElementId("option"),"-").concat(n),h={id:b,onClick:m,onMouseMove:p,onMouseOver:p,tabIndex:-1};return me.a.createElement(c,ue({},u,{innerProps:h,data:o,isDisabled:i,isSelected:l,key:b,label:s,type:r,value:a,isFocused:d,innerRef:d?e.getFocusedOptionRef:void 0}),e.formatOptionLabel(t.data,"menu"))};if(this.hasOptions())S=this.getCategorizedOptions().map((function(t){if("group"===t.type){var o=t.data,i=t.options,l=t.index,s="".concat(e.getElementId("group"),"-").concat(l),a="".concat(s,"-heading");return me.a.createElement(n,ue({},u,{key:s,data:o,options:i,Heading:r,headingProps:{id:a,data:t.data},label:e.formatGroupLabel(t.data)}),t.options.map((function(e){return P(e,"".concat(l,"-").concat(e.index))})))}if("option"===t.type)return P(t,"".concat(t.index))}));else if(b){var I=h({inputValue:m});if(null===I)return null;S=me.a.createElement(s,u,I)}else{var D=E({inputValue:m});if(null===D)return null;S=me.a.createElement(a,u,D)}var R={minMenuHeight:v,maxMenuHeight:g,menuPlacement:O,menuPosition:_,menuShouldScrollIntoView:x},T=me.a.createElement(gn,ue({},u,R),(function(t){var n=t.ref,r=t.placerProps,l=r.placement,s=r.maxHeight;return me.a.createElement(o,ue({},u,R,{innerRef:n,innerProps:{onMouseDown:e.onMenuMouseDown,onMouseMove:e.onMenuMouseMove},isLoading:b,placement:l}),me.a.createElement(Or,{captureEnabled:p,onTopArrive:k,onBottomArrive:C,lockEnabled:w},(function(t){return me.a.createElement(i,ue({},u,{innerRef:function(n){e.getMenuListRef(n),t(n)},isLoading:b,maxHeight:s,focusedOption:f}),S)})))}));return j||"fixed"===_?me.a.createElement(l,ue({},u,{appendTo:j,controlElement:this.controlRef,menuPlacement:O,menuPosition:_}),T):T}},{key:"renderFormField",value:function(){var e=this,t=this.props,n=t.delimiter,r=t.isDisabled,o=t.isMulti,i=t.name,l=this.state.selectValue;if(i&&!r){if(o){if(n){var s=l.map((function(t){return e.getOptionValue(t)})).join(n);return me.a.createElement("input",{name:i,type:"hidden",value:s})}var a=l.length>0?l.map((function(t,n){return me.a.createElement("input",{key:"i-".concat(n),name:i,type:"hidden",value:e.getOptionValue(t)})})):me.a.createElement("input",{name:i,type:"hidden"});return me.a.createElement("div",null,a)}var c=l[0]?this.getOptionValue(l[0]):"";return me.a.createElement("input",{name:i,type:"hidden",value:c})}}},{key:"renderLiveRegion",value:function(){var e=this.commonProps,t=this.state,n=t.ariaSelection,r=t.focusedOption,o=t.focusedValue,i=t.isFocused,l=t.selectValue,s=this.getFocusableOptions();return me.a.createElement(Qn,ue({},e,{ariaSelection:n,focusedOption:r,focusedValue:o,isFocused:i,selectValue:l,focusableOptions:s}))}},{key:"render",value:function(){var e=this.getComponents(),t=e.Control,n=e.IndicatorsContainer,r=e.SelectContainer,o=e.ValueContainer,i=this.props,l=i.className,s=i.id,a=i.isDisabled,c=i.menuIsOpen,u=this.state.isFocused,f=this.commonProps=this.getCommonProps();return me.a.createElement(r,ue({},f,{className:l,innerProps:{id:s,onKeyDown:this.onKeyDown},isDisabled:a,isFocused:u}),this.renderLiveRegion(),me.a.createElement(t,ue({},f,{innerRef:this.getControlRef,innerProps:{onMouseDown:this.onControlMouseDown,onTouchEnd:this.onControlTouchEnd},isDisabled:a,isFocused:u,menuIsOpen:c}),me.a.createElement(o,ue({},f,{isDisabled:a}),this.renderPlaceholderOrValue(),this.renderInput()),me.a.createElement(n,ue({},f,{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,o=t.inputIsHiddenAfterUpdate,i=e.options,l=e.value,s=e.menuIsOpen,a=e.inputValue,c={};if(n&&(l!==n.value||i!==n.options||s!==n.menuIsOpen||a!==n.inputValue)){var u=nn(l),f=s?function(e,t){return kr(Er(e,t))}(e,u):[],d=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,f),focusedValue:d,clearFocusValueOnUpdate:!1}}var p=null!=o&&e!==n?{inputIsHidden:o,inputIsHiddenAfterUpdate:void 0}:{};return Yt(Yt(Yt({},c),p),{},{prevProps:e})}}]),n}(pe.Component);Lr.defaultProps=wr;var Ar,Nr,Fr,Br=(n(50),n(31),n(54),{cacheOptions:!1,defaultOptions:!1,filterOption:null,isLoading:!1}),Vr=function(e){var t,n;return n=t=function(t){$t(r,t);var n=Jt(r);function r(e){var t;return Ut(this,r),(t=n.call(this)).select=void 0,t.lastRequest=void 0,t.mounted=!1,t.handleInputChange=function(e,n){var r=t.props,o=r.cacheOptions,i=function(e,t,n){if(n){var r=n(e,t);if("string"==typeof r)return r}return e}(e,n,r.onInputChange);if(!i)return delete t.lastRequest,void t.setState({inputValue:"",loadedInputValue:"",loadedOptions:[],isLoading:!1,passEmptyOptions:!1});if(o&&t.state.optionsCache[i])t.setState({inputValue:i,loadedInputValue:i,loadedOptions:t.state.optionsCache[i],isLoading:!1,passEmptyOptions:!1});else{var l=t.lastRequest={};t.setState({inputValue:i,isLoading:!0,passEmptyOptions:!t.state.loadedInputValue},(function(){t.loadOptions(i,(function(e){t.mounted&&l===t.lastRequest&&(delete t.lastRequest,t.setState((function(t){return{isLoading:!1,loadedInputValue:i,loadedOptions:e||[],passEmptyOptions:!1,optionsCache:e?Yt(Yt({},t.optionsCache),{},Object(de.a)({},i,e)):t.optionsCache}})))}))}))}return i},t.state={defaultOptions:Array.isArray(e.defaultOptions)?e.defaultOptions:void 0,inputValue:void 0!==e.inputValue?e.inputValue:"",isLoading:!0===e.defaultOptions,loadedOptions:[],passEmptyOptions:!1,optionsCache:{},prevDefaultOptions:void 0,prevCacheOptions:void 0},t}return qt(r,[{key:"componentDidMount",value:function(){var e=this;this.mounted=!0;var t=this.props.defaultOptions,n=this.state.inputValue;!0===t&&this.loadOptions(n,(function(t){if(e.mounted){var n=!!e.lastRequest;e.setState({defaultOptions:t||[],isLoading:n})}}))}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"focus",value:function(){this.select.focus()}},{key:"blur",value:function(){this.select.blur()}},{key:"loadOptions",value:function(e,t){var n=this.props.loadOptions;if(!n)return t();var r=n(e,t);r&&"function"==typeof r.then&&r.then(t,(function(){return t()}))}},{key:"render",value:function(){var t=this,n=this.props;n.loadOptions;var r=n.isLoading,o=fe(n,["loadOptions","isLoading"]),i=this.state,l=i.defaultOptions,s=i.inputValue,a=i.isLoading,c=i.loadedInputValue,u=i.loadedOptions,f=i.passEmptyOptions?[]:s&&c?u:l||[];return me.a.createElement(e,ue({},o,{ref:function(e){t.select=e},options:f,isLoading:a||r,onInputChange:this.handleInputChange}))}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=e.cacheOptions!==t.prevCacheOptions?{prevCacheOptions:e.cacheOptions,optionsCache:{}}:{},r=e.defaultOptions!==t.prevDefaultOptions?{prevDefaultOptions:e.defaultOptions,defaultOptions:Array.isArray(e.defaultOptions)?e.defaultOptions:void 0}:{};return Yt(Yt({},n),r)}}]),r}(pe.Component),t.defaultProps=Br,n}((Ar=Lr,Fr=Nr=function(e){$t(n,e);var t=Jt(n);function n(){var e;Ut(this,n);for(var r=arguments.length,o=new Array(r),i=0;i1?n-1:0),o=1;o3&&void 0!==arguments[3]?arguments[3]:"global",o="global"===r?e.fields:So(e);return oo(o).find((function(e){return e[n]===t}))||null}function Co(e){return e.fields}function So(e){return ro(oo(e.fields).filter((function(e){return e.clientId})))}function Po(e,t,n){var r=Eo(e,t);return!(!r||!r.clientId||r.clientId===n)}function Io(e,t){return!!ko(e,t,"clientId","local")}function Do(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ro(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:so,t=arguments.length>1?arguments[1]:void 0,n=t.type;switch(n){case"ADD_FIELD":return uo(e,t.field);case"DELETE_FIELD":return fo(e,t.name);case"EDIT_FIELD":return po(e,t.name,t.edits);case"RECEIVE_FIELDS":return ro(t.fields);case"RENAME_FIELD":return mo(e,t.oldName,t.newName);case"RESET_FIELDS":return bo();default:return e}}}),actions:Ro({},r),selectors:Ro({},o)},Mo=Object(Yr.createReduxStore)("llms/user-info-fields",To);Object(Yr.register)(Mo);var Lo=[],Ao=function(e,t){return Object(Ur.differenceBy)(e,t,"clientId").filter((function(e){return 0===e.name.indexOf("llms/form-")}))};function No(){var e=Jr(),t=Ao(Lo,e),n=Ao(e,Lo);Lo=e,function(e){e.forEach((function(e){var t=e.attributes.name,n=Object(Yr.select)(Mo).getField,r=Object(Yr.dispatch)(Mo),o=r.deleteField,i=r.unloadField,l=n(t);l&&(l.isPersisted?i(t):o(t))}))}(t),setTimeout((function(){!function(e){var t=Object(Yr.select)(Mo).fieldExists,n=Object(Yr.dispatch)(Mo),r=n.loadField,o=n.addField;e.forEach((function(e){var n=e.attributes,i=e.clientId,l=n.name;t(l)?r(l,i):o({name:l,clientId:i,id:n.id,label:n.label,data_store:n.data_store,data_store_key:n.data_store_key})}))}(n)}),100)}var Fo=function(){Object(Yr.subscribe)(No)},Bo="llms/course-continue-button",Vo=["course"],Uo={title:Object(z.__)("Course Continue Button","lifterlms"),icon:{foreground:"#2295ff",src:"migrate"},category:"llms-blocks",keywords:[Object(z.__)("LifterLMS","lifterlms")],edit:function(e){return Object(q.createElement)("div",{className:e.className},Object(q.createElement)("p",{style:{textAlign:"center"}},Object(q.createElement)(G.Button,{isPrimary:!0,isLarge:!0},Object(z.__)("Continue","lifterlms"))))},save:function(e){return Object(q.createElement)("div",{className:e.className,style:{textAlign:"center"}},"[lifterlms_course_continue_button]")}};n(61);var Ho=function(e){Z()(o,e);var t,n,r=(t=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,r=re()(t);if(n){var o=re()(this).constructor;e=Reflect.construct(r,arguments,o)}else e=r.apply(this,arguments);return te()(this,e)});function o(){return Y()(this,o),r.apply(this,arguments)}return Q()(o,[{key:"render",value:function(){var e=this.props,t=e.attributes,n=t.length,r=t.show_cats,o=t.show_difficulty,i=t.show_length,l=t.show_tags,s=t.show_tracks,a=t.title_size,c=e.setAttributes;return Object(q.createElement)(W.InspectorControls,null,Object(q.createElement)(G.PanelBody,{title:Object(z.__)("Course Information Options","lifterlms")},Object(q.createElement)(G.SelectControl,{label:Object(z.__)("Title Headline Size","lifterlms"),value:a,onChange:function(e){return c({title_size:e})},help:Object(z.__)("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"}]}),Object(q.createElement)(G.TextControl,{label:Object(z.__)("Estimated Completion Time","lifterlms"),value:n,onChange:function(e){return c({length:e})},help:Object(z.__)("How many hours, days, weeks, etc… should a student expect to spend in order to complete this course.","lifterlms")}),Object(q.createElement)(G.ToggleControl,{label:Object(z.__)("Display Estimated Time","lifterlms"),checked:!!i,onChange:function(){return c({show_length:!i})},help:i?Object(z.__)("Displaying estimated time","lifterlms"):Object(z.__)("Hiding estimated time","lifterlms")}),Object(q.createElement)(G.ToggleControl,{label:Object(z.__)("Display Difficulty","lifterlms"),checked:!!o,onChange:function(){return c({show_difficulty:!o})},help:o?Object(z.__)("Displaying difficulty","lifterlms"):Object(z.__)("Hiding difficulty","lifterlms")}),Object(q.createElement)(G.ToggleControl,{label:Object(z.__)("Display Tracks","lifterlms"),checked:!!s,onChange:function(){return c({show_tracks:!s})},help:s?Object(z.__)("Displaying tracks list","lifterlms"):Object(z.__)("Hiding tracks list","lifterlms")}),Object(q.createElement)(G.ToggleControl,{label:Object(z.__)("Display Categories","lifterlms"),checked:!!r,onChange:function(){return c({show_cats:!r})},help:r?Object(z.__)("Displaying categories list","lifterlms"):Object(z.__)("Hiding categories list","lifterlms")}),Object(q.createElement)(G.ToggleControl,{label:Object(z.__)("Display Tags","lifterlms"),checked:!!l,onChange:function(){return c({show_tags:!l})},help:l?Object(z.__)("Displaying tags list","lifterlms"):Object(z.__)("Hiding tags list","lifterlms")})))}}]),o}(q.Component);var qo=function(e){Z()(o,e);var t,n,r=(t=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,r=re()(t);if(n){var o=re()(this).constructor;e=Reflect.construct(r,arguments,o)}else e=r.apply(this,arguments);return te()(this,e)});function o(){var e;Y()(this,o);for(var t=arguments.length,n=new Array(t),i=0;i0&&void 0!==arguments[0]?arguments[0]:[],t=[];return Object(Ur.forEach)(e,(function(e){var n=gi(e);n.length&&(t=t.concat(n))})),t}var Oi=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"global",r=Object(Yr.select)(Mo),o=r.getFieldBy;return!o(e,t,n)};if("wp_block"===Zr()){var _i="";Object(Yr.subscribe)((function(){var e=Object(Yr.select)("core/editor").getEditedPostContent();if(void 0!==e&&e!==_i){_i=e;var t=e.includes("\x3c!-- wp:llms/form-field")?"yes":"no";Object(Yr.dispatch)("core/editor").editPost({is_llms_field:t})}}))}Object(U.addFilter)("blocks.getSaveElement","llms/core-block/save",(function(e,t,n){if("core/block"!==t.name)return e;var r=n.ref;if(Object(Yr.select)("core").hasFinishedResolution("getEntityRecord",["postType","wp_block",r])){var o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Array.isArray(e)||(e=[e]),yi(e)}(function(e){var t=!1;return Object(Ur.some)(Object(Yr.select)("core/block-editor").getBlocks(),(function(n){var r=n.attributes.ref===e;return r&&(t=n),r})),t}(r));o.length&&setTimeout((function(){Object(Yr.dispatch)("core").editEntityRecord("postType","wp_block",n.ref,{is_llms_field:o.length>0?"yes":"no"})}))}return e})),n(67);var ji=Object($.withInstanceId)((function(e){var t=e.options,n=e.fieldType,r=e.instanceId;return Object(q.createElement)(q.Fragment,null,t.map((function(e,t){return Object(q.createElement)("label",{htmlFor:"llms-".concat(n,"-").concat(r,"-").concat(t),key:t,style:{display:"block",pointerEvents:"none"}},Object(q.createElement)("input",{id:"llms-".concat(n,"-").concat(r,"-").concat(t),type:n,checked:"yes"===e.default,readOnly:!0})," ",e.text)})))}));var wi,xi=function(e){Z()(o,e);var t,n,r=(t=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,r=re()(t);if(n){var o=re()(this).constructor;e=Reflect.construct(r,arguments,o)}else e=r.apply(this,arguments);return te()(this,e)});function o(){return Y()(this,o),r.apply(this,arguments)}return Q()(o,[{key:"getFieldType",value:function(){var e=this.props.attributes.field;return-1!==["email","text","number","url","tel"].indexOf(e)?"input":e}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.setAttributes,r=e.block,o=e.clientId,i=t.description,l=t.label,s=t.options,a=t.placeholder,c=t.required,u=r.supports.llms_edit_fill,f=[];c&&f.push("llms-is-required");var d=this.getFieldType();return Object(q.createElement)(q.Fragment,null,Object(q.createElement)("div",{className:"llms-field"},"html"!==d&&Object(q.createElement)(W.RichText,{tagName:"label",className:f.join(" "),value:l,onChange:function(e){n({label:e})},allowedFormats:["bold","italic"],"aria-label":l?Object(z.__)("Field label"):Object(z.__)("Empty field label; start writing to add a label"),placeholder:Object(z.__)("Enter a label")}),"input"===d&&Object(q.createElement)("input",{onChange:function(e){return n({placeholder:e.target.value})},value:a,placeholder:Object(z.__)("Add optional placeholder text","lifterlms")}),"password"===d&&Object(q.createElement)("input",{disabled:"disabed",type:"password",value:"F4K3p4$50Rd"}),"textarea"===d&&Object(q.createElement)("textarea",{rows:this.props.attributes.html_attrs.rows,onChange:function(e){return n({placeholder:e.target.value})},value:a,placeholder:Object(z.__)("Add optional placeholder text","lifterlms")}),"select"===d&&Object(q.createElement)("select",null,Object(q.createElement)("option",null,function(){if(a)return a;if(!s.length)return"";var e=s[0].text,t=s.filter((function(e){return"yes"===e.default}));return t.length&&(e=t[0].text),e}())),Object(q.createElement)(W.RichText,{tagName:"span",value:i,onChange:function(e){n({description:e})},allowedFormats:["bold","strikethrough","link"],"aria-label":l?Object(z.__)("Optional field description"):Object(z.__)("Empty field description; start writing to add a description"),placeholder:Object(z.__)("Add optional description text"),style:{color:"#808285",fontStyle:"italic"}}),("radio"===d||"checkbox"===d)&&Object(q.createElement)(ji,{options:s,fieldType:d})),u.after&&Object(q.createElement)(G.Slot,{name:"llmsEditFill.after.".concat(u.after,".").concat(o)}))}}]),o}(q.Component),Ei=n(36),ki=n.n(Ei),Ci=n(19),Si=n.n(Ci),Pi=new Uint8Array(16);function Ii(){if(!wi&&!(wi="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 wi(Pi)}for(var Di=/^(?:[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,Ri=function(e){return"string"==typeof e&&Di.test(e)},Ti=[],Mi=0;Mi<256;++Mi)Ti.push((Mi+256).toString(16).substr(1));var Li=function(e,t,n){var r=(e=e||{}).random||(e.rng||Ii)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var o=0;o<16;++o)t[n+o]=r[o];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(Ti[e[t+0]]+Ti[e[t+1]]+Ti[e[t+2]]+Ti[e[t+3]]+"-"+Ti[e[t+4]]+Ti[e[t+5]]+"-"+Ti[e[t+6]]+Ti[e[t+7]]+"-"+Ti[e[t+8]]+Ti[e[t+9]]+"-"+Ti[e[t+10]]+Ti[e[t+11]]+Ti[e[t+12]]+Ti[e[t+13]]+Ti[e[t+14]]+Ti[e[t+15]]).toLowerCase();if(!Ri(n))throw TypeError("Stringified UUID is invalid");return n}(r)},Ai=n(37),Ni=n.n(Ai);var Fi=function(e){Z()(o,e);var t,n,r=(t=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,r=re()(t);if(n){var o=re()(this).constructor;e=Reflect.construct(r,arguments,o)}else e=r.apply(this,arguments);return te()(this,e)});function o(){var e;Y()(this,o);for(var t=arguments.length,n=new Array(t),i=0;i{const t=e(n.current);return n.current=t,t},[...t])}function Hi(){const e=Object(pe.useRef)(null),t=Object(pe.useCallback)(t=>{e.current=t},[]);return[e,t]}let qi={};function zi(e,t){return Object(pe.useMemo)(()=>{if(t)return t;const n=null==qi[e]?0:qi[e]+1;return qi[e]=n,`${e}-${n}`},[e,t])}function $i(e){return(t,...n)=>n.reduce((t,n)=>{const r=Object.entries(n);for(const[n,o]of r){const r=t[n];null!=r&&(t[n]=r+e*o)}return t},{...t})}const Wi=$i(1),Gi=$i(-1),Ki=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[Ki.Translate.toString(e),Ki.Scale.toString(e)].join(" ")}},Transition:{toString:({property:e,duration:t,easing:n})=>`${e} ${t}ms ${n}`}}),Yi={display:"none"};function Xi({id:e,value:t}){return me.a.createElement("div",{id:e,style:Yi},t)}const Qi={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};function Ji({id:e,announcement:t}){return me.a.createElement("div",{id:e,style:Qi,role:"status","aria-live":"assertive","aria-atomic":!0},t)}const Zi={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 "},el={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 tl;!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"}(tl||(tl={}));const nl=e=>rl(e,(e,t)=>e{const n=ul(t,t.left,t.top),r=e.map(([e,t])=>al(ul(t),n)),o=nl(r);return e[o]?e[o][0]:null};function dl(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 pl=dl(1);function ml(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 bl(e){return Bi?e===document.scrollingElement||e instanceof Document?window:e instanceof HTMLElement?e:null:null}function hl(e){return e instanceof Window?{x:e.scrollX,y:e.scrollY}:{x:e.scrollLeft,y:e.scrollTop}}var vl;function gl(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"}(vl||(vl={}));const yl={x:.2,y:.2};function Ol(e,t,{top:n,left:r,right:o,bottom:i},l=10,s=yl){const{clientHeight:a,clientWidth:c}=e,u=(f=e,Bi&&f&&f===document.scrollingElement?{top:0,left:0,right:c,bottom:a,width:c,height:a}:t);var f;const{isTop:d,isBottom:p,isLeft:m,isRight:b}=gl(e),h={x:0,y:0},v={x:0,y:0},g=u.height*s.y,y=u.width*s.x;return!d&&n<=u.top+g?(h.y=vl.Backward,v.y=l*Math.abs((u.top+g-n)/g)):!p&&i>=u.bottom-g&&(h.y=vl.Forward,v.y=l*Math.abs((u.bottom-g-i)/g)),!b&&o>=u.right-y?(h.x=vl.Forward,v.x=l*Math.abs((u.right-y-o)/y)):!m&&r<=u.left+y&&(h.x=vl.Backward,v.x=l*Math.abs((u.left+y-r)/y)),{direction:h,speed:v}}function _l(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:o}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:o,width:e.clientWidth,height:e.clientHeight}}function jl(e){return e.reduce((e,t)=>Wi(e,hl(t)),sl)}function wl(e){const{offsetWidth:t,offsetHeight:n}=e,{x:r,y:o}=function e(t,n,r=sl){if(!(t&&t instanceof HTMLElement))return r;const o={x:r.x+t.offsetLeft,y:r.y+t.offsetTop};return t.offsetParent===n?o:e(t.offsetParent,n,o)}(e,null);return{width:t,height:n,offsetTop:o,offsetLeft:r}}function xl(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}=wl(e),{width:r,height:o,top:i,bottom:l,left:s,right:a}=e.getBoundingClientRect();return{width:r,height:o,top:i,bottom:l,right:a,left:s,offsetTop:t,offsetLeft:n}}function El(e){const{width:t,height:n,offsetTop:r,offsetLeft:o}=wl(e),i=jl(ml(e)),l=r-i.y,s=o-i.x;return{width:t,height:n,top:l,bottom:l+n,right:s+t,left:s,offsetTop:r,offsetLeft:o}}function kl(e){return"top"in e}function Cl(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 Sl=(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),o=Math.min(t.left+t.width,e.offsetLeft+e.width),i=Math.min(t.top+t.height,e.offsetTop+e.height),l=o-r,s=i-n;if(re>t);return n[r]<=0?null:e[r]?e[r][0]:null};function Pl(e){return e instanceof HTMLElement?e.ownerDocument:document}function Il(){return{draggable:{active:null,initialCoordinates:{x:0,y:0},nodes:{},translate:{x:0,y:0}},droppable:{containers:{}}}}function Dl(e,t){switch(t.type){case tl.DragStart:return{...e,draggable:{...e.draggable,initialCoordinates:t.initialCoordinates,active:t.active}};case tl.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 tl.DragEnd:case tl.DragCancel:return{...e,draggable:{...e.draggable,active:null,initialCoordinates:{x:0,y:0},translate:{x:0,y:0}}};case tl.RegisterDroppable:{const{element:n}=t,{id:r}=n;return{...e,droppable:{...e.droppable,containers:{...e.droppable.containers,[r]:n}}}}case tl.SetDroppableDisabled:{const{id:n,disabled:r}=t,o=e.droppable.containers[n];return o?{...e,droppable:{...e.droppable,containers:{...e.droppable.containers,[n]:{...o,disabled:r}}}}:e}case tl.UnregisterDroppable:{const{id:n}=t;return{...e,droppable:{...e.droppable,containers:il(n,e.droppable.containers)}}}default:return e}}const Rl=Object(pe.createContext)({type:null,event:null});function Tl({announcements:e=el,hiddenTextDescribedById:t,screenReaderInstructions:n}){const{announce:r,announcement:o}=function(){const[e,t]=Object(pe.useState)("");return{announce:Object(pe.useCallback)(e=>{null!=e&&t(e)},[]),announcement:e}}(),i=zi("DndLiveRegion"),[l,s]=Object(pe.useState)(!1);return Object(pe.useEffect)(()=>{s(!0)},[]),function({onDragStart:e,onDragMove:t,onDragOver:n,onDragEnd:r,onDragCancel:o}){const i=Object(pe.useContext)(Rl),l=Object(pe.useRef)(i);Object(pe.useEffect)(()=>{if(i!==l.current){const{type:s,event:a}=i;switch(s){case tl.DragStart:null==e||e(a);break;case tl.DragMove:null==t||t(a);break;case tl.DragOver:null==n||n(a);break;case tl.DragCancel:null==o||o(a);break;case tl.DragEnd:null==r||r(a)}l.current=i}},[i,e,t,n,r,o])}(Object(pe.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])),l?Object(Wt.createPortal)(me.a.createElement(me.a.Fragment,null,me.a.createElement(Xi,{id:t,value:n.draggable}),me.a.createElement(Ji,{id:i,announcement:o})),document.body):null}var Ml,Ll,Al,Nl;function Fl(e){const t=Object(pe.useRef)(e);return Vi(()=>{t.current!==e&&(t.current=e)},[e]),t}!function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"}(Ml||(Ml={})),function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"}(Ll||(Ll={})),function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"}(Al||(Al={})),function(e){e.Optimized="optimized"}(Nl||(Nl={}));const Bl=new Map;const Vl={strategy:Al.WhileDragging,frequency:Nl.Optimized},Ul=[],Hl=$l(xl),ql=Wl(xl),zl=$l(El);function $l(e){return function(t,n){const r=Object(pe.useRef)(t);return Ui(o=>t?n||!o&&t||t!==r.current?t instanceof HTMLElement&&null==t.parentNode?null:e(t):null!=o?o:null:null,[t,n])}}function Wl(e){const t=[];return function(n,r){const o=Object(pe.useRef)(n);return Ui(i=>n.length?r||!i&&n.length||n!==o.current?n.map(t=>e(t)):null!=i?i:t:t,[n,r])}}function Gl(e,t){return Object(pe.useMemo)(()=>({sensor:e,options:null!=t?t:{}}),[e,t])}class Kl{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 Yl(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 Xl;!function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"}(Xl||(Xl={}));const Ql={start:[Xl.Space,Xl.Enter],cancel:[Xl.Esc],end:[Xl.Space,Xl.Enter]},Jl=(e,{currentCoordinates:t})=>{switch(e.code){case Xl.Right:return{...t,x:t.x+25};case Xl.Left:return{...t,x:t.x-25};case Xl.Down:return{...t,y:t.y+25};case Xl.Up:return{...t,y:t.y-25}}};class Zl{constructor(e){this.props=e,this.autoScrollEnabled=!1,this.coordinates=sl;const{event:{target:t}}=e;this.props=e,this.listeners=new Kl(Pl(t)),this.windowListeners=new Kl(function(e){var t;return null!=(t=Pl(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=xl(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:o}=this.props,{keyboardCodes:i=Ql,coordinateGetter:l=Jl,scrollBehavior:s="smooth"}=o,{code:a}=e;if(i.end.includes(a))return void this.handleEnd(e);if(i.cancel.includes(a))return void this.handleCancel(e);const c=l(e,{active:n,context:r.current,currentCoordinates:t});if(c){const n={x:0,y:0},{scrollableAncestors:o}=r.current;for(const r of o){const o=e.code,i=Gi(c,t),{isTop:l,isRight:a,isLeft:u,isBottom:f,maxScroll:d,minScroll:p}=gl(r),m=_l(r),b={x:Math.min(o===Xl.Right?m.right-m.width/2:m.right,Math.max(o===Xl.Right?m.left:m.left+m.width/2,c.x)),y:Math.min(o===Xl.Down?m.bottom-m.height/2:m.bottom,Math.max(o===Xl.Down?m.top:m.top+m.height/2,c.y))},h=o===Xl.Right&&!a||o===Xl.Left&&!u,v=o===Xl.Down&&!f||o===Xl.Up&&!l;if(h&&b.x!==c.x){if(o===Xl.Right&&r.scrollLeft+i.x<=d.x||o===Xl.Left&&r.scrollLeft+i.x>=p.x)return void r.scrollBy({left:i.x,behavior:s});n.x=o===Xl.Right?r.scrollLeft-d.x:r.scrollLeft-p.x,r.scrollBy({left:-n.x,behavior:s});break}if(v&&b.y!==c.y){if(o===Xl.Down&&r.scrollTop+i.y<=d.y||o===Xl.Up&&r.scrollTop+i.y>=p.y)return void r.scrollBy({top:i.y,behavior:s});n.y=o===Xl.Down?r.scrollTop-d.y:r.scrollTop-p.y,r.scrollBy({top:-n.y,behavior:s});break}}this.handleMove(e,Wi(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 es(e){return Boolean(e&&"distance"in e)}function ts(e){return Boolean(e&&"delay"in e)}var ns;Zl.activators=[{eventName:"onKeyDown",handler:(e,{keyboardCodes:t=Ql,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"}(ns||(ns={}));class rs{constructor(e,t,n=function(e){return e instanceof EventTarget?e:Pl(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=Pl(r.target),this.listeners=new Kl(n),this.initialCoordinates=cl(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(ns.Keydown,this.handleKeydown),t){if(es(t))return;if(ts(t))return void(this.timeoutId=setTimeout(this.handleStart,t.delay))}this.handleStart()}detach(){this.listeners.removeAll(),this.ownerDocument.removeEventListener(ns.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:o,options:{activationConstraint:i}}=r;if(!n)return;const l=cl(e),s=Gi(n,l);if(!t&&i){if(ts(i))return Yl(s,i.tolerance)?this.handleCancel():void 0;if(es(i))return Yl(s,i.distance)?this.handleStart():void 0}e.cancelable&&e.preventDefault(),o(l)}handleEnd(){const{onEnd:e}=this.props;this.detach(),e()}handleCancel(){const{onCancel:e}=this.props;this.detach(),e()}handleKeydown(e){e.code===Xl.Esc&&this.handleCancel()}}const os={move:{name:"pointermove"},end:{name:"pointerup"}};class is extends rs{constructor(e){const{event:t}=e,n=Pl(t.target);super(e,os,n)}}is.activators=[{eventName:"onPointerDown",handler:({nativeEvent:e},{onActivation:t})=>!(!e.isPrimary||0!==e.button||(null==t||t({event:e}),0))}];const ls={move:{name:"mousemove"},end:{name:"mouseup"}};var ss;!function(e){e[e.RightClick=2]="RightClick"}(ss||(ss={})),class extends rs{constructor(e){super(e,ls,Pl(e.event.target))}}.activators=[{eventName:"onMouseDown",handler:({nativeEvent:e},{onActivation:t})=>e.button!==ss.RightClick&&(null==t||t({event:e}),!0)}];const as={move:{name:"touchmove"},end:{name:"touchend"}};(class extends rs{constructor(e){super(e,as)}}).activators=[{eventName:"onTouchStart",handler:({nativeEvent:e},{onActivation:t})=>{const{touches:n}=e;return!(n.length>1||(null==t||t({event:e}),0))}}];const cs=[{sensor:is,options:{}},{sensor:Zl,options:{}}],us={current:{}},fs=Object(pe.createContext)({...sl,scaleX:1,scaleY:1}),ds=Object(pe.memo)((function({id:e,autoScroll:t=!0,announcements:n,children:r,sensors:o=cs,collisionDetection:i=Sl,layoutMeasuring:l,modifiers:s,screenReaderInstructions:a=Zi,...c}){var u,f,d;const p=Object(pe.useReducer)(Dl,void 0,Il),[m,b]=p,[h,v]=Object(pe.useState)(()=>({type:null,event:null})),{draggable:{active:g,nodes:y,translate:O},droppable:{containers:_}}=m,j=g?y[g]:null,w=Object(pe.useRef)({initial:null,translated:null}),x=Object(pe.useMemo)(()=>{var e;return null!=g?{id:g,data:null!=(e=null==j?void 0:j.data)?e:us,rect:w}:null},[g,j]),E=Object(pe.useRef)(null),[k,C]=Object(pe.useState)(null),[S,P]=Object(pe.useState)(null),I=Object(pe.useRef)(c),D=zi("DndDescribedBy",e),{layoutRectMap:R,recomputeLayouts:T,willRecomputeLayouts:M}=function(e,{dragging:t,dependencies:n,config:r}){const[o,i]=Object(pe.useState)(!1),{frequency:l,strategy:s}=(a=r)?{...Vl,...a}:Vl;var a;const c=Object(pe.useRef)(e),u=Object(pe.useCallback)(()=>i(!0),[]),f=Object(pe.useRef)(null),d=function(){switch(s){case Al.Always:return!1;case Al.BeforeDragging:return t;default:return!t}}(),p=Ui(n=>{if(d&&!t)return Bl;if(!n||n===Bl||c.current!==e||o){for(let t of Object.values(e))t&&(t.rect.current=t.node.current?wl(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:o}=n;o||null==r.current||t.set(e,r.current)}return t}(e)}return n},[e,t,d,o]);return Object(pe.useEffect)(()=>{c.current=e},[e]),Object(pe.useEffect)(()=>{o&&i(!1)},[o]),Object(pe.useEffect)((function(){d||requestAnimationFrame(u)}),[t,d]),Object(pe.useEffect)((function(){d||"number"!=typeof l||null!==f.current||(f.current=setTimeout(()=>{u(),f.current=null},l))}),[l,d,u,...n]),{layoutRectMap:p,recomputeLayouts:u,willRecomputeLayouts:o}}(_,{dragging:null!=g,dependencies:[O.x,O.y],config:l}),L=function(e,t){const n=null!==t?e[t]:void 0,r=n?n.node.current:null;return Ui(e=>{var n;return null===t?null:null!=(n=null!=r?r:e)?n:null},[r,t])}(y,g),A=S?cl(S):null,N=zl(L),F=Hl(L),B=Object(pe.useRef)(null),V=(H=B.current,(U=N)&&H?{x:U.left-H.left,y:U.top-H.top}:sl);var U,H;const q=Object(pe.useRef)({active:null,activeNode:L,collisionRect:null,droppableRects:R,draggableNodes:y,draggingNodeRect:null,droppableContainers:_,over:null,scrollableAncestors:[],scrollAdjustedTranslate:null,translatedRect:null}),z=function(e,t){var n,r;return e&&null!=(n=null==(r=t[e])?void 0:r.node.current)?n:null}(null!=(u=null==(f=q.current.over)?void 0:f.id)?u:null,_),$=Hl(L?L.ownerDocument.defaultView:null),W=Hl(L?L.parentElement:null),G=function(e){const t=Object(pe.useRef)(e),n=Ui(n=>e?n&&e&&t.current&&e.parentNode===t.current.parentNode?n:ml(e):Ul,[e]);return Object(pe.useEffect)(()=>{t.current=e},[e]),n}(g?null!=z?z:L:null),K=ql(G),[Y,X]=Hi(),Q=Hl(g?Y.current:null,M),J=null!=Q?Q:F,Z=function(e,{transform:t,...n}){return(null==e?void 0:e.length)?e.reduce((e,t)=>t({transform:e,...n}),t):t}(s,{transform:{x:O.x-V.x,y:O.y-V.y,scaleX:1,scaleY:1},active:x,over:q.current.over,activeNodeRect:F,draggingNodeRect:J,containerNodeRect:W,overlayNodeRect:Q,scrollableAncestors:G,scrollableAncestorRects:K,windowRect:$}),ee=A?Wi(A,O):null,te=function(e){const[t,n]=Object(pe.useState)(null),r=Object(pe.useRef)(e),o=Object(pe.useCallback)(e=>{const t=bl(e.target);t&&n(e=>e?(e.set(t,hl(t)),new Map(e)):null)},[]);return Object(pe.useEffect)(()=>{const t=r.current;if(e!==t){i(t);const l=e.map(e=>{const t=bl(e);return t?(t.addEventListener("scroll",o,{passive:!0}),[t,hl(t)]):null}).filter(e=>null!=e);n(l.length?new Map(l):null),r.current=e}return()=>{i(e),i(t)};function i(e){e.forEach(e=>{const t=bl(e);null==t||t.removeEventListener("scroll",o)})}},[o,e]),Object(pe.useMemo)(()=>e.length?t?Array.from(t.values()).reduce((e,t)=>Wi(e,t),sl):jl(e):sl,[e,t])}(G),ne=Wi(Z,te),re=N?pl(N,Z):null,oe=re?pl(re,te):null,ie=function(e,t){var n;return e&&null!=(n=t[e])?n:null}(x&&oe?i(Array.from(R.entries()),oe):null,_),le=Object(pe.useMemo)(()=>ie&&ie.rect.current?{id:ie.id,rect:ie.rect.current,data:ie.data,disabled:ie.disabled}:null,[ie]),se=function(e,t,n){return{...e,scaleX:t&&n?t.width/n.width:1,scaleY:t&&n?t.height/n.height:1}}(Z,null!=(d=null==ie?void 0:ie.rect.current)?d:null,N),ae=Object(pe.useCallback)((e,{sensor:t,options:n})=>{if(!E.current)return;const r=y[E.current];if(!r)return;const o=new t({active:E.current,activeNode:r,event:e.nativeEvent,options:n,context:q,onStart(e){const t=E.current;if(!t)return;const n=y[t];if(!n)return;const{onDragStart:r}=I.current,o={active:{id:t,data:n.data,rect:w}};b({type:tl.DragStart,initialCoordinates:e,active:t}),v({type:tl.DragStart,event:o}),null==r||r(o)},onMove(e){b({type:tl.DragMove,coordinates:e})},onEnd:i(tl.DragEnd),onCancel:i(tl.DragCancel)});function i(e){return async function(){const{active:t,over:n,scrollAdjustedTranslate:r}=q.current;let o=null;if(t&&r){const{cancelDrop:i}=I.current;o={active:t,delta:r,over:n},e===tl.DragEnd&&"function"==typeof i&&await Promise.resolve(i(o))&&(e=tl.DragCancel)}if(E.current=null,b({type:e}),C(null),P(null),o){const{onDragCancel:t,onDragEnd:n}=I.current,r=e===tl.DragEnd?n:t;v({type:e,event:o}),null==r||r(o)}}}C(o),P(e.nativeEvent)},[b,y]),ce=function(e,t){return Object(pe.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])}(o,Object(pe.useCallback)((e,t)=>(n,r)=>{const o=n.nativeEvent;null!==E.current||o.dndKit||o.defaultPrevented||!0===e(n,t.options)&&(o.dndKit={capturedBy:t.sensor},E.current=r,ae(n,t))},[ae]));Vi(()=>{I.current=c},Object.values(c)),Object(pe.useEffect)(()=>{x||(B.current=null),x&&N&&!B.current&&(B.current=N)},[N,x]),Object(pe.useEffect)(()=>{const{onDragMove:e}=I.current,{active:t,over:n}=q.current;if(!t)return;const r={active:t,delta:{x:ne.x,y:ne.y},over:n};v({type:tl.DragMove,event:r}),null==e||e(r)},[ne.x,ne.y]),Object(pe.useEffect)(()=>{const{active:e,scrollAdjustedTranslate:t}=q.current;if(!e||!E.current||!t)return;const{onDragOver:n}=I.current,r={active:e,delta:{x:t.x,y:t.y},over:le};v({type:tl.DragOver,event:r}),null==n||n(r)},[null==le?void 0:le.id]),Vi(()=>{q.current={active:x,activeNode:L,collisionRect:oe,droppableRects:R,draggableNodes:y,draggingNodeRect:J,droppableContainers:_,over:le,scrollableAncestors:G,scrollAdjustedTranslate:ne,translatedRect:re},w.current={initial:J,translated:re}},[x,L,oe,y,J,R,_,le,G,ne,re]),function({acceleration:e,activator:t=Ml.Pointer,canScroll:n,draggingRect:r,enabled:o,interval:i=5,order:l=Ll.TreeOrder,pointerCoordinates:s,scrollableAncestors:a,scrollableAncestorRects:c,threshold:u}){const[f,d]=function(){const e=Object(pe.useRef)(null);return[Object(pe.useCallback)((t,n)=>{e.current=setInterval(t,n)},[]),Object(pe.useCallback)(()=>{null!==e.current&&(clearInterval(e.current),e.current=null)},[])]}(),p=Object(pe.useRef)({x:1,y:1}),m=Object(pe.useMemo)(()=>{switch(t){case Ml.Pointer:return s?{top:s.y,bottom:s.y,left:s.x,right:s.x}:null;case Ml.DraggableRect:return r}return null},[t,r,s]),b=Object(pe.useRef)(sl),h=Object(pe.useRef)(null),v=Object(pe.useCallback)(()=>{const e=h.current;if(!e)return;const t=p.current.x*b.current.x,n=p.current.y*b.current.y;e.scrollBy(t,n)},[]),g=Object(pe.useMemo)(()=>l===Ll.TreeOrder?[...a].reverse():a,[l,a]);Object(pe.useEffect)(()=>{if(o&&a.length&&m){for(const t of g){if(!1===(null==n?void 0:n(t)))continue;const r=a.indexOf(t),o=c[r];if(!o)continue;const{direction:l,speed:s}=Ol(t,o,m,e,u);if(s.x>0||s.y>0)return d(),h.current=t,f(v,i),p.current=s,void(b.current=l)}p.current={x:0,y:0},b.current={x:0,y:0},d()}else d()},[e,v,n,d,o,i,JSON.stringify(m),f,a,g,c,JSON.stringify(u)])}({...function(){const e=!1===(null==k?void 0:k.autoScrollEnabled),n="object"==typeof t?!1===t.enabled:!1===t,r=!e&&!n;return"object"==typeof t?{...t,enabled:r}:{enabled:r}}(),draggingRect:re,pointerCoordinates:ee,scrollableAncestors:G,scrollableAncestorRects:K});const ue=Object(pe.useMemo)(()=>({active:x,activeNode:L,activeNodeRect:N,activeNodeClientRect:F,activatorEvent:S,activators:ce,ariaDescribedById:{draggable:D},overlayNode:{nodeRef:Y,rect:Q,setRef:X},containerNodeRect:W,dispatch:b,draggableNodes:y,droppableContainers:_,droppableRects:R,over:le,recomputeLayouts:T,scrollableAncestors:G,scrollableAncestorRects:K,willRecomputeLayouts:M,windowRect:$}),[x,L,F,N,S,ce,W,Q,Y,b,y,D,_,R,le,T,G,K,X,M,$]);return me.a.createElement(Rl.Provider,{value:h},me.a.createElement(ll.Provider,{value:ue},me.a.createElement(fs.Provider,{value:se},r)),me.a.createElement(Tl,{announcements:n,hiddenTextDescribedById:D,screenReaderInstructions:a}))})),ps=Object(pe.createContext)(null),ms="button";function bs(e,t,n){const r=e.slice();return r.splice(n<0?r.length+n:n,0,r.splice(t,1)[0]),r}function hs(e){return null!==e&&e>=0}const vs=({layoutRects:e,activeIndex:t,overIndex:n,index:r})=>{const o=bs(e,n,t),i=e[r],l=o[r];return l&&i?{x:l.offsetLeft-i.offsetLeft,y:l.offsetTop-i.offsetTop,scaleX:l.width/i.width,scaleY:l.height/i.height}:null},gs={scaleX:1,scaleY:1},ys=({activeIndex:e,activeNodeRect:t,index:n,layoutRects:r,overIndex:o})=>{var i;const l=null!=(i=r[e])?i:t;if(!l)return null;if(n===e){const t=r[o];return t?{x:0,y:ee&&n<=o?{x:0,y:-l.height-s,...gs}:n=o?{x:0,y:l.height+s,...gs}:{x:0,y:0,...gs}},Os=me.a.createContext({activeIndex:-1,containerId:"Sortable",disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:vs,wasSorting:{current:!1}});function _s({children:e,id:t,items:n,strategy:r=vs}){const{active:o,overlayNode:i,droppableRects:l,over:s,recomputeLayouts:a,willRecomputeLayouts:c}=Object(pe.useContext)(ll),u=zi("Sortable",t),f=Boolean(null!==i.rect),d=Object(pe.useMemo)(()=>n.map(e=>"string"==typeof e?e:e.id),[n]),p=o?d.indexOf(o.id):-1,m=-1!==p,b=Object(pe.useRef)(m),h=s?d.indexOf(s.id):-1,v=Object(pe.useRef)(d),g=function(e,t){return e.reduce((e,n,r)=>{const o=t.get(n);return o&&(e[r]=o),e},Array(e.length))}(d,l),y=(O=d,_=v.current,!(O.join()===_.join()));var O,_;const j=-1!==h&&-1===p||y;Vi(()=>{y&&m&&!c&&a()},[y,m,a,c]),Object(pe.useEffect)(()=>{v.current=d},[d]),Object(pe.useEffect)(()=>{requestAnimationFrame(()=>{b.current=m})},[m]);const w=Object(pe.useMemo)(()=>({activeIndex:p,containerId:u,disableTransforms:j,items:d,overIndex:h,useDragOverlay:f,sortedRects:g,strategy:r,wasSorting:b}),[p,u,j,d,h,g,f,r,b]);return me.a.createElement(Os.Provider,{value:w},e)}const js=({isSorting:e,index:t,newIndex:n,transition:r})=>!(!r||!e&&n===t),ws={duration:200,easing:"ease"},xs=Ki.Transition.toString({property:"transform",duration:0,easing:"linear"}),Es={roleDescription:"sortable"};function ks({animateLayoutChanges:e=js,attributes:t,disabled:n,data:r,id:o,strategy:i,transition:l=ws}){const{items:s,containerId:a,activeIndex:c,disableTransforms:u,sortedRects:f,overIndex:d,useDragOverlay:p,strategy:m,wasSorting:b}=Object(pe.useContext)(Os),h=s.indexOf(o),v=Object(pe.useMemo)(()=>({sortable:{containerId:a,index:h,items:s},...r}),[a,r,h,s]),{rect:g,node:y,setNodeRef:O}=function({data:e,disabled:t=!1,id:n}){const{active:r,dispatch:o,over:i}=Object(pe.useContext)(ll),l=Object(pe.useRef)(null),[s,a]=Hi(),c=Fl(e);return Vi(()=>(o({type:tl.RegisterDroppable,element:{id:n,disabled:t,node:s,rect:l,data:c}}),()=>o({type:tl.UnregisterDroppable,id:n})),[n]),Object(pe.useEffect)(()=>{o({type:tl.SetDroppableDisabled,id:n,disabled:t})},[t]),{active:r,rect:l,isOver:(null==i?void 0:i.id)===n,node:s,over:i,setNodeRef:a}}({id:o,data:v}),{active:_,activeNodeRect:j,activatorEvent:w,attributes:x,setNodeRef:E,listeners:k,isDragging:C,over:S,transform:P}=function({id:e,data:t,disabled:n=!1,attributes:r}){const{active:o,activeNodeRect:i,activatorEvent:l,ariaDescribedById:s,draggableNodes:a,droppableRects:c,activators:u,over:f}=Object(pe.useContext)(ll),{role:d=ms,roleDescription:p="draggable",tabIndex:m=0}=null!=r?r:{},b=(null==o?void 0:o.id)===e,h=Object(pe.useContext)(b?fs:ps),[v,g]=Hi(),y=function(e,t){return Object(pe.useMemo)(()=>e.reduce((e,{eventName:n,handler:r})=>(e[n]=e=>{r(e,t)},e),{}),[e,t])}(u,e),O=Fl(t);return Object(pe.useEffect)(()=>(a[e]={node:v,data:O},()=>{delete a[e]}),[a,e]),{active:o,activeNodeRect:i,activatorEvent:l,attributes:Object(pe.useMemo)(()=>({role:d,tabIndex:m,"aria-pressed":!(!b||d!==ms)||void 0,"aria-roledescription":p,"aria-describedby":s.draggable}),[d,m,b,p,s.draggable]),droppableRects:c,isDragging:b,listeners:n?void 0:y,node:v,over:f,setNodeRef:g,transform:h}}({id:o,data:v,attributes:{...Es,...t},disabled:n}),I=function(...e){return Object(pe.useMemo)(()=>t=>{e.forEach(e=>e(t))},e)}(O,E),D=Boolean(_),R=D&&b.current&&!u&&hs(c)&&hs(d),T=!p&&C,M=T&&R?P:null,L=R?null!=M?M:(null!=i?i:m)({layoutRects:f,activeNodeRect:j,activeIndex:c,overIndex:d,index:h}):null,A=hs(c)&&hs(d)?bs(s,c,d).indexOf(o):h,N=Object(pe.useRef)(A),F=e({active:_,isDragging:C,isSorting:D,id:o,index:h,items:s,newIndex:N.current,transition:l,wasSorting:b.current}),B=function({rect:e,disabled:t,index:n,node:r}){const[o,i]=Object(pe.useState)(null),l=Object(pe.useRef)(n);return Object(pe.useEffect)(()=>{if(!t&&n!==l.current&&r.current){const t=e.current;if(t){const e=xl(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)&&i(n)}}n!==l.current&&(l.current=n)},[t,n,r,e]),Object(pe.useEffect)(()=>{o&&requestAnimationFrame(()=>{i(null)})},[o]),o}({disabled:!F,index:h,node:y,rect:g});return Object(pe.useEffect)(()=>{D&&(N.current=A)},[D,A]),{active:_,attributes:x,activatorEvent:w,rect:g,index:h,isSorting:D,isDragging:C,listeners:k,node:y,overIndex:d,over:S,setNodeRef:I,setDroppableNodeRef:O,setDraggableNodeRef:E,transform:null!=B?B:L,transition:B?xs:T||!l?null:D||F?Ki.Transition.toString({...l,property:"transform"}):null}}const Cs=[Xl.Down,Xl.Right,Xl.Up,Xl.Left],Ss=(e,{context:{droppableContainers:t,translatedRect:n,scrollableAncestors:r}})=>{if(Cs.includes(e.code)){if(e.preventDefault(),!n)return;const i=[];Object.entries(t).forEach(([t,r])=>{if(null==r?void 0:r.disabled)return;const o=null==r?void 0:r.node.current;if(!o)return;const l=El(o);switch(e.code){case Xl.Down:n.top+n.height<=l.top&&i.push([t,l]);break;case Xl.Up:n.top>=l.top+l.height&&i.push([t,l]);break;case Xl.Left:n.left>=l.left+l.width&&i.push([t,l]);break;case Xl.Right:n.left+n.width<=l.left&&i.push([t,l])}});const l=((e,t)=>{const n=Cl(t,t.left,t.top),r=e.map(([e,t])=>{const r=Cl(t,kl(t)?t.left:void 0,kl(t)?t.top:void 0),o=n.reduce((e,t,n)=>e+al(r[n],t),0);return Number((o/4).toFixed(4))}),o=nl(r);return e[o]?e[o][0]:null})(i,n);if(l){var o;const e=null==(o=t[l])?void 0:o.node.current;if(e){const t=ml(e).some((e,t)=>r[t]!==e),o=El(e),i=t?{x:0,y:0}:{x:n.width-o.width,y:n.height-o.height};return{x:o.left-i.x,y:o.top-i.y}}}}};const Ps=({transform:e})=>({...e,x:0}),Is=({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;var Ds=Object(q.createElement)("svg",{width:"18",height:"18",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 18 18"},Object(q.createElement)("path",{d:"M5 4h2V2H5v2zm6-2v2h2V2h-2zm-6 8h2V8H5v2zm6 0h2V8h-2v2zm-6 6h2v-2H5v2zm6 0h2v-2h-2v2z"})),Rs=function(e){var t=e.label,n=e.setNodeRef,r=e.listeners;return t=t||Object(z.__)("Reorder instructor","lifterlms"),Object(q.createElement)(G.Button,Rt()({isSmall:!0,showTooltip:!0,label:t,icon:Ds,ref:n,className:"llms-drag-handle"},r))};function Ts(e){var t=e.id,n=e.index,r=e.item,o=e.isDragging,i=e.dragHandle,l=e.ListItem,s=e.itemClassName,a=void 0===s?"":s,c=e.manageState,u=e.extraProps,f=void 0===u?{}:u,d=ks({id:t}),p=d.attributes,m=d.listeners,b=d.setNodeRef,h=d.transform,v=d.transition,g={transform:Ki.Transform.toString(h),transition:v};return o&&h&&h.scaleX&&h.scaleY&&(h.scaleX=.9,h.scaleY=.9),o&&(a+=" llms-is-dragging"),Object(q.createElement)("div",Rt()({style:g,ref:i?void 0:b,className:"llms-sortable-list--item ".concat(a)},p,i?{}:m),Object(q.createElement)(l,{id:t,item:r,index:n,isDragging:o,setNodeRef:b,listeners:m,manageState:c,extraProps:f}))}var Ms=function(e){var t=e.ListItem,n=e.manageState,r=e.items,o=void 0===r?[]:r,i=e.sortableStrategy,l=void 0===i?ys:i,s=e.ctxModifiers,a=void 0===s?[Ps,Is]:s,c=e.dragHandle,u=void 0===c||c,f=e.listClassName,d=void 0===f?"":f,p=e.itemClassName,m=void 0===p?"":p,b=e.extraProps,h=void 0===b?{}:b,v=Object(q.useState)(!1),g=Si()(v,2),y=g[0],O=g[1],_=function(...e){return Object(pe.useMemo)(()=>[...e].filter(e=>null!=e),[...e])}(Gl(is),Gl(Zl,{coordinateGetter:Ss}));return Object(q.createElement)(ds,{sensors:_,collisionDetection:fl,onDragStart:function(e){O(e.active.id)},onDragEnd:function(e){O(!1);var t=e.active,r=e.over;if(t.id!==r.id){var i=Object(Ur.findIndex)(o,{id:t.id}),l=Object(Ur.findIndex)(o,{id:r.id});n.updateItems(bs(o,i,l))}},modifiers:a},Object(q.createElement)("div",{className:"llms-sortable-list ".concat(d)},Object(q.createElement)(_s,{items:o,strategy:l},o.map((function(e,r){return Object(q.createElement)(Ts,{id:e.id,key:e.id,index:r,item:e,isDragging:e.id===y,dragHandle:u,ListItem:t,itemClassName:m,manageState:n,extraProps:h})})))))};function Ls(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function As(e){for(var t=1;t1&&Object(q.createElement)("div",{className:"llms-del-field-opt-wrap"},Object(q.createElement)(G.Button,{style:{flex:1},icon:"trash",label:Object(z.__)("Delete Option","lifterlms"),onClick:function(){return f(t)},tabIndex:"-1",isSmall:!0})))}var Fs=function(e){Z()(o,e);var t,n,r=(t=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,r=re()(t);if(n){var o=re()(this).constructor;e=Reflect.construct(r,arguments,o)}else e=r.apply(this,arguments);return te()(this,e)});function o(){var e;Y()(this,o),e=r.apply(this,arguments),V()(ae()(e),"addOption",(function(){var t=e.state.options,n=t.length,r=e.getUniqueKeyNumber(n+1),o=Si()(r,2),i=o[0],l=o[1],s={key:i,id:Li(),
+// Translators: %d = Option index in the list of options.
+text:Object(z.sprintf)(Object(z.__)("Option %d","lifterlms"),l),default:"no"};t.push(s),e.updateOptions(t)})),V()(ae()(e),"getManageState",(function(){return{createItem:e.addOption,deleteItem:e.removeOption,updateItem:e.updateOption,updateItems:e.updateOptions}})),V()(ae()(e),"getUniqueKeyNumber",(function(t){for(var n=function(t){return-1===e.state.options.findIndex((function(e){return e.key===t}))},r=Object(z.sprintf)(Object(z.__)("option_%d","lifterlms"),t)// Translators: %d = Option index in the list of options.
+;!n(r);){var o=e.getUniqueKeyNumber(++t),i=Si()(o,2);r=i[0],t=i[1]}return[r,t]})),V()(ae()(e),"updateOption",(function(t,n){var r=e.state.options,o=e.props.attributes.field,i="yes"===n.default&&"checkbox"!==o,l=r.map((function(e){return t===e.id?e=As(As({},e),n):i&&(e=As(As({},e),{},{default:"no"})),e}));e.updateOptions(l)})),V()(ae()(e),"updateOptions",(function(t){var n=e.props.setAttributes;e.setState({options:t}),n({options:t.map((function(e){return e.id,ki()(e,["id"])}))})})),V()(ae()(e),"removeOption",(function(t){var n=e.state.options,r=e.props.attributes.field,o=null;if("checkbox"!==r){var i=n.find((function(e){return e.id===t}));o="yes"===i.default}e.updateOptions(n.filter((function(e){return e.id!==t})).map((function(e,t){return o&&0===t&&(e=As(As({},e),{},{default:"yes"})),e})))}));var t=e.props.attributes.options;return e.state={showKeys:!1,options:t.map((function(e){return As(As({},e),{},{id:Li()})}))},e}return Q()(o,[{key:"render",value:function(){var e=this,t=this.props,n=this.state,r=t.attributes,o=r.id,i=r.field,l=n.options,s=n.showKeys,a=l.length;return Object(q.createElement)(G.BaseControl,{id:o,label:Object(z.__)("Options","lifterlms")},Object(q.createElement)(Ms,{ListItem:Ns,items:l,itemClassName:"llms-field-option",manageState:this.getManageState(),extraProps:{type:i,showKeys:s,optionCount:a}}),Object(q.createElement)("div",{className:"llms-field-options--footer"},Object(q.createElement)(G.Button,{isSecondary:!0,onClick:this.addOption},Object(z.__)("Add option","lifterlms")),Object(q.createElement)(G.Button,{isTertiary:!0,onClick:function(){return e.setState({showKeys:!s})}},s?Object(z.__)("Hide keys","lifterlms"):Object(z.__)("Show keys","lifterlms"))))}}]),o}(q.Component);function Bs(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Vs(e){for(var t=1;t=1}},{key:"hasInspectorControlSupport",value:function(e){return this.props.inspectorSupports[e]}},{key:"canTransformToGroup",value:function(e){return!(!e||this.isInAConfirmGroup(e))&&Object(Qr.getPossibleBlockTransformations)([e]).map((function(e){return e.name})).includes("llms/form-field-confirm-group")}},{key:"isInAConfirmGroup",value:function(e){return!!this.getParentGroupClientId(e)}},{key:"getParentGroupClientId",value:function(e){if(!e)return!1;var t=e.clientId,n=(0,Object(Yr.select)(W.store).getBlockParentsByBlockName)(t,"llms/form-field-confirm-group");return!!n.length&&n[0]}},{key:"getBlockSiblings",value:function(e){var t=this.getParentGroupClientId(e);return t?(0,Object(Yr.select)(W.store).getBlock)(t).innerBlocks.filter((function(t){return t.clientId!==e.clientId})):[]}},{key:"getValidationErrText",value:function(e){var t="",n=this.state.validationErrors[e];if(n)if(this.containsInvalidCharacters(n))
+// Translators: %s = user-submitted value.
+t=Object(z.__)('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=Object(z.__)('The user meta key "%s" is not unique. Please choose a unique value.',"lifterlms");break;case"id":
+// Translators: %s = user-submitted value.
+t=Object(z.__)('The ID "%s" is not unique. Please choose a unique field ID.',"lifterlms");break;case"name":
+// Translators: %s = user-submitted value.
+t=Object(z.__)('The name "%s" is not unique. Please choose a globally unique field name.',"lifterlms");break;default:
+// Translators: %s = user-submitted value.
+t=Object(z.__)('The chosen value "%s" is invalid.',"lifterlms")}else t=Object(z.__)("The value cannot be blank.","lifterlms");return Object(z.sprintf)(t,n)}},{key:"containsInvalidCharacters",value:function(e){return!!e.match(/[^A-Za-z0-9\-\_]/g)}},{key:"setValidationError",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.setState({validationErrors:Vs(Vs({},this.state.validationErrors),{},V()({},e,t))})}},{key:"hasValidationErr",value:function(e){return"string"==typeof this.state.validationErrors[e]}},{key:"ValidatedTextControl",value:function(e){var t=e.parent,n=e.attrKey,r=e.label,o=e.help,i=t.props.attributes[n],l=t.hasValidationErr(n),s=l?"llms-invalid-control":"";return Object(q.createElement)("div",{className:s},Object(q.createElement)(G.TextControl,{label:r,help:o,value:i,onChange:function(e){return t.updateValueWithValidation(n,e,"name"===n?"global":"local")}}),l&&Object(q.createElement)("p",{className:"llms-invalid-control--msg"},t.getValidationErrText(n)))}},{key:"updateValueWithValidation",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"local",r=this.props,o=r.clientId,i=r.attributes,l=r.setAttributes,s=i.name,a=i[e],c=Object(Yr.dispatch)(Mo),u=c.editField,f=c.renameField,d=Object(Yr.dispatch)(Xr.store),p=d.lockPostSaving,m=d.unlockPostSaving,b="llms-".concat(e,"-validation-err-").concat(o,"-").concat(s);if(t!==a){var h=!t,v=this.containsInvalidCharacters(t),g=Oi(t,e,n),y=!h&&!v&&g;if(this.setValidationError(e),m(b),!y){if(this.setValidationError(e,t),h)return;p(b)}"name"===e?(g||(t=t.slice(0,-1)),f(i.name,t)):u(i.name,V()({},e,t)),l(V()({},e,t))}}},{key:"render",value:function(){var e=this;if(!this.hasInspectorSupport())return"";var t=this.props,n=t.attributes,r=t.setAttributes,o=t.clientId,i=t.context,l=Object(Yr.select)(W.store).getBlock(o),s=n.required,a=n.placeholder,c=n.columns,u=n.isConfirmationField,f=n.isConfirmationControlField,d=this.canTransformToGroup(l),p=this.isInAConfirmGroup(l);return Object(q.createElement)(q.Fragment,null,Object(q.createElement)(W.InspectorControls,null,Object(q.createElement)(G.PanelBody,null,!u&&this.hasInspectorControlSupport("required")&&Object(q.createElement)(G.ToggleControl,{className:"llms-required-field-toggle",label:Object(z.__)("Required","lifterlms"),checked:!!s,onChange:function(){return r({required:!s})},help:s?Object(z.__)("Field is required.","lifterlms"):Object(z.__)("Field is optional.","lifterlms")}),Object(q.createElement)(G.SelectControl,{className:"llms-field-width-select",label:Object(z.__)("Field Width","lifterlms"),onChange:function(t){t=parseInt(t,10),r({columns:t});var n=e.getBlockSiblings(l);n.length&&t+n[0].attributes.columns>12&&(0,Object(Yr.dispatch)(W.store).updateBlockAttributes)(n[0].clientId,{columns:12-t})},help:Object(z.__)("Determines the width of the form field.","lifterlms"),value:c,options:this.getColumnsOptions(i)}),this.hasInspectorControlSupport("options")&&Object(q.createElement)(Fs,{attributes:n,setAttributes:r}),this.hasInspectorControlSupport("placeholder")&&Object(q.createElement)(G.TextControl,{label:Object(z.__)("Placeholder","lifterlms"),value:a,onChange:function(e){return r({placeholder:e})},help:Object(z.__)("Displays a placeholder option as the selected instead of a default value.","lifterlms")}),(d||f&&p)&&Object(q.createElement)(G.ToggleControl,{className:"llms-confirmation-field-toggle",label:Object(z.__)("Confirmation Field","lifterlms"),checked:p,onChange:function(){var t=Object(Yr.dispatch)(W.store),n=t.replaceBlock,r=t.selectBlock,i=Object(Qr.getBlockType)("llms/form-field-confirm-group").findControllerBlockIndex,s=Object(Yr.select)(W.store).getBlock,a=o,c="llms/form-field-confirm-group",u=l,f=null;p&&(u=s(a=e.getParentGroupClientId(l)),c=l.name);var d=Object(Qr.switchToBlockType)(u,c);if(n(a,d),p)f=d[0].clientId;else{var m=d[0].innerBlocks;f=m[i(m)].clientId}r(f)},help:p?Object(z.__)("A Confirmation field is active.","lifterlms"):Object(z.__)("No confirmation field.","lifterlms")}),this.hasInspectorControlSupport("customFill")&&Object(q.createElement)(G.Slot,{name:"llmsInspectorControlsFill.".concat(this.hasInspectorControlSupport("customFill"),".").concat(o)})),!u&&this.hasInspectorControlSupport("storage")&&Object(q.createElement)(G.PanelBody,{title:Object(z.__)("Data Storage","lifterlms")},Object(q.createElement)(this.ValidatedTextControl,{parent:this,attrKey:"data_store_key",label:Object(z.__)("Usermeta Key","lifterlms"),help:Object(z.__)("Database field key name. Only accepts alphanumeric characters, hyphens, and underscores.","lifterlms")}))),Object(q.createElement)(W.InspectorAdvancedControls,null,!u&&this.hasInspectorControlSupport("name")&&Object(q.createElement)(this.ValidatedTextControl,{parent:this,attrKey:"name",label:Object(z.__)("Field Name","lifterlms"),help:Object(z.__)("The field's HTML name attribute.","lifterlms")}),!u&&this.hasInspectorControlSupport("id")&&Object(q.createElement)(this.ValidatedTextControl,{parent:this,attrKey:"id",label:Object(z.__)("Field ID","lifterlms"),help:Object(z.__)("The field's HTML id attribute.","lifterlms")})))}}]),o}(q.Component);function Hs(e){var t=function(e){var t,n,r,o=Object(Yr.select)("core/block-editor");return(0,o.getBlock)((0,o.getBlockParentsByBlockName)(e,(t=Object(Yr.select)("core/blocks"),n=t.getBlockTypes,r=t.hasBlockSupport,n().filter((function(e){return r(e,"llms_field_group")}))).map((function(e){return e.name}))))}(e);return t&&t.innerBlocks.length?Object(Ur.find)(t.innerBlocks,(function(t){return t.clientId!==e})):null}function qs(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.setAttributes,n=e.currentUpdates,r=e.siblingClientId,o=e.siblingUpdates,i=Object(Yr.dispatch)("core/block-editor"),l=i.updateBlockAttributes;setTimeout((function(){Object(Ur.isEmpty)(n)||t(n),r&&!Object(Ur.isEmpty)(o)&&l(r,o)}))}function zs(e,t){var n={};return e.required!==t.required&&(n.required=e.required),e.field!==t.field&&(n.field=e.field),{currentUpdates:{},siblingUpdates:n}}var $s=function(e){var t=e.attributes,n=e.block,r=e.setAttributes,o=t.fieldLayout,i=n.innerBlocks;return Object(q.createElement)(G.RadioControl,{label:Object(z.__)("Field Layout","lifterlms"),selected:o,onChange:function(e){return function(e){var t=e.fieldLayout,n=e.setAttributes,r=e.innerBlocks,o=Object(Yr.dispatch)(W.store).updateBlockAttributes;n({fieldLayout:t});var i="columns"===t?6:12;r.forEach((function(e,n){var r=e.clientId,l=1===n;0===n&&"stacked"===t&&(l=!0),o(r,{columns:i,last_column:l})}))}({fieldLayout:e,setAttributes:r,innerBlocks:i})},options:[{value:"columns",label:Object(z.__)("Columns","lifterlms")},{value:"stacked",label:Object(z.__)("Stacked","lifterlms")}]})};function Ws(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Gs(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=e.attributes,n=e.clientId,r=e.setAttributes,o=Hs(n),i={},l={};if(o){var s=o.clientId;if(t.isConfirmationControlField||t.isConfirmationField){var a=zs(t,o.attributes);i=Object(Ur.merge)(i,a.currentUpdates),l=Object(Ur.merge)(l,a.siblingUpdates)}qs({setAttributes:r,currentUpdates:i,siblingClientId:s,siblingUpdates:l})}}(e);var v=Object(W.useBlockProps)({className:"llms-fields llms-cols-".concat(t.columns)});return Object(q.useEffect)((function(){if(o.variations&&o.variations.length&&i===d())var e=setInterval((function(){var n=document.querySelector(".block-editor-block-inspector .block-editor-block-variation-transforms");return n&&(n.style.display=t.isConfirmationField?"none":"inline-block",clearInterval(e)),function(){clearInterval(e)}}),10)})),h?(setTimeout((function(){Object(Yr.dispatch)(W.store).removeBlock(i)}),10),null):Object(q.createElement)("div",v,Object(q.createElement)(Us,{attributes:t,clientId:i,name:r,setAttributes:s,inspectorSupports:a,context:l}),Object(q.createElement)(xi,{attributes:t,setAttributes:s,block:o,clientId:i,context:l}),a.customFill&&Object(q.createElement)(G.Fill,{name:"llmsInspectorControlsFill.".concat(a.customFill,".").concat(i)},f(t,s,e)),c.after&&Object(q.createElement)(G.Fill,{name:"llmsEditFill.after.".concat(c.after,".").concat(i)},u(t,s,e)))},save:function(e){return e.attributes}},Js={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){var t=e.attributes,n=e.clientId,r=e.name,o=e.setAttributes,i=t.fieldLayout,l=(0,Object(Yr.select)(W.store).getBlock)(n),s=Object(Qr.getBlockType)(r),a=s.llmsInnerBlocks,c=a.allowed,u=a.template,f=a.lock,d=l&&l.innerBlocks.length&&"llms/form-field-confirm-group"===l.name?l.innerBlocks[s.findControllerBlockIndex(l.innerBlocks)]:null,p=d?Object(Qr.getBlockType)(d.name):null,m=p?p.supports.llms_edit_fill:{after:!1},b=s.supports.llms_field_inspector,h=s.providesContext&&s.providesContext["llms/fieldGroup/fieldLayout"],v="columns"===i?"horizontal":"vertical";return h||(v="vertical"),Object(q.createElement)("div",Object(W.useBlockProps)(),Object(q.createElement)(W.InspectorControls,null,Object(q.createElement)(G.PanelBody,null,h&&Object(q.createElement)($s,Gs(Gs({},e),{},{block:l})),b.customFill&&s.fillInspectorControls(t,o,e))),Object(q.createElement)("div",{className:"llms-field-group","data-field-layout":h?i:"stacked"},Object(q.createElement)(W.InnerBlocks,{allowedBlocks:c,template:"function"==typeof u?u({attributes:t,clientId:n,block:l,blockType:s}):u,templateLock:f,orientation:v})),m.after&&Object(q.createElement)(G.Slot,{name:"llmsEditFill.after.".concat(m.after,".").concat(d.clientId)}))},save:function(){return Object(q.createElement)(W.InnerBlocks.Content,null)}},Zs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"field",t="field"===e?Qs:Js;return Object(Ur.merge)({},Object(Ur.cloneDeep)(Xs),t)};function ea(){return Object(Ur.cloneDeep)(["llms_form","wp_block"])}function ta(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];e=Object(Ur.cloneDeep)(e);for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:2,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],r=1;r<=e;r++)n.push({default:t&&t>0?"yes":"no",
+// Translators: %d = Option index in the list of options.
+text:Object(z.sprintf)(Object(z.__)("Option %d","lifterlms"),r),
+// Translators: %d = Option index in the list of options.
+key:Object(z.sprintf)(Object(z.__)("option_%d","lifterlms"),r)}),t--;return n}function ra(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function oa(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},t=e.id,n=e.match;return t&&!n&&(n="".concat(t,"_confirm")),oa(oa({},e),{},{match:n,columns:6,last_column:!1,isConfirmationControlField:!0,llms_visibility:"off"})}function ca(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.id,n=e.name,r=e.match;return t&&!r&&(r=t,t="".concat(t,"_confirm"),n="".concat(n,"_confirm")),oa(oa({},e),{},{id:t,name:n,match:r,label:e.label?// Translators: %s label of the controller field.
+Object(z.sprintf)(Object(z.__)("Confirm %s","lifterlms"),e.label):"",columns:6,last_column:!0,data_store:!1,data_store_key:!1,isConfirmationField:!0,llms_visibility:"off"})}function ua(e){(0,Object(Yr.dispatch)(Mo).unloadField)(e)}var fa=["llms/form-field-text","llms/form-field-user-email","llms/form-field-user-login","llms/form-field-user-password"],da={from:[],to:[]};fa.forEach((function(e){da.from.push({type:"block",blocks:[e],transform:function(t){ua(t.name);var n=t.llms_visibility,r=aa(t),o=ca(t),i=[Object(Qr.createBlock)(e,r),Object(Qr.createBlock)("llms/form-field-text",o)];return Object(Qr.createBlock)(ia,{llms_visibility:n},Object(z.isRTL)()?i.reverse():i)}}),da.to.push({type:"block",blocks:[e],isMatch:function(){var t=(0,Object(Yr.select)(W.store).getSelectedBlock)().innerBlocks;return(t[pa(t)]||{}).name===e},transform:function(e,t){var n=e.llms_visibility,r=t[pa(t)],o=r.name,i=r.attributes;return ua(i.name),Object(Qr.createBlock)(o,oa(oa({},i),{},{columns:12,last_column:!0,isConfirmationControlField:!1,match:"",llms_visibility:n}))}})}));var pa=function(e){return e.findIndex((function(e){return e.attributes.isConfirmationControlField}))},ma=ta(Zs("group"),{title:Object(z.__)("Input Confirmation Group","lifterlms"),description:Object(z.__)("Adds a required confirmation field to an input field.","lifterlms"),icon:{src:"controls-repeat"},category:"llms-custom-fields",transforms:da,fillInspectorControls:function(e,t,n){var r=n.clientId;return Object(q.createElement)(G.Button,{isDestructive:!0,onClick:function(){return function(e){var t=Object(Yr.select)(W.store).getBlock,n=Object(Yr.dispatch)(W.store).replaceBlock,r=t(e),o=r.innerBlocks,i=r.attributes.llms_visibility,l=o[pa(o)],s=l.name,a=l.attributes;ua(a.name),n(e,Object(Qr.createBlock)(s,oa(oa({},a),{},{columns:12,last_column:!0,isConfirmationControlField:!1,match:"",llms_visibility:i})))}(r)}},Object(z.__)("Remove confirmation field","lifterlms"))},findControllerBlockIndex:pa,supports:{llms_field_inspector:{customFill:"confirmGroupAdditionalControls"},inserter:!1},llmsInnerBlocks:{allowed:fa,template:function(e){var t=e.block,n=null;return t&&t.innerBlocks.length||(n=[["llms/form-field-text",aa()],["llms/form-field-text",ca()]]),n}}}),ba=Object(q.createElement)("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:"20px",height:"20px",viewBox:"0 0 416 448"},Object(q.createElement)("path",{d:"M352 232.5v79.5q0 29.75-21.125 50.875t-50.875 21.125h-208q-29.75 0-50.875-21.125t-21.125-50.875v-208q0-29.75 21.125-50.875t50.875-21.125h208q15.75 0 29.25 6.25 3.75 1.75 4.5 5.75 0.75 4.25-2.25 7.25l-12.25 12.25q-2.5 2.5-5.75 2.5-0.75 0-2.25-0.5-5.75-1.5-11.25-1.5h-208q-16.5 0-28.25 11.75t-11.75 28.25v208q0 16.5 11.75 28.25t28.25 11.75h208q16.5 0 28.25-11.75t11.75-28.25v-63.5q0-3.25 2.25-5.5l16-16q2.5-2.5 5.75-2.5 1.5 0 3 0.75 5 2 5 7.25zM409.75 110.25l-203.5 203.5q-6 6-14.25 6t-14.25-6l-107.5-107.5q-6-6-6-14.25t6-14.25l27.5-27.5q6-6 14.25-6t14.25 6l65.75 65.75 161.75-161.75q6-6 14.25-6t14.25 6l27.5 27.5q6 6 6 14.25t-6 14.25z"}));function ha(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function va(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"",n=t?' or="'.concat(t,'"'):"";return"[llms-user ".concat(e).concat(n,"]")}(e.data_store_key,i);return Object(q.createElement)("tr",{key:s},Object(q.createElement)("td",null,l),Object(q.createElement)("td",null,Object(q.createElement)(bu,{text:a,onSuccess:n})),Object(q.createElement)("td",null,Object(q.createElement)(G.Button,{isSecondary:!0,isSmall:!0,onClick:function(){var e=Object(mu.create)({html:''.concat(a," ")});n(),r(t?Object(mu.replace)(o,/\[user .+?\]/,e):Object(mu.insert)(o,e))}},Object(z.__)("Insert","lifterlms"))))}(e,n,t,r,i,l)})))))};Object(mu.registerFormatType)("llms/user-info-shortcodes",{title:Object(z.__)("LifterLMS User Information Shortcodes","lifterlms"),tagName:"span",className:"llms-user-sc-wrap",edit:function(e){var t=Object(q.useState)(!1),n=Si()(t,2),r=n[0],o=n[1],i=Object(q.useState)(""),l=Si()(i,2),s=l[0],a=l[1],c=Object(q.useState)(""),u=Si()(c,2),f=u[0],d=u[1],p=function(){return o(!1)},m=e.value,b=e.onChange,h=e.isActive;return Object(q.createElement)(q.Fragment,null,Object(q.createElement)(W.RichTextToolbarButton,{icon:Object(q.createElement)(pu,null),title:Object(z.__)("Shortcodes","lifterlms"),onClick:function(){return o(!0)}}),r&&Object(q.createElement)(G.Modal,{className:"llms-shortcodes-modal",title:Object(z.__)("LifterLMS User Information Shortcodes","lifterlms"),onRequestClose:p},Object(q.createElement)("div",{className:"llms-shortcodes-modal--main"},Object(q.createElement)("aside",null,Object(q.createElement)(G.TextControl,{type:"search",label:Object(z.__)("Filter by label, key, or ID…","lifterlms"),onChange:function(e){return a(e)}}),Object(q.createElement)(G.TextControl,{label:Object(z.__)("Default value","lifterlms"),onChange:function(e){return d(e)},help:Object(z.__)("Optional text displayed when no information exists or the user is logged out.","lifterlms")})),Object(q.createElement)("section",null,Object(q.createElement)(hu,{closeModal:p,isActive:h,onChange:b,searchQuery:s,value:m,defaultValue:f})))))}});var vu=n(38),gu=function(e){var t=e.id,n=e.item,r=e.index,o=e.setNodeRef,i=e.listeners,l=e.manageState,s=n.visibility,a=n.name,c=n.label,u=l.updateItem,f=l.deleteItem,d="visible"===s,p=0===r,m=Object(q.useState)(!1),b=Si()(m,2),h=b[0],v=b[1];return Object(q.createElement)(q.Fragment,null,Object(q.createElement)("div",{className:"llms-instructor--header"},Object(q.createElement)("section",null,Object(q.createElement)("strong",null,a),Object(q.createElement)("small",null,"(#",t,")")),Object(q.createElement)("aside",null,p&&Object(q.createElement)(G.Tooltip,{text:Object(z.__)("Primary Instructor","lifterlms")},Object(q.createElement)(G.Dashicon,{icon:"star-filled"})),Object(q.createElement)(Rs,{label:Object(z.__)("Reorder instructor","lifterlms"),setNodeRef:o,listeners:i}),Object(q.createElement)(G.Button,{isSmall:!0,showTooltip:!0,label:Object(z.__)("Edit instructor","lifterlms"),icon:h?"arrow-up-alt2":"arrow-down-alt2",onClick:function(){return v(!h)}}))),h&&Object(q.createElement)("div",{className:"llms-instructor--settings"},Object(q.createElement)(G.ToggleControl,{label:Object(z.__)("Visibility","lifterlms"),help:d?Object(z.__)("Instructor is visible on frontend","lifterlms"):Object(z.__)("Instructor is hidden on frontend","lifterlms"),checked:d,onChange:function(e){return u(t,{visibility:e?"visible":"hidden"})}}),d&&Object(q.createElement)(G.TextControl,{label:Object(z.__)("Label","lifterlms"),value:c,onChange:function(e){return u(t,{label:e})}}),Object(q.createElement)(G.Button,{isSecondary:!0,iconPosition:"right",href:Object(vu.addQueryArgs)("/wp-admin/user-edit.php",{user_id:t}),target:"_blank",rel:"noreferrer",style:{marginRight:"5px"}},Object(z.__)("Edit","lifterlms"),Object(q.createElement)(G.Dashicon,{icon:"external"})),!p&&Object(q.createElement)(G.Button,{isDestructive:!0,onClick:function(){return f(n)}},Object(z.__)("Remove","lifterlms"))))},yu=function(e){var t=e.instructors,n=e.roles,r=e.addInstructor;return Object(q.createElement)(Fi,{roles:n,placeholder:Object(z.__)("Search…","lifterlms"),searchArgs:{exclude:t.map((function(e){return e.id}))},onChange:r})};function Ou(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function _u(e){for(var t=1;t __( '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..31541749b5
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-progress-block.php
@@ -0,0 +1,92 @@
+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 $block_content;
+ }
+
+ }
+}
+
+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..1de10bd48c
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-course-syllabus-block.php
@@ -0,0 +1,71 @@
+get_render_hook(), 'lifterlms_template_single_syllabus', 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(
+ 'course_id' => array(
+ 'type' => 'int',
+ 'default' => 0,
+ ),
+ )
+ );
+ }
+
+}
+
+return new LLMS_Blocks_Course_Syllabus_Block();
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-pricing-table-block.php b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-pricing-table-block.php
new file mode 100644
index 0000000000..a47d848c10
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/blocks/class-llms-blocks-pricing-table-block.php
@@ -0,0 +1,129 @@
+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 '' . __( '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 $block_content;
+ }
+
+ }
+}
+
+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..14541547cb
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-assets.php
@@ -0,0 +1,189 @@
+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.
+ *
+ * @return void
+ */
+ public function editor_assets() {
+
+ $screen = get_current_screen();
+ if ( $screen && 'post' !== $screen->base ) {
+ 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' );
+
+ }
+
+ /**
+ * 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 )
+ );
+ }
+
+
+}
+
+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.
+ *
+ * @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' => $name,
+ '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..cd3b3efe05
--- /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..d08040c042
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-reusable.php
@@ -0,0 +1,198 @@
+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
+ *
+ * @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.
+ if ( 'widgets.php' === basename( wp_parse_url( $referer, PHP_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..e7a9acd4e8
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks-visibility.php
@@ -0,0 +1,257 @@
+ 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.
+ *
+ * @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;
+ }
+
+ // No attributes or no llms visibility settings (visibile 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
+ *
+ * @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', FILTER_SANITIZE_STRING );
+ $post_id = llms_filter_input( INPUT_GET, 'post_id', FILTER_SANITIZE_STRING );
+
+ // 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..0e589d26a7
--- /dev/null
+++ b/libraries/lifterlms-blocks/includes/class-llms-blocks.php
@@ -0,0 +1,250 @@
+ '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
+ *
+ * @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';
+
+ }
+
+ /**
+ * 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.
+ *
+ * @return void
+ */
+ public function init() {
+
+ if ( ! function_exists( 'llms' ) || ! version_compare( '5.0.0-rc.2', 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..7204a6d949
--- /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 $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-var 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..d50e0c9fcc
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/InstalledVersions.php
@@ -0,0 +1,350 @@
+
+ * 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`
+ */
+class InstalledVersions
+{
+ /**
+ * @var mixed[]|null
+ * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, 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, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
+ */
+ 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, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, 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, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, 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..b26f1b13b1
--- /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..b7fc0125db
--- /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..78fa4409f3
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/autoload_real.php
@@ -0,0 +1,57 @@
+= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+ if ($useStaticLoader) {
+ require __DIR__ . '/autoload_static.php';
+
+ call_user_func(\Composer\Autoload\ComposerStaticInitaa475372d1afb7f112bf50e9b8859e3a::getInitializer($loader));
+ } else {
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+ }
+
+ $loader->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..2a3b404912
--- /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 = ComposerStaticInitaa475372d1afb7f112bf50e9b8859e3a::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitaa475372d1afb7f112bf50e9b8859e3a::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitaa475372d1afb7f112bf50e9b8859e3a::$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..252bd7959e
--- /dev/null
+++ b/libraries/lifterlms-cli/vendor/composer/installed.php
@@ -0,0 +1,23 @@
+ array(
+ 'pretty_version' => 'dev-trunk',
+ 'version' => 'dev-trunk',
+ 'type' => 'wordpress-plugin',
+ 'install_path' => __DIR__ . '/../../',
+ 'aliases' => array(),
+ 'reference' => '82418fb524fe978ee668d33ff54bfd5d6e125cb8',
+ 'name' => 'lifterlms/lifterlms-cli',
+ 'dev' => false,
+ ),
+ 'versions' => array(
+ 'lifterlms/lifterlms-cli' => array(
+ 'pretty_version' => 'dev-trunk',
+ 'version' => 'dev-trunk',
+ 'type' => 'wordpress-plugin',
+ 'install_path' => __DIR__ . '/../../',
+ 'aliases' => array(),
+ 'reference' => '82418fb524fe978ee668d33ff54bfd5d6e125cb8',
+ '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..84692099b0
--- /dev/null
+++ b/libraries/lifterlms-helper/CHANGELOG.md
@@ -0,0 +1,214 @@
+LifterLMS Helper Changelog
+==========================
+
+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..939e4bba1d
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper-rtl.css
@@ -0,0 +1,77 @@
+.wrap.lifterlms-addons .llms-licenses {
+ display: inline-block;
+ margin-right: 20px;
+ position: relative;
+ vertical-align: middle;
+ z-index: 1;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-license-header {
+ margin: 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: 5px 0;
+ padding: 0;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-active-keys li {
+ margin: 0 0 5px;
+ 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: 340px;
+}
+.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: 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..be40f5e9ce
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper-rtl.min.css
@@ -0,0 +1 @@
+.wrap.lifterlms-addons .llms-licenses{display:inline-block;margin-right:20px;position:relative;vertical-align:middle;z-index:1}.wrap.lifterlms-addons .llms-licenses .llms-license-header{margin: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:5px 0;padding:0}.wrap.lifterlms-addons .llms-licenses .llms-active-keys li{margin:0 0 5px;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:340px}.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: 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..adba48fc1c
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper.css
@@ -0,0 +1,79 @@
+.wrap.lifterlms-addons .llms-licenses {
+ display: inline-block;
+ margin-left: 20px;
+ position: relative;
+ vertical-align: middle;
+ z-index: 1;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-license-header {
+ margin: 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: 5px 0;
+ padding: 0;
+}
+.wrap.lifterlms-addons .llms-licenses .llms-active-keys li {
+ margin: 0 0 5px;
+ 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: 340px;
+}
+.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: 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..9009cad586
--- /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;EACA;;AAEA;EACC;;AAGD;EACC;EACA;;AACA;EAAgB;;AAGjB;EACC;EACA;EACA;;AACA;EACC;EACA;;AACA;EACC,OA9BO;EA+BP;;AAKH;EAAmB;;AAEnB;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAWH;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..385cae954e
--- /dev/null
+++ b/libraries/lifterlms-helper/assets/css/llms-helper.min.css
@@ -0,0 +1 @@
+.wrap.lifterlms-addons .llms-licenses{display:inline-block;margin-left:20px;position:relative;vertical-align:middle;z-index:1}.wrap.lifterlms-addons .llms-licenses .llms-license-header{margin: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:5px 0;padding:0}.wrap.lifterlms-addons .llms-licenses .llms-active-keys li{margin:0 0 5px;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:340px}.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: 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..cd6ffcdd0f
--- /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,qBACA,iBACA,kBACA,sBACA,UAEA,2DACC,SAGD,4CACC,cACA,gBACA,qEAGD,wDACC,qBACA,aACA,UACA,2DACC,eACA,UACA,8EACC,MA9BO,QA+BP,kBAKH,wEAEA,sDACC,gBACA,sBACA,aACA,cACA,kBACA,UACA,aACA,uBACA,YAEA,+DACC,qBACA,YACA,eACA,sBACA,gBACA,aACA,iBACA,YACA,sBACA,WAWH,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..cf706b2b02
--- /dev/null
+++ b/libraries/lifterlms-helper/class-lifterlms-helper.php
@@ -0,0 +1,216 @@
+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 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..49f3a54642
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-admin-add-ons.php
@@ -0,0 +1,405 @@
+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.
+ *
+ * @return void
+ */
+ private function handle_activations() {
+
+ $res = LLMS_Helper_Keys::activate_keys( llms_filter_input( INPUT_POST, 'llms_add_keys', FILTER_SANITIZE_STRING ) );
+
+ 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() {
+
+ $keys = llms_filter_input( INPUT_POST, 'llms_remove_keys', FILTER_UNSAFE_RAW, FILTER_REQUIRE_ARRAY );
+ $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' ), $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..2395272650
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-betas.php
@@ -0,0 +1,111 @@
+ $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..507d4cda32
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-cloned.php
@@ -0,0 +1,68 @@
+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..2421738030
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-install.php
@@ -0,0 +1,174 @@
+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..1f2914a94e
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-keys.php
@@ -0,0 +1,230 @@
+ $keys,
+ 'url' => get_site_url(),
+ );
+
+ $req = new LLMS_Dot_Com_API( '/license/activate', $data );
+ 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.
+ *
+ * @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(),
+ );
+
+ $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..6a75a74b23
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-options.php
@@ -0,0 +1,161 @@
+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..855e9cc317
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/class-llms-helper-upgrader.php
@@ -0,0 +1,511 @@
+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 '';
+ _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( __( '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( __( 'Learn more about LifterLMS add-on licensing at %s.', 'lifterlms' ), 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 ) {
+ 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.
+ *
+ * @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,
+ '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..2d43ae31af
--- /dev/null
+++ b/libraries/lifterlms-helper/includes/functions-llms-helper.php
@@ -0,0 +1,61 @@
+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..a45a23ab46
--- /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' ); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+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.
+ *
+ * @return void
+ */
+ public function init() {
+
+ // only load if we have the minimum LifterLMS version installed & activated.
+ if ( function_exists( 'LLMS' ) && version_compare( '3.32.0', LLMS()->version, '<=' ) ) {
+
+ // load includes.
+ $this->includes();
+
+ add_action( 'init', array( $this->webhooks(), 'load' ), 6 );
+
+ }
+
+ }
+
+ /**
+ * 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..64f9012c2c
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller-stubs.php
@@ -0,0 +1,245 @@
+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', 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', 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', 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', 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', 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,
+ );
+
+ }
+
+ /**
+ * Prepare an object for response.
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.3 Conditionally throw `_doing_it_wrong()`.
+ *
+ * @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 ) {
+
+ if ( ! method_exists( $object, 'get' ) ) {
+ // Translators: %s = method name.
+ _doing_it_wrong( 'LLMS_REST_Controller::prepare_object_for_response', 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 );
+
+ foreach ( $map as $db_key => $schema_key ) {
+ if ( in_array( $schema_key, $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', 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..f3a37f8b7d
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-controller.php
@@ -0,0 +1,757 @@
+prepare_item_for_database( $request );
+ $object = $this->create_object( $item, $request );
+ $schema = $this->get_item_schema();
+
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $this->object_inserted( $object, $request, $schema, true );
+
+ $fields_update = $this->update_additional_fields_for_object( $item, $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 = rest_ensure_response( $response );
+
+ $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
+ *
+ * @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 rest_ensure_response( $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
+ *
+ * @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'] . '*';
+ }
+
+ 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 );
+
+ }
+
+ /**
+ * 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()`.
+ *
+ * @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_for_response( $object, $request );
+
+ $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
+
+ $data = $this->add_additional_fields_to_object( $data, $request );
+ $data = $this->filter_response_by_context( $data, $context );
+
+ // 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).
+ *
+ * @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;
+ }
+
+ $item = $this->prepare_item_for_database( $request );
+ $object = $this->update_object( $item, $request );
+ $schema = $this->get_item_schema();
+
+ if ( is_wp_error( $object ) ) {
+ return $object;
+ }
+
+ $this->object_inserted( $object, $request, $schema, false );
+
+ $fields_update = $this->update_additional_fields_for_object( $item, $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 );
+ $response = rest_ensure_response( $response );
+
+ return $response;
+
+ }
+
+}
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..22161d0f4e
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-posts-controller.php
@@ -0,0 +1,1816 @@
+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/updateing 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_reponse"` 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`.
+ */
+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',
+ );
+
+ /**
+ * LLMS post class name.
+ *
+ * @since 1.0.0-beta.9
+ * @var string;
+ */
+ protected $llms_post_class;
+
+ /**
+ * 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 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 ) {
+
+ $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/uodateing an llms post into the database.
+ *
+ * @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 ) {
+
+ $prepared_item = $this->prepare_item_for_database( $request );
+ if ( is_wp_error( $prepared_item ) ) {
+ return $prepared_item;
+ }
+
+ $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;
+ }
+
+ $schema = $this->get_item_schema();
+
+ /**
+ * 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 );
+ 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;
+ }
+
+ /**
+ * TODO: understand how to treat possible conflicting properties => instructors are registered as additional rest field by llms_blocks
+ */
+ // $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/uodateing 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.
+ *
+ * @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;
+ }
+
+ $prepared_item = $this->prepare_item_for_database( $request );
+ if ( is_wp_error( $prepared_item ) ) {
+ return $prepared_item;
+ }
+
+ $update_result = empty( array_diff_key( $prepared_item, array_flip( array( 'id' ) ) ) ) ? false : $object->set_bulk( $prepared_item, 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;
+ }
+
+ $schema = $this->get_item_schema();
+
+ /**
+ * 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 );
+
+ $object_id = $object->get( 'id' );
+
+ $additional_fields = $this->update_additional_object_fields( $object, $request, $schema, $prepared_item, false );
+ 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;
+ }
+
+ /**
+ * TODO: understand how to treat possible conflicting properties => instructors are registered as additional rest field by llms_blocks
+ */
+ // $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;
+
+ }
+
+ /**
+ * Prepare a single item for the REST response
+ *
+ * @since 1.0.0-beta.1
+ * @since 1.0.0-beta.14 Pass the `$request` parameter to `prepare_links()`.
+ *
+ * @param LLMS_Post_Model $object LLMS post object.
+ * @param WP_REST_Request $request Request object.
+ * @return WP_Error|WP_REST_Response Response object on success, or WP_Error object on failure.
+ */
+ public function prepare_item_for_response( $object, $request ) {
+
+ $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
+
+ // 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 = $this->prepare_object_for_response( $object, $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();
+
+ // Filter data including only schema props.
+ $data = array_intersect_key( $data, array_flip( $this->get_fields_for_response( $request ) ) );
+
+ // Filter data by context. E.g. in "view" mode the password property won't be allowed.
+ $data = $this->filter_response_by_context( $data, $context );
+
+ // Wrap the data in a response object.
+ $response = rest_ensure_response( $data );
+
+ $response->add_links( $this->prepare_links( $object, $request ) );
+
+ return $response;
+ }
+
+ /**
+ * 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.1
+ * @since 1.0.0-beta.19 Allow only _built_in and not internal post status (see WordPress `get_post_stati()` ).
+ *
+ * @return array
+ */
+ public function get_item_schema() {
+
+ $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' ),
+ ),
+ ),
+ );
+
+ /**
+ * TODO: understand how to treat possible conflicting properties => instructors are registered as additional rest field by llms_blocks.
+ */
+ // $schema = $this->add_additional_fields_schema( $schema );
+ return $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
+ *
+ * @param LLMS_Post_Model $object The LLMS_Post_model object.
+ * @return bool Whether the post can be read.
+ */
+ protected function check_read_permission( $object ) {
+
+ $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..066be87edd
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/abstracts/class-llms-rest-users-controller.php
@@ -0,0 +1,777 @@
+ 'ID',
+ 'username' => 'user_login',
+ 'email' => 'user_email',
+ 'url' => 'user_url',
+ 'name' => 'display_name',
+ );
+
+ /**
+ * 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
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @return array
+ */
+ public function get_item_schema() {
+
+ $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 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 ) {
+
+ $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( __( 'Consumer Key: %s', 'lifterlms' ), $info['ck'] );
+ echo "\r\n";
+ // Translators: %s = Consumer Secret.
+ printf( __( 'Consumer Secret: %s', 'lifterlms' ), $info['cs'] );
+ die();
+
+ }
+
+ /**
+ * Handle creating/updating a webhook via admin interfaces
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @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( INPUT_POST, 'llms_rest_webhook_name', FILTER_SANITIZE_STRING ),
+ 'status' => llms_filter_input( INPUT_POST, 'llms_rest_webhook_status', FILTER_SANITIZE_STRING ),
+ 'topic' => llms_filter_input( INPUT_POST, 'llms_rest_webhook_topic', FILTER_SANITIZE_STRING ),
+ 'delivery_url' => llms_filter_input( INPUT_POST, 'llms_rest_webhook_delivery_url', FILTER_SANITIZE_URL ),
+ 'secret' => llms_filter_input( INPUT_POST, 'llms_rest_webhook_secret', FILTER_SANITIZE_STRING ),
+ );
+
+ if ( 'action' === $data['topic'] ) {
+ $data['topic'] .= '.' . llms_filter_input( INPUT_POST, 'llms_rest_webhook_action', FILTER_SANITIZE_STRING );
+ }
+
+ $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
+ *
+ * @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( INPUT_GET, 'ck', FILTER_SANITIZE_STRING );
+
+ // 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..e367dcf027
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-api-keys.php
@@ -0,0 +1,311 @@
+ '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
+ *
+ * @return LLMS_REST_API_Key|WP_Error
+ */
+ protected static function save_create() {
+
+ $create = LLMS_REST_API()->keys()->create(
+ array(
+ 'description' => llms_filter_input( INPUT_POST, 'llms_rest_key_description', FILTER_SANITIZE_STRING ),
+ 'user_id' => llms_filter_input( INPUT_POST, 'llms_rest_key_user_id', FILTER_SANITIZE_NUMBER_INT ),
+ 'permissions' => llms_filter_input( INPUT_POST, 'llms_rest_key_permissions', FILTER_SANITIZE_STRING ),
+ )
+ );
+
+ if ( ! is_wp_error( $create ) ) {
+ self::$generated_key = $create;
+ }
+
+ return $create;
+
+ }
+
+ /**
+ * Form handler to save an API key.
+ *
+ * @since 1.0.0-beta.1
+ *
+ * @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( INPUT_POST, 'llms_rest_key_description', FILTER_SANITIZE_STRING ),
+ 'user_id' => llms_filter_input( INPUT_POST, 'llms_rest_key_user_id', FILTER_SANITIZE_NUMBER_INT ),
+ 'permissions' => llms_filter_input( INPUT_POST, 'llms_rest_key_permissions', FILTER_SANITIZE_STRING ),
+ )
+ );
+
+ 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..9f715aeadd
--- /dev/null
+++ b/libraries/lifterlms-rest/includes/admin/class-llms-rest-admin-settings-page.php
@@ -0,0 +1,156 @@
+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'] ) . ' ' . $field['html'] . '
';
+ echo '