LearnPress – WordPress LMS Plugin - Version 4.1.6.9

Version Description

(2022-08-03) = ~ Modified: read items, read sections of course. (optimize read speed). ~ Modified: 'set_viewing_item' method. ~ Modified: set thumbnail image size on the 'Profile Page' by width setting on 'Avatar Dimensions'. ~ Fixed: error search no courses but return all (Archive courses). ~ Fixed: error LP_Shortcode_Course_Curriculum with Elementor. ~ Sanitize, ESC. ~ Deleted: folder attributes, files: 'class-lp-gdpr.php', 'class-lp-hard-cache.php', 'class-lp-repair-database.php', 'class-lp-utils.php'. ~ Clear, optimize codes. ~ Added: hook do_action 'lp/background/course/save'. ~ Added: hooks for addon LP - WPML. ~ Deprecated: methods 'load_curriculum'. ~ Style: FAQs on single course, spacing items progress, space in single tab. ~ Change: 'Course Item Per Page' set default is 10.

Download this release

Release Info

Developer ThimPress
Plugin Icon 128x128 LearnPress – WordPress LMS Plugin
Version 4.1.6.9
Comparing to
See all releases

Code changes from version 4.1.6.8 to 4.1.6.9

Files changed (140) hide show
  1. assets/css/learnpress-rtl.css +16 -15
  2. assets/css/learnpress-rtl.min.css +1 -1
  3. assets/css/learnpress.css +16 -15
  4. assets/css/learnpress.min.css +1 -1
  5. assets/js/dist/frontend/courses.js +2 -4
  6. assets/js/dist/frontend/courses.min.js +1 -1
  7. assets/src/apps/js/frontend/courses.js +2 -4
  8. assets/src/apps/js/frontend/single-course/student-list.js +96 -0
  9. config/settings/course.php +2 -2
  10. inc/abstracts/abstract-addon.php +1 -1
  11. inc/abstracts/abstract-shortcode-courses.php +1 -1
  12. inc/admin/class-lp-admin-ajax.php +13 -11
  13. inc/admin/class-lp-admin-dashboard.php +2 -2
  14. inc/admin/class-lp-admin.php +35 -29
  15. inc/admin/class-lp-install-sample-data.php +2 -38
  16. inc/admin/class-lp-modal-search-items.php +0 -3
  17. inc/admin/class-lp-plugin-install-list-table.php +4 -4
  18. inc/admin/class-lp-post-type-actions.php +7 -7
  19. inc/admin/class-lp-reset-data.php +16 -13
  20. inc/admin/dashboard-statistics/index.php +1 -1
  21. inc/admin/editor/class-lp-admin-editor-course.php +27 -20
  22. inc/admin/index.php +1 -1
  23. inc/admin/lp-admin-actions.php +39 -39
  24. inc/admin/lp-admin-functions.php +36 -10
  25. inc/admin/meta-box/fields/checkbox.php +4 -4
  26. inc/admin/meta-box/fields/custom-fields.php +3 -3
  27. inc/admin/meta-box/fields/email-content.php +7 -7
  28. inc/admin/meta-box/fields/html.php +8 -2
  29. inc/admin/meta-box/fields/image-advanced.php +2 -2
  30. inc/admin/meta-box/fields/list-emails.php +5 -5
  31. inc/admin/meta-box/fields/pages-dropdown.php +1 -1
  32. inc/admin/meta-box/fields/payment-order.php +3 -3
  33. inc/admin/meta-box/fields/radio.php +2 -2
  34. inc/admin/meta-box/fields/select-page.php +2 -2
  35. inc/admin/meta-box/fields/select.php +14 -14
  36. inc/admin/meta-box/fields/textarea.php +4 -4
  37. inc/admin/settings/class-lp-settings-advanced.php +2 -2
  38. inc/admin/settings/class-lp-settings-emails.php +0 -7
  39. inc/admin/settings/email-groups/class-lp-settings-emails-group.php +3 -3
  40. inc/admin/settings/index.php +1 -1
  41. inc/admin/sub-menus/abstract-submenu.php +11 -11
  42. inc/admin/sub-menus/index.php +1 -1
  43. inc/admin/views/addons/html-plugins-more.php +12 -12
  44. inc/admin/views/backend-user-profile.php +6 -3
  45. inc/admin/views/index.php +1 -1
  46. inc/admin/views/meta-boxes/course/settings.php +1 -1
  47. inc/admin/views/meta-boxes/fields/extra-faq.php +2 -2
  48. inc/admin/views/meta-boxes/fields/select.php +4 -4
  49. inc/admin/views/meta-boxes/order/actions.php +1 -1
  50. inc/admin/views/meta-boxes/order/content-tab-preview-exports-invoice.php +61 -59
  51. inc/admin/views/meta-boxes/order/details.php +4 -4
  52. inc/admin/views/meta-boxes/order/index.php +1 -1
  53. inc/admin/views/meta-boxes/question/settings.php +2 -2
  54. inc/admin/views/meta-boxes/quiz/settings.php +1 -1
  55. inc/admin/views/modal-search-items.php +3 -3
  56. inc/admin/views/modal-search-users.php +3 -3
  57. inc/admin/views/setup/content.php +2 -2
  58. inc/admin/views/setup/setup-paypal.php +3 -2
  59. inc/admin/views/setup/steps/currency.php +51 -40
  60. inc/admin/views/setup/steps/emails.php +4 -4
  61. inc/admin/views/setup/steps/payment.php +9 -9
  62. inc/admin/views/setup/steps/welcome.php +1 -1
  63. inc/admin/views/statistics/courses.php +0 -7
  64. inc/admin/views/statistics/general.php +0 -7
  65. inc/admin/views/statistics/index.php +1 -1
  66. inc/admin/views/statistics/orders.php +0 -5
  67. inc/admin/views/statistics/users.php +0 -5
  68. inc/admin/views/svg-icon.php +1 -1
  69. inc/admin/views/tools/course/html-install-sample-data.php +16 -23
  70. inc/admin/views/tools/course/html-user-item.php +71 -71
  71. inc/admin/views/tools/course/html-user.php +1 -1
  72. inc/admin/views/tools/database/html-clean-database.php +4 -1
  73. inc/admin/views/tools/html-course.php +4 -4
  74. inc/admin/views/tools/html-template.php +5 -5
  75. inc/admin/views/updates/html-upgrade-message-3.0.0.php +12 -12
  76. inc/admin/views/user/courses.php +5 -104
  77. inc/attributes/course.php +0 -408
  78. inc/attributes/lp-attributes-functions.php +0 -218
  79. inc/background-process/class-lp-background-single-course.php +71 -2
  80. inc/background-process/class-lp-background-single-order.php +0 -2
  81. inc/cache.php +8 -6
  82. inc/cache/class-lp-cache.php +1 -9
  83. inc/cart/index.php +1 -1
  84. inc/class-lp-ajax.php +6 -3
  85. inc/class-lp-checkout.php +1 -1
  86. inc/class-lp-compress-string.php +72 -77
  87. inc/class-lp-datetime.php +1 -1
  88. inc/class-lp-gdpr.php +0 -609
  89. inc/class-lp-hard-cache.php +0 -255
  90. inc/class-lp-helper.php +2 -18
  91. inc/class-lp-nonce-helper.php +13 -9
  92. inc/class-lp-page-controller.php +19 -76
  93. inc/class-lp-query-list-table.php +2 -2
  94. inc/class-lp-query.php +4 -4
  95. inc/class-lp-repair-database.php +0 -1014
  96. inc/class-lp-request-handler.php +2 -0
  97. inc/class-lp-utils.php +0 -162
  98. inc/class-lp-widget.php +11 -11
  99. inc/course/abstract-course.php +36 -837
  100. inc/course/class-lp-course-item-quiz.php +1 -1
  101. inc/course/class-lp-course-item.php +10 -9
  102. inc/course/class-lp-course-section.php +24 -27
  103. inc/course/class-lp-course-utils.php +2 -0
  104. inc/course/class-lp-course.php +280 -39
  105. inc/course/index.php +1 -1
  106. inc/course/lp-course-functions.php +34 -64
  107. inc/curds/class-lp-course-curd.php +146 -246
  108. inc/curds/class-lp-helper-curd.php +6 -3
  109. inc/curds/class-lp-lesson-curd.php +3 -4
  110. inc/curds/class-lp-question-curd.php +2 -0
  111. inc/curds/class-lp-quiz-curd.php +2 -0
  112. inc/curds/class-lp-section-curd.php +51 -48
  113. inc/curds/class-lp-user-curd.php +171 -164
  114. inc/curds/class-lp-user-item-curd.php +1 -1
  115. inc/custom-post-types/abstract.php +138 -5
  116. inc/custom-post-types/course.php +5 -23
  117. inc/custom-post-types/index.php +1 -1
  118. inc/custom-post-types/lesson.php +2 -6
  119. inc/custom-post-types/order.php +5 -2
  120. inc/custom-post-types/question.php +2 -2
  121. inc/custom-post-types/quiz.php +1 -1
  122. inc/databases/class-lp-course-db.php +91 -9
  123. inc/databases/class-lp-db.php +2 -0
  124. inc/databases/class-lp-section-db.php +25 -2
  125. inc/databases/class-lp-user-items-db.php +74 -0
  126. inc/emails/class-lp-email.php +5 -6
  127. inc/emails/index.php +1 -1
  128. inc/external-plugin/elementor/widgets/list-courses.php +2 -1
  129. inc/external-plugin/polylang/class-lp-polylang.php +1 -1
  130. inc/filters/class-lp-user-items-filter.php +8 -0
  131. inc/gateways/index.php +1 -1
  132. inc/gateways/paypal/index.php +1 -1
  133. inc/gateways/paypal/paypal-ipn/cert/index.php +1 -1
  134. inc/gateways/paypal/paypal-ipn/index.php +1 -1
  135. inc/gateways/paypal/paypal-ipn/ipn.php +10 -10
  136. inc/gateways/paypal/paypal-ipn/ipnlistener.php +19 -16
  137. inc/index.php +1 -1
  138. inc/jwt/includes/php-jwt/BeforeValidException.php +2 -2
  139. inc/jwt/includes/php-jwt/ExpiredException.php +2 -2
  140. inc/jwt/includes/php-jwt/JWT.php +292 -332
assets/css/learnpress-rtl.css CHANGED
@@ -2370,18 +2370,21 @@ body.learnpress .learn-press-tabs .learn-press-tabs__tab, body.learnpress .attac
2370
  background: #fff;
2371
  }
2372
 
 
 
 
 
2373
  .course-tab-panel {
2374
  display: none;
2375
- padding-top: 30px;
2376
  }
2377
  .course-tab-panel.active {
2378
  display: block;
2379
  }
2380
- .course-tab-panel.course-tab-panel-instructor, .course-tab-panel.course-tab-panel-faqs {
2381
- padding-top: 30px;
2382
- }
2383
- .course-tab-panel.course-tab-panel-reviews {
2384
- padding: 56px 0 0 0;
2385
  }
2386
  .course-tab-panel .course-description h4 {
2387
  margin-top: 0;
@@ -2391,10 +2394,7 @@ body.learnpress .learn-press-tabs .learn-press-tabs__tab, body.learnpress .attac
2391
  font-weight: 500;
2392
  }
2393
  .course-tab-panel .course-description p {
2394
- color: #666;
2395
- font-size: 16px;
2396
- font-weight: 300;
2397
- line-height: 26px;
2398
  }
2399
  .course-tab-panel .course-description img {
2400
  max-width: 100%;
@@ -3383,8 +3383,8 @@ input[name=course-extra-box-ratio]:checked + .course-extra-box .course-extra-box
3383
  display: block;
3384
  position: relative;
3385
  margin: 0;
3386
- padding: 25px 30px 25px 45px;
3387
- font-size: 1rem;
3388
  font-weight: 500;
3389
  line-height: 1.7;
3390
  cursor: pointer;
@@ -3413,9 +3413,9 @@ input[name=course-extra-box-ratio]:checked + .course-extra-box .course-extra-box
3413
  display: none;
3414
  }
3415
  .course-tab-panel-faqs .course-faqs-box__content-inner {
3416
- padding: 0 28px 33px 28px;
3417
  color: #666;
3418
- font-size: 16px;
3419
  font-weight: 300;
3420
  line-height: 26px;
3421
  -webkit-animation-name: course-faqs-box__content-inner-transform;
@@ -5306,7 +5306,7 @@ a {
5306
  }
5307
  .lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before {
5308
  font-family: "Font Awesome 5 Free";
5309
- font-size: 26px;
5310
  font-weight: 900;
5311
  content: "\f004";
5312
  }
@@ -6136,6 +6136,7 @@ input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before {
6136
  display: flex;
6137
  justify-content: center;
6138
  align-items: center;
 
6139
  }
6140
  @media (max-width: 768px) {
6141
  #popup-course #popup-header .items-progress {
2370
  background: #fff;
2371
  }
2372
 
2373
+ .course-tab-panels .course-tab-panel {
2374
+ padding-top: 30px;
2375
+ }
2376
+
2377
  .course-tab-panel {
2378
  display: none;
 
2379
  }
2380
  .course-tab-panel.active {
2381
  display: block;
2382
  }
2383
+ .course-tab-panel .course-description {
2384
+ color: #666;
2385
+ font-size: 16px;
2386
+ font-weight: 300;
2387
+ line-height: 26px;
2388
  }
2389
  .course-tab-panel .course-description h4 {
2390
  margin-top: 0;
2394
  font-weight: 500;
2395
  }
2396
  .course-tab-panel .course-description p {
2397
+ line-height: inherit;
 
 
 
2398
  }
2399
  .course-tab-panel .course-description img {
2400
  max-width: 100%;
3383
  display: block;
3384
  position: relative;
3385
  margin: 0;
3386
+ padding: 20px 25px 20px 45px;
3387
+ font-size: 1.1rem;
3388
  font-weight: 500;
3389
  line-height: 1.7;
3390
  cursor: pointer;
3413
  display: none;
3414
  }
3415
  .course-tab-panel-faqs .course-faqs-box__content-inner {
3416
+ padding: 0 25px 25px 25px;
3417
  color: #666;
3418
+ font-size: 1rem;
3419
  font-weight: 300;
3420
  line-height: 26px;
3421
  -webkit-animation-name: course-faqs-box__content-inner-transform;
5306
  }
5307
  .lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before {
5308
  font-family: "Font Awesome 5 Free";
5309
+ font-size: 16px;
5310
  font-weight: 900;
5311
  content: "\f004";
5312
  }
6136
  display: flex;
6137
  justify-content: center;
6138
  align-items: center;
6139
+ column-gap: 10px;
6140
  }
6141
  @media (max-width: 768px) {
6142
  #popup-course #popup-header .items-progress {
assets/css/learnpress-rtl.min.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}.learn-press-message{position:relative;margin:0 0 20px 0;padding:10px 15px 10px 50px;border-top:5px solid #00adff;border-radius:0 0 5px 5px;background:#f5f5f5;width:100%}.learn-press-message.icon{padding-right:45px}.learn-press-message.icon::before{background:#00adff}.learn-press-message.icon::after{position:absolute;top:50%;right:15px;width:10px;height:10px;margin-top:-13px;margin-left:10px;border-radius:50%;color:#fff;background:#00adff;font-family:"Font Awesome 5 Free";font-size:20px;line-height:26px;text-align:center;vertical-align:baseline;content:"\f129"}.learn-press-message::before,.learn-press-message::after{position:absolute;top:0;content:""}.learn-press-message::before{left:20px;width:20px;height:30px;background:#00adff}.learn-press-message::after{top:10px;left:20px;width:0;height:0;border:10px solid transparent;border-bottom-color:#f5f5f5}.learn-press-message.error{border-color:#d85554}.learn-press-message.error::before{background:#d85554}.learn-press-message.error.icon::before,.learn-press-message.error.icon::after{background:#d85554}.learn-press-message.error.icon::after{content:"\f00d"}.learn-press-message.warning{border-color:#ffc107}.learn-press-message.warning::before{background:#ffc107}.learn-press-message.warning.icon::before,.learn-press-message.warning.icon::after{background:#ffc107}.learn-press-message.warning.icon::after{content:"\f00d"}.learn-press-message.success{border-color:#059601}.learn-press-message.success::before{background:#059601}.learn-press-message.success.icon::before,.learn-press-message.success.icon::after{background:#059601}.learn-press-message.success.icon::after{content:"\f129"}.learn-press-message a{text-decoration:underline}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.ajaxload{display:inline-block;position:relative;width:30px;height:30px;background:#7b7b7b;content:"";-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.ajaxload::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;display:inline-block;position:absolute;top:2px;right:50%;width:6px;height:6px;margin-right:-3px;background:#dedede;content:""}.lp-ajaxload-style-1{display:inline-block;position:relative;width:32px;height:32px}.lp-ajaxload-style-1::before,.lp-ajaxload-style-1::after{position:absolute;top:0;right:0;width:100%;height:100%;border:3px solid #ddd;content:""}.lp-ajaxload-style-1::after{clip:rect(0,32px,16px,16px);border-color:#2fa7ff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learn-press-tabs{margin-bottom:34px;background:#f1f2f8}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::after{background:#fff}.learn-press-tabs .learn-press-tabs__nav{display:flex;margin:0;padding:0;border:1px solid #e5e7f2;list-style:none}.learn-press-tabs .learn-press-tabs__tab{position:relative;margin:0;border-left:1px solid #e5e7f2;background:#f1f2f8;list-style:none}.learn-press-tabs .learn-press-tabs__tab:last-child{border-left:0}.learn-press-tabs .learn-press-tabs__tab>label{display:block;margin:0;padding:18px 65px;font-size:18px;line-height:1;font-weight:600;text-align:center;text-transform:capitalize;cursor:pointer}.learn-press-tabs .learn-press-tabs__tab>label a{color:#333}.learn-press-tabs .learn-press-tabs__tab>label a:focus{outline:0;text-decoration:none}@media(max-width:767px){.learn-press-tabs .learn-press-tabs__tab>label{padding:20px 50px 14px 50px}}.learn-press-tabs .learn-press-tabs__tab::before{position:absolute;top:-1px;right:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab::after{position:absolute;bottom:-1px;right:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab:first-child.active label{position:relative}.learn-press-tabs .learn-press-tabs__tab:first-child.active label::before{position:absolute;top:0;right:-1px;width:1px;height:100%;background:#fff;content:""}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}.learn-press-filters{display:flex;margin-bottom:30px;margin-right:0;list-style:none}.learn-press-filters>li{margin:0;font-size:16px;line-height:24px}@media(max-width:767px){.learn-press-filters>li{margin-left:30px;margin-right:0}.learn-press-filters>li:last-child{margin-left:0}}.learn-press-filters>li>a,.learn-press-filters>li>span{display:inline-block;font-weight:600}.learn-press-filters>li>span.count{font-weight:400}.learn-press-filters>li>span.count::before,.learn-press-filters>li>span.count::after{display:inline-block}.learn-press-filters>li>span.count::before{content:"("}.learn-press-filters>li>span.count::after{content:")"}.learn-press-filters>li span{color:#ffb606}.learn-press-filters>li span+span{color:#ffb606}.learn-press-filters>li span+span::before,.learn-press-filters>li span+span::after{color:#ffb606}.learn-press-filters>li a{color:#333;cursor:pointer}.learn-press-filters>li a+span{color:#333}.learn-press-filters>li a+span::before,.learn-press-filters>li a+span::after{color:#333}.learn-press-filters>li::after{margin:0 35px;color:#ccc;content:"|"}@media(max-width:767px){.learn-press-filters>li::after{display:none}}.learn-press-filters>li:last-child::after{display:none}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:24px;font-weight:600;line-height:1;font-family:var(--wp--preset--font-family--system-font)}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:left}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:right}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 0 0 4px;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;right:2px;color:#41abec;font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;line-height:1;content:"\f00c"}.lp-checkout-form .lp-checkout-remember a{color:#666;font-size:16px;font-weight:300;line-height:26px;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px;font-size:16px}.lp-checkout-form .lp-form-fields input{height:44px;line-height:normal;width:100%;padding:0 15px;border:1px solid #ccc}.lp-checkout-form .rwmb-input input:not([type=checkbox]){width:100%;height:43px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px}.lp-checkout-form .rwmb-input input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0;color:#222}.lp-checkout-form .rwmb-input ::placeholder{opacity:1;color:#999}.lp-checkout-form .rwmb-input :-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input ::-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input input:-webkit-autofill,.lp-checkout-form .rwmb-input input:-webkit-autofill:hover,.lp-checkout-form .rwmb-input input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px #fff inset;-webkit-text-fill-color:#999 !important}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:right}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:#ffb606}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;font-size:16px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-size:16px;font-weight:400}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:""}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid #ccc;border-radius:4px}#checkout-order table{width:100%;margin:0;border:0}#checkout-order td,#checkout-order th{box-sizing:content-box;border:1px solid rgba(204,204,204,0.3);border-top:0;border-left:0;border-right:0;background:unset;line-height:1;text-align:right;vertical-align:inherit}#checkout-order td:last-child,#checkout-order th:last-child{padding-left:0}#checkout-order .course-name{font-size:16px;font-weight:600;line-height:26px}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-size:16px;font-weight:600;line-height:26px;text-align:left}#checkout-order .order-total>th{padding:24px 0 24px 20px}#checkout-order .order-total .col-number{color:#333;font-size:26px}#checkout-order tfoot .cart-subtotal{color:#666;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot .cart-subtotal>th{padding:20px 0 17px 20px}#checkout-order tfoot .order-total th{color:#333;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 0 18px 13px}#checkout-order .course-thumbnail>img{width:100px;max-width:100% !important;height:auto !important}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:left}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-size:16px;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-right:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:left;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{float:left;margin-top:5px;color:#999;font-size:12px;font-weight:normal}#checkout-payment .secure-connection i{margin-left:5px;color:#ccc;font-size:18px}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 0 0 8px;border:1px solid #ccc;background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;right:50%;width:6px;height:6px;background:#41abec;transform:translate(50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:""}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}#checkout-payment #checkout-order-action button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-terms-and-conditions{color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:40px;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid #ddd;background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid #ddd;background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.lp-list-table{width:100%;margin-bottom:20px}.lp-list-table th,.lp-list-table td{padding:20px;border:0 solid rgba(204,204,204,0.3);border-bottom-width:1px;background:#fff;font-size:16px;line-height:1;text-align:right}@media(max-width:767px){.lp-list-table th,.lp-list-table td{padding:15px}}.lp-list-table thead{box-sizing:border-box;border:1px solid #e5e7f2}.lp-list-table thead tr th{height:60px;border-bottom:0;color:#333;background:#f1f2f8;font-size:18px}.lp-list-table tbody,.lp-list-table tfoot{box-sizing:border-box;border:1px solid rgba(204,204,204,0.3);border-top:0}.lp-list-table tbody tr td,.lp-list-table tbody tr th,.lp-list-table tfoot tr td,.lp-list-table tfoot tr th{height:62px;color:#666;background:#fff;font-size:16px;font-weight:300}.lp-list-table tbody tr td a,.lp-list-table tbody tr th a,.lp-list-table tfoot tr td a,.lp-list-table tfoot tr th a{border-bottom:0;color:#666;text-decoration:none}.lp-list-table tbody tr td a:hover,.lp-list-table tbody tr th a:hover,.lp-list-table tfoot tr td a:hover,.lp-list-table tfoot tr th a:hover{color:var(--lp-primary-color)}.lp-list-table tbody tr .column-status .result-percent,.lp-list-table tfoot tr .column-status .result-percent{font-weight:500}.lp-list-table tbody tr .column-status .lp-label,.lp-list-table tfoot tr .column-status .lp-label{font-weight:600}.lp-list-table tbody tr:nth-child(odd),.lp-list-table tfoot tr:nth-child(odd){background:#f5f5f5}.lp-list-table .list-table-nav td{font-size:14px}.lp-list-table .list-table-nav td.nav-text{text-align:right}.lp-list-table .list-table-nav td.nav-pages{text-align:left}.lp-list-table .list-table-nav td.nav-pages .learn-press-pagination{text-align:left}.lp-list-table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-size:16px;font-weight:300;line-height:1}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field label{display:block;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field textarea{width:100%;padding:8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:14px;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk{color:red}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-left:auto;margin-bottom:60px;margin-right:auto;padding:40px;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06) !important}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px;font-size:28px;line-height:1.4}.learn-press-form-login .form-fields .form-field label,.learn-press-form-register .form-fields .form-field label{font-size:16px;font-weight:400;user-select:none}.learn-press-form-login .form-fields .form-field input[type=text],.learn-press-form-login .form-fields .form-field input[type=password],.learn-press-form-login .form-fields .form-field input[type=tel],.learn-press-form-login .form-fields .form-field input[type=url],.learn-press-form-login .form-fields .form-field input[type=number],.learn-press-form-register .form-fields .form-field input[type=text],.learn-press-form-register .form-fields .form-field input[type=password],.learn-press-form-register .form-fields .form-field input[type=tel],.learn-press-form-register .form-fields .form-field input[type=url],.learn-press-form-register .form-fields .form-field input[type=number]{height:42px;border:1px solid #bbb;border-radius:4px;line-height:42px}.learn-press-form-login .form-fields .form-field input[type=text]:focus,.learn-press-form-login .form-fields .form-field input[type=password]:focus,.learn-press-form-login .form-fields .form-field input[type=tel]:focus,.learn-press-form-login .form-fields .form-field input[type=url]:focus,.learn-press-form-login .form-fields .form-field input[type=number]:focus,.learn-press-form-register .form-fields .form-field input[type=text]:focus,.learn-press-form-register .form-fields .form-field input[type=password]:focus,.learn-press-form-register .form-fields .form-field input[type=tel]:focus,.learn-press-form-register .form-fields .form-field input[type=url]:focus,.learn-press-form-register .form-fields .form-field input[type=number]:focus{border:0;outline:2px solid transparent !important;outline-offset:2px;box-shadow:0 0 0 2px #666 !important}.learn-press-form-login .form-fields .form-field.required label::after,.learn-press-form-register .form-fields .form-field.required label::after{content:" *";display:inline}.learn-press-form-login form[name=learn-press-login]>p>label,.learn-press-form-register form[name=learn-press-login]>p>label{color:#666;font-size:16px;cursor:pointer;user-select:none}.learn-press-form-login form[name=learn-press-login]>p>a,.learn-press-form-register form[name=learn-press-login]>p>a{color:#666;font-size:16px;line-height:1}.learn-press-form-login form[name=learn-press-login]>p:last-child,.learn-press-form-register form[name=learn-press-login]>p:last-child{margin-bottom:0}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{width:100%;height:50px;border-radius:3px;outline:0;color:#fff;background:var(--lp-primary-color);box-shadow:none;font-size:16px;line-height:1;vertical-align:middle;text-decoration:none}.required label{font-weight:bold}.required label:after{content:" *";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative}.lp-password-input input[type=password]{padding-left:2.5rem}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;left:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f06e"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:"\f070"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}.lp-user-profile{position:relative;background:#fff}.lp-user-profile .lp-user-profile-avatar img{position:relative;width:100%;height:auto;border-radius:unset;display:block}.lp-user-profile .lp-user-profile-avatar+.lp-user-profile-socials{margin-top:10px;margin-bottom:5px}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;z-index:1;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;width:35px;height:35px;margin:0 7px;border:1px solid #cfcfcf;color:#666;background:#fff;font-size:14px;line-height:35px;text-align:center;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lp-user-profile .lp-user-profile-socials a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.lp-user-profile .wrapper-profile-header{color:#fff;background:var(--lp-secondary-color);position:relative}@media(max-width:990px){.lp-user-profile .wrapper-profile-header .lp-profile-content-area{min-height:inherit;padding:50px 15px}.lp-user-profile .wrapper-profile-header .lp-profile-left{float:right;position:static}.lp-user-profile .wrapper-profile-header .lp-profile-right{float:left;width:calc(100% - 270px);margin-right:0}}@media(max-width:768px){.lp-user-profile .wrapper-profile-header .lp-profile-left{width:220px}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:calc(100% - 220px)}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials{margin-left:-5px;margin-right:-5px}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials a{width:36px;height:36px;margin:0 5px;line-height:36px}}@media(max-width:500px){.lp-user-profile .wrapper-profile-header .lp-profile-left{float:none;margin:0 auto}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:100%;padding-top:30px;text-align:center}}.lp-user-profile .wrapper-profile-header::before{left:100%;right:auto}.lp-user-profile .wrapper-profile-header::after{right:100%;left:auto}.lp-user-profile .lp-profile-content-area{position:relative;padding-top:50px;padding-bottom:50px;display:flex;align-items:center}@media(max-width:650px){.lp-user-profile .lp-profile-content-area{flex-direction:column}.lp-user-profile .lp-profile-content-area .lp-profile-right{text-align:center;width:100%;padding:50px 15px 0}}.lp-user-profile .lp-profile-left{min-width:270px;max-width:270px;padding:5px;border:2px solid #eaeaea;border-radius:3px}.lp-user-profile .lp-profile-right{padding-left:15px;padding-right:35px}.lp-user-profile .lp-profile-username{padding-bottom:10px;font-size:18px;font-weight:500;text-transform:capitalize}.lp-user-profile .lp-profile-username::before,.lp-user-profile .lp-profile-username::after{content:"";width:30px;height:1px;background-color:white;display:inline-block;vertical-align:middle;margin:0}.lp-user-profile .lp-profile-username::before{margin-left:5px}.lp-user-profile .lp-profile-username::after{margin-right:5px}.lp-user-profile .lp-profile-user-bio{font-size:16px;font-weight:300;line-height:26px}.lp-user-profile #profile-sidebar{float:right;width:270px;margin-top:0;border:1px solid rgba(0,0,0,0.1);border-top:0;background:#fff;margin-top:58px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%}.lp-user-profile #profile-sidebar .lp-user-profile-avatar{max-width:150px}}.lp-user-profile #profile-nav .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{position:relative;margin:0;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li a{display:block;padding:0 20px;color:#333;font-size:16px;font-weight:500;line-height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{padding:0 52px 0 20px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a>i{display:inline-block;position:absolute;right:24px;width:28px;color:var(--lp-primary-color);font-size:12px;line-height:53px;text-align:right}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{float:left;margin-left:4px;color:#999;font-family:"Font Awesome 5 Free";font-size:10px;font-weight:900;content:"\f054"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid #f9f9f9}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li:hover>a i{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover{background:var(--lp-primary-color)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover>a::after{content:"\f053"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-right:52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist>a::before{position:absolute;right:25px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f004"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist:hover a::before{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.logout>a::after{display:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>a{box-sizing:border-box;height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;right:100%;min-width:150px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a::after{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul{position:relative;right:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active{background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a{color:#ffb606}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a i{color:#ffb606}@media(max-width:990px){.lp-user-profile #profile-nav{overflow-x:scroll;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs{width:max-content}.lp-user-profile #profile-nav .lp-profile-nav-tabs::after{display:table;clear:both;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{float:right;border:0;border-left:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{height:auto;padding:0 45px 0 20px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-right:10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.has-child a::after{content:"\f077"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-right:45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a::after{content:"\f078"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(20%)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li{float:right;border-left:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-left:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover ul{display:none !important}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:not(.has-child)>a::after{display:none}}@media(max-width:560px){.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{max-width:80px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{font-size:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-right:0}}.lp-user-profile .lp-profile-content{float:left;width:calc(100% - 300px);margin-bottom:60px;padding-top:58px}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .learn-press-tabs__nav{display:block;width:100%;border:0}.lp-user-profile .lp-profile-content .learn-press-tabs__nav::after{display:table;clear:both;content:""}.lp-user-profile .lp-profile-content .learn-press-tabs__tab{float:right;border-left:0}.lp-user-profile .lp-profile-content .learn-press-tabs__tab label{padding-left:25px;padding-right:25px}.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content .lp-button{display:block;margin:0 auto 52px auto;padding:13px 34px;border-color:var(--lp-secondary-color);font-size:14px;font-weight:500;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.lp-user-profile .lp-profile-content .lp-button:hover{border-color:var(--lp-primary-color)}.lp-user-profile ul.learn-press-courses .course{margin:0 0 40px 0}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-left:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile #dashboard-general-statistic{margin-bottom:55px;padding-bottom:20px;border-bottom:1px solid #ddd}.lp-user-profile .dashboard-general-statistic__row{display:flex;margin:0 -15px;justify-content:center;flex-wrap:wrap}.lp-user-profile .dashboard-general-statistic__row .statistic-box{min-width:200px;max-width:270px;margin:0 15px 40px 15px;padding:15px 20px;border:1px solid #ccc;border-radius:4px;background:#f9fafc;text-align:center}@media(max-width:990px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:45%}}@media(max-width:767px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:100%;margin:0 15px 15px}}.lp-user-profile .dashboard-general-statistic__row .statistic-box:hover{background:#eaeaea}.lp-user-profile .dashboard-general-statistic__row[data-col="2"] .statistic-box{width:50%}.lp-user-profile .dashboard-general-statistic__row[data-col="4"] .statistic-box{width:25%}.lp-user-profile .dashboard-general-statistic__row[data-col="5"] .statistic-box{width:20%}.lp-user-profile .statistic-box .statistic-box__text{margin:0 0 7px 0;padding:0;color:#666;font-size:18px;font-weight:400;line-height:1}.lp-user-profile .statistic-box .statistic-box__number{color:#333;font-size:18px;font-weight:500;line-height:1}.lp-user-profile .profile-courses>h3{margin-top:0;margin-bottom:36px;color:#333;font-size:30px;font-weight:600;line-height:1;text-transform:capitalize}.lp-profile-content table.lp-list-table{border-spacing:0;border-top:1px solid #ccc;border-right:1px solid #ccc;margin-bottom:40px}.lp-profile-content table.lp-list-table tr th,.lp-profile-content table.lp-list-table tr td{border-left:1px solid #ccc;border-bottom:1px solid #ccc;text-align:center}.lp-profile-content table.lp-list-table tr td a{color:var(--wp--preset--color--foreground);font-weight:400}.lp-profile-content table.lp-list-table tr td a:hover{color:var(--lp-primary-color)}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:30px;line-height:1.5;font-weight:500;margin-bottom:15px;font-family:var(--wp--preset--font-family--system-font)}.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 10px 24px 10px}.profile-basic-information .form-field>label,form[name=profile-change-password] .form-field>label{margin:0 0 12px 0;color:#333;font-size:16px;font-weight:500;font-style:italic}.profile-basic-information .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input input{height:43px;padding:8px 20px;font-weight:400}.profile-basic-information .form-field .form-field-input input[type=password],form[name=profile-change-password] .form-field .form-field-input input[type=password]{padding:8px 20px}.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input textarea{padding:9px 20px 16px 20px;font-weight:300;line-height:24px}.profile-basic-information .form-field .form-field-input input,.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input textarea{border:1px solid #ccc;color:#999;font-size:14px;font-style:italic}.profile-basic-information .form-field .form-field-input input:focus,.profile-basic-information .form-field .form-field-input textarea:focus,form[name=profile-change-password] .form-field .form-field-input input:focus,form[name=profile-change-password] .form-field .form-field-input textarea:focus{border-color:var(--lp-primary-color);outline:0;color:#222}.profile-basic-information .form-field .form-field-input ::placeholder,form[name=profile-change-password] .form-field .form-field-input ::placeholder{opacity:1;color:#999}.profile-basic-information .form-field .form-field-input :-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input :-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input ::-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input ::-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input .description,form[name=profile-change-password] .form-field .form-field-input .description{margin-top:15px}@media(max-width:767px){.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 0 24px 0}}.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:right;width:calc(50% - 20px);margin-left:10px}@media(max-width:767px){.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:unset;width:100%;margin:0 0 24px 0}}.profile-basic-information .form-field__clear,form[name=profile-change-password] .form-field__clear{clear:both}.profile-basic-information button,form[name=profile-change-password] button{padding:16px 24px;border:0;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-size:16px;font-weight:400;line-height:1}.profile-basic-information button:hover,form[name=profile-change-password] button:hover{opacity:.5;background:var(--lp-primary-color)}.profile-basic-information p,form[name=profile-change-password] p{margin:0}#learn-press-profile-basic-information .form-fields::after{display:block;clear:both;content:""}@media(max-width:767px){#learn-press-profile-basic-information .form-fields{margin:0}}#learn-press-profile-basic-information button[type=submit]{padding:0 15px;height:40px;line-height:40px;border:0;display:inline-flex;align-items:center;justify-content:center;background-color:var(--lp-primary-color);color:white;font-size:16px;font-weight:400;-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#learn-press-profile-basic-information button[type=submit]:hover{opacity:.5;background-color:var(--lp-primary-color)}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;color:#999;font-size:.8em;font-style:italic}div.order-recover{display:flex}div.order-recover>.button-recover-order{margin:0;margin-right:20px;flex:0 0 auto}div.order-recover>.button-recover-order.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}div.order-recover input[type=text]{width:100%;height:43px;margin-left:10px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px;flex:1 1 auto}.learn-press-profile-course__progress .lp_profile_course_progress{border:1px solid #eee;border-top:0;overflow-x:auto}.learn-press-profile-course__progress .lp_profile_course_progress__item{display:grid;align-items:center;padding:15px;border-top:1px solid #eee;grid-template-columns:90px 1fr 80px 190px 140px;column-gap:20px}.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:60px;height:auto}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:100%}}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item{display:block}}.learn-press-profile-course__progress .lp_profile_course_progress__header{background-color:#eee}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__header{display:flex;overflow-x:auto;white-space:nowrap;justify-content:flex-end}}.lp_profile_course_progress__nav button.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.entry-content ul.learn-press-profile-course__tab__inner{padding:0}.content ul.learn-press-courses{margin-right:-15px;margin-left:-15px}.content ul.learn-press-courses[data-layout=list]{margin:0}.learn-press-profile-course__tab__inner{display:flex;margin:40px 0 0 0 !important;padding:0 !important;background:#eee;list-style:none !important}.learn-press-profile-course__tab__inner>li{list-style:none;margin:0 !important}.learn-press-profile-course__tab__inner>li:hover{cursor:pointer}.learn-press-profile-course__tab__inner a{display:inline-block;padding:15px 30px;font-weight:600;position:relative}.learn-press-profile-course__tab__inner a.active{color:var(--lp-primary-color);background:#fff}.learn-press-profile-course__tab__inner a.active::before{content:"";height:4px;width:100%;background-color:var(--lp-primary-color);position:absolute;top:0;right:0;left:auto}.learn-press-course-tab-filters .learn-press-filters{margin-top:20px;margin-right:0;padding:0;list-style:none}.learn-press-course-tab-filters .learn-press-filters a.active{color:var(--lp-primary-color)}.lp-profile-content ul{list-style:none !important;padding:0 !important}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed #ccc;border-radius:3px;background-color:#fafafa;font-size:14px;font-weight:300;font-style:italic;line-height:43px;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-right:15px;margin-left:0}#primary .learn-press-courses[data-size="3"] .course{width:50%}body.learnpress .learn-press-tabs .learn-press-tabs__tab,body.learnpress .attachment-recent-works-thumbnail{border-radius:0}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panel{display:none;padding-top:30px}.course-tab-panel.active{display:block}.course-tab-panel.course-tab-panel-instructor,.course-tab-panel.course-tab-panel-faqs{padding-top:30px}.course-tab-panel.course-tab-panel-reviews{padding:56px 0 0 0}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125rem;color:#333;font-size:18px;font-weight:500}.course-tab-panel .course-description p{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;margin-bottom:40px}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:0;margin-bottom:30px}}.course-tab-panel .lp-course-author img{width:50px;height:50px;margin-bottom:20px;border-radius:50%;object-fit:cover;object-position:center}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:18px}.course-tab-panel .lp-course-author .author-title a{color:#333;box-shadow:none;font-size:18px;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:14px;line-height:33px;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:"\f0d5"}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:40px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:18px;font-weight:600}.course-summary div.lp-list-co-instructor__bio__description{font-size:1rem}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .price{vertical-align:middle}.course-summary .course-price .origin-price{margin-left:10px;font-size:18px;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:24px}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2rem;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color);font-size:16px}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-size:1rem;font-style:italic;line-height:24px}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;left:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:"‘‘";transform:rotate(-180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:12px;line-height:1}.edit-content{margin-right:5px}ul.learn-press-nav-tabs{display:flex;margin:0;padding:0;border:1px solid rgba(204,204,204,0.3);border-bottom:0;background:#f1f2f8;list-style:none}ul.learn-press-nav-tabs .course-nav{float:right;position:relative;margin:0;border-left:1px solid rgba(204,204,204,0.3);border-bottom:1px solid rgba(204,204,204,0.3);list-style:none}ul.learn-press-nav-tabs .course-nav:first-child.active::after{position:absolute;top:-1px;right:-1px;width:1px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav:last-child{border-left:0}ul.learn-press-nav-tabs .course-nav:last-child.active::after{position:absolute;top:-1px;left:-2px;width:2px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav.active{border-bottom:0}ul.learn-press-nav-tabs .course-nav.active::before{position:absolute;top:-1px;right:0;width:100%;height:4px;background:var(--lp-primary-color);content:""}ul.learn-press-nav-tabs .course-nav.active label{color:var(--lp-primary-color);background-color:white}ul.learn-press-nav-tabs .course-nav a{display:inline-block;padding:10px 20px;border-bottom:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs .course-nav a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs[data-tabs] .course-nav{flex:1}ul.learn-press-nav-tabs[data-tabs] .course-nav a{width:100%;text-align:center}ul.learn-press-nav-tabs::after{display:block;clear:both;content:""}@media(max-width:767px){ul.learn-press-nav-tabs{display:grid;grid-template-columns:repeat(2,1fr);max-height:none}}.course-item-popup #tab-curriculum{display:block}.course-curriculum ul.curriculum-sections{position:relative;z-index:499;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-left:15px;margin-right:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{display:inline-flex;margin-top:10px;margin-left:auto;margin-right:auto;padding:10px 20px;border:1px solid #ccc;border-radius:4px;outline:0;color:#222;background:#f7f7f7;box-shadow:none;font-weight:500;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .section-item__loadmore.loading button::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.course-curriculum .section-header{display:table;width:100%;padding:0 0 26px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin:0;margin-top:10px;font-size:14px;line-height:21px;color:#999;font-style:italic}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:14px;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0 0 15px 0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;padding:10px 0;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;margin-right:14px;border-radius:3px;color:#fff;font-size:14px;line-height:23px;text-align:center;vertical-align:middle;padding:0 8px}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;vertical-align:middle;text-transform:lowercase;content:"\f00c"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{color:#fff;padding:0 8px;background:#00adff;display:inline-flex;align-items:center;justify-content:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:baseline;content:attr(data-preview)}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 30px 0 15px;background:rgba(241,242,248,0.4);font-size:14px;transition:padding-right linear .15s}@media(max-width:767px){.course-curriculum .course-item{padding:0 15px 0 0}}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-size:16px;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:table;padding-left:15px;padding-right:0;border-bottom:0;outline:0;box-shadow:none;line-height:1.5;color:#777;text-decoration:none}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{display:table-cell;display:table-cell;right:0;width:20px;padding:15px 0;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:400;vertical-align:middle;transition:right linear .15s}.course-curriculum .course-item .item-icon,.course-curriculum .course-item .item-name{display:table-cell;padding:17px 16px;color:#333;font-size:16px;font-weight:600;vertical-align:middle}.course-curriculum .course-item .item-icon::before{font-size:18px}.course-curriculum .course-item .item-icon.icon-lock{float:left;margin-top:15px}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:"\f059"}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:"\f15b"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:"\f03d"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:"\f028"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:"\f023"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:"\f00d"}.course-curriculum .course-item::before{position:absolute;top:50%;right:0;width:3px;height:0;background:#00adff;content:"";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{padding-right:10px;background:#f9f9f9}.course-curriculum .course-item.current a::before{right:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{padding:0;color:#666;font-size:1.4rem;letter-spacing:0;text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{display:flex;width:100%;margin-top:20px;margin-bottom:20px;padding:10px 0;border:0;outline:0;color:#fff;background:#333;box-shadow:none;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .curriculum-more__button.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}body.course-item-popupx{overflow:hidden;_opacity:0}body.course-item-popupx #learn-press-course-curriculum{overflow:auto;position:fixed;z-index:9999;top:32px;bottom:0;right:0;width:400px;border-left:1px solid #ddd;background:#fff}body.course-item-popupx #learn-press-course-curriculum .section-header{padding:0 15px}body.course-item-popupx #learn-press-course-curriculum .section-header .section-desc{margin:-10px 0 5px}body.course-item-popupx #learn-press-course-curriculum .course-item{padding-left:15px;padding-right:15px}body.course-item-popupx #learn-press-course-curriculum .course-item a::before{right:15px}body.course-item-popupx #learn-press-content-item{overflow:hidden;position:fixed;z-index:9999;top:32px;left:0;bottom:0;right:400px;background:#fff}body.course-item-popupx #learn-press-content-item .content-item-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #learn-press-content-item .course-item-title{font-size:1.4rem}body.course-item-popupx #learn-press-content-item .content-question-summary .review-heading{text-align:center}body.course-item-popupx #learn-press-content-item .content-question-summary .question-title{margin-bottom:10px;font-size:1.2rem}body.course-item-popupx #content-item-nav{position:fixed;z-index:99999;left:0;bottom:0;right:400px;height:60px;border-top:1px solid #ddd;background:#f5f5f5}body.course-item-popupx #content-item-nav .content-item-nav-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #content-item-nav button{height:40px;padding:0 20px;line-height:40px}body.course-item-popupx .comment-form-textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.course-item-popupx.wpadminbar #learn-press-course-curriculum,body.course-item-popupx.wpadminbar #learn-press-content-item{top:92px}body.course-item-popupx.wpadminbar .content-item-description{margin-bottom:20px}body.course-item-popupx .content-item-summary{margin-bottom:50px}body.course-item-popupx .content-item-summary>h3{margin-bottom:20px}body.course-item-popupx .content-item-summary.content-item-video .entry-video{position:absolute;top:0;right:0;width:100%;background:#000;line-height:1}body.course-item-popupx .content-item-summary.content-item-video .entry-video iframe{width:100%;max-width:900px;margin-bottom:0;vertical-align:top}body.course-item-popupx .learn-press-content-protected-message{margin-bottom:50px;padding:20px;background:#ffe0e0}body.course-item-popupx.content-only #learn-press-content-item{z-index:9999999;top:0;bottom:0;right:0}body.course-item-popupx.content-only #learn-press-content-item .content-item-scrollable{bottom:0}body #ifr-course-item{position:absolute;z-index:999999;top:0;right:0;width:100%;height:100%;background:#fff}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:left}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:"Font Awesome 5 Free"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:"\f017"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:"\f15c"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:"\f29c"}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.course-remaining-time .label-enrolled{font-size:inherit}.learn-press-form.completed button::before{margin-left:10px;font-family:"Font Awesome 5 Free";font-size:18px;content:"\f00c"}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.viewing-course-item .content-item-wrap{margin-top:50px}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-left .meta-item{margin-left:10px}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta .course-meta__pull-right .meta-item{margin-right:10px}.course-meta.course-meta-primary .meta-item{flex:1}.course-meta.two-columns .course-meta{flex:1}.course-extra-box{margin-bottom:3px;border:1px solid rgba(204,204,204,0.3);border-radius:5px}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 38px 0 45px;background:rgba(181,187,211,0.15);font-size:1.1rem;font-weight:600;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-right:15px}}.course-extra-box__title::after{position:absolute;top:0;left:20px;color:#666;font-family:"Font Awesome 5 Free";line-height:var(--extra-height);content:"\f0d7"}.course-extra-box__content{display:none}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:10px 38px;border-bottom:1px solid rgba(204,204,204,0.3);color:#666;font-size:16px;font-weight:300}@media(max-width:767px){.course-extra-box__content li{padding-right:30px;padding-left:30px}}.course-extra-box__content li::before{margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00c"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:"\f0d8"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:60px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:60px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(-5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs{padding-top:64px}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:25px 30px 25px 45px;font-size:1rem;font-weight:500;line-height:1.7;cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:50%;left:28px;color:#6c6c6c;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f078";transform:translateY(-50%)}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover{background:rgba(241,242,248,0.4)}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:0 28px 33px 28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box{background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:"\f077"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@media screen and (max-width:1300px){body.course-item-popup #learn-press-course-curriculum{width:300px}body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}body.course-item-popup #content-item-nav{right:300px}body.course-item-popup .section-desc{display:none}}@media screen and (max-width:1200px){body.course-item-popupx #learn-press-course-curriculum{width:300px}body.course-item-popupx #content-item-nav{right:300px}body.course-item-popupx #learn-press-content-item .content-item-nav-wrap,body.course-item-popupx #learn-press-content-item .content-item-wrap{width:90%}}@media screen and (max-width:768px){body.course-item-popup .course-curriculum{width:200px}body.course-item-popup #content-item-nav{right:200px}body.course-item-popup #learn-press-content-item .content-item-nav-wrap,body.course-item-popup #learn-press-content-item .content-item-wrap{width:90%}body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}.learn-press-course-results-progress{margin-left:0}.learn-press-course-results-progress .items-progress,.learn-press-course-results-progress .course-progress{float:none;width:100%;margin-left:0;margin-bottom:20px}}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:""}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:15px;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:20px}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:14px}.quiz-progress .progress-items .progress-item i{display:none;float:right;width:60px;height:60px;color:#fff;background:#00adff;font-size:30px;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:""}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;color:#777;background:#f5f5f5;font-size:20px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell;font-size:smaller}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;right:0;width:3px;background:#ddd;content:"";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:35px;min-width:35px;height:35px;margin:0 3px 0 10px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{margin-top:-10px;position:absolute;top:18px;right:9px;box-sizing:content-box;opacity:0;color:#3db748;font-family:"Font Awesome 5 Free";font-weight:900;font-size:16px;content:"\f00c"}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0;top:50%;right:50%;-webkit-transform:translate(50%,-50%);-moz-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);-o-transform:translate(50%,-50%);transform:translate(50%,-50%)}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answer-correct{background:#e1f5ff}.answer-options .answer-option.answer-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answer-correct input[type=checkbox]:checked ~ .option-title::before{background:#e1f5ff}.answer-options .answer-option.answered-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-correct input[type=checkbox]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option.answered-wrong input[type=radio]::before,.answer-options .answer-option.answered-wrong input[type=radio]::after,.answer-options .answer-option.answered-wrong input[type=checkbox]::before,.answer-options .answer-option.answered-wrong input[type=checkbox]::after{border-color:red}.answer-options .answer-option.answered-wrong input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-wrong input[type=checkbox]:checked ~ .option-title::before{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-right:5px;content:"(+" attr(data-counter) ")"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:"\f00c"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0 !important;color:#fff;background:#f02425;font-size:16px;line-height:22px;font-weight:400;display:flex;align-items:center;justify-content:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.quiz-result .result-message::after{margin-right:10px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00d"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid #999;color:#333;font-size:28px;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:16px;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:14px}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:right;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed #ccc}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:16px;font-weight:400;line-height:35px}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-left:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-size:16px;font-weight:500;line-height:35px;text-align:left}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:"\f017"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:"\f005"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:"\f059"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:"\f00c"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:"\f00d"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:"\f2f5"}.quiz-status{position:sticky;z-index:99;top:0;left:0;right:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;height:60px;margin:0 auto;padding:5px 30px 5px 10px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}@media(max-width:480px){.quiz-status>div{display:block;height:auto;text-align:center;padding:15px}.quiz-status>div .questions-index{margin-bottom:10px}}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:16px;font-weight:400;line-height:26px}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{position:relative;min-width:120px;margin-left:5px;padding:12px 29px;color:#333;background:#fff;font-size:14px;font-weight:400;line-height:1;text-align:center}.quiz-status .countdown .fas{position:absolute;top:50%;right:10px;color:#333;font-size:14px;transform:translateY(-50%)}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:"";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .submit-quiz button{margin:0 10px 0 0;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:12px;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-right:3px;font-family:"Font Awesome 5 Free";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;right:50%;width:10px;height:4px;margin-right:-5px;border-radius:2px;background:#aaa;content:""}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-left:10px;padding-right:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 0 0 40px;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 0 0 20px}}.quiz-intro-item::before{position:relative;top:-2px;margin-left:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:"\f012"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:"\f12e"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:"\f017"}.quiz-intro-item__title{margin:0;padding:0 0 0 8px;color:#333;font-size:16px;font-weight:300;line-height:1.7}.quiz-intro-item__content{color:#222;font-size:16px;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:""}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(-45deg)}.circle-bar .before{border-bottom-color:transparent;border-right-color:transparent;transform:rotate(-45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-left-color:transparent;transform:rotate(-45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-right-color:inherit;transform:rotate(-45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:left}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;right:50%;width:200px;height:200px;margin-right:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:""}.quiz-result .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.question .answer-option{padding:0;_border:2px solid #d9e0f1;background:#fff}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;margin:-19px 10px 0 0;border-color:#d9e0f1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:14px 65px 11px 10px;border:1px solid #ccc;color:#666;background:#fff;font-size:16px;font-weight:300;line-height:26px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title::after{display:inline-block;visibility:hidden !important;content:"."}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;color:#333;font-size:18px;font-weight:500}.question .question-title .edit-link{float:left;font-size:14px;font-weight:normal}.question .question-content{margin-bottom:30px;color:#666;font-size:16px;font-weight:300;line-height:26px}.question .question-content img{width:100%;max-width:100%}.question .question-response{margin-bottom:10px;font-size:14px}.question .question-response .label{display:inline-block;margin:0 0 0 5px;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 0 0 5px}.question .btn-show-hint{position:relative;margin:0 10px 0 0;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none}.question .btn-show-hint::before{font-family:"Font Awesome 5 Free";font-size:18px;content:"\f059"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;right:0;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed #ddd;text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-right:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.learn-press-message.fixed{position:fixed;top:32px;right:0;left:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-archive-courses ul{list-style-type:revert;padding:0 1em 23px 0}.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}@media(max-width:768px){.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{padding-right:15px;padding-left:15px}}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px}.lp-archive-courses ol ul{padding:2px 35px 2px 0}.lp-archive-courses ol ol{padding:2px 20px 2px 0}.lp-archive-courses thead th,.lp-archive-courses tr th{padding:9px 24px}.lp-archive-courses tr td{border-top:1px solid #eee;padding:6px 24px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul{padding:0 !important;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size="3"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-right:15px;padding-left:15px}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.learn-press-tip{display:none;margin:0 5px;color:#444;font-size:13px;font-style:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:"Font Awesome 5 Free";content:"\f059"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-right:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:12px;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:12px}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;left:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:16px;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:"Font Awesome 5 Free";content:"\f00d"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;right:50%;width:0;height:0;margin-right:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:""}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;right:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;left:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:30px;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}a{text-decoration:none}.lp-content-area{width:100%;max-width:1170px;margin:0 auto}@media(max-width:1024px){.lp-content-area{padding-left:15px;padding-right:15px}}.lp-content-area::after,.lp-content-area::before{display:table;clear:both;content:""}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:"";position:absolute;top:0;bottom:0;right:15px;left:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:#fff}.lp-archive-courses form[name=search-course]{position:relative;margin-bottom:20px}.lp-archive-courses form[name=search-course] .search-course-input{width:100%;padding:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-archive-courses form[name=search-course] .search-course-button{position:absolute;top:1px;left:1px;bottom:1px;height:auto;padding:15px;line-height:1px}.lp-archive-courses .learn-press-courses-header{float:right;padding-top:4px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:30px;font-weight:600}@media(max-width:767px){.lp-archive-courses .learn-press-courses-header{margin-bottom:20px}}.lp-archive-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.lp-archive-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.lp-archive-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-item:hover .course-wishlist{opacity:1}.lp-archive-courses .course-item .course-wishlist.filled{opacity:1}.lp-archive-courses .course-item .course-instructor{float:right;margin-bottom:16px;font-size:14px;font-weight:300;line-height:25px;text-transform:capitalize}.lp-archive-courses .course-item .course-instructor a{color:#059de9}.lp-archive-courses .course-item .course-instructor a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-content{position:relative;border-top:0}.lp-archive-courses .course-content .course-permalink{display:-webkit-box;clear:both;overflow:hidden;position:relative;border:0;color:#fff;text-decoration:none;text-transform:none;-webkit-line-clamp:2;-webkit-box-orient:vertical;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-permalink:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-review{display:none}.lp-archive-courses .course-content .course-categories,.lp-archive-courses .course-content .course-tags{display:block;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-categories{float:right;position:relative;margin-left:10px;margin-bottom:16px}.lp-archive-courses .course-content .course-categories a{display:inline-block;display:none;margin:0 10px;color:#fff;text-decoration:none}.lp-archive-courses .course-content .course-categories a:first-child{display:block;margin-right:0;padding:2px 16px;background:var(--lp-primary-color)}.lp-archive-courses .course-content .course-categories a:hover{color:#333}.lp-archive-courses .course-content .course-categories::after{position:absolute;top:50%;left:-2px;width:1px;height:12px;opacity:.5;background:#999;content:"";transform:translate(0,-50%)}.lp-archive-courses .course-content .course-info{color:#666;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-info>span{display:block}.lp-archive-courses .course-content .course-info .course-price{float:left}.lp-archive-courses .course-content .course-info .course-price .origin-price,.lp-archive-courses .course-content .course-info .course-price .price{color:#333;font-size:16px;font-weight:600}.lp-archive-courses .course-content .course-info .course-price .origin-price{margin-left:10px;color:#666;font-size:14px;font-weight:300;text-decoration:line-through}.lp-archive-courses .course-content .course-info .course-instructor{float:left}.lp-archive-courses .course-content .course-info::after{display:block;clear:both;content:""}.lp-archive-courses .course-content .course-excerpt{display:-webkit-box;overflow:hidden;margin-bottom:28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.lp-archive-courses .course-content .separator{display:none}.lp-archive-courses .course-wrap-thumbnail{overflow:hidden;position:relative}.lp-archive-courses .course-wrap-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;right:-110px;width:300px;text-align:center;transform:rotate(45deg)}.lp-archive-courses .course-wrap-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;left:6px;opacity:0;color:#fff;cursor:pointer}.lp-archive-courses .course-wrap-thumbnail .course-wishlist::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f004"}.lp-archive-courses .course-wrap-thumbnail .course-wishlist .course-wishlist__btn{display:none}.lp-archive-courses .course-wrap-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-wrap-thumbnail:hover::before{opacity:1}.lp-archive-courses .course-wrap-thumbnail:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-wrap-thumbnail:hover .course-wishlist{opacity:1}.lp-archive-courses .course-thumbnail a{display:block;overflow:hidden}.lp-archive-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.lp-archive-courses .course-thumbnail .thumbnail::before{position:absolute;z-index:1;top:0;left:0;bottom:0;right:0;opacity:0;background:rgba(0,0,0,0.5);content:"";transition:all .3s}.lp-archive-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1)}.lp-archive-courses .course-title{margin:0;padding:0;color:#333;font-size:16px;font-weight:600;line-height:24px}.lp-archive-courses .course-title:hover{color:var(--lp-primary-color)}@media(min-width:769px){.lp-archive-courses .course-summary-content .course-info-left{width:calc(100% - 330px)}}.lp-archive-courses .course-summary-content .course-title{margin-bottom:42px;color:#fff;font-size:1.5rem;font-weight:500;line-height:1}.lp-archive-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}@media(max-width:768px){.lp-archive-courses .course-summary-content{width:100%}}.lp-archive-courses .course-detail-info{padding:40px 0 10px 0;color:#fff;background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:"";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{left:100%;right:auto}.lp-archive-courses .course-detail-info::after{right:100%;left:auto}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;height:46px;margin-left:50px;font-size:16px;font-weight:300;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item span{padding-left:4px;padding-right:0}.lp-archive-courses .course-meta__pull-left .meta-item:last-child{margin-left:0}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-left:10px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:"\f017"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:"\f012"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:"\f0c5"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:"\f12e"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:"\f501"}@media(max-width:1024px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-left:30px}}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-left:0}}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:#999;font-size:14px;font-weight:300;line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:#fff;font-size:16px;font-weight:400;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories::before{margin-left:10px;font-size:36px;content:"\f02e"}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 5px}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column-reverse;justify-content:flex-end;align-items:flex-end}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:20px}}.lp-archive-courses .course-meta-primary{margin-bottom:36px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-left:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-left:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-272px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-right:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:#fff;background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:"Font Awesome 5 Free";font-size:26px;font-weight:900;content:"\f004"}.lp-archive-courses .course-summary-sidebar__inner>div{overflow:hidden;padding:20px;background:#fff}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-size:16px;font-weight:300;line-height:24px}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.learn-press-courses{clear:both;margin:0 -15px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course{width:25%;margin:0 0 60px 0;box-shadow:none;list-style:none}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;padding:24px;border:1px solid rgba(204,204,204,0.3);border-radius:4px;flex-wrap:wrap;justify-content:flex-end}@media(max-width:767px){.learn-press-courses[data-layout=list] .course{padding:15px}}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;justify-content:space-between}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{float:left;width:calc(64.2% - 76px);padding-top:5px}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 40px)}}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 25px)}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{width:100%;padding-top:20px}}.learn-press-courses[data-layout=list] .course-content .course-categories a{position:relative;padding:2px 15px 2px 20px;-webkit-clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%)}.learn-press-courses[data-layout=list] .course-content .course-permalink{height:25px;margin-bottom:5px;-webkit-line-clamp:1}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 0 10px 10px;padding:3px 5px;border-radius:3px;color:#fff;background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-footer{float:right;margin-left:20px}.learn-press-courses[data-layout=list] .course-content .course-footer .course-students{display:none}.learn-press-courses[data-layout=list] .course-content .course-footer .course-price{float:unset}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-footer{margin-bottom:30px}}.learn-press-courses[data-layout=list] .course-content .course-readmore{float:left;position:relative;left:4px}.learn-press-courses[data-layout=list] .course-content .course-readmore a{padding:9px 24px;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-weight:400;line-height:1;transition:all .3s;display:block}.learn-press-courses[data-layout=list] .course-content .course-readmore a:hover{opacity:.5;background:var(--lp-primary-color)}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-readmore{display:flex;float:unset;clear:both}}.learn-press-courses[data-layout=list] .course-wrap-meta{display:flex;padding-top:12px;padding-bottom:18px;color:#333;font-size:14px;font-weight:400}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:28px;text-transform:capitalize}@media(max-width:1024px){.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:20px}}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item::before{position:relative;top:-1px;margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-level::before{content:"\f012"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-duration::before{content:"\f017"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-lesson::before{content:"\f0c5"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-quiz::before{content:"\f12e"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-student::before{content:"\f501"}@media(max-width:815px){.learn-press-courses[data-layout=list] .course-wrap-meta{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:15px}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:15px}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-meta{grid-template-columns:repeat(3,1fr)}}.learn-press-courses[data-layout=list] .course-wrap-thumbnail{float:right;width:35.8%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-thumbnail{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:18px}.learn-press-courses[data-layout=grid] .course{padding:0 15px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course{width:100%}}.learn-press-courses[data-layout=grid] .course-item:hover{box-shadow:0 15px 20px 0 rgba(0,0,0,0.2)}.learn-press-courses[data-layout=grid] .course-item .course-instructor{margin-bottom:7px}.learn-press-courses[data-layout=grid] .course-content{padding:15px 20px 12px 20px;border:1px solid #f0f0f0;border-top:0;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-categories{float:left;position:absolute;z-index:1;top:-34px;left:-1px;margin-left:0}.learn-press-courses[data-layout=grid] .course-content .course-categories::after{display:none}.learn-press-courses[data-layout=grid] .course-content .course-categories a{position:relative;margin:0;padding:2px 22px 2px 12px;-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%)}.learn-press-courses[data-layout=grid] .course-content .course-permalink{height:48px;margin-bottom:20px}.learn-press-courses[data-layout=grid] .course-content .course-info{display:flex;flex-direction:column;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-wrap-meta,.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-readmore{display:none}.learn-press-courses[data-layout=grid] .course-content .course-footer{padding-top:18px;border-top:1px solid rgba(153,153,153,0.2)}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students{float:right;text-transform:capitalize}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students::before{position:relative;top:-1px;margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f501"}.learn-press-courses[data-layout=grid] .learn-press-message{margin-right:15px;margin-left:15px}.learn-press-courses[data-size="3"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size="3"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-courses-bar{display:flex;float:left;margin-bottom:48px}@media(max-width:767px){.lp-courses-bar{flex-direction:row;width:100%;justify-content:space-between}}.lp-courses-bar .search-courses{position:relative;width:306px;max-width:100%;margin-left:20px;line-height:1;flex:1}.lp-courses-bar .search-courses input[type=text]{width:100%;height:44px;padding:6px 18px 6px 32px;border:1px solid #ccc;border-radius:5px;background:#fff;font-size:14px;font-style:italic;line-height:1}.lp-courses-bar .search-courses input[type=text]:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{position:absolute;top:50%;left:12px;width:30px;height:30px;padding:0;border:0;color:#333;background:transparent;font-size:16px;line-height:1;transform:translate(0,-50%)}.lp-courses-bar .search-courses button:focus{border:0;outline:0}.lp-courses-bar .search-courses button.loading>i::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .search-courses ::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses :-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses ::placeholder{color:#999}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}}.lp-courses-bar .switch-layout{display:flex;height:44px;line-height:1;text-align:left;flex:0 0 40px;align-items:center;justify-content:center}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{display:block;width:40px;height:40px;margin:0;padding:0;border-radius:5px;font-size:16px;line-height:40px;text-align:center;cursor:pointer}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:8px 6px;color:#333;font-family:"Font Awesome 5 Free";font-weight:900;line-height:1}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:"\f00a"}.lp-courses-bar .switch-layout .switch-btn.list{margin-right:3px}.lp-courses-bar .switch-layout .switch-btn.list::before{content:"\f03a"}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background:#f5f5f5}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background:#f5f5f5}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background:#f5f5f5}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background:#f5f5f5}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background:#f5f5f5}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background:#f5f5f5}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background:#f5f5f5}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background:#f5f5f5}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background:#f5f5f5}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background:#f5f5f5}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repuchase_select{padding:20px;background:#f7f7f7}.lp_allow_repuchase_select>ul{padding:0;list-style:none}.lp_allow_repuchase_select>a{display:inline-block;margin-top:10px;color:#fff;background-color:#222}.comment-respond .comment-reply-title{font-size:30px;font-weight:500;line-height:1.2;margin-bottom:15px}.comment-respond .comment-form{margin:0 -15px}.comment-respond .comment-form>p label{display:block;margin-bottom:10px;font-size:16px;font-weight:500}.comment-respond .comment-form>p.comment-notes,.comment-respond .comment-form>p.logged-in-as{color:#666;font-size:16px}.comment-respond .comment-form>p.logged-in-as a{color:#666;text-decoration:underline}.comment-respond .comment-form>p.logged-in-as a:hover,.comment-respond .comment-form>p.logged-in-as a:focus{color:var(--lp-primary-color)}.comment-respond .comment-form>p.comment-form-cookies-consent{clear:both}.comment-respond .comment-form>p.comment-form-cookies-consent input{padding:0;margin-left:8px}.comment-respond .comment-form>p.comment-form-cookies-consent label{display:inline}.comment-respond .comment-form>p,.comment-respond .comment-form>div{padding:0 15px;margin-bottom:15px}.comment-respond .comment-form input[type=text],.comment-respond .comment-form input[type=email],.comment-respond .comment-form input[type=url]{height:40px;line-height:normal;width:100% !important;margin-bottom:15px}.comment-respond .comment-form input[type=submit]{background-color:var(--lp-primary-color);border:0;min-height:40px;line-height:40px;padding:0 15px;font-size:16px;text-transform:capitalize;font-weight:500;margin-top:15px;cursor:pointer;color:white}.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:33.33%;float:right}@media(max-width:575px){.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:100%;float:unset}}.comment-respond .comment-form textarea,.comment-respond .comment-form input{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-width:100%}.comment-respond .comment-form textarea{width:100%;display:block;padding:20px 15px;resize:none}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course:hover{opacity:.5;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice{margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice.error{border-color:#d85554}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1rem;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:16px;font-weight:300;line-height:16px;text-align:left}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:#666;font-size:18px;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:#333;font-size:1.8rem;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 20px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{display:flex;color:#666;font-size:16px;font-weight:300;justify-content:space-between}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-size:1rem;font-weight:300;line-height:24px}.course-sidebar-preview>*:last-child{margin-bottom:0}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none}.learnpress-page:hover{text-decoration:none}#popup-course{display:flex;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;background:#fff}#popup-course .back-course{padding-right:30px;padding-left:30px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-right:15px;padding-left:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course #popup-header{display:flex;position:fixed;z-index:100;left:0;right:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}#popup-course #popup-header .course-title{margin:0;padding:0;line-height:70px;letter-spacing:unset}#popup-course #popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-size:16px;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-header .course-title a:hover{color:var(--lp-primary-color)}@media(max-width:768px){#popup-course #popup-header .course-title{flex:1}}#popup-course #popup-header .items-progress{display:flex;justify-content:center;align-items:center}@media(max-width:768px){#popup-course #popup-header .items-progress{flex:1}}@media(max-width:767px){#popup-course #popup-header .items-progress{padding-bottom:20px;justify-content:end}}#popup-course #popup-header .number{padding-left:10px;color:#fff;font-size:14px;font-weight:300}#popup-course #popup-header .lp-button{display:flex;position:relative;height:40px;margin:9px;border:0;color:#fff;background:var(--lp-primary-color);font-size:14px;font-weight:400;justify-content:center;line-height:40px;align-items:center}#popup-course #popup-header .lp-button:hover{opacity:.8}#popup-course #popup-header .lp-button-back{float:left;margin:9px 10px}#popup-course #popup-header .lp-button-back button::before,#popup-course #popup-header .lp-button-back button::after{content:""}#popup-course #popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-course #popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-right:15px;padding-left:15px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column}}#popup-course #popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-course #popup-sidebar .search-course{display:flex;position:relative;height:70px;background:#f9fafc}#popup-course #popup-sidebar .search-course input[name=s]{display:block;width:100%;margin:6px 0;padding-right:20px;border:0;color:#999;background:transparent;box-shadow:none;font-size:14px;line-height:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:focus{outline:0;color:#222}#popup-course #popup-sidebar .search-course button{position:absolute;top:0;left:10px;width:16px;height:70px;margin:0 10px;padding:0;border:0;background:transparent;line-height:1px}#popup-course #popup-sidebar .search-course button::before{color:#666;font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f002"}#popup-course #popup-sidebar .search-course button.clear{display:none}#popup-course #popup-sidebar .search-course button.clear::before{content:"\f00d"}#popup-course #popup-sidebar .search-course .search-results{display:none;overflow:auto;position:fixed;z-index:99999999;top:92px;bottom:0;right:0;width:400px;margin:0;border-top-color:transparent;border-left:1px solid #d9e0f1;background:#fbfcff}#popup-course #popup-sidebar .search-course .search-results .search-results__item{border-bottom:1px solid #d9e0f1;background:#fff}#popup-course #popup-sidebar .search-course .search-results .search-results__item img{position:absolute;right:10px;width:40px;height:40px}#popup-course #popup-sidebar .search-course .search-results .search-results__item a{display:-webkit-box;overflow:hidden;position:relative;box-sizing:content-box;height:40px;padding:10px 60px 10px 10px;color:#777;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-sidebar .search-course .search-results .search-results__item:hover{background:#d9e0f1}#popup-course #popup-sidebar .search-course .search-results .search-results__item-title{overflow:hidden;margin:0 0 -2px 0;padding:0;font-size:16px;font-weight:normal}#popup-course #popup-sidebar .search-course .search-results .search-results__item-author{font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price{position:absolute;left:10px;bottom:10px;font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price .origin-price{font-size:smaller;text-decoration:line-through}#popup-course #popup-sidebar .search-course .search-results .search-results__not-found{padding:10px;color:#777}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination{padding:10px;text-align:center}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination a,#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{display:inline-block;margin:0 2px 10px 3px;padding:5px 8px;border:1px solid #d9e0f1;border-radius:4px;color:#777;font-size:14px;line-height:1;cursor:pointer}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{color:#999;background:#d9e0f1}#popup-course #popup-sidebar .search-course.searching .search-results{display:block}#popup-course #popup-sidebar .search-course.searching .clear{display:block}#popup-course #popup-sidebar .search-course.searching button{display:none}#popup-course #popup-sidebar .search-course.searching::after{position:absolute;z-index:1;bottom:0;right:50%;width:0;height:0;margin-right:-10px;border:10px solid transparent;border-bottom-color:#fff;content:""}#popup-course #popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar{width:6px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-course #popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-course #popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;left:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-course #popup-sidebar .section.section-empty .section-header{margin:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message{margin:0;padding:10px;border-bottom:1px solid #d9e0f1;border-radius:0;color:#999;background:#f5f5f5;font-size:14px}#popup-course #popup-sidebar .section.section-empty .learn-press-message::before,#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{position:absolute;z-index:9999;top:-16px;right:10px;width:0;height:0;border:8px solid transparent;border-bottom-color:#f5f5f5;background:transparent;content:"";-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{z-index:9998;top:-20px;right:8px;border-width:10px;border-bottom-color:#d9e0f1}#popup-course #popup-sidebar .section-header{position:sticky;z-index:1000;top:0;height:94px;padding:38px 20px 20px 20px;cursor:pointer;background-color:white}#popup-course #popup-sidebar .section-header .section-title{padding:0 0 4px 0;color:#000;font-size:20px;font-weight:500}#popup-course #popup-sidebar .section-header .section-title .show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d7"}#popup-course #popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-course #popup-sidebar .section-header .section-toggle i{color:#666}#popup-course #popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-course #popup-sidebar .section-content{margin-bottom:0}#popup-course #popup-sidebar .course-item{min-height:50px;margin-bottom:4px;padding:5px 20px;background:#f9fafc;align-items:center}#popup-course #popup-sidebar .course-item>span{display:none}#popup-course #popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-course #popup-sidebar .course-item::after{content:""}#popup-course #popup-sidebar .course-item.current{background:#eaeaea}#popup-course #popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-course #popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-course #popup-sidebar .section-item-link{line-height:1;padding-left:0}#popup-course #popup-sidebar .section-item-link::before{padding:12px 0;vertical-align:unset}#popup-course #popup-sidebar .section-item-link .item-name{width:100%;padding:0 17px 0 10px;font-size:14px;line-height:21px;font-weight:500}#popup-course #popup-sidebar .course-item-meta{padding:0}#popup-course #popup-sidebar .course-item-meta .item-meta{padding:0;color:#999;background:transparent;font-size:12px;line-height:1.5;height:auto}#popup-course #popup-sidebar .course-item-meta .item-meta:first-child{margin-right:0}#popup-course #popup-sidebar .course-item-meta .item-meta::before{font-size:12px;line-height:21px}#popup-course #popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-right:15px;padding-left:15px}#popup-course #popup-content .lp-button{position:relative;margin:0 0 0 10px;padding:12px 29px;border-color:var(--lp-secondary-color);font-size:14px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon{margin-left:5px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon::before{font-family:"Font Awesome 5 Free";content:"\f058"}#popup-course #popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:#eee;white-space:nowrap;text-transform:none}#popup-course #popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 11px;border-radius:3px;color:#333;background:#eee;white-space:nowrap}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:"\f110"}#popup-course #popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-course #popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;margin-top:32px;border-color:transparent;color:#fff;background:#3db748;font-size:16px;align-items:center;justify-content:center}#popup-course #popup-content .lp-button.completed i{margin-right:9px;font-size:14px}#popup-course #popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-course #popup-content.fixed-quiz-status .quiz-status>div{padding:0}@media(max-width:767px){#popup-course #popup-content{margin-top:113px}}#popup-course #popup-footer{position:fixed;z-index:999;left:0;bottom:0;right:475px;width:100%;max-width:792px;height:50px;margin:0 auto;border-top:1px solid #ebebeb;background:#fff;-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}@media(max-width:1024px){#popup-course #popup-footer{width:auto;padding:0 15px}}#popup-course #popup-footer .course-item-nav{justify-content:space-between}#popup-course #popup-footer .course-item-nav .prev,#popup-course #popup-footer .course-item-nav .next{display:flex;line-height:50px}#popup-course #popup-footer .course-item-nav .prev a,#popup-course #popup-footer .course-item-nav .next a{display:block;color:#666;font-size:16px}#popup-course #popup-footer .course-item-nav .prev::before,#popup-course #popup-footer .course-item-nav .next::before{color:#999;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900}#popup-course #popup-footer .course-item-nav .prev:hover a,#popup-course #popup-footer .course-item-nav .prev:hover::before,#popup-course #popup-footer .course-item-nav .next:hover a,#popup-course #popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-course #popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-course #popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-course #popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-course #popup-footer .course-item-nav .next::before{margin-right:10px;content:"\f0da"}#popup-course #popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-course #popup-footer .prev::before{margin-left:10px;content:"\f0d9"}#popup-course #popup-footer .prev .course-item-nav__name{left:auto;right:-30px}#popup-course #popup-footer .prev .course-item-nav__name::before{left:auto;right:5px}@media(max-width:1024px){#popup-course #popup-footer .prev .course-item-nav__name{right:15px}}#popup-course #popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;left:-30px;width:auto;padding:10px 15px;color:#666;background:#ccc;font-size:14px;font-weight:300;line-height:1}@media(max-width:1024px){#popup-course #popup-footer .course-item-nav__name{top:-25px;left:15px;right:auto}}#popup-course #sidebar-toggle{display:inline-block;position:absolute;z-index:100;top:198px;right:475px;width:25px;height:56px;margin:0;background:#fff;box-shadow:0 0 20px 0 rgba(0,0,0,0.15);cursor:pointer;transition:.25s;-webkit-appearance:none;border:0}#popup-course #sidebar-toggle:after{display:none}#popup-course #sidebar-toggle::before{display:inline-block;position:absolute;top:50%;right:50%;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d9";transition:.25s;transform:translate(50%,-50%)}#popup-course #sidebar-toggle:focus{border:0;outline:0}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:left}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid #f5f5f5;border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid #222;line-height:36px}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-right:10px;font-size:14px;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 0 0 5px}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #059601;border-radius:5px;font-size:1rem}#popup-course .question .answer-option input[type=radio],#popup-course .question .answer-option input[type=checkbox]{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 10px 0 0}#popup-course .question .answer-option input[type=radio]::before{border-radius:50%}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle{right:0}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle::before{content:"\f0da"}body.lp-sidebar-toggle__close #popup-course #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-course #popup-header,body.lp-sidebar-toggle__close #popup-course #popup-footer{right:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle{right:0}body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle::before{content:"\f0da"}body:not(.lp-sidebar-toggle__open) #popup-course #popup-sidebar{flex:0}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-course #popup-sidebar{flex-basis:300px}#popup-course #popup-sidebar .course-curriculum{width:300px}#popup-course #popup-header,#popup-course #popup-footer{right:300px}#popup-course #sidebar-toggle{right:299px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course #popup-sidebar{flex-basis:250px}#popup-course #popup-sidebar .course-curriculum{width:250px}#popup-course #popup-header,#popup-course #popup-footer{right:250px}#popup-course #sidebar-toggle{right:249px}#popup-course #sidebar-toggle:checked ~ #popup-sidebar{flex-basis:0}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;padding-bottom:80px}@media(max-width:1024px){.content-item-wrap{width:100%}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;color:#333;font-size:30px;font-weight:600}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap h4{font-size:1.5rem;font-weight:500;line-height:1.5}.content-item-wrap .content-item-summary{padding-top:50px}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:0;margin-bottom:18px;font-size:18px;letter-spacing:unset}.content-item-wrap .content-item-description p{margin:0 0 18px 0;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 15px 0 0}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]{margin:0;border:1px solid #d9e0f1;color:#777;background:#fbfcff}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]::before{display:inline-block;width:15px;height:15px;border:2px solid #d9e0f1;border-top-color:transparent;border-right-color:transparent;content:"";-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].prev::before{margin-right:7px;-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-ms-transform:rotate(-135deg);-o-transform:rotate(-135deg);transform:rotate(-135deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next{margin-right:-1px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next::before{margin-left:7px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]:hover{background:#fff}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:99999;bottom:0;right:50%;width:100%;max-width:792px;height:49px;margin-right:237px;transform:translateX(50%)}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-right:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .prev{border-top-left-radius:0;border-bottom-left-radius:0}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .next{border-top-right-radius:0;border-bottom-right-radius:0}.content-item-wrap .questions-pagination{height:33px;padding:8px 0;background:#fff;text-align:center}.content-item-wrap .questions-pagination .nav-links{text-align:center}.content-item-wrap .questions-pagination .nav-links .page-numbers{display:inline-block;vertical-align:middle;margin:0 3px 3px;padding:10px 16px;color:#666;background-color:transparent;font-size:16px;font-weight:300;line-height:1;border:1px solid;cursor:pointer}.content-item-wrap .questions-pagination .nav-links .page-numbers.next,.content-item-wrap .questions-pagination .nav-links .page-numbers.prev{display:inline-block;padding:10px;background:transparent;font-size:16px;text-align:center;text-decoration:none;text-transform:none;border:1px solid}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}.course-curriculum .section-title{position:relative;margin-bottom:0;padding:8px 0;color:#5383f7;font-size:16px;font-weight:normal;line-height:1}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:#ccc}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-size:inherit;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;padding-top:0;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;left:0;bottom:0;right:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;right:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-size:16px;font-weight:400;line-height:26px;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:""}.course-curriculum .section-header .section-left{display:flex}.course-curriculum .section-header .section-left .section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}*{box-sizing:border-box;margin:0;padding:0}button{cursor:pointer}input,button,select,textarea{outline:0}html{overflow-x:hidden}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-left:0;padding-right:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-left:auto;margin-right:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-right:0 !important;margin-left:0 !important;padding-right:0 !important;padding-left:0 !important}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part{padding-right:15px;padding-left:15px}}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}body{background:#fff}body.learnpress-page{overflow-x:hidden}.wrap-fullwidth a:focus,.wrap-fullwidth button:focus,.wrap-fullwidth input:focus,.wrap-fullwidth textarea:focus{border:0;outline:0}.wrap-fullwidth a:hover{text-decoration:none}.wrap-fullwidth p{word-break:break-word}.wrap-fullwidth p:last-child{margin-bottom:0}.wrap-fullwidth label{display:block;margin:0;outline:0}.wrap-fullwidth img{max-width:100%;height:auto}.wrap-fullwidth form{margin:0}.wrap-fullwidth .col-full{box-sizing:border-box;max-width:100%;padding:0}.wrap-fullwidth .col-full .woocommerce-breadcrumb{display:none}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:""}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-content-wrap{width:1170px;max-width:90%;margin:0 auto}.lp-content-wrap>h2{margin-top:0;margin-bottom:26px;color:#333;font-size:30px;font-weight:600}.learn-press-breadcrumb{max-width:1170px;width:100%;margin:0 auto 45px auto;padding:0;color:#333;font-size:14px;font-weight:400;list-style:none}.learn-press-breadcrumb li{display:inline-block;margin:0}.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}.learn-press-breadcrumb i{margin:0 5px;color:#666;font-size:12px}@media(max-width:1024px){.learn-press-breadcrumb{padding-left:15px;padding-right:15px}}.learn-press-breadcrumb a{color:#666;font-weight:500}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:16px 24px;border:1px solid #ccc;color:#333;background:transparent;box-shadow:unset;font-family:inherit;font-size:16px;font-weight:400;line-height:1;text-align:center;vertical-align:middle;text-decoration:none;text-transform:capitalize;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:18px}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-left:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .lp-button.loading::before,.learnpress-page #lp-button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.lp-ajax-message.error{border-color:#d85554}.course-meta{margin-bottom:14px}.course-meta .course-students::before{font-family:"Font Awesome 5 Free";content:""}.lp-entry-content .course-tabs{margin-bottom:60px}.learn-press-checkout-comment h4{display:none}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid #ccc;resize:none}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.retake-course,.enroll-course,.purchase-course{display:inline-block}.table-orders{font-size:16px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}.learn-press-pagination{padding-bottom:20px;text-align:center}.learn-press-pagination .page-numbers{display:inline-block;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learn-press-pagination .page-numbers>li{display:inline-block;margin:0;padding:0 14px}.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0;color:#666;background:transparent;font-size:16px;font-weight:300}.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.list-table-nav{display:flex;margin-right:0;list-style:none}ul.list-table-nav .nav-text{text-align:right;flex:1}ul.list-table-nav .nav-pages{text-align:left;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:#00adff}.primary-color-before::before{color:#00adff}.primary-color-after::after{color:#00adff}.primary-background-color{background:#00adff}.primary-background-color{background:#00adff}.course-origin-price{margin-left:5px;font-size:85%;text-decoration:line-through}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:left}.content-item-wrap #comments{margin-left:0;margin-right:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-summary-sidebar{position:relative}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}@media(min-width:1200px){.course-summary-sidebar.slide-top .course-summary-sidebar__inner{position:absolute}}.course-graduation span{color:#999}.course-graduation .icon{margin-left:5px;font-size:20px}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:"Font Awesome 5 Free";content:"\f071"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:""}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:25px;right:-110px;width:300px;background:#93f;text-align:center;transform:rotate(45deg)}.lp-badge.featured-course::before{font-size:12px;text-transform:uppercase;content:attr(data-text)}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.course-tabs .course-nav label{display:flex;align-items:center;justify-content:center;margin:0;padding:17px 10px;font-size:16px;line-height:1;font-weight:600;text-transform:capitalize;cursor:pointer}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-left:0}}.course-price:empty{display:none !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table{border-spacing:0;border-right:1px solid var(--lp-secondary-color);border-top:1px solid var(--lp-secondary-color);width:100%}.quiz-attempts table tr th,.quiz-attempts table tr td{border-left:1px solid var(--lp-secondary-color);border-bottom:1px solid var(--lp-secondary-color);padding:5px 15px;text-align:center}.quiz-attempts table tr th{font-weight:500}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}
1
+ @charset "UTF-8";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}.learn-press-message{position:relative;margin:0 0 20px 0;padding:10px 15px 10px 50px;border-top:5px solid #00adff;border-radius:0 0 5px 5px;background:#f5f5f5;width:100%}.learn-press-message.icon{padding-right:45px}.learn-press-message.icon::before{background:#00adff}.learn-press-message.icon::after{position:absolute;top:50%;right:15px;width:10px;height:10px;margin-top:-13px;margin-left:10px;border-radius:50%;color:#fff;background:#00adff;font-family:"Font Awesome 5 Free";font-size:20px;line-height:26px;text-align:center;vertical-align:baseline;content:"\f129"}.learn-press-message::before,.learn-press-message::after{position:absolute;top:0;content:""}.learn-press-message::before{left:20px;width:20px;height:30px;background:#00adff}.learn-press-message::after{top:10px;left:20px;width:0;height:0;border:10px solid transparent;border-bottom-color:#f5f5f5}.learn-press-message.error{border-color:#d85554}.learn-press-message.error::before{background:#d85554}.learn-press-message.error.icon::before,.learn-press-message.error.icon::after{background:#d85554}.learn-press-message.error.icon::after{content:"\f00d"}.learn-press-message.warning{border-color:#ffc107}.learn-press-message.warning::before{background:#ffc107}.learn-press-message.warning.icon::before,.learn-press-message.warning.icon::after{background:#ffc107}.learn-press-message.warning.icon::after{content:"\f00d"}.learn-press-message.success{border-color:#059601}.learn-press-message.success::before{background:#059601}.learn-press-message.success.icon::before,.learn-press-message.success.icon::after{background:#059601}.learn-press-message.success.icon::after{content:"\f129"}.learn-press-message a{text-decoration:underline}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.ajaxload{display:inline-block;position:relative;width:30px;height:30px;background:#7b7b7b;content:"";-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.ajaxload::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;display:inline-block;position:absolute;top:2px;right:50%;width:6px;height:6px;margin-right:-3px;background:#dedede;content:""}.lp-ajaxload-style-1{display:inline-block;position:relative;width:32px;height:32px}.lp-ajaxload-style-1::before,.lp-ajaxload-style-1::after{position:absolute;top:0;right:0;width:100%;height:100%;border:3px solid #ddd;content:""}.lp-ajaxload-style-1::after{clip:rect(0,32px,16px,16px);border-color:#2fa7ff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learn-press-tabs{margin-bottom:34px;background:#f1f2f8}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::after{background:#fff}.learn-press-tabs .learn-press-tabs__nav{display:flex;margin:0;padding:0;border:1px solid #e5e7f2;list-style:none}.learn-press-tabs .learn-press-tabs__tab{position:relative;margin:0;border-left:1px solid #e5e7f2;background:#f1f2f8;list-style:none}.learn-press-tabs .learn-press-tabs__tab:last-child{border-left:0}.learn-press-tabs .learn-press-tabs__tab>label{display:block;margin:0;padding:18px 65px;font-size:18px;line-height:1;font-weight:600;text-align:center;text-transform:capitalize;cursor:pointer}.learn-press-tabs .learn-press-tabs__tab>label a{color:#333}.learn-press-tabs .learn-press-tabs__tab>label a:focus{outline:0;text-decoration:none}@media(max-width:767px){.learn-press-tabs .learn-press-tabs__tab>label{padding:20px 50px 14px 50px}}.learn-press-tabs .learn-press-tabs__tab::before{position:absolute;top:-1px;right:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab::after{position:absolute;bottom:-1px;right:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab:first-child.active label{position:relative}.learn-press-tabs .learn-press-tabs__tab:first-child.active label::before{position:absolute;top:0;right:-1px;width:1px;height:100%;background:#fff;content:""}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}.learn-press-filters{display:flex;margin-bottom:30px;margin-right:0;list-style:none}.learn-press-filters>li{margin:0;font-size:16px;line-height:24px}@media(max-width:767px){.learn-press-filters>li{margin-left:30px;margin-right:0}.learn-press-filters>li:last-child{margin-left:0}}.learn-press-filters>li>a,.learn-press-filters>li>span{display:inline-block;font-weight:600}.learn-press-filters>li>span.count{font-weight:400}.learn-press-filters>li>span.count::before,.learn-press-filters>li>span.count::after{display:inline-block}.learn-press-filters>li>span.count::before{content:"("}.learn-press-filters>li>span.count::after{content:")"}.learn-press-filters>li span{color:#ffb606}.learn-press-filters>li span+span{color:#ffb606}.learn-press-filters>li span+span::before,.learn-press-filters>li span+span::after{color:#ffb606}.learn-press-filters>li a{color:#333;cursor:pointer}.learn-press-filters>li a+span{color:#333}.learn-press-filters>li a+span::before,.learn-press-filters>li a+span::after{color:#333}.learn-press-filters>li::after{margin:0 35px;color:#ccc;content:"|"}@media(max-width:767px){.learn-press-filters>li::after{display:none}}.learn-press-filters>li:last-child::after{display:none}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:24px;font-weight:600;line-height:1;font-family:var(--wp--preset--font-family--system-font)}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:left}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:right}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 0 0 4px;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;right:2px;color:#41abec;font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;line-height:1;content:"\f00c"}.lp-checkout-form .lp-checkout-remember a{color:#666;font-size:16px;font-weight:300;line-height:26px;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px;font-size:16px}.lp-checkout-form .lp-form-fields input{height:44px;line-height:normal;width:100%;padding:0 15px;border:1px solid #ccc}.lp-checkout-form .rwmb-input input:not([type=checkbox]){width:100%;height:43px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px}.lp-checkout-form .rwmb-input input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0;color:#222}.lp-checkout-form .rwmb-input ::placeholder{opacity:1;color:#999}.lp-checkout-form .rwmb-input :-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input ::-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input input:-webkit-autofill,.lp-checkout-form .rwmb-input input:-webkit-autofill:hover,.lp-checkout-form .rwmb-input input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px #fff inset;-webkit-text-fill-color:#999 !important}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:right}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:#ffb606}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;font-size:16px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-size:16px;font-weight:400}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:""}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid #ccc;border-radius:4px}#checkout-order table{width:100%;margin:0;border:0}#checkout-order td,#checkout-order th{box-sizing:content-box;border:1px solid rgba(204,204,204,0.3);border-top:0;border-left:0;border-right:0;background:unset;line-height:1;text-align:right;vertical-align:inherit}#checkout-order td:last-child,#checkout-order th:last-child{padding-left:0}#checkout-order .course-name{font-size:16px;font-weight:600;line-height:26px}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-size:16px;font-weight:600;line-height:26px;text-align:left}#checkout-order .order-total>th{padding:24px 0 24px 20px}#checkout-order .order-total .col-number{color:#333;font-size:26px}#checkout-order tfoot .cart-subtotal{color:#666;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot .cart-subtotal>th{padding:20px 0 17px 20px}#checkout-order tfoot .order-total th{color:#333;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 0 18px 13px}#checkout-order .course-thumbnail>img{width:100px;max-width:100% !important;height:auto !important}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:left}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-size:16px;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-right:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:left;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{float:left;margin-top:5px;color:#999;font-size:12px;font-weight:normal}#checkout-payment .secure-connection i{margin-left:5px;color:#ccc;font-size:18px}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 0 0 8px;border:1px solid #ccc;background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;right:50%;width:6px;height:6px;background:#41abec;transform:translate(50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:""}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}#checkout-payment #checkout-order-action button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-terms-and-conditions{color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:40px;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid #ddd;background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid #ddd;background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.lp-list-table{width:100%;margin-bottom:20px}.lp-list-table th,.lp-list-table td{padding:20px;border:0 solid rgba(204,204,204,0.3);border-bottom-width:1px;background:#fff;font-size:16px;line-height:1;text-align:right}@media(max-width:767px){.lp-list-table th,.lp-list-table td{padding:15px}}.lp-list-table thead{box-sizing:border-box;border:1px solid #e5e7f2}.lp-list-table thead tr th{height:60px;border-bottom:0;color:#333;background:#f1f2f8;font-size:18px}.lp-list-table tbody,.lp-list-table tfoot{box-sizing:border-box;border:1px solid rgba(204,204,204,0.3);border-top:0}.lp-list-table tbody tr td,.lp-list-table tbody tr th,.lp-list-table tfoot tr td,.lp-list-table tfoot tr th{height:62px;color:#666;background:#fff;font-size:16px;font-weight:300}.lp-list-table tbody tr td a,.lp-list-table tbody tr th a,.lp-list-table tfoot tr td a,.lp-list-table tfoot tr th a{border-bottom:0;color:#666;text-decoration:none}.lp-list-table tbody tr td a:hover,.lp-list-table tbody tr th a:hover,.lp-list-table tfoot tr td a:hover,.lp-list-table tfoot tr th a:hover{color:var(--lp-primary-color)}.lp-list-table tbody tr .column-status .result-percent,.lp-list-table tfoot tr .column-status .result-percent{font-weight:500}.lp-list-table tbody tr .column-status .lp-label,.lp-list-table tfoot tr .column-status .lp-label{font-weight:600}.lp-list-table tbody tr:nth-child(odd),.lp-list-table tfoot tr:nth-child(odd){background:#f5f5f5}.lp-list-table .list-table-nav td{font-size:14px}.lp-list-table .list-table-nav td.nav-text{text-align:right}.lp-list-table .list-table-nav td.nav-pages{text-align:left}.lp-list-table .list-table-nav td.nav-pages .learn-press-pagination{text-align:left}.lp-list-table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-size:16px;font-weight:300;line-height:1}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field label{display:block;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field textarea{width:100%;padding:8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:14px;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk{color:red}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-left:auto;margin-bottom:60px;margin-right:auto;padding:40px;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06) !important}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px;font-size:28px;line-height:1.4}.learn-press-form-login .form-fields .form-field label,.learn-press-form-register .form-fields .form-field label{font-size:16px;font-weight:400;user-select:none}.learn-press-form-login .form-fields .form-field input[type=text],.learn-press-form-login .form-fields .form-field input[type=password],.learn-press-form-login .form-fields .form-field input[type=tel],.learn-press-form-login .form-fields .form-field input[type=url],.learn-press-form-login .form-fields .form-field input[type=number],.learn-press-form-register .form-fields .form-field input[type=text],.learn-press-form-register .form-fields .form-field input[type=password],.learn-press-form-register .form-fields .form-field input[type=tel],.learn-press-form-register .form-fields .form-field input[type=url],.learn-press-form-register .form-fields .form-field input[type=number]{height:42px;border:1px solid #bbb;border-radius:4px;line-height:42px}.learn-press-form-login .form-fields .form-field input[type=text]:focus,.learn-press-form-login .form-fields .form-field input[type=password]:focus,.learn-press-form-login .form-fields .form-field input[type=tel]:focus,.learn-press-form-login .form-fields .form-field input[type=url]:focus,.learn-press-form-login .form-fields .form-field input[type=number]:focus,.learn-press-form-register .form-fields .form-field input[type=text]:focus,.learn-press-form-register .form-fields .form-field input[type=password]:focus,.learn-press-form-register .form-fields .form-field input[type=tel]:focus,.learn-press-form-register .form-fields .form-field input[type=url]:focus,.learn-press-form-register .form-fields .form-field input[type=number]:focus{border:0;outline:2px solid transparent !important;outline-offset:2px;box-shadow:0 0 0 2px #666 !important}.learn-press-form-login .form-fields .form-field.required label::after,.learn-press-form-register .form-fields .form-field.required label::after{content:" *";display:inline}.learn-press-form-login form[name=learn-press-login]>p>label,.learn-press-form-register form[name=learn-press-login]>p>label{color:#666;font-size:16px;cursor:pointer;user-select:none}.learn-press-form-login form[name=learn-press-login]>p>a,.learn-press-form-register form[name=learn-press-login]>p>a{color:#666;font-size:16px;line-height:1}.learn-press-form-login form[name=learn-press-login]>p:last-child,.learn-press-form-register form[name=learn-press-login]>p:last-child{margin-bottom:0}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{width:100%;height:50px;border-radius:3px;outline:0;color:#fff;background:var(--lp-primary-color);box-shadow:none;font-size:16px;line-height:1;vertical-align:middle;text-decoration:none}.required label{font-weight:bold}.required label:after{content:" *";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative}.lp-password-input input[type=password]{padding-left:2.5rem}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;left:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f06e"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:"\f070"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}.lp-user-profile{position:relative;background:#fff}.lp-user-profile .lp-user-profile-avatar img{position:relative;width:100%;height:auto;border-radius:unset;display:block}.lp-user-profile .lp-user-profile-avatar+.lp-user-profile-socials{margin-top:10px;margin-bottom:5px}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;z-index:1;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;width:35px;height:35px;margin:0 7px;border:1px solid #cfcfcf;color:#666;background:#fff;font-size:14px;line-height:35px;text-align:center;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lp-user-profile .lp-user-profile-socials a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.lp-user-profile .wrapper-profile-header{color:#fff;background:var(--lp-secondary-color);position:relative}@media(max-width:990px){.lp-user-profile .wrapper-profile-header .lp-profile-content-area{min-height:inherit;padding:50px 15px}.lp-user-profile .wrapper-profile-header .lp-profile-left{float:right;position:static}.lp-user-profile .wrapper-profile-header .lp-profile-right{float:left;width:calc(100% - 270px);margin-right:0}}@media(max-width:768px){.lp-user-profile .wrapper-profile-header .lp-profile-left{width:220px}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:calc(100% - 220px)}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials{margin-left:-5px;margin-right:-5px}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials a{width:36px;height:36px;margin:0 5px;line-height:36px}}@media(max-width:500px){.lp-user-profile .wrapper-profile-header .lp-profile-left{float:none;margin:0 auto}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:100%;padding-top:30px;text-align:center}}.lp-user-profile .wrapper-profile-header::before{left:100%;right:auto}.lp-user-profile .wrapper-profile-header::after{right:100%;left:auto}.lp-user-profile .lp-profile-content-area{position:relative;padding-top:50px;padding-bottom:50px;display:flex;align-items:center}@media(max-width:650px){.lp-user-profile .lp-profile-content-area{flex-direction:column}.lp-user-profile .lp-profile-content-area .lp-profile-right{text-align:center;width:100%;padding:50px 15px 0}}.lp-user-profile .lp-profile-left{min-width:270px;max-width:270px;padding:5px;border:2px solid #eaeaea;border-radius:3px}.lp-user-profile .lp-profile-right{padding-left:15px;padding-right:35px}.lp-user-profile .lp-profile-username{padding-bottom:10px;font-size:18px;font-weight:500;text-transform:capitalize}.lp-user-profile .lp-profile-username::before,.lp-user-profile .lp-profile-username::after{content:"";width:30px;height:1px;background-color:white;display:inline-block;vertical-align:middle;margin:0}.lp-user-profile .lp-profile-username::before{margin-left:5px}.lp-user-profile .lp-profile-username::after{margin-right:5px}.lp-user-profile .lp-profile-user-bio{font-size:16px;font-weight:300;line-height:26px}.lp-user-profile #profile-sidebar{float:right;width:270px;margin-top:0;border:1px solid rgba(0,0,0,0.1);border-top:0;background:#fff;margin-top:58px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%}.lp-user-profile #profile-sidebar .lp-user-profile-avatar{max-width:150px}}.lp-user-profile #profile-nav .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{position:relative;margin:0;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li a{display:block;padding:0 20px;color:#333;font-size:16px;font-weight:500;line-height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{padding:0 52px 0 20px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a>i{display:inline-block;position:absolute;right:24px;width:28px;color:var(--lp-primary-color);font-size:12px;line-height:53px;text-align:right}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{float:left;margin-left:4px;color:#999;font-family:"Font Awesome 5 Free";font-size:10px;font-weight:900;content:"\f054"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid #f9f9f9}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li:hover>a i{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover{background:var(--lp-primary-color)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover>a::after{content:"\f053"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-right:52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist>a::before{position:absolute;right:25px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f004"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist:hover a::before{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.logout>a::after{display:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>a{box-sizing:border-box;height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;right:100%;min-width:150px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a::after{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul{position:relative;right:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active{background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a{color:#ffb606}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a i{color:#ffb606}@media(max-width:990px){.lp-user-profile #profile-nav{overflow-x:scroll;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs{width:max-content}.lp-user-profile #profile-nav .lp-profile-nav-tabs::after{display:table;clear:both;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{float:right;border:0;border-left:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{height:auto;padding:0 45px 0 20px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-right:10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.has-child a::after{content:"\f077"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-right:45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a::after{content:"\f078"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(20%)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li{float:right;border-left:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-left:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover ul{display:none !important}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:not(.has-child)>a::after{display:none}}@media(max-width:560px){.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{max-width:80px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{font-size:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-right:0}}.lp-user-profile .lp-profile-content{float:left;width:calc(100% - 300px);margin-bottom:60px;padding-top:58px}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .learn-press-tabs__nav{display:block;width:100%;border:0}.lp-user-profile .lp-profile-content .learn-press-tabs__nav::after{display:table;clear:both;content:""}.lp-user-profile .lp-profile-content .learn-press-tabs__tab{float:right;border-left:0}.lp-user-profile .lp-profile-content .learn-press-tabs__tab label{padding-left:25px;padding-right:25px}.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content .lp-button{display:block;margin:0 auto 52px auto;padding:13px 34px;border-color:var(--lp-secondary-color);font-size:14px;font-weight:500;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.lp-user-profile .lp-profile-content .lp-button:hover{border-color:var(--lp-primary-color)}.lp-user-profile ul.learn-press-courses .course{margin:0 0 40px 0}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-left:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile #dashboard-general-statistic{margin-bottom:55px;padding-bottom:20px;border-bottom:1px solid #ddd}.lp-user-profile .dashboard-general-statistic__row{display:flex;margin:0 -15px;justify-content:center;flex-wrap:wrap}.lp-user-profile .dashboard-general-statistic__row .statistic-box{min-width:200px;max-width:270px;margin:0 15px 40px 15px;padding:15px 20px;border:1px solid #ccc;border-radius:4px;background:#f9fafc;text-align:center}@media(max-width:990px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:45%}}@media(max-width:767px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:100%;margin:0 15px 15px}}.lp-user-profile .dashboard-general-statistic__row .statistic-box:hover{background:#eaeaea}.lp-user-profile .dashboard-general-statistic__row[data-col="2"] .statistic-box{width:50%}.lp-user-profile .dashboard-general-statistic__row[data-col="4"] .statistic-box{width:25%}.lp-user-profile .dashboard-general-statistic__row[data-col="5"] .statistic-box{width:20%}.lp-user-profile .statistic-box .statistic-box__text{margin:0 0 7px 0;padding:0;color:#666;font-size:18px;font-weight:400;line-height:1}.lp-user-profile .statistic-box .statistic-box__number{color:#333;font-size:18px;font-weight:500;line-height:1}.lp-user-profile .profile-courses>h3{margin-top:0;margin-bottom:36px;color:#333;font-size:30px;font-weight:600;line-height:1;text-transform:capitalize}.lp-profile-content table.lp-list-table{border-spacing:0;border-top:1px solid #ccc;border-right:1px solid #ccc;margin-bottom:40px}.lp-profile-content table.lp-list-table tr th,.lp-profile-content table.lp-list-table tr td{border-left:1px solid #ccc;border-bottom:1px solid #ccc;text-align:center}.lp-profile-content table.lp-list-table tr td a{color:var(--wp--preset--color--foreground);font-weight:400}.lp-profile-content table.lp-list-table tr td a:hover{color:var(--lp-primary-color)}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:30px;line-height:1.5;font-weight:500;margin-bottom:15px;font-family:var(--wp--preset--font-family--system-font)}.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 10px 24px 10px}.profile-basic-information .form-field>label,form[name=profile-change-password] .form-field>label{margin:0 0 12px 0;color:#333;font-size:16px;font-weight:500;font-style:italic}.profile-basic-information .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input input{height:43px;padding:8px 20px;font-weight:400}.profile-basic-information .form-field .form-field-input input[type=password],form[name=profile-change-password] .form-field .form-field-input input[type=password]{padding:8px 20px}.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input textarea{padding:9px 20px 16px 20px;font-weight:300;line-height:24px}.profile-basic-information .form-field .form-field-input input,.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input textarea{border:1px solid #ccc;color:#999;font-size:14px;font-style:italic}.profile-basic-information .form-field .form-field-input input:focus,.profile-basic-information .form-field .form-field-input textarea:focus,form[name=profile-change-password] .form-field .form-field-input input:focus,form[name=profile-change-password] .form-field .form-field-input textarea:focus{border-color:var(--lp-primary-color);outline:0;color:#222}.profile-basic-information .form-field .form-field-input ::placeholder,form[name=profile-change-password] .form-field .form-field-input ::placeholder{opacity:1;color:#999}.profile-basic-information .form-field .form-field-input :-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input :-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input ::-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input ::-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input .description,form[name=profile-change-password] .form-field .form-field-input .description{margin-top:15px}@media(max-width:767px){.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 0 24px 0}}.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:right;width:calc(50% - 20px);margin-left:10px}@media(max-width:767px){.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:unset;width:100%;margin:0 0 24px 0}}.profile-basic-information .form-field__clear,form[name=profile-change-password] .form-field__clear{clear:both}.profile-basic-information button,form[name=profile-change-password] button{padding:16px 24px;border:0;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-size:16px;font-weight:400;line-height:1}.profile-basic-information button:hover,form[name=profile-change-password] button:hover{opacity:.5;background:var(--lp-primary-color)}.profile-basic-information p,form[name=profile-change-password] p{margin:0}#learn-press-profile-basic-information .form-fields::after{display:block;clear:both;content:""}@media(max-width:767px){#learn-press-profile-basic-information .form-fields{margin:0}}#learn-press-profile-basic-information button[type=submit]{padding:0 15px;height:40px;line-height:40px;border:0;display:inline-flex;align-items:center;justify-content:center;background-color:var(--lp-primary-color);color:white;font-size:16px;font-weight:400;-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#learn-press-profile-basic-information button[type=submit]:hover{opacity:.5;background-color:var(--lp-primary-color)}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;color:#999;font-size:.8em;font-style:italic}div.order-recover{display:flex}div.order-recover>.button-recover-order{margin:0;margin-right:20px;flex:0 0 auto}div.order-recover>.button-recover-order.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}div.order-recover input[type=text]{width:100%;height:43px;margin-left:10px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px;flex:1 1 auto}.learn-press-profile-course__progress .lp_profile_course_progress{border:1px solid #eee;border-top:0;overflow-x:auto}.learn-press-profile-course__progress .lp_profile_course_progress__item{display:grid;align-items:center;padding:15px;border-top:1px solid #eee;grid-template-columns:90px 1fr 80px 190px 140px;column-gap:20px}.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:60px;height:auto}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:100%}}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item{display:block}}.learn-press-profile-course__progress .lp_profile_course_progress__header{background-color:#eee}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__header{display:flex;overflow-x:auto;white-space:nowrap;justify-content:flex-end}}.lp_profile_course_progress__nav button.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.entry-content ul.learn-press-profile-course__tab__inner{padding:0}.content ul.learn-press-courses{margin-right:-15px;margin-left:-15px}.content ul.learn-press-courses[data-layout=list]{margin:0}.learn-press-profile-course__tab__inner{display:flex;margin:40px 0 0 0 !important;padding:0 !important;background:#eee;list-style:none !important}.learn-press-profile-course__tab__inner>li{list-style:none;margin:0 !important}.learn-press-profile-course__tab__inner>li:hover{cursor:pointer}.learn-press-profile-course__tab__inner a{display:inline-block;padding:15px 30px;font-weight:600;position:relative}.learn-press-profile-course__tab__inner a.active{color:var(--lp-primary-color);background:#fff}.learn-press-profile-course__tab__inner a.active::before{content:"";height:4px;width:100%;background-color:var(--lp-primary-color);position:absolute;top:0;right:0;left:auto}.learn-press-course-tab-filters .learn-press-filters{margin-top:20px;margin-right:0;padding:0;list-style:none}.learn-press-course-tab-filters .learn-press-filters a.active{color:var(--lp-primary-color)}.lp-profile-content ul{list-style:none !important;padding:0 !important}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed #ccc;border-radius:3px;background-color:#fafafa;font-size:14px;font-weight:300;font-style:italic;line-height:43px;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-right:15px;margin-left:0}#primary .learn-press-courses[data-size="3"] .course{width:50%}body.learnpress .learn-press-tabs .learn-press-tabs__tab,body.learnpress .attachment-recent-works-thumbnail{border-radius:0}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panels .course-tab-panel{padding-top:30px}.course-tab-panel{display:none}.course-tab-panel.active{display:block}.course-tab-panel .course-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125rem;color:#333;font-size:18px;font-weight:500}.course-tab-panel .course-description p{line-height:inherit}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;margin-bottom:40px}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:0;margin-bottom:30px}}.course-tab-panel .lp-course-author img{width:50px;height:50px;margin-bottom:20px;border-radius:50%;object-fit:cover;object-position:center}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:18px}.course-tab-panel .lp-course-author .author-title a{color:#333;box-shadow:none;font-size:18px;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:14px;line-height:33px;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:"\f0d5"}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:40px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:18px;font-weight:600}.course-summary div.lp-list-co-instructor__bio__description{font-size:1rem}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .price{vertical-align:middle}.course-summary .course-price .origin-price{margin-left:10px;font-size:18px;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:24px}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2rem;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color);font-size:16px}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-size:1rem;font-style:italic;line-height:24px}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;left:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:"‘‘";transform:rotate(-180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:12px;line-height:1}.edit-content{margin-right:5px}ul.learn-press-nav-tabs{display:flex;margin:0;padding:0;border:1px solid rgba(204,204,204,0.3);border-bottom:0;background:#f1f2f8;list-style:none}ul.learn-press-nav-tabs .course-nav{float:right;position:relative;margin:0;border-left:1px solid rgba(204,204,204,0.3);border-bottom:1px solid rgba(204,204,204,0.3);list-style:none}ul.learn-press-nav-tabs .course-nav:first-child.active::after{position:absolute;top:-1px;right:-1px;width:1px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav:last-child{border-left:0}ul.learn-press-nav-tabs .course-nav:last-child.active::after{position:absolute;top:-1px;left:-2px;width:2px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav.active{border-bottom:0}ul.learn-press-nav-tabs .course-nav.active::before{position:absolute;top:-1px;right:0;width:100%;height:4px;background:var(--lp-primary-color);content:""}ul.learn-press-nav-tabs .course-nav.active label{color:var(--lp-primary-color);background-color:white}ul.learn-press-nav-tabs .course-nav a{display:inline-block;padding:10px 20px;border-bottom:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs .course-nav a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs[data-tabs] .course-nav{flex:1}ul.learn-press-nav-tabs[data-tabs] .course-nav a{width:100%;text-align:center}ul.learn-press-nav-tabs::after{display:block;clear:both;content:""}@media(max-width:767px){ul.learn-press-nav-tabs{display:grid;grid-template-columns:repeat(2,1fr);max-height:none}}.course-item-popup #tab-curriculum{display:block}.course-curriculum ul.curriculum-sections{position:relative;z-index:499;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-left:15px;margin-right:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{display:inline-flex;margin-top:10px;margin-left:auto;margin-right:auto;padding:10px 20px;border:1px solid #ccc;border-radius:4px;outline:0;color:#222;background:#f7f7f7;box-shadow:none;font-weight:500;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .section-item__loadmore.loading button::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.course-curriculum .section-header{display:table;width:100%;padding:0 0 26px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin:0;margin-top:10px;font-size:14px;line-height:21px;color:#999;font-style:italic}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:14px;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0 0 15px 0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;padding:10px 0;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;margin-right:14px;border-radius:3px;color:#fff;font-size:14px;line-height:23px;text-align:center;vertical-align:middle;padding:0 8px}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;vertical-align:middle;text-transform:lowercase;content:"\f00c"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{color:#fff;padding:0 8px;background:#00adff;display:inline-flex;align-items:center;justify-content:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:baseline;content:attr(data-preview)}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 30px 0 15px;background:rgba(241,242,248,0.4);font-size:14px;transition:padding-right linear .15s}@media(max-width:767px){.course-curriculum .course-item{padding:0 15px 0 0}}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-size:16px;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:table;padding-left:15px;padding-right:0;border-bottom:0;outline:0;box-shadow:none;line-height:1.5;color:#777;text-decoration:none}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{display:table-cell;display:table-cell;right:0;width:20px;padding:15px 0;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:400;vertical-align:middle;transition:right linear .15s}.course-curriculum .course-item .item-icon,.course-curriculum .course-item .item-name{display:table-cell;padding:17px 16px;color:#333;font-size:16px;font-weight:600;vertical-align:middle}.course-curriculum .course-item .item-icon::before{font-size:18px}.course-curriculum .course-item .item-icon.icon-lock{float:left;margin-top:15px}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:"\f059"}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:"\f15b"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:"\f03d"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:"\f028"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:"\f023"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:"\f00d"}.course-curriculum .course-item::before{position:absolute;top:50%;right:0;width:3px;height:0;background:#00adff;content:"";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{padding-right:10px;background:#f9f9f9}.course-curriculum .course-item.current a::before{right:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{padding:0;color:#666;font-size:1.4rem;letter-spacing:0;text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{display:flex;width:100%;margin-top:20px;margin-bottom:20px;padding:10px 0;border:0;outline:0;color:#fff;background:#333;box-shadow:none;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .curriculum-more__button.loading::before{display:inline-block;margin-left:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}body.course-item-popupx{overflow:hidden;_opacity:0}body.course-item-popupx #learn-press-course-curriculum{overflow:auto;position:fixed;z-index:9999;top:32px;bottom:0;right:0;width:400px;border-left:1px solid #ddd;background:#fff}body.course-item-popupx #learn-press-course-curriculum .section-header{padding:0 15px}body.course-item-popupx #learn-press-course-curriculum .section-header .section-desc{margin:-10px 0 5px}body.course-item-popupx #learn-press-course-curriculum .course-item{padding-left:15px;padding-right:15px}body.course-item-popupx #learn-press-course-curriculum .course-item a::before{right:15px}body.course-item-popupx #learn-press-content-item{overflow:hidden;position:fixed;z-index:9999;top:32px;left:0;bottom:0;right:400px;background:#fff}body.course-item-popupx #learn-press-content-item .content-item-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #learn-press-content-item .course-item-title{font-size:1.4rem}body.course-item-popupx #learn-press-content-item .content-question-summary .review-heading{text-align:center}body.course-item-popupx #learn-press-content-item .content-question-summary .question-title{margin-bottom:10px;font-size:1.2rem}body.course-item-popupx #content-item-nav{position:fixed;z-index:99999;left:0;bottom:0;right:400px;height:60px;border-top:1px solid #ddd;background:#f5f5f5}body.course-item-popupx #content-item-nav .content-item-nav-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #content-item-nav button{height:40px;padding:0 20px;line-height:40px}body.course-item-popupx .comment-form-textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.course-item-popupx.wpadminbar #learn-press-course-curriculum,body.course-item-popupx.wpadminbar #learn-press-content-item{top:92px}body.course-item-popupx.wpadminbar .content-item-description{margin-bottom:20px}body.course-item-popupx .content-item-summary{margin-bottom:50px}body.course-item-popupx .content-item-summary>h3{margin-bottom:20px}body.course-item-popupx .content-item-summary.content-item-video .entry-video{position:absolute;top:0;right:0;width:100%;background:#000;line-height:1}body.course-item-popupx .content-item-summary.content-item-video .entry-video iframe{width:100%;max-width:900px;margin-bottom:0;vertical-align:top}body.course-item-popupx .learn-press-content-protected-message{margin-bottom:50px;padding:20px;background:#ffe0e0}body.course-item-popupx.content-only #learn-press-content-item{z-index:9999999;top:0;bottom:0;right:0}body.course-item-popupx.content-only #learn-press-content-item .content-item-scrollable{bottom:0}body #ifr-course-item{position:absolute;z-index:999999;top:0;right:0;width:100%;height:100%;background:#fff}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:left}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:"Font Awesome 5 Free"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:"\f017"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:"\f15c"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:"\f29c"}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.course-remaining-time .label-enrolled{font-size:inherit}.learn-press-form.completed button::before{margin-left:10px;font-family:"Font Awesome 5 Free";font-size:18px;content:"\f00c"}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.viewing-course-item .content-item-wrap{margin-top:50px}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-left .meta-item{margin-left:10px}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta .course-meta__pull-right .meta-item{margin-right:10px}.course-meta.course-meta-primary .meta-item{flex:1}.course-meta.two-columns .course-meta{flex:1}.course-extra-box{margin-bottom:3px;border:1px solid rgba(204,204,204,0.3);border-radius:5px}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 38px 0 45px;background:rgba(181,187,211,0.15);font-size:1.1rem;font-weight:600;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-right:15px}}.course-extra-box__title::after{position:absolute;top:0;left:20px;color:#666;font-family:"Font Awesome 5 Free";line-height:var(--extra-height);content:"\f0d7"}.course-extra-box__content{display:none}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:10px 38px;border-bottom:1px solid rgba(204,204,204,0.3);color:#666;font-size:16px;font-weight:300}@media(max-width:767px){.course-extra-box__content li{padding-right:30px;padding-left:30px}}.course-extra-box__content li::before{margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00c"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:"\f0d8"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:60px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:60px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(-5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs{padding-top:64px}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:20px 25px 20px 45px;font-size:1.1rem;font-weight:500;line-height:1.7;cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:50%;left:28px;color:#6c6c6c;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f078";transform:translateY(-50%)}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover{background:rgba(241,242,248,0.4)}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:0 25px 25px 25px;color:#666;font-size:1rem;font-weight:300;line-height:26px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box{background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:"\f077"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@media screen and (max-width:1300px){body.course-item-popup #learn-press-course-curriculum{width:300px}body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}body.course-item-popup #content-item-nav{right:300px}body.course-item-popup .section-desc{display:none}}@media screen and (max-width:1200px){body.course-item-popupx #learn-press-course-curriculum{width:300px}body.course-item-popupx #content-item-nav{right:300px}body.course-item-popupx #learn-press-content-item .content-item-nav-wrap,body.course-item-popupx #learn-press-content-item .content-item-wrap{width:90%}}@media screen and (max-width:768px){body.course-item-popup .course-curriculum{width:200px}body.course-item-popup #content-item-nav{right:200px}body.course-item-popup #learn-press-content-item .content-item-nav-wrap,body.course-item-popup #learn-press-content-item .content-item-wrap{width:90%}body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}.learn-press-course-results-progress{margin-left:0}.learn-press-course-results-progress .items-progress,.learn-press-course-results-progress .course-progress{float:none;width:100%;margin-left:0;margin-bottom:20px}}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:""}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:15px;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:20px}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:14px}.quiz-progress .progress-items .progress-item i{display:none;float:right;width:60px;height:60px;color:#fff;background:#00adff;font-size:30px;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:""}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;color:#777;background:#f5f5f5;font-size:20px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell;font-size:smaller}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;right:0;width:3px;background:#ddd;content:"";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:35px;min-width:35px;height:35px;margin:0 3px 0 10px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{margin-top:-10px;position:absolute;top:18px;right:9px;box-sizing:content-box;opacity:0;color:#3db748;font-family:"Font Awesome 5 Free";font-weight:900;font-size:16px;content:"\f00c"}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0;top:50%;right:50%;-webkit-transform:translate(50%,-50%);-moz-transform:translate(50%,-50%);-ms-transform:translate(50%,-50%);-o-transform:translate(50%,-50%);transform:translate(50%,-50%)}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answer-correct{background:#e1f5ff}.answer-options .answer-option.answer-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answer-correct input[type=checkbox]:checked ~ .option-title::before{background:#e1f5ff}.answer-options .answer-option.answered-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-correct input[type=checkbox]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option.answered-wrong input[type=radio]::before,.answer-options .answer-option.answered-wrong input[type=radio]::after,.answer-options .answer-option.answered-wrong input[type=checkbox]::before,.answer-options .answer-option.answered-wrong input[type=checkbox]::after{border-color:red}.answer-options .answer-option.answered-wrong input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-wrong input[type=checkbox]:checked ~ .option-title::before{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-right:5px;content:"(+" attr(data-counter) ")"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:"\f00c"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0 !important;color:#fff;background:#f02425;font-size:16px;line-height:22px;font-weight:400;display:flex;align-items:center;justify-content:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.quiz-result .result-message::after{margin-right:10px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00d"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid #999;color:#333;font-size:28px;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:16px;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:14px}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:right;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed #ccc}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:16px;font-weight:400;line-height:35px}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-left:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-size:16px;font-weight:500;line-height:35px;text-align:left}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:"\f017"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:"\f005"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:"\f059"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:"\f00c"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:"\f00d"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:"\f2f5"}.quiz-status{position:sticky;z-index:99;top:0;left:0;right:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;height:60px;margin:0 auto;padding:5px 30px 5px 10px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}@media(max-width:480px){.quiz-status>div{display:block;height:auto;text-align:center;padding:15px}.quiz-status>div .questions-index{margin-bottom:10px}}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:16px;font-weight:400;line-height:26px}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{position:relative;min-width:120px;margin-left:5px;padding:12px 29px;color:#333;background:#fff;font-size:14px;font-weight:400;line-height:1;text-align:center}.quiz-status .countdown .fas{position:absolute;top:50%;right:10px;color:#333;font-size:14px;transform:translateY(-50%)}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:"";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .submit-quiz button{margin:0 10px 0 0;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:12px;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-right:3px;font-family:"Font Awesome 5 Free";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;right:50%;width:10px;height:4px;margin-right:-5px;border-radius:2px;background:#aaa;content:""}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-left:10px;padding-right:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 0 0 40px;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 0 0 20px}}.quiz-intro-item::before{position:relative;top:-2px;margin-left:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:"\f012"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:"\f12e"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:"\f017"}.quiz-intro-item__title{margin:0;padding:0 0 0 8px;color:#333;font-size:16px;font-weight:300;line-height:1.7}.quiz-intro-item__content{color:#222;font-size:16px;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:""}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(-45deg)}.circle-bar .before{border-bottom-color:transparent;border-right-color:transparent;transform:rotate(-45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-left-color:transparent;transform:rotate(-45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-right-color:inherit;transform:rotate(-45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:left}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;right:50%;width:200px;height:200px;margin-right:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:""}.quiz-result .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.question .answer-option{padding:0;_border:2px solid #d9e0f1;background:#fff}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;margin:-19px 10px 0 0;border-color:#d9e0f1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:14px 65px 11px 10px;border:1px solid #ccc;color:#666;background:#fff;font-size:16px;font-weight:300;line-height:26px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title::after{display:inline-block;visibility:hidden !important;content:"."}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;color:#333;font-size:18px;font-weight:500}.question .question-title .edit-link{float:left;font-size:14px;font-weight:normal}.question .question-content{margin-bottom:30px;color:#666;font-size:16px;font-weight:300;line-height:26px}.question .question-content img{width:100%;max-width:100%}.question .question-response{margin-bottom:10px;font-size:14px}.question .question-response .label{display:inline-block;margin:0 0 0 5px;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 0 0 5px}.question .btn-show-hint{position:relative;margin:0 10px 0 0;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none}.question .btn-show-hint::before{font-family:"Font Awesome 5 Free";font-size:18px;content:"\f059"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;right:0;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed #ddd;text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-right:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.learn-press-message.fixed{position:fixed;top:32px;right:0;left:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-archive-courses ul{list-style-type:revert;padding:0 1em 23px 0}.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}@media(max-width:768px){.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{padding-right:15px;padding-left:15px}}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px}.lp-archive-courses ol ul{padding:2px 35px 2px 0}.lp-archive-courses ol ol{padding:2px 20px 2px 0}.lp-archive-courses thead th,.lp-archive-courses tr th{padding:9px 24px}.lp-archive-courses tr td{border-top:1px solid #eee;padding:6px 24px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul{padding:0 !important;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size="3"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-right:15px;padding-left:15px}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.learn-press-tip{display:none;margin:0 5px;color:#444;font-size:13px;font-style:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:"Font Awesome 5 Free";content:"\f059"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-right:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:12px;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:12px}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;left:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:16px;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:"Font Awesome 5 Free";content:"\f00d"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;right:50%;width:0;height:0;margin-right:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:""}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;right:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;left:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:30px;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}a{text-decoration:none}.lp-content-area{width:100%;max-width:1170px;margin:0 auto}@media(max-width:1024px){.lp-content-area{padding-left:15px;padding-right:15px}}.lp-content-area::after,.lp-content-area::before{display:table;clear:both;content:""}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:"";position:absolute;top:0;bottom:0;right:15px;left:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:#fff}.lp-archive-courses form[name=search-course]{position:relative;margin-bottom:20px}.lp-archive-courses form[name=search-course] .search-course-input{width:100%;padding:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-archive-courses form[name=search-course] .search-course-button{position:absolute;top:1px;left:1px;bottom:1px;height:auto;padding:15px;line-height:1px}.lp-archive-courses .learn-press-courses-header{float:right;padding-top:4px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:30px;font-weight:600}@media(max-width:767px){.lp-archive-courses .learn-press-courses-header{margin-bottom:20px}}.lp-archive-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.lp-archive-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.lp-archive-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-item:hover .course-wishlist{opacity:1}.lp-archive-courses .course-item .course-wishlist.filled{opacity:1}.lp-archive-courses .course-item .course-instructor{float:right;margin-bottom:16px;font-size:14px;font-weight:300;line-height:25px;text-transform:capitalize}.lp-archive-courses .course-item .course-instructor a{color:#059de9}.lp-archive-courses .course-item .course-instructor a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-content{position:relative;border-top:0}.lp-archive-courses .course-content .course-permalink{display:-webkit-box;clear:both;overflow:hidden;position:relative;border:0;color:#fff;text-decoration:none;text-transform:none;-webkit-line-clamp:2;-webkit-box-orient:vertical;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-permalink:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-review{display:none}.lp-archive-courses .course-content .course-categories,.lp-archive-courses .course-content .course-tags{display:block;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-categories{float:right;position:relative;margin-left:10px;margin-bottom:16px}.lp-archive-courses .course-content .course-categories a{display:inline-block;display:none;margin:0 10px;color:#fff;text-decoration:none}.lp-archive-courses .course-content .course-categories a:first-child{display:block;margin-right:0;padding:2px 16px;background:var(--lp-primary-color)}.lp-archive-courses .course-content .course-categories a:hover{color:#333}.lp-archive-courses .course-content .course-categories::after{position:absolute;top:50%;left:-2px;width:1px;height:12px;opacity:.5;background:#999;content:"";transform:translate(0,-50%)}.lp-archive-courses .course-content .course-info{color:#666;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-info>span{display:block}.lp-archive-courses .course-content .course-info .course-price{float:left}.lp-archive-courses .course-content .course-info .course-price .origin-price,.lp-archive-courses .course-content .course-info .course-price .price{color:#333;font-size:16px;font-weight:600}.lp-archive-courses .course-content .course-info .course-price .origin-price{margin-left:10px;color:#666;font-size:14px;font-weight:300;text-decoration:line-through}.lp-archive-courses .course-content .course-info .course-instructor{float:left}.lp-archive-courses .course-content .course-info::after{display:block;clear:both;content:""}.lp-archive-courses .course-content .course-excerpt{display:-webkit-box;overflow:hidden;margin-bottom:28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.lp-archive-courses .course-content .separator{display:none}.lp-archive-courses .course-wrap-thumbnail{overflow:hidden;position:relative}.lp-archive-courses .course-wrap-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;right:-110px;width:300px;text-align:center;transform:rotate(45deg)}.lp-archive-courses .course-wrap-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;left:6px;opacity:0;color:#fff;cursor:pointer}.lp-archive-courses .course-wrap-thumbnail .course-wishlist::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f004"}.lp-archive-courses .course-wrap-thumbnail .course-wishlist .course-wishlist__btn{display:none}.lp-archive-courses .course-wrap-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-wrap-thumbnail:hover::before{opacity:1}.lp-archive-courses .course-wrap-thumbnail:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-wrap-thumbnail:hover .course-wishlist{opacity:1}.lp-archive-courses .course-thumbnail a{display:block;overflow:hidden}.lp-archive-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.lp-archive-courses .course-thumbnail .thumbnail::before{position:absolute;z-index:1;top:0;left:0;bottom:0;right:0;opacity:0;background:rgba(0,0,0,0.5);content:"";transition:all .3s}.lp-archive-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1)}.lp-archive-courses .course-title{margin:0;padding:0;color:#333;font-size:16px;font-weight:600;line-height:24px}.lp-archive-courses .course-title:hover{color:var(--lp-primary-color)}@media(min-width:769px){.lp-archive-courses .course-summary-content .course-info-left{width:calc(100% - 330px)}}.lp-archive-courses .course-summary-content .course-title{margin-bottom:42px;color:#fff;font-size:1.5rem;font-weight:500;line-height:1}.lp-archive-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}@media(max-width:768px){.lp-archive-courses .course-summary-content{width:100%}}.lp-archive-courses .course-detail-info{padding:40px 0 10px 0;color:#fff;background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:"";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{left:100%;right:auto}.lp-archive-courses .course-detail-info::after{right:100%;left:auto}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;height:46px;margin-left:50px;font-size:16px;font-weight:300;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item span{padding-left:4px;padding-right:0}.lp-archive-courses .course-meta__pull-left .meta-item:last-child{margin-left:0}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-left:10px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:"\f017"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:"\f012"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:"\f0c5"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:"\f12e"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:"\f501"}@media(max-width:1024px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-left:30px}}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-left:0}}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:#999;font-size:14px;font-weight:300;line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:#fff;font-size:16px;font-weight:400;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories::before{margin-left:10px;font-size:36px;content:"\f02e"}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 5px}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column-reverse;justify-content:flex-end;align-items:flex-end}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:20px}}.lp-archive-courses .course-meta-primary{margin-bottom:36px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-left:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-left:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-272px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-right:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:#fff;background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f004"}.lp-archive-courses .course-summary-sidebar__inner>div{overflow:hidden;padding:20px;background:#fff}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-size:16px;font-weight:300;line-height:24px}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.learn-press-courses{clear:both;margin:0 -15px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course{width:25%;margin:0 0 60px 0;box-shadow:none;list-style:none}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;padding:24px;border:1px solid rgba(204,204,204,0.3);border-radius:4px;flex-wrap:wrap;justify-content:flex-end}@media(max-width:767px){.learn-press-courses[data-layout=list] .course{padding:15px}}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;justify-content:space-between}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{float:left;width:calc(64.2% - 76px);padding-top:5px}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 40px)}}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 25px)}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{width:100%;padding-top:20px}}.learn-press-courses[data-layout=list] .course-content .course-categories a{position:relative;padding:2px 15px 2px 20px;-webkit-clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%)}.learn-press-courses[data-layout=list] .course-content .course-permalink{height:25px;margin-bottom:5px;-webkit-line-clamp:1}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 0 10px 10px;padding:3px 5px;border-radius:3px;color:#fff;background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-footer{float:right;margin-left:20px}.learn-press-courses[data-layout=list] .course-content .course-footer .course-students{display:none}.learn-press-courses[data-layout=list] .course-content .course-footer .course-price{float:unset}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-footer{margin-bottom:30px}}.learn-press-courses[data-layout=list] .course-content .course-readmore{float:left;position:relative;left:4px}.learn-press-courses[data-layout=list] .course-content .course-readmore a{padding:9px 24px;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-weight:400;line-height:1;transition:all .3s;display:block}.learn-press-courses[data-layout=list] .course-content .course-readmore a:hover{opacity:.5;background:var(--lp-primary-color)}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-readmore{display:flex;float:unset;clear:both}}.learn-press-courses[data-layout=list] .course-wrap-meta{display:flex;padding-top:12px;padding-bottom:18px;color:#333;font-size:14px;font-weight:400}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:28px;text-transform:capitalize}@media(max-width:1024px){.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:20px}}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item::before{position:relative;top:-1px;margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-level::before{content:"\f012"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-duration::before{content:"\f017"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-lesson::before{content:"\f0c5"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-quiz::before{content:"\f12e"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-student::before{content:"\f501"}@media(max-width:815px){.learn-press-courses[data-layout=list] .course-wrap-meta{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:15px}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-left:15px}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-meta{grid-template-columns:repeat(3,1fr)}}.learn-press-courses[data-layout=list] .course-wrap-thumbnail{float:right;width:35.8%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-thumbnail{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:18px}.learn-press-courses[data-layout=grid] .course{padding:0 15px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course{width:100%}}.learn-press-courses[data-layout=grid] .course-item:hover{box-shadow:0 15px 20px 0 rgba(0,0,0,0.2)}.learn-press-courses[data-layout=grid] .course-item .course-instructor{margin-bottom:7px}.learn-press-courses[data-layout=grid] .course-content{padding:15px 20px 12px 20px;border:1px solid #f0f0f0;border-top:0;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-categories{float:left;position:absolute;z-index:1;top:-34px;left:-1px;margin-left:0}.learn-press-courses[data-layout=grid] .course-content .course-categories::after{display:none}.learn-press-courses[data-layout=grid] .course-content .course-categories a{position:relative;margin:0;padding:2px 22px 2px 12px;-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%)}.learn-press-courses[data-layout=grid] .course-content .course-permalink{height:48px;margin-bottom:20px}.learn-press-courses[data-layout=grid] .course-content .course-info{display:flex;flex-direction:column;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-wrap-meta,.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-readmore{display:none}.learn-press-courses[data-layout=grid] .course-content .course-footer{padding-top:18px;border-top:1px solid rgba(153,153,153,0.2)}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students{float:right;text-transform:capitalize}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students::before{position:relative;top:-1px;margin-left:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f501"}.learn-press-courses[data-layout=grid] .learn-press-message{margin-right:15px;margin-left:15px}.learn-press-courses[data-size="3"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size="3"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-courses-bar{display:flex;float:left;margin-bottom:48px}@media(max-width:767px){.lp-courses-bar{flex-direction:row;width:100%;justify-content:space-between}}.lp-courses-bar .search-courses{position:relative;width:306px;max-width:100%;margin-left:20px;line-height:1;flex:1}.lp-courses-bar .search-courses input[type=text]{width:100%;height:44px;padding:6px 18px 6px 32px;border:1px solid #ccc;border-radius:5px;background:#fff;font-size:14px;font-style:italic;line-height:1}.lp-courses-bar .search-courses input[type=text]:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{position:absolute;top:50%;left:12px;width:30px;height:30px;padding:0;border:0;color:#333;background:transparent;font-size:16px;line-height:1;transform:translate(0,-50%)}.lp-courses-bar .search-courses button:focus{border:0;outline:0}.lp-courses-bar .search-courses button.loading>i::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .search-courses ::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses :-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses ::placeholder{color:#999}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}}.lp-courses-bar .switch-layout{display:flex;height:44px;line-height:1;text-align:left;flex:0 0 40px;align-items:center;justify-content:center}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{display:block;width:40px;height:40px;margin:0;padding:0;border-radius:5px;font-size:16px;line-height:40px;text-align:center;cursor:pointer}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:8px 6px;color:#333;font-family:"Font Awesome 5 Free";font-weight:900;line-height:1}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:"\f00a"}.lp-courses-bar .switch-layout .switch-btn.list{margin-right:3px}.lp-courses-bar .switch-layout .switch-btn.list::before{content:"\f03a"}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background:#f5f5f5}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background:#f5f5f5}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background:#f5f5f5}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background:#f5f5f5}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background:#f5f5f5}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background:#f5f5f5}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background:#f5f5f5}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background:#f5f5f5}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background:#f5f5f5}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background:#f5f5f5}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repuchase_select{padding:20px;background:#f7f7f7}.lp_allow_repuchase_select>ul{padding:0;list-style:none}.lp_allow_repuchase_select>a{display:inline-block;margin-top:10px;color:#fff;background-color:#222}.comment-respond .comment-reply-title{font-size:30px;font-weight:500;line-height:1.2;margin-bottom:15px}.comment-respond .comment-form{margin:0 -15px}.comment-respond .comment-form>p label{display:block;margin-bottom:10px;font-size:16px;font-weight:500}.comment-respond .comment-form>p.comment-notes,.comment-respond .comment-form>p.logged-in-as{color:#666;font-size:16px}.comment-respond .comment-form>p.logged-in-as a{color:#666;text-decoration:underline}.comment-respond .comment-form>p.logged-in-as a:hover,.comment-respond .comment-form>p.logged-in-as a:focus{color:var(--lp-primary-color)}.comment-respond .comment-form>p.comment-form-cookies-consent{clear:both}.comment-respond .comment-form>p.comment-form-cookies-consent input{padding:0;margin-left:8px}.comment-respond .comment-form>p.comment-form-cookies-consent label{display:inline}.comment-respond .comment-form>p,.comment-respond .comment-form>div{padding:0 15px;margin-bottom:15px}.comment-respond .comment-form input[type=text],.comment-respond .comment-form input[type=email],.comment-respond .comment-form input[type=url]{height:40px;line-height:normal;width:100% !important;margin-bottom:15px}.comment-respond .comment-form input[type=submit]{background-color:var(--lp-primary-color);border:0;min-height:40px;line-height:40px;padding:0 15px;font-size:16px;text-transform:capitalize;font-weight:500;margin-top:15px;cursor:pointer;color:white}.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:33.33%;float:right}@media(max-width:575px){.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:100%;float:unset}}.comment-respond .comment-form textarea,.comment-respond .comment-form input{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-width:100%}.comment-respond .comment-form textarea{width:100%;display:block;padding:20px 15px;resize:none}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course:hover{opacity:.5;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice{margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice.error{border-color:#d85554}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1rem;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:16px;font-weight:300;line-height:16px;text-align:left}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:#666;font-size:18px;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:#333;font-size:1.8rem;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 20px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{display:flex;color:#666;font-size:16px;font-weight:300;justify-content:space-between}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-size:1rem;font-weight:300;line-height:24px}.course-sidebar-preview>*:last-child{margin-bottom:0}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none}.learnpress-page:hover{text-decoration:none}#popup-course{display:flex;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;background:#fff}#popup-course .back-course{padding-right:30px;padding-left:30px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-right:15px;padding-left:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course #popup-header{display:flex;position:fixed;z-index:100;left:0;right:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}#popup-course #popup-header .course-title{margin:0;padding:0;line-height:70px;letter-spacing:unset}#popup-course #popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-size:16px;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-header .course-title a:hover{color:var(--lp-primary-color)}@media(max-width:768px){#popup-course #popup-header .course-title{flex:1}}#popup-course #popup-header .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px}@media(max-width:768px){#popup-course #popup-header .items-progress{flex:1}}@media(max-width:767px){#popup-course #popup-header .items-progress{padding-bottom:20px;justify-content:end}}#popup-course #popup-header .number{padding-left:10px;color:#fff;font-size:14px;font-weight:300}#popup-course #popup-header .lp-button{display:flex;position:relative;height:40px;margin:9px;border:0;color:#fff;background:var(--lp-primary-color);font-size:14px;font-weight:400;justify-content:center;line-height:40px;align-items:center}#popup-course #popup-header .lp-button:hover{opacity:.8}#popup-course #popup-header .lp-button-back{float:left;margin:9px 10px}#popup-course #popup-header .lp-button-back button::before,#popup-course #popup-header .lp-button-back button::after{content:""}#popup-course #popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-course #popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-right:15px;padding-left:15px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column}}#popup-course #popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-course #popup-sidebar .search-course{display:flex;position:relative;height:70px;background:#f9fafc}#popup-course #popup-sidebar .search-course input[name=s]{display:block;width:100%;margin:6px 0;padding-right:20px;border:0;color:#999;background:transparent;box-shadow:none;font-size:14px;line-height:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:focus{outline:0;color:#222}#popup-course #popup-sidebar .search-course button{position:absolute;top:0;left:10px;width:16px;height:70px;margin:0 10px;padding:0;border:0;background:transparent;line-height:1px}#popup-course #popup-sidebar .search-course button::before{color:#666;font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f002"}#popup-course #popup-sidebar .search-course button.clear{display:none}#popup-course #popup-sidebar .search-course button.clear::before{content:"\f00d"}#popup-course #popup-sidebar .search-course .search-results{display:none;overflow:auto;position:fixed;z-index:99999999;top:92px;bottom:0;right:0;width:400px;margin:0;border-top-color:transparent;border-left:1px solid #d9e0f1;background:#fbfcff}#popup-course #popup-sidebar .search-course .search-results .search-results__item{border-bottom:1px solid #d9e0f1;background:#fff}#popup-course #popup-sidebar .search-course .search-results .search-results__item img{position:absolute;right:10px;width:40px;height:40px}#popup-course #popup-sidebar .search-course .search-results .search-results__item a{display:-webkit-box;overflow:hidden;position:relative;box-sizing:content-box;height:40px;padding:10px 60px 10px 10px;color:#777;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-sidebar .search-course .search-results .search-results__item:hover{background:#d9e0f1}#popup-course #popup-sidebar .search-course .search-results .search-results__item-title{overflow:hidden;margin:0 0 -2px 0;padding:0;font-size:16px;font-weight:normal}#popup-course #popup-sidebar .search-course .search-results .search-results__item-author{font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price{position:absolute;left:10px;bottom:10px;font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price .origin-price{font-size:smaller;text-decoration:line-through}#popup-course #popup-sidebar .search-course .search-results .search-results__not-found{padding:10px;color:#777}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination{padding:10px;text-align:center}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination a,#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{display:inline-block;margin:0 2px 10px 3px;padding:5px 8px;border:1px solid #d9e0f1;border-radius:4px;color:#777;font-size:14px;line-height:1;cursor:pointer}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{color:#999;background:#d9e0f1}#popup-course #popup-sidebar .search-course.searching .search-results{display:block}#popup-course #popup-sidebar .search-course.searching .clear{display:block}#popup-course #popup-sidebar .search-course.searching button{display:none}#popup-course #popup-sidebar .search-course.searching::after{position:absolute;z-index:1;bottom:0;right:50%;width:0;height:0;margin-right:-10px;border:10px solid transparent;border-bottom-color:#fff;content:""}#popup-course #popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar{width:6px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-course #popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-course #popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;left:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-course #popup-sidebar .section.section-empty .section-header{margin:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message{margin:0;padding:10px;border-bottom:1px solid #d9e0f1;border-radius:0;color:#999;background:#f5f5f5;font-size:14px}#popup-course #popup-sidebar .section.section-empty .learn-press-message::before,#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{position:absolute;z-index:9999;top:-16px;right:10px;width:0;height:0;border:8px solid transparent;border-bottom-color:#f5f5f5;background:transparent;content:"";-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{z-index:9998;top:-20px;right:8px;border-width:10px;border-bottom-color:#d9e0f1}#popup-course #popup-sidebar .section-header{position:sticky;z-index:1000;top:0;height:94px;padding:38px 20px 20px 20px;cursor:pointer;background-color:white}#popup-course #popup-sidebar .section-header .section-title{padding:0 0 4px 0;color:#000;font-size:20px;font-weight:500}#popup-course #popup-sidebar .section-header .section-title .show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d7"}#popup-course #popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-course #popup-sidebar .section-header .section-toggle i{color:#666}#popup-course #popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-course #popup-sidebar .section-content{margin-bottom:0}#popup-course #popup-sidebar .course-item{min-height:50px;margin-bottom:4px;padding:5px 20px;background:#f9fafc;align-items:center}#popup-course #popup-sidebar .course-item>span{display:none}#popup-course #popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-course #popup-sidebar .course-item::after{content:""}#popup-course #popup-sidebar .course-item.current{background:#eaeaea}#popup-course #popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-course #popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-course #popup-sidebar .section-item-link{line-height:1;padding-left:0}#popup-course #popup-sidebar .section-item-link::before{padding:12px 0;vertical-align:unset}#popup-course #popup-sidebar .section-item-link .item-name{width:100%;padding:0 17px 0 10px;font-size:14px;line-height:21px;font-weight:500}#popup-course #popup-sidebar .course-item-meta{padding:0}#popup-course #popup-sidebar .course-item-meta .item-meta{padding:0;color:#999;background:transparent;font-size:12px;line-height:1.5;height:auto}#popup-course #popup-sidebar .course-item-meta .item-meta:first-child{margin-right:0}#popup-course #popup-sidebar .course-item-meta .item-meta::before{font-size:12px;line-height:21px}#popup-course #popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-right:15px;padding-left:15px}#popup-course #popup-content .lp-button{position:relative;margin:0 0 0 10px;padding:12px 29px;border-color:var(--lp-secondary-color);font-size:14px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon{margin-left:5px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon::before{font-family:"Font Awesome 5 Free";content:"\f058"}#popup-course #popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:#eee;white-space:nowrap;text-transform:none}#popup-course #popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 11px;border-radius:3px;color:#333;background:#eee;white-space:nowrap}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:"\f110"}#popup-course #popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-course #popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;margin-top:32px;border-color:transparent;color:#fff;background:#3db748;font-size:16px;align-items:center;justify-content:center}#popup-course #popup-content .lp-button.completed i{margin-right:9px;font-size:14px}#popup-course #popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-course #popup-content.fixed-quiz-status .quiz-status>div{padding:0}@media(max-width:767px){#popup-course #popup-content{margin-top:113px}}#popup-course #popup-footer{position:fixed;z-index:999;left:0;bottom:0;right:475px;width:100%;max-width:792px;height:50px;margin:0 auto;border-top:1px solid #ebebeb;background:#fff;-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}@media(max-width:1024px){#popup-course #popup-footer{width:auto;padding:0 15px}}#popup-course #popup-footer .course-item-nav{justify-content:space-between}#popup-course #popup-footer .course-item-nav .prev,#popup-course #popup-footer .course-item-nav .next{display:flex;line-height:50px}#popup-course #popup-footer .course-item-nav .prev a,#popup-course #popup-footer .course-item-nav .next a{display:block;color:#666;font-size:16px}#popup-course #popup-footer .course-item-nav .prev::before,#popup-course #popup-footer .course-item-nav .next::before{color:#999;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900}#popup-course #popup-footer .course-item-nav .prev:hover a,#popup-course #popup-footer .course-item-nav .prev:hover::before,#popup-course #popup-footer .course-item-nav .next:hover a,#popup-course #popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-course #popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-course #popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-course #popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-course #popup-footer .course-item-nav .next::before{margin-right:10px;content:"\f0da"}#popup-course #popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-course #popup-footer .prev::before{margin-left:10px;content:"\f0d9"}#popup-course #popup-footer .prev .course-item-nav__name{left:auto;right:-30px}#popup-course #popup-footer .prev .course-item-nav__name::before{left:auto;right:5px}@media(max-width:1024px){#popup-course #popup-footer .prev .course-item-nav__name{right:15px}}#popup-course #popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;left:-30px;width:auto;padding:10px 15px;color:#666;background:#ccc;font-size:14px;font-weight:300;line-height:1}@media(max-width:1024px){#popup-course #popup-footer .course-item-nav__name{top:-25px;left:15px;right:auto}}#popup-course #sidebar-toggle{display:inline-block;position:absolute;z-index:100;top:198px;right:475px;width:25px;height:56px;margin:0;background:#fff;box-shadow:0 0 20px 0 rgba(0,0,0,0.15);cursor:pointer;transition:.25s;-webkit-appearance:none;border:0}#popup-course #sidebar-toggle:after{display:none}#popup-course #sidebar-toggle::before{display:inline-block;position:absolute;top:50%;right:50%;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d9";transition:.25s;transform:translate(50%,-50%)}#popup-course #sidebar-toggle:focus{border:0;outline:0}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:left}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid #f5f5f5;border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid #222;line-height:36px}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-right:10px;font-size:14px;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 0 0 5px}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #059601;border-radius:5px;font-size:1rem}#popup-course .question .answer-option input[type=radio],#popup-course .question .answer-option input[type=checkbox]{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 10px 0 0}#popup-course .question .answer-option input[type=radio]::before{border-radius:50%}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle{right:0}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle::before{content:"\f0da"}body.lp-sidebar-toggle__close #popup-course #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-course #popup-header,body.lp-sidebar-toggle__close #popup-course #popup-footer{right:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle{right:0}body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle::before{content:"\f0da"}body:not(.lp-sidebar-toggle__open) #popup-course #popup-sidebar{flex:0}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-course #popup-sidebar{flex-basis:300px}#popup-course #popup-sidebar .course-curriculum{width:300px}#popup-course #popup-header,#popup-course #popup-footer{right:300px}#popup-course #sidebar-toggle{right:299px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course #popup-sidebar{flex-basis:250px}#popup-course #popup-sidebar .course-curriculum{width:250px}#popup-course #popup-header,#popup-course #popup-footer{right:250px}#popup-course #sidebar-toggle{right:249px}#popup-course #sidebar-toggle:checked ~ #popup-sidebar{flex-basis:0}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;padding-bottom:80px}@media(max-width:1024px){.content-item-wrap{width:100%}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;color:#333;font-size:30px;font-weight:600}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap h4{font-size:1.5rem;font-weight:500;line-height:1.5}.content-item-wrap .content-item-summary{padding-top:50px}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:0;margin-bottom:18px;font-size:18px;letter-spacing:unset}.content-item-wrap .content-item-description p{margin:0 0 18px 0;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 15px 0 0}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]{margin:0;border:1px solid #d9e0f1;color:#777;background:#fbfcff}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]::before{display:inline-block;width:15px;height:15px;border:2px solid #d9e0f1;border-top-color:transparent;border-right-color:transparent;content:"";-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].prev::before{margin-right:7px;-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-ms-transform:rotate(-135deg);-o-transform:rotate(-135deg);transform:rotate(-135deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next{margin-right:-1px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next::before{margin-left:7px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]:hover{background:#fff}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:99999;bottom:0;right:50%;width:100%;max-width:792px;height:49px;margin-right:237px;transform:translateX(50%)}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-right:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .prev{border-top-left-radius:0;border-bottom-left-radius:0}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .next{border-top-right-radius:0;border-bottom-right-radius:0}.content-item-wrap .questions-pagination{height:33px;padding:8px 0;background:#fff;text-align:center}.content-item-wrap .questions-pagination .nav-links{text-align:center}.content-item-wrap .questions-pagination .nav-links .page-numbers{display:inline-block;vertical-align:middle;margin:0 3px 3px;padding:10px 16px;color:#666;background-color:transparent;font-size:16px;font-weight:300;line-height:1;border:1px solid;cursor:pointer}.content-item-wrap .questions-pagination .nav-links .page-numbers.next,.content-item-wrap .questions-pagination .nav-links .page-numbers.prev{display:inline-block;padding:10px;background:transparent;font-size:16px;text-align:center;text-decoration:none;text-transform:none;border:1px solid}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}.course-curriculum .section-title{position:relative;margin-bottom:0;padding:8px 0;color:#5383f7;font-size:16px;font-weight:normal;line-height:1}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:#ccc}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-size:inherit;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;padding-top:0;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;left:0;bottom:0;right:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;right:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-size:16px;font-weight:400;line-height:26px;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:""}.course-curriculum .section-header .section-left{display:flex}.course-curriculum .section-header .section-left .section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}*{box-sizing:border-box;margin:0;padding:0}button{cursor:pointer}input,button,select,textarea{outline:0}html{overflow-x:hidden}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-left:0;padding-right:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-left:auto;margin-right:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-right:0 !important;margin-left:0 !important;padding-right:0 !important;padding-left:0 !important}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part{padding-right:15px;padding-left:15px}}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}body{background:#fff}body.learnpress-page{overflow-x:hidden}.wrap-fullwidth a:focus,.wrap-fullwidth button:focus,.wrap-fullwidth input:focus,.wrap-fullwidth textarea:focus{border:0;outline:0}.wrap-fullwidth a:hover{text-decoration:none}.wrap-fullwidth p{word-break:break-word}.wrap-fullwidth p:last-child{margin-bottom:0}.wrap-fullwidth label{display:block;margin:0;outline:0}.wrap-fullwidth img{max-width:100%;height:auto}.wrap-fullwidth form{margin:0}.wrap-fullwidth .col-full{box-sizing:border-box;max-width:100%;padding:0}.wrap-fullwidth .col-full .woocommerce-breadcrumb{display:none}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:""}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-content-wrap{width:1170px;max-width:90%;margin:0 auto}.lp-content-wrap>h2{margin-top:0;margin-bottom:26px;color:#333;font-size:30px;font-weight:600}.learn-press-breadcrumb{max-width:1170px;width:100%;margin:0 auto 45px auto;padding:0;color:#333;font-size:14px;font-weight:400;list-style:none}.learn-press-breadcrumb li{display:inline-block;margin:0}.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}.learn-press-breadcrumb i{margin:0 5px;color:#666;font-size:12px}@media(max-width:1024px){.learn-press-breadcrumb{padding-left:15px;padding-right:15px}}.learn-press-breadcrumb a{color:#666;font-weight:500}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:16px 24px;border:1px solid #ccc;color:#333;background:transparent;box-shadow:unset;font-family:inherit;font-size:16px;font-weight:400;line-height:1;text-align:center;vertical-align:middle;text-decoration:none;text-transform:capitalize;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:18px}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-left:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .lp-button.loading::before,.learnpress-page #lp-button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.lp-ajax-message.error{border-color:#d85554}.course-meta{margin-bottom:14px}.course-meta .course-students::before{font-family:"Font Awesome 5 Free";content:""}.lp-entry-content .course-tabs{margin-bottom:60px}.learn-press-checkout-comment h4{display:none}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid #ccc;resize:none}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.retake-course,.enroll-course,.purchase-course{display:inline-block}.table-orders{font-size:16px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}.learn-press-pagination{padding-bottom:20px;text-align:center}.learn-press-pagination .page-numbers{display:inline-block;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learn-press-pagination .page-numbers>li{display:inline-block;margin:0;padding:0 14px}.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0;color:#666;background:transparent;font-size:16px;font-weight:300}.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.list-table-nav{display:flex;margin-right:0;list-style:none}ul.list-table-nav .nav-text{text-align:right;flex:1}ul.list-table-nav .nav-pages{text-align:left;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:#00adff}.primary-color-before::before{color:#00adff}.primary-color-after::after{color:#00adff}.primary-background-color{background:#00adff}.primary-background-color{background:#00adff}.course-origin-price{margin-left:5px;font-size:85%;text-decoration:line-through}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:left}.content-item-wrap #comments{margin-left:0;margin-right:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-summary-sidebar{position:relative}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}@media(min-width:1200px){.course-summary-sidebar.slide-top .course-summary-sidebar__inner{position:absolute}}.course-graduation span{color:#999}.course-graduation .icon{margin-left:5px;font-size:20px}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:"Font Awesome 5 Free";content:"\f071"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:""}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:25px;right:-110px;width:300px;background:#93f;text-align:center;transform:rotate(45deg)}.lp-badge.featured-course::before{font-size:12px;text-transform:uppercase;content:attr(data-text)}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.course-tabs .course-nav label{display:flex;align-items:center;justify-content:center;margin:0;padding:17px 10px;font-size:16px;line-height:1;font-weight:600;text-transform:capitalize;cursor:pointer}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-left:0}}.course-price:empty{display:none !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table{border-spacing:0;border-right:1px solid var(--lp-secondary-color);border-top:1px solid var(--lp-secondary-color);width:100%}.quiz-attempts table tr th,.quiz-attempts table tr td{border-left:1px solid var(--lp-secondary-color);border-bottom:1px solid var(--lp-secondary-color);padding:5px 15px;text-align:center}.quiz-attempts table tr th{font-weight:500}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}
assets/css/learnpress.css CHANGED
@@ -2370,18 +2370,21 @@ body.learnpress .learn-press-tabs .learn-press-tabs__tab, body.learnpress .attac
2370
  background: #fff;
2371
  }
2372
 
 
 
 
 
2373
  .course-tab-panel {
2374
  display: none;
2375
- padding-top: 30px;
2376
  }
2377
  .course-tab-panel.active {
2378
  display: block;
2379
  }
2380
- .course-tab-panel.course-tab-panel-instructor, .course-tab-panel.course-tab-panel-faqs {
2381
- padding-top: 30px;
2382
- }
2383
- .course-tab-panel.course-tab-panel-reviews {
2384
- padding: 56px 0 0 0;
2385
  }
2386
  .course-tab-panel .course-description h4 {
2387
  margin-top: 0;
@@ -2391,10 +2394,7 @@ body.learnpress .learn-press-tabs .learn-press-tabs__tab, body.learnpress .attac
2391
  font-weight: 500;
2392
  }
2393
  .course-tab-panel .course-description p {
2394
- color: #666;
2395
- font-size: 16px;
2396
- font-weight: 300;
2397
- line-height: 26px;
2398
  }
2399
  .course-tab-panel .course-description img {
2400
  max-width: 100%;
@@ -3383,8 +3383,8 @@ input[name=course-extra-box-ratio]:checked + .course-extra-box .course-extra-box
3383
  display: block;
3384
  position: relative;
3385
  margin: 0;
3386
- padding: 25px 45px 25px 30px;
3387
- font-size: 1rem;
3388
  font-weight: 500;
3389
  line-height: 1.7;
3390
  cursor: pointer;
@@ -3413,9 +3413,9 @@ input[name=course-extra-box-ratio]:checked + .course-extra-box .course-extra-box
3413
  display: none;
3414
  }
3415
  .course-tab-panel-faqs .course-faqs-box__content-inner {
3416
- padding: 0 28px 33px 28px;
3417
  color: #666;
3418
- font-size: 16px;
3419
  font-weight: 300;
3420
  line-height: 26px;
3421
  -webkit-animation-name: course-faqs-box__content-inner-transform;
@@ -5306,7 +5306,7 @@ a {
5306
  }
5307
  .lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before {
5308
  font-family: "Font Awesome 5 Free";
5309
- font-size: 26px;
5310
  font-weight: 900;
5311
  content: "\f004";
5312
  }
@@ -6136,6 +6136,7 @@ input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before {
6136
  display: flex;
6137
  justify-content: center;
6138
  align-items: center;
 
6139
  }
6140
  @media (max-width: 768px) {
6141
  #popup-course #popup-header .items-progress {
2370
  background: #fff;
2371
  }
2372
 
2373
+ .course-tab-panels .course-tab-panel {
2374
+ padding-top: 30px;
2375
+ }
2376
+
2377
  .course-tab-panel {
2378
  display: none;
 
2379
  }
2380
  .course-tab-panel.active {
2381
  display: block;
2382
  }
2383
+ .course-tab-panel .course-description {
2384
+ color: #666;
2385
+ font-size: 16px;
2386
+ font-weight: 300;
2387
+ line-height: 26px;
2388
  }
2389
  .course-tab-panel .course-description h4 {
2390
  margin-top: 0;
2394
  font-weight: 500;
2395
  }
2396
  .course-tab-panel .course-description p {
2397
+ line-height: inherit;
 
 
 
2398
  }
2399
  .course-tab-panel .course-description img {
2400
  max-width: 100%;
3383
  display: block;
3384
  position: relative;
3385
  margin: 0;
3386
+ padding: 20px 45px 20px 25px;
3387
+ font-size: 1.1rem;
3388
  font-weight: 500;
3389
  line-height: 1.7;
3390
  cursor: pointer;
3413
  display: none;
3414
  }
3415
  .course-tab-panel-faqs .course-faqs-box__content-inner {
3416
+ padding: 0 25px 25px 25px;
3417
  color: #666;
3418
+ font-size: 1rem;
3419
  font-weight: 300;
3420
  line-height: 26px;
3421
  -webkit-animation-name: course-faqs-box__content-inner-transform;
5306
  }
5307
  .lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before {
5308
  font-family: "Font Awesome 5 Free";
5309
+ font-size: 16px;
5310
  font-weight: 900;
5311
  content: "\f004";
5312
  }
6136
  display: flex;
6137
  justify-content: center;
6138
  align-items: center;
6139
+ column-gap: 10px;
6140
  }
6141
  @media (max-width: 768px) {
6142
  #popup-course #popup-header .items-progress {
assets/css/learnpress.min.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}.learn-press-message{position:relative;margin:0 0 20px 0;padding:10px 50px 10px 15px;border-top:5px solid #00adff;border-radius:0 0 5px 5px;background:#f5f5f5;width:100%}.learn-press-message.icon{padding-left:45px}.learn-press-message.icon::before{background:#00adff}.learn-press-message.icon::after{position:absolute;top:50%;left:15px;width:10px;height:10px;margin-top:-13px;margin-right:10px;border-radius:50%;color:#fff;background:#00adff;font-family:"Font Awesome 5 Free";font-size:20px;line-height:26px;text-align:center;vertical-align:baseline;content:"\f129"}.learn-press-message::before,.learn-press-message::after{position:absolute;top:0;content:""}.learn-press-message::before{right:20px;width:20px;height:30px;background:#00adff}.learn-press-message::after{top:10px;right:20px;width:0;height:0;border:10px solid transparent;border-bottom-color:#f5f5f5}.learn-press-message.error{border-color:#d85554}.learn-press-message.error::before{background:#d85554}.learn-press-message.error.icon::before,.learn-press-message.error.icon::after{background:#d85554}.learn-press-message.error.icon::after{content:"\f00d"}.learn-press-message.warning{border-color:#ffc107}.learn-press-message.warning::before{background:#ffc107}.learn-press-message.warning.icon::before,.learn-press-message.warning.icon::after{background:#ffc107}.learn-press-message.warning.icon::after{content:"\f00d"}.learn-press-message.success{border-color:#059601}.learn-press-message.success::before{background:#059601}.learn-press-message.success.icon::before,.learn-press-message.success.icon::after{background:#059601}.learn-press-message.success.icon::after{content:"\f129"}.learn-press-message a{text-decoration:underline}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.ajaxload{display:inline-block;position:relative;width:30px;height:30px;background:#7b7b7b;content:"";-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.ajaxload::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;display:inline-block;position:absolute;top:2px;left:50%;width:6px;height:6px;margin-left:-3px;background:#dedede;content:""}.lp-ajaxload-style-1{display:inline-block;position:relative;width:32px;height:32px}.lp-ajaxload-style-1::before,.lp-ajaxload-style-1::after{position:absolute;top:0;left:0;width:100%;height:100%;border:3px solid #ddd;content:""}.lp-ajaxload-style-1::after{clip:rect(0,32px,16px,16px);border-color:#2fa7ff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learn-press-tabs{margin-bottom:34px;background:#f1f2f8}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::after{background:#fff}.learn-press-tabs .learn-press-tabs__nav{display:flex;margin:0;padding:0;border:1px solid #e5e7f2;list-style:none}.learn-press-tabs .learn-press-tabs__tab{position:relative;margin:0;border-right:1px solid #e5e7f2;background:#f1f2f8;list-style:none}.learn-press-tabs .learn-press-tabs__tab:last-child{border-right:0}.learn-press-tabs .learn-press-tabs__tab>label{display:block;margin:0;padding:18px 65px;font-size:18px;line-height:1;font-weight:600;text-align:center;text-transform:capitalize;cursor:pointer}.learn-press-tabs .learn-press-tabs__tab>label a{color:#333}.learn-press-tabs .learn-press-tabs__tab>label a:focus{outline:0;text-decoration:none}@media(max-width:767px){.learn-press-tabs .learn-press-tabs__tab>label{padding:20px 50px 14px 50px}}.learn-press-tabs .learn-press-tabs__tab::before{position:absolute;top:-1px;left:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab::after{position:absolute;bottom:-1px;left:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab:first-child.active label{position:relative}.learn-press-tabs .learn-press-tabs__tab:first-child.active label::before{position:absolute;top:0;left:-1px;width:1px;height:100%;background:#fff;content:""}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}.learn-press-filters{display:flex;margin-bottom:30px;margin-left:0;list-style:none}.learn-press-filters>li{margin:0;font-size:16px;line-height:24px}@media(max-width:767px){.learn-press-filters>li{margin-right:30px;margin-left:0}.learn-press-filters>li:last-child{margin-right:0}}.learn-press-filters>li>a,.learn-press-filters>li>span{display:inline-block;font-weight:600}.learn-press-filters>li>span.count{font-weight:400}.learn-press-filters>li>span.count::before,.learn-press-filters>li>span.count::after{display:inline-block}.learn-press-filters>li>span.count::before{content:"("}.learn-press-filters>li>span.count::after{content:")"}.learn-press-filters>li span{color:#ffb606}.learn-press-filters>li span+span{color:#ffb606}.learn-press-filters>li span+span::before,.learn-press-filters>li span+span::after{color:#ffb606}.learn-press-filters>li a{color:#333;cursor:pointer}.learn-press-filters>li a+span{color:#333}.learn-press-filters>li a+span::before,.learn-press-filters>li a+span::after{color:#333}.learn-press-filters>li::after{margin:0 35px;color:#ccc;content:"|"}@media(max-width:767px){.learn-press-filters>li::after{display:none}}.learn-press-filters>li:last-child::after{display:none}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:24px;font-weight:600;line-height:1;font-family:var(--wp--preset--font-family--system-font)}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:right}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:left}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 4px 0 0;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;left:2px;color:#41abec;font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;line-height:1;content:"\f00c"}.lp-checkout-form .lp-checkout-remember a{color:#666;font-size:16px;font-weight:300;line-height:26px;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px;font-size:16px}.lp-checkout-form .lp-form-fields input{height:44px;line-height:normal;width:100%;padding:0 15px;border:1px solid #ccc}.lp-checkout-form .rwmb-input input:not([type=checkbox]){width:100%;height:43px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px}.lp-checkout-form .rwmb-input input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0;color:#222}.lp-checkout-form .rwmb-input ::placeholder{opacity:1;color:#999}.lp-checkout-form .rwmb-input :-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input ::-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input input:-webkit-autofill,.lp-checkout-form .rwmb-input input:-webkit-autofill:hover,.lp-checkout-form .rwmb-input input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px #fff inset;-webkit-text-fill-color:#999 !important}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:left}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:#ffb606}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;font-size:16px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-size:16px;font-weight:400}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:""}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid #ccc;border-radius:4px}#checkout-order table{width:100%;margin:0;border:0}#checkout-order td,#checkout-order th{box-sizing:content-box;border:1px solid rgba(204,204,204,0.3);border-top:0;border-right:0;border-left:0;background:unset;line-height:1;text-align:left;vertical-align:inherit}#checkout-order td:last-child,#checkout-order th:last-child{padding-right:0}#checkout-order .course-name{font-size:16px;font-weight:600;line-height:26px}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-size:16px;font-weight:600;line-height:26px;text-align:right}#checkout-order .order-total>th{padding:24px 20px 24px 0}#checkout-order .order-total .col-number{color:#333;font-size:26px}#checkout-order tfoot .cart-subtotal{color:#666;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot .cart-subtotal>th{padding:20px 20px 17px 0}#checkout-order tfoot .order-total th{color:#333;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 13px 18px 0}#checkout-order .course-thumbnail>img{width:100px;max-width:100% !important;height:auto !important}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:right}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-size:16px;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-left:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:right;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{float:right;margin-top:5px;color:#999;font-size:12px;font-weight:normal}#checkout-payment .secure-connection i{margin-right:5px;color:#ccc;font-size:18px}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 8px 0 0;border:1px solid #ccc;background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;left:50%;width:6px;height:6px;background:#41abec;transform:translate(-50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:""}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}#checkout-payment #checkout-order-action button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-terms-and-conditions{color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:40px;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid #ddd;background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid #ddd;background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.lp-list-table{width:100%;margin-bottom:20px}.lp-list-table th,.lp-list-table td{padding:20px;border:0 solid rgba(204,204,204,0.3);border-bottom-width:1px;background:#fff;font-size:16px;line-height:1;text-align:left}@media(max-width:767px){.lp-list-table th,.lp-list-table td{padding:15px}}.lp-list-table thead{box-sizing:border-box;border:1px solid #e5e7f2}.lp-list-table thead tr th{height:60px;border-bottom:0;color:#333;background:#f1f2f8;font-size:18px}.lp-list-table tbody,.lp-list-table tfoot{box-sizing:border-box;border:1px solid rgba(204,204,204,0.3);border-top:0}.lp-list-table tbody tr td,.lp-list-table tbody tr th,.lp-list-table tfoot tr td,.lp-list-table tfoot tr th{height:62px;color:#666;background:#fff;font-size:16px;font-weight:300}.lp-list-table tbody tr td a,.lp-list-table tbody tr th a,.lp-list-table tfoot tr td a,.lp-list-table tfoot tr th a{border-bottom:0;color:#666;text-decoration:none}.lp-list-table tbody tr td a:hover,.lp-list-table tbody tr th a:hover,.lp-list-table tfoot tr td a:hover,.lp-list-table tfoot tr th a:hover{color:var(--lp-primary-color)}.lp-list-table tbody tr .column-status .result-percent,.lp-list-table tfoot tr .column-status .result-percent{font-weight:500}.lp-list-table tbody tr .column-status .lp-label,.lp-list-table tfoot tr .column-status .lp-label{font-weight:600}.lp-list-table tbody tr:nth-child(odd),.lp-list-table tfoot tr:nth-child(odd){background:#f5f5f5}.lp-list-table .list-table-nav td{font-size:14px}.lp-list-table .list-table-nav td.nav-text{text-align:left}.lp-list-table .list-table-nav td.nav-pages{text-align:right}.lp-list-table .list-table-nav td.nav-pages .learn-press-pagination{text-align:right}.lp-list-table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-size:16px;font-weight:300;line-height:1}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field label{display:block;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field textarea{width:100%;padding:8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:14px;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk{color:red}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-right:auto;margin-bottom:60px;margin-left:auto;padding:40px;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06) !important}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px;font-size:28px;line-height:1.4}.learn-press-form-login .form-fields .form-field label,.learn-press-form-register .form-fields .form-field label{font-size:16px;font-weight:400;user-select:none}.learn-press-form-login .form-fields .form-field input[type=text],.learn-press-form-login .form-fields .form-field input[type=password],.learn-press-form-login .form-fields .form-field input[type=tel],.learn-press-form-login .form-fields .form-field input[type=url],.learn-press-form-login .form-fields .form-field input[type=number],.learn-press-form-register .form-fields .form-field input[type=text],.learn-press-form-register .form-fields .form-field input[type=password],.learn-press-form-register .form-fields .form-field input[type=tel],.learn-press-form-register .form-fields .form-field input[type=url],.learn-press-form-register .form-fields .form-field input[type=number]{height:42px;border:1px solid #bbb;border-radius:4px;line-height:42px}.learn-press-form-login .form-fields .form-field input[type=text]:focus,.learn-press-form-login .form-fields .form-field input[type=password]:focus,.learn-press-form-login .form-fields .form-field input[type=tel]:focus,.learn-press-form-login .form-fields .form-field input[type=url]:focus,.learn-press-form-login .form-fields .form-field input[type=number]:focus,.learn-press-form-register .form-fields .form-field input[type=text]:focus,.learn-press-form-register .form-fields .form-field input[type=password]:focus,.learn-press-form-register .form-fields .form-field input[type=tel]:focus,.learn-press-form-register .form-fields .form-field input[type=url]:focus,.learn-press-form-register .form-fields .form-field input[type=number]:focus{border:0;outline:2px solid transparent !important;outline-offset:2px;box-shadow:0 0 0 2px #666 !important}.learn-press-form-login .form-fields .form-field.required label::after,.learn-press-form-register .form-fields .form-field.required label::after{content:" *";display:inline}.learn-press-form-login form[name=learn-press-login]>p>label,.learn-press-form-register form[name=learn-press-login]>p>label{color:#666;font-size:16px;cursor:pointer;user-select:none}.learn-press-form-login form[name=learn-press-login]>p>a,.learn-press-form-register form[name=learn-press-login]>p>a{color:#666;font-size:16px;line-height:1}.learn-press-form-login form[name=learn-press-login]>p:last-child,.learn-press-form-register form[name=learn-press-login]>p:last-child{margin-bottom:0}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{width:100%;height:50px;border-radius:3px;outline:0;color:#fff;background:var(--lp-primary-color);box-shadow:none;font-size:16px;line-height:1;vertical-align:middle;text-decoration:none}.required label{font-weight:bold}.required label:after{content:" *";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative}.lp-password-input input[type=password]{padding-right:2.5rem}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;right:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f06e"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:"\f070"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}.lp-user-profile{position:relative;background:#fff}.lp-user-profile .lp-user-profile-avatar img{position:relative;width:100%;height:auto;border-radius:unset;display:block}.lp-user-profile .lp-user-profile-avatar+.lp-user-profile-socials{margin-top:10px;margin-bottom:5px}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;z-index:1;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;width:35px;height:35px;margin:0 7px;border:1px solid #cfcfcf;color:#666;background:#fff;font-size:14px;line-height:35px;text-align:center;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lp-user-profile .lp-user-profile-socials a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.lp-user-profile .wrapper-profile-header{color:#fff;background:var(--lp-secondary-color);position:relative}@media(max-width:990px){.lp-user-profile .wrapper-profile-header .lp-profile-content-area{min-height:inherit;padding:50px 15px}.lp-user-profile .wrapper-profile-header .lp-profile-left{float:left;position:static}.lp-user-profile .wrapper-profile-header .lp-profile-right{float:right;width:calc(100% - 270px);margin-left:0}}@media(max-width:768px){.lp-user-profile .wrapper-profile-header .lp-profile-left{width:220px}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:calc(100% - 220px)}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials{margin-right:-5px;margin-left:-5px}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials a{width:36px;height:36px;margin:0 5px;line-height:36px}}@media(max-width:500px){.lp-user-profile .wrapper-profile-header .lp-profile-left{float:none;margin:0 auto}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:100%;padding-top:30px;text-align:center}}.lp-user-profile .wrapper-profile-header::before{right:100%;left:auto}.lp-user-profile .wrapper-profile-header::after{left:100%;right:auto}.lp-user-profile .lp-profile-content-area{position:relative;padding-top:50px;padding-bottom:50px;display:flex;align-items:center}@media(max-width:650px){.lp-user-profile .lp-profile-content-area{flex-direction:column}.lp-user-profile .lp-profile-content-area .lp-profile-right{text-align:center;width:100%;padding:50px 15px 0}}.lp-user-profile .lp-profile-left{min-width:270px;max-width:270px;padding:5px;border:2px solid #eaeaea;border-radius:3px}.lp-user-profile .lp-profile-right{padding-right:15px;padding-left:35px}.lp-user-profile .lp-profile-username{padding-bottom:10px;font-size:18px;font-weight:500;text-transform:capitalize}.lp-user-profile .lp-profile-username::before,.lp-user-profile .lp-profile-username::after{content:"";width:30px;height:1px;background-color:white;display:inline-block;vertical-align:middle;margin:0}.lp-user-profile .lp-profile-username::before{margin-right:5px}.lp-user-profile .lp-profile-username::after{margin-left:5px}.lp-user-profile .lp-profile-user-bio{font-size:16px;font-weight:300;line-height:26px}.lp-user-profile #profile-sidebar{float:left;width:270px;margin-top:0;border:1px solid rgba(0,0,0,0.1);border-top:0;background:#fff;margin-top:58px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%}.lp-user-profile #profile-sidebar .lp-user-profile-avatar{max-width:150px}}.lp-user-profile #profile-nav .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{position:relative;margin:0;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li a{display:block;padding:0 20px;color:#333;font-size:16px;font-weight:500;line-height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{padding:0 20px 0 52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a>i{display:inline-block;position:absolute;left:24px;width:28px;color:var(--lp-primary-color);font-size:12px;line-height:53px;text-align:left}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{float:right;margin-right:4px;color:#999;font-family:"Font Awesome 5 Free";font-size:10px;font-weight:900;content:"\f054"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid #f9f9f9}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li:hover>a i{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover{background:var(--lp-primary-color)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover>a::after{content:"\f053"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-left:52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist>a::before{position:absolute;left:25px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f004"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist:hover a::before{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.logout>a::after{display:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>a{box-sizing:border-box;height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;left:100%;min-width:150px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a::after{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul{position:relative;left:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active{background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a{color:#ffb606}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a i{color:#ffb606}@media(max-width:990px){.lp-user-profile #profile-nav{overflow-x:scroll;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs{width:max-content}.lp-user-profile #profile-nav .lp-profile-nav-tabs::after{display:table;clear:both;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{float:left;border:0;border-right:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{height:auto;padding:0 20px 0 45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-left:10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.has-child a::after{content:"\f077"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-left:45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a::after{content:"\f078"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(-20%)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li{float:left;border-right:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-right:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover ul{display:none !important}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:not(.has-child)>a::after{display:none}}@media(max-width:560px){.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{max-width:80px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{font-size:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-left:0}}.lp-user-profile .lp-profile-content{float:right;width:calc(100% - 300px);margin-bottom:60px;padding-top:58px}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .learn-press-tabs__nav{display:block;width:100%;border:0}.lp-user-profile .lp-profile-content .learn-press-tabs__nav::after{display:table;clear:both;content:""}.lp-user-profile .lp-profile-content .learn-press-tabs__tab{float:left;border-right:0}.lp-user-profile .lp-profile-content .learn-press-tabs__tab label{padding-right:25px;padding-left:25px}.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content .lp-button{display:block;margin:0 auto 52px auto;padding:13px 34px;border-color:var(--lp-secondary-color);font-size:14px;font-weight:500;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.lp-user-profile .lp-profile-content .lp-button:hover{border-color:var(--lp-primary-color)}.lp-user-profile ul.learn-press-courses .course{margin:0 0 40px 0}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-right:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile #dashboard-general-statistic{margin-bottom:55px;padding-bottom:20px;border-bottom:1px solid #ddd}.lp-user-profile .dashboard-general-statistic__row{display:flex;margin:0 -15px;justify-content:center;flex-wrap:wrap}.lp-user-profile .dashboard-general-statistic__row .statistic-box{min-width:200px;max-width:270px;margin:0 15px 40px 15px;padding:15px 20px;border:1px solid #ccc;border-radius:4px;background:#f9fafc;text-align:center}@media(max-width:990px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:45%}}@media(max-width:767px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:100%;margin:0 15px 15px}}.lp-user-profile .dashboard-general-statistic__row .statistic-box:hover{background:#eaeaea}.lp-user-profile .dashboard-general-statistic__row[data-col="2"] .statistic-box{width:50%}.lp-user-profile .dashboard-general-statistic__row[data-col="4"] .statistic-box{width:25%}.lp-user-profile .dashboard-general-statistic__row[data-col="5"] .statistic-box{width:20%}.lp-user-profile .statistic-box .statistic-box__text{margin:0 0 7px 0;padding:0;color:#666;font-size:18px;font-weight:400;line-height:1}.lp-user-profile .statistic-box .statistic-box__number{color:#333;font-size:18px;font-weight:500;line-height:1}.lp-user-profile .profile-courses>h3{margin-top:0;margin-bottom:36px;color:#333;font-size:30px;font-weight:600;line-height:1;text-transform:capitalize}.lp-profile-content table.lp-list-table{border-spacing:0;border-top:1px solid #ccc;border-left:1px solid #ccc;margin-bottom:40px}.lp-profile-content table.lp-list-table tr th,.lp-profile-content table.lp-list-table tr td{border-right:1px solid #ccc;border-bottom:1px solid #ccc;text-align:center}.lp-profile-content table.lp-list-table tr td a{color:var(--wp--preset--color--foreground);font-weight:400}.lp-profile-content table.lp-list-table tr td a:hover{color:var(--lp-primary-color)}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:30px;line-height:1.5;font-weight:500;margin-bottom:15px;font-family:var(--wp--preset--font-family--system-font)}.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 10px 24px 10px}.profile-basic-information .form-field>label,form[name=profile-change-password] .form-field>label{margin:0 0 12px 0;color:#333;font-size:16px;font-weight:500;font-style:italic}.profile-basic-information .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input input{height:43px;padding:8px 20px;font-weight:400}.profile-basic-information .form-field .form-field-input input[type=password],form[name=profile-change-password] .form-field .form-field-input input[type=password]{padding:8px 20px}.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input textarea{padding:9px 20px 16px 20px;font-weight:300;line-height:24px}.profile-basic-information .form-field .form-field-input input,.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input textarea{border:1px solid #ccc;color:#999;font-size:14px;font-style:italic}.profile-basic-information .form-field .form-field-input input:focus,.profile-basic-information .form-field .form-field-input textarea:focus,form[name=profile-change-password] .form-field .form-field-input input:focus,form[name=profile-change-password] .form-field .form-field-input textarea:focus{border-color:var(--lp-primary-color);outline:0;color:#222}.profile-basic-information .form-field .form-field-input ::placeholder,form[name=profile-change-password] .form-field .form-field-input ::placeholder{opacity:1;color:#999}.profile-basic-information .form-field .form-field-input :-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input :-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input ::-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input ::-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input .description,form[name=profile-change-password] .form-field .form-field-input .description{margin-top:15px}@media(max-width:767px){.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 0 24px 0}}.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:left;width:calc(50% - 20px);margin-right:10px}@media(max-width:767px){.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:unset;width:100%;margin:0 0 24px 0}}.profile-basic-information .form-field__clear,form[name=profile-change-password] .form-field__clear{clear:both}.profile-basic-information button,form[name=profile-change-password] button{padding:16px 24px;border:0;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-size:16px;font-weight:400;line-height:1}.profile-basic-information button:hover,form[name=profile-change-password] button:hover{opacity:.5;background:var(--lp-primary-color)}.profile-basic-information p,form[name=profile-change-password] p{margin:0}#learn-press-profile-basic-information .form-fields::after{display:block;clear:both;content:""}@media(max-width:767px){#learn-press-profile-basic-information .form-fields{margin:0}}#learn-press-profile-basic-information button[type=submit]{padding:0 15px;height:40px;line-height:40px;border:0;display:inline-flex;align-items:center;justify-content:center;background-color:var(--lp-primary-color);color:white;font-size:16px;font-weight:400;-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#learn-press-profile-basic-information button[type=submit]:hover{opacity:.5;background-color:var(--lp-primary-color)}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;color:#999;font-size:.8em;font-style:italic}div.order-recover{display:flex}div.order-recover>.button-recover-order{margin:0;margin-left:20px;flex:0 0 auto}div.order-recover>.button-recover-order.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}div.order-recover input[type=text]{width:100%;height:43px;margin-right:10px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px;flex:1 1 auto}.learn-press-profile-course__progress .lp_profile_course_progress{border:1px solid #eee;border-top:0;overflow-x:auto}.learn-press-profile-course__progress .lp_profile_course_progress__item{display:grid;align-items:center;padding:15px;border-top:1px solid #eee;grid-template-columns:90px 1fr 80px 190px 140px;column-gap:20px}.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:60px;height:auto}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:100%}}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item{display:block}}.learn-press-profile-course__progress .lp_profile_course_progress__header{background-color:#eee}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__header{display:flex;overflow-x:auto;white-space:nowrap;justify-content:flex-end}}.lp_profile_course_progress__nav button.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.entry-content ul.learn-press-profile-course__tab__inner{padding:0}.content ul.learn-press-courses{margin-left:-15px;margin-right:-15px}.content ul.learn-press-courses[data-layout=list]{margin:0}.learn-press-profile-course__tab__inner{display:flex;margin:40px 0 0 0 !important;padding:0 !important;background:#eee;list-style:none !important}.learn-press-profile-course__tab__inner>li{list-style:none;margin:0 !important}.learn-press-profile-course__tab__inner>li:hover{cursor:pointer}.learn-press-profile-course__tab__inner a{display:inline-block;padding:15px 30px;font-weight:600;position:relative}.learn-press-profile-course__tab__inner a.active{color:var(--lp-primary-color);background:#fff}.learn-press-profile-course__tab__inner a.active::before{content:"";height:4px;width:100%;background-color:var(--lp-primary-color);position:absolute;top:0;left:0;right:auto}.learn-press-course-tab-filters .learn-press-filters{margin-top:20px;margin-left:0;padding:0;list-style:none}.learn-press-course-tab-filters .learn-press-filters a.active{color:var(--lp-primary-color)}.lp-profile-content ul{list-style:none !important;padding:0 !important}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed #ccc;border-radius:3px;background-color:#fafafa;font-size:14px;font-weight:300;font-style:italic;line-height:43px;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-left:15px;margin-right:0}#primary .learn-press-courses[data-size="3"] .course{width:50%}body.learnpress .learn-press-tabs .learn-press-tabs__tab,body.learnpress .attachment-recent-works-thumbnail{border-radius:0}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panel{display:none;padding-top:30px}.course-tab-panel.active{display:block}.course-tab-panel.course-tab-panel-instructor,.course-tab-panel.course-tab-panel-faqs{padding-top:30px}.course-tab-panel.course-tab-panel-reviews{padding:56px 0 0 0}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125rem;color:#333;font-size:18px;font-weight:500}.course-tab-panel .course-description p{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;margin-bottom:40px}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:0;margin-bottom:30px}}.course-tab-panel .lp-course-author img{width:50px;height:50px;margin-bottom:20px;border-radius:50%;object-fit:cover;object-position:center}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:18px}.course-tab-panel .lp-course-author .author-title a{color:#333;box-shadow:none;font-size:18px;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:14px;line-height:33px;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:"\f0d5"}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:40px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:18px;font-weight:600}.course-summary div.lp-list-co-instructor__bio__description{font-size:1rem}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .price{vertical-align:middle}.course-summary .course-price .origin-price{margin-right:10px;font-size:18px;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:24px}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2rem;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color);font-size:16px}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-size:1rem;font-style:italic;line-height:24px}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;right:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:"‘‘";transform:rotate(180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:12px;line-height:1}.edit-content{margin-left:5px}ul.learn-press-nav-tabs{display:flex;margin:0;padding:0;border:1px solid rgba(204,204,204,0.3);border-bottom:0;background:#f1f2f8;list-style:none}ul.learn-press-nav-tabs .course-nav{float:left;position:relative;margin:0;border-right:1px solid rgba(204,204,204,0.3);border-bottom:1px solid rgba(204,204,204,0.3);list-style:none}ul.learn-press-nav-tabs .course-nav:first-child.active::after{position:absolute;top:-1px;left:-1px;width:1px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav:last-child{border-right:0}ul.learn-press-nav-tabs .course-nav:last-child.active::after{position:absolute;top:-1px;right:-2px;width:2px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav.active{border-bottom:0}ul.learn-press-nav-tabs .course-nav.active::before{position:absolute;top:-1px;left:0;width:100%;height:4px;background:var(--lp-primary-color);content:""}ul.learn-press-nav-tabs .course-nav.active label{color:var(--lp-primary-color);background-color:white}ul.learn-press-nav-tabs .course-nav a{display:inline-block;padding:10px 20px;border-bottom:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs .course-nav a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs[data-tabs] .course-nav{flex:1}ul.learn-press-nav-tabs[data-tabs] .course-nav a{width:100%;text-align:center}ul.learn-press-nav-tabs::after{display:block;clear:both;content:""}@media(max-width:767px){ul.learn-press-nav-tabs{display:grid;grid-template-columns:repeat(2,1fr);max-height:none}}.course-item-popup #tab-curriculum{display:block}.course-curriculum ul.curriculum-sections{position:relative;z-index:499;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-right:15px;margin-left:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{display:inline-flex;margin-top:10px;margin-right:auto;margin-left:auto;padding:10px 20px;border:1px solid #ccc;border-radius:4px;outline:0;color:#222;background:#f7f7f7;box-shadow:none;font-weight:500;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .section-item__loadmore.loading button::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.course-curriculum .section-header{display:table;width:100%;padding:0 0 26px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin:0;margin-top:10px;font-size:14px;line-height:21px;color:#999;font-style:italic}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:14px;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0 0 15px 0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;padding:10px 0;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;margin-left:14px;border-radius:3px;color:#fff;font-size:14px;line-height:23px;text-align:center;vertical-align:middle;padding:0 8px}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;vertical-align:middle;text-transform:lowercase;content:"\f00c"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{color:#fff;padding:0 8px;background:#00adff;display:inline-flex;align-items:center;justify-content:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:baseline;content:attr(data-preview)}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 15px 0 30px;background:rgba(241,242,248,0.4);font-size:14px;transition:padding-left linear .15s}@media(max-width:767px){.course-curriculum .course-item{padding:0 0 0 15px}}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-size:16px;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:table;padding-right:15px;padding-left:0;border-bottom:0;outline:0;box-shadow:none;line-height:1.5;color:#777;text-decoration:none}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{display:table-cell;display:table-cell;left:0;width:20px;padding:15px 0;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:400;vertical-align:middle;transition:left linear .15s}.course-curriculum .course-item .item-icon,.course-curriculum .course-item .item-name{display:table-cell;padding:17px 16px;color:#333;font-size:16px;font-weight:600;vertical-align:middle}.course-curriculum .course-item .item-icon::before{font-size:18px}.course-curriculum .course-item .item-icon.icon-lock{float:right;margin-top:15px}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:"\f059"}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:"\f15b"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:"\f03d"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:"\f028"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:"\f023"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:"\f00d"}.course-curriculum .course-item::before{position:absolute;top:50%;left:0;width:3px;height:0;background:#00adff;content:"";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{padding-left:10px;background:#f9f9f9}.course-curriculum .course-item.current a::before{left:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{padding:0;color:#666;font-size:1.4rem;letter-spacing:0;text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{display:flex;width:100%;margin-top:20px;margin-bottom:20px;padding:10px 0;border:0;outline:0;color:#fff;background:#333;box-shadow:none;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .curriculum-more__button.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}body.course-item-popupx{overflow:hidden;_opacity:0}body.course-item-popupx #learn-press-course-curriculum{overflow:auto;position:fixed;z-index:9999;top:32px;bottom:0;left:0;width:400px;border-right:1px solid #ddd;background:#fff}body.course-item-popupx #learn-press-course-curriculum .section-header{padding:0 15px}body.course-item-popupx #learn-press-course-curriculum .section-header .section-desc{margin:-10px 0 5px}body.course-item-popupx #learn-press-course-curriculum .course-item{padding-right:15px;padding-left:15px}body.course-item-popupx #learn-press-course-curriculum .course-item a::before{left:15px}body.course-item-popupx #learn-press-content-item{overflow:hidden;position:fixed;z-index:9999;top:32px;right:0;bottom:0;left:400px;background:#fff}body.course-item-popupx #learn-press-content-item .content-item-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #learn-press-content-item .course-item-title{font-size:1.4rem}body.course-item-popupx #learn-press-content-item .content-question-summary .review-heading{text-align:center}body.course-item-popupx #learn-press-content-item .content-question-summary .question-title{margin-bottom:10px;font-size:1.2rem}body.course-item-popupx #content-item-nav{position:fixed;z-index:99999;right:0;bottom:0;left:400px;height:60px;border-top:1px solid #ddd;background:#f5f5f5}body.course-item-popupx #content-item-nav .content-item-nav-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #content-item-nav button{height:40px;padding:0 20px;line-height:40px}body.course-item-popupx .comment-form-textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.course-item-popupx.wpadminbar #learn-press-course-curriculum,body.course-item-popupx.wpadminbar #learn-press-content-item{top:92px}body.course-item-popupx.wpadminbar .content-item-description{margin-bottom:20px}body.course-item-popupx .content-item-summary{margin-bottom:50px}body.course-item-popupx .content-item-summary>h3{margin-bottom:20px}body.course-item-popupx .content-item-summary.content-item-video .entry-video{position:absolute;top:0;left:0;width:100%;background:#000;line-height:1}body.course-item-popupx .content-item-summary.content-item-video .entry-video iframe{width:100%;max-width:900px;margin-bottom:0;vertical-align:top}body.course-item-popupx .learn-press-content-protected-message{margin-bottom:50px;padding:20px;background:#ffe0e0}body.course-item-popupx.content-only #learn-press-content-item{z-index:9999999;top:0;bottom:0;left:0}body.course-item-popupx.content-only #learn-press-content-item .content-item-scrollable{bottom:0}body #ifr-course-item{position:absolute;z-index:999999;top:0;left:0;width:100%;height:100%;background:#fff}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:right}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:"Font Awesome 5 Free"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:"\f017"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:"\f15c"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:"\f29c"}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.course-remaining-time .label-enrolled{font-size:inherit}.learn-press-form.completed button::before{margin-right:10px;font-family:"Font Awesome 5 Free";font-size:18px;content:"\f00c"}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.viewing-course-item .content-item-wrap{margin-top:50px}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-left .meta-item{margin-right:10px}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta .course-meta__pull-right .meta-item{margin-left:10px}.course-meta.course-meta-primary .meta-item{flex:1}.course-meta.two-columns .course-meta{flex:1}.course-extra-box{margin-bottom:3px;border:1px solid rgba(204,204,204,0.3);border-radius:5px}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 45px 0 38px;background:rgba(181,187,211,0.15);font-size:1.1rem;font-weight:600;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-left:15px}}.course-extra-box__title::after{position:absolute;top:0;right:20px;color:#666;font-family:"Font Awesome 5 Free";line-height:var(--extra-height);content:"\f0d7"}.course-extra-box__content{display:none}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:10px 38px;border-bottom:1px solid rgba(204,204,204,0.3);color:#666;font-size:16px;font-weight:300}@media(max-width:767px){.course-extra-box__content li{padding-left:30px;padding-right:30px}}.course-extra-box__content li::before{margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00c"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:"\f0d8"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:60px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:60px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs{padding-top:64px}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:25px 45px 25px 30px;font-size:1rem;font-weight:500;line-height:1.7;cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:50%;right:28px;color:#6c6c6c;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f078";transform:translateY(-50%)}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover{background:rgba(241,242,248,0.4)}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:0 28px 33px 28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box{background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:"\f077"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@media screen and (max-width:1300px){body.course-item-popup #learn-press-course-curriculum{width:300px}body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}body.course-item-popup #content-item-nav{left:300px}body.course-item-popup .section-desc{display:none}}@media screen and (max-width:1200px){body.course-item-popupx #learn-press-course-curriculum{width:300px}body.course-item-popupx #content-item-nav{left:300px}body.course-item-popupx #learn-press-content-item .content-item-nav-wrap,body.course-item-popupx #learn-press-content-item .content-item-wrap{width:90%}}@media screen and (max-width:768px){body.course-item-popup .course-curriculum{width:200px}body.course-item-popup #content-item-nav{left:200px}body.course-item-popup #learn-press-content-item .content-item-nav-wrap,body.course-item-popup #learn-press-content-item .content-item-wrap{width:90%}body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}.learn-press-course-results-progress{margin-right:0}.learn-press-course-results-progress .items-progress,.learn-press-course-results-progress .course-progress{float:none;width:100%;margin-right:0;margin-bottom:20px}}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:""}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:15px;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:20px}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:14px}.quiz-progress .progress-items .progress-item i{display:none;float:left;width:60px;height:60px;color:#fff;background:#00adff;font-size:30px;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:""}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;color:#777;background:#f5f5f5;font-size:20px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell;font-size:smaller}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;left:0;width:3px;background:#ddd;content:"";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:35px;min-width:35px;height:35px;margin:0 10px 0 3px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{margin-top:-10px;position:absolute;top:18px;left:9px;box-sizing:content-box;opacity:0;color:#3db748;font-family:"Font Awesome 5 Free";font-weight:900;font-size:16px;content:"\f00c"}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answer-correct{background:#e1f5ff}.answer-options .answer-option.answer-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answer-correct input[type=checkbox]:checked ~ .option-title::before{background:#e1f5ff}.answer-options .answer-option.answered-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-correct input[type=checkbox]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option.answered-wrong input[type=radio]::before,.answer-options .answer-option.answered-wrong input[type=radio]::after,.answer-options .answer-option.answered-wrong input[type=checkbox]::before,.answer-options .answer-option.answered-wrong input[type=checkbox]::after{border-color:red}.answer-options .answer-option.answered-wrong input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-wrong input[type=checkbox]:checked ~ .option-title::before{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-left:5px;content:"(+" attr(data-counter) ")"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:"\f00c"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0 !important;color:#fff;background:#f02425;font-size:16px;line-height:22px;font-weight:400;display:flex;align-items:center;justify-content:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.quiz-result .result-message::after{margin-left:10px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00d"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid #999;color:#333;font-size:28px;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:16px;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:14px}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:left;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed #ccc}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:16px;font-weight:400;line-height:35px}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-right:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-size:16px;font-weight:500;line-height:35px;text-align:right}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:"\f017"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:"\f005"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:"\f059"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:"\f00c"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:"\f00d"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:"\f2f5"}.quiz-status{position:sticky;z-index:99;top:0;right:0;left:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;height:60px;margin:0 auto;padding:5px 10px 5px 30px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}@media(max-width:480px){.quiz-status>div{display:block;height:auto;text-align:center;padding:15px}.quiz-status>div .questions-index{margin-bottom:10px}}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:16px;font-weight:400;line-height:26px}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{position:relative;min-width:120px;margin-right:5px;padding:12px 29px;color:#333;background:#fff;font-size:14px;font-weight:400;line-height:1;text-align:center}.quiz-status .countdown .fas{position:absolute;top:50%;left:10px;color:#333;font-size:14px;transform:translateY(-50%)}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:"";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(-90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .submit-quiz button{margin:0 0 0 10px;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:12px;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-left:3px;font-family:"Font Awesome 5 Free";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;left:50%;width:10px;height:4px;margin-left:-5px;border-radius:2px;background:#aaa;content:""}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-right:10px;padding-left:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 40px 0 0;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 20px 0 0}}.quiz-intro-item::before{position:relative;top:-2px;margin-right:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:"\f012"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:"\f12e"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:"\f017"}.quiz-intro-item__title{margin:0;padding:0 8px 0 0;color:#333;font-size:16px;font-weight:300;line-height:1.7}.quiz-intro-item__content{color:#222;font-size:16px;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:""}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(45deg)}.circle-bar .before{border-bottom-color:transparent;border-left-color:transparent;transform:rotate(45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-right-color:transparent;transform:rotate(45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-left-color:inherit;transform:rotate(45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:right}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;left:50%;width:200px;height:200px;margin-left:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:""}.quiz-result .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.question .answer-option{padding:0;_border:2px solid #d9e0f1;background:#fff}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;margin:-19px 0 0 10px;border-color:#d9e0f1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:14px 10px 11px 65px;border:1px solid #ccc;color:#666;background:#fff;font-size:16px;font-weight:300;line-height:26px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title::after{display:inline-block;visibility:hidden !important;content:"."}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;color:#333;font-size:18px;font-weight:500}.question .question-title .edit-link{float:right;font-size:14px;font-weight:normal}.question .question-content{margin-bottom:30px;color:#666;font-size:16px;font-weight:300;line-height:26px}.question .question-content img{width:100%;max-width:100%}.question .question-response{margin-bottom:10px;font-size:14px}.question .question-response .label{display:inline-block;margin:0 5px 0 0;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 5px 0 0}.question .btn-show-hint{position:relative;margin:0 0 0 10px;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none}.question .btn-show-hint::before{font-family:"Font Awesome 5 Free";font-size:18px;content:"\f059"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;left:0;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed #ddd;text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-left:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.learn-press-message.fixed{position:fixed;top:32px;left:0;right:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-archive-courses ul{list-style-type:revert;padding:0 0 23px 1em}.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}@media(max-width:768px){.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{padding-left:15px;padding-right:15px}}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px}.lp-archive-courses ol ul{padding:2px 0 2px 35px}.lp-archive-courses ol ol{padding:2px 0 2px 20px}.lp-archive-courses thead th,.lp-archive-courses tr th{padding:9px 24px}.lp-archive-courses tr td{border-top:1px solid #eee;padding:6px 24px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul{padding:0 !important;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size="3"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-left:15px;padding-right:15px}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.learn-press-tip{display:none;margin:0 5px;color:#444;font-size:13px;font-style:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:"Font Awesome 5 Free";content:"\f059"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-left:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:12px;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:12px}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;right:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:16px;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:"Font Awesome 5 Free";content:"\f00d"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;left:50%;width:0;height:0;margin-left:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:""}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;left:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;right:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:30px;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}a{text-decoration:none}.lp-content-area{width:100%;max-width:1170px;margin:0 auto}@media(max-width:1024px){.lp-content-area{padding-right:15px;padding-left:15px}}.lp-content-area::after,.lp-content-area::before{display:table;clear:both;content:""}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:"";position:absolute;top:0;bottom:0;left:15px;right:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:#fff}.lp-archive-courses form[name=search-course]{position:relative;margin-bottom:20px}.lp-archive-courses form[name=search-course] .search-course-input{width:100%;padding:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-archive-courses form[name=search-course] .search-course-button{position:absolute;top:1px;right:1px;bottom:1px;height:auto;padding:15px;line-height:1px}.lp-archive-courses .learn-press-courses-header{float:left;padding-top:4px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:30px;font-weight:600}@media(max-width:767px){.lp-archive-courses .learn-press-courses-header{margin-bottom:20px}}.lp-archive-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.lp-archive-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.lp-archive-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-item:hover .course-wishlist{opacity:1}.lp-archive-courses .course-item .course-wishlist.filled{opacity:1}.lp-archive-courses .course-item .course-instructor{float:left;margin-bottom:16px;font-size:14px;font-weight:300;line-height:25px;text-transform:capitalize}.lp-archive-courses .course-item .course-instructor a{color:#059de9}.lp-archive-courses .course-item .course-instructor a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-content{position:relative;border-top:0}.lp-archive-courses .course-content .course-permalink{display:-webkit-box;clear:both;overflow:hidden;position:relative;border:0;color:#fff;text-decoration:none;text-transform:none;-webkit-line-clamp:2;-webkit-box-orient:vertical;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-permalink:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-review{display:none}.lp-archive-courses .course-content .course-categories,.lp-archive-courses .course-content .course-tags{display:block;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-categories{float:left;position:relative;margin-right:10px;margin-bottom:16px}.lp-archive-courses .course-content .course-categories a{display:inline-block;display:none;margin:0 10px;color:#fff;text-decoration:none}.lp-archive-courses .course-content .course-categories a:first-child{display:block;margin-left:0;padding:2px 16px;background:var(--lp-primary-color)}.lp-archive-courses .course-content .course-categories a:hover{color:#333}.lp-archive-courses .course-content .course-categories::after{position:absolute;top:50%;right:-2px;width:1px;height:12px;opacity:.5;background:#999;content:"";transform:translate(0,-50%)}.lp-archive-courses .course-content .course-info{color:#666;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-info>span{display:block}.lp-archive-courses .course-content .course-info .course-price{float:right}.lp-archive-courses .course-content .course-info .course-price .origin-price,.lp-archive-courses .course-content .course-info .course-price .price{color:#333;font-size:16px;font-weight:600}.lp-archive-courses .course-content .course-info .course-price .origin-price{margin-right:10px;color:#666;font-size:14px;font-weight:300;text-decoration:line-through}.lp-archive-courses .course-content .course-info .course-instructor{float:right}.lp-archive-courses .course-content .course-info::after{display:block;clear:both;content:""}.lp-archive-courses .course-content .course-excerpt{display:-webkit-box;overflow:hidden;margin-bottom:28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.lp-archive-courses .course-content .separator{display:none}.lp-archive-courses .course-wrap-thumbnail{overflow:hidden;position:relative}.lp-archive-courses .course-wrap-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;left:-110px;width:300px;text-align:center;transform:rotate(-45deg)}.lp-archive-courses .course-wrap-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;right:6px;opacity:0;color:#fff;cursor:pointer}.lp-archive-courses .course-wrap-thumbnail .course-wishlist::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f004"}.lp-archive-courses .course-wrap-thumbnail .course-wishlist .course-wishlist__btn{display:none}.lp-archive-courses .course-wrap-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-wrap-thumbnail:hover::before{opacity:1}.lp-archive-courses .course-wrap-thumbnail:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-wrap-thumbnail:hover .course-wishlist{opacity:1}.lp-archive-courses .course-thumbnail a{display:block;overflow:hidden}.lp-archive-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.lp-archive-courses .course-thumbnail .thumbnail::before{position:absolute;z-index:1;top:0;right:0;bottom:0;left:0;opacity:0;background:rgba(0,0,0,0.5);content:"";transition:all .3s}.lp-archive-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1)}.lp-archive-courses .course-title{margin:0;padding:0;color:#333;font-size:16px;font-weight:600;line-height:24px}.lp-archive-courses .course-title:hover{color:var(--lp-primary-color)}@media(min-width:769px){.lp-archive-courses .course-summary-content .course-info-left{width:calc(100% - 330px)}}.lp-archive-courses .course-summary-content .course-title{margin-bottom:42px;color:#fff;font-size:1.5rem;font-weight:500;line-height:1}.lp-archive-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}@media(max-width:768px){.lp-archive-courses .course-summary-content{width:100%}}.lp-archive-courses .course-detail-info{padding:40px 0 10px 0;color:#fff;background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:"";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{right:100%;left:auto}.lp-archive-courses .course-detail-info::after{left:100%;right:auto}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;height:46px;margin-right:50px;font-size:16px;font-weight:300;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item span{padding-right:4px;padding-left:0}.lp-archive-courses .course-meta__pull-left .meta-item:last-child{margin-right:0}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-right:10px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:"\f017"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:"\f012"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:"\f0c5"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:"\f12e"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:"\f501"}@media(max-width:1024px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-right:30px}}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-right:0}}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:#999;font-size:14px;font-weight:300;line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:#fff;font-size:16px;font-weight:400;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories::before{margin-right:10px;font-size:36px;content:"\f02e"}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 5px}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column-reverse;justify-content:flex-end;align-items:flex-end}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:20px}}.lp-archive-courses .course-meta-primary{margin-bottom:36px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-right:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-right:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-272px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-left:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:#fff;background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:"Font Awesome 5 Free";font-size:26px;font-weight:900;content:"\f004"}.lp-archive-courses .course-summary-sidebar__inner>div{overflow:hidden;padding:20px;background:#fff}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-size:16px;font-weight:300;line-height:24px}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.learn-press-courses{clear:both;margin:0 -15px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course{width:25%;margin:0 0 60px 0;box-shadow:none;list-style:none}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;padding:24px;border:1px solid rgba(204,204,204,0.3);border-radius:4px;flex-wrap:wrap;justify-content:flex-end}@media(max-width:767px){.learn-press-courses[data-layout=list] .course{padding:15px}}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;justify-content:space-between}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{float:right;width:calc(64.2% - 76px);padding-top:5px}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 40px)}}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 25px)}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{width:100%;padding-top:20px}}.learn-press-courses[data-layout=list] .course-content .course-categories a{position:relative;padding:2px 20px 2px 15px;-webkit-clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%)}.learn-press-courses[data-layout=list] .course-content .course-permalink{height:25px;margin-bottom:5px;-webkit-line-clamp:1}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 10px 10px 0;padding:3px 5px;border-radius:3px;color:#fff;background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-footer{float:left;margin-right:20px}.learn-press-courses[data-layout=list] .course-content .course-footer .course-students{display:none}.learn-press-courses[data-layout=list] .course-content .course-footer .course-price{float:unset}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-footer{margin-bottom:30px}}.learn-press-courses[data-layout=list] .course-content .course-readmore{float:right;position:relative;right:4px}.learn-press-courses[data-layout=list] .course-content .course-readmore a{padding:9px 24px;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-weight:400;line-height:1;transition:all .3s;display:block}.learn-press-courses[data-layout=list] .course-content .course-readmore a:hover{opacity:.5;background:var(--lp-primary-color)}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-readmore{display:flex;float:unset;clear:both}}.learn-press-courses[data-layout=list] .course-wrap-meta{display:flex;padding-top:12px;padding-bottom:18px;color:#333;font-size:14px;font-weight:400}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:28px;text-transform:capitalize}@media(max-width:1024px){.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:20px}}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item::before{position:relative;top:-1px;margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-level::before{content:"\f012"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-duration::before{content:"\f017"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-lesson::before{content:"\f0c5"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-quiz::before{content:"\f12e"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-student::before{content:"\f501"}@media(max-width:815px){.learn-press-courses[data-layout=list] .course-wrap-meta{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:15px}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:15px}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-meta{grid-template-columns:repeat(3,1fr)}}.learn-press-courses[data-layout=list] .course-wrap-thumbnail{float:left;width:35.8%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-thumbnail{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:18px}.learn-press-courses[data-layout=grid] .course{padding:0 15px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course{width:100%}}.learn-press-courses[data-layout=grid] .course-item:hover{box-shadow:0 15px 20px 0 rgba(0,0,0,0.2)}.learn-press-courses[data-layout=grid] .course-item .course-instructor{margin-bottom:7px}.learn-press-courses[data-layout=grid] .course-content{padding:15px 20px 12px 20px;border:1px solid #f0f0f0;border-top:0;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-categories{float:right;position:absolute;z-index:1;top:-34px;right:-1px;margin-right:0}.learn-press-courses[data-layout=grid] .course-content .course-categories::after{display:none}.learn-press-courses[data-layout=grid] .course-content .course-categories a{position:relative;margin:0;padding:2px 12px 2px 22px;-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%)}.learn-press-courses[data-layout=grid] .course-content .course-permalink{height:48px;margin-bottom:20px}.learn-press-courses[data-layout=grid] .course-content .course-info{display:flex;flex-direction:column;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-wrap-meta,.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-readmore{display:none}.learn-press-courses[data-layout=grid] .course-content .course-footer{padding-top:18px;border-top:1px solid rgba(153,153,153,0.2)}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students{float:left;text-transform:capitalize}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students::before{position:relative;top:-1px;margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f501"}.learn-press-courses[data-layout=grid] .learn-press-message{margin-left:15px;margin-right:15px}.learn-press-courses[data-size="3"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size="3"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-courses-bar{display:flex;float:right;margin-bottom:48px}@media(max-width:767px){.lp-courses-bar{flex-direction:row;width:100%;justify-content:space-between}}.lp-courses-bar .search-courses{position:relative;width:306px;max-width:100%;margin-right:20px;line-height:1;flex:1}.lp-courses-bar .search-courses input[type=text]{width:100%;height:44px;padding:6px 32px 6px 18px;border:1px solid #ccc;border-radius:5px;background:#fff;font-size:14px;font-style:italic;line-height:1}.lp-courses-bar .search-courses input[type=text]:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{position:absolute;top:50%;right:12px;width:30px;height:30px;padding:0;border:0;color:#333;background:transparent;font-size:16px;line-height:1;transform:translate(0,-50%)}.lp-courses-bar .search-courses button:focus{border:0;outline:0}.lp-courses-bar .search-courses button.loading>i::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .search-courses ::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses :-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses ::placeholder{color:#999}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}}.lp-courses-bar .switch-layout{display:flex;height:44px;line-height:1;text-align:right;flex:0 0 40px;align-items:center;justify-content:center}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{display:block;width:40px;height:40px;margin:0;padding:0;border-radius:5px;font-size:16px;line-height:40px;text-align:center;cursor:pointer}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:8px 6px;color:#333;font-family:"Font Awesome 5 Free";font-weight:900;line-height:1}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:"\f00a"}.lp-courses-bar .switch-layout .switch-btn.list{margin-left:3px}.lp-courses-bar .switch-layout .switch-btn.list::before{content:"\f03a"}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background:#f5f5f5}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background:#f5f5f5}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background:#f5f5f5}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background:#f5f5f5}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background:#f5f5f5}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background:#f5f5f5}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background:#f5f5f5}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background:#f5f5f5}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background:#f5f5f5}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background:#f5f5f5}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repuchase_select{padding:20px;background:#f7f7f7}.lp_allow_repuchase_select>ul{padding:0;list-style:none}.lp_allow_repuchase_select>a{display:inline-block;margin-top:10px;color:#fff;background-color:#222}.comment-respond .comment-reply-title{font-size:30px;font-weight:500;line-height:1.2;margin-bottom:15px}.comment-respond .comment-form{margin:0 -15px}.comment-respond .comment-form>p label{display:block;margin-bottom:10px;font-size:16px;font-weight:500}.comment-respond .comment-form>p.comment-notes,.comment-respond .comment-form>p.logged-in-as{color:#666;font-size:16px}.comment-respond .comment-form>p.logged-in-as a{color:#666;text-decoration:underline}.comment-respond .comment-form>p.logged-in-as a:hover,.comment-respond .comment-form>p.logged-in-as a:focus{color:var(--lp-primary-color)}.comment-respond .comment-form>p.comment-form-cookies-consent{clear:both}.comment-respond .comment-form>p.comment-form-cookies-consent input{padding:0;margin-right:8px}.comment-respond .comment-form>p.comment-form-cookies-consent label{display:inline}.comment-respond .comment-form>p,.comment-respond .comment-form>div{padding:0 15px;margin-bottom:15px}.comment-respond .comment-form input[type=text],.comment-respond .comment-form input[type=email],.comment-respond .comment-form input[type=url]{height:40px;line-height:normal;width:100% !important;margin-bottom:15px}.comment-respond .comment-form input[type=submit]{background-color:var(--lp-primary-color);border:0;min-height:40px;line-height:40px;padding:0 15px;font-size:16px;text-transform:capitalize;font-weight:500;margin-top:15px;cursor:pointer;color:white}.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:33.33%;float:left}@media(max-width:575px){.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:100%;float:unset}}.comment-respond .comment-form textarea,.comment-respond .comment-form input{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-width:100%}.comment-respond .comment-form textarea{width:100%;display:block;padding:20px 15px;resize:none}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course:hover{opacity:.5;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice{margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice.error{border-color:#d85554}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1rem;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:16px;font-weight:300;line-height:16px;text-align:right}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:#666;font-size:18px;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:#333;font-size:1.8rem;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 20px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{display:flex;color:#666;font-size:16px;font-weight:300;justify-content:space-between}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-size:1rem;font-weight:300;line-height:24px}.course-sidebar-preview>*:last-child{margin-bottom:0}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none}.learnpress-page:hover{text-decoration:none}#popup-course{display:flex;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;background:#fff}#popup-course .back-course{padding-left:30px;padding-right:30px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-left:15px;padding-right:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course #popup-header{display:flex;position:fixed;z-index:100;right:0;left:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}#popup-course #popup-header .course-title{margin:0;padding:0;line-height:70px;letter-spacing:unset}#popup-course #popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-size:16px;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-header .course-title a:hover{color:var(--lp-primary-color)}@media(max-width:768px){#popup-course #popup-header .course-title{flex:1}}#popup-course #popup-header .items-progress{display:flex;justify-content:center;align-items:center}@media(max-width:768px){#popup-course #popup-header .items-progress{flex:1}}@media(max-width:767px){#popup-course #popup-header .items-progress{padding-bottom:20px;justify-content:end}}#popup-course #popup-header .number{padding-right:10px;color:#fff;font-size:14px;font-weight:300}#popup-course #popup-header .lp-button{display:flex;position:relative;height:40px;margin:9px;border:0;color:#fff;background:var(--lp-primary-color);font-size:14px;font-weight:400;justify-content:center;line-height:40px;align-items:center}#popup-course #popup-header .lp-button:hover{opacity:.8}#popup-course #popup-header .lp-button-back{float:right;margin:9px 10px}#popup-course #popup-header .lp-button-back button::before,#popup-course #popup-header .lp-button-back button::after{content:""}#popup-course #popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-course #popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-left:15px;padding-right:15px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column}}#popup-course #popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-course #popup-sidebar .search-course{display:flex;position:relative;height:70px;background:#f9fafc}#popup-course #popup-sidebar .search-course input[name=s]{display:block;width:100%;margin:6px 0;padding-left:20px;border:0;color:#999;background:transparent;box-shadow:none;font-size:14px;line-height:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:focus{outline:0;color:#222}#popup-course #popup-sidebar .search-course button{position:absolute;top:0;right:10px;width:16px;height:70px;margin:0 10px;padding:0;border:0;background:transparent;line-height:1px}#popup-course #popup-sidebar .search-course button::before{color:#666;font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f002"}#popup-course #popup-sidebar .search-course button.clear{display:none}#popup-course #popup-sidebar .search-course button.clear::before{content:"\f00d"}#popup-course #popup-sidebar .search-course .search-results{display:none;overflow:auto;position:fixed;z-index:99999999;top:92px;bottom:0;left:0;width:400px;margin:0;border-top-color:transparent;border-right:1px solid #d9e0f1;background:#fbfcff}#popup-course #popup-sidebar .search-course .search-results .search-results__item{border-bottom:1px solid #d9e0f1;background:#fff}#popup-course #popup-sidebar .search-course .search-results .search-results__item img{position:absolute;left:10px;width:40px;height:40px}#popup-course #popup-sidebar .search-course .search-results .search-results__item a{display:-webkit-box;overflow:hidden;position:relative;box-sizing:content-box;height:40px;padding:10px 10px 10px 60px;color:#777;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-sidebar .search-course .search-results .search-results__item:hover{background:#d9e0f1}#popup-course #popup-sidebar .search-course .search-results .search-results__item-title{overflow:hidden;margin:0 0 -2px 0;padding:0;font-size:16px;font-weight:normal}#popup-course #popup-sidebar .search-course .search-results .search-results__item-author{font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price{position:absolute;right:10px;bottom:10px;font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price .origin-price{font-size:smaller;text-decoration:line-through}#popup-course #popup-sidebar .search-course .search-results .search-results__not-found{padding:10px;color:#777}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination{padding:10px;text-align:center}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination a,#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{display:inline-block;margin:0 3px 10px 2px;padding:5px 8px;border:1px solid #d9e0f1;border-radius:4px;color:#777;font-size:14px;line-height:1;cursor:pointer}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{color:#999;background:#d9e0f1}#popup-course #popup-sidebar .search-course.searching .search-results{display:block}#popup-course #popup-sidebar .search-course.searching .clear{display:block}#popup-course #popup-sidebar .search-course.searching button{display:none}#popup-course #popup-sidebar .search-course.searching::after{position:absolute;z-index:1;bottom:0;left:50%;width:0;height:0;margin-left:-10px;border:10px solid transparent;border-bottom-color:#fff;content:""}#popup-course #popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar{width:6px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-course #popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-course #popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;right:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-course #popup-sidebar .section.section-empty .section-header{margin:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message{margin:0;padding:10px;border-bottom:1px solid #d9e0f1;border-radius:0;color:#999;background:#f5f5f5;font-size:14px}#popup-course #popup-sidebar .section.section-empty .learn-press-message::before,#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{position:absolute;z-index:9999;top:-16px;left:10px;width:0;height:0;border:8px solid transparent;border-bottom-color:#f5f5f5;background:transparent;content:"";-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{z-index:9998;top:-20px;left:8px;border-width:10px;border-bottom-color:#d9e0f1}#popup-course #popup-sidebar .section-header{position:sticky;z-index:1000;top:0;height:94px;padding:38px 20px 20px 20px;cursor:pointer;background-color:white}#popup-course #popup-sidebar .section-header .section-title{padding:0 0 4px 0;color:#000;font-size:20px;font-weight:500}#popup-course #popup-sidebar .section-header .section-title .show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d7"}#popup-course #popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-course #popup-sidebar .section-header .section-toggle i{color:#666}#popup-course #popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-course #popup-sidebar .section-content{margin-bottom:0}#popup-course #popup-sidebar .course-item{min-height:50px;margin-bottom:4px;padding:5px 20px;background:#f9fafc;align-items:center}#popup-course #popup-sidebar .course-item>span{display:none}#popup-course #popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-course #popup-sidebar .course-item::after{content:""}#popup-course #popup-sidebar .course-item.current{background:#eaeaea}#popup-course #popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-course #popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-course #popup-sidebar .section-item-link{line-height:1;padding-right:0}#popup-course #popup-sidebar .section-item-link::before{padding:12px 0;vertical-align:unset}#popup-course #popup-sidebar .section-item-link .item-name{width:100%;padding:0 10px 0 17px;font-size:14px;line-height:21px;font-weight:500}#popup-course #popup-sidebar .course-item-meta{padding:0}#popup-course #popup-sidebar .course-item-meta .item-meta{padding:0;color:#999;background:transparent;font-size:12px;line-height:1.5;height:auto}#popup-course #popup-sidebar .course-item-meta .item-meta:first-child{margin-left:0}#popup-course #popup-sidebar .course-item-meta .item-meta::before{font-size:12px;line-height:21px}#popup-course #popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-left:15px;padding-right:15px}#popup-course #popup-content .lp-button{position:relative;margin:0 10px 0 0;padding:12px 29px;border-color:var(--lp-secondary-color);font-size:14px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon{margin-right:5px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon::before{font-family:"Font Awesome 5 Free";content:"\f058"}#popup-course #popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:#eee;white-space:nowrap;text-transform:none}#popup-course #popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 11px;border-radius:3px;color:#333;background:#eee;white-space:nowrap}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:"\f110"}#popup-course #popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-course #popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;margin-top:32px;border-color:transparent;color:#fff;background:#3db748;font-size:16px;align-items:center;justify-content:center}#popup-course #popup-content .lp-button.completed i{margin-left:9px;font-size:14px}#popup-course #popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-course #popup-content.fixed-quiz-status .quiz-status>div{padding:0}@media(max-width:767px){#popup-course #popup-content{margin-top:113px}}#popup-course #popup-footer{position:fixed;z-index:999;right:0;bottom:0;left:475px;width:100%;max-width:792px;height:50px;margin:0 auto;border-top:1px solid #ebebeb;background:#fff;-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}@media(max-width:1024px){#popup-course #popup-footer{width:auto;padding:0 15px}}#popup-course #popup-footer .course-item-nav{justify-content:space-between}#popup-course #popup-footer .course-item-nav .prev,#popup-course #popup-footer .course-item-nav .next{display:flex;line-height:50px}#popup-course #popup-footer .course-item-nav .prev a,#popup-course #popup-footer .course-item-nav .next a{display:block;color:#666;font-size:16px}#popup-course #popup-footer .course-item-nav .prev::before,#popup-course #popup-footer .course-item-nav .next::before{color:#999;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900}#popup-course #popup-footer .course-item-nav .prev:hover a,#popup-course #popup-footer .course-item-nav .prev:hover::before,#popup-course #popup-footer .course-item-nav .next:hover a,#popup-course #popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-course #popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-course #popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-course #popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-course #popup-footer .course-item-nav .next::before{margin-left:10px;content:"\f0da"}#popup-course #popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-course #popup-footer .prev::before{margin-right:10px;content:"\f0d9"}#popup-course #popup-footer .prev .course-item-nav__name{right:auto;left:-30px}#popup-course #popup-footer .prev .course-item-nav__name::before{right:auto;left:5px}@media(max-width:1024px){#popup-course #popup-footer .prev .course-item-nav__name{left:15px}}#popup-course #popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;right:-30px;width:auto;padding:10px 15px;color:#666;background:#ccc;font-size:14px;font-weight:300;line-height:1}@media(max-width:1024px){#popup-course #popup-footer .course-item-nav__name{top:-25px;right:15px;left:auto}}#popup-course #sidebar-toggle{display:inline-block;position:absolute;z-index:100;top:198px;left:475px;width:25px;height:56px;margin:0;background:#fff;box-shadow:0 0 20px 0 rgba(0,0,0,0.15);cursor:pointer;transition:.25s;-webkit-appearance:none;border:0}#popup-course #sidebar-toggle:after{display:none}#popup-course #sidebar-toggle::before{display:inline-block;position:absolute;top:50%;left:50%;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d9";transition:.25s;transform:translate(-50%,-50%)}#popup-course #sidebar-toggle:focus{border:0;outline:0}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:right}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid #f5f5f5;border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid #222;line-height:36px}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-left:10px;font-size:14px;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 5px 0 0}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #059601;border-radius:5px;font-size:1rem}#popup-course .question .answer-option input[type=radio],#popup-course .question .answer-option input[type=checkbox]{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 0 0 10px}#popup-course .question .answer-option input[type=radio]::before{border-radius:50%}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle{left:0}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle::before{content:"\f0da"}body.lp-sidebar-toggle__close #popup-course #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-course #popup-header,body.lp-sidebar-toggle__close #popup-course #popup-footer{left:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle{left:0}body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle::before{content:"\f0da"}body:not(.lp-sidebar-toggle__open) #popup-course #popup-sidebar{flex:0}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-course #popup-sidebar{flex-basis:300px}#popup-course #popup-sidebar .course-curriculum{width:300px}#popup-course #popup-header,#popup-course #popup-footer{left:300px}#popup-course #sidebar-toggle{left:299px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course #popup-sidebar{flex-basis:250px}#popup-course #popup-sidebar .course-curriculum{width:250px}#popup-course #popup-header,#popup-course #popup-footer{left:250px}#popup-course #sidebar-toggle{left:249px}#popup-course #sidebar-toggle:checked ~ #popup-sidebar{flex-basis:0}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;padding-bottom:80px}@media(max-width:1024px){.content-item-wrap{width:100%}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;color:#333;font-size:30px;font-weight:600}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap h4{font-size:1.5rem;font-weight:500;line-height:1.5}.content-item-wrap .content-item-summary{padding-top:50px}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:0;margin-bottom:18px;font-size:18px;letter-spacing:unset}.content-item-wrap .content-item-description p{margin:0 0 18px 0;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 0 0 15px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]{margin:0;border:1px solid #d9e0f1;color:#777;background:#fbfcff}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]::before{display:inline-block;width:15px;height:15px;border:2px solid #d9e0f1;border-top-color:transparent;border-left-color:transparent;content:"";-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].prev::before{margin-left:7px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next{margin-left:-1px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next::before{margin-right:7px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]:hover{background:#fff}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:99999;bottom:0;left:50%;width:100%;max-width:792px;height:49px;margin-left:237px;transform:translateX(-50%)}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-left:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .prev{border-top-right-radius:0;border-bottom-right-radius:0}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .next{border-top-left-radius:0;border-bottom-left-radius:0}.content-item-wrap .questions-pagination{height:33px;padding:8px 0;background:#fff;text-align:center}.content-item-wrap .questions-pagination .nav-links{text-align:center}.content-item-wrap .questions-pagination .nav-links .page-numbers{display:inline-block;vertical-align:middle;margin:0 3px 3px;padding:10px 16px;color:#666;background-color:transparent;font-size:16px;font-weight:300;line-height:1;border:1px solid;cursor:pointer}.content-item-wrap .questions-pagination .nav-links .page-numbers.next,.content-item-wrap .questions-pagination .nav-links .page-numbers.prev{display:inline-block;padding:10px;background:transparent;font-size:16px;text-align:center;text-decoration:none;text-transform:none;border:1px solid}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}.course-curriculum .section-title{position:relative;margin-bottom:0;padding:8px 0;color:#5383f7;font-size:16px;font-weight:normal;line-height:1}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:#ccc}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-size:inherit;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;padding-top:0;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;right:0;bottom:0;left:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;left:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(-50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-size:16px;font-weight:400;line-height:26px;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:""}.course-curriculum .section-header .section-left{display:flex}.course-curriculum .section-header .section-left .section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}*{box-sizing:border-box;margin:0;padding:0}button{cursor:pointer}input,button,select,textarea{outline:0}html{overflow-x:hidden}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-right:0;padding-left:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-right:auto;margin-left:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-left:0 !important;margin-right:0 !important;padding-left:0 !important;padding-right:0 !important}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part{padding-left:15px;padding-right:15px}}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}body{background:#fff}body.learnpress-page{overflow-x:hidden}.wrap-fullwidth a:focus,.wrap-fullwidth button:focus,.wrap-fullwidth input:focus,.wrap-fullwidth textarea:focus{border:0;outline:0}.wrap-fullwidth a:hover{text-decoration:none}.wrap-fullwidth p{word-break:break-word}.wrap-fullwidth p:last-child{margin-bottom:0}.wrap-fullwidth label{display:block;margin:0;outline:0}.wrap-fullwidth img{max-width:100%;height:auto}.wrap-fullwidth form{margin:0}.wrap-fullwidth .col-full{box-sizing:border-box;max-width:100%;padding:0}.wrap-fullwidth .col-full .woocommerce-breadcrumb{display:none}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:""}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-content-wrap{width:1170px;max-width:90%;margin:0 auto}.lp-content-wrap>h2{margin-top:0;margin-bottom:26px;color:#333;font-size:30px;font-weight:600}.learn-press-breadcrumb{max-width:1170px;width:100%;margin:0 auto 45px auto;padding:0;color:#333;font-size:14px;font-weight:400;list-style:none}.learn-press-breadcrumb li{display:inline-block;margin:0}.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}.learn-press-breadcrumb i{margin:0 5px;color:#666;font-size:12px}@media(max-width:1024px){.learn-press-breadcrumb{padding-right:15px;padding-left:15px}}.learn-press-breadcrumb a{color:#666;font-weight:500}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:16px 24px;border:1px solid #ccc;color:#333;background:transparent;box-shadow:unset;font-family:inherit;font-size:16px;font-weight:400;line-height:1;text-align:center;vertical-align:middle;text-decoration:none;text-transform:capitalize;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:18px}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-right:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .lp-button.loading::before,.learnpress-page #lp-button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.lp-ajax-message.error{border-color:#d85554}.course-meta{margin-bottom:14px}.course-meta .course-students::before{font-family:"Font Awesome 5 Free";content:""}.lp-entry-content .course-tabs{margin-bottom:60px}.learn-press-checkout-comment h4{display:none}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid #ccc;resize:none}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.retake-course,.enroll-course,.purchase-course{display:inline-block}.table-orders{font-size:16px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}.learn-press-pagination{padding-bottom:20px;text-align:center}.learn-press-pagination .page-numbers{display:inline-block;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learn-press-pagination .page-numbers>li{display:inline-block;margin:0;padding:0 14px}.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0;color:#666;background:transparent;font-size:16px;font-weight:300}.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.list-table-nav{display:flex;margin-left:0;list-style:none}ul.list-table-nav .nav-text{text-align:left;flex:1}ul.list-table-nav .nav-pages{text-align:right;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:#00adff}.primary-color-before::before{color:#00adff}.primary-color-after::after{color:#00adff}.primary-background-color{background:#00adff}.primary-background-color{background:#00adff}.course-origin-price{margin-right:5px;font-size:85%;text-decoration:line-through}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:right}.content-item-wrap #comments{margin-right:0;margin-left:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-summary-sidebar{position:relative}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}@media(min-width:1200px){.course-summary-sidebar.slide-top .course-summary-sidebar__inner{position:absolute}}.course-graduation span{color:#999}.course-graduation .icon{margin-right:5px;font-size:20px}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:"Font Awesome 5 Free";content:"\f071"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:""}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:25px;left:-110px;width:300px;background:#93f;text-align:center;transform:rotate(-45deg)}.lp-badge.featured-course::before{font-size:12px;text-transform:uppercase;content:attr(data-text)}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.course-tabs .course-nav label{display:flex;align-items:center;justify-content:center;margin:0;padding:17px 10px;font-size:16px;line-height:1;font-weight:600;text-transform:capitalize;cursor:pointer}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-right:0}}.course-price:empty{display:none !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table{border-spacing:0;border-left:1px solid var(--lp-secondary-color);border-top:1px solid var(--lp-secondary-color);width:100%}.quiz-attempts table tr th,.quiz-attempts table tr td{border-right:1px solid var(--lp-secondary-color);border-bottom:1px solid var(--lp-secondary-color);padding:5px 15px;text-align:center}.quiz-attempts table tr th{font-weight:500}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}
1
+ @charset "UTF-8";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}.learn-press-message{position:relative;margin:0 0 20px 0;padding:10px 50px 10px 15px;border-top:5px solid #00adff;border-radius:0 0 5px 5px;background:#f5f5f5;width:100%}.learn-press-message.icon{padding-left:45px}.learn-press-message.icon::before{background:#00adff}.learn-press-message.icon::after{position:absolute;top:50%;left:15px;width:10px;height:10px;margin-top:-13px;margin-right:10px;border-radius:50%;color:#fff;background:#00adff;font-family:"Font Awesome 5 Free";font-size:20px;line-height:26px;text-align:center;vertical-align:baseline;content:"\f129"}.learn-press-message::before,.learn-press-message::after{position:absolute;top:0;content:""}.learn-press-message::before{right:20px;width:20px;height:30px;background:#00adff}.learn-press-message::after{top:10px;right:20px;width:0;height:0;border:10px solid transparent;border-bottom-color:#f5f5f5}.learn-press-message.error{border-color:#d85554}.learn-press-message.error::before{background:#d85554}.learn-press-message.error.icon::before,.learn-press-message.error.icon::after{background:#d85554}.learn-press-message.error.icon::after{content:"\f00d"}.learn-press-message.warning{border-color:#ffc107}.learn-press-message.warning::before{background:#ffc107}.learn-press-message.warning.icon::before,.learn-press-message.warning.icon::after{background:#ffc107}.learn-press-message.warning.icon::after{content:"\f00d"}.learn-press-message.success{border-color:#059601}.learn-press-message.success::before{background:#059601}.learn-press-message.success.icon::before,.learn-press-message.success.icon::after{background:#059601}.learn-press-message.success.icon::after{content:"\f129"}.learn-press-message a{text-decoration:underline}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.ajaxload{display:inline-block;position:relative;width:30px;height:30px;background:#7b7b7b;content:"";-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.ajaxload::after{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;display:inline-block;position:absolute;top:2px;left:50%;width:6px;height:6px;margin-left:-3px;background:#dedede;content:""}.lp-ajaxload-style-1{display:inline-block;position:relative;width:32px;height:32px}.lp-ajaxload-style-1::before,.lp-ajaxload-style-1::after{position:absolute;top:0;left:0;width:100%;height:100%;border:3px solid #ddd;content:""}.lp-ajaxload-style-1::after{clip:rect(0,32px,16px,16px);border-color:#2fa7ff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learn-press-tabs{margin-bottom:34px;background:#f1f2f8}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(1):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(1)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(2):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(2)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(3):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(3)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(4):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(4)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(5):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(5)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(6):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(6)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(7):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(7)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(8):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(8)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(9):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(9)::after{background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10){border-bottom:0;background:#fff}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10) label a{color:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::before{background:#ffb606}.learn-press-tabs .learn-press-tabs__checker:nth-child(10):checked ~ .learn-press-tabs__nav .learn-press-tabs__tab:nth-child(10)::after{background:#fff}.learn-press-tabs .learn-press-tabs__nav{display:flex;margin:0;padding:0;border:1px solid #e5e7f2;list-style:none}.learn-press-tabs .learn-press-tabs__tab{position:relative;margin:0;border-right:1px solid #e5e7f2;background:#f1f2f8;list-style:none}.learn-press-tabs .learn-press-tabs__tab:last-child{border-right:0}.learn-press-tabs .learn-press-tabs__tab>label{display:block;margin:0;padding:18px 65px;font-size:18px;line-height:1;font-weight:600;text-align:center;text-transform:capitalize;cursor:pointer}.learn-press-tabs .learn-press-tabs__tab>label a{color:#333}.learn-press-tabs .learn-press-tabs__tab>label a:focus{outline:0;text-decoration:none}@media(max-width:767px){.learn-press-tabs .learn-press-tabs__tab>label{padding:20px 50px 14px 50px}}.learn-press-tabs .learn-press-tabs__tab::before{position:absolute;top:-1px;left:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab::after{position:absolute;bottom:-1px;left:0;width:100%;height:4px;background:transparent;content:""}.learn-press-tabs .learn-press-tabs__tab:first-child.active label{position:relative}.learn-press-tabs .learn-press-tabs__tab:first-child.active label::before{position:absolute;top:0;left:-1px;width:1px;height:100%;background:#fff;content:""}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}.learn-press-filters{display:flex;margin-bottom:30px;margin-left:0;list-style:none}.learn-press-filters>li{margin:0;font-size:16px;line-height:24px}@media(max-width:767px){.learn-press-filters>li{margin-right:30px;margin-left:0}.learn-press-filters>li:last-child{margin-right:0}}.learn-press-filters>li>a,.learn-press-filters>li>span{display:inline-block;font-weight:600}.learn-press-filters>li>span.count{font-weight:400}.learn-press-filters>li>span.count::before,.learn-press-filters>li>span.count::after{display:inline-block}.learn-press-filters>li>span.count::before{content:"("}.learn-press-filters>li>span.count::after{content:")"}.learn-press-filters>li span{color:#ffb606}.learn-press-filters>li span+span{color:#ffb606}.learn-press-filters>li span+span::before,.learn-press-filters>li span+span::after{color:#ffb606}.learn-press-filters>li a{color:#333;cursor:pointer}.learn-press-filters>li a+span{color:#333}.learn-press-filters>li a+span::before,.learn-press-filters>li a+span::after{color:#333}.learn-press-filters>li::after{margin:0 35px;color:#ccc;content:"|"}@media(max-width:767px){.learn-press-filters>li::after{display:none}}.learn-press-filters>li:last-child::after{display:none}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:24px;font-weight:600;line-height:1;font-family:var(--wp--preset--font-family--system-font)}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:right}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:left}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 4px 0 0;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;left:2px;color:#41abec;font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;line-height:1;content:"\f00c"}.lp-checkout-form .lp-checkout-remember a{color:#666;font-size:16px;font-weight:300;line-height:26px;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px;font-size:16px}.lp-checkout-form .lp-form-fields input{height:44px;line-height:normal;width:100%;padding:0 15px;border:1px solid #ccc}.lp-checkout-form .rwmb-input input:not([type=checkbox]){width:100%;height:43px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px}.lp-checkout-form .rwmb-input input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0;color:#222}.lp-checkout-form .rwmb-input ::placeholder{opacity:1;color:#999}.lp-checkout-form .rwmb-input :-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input ::-ms-input-placeholder{color:#999}.lp-checkout-form .rwmb-input input:-webkit-autofill,.lp-checkout-form .rwmb-input input:-webkit-autofill:hover,.lp-checkout-form .rwmb-input input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px #fff inset;-webkit-text-fill-color:#999 !important}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:left}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:#ffb606}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;font-size:16px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-size:16px;font-weight:400}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:""}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid #ccc;border-radius:4px}#checkout-order table{width:100%;margin:0;border:0}#checkout-order td,#checkout-order th{box-sizing:content-box;border:1px solid rgba(204,204,204,0.3);border-top:0;border-right:0;border-left:0;background:unset;line-height:1;text-align:left;vertical-align:inherit}#checkout-order td:last-child,#checkout-order th:last-child{padding-right:0}#checkout-order .course-name{font-size:16px;font-weight:600;line-height:26px}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-size:16px;font-weight:600;line-height:26px;text-align:right}#checkout-order .order-total>th{padding:24px 20px 24px 0}#checkout-order .order-total .col-number{color:#333;font-size:26px}#checkout-order tfoot .cart-subtotal{color:#666;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot .cart-subtotal>th{padding:20px 20px 17px 0}#checkout-order tfoot .order-total th{color:#333;font-size:16px;font-weight:600;line-height:26px}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 13px 18px 0}#checkout-order .course-thumbnail>img{width:100px;max-width:100% !important;height:auto !important}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid rgba(204,204,204,0.3)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:right}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-size:16px;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-left:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:right;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{float:right;margin-top:5px;color:#999;font-size:12px;font-weight:normal}#checkout-payment .secure-connection i{margin-right:5px;color:#ccc;font-size:18px}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 8px 0 0;border:1px solid #ccc;background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;left:50%;width:6px;height:6px;background:#41abec;transform:translate(-50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:""}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}#checkout-payment #checkout-order-action button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-terms-and-conditions{color:#666;font-size:16px;font-weight:300;line-height:26px}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:40px;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid #ddd;background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid #ddd;background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.lp-list-table{width:100%;margin-bottom:20px}.lp-list-table th,.lp-list-table td{padding:20px;border:0 solid rgba(204,204,204,0.3);border-bottom-width:1px;background:#fff;font-size:16px;line-height:1;text-align:left}@media(max-width:767px){.lp-list-table th,.lp-list-table td{padding:15px}}.lp-list-table thead{box-sizing:border-box;border:1px solid #e5e7f2}.lp-list-table thead tr th{height:60px;border-bottom:0;color:#333;background:#f1f2f8;font-size:18px}.lp-list-table tbody,.lp-list-table tfoot{box-sizing:border-box;border:1px solid rgba(204,204,204,0.3);border-top:0}.lp-list-table tbody tr td,.lp-list-table tbody tr th,.lp-list-table tfoot tr td,.lp-list-table tfoot tr th{height:62px;color:#666;background:#fff;font-size:16px;font-weight:300}.lp-list-table tbody tr td a,.lp-list-table tbody tr th a,.lp-list-table tfoot tr td a,.lp-list-table tfoot tr th a{border-bottom:0;color:#666;text-decoration:none}.lp-list-table tbody tr td a:hover,.lp-list-table tbody tr th a:hover,.lp-list-table tfoot tr td a:hover,.lp-list-table tfoot tr th a:hover{color:var(--lp-primary-color)}.lp-list-table tbody tr .column-status .result-percent,.lp-list-table tfoot tr .column-status .result-percent{font-weight:500}.lp-list-table tbody tr .column-status .lp-label,.lp-list-table tfoot tr .column-status .lp-label{font-weight:600}.lp-list-table tbody tr:nth-child(odd),.lp-list-table tfoot tr:nth-child(odd){background:#f5f5f5}.lp-list-table .list-table-nav td{font-size:14px}.lp-list-table .list-table-nav td.nav-text{text-align:left}.lp-list-table .list-table-nav td.nav-pages{text-align:right}.lp-list-table .list-table-nav td.nav-pages .learn-press-pagination{text-align:right}.lp-list-table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-size:16px;font-weight:300;line-height:1}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field label{display:block;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field textarea{width:100%;padding:8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:14px;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk{color:red}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-right:auto;margin-bottom:60px;margin-left:auto;padding:40px;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06) !important}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px;font-size:28px;line-height:1.4}.learn-press-form-login .form-fields .form-field label,.learn-press-form-register .form-fields .form-field label{font-size:16px;font-weight:400;user-select:none}.learn-press-form-login .form-fields .form-field input[type=text],.learn-press-form-login .form-fields .form-field input[type=password],.learn-press-form-login .form-fields .form-field input[type=tel],.learn-press-form-login .form-fields .form-field input[type=url],.learn-press-form-login .form-fields .form-field input[type=number],.learn-press-form-register .form-fields .form-field input[type=text],.learn-press-form-register .form-fields .form-field input[type=password],.learn-press-form-register .form-fields .form-field input[type=tel],.learn-press-form-register .form-fields .form-field input[type=url],.learn-press-form-register .form-fields .form-field input[type=number]{height:42px;border:1px solid #bbb;border-radius:4px;line-height:42px}.learn-press-form-login .form-fields .form-field input[type=text]:focus,.learn-press-form-login .form-fields .form-field input[type=password]:focus,.learn-press-form-login .form-fields .form-field input[type=tel]:focus,.learn-press-form-login .form-fields .form-field input[type=url]:focus,.learn-press-form-login .form-fields .form-field input[type=number]:focus,.learn-press-form-register .form-fields .form-field input[type=text]:focus,.learn-press-form-register .form-fields .form-field input[type=password]:focus,.learn-press-form-register .form-fields .form-field input[type=tel]:focus,.learn-press-form-register .form-fields .form-field input[type=url]:focus,.learn-press-form-register .form-fields .form-field input[type=number]:focus{border:0;outline:2px solid transparent !important;outline-offset:2px;box-shadow:0 0 0 2px #666 !important}.learn-press-form-login .form-fields .form-field.required label::after,.learn-press-form-register .form-fields .form-field.required label::after{content:" *";display:inline}.learn-press-form-login form[name=learn-press-login]>p>label,.learn-press-form-register form[name=learn-press-login]>p>label{color:#666;font-size:16px;cursor:pointer;user-select:none}.learn-press-form-login form[name=learn-press-login]>p>a,.learn-press-form-register form[name=learn-press-login]>p>a{color:#666;font-size:16px;line-height:1}.learn-press-form-login form[name=learn-press-login]>p:last-child,.learn-press-form-register form[name=learn-press-login]>p:last-child{margin-bottom:0}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{width:100%;height:50px;border-radius:3px;outline:0;color:#fff;background:var(--lp-primary-color);box-shadow:none;font-size:16px;line-height:1;vertical-align:middle;text-decoration:none}.required label{font-weight:bold}.required label:after{content:" *";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative}.lp-password-input input[type=password]{padding-right:2.5rem}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;right:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f06e"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:"\f070"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}.lp-user-profile{position:relative;background:#fff}.lp-user-profile .lp-user-profile-avatar img{position:relative;width:100%;height:auto;border-radius:unset;display:block}.lp-user-profile .lp-user-profile-avatar+.lp-user-profile-socials{margin-top:10px;margin-bottom:5px}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;z-index:1;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;width:35px;height:35px;margin:0 7px;border:1px solid #cfcfcf;color:#666;background:#fff;font-size:14px;line-height:35px;text-align:center;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.lp-user-profile .lp-user-profile-socials a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.lp-user-profile .wrapper-profile-header{color:#fff;background:var(--lp-secondary-color);position:relative}@media(max-width:990px){.lp-user-profile .wrapper-profile-header .lp-profile-content-area{min-height:inherit;padding:50px 15px}.lp-user-profile .wrapper-profile-header .lp-profile-left{float:left;position:static}.lp-user-profile .wrapper-profile-header .lp-profile-right{float:right;width:calc(100% - 270px);margin-left:0}}@media(max-width:768px){.lp-user-profile .wrapper-profile-header .lp-profile-left{width:220px}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:calc(100% - 220px)}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials{margin-right:-5px;margin-left:-5px}.lp-user-profile .wrapper-profile-header .lp-user-profile-socials a{width:36px;height:36px;margin:0 5px;line-height:36px}}@media(max-width:500px){.lp-user-profile .wrapper-profile-header .lp-profile-left{float:none;margin:0 auto}.lp-user-profile .wrapper-profile-header .lp-profile-right{width:100%;padding-top:30px;text-align:center}}.lp-user-profile .wrapper-profile-header::before{right:100%;left:auto}.lp-user-profile .wrapper-profile-header::after{left:100%;right:auto}.lp-user-profile .lp-profile-content-area{position:relative;padding-top:50px;padding-bottom:50px;display:flex;align-items:center}@media(max-width:650px){.lp-user-profile .lp-profile-content-area{flex-direction:column}.lp-user-profile .lp-profile-content-area .lp-profile-right{text-align:center;width:100%;padding:50px 15px 0}}.lp-user-profile .lp-profile-left{min-width:270px;max-width:270px;padding:5px;border:2px solid #eaeaea;border-radius:3px}.lp-user-profile .lp-profile-right{padding-right:15px;padding-left:35px}.lp-user-profile .lp-profile-username{padding-bottom:10px;font-size:18px;font-weight:500;text-transform:capitalize}.lp-user-profile .lp-profile-username::before,.lp-user-profile .lp-profile-username::after{content:"";width:30px;height:1px;background-color:white;display:inline-block;vertical-align:middle;margin:0}.lp-user-profile .lp-profile-username::before{margin-right:5px}.lp-user-profile .lp-profile-username::after{margin-left:5px}.lp-user-profile .lp-profile-user-bio{font-size:16px;font-weight:300;line-height:26px}.lp-user-profile #profile-sidebar{float:left;width:270px;margin-top:0;border:1px solid rgba(0,0,0,0.1);border-top:0;background:#fff;margin-top:58px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%}.lp-user-profile #profile-sidebar .lp-user-profile-avatar{max-width:150px}}.lp-user-profile #profile-nav .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{position:relative;margin:0;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li a{display:block;padding:0 20px;color:#333;font-size:16px;font-weight:500;line-height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{padding:0 20px 0 52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a>i{display:inline-block;position:absolute;left:24px;width:28px;color:var(--lp-primary-color);font-size:12px;line-height:53px;text-align:left}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{float:right;margin-right:4px;color:#999;font-family:"Font Awesome 5 Free";font-size:10px;font-weight:900;content:"\f054"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid #f9f9f9}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li ul li:hover>a i{color:var(--lp-primary-color);background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover{background:var(--lp-primary-color)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:hover>a::after{content:"\f053"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-left:52px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist>a::before{position:absolute;left:25px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f004"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.wishlist:hover a::before{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.logout>a::after{display:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>a{box-sizing:border-box;height:50px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;left:100%;min-width:150px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>a::after,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a i,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>a::after{color:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul,.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul{position:relative;left:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active{background:#fff}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a{color:#ffb606}.lp-user-profile #profile-nav .lp-profile-nav-tabs li.active>ul .active>a i{color:#ffb606}@media(max-width:990px){.lp-user-profile #profile-nav{overflow-x:scroll;border-top:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs{width:max-content}.lp-user-profile #profile-nav .lp-profile-nav-tabs::after{display:table;clear:both;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{float:left;border:0;border-right:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{height:auto;padding:0 20px 0 45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-left:10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.has-child a::after{content:"\f077"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a{padding-left:45px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active a::after{content:"\f078"}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(-20%)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:""}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li{float:left;border-right:1px solid rgba(204,204,204,0.3)}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-right:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:hover ul{display:none !important}.lp-user-profile #profile-nav .lp-profile-nav-tabs li:not(.has-child)>a::after{display:none}}@media(max-width:560px){.lp-user-profile #profile-nav .lp-profile-nav-tabs>li{max-width:80px}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a{font-size:0}.lp-user-profile #profile-nav .lp-profile-nav-tabs>li>a::after{margin-left:0}}.lp-user-profile .lp-profile-content{float:right;width:calc(100% - 300px);margin-bottom:60px;padding-top:58px}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .learn-press-tabs__nav{display:block;width:100%;border:0}.lp-user-profile .lp-profile-content .learn-press-tabs__nav::after{display:table;clear:both;content:""}.lp-user-profile .lp-profile-content .learn-press-tabs__tab{float:left;border-right:0}.lp-user-profile .lp-profile-content .learn-press-tabs__tab label{padding-right:25px;padding-left:25px}.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content .lp-button{display:block;margin:0 auto 52px auto;padding:13px 34px;border-color:var(--lp-secondary-color);font-size:14px;font-weight:500;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.lp-user-profile .lp-profile-content .lp-button:hover{border-color:var(--lp-primary-color)}.lp-user-profile ul.learn-press-courses .course{margin:0 0 40px 0}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-right:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile #dashboard-general-statistic{margin-bottom:55px;padding-bottom:20px;border-bottom:1px solid #ddd}.lp-user-profile .dashboard-general-statistic__row{display:flex;margin:0 -15px;justify-content:center;flex-wrap:wrap}.lp-user-profile .dashboard-general-statistic__row .statistic-box{min-width:200px;max-width:270px;margin:0 15px 40px 15px;padding:15px 20px;border:1px solid #ccc;border-radius:4px;background:#f9fafc;text-align:center}@media(max-width:990px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:45%}}@media(max-width:767px){.lp-user-profile .dashboard-general-statistic__row .statistic-box{width:100%;margin:0 15px 15px}}.lp-user-profile .dashboard-general-statistic__row .statistic-box:hover{background:#eaeaea}.lp-user-profile .dashboard-general-statistic__row[data-col="2"] .statistic-box{width:50%}.lp-user-profile .dashboard-general-statistic__row[data-col="4"] .statistic-box{width:25%}.lp-user-profile .dashboard-general-statistic__row[data-col="5"] .statistic-box{width:20%}.lp-user-profile .statistic-box .statistic-box__text{margin:0 0 7px 0;padding:0;color:#666;font-size:18px;font-weight:400;line-height:1}.lp-user-profile .statistic-box .statistic-box__number{color:#333;font-size:18px;font-weight:500;line-height:1}.lp-user-profile .profile-courses>h3{margin-top:0;margin-bottom:36px;color:#333;font-size:30px;font-weight:600;line-height:1;text-transform:capitalize}.lp-profile-content table.lp-list-table{border-spacing:0;border-top:1px solid #ccc;border-left:1px solid #ccc;margin-bottom:40px}.lp-profile-content table.lp-list-table tr th,.lp-profile-content table.lp-list-table tr td{border-right:1px solid #ccc;border-bottom:1px solid #ccc;text-align:center}.lp-profile-content table.lp-list-table tr td a{color:var(--wp--preset--color--foreground);font-weight:400}.lp-profile-content table.lp-list-table tr td a:hover{color:var(--lp-primary-color)}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:30px;line-height:1.5;font-weight:500;margin-bottom:15px;font-family:var(--wp--preset--font-family--system-font)}.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 10px 24px 10px}.profile-basic-information .form-field>label,form[name=profile-change-password] .form-field>label{margin:0 0 12px 0;color:#333;font-size:16px;font-weight:500;font-style:italic}.profile-basic-information .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input input{height:43px;padding:8px 20px;font-weight:400}.profile-basic-information .form-field .form-field-input input[type=password],form[name=profile-change-password] .form-field .form-field-input input[type=password]{padding:8px 20px}.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input textarea{padding:9px 20px 16px 20px;font-weight:300;line-height:24px}.profile-basic-information .form-field .form-field-input input,.profile-basic-information .form-field .form-field-input textarea,form[name=profile-change-password] .form-field .form-field-input input,form[name=profile-change-password] .form-field .form-field-input textarea{border:1px solid #ccc;color:#999;font-size:14px;font-style:italic}.profile-basic-information .form-field .form-field-input input:focus,.profile-basic-information .form-field .form-field-input textarea:focus,form[name=profile-change-password] .form-field .form-field-input input:focus,form[name=profile-change-password] .form-field .form-field-input textarea:focus{border-color:var(--lp-primary-color);outline:0;color:#222}.profile-basic-information .form-field .form-field-input ::placeholder,form[name=profile-change-password] .form-field .form-field-input ::placeholder{opacity:1;color:#999}.profile-basic-information .form-field .form-field-input :-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input :-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input ::-ms-input-placeholder,form[name=profile-change-password] .form-field .form-field-input ::-ms-input-placeholder{color:#999}.profile-basic-information .form-field .form-field-input .description,form[name=profile-change-password] .form-field .form-field-input .description{margin-top:15px}@media(max-width:767px){.profile-basic-information .form-field,form[name=profile-change-password] .form-field{margin:0 0 24px 0}}.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:left;width:calc(50% - 20px);margin-right:10px}@media(max-width:767px){.profile-basic-information .form-field__50,form[name=profile-change-password] .form-field__50{float:unset;width:100%;margin:0 0 24px 0}}.profile-basic-information .form-field__clear,form[name=profile-change-password] .form-field__clear{clear:both}.profile-basic-information button,form[name=profile-change-password] button{padding:16px 24px;border:0;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-size:16px;font-weight:400;line-height:1}.profile-basic-information button:hover,form[name=profile-change-password] button:hover{opacity:.5;background:var(--lp-primary-color)}.profile-basic-information p,form[name=profile-change-password] p{margin:0}#learn-press-profile-basic-information .form-fields::after{display:block;clear:both;content:""}@media(max-width:767px){#learn-press-profile-basic-information .form-fields{margin:0}}#learn-press-profile-basic-information button[type=submit]{padding:0 15px;height:40px;line-height:40px;border:0;display:inline-flex;align-items:center;justify-content:center;background-color:var(--lp-primary-color);color:white;font-size:16px;font-weight:400;-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#learn-press-profile-basic-information button[type=submit]:hover{opacity:.5;background-color:var(--lp-primary-color)}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;color:#999;font-size:.8em;font-style:italic}div.order-recover{display:flex}div.order-recover>.button-recover-order{margin:0;margin-left:20px;flex:0 0 auto}div.order-recover>.button-recover-order.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}div.order-recover input[type=text]{width:100%;height:43px;margin-right:10px;padding:0 22px;border:1px solid #ccc;border-radius:3px;background-color:#fff;font-size:14px;font-weight:300;font-style:italic;line-height:43px;flex:1 1 auto}.learn-press-profile-course__progress .lp_profile_course_progress{border:1px solid #eee;border-top:0;overflow-x:auto}.learn-press-profile-course__progress .lp_profile_course_progress__item{display:grid;align-items:center;padding:15px;border-top:1px solid #eee;grid-template-columns:90px 1fr 80px 190px 140px;column-gap:20px}.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:60px;height:auto}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item div img{max-width:100%}}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__item{display:block}}.learn-press-profile-course__progress .lp_profile_course_progress__header{background-color:#eee}@media(max-width:575px){.learn-press-profile-course__progress .lp_profile_course_progress__header{display:flex;overflow-x:auto;white-space:nowrap;justify-content:flex-end}}.lp_profile_course_progress__nav button.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.entry-content ul.learn-press-profile-course__tab__inner{padding:0}.content ul.learn-press-courses{margin-left:-15px;margin-right:-15px}.content ul.learn-press-courses[data-layout=list]{margin:0}.learn-press-profile-course__tab__inner{display:flex;margin:40px 0 0 0 !important;padding:0 !important;background:#eee;list-style:none !important}.learn-press-profile-course__tab__inner>li{list-style:none;margin:0 !important}.learn-press-profile-course__tab__inner>li:hover{cursor:pointer}.learn-press-profile-course__tab__inner a{display:inline-block;padding:15px 30px;font-weight:600;position:relative}.learn-press-profile-course__tab__inner a.active{color:var(--lp-primary-color);background:#fff}.learn-press-profile-course__tab__inner a.active::before{content:"";height:4px;width:100%;background-color:var(--lp-primary-color);position:absolute;top:0;left:0;right:auto}.learn-press-course-tab-filters .learn-press-filters{margin-top:20px;margin-left:0;padding:0;list-style:none}.learn-press-course-tab-filters .learn-press-filters a.active{color:var(--lp-primary-color)}.lp-profile-content ul{list-style:none !important;padding:0 !important}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed #ccc;border-radius:3px;background-color:#fafafa;font-size:14px;font-weight:300;font-style:italic;line-height:43px;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-left:15px;margin-right:0}#primary .learn-press-courses[data-size="3"] .course{width:50%}body.learnpress .learn-press-tabs .learn-press-tabs__tab,body.learnpress .attachment-recent-works-thumbnail{border-radius:0}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panels .course-tab-panel{padding-top:30px}.course-tab-panel{display:none}.course-tab-panel.active{display:block}.course-tab-panel .course-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125rem;color:#333;font-size:18px;font-weight:500}.course-tab-panel .course-description p{line-height:inherit}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;margin-bottom:40px}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:0;margin-bottom:30px}}.course-tab-panel .lp-course-author img{width:50px;height:50px;margin-bottom:20px;border-radius:50%;object-fit:cover;object-position:center}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:18px}.course-tab-panel .lp-course-author .author-title a{color:#333;box-shadow:none;font-size:18px;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-size:16px;font-weight:300;line-height:26px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:14px;line-height:33px;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:"\f0d5"}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:40px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:18px;font-weight:600}.course-summary div.lp-list-co-instructor__bio__description{font-size:1rem}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .price{vertical-align:middle}.course-summary .course-price .origin-price{margin-right:10px;font-size:18px;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:24px}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2rem;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color);font-size:16px}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-size:1rem;font-style:italic;line-height:24px}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;right:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:"‘‘";transform:rotate(180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:12px;line-height:1}.edit-content{margin-left:5px}ul.learn-press-nav-tabs{display:flex;margin:0;padding:0;border:1px solid rgba(204,204,204,0.3);border-bottom:0;background:#f1f2f8;list-style:none}ul.learn-press-nav-tabs .course-nav{float:left;position:relative;margin:0;border-right:1px solid rgba(204,204,204,0.3);border-bottom:1px solid rgba(204,204,204,0.3);list-style:none}ul.learn-press-nav-tabs .course-nav:first-child.active::after{position:absolute;top:-1px;left:-1px;width:1px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav:last-child{border-right:0}ul.learn-press-nav-tabs .course-nav:last-child.active::after{position:absolute;top:-1px;right:-2px;width:2px;height:100%;background:#fff;content:""}ul.learn-press-nav-tabs .course-nav.active{border-bottom:0}ul.learn-press-nav-tabs .course-nav.active::before{position:absolute;top:-1px;left:0;width:100%;height:4px;background:var(--lp-primary-color);content:""}ul.learn-press-nav-tabs .course-nav.active label{color:var(--lp-primary-color);background-color:white}ul.learn-press-nav-tabs .course-nav a{display:inline-block;padding:10px 20px;border-bottom:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs .course-nav a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.learn-press-nav-tabs[data-tabs] .course-nav{flex:1}ul.learn-press-nav-tabs[data-tabs] .course-nav a{width:100%;text-align:center}ul.learn-press-nav-tabs::after{display:block;clear:both;content:""}@media(max-width:767px){ul.learn-press-nav-tabs{display:grid;grid-template-columns:repeat(2,1fr);max-height:none}}.course-item-popup #tab-curriculum{display:block}.course-curriculum ul.curriculum-sections{position:relative;z-index:499;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-right:15px;margin-left:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{display:inline-flex;margin-top:10px;margin-right:auto;margin-left:auto;padding:10px 20px;border:1px solid #ccc;border-radius:4px;outline:0;color:#222;background:#f7f7f7;box-shadow:none;font-weight:500;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .section-item__loadmore.loading button::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.course-curriculum .section-header{display:table;width:100%;padding:0 0 26px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin:0;margin-top:10px;font-size:14px;line-height:21px;color:#999;font-style:italic}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:14px;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0 0 15px 0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;padding:10px 0;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;margin-left:14px;border-radius:3px;color:#fff;font-size:14px;line-height:23px;text-align:center;vertical-align:middle;padding:0 8px}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:"Font Awesome 5 Free";font-size:14px;font-weight:900;vertical-align:middle;text-transform:lowercase;content:"\f00c"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{color:#fff;padding:0 8px;background:#00adff;display:inline-flex;align-items:center;justify-content:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:baseline;content:attr(data-preview)}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 15px 0 30px;background:rgba(241,242,248,0.4);font-size:14px;transition:padding-left linear .15s}@media(max-width:767px){.course-curriculum .course-item{padding:0 0 0 15px}}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-size:16px;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:table;padding-right:15px;padding-left:0;border-bottom:0;outline:0;box-shadow:none;line-height:1.5;color:#777;text-decoration:none}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{display:table-cell;display:table-cell;left:0;width:20px;padding:15px 0;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:400;vertical-align:middle;transition:left linear .15s}.course-curriculum .course-item .item-icon,.course-curriculum .course-item .item-name{display:table-cell;padding:17px 16px;color:#333;font-size:16px;font-weight:600;vertical-align:middle}.course-curriculum .course-item .item-icon::before{font-size:18px}.course-curriculum .course-item .item-icon.icon-lock{float:right;margin-top:15px}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:"\f059"}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:"\f15b"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:"\f03d"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:"\f028"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:"\f023"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:"\f00d"}.course-curriculum .course-item::before{position:absolute;top:50%;left:0;width:3px;height:0;background:#00adff;content:"";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{padding-left:10px;background:#f9f9f9}.course-curriculum .course-item.current a::before{left:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{padding:0;color:#666;font-size:1.4rem;letter-spacing:0;text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{display:flex;width:100%;margin-top:20px;margin-bottom:20px;padding:10px 0;border:0;outline:0;color:#fff;background:#333;box-shadow:none;justify-content:center;align-items:center;cursor:pointer;font-size:1rem;font-family:sans-serif}.course-curriculum .curriculum-more__button.loading::before{display:inline-block;margin-right:5px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}body.course-item-popupx{overflow:hidden;_opacity:0}body.course-item-popupx #learn-press-course-curriculum{overflow:auto;position:fixed;z-index:9999;top:32px;bottom:0;left:0;width:400px;border-right:1px solid #ddd;background:#fff}body.course-item-popupx #learn-press-course-curriculum .section-header{padding:0 15px}body.course-item-popupx #learn-press-course-curriculum .section-header .section-desc{margin:-10px 0 5px}body.course-item-popupx #learn-press-course-curriculum .course-item{padding-right:15px;padding-left:15px}body.course-item-popupx #learn-press-course-curriculum .course-item a::before{left:15px}body.course-item-popupx #learn-press-content-item{overflow:hidden;position:fixed;z-index:9999;top:32px;right:0;bottom:0;left:400px;background:#fff}body.course-item-popupx #learn-press-content-item .content-item-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #learn-press-content-item .course-item-title{font-size:1.4rem}body.course-item-popupx #learn-press-content-item .content-question-summary .review-heading{text-align:center}body.course-item-popupx #learn-press-content-item .content-question-summary .question-title{margin-bottom:10px;font-size:1.2rem}body.course-item-popupx #content-item-nav{position:fixed;z-index:99999;right:0;bottom:0;left:400px;height:60px;border-top:1px solid #ddd;background:#f5f5f5}body.course-item-popupx #content-item-nav .content-item-nav-wrap{max-width:900px;margin:10px auto}body.course-item-popupx #content-item-nav button{height:40px;padding:0 20px;line-height:40px}body.course-item-popupx .comment-form-textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.course-item-popupx.wpadminbar #learn-press-course-curriculum,body.course-item-popupx.wpadminbar #learn-press-content-item{top:92px}body.course-item-popupx.wpadminbar .content-item-description{margin-bottom:20px}body.course-item-popupx .content-item-summary{margin-bottom:50px}body.course-item-popupx .content-item-summary>h3{margin-bottom:20px}body.course-item-popupx .content-item-summary.content-item-video .entry-video{position:absolute;top:0;left:0;width:100%;background:#000;line-height:1}body.course-item-popupx .content-item-summary.content-item-video .entry-video iframe{width:100%;max-width:900px;margin-bottom:0;vertical-align:top}body.course-item-popupx .learn-press-content-protected-message{margin-bottom:50px;padding:20px;background:#ffe0e0}body.course-item-popupx.content-only #learn-press-content-item{z-index:9999999;top:0;bottom:0;left:0}body.course-item-popupx.content-only #learn-press-content-item .content-item-scrollable{bottom:0}body #ifr-course-item{position:absolute;z-index:999999;top:0;left:0;width:100%;height:100%;background:#fff}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:right}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:"Font Awesome 5 Free"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:"\f017"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:"\f15c"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:"\f29c"}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.course-remaining-time .label-enrolled{font-size:inherit}.learn-press-form.completed button::before{margin-right:10px;font-family:"Font Awesome 5 Free";font-size:18px;content:"\f00c"}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.viewing-course-item .content-item-wrap{margin-top:50px}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-left .meta-item{margin-right:10px}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta .course-meta__pull-right .meta-item{margin-left:10px}.course-meta.course-meta-primary .meta-item{flex:1}.course-meta.two-columns .course-meta{flex:1}.course-extra-box{margin-bottom:3px;border:1px solid rgba(204,204,204,0.3);border-radius:5px}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 45px 0 38px;background:rgba(181,187,211,0.15);font-size:1.1rem;font-weight:600;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-left:15px}}.course-extra-box__title::after{position:absolute;top:0;right:20px;color:#666;font-family:"Font Awesome 5 Free";line-height:var(--extra-height);content:"\f0d7"}.course-extra-box__content{display:none}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:10px 38px;border-bottom:1px solid rgba(204,204,204,0.3);color:#666;font-size:16px;font-weight:300}@media(max-width:767px){.course-extra-box__content li{padding-left:30px;padding-right:30px}}.course-extra-box__content li::before{margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00c"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:"\f0d8"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:60px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:60px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs{padding-top:64px}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:20px 45px 20px 25px;font-size:1.1rem;font-weight:500;line-height:1.7;cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:50%;right:28px;color:#6c6c6c;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900;content:"\f078";transform:translateY(-50%)}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover{background:rgba(241,242,248,0.4)}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:0 25px 25px 25px;color:#666;font-size:1rem;font-weight:300;line-height:26px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box{background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:"\f077"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@media screen and (max-width:1300px){body.course-item-popup #learn-press-course-curriculum{width:300px}body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}body.course-item-popup #content-item-nav{left:300px}body.course-item-popup .section-desc{display:none}}@media screen and (max-width:1200px){body.course-item-popupx #learn-press-course-curriculum{width:300px}body.course-item-popupx #content-item-nav{left:300px}body.course-item-popupx #learn-press-content-item .content-item-nav-wrap,body.course-item-popupx #learn-press-content-item .content-item-wrap{width:90%}}@media screen and (max-width:768px){body.course-item-popup .course-curriculum{width:200px}body.course-item-popup #content-item-nav{left:200px}body.course-item-popup #learn-press-content-item .content-item-nav-wrap,body.course-item-popup #learn-press-content-item .content-item-wrap{width:90%}body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}.learn-press-course-results-progress{margin-right:0}.learn-press-course-results-progress .items-progress,.learn-press-course-results-progress .course-progress{float:none;width:100%;margin-right:0;margin-bottom:20px}}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:""}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:15px;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:20px}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:14px}.quiz-progress .progress-items .progress-item i{display:none;float:left;width:60px;height:60px;color:#fff;background:#00adff;font-size:30px;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:""}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;color:#777;background:#f5f5f5;font-size:20px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell;font-size:smaller}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;left:0;width:3px;background:#ddd;content:"";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:35px;min-width:35px;height:35px;margin:0 10px 0 3px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{margin-top:-10px;position:absolute;top:18px;left:9px;box-sizing:content-box;opacity:0;color:#3db748;font-family:"Font Awesome 5 Free";font-weight:900;font-size:16px;content:"\f00c"}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answer-correct{background:#e1f5ff}.answer-options .answer-option.answer-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answer-correct input[type=checkbox]:checked ~ .option-title::before{background:#e1f5ff}.answer-options .answer-option.answered-correct input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-correct input[type=checkbox]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option.answered-wrong input[type=radio]::before,.answer-options .answer-option.answered-wrong input[type=radio]::after,.answer-options .answer-option.answered-wrong input[type=checkbox]::before,.answer-options .answer-option.answered-wrong input[type=checkbox]::after{border-color:red}.answer-options .answer-option.answered-wrong input[type=radio]:checked ~ .option-title::before,.answer-options .answer-option.answered-wrong input[type=checkbox]:checked ~ .option-title::before{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-left:5px;content:"(+" attr(data-counter) ")"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:"\f00c"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0 !important;color:#fff;background:#f02425;font-size:16px;line-height:22px;font-weight:400;display:flex;align-items:center;justify-content:center;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.quiz-result .result-message::after{margin-left:10px;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f00d"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid #999;color:#333;font-size:28px;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:16px;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:14px}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:left;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed #ccc}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:16px;font-weight:400;line-height:35px}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-right:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-size:16px;font-weight:500;line-height:35px;text-align:right}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:"\f017"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:"\f005"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:"\f059"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:"\f00c"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:"\f00d"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:"\f2f5"}.quiz-status{position:sticky;z-index:99;top:0;right:0;left:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;height:60px;margin:0 auto;padding:5px 10px 5px 30px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}@media(max-width:480px){.quiz-status>div{display:block;height:auto;text-align:center;padding:15px}.quiz-status>div .questions-index{margin-bottom:10px}}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:16px;font-weight:400;line-height:26px}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{position:relative;min-width:120px;margin-right:5px;padding:12px 29px;color:#333;background:#fff;font-size:14px;font-weight:400;line-height:1;text-align:center}.quiz-status .countdown .fas{position:absolute;top:50%;left:10px;color:#333;font-size:14px;transform:translateY(-50%)}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:"";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(-90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .submit-quiz button{margin:0 0 0 10px;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:12px;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-left:3px;font-family:"Font Awesome 5 Free";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;left:50%;width:10px;height:4px;margin-left:-5px;border-radius:2px;background:#aaa;content:""}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-right:10px;padding-left:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 40px 0 0;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 20px 0 0}}.quiz-intro-item::before{position:relative;top:-2px;margin-right:10px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:"\f012"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:"\f12e"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:"\f017"}.quiz-intro-item__title{margin:0;padding:0 8px 0 0;color:#333;font-size:16px;font-weight:300;line-height:1.7}.quiz-intro-item__content{color:#222;font-size:16px;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:""}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(45deg)}.circle-bar .before{border-bottom-color:transparent;border-left-color:transparent;transform:rotate(45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-right-color:transparent;transform:rotate(45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-left-color:inherit;transform:rotate(45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:right}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;left:50%;width:200px;height:200px;margin-left:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:""}.quiz-result .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.question .answer-option{padding:0;_border:2px solid #d9e0f1;background:#fff}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;margin:-19px 0 0 10px;border-color:#d9e0f1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:14px 10px 11px 65px;border:1px solid #ccc;color:#666;background:#fff;font-size:16px;font-weight:300;line-height:26px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title::after{display:inline-block;visibility:hidden !important;content:"."}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;color:#333;font-size:18px;font-weight:500}.question .question-title .edit-link{float:right;font-size:14px;font-weight:normal}.question .question-content{margin-bottom:30px;color:#666;font-size:16px;font-weight:300;line-height:26px}.question .question-content img{width:100%;max-width:100%}.question .question-response{margin-bottom:10px;font-size:14px}.question .question-response .label{display:inline-block;margin:0 5px 0 0;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 5px 0 0}.question .btn-show-hint{position:relative;margin:0 0 0 10px;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none}.question .btn-show-hint::before{font-family:"Font Awesome 5 Free";font-size:18px;content:"\f059"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;left:0;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed #ddd;text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-left:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.learn-press-message.fixed{position:fixed;top:32px;left:0;right:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-archive-courses ul{list-style-type:revert;padding:0 0 23px 1em}.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}@media(max-width:768px){.lp-archive-courses ul.learn-press-breadcrumb,.lp-archive-courses ul.course-nav-tabs{padding-left:15px;padding-right:15px}}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px}.lp-archive-courses ol ul{padding:2px 0 2px 35px}.lp-archive-courses ol ol{padding:2px 0 2px 20px}.lp-archive-courses thead th,.lp-archive-courses tr th{padding:9px 24px}.lp-archive-courses tr td{border-top:1px solid #eee;padding:6px 24px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul{padding:0 !important;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size="3"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-left:15px;padding-right:15px}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.learn-press-tip{display:none;margin:0 5px;color:#444;font-size:13px;font-style:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:"Font Awesome 5 Free";content:"\f059"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-left:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:12px;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:12px}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;right:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:16px;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:"Font Awesome 5 Free";content:"\f00d"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;left:50%;width:0;height:0;margin-left:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:""}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;left:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;right:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:30px;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}a{text-decoration:none}.lp-content-area{width:100%;max-width:1170px;margin:0 auto}@media(max-width:1024px){.lp-content-area{padding-right:15px;padding-left:15px}}.lp-content-area::after,.lp-content-area::before{display:table;clear:both;content:""}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:"";position:absolute;top:0;bottom:0;left:15px;right:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:#fff}.lp-archive-courses form[name=search-course]{position:relative;margin-bottom:20px}.lp-archive-courses form[name=search-course] .search-course-input{width:100%;padding:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-archive-courses form[name=search-course] .search-course-button{position:absolute;top:1px;right:1px;bottom:1px;height:auto;padding:15px;line-height:1px}.lp-archive-courses .learn-press-courses-header{float:left;padding-top:4px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:30px;font-weight:600}@media(max-width:767px){.lp-archive-courses .learn-press-courses-header{margin-bottom:20px}}.lp-archive-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.lp-archive-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.lp-archive-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-item:hover .course-wishlist{opacity:1}.lp-archive-courses .course-item .course-wishlist.filled{opacity:1}.lp-archive-courses .course-item .course-instructor{float:left;margin-bottom:16px;font-size:14px;font-weight:300;line-height:25px;text-transform:capitalize}.lp-archive-courses .course-item .course-instructor a{color:#059de9}.lp-archive-courses .course-item .course-instructor a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-content{position:relative;border-top:0}.lp-archive-courses .course-content .course-permalink{display:-webkit-box;clear:both;overflow:hidden;position:relative;border:0;color:#fff;text-decoration:none;text-transform:none;-webkit-line-clamp:2;-webkit-box-orient:vertical;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-permalink:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-archive-courses .course-content .course-review{display:none}.lp-archive-courses .course-content .course-categories,.lp-archive-courses .course-content .course-tags{display:block;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-categories{float:left;position:relative;margin-right:10px;margin-bottom:16px}.lp-archive-courses .course-content .course-categories a{display:inline-block;display:none;margin:0 10px;color:#fff;text-decoration:none}.lp-archive-courses .course-content .course-categories a:first-child{display:block;margin-left:0;padding:2px 16px;background:var(--lp-primary-color)}.lp-archive-courses .course-content .course-categories a:hover{color:#333}.lp-archive-courses .course-content .course-categories::after{position:absolute;top:50%;right:-2px;width:1px;height:12px;opacity:.5;background:#999;content:"";transform:translate(0,-50%)}.lp-archive-courses .course-content .course-info{color:#666;font-size:14px;font-weight:300}.lp-archive-courses .course-content .course-info>span{display:block}.lp-archive-courses .course-content .course-info .course-price{float:right}.lp-archive-courses .course-content .course-info .course-price .origin-price,.lp-archive-courses .course-content .course-info .course-price .price{color:#333;font-size:16px;font-weight:600}.lp-archive-courses .course-content .course-info .course-price .origin-price{margin-right:10px;color:#666;font-size:14px;font-weight:300;text-decoration:line-through}.lp-archive-courses .course-content .course-info .course-instructor{float:right}.lp-archive-courses .course-content .course-info::after{display:block;clear:both;content:""}.lp-archive-courses .course-content .course-excerpt{display:-webkit-box;overflow:hidden;margin-bottom:28px;color:#666;font-size:16px;font-weight:300;line-height:26px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.lp-archive-courses .course-content .separator{display:none}.lp-archive-courses .course-wrap-thumbnail{overflow:hidden;position:relative}.lp-archive-courses .course-wrap-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;left:-110px;width:300px;text-align:center;transform:rotate(-45deg)}.lp-archive-courses .course-wrap-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;right:6px;opacity:0;color:#fff;cursor:pointer}.lp-archive-courses .course-wrap-thumbnail .course-wishlist::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f004"}.lp-archive-courses .course-wrap-thumbnail .course-wishlist .course-wishlist__btn{display:none}.lp-archive-courses .course-wrap-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-wrap-thumbnail:hover::before{opacity:1}.lp-archive-courses .course-wrap-thumbnail:hover .course-thumbnail a img{transform:scale(1.05)}.lp-archive-courses .course-wrap-thumbnail:hover .course-wishlist{opacity:1}.lp-archive-courses .course-thumbnail a{display:block;overflow:hidden}.lp-archive-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.lp-archive-courses .course-thumbnail .thumbnail::before{position:absolute;z-index:1;top:0;right:0;bottom:0;left:0;opacity:0;background:rgba(0,0,0,0.5);content:"";transition:all .3s}.lp-archive-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1)}.lp-archive-courses .course-title{margin:0;padding:0;color:#333;font-size:16px;font-weight:600;line-height:24px}.lp-archive-courses .course-title:hover{color:var(--lp-primary-color)}@media(min-width:769px){.lp-archive-courses .course-summary-content .course-info-left{width:calc(100% - 330px)}}.lp-archive-courses .course-summary-content .course-title{margin-bottom:42px;color:#fff;font-size:1.5rem;font-weight:500;line-height:1}.lp-archive-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}@media(max-width:768px){.lp-archive-courses .course-summary-content{width:100%}}.lp-archive-courses .course-detail-info{padding:40px 0 10px 0;color:#fff;background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:"";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{right:100%;left:auto}.lp-archive-courses .course-detail-info::after{left:100%;right:auto}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;height:46px;margin-right:50px;font-size:16px;font-weight:300;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item span{padding-right:4px;padding-left:0}.lp-archive-courses .course-meta__pull-left .meta-item:last-child{margin-right:0}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-right:10px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:"\f017"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:"\f012"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:"\f0c5"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:"\f12e"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:"\f501"}@media(max-width:1024px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-right:30px}}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left .meta-item{margin-right:0}}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:#999;font-size:14px;font-weight:300;line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:#fff;font-size:16px;font-weight:400;text-transform:capitalize}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories::before{margin-right:10px;font-size:36px;content:"\f02e"}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 5px}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column-reverse;justify-content:flex-end;align-items:flex-end}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}@media(max-width:767px){.lp-archive-courses .course-meta__pull-left{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:20px}}.lp-archive-courses .course-meta-primary{margin-bottom:36px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-right:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-right:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-272px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-left:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:#fff;background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f004"}.lp-archive-courses .course-summary-sidebar__inner>div{overflow:hidden;padding:20px;background:#fff}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-size:16px;font-weight:300;line-height:24px}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.learn-press-courses{clear:both;margin:0 -15px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course{width:25%;margin:0 0 60px 0;box-shadow:none;list-style:none}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;padding:24px;border:1px solid rgba(204,204,204,0.3);border-radius:4px;flex-wrap:wrap;justify-content:flex-end}@media(max-width:767px){.learn-press-courses[data-layout=list] .course{padding:15px}}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;justify-content:space-between}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{float:right;width:calc(64.2% - 76px);padding-top:5px}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 40px)}}@media(max-width:1200px){.learn-press-courses[data-layout=list] .course-content{width:calc(64.2% - 25px)}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{width:100%;padding-top:20px}}.learn-press-courses[data-layout=list] .course-content .course-categories a{position:relative;padding:2px 20px 2px 15px;-webkit-clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%);clip-path:polygon(0 0,100% 0,88% 50%,100% 100%,0 100%)}.learn-press-courses[data-layout=list] .course-content .course-permalink{height:25px;margin-bottom:5px;-webkit-line-clamp:1}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 10px 10px 0;padding:3px 5px;border-radius:3px;color:#fff;background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-footer{float:left;margin-right:20px}.learn-press-courses[data-layout=list] .course-content .course-footer .course-students{display:none}.learn-press-courses[data-layout=list] .course-content .course-footer .course-price{float:unset}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-footer{margin-bottom:30px}}.learn-press-courses[data-layout=list] .course-content .course-readmore{float:right;position:relative;right:4px}.learn-press-courses[data-layout=list] .course-content .course-readmore a{padding:9px 24px;border-radius:3px;color:#fff;background:var(--lp-primary-color);font-weight:400;line-height:1;transition:all .3s;display:block}.learn-press-courses[data-layout=list] .course-content .course-readmore a:hover{opacity:.5;background:var(--lp-primary-color)}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content .course-readmore{display:flex;float:unset;clear:both}}.learn-press-courses[data-layout=list] .course-wrap-meta{display:flex;padding-top:12px;padding-bottom:18px;color:#333;font-size:14px;font-weight:400}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:28px;text-transform:capitalize}@media(max-width:1024px){.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:20px}}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item::before{position:relative;top:-1px;margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-level::before{content:"\f012"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-duration::before{content:"\f017"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-lesson::before{content:"\f0c5"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-quiz::before{content:"\f12e"}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item-student::before{content:"\f501"}@media(max-width:815px){.learn-press-courses[data-layout=list] .course-wrap-meta{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:15px}.learn-press-courses[data-layout=list] .course-wrap-meta .meta-item{padding-right:15px}}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-meta{grid-template-columns:repeat(3,1fr)}}.learn-press-courses[data-layout=list] .course-wrap-thumbnail{float:left;width:35.8%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-wrap-thumbnail{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:18px}.learn-press-courses[data-layout=grid] .course{padding:0 15px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course{width:100%}}.learn-press-courses[data-layout=grid] .course-item:hover{box-shadow:0 15px 20px 0 rgba(0,0,0,0.2)}.learn-press-courses[data-layout=grid] .course-item .course-instructor{margin-bottom:7px}.learn-press-courses[data-layout=grid] .course-content{padding:15px 20px 12px 20px;border:1px solid #f0f0f0;border-top:0;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-categories{float:right;position:absolute;z-index:1;top:-34px;right:-1px;margin-right:0}.learn-press-courses[data-layout=grid] .course-content .course-categories::after{display:none}.learn-press-courses[data-layout=grid] .course-content .course-categories a{position:relative;margin:0;padding:2px 12px 2px 22px;-webkit-clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%);clip-path:polygon(0 0,100% 0,100% 100%,0 100%,12px 50%)}.learn-press-courses[data-layout=grid] .course-content .course-permalink{height:48px;margin-bottom:20px}.learn-press-courses[data-layout=grid] .course-content .course-info{display:flex;flex-direction:column;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-wrap-meta,.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-readmore{display:none}.learn-press-courses[data-layout=grid] .course-content .course-footer{padding-top:18px;border-top:1px solid rgba(153,153,153,0.2)}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students{float:left;text-transform:capitalize}.learn-press-courses[data-layout=grid] .course-content .course-footer .course-students::before{position:relative;top:-1px;margin-right:8px;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-weight:900;content:"\f501"}.learn-press-courses[data-layout=grid] .learn-press-message{margin-left:15px;margin-right:15px}.learn-press-courses[data-size="3"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size="3"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-courses-bar{display:flex;float:right;margin-bottom:48px}@media(max-width:767px){.lp-courses-bar{flex-direction:row;width:100%;justify-content:space-between}}.lp-courses-bar .search-courses{position:relative;width:306px;max-width:100%;margin-right:20px;line-height:1;flex:1}.lp-courses-bar .search-courses input[type=text]{width:100%;height:44px;padding:6px 32px 6px 18px;border:1px solid #ccc;border-radius:5px;background:#fff;font-size:14px;font-style:italic;line-height:1}.lp-courses-bar .search-courses input[type=text]:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{position:absolute;top:50%;right:12px;width:30px;height:30px;padding:0;border:0;color:#333;background:transparent;font-size:16px;line-height:1;transform:translate(0,-50%)}.lp-courses-bar .search-courses button:focus{border:0;outline:0}.lp-courses-bar .search-courses button.loading>i::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .search-courses ::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses :-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses ::placeholder{color:#999}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}}.lp-courses-bar .switch-layout{display:flex;height:44px;line-height:1;text-align:right;flex:0 0 40px;align-items:center;justify-content:center}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{display:block;width:40px;height:40px;margin:0;padding:0;border-radius:5px;font-size:16px;line-height:40px;text-align:center;cursor:pointer}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:8px 6px;color:#333;font-family:"Font Awesome 5 Free";font-weight:900;line-height:1}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:"\f00a"}.lp-courses-bar .switch-layout .switch-btn.list{margin-left:3px}.lp-courses-bar .switch-layout .switch-btn.list::before{content:"\f03a"}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background:#f5f5f5}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background:#f5f5f5}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background:#f5f5f5}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background:#f5f5f5}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background:#f5f5f5}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background:#f5f5f5}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background:#f5f5f5}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background:#f5f5f5}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background:#f5f5f5}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background:#f5f5f5}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repuchase_select{padding:20px;background:#f7f7f7}.lp_allow_repuchase_select>ul{padding:0;list-style:none}.lp_allow_repuchase_select>a{display:inline-block;margin-top:10px;color:#fff;background-color:#222}.comment-respond .comment-reply-title{font-size:30px;font-weight:500;line-height:1.2;margin-bottom:15px}.comment-respond .comment-form{margin:0 -15px}.comment-respond .comment-form>p label{display:block;margin-bottom:10px;font-size:16px;font-weight:500}.comment-respond .comment-form>p.comment-notes,.comment-respond .comment-form>p.logged-in-as{color:#666;font-size:16px}.comment-respond .comment-form>p.logged-in-as a{color:#666;text-decoration:underline}.comment-respond .comment-form>p.logged-in-as a:hover,.comment-respond .comment-form>p.logged-in-as a:focus{color:var(--lp-primary-color)}.comment-respond .comment-form>p.comment-form-cookies-consent{clear:both}.comment-respond .comment-form>p.comment-form-cookies-consent input{padding:0;margin-right:8px}.comment-respond .comment-form>p.comment-form-cookies-consent label{display:inline}.comment-respond .comment-form>p,.comment-respond .comment-form>div{padding:0 15px;margin-bottom:15px}.comment-respond .comment-form input[type=text],.comment-respond .comment-form input[type=email],.comment-respond .comment-form input[type=url]{height:40px;line-height:normal;width:100% !important;margin-bottom:15px}.comment-respond .comment-form input[type=submit]{background-color:var(--lp-primary-color);border:0;min-height:40px;line-height:40px;padding:0 15px;font-size:16px;text-transform:capitalize;font-weight:500;margin-top:15px;cursor:pointer;color:white}.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:33.33%;float:left}@media(max-width:575px){.comment-respond .comment-form .comment-form-author,.comment-respond .comment-form .comment-form-email,.comment-respond .comment-form .comment-form-url{width:100%;float:unset}}.comment-respond .comment-form textarea,.comment-respond .comment-form input{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;max-width:100%}.comment-respond .comment-form textarea{width:100%;display:block;padding:20px 15px;resize:none}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course:hover{opacity:.5;background:var(--lp-primary-color)}.course-summary-sidebar .lp-course-buttons button.button-enroll-course.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice{margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.course-summary-sidebar .lp-course-buttons button ~ .lp-enroll-notice.error{border-color:#d85554}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1rem;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:16px;font-weight:300;line-height:16px;text-align:right}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:#666;font-size:18px;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:#333;font-size:1.8rem;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 20px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{display:flex;color:#666;font-size:16px;font-weight:300;justify-content:space-between}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-size:1rem;font-weight:300;line-height:24px}.course-sidebar-preview>*:last-child{margin-bottom:0}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none}.learnpress-page:hover{text-decoration:none}#popup-course{display:flex;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;background:#fff}#popup-course .back-course{padding-left:30px;padding-right:30px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-left:15px;padding-right:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course #popup-header{display:flex;position:fixed;z-index:100;right:0;left:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}#popup-course #popup-header .course-title{margin:0;padding:0;line-height:70px;letter-spacing:unset}#popup-course #popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-size:16px;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-header .course-title a:hover{color:var(--lp-primary-color)}@media(max-width:768px){#popup-course #popup-header .course-title{flex:1}}#popup-course #popup-header .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px}@media(max-width:768px){#popup-course #popup-header .items-progress{flex:1}}@media(max-width:767px){#popup-course #popup-header .items-progress{padding-bottom:20px;justify-content:end}}#popup-course #popup-header .number{padding-right:10px;color:#fff;font-size:14px;font-weight:300}#popup-course #popup-header .lp-button{display:flex;position:relative;height:40px;margin:9px;border:0;color:#fff;background:var(--lp-primary-color);font-size:14px;font-weight:400;justify-content:center;line-height:40px;align-items:center}#popup-course #popup-header .lp-button:hover{opacity:.8}#popup-course #popup-header .lp-button-back{float:right;margin:9px 10px}#popup-course #popup-header .lp-button-back button::before,#popup-course #popup-header .lp-button-back button::after{content:""}#popup-course #popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-course #popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-left:15px;padding-right:15px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column}}#popup-course #popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-course #popup-sidebar .search-course{display:flex;position:relative;height:70px;background:#f9fafc}#popup-course #popup-sidebar .search-course input[name=s]{display:block;width:100%;margin:6px 0;padding-left:20px;border:0;color:#999;background:transparent;box-shadow:none;font-size:14px;line-height:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-course #popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-ms-input-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:-moz-placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]::placeholder{font-style:italic}#popup-course #popup-sidebar .search-course input[name=s]:focus{outline:0;color:#222}#popup-course #popup-sidebar .search-course button{position:absolute;top:0;right:10px;width:16px;height:70px;margin:0 10px;padding:0;border:0;background:transparent;line-height:1px}#popup-course #popup-sidebar .search-course button::before{color:#666;font-family:"Font Awesome 5 Free";font-size:16px;font-weight:900;content:"\f002"}#popup-course #popup-sidebar .search-course button.clear{display:none}#popup-course #popup-sidebar .search-course button.clear::before{content:"\f00d"}#popup-course #popup-sidebar .search-course .search-results{display:none;overflow:auto;position:fixed;z-index:99999999;top:92px;bottom:0;left:0;width:400px;margin:0;border-top-color:transparent;border-right:1px solid #d9e0f1;background:#fbfcff}#popup-course #popup-sidebar .search-course .search-results .search-results__item{border-bottom:1px solid #d9e0f1;background:#fff}#popup-course #popup-sidebar .search-course .search-results .search-results__item img{position:absolute;left:10px;width:40px;height:40px}#popup-course #popup-sidebar .search-course .search-results .search-results__item a{display:-webkit-box;overflow:hidden;position:relative;box-sizing:content-box;height:40px;padding:10px 10px 10px 60px;color:#777;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical}#popup-course #popup-sidebar .search-course .search-results .search-results__item:hover{background:#d9e0f1}#popup-course #popup-sidebar .search-course .search-results .search-results__item-title{overflow:hidden;margin:0 0 -2px 0;padding:0;font-size:16px;font-weight:normal}#popup-course #popup-sidebar .search-course .search-results .search-results__item-author{font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price{position:absolute;right:10px;bottom:10px;font-size:12px}#popup-course #popup-sidebar .search-course .search-results .course-price .origin-price{font-size:smaller;text-decoration:line-through}#popup-course #popup-sidebar .search-course .search-results .search-results__not-found{padding:10px;color:#777}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination{padding:10px;text-align:center}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination a,#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{display:inline-block;margin:0 3px 10px 2px;padding:5px 8px;border:1px solid #d9e0f1;border-radius:4px;color:#777;font-size:14px;line-height:1;cursor:pointer}#popup-course #popup-sidebar .search-course .search-results .search-results__pagination span{color:#999;background:#d9e0f1}#popup-course #popup-sidebar .search-course.searching .search-results{display:block}#popup-course #popup-sidebar .search-course.searching .clear{display:block}#popup-course #popup-sidebar .search-course.searching button{display:none}#popup-course #popup-sidebar .search-course.searching::after{position:absolute;z-index:1;bottom:0;left:50%;width:0;height:0;margin-left:-10px;border:10px solid transparent;border-bottom-color:#fff;content:""}#popup-course #popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar{width:6px}#popup-course #popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-course #popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-course #popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;right:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-course #popup-sidebar .section.section-empty .section-header{margin:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message{margin:0;padding:10px;border-bottom:1px solid #d9e0f1;border-radius:0;color:#999;background:#f5f5f5;font-size:14px}#popup-course #popup-sidebar .section.section-empty .learn-press-message::before,#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{position:absolute;z-index:9999;top:-16px;left:10px;width:0;height:0;border:8px solid transparent;border-bottom-color:#f5f5f5;background:transparent;content:"";-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#popup-course #popup-sidebar .section.section-empty .learn-press-message::after{z-index:9998;top:-20px;left:8px;border-width:10px;border-bottom-color:#d9e0f1}#popup-course #popup-sidebar .section-header{position:sticky;z-index:1000;top:0;height:94px;padding:38px 20px 20px 20px;cursor:pointer;background-color:white}#popup-course #popup-sidebar .section-header .section-title{padding:0 0 4px 0;color:#000;font-size:20px;font-weight:500}#popup-course #popup-sidebar .section-header .section-title .show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d7"}#popup-course #popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-course #popup-sidebar .section-header .section-toggle i{color:#666}#popup-course #popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-course #popup-sidebar .section-content{margin-bottom:0}#popup-course #popup-sidebar .course-item{min-height:50px;margin-bottom:4px;padding:5px 20px;background:#f9fafc;align-items:center}#popup-course #popup-sidebar .course-item>span{display:none}#popup-course #popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-course #popup-sidebar .course-item::after{content:""}#popup-course #popup-sidebar .course-item.current{background:#eaeaea}#popup-course #popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-course #popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-course #popup-sidebar .section-item-link{line-height:1;padding-right:0}#popup-course #popup-sidebar .section-item-link::before{padding:12px 0;vertical-align:unset}#popup-course #popup-sidebar .section-item-link .item-name{width:100%;padding:0 10px 0 17px;font-size:14px;line-height:21px;font-weight:500}#popup-course #popup-sidebar .course-item-meta{padding:0}#popup-course #popup-sidebar .course-item-meta .item-meta{padding:0;color:#999;background:transparent;font-size:12px;line-height:1.5;height:auto}#popup-course #popup-sidebar .course-item-meta .item-meta:first-child{margin-left:0}#popup-course #popup-sidebar .course-item-meta .item-meta::before{font-size:12px;line-height:21px}#popup-course #popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-left:15px;padding-right:15px}#popup-course #popup-content .lp-button{position:relative;margin:0 10px 0 0;padding:12px 29px;border-color:var(--lp-secondary-color);font-size:14px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon{margin-right:5px}#popup-course #popup-content .lp-button.instant-check .instant-check__icon::before{font-family:"Font Awesome 5 Free";content:"\f058"}#popup-course #popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:#eee;white-space:nowrap;text-transform:none}#popup-course #popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 11px;border-radius:3px;color:#333;background:#eee;white-space:nowrap}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-course #popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:"\f110"}#popup-course #popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-course #popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;margin-top:32px;border-color:transparent;color:#fff;background:#3db748;font-size:16px;align-items:center;justify-content:center}#popup-course #popup-content .lp-button.completed i{margin-left:9px;font-size:14px}#popup-course #popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-course #popup-content.fixed-quiz-status .quiz-status>div{padding:0}@media(max-width:767px){#popup-course #popup-content{margin-top:113px}}#popup-course #popup-footer{position:fixed;z-index:999;right:0;bottom:0;left:475px;width:100%;max-width:792px;height:50px;margin:0 auto;border-top:1px solid #ebebeb;background:#fff;-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}@media(max-width:1024px){#popup-course #popup-footer{width:auto;padding:0 15px}}#popup-course #popup-footer .course-item-nav{justify-content:space-between}#popup-course #popup-footer .course-item-nav .prev,#popup-course #popup-footer .course-item-nav .next{display:flex;line-height:50px}#popup-course #popup-footer .course-item-nav .prev a,#popup-course #popup-footer .course-item-nav .next a{display:block;color:#666;font-size:16px}#popup-course #popup-footer .course-item-nav .prev::before,#popup-course #popup-footer .course-item-nav .next::before{color:#999;font-family:"Font Awesome 5 Free";font-size:12px;font-weight:900}#popup-course #popup-footer .course-item-nav .prev:hover a,#popup-course #popup-footer .course-item-nav .prev:hover::before,#popup-course #popup-footer .course-item-nav .next:hover a,#popup-course #popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-course #popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-course #popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-course #popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-course #popup-footer .course-item-nav .next::before{margin-left:10px;content:"\f0da"}#popup-course #popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-course #popup-footer .prev::before{margin-right:10px;content:"\f0d9"}#popup-course #popup-footer .prev .course-item-nav__name{right:auto;left:-30px}#popup-course #popup-footer .prev .course-item-nav__name::before{right:auto;left:5px}@media(max-width:1024px){#popup-course #popup-footer .prev .course-item-nav__name{left:15px}}#popup-course #popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;right:-30px;width:auto;padding:10px 15px;color:#666;background:#ccc;font-size:14px;font-weight:300;line-height:1}@media(max-width:1024px){#popup-course #popup-footer .course-item-nav__name{top:-25px;right:15px;left:auto}}#popup-course #sidebar-toggle{display:inline-block;position:absolute;z-index:100;top:198px;left:475px;width:25px;height:56px;margin:0;background:#fff;box-shadow:0 0 20px 0 rgba(0,0,0,0.15);cursor:pointer;transition:.25s;-webkit-appearance:none;border:0}#popup-course #sidebar-toggle:after{display:none}#popup-course #sidebar-toggle::before{display:inline-block;position:absolute;top:50%;left:50%;color:var(--lp-primary-color);font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f0d9";transition:.25s;transform:translate(-50%,-50%)}#popup-course #sidebar-toggle:focus{border:0;outline:0}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:right}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid #f5f5f5;border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid #222;line-height:36px}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-left:10px;font-size:14px;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 5px 0 0}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #059601;border-radius:5px;font-size:1rem}#popup-course .question .answer-option input[type=radio],#popup-course .question .answer-option input[type=checkbox]{-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 0 0 10px}#popup-course .question .answer-option input[type=radio]::before{border-radius:50%}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle{left:0}body.lp-sidebar-toggle__close #popup-course>#sidebar-toggle::before{content:"\f0da"}body.lp-sidebar-toggle__close #popup-course #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-course #popup-header,body.lp-sidebar-toggle__close #popup-course #popup-footer{left:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle{left:0}body:not(.lp-sidebar-toggle__open) #popup-course>#sidebar-toggle::before{content:"\f0da"}body:not(.lp-sidebar-toggle__open) #popup-course #popup-sidebar{flex:0}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-course #popup-sidebar{flex-basis:300px}#popup-course #popup-sidebar .course-curriculum{width:300px}#popup-course #popup-header,#popup-course #popup-footer{left:300px}#popup-course #sidebar-toggle{left:299px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course #popup-sidebar{flex-basis:250px}#popup-course #popup-sidebar .course-curriculum{width:250px}#popup-course #popup-header,#popup-course #popup-footer{left:250px}#popup-course #sidebar-toggle{left:249px}#popup-course #sidebar-toggle:checked ~ #popup-sidebar{flex-basis:0}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;padding-bottom:80px}@media(max-width:1024px){.content-item-wrap{width:100%}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;color:#333;font-size:30px;font-weight:600}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap h4{font-size:1.5rem;font-weight:500;line-height:1.5}.content-item-wrap .content-item-summary{padding-top:50px}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:0;margin-bottom:18px;font-size:18px;letter-spacing:unset}.content-item-wrap .content-item-description p{margin:0 0 18px 0;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-size:16px;font-weight:300;line-height:26px}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 0 0 15px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]{margin:0;border:1px solid #d9e0f1;color:#777;background:#fbfcff}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]::before{display:inline-block;width:15px;height:15px;border:2px solid #d9e0f1;border-top-color:transparent;border-left-color:transparent;content:"";-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].prev::before{margin-left:7px;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg)}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next{margin-left:-1px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav].next::before{margin-right:7px}.content-item-wrap .quiz-buttons .lp-button[data-type=question-nav]:hover{background:#fff}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:99999;bottom:0;left:50%;width:100%;max-width:792px;height:49px;margin-left:237px;transform:translateX(-50%)}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-left:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .prev{border-top-right-radius:0;border-bottom-right-radius:0}.content-item-wrap .quiz-buttons:not(.is-first):not(.is-last) .next{border-top-left-radius:0;border-bottom-left-radius:0}.content-item-wrap .questions-pagination{height:33px;padding:8px 0;background:#fff;text-align:center}.content-item-wrap .questions-pagination .nav-links{text-align:center}.content-item-wrap .questions-pagination .nav-links .page-numbers{display:inline-block;vertical-align:middle;margin:0 3px 3px;padding:10px 16px;color:#666;background-color:transparent;font-size:16px;font-weight:300;line-height:1;border:1px solid;cursor:pointer}.content-item-wrap .questions-pagination .nav-links .page-numbers.next,.content-item-wrap .questions-pagination .nav-links .page-numbers.prev{display:inline-block;padding:10px;background:transparent;font-size:16px;text-align:center;text-decoration:none;text-transform:none;border:1px solid}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}.course-curriculum .section-title{position:relative;margin-bottom:0;padding:8px 0;color:#5383f7;font-size:16px;font-weight:normal;line-height:1}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:"Font Awesome 5 Free";font-size:18px;font-weight:900;content:"\f107"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:#ccc}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-size:inherit;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;padding-top:0;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;right:0;bottom:0;left:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;left:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(-50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-size:16px;font-weight:400;line-height:26px;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:""}.course-curriculum .section-header .section-left{display:flex}.course-curriculum .section-header .section-left .section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}*{box-sizing:border-box;margin:0;padding:0}button{cursor:pointer}input,button,select,textarea{outline:0}html{overflow-x:hidden}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-right:0;padding-left:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-right:auto;margin-left:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-left:0 !important;margin-right:0 !important;padding-left:0 !important;padding-right:0 !important}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part{padding-left:15px;padding-right:15px}}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}body{background:#fff}body.learnpress-page{overflow-x:hidden}.wrap-fullwidth a:focus,.wrap-fullwidth button:focus,.wrap-fullwidth input:focus,.wrap-fullwidth textarea:focus{border:0;outline:0}.wrap-fullwidth a:hover{text-decoration:none}.wrap-fullwidth p{word-break:break-word}.wrap-fullwidth p:last-child{margin-bottom:0}.wrap-fullwidth label{display:block;margin:0;outline:0}.wrap-fullwidth img{max-width:100%;height:auto}.wrap-fullwidth form{margin:0}.wrap-fullwidth .col-full{box-sizing:border-box;max-width:100%;padding:0}.wrap-fullwidth .col-full .woocommerce-breadcrumb{display:none}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:""}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-content-wrap{width:1170px;max-width:90%;margin:0 auto}.lp-content-wrap>h2{margin-top:0;margin-bottom:26px;color:#333;font-size:30px;font-weight:600}.learn-press-breadcrumb{max-width:1170px;width:100%;margin:0 auto 45px auto;padding:0;color:#333;font-size:14px;font-weight:400;list-style:none}.learn-press-breadcrumb li{display:inline-block;margin:0}.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}.learn-press-breadcrumb i{margin:0 5px;color:#666;font-size:12px}@media(max-width:1024px){.learn-press-breadcrumb{padding-right:15px;padding-left:15px}}.learn-press-breadcrumb a{color:#666;font-weight:500}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:16px 24px;border:1px solid #ccc;color:#333;background:transparent;box-shadow:unset;font-family:inherit;font-size:16px;font-weight:400;line-height:1;text-align:center;vertical-align:middle;text-decoration:none;text-transform:capitalize;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:18px}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-right:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .lp-button.loading::before,.learnpress-page #lp-button.loading::before{display:inline-block;font-family:"Font Awesome 5 Free";font-weight:900;content:"\f110";animation:lp-rotating 1s linear infinite}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #059601;border-radius:9px;font-size:15px;line-height:1.4}.lp-ajax-message.error{border-color:#d85554}.course-meta{margin-bottom:14px}.course-meta .course-students::before{font-family:"Font Awesome 5 Free";content:""}.lp-entry-content .course-tabs{margin-bottom:60px}.learn-press-checkout-comment h4{display:none}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid #ccc;resize:none}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.retake-course,.enroll-course,.purchase-course{display:inline-block}.table-orders{font-size:16px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}.learn-press-pagination{padding-bottom:20px;text-align:center}.learn-press-pagination .page-numbers{display:inline-block;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learn-press-pagination .page-numbers>li{display:inline-block;margin:0;padding:0 14px}.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0;color:#666;background:transparent;font-size:16px;font-weight:300}.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.list-table-nav{display:flex;margin-left:0;list-style:none}ul.list-table-nav .nav-text{text-align:left;flex:1}ul.list-table-nav .nav-pages{text-align:right;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:#00adff}.primary-color-before::before{color:#00adff}.primary-color-after::after{color:#00adff}.primary-background-color{background:#00adff}.primary-background-color{background:#00adff}.course-origin-price{margin-right:5px;font-size:85%;text-decoration:line-through}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:right}.content-item-wrap #comments{margin-right:0;margin-left:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-summary-sidebar{position:relative}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}@media(min-width:1200px){.course-summary-sidebar.slide-top .course-summary-sidebar__inner{position:absolute}}.course-graduation span{color:#999}.course-graduation .icon{margin-right:5px;font-size:20px}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:"Font Awesome 5 Free";content:"\f071"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:""}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:25px;left:-110px;width:300px;background:#93f;text-align:center;transform:rotate(-45deg)}.lp-badge.featured-course::before{font-size:12px;text-transform:uppercase;content:attr(data-text)}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.course-tabs .course-nav label{display:flex;align-items:center;justify-content:center;margin:0;padding:17px 10px;font-size:16px;line-height:1;font-weight:600;text-transform:capitalize;cursor:pointer}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-right:0}}.course-price:empty{display:none !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table{border-spacing:0;border-left:1px solid var(--lp-secondary-color);border-top:1px solid var(--lp-secondary-color);width:100%}.quiz-attempts table tr th,.quiz-attempts table tr td{border-right:1px solid var(--lp-secondary-color);border-bottom:1px solid var(--lp-secondary-color);padding:5px 15px;text-align:center}.quiz-attempts table tr th{font-weight:500}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}
assets/js/dist/frontend/courses.js CHANGED
@@ -41,10 +41,8 @@ const lpArchiveCourse = () => {
41
  lpArchiveRequestCourse(filterCourses);
42
  }
43
 
44
- if (elNoLoadAjaxFirst) {
45
- lpArchivePaginationCourse();
46
- lpArchiveSearchCourse();
47
- }
48
  };
49
 
50
  window.lpArchiveRequestCourse = (args, callBackSuccess) => {
41
  lpArchiveRequestCourse(filterCourses);
42
  }
43
 
44
+ lpArchivePaginationCourse();
45
+ lpArchiveSearchCourse();
 
 
46
  };
47
 
48
  window.lpArchiveRequestCourse = (args, callBackSuccess) => {
assets/js/dist/frontend/courses.min.js CHANGED
@@ -1 +1 @@
1
- !function(){lpGlobalSettings.courses_url;const e=document.location.href;let t,r,o=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{},s=!1,n=1,c=null,a=null;lpGlobalSettings.is_course_archive&&(window.location.search.length||-1!==e.search("page")||(o={}));const l=(e,t)=>{const r=new URL(e);return Object.keys(t).forEach((e=>{r.searchParams.set(e,t[e])})),r};window.lpArchiveRequestCourse=(e,o)=>{const c=lpGlobalSettings.lp_rest_url;if(!c)return;if(!t)return;const u=a&&a.querySelector("div.lp-archive-courses .lp-content-area"),p=u&&u.querySelector("ul.learn-press-courses");if(!p)return;if(s)return;s=!0,r?p.append(t):r=t.outerHTML;const d=l(c+"lp/v1/courses/archive-course",{...lpArchiveSkeleton,...e});wp.apiFetch({path:"lp/v1/courses/archive-course"+d.search,method:"GET"}).then((e=>{void 0!==e.data.content&&p&&(p.innerHTML=e.data.content||"");const t=e.data.pagination,r=document.querySelector(".learn-press-pagination");if(r&&r.remove(),void 0!==t){const e=(new DOMParser).parseFromString(t,"text/html").querySelector(".learn-press-pagination");e&&(p.after(e),i())}wp.hooks.doAction("lp-js-get-courses",e),"function"==typeof o&&o(e)})).catch((e=>{p.innerHTML+=`<div class="lp-ajax-message error" style="display:block">${e.message||"Error: Query lp/v1/courses/archive-course"}</div>`})).finally((()=>{if(s=!1,jQuery("form.search-courses button").removeClass("loading"),n)n=0;else{const e={behavior:"smooth"};a.scrollIntoView(e)}window.localStorage.setItem("lp_filter_courses",JSON.stringify(e));const t=l(document.location,e);window.history.pushState("","",t)}))};const i=()=>{const e=document.querySelectorAll(".lp-archive-courses .learn-press-pagination .page-numbers");e.length>0&&e.forEach((r=>r.addEventListener("click",(o=>{if(o.preventDefault(),o.stopPropagation(),!a)return;t&&(t.style.display="block"),a.scrollIntoView({behavior:"smooth"});let s={};if(s=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{},o.currentTarget.getAttribute("href")){const t=[...e].filter((e=>e.classList.contains("current"))),n=o.currentTarget.textContent||r.classList.contains("next")&&parseInt(t[0].textContent)+1||r.classList.contains("prev")&&parseInt(t[0].textContent)-1;s.paged=n,lpArchiveRequestCourse({...s})}}))))};function u(){a=document.querySelector(".lp-archive-courses"),t=document.querySelector(".lp-archive-course-skeleton"),c=document.querySelector(".no-first-load-ajax"),t&&(t&&!c&&lpArchiveRequestCourse(o),c&&(i(),(()=>{const e=document.querySelectorAll("form.search-courses"),r=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{};e.forEach((e=>{const o=e.querySelector('input[name="c_search"]'),s=e.querySelector('[type="submit"]');let n;o.addEventListener("keyup",(e=>{t&&(t.style.display="block"),e.preventDefault();const o=e.target.value.trim();(!o||o&&o.length>2)&&(void 0!==n&&clearTimeout(n),n=setTimeout((function(){s.classList.add("loading"),r.c_search=o,r.paged=1,lpArchiveRequestCourse({...r})}),800))})),e.addEventListener("submit",(t=>{t.preventDefault();const r=e.querySelector('input[name="c_search"]');r&&r.dispatchEvent(new Event("keyup"))}))}))})())),(()=>{const e=document.querySelectorAll('.lp-archive-courses input[name="lp-switch-layout-btn"]');e.length>0&&e.forEach((e=>e.addEventListener("change",(e=>{e.preventDefault();const t=e.target.value;if(t){const e=document.querySelector(".lp-archive-courses .learn-press-courses[data-layout]");e&&(e.dataset.layout=t),LP.Cookies.set("courses-layout",t)}}))))})(),(()=>{const e=LP.Cookies.get("courses-layout"),t=document.querySelectorAll('.lp-courses-bar .switch-layout [name="lp-switch-layout-btn"]');t.length>0&&[...t].map((t=>t.value===e&&(t.checked=!0)))})()}document.addEventListener("DOMContentLoaded",(function(e){u()}))}();
1
+ !function(){lpGlobalSettings.courses_url;const e=document.location.href;let t,r,o=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{},s=!1,n=1,c=null,a=null;lpGlobalSettings.is_course_archive&&(window.location.search.length||-1!==e.search("page")||(o={}));const l=(e,t)=>{const r=new URL(e);return Object.keys(t).forEach((e=>{r.searchParams.set(e,t[e])})),r};window.lpArchiveRequestCourse=(e,o)=>{const c=lpGlobalSettings.lp_rest_url;if(!c)return;if(!t)return;const u=a&&a.querySelector("div.lp-archive-courses .lp-content-area"),p=u&&u.querySelector("ul.learn-press-courses");if(!p)return;if(s)return;s=!0,r?p.append(t):r=t.outerHTML;const d=l(c+"lp/v1/courses/archive-course",{...lpArchiveSkeleton,...e});wp.apiFetch({path:"lp/v1/courses/archive-course"+d.search,method:"GET"}).then((e=>{void 0!==e.data.content&&p&&(p.innerHTML=e.data.content||"");const t=e.data.pagination,r=document.querySelector(".learn-press-pagination");if(r&&r.remove(),void 0!==t){const e=(new DOMParser).parseFromString(t,"text/html").querySelector(".learn-press-pagination");e&&(p.after(e),i())}wp.hooks.doAction("lp-js-get-courses",e),"function"==typeof o&&o(e)})).catch((e=>{p.innerHTML+=`<div class="lp-ajax-message error" style="display:block">${e.message||"Error: Query lp/v1/courses/archive-course"}</div>`})).finally((()=>{if(s=!1,jQuery("form.search-courses button").removeClass("loading"),n)n=0;else{const e={behavior:"smooth"};a.scrollIntoView(e)}window.localStorage.setItem("lp_filter_courses",JSON.stringify(e));const t=l(document.location,e);window.history.pushState("","",t)}))};const i=()=>{const e=document.querySelectorAll(".lp-archive-courses .learn-press-pagination .page-numbers");e.length>0&&e.forEach((r=>r.addEventListener("click",(o=>{if(o.preventDefault(),o.stopPropagation(),!a)return;t&&(t.style.display="block"),a.scrollIntoView({behavior:"smooth"});let s={};if(s=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{},o.currentTarget.getAttribute("href")){const t=[...e].filter((e=>e.classList.contains("current"))),n=o.currentTarget.textContent||r.classList.contains("next")&&parseInt(t[0].textContent)+1||r.classList.contains("prev")&&parseInt(t[0].textContent)-1;s.paged=n,lpArchiveRequestCourse({...s})}}))))};function u(){a=document.querySelector(".lp-archive-courses"),t=document.querySelector(".lp-archive-course-skeleton"),c=document.querySelector(".no-first-load-ajax"),t&&(t&&!c&&lpArchiveRequestCourse(o),i(),(()=>{const e=document.querySelectorAll("form.search-courses"),r=JSON.parse(window.localStorage.getItem("lp_filter_courses"))||{};e.forEach((e=>{const o=e.querySelector('input[name="c_search"]'),s=e.querySelector('[type="submit"]');let n;o.addEventListener("keyup",(e=>{t&&(t.style.display="block"),e.preventDefault();const o=e.target.value.trim();(!o||o&&o.length>2)&&(void 0!==n&&clearTimeout(n),n=setTimeout((function(){s.classList.add("loading"),r.c_search=o,r.paged=1,lpArchiveRequestCourse({...r})}),800))})),e.addEventListener("submit",(t=>{t.preventDefault();const r=e.querySelector('input[name="c_search"]');r&&r.dispatchEvent(new Event("keyup"))}))}))})()),(()=>{const e=document.querySelectorAll('.lp-archive-courses input[name="lp-switch-layout-btn"]');e.length>0&&e.forEach((e=>e.addEventListener("change",(e=>{e.preventDefault();const t=e.target.value;if(t){const e=document.querySelector(".lp-archive-courses .learn-press-courses[data-layout]");e&&(e.dataset.layout=t),LP.Cookies.set("courses-layout",t)}}))))})(),(()=>{const e=LP.Cookies.get("courses-layout"),t=document.querySelectorAll('.lp-courses-bar .switch-layout [name="lp-switch-layout-btn"]');t.length>0&&[...t].map((t=>t.value===e&&(t.checked=!0)))})()}document.addEventListener("DOMContentLoaded",(function(e){u()}))}();
assets/src/apps/js/frontend/courses.js CHANGED
@@ -38,10 +38,8 @@ const lpArchiveCourse = () => {
38
  lpArchiveRequestCourse( filterCourses );
39
  }
40
 
41
- if ( elNoLoadAjaxFirst ) {
42
- lpArchivePaginationCourse();
43
- lpArchiveSearchCourse();
44
- }
45
  };
46
 
47
  window.lpArchiveRequestCourse = ( args, callBackSuccess ) => {
38
  lpArchiveRequestCourse( filterCourses );
39
  }
40
 
41
+ lpArchivePaginationCourse();
42
+ lpArchiveSearchCourse();
 
 
43
  };
44
 
45
  window.lpArchiveRequestCourse = ( args, callBackSuccess ) => {
assets/src/apps/js/frontend/single-course/student-list.js ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ const studentListCourse = () => {
3
+ const elementStudentList = document.querySelector( '.learnpress-course-student-list' );
4
+
5
+ if ( ! elementStudentList ) {
6
+ return;
7
+ }
8
+
9
+ const skeleton = elementStudentList.querySelector( '.lp-skeleton-animation' );
10
+ const eleParents = elementStudentList.querySelector( '.content-student-list' );
11
+
12
+ const Sekeleton = () => {
13
+ const extraQuery = {
14
+ status: '',
15
+ paged: 1,
16
+ };
17
+
18
+ getResponse( eleParents, extraQuery );
19
+
20
+ const select = document.querySelector( '.students-list-filter' );
21
+
22
+ if ( select != null ) {
23
+ select.addEventListener( 'change', function() {
24
+ eleParents.innerHTML = '';
25
+ skeleton.style.display = 'block';
26
+ extraQuery.status = this.value;
27
+ getResponse( eleParents, extraQuery );
28
+ } );
29
+ }
30
+ };
31
+
32
+ const getResponse = async ( ele, extraQuery, append = false, viewMoreEle ) => {
33
+ const courseID = ele.dataset.id;
34
+ const statusFilter = extraQuery?.status || '';
35
+ const paged = extraQuery?.paged || 1;
36
+
37
+ try {
38
+ const response = await wp.apiFetch( {
39
+ path: addQueryArgs( 'lp/v1/lazy-load/student-list', {
40
+ courseId: courseID || lpGlobalSettings.post_id || '',
41
+ status: statusFilter,
42
+ paged,
43
+ } ),
44
+ method: 'GET',
45
+ } );
46
+
47
+ const { data, status, message } = response;
48
+
49
+ if ( status === 'error' ) {
50
+ throw new Error( message || 'Error' );
51
+ }
52
+
53
+ if ( append ) {
54
+ ele.innerHTML += data.content;
55
+ } else {
56
+ ele.innerHTML = data.content;
57
+ }
58
+
59
+ if ( viewMoreEle ) {
60
+ viewMoreEle.classList.remove( 'loading' );
61
+
62
+ const paged = viewMoreEle.dataset.paged;
63
+ const numberPage = viewMoreEle.dataset.number;
64
+
65
+ if ( numberPage <= paged ) {
66
+ viewMoreEle.remove();
67
+ }
68
+
69
+ viewMoreEle.dataset.paged = parseInt( paged ) + 1;
70
+ }
71
+ viewMoreStudentList( ele, extraQuery );
72
+ } catch ( error ) {
73
+ ele.insertAdjacentHTML( 'beforeend', `<div class="learn-press-message error" style="display:block">${ error.message || 'Error: Query lp/v1/lazy-load/course-student-list' }</div>` );
74
+ }
75
+
76
+ skeleton.style.display = 'none';
77
+ };
78
+
79
+ const viewMoreStudentList = ( ele, extraQuery ) => {
80
+ const viewMoreEle = ele.querySelector( '.lp_student_list_button button.lp-button' );
81
+
82
+ if ( viewMoreEle ) {
83
+ viewMoreEle.addEventListener( 'click', ( e ) => {
84
+ e.preventDefault();
85
+
86
+ const paged = viewMoreEle && viewMoreEle.dataset.paged;
87
+
88
+ viewMoreEle.classList.add( 'loading' );
89
+
90
+ getResponse( ele.querySelector( 'ul.students' ), { ...extraQuery, ...{ paged } }, true, viewMoreEle );
91
+ } );
92
+ }
93
+ };
94
+
95
+ Sekeleton();
96
+ };
config/settings/course.php CHANGED
@@ -104,14 +104,14 @@ return apply_filters(
104
  array(
105
  'title' => esc_html__( 'Section Per Page', 'learnpress' ),
106
  'id' => 'section_per_page',
107
- 'default' => 2,
108
  'type' => 'number',
109
  'desc' => esc_html__( 'Number of sections displayed per page ( Enter -1 for display all sections).', 'learnpress' ),
110
  ),
111
  array(
112
  'title' => esc_html__( 'Course Item Per Page', 'learnpress' ),
113
  'id' => 'course_item_per_page',
114
- 'default' => 5,
115
  'type' => 'number',
116
  'desc' => esc_html__( 'Number of course items displayed per page in section ( Enter -1 for display all course items).', 'learnpress' ),
117
  ),
104
  array(
105
  'title' => esc_html__( 'Section Per Page', 'learnpress' ),
106
  'id' => 'section_per_page',
107
+ 'default' => 1,
108
  'type' => 'number',
109
  'desc' => esc_html__( 'Number of sections displayed per page ( Enter -1 for display all sections).', 'learnpress' ),
110
  ),
111
  array(
112
  'title' => esc_html__( 'Course Item Per Page', 'learnpress' ),
113
  'id' => 'course_item_per_page',
114
+ 'default' => 10,
115
  'type' => 'number',
116
  'desc' => esc_html__( 'Number of course items displayed per page in section ( Enter -1 for display all course items).', 'learnpress' ),
117
  ),
inc/abstracts/abstract-addon.php CHANGED
@@ -99,7 +99,7 @@ class LP_Addon {
99
 
100
  foreach ( self::$_admin_notices as $notice ) {
101
  ?>
102
- <div class="error"><p><?php echo $notice; ?></p></div>
103
  <?php
104
  }
105
  }
99
 
100
  foreach ( self::$_admin_notices as $notice ) {
101
  ?>
102
+ <div class="error"><p><?php echo wp_kses_post( $notice ); ?></p></div>
103
  <?php
104
  }
105
  }
inc/abstracts/abstract-shortcode-courses.php CHANGED
@@ -127,7 +127,7 @@ if ( ! class_exists( 'LP_Abstract_Shortcode_Courses' ) ) {
127
  $post_ids = array();
128
  }
129
 
130
- $query = new LP_Query_Course( array( 'post__in' => $post_ids) );
131
  $args = $query->get_wp_query_vars();
132
 
133
  $query = new WP_Query( $args );
127
  $post_ids = array();
128
  }
129
 
130
+ $query = new LP_Query_Course( array( 'post__in' => $post_ids ) );
131
  $args = $query->get_wp_query_vars();
132
 
133
  $query = new WP_Query( $args );
inc/admin/class-lp-admin-ajax.php CHANGED
@@ -382,10 +382,10 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
382
  public static function search_course_category() {
383
  global $wpdb;
384
  $sql = 'SELECT `t`.`term_id` as `id`, '
385
- . ' `t`.`name` `text` '
386
- . " FROM {$wpdb->terms} t "
387
- . " INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id AND taxonomy='course_category' "
388
- . ' WHERE `t`.`name` LIKE %s';
389
  $s = '%' . filter_input( INPUT_GET, 'q' ) . '%';
390
  $query = $wpdb->prepare( $sql, $s );
391
  $items = $wpdb->get_results( $query );
@@ -516,8 +516,9 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
516
  * @param mixed $params (Optional) List of keys want to get from payload.
517
  *
518
  * @return array|bool|mixed|object
 
519
  */
520
- public static function get_php_input( $params = '' ) {
521
  static $data = false;
522
  if ( false === $data ) {
523
  try {
@@ -539,15 +540,16 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
539
  }
540
 
541
  return $data;
542
- }
543
 
544
  /**
545
  * Parse request content into var.
546
  * Normally, parse and assign to $_POST or $_GET.
547
  *
548
  * @param $var
 
549
  */
550
- public static function parsePhpInput( &$var ) {
551
  $data = self::get_php_input();
552
 
553
  if ( $data ) {
@@ -555,7 +557,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
555
  $var[ $k ] = $v;
556
  }
557
  }
558
- }
559
 
560
  public static function load_chart() {
561
  if ( ! class_exists( 'LP_Submenu_Statistics' ) ) {
@@ -573,7 +575,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
573
  if ( method_exists( $wpdb, 'esc_like' ) ) {
574
  $term = $wpdb->esc_like( $term );
575
  } else {
576
- $term = like_escape( $term );
577
  }
578
 
579
  $query->query_from .= " INNER JOIN {$wpdb->usermeta} AS user_name ON {$wpdb->users}.ID = user_name.user_id AND ( user_name.meta_key = 'first_name' OR user_name.meta_key = 'last_name' ) ";
@@ -666,7 +668,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
666
  * @author hungkv
667
  */
668
  public static function update_order_exports() {
669
- $order_id = absint( $_POST['order_id'] );
670
  $order = learn_press_get_order( $order_id );
671
  $currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );
672
 
@@ -679,7 +681,7 @@ if ( ! class_exists( 'LP_Admin_Ajax' ) ) {
679
  )
680
  );
681
  $html = ob_get_clean();
682
- echo $html;
683
  die();
684
  }
685
  }
382
  public static function search_course_category() {
383
  global $wpdb;
384
  $sql = 'SELECT `t`.`term_id` as `id`, '
385
+ . ' `t`.`name` `text` '
386
+ . " FROM {$wpdb->terms} t "
387
+ . " INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id AND taxonomy='course_category' "
388
+ . ' WHERE `t`.`name` LIKE %s';
389
  $s = '%' . filter_input( INPUT_GET, 'q' ) . '%';
390
  $query = $wpdb->prepare( $sql, $s );
391
  $items = $wpdb->get_results( $query );
516
  * @param mixed $params (Optional) List of keys want to get from payload.
517
  *
518
  * @return array|bool|mixed|object
519
+ * @depecated 4.1.6.9
520
  */
521
+ /*public static function get_php_input( $params = '' ) {
522
  static $data = false;
523
  if ( false === $data ) {
524
  try {
540
  }
541
 
542
  return $data;
543
+ }*/
544
 
545
  /**
546
  * Parse request content into var.
547
  * Normally, parse and assign to $_POST or $_GET.
548
  *
549
  * @param $var
550
+ * @depecated 4.1.6.9
551
  */
552
+ /*public static function parsePhpInput( &$var ) {
553
  $data = self::get_php_input();
554
 
555
  if ( $data ) {
557
  $var[ $k ] = $v;
558
  }
559
  }
560
+ }*/
561
 
562
  public static function load_chart() {
563
  if ( ! class_exists( 'LP_Submenu_Statistics' ) ) {
575
  if ( method_exists( $wpdb, 'esc_like' ) ) {
576
  $term = $wpdb->esc_like( $term );
577
  } else {
578
+ $term = $wpdb->esc_like( $term );
579
  }
580
 
581
  $query->query_from .= " INNER JOIN {$wpdb->usermeta} AS user_name ON {$wpdb->users}.ID = user_name.user_id AND ( user_name.meta_key = 'first_name' OR user_name.meta_key = 'last_name' ) ";
668
  * @author hungkv
669
  */
670
  public static function update_order_exports() {
671
+ $order_id = absint( $_POST['order_id'] );
672
  $order = learn_press_get_order( $order_id );
673
  $currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );
674
 
681
  )
682
  );
683
  $html = ob_get_clean();
684
+ echo wp_kses_post( $html );
685
  die();
686
  }
687
  }
inc/admin/class-lp-admin-dashboard.php CHANGED
@@ -77,9 +77,9 @@ if ( ! class_exists( 'LP_Admin_Dashboard' ) ) {
77
  );
78
  ?>
79
 
80
- <span class="count-rating">(<?php echo $eduma_data['rating']['count']; ?>)</span>
81
  <span>
82
- - <?php echo $eduma_data['number_of_sales'] . esc_html__( ' sales', 'learnpress' ); ?>
83
  </span>
84
  </div>
85
  <?php endif; ?>
77
  );
78
  ?>
79
 
80
+ <span class="count-rating">(<?php echo esc_html( $eduma_data['rating']['count'] ); ?>)</span>
81
  <span>
82
+ - <?php echo sprintf( '%d %s', esc_html( $eduma_data['number_of_sales'] ), esc_html__( ' sales', 'learnpress' ) ); ?>
83
  </span>
84
  </div>
85
  <?php endif; ?>
inc/admin/class-lp-admin.php CHANGED
@@ -375,7 +375,7 @@ if ( ! class_exists( 'LP_Admin' ) ) {
375
  switch ( $column_name ) {
376
  case 'lp-page':
377
  if ( ! empty( $pages['learnpress'][ $post ] ) ) {
378
- echo $pages['learnpress'][ $post ];
379
  }
380
 
381
  foreach ( $pages as $plugin => $plugin_pages ) {
@@ -867,48 +867,54 @@ if ( ! class_exists( 'LP_Admin' ) ) {
867
  * @param string $new_slug
868
  * @param WP_Post|null $post
869
  *
870
- * @return array|int|mixed|string|void
871
  * @author tungnx
872
  * @since 3.2.7.5
 
873
  */
874
  public function lp_course_set_link_item_backend( $post_link = '', $post_id = 0, $new_title = '', $new_slug = '', $post = null ) {
875
  if ( ! in_array( $post->post_type, learn_press_get_course_item_types() ) ) {
876
  return $post_link;
877
  }
878
 
879
- $course = null;
880
- $course_id_of_item = LP_Course_DB::getInstance()->learn_press_get_item_course( $post->ID );
881
 
882
- if ( $course_id_of_item ) {
883
- $course = learn_press_get_course( $course_id_of_item );
884
 
885
- if ( $course ) {
886
- $link_item = $course->get_item_link( $post->ID );
887
 
888
- $post_slug = $post->post_name;
889
- $link_item_edit_slug = preg_replace( '/' . $post_slug . '$/', '', $link_item );
890
 
891
- // For update new slug
892
- if ( $new_slug ) {
893
- $post_slug = $new_slug;
894
- }
895
 
896
- $post_link = '<strong>Permalink: </strong>';
897
- $post_link .= '<span id="sample-permalink">';
898
- $post_link .= '<a href="' . $link_item . '">' . $link_item_edit_slug . '<span id="editable-post-name">' . $post_slug . '</span>/</a>';
899
- $post_link .= '</span>';
900
- $post_link .= '&lrm;<span id="edit-slug-buttons">';
901
- $post_link .= '<button type="button" class="edit-slug button button-small hide-if-no-js" aria-label="Edit permalink">Edit</button>';
902
- $post_link .= '</span>';
903
- $post_link .= '<span id="editable-post-name-full">' . $post_slug . '</span>';
 
 
 
 
 
 
 
 
 
 
 
 
904
  }
905
- } else {
906
- // $post_link_preview = sprintf( '<a class="button" href="%s" target="_blank">%s</a>', learn_press_get_preview_url( $post_id ), __( 'Preview', 'learnpress' ) );
907
- $post_link_message = '<span>' . __(
908
- 'Permalink only available if the item is already assigned to a course.',
909
- 'learnpress'
910
- ) . '</span>';
911
- $post_link = sprintf( '<div id="learn-press-box-edit-slug">%s</div>', $post_link_message );
912
  }
913
 
914
  return $post_link;
375
  switch ( $column_name ) {
376
  case 'lp-page':
377
  if ( ! empty( $pages['learnpress'][ $post ] ) ) {
378
+ echo wp_kses_post( $pages['learnpress'][ $post ] );
379
  }
380
 
381
  foreach ( $pages as $plugin => $plugin_pages ) {
867
  * @param string $new_slug
868
  * @param WP_Post|null $post
869
  *
870
+ * @return string
871
  * @author tungnx
872
  * @since 3.2.7.5
873
+ * @version 4.0.1
874
  */
875
  public function lp_course_set_link_item_backend( $post_link = '', $post_id = 0, $new_title = '', $new_slug = '', $post = null ) {
876
  if ( ! in_array( $post->post_type, learn_press_get_course_item_types() ) ) {
877
  return $post_link;
878
  }
879
 
880
+ try {
881
+ $course_id_of_item = LP_Course_DB::getInstance()->get_course_by_item_id( $post->ID );
882
 
883
+ if ( $course_id_of_item ) {
884
+ $course = learn_press_get_course( $course_id_of_item );
885
 
886
+ if ( $course ) {
887
+ $link_item = $course->get_item_link( $post->ID );
888
 
889
+ $post_slug = $post->post_name;
890
+ $link_item_edit_slug = preg_replace( '/' . $post_slug . '$/', '', $link_item );
891
 
892
+ // For update new slug
893
+ if ( $new_slug ) {
894
+ $post_slug = $new_slug;
895
+ }
896
 
897
+ $post_link = '<strong>Permalink: </strong>';
898
+ $post_link .= '<span id="sample-permalink">';
899
+ $post_link .= '<a href="' . $link_item . '">' . $link_item_edit_slug . '<span id="editable-post-name">' . $post_slug . '</span>/</a>';
900
+ $post_link .= '</span>';
901
+ $post_link .= '&lrm;<span id="edit-slug-buttons">';
902
+ $post_link .= '<button type="button" class="edit-slug button button-small hide-if-no-js" aria-label="Edit permalink">Edit</button>';
903
+ $post_link .= '</span>';
904
+ $post_link .= '<span id="editable-post-name-full">' . $post_slug . '</span>';
905
+ }
906
+ } else {
907
+ // $post_link_preview = sprintf( '<a class="button" href="%s" target="_blank">%s</a>', learn_press_get_preview_url( $post_id ), __( 'Preview', 'learnpress' ) );
908
+ $post_link_message = '<span>' . __(
909
+ 'Permalink only available if the item is already assigned to a course.',
910
+ 'learnpress'
911
+ ) . '</span>';
912
+ $post_link = sprintf( '<div id="learn-press-box-edit-slug">%s</div>', $post_link_message );
913
+ }
914
+ } catch ( Throwable $e ) {
915
+ if ( LP_Debug::is_debug() ) {
916
+ error_log( $e->getMessage() );
917
  }
 
 
 
 
 
 
 
918
  }
919
 
920
  return $post_link;
inc/admin/class-lp-install-sample-data.php CHANGED
@@ -133,39 +133,6 @@ class LP_Install_Sample_Data {
133
  throw new Exception( 'Create course failed.' );
134
  }
135
 
136
- $hooks = LP_Helper::sanitize_params_submitted( $_REQUEST['hooks'] ?? array() );
137
-
138
- if ( ! empty( $hooks ) ) {
139
- $hooks = (array) json_decode( $hooks );
140
-
141
- /*$wpml_settings = array();
142
- global $wpdb;
143
- $wpml = new WPML_Admin_Post_Actions( $wpml_settings, $wpdb );
144
- $wpml->save_post_actions( $course_id, get_post( $course_id ) );*/
145
-
146
- $args = array();
147
- if ( ! empty( $hooks ) ) {
148
- foreach ( $hooks as $hook ) {
149
- if ( isset( $hook->class ) && isset( $hook->action ) ) {
150
- $class_name = $hook->class;
151
- $action_name = $hook->action;
152
-
153
- switch ( $action_name ) {
154
- case 'save_post':
155
- $args = $course_id;
156
- break;
157
- default:
158
- break;
159
- }
160
-
161
- if ( is_callable( array( $class_name, $action_name ) ) ) {
162
- call_user_func( array( $class_name, $action_name ), $args );
163
- }
164
- }
165
- }
166
- }
167
- }
168
-
169
  $this->create_sections( $course_id );
170
 
171
  $price = LP_Request::get( 'course-price' );
@@ -182,6 +149,7 @@ class LP_Install_Sample_Data {
182
  array(
183
  'handle_name' => 'save_post',
184
  'course_id' => $course_id,
 
185
  )
186
  )->dispatch();
187
  ?>
@@ -199,7 +167,7 @@ class LP_Install_Sample_Data {
199
  } catch ( Exception $ex ) {
200
  //LP_Debug::rollbackTransaction();
201
  echo '<div class="lp-install-sample__response fail">';
202
- echo $ex->getMessage();
203
  echo '</div>';
204
  }
205
 
@@ -445,19 +413,15 @@ class LP_Install_Sample_Data {
445
  * @param int $course_id
446
  */
447
  protected function create_sections( $course_id ) {
448
-
449
  $section_length = call_user_func_array( 'rand', ( self::$section_range ) );
450
 
451
  for ( $i = 1; $i <= $section_length; $i ++ ) {
452
  $section_id = $this->create_section( 'Section ' . $i, $course_id );
453
 
454
  if ( $section_id ) {
455
-
456
  $this->create_section_items( $section_id, $course_id );
457
-
458
  }
459
  }
460
-
461
  }
462
 
463
  /**
133
  throw new Exception( 'Create course failed.' );
134
  }
135
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  $this->create_sections( $course_id );
137
 
138
  $price = LP_Request::get( 'course-price' );
149
  array(
150
  'handle_name' => 'save_post',
151
  'course_id' => $course_id,
152
+ 'data' => [ 'data_sample' => 1 ],
153
  )
154
  )->dispatch();
155
  ?>
167
  } catch ( Exception $ex ) {
168
  //LP_Debug::rollbackTransaction();
169
  echo '<div class="lp-install-sample__response fail">';
170
+ echo wp_kses_post( $ex->getMessage() );
171
  echo '</div>';
172
  }
173
 
413
  * @param int $course_id
414
  */
415
  protected function create_sections( $course_id ) {
 
416
  $section_length = call_user_func_array( 'rand', ( self::$section_range ) );
417
 
418
  for ( $i = 1; $i <= $section_length; $i ++ ) {
419
  $section_id = $this->create_section( 'Section ' . $i, $course_id );
420
 
421
  if ( $section_id ) {
 
422
  $this->create_section_items( $section_id, $course_id );
 
423
  }
424
  }
 
425
  }
426
 
427
  /**
inc/admin/class-lp-modal-search-items.php CHANGED
@@ -231,9 +231,6 @@ if ( ! class_exists( 'LP_Modal_Search_Items' ) ) {
231
  // @since 3.0.0
232
  $item_not_found = apply_filters( 'learn-press/modal-search-items/not-found', __( 'No item found', 'learnpress' ), $this->_options['type'] );
233
 
234
- // @deprecated
235
- $item_not_found = apply_filters( 'learn_press_modal_search_items_not_found', $item_not_found );
236
-
237
  echo '<li>' . $item_not_found . '</li>';
238
  }
239
 
231
  // @since 3.0.0
232
  $item_not_found = apply_filters( 'learn-press/modal-search-items/not-found', __( 'No item found', 'learnpress' ), $this->_options['type'] );
233
 
 
 
 
234
  echo '<li>' . $item_not_found . '</li>';
235
  }
236
 
inc/admin/class-lp-plugin-install-list-table.php CHANGED
@@ -229,7 +229,7 @@ class LP_Plugin_Install_List_Table extends WP_List_Table {
229
  ?>
230
  <div class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
231
 
232
- <div id="the-list"<?php echo $data_attr; ?>>
233
  <?php $this->display_rows_or_placeholder(); ?>
234
  </div>
235
  </div>
@@ -450,7 +450,7 @@ class LP_Plugin_Install_List_Table extends WP_List_Table {
450
  <div class="plugin-card-top">
451
  <a href="<?php echo esc_url_raw( $details_link ); ?>" class="thickbox plugin-icon"><img src="<?php echo esc_attr( $plugin_icon_url ); ?>" /></a>
452
  <div class="name column-name">
453
- <h3><a href="<?php echo esc_url_raw( $details_link ); ?>" class="thickbox"><?php echo $title; ?></a></h3>
454
  </div>
455
  <div class="action-links">
456
  <?php
@@ -461,8 +461,8 @@ class LP_Plugin_Install_List_Table extends WP_List_Table {
461
  ?>
462
  </div>
463
  <div class="desc column-description">
464
- <p><?php echo $description; ?></p>
465
- <p class="authors"><?php echo $author; ?></p>
466
  </div>
467
  </div>
468
  <div class="plugin-card-bottom">
229
  ?>
230
  <div class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
231
 
232
+ <div id="the-list"<?php echo esc_attr( $data_attr ); ?>>
233
  <?php $this->display_rows_or_placeholder(); ?>
234
  </div>
235
  </div>
450
  <div class="plugin-card-top">
451
  <a href="<?php echo esc_url_raw( $details_link ); ?>" class="thickbox plugin-icon"><img src="<?php echo esc_attr( $plugin_icon_url ); ?>" /></a>
452
  <div class="name column-name">
453
+ <h3><a href="<?php echo esc_url_raw( $details_link ); ?>" class="thickbox"><?php echo wp_kses_post( $title ); ?></a></h3>
454
  </div>
455
  <div class="action-links">
456
  <?php
461
  ?>
462
  </div>
463
  <div class="desc column-description">
464
+ <p><?php echo wp_kses_post( $description ); ?></p>
465
+ <p class="authors"><?php echo wp_kses_post( $author ); ?></p>
466
  </div>
467
  </div>
468
  <div class="plugin-card-bottom">
inc/admin/class-lp-post-type-actions.php CHANGED
@@ -22,8 +22,8 @@ class LP_Post_Type_Actions {
22
  */
23
  protected function __construct() {
24
  //add_action( 'save_post', array( $this, 'save_post' ) );
25
- add_action( 'learn-press/added-item-to-section', array( $this, 'added_item_to_section' ), 10, 3 );
26
- add_action( 'learn-press/removed-item-from-section', array( $this, 'removed_item_from_section' ), 10, 2 );
27
 
28
  add_filter( 'pre_trash_post', array( $this, 'pre_trash_post' ), 10, 2 );
29
  add_filter( 'trashed_post', array( $this, 'trashed_post' ), 1000, 1 );
@@ -107,7 +107,7 @@ class LP_Post_Type_Actions {
107
 
108
  foreach ( $course_ids as $course_id ) {
109
  $curd->remove_item( $post_id, $course_id );
110
- do_action( 'learn-press/removed-course-item', $course_id );
111
  }
112
 
113
  $this->delete( 'item-courses-' . $post_id );
@@ -139,13 +139,13 @@ class LP_Post_Type_Actions {
139
  }
140
  }*/
141
 
142
- public function added_item_to_section( $item, $section_id, $course_id ) {
143
  do_action( 'learn-press/added-course-item', $item['id'], $course_id );
144
- }
145
 
146
- public function removed_item_from_section( $item, $course_id ) {
147
  do_action( 'learn-press/removed-course-item', $course_id );
148
- }
149
 
150
  /**
151
  * @editor tungnx
22
  */
23
  protected function __construct() {
24
  //add_action( 'save_post', array( $this, 'save_post' ) );
25
+ //add_action( 'learn-press/added-item-to-section', array( $this, 'added_item_to_section' ), 10, 3 );
26
+ //add_action( 'learn-press/removed-item-from-section', array( $this, 'removed_item_from_section' ), 10, 2 );
27
 
28
  add_filter( 'pre_trash_post', array( $this, 'pre_trash_post' ), 10, 2 );
29
  add_filter( 'trashed_post', array( $this, 'trashed_post' ), 1000, 1 );
107
 
108
  foreach ( $course_ids as $course_id ) {
109
  $curd->remove_item( $post_id, $course_id );
110
+ //do_action( 'learn-press/removed-course-item', $course_id );
111
  }
112
 
113
  $this->delete( 'item-courses-' . $post_id );
139
  }
140
  }*/
141
 
142
+ /*public function added_item_to_section( $item, $section_id, $course_id ) {
143
  do_action( 'learn-press/added-course-item', $item['id'], $course_id );
144
+ }*/
145
 
146
+ /*public function removed_item_from_section( $item, $course_id ) {
147
  do_action( 'learn-press/removed-course-item', $course_id );
148
+ }*/
149
 
150
  /**
151
  * @editor tungnx
inc/admin/class-lp-reset-data.php CHANGED
@@ -178,10 +178,10 @@ class LP_Reset_Data {
178
  }
179
 
180
  public static function ajax_reset_user_courses() {
181
- $user_id = LP_Request::get_int( 'user_id' );
182
- $course_id = LP_Request::get_int( 'course_id' );
183
  $object_reset = LP_Request::get_string( 'object_reset' );
184
- $user = learn_press_get_user($user_id);
185
  if ( ! current_user_can( 'administrator' ) ) {
186
  return;
187
  }
@@ -190,10 +190,10 @@ class LP_Reset_Data {
190
 
191
  // Set status, start_time, end_time of course to enrolled.
192
  $user_course_data->set_status( LP_COURSE_ENROLLED )
193
- ->set_start_time( current_time( 'mysql', true ) )
194
- ->set_end_time( '' )
195
- ->set_graduation( 'in-progress' )
196
- ->update();
197
  // Remove items' course user learned.
198
  $filter_remove = new LP_User_Items_Filter();
199
  $filter_remove->parent_id = $user_course_data->get_user_item_id();
@@ -203,11 +203,14 @@ class LP_Reset_Data {
203
  }
204
  if ( $object_reset == 'all' && $user_id ) {
205
  global $wpdb;
206
- $query = $wpdb->prepare( "
 
207
  SELECT item_id
208
  FROM {$wpdb->learnpress_user_items}
209
  WHERE user_id = %d AND item_type='lp_course'
210
- ", $user_id );
 
 
211
  $user_item_ids = $wpdb->get_col( $query );
212
  if ( $user_item_ids ) {
213
  foreach ( $user_item_ids as $user_item_id ) {
@@ -216,10 +219,10 @@ class LP_Reset_Data {
216
 
217
  // Set status, start_time, end_time of course to enrolled.
218
  $user_course_data->set_status( LP_COURSE_ENROLLED )
219
- ->set_start_time( current_time( 'mysql', true ) )
220
- ->set_end_time( '' )
221
- ->set_graduation( 'in-progress' )
222
- ->update();
223
  // Remove items' course user learned.
224
  $filter_remove = new LP_User_Items_Filter();
225
  $filter_remove->parent_id = $user_course_data->get_user_item_id();
178
  }
179
 
180
  public static function ajax_reset_user_courses() {
181
+ $user_id = LP_Request::get_int( 'user_id' );
182
+ $course_id = LP_Request::get_int( 'course_id' );
183
  $object_reset = LP_Request::get_string( 'object_reset' );
184
+ $user = learn_press_get_user( $user_id );
185
  if ( ! current_user_can( 'administrator' ) ) {
186
  return;
187
  }
190
 
191
  // Set status, start_time, end_time of course to enrolled.
192
  $user_course_data->set_status( LP_COURSE_ENROLLED )
193
+ ->set_start_time( current_time( 'mysql', true ) )
194
+ ->set_end_time( '' )
195
+ ->set_graduation( 'in-progress' )
196
+ ->update();
197
  // Remove items' course user learned.
198
  $filter_remove = new LP_User_Items_Filter();
199
  $filter_remove->parent_id = $user_course_data->get_user_item_id();
203
  }
204
  if ( $object_reset == 'all' && $user_id ) {
205
  global $wpdb;
206
+ $query = $wpdb->prepare(
207
+ "
208
  SELECT item_id
209
  FROM {$wpdb->learnpress_user_items}
210
  WHERE user_id = %d AND item_type='lp_course'
211
+ ",
212
+ $user_id
213
+ );
214
  $user_item_ids = $wpdb->get_col( $query );
215
  if ( $user_item_ids ) {
216
  foreach ( $user_item_ids as $user_item_id ) {
219
 
220
  // Set status, start_time, end_time of course to enrolled.
221
  $user_course_data->set_status( LP_COURSE_ENROLLED )
222
+ ->set_start_time( current_time( 'mysql', true ) )
223
+ ->set_end_time( '' )
224
+ ->set_graduation( 'in-progress' )
225
+ ->update();
226
  // Remove items' course user learned.
227
  $filter_remove = new LP_User_Items_Filter();
228
  $filter_remove->parent_id = $user_course_data->get_user_item_id();
inc/admin/dashboard-statistics/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/admin/editor/class-lp-admin-editor-course.php CHANGED
@@ -40,11 +40,11 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
40
  $args = wp_parse_args(
41
  $_REQUEST,
42
  array(
43
- 'id' => false,
44
  'type' => '',
45
  )
46
  );
47
- $course_id = $args['id'];
48
  $course = learn_press_get_course( $course_id );
49
 
50
  if ( ! $course ) {
@@ -58,6 +58,9 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
58
 
59
  $this->call( $args['type'], array( $args ) );
60
 
 
 
 
61
  return $this->get_result();
62
  }
63
 
@@ -110,11 +113,11 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
110
  return;
111
  }
112
 
113
- $this->course ? $this->course->get_sections() : '';
114
- $this->result = $this->section_curd->sort_sections( $order );
115
 
116
  // update final quiz
117
- $this->section_curd->update_final_item();
118
  }
119
 
120
  /**
@@ -123,14 +126,18 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
123
  * @return mixed
124
  */
125
  public function update_section( $args = array() ) {
126
- $section = ! empty( $args['section'] ) ? $args['section'] : false;
127
  $section = json_decode( wp_unslash( $section ), true );
128
 
129
  if ( ! $section ) {
130
  return false;
131
  }
132
 
133
- $update = array(
 
 
 
 
134
  'section_id' => $section['id'],
135
  'section_name' => $section['title'],
136
  'section_description' => $section['description'],
@@ -138,7 +145,7 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
138
  'section_course_id' => $section['course_id'],
139
  );
140
 
141
- $this->result = $this->section_curd->update( $update );
142
 
143
  return true;
144
  }
@@ -166,8 +173,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
166
  * @return mixed
167
  */
168
  public function new_section( $args = array() ) {
169
- $section_name = ! empty( $args['section_name'] ) ? $args['section_name'] : false;
170
- $temp_id = isset( $args['temp_id'] ) ? $args['temp_id'] : 0;
171
 
172
  $args = array(
173
  'section_course_id' => $this->course->get_id(),
@@ -217,8 +224,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
217
  * @return mixed
218
  */
219
  public function remove_section_item( $args = array() ) {
220
- $section_id = $args['section_id'] ?? false;
221
- $item_id = $args['item_id'] ?? false;
222
 
223
  try {
224
  // Instructor only remove item in my item.
@@ -246,8 +253,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
246
  * @return mixed
247
  */
248
  public function delete_section_item( $args = array() ) {
249
- $section_id = $args['section_id'] ?? false;
250
- $item_id = $args['item_id'] ?? false;
251
 
252
  try {
253
  // Instructor only remove item in my item.
@@ -273,8 +280,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
273
  * @return array|bool
274
  */
275
  public function new_section_item( $args = array() ) {
276
- $section_id = ! empty( $args['section_id'] ) ? $args['section_id'] : false;
277
- $item = ! empty( $args['item'] ) ? $args['item'] : false;
278
  $item = json_decode( wp_unslash( $item ), true );
279
 
280
  if ( ! ( $section_id && $item ) ) {
@@ -284,7 +291,7 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
284
  // create new lesson, quiz and add to course
285
  $this->result = $this->section_curd->new_item( $section_id, $item );
286
 
287
- $this->section_curd->update_final_item();
288
 
289
  return true;
290
  }
@@ -295,8 +302,8 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
295
  * @return mixed
296
  */
297
  public function update_section_items( $args = array() ) {
298
- $section_id = ! empty( $args['section_id'] ) ? $args['section_id'] : false;
299
- $items = ! empty( $args['items'] ) ? $args['items'] : false;
300
  $items = json_decode( wp_unslash( $items ), true );
301
 
302
  if ( ! ( $section_id && $items ) ) {
@@ -305,7 +312,7 @@ class LP_Admin_Editor_Course extends LP_Admin_Editor {
305
 
306
  $this->result = $this->section_curd->update_section_items( $section_id, $items );
307
 
308
- $this->section_curd->update_final_item();
309
 
310
  return true;
311
  }
40
  $args = wp_parse_args(
41
  $_REQUEST,
42
  array(
43
+ 'id' => 0,
44
  'type' => '',
45
  )
46
  );
47
+ $course_id = $args['id'] ?? 0;
48
  $course = learn_press_get_course( $course_id );
49
 
50
  if ( ! $course ) {
58
 
59
  $this->call( $args['type'], array( $args ) );
60
 
61
+ $course_post = get_post( $course_id );
62
+ LP_Course_Post_Type::instance()->save( $course_id, $course_post );
63
+
64
  return $this->get_result();
65
  }
66
 
113
  return;
114
  }
115
 
116
+ //$this->course ? $this->course->get_sections() : '';
117
+ $this->result = $this->section_curd->update_sections_order( $order );
118
 
119
  // update final quiz
120
+ //$this->section_curd->update_final_item();
121
  }
122
 
123
  /**
126
  * @return mixed
127
  */
128
  public function update_section( $args = array() ) {
129
+ $section = $args['section'] ?? false;
130
  $section = json_decode( wp_unslash( $section ), true );
131
 
132
  if ( ! $section ) {
133
  return false;
134
  }
135
 
136
+ if ( ! isset( $section['course_id'] ) && ! isset( $section['id'] ) ) {
137
+ return false;
138
+ }
139
+
140
+ $data = array(
141
  'section_id' => $section['id'],
142
  'section_name' => $section['title'],
143
  'section_description' => $section['description'],
145
  'section_course_id' => $section['course_id'],
146
  );
147
 
148
+ $this->result = $this->section_curd->update( $data );
149
 
150
  return true;
151
  }
173
  * @return mixed
174
  */
175
  public function new_section( $args = array() ) {
176
+ $section_name = $args['section_name'] ?? '';
177
+ $temp_id = $args['temp_id'] ?? 0;
178
 
179
  $args = array(
180
  'section_course_id' => $this->course->get_id(),
224
  * @return mixed
225
  */
226
  public function remove_section_item( $args = array() ) {
227
+ $section_id = $args['section_id'] ?? 0;
228
+ $item_id = $args['item_id'] ?? 0;
229
 
230
  try {
231
  // Instructor only remove item in my item.
253
  * @return mixed
254
  */
255
  public function delete_section_item( $args = array() ) {
256
+ $section_id = $args['section_id'] ?? 0;
257
+ $item_id = $args['item_id'] ?? 0;
258
 
259
  try {
260
  // Instructor only remove item in my item.
280
  * @return array|bool
281
  */
282
  public function new_section_item( $args = array() ) {
283
+ $section_id = $args['section_id'] ?? 0;
284
+ $item = $args['item'] ?? '';
285
  $item = json_decode( wp_unslash( $item ), true );
286
 
287
  if ( ! ( $section_id && $item ) ) {
291
  // create new lesson, quiz and add to course
292
  $this->result = $this->section_curd->new_item( $section_id, $item );
293
 
294
+ //$this->section_curd->update_final_item();
295
 
296
  return true;
297
  }
302
  * @return mixed
303
  */
304
  public function update_section_items( $args = array() ) {
305
+ $section_id = $args['section_id'] ?? 0;
306
+ $items = $args['items'] ?? '';
307
  $items = json_decode( wp_unslash( $items ), true );
308
 
309
  if ( ! ( $section_id && $items ) ) {
312
 
313
  $this->result = $this->section_curd->update_section_items( $section_id, $items );
314
 
315
+ //$this->section_curd->update_final_item();
316
 
317
  return true;
318
  }
inc/admin/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/admin/lp-admin-actions.php CHANGED
@@ -116,45 +116,45 @@ add_action( 'pre_get_posts', '_learn_press_set_user_items', 10 );*/
116
  /**
117
  * Update permalink structure for course
118
  */
119
- function learn_press_update_permalink_structure() {
120
- global $pagenow;
121
-
122
- if ( $pagenow != 'options-permalink.php' ) {
123
- return;
124
- }
125
-
126
- if ( strtolower( $_SERVER['REQUEST_METHOD'] ) != 'post' ) {
127
- return;
128
- }
129
-
130
- $rewrite_prefix = '';
131
- $permalink_structure = ! empty( $_REQUEST['permalink_structure'] ) ? $_REQUEST['permalink_structure'] : '';
132
-
133
- if ( $permalink_structure ) {
134
- $rewrite_prefix = array();
135
- $segs = explode( '/', $permalink_structure );
136
-
137
- if ( sizeof( $segs ) ) {
138
- foreach ( $segs as $seg ) {
139
- if ( strpos( $seg, '%' ) !== false || $seg == 'archives' ) {
140
- break;
141
- }
142
- $rewrite_prefix[] = $seg;
143
- }
144
- }
145
-
146
- $rewrite_prefix = array_filter( $rewrite_prefix );
147
-
148
- if ( sizeof( $rewrite_prefix ) ) {
149
- $rewrite_prefix = join( '/', $rewrite_prefix ) . '/';
150
- } else {
151
- $rewrite_prefix = '';
152
- }
153
- }
154
-
155
- update_option( 'learn_press_permalink_structure', $rewrite_prefix );
156
- }
157
- add_action( 'init', 'learn_press_update_permalink_structure' );
158
 
159
  /**
160
  * Active Courses menu under LearnPress
116
  /**
117
  * Update permalink structure for course
118
  */
119
+ // function learn_press_update_permalink_structure() {
120
+ // global $pagenow;
121
+
122
+ // if ( $pagenow != 'options-permalink.php' ) {
123
+ // return;
124
+ // }
125
+
126
+ // if ( strtolower( $_SERVER['REQUEST_METHOD'] ) != 'post' ) {
127
+ // return;
128
+ // }
129
+
130
+ // $rewrite_prefix = '';
131
+ // $permalink_structure = ! empty( $_REQUEST['permalink_structure'] ) ? $_REQUEST['permalink_structure'] : '';
132
+
133
+ // if ( $permalink_structure ) {
134
+ // $rewrite_prefix = array();
135
+ // $segs = explode( '/', $permalink_structure );
136
+
137
+ // if ( sizeof( $segs ) ) {
138
+ // foreach ( $segs as $seg ) {
139
+ // if ( strpos( $seg, '%' ) !== false || $seg == 'archives' ) {
140
+ // break;
141
+ // }
142
+ // $rewrite_prefix[] = $seg;
143
+ // }
144
+ // }
145
+
146
+ // $rewrite_prefix = array_filter( $rewrite_prefix );
147
+
148
+ // if ( sizeof( $rewrite_prefix ) ) {
149
+ // $rewrite_prefix = join( '/', $rewrite_prefix ) . '/';
150
+ // } else {
151
+ // $rewrite_prefix = '';
152
+ // }
153
+ // }
154
+
155
+ // update_option( 'learn_press_permalink_structure', $rewrite_prefix );
156
+ // }
157
+ // add_action( 'init', 'learn_press_update_permalink_structure' );
158
 
159
  /**
160
  * Active Courses menu under LearnPress
inc/admin/lp-admin-functions.php CHANGED
@@ -196,7 +196,7 @@ function learn_press_admin_view( $name, $args = array(), $include_once = false,
196
  $output = ob_get_clean();
197
 
198
  if ( ! $return ) {
199
- echo $output;
200
  }
201
 
202
  return $return ? $output : true;
@@ -205,6 +205,18 @@ function learn_press_admin_view( $name, $args = array(), $include_once = false,
205
  return false;
206
  }
207
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  /**
209
  * List all pages as a dropdown with "Add New Page" option
210
  *
@@ -290,12 +302,12 @@ function learn_press_pages_dropdown( $name, $selected = false, $args = array() )
290
 
291
  <?php echo esc_html( _x( 'or', 'drop down pages', 'learnpress' ) ); ?>
292
 
293
- <button class="button button-quick-add-page" data-id="<?php echo $id; ?>" type="button">
294
  <?php esc_html_e( 'Create new', 'learnpress' ); ?>
295
  </button>
296
  <?php echo '</div>'; ?>
297
 
298
- <p class="quick-add-page-inline <?php echo $id; ?> hide-if-js">
299
  <input type="text" placeholder="<?php esc_attr_e( 'New page title', 'learnpress' ); ?>"/>
300
  <button class="button" type="button">
301
  <?php esc_html_e( 'Ok [Enter]', 'learnpress' ); ?>
@@ -303,12 +315,12 @@ function learn_press_pages_dropdown( $name, $selected = false, $args = array() )
303
  <a href=""><?php esc_html_e( 'Cancel [ESC]', 'learnpress' ); ?></a>
304
  </p>
305
 
306
- <p class="quick-add-page-actions <?php echo $id; ?><?php echo $selected ? '' : ' hide-if-js'; ?>">
307
  <a class="edit-page" href="<?php echo get_edit_post_link( $selected ); ?>"
308
- target="_blank"><?php esc_html_e( 'Edit page', 'learnpress' ); ?></a>
309
  &#124;
310
  <a class="view-page" href="<?php echo get_permalink( $selected ); ?>"
311
- target="_blank"><?php esc_html_e( 'View page', 'learnpress' ); ?></a>
312
  </p>
313
 
314
  <?php
@@ -320,7 +332,21 @@ function learn_press_pages_dropdown( $name, $selected = false, $args = array() )
320
  $output = sprintf( '<div class="learn-press-dropdown-pages">%s</div>', $output );
321
 
322
  if ( $echo ) {
323
- echo $output;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
324
  }
325
 
326
  return $output;
@@ -371,7 +397,7 @@ function learn_press_dropdown_question_types( $args = array() ) {
371
  $output .= '</select>';
372
 
373
  if ( $args['echo'] ) {
374
- echo $output;
375
  }
376
 
377
  return $output;
@@ -485,7 +511,7 @@ function learn_press_email_formats_dropdown( $args = array() ) {
485
  $output .= '</select>';
486
 
487
  if ( $args['echo'] ) {
488
- echo $output;
489
  }
490
 
491
  return $output;
@@ -1524,7 +1550,7 @@ function learn_press_process_chart( $chart = array() ) {
1524
  'datasets' => $chart['datasets'],
1525
  )
1526
  );
1527
- echo $data;
1528
  }
1529
 
1530
  /**
196
  $output = ob_get_clean();
197
 
198
  if ( ! $return ) {
199
+ learn_press_echo_vuejs_write_on_php( $output );
200
  }
201
 
202
  return $return ? $output : true;
205
  return false;
206
  }
207
 
208
+ /**
209
+ * Vue write php has script, so when sanitize will error, so use code is mask pass check sanitize, esc
210
+ *
211
+ * @param $content
212
+ *
213
+ * @return void
214
+ * @since 4.1.6.9
215
+ */
216
+ function learn_press_echo_vuejs_write_on_php( $content ) {
217
+ echo ( $content );
218
+ }
219
+
220
  /**
221
  * List all pages as a dropdown with "Add New Page" option
222
  *
302
 
303
  <?php echo esc_html( _x( 'or', 'drop down pages', 'learnpress' ) ); ?>
304
 
305
+ <button class="button button-quick-add-page" data-id="<?php echo esc_attr( $id ); ?>" type="button">
306
  <?php esc_html_e( 'Create new', 'learnpress' ); ?>
307
  </button>
308
  <?php echo '</div>'; ?>
309
 
310
+ <p class="quick-add-page-inline <?php echo esc_attr( $id ); ?> hide-if-js">
311
  <input type="text" placeholder="<?php esc_attr_e( 'New page title', 'learnpress' ); ?>"/>
312
  <button class="button" type="button">
313
  <?php esc_html_e( 'Ok [Enter]', 'learnpress' ); ?>
315
  <a href=""><?php esc_html_e( 'Cancel [ESC]', 'learnpress' ); ?></a>
316
  </p>
317
 
318
+ <p class="quick-add-page-actions <?php echo esc_attr( $id ); ?><?php echo esc_attr( $selected ? '' : ' hide-if-js' ); ?>">
319
  <a class="edit-page" href="<?php echo get_edit_post_link( $selected ); ?>"
320
+ target="_blank"><?php esc_html_e( 'Edit page', 'learnpress' ); ?></a>
321
  &#124;
322
  <a class="view-page" href="<?php echo get_permalink( $selected ); ?>"
323
+ target="_blank"><?php esc_html_e( 'View page', 'learnpress' ); ?></a>
324
  </p>
325
 
326
  <?php
332
  $output = sprintf( '<div class="learn-press-dropdown-pages">%s</div>', $output );
333
 
334
  if ( $echo ) {
335
+ $allowed_html = wp_kses_allowed_html( 'post' );
336
+ $allowed_html['select'] = [
337
+ 'name' => [],
338
+ ];
339
+ $allowed_html['option'] = [
340
+ 'value' => [],
341
+ 'selected' => [],
342
+ 'class' => [],
343
+ ];
344
+ $allowed_html['input'] = [
345
+ 'type' => [],
346
+ 'placeholder' => [],
347
+ ];
348
+
349
+ echo wp_kses( $output, $allowed_html );
350
  }
351
 
352
  return $output;
397
  $output .= '</select>';
398
 
399
  if ( $args['echo'] ) {
400
+ echo wp_kses_post( $output );
401
  }
402
 
403
  return $output;
511
  $output .= '</select>';
512
 
513
  if ( $args['echo'] ) {
514
+ echo wp_kses_post( $output );
515
  }
516
 
517
  return $output;
1550
  'datasets' => $chart['datasets'],
1551
  )
1552
  );
1553
+ echo wp_kses_post( $data );
1554
  }
1555
 
1556
  /**
inc/admin/meta-box/fields/checkbox.php CHANGED
@@ -18,7 +18,7 @@ if ( isset( $value['show_if_checked'] ) ) {
18
 
19
  <?php if ( ! isset( $value['checkboxgroup'] ) || 'start' === $value['checkboxgroup'] ) : ?>
20
  <tr class="<?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>">
21
- <th scope="row" class="titledesc"><?php echo $value['title']; ?></th>
22
  <td class="forminp forminp-checkbox">
23
  <fieldset>
24
  <?php else : ?>
@@ -26,7 +26,7 @@ if ( isset( $value['show_if_checked'] ) ) {
26
  <?php endif; ?>
27
 
28
  <?php if ( ! empty( $value['title'] ) ) : ?>
29
- <legend class="screen-reader-text"><span><?php echo $value['title']; ?></span></legend>
30
  <?php endif; ?>
31
 
32
  <label for="<?php echo esc_attr( $value['id'] ); ?>">
@@ -38,8 +38,8 @@ if ( isset( $value['show_if_checked'] ) ) {
38
  value="1"
39
  <?php checked( $option_value, 'yes' ); ?>
40
  <?php echo implode( ' ', $custom_attributes ?? array() ); ?>
41
- /> <?php echo $description ?? ''; ?>
42
- </label> <?php echo $tooltip_html ?? ''; ?>
43
 
44
  <?php if ( ! isset( $value['checkboxgroup'] ) || 'end' === $value['checkboxgroup'] ) : ?>
45
  </fieldset>
18
 
19
  <?php if ( ! isset( $value['checkboxgroup'] ) || 'start' === $value['checkboxgroup'] ) : ?>
20
  <tr class="<?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>">
21
+ <th scope="row" class="titledesc"><?php echo esc_html( $value['title'] ); ?></th>
22
  <td class="forminp forminp-checkbox">
23
  <fieldset>
24
  <?php else : ?>
26
  <?php endif; ?>
27
 
28
  <?php if ( ! empty( $value['title'] ) ) : ?>
29
+ <legend class="screen-reader-text"><span><?php echo esc_html( $value['title'] ); ?></span></legend>
30
  <?php endif; ?>
31
 
32
  <label for="<?php echo esc_attr( $value['id'] ); ?>">
38
  value="1"
39
  <?php checked( $option_value, 'yes' ); ?>
40
  <?php echo implode( ' ', $custom_attributes ?? array() ); ?>
41
+ /> <?php echo wp_kses_post( $description ?? '' ); ?>
42
+ </label> <?php echo wp_kses_post( $tooltip_html ?? '' ); ?>
43
 
44
  <?php if ( ! isset( $value['checkboxgroup'] ) || 'end' === $value['checkboxgroup'] ) : ?>
45
  </fieldset>
inc/admin/meta-box/fields/custom-fields.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
- <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
6
  </th>
7
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?> lp-metabox__custom-fields">
8
  <table class="widefat">
@@ -13,7 +13,7 @@
13
  if ( $value['options'] ) {
14
  foreach ( $value['options'] as $key => $val ) {
15
  ?>
16
- <th><?php echo $value['options'][ $key ]['title']; ?> <?php echo isset( $value['options'][ $key ]['desc_tip'] ) ? learn_press_quick_tip( $value['options'][ $key ]['desc_tip'], false ) : ''; ?></th>
17
  <?php
18
  }
19
  }
@@ -44,6 +44,6 @@
44
  </tr>
45
  </tfoot>
46
  </table>
47
- <?php echo $description; ?>
48
  </td>
49
  </tr>
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
+ <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
6
  </th>
7
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?> lp-metabox__custom-fields">
8
  <table class="widefat">
13
  if ( $value['options'] ) {
14
  foreach ( $value['options'] as $key => $val ) {
15
  ?>
16
+ <th><?php echo wp_kses_post( $value['options'][ $key ]['title'] ); ?> <?php echo isset( $value['options'][ $key ]['desc_tip'] ) ? learn_press_quick_tip( $value['options'][ $key ]['desc_tip'], false ) : ''; ?></th>
17
  <?php
18
  }
19
  }
44
  </tr>
45
  </tfoot>
46
  </table>
47
+ <?php echo wp_kses_post( $description ); ?>
48
  </td>
49
  </tr>
inc/admin/meta-box/fields/email-content.php CHANGED
@@ -33,7 +33,7 @@ $email_format = $meta['format'];
33
 
34
  <tr valign="top">
35
  <th scope="row" class="titledesc">
36
- <label><?php echo $value['title']; ?> <?php echo $tooltip_html ?? ''; ?></label>
37
  </th>
38
  <td class="forminp lp-metabox-field__email-content forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">&lrm;
39
  <?php
@@ -88,7 +88,7 @@ $email_format = $meta['format'];
88
  $theme_folder = basename( $theme_dir );
89
  ?>
90
 
91
- <div class="<?php echo implode( ' ', $classes ); ?>">
92
  <?php if ( $has_local_file ) : ?>
93
  <textarea rows="10" style="width: 90%;" readonly="readonly"><?php echo stripslashes( LP_WP_Filesystem::instance()->file_get_contents( $local_file ) ); ?></textarea>
94
  <p class="description">
@@ -96,7 +96,7 @@ $email_format = $meta['format'];
96
  </p>
97
  <?php endif; ?>
98
 
99
- <div class="<?php echo $has_local_file ? 'hide-if-js' : ''; ?>">
100
  <?php if ( $template_type == 'html' ) : ?>
101
  <?php
102
  wp_editor(
@@ -113,9 +113,9 @@ $email_format = $meta['format'];
113
  <div class="editor">
114
  <textarea
115
  id="<?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>"
116
- name="<?php echo $field['id'] . '[plain]'; ?>"
117
  class="code" cols="25" rows="20"
118
- style="width: 97%;"><?php echo $content_plain; ?>
119
  </textarea>
120
  </div>
121
  <?php endif; ?>
@@ -123,11 +123,11 @@ $email_format = $meta['format'];
123
 
124
  <?php if ( ! $has_local_file ) : ?>
125
  <?php if ( $field['support_variables'] ) : ?>
126
- <ol class="learn-press-email-variables<?php echo $template_type == 'html' ? ' has-editor' : ''; ?>"
127
  data-target="<?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>">
128
  <?php foreach ( $field['support_variables'] as $variable ) : ?>
129
  <li data-variable="<?php echo esc_attr( $variable ); ?>">
130
- <code><?php echo $variable; ?></code></li>
131
  <?php endforeach; ?>
132
  </ol>
133
 
33
 
34
  <tr valign="top">
35
  <th scope="row" class="titledesc">
36
+ <label><?php echo wp_kses_post( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ?? '' ); ?></label>
37
  </th>
38
  <td class="forminp lp-metabox-field__email-content forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">&lrm;
39
  <?php
88
  $theme_folder = basename( $theme_dir );
89
  ?>
90
 
91
+ <div class="<?php echo esc_attr( implode( ' ', $classes ) ); ?>">
92
  <?php if ( $has_local_file ) : ?>
93
  <textarea rows="10" style="width: 90%;" readonly="readonly"><?php echo stripslashes( LP_WP_Filesystem::instance()->file_get_contents( $local_file ) ); ?></textarea>
94
  <p class="description">
96
  </p>
97
  <?php endif; ?>
98
 
99
+ <div class="<?php echo esc_attr( $has_local_file ? 'hide-if-js' : '' ); ?>">
100
  <?php if ( $template_type == 'html' ) : ?>
101
  <?php
102
  wp_editor(
113
  <div class="editor">
114
  <textarea
115
  id="<?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>"
116
+ name="<?php echo esc_attr( $field['id'] . '[plain]' ); ?>"
117
  class="code" cols="25" rows="20"
118
+ style="width: 97%;"><?php echo wp_kses_post( $content_plain ); ?>
119
  </textarea>
120
  </div>
121
  <?php endif; ?>
123
 
124
  <?php if ( ! $has_local_file ) : ?>
125
  <?php if ( $field['support_variables'] ) : ?>
126
+ <ol class="learn-press-email-variables<?php echo esc_html( $template_type == 'html' ? ' has-editor' : '' ); ?>"
127
  data-target="<?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>">
128
  <?php foreach ( $field['support_variables'] as $variable ) : ?>
129
  <li data-variable="<?php echo esc_attr( $variable ); ?>">
130
+ <code><?php echo esc_html( $variable ); ?></code></li>
131
  <?php endforeach; ?>
132
  </ol>
133
 
inc/admin/meta-box/fields/html.php CHANGED
@@ -1,8 +1,14 @@
 
 
 
 
 
 
1
  <tr valign="top">
2
  <th scope="row" class="titledesc">
3
- <label><?php echo $value['title']; ?> <?php echo $tooltip_html; ?></label>
4
  </th>
5
- <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
6
  <?php echo $value['default']; ?>
7
  </td>
8
  </tr>
1
+ <?php
2
+ if ( ! isset( $value ) || ! isset( $tooltip_html ) ) {
3
+ return;
4
+ }
5
+ ?>
6
+
7
  <tr valign="top">
8
  <th scope="row" class="titledesc">
9
+ <label><?php echo wp_kses_post( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
10
  </th>
11
+ <td class="forminp forminp-<?php echo esc_attr( $value['type'] ); ?>">
12
  <?php echo $value['default']; ?>
13
  </td>
14
  </tr>
inc/admin/meta-box/fields/image-advanced.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
- <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo $value['title']; ?> <?php echo $tooltip_html; ?></label>
6
  </th>
7
  <td class="forminp lp-metabox-field__image-advanced forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">&lrm;
8
  <ul class="lp-metabox-field__image-advanced-images">
@@ -20,7 +20,7 @@
20
  }
21
  ?>
22
  <li class="image" data-attachment_id="<?php echo esc_attr( $attachment_id ); ?>">
23
- <?php echo $attachment; ?>
24
  <ul class="actions">
25
  <li><a href="#" class="delete"><?php esc_html_e( 'Delete', 'learnpress' ); ?></a></li>
26
  </ul>
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
+ <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo wp_kses_post( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
6
  </th>
7
  <td class="forminp lp-metabox-field__image-advanced forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">&lrm;
8
  <ul class="lp-metabox-field__image-advanced-images">
20
  }
21
  ?>
22
  <li class="image" data-attachment_id="<?php echo esc_attr( $attachment_id ); ?>">
23
+ <?php echo wp_kses_post( $attachment ); ?>
24
  <ul class="actions">
25
  <li><a href="#" class="delete"><?php esc_html_e( 'Delete', 'learnpress' ); ?></a></li>
26
  </ul>
inc/admin/meta-box/fields/list-emails.php CHANGED
@@ -32,9 +32,9 @@
32
  }
33
  ?>
34
 
35
- <tr id="email-<?php echo $email->id; ?>">
36
- <td class="status <?php echo $email->enable ? 'enabled' : ''; ?>">
37
- <span class="change-email-status dashicons dashicons-yes" data-status="<?php echo $email->enable ? 'on' : 'off'; ?>" data-id="<?php echo $email->id; ?>"></span>
38
  </td>
39
  <td class="name">
40
  <a href="<?php echo esc_url_raw( $url ); ?>">
@@ -42,12 +42,12 @@
42
  if ( $group ) {
43
  echo join( ' &rarr; ', array( $group, $email->title ) );
44
  } else {
45
- echo $email->title;
46
  }
47
  ?>
48
  </a>
49
  </td>
50
- <td class="description"><?php echo $email->description; ?></td>
51
  <td class="manage"><a class="button" href="<?php echo esc_url_raw( $url ); ?>"><?php esc_html_e( 'Manage', 'learnpress' ); ?></a></td>
52
  </tr>
53
  <?php } ?>
32
  }
33
  ?>
34
 
35
+ <tr id="email-<?php echo esc_attr( $email->id ); ?>">
36
+ <td class="status <?php echo esc_attr( $email->enable ? 'enabled' : '' ); ?>">
37
+ <span class="change-email-status dashicons dashicons-yes" data-status="<?php echo esc_attr( $email->enable ? 'on' : 'off' ); ?>" data-id="<?php echo esc_attr( $email->id ); ?>"></span>
38
  </td>
39
  <td class="name">
40
  <a href="<?php echo esc_url_raw( $url ); ?>">
42
  if ( $group ) {
43
  echo join( ' &rarr; ', array( $group, $email->title ) );
44
  } else {
45
+ echo wp_kses_post( $email->title );
46
  }
47
  ?>
48
  </a>
49
  </td>
50
+ <td class="description"><?php echo wp_kses_post( $email->description ); ?></td>
51
  <td class="manage"><a class="button" href="<?php echo esc_url_raw( $url ); ?>"><?php esc_html_e( 'Manage', 'learnpress' ); ?></a></td>
52
  </tr>
53
  <?php } ?>
inc/admin/meta-box/fields/pages-dropdown.php CHANGED
@@ -10,7 +10,7 @@ $page_dropdown_args = array(
10
 
11
  <tr valign="top">
12
  <th scope="row" class="titledesc">
13
- <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo $value['title']; ?> <?php echo $tooltip_html; ?></label>
14
  </th>
15
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">&lrm;
16
  <?php learn_press_pages_dropdown( $page_dropdown_args ); ?>
10
 
11
  <tr valign="top">
12
  <th scope="row" class="titledesc">
13
+ <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo wp_kses_post( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
14
  </th>
15
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">&lrm;
16
  <?php learn_press_pages_dropdown( $page_dropdown_args ); ?>
inc/admin/meta-box/fields/payment-order.php CHANGED
@@ -20,9 +20,9 @@
20
  <?php echo esc_html( $gateway->get_method_title() ); ?>
21
  </a>
22
  </td>
23
- <td class="id"><?php echo $gateway->get_id(); ?></td>
24
- <td class="description"><?php echo $gateway->get_method_description(); ?></td>
25
- <td class="status<?php echo $gateway->is_enabled() ? ' enabled' : ''; ?>">
26
  <span class="dashicons dashicons-yes"></span>
27
  <input type="hidden" name="payment-order" value="<?php echo esc_attr( $gateway->get_id() ); ?>"/>
28
  </td>
20
  <?php echo esc_html( $gateway->get_method_title() ); ?>
21
  </a>
22
  </td>
23
+ <td class="id"><?php echo esc_html( $gateway->get_id() ); ?></td>
24
+ <td class="description"><?php echo wp_kses_post( $gateway->get_method_description() ); ?></td>
25
+ <td class="status<?php echo esc_attr( $gateway->is_enabled() ? ' enabled' : '' ); ?>">
26
  <span class="dashicons dashicons-yes"></span>
27
  <input type="hidden" name="payment-order" value="<?php echo esc_attr( $gateway->get_id() ); ?>"/>
28
  </td>
inc/admin/meta-box/fields/radio.php CHANGED
@@ -2,11 +2,11 @@
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
- <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
6
  </th>
7
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
8
  <fieldset>
9
- <?php echo $description; ?>
10
  <ul>
11
  <?php
12
  foreach ( $value['options'] as $key => $val ) {
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
+ <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
6
  </th>
7
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
8
  <fieldset>
9
+ <?php echo wp_kses_post( $description ); ?>
10
  <ul>
11
  <?php
12
  foreach ( $value['options'] as $key => $val ) {
inc/admin/meta-box/fields/select-page.php CHANGED
@@ -18,9 +18,9 @@ if ( isset( $value['args'] ) ) {
18
 
19
  <tr valign="top" class="single_select_page">
20
  <th scope="row" class="titledesc">
21
- <label><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
22
  </th>
23
  <td class="forminp">
24
- <?php echo str_replace( ' id=', " data-placeholder='" . esc_attr__( 'Select a page&hellip;', 'learnpress' ) . "' style='" . $value['css'] . "' class='" . $value['class'] . "' id=", wp_dropdown_pages( $args ) ); ?> <?php echo $description; ?>
25
  </td>
26
  </tr>
18
 
19
  <tr valign="top" class="single_select_page">
20
  <th scope="row" class="titledesc">
21
+ <label><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
22
  </th>
23
  <td class="forminp">
24
+ <?php echo str_replace( ' id=', " data-placeholder='" . esc_attr__( 'Select a page&hellip;', 'learnpress' ) . "' style='" . $value['css'] . "' class='" . $value['class'] . "' id=", wp_dropdown_pages( $args ) ); ?> <?php echo wp_kses_post( $description ); ?>
25
  </td>
26
  </tr>
inc/admin/meta-box/fields/select.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
- <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
6
  </th>
7
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
8
  <select
@@ -10,24 +10,24 @@
10
  id="<?php echo esc_attr( $value['id'] ); ?>"
11
  style="<?php echo esc_attr( $value['css'] ); ?>"
12
  class="<?php echo esc_attr( $value['class'] ); ?>"
13
- <?php echo implode( ' ', $custom_attributes ); ?>
14
- <?php echo 'multiselect' === $value['type'] ? 'multiple="multiple"' : ''; ?>
15
  >
16
- <?php foreach ( $value['options'] as $key => $val ) { ?>
17
  <option value="<?php echo esc_attr( $key ); ?>"
18
- <?php
19
 
20
- if ( is_array( $option_value ) ) {
21
- selected( in_array( (string) $key, $option_value, true ), true );
22
- } else {
23
- selected( $option_value, (string) $key );
24
- }
25
 
26
- ?>
27
  ><?php echo esc_html( $val ); ?></option>
28
  <?php
29
- }
30
- ?>
31
- </select> <?php echo $description; ?>
32
  </td>
33
  </tr>
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
+ <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
6
  </th>
7
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
8
  <select
10
  id="<?php echo esc_attr( $value['id'] ); ?>"
11
  style="<?php echo esc_attr( $value['css'] ); ?>"
12
  class="<?php echo esc_attr( $value['class'] ); ?>"
13
+ <?php echo esc_attr( implode( ' ', $custom_attributes ) ); ?>
14
+ <?php echo 'multiselect' === $value['type'] ? 'multiple="multiple"' : ''; ?>
15
  >
16
+ <?php foreach ( $value['options'] as $key => $val ) { ?>
17
  <option value="<?php echo esc_attr( $key ); ?>"
18
+ <?php
19
 
20
+ if ( is_array( $option_value ) ) {
21
+ selected( in_array( (string) $key, $option_value, true ), true );
22
+ } else {
23
+ selected( $option_value, (string) $key );
24
+ }
25
 
26
+ ?>
27
  ><?php echo esc_html( $val ); ?></option>
28
  <?php
29
+ }
30
+ ?>
31
+ </select> <?php echo wp_kses_post( $description ); ?>
32
  </td>
33
  </tr>
inc/admin/meta-box/fields/textarea.php CHANGED
@@ -2,10 +2,10 @@
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
- <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo $tooltip_html; ?></label>
6
  </th>
7
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
8
- <?php echo $description; ?>
9
 
10
  <textarea
11
  name="<?php echo esc_attr( $value['id'] ); ?>"
@@ -13,7 +13,7 @@
13
  style="<?php echo esc_attr( $value['css'] ); ?>"
14
  class="<?php echo esc_attr( $value['class'] ); ?>"
15
  placeholder="<?php echo esc_attr( $value['placeholder'] ); ?>"
16
- <?php echo implode( ' ', $custom_attributes ); ?>
17
- ><?php echo $option_value; ?></textarea>
18
  </td>
19
  </tr>
2
 
3
  <tr valign="top">
4
  <th scope="row" class="titledesc">
5
+ <label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo esc_html( $value['title'] ); ?> <?php echo wp_kses_post( $tooltip_html ); ?></label>
6
  </th>
7
  <td class="forminp forminp-<?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>">
8
+ <?php echo wp_kses_post( $description ); ?>
9
 
10
  <textarea
11
  name="<?php echo esc_attr( $value['id'] ); ?>"
13
  style="<?php echo esc_attr( $value['css'] ); ?>"
14
  class="<?php echo esc_attr( $value['class'] ); ?>"
15
  placeholder="<?php echo esc_attr( $value['placeholder'] ); ?>"
16
+ <?php echo esc_attr( implode( ' ', $custom_attributes ) ); ?>
17
+ ><?php echo wp_kses_post( $option_value ); ?></textarea>
18
  </td>
19
  </tr>
inc/admin/settings/class-lp-settings-advanced.php CHANGED
@@ -99,13 +99,13 @@ class LP_Settings_Advanced extends LP_Abstract_Settings_Page {
99
  // 'type' => 'checkbox',
100
  // 'desc' => esc_html__( 'Enable Rest API build for app, mobile...etc.', 'learnpress' ),
101
  // ),
102
- array(
103
  'title' => esc_html__( 'Hard Cache', 'learnpress' ),
104
  'id' => 'enable_hard_cache',
105
  'default' => 'no',
106
  'type' => 'checkbox',
107
  'desc' => sprintf( __( 'Enable cache for static content such as content and settings of course, lesson, quiz. <a href="%1$s">%2$s</a>', 'learnpress' ), admin_url( 'admin.php?page=learn-press-tools&tab=cache' ), esc_html__( 'Advanced', 'learnpress' ) ),
108
- ),
109
  array(
110
  'title' => esc_html__( 'Enable', 'learnpress' ),
111
  'id' => 'navigation_position',
99
  // 'type' => 'checkbox',
100
  // 'desc' => esc_html__( 'Enable Rest API build for app, mobile...etc.', 'learnpress' ),
101
  // ),
102
+ /*array(
103
  'title' => esc_html__( 'Hard Cache', 'learnpress' ),
104
  'id' => 'enable_hard_cache',
105
  'default' => 'no',
106
  'type' => 'checkbox',
107
  'desc' => sprintf( __( 'Enable cache for static content such as content and settings of course, lesson, quiz. <a href="%1$s">%2$s</a>', 'learnpress' ), admin_url( 'admin.php?page=learn-press-tools&tab=cache' ), esc_html__( 'Advanced', 'learnpress' ) ),
108
+ ),*/
109
  array(
110
  'title' => esc_html__( 'Enable', 'learnpress' ),
111
  'id' => 'navigation_position',
inc/admin/settings/class-lp-settings-emails.php CHANGED
@@ -124,13 +124,6 @@ class LP_Settings_Emails extends LP_Abstract_Settings_Page {
124
  'type' => 'text',
125
  'css' => 'width:400px',
126
  ),
127
- // array(
128
- // 'title' => esc_html__( '"From" address', 'learnpress' ),
129
- // 'id' => 'emails_general[from_email]',
130
- // 'default' => get_option( 'admin_email' ),
131
- // 'type' => 'email',
132
- // 'css' => 'width:400px',
133
- // ),
134
  array(
135
  'type' => 'sectionend',
136
  ),
124
  'type' => 'text',
125
  'css' => 'width:400px',
126
  ),
 
 
 
 
 
 
 
127
  array(
128
  'type' => 'sectionend',
129
  ),
inc/admin/settings/email-groups/class-lp-settings-emails-group.php CHANGED
@@ -59,9 +59,9 @@ class LP_Settings_Emails_Group extends LP_Settings {
59
  continue;
60
  }
61
  if ( $current == $email->id ) {
62
- echo '<li class="active"><span>' . $email . '</span></li>';
63
  } else {
64
- echo '<li><a href="' . esc_url_raw( add_query_arg( 'sub-section', $email->id ) ) . '">' . $email . '</a></li>';
65
  }
66
  }
67
 
@@ -90,7 +90,7 @@ class LP_Settings_Emails_Group extends LP_Settings {
90
  public function get_current_section() {
91
  $ids = array_keys( $this->items );
92
 
93
- return ! empty( $_REQUEST['sub-section'] ) ? $_REQUEST['sub-section'] : reset( $ids );
94
  }
95
 
96
  public function __toString() {
59
  continue;
60
  }
61
  if ( $current == $email->id ) {
62
+ echo '<li class="active"><span>' . wp_kses_post( $email->title ) . '</span></li>';
63
  } else {
64
+ echo '<li><a href="' . esc_url_raw( add_query_arg( 'sub-section', $email->id ) ) . '">' . wp_kses_post( $email->title ) . '</a></li>';
65
  }
66
  }
67
 
90
  public function get_current_section() {
91
  $ids = array_keys( $this->items );
92
 
93
+ return ! empty( $_REQUEST['sub-section'] ) ? sanitize_text_field( $_REQUEST['sub-section'] ) : reset( $ids );
94
  }
95
 
96
  public function __toString() {
inc/admin/settings/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/admin/sub-menus/abstract-submenu.php CHANGED
@@ -263,7 +263,7 @@ abstract class LP_Abstract_Submenu {
263
  */
264
  public function get_active_page( $prefix = true ) {
265
  if ( false === $this->page ) {
266
- $this->page = ! empty( $_REQUEST['page'] ) ? $_REQUEST['page'] : null;
267
  }
268
 
269
  return $prefix ? $this->page : str_replace( 'learn-press-', '', $this->page );
@@ -299,11 +299,11 @@ abstract class LP_Abstract_Submenu {
299
  $classes = array( 'wrap', 'lp-submenu-page', $this->get_id() );
300
  ?>
301
 
302
- <div class="<?php echo implode( ' ', $classes ); ?>">
303
  <?php do_action( 'learn-press/admin/heading-icon', $active_tab ); ?>
304
 
305
  <h1 class="wp-heading-inline">
306
- <?php echo $this->get_menu_title(); ?>
307
  <?php do_action( 'learn-press/admin/heading-title', $active_tab ); ?>
308
  </h1>
309
 
@@ -315,8 +315,8 @@ abstract class LP_Abstract_Submenu {
315
 
316
  if ( is_object( $name ) ) {
317
  $obj_tab = $name;
318
- $name = $obj_tab->text;
319
- $tab = $obj_tab->id;
320
  }
321
 
322
  $active_class = ( $tab == $active_tab ) ? ' nav-tab-active' : '';
@@ -324,9 +324,9 @@ abstract class LP_Abstract_Submenu {
324
  ?>
325
 
326
  <?php if ( $active_class ) { ?>
327
- <span class="nav-tab<?php echo esc_attr( $active_class ); ?>"><?php echo $tab_title; ?></span>
328
  <?php } else { ?>
329
- <a class="nav-tab" href="?page=<?php echo $this->id; ?>&tab=<?php echo $tab; ?>"><?php echo $tab_title; ?></a>
330
  <?php } ?>
331
  <?php } ?>
332
  </h2>
@@ -341,7 +341,7 @@ abstract class LP_Abstract_Submenu {
341
  }
342
  ?>
343
 
344
- <form class="<?php echo implode( ' ', $classes ); ?>" method="post" enctype="multipart/form-data">
345
  <?php $this->page_content(); ?>
346
  </form>
347
  </div>
@@ -403,11 +403,11 @@ abstract class LP_Abstract_Submenu {
403
  $section_title = apply_filters( 'learn-press/admin/submenu-section-title', $section, $slug );
404
  ?>
405
 
406
- <li class="nav-section<?php echo $active_class; ?>">
407
  <?php if ( $active_class ) { ?>
408
- <span><?php echo $section_title; ?></span>
409
  <?php } else { ?>
410
- <a href="<?php echo esc_url_raw( remove_query_arg( 'sub-section', add_query_arg( 'section', $slug ) ) ); ?>"><?php echo $section_title; ?></a>
411
  <?php } ?>
412
  </li>
413
  <?php } ?>
263
  */
264
  public function get_active_page( $prefix = true ) {
265
  if ( false === $this->page ) {
266
+ $this->page = ! empty( $_REQUEST['page'] ) ? sanitize_text_field( $_REQUEST['page'] ) : null;
267
  }
268
 
269
  return $prefix ? $this->page : str_replace( 'learn-press-', '', $this->page );
299
  $classes = array( 'wrap', 'lp-submenu-page', $this->get_id() );
300
  ?>
301
 
302
+ <div class="<?php echo esc_attr( implode( ' ', $classes ) ); ?>">
303
  <?php do_action( 'learn-press/admin/heading-icon', $active_tab ); ?>
304
 
305
  <h1 class="wp-heading-inline">
306
+ <?php echo wp_kses_post( $this->get_menu_title() ); ?>
307
  <?php do_action( 'learn-press/admin/heading-title', $active_tab ); ?>
308
  </h1>
309
 
315
 
316
  if ( is_object( $name ) ) {
317
  $obj_tab = $name;
318
+ $name = $obj_tab->text;
319
+ $tab = $obj_tab->id;
320
  }
321
 
322
  $active_class = ( $tab == $active_tab ) ? ' nav-tab-active' : '';
324
  ?>
325
 
326
  <?php if ( $active_class ) { ?>
327
+ <span class="nav-tab<?php echo esc_attr( $active_class ); ?>"><?php echo esc_html( $tab_title ); ?></span>
328
  <?php } else { ?>
329
+ <a class="nav-tab" href="?page=<?php echo esc_attr( $this->id ); ?>&tab=<?php echo esc_attr( $tab ); ?>"><?php echo esc_html( $tab_title ); ?></a>
330
  <?php } ?>
331
  <?php } ?>
332
  </h2>
341
  }
342
  ?>
343
 
344
+ <form class="<?php echo esc_attr( implode( ' ', $classes ) ); ?>" method="post" enctype="multipart/form-data">
345
  <?php $this->page_content(); ?>
346
  </form>
347
  </div>
403
  $section_title = apply_filters( 'learn-press/admin/submenu-section-title', $section, $slug );
404
  ?>
405
 
406
+ <li class="nav-section<?php echo esc_attr( $active_class ); ?>">
407
  <?php if ( $active_class ) { ?>
408
+ <span><?php echo wp_kses_post( $section_title ); ?></span>
409
  <?php } else { ?>
410
+ <a href="<?php echo esc_url_raw( remove_query_arg( 'sub-section', add_query_arg( 'section', $slug ) ) ); ?>"><?php echo wp_kses_post( $section_title ); ?></a>
411
  <?php } ?>
412
  </li>
413
  <?php } ?>
inc/admin/sub-menus/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/admin/views/addons/html-plugins-more.php CHANGED
@@ -13,7 +13,7 @@ $last_checked = LP_Background_Query_Items::instance()->get_last_checked( 'plugin
13
  $check_url = wp_nonce_url( add_query_arg( 'force-check-update', 'yes' ), 'lp-check-updates' );
14
  ?>
15
 
16
- <p><?php printf( __( 'Last checked %s. <a href="%s">Check again</a>', 'learnpress' ), human_time_diff( $last_checked ), $check_url ); ?></p>
17
 
18
  <?php
19
 
@@ -39,23 +39,23 @@ $all_plugins = array(
39
  'key' => 'premium',
40
  'title' => __( 'Premium add-ons', 'learnpress' ),
41
  'items' => $tp_plugins,
42
- )
43
  );
44
 
45
  foreach ( $all_plugins as $plugins ) {
46
- if ( $plugins['items'] ) { ?>
47
- <h2>
 
48
  <?php echo $plugins['title'] . ' (<span>' . sizeof( $plugins['items'] ) . '</span>)'; ?>
49
- </h2>
50
- <ul class="addons-browse widefat">
51
- <?php foreach ( $plugins['items'] as $file => $add_on ) {
 
52
  include learn_press_get_admin_view( 'addons/html-loop-plugin' );
53
- } ?>
54
- </ul>
 
55
  <?php
56
  }
57
  }
58
  ?>
59
-
60
-
61
-
13
  $check_url = wp_nonce_url( add_query_arg( 'force-check-update', 'yes' ), 'lp-check-updates' );
14
  ?>
15
 
16
+ <p><?php printf( __( 'Last checked %1$s. <a href="%2$s">Check again</a>', 'learnpress' ), human_time_diff( $last_checked ), $check_url ); ?></p>
17
 
18
  <?php
19
 
39
  'key' => 'premium',
40
  'title' => __( 'Premium add-ons', 'learnpress' ),
41
  'items' => $tp_plugins,
42
+ ),
43
  );
44
 
45
  foreach ( $all_plugins as $plugins ) {
46
+ if ( $plugins['items'] ) {
47
+ ?>
48
+ <h2>
49
  <?php echo $plugins['title'] . ' (<span>' . sizeof( $plugins['items'] ) . '</span>)'; ?>
50
+ </h2>
51
+ <ul class="addons-browse widefat">
52
+ <?php
53
+ foreach ( $plugins['items'] as $file => $add_on ) {
54
  include learn_press_get_admin_view( 'addons/html-loop-plugin' );
55
+ }
56
+ ?>
57
+ </ul>
58
  <?php
59
  }
60
  }
61
  ?>
 
 
 
inc/admin/views/backend-user-profile.php CHANGED
@@ -35,7 +35,7 @@ $custom_profile = lp_get_user_custom_register_fields( $user->ID );
35
  ?>
36
  <tr>
37
  <th>
38
- <label for="learn-press-custom-register-<?php echo $field['id']; ?>"><?php echo esc_html( $field['name'] ); ?></label>
39
  </th>
40
  <td>
41
  <?php
@@ -72,10 +72,13 @@ $custom_profile = lp_get_user_custom_register_fields( $user->ID );
72
  ?>
73
  <tr>
74
  <th>
75
- <label for="learn-press-user-profile-<?php echo $key; ?>"><?php echo esc_html( $label ); ?></label>
76
  </th>
77
  <td>
78
- <input id="learn-press-user-profile-<?php echo $key; ?>" class="regular-text" type="<?php echo $type; ?>" value="<?php echo isset( $extra_profile[ $key ] ) ? $extra_profile[ $key ] : ''; ?>" name="_lp_extra_info[<?php echo $key; ?>]">
 
 
 
79
  </td>
80
  </tr>
81
  <?php } ?>
35
  ?>
36
  <tr>
37
  <th>
38
+ <label for="learn-press-custom-register-<?php echo esc_attr( $field['id'] ); ?>"><?php echo esc_html( $field['name'] ); ?></label>
39
  </th>
40
  <td>
41
  <?php
72
  ?>
73
  <tr>
74
  <th>
75
+ <label for="learn-press-user-profile-<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $label ); ?></label>
76
  </th>
77
  <td>
78
+ <input id="learn-press-user-profile-<?php echo esc_attr( $key ); ?>"
79
+ class="regular-text" type="<?php echo esc_attr( $type ); ?>"
80
+ value="<?php echo esc_attr( $extra_profile[ $key ] ?? '' ); ?>"
81
+ name="_lp_extra_info[<?php echo esc_attr( $key ); ?>]">
82
  </td>
83
  </tr>
84
  <?php } ?>
inc/admin/views/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/admin/views/meta-boxes/course/settings.php CHANGED
@@ -517,7 +517,7 @@ class LP_Meta_Box_Course extends LP_Meta_Box {
517
  foreach ( $tab_content['content'] as $meta_key => $object ) {
518
  if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
519
  $object->id = $meta_key;
520
- echo $object->output( $post->ID );
521
  }
522
  }
523
 
517
  foreach ( $tab_content['content'] as $meta_key => $object ) {
518
  if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
519
  $object->id = $meta_key;
520
+ echo wp_kses_post( $object->output( $post->ID ) );
521
  }
522
  }
523
 
inc/admin/views/meta-boxes/fields/extra-faq.php CHANGED
@@ -27,7 +27,7 @@ class LP_Meta_Box_Extra_Faq_Field extends LP_Meta_Box_Field {
27
  ?>
28
 
29
  <div class="form-field lp_course_faq_meta_box">
30
- <label for="_lp_key_features"><?php echo $this->label; ?></label>
31
  <div class="lp_course_faq_meta_box__content">
32
  <div class="lp_course_faq_meta_box__fields">
33
  <?php if ( ! empty( $faqs[0][0] ) ) : ?>
@@ -39,7 +39,7 @@ class LP_Meta_Box_Extra_Faq_Field extends LP_Meta_Box_Field {
39
  </label>
40
  <label>
41
  <span><?php esc_attr_e( 'Content', 'learnpress' ); ?></span>
42
- <textarea name="_lp_faqs_answer[]"><?php echo $faq[1]; ?></textarea>
43
  </label>
44
  <a href="#" class="delete"></a>
45
  <span class="sort"></span>
27
  ?>
28
 
29
  <div class="form-field lp_course_faq_meta_box">
30
+ <label for="_lp_key_features"><?php echo wp_kses_post( $this->label ); ?></label>
31
  <div class="lp_course_faq_meta_box__content">
32
  <div class="lp_course_faq_meta_box__fields">
33
  <?php if ( ! empty( $faqs[0][0] ) ) : ?>
39
  </label>
40
  <label>
41
  <span><?php esc_attr_e( 'Content', 'learnpress' ); ?></span>
42
+ <textarea name="_lp_faqs_answer[]"><?php echo wp_kses_post( $faq[1] ); ?></textarea>
43
  </label>
44
  <a href="#" class="delete"></a>
45
  <span class="sort"></span>
inc/admin/views/meta-boxes/fields/select.php CHANGED
@@ -101,6 +101,10 @@ class LP_Meta_Box_Select_Field extends LP_Meta_Box_Field {
101
  public function save( $post_id ) {
102
  $multil_meta = isset( $this->extra['multil_meta'] ) ? $this->extra['multil_meta'] : false;
103
 
 
 
 
 
104
  if ( $multil_meta ) {
105
  $get_values = get_post_meta( $post_id, $this->id, false ) ?? array();
106
  $new_values = isset( $_POST[ $this->id ] ) ? (array) wp_unslash( $_POST[ $this->id ] ) : array();
@@ -119,10 +123,6 @@ class LP_Meta_Box_Select_Field extends LP_Meta_Box_Field {
119
  add_post_meta( $post_id, $this->id, $level_id, false );
120
  }
121
  } else {
122
- if ( ! isset( $_POST[ $this->id ] ) ) {
123
- return;
124
- }
125
-
126
  $value = ! empty( $_POST[ $this->id ] ) ? sanitize_text_field( wp_unslash( $_POST[ $this->id ] ) ) : '';
127
 
128
  $multilple = ! empty( $this->extra['multiple'] ) ? true : false;
101
  public function save( $post_id ) {
102
  $multil_meta = isset( $this->extra['multil_meta'] ) ? $this->extra['multil_meta'] : false;
103
 
104
+ if ( ! isset( $_POST[ $this->id ] ) ) {
105
+ return;
106
+ }
107
+
108
  if ( $multil_meta ) {
109
  $get_values = get_post_meta( $post_id, $this->id, false ) ?? array();
110
  $new_values = isset( $_POST[ $this->id ] ) ? (array) wp_unslash( $_POST[ $this->id ] ) : array();
123
  add_post_meta( $post_id, $this->id, $level_id, false );
124
  }
125
  } else {
 
 
 
 
126
  $value = ! empty( $_POST[ $this->id ] ) ? sanitize_text_field( wp_unslash( $_POST[ $this->id ] ) ) : '';
127
 
128
  $multilple = ! empty( $this->extra['multiple'] ) ? true : false;
inc/admin/views/meta-boxes/order/actions.php CHANGED
@@ -32,7 +32,7 @@ global $post;
32
  }
33
  ?>
34
  <a class="submitdelete deletion" href="<?php echo get_delete_post_link( $post->ID ); ?>">
35
- <?php echo $delete_text; ?>
36
  </a>
37
  <?php endif; ?>
38
  </div>
32
  }
33
  ?>
34
  <a class="submitdelete deletion" href="<?php echo get_delete_post_link( $post->ID ); ?>">
35
+ <?php echo esc_html( $delete_text ); ?>
36
  </a>
37
  <?php endif; ?>
38
  </div>
inc/admin/views/meta-boxes/order/content-tab-preview-exports-invoice.php CHANGED
@@ -19,29 +19,29 @@ wp_enqueue_script( 'learnpress-jspdf' );
19
  ?>
20
 
21
  <div class="lp-invoice__header">
22
- <div class="lp-invoice__hleft">
23
- <h1><?php echo esc_html__( 'Invoice', 'learnpress' ); ?></h1>
24
- </div>
25
- <div class="lp-invoice__hright">
26
  <?php
27
- if ( ! isset( $_POST['site_title'] ) || ( isset( $_POST['site_title'] ) && LP_Helper::sanitize_params_submitted( $_POST['site_title'] ) === 'check' ) ) {
28
  echo wp_sprintf( '<p>%s</p>', esc_html( get_bloginfo( 'name' ) ) );
29
  }
30
- if ( ! isset( $_POST['order_date'] ) || ( isset( $_POST['order_date'] ) && LP_Helper::sanitize_params_submitted( $_POST['order_date'] ) === 'check' ) ) {
31
- echo wp_sprintf( '<p class="date">%s: %s</p>', esc_html__( 'Order Date', 'learnpress' ), date( 'd-m-Y h:i:s', esc_attr( $order->get_order_date( 'timestamp' ) ) ) );
32
  }
33
- if ( ! isset( $_POST['invoice_no'] ) || ( isset( $_POST['invoice_no'] ) && LP_Helper::sanitize_params_submitted( $_POST['invoice_no'] ) === 'check' ) ) {
34
  echo wp_sprintf( '<p class="invoice-no">%s: %s</p>', esc_html__( 'Invoice No.', 'learnpress' ), esc_attr( $order->get_order_number() ) );
35
  }
36
- if ( ! isset( $_POST['order_customer'] ) || ( isset( $_POST['order_customer'] ) && LP_Helper::sanitize_params_submitted( $_POST['order_customer'] ) === 'check' ) ) {
37
  echo wp_sprintf( '<p class="invoice-customer">%s: %s</p>', esc_html__( 'Customer', 'learnpress' ), esc_html( $order->get_customer_name() ) );
38
  }
39
- if ( ! isset( $_POST['order_email'] ) || ( isset( $_POST['order_email'] ) && LP_Helper::sanitize_params_submitted( $_POST['order_email'] ) === 'check' ) ) {
40
  echo wp_sprintf( '<p class="invoice-email">%s: %s</p>', esc_html__( 'Email', 'learnpress' ), esc_html( $order->get_user( 'email' ) ) );
41
  }
42
  ?>
43
- <?php if ( ! isset( $_POST['order_payment'] ) || ( isset( $_POST['order_payment'] ) && LP_Helper::sanitize_params_submitted( $_POST['order_payment'] ) === 'check' ) ): ?>
44
- <p class="invoice-method">
45
  <?php
46
  $method_title = $order->get_payment_method_title();
47
  $user_ip = $order->get_user_ip_address();
@@ -51,60 +51,62 @@ wp_enqueue_script( 'learnpress-jspdf' );
51
  printf( 'Pay via <strong>%s</strong>', apply_filters( 'learn-press/order-payment-method-title', $method_title, $order ) );
52
  } elseif ( $user_ip ) {
53
  printf( 'User IP <strong>%s</strong>', $user_ip );
54
- } ?>
55
- </p>
 
56
  <?php endif; ?>
57
- </div>
58
  </div>
59
  <div class="lp-invoice__body">
60
- <h4 class="order-data-heading"><?php echo esc_html__( 'Order details', 'learnpress' ); ?></h4>
61
- <div class="order-items">
62
- <table id="tab_customers" class="table table-striped list-order-items">
63
- <colgroup>
64
- <col width="40%">
65
- <col width="20%">
66
- <col width="20%">
67
- <col width="20%">
68
- </colgroup>
69
- <thead>
70
- <tr class='warning'>
71
- <th class="column-name"><?php _e( 'Item', 'learnpress' ); ?></th>
72
- <th class="column-price"><?php _e( 'Cost', 'learnpress' ); ?></th>
73
- <th class="column-quantity"><?php _e( 'Quantity', 'learnpress' ); ?></th>
74
- <th class="column-total align-right"><?php _e( 'Amount', 'learnpress' ); ?></th>
75
- </tr>
76
- </thead>
77
- <tbody>
78
  <?php
79
  $filter = array(
80
  'p' => 0,
81
- 'limit' => '9999'
82
  );
83
- if ( $items = $order->get_items_filter( $filter ) ): ?>
 
84
  <?php foreach ( $items as $item ) : ?>
85
- <tr>
86
- <td><?php echo esc_html( $item['name'] ); ?></td>
87
- <td><?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?></td>
88
- <td>x <?php echo isset( $item['quantity'] ) ? $item['quantity'] : 0; ?></td>
89
- <td><?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?></td>
90
- </tr>
91
  <?php endforeach; ?>
92
  <?php endif; ?>
93
- </tbody>
94
- <tfoot>
95
- <tr>
96
- <td></td>
97
- <td></td>
98
- <td><?php echo esc_html__( 'Sub Total', 'learnpress' ); ?></td>
99
- <td><?php echo learn_press_format_price( $order->order_subtotal, $currency_symbol ); ?></td>
100
- </tr>
101
- <tr>
102
- <td></td>
103
- <td></td>
104
- <td><?php _e( 'Total', 'learnpress' ); ?></td>
105
- <td><?php echo learn_press_format_price( $order->order_total, $currency_symbol ); ?></td>
106
- </tr>
107
- </tfoot>
108
- </table>
109
- </div>
110
- </div>
19
  ?>
20
 
21
  <div class="lp-invoice__header">
22
+ <div class="lp-invoice__hleft">
23
+ <h1><?php echo esc_html__( 'Invoice', 'learnpress' ); ?></h1>
24
+ </div>
25
+ <div class="lp-invoice__hright">
26
  <?php
27
+ if ( ! isset( $_POST['site_title'] ) || LP_Helper::sanitize_params_submitted( $_POST['site_title'] ) === 'check' ) {
28
  echo wp_sprintf( '<p>%s</p>', esc_html( get_bloginfo( 'name' ) ) );
29
  }
30
+ if ( ! isset( $_POST['order_date'] ) || LP_Helper::sanitize_params_submitted( $_POST['order_date'] ) === 'check' ) {
31
+ echo wp_sprintf( '<p class="date">%s: %s</p>', esc_html__( 'Order Date', 'learnpress' ), gmdate( 'd-m-Y h:i:s', esc_attr( $order->get_order_date( 'timestamp' ) ) ) );
32
  }
33
+ if ( ! isset( $_POST['invoice_no'] ) || LP_Helper::sanitize_params_submitted( $_POST['invoice_no'] ) === 'check' ) {
34
  echo wp_sprintf( '<p class="invoice-no">%s: %s</p>', esc_html__( 'Invoice No.', 'learnpress' ), esc_attr( $order->get_order_number() ) );
35
  }
36
+ if ( ! isset( $_POST['order_customer'] ) || LP_Helper::sanitize_params_submitted( $_POST['order_customer'] ) === 'check' ) {
37
  echo wp_sprintf( '<p class="invoice-customer">%s: %s</p>', esc_html__( 'Customer', 'learnpress' ), esc_html( $order->get_customer_name() ) );
38
  }
39
+ if ( ! isset( $_POST['order_email'] ) || LP_Helper::sanitize_params_submitted( $_POST['order_email'] ) === 'check' ) {
40
  echo wp_sprintf( '<p class="invoice-email">%s: %s</p>', esc_html__( 'Email', 'learnpress' ), esc_html( $order->get_user( 'email' ) ) );
41
  }
42
  ?>
43
+ <?php if ( ! isset( $_POST['order_payment'] ) || LP_Helper::sanitize_params_submitted( $_POST['order_payment'] ) === 'check' ) : ?>
44
+ <p class="invoice-method">
45
  <?php
46
  $method_title = $order->get_payment_method_title();
47
  $user_ip = $order->get_user_ip_address();
51
  printf( 'Pay via <strong>%s</strong>', apply_filters( 'learn-press/order-payment-method-title', $method_title, $order ) );
52
  } elseif ( $user_ip ) {
53
  printf( 'User IP <strong>%s</strong>', $user_ip );
54
+ }
55
+ ?>
56
+ </p>
57
  <?php endif; ?>
58
+ </div>
59
  </div>
60
  <div class="lp-invoice__body">
61
+ <h4 class="order-data-heading"><?php echo esc_html__( 'Order details', 'learnpress' ); ?></h4>
62
+ <div class="order-items">
63
+ <table id="tab_customers" class="table table-striped list-order-items">
64
+ <colgroup>
65
+ <col width="40%">
66
+ <col width="20%">
67
+ <col width="20%">
68
+ <col width="20%">
69
+ </colgroup>
70
+ <thead>
71
+ <tr class='warning'>
72
+ <th class="column-name"><?php _e( 'Item', 'learnpress' ); ?></th>
73
+ <th class="column-price"><?php _e( 'Cost', 'learnpress' ); ?></th>
74
+ <th class="column-quantity"><?php _e( 'Quantity', 'learnpress' ); ?></th>
75
+ <th class="column-total align-right"><?php _e( 'Amount', 'learnpress' ); ?></th>
76
+ </tr>
77
+ </thead>
78
+ <tbody>
79
  <?php
80
  $filter = array(
81
  'p' => 0,
82
+ 'limit' => '9999',
83
  );
84
+ if ( $items = $order->get_items_filter( $filter ) ) :
85
+ ?>
86
  <?php foreach ( $items as $item ) : ?>
87
+ <tr>
88
+ <td><?php echo esc_html( $item['name'] ); ?></td>
89
+ <td><?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?></td>
90
+ <td>x <?php echo isset( $item['quantity'] ) ? $item['quantity'] : 0; ?></td>
91
+ <td><?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?></td>
92
+ </tr>
93
  <?php endforeach; ?>
94
  <?php endif; ?>
95
+ </tbody>
96
+ <tfoot>
97
+ <tr>
98
+ <td></td>
99
+ <td></td>
100
+ <td><?php echo esc_html__( 'Sub Total', 'learnpress' ); ?></td>
101
+ <td><?php echo learn_press_format_price( $order->order_subtotal, $currency_symbol ); ?></td>
102
+ </tr>
103
+ <tr>
104
+ <td></td>
105
+ <td></td>
106
+ <td><?php _e( 'Total', 'learnpress' ); ?></td>
107
+ <td><?php echo learn_press_format_price( $order->order_total, $currency_symbol ); ?></td>
108
+ </tr>
109
+ </tfoot>
110
+ </table>
111
+ </div>
112
+ </div>
inc/admin/views/meta-boxes/order/details.php CHANGED
@@ -81,7 +81,7 @@ $user_ip = $order->get_user_ip_address();
81
  <div class="order-users">
82
  <?php if ( $order->is_multi_users() ) : ?>
83
  <label><?php esc_html_e( 'Customers:', 'learnpress' ); ?></label>
84
- <ul id="list-users" class="advanced-list <?php echo $order->get_status() === 'completed' ? 'locked' : ''; ?>">
85
  </ul>
86
 
87
  <?php if ( 'pending' === $order->get_status() ) : ?>
@@ -101,11 +101,11 @@ $user_ip = $order->get_user_ip_address();
101
  printf( '<a href="%s">%s</a>', esc_url_raw( add_query_arg( 'user_id', absint( $order->get_user_id( 'edit' ) ), admin_url( 'user-edit.php' ) ) ), esc_html__( 'Profile', 'learnpress' ) );
102
  }
103
  } else {
104
- echo $order->get_customer_name();
105
  }
106
  ?>
107
 
108
- <input type="hidden" name="order-customer" id="order-customer" value="<?php echo $order->get_user( 'id' ); ?>"/>
109
 
110
  <?php if ( 'pending' === $order->get_status() ) : ?>
111
  <?php echo ' |'; ?>
@@ -236,7 +236,7 @@ $user_ip = $order->get_user_ip_address();
236
  <div class="order-data-field order-data-user">
237
  <label><?php esc_html_e( 'Customer', 'learnpress' ); ?></label>
238
  <div class="order-users">
239
- <ul id="list-users" class="advanced-list <?php echo $order->get_status() === 'completed' ? 'locked' : ''; ?>"></ul>
240
  </div>
241
  <a href="" class="change-user" data-multiple="yes"><?php esc_html_e( 'Add multi users', 'learnpress' ); ?></a>
242
  </div>
81
  <div class="order-users">
82
  <?php if ( $order->is_multi_users() ) : ?>
83
  <label><?php esc_html_e( 'Customers:', 'learnpress' ); ?></label>
84
+ <ul id="list-users" class="advanced-list <?php echo esc_attr( $order->get_status() === 'completed' ? 'locked' : '' ); ?>">
85
  </ul>
86
 
87
  <?php if ( 'pending' === $order->get_status() ) : ?>
101
  printf( '<a href="%s">%s</a>', esc_url_raw( add_query_arg( 'user_id', absint( $order->get_user_id( 'edit' ) ), admin_url( 'user-edit.php' ) ) ), esc_html__( 'Profile', 'learnpress' ) );
102
  }
103
  } else {
104
+ echo wp_kses_post( $order->get_customer_name() );
105
  }
106
  ?>
107
 
108
+ <input type="hidden" name="order-customer" id="order-customer" value="<?php echo esc_attr( $order->get_user( 'id' ) ); ?>"/>
109
 
110
  <?php if ( 'pending' === $order->get_status() ) : ?>
111
  <?php echo ' |'; ?>
236
  <div class="order-data-field order-data-user">
237
  <label><?php esc_html_e( 'Customer', 'learnpress' ); ?></label>
238
  <div class="order-users">
239
+ <ul id="list-users" class="advanced-list <?php echo esc_attr( $order->get_status() === 'completed' ? 'locked' : '' ); ?>"></ul>
240
  </div>
241
  <a href="" class="change-user" data-multiple="yes"><?php esc_html_e( 'Add multi users', 'learnpress' ); ?></a>
242
  </div>
inc/admin/views/meta-boxes/order/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/admin/views/meta-boxes/question/settings.php CHANGED
@@ -54,14 +54,14 @@ class LP_Meta_Box_Question extends LP_Meta_Box {
54
  foreach ( $this->metabox( $post->ID ) as $key => $object ) {
55
  if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
56
  $object->id = $key;
57
- echo $object->output( $post->ID );
58
  } elseif ( is_array( $object ) ) {
59
  $is_old = true;
60
  }
61
  }
62
 
63
  if ( $is_old ) {
64
- lp_meta_box_output( $this->metabox() );
65
  }
66
 
67
  do_action( 'learnpress/question-settings/after' );
54
  foreach ( $this->metabox( $post->ID ) as $key => $object ) {
55
  if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
56
  $object->id = $key;
57
+ echo wp_kses_post( $object->output( $post->ID ) );
58
  } elseif ( is_array( $object ) ) {
59
  $is_old = true;
60
  }
61
  }
62
 
63
  if ( $is_old ) {
64
+ lp_meta_box_output( $this->metabox( $post->ID ) );
65
  }
66
 
67
  do_action( 'learnpress/question-settings/after' );
inc/admin/views/meta-boxes/quiz/settings.php CHANGED
@@ -110,7 +110,7 @@ class LP_Meta_Box_Quiz extends LP_Meta_Box {
110
  foreach ( $this->metabox( $post->ID ) as $key => $object ) {
111
  if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
112
  $object->id = $key;
113
- echo $object->output( $post->ID );
114
  } elseif ( is_array( $object ) ) {
115
  $is_old = true;
116
  }
110
  foreach ( $this->metabox( $post->ID ) as $key => $object ) {
111
  if ( is_a( $object, 'LP_Meta_Box_Field' ) ) {
112
  $object->id = $key;
113
+ echo wp_kses_post( $object->output( $post->ID ) );
114
  } elseif ( is_array( $object ) ) {
115
  $is_old = true;
116
  }
inc/admin/views/modal-search-items.php CHANGED
@@ -5,7 +5,7 @@
5
  </div>
6
  <div class="modal-wrapper">
7
  <div class="modal-container">
8
- <header><?php echo $this->_options['title']; ?></header>
9
  <article>
10
  <input type="text" name="search" @keyup="doSearch" ref="term" value="" placeholder="<?php esc_html_e( 'Search items', 'learnpress' ); ?>" autocomplete="off"/>
11
  <ul class="search-results" @click="selectItem"></ul>
@@ -14,10 +14,10 @@
14
  <div class="search-nav" @click="loadPage" v-if="hasItems">
15
  </div>
16
  <button class="button"
17
- @click="close"><?php echo $this->_options['close_button']; ?></button>
18
  <button class="button button-primary"
19
  @click="addItems"
20
- v-if="selected.length"><?php echo $this->_options['add_button']; ?></button>
21
  </footer>
22
  </div>
23
  </div>
5
  </div>
6
  <div class="modal-wrapper">
7
  <div class="modal-container">
8
+ <header><?php echo wp_kses_post( $this->_options['title'] ); ?></header>
9
  <article>
10
  <input type="text" name="search" @keyup="doSearch" ref="term" value="" placeholder="<?php esc_html_e( 'Search items', 'learnpress' ); ?>" autocomplete="off"/>
11
  <ul class="search-results" @click="selectItem"></ul>
14
  <div class="search-nav" @click="loadPage" v-if="hasItems">
15
  </div>
16
  <button class="button"
17
+ @click="close"><?php echo wp_kses_post( $this->_options['close_button'] ); ?></button>
18
  <button class="button button-primary"
19
  @click="addItems"
20
+ v-if="selected.length"><?php echo wp_kses_post( $this->_options['add_button'] ); ?></button>
21
  </footer>
22
  </div>
23
  </div>
inc/admin/views/modal-search-users.php CHANGED
@@ -5,7 +5,7 @@
5
  </div>
6
  <div class="modal-wrapper">
7
  <div class="modal-container">
8
- <header><?php echo $this->_options['title']; ?></header>
9
  <article>
10
  <input type="text" name="search" @keyup="doSearch" ref="term" placeholder="<?php esc_html_e( 'Search users', 'learnpress' ); ?>" autocomplete="off"/>
11
  <ul class="search-results" @click="selectItem"></ul>
@@ -14,10 +14,10 @@
14
  <div class="search-nav" @click="loadPage" v-if="hasUsers">
15
  </div>
16
  <button class="button"
17
- @click="close"><?php echo $this->_options['close_button']; ?></button>
18
  <button class="button button-primary"
19
  @click="addUsers"
20
- v-if="selected.length && multiple"><?php echo $this->_options['add_button']; ?></button>
21
  </footer>
22
  </div>
23
  </div>
5
  </div>
6
  <div class="modal-wrapper">
7
  <div class="modal-container">
8
+ <header><?php echo wp_kses_post( $this->_options['title'] ); ?></header>
9
  <article>
10
  <input type="text" name="search" @keyup="doSearch" ref="term" placeholder="<?php esc_html_e( 'Search users', 'learnpress' ); ?>" autocomplete="off"/>
11
  <ul class="search-results" @click="selectItem"></ul>
14
  <div class="search-nav" @click="loadPage" v-if="hasUsers">
15
  </div>
16
  <button class="button"
17
+ @click="close"><?php echo wp_kses_post( $this->_options['close_button'] ); ?></button>
18
  <button class="button button-primary"
19
  @click="addUsers"
20
+ v-if="selected.length && multiple"><?php echo wp_kses_post( $this->_options['add_button'] ); ?></button>
21
  </footer>
22
  </div>
23
  </div>
inc/admin/views/setup/content.php CHANGED
@@ -45,7 +45,7 @@ if ( ! isset( $steps ) ) {
45
  <a class="button button-prev" href="<?php echo esc_url_raw( $wizard->get_prev_url() ); ?>">
46
  <?php
47
  if ( ! empty( $step['next_button'] ) ) {
48
- echo $step['back_button'];
49
  } else {
50
  _e( 'Back', 'learnpress' );
51
  }
@@ -56,7 +56,7 @@ if ( ! isset( $steps ) ) {
56
  <a class="button button-next button-primary" href="<?php echo esc_url_raw( $wizard->get_next_url() ); ?>">
57
  <?php
58
  if ( ! empty( $step['next_button'] ) ) {
59
- echo $step['next_button'];
60
  } else {
61
  _e( 'Continue', 'learnpress' );
62
  }
45
  <a class="button button-prev" href="<?php echo esc_url_raw( $wizard->get_prev_url() ); ?>">
46
  <?php
47
  if ( ! empty( $step['next_button'] ) ) {
48
+ echo wp_kses_post( $step['back_button'] );
49
  } else {
50
  _e( 'Back', 'learnpress' );
51
  }
56
  <a class="button button-next button-primary" href="<?php echo esc_url_raw( $wizard->get_next_url() ); ?>">
57
  <?php
58
  if ( ! empty( $step['next_button'] ) ) {
59
+ echo wp_kses_post( $step['next_button'] );
60
  } else {
61
  _e( 'Continue', 'learnpress' );
62
  }
inc/admin/views/setup/setup-paypal.php CHANGED
@@ -16,7 +16,8 @@ $settings = LP_Settings::instance();
16
  <tr>
17
  <th><?php _e( 'Paypal Email', 'learnpress' ); ?></th>
18
  <td>
19
- <input class="regular-text" type="email" name="settings[paypal][paypal_email]" id="settings-paypal-email" value="<?php echo $settings->get( 'paypal.paypal_email', '' ); ?>">
 
20
  <p class="description">
21
  <?php _e( 'Your Paypal email in live mode.', 'learnpress' ); ?>
22
  </p>
@@ -34,7 +35,7 @@ $settings = LP_Settings::instance();
34
  if ( $payment_currencies ) {
35
  foreach ( $payment_currencies as $code => $symbol ) {
36
  ?>
37
- <option value="<?php echo $code; ?>" data-symbol="<?php echo learn_press_get_currency_symbol( $code ); ?>" <?php selected( $code == 'USD' ); ?>><?php echo $symbol; ?></option>
38
  <?php
39
  }
40
  }
16
  <tr>
17
  <th><?php _e( 'Paypal Email', 'learnpress' ); ?></th>
18
  <td>
19
+ <input class="regular-text" type="email" name="settings[paypal][paypal_email]" id="settings-paypal-email"
20
+ value="<?php echo esc_attr( $settings->get( 'paypal.paypal_email', '' ) ); ?>">
21
  <p class="description">
22
  <?php _e( 'Your Paypal email in live mode.', 'learnpress' ); ?>
23
  </p>
35
  if ( $payment_currencies ) {
36
  foreach ( $payment_currencies as $code => $symbol ) {
37
  ?>
38
+ <option value="<?php echo esc_attr( $code ); ?>" data-symbol="<?php echo learn_press_get_currency_symbol( $code ); ?>" <?php selected( $code == 'USD' ); ?>><?php echo esc_html( $symbol ); ?></option>
39
  <?php
40
  }
41
  }
inc/admin/views/setup/steps/currency.php CHANGED
@@ -18,55 +18,66 @@ $preview_price = '';
18
  <h2><?php _e( 'Currency', 'learnpress' ); ?></h2>
19
 
20
  <table>
21
- <tr>
22
- <th><?php _e( 'Currency', 'learnpress' ); ?></th>
23
- <td>
24
- <select id="currency" name="settings[currency][currency]">
25
  <?php
26
- if ( $payment_currencies = learn_press_currencies() ) {
 
27
  foreach ( $payment_currencies as $code => $symbol ) {
28
  ?>
29
- <option value="<?php echo $code; ?>"
30
- data-symbol="<?php echo learn_press_get_currency_symbol( $code ); ?>" <?php selected( $code == $currency ); ?>><?php echo $symbol; ?></option>
 
 
31
  <?php
32
  }
33
- } ?>
34
- </select>
35
- </td>
36
- </tr>
37
- <tr>
38
- <th><?php _e( 'Currency position', 'learnpress' ); ?></th>
39
- <td>
40
- <select id="currency-pos" name="settings[currency][currency_pos]">
 
41
  <?php
42
  $positions = array();
43
  foreach ( learn_press_currency_positions() as $pos => $text ) {
44
  ?>
45
- <option value="<?php echo $pos; ?>"<?php selected( $pos == $settings->get( 'currency_pos' ) ); ?>><?php echo $text; ?></option><?php
 
46
  }
47
  ?>
48
- </select>
49
- </td>
50
- </tr>
51
- <tr>
52
- <th><?php _e( 'Thousands Separator', 'learnpress' ); ?></th>
53
- <td><input id="thousands-separator" type="text" name="settings[currency][thousands_separator]"
54
- value="<?php echo $settings->get( 'thousands_separator', ',' ); ?>"></td>
55
- </tr>
56
- <tr>
57
- <th><?php _e( 'Decimals Separator', 'learnpress' ); ?></th>
58
- <td><input id="decimals-separator" type="text" name="settings[currency][decimals_separator]"
59
- value="<?php echo $settings->get( 'decimals_separator', '.' ); ?>"></td>
60
- </tr>
61
- <tr>
62
- <th><?php _e( 'Number of Decimals', 'learnpress' ); ?></th>
63
- <td><input id="number-of-decimals" type="text" name="settings[currency][number_of_decimals]"
64
- value="<?php echo $settings->get( 'number_of_decimals', '2' ); ?>"></td>
65
- </tr>
66
- <tr>
67
- <th></th>
68
- <td>
69
- <div id="preview-price"><?php echo learn_press_format_price( 1234.56, true ); ?></div>
70
- </td>
71
- </tr>
 
 
 
 
 
 
72
  </table>
18
  <h2><?php _e( 'Currency', 'learnpress' ); ?></h2>
19
 
20
  <table>
21
+ <tr>
22
+ <th><?php _e( 'Currency', 'learnpress' ); ?></th>
23
+ <td>
24
+ <select id="currency" name="settings[currency][currency]">
25
  <?php
26
+ $payment_currencies = learn_press_currencies();
27
+ if ( $payment_currencies ) {
28
  foreach ( $payment_currencies as $code => $symbol ) {
29
  ?>
30
+ <option value="<?php echo esc_attr( $code ); ?>"
31
+ data-symbol="<?php echo learn_press_get_currency_symbol( $code ); ?>" <?php selected( $code == $currency ); ?>>
32
+ <?php echo wp_kses_post( $symbol ); ?>
33
+ </option>
34
  <?php
35
  }
36
+ }
37
+ ?>
38
+ </select>
39
+ </td>
40
+ </tr>
41
+ <tr>
42
+ <th><?php _e( 'Currency position', 'learnpress' ); ?></th>
43
+ <td>
44
+ <select id="currency-pos" name="settings[currency][currency_pos]">
45
  <?php
46
  $positions = array();
47
  foreach ( learn_press_currency_positions() as $pos => $text ) {
48
  ?>
49
+ <option value="<?php echo esc_attr( $pos ); ?>"<?php selected( $pos == $settings->get( 'currency_pos' ) ); ?>><?php echo wp_kses_post( $text ); ?></option>
50
+ <?php
51
  }
52
  ?>
53
+ </select>
54
+ </td>
55
+ </tr>
56
+ <tr>
57
+ <th><?php _e( 'Thousands Separator', 'learnpress' ); ?></th>
58
+ <td>
59
+ <input id="thousands-separator" type="text" name="settings[currency][thousands_separator]"
60
+ value="<?php echo esc_attr( $settings->get( 'thousands_separator', ',' ) ); ?>">
61
+ </td>
62
+ </tr>
63
+ <tr>
64
+ <th><?php _e( 'Decimals Separator', 'learnpress' ); ?></th>
65
+ <td>
66
+ <input id="decimals-separator" type="text" name="settings[currency][decimals_separator]"
67
+ value="<?php echo esc_attr( $settings->get( 'decimals_separator', '.' ) ); ?>">
68
+ </td>
69
+ </tr>
70
+ <tr>
71
+ <th><?php _e( 'Number of Decimals', 'learnpress' ); ?></th>
72
+ <td>
73
+ <input id="number-of-decimals" type="text" name="settings[currency][number_of_decimals]"
74
+ value="<?php echo esc_attr( $settings->get( 'number_of_decimals', '2' ) ); ?>">
75
+ </td>
76
+ </tr>
77
+ <tr>
78
+ <th></th>
79
+ <td>
80
+ <div id="preview-price"><?php echo learn_press_format_price( 1234.56, true ); ?></div>
81
+ </td>
82
+ </tr>
83
  </table>
inc/admin/views/setup/steps/emails.php CHANGED
@@ -17,8 +17,8 @@ defined( 'ABSPATH' ) or exit;
17
  <p><?php _e( 'You can skip to next step if you don’t want to.', 'learnpress' ); ?></p>
18
 
19
  <p>
20
- <label>
21
- <input type="checkbox" name="settings[emails][enable]" value="yes">
22
  <?php _e( 'Enable emails', 'learnpress' ); ?>
23
- </label>
24
- </p>
17
  <p><?php _e( 'You can skip to next step if you don’t want to.', 'learnpress' ); ?></p>
18
 
19
  <p>
20
+ <label>
21
+ <input type="checkbox" name="settings[emails][enable]" value="yes">
22
  <?php _e( 'Enable emails', 'learnpress' ); ?>
23
+ </label>
24
+ </p>
inc/admin/views/setup/steps/payment.php CHANGED
@@ -19,20 +19,20 @@ $payments = $wizard->get_payments();
19
 
20
  <ul class="browse-payments">
21
  <?php foreach ( $payments as $slug => $payment ) { ?>
22
- <li class="payment payment-<?php echo $slug; ?>">
23
- <h3 class="payment-name">
24
  <?php if ( ! empty( $payment['icon'] ) ) { ?>
25
- <img src="<?php echo $payment['icon']; ?>">
26
  <?php } else { ?>
27
- <?php echo $payment['name']; ?>
28
  <?php } ?>
29
- </h3>
30
  <?php if ( ! empty( $payment['desc'] ) ) { ?>
31
- <p class="payment-desc"><?php echo $payment['desc']; ?></p>
32
  <?php } ?>
33
- <div class="payment-settings">
34
  <?php call_user_func( $payment['callback'] ); ?>
35
- </div>
36
- </li>
37
  <?php } ?>
38
  </ul>
19
 
20
  <ul class="browse-payments">
21
  <?php foreach ( $payments as $slug => $payment ) { ?>
22
+ <li class="payment payment-<?php echo esc_attr( $slug ); ?>">
23
+ <h3 class="payment-name">
24
  <?php if ( ! empty( $payment['icon'] ) ) { ?>
25
+ <img src="<?php echo esc_url_raw( $payment['icon'] ); ?>">
26
  <?php } else { ?>
27
+ <?php echo esc_html( $payment['name'] ); ?>
28
  <?php } ?>
29
+ </h3>
30
  <?php if ( ! empty( $payment['desc'] ) ) { ?>
31
+ <p class="payment-desc"><?php echo wp_kses_post( $payment['desc'] ); ?></p>
32
  <?php } ?>
33
+ <div class="payment-settings">
34
  <?php call_user_func( $payment['callback'] ); ?>
35
+ </div>
36
+ </li>
37
  <?php } ?>
38
  </ul>
inc/admin/views/setup/steps/welcome.php CHANGED
@@ -13,4 +13,4 @@ defined( 'ABSPATH' ) or exit;
13
 
14
  <p class="large-text"><?php _e( 'Thanks for choosing LearnPress to sell your online courses!', 'learnpress' ); ?></p>
15
 
16
- <p class="large-text"><?php _e( 'The following wizard will help you configure your LMS site and get you started quickly.', 'learnpress' ); ?></p>
13
 
14
  <p class="large-text"><?php _e( 'Thanks for choosing LearnPress to sell your online courses!', 'learnpress' ); ?></p>
15
 
16
+ <p class="large-text"><?php _e( 'The following wizard will help you configure your LMS site and get you started quickly.', 'learnpress' ); ?></p>
inc/admin/views/statistics/courses.php CHANGED
@@ -38,13 +38,6 @@ $count = 0;
38
  </li>
39
  </ul>
40
  <div class="clear"></div>
41
- <ul class="chart-description">
42
- <li class="all"><span><?php _e( 'All', 'learnpress' ); ?></span></li>
43
- <li class="free"><span><?php _e( 'Public', 'learnpress' ); ?></span></li>
44
- <li class="paid"><span><?php _e( 'Pending', 'learnpress' ); ?></span></li>
45
- <li class="all"><span><?php _e( 'Paid', 'learnpress' ); ?></span></li>
46
- <li class="free"><span><?php _e( 'Free', 'learnpress' ); ?></span></li>
47
- </ul>
48
  <div id="learn-press-chart" class="learn-press-chart">
49
  </div>
50
 
38
  </li>
39
  </ul>
40
  <div class="clear"></div>
 
 
 
 
 
 
 
41
  <div id="learn-press-chart" class="learn-press-chart">
42
  </div>
43
 
inc/admin/views/statistics/general.php CHANGED
@@ -55,13 +55,6 @@ learn_press_get_chart_general( null, 'days', 7 );
55
  </li>
56
  </ul>
57
  <div class="clear"></div>
58
- <ul class="chart-description">
59
- <li class="all"><span><?php _e( 'All', 'learnpress' ); ?></span></li>
60
- <li class="free"><span><?php _e( 'Public', 'learnpress' ); ?></span></li>
61
- <li class="paid"><span><?php _e( 'Pending', 'learnpress' ); ?></span></li>
62
- <li class="all"><span><?php _e( 'Paid', 'learnpress' ); ?></span></li>
63
- <li class="free"><span><?php _e( 'Free', 'learnpress' ); ?></span></li>
64
- </ul>
65
  <div id="learn-press-chart" class="learn-press-chart">
66
  </div>
67
 
55
  </li>
56
  </ul>
57
  <div class="clear"></div>
 
 
 
 
 
 
 
58
  <div id="learn-press-chart" class="learn-press-chart">
59
  </div>
60
 
inc/admin/views/statistics/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/admin/views/statistics/orders.php CHANGED
@@ -59,11 +59,6 @@ $count = 0;
59
  </div>
60
 
61
  <div class="clear"></div>
62
- <ul class="chart-description">
63
- <li class="all"><span><?php _e( 'All', 'learnpress' ); ?></span></li>
64
- <li class="instructors"><span><?php _e( 'Completed', 'learnpress' ); ?></span></li>
65
- <li class="students"><span><?php _e( 'Pending', 'learnpress' ); ?></span></li>
66
- </ul>
67
  <div id="learn-press-chart" class="learn-press-chart">
68
  </div>
69
 
59
  </div>
60
 
61
  <div class="clear"></div>
 
 
 
 
 
62
  <div id="learn-press-chart" class="learn-press-chart">
63
  </div>
64
 
inc/admin/views/statistics/users.php CHANGED
@@ -42,11 +42,6 @@ $count = 0;
42
  </li>
43
  </ul>
44
  <div class="clear"></div>
45
- <ul class="chart-description">
46
- <li class="all"><span><?php _e( 'All', 'learnpress' ); ?></span></li>
47
- <li class="instructors"><span><?php _e( 'Instructors', 'learnpress' ); ?></span></li>
48
- <li class="students"><span><?php _e( 'Students', 'learnpress' ); ?></span></li>
49
- </ul>
50
  <div id="learn-press-chart" class="learn-press-chart">
51
  </div>
52
 
42
  </li>
43
  </ul>
44
  <div class="clear"></div>
 
 
 
 
 
45
  <div id="learn-press-chart" class="learn-press-chart">
46
  </div>
47
 
inc/admin/views/svg-icon.php CHANGED
@@ -12,6 +12,6 @@ $viewbox = isset( $viewbox ) ? $viewbox : '0 0 32 32';
12
  $class = isset( $class ) ? $class : 'svg-icon';
13
  ?>
14
 
15
- <svg class="<?php echo $class; ?>" viewBox="<?php echo $viewbox; ?>">
16
  <path d="M 14 5.5 a 3 3 0 1 1 -3 -3 A 3 3 0 0 1 14 5.5 Z m 7 3 a 3 3 0 1 0 -3 -3 A 3 3 0 0 0 21 8.5 Z m -10 4 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 12.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 12.5 Z m -10 10 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 22.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 22.5 Z"></path>
17
  </svg>
12
  $class = isset( $class ) ? $class : 'svg-icon';
13
  ?>
14
 
15
+ <svg class="<?php echo esc_attr( $class ); ?>" viewBox="<?php echo esc_attr( $viewbox ); ?>">
16
  <path d="M 14 5.5 a 3 3 0 1 1 -3 -3 A 3 3 0 0 1 14 5.5 Z m 7 3 a 3 3 0 1 0 -3 -3 A 3 3 0 0 0 21 8.5 Z m -10 4 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 12.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 12.5 Z m -10 10 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 22.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 22.5 Z"></path>
17
  </svg>
inc/admin/views/tools/course/html-install-sample-data.php CHANGED
@@ -11,18 +11,6 @@ $section_range = LP_Install_Sample_Data::$section_range;
11
  $item_range = LP_Install_Sample_Data::$item_range;
12
  $question_range = LP_Install_Sample_Data::$question_range;
13
  $answer_range = LP_Install_Sample_Data::$answer_range;
14
- /**
15
- * Format hooks
16
- */
17
- $hooks = apply_filters(
18
- 'lp/install-sample/hooks',
19
- array(
20
- /*array(
21
- 'class' => 'class_name',
22
- 'action' => 'action_name',
23
- ),*/
24
- )
25
- );
26
  ?>
27
 
28
  <div class="lp-install-sample">
@@ -38,38 +26,43 @@ $hooks = apply_filters(
38
  </li>
39
  <li>
40
  <p><?php esc_html_e( 'Random number of sections in range', 'learnpress' ); ?></p>
41
- <input type="number" size="3" value="<?php echo $section_range[0]; ?>" min="1" max="20" name="section-range[]">
42
- <input type="number" size="3" value="<?php echo $section_range[1]; ?>" min="1" max="20" name="section-range[]">
43
  </li>
44
  <li>
45
  <p><?php esc_html_e( 'Random number of items in range (each section)', 'learnpress' ); ?></p>
46
- <input type="number" size="3" value="<?php echo $item_range[0]; ?>" min="1" max="50" name="item-range[]">
47
- <input type="number" size="3" value="<?php echo $item_range[1]; ?>" min="1" max="50" name="item-range[]">
48
  </li>
49
  <li>
50
  <p><?php esc_html_e( 'Random number of questions in range (each quiz)', 'learnpress' ); ?></p>
51
- <input type="number" size="3" value="<?php echo $question_range[0]; ?>" min="1" max="50" name="question-range[]">
52
- <input type="number" size="3" value="<?php echo $question_range[1]; ?>" min="1" max="50" name="question-range[]">
53
  </li>
54
  <li>
55
  <p><?php esc_html_e( 'Random number of answers in range (each question)', 'learnpress' ); ?></p>
56
- <input type="number" size="3" value="<?php echo $answer_range[0]; ?>" min="1" max="10" name="answer-range[]">
57
- <input type="number" size="3" value="<?php echo $answer_range[1]; ?>" min="1" max="10" name="answer-range[]">
58
  </li>
59
  <li>
60
  <p><?php esc_html_e( 'Course price', 'learnpress' ); ?></p>
61
  <input type="number" size="3" value="" min="0" name="course-price">
62
  </li>
63
- <input name="hooks" type="hidden" value="<?php echo esc_attr( htmlspecialchars( json_encode( $hooks ) ) ); ?>">
64
  </ul>
65
  </fieldset>
66
 
67
  <p class="lp-install-sample__buttons">
68
- <a class="button button-primary lp-install-sample__install" data-text="<?php esc_attr_e( 'Install', 'learnpress' ); ?>" data-installing-text="<?php esc_attr_e( 'Installing...', 'learnpress' ); ?>" href="<?php echo wp_nonce_url( admin_url( 'index.php?page=lp-install-sample-data' ), 'install-sample-course' ); ?>">
 
 
 
69
  <?php esc_html_e( 'Install', 'learnpress' ); ?>
70
  </a>
71
  <a href="" class="lp-install-sample__toggle-options"><?php esc_html_e( 'Show options', 'learnpress' ); ?></a>
72
- <a class="button lp-install-sample__uninstall" data-text="<?php esc_attr_e( 'Delete sample course', 'learnpress' ); ?>" data-uninstalling-text="<?php esc_attr_e( 'Deleting...', 'learnpress' ); ?>" href="<?php echo wp_nonce_url( admin_url( 'index.php?page=lp-uninstall-sample-data' ), 'uninstall-sample-course' ); ?>">
 
 
 
73
  <?php esc_html_e( 'Delete sample course', 'learnpress' ); ?>
74
  </a>
75
  </p>
11
  $item_range = LP_Install_Sample_Data::$item_range;
12
  $question_range = LP_Install_Sample_Data::$question_range;
13
  $answer_range = LP_Install_Sample_Data::$answer_range;
 
 
 
 
 
 
 
 
 
 
 
 
14
  ?>
15
 
16
  <div class="lp-install-sample">
26
  </li>
27
  <li>
28
  <p><?php esc_html_e( 'Random number of sections in range', 'learnpress' ); ?></p>
29
+ <input type="number" size="3" value="<?php echo esc_attr( $section_range[0] ); ?>" min="1" max="20" name="section-range[]">
30
+ <input type="number" size="3" value="<?php echo esc_attr( $section_range[1] ); ?>" min="1" max="20" name="section-range[]">
31
  </li>
32
  <li>
33
  <p><?php esc_html_e( 'Random number of items in range (each section)', 'learnpress' ); ?></p>
34
+ <input type="number" size="3" value="<?php echo esc_attr( $item_range[0] ); ?>" min="1" max="50" name="item-range[]">
35
+ <input type="number" size="3" value="<?php echo esc_attr( $item_range[1] ); ?>" min="1" max="50" name="item-range[]">
36
  </li>
37
  <li>
38
  <p><?php esc_html_e( 'Random number of questions in range (each quiz)', 'learnpress' ); ?></p>
39
+ <input type="number" size="3" value="<?php echo esc_attr( $question_range[0] ); ?>" min="1" max="50" name="question-range[]">
40
+ <input type="number" size="3" value="<?php echo esc_attr( $question_range[1] ); ?>" min="1" max="50" name="question-range[]">
41
  </li>
42
  <li>
43
  <p><?php esc_html_e( 'Random number of answers in range (each question)', 'learnpress' ); ?></p>
44
+ <input type="number" size="3" value="<?php echo esc_attr( $answer_range[0] ); ?>" min="1" max="10" name="answer-range[]">
45
+ <input type="number" size="3" value="<?php echo esc_attr( $answer_range[1] ); ?>" min="1" max="10" name="answer-range[]">
46
  </li>
47
  <li>
48
  <p><?php esc_html_e( 'Course price', 'learnpress' ); ?></p>
49
  <input type="number" size="3" value="" min="0" name="course-price">
50
  </li>
 
51
  </ul>
52
  </fieldset>
53
 
54
  <p class="lp-install-sample__buttons">
55
+ <a class="button button-primary lp-install-sample__install"
56
+ data-text="<?php esc_attr_e( 'Install', 'learnpress' ); ?>"
57
+ data-installing-text="<?php esc_attr_e( 'Installing...', 'learnpress' ); ?>"
58
+ href="<?php echo wp_nonce_url( admin_url( 'index.php?page=lp-install-sample-data' ), 'install-sample-course' ); ?>">
59
  <?php esc_html_e( 'Install', 'learnpress' ); ?>
60
  </a>
61
  <a href="" class="lp-install-sample__toggle-options"><?php esc_html_e( 'Show options', 'learnpress' ); ?></a>
62
+ <a class="button lp-install-sample__uninstall"
63
+ data-text="<?php esc_attr_e( 'Delete sample course', 'learnpress' ); ?>"
64
+ data-uninstalling-text="<?php esc_attr_e( 'Deleting...', 'learnpress' ); ?>"
65
+ href="<?php echo wp_nonce_url( admin_url( 'index.php?page=lp-uninstall-sample-data' ), 'uninstall-sample-course' ); ?>">
66
  <?php esc_html_e( 'Delete sample course', 'learnpress' ); ?>
67
  </a>
68
  </p>
inc/admin/views/tools/course/html-user-item.php CHANGED
@@ -9,88 +9,88 @@ defined( 'ABSPATH' ) or die();
9
 
10
  ?>
11
  <div id="learn-press-reset-user-item" class="card">
12
- <h2><?php _e( 'Reset item progress for an user', 'learnpress' ); ?></h2>
13
- <div class="description">
14
  <?php _e( 'This action will reset progress of specific lesson or quiz.', 'learnpress' ); ?>
15
- </div>
16
- <table>
17
- <tr>
18
- <td><strong><?php _e( 'User ID or Email', 'learnpress' ); ?></strong></td>
19
- <td><strong><?php _e( 'Item ID (ID of quiz or lesson)', 'learnpress' ); ?></strong></td>
20
- </tr>
21
- <tr>
22
- <td><input type="text" v-model="user_id" @keyup="update($event)"></td>
23
- <td><input type="text" v-model="item_id" @keyup="update($event)"></td>
24
- </tr>
25
- </table>
26
- <p v-if="message">{{message}}</p>
27
- <button class="button" @click="reset($event)"
28
- :disabled="resetting || !isValid()"><?php _e( 'Reset', 'learnpress' ); ?></button>
29
  </div>
30
 
31
  <?php
32
 
33
  // Translation
34
  $localize = array(
35
- 'reset_course_users' => __( 'Are you sure to reset progress of this item?', 'learnpress' )
36
  );
37
  ?>
38
  <script>
39
- window.$Vue = window.$Vue || Vue;
40
 
41
- jQuery(function ($) {
42
- var js_localize = <?php echo wp_json_encode( $localize );?>
43
 
44
- new $Vue({
45
- el: '#learn-press-reset-user-item',
46
- data: {
47
- user_id: '',
48
- item_id: '',
49
- resetting: false,
50
- message: ''
51
- },
52
- watch: {},
53
- created: function () {
54
 
55
- },
56
- mounted: function () {
57
- $(this.$el).closest('form').on('submit', function () {
58
- return false;
59
- })
60
- },
61
- methods: {
62
- reset: function (e) {
63
- e.preventDefault();
64
- if (!this.user_id || !this.item_id) {
65
- return;
66
- }
67
- if (!confirm(js_localize.reset_course_users)) {
68
- return;
69
- }
70
- var that = this;
71
- this.resetting = true;
72
- this.message = '';
73
- $.ajax({
74
- url: '',
75
- data: {
76
- 'lp-ajax': 'rs-reset-user-item',
77
- user_id: this.user_id,
78
- item_id: this.item_id
79
- },
80
- success: function (response) {
81
- that.resetting = false;
82
- that.message = response;
83
- }
84
- })
85
- },
86
- update: function (e) {
87
- e.preventDefault();
88
- },
89
- isValid: function () {
90
- return this.user_id && this.item_id;
91
- }
92
- }
93
- });
94
- });
95
 
96
- </script>
9
 
10
  ?>
11
  <div id="learn-press-reset-user-item" class="card">
12
+ <h2><?php _e( 'Reset item progress for an user', 'learnpress' ); ?></h2>
13
+ <div class="description">
14
  <?php _e( 'This action will reset progress of specific lesson or quiz.', 'learnpress' ); ?>
15
+ </div>
16
+ <table>
17
+ <tr>
18
+ <td><strong><?php _e( 'User ID or Email', 'learnpress' ); ?></strong></td>
19
+ <td><strong><?php _e( 'Item ID (ID of quiz or lesson)', 'learnpress' ); ?></strong></td>
20
+ </tr>
21
+ <tr>
22
+ <td><input type="text" v-model="user_id" @keyup="update($event)"></td>
23
+ <td><input type="text" v-model="item_id" @keyup="update($event)"></td>
24
+ </tr>
25
+ </table>
26
+ <p v-if="message">{{message}}</p>
27
+ <button class="button" @click="reset($event)"
28
+ :disabled="resetting || !isValid()"><?php _e( 'Reset', 'learnpress' ); ?></button>
29
  </div>
30
 
31
  <?php
32
 
33
  // Translation
34
  $localize = array(
35
+ 'reset_course_users' => __( 'Are you sure to reset progress of this item?', 'learnpress' ),
36
  );
37
  ?>
38
  <script>
39
+ window.$Vue = window.$Vue || Vue;
40
 
41
+ jQuery(function ($) {
42
+ var js_localize = <?php echo wp_json_encode( $localize ); ?>
43
 
44
+ new $Vue({
45
+ el: '#learn-press-reset-user-item',
46
+ data: {
47
+ user_id: '',
48
+ item_id: '',
49
+ resetting: false,
50
+ message: ''
51
+ },
52
+ watch: {},
53
+ created: function () {
54
 
55
+ },
56
+ mounted: function () {
57
+ $(this.$el).closest('form').on('submit', function () {
58
+ return false;
59
+ })
60
+ },
61
+ methods: {
62
+ reset: function (e) {
63
+ e.preventDefault();
64
+ if (!this.user_id || !this.item_id) {
65
+ return;
66
+ }
67
+ if (!confirm(js_localize.reset_course_users)) {
68
+ return;
69
+ }
70
+ var that = this;
71
+ this.resetting = true;
72
+ this.message = '';
73
+ $.ajax({
74
+ url: '',
75
+ data: {
76
+ 'lp-ajax': 'rs-reset-user-item',
77
+ user_id: this.user_id,
78
+ item_id: this.item_id
79
+ },
80
+ success: function (response) {
81
+ that.resetting = false;
82
+ that.message = response;
83
+ }
84
+ })
85
+ },
86
+ update: function (e) {
87
+ e.preventDefault();
88
+ },
89
+ isValid: function () {
90
+ return this.user_id && this.item_id;
91
+ }
92
+ }
93
+ });
94
+ });
95
 
96
+ </script>
inc/admin/views/tools/course/html-user.php CHANGED
@@ -53,7 +53,7 @@ defined( 'ABSPATH' ) or die();
53
  data-reset="all"
54
  :class="resetActionClass(user)"
55
  @click="reset($event, user);"></a>
56
- <span style="font-size: 12px"><?php echo esc_html__('Delete All','learnpress'); ?></span>
57
  </td>
58
  </tr>
59
  </tbody>
53
  data-reset="all"
54
  :class="resetActionClass(user)"
55
  @click="reset($event, user);"></a>
56
+ <span style="font-size: 12px"><?php echo esc_html__( 'Delete All', 'learnpress' ); ?></span>
57
  </td>
58
  </tr>
59
  </tbody>
inc/admin/views/tools/database/html-clean-database.php CHANGED
@@ -33,7 +33,10 @@ $clean_tables = array(
33
  ?>
34
  <li style="background-color: <?php echo esc_attr( $color_code ); ?>">
35
  <input type="checkbox" id="clean-table__<?php echo esc_attr( $clean_table ); ?>" name="clean-table__<?php echo esc_attr( $clean_table ); ?>" value="<?php echo esc_attr( $clean_table ); ?>" >
36
- <label for="clean-table__<?php echo esc_attr( $clean_table ); ?>"><?php echo esc_html__( '' . $clean_table . ' (' . $lp_db_sessions->count_row_db_sessions() . ' rows expire)', 'learnpress' ); ?></label><br>
 
 
 
37
  </li>
38
  <?php endforeach; ?>
39
  </ul>
33
  ?>
34
  <li style="background-color: <?php echo esc_attr( $color_code ); ?>">
35
  <input type="checkbox" id="clean-table__<?php echo esc_attr( $clean_table ); ?>" name="clean-table__<?php echo esc_attr( $clean_table ); ?>" value="<?php echo esc_attr( $clean_table ); ?>" >
36
+ <label for="clean-table__<?php echo esc_attr( $clean_table ); ?>">
37
+ <?php echo sprintf( '%s (%d) %s', $clean_table, $lp_db_sessions->count_row_db_sessions(), __( 'rows expire', 'learnpress' ) ); ?>
38
+ </label>
39
+ <br>
40
  </li>
41
  <?php endforeach; ?>
42
  </ul>
inc/admin/views/tools/html-course.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- learn_press_admin_view('tools/course/html-install-sample-data');
3
- learn_press_admin_view('tools/course/html-course');
4
- learn_press_admin_view('tools/course/html-user');
5
- learn_press_admin_view('tools/course/html-user-item');
1
  <?php
2
+ learn_press_admin_view( 'tools/course/html-install-sample-data' );
3
+ learn_press_admin_view( 'tools/course/html-course' );
4
+ learn_press_admin_view( 'tools/course/html-user' );
5
+ learn_press_admin_view( 'tools/course/html-user-item' );
inc/admin/views/tools/html-template.php CHANGED
@@ -81,17 +81,17 @@ if ( $template_dir != $stylesheet_dir ) {
81
  echo 'data-filter-unversioned="yes"';
82
  }
83
  ?>
84
- class="template-row <?php echo $template_class; ?>">
85
- <td class="template-file"><code><?php echo $template[0]; ?></code></td>
86
  <td class="template-version">
87
- <span><?php echo $template[1]; ?></span>
88
  </td>
89
- <td class="core-version"><span><?php echo $template[2]; ?></span></td>
90
  </tr>
91
  <?php endforeach; ?>
92
  <?php endif; ?>
93
 
94
- <tr id="learn-press-no-templates" class="<?php echo $templates ? 'hide-if-js' : ''; ?>">
95
  <td colspan="3">
96
  <p><?php _e( 'There is no template file has overwritten', 'learnpress' ); ?></p>
97
  </td>
81
  echo 'data-filter-unversioned="yes"';
82
  }
83
  ?>
84
+ class="template-row <?php echo esc_attr( $template_class ); ?>">
85
+ <td class="template-file"><code><?php echo esc_html( $template[0] ); ?></code></td>
86
  <td class="template-version">
87
+ <span><?php echo esc_html( $template[1] ); ?></span>
88
  </td>
89
+ <td class="core-version"><span><?php echo esc_html( $template[2] ); ?></span></td>
90
  </tr>
91
  <?php endforeach; ?>
92
  <?php endif; ?>
93
 
94
+ <tr id="learn-press-no-templates" class="<?php echo esc_attr( $templates ? 'hide-if-js' : '' ); ?>">
95
  <td colspan="3">
96
  <p><?php _e( 'There is no template file has overwritten', 'learnpress' ); ?></p>
97
  </td>
inc/admin/views/updates/html-upgrade-message-3.0.0.php CHANGED
@@ -11,15 +11,15 @@ defined( 'ABSPATH' ) or die();
11
 
12
  ?>
13
  <div class="notice notice-warning lp-notice lp-upgrade-notice">
14
- <h4><?php printf( __( 'Welcome to LearnPress %s', 'learnpress' ), LEARNPRESS_VERSION ); ?></h4>
15
- <p><?php _e( 'This is a <strong>BIG UPDATE</strong> and it allows you to do so much more!', 'learnpress' ); ?></p>
16
- <p><?php _e( 'If there\'s any issue, please be sure to backup your site, update your theme, contact supporter.', 'learnpres' ); ?></p>
17
- <p>
18
- <a class="button"
19
- href="https://thimpress.com/learnpress-3-0/"
20
- target="_blank"><?php _e( 'Check what\'s new', 'learnpress' ); ?></a>
21
- <a class="button" href="https://thimpress.com/help/"
22
- target="_blank"><?php _e( 'Get support now', 'learnpress' ); ?></a>
23
- </p>
24
- <a class="close-notice" href=""><?php _e( 'Got it!', 'learnpress' ); ?></a>
25
- </div>
11
 
12
  ?>
13
  <div class="notice notice-warning lp-notice lp-upgrade-notice">
14
+ <h4><?php printf( __( 'Welcome to LearnPress %s', 'learnpress' ), LEARNPRESS_VERSION ); ?></h4>
15
+ <p><?php _e( 'This is a <strong>BIG UPDATE</strong> and it allows you to do so much more!', 'learnpress' ); ?></p>
16
+ <p><?php _e( 'If there\'s any issue, please be sure to backup your site, update your theme, contact supporter.', 'learnpres' ); ?></p>
17
+ <p>
18
+ <a class="button"
19
+ href="https://thimpress.com/learnpress-3-0/"
20
+ target="_blank"><?php _e( 'Check what\'s new', 'learnpress' ); ?></a>
21
+ <a class="button" href="https://thimpress.com/help/"
22
+ target="_blank"><?php _e( 'Get support now', 'learnpress' ); ?></a>
23
+ </p>
24
+ <a class="close-notice" href=""><?php _e( 'Got it!', 'learnpress' ); ?></a>
25
+ </div>
inc/admin/views/user/courses.php CHANGED
@@ -16,108 +16,9 @@ if ( ! isset( $user_id ) ) {
16
  $profile = LP_Profile::instance( $user_id );
17
  $user = $profile->get_user();
18
  $slug_profile_courses = LP_Settings::instance()->get( 'profile_endpoints.courses', 'courses' );
19
- $link_user_profile = esc_url_raw( add_query_arg( [ 'tab' => 'enrolled' ], learn_press_user_profile_link( $user_id ) . $slug_profile_courses ) );
20
- echo wp_sprintf( '<p><b>%s</b> <a href="%s" target="_blank">%s</a></p>', __( 'Course list of user enrolled', 'learnpress' ), $link_user_profile, __( 'View', 'learnpress' ) );
21
-
22
- return;
23
-
24
- $query = $profile->query_courses( 'purchased' );
25
  ?>
26
-
27
- <div class="lp-admin-profile-courses">
28
- <h2><?php esc_html_e( 'LearnPress Courses', 'learnpress' ); ?></h2>
29
-
30
- <?php $course_ids = $query->get_items(); ?>
31
-
32
- <?php if ( ! $query || ( ! $course_ids ) ) : ?>
33
- <?php esc_html_e( 'No courses.', 'learnpress' ); ?>
34
- <?php else : ?>
35
-
36
- <table class="wp-list-table widefat fixed striped courses">
37
- <thead>
38
- <tr>
39
- <th class="manage-column column-course"><?php esc_html_e( 'Course', 'learnpress' ); ?></th>
40
- <th class="manage-column column-start-date"><?php esc_html_e( 'Start time', 'learnpress' ); ?></th>
41
- <th class="manage-column column-end-date"><?php esc_html_e( 'End time', 'learnpress' ); ?></th>
42
- <th class="manage-column column-finished-date"><?php esc_html_e( 'Finished', 'learnpress' ); ?></th>
43
- <th class="manage-column column-results"><?php esc_html_e( 'Results', 'learnpress' ); ?></th>
44
- </tr>
45
- </thead>
46
-
47
- <tbody>
48
- <?php foreach ( $course_ids as $course_id ) : ?>
49
- <?php
50
- $course_id = absint( $course_id->get_id() );
51
- $course = learn_press_get_course( $course_id );
52
- if ( ! $course ) {
53
- continue;
54
- }
55
- $course_data = $user->get_course_data( $course_id );
56
- $course_result = $course_data->get_result();
57
- $status = $course_result['status'];
58
- $grade = $course_data->get_graduation_text();
59
- ?>
60
-
61
- <tr>
62
- <td class="manage-column column-course">
63
- <a href="<?php echo esc_url_raw( $course->get_permalink() ); ?>"><?php echo esc_html( $course->get_title() ); ?></a>
64
- </td>
65
-
66
- <td class="manage-column column-start-date">
67
- <?php echo $course_data->get_start_time(); ?>
68
- </td>
69
-
70
- <td class="manage-column column-end-date">
71
- <?php echo $course_data->get_end_time(); ?>
72
- </td>
73
-
74
- <td class="manage-column column-finished-date">
75
- <?php
76
- if ( $status === 'finished' ) {
77
- echo $course_data->get_end_time();
78
- }
79
-
80
- $icon = '';
81
- $label_class = array( $status );
82
-
83
- switch ( $status ) {
84
- case 'finished':
85
- if ( $grade === 'passed' ) {
86
- $icon = '<i class="far fa-check-circle"></i>';
87
- $label_class[] = 'success';
88
- } elseif ( $grade === 'failed' ) {
89
- $icon = '<i class="far fa-times-circle"></i>';
90
- $label_class[] = 'error';
91
- } else {
92
- $icon = '<i class="far fa-check-circle"></i>';
93
- $label_class[] = 'warning';
94
- }
95
- break;
96
- case 'in-progress':
97
- case 'enrolled':
98
- $icon = '<i class="far fa-check-circle"></i>';
99
- $label_class[] = 'warning';
100
- break;
101
- case 'passed':
102
- $icon = '<i class="far fa-check-circle"></i>';
103
- $label_class[] = 'success';
104
- }
105
- ?>
106
-
107
- <span class="lp-label <?php echo implode( ' ', $label_class ); ?>">
108
- <?php
109
- echo $icon;
110
- echo ucfirst( $grade ? $grade : $status );
111
- ?>
112
- </span>
113
- </td>
114
-
115
- <td class="manage-column column-results">
116
- <?php learn_press_admin_view( 'user/course-progress', compact( 'user', 'course', 'course_result' ) ); ?>
117
- </td>
118
- </tr>
119
- <?php endforeach; ?>
120
- </tbody>
121
- </table>
122
- <?php endif; ?>
123
- </div>
16
  $profile = LP_Profile::instance( $user_id );
17
  $user = $profile->get_user();
18
  $slug_profile_courses = LP_Settings::instance()->get( 'profile_endpoints.courses', 'courses' );
19
+ $link_user_profile = add_query_arg( [ 'tab' => 'enrolled' ], learn_press_user_profile_link( $user_id ) . $slug_profile_courses );
 
 
 
 
 
20
  ?>
21
+ <p>
22
+ <b><?php _e( 'Course list of user enrolled', 'learnpress' ); ?></b>
23
+ <a href="<?php echo esc_url_raw( $link_user_profile ); ?>" target="_blank"><?php _e( 'View', 'learnpress' ); ?></a>
24
+ </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/attributes/course.php DELETED
@@ -1,408 +0,0 @@
1
- <?php
2
- /**
3
- * Add attributes feature for course
4
- *
5
- * @since 2.1.4
6
- */
7
- if ( ! class_exists( 'LP_Course_Attributes' ) ) {
8
- /**
9
- * Class LP_Course_Attributes
10
- */
11
- class LP_Course_Attributes {
12
- /**
13
- * @var string
14
- */
15
- private $_tax = '';
16
-
17
- /**
18
- * @var bool
19
- */
20
- private $_screen = false;
21
-
22
- /**
23
- * @var null
24
- */
25
- private $_attribute_terms = null;
26
-
27
- /**
28
- * LP_Course_Attributes constructor.
29
- */
30
- public function __construct() {
31
- add_action( 'init', array( $this, 'register' ), 10 );
32
- add_action( 'load-edit-tags.php', array( $this, 'ready' ) );
33
- add_action( 'pre_delete_term', array( $this, 'pre_delete_term' ), 10, 2 );
34
- add_action( 'delete_term', array( $this, 'delete_terms' ), 10, 5 );
35
-
36
- add_filter( 'learn_press_admin_tabs_info', array( $this, 'admin_tab' ) );
37
- add_filter( 'course_attribute_row_actions', array( $this, 'row_actions' ), 10, 2 );
38
- add_filter( 'terms_clauses', array( $this, 'term_clauses' ), 10, 3 );
39
- add_filter( 'learn_press_admin_tabs_on_pages', array( $this, 'admin_tabs_pages' ) );
40
-
41
- add_filter( 'learn_press_lp_course_tabs', array( $this, 'course_attributes_tab' ) );
42
- add_action( 'learn_press_admin_load_scripts', array( $this, 'admin_scripts' ) );
43
-
44
- LP_Request_Handler::register(
45
- array(
46
- array(
47
- 'priority' => 100,
48
- 'action' => 'remove-course-attribute-terms',
49
- 'callback' => array( $this, 'remove_terms' ),
50
- ),
51
- array(
52
- 'action' => 'add-attribute-to-course',
53
- 'callback' => array( $this, 'add_attribute_to_course' ),
54
- ),
55
- array(
56
- 'action' => 'add-attribute-value',
57
- 'callback' => array( $this, 'add_attribute_value' ),
58
- ),
59
- array(
60
- 'action' => 'save-attributes',
61
- 'callback' => array( $this, 'save_attributes' ),
62
- ),
63
- )
64
- );
65
- }
66
-
67
- public function save_attributes( $course_id ) {
68
- $data = learn_press_get_request( 'data' );
69
- $attributes = array();
70
- parse_str( $data, $attributes );
71
- if ( $attributes ) {
72
- $attributes = $attributes['course-attribute-values'];
73
- foreach ( $attributes as $taxonomy_id => $values ) {
74
- if ( ! $values ) {
75
- continue;
76
- }
77
- $taxonomy = get_term( $taxonomy_id, LP_COURSE_ATTRIBUTE );
78
- wp_set_object_terms( $course_id, $values, LP_COURSE_ATTRIBUTE . '-' . $taxonomy->slug );
79
- }
80
- }
81
- die();
82
- }
83
-
84
- public function add_attribute_value( $course_id ) {
85
-
86
- if ( LP_COURSE_CPT != get_post_type( $course_id ) ) {
87
- return;
88
- }
89
-
90
- $taxonomy = learn_press_get_request( 'taxonomy' );
91
- $name = learn_press_get_request( 'name' );
92
- $new = learn_press_add_course_attribute_value( $name, $taxonomy );
93
- $response = array();
94
-
95
- if ( ! is_wp_error( $new ) ) {
96
- $term = get_term_by( 'term_taxonomy_id', $new['term_taxonomy_id'] );
97
- $response['slug'] = $term->slug;
98
- $response['name'] = $term->name;
99
-
100
- $response['result'] = 'success';
101
- } elseif ( ! $new ) {
102
- $response['result'] = 'error';
103
- $response['error'] = __( 'Unknown error', 'learnpress' );
104
- } else {
105
- $response['result'] = 'error';
106
- $response['error'] = $new->get_error_messages();
107
- }
108
-
109
- learn_press_send_json( $response );
110
- die();
111
- }
112
-
113
- public function add_attribute_to_course( $course_id ) {
114
- $taxonomy = learn_press_get_request( 'taxonomy' );
115
-
116
- if ( LP_COURSE_CPT != get_post_type( $course_id ) ) {
117
- return;
118
- }
119
-
120
- $attribute = learn_press_add_attribute_to_course( $course_id, $taxonomy );
121
-
122
- if ( $attribute ) {
123
- $postId = $course_id;
124
- include learn_press_get_admin_view( 'meta-boxes/course/html-course-attribute' );
125
- }
126
-
127
- die();
128
- }
129
-
130
- public function admin_scripts() {
131
- LP_Assets::enqueue_script( 'learn-press-course-attributes' );
132
- LP_Assets::enqueue_script( 'select2' );
133
- LP_Assets::enqueue_style( 'learn-press-course-attributes' );
134
- LP_Assets::enqueue_style( 'learn-press-statistics-select2' );
135
-
136
- }
137
-
138
- public function course_attributes_tab( $tabs ) {
139
- $tabs['attributes'] = array(
140
- 'title' => __( 'Attributes', 'learnpress' ),
141
- 'callback' => array( $this, 'course_attributes' ),
142
- );
143
- return $tabs;
144
- }
145
-
146
- public function course_attributes() {
147
- include learn_press_admin_view( 'meta-boxes/course/attributes' );
148
- }
149
-
150
- public function remove_terms( $attribute ) {
151
- if ( learn_press_delete_attribute_terms( $attribute ) ) {
152
- learn_press_add_notice( 'Deleted attribute terms', 'learnpress' );
153
- }
154
- wp_redirect( esc_url_raw( remove_query_arg( 'remove-course-attribute-terms' ) ) );
155
- }
156
-
157
- /**
158
- * @param int $term
159
- * @param int $tt_id
160
- * @param string $taxonomy
161
- * @param WP_Term $deleted_term
162
- * @param array $object_ids
163
- *
164
- * @return array|bool
165
- */
166
- public function delete_terms( $term, $tt_id, $taxonomy, $deleted_term, $object_ids ) {
167
- if ( LP_COURSE_ATTRIBUTE != $taxonomy ) {
168
- return false;
169
- }
170
- return learn_press_delete_attribute_terms( $deleted_term->slug );
171
- }
172
-
173
- public function pre_delete_term( $term, $taxonomy ) {
174
-
175
- }
176
-
177
- /**
178
- *
179
- */
180
- public function ready() {
181
- if ( ! empty( $_REQUEST['taxonomy'] ) && strpos( $_REQUEST['taxonomy'], LP_COURSE_ATTRIBUTE ) !== false ) {
182
- $this->_tax = $_REQUEST['taxonomy'];
183
- $this->_screen = get_current_screen();
184
- if ( $this->_screen->id == 'edit-' . LP_COURSE_ATTRIBUTE ) {
185
- add_filter( "manage_{$this->_screen->id}_columns", array( $this, 'columns' ) );
186
- add_filter( "manage_{$this->_tax}_custom_column", array( $this, 'column' ), 10, 3 );
187
- }
188
- }
189
- }
190
-
191
- /**
192
- * @param $content
193
- * @param $column_name
194
- * @param $term_id
195
- *
196
- * @return string
197
- */
198
- public function column( $content, $column_name, $term_id ) {
199
- if ( $column_name == 'terms' ) {
200
- $attribute = get_term( $term_id );
201
-
202
- $terms = learn_press_get_attribute_terms( $term_id );
203
- if ( $terms ) {
204
- $term_labels = array();
205
-
206
- foreach ( $terms as $term ) {
207
- $term_labels[] = sprintf( '<a href="%s">%s</a>', get_edit_term_link( $term->term_id, $term->taxonomy, LP_COURSE_CPT ), $term->name );
208
- }
209
- $content = join( ', ', $term_labels );
210
-
211
- } else {
212
- $content .= __( 'No terms found.', 'learnpress' );
213
- }
214
- $content .= '<div class="row-actions">' . $this->terms_row_actions( $attribute ) . '</div>';
215
-
216
- }
217
- return $content;
218
- }
219
-
220
- /**
221
- * @param $tax
222
- *
223
- * @return string
224
- */
225
- public function terms_row_actions( $tax ) {
226
- $uri = wp_doing_ajax() ? wp_get_referer() : esc_url_raw( $_SERVER['REQUEST_URI'] );
227
- $edit_link = esc_url_raw(
228
- add_query_arg(
229
- 'wp_http_referer',
230
- urlencode( wp_unslash( $uri ) ),
231
- add_query_arg(
232
- array(
233
- 'taxonomy' => LP_COURSE_ATTRIBUTE . '-' . $tax->slug,
234
- 'post_type' => LP_COURSE_CPT,
235
- ),
236
- admin_url( 'term.php' )
237
- )
238
- )
239
- );
240
- $terms_actions = array(
241
- 'edit' => sprintf(
242
- '<a href="%s" aria-label="%s" >%s </a > ',
243
- esc_url_raw( $edit_link ),
244
- esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;', 'learnpress' ), $tax->name ) ),
245
- __( 'Edit', 'learnpress' )
246
- ),
247
- 'delete' => sprintf(
248
- '<a href="%s" aria-label="%s" >%s </a > ',
249
- esc_url_raw( add_query_arg( 'remove-course-attribute-terms', $tax->term_id ) ),
250
- '',
251
- __( 'Clear', 'learnpress' )
252
- ),
253
- );
254
- return join( ' | ', $terms_actions );
255
- }
256
-
257
- /**
258
- * @param $columns
259
- *
260
- * @return mixed
261
- */
262
- public function columns( $columns ) {
263
- if ( $this->_tax == LP_COURSE_ATTRIBUTE && ! empty( $columns['posts'] ) ) {
264
- unset( $columns['posts'] );
265
- }
266
- $columns['terms'] = __( 'Terms', 'learnpress' );
267
- return $columns;
268
- }
269
-
270
- /**
271
- * @param $pages
272
- *
273
- * @return array
274
- */
275
- public function admin_tabs_pages( $pages ) {
276
- if ( ! empty( $_REQUEST['taxonomy'] ) && strpos( $_REQUEST['taxonomy'], LP_COURSE_ATTRIBUTE ) !== false ) {
277
- $screen_id = get_current_screen()->id;
278
- $pages[] = $screen_id;
279
- }
280
- return $pages;
281
- }
282
-
283
- /**
284
- * @param $a
285
- * @param $b
286
- * @param $c
287
- *
288
- * @return mixed
289
- */
290
- public function term_clauses( $a, $b, $c ) {
291
- // print_r( func_get_args() );
292
- return $a;
293
- }
294
-
295
- /**
296
- * @param $tabs
297
- *
298
- * @return array
299
- */
300
- public function admin_tab( $tabs ) {
301
- if ( ! empty( $_REQUEST['taxonomy'] ) && strpos( $_REQUEST['taxonomy'], LP_COURSE_ATTRIBUTE ) !== false ) {
302
- $screen_id = get_current_screen()->id;
303
- } else {
304
- $screen_id = 'edit-' . LP_COURSE_ATTRIBUTE;
305
- }
306
- $tabs[] = array(
307
- 'link' => 'edit-tags.php?taxonomy=' . LP_COURSE_ATTRIBUTE . '&post_type=lp_course',
308
- 'name' => __( 'Attributes', 'learnpress' ),
309
- 'id' => $screen_id,
310
- );
311
- return $tabs;
312
- }
313
-
314
- public function register() {
315
- register_taxonomy(
316
- LP_COURSE_ATTRIBUTE,
317
- array( 'lp_course' ),
318
- array(
319
- 'label' => __( 'Attribute', 'learnpress' ),
320
- 'labels' => array(
321
- 'name' => __( 'Attributes', 'learnpress' ),
322
- 'singular_name' => __( 'Attribute', 'learnpress' ),
323
- 'menu_name' => __( 'Attributes', 'learnpress' ),
324
- 'add_new_item' => __( 'Add New Attribute', 'learnpress' ),
325
- 'all_items' => __( 'All Attributes', 'learnpress' ),
326
- ),
327
- 'show_ui' => true,
328
- 'query_var' => true,
329
- 'show_in_menu' => 'learn_press',
330
- 'public' => false,
331
- 'rewrite' => array(
332
- 'slug' => LP_COURSE_ATTRIBUTE,
333
- 'with_front' => false,
334
- 'hierarchical' => true,
335
- ),
336
- )
337
- );
338
-
339
- if ( learn_press_get_attributes() ) {
340
- $attributes = learn_press_get_attributes();
341
-
342
- foreach ( $attributes as $attribute ) {
343
- $this->_register_custom_attribute( $attribute );
344
- }
345
- }
346
- }
347
-
348
- /**
349
- * @param $actions
350
- * @param $tag
351
- *
352
- * @return mixed
353
- */
354
- public function row_actions( $actions, $tag ) {
355
-
356
- return $actions;
357
- }
358
-
359
- /**
360
- * @param $attribute
361
- */
362
- private function _register_custom_attribute( $attribute ) {
363
- $name = $attribute->name;
364
- $singular_name = $attribute->name;
365
- $tax_data = array(
366
- 'hierarchical' => true,
367
- 'update_count_callback' => '_update_post_term_count',
368
- 'labels' => array(
369
- 'name' => $name,
370
- 'singular_name' => $singular_name,
371
- 'search_items' => sprintf( __( 'Search Course %s', 'learnpress' ), $name ),
372
- 'all_items' => sprintf( __( 'All Course %s', 'learnpress' ), $name ),
373
- 'parent_item' => sprintf( __( 'Parent Course %s', 'learnpress' ), $singular_name ),
374
- 'parent_item_colon' => sprintf( __( 'Parent Course %s:', 'learnpress' ), $singular_name ),
375
- 'edit_item' => sprintf( __( 'Edit Course %s', 'learnpress' ), $singular_name ),
376
- 'update_item' => sprintf( __( 'Update Course %s', 'learnpress' ), $singular_name ),
377
- 'add_new_item' => sprintf( __( 'Add New Course %s', 'learnpress' ), $singular_name ),
378
- 'new_item_name' => sprintf( __( 'New Course %s', 'learnpress' ), $singular_name ),
379
- 'not_found' => sprintf( __( 'No &quot;Course %s&quot; found', 'learnpress' ), $singular_name ),
380
- ),
381
- 'show_ui' => true,
382
- 'show_in_quick_edit' => false,
383
- 'show_in_menu' => false,
384
- 'show_in_nav_menus' => false,
385
- 'meta_box_cb' => false,
386
- 'query_var' => false,
387
- 'rewrite' => false,
388
- 'sort' => false,
389
- 'public' => false,
390
- 'show_in_nav_menus' => false,
391
- );
392
-
393
- $tax_data['rewrite'] = array(
394
- 'slug' => $attribute->slug,
395
- 'with_front' => false,
396
- 'hierarchical' => true,
397
- );
398
-
399
- register_taxonomy(
400
- sprintf( '%s-%s', LP_COURSE_ATTRIBUTE, $attribute->slug ),
401
- apply_filters( 'learn_press_course_attribute_object_' . $attribute->slug, array( 'lp_course' ) ),
402
- apply_filters( 'learn_press_course_attribute_args_' . $attribute->slug, $tax_data )
403
- );
404
-
405
- }
406
- }
407
- }
408
- return new LP_Course_Attributes();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/attributes/lp-attributes-functions.php DELETED
@@ -1,218 +0,0 @@
1
- <?php
2
- /**
3
- * Course attributes functions
4
- */
5
- require_once LP_PLUGIN_PATH . '/inc/attributes/course.php';
6
- define( 'LP_COURSE_ATTRIBUTE', 'course_attribute' );
7
-
8
- /**
9
- * @return array|int|WP_Error
10
- */
11
- function learn_press_get_attributes() {
12
- return get_terms(
13
- LP_COURSE_ATTRIBUTE,
14
- array(
15
- 'hide_empty' => false,
16
- )
17
- );
18
- }
19
-
20
- /**
21
- * @param $attribute
22
- *
23
- * @return array|int|WP_Error
24
- */
25
- function learn_press_get_attribute_terms( $attribute ) {
26
- $terms = array();
27
-
28
- if ( is_array( $attribute ) ) {
29
- foreach ( $attribute as $attr ) {
30
- $_terms = learn_press_get_attribute_terms( $attr );
31
- if ( is_array( $terms ) ) {
32
- $terms = array_merge( $terms, $_terms );
33
- }
34
- }
35
- } else {
36
- $term = get_term( $attribute, LP_COURSE_ATTRIBUTE );
37
- if ( is_numeric( $attribute ) && ! is_wp_error( $term ) ) {
38
- $attribute = $term->slug;
39
- }
40
-
41
- $terms = get_terms( sprintf( '%s-%s', LP_COURSE_ATTRIBUTE, $attribute ), array( 'hide_empty' => false ) );
42
- }
43
-
44
- return $terms;
45
- }
46
-
47
- /**
48
- * @param $attribute
49
- *
50
- * @return array|bool
51
- */
52
- function learn_press_delete_attribute_terms( $attribute ) {
53
- $deleted_terms = array();
54
- $terms = learn_press_get_attribute_terms( $attribute );
55
-
56
- if ( ! $terms ) {
57
- return false;
58
- }
59
-
60
- foreach ( $terms as $term ) {
61
- $deleted = wp_delete_term( $term->term_id, $term->taxonomy );
62
- if ( ! is_wp_error( $deleted ) ) {
63
- $deleted_terms[] = $term;
64
- }
65
- }
66
-
67
- do_action( 'learn_press_deleted_attribute_terms', $attribute, $deleted_terms );
68
-
69
- return $deleted_terms;
70
- }
71
-
72
- /**
73
- * @param $course_id
74
- *
75
- * @return mixed
76
- */
77
- function learn_press_get_course_attributes( $course_id ) {
78
- return get_post_meta( $course_id, '_lp_attributes', true );
79
- }
80
-
81
- /**
82
- * @param $name
83
- * @param $taxonomy
84
- *
85
- * @return array|bool|WP_Error
86
- */
87
- function learn_press_add_course_attribute_value( $name, $taxonomy ) {
88
-
89
- if ( ! $name || term_exists( $name, $taxonomy ) ) {
90
- return false;
91
- }
92
-
93
- $term = get_term_by( 'slug', $taxonomy, LP_COURSE_ATTRIBUTE );
94
-
95
- if ( ! $term ) {
96
- return false;
97
- }
98
-
99
- $new_value = wp_insert_term( $name, sprintf( '%s-%s', LP_COURSE_ATTRIBUTE, $term->slug ) );
100
-
101
- return $new_value;
102
- }
103
-
104
- /**
105
- * @param $name
106
- *
107
- * @return array|bool|WP_Error
108
- */
109
- function learn_press_add_course_attribute( $name ) {
110
-
111
- if ( ! $name || term_exists( $name, LP_COURSE_ATTRIBUTE ) ) {
112
- return false;
113
- }
114
-
115
- $new_value = wp_insert_term( $name, LP_COURSE_ATTRIBUTE );
116
-
117
- return $new_value;
118
- }
119
-
120
- /**
121
- * @param $course_id
122
- * @param $taxonomy
123
- *
124
- * @return bool|mixed
125
- */
126
- function learn_press_add_attribute_to_course( $course_id, $taxonomy ) {
127
- $term = get_term_by( 'slug', $taxonomy, LP_COURSE_ATTRIBUTE );
128
-
129
- if ( ! $term ) {
130
- return false;
131
- }
132
-
133
- $attributes = get_post_meta( $course_id, '_lp_attributes', true );
134
-
135
- if ( ! is_array( $attributes ) ) {
136
- $attributes = array();
137
- }
138
-
139
- $attribute = apply_filters(
140
- 'learn_press_update_course_attribute_data',
141
- array(
142
- 'name' => $term->slug,
143
- ),
144
- $course_id,
145
- $term
146
- );
147
-
148
- $attributes[ $term->slug ] = $attribute;
149
-
150
- $attributes = apply_filters( 'learn_press_update_course_attributes_data', $attributes, $course_id, $term );
151
-
152
- update_post_meta( $course_id, '_lp_attributes', $attributes );
153
-
154
- return $attribute;
155
- }
156
-
157
- /**
158
- * @param WP_Query $q
159
- *
160
- * @return mixed
161
- */
162
- function learn_press_filter_courses_by_attributes( $q ) {
163
- global $lp_tax_query;
164
-
165
- if ( empty( $_REQUEST['course-filter'] ) ) {
166
- return $q;
167
- }
168
-
169
- if ( ! $q->is_main_query() ) {
170
- return $q;
171
- }
172
-
173
- if ( LP_COURSE_CPT != $q->get( 'post_type' ) ) {
174
- return $q;
175
- }
176
-
177
- $attribute_taxonomies = learn_press_get_attributes();
178
- if ( $attribute_taxonomies ) {
179
- $attribute_operator = 'and' === strtolower( learn_press_get_request( 'attribute_operator' ) ) ? 'AND' : 'OR';
180
- $value_operator = 'and' === strtolower( learn_press_get_request( 'value_operator' ) ) ? 'AND' : 'IN';
181
- $tax_query = array(
182
- 'relation' => $attribute_operator,
183
- );
184
-
185
- foreach ( $attribute_taxonomies as $tax ) {
186
- $attribute = $tax->slug;
187
- $taxonomy = LP_COURSE_ATTRIBUTE . '-' . $attribute;
188
- $filter_terms = ! empty( $_GET[ 'filter_' . $attribute ] ) ? explode( ',', $_GET[ 'filter_' . $attribute ] ) : array();
189
-
190
- if ( empty( $filter_terms ) || ! taxonomy_exists( $taxonomy ) ) {
191
- continue;
192
- }
193
-
194
- $tax_query[] = array(
195
- 'taxonomy' => $taxonomy,
196
- 'field' => 'slug',
197
- 'terms' => $filter_terms,
198
- 'operator' => $value_operator,
199
- 'include_children' => false,
200
- );
201
- }
202
-
203
- $lp_tax_query = $tax_query;
204
- $q->set( 'tax_query', $tax_query );
205
- }
206
-
207
- return $q;
208
- }
209
-
210
- /**
211
- * @param WP_Query $q
212
- */
213
- add_filter( 'pre_get_posts', 'learn_press_filter_courses_by_attributes', 1000 );
214
-
215
- /**
216
- * Register widgets
217
- */
218
- LP_Widget::register( array( 'course-attributes', 'course-filters' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/background-process/class-lp-background-single-course.php CHANGED
@@ -30,7 +30,6 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
30
  * @see LP_Course_Post_Type::save
31
  */
32
  protected function handle() {
33
-
34
  try {
35
  $handle_name = LP_Helper::sanitize_params_submitted( $_POST['handle_name'] ?? '' );
36
  $course_id = intval( $_POST['course_id'] ?? 0 );
@@ -67,6 +66,8 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
67
  $this->save_extra_info();
68
  $this->review_post_author();
69
 
 
 
70
  /**
71
  * Clean cache courses
72
  *
@@ -82,6 +83,11 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
82
  // End
83
  }
84
 
 
 
 
 
 
85
  protected function save_price() {
86
  $has_sale_price = false;
87
  $regular_price = $this->data['_lp_regular_price'] ?? '';
@@ -143,13 +149,23 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
143
  $first_item_id = $lp_course_db->get_first_item_id( $lp_course->get_id() );
144
  $extra_info->first_item_id = $first_item_id;
145
 
146
- // Get and set total items courses
147
  // Clean cache
148
  $key_cache_total_items = "$course_id/total_items";
149
  $lp_course_cache->clear( $key_cache_total_items );
150
  $total_items = $lp_course_db->get_total_items( $lp_course->get_id() );
151
  $extra_info->total_items = $total_items;
152
 
 
 
 
 
 
 
 
 
 
 
153
  // Save post meta
154
  $lp_course->set_info_extra_for_fast_query( $extra_info );
155
  // End set first item id
@@ -158,6 +174,59 @@ if ( ! class_exists( 'LP_Background_Single_Course' ) ) {
158
  }
159
  }
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  /**
162
  * Check user is Instructor and enable review post of Instructor
163
  *
30
  * @see LP_Course_Post_Type::save
31
  */
32
  protected function handle() {
 
33
  try {
34
  $handle_name = LP_Helper::sanitize_params_submitted( $_POST['handle_name'] ?? '' );
35
  $course_id = intval( $_POST['course_id'] ?? 0 );
66
  $this->save_extra_info();
67
  $this->review_post_author();
68
 
69
+ do_action( 'lp/background/course/save', $this->lp_course, $this->data );
70
+
71
  /**
72
  * Clean cache courses
73
  *
83
  // End
84
  }
85
 
86
+ /**
87
+ * Save price course
88
+ *
89
+ * @return void
90
+ */
91
  protected function save_price() {
92
  $has_sale_price = false;
93
  $regular_price = $this->data['_lp_regular_price'] ?? '';
149
  $first_item_id = $lp_course_db->get_first_item_id( $lp_course->get_id() );
150
  $extra_info->first_item_id = $first_item_id;
151
 
152
+ // Get and set total items course
153
  // Clean cache
154
  $key_cache_total_items = "$course_id/total_items";
155
  $lp_course_cache->clear( $key_cache_total_items );
156
  $total_items = $lp_course_db->get_total_items( $lp_course->get_id() );
157
  $extra_info->total_items = $total_items;
158
 
159
+ // Get and set sections, items of course
160
+ // Clean cache
161
+ $key_cache_sections_items = "$course_id/sections_items";
162
+ $lp_course_cache->clear( $key_cache_sections_items );
163
+ $sections_items = $lp_course->get_sections_and_items_course_from_db_and_sort();
164
+ $extra_info->sections_items = $sections_items;
165
+
166
+ // Check items removed course, will delete on 'learnpress_user_items', 'learnpress_user_item_results' table
167
+ $this->delete_user_items_data( $sections_items );
168
+
169
  // Save post meta
170
  $lp_course->set_info_extra_for_fast_query( $extra_info );
171
  // End set first item id
174
  }
175
  }
176
 
177
+ /**
178
+ * Delete items removed on course on tables:
179
+ * learnpress_user_items, learnpress_user_itemmeta, learnpress_user_item_results
180
+ *
181
+ * @return void
182
+ * @since 4.1.6.9
183
+ * @version 1.0.0
184
+ */
185
+ private function delete_user_items_data() {
186
+ // Get all user_item_id
187
+ $lp_user_items_db = LP_User_Items_DB::getInstance();
188
+ $lp_user_item_results_db = LP_User_Items_Result_DB::instance();
189
+
190
+ try {
191
+ $course = $this->lp_course;
192
+
193
+ // Get all items of course is attend
194
+ $filter_user_items = new LP_User_Items_Filter();
195
+ $filter_user_items->only_fields = [ 'item_id', 'user_item_id' ];
196
+ $filter_user_items->ref_id = $course->get_id();
197
+ $filter_user_items->ref_type = LP_COURSE_CPT;
198
+ $users_items_result = $lp_user_items_db->get_user_items( $filter_user_items );
199
+
200
+ $item_ids = $course->get_item_ids();
201
+
202
+ $users_items_ids_need_delete = [];
203
+ foreach ( $users_items_result as $user_item ) {
204
+ //$users_items[ $user_item->item_id ] = $user_item->user_item_id;
205
+ $item_id = $user_item->item_id;
206
+ if ( ! in_array( $item_id, $item_ids ) ) {
207
+ $users_items_ids_need_delete[] = $user_item->user_item_id;
208
+ }
209
+ }
210
+
211
+ if ( empty( $users_items_ids_need_delete ) ) {
212
+ return;
213
+ }
214
+
215
+ // Delete on tb lp_user_items
216
+ $filter_delete = new LP_User_Items_Filter();
217
+ $filter_delete->user_item_ids = $users_items_ids_need_delete;
218
+ $lp_user_items_db->remove_user_item_ids( $filter_delete );
219
+
220
+ // Delete user_itemmeta
221
+ $lp_user_items_db->remove_user_itemmeta( $filter_delete );
222
+
223
+ // Delete user_item_results
224
+ $lp_user_item_results_db->remove_user_item_results( $filter_delete );
225
+ } catch ( Throwable $e ) {
226
+ error_log( $e->getMessage() );
227
+ }
228
+ }
229
+
230
  /**
231
  * Check user is Instructor and enable review post of Instructor
232
  *
inc/background-process/class-lp-background-single-order.php CHANGED
@@ -23,8 +23,6 @@ if ( ! class_exists( 'LP_Background_Order' ) ) {
23
 
24
  /**
25
  * Get params via $_POST and handle
26
- * @in_array
27
- * @see LP_Course_Post_Type::save
28
  */
29
  protected function handle() {
30
 
23
 
24
  /**
25
  * Get params via $_POST and handle
 
 
26
  */
27
  protected function handle() {
28
 
inc/cache.php CHANGED
@@ -345,7 +345,7 @@ class LP_Object_Cache {
345
  }
346
 
347
  if ( self::_exists( $key, $group ) ) {
348
- $found = true;
349
  $self->cache_hits += 1;
350
  if ( is_object( $self->cache[ $group ][ $key ] ) ) {
351
  return clone $self->cache[ $group ][ $key ];
@@ -354,7 +354,7 @@ class LP_Object_Cache {
354
  }
355
  }
356
 
357
- $found = false;
358
  $self->cache_misses += 1;
359
 
360
  return false;
@@ -517,7 +517,7 @@ class LP_Object_Cache {
517
  *
518
  * @since 2.0.0
519
  */
520
- public static function stats() {
521
  $self = self::instance();
522
  echo '<p>';
523
  echo "<strong>Cache Hits:</strong> {$self->cache_hits}<br />";
@@ -529,7 +529,7 @@ class LP_Object_Cache {
529
  2 ) . 'k )</li>';
530
  }
531
  echo '</ul>';
532
- }
533
 
534
  /**
535
  * Switches the internal blog ID.
@@ -561,8 +561,10 @@ class LP_Object_Cache {
561
  protected static function _exists( $key, $group ) {
562
  $self = self::instance();
563
 
564
- return isset( $self->cache[ $group ] ) && ( isset( $self->cache[ $group ][ $key ] ) || array_key_exists( $key,
565
- $self->cache[ $group ] ) );
 
 
566
  }
567
 
568
  /**
345
  }
346
 
347
  if ( self::_exists( $key, $group ) ) {
348
+ $found = true;
349
  $self->cache_hits += 1;
350
  if ( is_object( $self->cache[ $group ][ $key ] ) ) {
351
  return clone $self->cache[ $group ][ $key ];
354
  }
355
  }
356
 
357
+ $found = false;
358
  $self->cache_misses += 1;
359
 
360
  return false;
517
  *
518
  * @since 2.0.0
519
  */
520
+ /*public static function stats() {
521
  $self = self::instance();
522
  echo '<p>';
523
  echo "<strong>Cache Hits:</strong> {$self->cache_hits}<br />";
529
  2 ) . 'k )</li>';
530
  }
531
  echo '</ul>';
532
+ }*/
533
 
534
  /**
535
  * Switches the internal blog ID.
561
  protected static function _exists( $key, $group ) {
562
  $self = self::instance();
563
 
564
+ return isset( $self->cache[ $group ] ) && ( isset( $self->cache[ $group ][ $key ] ) || array_key_exists(
565
+ $key,
566
+ $self->cache[ $group ]
567
+ ) );
568
  }
569
 
570
  /**
inc/cache/class-lp-cache.php CHANGED
@@ -22,10 +22,6 @@ class LP_Cache {
22
  * @var string Add key group parent with key group child
23
  */
24
  protected $key_group = '';
25
- /**
26
- * @var float|int default expire
27
- */
28
- protected $expire = DAY_IN_SECONDS;
29
 
30
  protected function __construct() {
31
  $this->key_group = $this->key_group_parent . $this->key_group_child;
@@ -33,16 +29,12 @@ class LP_Cache {
33
 
34
  /**
35
  * Set cache
36
- * $expire = -1 is get default expire time on one day(DAY_IN_SECONDS)
37
  *
38
  * @param string $key
39
  * @param mixed $data
40
  * @param int $expire
41
  */
42
- public function set_cache( string $key, $data, int $expire = -1 ) {
43
- if ( -1 === $expire ) {
44
- $expire = $this->expire;
45
- }
46
  wp_cache_set( $key, $data, $this->key_group, $expire );
47
  }
48
 
22
  * @var string Add key group parent with key group child
23
  */
24
  protected $key_group = '';
 
 
 
 
25
 
26
  protected function __construct() {
27
  $this->key_group = $this->key_group_parent . $this->key_group_child;
29
 
30
  /**
31
  * Set cache
 
32
  *
33
  * @param string $key
34
  * @param mixed $data
35
  * @param int $expire
36
  */
37
+ public function set_cache( string $key, $data, int $expire = 0 ) {
 
 
 
38
  wp_cache_set( $key, $data, $this->key_group, $expire );
39
  }
40
 
inc/cart/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/class-lp-ajax.php CHANGED
@@ -274,14 +274,17 @@ if ( ! class_exists( 'LP_AJAX' ) ) {
274
  'redirect' => $course->get_item_link( $item_id ),
275
  );
276
 
277
- $item = $course->get_item( $item_id );
278
- $nonce_action = $item->get_nonce_action( 'complete', $course_id, $user->get_id() );
279
  try {
280
  // security check
281
  if ( ! $post || ( $post && ! wp_verify_nonce( $nonce, 'lesson-complete' ) ) ) {
282
  throw new Exception( __( 'Error! Invalid lesson or failed security check.', 'learnpress' ), 8000 );
283
  }
284
 
 
 
 
 
 
285
  $result = $user->complete_lesson( $item_id );
286
 
287
  if ( ! is_wp_error( $result ) ) {
@@ -292,7 +295,7 @@ if ( ! class_exists( 'LP_AJAX' ) ) {
292
 
293
  learn_press_add_message( sprintf( __( 'Congrats! You have completed "%s".', 'learnpress' ), $item->get_title() ) );
294
  } else {
295
- learn_press_add_message( $result->get_error_message(), 'error' );
296
  }
297
 
298
  $response = apply_filters( 'learn-press/user-completed-lesson-result', $response, $item_id, $course_id, $user->get_id() );
274
  'redirect' => $course->get_item_link( $item_id ),
275
  );
276
 
 
 
277
  try {
278
  // security check
279
  if ( ! $post || ( $post && ! wp_verify_nonce( $nonce, 'lesson-complete' ) ) ) {
280
  throw new Exception( __( 'Error! Invalid lesson or failed security check.', 'learnpress' ), 8000 );
281
  }
282
 
283
+ $item = $course->get_item( $item_id );
284
+ if ( ! $item instanceof LP_Course_Item ) {
285
+ throw new Exception( 'Item is invalid!' );
286
+ }
287
+
288
  $result = $user->complete_lesson( $item_id );
289
 
290
  if ( ! is_wp_error( $result ) ) {
295
 
296
  learn_press_add_message( sprintf( __( 'Congrats! You have completed "%s".', 'learnpress' ), $item->get_title() ) );
297
  } else {
298
+ throw new Exception( $result->get_error_message(), 'error' );
299
  }
300
 
301
  $response = apply_filters( 'learn-press/user-completed-lesson-result', $response, $item_id, $course_id, $user->get_id() );
inc/class-lp-checkout.php CHANGED
@@ -748,7 +748,7 @@ class LP_Checkout {
748
  $course_id = get_transient( 'checkout_enroll_course_id' );
749
 
750
  if ( ! $course_id ) {
751
- if ( isset( $_REQUEST['enroll-course'] ) && $_REQUEST['enroll-course'] ) {
752
  $course_id = absint( $_REQUEST['enroll-course'] );
753
  }
754
  }
748
  $course_id = get_transient( 'checkout_enroll_course_id' );
749
 
750
  if ( ! $course_id ) {
751
+ if ( ! empty( $_REQUEST['enroll-course'] ) ) {
752
  $course_id = absint( $_REQUEST['enroll-course'] );
753
  }
754
  }
inc/class-lp-compress-string.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
- class LP_Compress_String{
3
  public static function decompressString( $compressed ) {
4
- $compressed = explode( ",", $compressed );
5
  $dictSize = 256;
6
  $dictionary = array();
7
  for ( $i = 1; $i < 256; $i ++ ) {
@@ -10,16 +10,16 @@ class LP_Compress_String{
10
  $w = chr( $compressed[0] );
11
  $result = $w;
12
  for ( $i = 1; $i < count( $compressed ); $i ++ ) {
13
- $entry = "";
14
  $k = $compressed[ $i ];
15
  if ( isset( $dictionary[ $k ] ) ) {
16
  $entry = $dictionary[ $k ];
17
- } else if ( $k == $dictSize ) {
18
  $entry = $w . self::charAt( $w, 0 );
19
  } else {
20
  return null;
21
  }
22
- $result .= $entry;
23
  $dictionary[ $dictSize ++ ] = $w . self::charAt( $entry, 0 );
24
  $w = $entry;
25
  }
@@ -35,15 +35,15 @@ class LP_Compress_String{
35
  }
36
  }
37
 
38
- public static function chr($u){
39
- return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
40
  }
41
 
42
- public static function toCharCodes($c){
43
  $x = 'charCodeAt';
44
  $b = '';
45
  $e = array();
46
- $f = str_split($c );
47
  $d = [];
48
  $a = $f[0];
49
  $g = 256;
@@ -66,68 +66,66 @@ class LP_Compress_String{
66
 
67
  public static function compressString( $c ) {
68
 
69
- $d = self::toCharCodes($c);
70
 
71
  for ( $b = 0; $b < sizeof( $d ); $b ++ ) {
72
  $d[ $b ] = self::chr( $d[ $b ] );
73
  }
74
 
75
- return join( $d, "" );
76
-
77
-
78
- // $dictSize = 256;
79
- // $dictionary = array();
80
- // for ( $i = 0; $i < 256; $i ++ ) {
81
- // $dictionary[ chr( $i ) ] = $i;
82
- // }
83
- // $w = "";
84
- // $result = "";
85
- // for ( $i = 0; $i < strlen( $uncompressed ); $i ++ ) {
86
- // $c = self::charAt( $uncompressed, $i );
87
- // $wc = $w . $c;
88
- // if ( isset( $dictionary[ $wc ] ) ) {
89
- // $w = $wc;
90
- // } else {
91
- // if ( $result != "" ) {
92
- // $result .= "," . $dictionary[ $w ];
93
- // } else {
94
- // $result .= $dictionary[ $w ];
95
- // }
96
- // $dictionary[ $wc ] = $dictSize ++;
97
- // $w = "" . $c;
98
- // }
99
- // }
100
- // if ( $w != "" ) {
101
- // if ( $result != "" ) {
102
- // $result .= "," . $dictionary[ $w ];
103
- // } else {
104
- // $result .= $dictionary[ $w ];
105
- //
106
- // }
107
- //
108
- // return $result;
109
- // }
110
  }
111
 
112
- public static function utf8_char_code_at($str, $index)
113
- {
114
- $char = '';
115
  $str_index = 0;
116
 
117
- $str = self::utf8_scrub($str);
118
- $len = strlen($str);
119
 
120
- for ($i = 0; $i < $len; $i += 1) {
121
 
122
- $char .= $str[$i];
123
 
124
- if (self::utf8_check_encoding($char)) {
125
 
126
- if ($str_index === $index) {
127
- return self::utf8_ord($char);
128
  }
129
 
130
- $char = '';
131
  $str_index += 1;
132
  }
133
  }
@@ -135,34 +133,31 @@ class LP_Compress_String{
135
  return null;
136
  }
137
 
138
- public static function utf8_scrub($str)
139
- {
140
- return htmlspecialchars_decode(htmlspecialchars($str, ENT_SUBSTITUTE, 'UTF-8'));
141
  }
142
 
143
- public static function utf8_check_encoding($str)
144
- {
145
- return $str === self::utf8_scrub($str);
146
  }
147
 
148
- public static function utf8_ord($char)
149
- {
150
- $lead = ord($char[0]);
151
 
152
- if ($lead < 0x80) {
153
  return $lead;
154
- } else if ($lead < 0xE0) {
155
- return (($lead & 0x1F) << 6)
156
- | (ord($char[1]) & 0x3F);
157
- } else if ($lead < 0xF0) {
158
- return (($lead & 0xF) << 12)
159
- | ((ord($char[1]) & 0x3F) << 6)
160
- | (ord($char[2]) & 0x3F);
161
  } else {
162
- return (($lead & 0x7) << 18)
163
- | ((ord($char[1]) & 0x3F) << 12)
164
- | ((ord($char[2]) & 0x3F) << 6)
165
- | (ord($char[3]) & 0x3F);
166
  }
167
  }
168
  }
1
  <?php
2
+ class LP_Compress_String {
3
  public static function decompressString( $compressed ) {
4
+ $compressed = explode( ',', $compressed );
5
  $dictSize = 256;
6
  $dictionary = array();
7
  for ( $i = 1; $i < 256; $i ++ ) {
10
  $w = chr( $compressed[0] );
11
  $result = $w;
12
  for ( $i = 1; $i < count( $compressed ); $i ++ ) {
13
+ $entry = '';
14
  $k = $compressed[ $i ];
15
  if ( isset( $dictionary[ $k ] ) ) {
16
  $entry = $dictionary[ $k ];
17
+ } elseif ( $k == $dictSize ) {
18
  $entry = $w . self::charAt( $w, 0 );
19
  } else {
20
  return null;
21
  }
22
+ $result .= $entry;
23
  $dictionary[ $dictSize ++ ] = $w . self::charAt( $entry, 0 );
24
  $w = $entry;
25
  }
35
  }
36
  }
37
 
38
+ public static function chr( $u ) {
39
+ return mb_convert_encoding( '&#' . intval( $u ) . ';', 'UTF-8', 'HTML-ENTITIES' );
40
  }
41
 
42
+ public static function toCharCodes( $c ) {
43
  $x = 'charCodeAt';
44
  $b = '';
45
  $e = array();
46
+ $f = str_split( $c );
47
  $d = [];
48
  $a = $f[0];
49
  $g = 256;
66
 
67
  public static function compressString( $c ) {
68
 
69
+ $d = self::toCharCodes( $c );
70
 
71
  for ( $b = 0; $b < sizeof( $d ); $b ++ ) {
72
  $d[ $b ] = self::chr( $d[ $b ] );
73
  }
74
 
75
+ return join( $d, '' );
76
+
77
+ // $dictSize = 256;
78
+ // $dictionary = array();
79
+ // for ( $i = 0; $i < 256; $i ++ ) {
80
+ // $dictionary[ chr( $i ) ] = $i;
81
+ // }
82
+ // $w = "";
83
+ // $result = "";
84
+ // for ( $i = 0; $i < strlen( $uncompressed ); $i ++ ) {
85
+ // $c = self::charAt( $uncompressed, $i );
86
+ // $wc = $w . $c;
87
+ // if ( isset( $dictionary[ $wc ] ) ) {
88
+ // $w = $wc;
89
+ // } else {
90
+ // if ( $result != "" ) {
91
+ // $result .= "," . $dictionary[ $w ];
92
+ // } else {
93
+ // $result .= $dictionary[ $w ];
94
+ // }
95
+ // $dictionary[ $wc ] = $dictSize ++;
96
+ // $w = "" . $c;
97
+ // }
98
+ // }
99
+ // if ( $w != "" ) {
100
+ // if ( $result != "" ) {
101
+ // $result .= "," . $dictionary[ $w ];
102
+ // } else {
103
+ // $result .= $dictionary[ $w ];
104
+ //
105
+ // }
106
+ //
107
+ // return $result;
108
+ // }
 
109
  }
110
 
111
+ public static function utf8_char_code_at( $str, $index ) {
112
+ $char = '';
 
113
  $str_index = 0;
114
 
115
+ $str = self::utf8_scrub( $str );
116
+ $len = strlen( $str );
117
 
118
+ for ( $i = 0; $i < $len; $i += 1 ) {
119
 
120
+ $char .= $str[ $i ];
121
 
122
+ if ( self::utf8_check_encoding( $char ) ) {
123
 
124
+ if ( $str_index === $index ) {
125
+ return self::utf8_ord( $char );
126
  }
127
 
128
+ $char = '';
129
  $str_index += 1;
130
  }
131
  }
133
  return null;
134
  }
135
 
136
+ public static function utf8_scrub( $str ) {
137
+ return htmlspecialchars_decode( htmlspecialchars( $str, ENT_SUBSTITUTE, 'UTF-8' ) );
 
138
  }
139
 
140
+ public static function utf8_check_encoding( $str ) {
141
+ return $str === self::utf8_scrub( $str );
 
142
  }
143
 
144
+ public static function utf8_ord( $char ) {
145
+ $lead = ord( $char[0] );
 
146
 
147
+ if ( $lead < 0x80 ) {
148
  return $lead;
149
+ } elseif ( $lead < 0xE0 ) {
150
+ return ( ( $lead & 0x1F ) << 6 )
151
+ | ( ord( $char[1] ) & 0x3F );
152
+ } elseif ( $lead < 0xF0 ) {
153
+ return ( ( $lead & 0xF ) << 12 )
154
+ | ( ( ord( $char[1] ) & 0x3F ) << 6 )
155
+ | ( ord( $char[2] ) & 0x3F );
156
  } else {
157
+ return ( ( $lead & 0x7 ) << 18 )
158
+ | ( ( ord( $char[1] ) & 0x3F ) << 12 )
159
+ | ( ( ord( $char[2] ) & 0x3F ) << 6 )
160
+ | ( ord( $char[3] ) & 0x3F );
161
  }
162
  }
163
  }
inc/class-lp-datetime.php CHANGED
@@ -182,7 +182,7 @@ class LP_Datetime extends DateTime {
182
  *
183
  * @return string The date string in the specified format format.
184
  */
185
- public function format( $format, $local = true ) {
186
  if ( '0000-00-00 00:00:00' === $this->raw_date ) {
187
  return '';
188
  }
182
  *
183
  * @return string The date string in the specified format format.
184
  */
185
+ public function format( $format = '', $local = true ) {
186
  if ( '0000-00-00 00:00:00' === $this->raw_date ) {
187
  return '';
188
  }
inc/class-lp-gdpr.php DELETED
@@ -1,609 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Class LP_GDPR
5
- *
6
- * Personal data export and removal for LearnPress
7
- *
8
- * @since 4.9.6
9
- */
10
- class LP_GDPR {
11
-
12
- /**
13
- * LP_GDPR constructor.
14
- */
15
- public function __construct() {
16
- // Filter to wp privacy personal data exporter
17
- add_filter(
18
- 'wp_privacy_personal_data_exporters',
19
- array( $this, 'register_exporter' ),
20
- 10
21
- );
22
-
23
- add_filter(
24
- 'wp_privacy_personal_data_erasers',
25
- array( $this, 'register_data_eraser' )
26
- );
27
- }
28
-
29
- public function register_data_eraser( $erasers ) {
30
- $erasers['learnpress'] = array(
31
- 'eraser_friendly_name' => __( 'LearnPress' ),
32
- 'callback' => array( $this, 'personal_data_eraser' ),
33
- );
34
-
35
- return $erasers;
36
- }
37
-
38
- /**
39
- * @param array $exporters
40
- *
41
- * @return mixed
42
- */
43
- public function register_exporter( $exporters ) {
44
-
45
- /**
46
- * Owned courses
47
- */
48
- $exporters['learnpress-owned-courses'] = array(
49
- 'exporter_friendly_name' => __( 'LearnPress Owned Courses', 'learnpress' ),
50
- 'callback' => array( $this, 'user_owned_courses' ),
51
- );
52
-
53
- /**
54
- * Orders
55
- */
56
- $exporters['learnpress-orders'] = array(
57
- 'exporter_friendly_name' => __( 'LearnPress Orders', 'learnpress' ),
58
- 'callback' => array( $this, 'user_orders' ),
59
- );
60
-
61
- /**
62
- * Purchased courses
63
- */
64
- $exporters['learnpress-purchased-courses'] = array(
65
- 'exporter_friendly_name' => __( 'LearnPress Purchased Courses', 'learnpress' ),
66
- 'callback' => array( $this, 'user_purchased_courses' ),
67
- );
68
-
69
- /**
70
- * Profile
71
- */
72
- $exporters['learnpress-profile'] = array(
73
- 'exporter_friendly_name' => __( 'LearnPress User Profile', 'learnpress' ),
74
- 'callback' => array( $this, 'user_profile' ),
75
- );
76
-
77
- return $exporters;
78
- }
79
-
80
- public function user_profile( $email_address, $page ) {
81
- $export_data = array(
82
- 'data' => array(),
83
- 'done' => true,
84
- );
85
-
86
- $wp_user = get_user_by( 'email', $email_address );
87
-
88
- if ( ! $wp_user ) {
89
- return $export_data;
90
- }
91
-
92
- $user = learn_press_get_user( $wp_user->ID );
93
- $profile = LP_Profile::instance( $wp_user->ID );
94
- $export_items = array();
95
-
96
- $user = $profile->get_user();
97
-
98
- if ( $user ) {
99
- $privacy = $user->get_data( 'profile_privacy' );
100
- if ( $privacy ) {
101
- $privacy = $user->get_data( 'profile_privacy' );
102
-
103
- $export_item = array(
104
- 'group_id' => 'lp-profile',
105
- 'group_label' => __( 'Profile Settings', 'learnpress' ),
106
- 'item_id' => 'profile-' . $wp_user->ID,
107
- 'data' => array(),
108
- );
109
- foreach ( $privacy as $key => $item ) {
110
- $export_item['data'][] = array(
111
- 'name' => $key,
112
- 'value' => $item,
113
- );
114
- }
115
- $export_items[] = $export_item;
116
- }
117
- }
118
-
119
- $export_data['data'] = $export_items;
120
-
121
- return $export_data;
122
- }
123
-
124
- public function user_orders( $email_address, $page ) {
125
- $number = 10; // Limit us to avoid timing out
126
- $page = (int) $page;
127
- $export_data = array(
128
- 'data' => array(),
129
- 'done' => true,
130
- );
131
-
132
- $wp_user = get_user_by( 'email', $email_address );
133
-
134
- if ( ! $wp_user ) {
135
- return $export_data;
136
- }
137
-
138
- $profile = LP_Profile::instance( $wp_user->ID );
139
-
140
- $query_orders = $profile->query_orders(
141
- array(
142
- 'paged' => $page,
143
- 'limit' => $number,
144
- )
145
- );
146
-
147
- if ( ! $query_orders ) {
148
- return $export_data;
149
- }
150
-
151
- $orders = $query_orders->get_items();
152
-
153
- if ( ! $orders ) {
154
- return $export_data;
155
- }
156
-
157
- $export_items = array();
158
- foreach ( $orders as $order ) {
159
- if ( ! $order instanceof LP_Order ) {
160
- $order = learn_press_get_order( $order );
161
- }
162
-
163
- $data = array(
164
- array(
165
- 'name' => __( 'Order ID', 'learnpress' ),
166
- 'value' => $order->get_order_number(),
167
- ),
168
- array(
169
- 'name' => __( 'Order Date', 'learnpress' ),
170
- 'value' => $order->get_order_date(),
171
- ),
172
- array(
173
- 'name' => __( 'Order status', 'learnpress' ),
174
- 'value' => $order->get_order_status(),
175
- ),
176
- array(
177
- 'name' => __( 'Order Total', 'learnpress' ),
178
- 'value' => $order->get_formatted_order_total(),
179
- ),
180
- );
181
- $export_items[] = array(
182
- 'group_id' => 'lp-order',
183
- 'group_label' => __( 'Orders', 'learnpress' ),
184
- 'item_id' => "order-{$order->get_id()}",
185
- 'data' => $data,
186
- );
187
- }
188
-
189
- $done = count( $orders ) < $number;
190
- $export_data['done'] = $done;
191
- $export_data['data'] = $export_items;
192
-
193
- return $export_data;
194
- }
195
-
196
- /**
197
- * Course list
198
- *
199
- * @param string $email_address
200
- * @param int $page
201
- *
202
- * @return array
203
- */
204
- public function user_owned_courses( $email_address, $page ) {
205
-
206
- $number = 10; // Limit us to avoid timing out
207
- $page = (int) $page;
208
- $export_items = array();
209
-
210
- $query = $this->get_courses_by_email(
211
- 'own',
212
- $email_address,
213
- array(
214
- 'paged' => $page,
215
- 'limit' => $number,
216
- 'status' => '*',
217
- )
218
- );
219
-
220
- if ( ! $query ) {
221
- return array(
222
- 'data' => array(),
223
- 'done' => true,
224
- );
225
- }
226
-
227
- $courses = (array) $query->get_items();
228
-
229
- if ( $courses ) {
230
- foreach ( $courses as $course_id ) {
231
- $course = learn_press_get_course( $course_id );
232
-
233
- if ( ! $course ) {
234
- continue;
235
- }
236
-
237
- $data = array(
238
- array(
239
- 'name' => __( 'Course Author', 'learnpress' ),
240
- 'value' => $course->get_author_display_name(),
241
- ),
242
- array(
243
- 'name' => __( 'Course Name', 'learnpress' ),
244
- 'value' => $course->get_title(),
245
- ),
246
- array(
247
- 'name' => __( 'Course Date', 'learnpress' ),
248
- 'value' => get_post_field( 'post_date', $course_id ),
249
- ),
250
- array(
251
- 'name' => __( 'Course URL', 'learnpress' ),
252
- 'value' => $course->get_permalink(),
253
- ),
254
- );
255
- $export_items[] = array(
256
- 'group_id' => 'lp-owned-course',
257
- 'group_label' => __( 'Owned Course', 'learnpress' ),
258
- 'item_id' => "course-{$course->get_id()}",
259
- 'data' => $data,
260
- );
261
-
262
- $this->_export_course_items( $export_items, $course_id );
263
- }
264
- }
265
- $done = count( $courses ) < $number;
266
-
267
- return array(
268
- 'data' => $export_items,
269
- 'done' => $done,
270
- );
271
- }
272
-
273
- /**
274
- * @param array $export_items
275
- */
276
- protected function _export_course_items( &$export_items, $course_id ) {
277
- global $post;
278
-
279
- $post = get_post( $course_id );
280
- setup_postdata( $post );
281
- $course = learn_press_get_course( $course_id );
282
-
283
- $items = $course->get_items();
284
-
285
- if ( ! $items ) {
286
- return;
287
- }
288
-
289
- foreach ( $items as $item_id ) {
290
- $item = $course->get_item( $item_id );
291
- $export_item_data = array(
292
- array(
293
- 'name' => __( 'Item Name', 'learnpress' ),
294
- 'value' => $item->get_title(),
295
- ),
296
- array(
297
- 'name' => __( 'Item Type', 'learnpress' ),
298
- 'value' => $item->get_item_type( 'display' ),
299
- ),
300
- array(
301
- 'name' => __( 'Item URL', 'learnpress' ),
302
- 'value' => $item->get_permalink(),
303
- ),
304
- );
305
-
306
- $export_items[] = array(
307
- 'group_id' => 'lp-owned-course-items-' . $course_id,
308
- 'group_label' => __( 'Course Items', 'learnpress' ),
309
- 'item_id' => "course-items-{$course_id}-{$item_id}",
310
- 'data' => $export_item_data,
311
- );
312
- }
313
-
314
- wp_reset_postdata();
315
- }
316
-
317
- /**
318
- * @param string $email_address
319
- * @param string $page
320
- *
321
- * @return array
322
- */
323
- public function user_purchased_courses( $email_address, $page ) {
324
-
325
- $number = 10; // Limit us to avoid timing out
326
- $page = (int) $page;
327
- $export_data = array(
328
- 'data' => array(),
329
- 'done' => true,
330
- );
331
-
332
- $wp_user = get_user_by( 'email', $email_address );
333
-
334
- if ( ! $wp_user ) {
335
- return $export_data;
336
- }
337
-
338
- $user = learn_press_get_user( $wp_user->ID );
339
- $query = $this->get_courses_by_email(
340
- 'purchased',
341
- $email_address,
342
- array(
343
- 'paged' => $page,
344
- 'limit' => $number,
345
- )
346
- );
347
-
348
- if ( ! $query ) {
349
- return $export_data;
350
- }
351
-
352
- $export_items = array();
353
- $courses = (array) $query->get_items();
354
-
355
- if ( $courses ) {
356
- foreach ( $courses as $course_data ) {
357
-
358
- $course = learn_press_get_course( $course_data->get_id() );
359
- // if ( $course_data = $user->get_course_data( $course_id ) ) {
360
- $enrolled_date = $course_data->get_start_time();
361
- $finished_date = $course_data->get_end_time();
362
- $status = $course_data->get_status();
363
- $grade = $course_data->get_grade();
364
- // }
365
-
366
- $data = array(
367
- array(
368
- 'name' => __( 'Course Author', 'learnpress' ),
369
- 'value' => $course->get_author_display_name(),
370
- ),
371
- array(
372
- 'name' => __( 'Course Name', 'learnpress' ),
373
- 'value' => $course->get_title(),
374
- ),
375
- array(
376
- 'name' => __( 'Course Date', 'learnpress' ),
377
- 'value' => get_post_field( 'post_date', $course_data->get_id() ),
378
- ),
379
- array(
380
- 'name' => __( 'Course URL', 'learnpress' ),
381
- 'value' => $course->get_permalink(),
382
- ),
383
- array(
384
- 'name' => __( 'Enrolled Date', 'learnpress' ),
385
- 'value' => $enrolled_date,
386
- ),
387
- array(
388
- 'name' => __( 'Finished Date', 'learnpress' ),
389
- 'value' => $finished_date ? $finished_date : '-',
390
- ),
391
- array(
392
- 'name' => __( 'Course Status', 'learnpress' ),
393
- 'value' => $status,
394
- ),
395
- array(
396
- 'name' => __( 'Course Grade', 'learnpress' ),
397
- 'value' => $status == 'finished' ? $grade : __( 'Ungraded', 'learnpress' ),
398
- ),
399
- );
400
- $export_items[] = array(
401
- 'group_id' => 'lp-purchased-course-' . $course_data->get_id(),
402
- 'group_label' => __( 'Purchased Course', 'learnpress' ),
403
- 'item_id' => "course-{$course_data->get_id()}",
404
- 'data' => $data,
405
- );
406
-
407
- $this->_export_purchased_course_items( $export_items, $course_data );
408
- }
409
- }
410
-
411
- $done = count( $courses ) < $number;
412
- $export_data['data'] = $export_items;
413
- $export_data['done'] = $done;
414
-
415
- return $export_data;
416
- }
417
-
418
- /**
419
- * @param array $export_items
420
- * @param LP_User_Item_Course $course_data
421
- */
422
- protected function _export_purchased_course_items( &$export_items, $course_data ) {
423
- global $post;
424
- $post = get_post( $course_data->get_id() );
425
- setup_postdata( $post );
426
- $course = learn_press_get_course( $course_data->get_id() );
427
-
428
- $items = $course_data->get_items();
429
-
430
- if ( ! $items ) {
431
- return;
432
- }
433
-
434
- foreach ( $items as $user_course_item ) {
435
- $item = $course->get_item( $user_course_item->get_id() );
436
- $export_item_data = array(
437
- array(
438
- 'name' => __( 'Item Name', 'learnpress' ),
439
- 'value' => $item->get_title(),
440
- ),
441
- array(
442
- 'name' => __( 'Item Type', 'learnpress' ),
443
- 'value' => $item->get_item_type( 'display' ),
444
- ),
445
- array(
446
- 'name' => __( 'Item URL', 'learnpress' ),
447
- 'value' => $item->get_permalink(),
448
- ),
449
- );
450
-
451
- if ( $item->get_item_type() == LP_QUIZ_CPT ) {
452
- $export_item_data[] = array(
453
- 'name' => __( 'Status', 'learnpress' ),
454
- 'value' => $user_course_item->get_result() . '%',
455
- );
456
-
457
- $export_item_data[] = array(
458
- 'name' => __( 'Grade', 'learnpress' ),
459
- 'value' => $user_course_item->get_graduation(),
460
- );
461
- } elseif ( $item->get_item_type() == LP_LESSON_CPT ) {
462
- $export_item_data[] = array(
463
- 'name' => __( 'Completed', 'learnpress' ),
464
- 'value' => $user_course_item->get_status() === 'completed' ? __( 'Yes', 'learnpress' ) : __(
465
- 'No',
466
- 'learnpress'
467
- ),
468
- );
469
- }
470
-
471
- $export_items[] = array(
472
- 'group_id' => 'lp-purchased-course-items-' . $course_data->get_id(),
473
- 'group_label' => __( 'Course Items', 'learnpress' ),
474
- 'item_id' => "course-{$course_data->get_id()}-{$user_course_item->get_id()}",
475
- 'data' => $export_item_data,
476
- );
477
- }
478
-
479
- wp_reset_postdata();
480
- }
481
-
482
- /**
483
- * Query all courses by user email
484
- *
485
- * @param string $type
486
- * @param string $email
487
- * @param array $args
488
- *
489
- * @return array|bool|LP_Query_List_Table
490
- */
491
- protected function get_courses_by_email( $type = 'own', $email = '', $args = array() ) {
492
- $user = get_user_by( 'email', $email );
493
-
494
- if ( ! $user ) {
495
- return false;
496
- }
497
-
498
- $profile = LP_Profile::instance( $user->ID );
499
-
500
- return $profile->query_courses(
501
- $type,
502
- $args
503
- );
504
- }
505
-
506
- /**
507
- * Eraser personal data
508
- *
509
- * @param string $email
510
- * @param int $page
511
- *
512
- * @return array
513
- */
514
- public function personal_data_eraser( $email, $page ) {
515
- $number = 500;
516
- $page = (int) $page;
517
-
518
- $eraser_data = array(
519
- 'items_removed' => false,
520
- 'items_retained' => false,
521
- 'messages' => array(),
522
- 'done' => 1,
523
- );
524
-
525
- $wp_user = get_user_by( 'email', $email );
526
-
527
- if ( ! $wp_user ) {
528
- return $eraser_data;
529
- }
530
-
531
- $this->_eraser_orders( $wp_user->ID, $page );
532
- $this->_eraser_user_items( $wp_user->ID, $page );
533
- $this->_eraser_courses( $wp_user->ID, $page );
534
-
535
- delete_user_meta( $wp_user->ID, '_lp_profile_privacy' );
536
- $eraser_data['items_removed'] = true;
537
-
538
- return $eraser_data;
539
- }
540
-
541
- /**
542
- * Eraser orders
543
- *
544
- * @param int $user_id
545
- * @param int $page
546
- */
547
- protected function _eraser_orders( $user_id, $page ) {
548
- $curd = new LP_User_CURD();
549
- $order_curd = new LP_Order_CURD();
550
-
551
- $orders = $curd->get_orders( $user_id, array( 'group_by_order' => true ) );
552
-
553
- if ( ! $orders ) {
554
- return;
555
- }
556
-
557
- foreach ( $orders as $order_id => $course_ids ) {
558
- $order = learn_press_get_order( $order_id );
559
- wp_delete_post( $order_id );
560
- }
561
-
562
- }
563
-
564
- /**
565
- * Eraser user items
566
- *
567
- * @param int $user_id
568
- * @param int $page
569
- */
570
- protected function _eraser_user_items( $user_id, $page ) {
571
- $curd = new LP_User_CURD();
572
- $curd->delete_user_item( array( 'user_id' => $user_id ) );
573
- }
574
-
575
- /**
576
- * Eraser courses
577
- *
578
- * @param int $user_id
579
- * @param int $page
580
- */
581
- protected function _eraser_courses( $user_id, $page ) {
582
- global $wpdb;
583
-
584
- $query = $wpdb->prepare(
585
- "
586
- SELECT *
587
- FROM {$wpdb->posts}
588
- WHERE post_author = %d
589
- AND post_type = %s
590
- ",
591
- $user_id,
592
- LP_COURSE_CPT
593
- );
594
-
595
- $post_ids = $wpdb->get_col( $query );
596
-
597
- if ( ! $post_ids ) {
598
- return;
599
- }
600
-
601
- $api = new LP_Course_CURD();
602
- foreach ( $post_ids as $post_id ) {
603
- $api->delete_course( $post_id, true );
604
- }
605
- }
606
-
607
- }
608
-
609
- return new LP_GDPR();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/class-lp-hard-cache.php DELETED
@@ -1,255 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Class LP_Hard_Cache
5
- *
6
- * Cache content in files
7
- *
8
- * @since 3.0.0
9
- */
10
- class LP_Hard_Cache {
11
-
12
- /**
13
- * @var string
14
- */
15
- protected static $_root_path = '';
16
-
17
- /**
18
- * @var string
19
- */
20
- protected static $_default_group = '';
21
-
22
- /**
23
- * @var bool
24
- */
25
- protected static $_lock = false;
26
-
27
- /**
28
- * @var bool
29
- */
30
- protected static $_hard_lock = false;
31
-
32
- /**
33
- * Init
34
- */
35
- /*public static function init() {
36
- $upload_dir = wp_upload_dir();
37
- self::$_root_path = trailingslashit( $upload_dir['basedir'] ) . 'lp-cache';
38
-
39
- if ( defined( 'LP_HARD_CACHE' ) ) {
40
- self::$_lock = self::$_hard_lock = ! LP_HARD_CACHE;
41
- } else {
42
- self::$_lock = self::$_hard_lock = ! ( 'yes' === LP_Settings::instance()->get( 'enable_hard_cache' ) );
43
- }
44
-
45
- if ( self::is_locked() ) {
46
- return;
47
- }
48
-
49
- @wp_mkdir_p( self::$_root_path ); // phpcs:ignore
50
- }*/
51
-
52
- /**
53
- * Replace existing cache with new data.
54
- *
55
- * @param string $key
56
- * @param mixed $data
57
- * @param string $group
58
- *
59
- * @return bool
60
- */
61
- public static function replace( $key, $data, $group = '' ) {
62
- if ( self::is_locked() ) {
63
- return false;
64
- }
65
-
66
- $file = self::get_file( $key, $group );
67
-
68
- if ( ! file_exists( $file ) ) {
69
- return false;
70
- }
71
-
72
- return self::write( $key, $data, $group );
73
- }
74
-
75
- /**
76
- * Set cache content, replace if existing.
77
- *
78
- * @param string $key
79
- * @param mixed $data
80
- * @param string $group
81
- *
82
- * @return bool
83
- */
84
- public static function set( $key, $data, $group = '' ) {
85
- if ( self::is_locked() ) {
86
- return false;
87
- }
88
-
89
- return self::write( $key, $data, $group, true );
90
- }
91
-
92
- /**
93
- * Get cache from file.
94
- *
95
- * @param string $key
96
- * @param string $group
97
- *
98
- * @return bool
99
- */
100
- public static function get( $key, $group = '' ) {
101
- if ( self::is_locked() ) {
102
- return false;
103
- }
104
-
105
- return self::read( $key, $group );
106
- }
107
-
108
- /**
109
- * Read content file
110
- *
111
- * @param string $key
112
- * @param string $group
113
- *
114
- * @return bool|mixed
115
- */
116
- public static function read( $key, $group = '' ) {
117
- if ( self::is_locked() ) {
118
- return false;
119
- }
120
-
121
- $file = self::get_file( $key, $group );
122
- if ( file_exists( $file ) ) {
123
- $f = @fopen( $file, 'r' ); // phpcs:ignore
124
- $content = fread( $f, filesize( $file ) );
125
- fclose( $f );
126
-
127
- if ( ! $content ) {
128
- return false;
129
- }
130
-
131
- return LP_Helper::maybe_unserialize( $content );
132
- }
133
-
134
- return false;
135
- }
136
-
137
- /**
138
- * Write data into file.
139
- *
140
- * @param string $key
141
- * @param mixed $data
142
- * @param string $group
143
- * @param bool $overwrite
144
- *
145
- * @return bool
146
- */
147
- protected static function write( $key, $data, $group = '', $overwrite = false ) {
148
-
149
- if ( self::is_locked() ) {
150
- return false;
151
- }
152
-
153
- $file = self::get_file( $key, $group );
154
-
155
- /**
156
- * If file exists and overwrite is false
157
- */
158
- if ( $overwrite && file_exists( $file ) ) {
159
- return false;
160
- }
161
-
162
- $f = @fopen( $file, 'w' );
163
-
164
- if ( ! $f ) {
165
- return false;
166
- }
167
-
168
- fwrite( $f, maybe_serialize( $data ) );
169
- fclose( $f );
170
-
171
- return true;
172
- }
173
-
174
- /**
175
- * Get file of cache by the key and group.
176
- *
177
- * @param string $key
178
- * @param string $group
179
- *
180
- * @return string
181
- */
182
- protected static function get_file( $key, $group = '' ) {
183
- if ( self::is_locked() ) {
184
- return false;
185
- }
186
-
187
- $path = array( self::$_root_path, $group );
188
- $path = array_filter( $path );
189
- $path = join( '/', $path );
190
- @wp_mkdir_p( $path ); // phpcs:ignore
191
- $file = "{$path}/{$key}.cache";
192
-
193
- return $file;
194
- }
195
-
196
- protected static function get_path( $group = '' ) {
197
- $path = array( self::$_root_path, $group );
198
- $path = array_filter( $path );
199
- $path = join( '/', $path );
200
-
201
- return $path;
202
- }
203
-
204
- /**
205
- * Enable for updating cache temporary even it is locked.
206
- */
207
- public static function unlock() {
208
- self::$_lock = false;
209
- }
210
-
211
- /**
212
- * Disable for updating cache temporary event it is not locked.
213
- */
214
- public static function lock() {
215
- self::$_lock = true;
216
- }
217
-
218
- /**
219
- * Reset lock to default.
220
- */
221
- public static function reset_lock() {
222
- self::$_lock = self::$_hard_lock;
223
- }
224
-
225
- /**
226
- * Check if cache is locked
227
- *
228
- * @return bool
229
- */
230
- public static function is_locked() {
231
- return self::$_lock;
232
- }
233
-
234
- public static function flush( $group = false ) {
235
- if ( ! function_exists( 'WP_Filesystem' ) ) {
236
- require_once( ABSPATH . 'wp-admin/includes/file.php' );
237
- }
238
- WP_Filesystem();
239
- global $wp_filesystem;
240
-
241
- if ( ! $wp_filesystem ) {
242
- return false;
243
- }
244
-
245
- if ( $group ) {
246
- $return = $wp_filesystem->rmdir( self::get_path( $group ), true );
247
- } else {
248
- $return = $wp_filesystem->rmdir( self::$_root_path, true );
249
- }
250
-
251
- return $return;
252
- }
253
- }
254
-
255
- //add_action( 'init', array( 'LP_Hard_Cache', 'init' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/class-lp-helper.php CHANGED
@@ -94,26 +94,10 @@ class LP_Helper {
94
  *
95
  * @param array|int $ids
96
  * @Todo: tungnx - need to review code
 
97
  */
98
  public static function cache_posts( $ids ) {
99
- global $wpdb;
100
-
101
- settype( $ids, 'array' );
102
- $format = array_fill( 0, sizeof( $ids ), '%d' );
103
- $query = $wpdb->prepare(
104
- "
105
- SELECT * FROM {$wpdb->posts} WHERE ID IN(" . join( ',', $format ) . ')
106
- ',
107
- $ids
108
- );
109
-
110
- $posts = $wpdb->get_results( $query );
111
-
112
- if ( $posts ) {
113
- foreach ( $posts as $post ) {
114
- wp_cache_set( $post->ID, $post, 'posts' );
115
- }
116
- }
117
  }
118
 
119
  /**
94
  *
95
  * @param array|int $ids
96
  * @Todo: tungnx - need to review code
97
+ * @depecated 4.1.6.9
98
  */
99
  public static function cache_posts( $ids ) {
100
+ //_deprecated_function( __FUNCTION__, '4.1.6.9' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  }
102
 
103
  /**
inc/class-lp-nonce-helper.php CHANGED
@@ -39,8 +39,9 @@ class LP_Nonce_Helper {
39
  * @since 3.0.0
40
  *
41
  * @return bool
 
42
  */
43
- public static function verify_course( $nonce, $action, $course_id = 0, $user_id = 0 ) {
44
  if ( ! $course_id ) {
45
  $course_id = get_the_ID();
46
  }
@@ -50,22 +51,25 @@ class LP_Nonce_Helper {
50
  }
51
 
52
  return wp_verify_nonce( $nonce, sprintf( 'learn-press-%s-course-%s-%s', $action, $course_id, $user_id ) );
53
- }
54
 
55
  public static function quiz_action( $action, $quiz_id, $course_id, $ajax = false ) {
56
  ?>
57
- <input type="hidden" name="quiz-id" value="<?php echo $quiz_id; ?>">
58
- <input type="hidden" name="course-id" value="<?php echo $course_id; ?>">
59
  <?php if ( $ajax ) { ?>
60
- <input type="hidden" name="lp-ajax" value="<?php echo $action; ?>-quiz">
61
  <?php } else { ?>
62
- <input type="hidden" name="lp-<?php echo $action; ?>-quiz" value="<?php echo $quiz_id; ?>">
63
  <?php } ?>
64
- <input type="hidden" name="<?php echo $action; ?>-quiz-nonce" value="<?php echo wp_create_nonce( sprintf( 'learn-press/quiz/%s/%s-%s-%s', $action, get_current_user_id(), $course_id, $quiz_id ) ); ?>">
65
  <?php
66
  }
67
 
68
- public static function verify_quiz_action( $action, $nonce = '', $quiz_id = 0, $course_id = 0 ) {
 
 
 
69
  if ( ! $nonce ) {
70
  $nonce = LP_Request::get_post( $action . '-quiz-nonce' );
71
  }
@@ -80,5 +84,5 @@ class LP_Nonce_Helper {
80
  }
81
 
82
  return wp_verify_nonce( $nonce, sprintf( 'learn-press/quiz/%s/%s-%s-%s', $action, get_current_user_id(), $course_id, $quiz_id ) );
83
- }
84
  }
39
  * @since 3.0.0
40
  *
41
  * @return bool
42
+ * @depecated 4.1.6.9
43
  */
44
+ /*public static function verify_course( $nonce, $action, $course_id = 0, $user_id = 0 ) {
45
  if ( ! $course_id ) {
46
  $course_id = get_the_ID();
47
  }
51
  }
52
 
53
  return wp_verify_nonce( $nonce, sprintf( 'learn-press-%s-course-%s-%s', $action, $course_id, $user_id ) );
54
+ }*/
55
 
56
  public static function quiz_action( $action, $quiz_id, $course_id, $ajax = false ) {
57
  ?>
58
+ <input type="hidden" name="quiz-id" value="<?php echo esc_attr( $quiz_id ); ?>">
59
+ <input type="hidden" name="course-id" value="<?php echo esc_attr( $course_id ); ?>">
60
  <?php if ( $ajax ) { ?>
61
+ <input type="hidden" name="lp-ajax" value="<?php echo esc_attr( $action ); ?>-quiz">
62
  <?php } else { ?>
63
+ <input type="hidden" name="lp-<?php echo esc_attr( $action ); ?>-quiz" value="<?php echo esc_attr( $quiz_id ); ?>">
64
  <?php } ?>
65
+ <input type="hidden" name="<?php echo esc_attr( $action ); ?>-quiz-nonce" value="<?php echo wp_create_nonce( sprintf( 'learn-press/quiz/%s/%s-%s-%s', $action, get_current_user_id(), $course_id, $quiz_id ) ); ?>">
66
  <?php
67
  }
68
 
69
+ /**
70
+ * @depecated 4.1.6.9
71
+ */
72
+ /*public static function verify_quiz_action( $action, $nonce = '', $quiz_id = 0, $course_id = 0 ) {
73
  if ( ! $nonce ) {
74
  $nonce = LP_Request::get_post( $action . '-quiz-nonce' );
75
  }
84
  }
85
 
86
  return wp_verify_nonce( $nonce, sprintf( 'learn-press/quiz/%s/%s-%s-%s', $action, get_current_user_id(), $course_id, $quiz_id ) );
87
+ }*/
88
  }
inc/class-lp-page-controller.php CHANGED
@@ -34,9 +34,6 @@ class LP_Page_Controller {
34
  protected function __construct() {
35
  add_action( 'pre_get_posts', array( $this, 'pre_get_posts' ), 10 );
36
  add_filter( 'template_include', array( $this, 'template_loader' ), 10 );
37
- // Comment by tungnx
38
- // add_filter( 'template_include', array( $this, 'template_content_item' ), 20 );
39
- // add_filter( 'template_include', array( $this, 'maybe_redirect_quiz' ), 30 );
40
  add_filter( 'template_include', array( $this, 'check_pages' ), 30 );
41
  add_filter( 'template_include', array( $this, 'auto_shortcode' ), 50 );
42
 
@@ -391,35 +388,6 @@ class LP_Page_Controller {
391
  return $template;
392
  }
393
 
394
- /**
395
- * @editor tungnx
396
- * @modify 4.1.3 - comment - not use
397
- */
398
- /*
399
- public function maybe_redirect_quiz( $template ) {
400
- $course = learn_press_get_course();
401
- $quiz = LP_Global::course_item_quiz();
402
- $user = learn_press_get_current_user();
403
- $redirect = false;
404
-
405
- if ( learn_press_is_review_questions() ) {
406
- if ( ! $quiz->get_review_questions() ) {
407
- $redirect = $course->get_item_link( $quiz->get_id() );
408
- }
409
- }
410
-
411
- if ( LP_Global::quiz_question() && ! $user->has_started_quiz( $quiz->get_id(), $course->get_id() ) ) {
412
- $redirect = $course->get_item_link( $quiz->get_id() );
413
- }
414
-
415
- if ( $redirect ) {
416
- wp_redirect( $redirect );
417
- exit();
418
- }
419
-
420
- return $template;
421
- }*/
422
-
423
  /**
424
  * Load data for item of course
425
  *
@@ -438,21 +406,21 @@ class LP_Page_Controller {
438
  */
439
  global $wp, $wp_query, $lp_course_item;
440
 
441
- $lp_course = learn_press_get_course();
442
-
443
  if ( LP_COURSE_CPT !== $post->post_type ) {
444
  return $post;
445
  }
446
 
447
- $course = learn_press_get_course( $post->ID );
448
  if ( ! $course ) {
449
  return $post;
450
  }
451
 
452
  /**
453
  * @deprecated v4.1.6.1 LP()->global['course'], $GLOBALS['course']
 
454
  */
455
- LP()->global['course'] = $GLOBALS['course'] = $GLOBALS['lp_course'] = $course;
 
456
 
457
  if ( wp_verify_nonce( LP_Request::get( 'preview' ), 'preview-' . $post->ID ) ) {
458
  $GLOBALS['preview_course'] = $post->ID;
@@ -469,6 +437,8 @@ class LP_Page_Controller {
469
  }
470
 
471
  try {
 
 
472
  // If item name is set in query vars
473
  if ( ! is_numeric( $vars['course-item'] ) ) {
474
  $item_type = $vars['item-type'];
@@ -481,35 +451,14 @@ class LP_Page_Controller {
481
  return $post;
482
  }
483
 
484
- /**
485
- * Comment for reason some page-builder run wrong
486
- *
487
- * 1. Anywhere elementor
488
- * 2. WPBakery
489
- */
490
- /*$section_id = LP_Section_DB::getInstance()->get_section_id_by_item_id( $post_item->ID );
491
-
492
- if ( ! $section_id ) {
493
- throw new Exception( __( 'The item is not assigned to any section', 'learnpress' ) );
494
- }
495
-
496
- $course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $section_id );
497
-
498
- if ( ! $course_id ) {
499
- throw new Exception( __( 'The item is not assigned to any course', 'learnpress' ) );
500
- }
501
-
502
- if ( $course_id != $post->ID ) {
503
- throw new Exception( __( 'The item is not assigned to this course', 'learnpress' ) );
504
- }*/
505
-
506
- $lp_course_item = apply_filters( 'learn-press/single-course-request-item', LP_Course_Item::get_item( $post_item->ID, $course->get_id() ) );
507
 
508
  if ( ! $lp_course_item ) {
509
  return $post;
510
  }
511
 
512
- $lp_course->set_viewing_item( $lp_course_item );
 
513
  } catch ( Exception $ex ) {
514
  learn_press_add_message( $ex->getMessage(), 'error' );
515
  }
@@ -535,20 +484,6 @@ class LP_Page_Controller {
535
  return apply_filters( 'learn-press/query/404', $this->_is_404 );
536
  }
537
 
538
- public function template_content_item( $template ) {
539
-
540
- /**
541
- * @var LP_Course $lp_course
542
- * @var LP_Course_Item $lp_course_item
543
- * @var LP_User $lp_user
544
- */
545
- global $lp_course, $lp_course_item, $lp_user;
546
-
547
- do_action( 'learn-press/parse-course-item', $lp_course_item, $lp_course );
548
-
549
- return $template;
550
- }
551
-
552
  /**
553
  * In preview mode, if there is a 'post_format' in query var
554
  * wp check and replace our post-type to post. This make preview
@@ -1060,10 +995,16 @@ class LP_Page_Controller {
1060
  $is_need_check_in_arr = true;
1061
  }
1062
 
 
 
 
 
 
1063
  // Meta query
1064
  $meta_query = [];
1065
  if ( isset( $_REQUEST['sort_by'] ) ) {
1066
- if ( 'on_paid' === $_REQUEST['sort_by'] ) {
 
1067
  $meta_query[] = array(
1068
  'key' => '_lp_price',
1069
  'value' => 0,
@@ -1071,7 +1012,7 @@ class LP_Page_Controller {
1071
  );
1072
  }
1073
 
1074
- if ( 'on_free' === $_REQUEST['sort_by'] ) {
1075
  $meta_query[] = array(
1076
  'key' => '_lp_price',
1077
  'value' => 0,
@@ -1135,6 +1076,8 @@ class LP_Page_Controller {
1135
  if ( ! empty( $posts_in ) ) {
1136
  $posts_in = LP_Database::get_values_by_key( $posts_in );
1137
  $q->set( 'post__in', $posts_in );
 
 
1138
  }
1139
  }
1140
 
34
  protected function __construct() {
35
  add_action( 'pre_get_posts', array( $this, 'pre_get_posts' ), 10 );
36
  add_filter( 'template_include', array( $this, 'template_loader' ), 10 );
 
 
 
37
  add_filter( 'template_include', array( $this, 'check_pages' ), 30 );
38
  add_filter( 'template_include', array( $this, 'auto_shortcode' ), 50 );
39
 
388
  return $template;
389
  }
390
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
391
  /**
392
  * Load data for item of course
393
  *
406
  */
407
  global $wp, $wp_query, $lp_course_item;
408
 
 
 
409
  if ( LP_COURSE_CPT !== $post->post_type ) {
410
  return $post;
411
  }
412
 
413
+ $course = learn_press_get_course();
414
  if ( ! $course ) {
415
  return $post;
416
  }
417
 
418
  /**
419
  * @deprecated v4.1.6.1 LP()->global['course'], $GLOBALS['course']
420
+ * Some theme still use: global $course; LP()->global['course']
421
  */
422
+ //LP()->global['course'] = $GLOBALS['course'] = $GLOBALS['lp_course'] = $course;
423
+ LP()->global['course'] = $GLOBALS['course'] = $course;
424
 
425
  if ( wp_verify_nonce( LP_Request::get( 'preview' ), 'preview-' . $post->ID ) ) {
426
  $GLOBALS['preview_course'] = $post->ID;
437
  }
438
 
439
  try {
440
+ $user = learn_press_get_current_user();
441
+
442
  // If item name is set in query vars
443
  if ( ! is_numeric( $vars['course-item'] ) ) {
444
  $item_type = $vars['item-type'];
451
  return $post;
452
  }
453
 
454
+ $lp_course_item = apply_filters( 'learn-press/single-course-request-item', $course->get_item( $post_item->ID ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
455
 
456
  if ( ! $lp_course_item ) {
457
  return $post;
458
  }
459
 
460
+ // Set item viewing
461
+ $user->set_viewing_item( $lp_course_item );
462
  } catch ( Exception $ex ) {
463
  learn_press_add_message( $ex->getMessage(), 'error' );
464
  }
484
  return apply_filters( 'learn-press/query/404', $this->_is_404 );
485
  }
486
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
487
  /**
488
  * In preview mode, if there is a 'post_format' in query var
489
  * wp check and replace our post-type to post. This make preview
995
  $is_need_check_in_arr = true;
996
  }
997
 
998
+ $author_ids_str = LP_Helper::sanitize_params_submitted( $_REQUEST['c_authors'] ?? 0 );
999
+ if ( ! empty( $author_ids_str ) ) {
1000
+ $q->set( 'author', $author_ids_str );
1001
+ }
1002
+
1003
  // Meta query
1004
  $meta_query = [];
1005
  if ( isset( $_REQUEST['sort_by'] ) ) {
1006
+ $sort_by = LP_Helper::sanitize_params_submitted( $_REQUEST['sort_by'] );
1007
+ if ( 'on_paid' === $sort_by ) {
1008
  $meta_query[] = array(
1009
  'key' => '_lp_price',
1010
  'value' => 0,
1012
  );
1013
  }
1014
 
1015
+ if ( 'on_free' === $sort_by ) {
1016
  $meta_query[] = array(
1017
  'key' => '_lp_price',
1018
  'value' => 0,
1076
  if ( ! empty( $posts_in ) ) {
1077
  $posts_in = LP_Database::get_values_by_key( $posts_in );
1078
  $q->set( 'post__in', $posts_in );
1079
+ } else {
1080
+ $q->set( 'post__in', 0 );
1081
  }
1082
  }
1083
 
inc/class-lp-query-list-table.php CHANGED
@@ -156,7 +156,7 @@ class LP_Query_List_Table implements ArrayAccess {
156
  );
157
 
158
  if ( $echo ) {
159
- echo $output;
160
  }
161
 
162
  return $output;
@@ -172,7 +172,7 @@ class LP_Query_List_Table implements ArrayAccess {
172
  }
173
 
174
  if ( $echo ) {
175
- echo $output;
176
  }
177
 
178
  return $output;
156
  );
157
 
158
  if ( $echo ) {
159
+ echo wp_kses_post( $output );
160
  }
161
 
162
  return $output;
172
  }
173
 
174
  if ( $echo ) {
175
+ echo wp_kses_post( $output );
176
  }
177
 
178
  return $output;
inc/class-lp-query.php CHANGED
@@ -175,7 +175,7 @@ class LP_Query {
175
 
176
  if ( $tabs ) {
177
  foreach ( $tabs as $slug => $args ) {
178
- $tab_slug = isset( $args['slug'] ) ? $args['slug'] : $slug;
179
  $rules[] = array(
180
  '^' . get_post_field( 'post_name', $profile_id ) . '/([^/]*)/?(' . $tab_slug . ')/?([0-9]*)/?$',
181
  'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',
@@ -184,7 +184,7 @@ class LP_Query {
184
 
185
  if ( ! empty( $args['sections'] ) ) {
186
  foreach ( $args['sections'] as $section_slug => $section ) {
187
- $section_slug = isset( $section['slug'] ) ? $section['slug'] : $section_slug;
188
  $rules[] = array(
189
  '^' . get_post_field( 'post_name', $profile_id ) . '/([^/]*)/?(' . $tab_slug . ')/(' . $section_slug . ')/?([0-9]*)?$',
190
  'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&section=$matches[3]&view_id=$matches[4]',
@@ -197,14 +197,14 @@ class LP_Query {
197
  }
198
 
199
  // Archive course
200
- $course_page_id = learn_press_get_page_id( 'courses' );
201
  if ( $course_page_id ) {
202
  $rules[] = array(
203
  '^' . get_post_field( 'post_name', $course_page_id ) . '/page/([0-9]{1,})/?$',
204
  'index.php?pagename=' . get_post_field( 'post_name', $course_page_id ) . '&page=$matches[1]',
205
  'top',
206
  );
207
- }
208
 
209
  global $wp_rewrite;
210
 
175
 
176
  if ( $tabs ) {
177
  foreach ( $tabs as $slug => $args ) {
178
+ $tab_slug = $args['slug'] ?? $slug;
179
  $rules[] = array(
180
  '^' . get_post_field( 'post_name', $profile_id ) . '/([^/]*)/?(' . $tab_slug . ')/?([0-9]*)/?$',
181
  'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',
184
 
185
  if ( ! empty( $args['sections'] ) ) {
186
  foreach ( $args['sections'] as $section_slug => $section ) {
187
+ $section_slug = $section['slug'] ?? $section_slug;
188
  $rules[] = array(
189
  '^' . get_post_field( 'post_name', $profile_id ) . '/([^/]*)/?(' . $tab_slug . ')/(' . $section_slug . ')/?([0-9]*)?$',
190
  'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&section=$matches[3]&view_id=$matches[4]',
197
  }
198
 
199
  // Archive course
200
+ /*$course_page_id = learn_press_get_page_id( 'courses' );
201
  if ( $course_page_id ) {
202
  $rules[] = array(
203
  '^' . get_post_field( 'post_name', $course_page_id ) . '/page/([0-9]{1,})/?$',
204
  'index.php?pagename=' . get_post_field( 'post_name', $course_page_id ) . '&page=$matches[1]',
205
  'top',
206
  );
207
+ }*/
208
 
209
  global $wp_rewrite;
210
 
inc/class-lp-repair-database.php DELETED
@@ -1,1014 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Class LP_Repair_Database
5
- *
6
- * Repair database tool
7
- *
8
- * @since 3.1.0
9
- */
10
- class LP_Repair_Database {
11
- /**
12
- * @var LP_Repair_Database
13
- */
14
- protected static $instance = null;
15
-
16
- /**
17
- * Posts are being deleted.
18
- *
19
- * @var array
20
- */
21
- protected $deleting_posts = array();
22
-
23
- /**
24
- * LP_Repair_Database constructor.
25
- *
26
- * @access protected
27
- */
28
- protected function __construct() {
29
- //add_action( 'save_post', array( $this, 'save_post' ), 0 );
30
- // add_action( 'deleted_post', array( $this, 'save_post' ), 0 );
31
- // add_action( 'learn-press/added-item-to-section', array( $this, 'added_item_to_section' ), 5000, 3 );
32
- // add_action( 'learn-press/removed-item-from-section', array( $this, 'removed_item_from_course' ), 5000, 2 );
33
- //add_action( 'learn-press/save-course', array( $this, 'save_course' ), 5000, 1 );
34
- //add_action( 'learn-press/added-course-item', array( $this, 'added_course_item' ), 10, 2 );
35
- //add_action( 'learn-press/removed-course-item', array( $this, 'removed_course_item' ), 10 );
36
- //add_action( 'learn-press/transition-course-item-status', array( $this, 'transition_course_item_status' ), 10, 4 );
37
-
38
- //add_action( 'before_delete_post', array( $this, 'before_delete_post' ) );
39
- // add_action( 'deleted_post', array( $this, 'deleted_post' ) );
40
- // add_action( 'save_post', array( $this, 'save_post' ) );
41
- }
42
-
43
- /**
44
- * Stores some information of the post is being deleted.
45
- * Eg post-type will be lost after deleted post.
46
- *
47
- * @param int $post_id
48
- *
49
- * @since 3.1.0
50
- * @editor 4.1.4
51
- * @modify comment - not use
52
- */
53
- /*public function before_delete_post( $post_id ) {
54
- global $wpdb;
55
- // LP_Debug::startTransaction();
56
- $post_type = get_post_type( $post_id );
57
- $data = array(
58
- 'post_type' => $post_type,
59
- );
60
-
61
- switch ( $post_type ) {
62
- case LP_ORDER_CPT:
63
- $order = learn_press_get_order( $post_id );
64
- $data['users'] = $order->get_users();
65
- $data['child'] = $order->get_child_orders();
66
-
67
- break;
68
- }
69
-
70
- $this->deleting_posts[ $post_id ] = $data;
71
- }*/
72
-
73
- /**
74
- * Do stuff after post deleted.
75
- *
76
- * @param int $post_id
77
- *
78
- * @since 3.1.0
79
- */
80
- /*public function deleted_post( $post_id ) {
81
- try {
82
- if ( ! empty( $this->deleting_posts[ $post_id ] ) ) {
83
- $data = $this->deleting_posts[ $post_id ];
84
- $post_type = ! empty( $data['post_type'] ) ? $data['post_type'] : '';
85
-
86
- switch ( $post_type ) {
87
- case LP_ORDER_CPT:
88
- if ( ! empty( $data['users'] ) ) {
89
- $this->remove_order_from_user_meta( $data['users'], $post_id );
90
- }
91
-
92
- $this->remove_order_items( $post_id );
93
- $this->remove_user_items_by_order_id( $post_id );
94
-
95
- if ( ! empty( $data['child'] ) ) {
96
- $this->remove_child_orders( $data['child'] );
97
- }
98
- break;
99
- }
100
- }
101
- } catch ( Exception $ex ) {
102
- echo $ex->getMessage();
103
- }
104
-
105
- // LP_Debug::rollbackTransaction();
106
- // die();
107
- }*/
108
-
109
- /**
110
- * Remove order items and it meta data from tables
111
- * learnpress_user_items and learnpress_user_itemmeta
112
- * by order id.
113
- *
114
- * @param int $order_id
115
- *
116
- * @return bool|int[]
117
- * @since 3.1.0
118
- * @editor tungnx
119
- * @modify 4.1.4 comment - not use
120
- */
121
- /*public function remove_order_items( $order_id ) {
122
- global $wpdb;
123
-
124
- if ( is_array( $order_id ) ) {
125
- foreach ( $order_id as $oid ) {
126
- $this->remove_order_items( $oid );
127
- }
128
-
129
- return true;
130
- }
131
-
132
- $order_item_id = $wpdb->get_col( $wpdb->prepare( "SELECT order_item_id FROM {$wpdb->learnpress_order_items} WHERE order_id = %d", $order_id ) );
133
-
134
- if ( ! $order_item_id ) {
135
- return false;
136
- }
137
-
138
- $format = array_fill( 0, sizeof( $order_item_id ), '%d' );
139
-
140
- // Delete rows from order-items and order-itemmeta
141
- $query = $wpdb->prepare(
142
- "
143
- DELETE
144
- FROM {$wpdb->learnpress_order_itemmeta}
145
- WHERE learnpress_order_item_id IN(" . join( ',', $format ) . ')
146
- ',
147
- $order_item_id
148
- );
149
-
150
- $wpdb->query( $query );
151
-
152
- $query = $wpdb->prepare(
153
- "
154
- DELETE
155
- FROM {$wpdb->learnpress_order_items}
156
- WHERE order_item_id IN(" . join( ',', $format ) . ')
157
- ', $order_item_id ); // phpcs:ignore
158
-
159
- $wpdb->query( $query );
160
-
161
- return $order_item_id;
162
- }*/
163
-
164
- /**
165
- * @param int[] $order_ids
166
- * @editor tungnx
167
- * @modify 4.1.4 comment - not use
168
- */
169
- /*public function remove_child_orders( $order_ids ) {
170
- global $wpdb;
171
-
172
- foreach ( $order_ids as $order_id ) {
173
- wp_delete_post( $order_id );
174
- }
175
-
176
- }*/
177
-
178
- /**
179
- * Remove user items from table learnpress_user_items
180
- * and it's meta data from table learnpress_user_itemmeta
181
- * by order id. Uses this function when we want to remove
182
- * a course-item and all child-items reference to a an order.
183
- *
184
- * @param int[] $order_id
185
- *
186
- * @return bool
187
- * @since 3.1.0
188
- * @editor tungnx
189
- * @modify 4.1.4 - comment - not use
190
- */
191
- /*public function remove_user_items_by_order_id( $order_id ) {
192
- if ( is_array( $order_id ) ) {
193
- foreach ( $order_id as $oid ) {
194
- $this->remove_user_items_by_order_id( $oid );
195
- }
196
-
197
- return true;
198
- }
199
-
200
- global $wpdb;
201
- $query = $wpdb->prepare(
202
- "
203
- SELECT user_item_id
204
- FROM {$wpdb->learnpress_user_items}
205
- WHERE ref_id = %d AND ref_type = %s
206
- ",
207
- $order_id,
208
- LP_ORDER_CPT
209
- );
210
-
211
- $user_item_ids = $wpdb->get_col( $query );
212
-
213
- if ( ! $user_item_ids ) {
214
- return false;
215
- }
216
-
217
- $this->remove_user_items_by_user_item_id( $user_item_ids, true );
218
-
219
- return true;
220
- }*/
221
-
222
- /**
223
- * Remove user item from table user-items by primary key user_item_id.
224
- * This function also remove row's meta data and/or child rows.
225
- *
226
- * @param int[] $user_item_id
227
- * @param bool $remove_child - Optional. TRUE will remove it's child
228
- *
229
- * @since 3.1.0
230
- * @editor tungnx
231
- * @modify 4.1.4 - comment - not use
232
- */
233
- /*public function remove_user_items_by_user_item_id( $user_item_id, $remove_child = true ) {
234
- global $wpdb;
235
-
236
- settype( $user_item_id, 'array' );
237
-
238
- $format = array_fill( 0, sizeof( $user_item_id ), '%d' );
239
- $child_user_item_ids = $this->get_user_items_by_parent_id( $user_item_id );
240
-
241
- // Remove child
242
- if ( $remove_child && $child_user_item_ids ) {
243
- $this->remove_user_items_by_user_item_id( $child_user_item_ids, $remove_child );
244
- }
245
-
246
- $query = $wpdb->prepare(
247
- "
248
- DELETE
249
- FROM {$wpdb->learnpress_user_itemmeta}
250
- WHERE learnpress_user_item_id IN(" . join( ',', $format ) . ')
251
- ',
252
- $user_item_id
253
- );
254
-
255
- $wpdb->query( $query );
256
-
257
- $query = $wpdb->prepare(
258
- "
259
- DELETE
260
- FROM {$wpdb->learnpress_user_items}
261
- WHERE user_item_id IN(" . join( ',', $format ) . ')
262
- ',
263
- $user_item_id
264
- );
265
-
266
- $wpdb->query( $query );
267
-
268
- // Remove all result in table user_item_results.
269
- foreach ( $user_item_id as $delete_id ) {
270
- LP_User_Items_Result_DB::instance()->delete( $delete_id );
271
- }
272
- }*/
273
-
274
- /**
275
- * Remove user item from table user-items by specific user-id and item-id.
276
- *
277
- * @param int $user_id
278
- * @param int $item_id
279
- *
280
- * @return array|bool
281
- * @since 3.1.0
282
- * @editor tungnx
283
- * @modify comment - not use
284
- */
285
- /*public function remove_user_item( $user_id, $item_id ) {
286
- global $wpdb;
287
-
288
- // Find user-item-id for passed user-id and item-id
289
- $query = $wpdb->prepare(
290
- "
291
- SELECT user_item_id
292
- FROM {$wpdb->learnpress_user_items}
293
- WHERE user_id = %d
294
- AND item_id = %d
295
- ",
296
- $user_id,
297
- $item_id
298
- );
299
-
300
- $user_item_ids = $wpdb->get_col( $query );
301
-
302
- if ( $user_item_ids ) {
303
- return false;
304
- }
305
-
306
- // Remove by user-item-ids
307
- $this->remove_user_items_by_user_item_id( $user_item_ids );
308
-
309
- return $user_item_ids;
310
- }*/
311
-
312
- /**
313
- * Remove user item from table user-items by user-id.
314
- * Uses this function in case we want to remove all item
315
- * from an user (such as when an user will be deleted).
316
- *
317
- * @param int[] $user_id
318
- *
319
- * @return bool
320
- * @since 3.1.0
321
- * @editor tungnx
322
- * @modify 4.1.4 - comment - not use
323
- */
324
- /*public function remove_user_item_by_user( $user_id ) {
325
- global $wpdb;
326
-
327
- // If multi users passed, loop through each user
328
- if ( is_array( $user_id ) ) {
329
- foreach ( $user_id as $uid ) {
330
- $this->remove_user_item_by_user( $uid );
331
- }
332
-
333
- return true;
334
- }
335
-
336
- $query = $wpdb->prepare(
337
- "
338
- SELECT user_item_id
339
- FROM {$wpdb->learnpress_user_items}
340
- WHERE user_id = %d
341
- ",
342
- $user_id
343
- );
344
-
345
- $user_item_ids = $wpdb->get_col( $query );
346
-
347
- if ( ! $user_item_ids ) {
348
- return false;
349
- }
350
-
351
- $this->remove_user_items_by_user_item_id( $user_item_ids );
352
-
353
- return true;
354
- }*/
355
-
356
- /**
357
- * Remove user item from table user-items by item-id.
358
- * Uses this function in case want to remove an item
359
- * from all users (such as an item like course/lesson/quiz will be deleted).
360
- *
361
- * @param int $item_id
362
- *
363
- * @return array|bool
364
- * @since 3.1.0
365
- * @editor tungnx
366
- * @modify 4.1.4 - comment - not use
367
- */
368
- /*public function remove_user_item_by_item_id( $item_id ) {
369
- global $wpdb;
370
-
371
- $query = $wpdb->prepare(
372
- "
373
- SELECT user_item_id
374
- FROM {$wpdb->learnpress_user_items}
375
- WHERE item_id = %d
376
- ",
377
- $item_id
378
- );
379
-
380
- $user_item_ids = $wpdb->get_col( $query );
381
-
382
- if ( ! $user_item_ids ) {
383
- return false;
384
- }
385
-
386
- $this->remove_user_items_by_user_item_id( $user_item_ids );
387
-
388
- return $user_item_ids;
389
- }*/
390
-
391
- /**
392
- * Retrieve child items from an user-item-id.
393
- *
394
- * @param int[] $parent_ids
395
- *
396
- * @return array
397
- * @since 3.1.0
398
- * @editor tungnx
399
- * @modify 4.1.4 - comment - not use
400
- */
401
- /*public function get_user_items_by_parent_id( $parent_ids ) {
402
- global $wpdb;
403
- settype( $parent_ids, 'array' );
404
- $format = array_fill( 0, sizeof( $parent_ids ), '%d' );
405
-
406
- $query = $wpdb->prepare(
407
- "
408
- SELECT user_item_id
409
- FROM {$wpdb->learnpress_user_items}
410
- WHERE parent_id IN(" . join( ',', $format ) . ')
411
- ',
412
- $parent_ids
413
- );
414
-
415
- return $wpdb->get_col( $query );
416
- }*/
417
-
418
- /**
419
- * Remove an order from user-meta.
420
- *
421
- * @param int[] $user_ids
422
- * @param int $order_id
423
- *
424
- * @since 3.1.0
425
- * @editor tungnx
426
- * @modify 4.1.4 - comment - not use
427
- */
428
- // public function remove_order_from_user_meta( $user_ids, $order_id ) {
429
- // if ( ! $user_ids ) {
430
- // return;
431
- // }
432
- //
433
- // settype( $user_ids, 'array' );
434
- // foreach ( $user_ids as $user_id ) {
435
- // delete_user_meta( $user_id, 'orders' );
436
- //
437
- // /*if ( $user_orders ) {
438
- // foreach ( $user_orders as $course_id => $course_orders ) {
439
- // $course_orders = array_unique( $course_orders );
440
- // if ( false !== ( $in_pos = array_search( $order_id, $course_orders ) ) ) {
441
- // unset( $course_orders[ $in_pos ] );
442
- // }
443
- //
444
- // if ( ! $course_orders ) {
445
- // unset( $user_orders[ $course_id ] );
446
- // } else {
447
- // $user_orders[ $course_id ] = $course_orders;
448
- // }
449
- // }
450
- // }
451
- //
452
- // update_user_meta( $user_id, 'order', $user_orders );*/
453
- // }
454
- // }
455
-
456
- /**
457
- * @editor tungnx
458
- * @modify 4.1.4 - comment - not use
459
- */
460
- /*public function add_order_to_user_meta( $order_id ) {
461
- $order = learn_press_get_order( $order_id );
462
-
463
- if ( ! $order ) {
464
- return false;
465
- }
466
-
467
- if ( $order->is_multi_users() ) {
468
-
469
- $child = $order->get_child_orders();
470
- if ( ! $child ) {
471
- return false;
472
- }
473
-
474
- foreach ( $child as $child_order_id ) {
475
- $child_order = learn_press_get_order( $child_order_id );
476
-
477
- }
478
-
479
- return true;
480
- }
481
-
482
- $user_id = $order->get_user_id();
483
- $user_orders = get_user_meta( $user_id, 'orders', true );
484
-
485
- if ( $user_orders ) {
486
- foreach ( $user_orders as $course_id => $course_orders ) {
487
- $course_orders = array_unique( $course_orders );
488
- $in_pos = array_search( $order_id, $course_orders );
489
-
490
- if ( false !== $in_pos ) {
491
- unset( $course_orders[ $in_pos ] );
492
- }
493
-
494
- if ( ! $course_orders ) {
495
- unset( $user_orders[ $course_id ] );
496
- } else {
497
- $user_orders[ $course_id ] = $course_orders;
498
- }
499
- }
500
- }
501
-
502
- return true;
503
- }*/
504
-
505
- /**
506
- * @editor tungnx
507
- * @modify 4.1.4.1 - comment - not use
508
- */
509
- /*public function save_course( $course_id ) {
510
- $this->sync_course_data( $course_id );
511
- }*/
512
-
513
- /**
514
- * @editor tungnx
515
- * @modify 4.1.4.1 - comment - not use
516
- */
517
- /*public function removed_course_item( $course_id ) {
518
- $this->sync_course_data( $course_id );
519
- }*/
520
-
521
- /**
522
- * @param int $item_id
523
- * @param int $course_id
524
- * @editor tungnx
525
- * @modify 4.1.4.1 - comment - not use
526
- */
527
- /*public function added_course_item( $item_id, $course_id ) {
528
- $this->sync_course_data( $course_id );
529
- }*/
530
-
531
- /**
532
- * @param int $item_id
533
- * @param int $course_id
534
- * @editor tungnx
535
- * @modify 4.1.4.1 - comment - not use
536
- */
537
- /*public function removed_item_from_course( $item_id, $course_id ) {
538
- $this->sync_course_data( $course_id );
539
- }*/
540
-
541
- /**
542
- * @editor tungnx
543
- * @modify 4.1.4.1 - comment - not use
544
- */
545
- /*public function transition_course_item_status( $item_id, $course_id, $old, $new ) {
546
- if ( $old === $new ) {
547
- return;
548
- }
549
- $this->sync_course_data( $course_id );
550
- }*/
551
-
552
- /**
553
- * @editor tungnx
554
- * @modify 4.1.4 - comment - not use
555
- */
556
- /*public function get_user_item_type( $item_id ) {
557
- global $wpdb;
558
- if ( ! $item_type = get_post_type( $item_id ) ) {
559
- $query = $wpdb->prepare(
560
- "
561
- SELECT item_type
562
- FROM {$wpdb->learnpress_user_items}
563
- WHERE item_id = %d
564
- LIMIT 0,1
565
- ",
566
- $item_id
567
- );
568
- $item_type = $wpdb->get_var( $query );
569
- }
570
-
571
- return $item_type;
572
- }*/
573
-
574
- /**
575
- * @editor tungnx
576
- * @modify 4.1.4 - comment - not use
577
- */
578
- /*public function remove_user_itemx( $item_id ) {
579
- global $wpdb;
580
-
581
- $query = "
582
- DELETE items, meta
583
- FROM {$wpdb->learnpress_user_items} items
584
- INNER JOIN {$wpdb->learnpress_user_itemmeta} meta ON items.user_item_id = meta.learnpress_user_item_id
585
- ";
586
-
587
- $where = '';
588
-
589
- if ( $this->get_user_item_type( $item_id ) === LP_COURSE_CPT ) {
590
- $_query = $wpdb->prepare(
591
- "
592
- SELECT user_item_id
593
- FROM {$wpdb->learnpress_user_items}
594
- WHERE item_id = %d
595
- AND parent_id = 0
596
- ",
597
- $item_id
598
- );
599
-
600
- $user_item_ids = $wpdb->get_col( $_query );
601
- $format = array_fill( 0, sizeof( $user_item_ids ), '%d' );
602
-
603
- $where = $wpdb->prepare(
604
- '
605
- WHERE parent_id IN(' . join( ',', $format ) . ')
606
- ',
607
- $user_item_ids
608
- );
609
-
610
- $where .= $wpdb->prepare( 'AND ref_id = %d', $item_id );
611
- } else {
612
- $where = $wpdb->prepare( 'item_id = %d', $item_id );
613
- }
614
-
615
- $query .= $where;
616
- }*/
617
-
618
- /**
619
- * @param int $post_id
620
- * @editor tungnx
621
- * @modify 4.1.4.1 - comment - not use
622
- */
623
- // public function save_post( $post_id ) {
624
- // global $wpdb;
625
- // $post_type = get_post_type( $post_id );
626
- // $course_curd = new LP_Course_CURD();
627
- //
628
- // switch ( $post_type ) {
629
- // /*case LP_ORDER_CPT:
630
- // $order = learn_press_get_order( $post_id );
631
- // if ( $order ) {
632
- // $user_ids = $order->get_users();
633
- // $course_ids = $order->get_item_ids();
634
- //
635
- // //$this->sync_course_orders( $course_ids );
636
- // //$this->sync_user_orders( $user_ids );
637
- // }
638
- //
639
- // break;*/
640
- // case LP_COURSE_CPT: //Todo: tungnx should review code to rewrite
641
- // default:
642
- // // Course is support type of this item?
643
- // if ( learn_press_is_support_course_item_type( $post_type ) ) {
644
- //
645
- // // Find it course
646
- // $course_ids = $course_curd->get_course_by_item( $post_id );
647
- // } else {
648
- // $course_ids = array( $post_id );
649
- // }
650
- //
651
- // foreach ( $course_ids as $course_id ) {
652
- // $this->sync_course_data( $course_id );
653
- // }
654
- // }
655
- // }
656
-
657
- /**
658
- * Sync course data when saving post.
659
- *
660
- * @param int $course_id
661
- * @editor tungnx
662
- * @version 3.1.1
663
- * @since 3.1.0
664
- */
665
- /*public function sync_course_data( int $course_id ) {
666
- $user_curd = new LP_User_CURD();
667
- $course_curd = new LP_Course_CURD();
668
-
669
- $count_items = 0;
670
- $counts = $course_curd->count_items( $course_id );
671
- if ( $counts ) {
672
- $count_items = array_sum( $counts );
673
- }
674
-
675
- update_post_meta( $course_id, 'count_items', $count_items );
676
- }*/
677
-
678
- /**
679
- * Sync all
680
- *
681
- * @editor tungnx
682
- * @modify 4.1.4 - comment - not use
683
- */
684
- /*public function sync_all() {
685
- $this->sync_course_orders();
686
- $this->sync_user_courses();
687
- }*/
688
-
689
- public function call( $func ) {
690
- $func = preg_replace( '~[-]+~', '_', $func );
691
-
692
- if ( ! is_callable( array( $this, $func ) ) ) {
693
- throw new Exception( sprintf( __( 'The method %s is not callable.', 'learnpress' ), $func ) );
694
- }
695
-
696
- $args = func_get_args();
697
- unset( $args[0] );
698
-
699
- return sizeof( $args ) ?
700
- call_user_func_array( array( $this, $func ), $args ) :
701
- call_user_func( array( $this, $func ) );
702
- }
703
-
704
- /***
705
- * @editor tungnx
706
- * @deprecated 4.0.7
707
- * @reason not use on LP4, make CPU run high.
708
- */
709
- /*public function queue_sync_user_course_results( $course_id ) {
710
- global $wpdb;
711
- $query = $wpdb->prepare(
712
- "
713
- SELECT DISTINCT user_id
714
- FROM {$wpdb->learnpress_user_items}
715
- WHERE item_id = %d
716
- ",
717
- $course_id
718
- );
719
-
720
- if ( $user_ids = $wpdb->get_col( $query ) ) {
721
- $queue_user_ids = get_option( 'sync-user-course-results' );
722
- $first_time = ! $queue_user_ids;
723
- $n = time();
724
- for ( $i = $n; $i < $n + 100; $i ++ ) {
725
- $user_ids[] = $i;
726
- }
727
-
728
- if ( $first_time ) {
729
- $queue_user_ids = $user_ids;
730
- } else {
731
- settype( $queue_user_ids, 'array' );
732
- $queue_user_ids = array_merge( $queue_user_ids, $user_ids );
733
- $queue_user_ids = array_unique( $queue_user_ids );
734
- }
735
-
736
- $option_key = 'sync-user-course-results';
737
- update_option( $option_key, $queue_user_ids, 'no' );
738
-
739
- if ( $first_time || ! get_option( 'doing-sync-user-course-results' ) ) {
740
- $bg = LP_Background_Sync_Data::instance();
741
- $bg->is_safe( false );
742
- $bg->push_to_queue(
743
- array(
744
- 'action' => 'sync-user-course-results',
745
- 'course_id' => $course_id,
746
- 'option_key' => $option_key,
747
- )
748
- )->save()->dispatch();
749
- $bg->reset_safe();
750
-
751
- update_option( 'doing-sync-user-course-results', 'yes' );
752
- }
753
- }
754
- }*/
755
-
756
- /**
757
- * Sync orders for each course
758
- *
759
- * @param array|string $courses
760
- *
761
- * @return bool|array
762
- * @since 3.1.0
763
- * @editor tungnx
764
- * @modify 4.1.4 - comment - not use
765
- */
766
- /*public function sync_course_orders( $courses = '*' ) {
767
- global $wpdb;
768
-
769
- if ( empty( $courses ) ) {
770
- return false;
771
- }
772
-
773
- if ( $courses === '*' ) {
774
- $query = $wpdb->prepare(
775
- "
776
- SELECT ID
777
- FROM {$wpdb->posts}
778
- WHERE post_type = %s
779
- AND post_status = %s
780
- ",
781
- LP_COURSE_CPT,
782
- 'publish'
783
- );
784
-
785
- $courses = $wpdb->get_col( $query );
786
-
787
- if ( $courses ) {
788
- return false;
789
- }
790
- }
791
-
792
- $statuses = learn_press_get_order_statuses( true, true );
793
- settype( $courses, 'array' );
794
-
795
- $statuses_format = array_fill( 0, sizeof( $statuses ), '%s' );
796
- $courses_format = array_fill( 0, sizeof( $courses ), '%d' );
797
- $statuses_format = $wpdb->prepare( join( ',', $statuses_format ), $statuses );
798
- $courses_format = $wpdb->prepare( join( ',', $courses_format ), $courses );
799
- $wpdb->query( 'SET SESSION group_concat_max_len = 18446744073709551615' );
800
- $query = $wpdb->prepare(
801
- "
802
- SELECT cid, status, orders
803
- FROM(
804
- SELECT oim.meta_value cid, concat(oim.meta_value, ' ', o.post_status) a, post_status `status`, GROUP_CONCAT(o.ID) orders
805
- FROM {$wpdb->learnpress_order_itemmeta} oim
806
- INNER JOIN {$wpdb->learnpress_order_items} oi ON oi.order_item_id = oim.learnpress_order_item_id AND oim.meta_key = %s
807
- INNER JOIN {$wpdb->posts} o ON o.ID = oi.order_id
808
- INNER JOIN {$wpdb->postmeta} om ON o.ID = om.post_id AND `om`.`meta_key`='_user_id'
809
- INNER JOIN {$wpdb->users} `u` ON u.ID = `om`.`meta_value`
810
- WHERE o.post_type = %s
811
- AND o.post_status IN ($statuses_format)
812
- AND oim.meta_value IN ($courses_format)
813
- GROUP BY a, cid
814
- ) X
815
- ",
816
- '_course_id',
817
- 'lp_order'
818
- );
819
-
820
- foreach ( $courses as $course_id ) {
821
- foreach ( $statuses as $status ) {
822
- update_post_meta( $course_id, 'order-' . str_replace( 'lp-', '', $status ), array() );
823
- }
824
- }
825
-
826
- if ( $results = $wpdb->get_results( $query ) ) {
827
- foreach ( $results as $result ) {
828
- update_post_meta( $result->cid, 'order-' . str_replace( 'lp-', '', $result->status ), explode( ',', $result->orders ) );
829
- }
830
- }
831
-
832
- return $courses;
833
- }*/
834
-
835
- /**
836
- * Sync orders for each user
837
- *
838
- * @param array $users
839
- * @editor tungnx
840
- * @modify 4.1.4 - comment - not use
841
- */
842
- /*public function sync_user_orders( $users = array() ) {
843
- $api = new LP_User_CURD();
844
- settype( $users, 'array' );
845
-
846
- foreach ( $users as $user ) {
847
- $orders = $api->read_orders( $user );
848
- if ( ! $orders ) {
849
- continue;
850
- }
851
- $orders = array_map( 'array_unique', $orders );
852
- update_user_meta( $user, 'orders', $orders );
853
- }
854
- }*/
855
-
856
- /**
857
- * Sync courses for each user
858
- *
859
- * @since 3.1.0
860
- * @editor tungnx
861
- * @modify 4.1.4 - comment - not use
862
- */
863
- /*public function sync_user_courses() {
864
- // echo __FUNCTION__;
865
- }*/
866
-
867
-
868
- /**
869
- * Sync final quiz for each course.
870
- *
871
- * @param array $courses
872
- * @editor tungnx
873
- * @deprecated 4.1.5
874
- */
875
- // public function sync_course_final_quiz( $courses = array() ) {
876
- // settype( $courses, 'array' );
877
- //
878
- // foreach ( $courses as $course_id ) {
879
- // $course = learn_press_get_course( $course_id );
880
- //
881
- // if ( ! $course ) {
882
- // continue;
883
- // }
884
- //
885
- // /**
886
- // * If course result is not set to final-quiz
887
- // */
888
- // if ( $course->get_data( 'course_result' ) !== 'evaluate_final_quiz' ) {
889
- // delete_post_meta( $course_id, '_lp_final_quiz' );
890
- // continue;
891
- // }
892
- //
893
- // $items = $course->get_item_ids();
894
- // if ( $items ) {
895
- // foreach ( $items as $item ) {
896
- // if ( learn_press_get_post_type( $item ) === LP_QUIZ_CPT ) {
897
- // $final_quiz = $item;
898
- // }
899
- // }
900
- // }
901
- //
902
- // if ( isset( $final_quiz ) ) {
903
- // update_post_meta( $course_id, '_lp_final_quiz', $final_quiz );
904
- // } else {
905
- // delete_post_meta( $course_id, '_lp_final_quiz' );
906
- // update_post_meta( $course_id, '_lp_course_result', 'evaluate_lesson' );
907
- // }
908
- // }
909
- // }
910
-
911
- /**
912
- * @editor tungnx
913
- * @modify 4.1.4 - comment - not use
914
- */
915
- /*public function calculate_course_results( $user_id ) {
916
- settype( $user_id, 'array' );
917
-
918
- global $wpdb;
919
-
920
- foreach ( $user_id as $uid ) {
921
- $query = $wpdb->prepare(
922
- "
923
- SELECT DISTINCT item_id
924
- FROM {$wpdb->learnpress_user_items} ui
925
- INNER JOIN {$wpdb->posts} p ON p.ID = ui.item_id
926
- WHERE user_id = %d
927
- AND p.post_type = %s
928
- ",
929
- $uid,
930
- LP_COURSE_CPT
931
- );
932
-
933
- $course_ids = $wpdb->get_col( $query );
934
- if ( $course_ids ) {
935
- $user = learn_press_get_user( $uid );
936
- foreach ( $course_ids as $course_id ) {
937
- $item_course = $user->get_course_data( $course_id );
938
- $course_exceeded = $item_course->is_exceeded();
939
-
940
- if ( $course_exceeded <= 0 && ( learn_press_is_enrolled_slug( $item_course->get_status() ) ) ) {
941
- $item_course->finish();
942
-
943
- $start_time = $item_course->get_start_time()->getTimestamp();
944
- $duration = $item_course->get_course()->get_duration();
945
-
946
- learn_press_update_user_item_meta( $item_course->get_user_item_id(), 'via', 'schedule' );
947
- learn_press_update_user_item_meta( $item_course->get_user_item_id(), 'exceeded', $course_exceeded );
948
- } else {
949
- $item_course->calculate_course_results();
950
-
951
- }
952
- }
953
- }
954
- }
955
- }*/
956
-
957
- /**
958
- * @editor tungnx
959
- * @modify 4.1.4 - comment - not use
960
- */
961
- /*public function remove_older_post_meta() {
962
- global $wpdb;
963
- $query = $wpdb->prepare(
964
- "
965
- DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE %s
966
- ",
967
- $wpdb->esc_like( '_lpr_' ) . '%'
968
- );
969
- $wpdb->query( $query );
970
-
971
- $query = $wpdb->prepare(
972
- "
973
- DELETE FROM {$wpdb->usermeta} WHERE meta_key LIKE %s
974
- ",
975
- '%' . $wpdb->esc_like( '_lpr_' ) . '%'
976
- );
977
- $wpdb->query( $query );
978
- }*/
979
-
980
- /**
981
- * Get all ids of existing courses
982
- *
983
- * @return array
984
- * @deprecated 4.1.5
985
- */
986
- public function get_all_courses() {
987
- global $wpdb;
988
- $query = $wpdb->prepare(
989
- "
990
- SELECT ID
991
- FROM {$wpdb->posts}
992
- WHERE post_type = %s
993
- AND post_status = %s
994
- ",
995
- LP_COURSE_CPT,
996
- 'publish'
997
- );
998
-
999
- return $wpdb->get_col( $query );
1000
- }
1001
-
1002
- /**
1003
- * @return LP_Repair_Database
1004
- */
1005
- public static function instance() {
1006
- if ( ! self::$instance ) {
1007
- self::$instance = new self();
1008
- }
1009
-
1010
- return self::$instance;
1011
- }
1012
- }
1013
-
1014
- LP_Repair_Database::instance();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/class-lp-request-handler.php CHANGED
@@ -55,6 +55,8 @@ class LP_Request {
55
  public static function process_request( $template ) {
56
  if ( ! empty( $_REQUEST ) ) {
57
  foreach ( $_REQUEST as $key => $value ) {
 
 
58
  do_action( 'learn_press_request_handler_' . $key, $value, $key );
59
  }
60
  }
55
  public static function process_request( $template ) {
56
  if ( ! empty( $_REQUEST ) ) {
57
  foreach ( $_REQUEST as $key => $value ) {
58
+ $key = LP_Helper::sanitize_params_submitted( $key );
59
+ $value = LP_Helper::sanitize_params_submitted( $value );
60
  do_action( 'learn_press_request_handler_' . $key, $value, $key );
61
  }
62
  }
inc/class-lp-utils.php DELETED
@@ -1,162 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Class LP_Utils
5
- *
6
- * Utilities.
7
- * @deprecated 4.1.6.4
8
- */
9
- class LP_Utils {
10
-
11
- /**
12
- * @var LP_Utils
13
- */
14
- protected static $instance = null;
15
-
16
- /**
17
- * LP_Utils constructor.
18
- */
19
- protected function __construct() {
20
- }
21
-
22
- /**
23
- * Hard flush count data of users enrolled each course
24
- * and recount all.
25
- *
26
- * @since 3.x.x
27
- *
28
- * @return array
29
- * @deprecated
30
- * @editor tungnx - deprecated
31
- */
32
- public function flush_count_course_users() {
33
- _deprecated_function( __FUNCTION__, '1.4.1' );
34
- global $wpdb;
35
-
36
- if ( ! $all_statuses = $wpdb->get_col( "SELECT DISTINCT `status` FROM {$wpdb->learnpress_user_items}" ) ) {
37
- $all_statuses = array();
38
- }
39
- $all_statuses[] = 'total';
40
- $init_values = array_fill_keys( $all_statuses, 0 );
41
-
42
- $query = $wpdb->prepare(
43
- "
44
- SELECT item_id id, `status`, COUNT(user_item_id) `count`
45
- FROM {$wpdb->learnpress_user_items}
46
- WHERE 1 AND item_type = %s
47
- GROUP BY item_id, `status`
48
- ORDER BY item_id
49
- ",
50
- LP_COURSE_CPT
51
- );
52
- $counts = array();
53
-
54
- if ( $rows = $wpdb->get_results( $query ) ) {
55
-
56
- foreach ( $rows as $row ) {
57
- if ( empty( $counts[ $row->id ] ) ) {
58
- $counts[ $row->id ] = $init_values;
59
- }
60
-
61
- $counts[ $row->id ][ $row->status ] = $row->count;
62
- $counts[ $row->id ]['total'] += $row->count;
63
- }
64
- }
65
-
66
- update_option( '_lp_count_course_users', $counts );
67
-
68
- return $counts;
69
- }
70
-
71
- /**
72
- * Counts number of users enrolled to courses.
73
- *
74
- * @since 3.x.x
75
- *
76
- * @param array $args {
77
- *
78
- * }
79
- * @param bool $hard
80
- *
81
- * @return array
82
- * @editor tungnx - deprecated
83
- * @deprecated
84
- */
85
- public function count_course_users( $args = array(), $hard = false ) {
86
- _deprecated_function( __FUNCTION__, '1.4.1', 'LP_Course_DB::get_total_user_enrolled' );
87
- $counts = get_option( '_lp_count_course_users' );
88
-
89
- if ( is_numeric( $args ) ) {
90
- $args = array( 'course_id' => $args );
91
- } elseif ( is_string( $args ) ) {
92
- $args = array( 'status' => $args );
93
- }
94
-
95
- $args = wp_parse_args(
96
- $args,
97
- array(
98
- 'course_id' => null,
99
- 'status' => '',
100
- 'total_only' => false,
101
- )
102
- );
103
-
104
- if ( $args['course_id'] ) {
105
- $course_ids = (array) $args['course_id'];
106
- } else {
107
- $course_ids = array();
108
- }
109
-
110
- if ( $hard || false === $counts ) {
111
- $counts = $this->flush_count_course_users();
112
- }
113
-
114
- if ( $course_ids ) {
115
- $counts = array_intersect_key( $counts, array_flip( $course_ids ) );
116
- }
117
-
118
- if ( $args['status'] ) {
119
- $statuses = (array) $args['status'];
120
- $_counts = array();
121
-
122
- foreach ( $statuses as $status ) {
123
- foreach ( $counts as $k => $value ) {
124
- if ( empty( $_counts[ $k ] ) ) {
125
- if ( $args['total_only'] ) {
126
- $_counts[ $k ] = ! empty( $value[ $status ] ) ? $value[ $status ] : 0;
127
- } else {
128
- $_counts[ $k ] = array( $status => ! empty( $value[ $status ] ) ? $value[ $status ] : 0 );
129
- }
130
- } else {
131
- if ( $args['total_only'] ) {
132
- $_counts[ $k ] += ! empty( $value[ $status ] ) ? $value[ $status ] : 0;
133
- } else {
134
- $_counts[ $k ][ $status ] = ! empty( $value[ $status ] ) ? $value[ $status ] : 0;
135
- }
136
- }
137
- }
138
- }
139
- $counts = $_counts;
140
- } else {
141
- if ( $args['total_only'] ) {
142
- $counts = wp_list_pluck( $counts, 'total' );
143
- }
144
- }
145
-
146
- if ( is_numeric( $args['course_id'] ) ) {
147
- $counts = reset( $counts );
148
- }
149
-
150
- return $counts;
151
- }
152
-
153
- public static function instance() {
154
- if ( ! self::$instance ) {
155
- self::$instance = new self();
156
- }
157
-
158
- return self::$instance;
159
- }
160
- }
161
-
162
- return LP_Utils::instance();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/class-lp-widget.php CHANGED
@@ -100,12 +100,12 @@ class LP_Widget extends WP_Widget {
100
  * @param array $instance Instance.
101
  */
102
  public function widget_start( $args, $instance ) {
103
- echo $args['before_widget'];
104
 
105
  $title = apply_filters( 'widget_title', $this->get_instance_title( $instance ), $instance, $this->id_base );
106
 
107
  if ( $title ) {
108
- echo $args['before_title'] . $title . $args['after_title'];
109
  }
110
  }
111
 
@@ -115,7 +115,7 @@ class LP_Widget extends WP_Widget {
115
  * @param array $args Arguments.
116
  */
117
  public function widget_end( $args ) {
118
- echo $args['after_widget'];
119
  }
120
 
121
  /**
@@ -141,7 +141,7 @@ class LP_Widget extends WP_Widget {
141
  )
142
  );
143
 
144
- echo $this->lp_widget_content( $data, $args, $instance );
145
  }
146
 
147
  /**
@@ -170,9 +170,9 @@ class LP_Widget extends WP_Widget {
170
  echo '<div class="learnpress-widget-wrapper">';
171
 
172
  if ( is_wp_error( $content ) ) {
173
- echo $content->get_error_message();
174
  } else {
175
- echo $content;
176
  }
177
 
178
  echo '</div>';
@@ -270,7 +270,7 @@ class LP_Widget extends WP_Widget {
270
  case 'number':
271
  ?>
272
  <p>
273
- <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo $setting['label']; ?></label>
274
  <input class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" type="number" step="<?php echo isset( $setting['step'] ) ? esc_attr( $setting['step'] ) : '1'; ?>" min="<?php echo isset( $setting['min'] ) ? esc_attr( $setting['min'] ) : ''; ?>" max="<?php echo isset( $setting['max'] ) ? esc_attr( $setting['max'] ) : ''; ?>" value="<?php echo esc_attr( $value ); ?>" />
275
  </p>
276
  <?php
@@ -279,7 +279,7 @@ class LP_Widget extends WP_Widget {
279
  case 'select':
280
  ?>
281
  <p>
282
- <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo $setting['label']; /* phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped */ ?></label>
283
  <select class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>">
284
  <?php foreach ( $setting['options'] as $option_key => $option_value ) : ?>
285
  <option value="<?php echo esc_attr( $option_key ); ?>" <?php selected( $option_key, $value ); ?>><?php echo esc_html( $option_value ); ?></option>
@@ -292,7 +292,7 @@ class LP_Widget extends WP_Widget {
292
  case 'textarea':
293
  ?>
294
  <p>
295
- <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo $setting['label']; /* phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped */ ?></label>
296
  <textarea class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" cols="20" rows="3"><?php echo esc_textarea( $value ); ?></textarea>
297
  <?php if ( isset( $setting['desc'] ) ) : ?>
298
  <small><?php echo esc_html( $setting['desc'] ); ?></small>
@@ -305,7 +305,7 @@ class LP_Widget extends WP_Widget {
305
  ?>
306
  <p>
307
  <input class="checkbox <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" type="checkbox" value="1" <?php checked( $value, 1 ); ?> />
308
- <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo $setting['label']; /* phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped */ ?></label>
309
  </p>
310
  <?php
311
  break;
@@ -313,7 +313,7 @@ class LP_Widget extends WP_Widget {
313
  case 'autocomplete':
314
  ?>
315
  <p>
316
- <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label><?php // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped ?>
317
  <select class="widefat lp-widget_select_course" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" data-rest-url="<?php echo get_rest_url(); ?>" data-post-type="<?php echo esc_attr( $setting['post_type'] ?? LP_COURSE_CPT ); ?>" style="width: 300px;">
318
  <?php if ( ! empty( $value ) ) : ?>
319
  <option value="<?php echo esc_attr( $value ); ?>" selected="selected"><?php echo esc_html( get_the_title( $value ) ); ?></option>
100
  * @param array $instance Instance.
101
  */
102
  public function widget_start( $args, $instance ) {
103
+ echo wp_kses_post( $args['before_widget'] );
104
 
105
  $title = apply_filters( 'widget_title', $this->get_instance_title( $instance ), $instance, $this->id_base );
106
 
107
  if ( $title ) {
108
+ echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
109
  }
110
  }
111
 
115
  * @param array $args Arguments.
116
  */
117
  public function widget_end( $args ) {
118
+ echo wp_kses_post( $args['after_widget'] );
119
  }
120
 
121
  /**
141
  )
142
  );
143
 
144
+ echo wp_kses_post( $this->lp_widget_content( $data, $args, $instance ) );
145
  }
146
 
147
  /**
170
  echo '<div class="learnpress-widget-wrapper">';
171
 
172
  if ( is_wp_error( $content ) ) {
173
+ echo wp_kses_post( $content->get_error_message() );
174
  } else {
175
+ echo wp_kses_post( $content );
176
  }
177
 
178
  echo '</div>';
270
  case 'number':
271
  ?>
272
  <p>
273
+ <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
274
  <input class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" type="number" step="<?php echo isset( $setting['step'] ) ? esc_attr( $setting['step'] ) : '1'; ?>" min="<?php echo isset( $setting['min'] ) ? esc_attr( $setting['min'] ) : ''; ?>" max="<?php echo isset( $setting['max'] ) ? esc_attr( $setting['max'] ) : ''; ?>" value="<?php echo esc_attr( $value ); ?>" />
275
  </p>
276
  <?php
279
  case 'select':
280
  ?>
281
  <p>
282
+ <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
283
  <select class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>">
284
  <?php foreach ( $setting['options'] as $option_key => $option_value ) : ?>
285
  <option value="<?php echo esc_attr( $option_key ); ?>" <?php selected( $option_key, $value ); ?>><?php echo esc_html( $option_value ); ?></option>
292
  case 'textarea':
293
  ?>
294
  <p>
295
+ <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
296
  <textarea class="widefat <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" cols="20" rows="3"><?php echo esc_textarea( $value ); ?></textarea>
297
  <?php if ( isset( $setting['desc'] ) ) : ?>
298
  <small><?php echo esc_html( $setting['desc'] ); ?></small>
305
  ?>
306
  <p>
307
  <input class="checkbox <?php echo esc_attr( $class ); ?>" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" type="checkbox" value="1" <?php checked( $value, 1 ); ?> />
308
+ <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
309
  </p>
310
  <?php
311
  break;
313
  case 'autocomplete':
314
  ?>
315
  <p>
316
+ <label for="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>"><?php echo wp_kses_post( $setting['label'] ); ?></label>
317
  <select class="widefat lp-widget_select_course" id="<?php echo esc_attr( $this->get_field_id( $key ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $key ) ); ?>" data-rest-url="<?php echo get_rest_url(); ?>" data-post-type="<?php echo esc_attr( $setting['post_type'] ?? LP_COURSE_CPT ); ?>" style="width: 300px;">
318
  <?php if ( ! empty( $value ) ) : ?>
319
  <option value="<?php echo esc_attr( $value ); ?>" selected="selected"><?php echo esc_html( get_the_title( $value ) ); ?></option>
inc/course/abstract-course.php CHANGED
@@ -22,13 +22,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
22
  */
23
  public $course_type = null;
24
 
25
- /**
26
- * Course item is viewing in single course.
27
- *
28
- * @var LP_Course_Item
29
- */
30
- protected $_viewing_item = null;
31
-
32
  /**
33
  * @var LP_Course_CURD|null
34
  */
@@ -206,9 +199,12 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
206
 
207
  /**
208
  * Load course curriculum.
 
 
209
  */
210
  public function load_curriculum() {
211
- $item_ids = array();
 
212
  $item_types = array();
213
  $item_by_types = array();
214
  $section_items = array();
@@ -242,49 +238,7 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
242
 
243
  foreach ( $section_items as $section_id => $its ) {
244
  LP_Course_Utils::set_section_items( $section_id, $its );
245
- }
246
-
247
- // learn_press_cache_add_post_type( $item_by_types );
248
-
249
- /*
250
- return ;
251
- ////
252
- $item_types = array();
253
- $items = array();
254
- $sections = array();
255
-
256
- if ( $all_items = $this->_curd->read_course_items( $this->get_id() ) ) {
257
- foreach ( $all_items as $item ) {
258
- if ( empty( $item_types[ $item->type ] ) ) {
259
- $item_types[ $item->type ] = array();
260
- }
261
- $item_types[ $item->type ][] = $item->id;
262
- $items[ $item->id ] = $item->type;
263
-
264
- if ( empty( $sections[ $item->section_id ] ) ) {
265
- $sections[ $item->section_id ] = array();
266
- }
267
- $sections[ $item->section_id ][] = $item->id;
268
- }
269
- }
270
-
271
- LP_Object_Cache::set( 'course-' . $this->get_id(), $item_types, 'learn-press/course-item-group-types' );
272
- LP_Object_Cache::set( 'course-' . $this->get_id(), $items, 'learn-press/course-item-types' );
273
-
274
- foreach ( $sections as $section_id => $section_items ) {
275
- LP_Object_Cache::set( 'section-' . $section_id, $section_items, 'learn-press/section-items' );
276
- }
277
-
278
- learn_press_cache_add_post_type( $items );
279
-
280
-
281
- //LP_Object_Cache::set( $this->get_id(), 'learn-press/course-curriculum' )
282
-
283
- if ( $items = LP_Object_Cache::get( $this->get_id(), 'learn-press/course-curriculum' ) ) {
284
- LP_Helper_CURD::cache_posts( $items );
285
- }
286
-
287
- return true;*/
288
  }
289
 
290
  /**
@@ -424,78 +378,9 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
424
  }
425
 
426
  /**
427
- * @deprecated
428
- */
429
- public function get_description() {
430
- _deprecated_function( __FUNCTION__, '3.0.0', 'LP_Course::get_content' );
431
-
432
- return $this->get_content();
433
- }
434
-
435
- /**
436
- * Get all curriculum of this course.
437
- *
438
- * @param int $section_id
439
- * @param bool $force
440
- *
441
- * @return bool|LP_Course_Section[]
442
- */
443
- public function get_curriculum( $section_id = 0, $force = false ) {
444
- return $this->get_sections( 'object', $section_id );
445
- }
446
-
447
- /**
448
- * Return list of item's ids in course's curriculum.
449
- *
450
- * @param string|array $type
451
- * @param bool $preview - True for including 'Preview' item
452
- *
453
- * @return array
454
- * @since 3.0.0
455
- * Todo: tungnx - should review and rewrite
456
  */
457
- public function get_items( $type = '', $preview = true ) {
458
- $this->load();
459
-
460
- if ( ! $type && $preview ) {
461
- $items = apply_filters(
462
- 'learn-press/course-items',
463
- LP_Object_Cache::get( $this->get_id(), 'learn-press/course-curriculum' )
464
- );
465
- } else {
466
- if ( ! $type ) {
467
- $type = learn_press_course_get_support_item_types( true );
468
- } else {
469
- settype( $type, 'array' );
470
- }
471
-
472
- $key = $this->get_id() . '-' . md5( serialize( func_get_args() ) );
473
- $items = LP_Object_Cache::get( 'course-' . $key, 'learn-press/course-items' );
474
-
475
- if ( false === $items ) {
476
- $items = array();
477
- $item_types = $this->get_item_types( true );
478
-
479
- foreach ( $type as $t ) {
480
- if ( isset( $item_types[ $t ] ) && ! empty( $item_types[ $t ] ) ) {
481
- $items = array_merge( $items, $item_types[ $t ] );
482
- }
483
- }
484
-
485
- $preview_items = $this->get_preview_items();
486
-
487
- if ( ! $preview && $preview_items ) {
488
- $items = array_diff( $items, $preview_items );
489
- }
490
-
491
- LP_Object_Cache::set( 'course-' . $key, $items, 'learn-press/course-items' );
492
- }
493
- }
494
-
495
- return $items;
496
- }
497
-
498
- public function get_item_types( $group = false ) {
499
  $cache_key = $group ? 'course-item-group-types' : 'course-item-types';
500
  $items = LP_Object_Cache::get( 'course-' . $this->get_id(), "learn-press/{$cache_key}" );
501
  $items = false;
@@ -532,19 +417,33 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
532
  }
533
 
534
  return apply_filters( "learn-press/{$cache_key}", $items, $this->get_id() );
535
- }
536
 
537
  /**
538
- * Get all items in a course.
 
 
539
  *
540
  * @return array
 
 
541
  */
542
- public function get_item_ids() {
543
  $item_ids = array();
544
- $items = $this->get_item_types();
545
 
546
- if ( $items ) {
547
- $item_ids = array_keys( $items );
 
 
 
 
 
 
 
 
 
 
 
548
  }
549
 
550
  return apply_filters( 'learn-press/course-item-ids', $item_ids, $this->get_id() );
@@ -554,28 +453,11 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
554
  * Get item is viewing in single course.
555
  *
556
  * @return LP_Course_Item
 
557
  */
558
  public function get_viewing_item() {
559
- return apply_filters( 'learn-press/single-course-viewing-item', $this->_viewing_item, $this->get_id() );
560
- }
561
-
562
- /**
563
- * Get raw data curriculum.
564
- *
565
- * @return array
566
- * @since 3.0.0
567
- */
568
- public function get_curriculum_raw() {
569
- $sections = $this->get_sections( 'object' );
570
- $sections_data = array();
571
-
572
- if ( is_array( $sections ) ) {
573
- foreach ( $sections as $section ) {
574
- $sections_data[] = $section->to_array();
575
- }
576
- }
577
-
578
- return $sections_data;
579
  }
580
 
581
  /**
@@ -713,23 +595,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
713
  );
714
  }
715
 
716
- /**
717
- * @param null $user_id
718
- *
719
- * @return bool|mixed
720
- * @deprecated
721
- * @editor tungnx
722
- * @modify 4.1.5 comment
723
- */
724
- /*public function get_course_info( $user_id = null ) {
725
- if ( ! $user_id ) {
726
- $user_id = get_current_user_id();
727
- }
728
- $user = learn_press_get_user( $user_id );
729
-
730
- return $user ? $user->get_course_info( $this->get_id() ) : false;
731
- }*/
732
-
733
  /**
734
  * Check if a course is Free
735
  *
@@ -913,18 +778,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
913
  return $this->get_regular_price_html();
914
  }
915
 
916
- /**
917
- * Get all items in a course.
918
- *
919
- * @param string $type . Type of items, eg: lp_lesson, lp_quiz...
920
- *
921
- * @return array
922
- * @deprecated
923
- */
924
- public function get_curriculum_items( $type = '' ) {
925
- return $this->get_items( $type );
926
- }
927
-
928
  /**
929
  * @param bool $item_id
930
  *
@@ -1163,14 +1016,9 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
1163
  * @return LP_Lesson|LP_Quiz|boolean
1164
  */
1165
  public function get_item( $item_id ) {
1166
- $item = false;
1167
-
1168
- if ( $this->has_item( $item_id ) ) {
1169
- /*if ( false === wp_cache_get( $item_id, 'posts' ) ) {
1170
- LP_Helper_CURD::cache_posts( $this->get_item_ids() );
1171
- }*/
1172
-
1173
- $item = LP_Course_Item::get_item( $item_id, $this->get_id() );
1174
  }
1175
 
1176
  return apply_filters( 'learn-press/course-item', $item, $item_id, $this->get_id() );
@@ -1199,96 +1047,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
1199
  );
1200
  }
1201
 
1202
- /**
1203
- * Fetch all links of course's items into cache.
1204
- * Item Link = Course Permalink + SLUG + Item Slug
1205
- *
1206
- * @since 3.0.0
1207
- * @deprecated 3.1.6.3
1208
- */
1209
- /*public function get_item_links() {
1210
- $item_links = LP_Object_Cache::get( 'course-' . $this->get_id(), 'learn-press/course-item-links' );
1211
- $item_links = false;
1212
-
1213
- if ( false === $item_links ) {
1214
- $items = $this->get_item_ids();
1215
-
1216
- if ( $items ) {
1217
- if ( false === wp_cache_get( $items[0], 'posts' ) ) {
1218
- LP_Helper_CURD::cache_posts( $items );
1219
- }
1220
-
1221
- $permalink = trailingslashit( $this->get_permalink() );
1222
- $post_types = get_post_types( null, 'objects' );
1223
- $has_query = strpos( $permalink, '?' ) !== false;
1224
- $parts = explode( '?', $permalink );
1225
- $is_permalink = '' !== get_option( 'permalink_structure' );
1226
- $is_draft = 'draft' === get_post_status( $this->get_id() );
1227
- $custom_prefixes = array(
1228
- LP_QUIZ_CPT => LP_Settings::instance()->get( 'quiz_slug' ),
1229
- LP_LESSON_CPT => LP_Settings::instance()->get( 'lesson_slug' ),
1230
- );
1231
-
1232
- if ( empty( $custom_prefixes[ LP_QUIZ_CPT ] ) ) {
1233
- $custom_prefixes[ LP_QUIZ_CPT ] = $post_types[ LP_QUIZ_CPT ]->rewrite['slug'];
1234
- }
1235
-
1236
- if ( empty( $custom_prefixes[ LP_LESSON_CPT ] ) ) {
1237
- $custom_prefixes[ LP_LESSON_CPT ] = $post_types[ LP_LESSON_CPT ]->rewrite['slug'];
1238
- }
1239
-
1240
- $custom_prefixes = array_map( 'sanitize_title_with_dashes', $custom_prefixes );
1241
- foreach ( $custom_prefixes as $type => $custom_prefix ) {
1242
- $custom_prefix = sanitize_title_with_dashes( $custom_prefix );
1243
- $custom_prefixes[ $type ] = preg_replace( '!^/!', '', trailingslashit( $custom_prefix ) );
1244
- }
1245
-
1246
- $custom_prefixes = apply_filters(
1247
- 'learn-press/course/custom-item-prefixes',
1248
- $custom_prefixes,
1249
- $this->get_id()
1250
- );
1251
-
1252
- $slugs = apply_filters(
1253
- 'learn-press/course/custom-item-slugs',
1254
- array(
1255
- LP_LESSON_CPT => 'lesson',
1256
- LP_QUIZ_CPT => 'quiz',
1257
- )
1258
- );
1259
-
1260
- foreach ( $items as $item_id ) {
1261
- $item_permalink = $permalink;
1262
- $item_type = learn_press_get_post_type( $item_id );
1263
- if ( ! empty( $slugs[ $item_type ] ) ) {
1264
- $post_name = get_post_field( 'post_name', $item_id );
1265
- $prefix = $custom_prefixes[ $item_type ];
1266
-
1267
- if ( $is_permalink && ! $is_draft ) {
1268
- if ( $has_query ) {
1269
- $item_permalink = $parts[0] . $prefix . $post_name . '?' . $parts[1];
1270
- } else {
1271
- $item_permalink .= $prefix . $post_name;
1272
- }
1273
- } else {
1274
- $item_permalink = add_query_arg(
1275
- array( $slugs[ $item_type ] => $post_name ),
1276
- $permalink
1277
- );
1278
- }
1279
-
1280
- $item_permalink = $has_query ? untrailingslashit( $item_permalink ) : trailingslashit( $item_permalink );
1281
- }
1282
- $item_links[ $item_id ] = $item_permalink;
1283
- }
1284
- }
1285
-
1286
- LP_Object_Cache::set( 'course-' . $this->get_id(), $item_links, 'learn-press/course-item-links' );
1287
- }
1288
-
1289
- return $item_links;
1290
- }*/
1291
-
1292
  /**
1293
  * Get item's link
1294
  *
@@ -1347,8 +1105,9 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
1347
  * @param LP_Course_Item|LP_User_Item|int $item
1348
  *
1349
  * @return mixed
 
1350
  */
1351
- public function get_item_position( $item ) {
1352
  $items = $this->get_items();
1353
 
1354
  if ( ! $items ) {
@@ -1361,7 +1120,7 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
1361
  ) ? $item->get_id() : absint( $item );
1362
 
1363
  return array_search( $item_id, $items );
1364
- }
1365
 
1366
  /**
1367
  * @return bool|mixed
@@ -1493,342 +1252,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
1493
 
1494
  }
1495
 
1496
- /**
1497
- * @editor tungnx
1498
- * @modify 4.1.4.1 comment - not use
1499
- */
1500
- /*protected function _evaluate_course_by_items( $user_id = 0, $force = false, $type = '' ) {
1501
- $items = $this->get_curriculum_items();
1502
- $result = 0;
1503
-
1504
- if ( $items ) {
1505
- $completed_items = $this->count_completed_items( $user_id, $force, $type );
1506
- $result = round( $completed_items / sizeof( $items ) * 100 );
1507
- }
1508
-
1509
- return apply_filters( 'learn_press_course_results_by_items', $result, $this->get_id(), $user_id );
1510
- }*/
1511
-
1512
- /**
1513
- * @editor tungnx
1514
- * @modify 4.1.4.1 comment - not use
1515
- */
1516
- /*protected function _evaluate_course_by_lessons( $user_id = 0, $force = false, $type = '' ) {
1517
- $lessons = $this->get_items( LP_LESSON_CPT );
1518
- $result = 0;
1519
-
1520
- if ( $lessons ) {
1521
- $completed_items = $this->count_completed_items( $user_id, $force, 'lp_lesson' );
1522
- $result = round( $completed_items / sizeof( $lessons ) * 100 );
1523
- }
1524
-
1525
- return apply_filters( 'learn_press_course_results_by_items', $result, $this->get_id(), $user_id );
1526
- }*/
1527
-
1528
- /**
1529
- * Get achieved point of all quizzes per total points of all quizzes
1530
- *
1531
- * @param $user_id
1532
- * @param bool $force
1533
- *
1534
- * @return mixed|void
1535
- * @editor tungnx
1536
- * @modify 4.1.3 - comment - not use
1537
- */
1538
- /*public function _evaluate_course_by_quizzes_results( $user_id, $force = false ) {
1539
- $quizzes = $this->get_items( LP_QUIZ_CPT );
1540
- $user = learn_press_get_user( $user_id );
1541
- $results = array();
1542
- $achieved_point = 0;
1543
- $total_point = 0;
1544
- $quizzes_ids = array();
1545
-
1546
- foreach ( $quizzes as $quiz ) {
1547
- if ( ! $this->enable_evaluate_item( $quiz->ID, $user_id ) ) {
1548
- continue;
1549
- }
1550
-
1551
- $quizzes_ids[] = $quiz->ID;
1552
- $results[ $quiz->ID ] = $user->get_quiz_results( $quiz->ID, $this->get_id(), true );
1553
-
1554
- if ( $quiz = wp_cache_get( $quiz->ID, 'posts' ) ) {
1555
- $total_point += isset( $quiz->mark ) ? absint( $quiz->mark ) : 0;
1556
- }
1557
-
1558
- $achieved_point += is_object( $results[ $quiz->ID ] ) ? $results[ $quiz->ID ]->mark : 0;
1559
- }
1560
-
1561
- if ( $total_point > 0 ) {
1562
- $result = ( $achieved_point / $total_point ) * 100;
1563
- } else {
1564
- $result = 0;
1565
- }
1566
-
1567
- return apply_filters(
1568
- 'learn_press_evaluate_course_by_quizzes_results',
1569
- $result,
1570
- $this->get_id(),
1571
- $user_id
1572
- );
1573
- }*/
1574
-
1575
- /**
1576
- * @editor tungnx
1577
- * @deprecated 4.1.4.1 comment - not use
1578
- */
1579
- /*public function enable_evaluate_item( $item_id, $user_id = 0 ) {
1580
- if ( ! $user_id ) {
1581
- $user_id = get_current_user_id();
1582
- }
1583
-
1584
- return apply_filters(
1585
- 'learn_press_enable_evaluate_course_item',
1586
- true,
1587
- $item_id,
1588
- $user_id,
1589
- $this->get_id()
1590
- );
1591
- }*/
1592
-
1593
- /**
1594
- * @editor tungnx
1595
- * @modify 4.1.4.1 comment - not use
1596
- */
1597
- /*public function _evaluate_course_by_passed_quizzes_results( $user_id, $force = false ) {
1598
- $quizzes = $this->get_items( LP_QUIZ_CPT );
1599
- $user = learn_press_get_user( $user_id );
1600
- $results = array();
1601
- $achieved_point = 0;
1602
- $total_point = 0;
1603
-
1604
- foreach ( $quizzes as $_quiz ) {
1605
- if ( ! $this->enable_evaluate_item( $_quiz->ID, $user_id ) ) {
1606
- continue;
1607
- }
1608
-
1609
- $quiz = LP_Quiz::get_quiz( $_quiz->ID );
1610
-
1611
- if ( $_quiz = wp_cache_get( $quiz->id, 'posts' ) ) {
1612
- $total_point += isset( $_quiz->mark ) ? absint( $_quiz->mark ) : 0;
1613
- }
1614
-
1615
- $grade = $user->get_quiz_graduation( $quiz->id, $this->get_id() );
1616
-
1617
- if ( $grade == 'passed' ) {
1618
- $quiz_results = $user->get_quiz_results( $quiz->ID, $this->get_id(), true );
1619
- $achieved_point += is_object( $quiz_results ) ? $quiz_results->mark : 0;
1620
- }
1621
- }
1622
-
1623
- if ( $total_point > 0 ) {
1624
- $result = ( $achieved_point / $total_point ) * 100;
1625
- } else {
1626
- $result = 0;
1627
- }
1628
-
1629
- return apply_filters(
1630
- 'learn_press_evaluate_course_by_passed_quizzes_results',
1631
- $result,
1632
- $this->get_id(),
1633
- $user_id
1634
- );
1635
- }*/
1636
-
1637
- /**
1638
- * @editor tungnx
1639
- * @modify 4.1.4.1 comment - not use
1640
- */
1641
- /*public function is_evaluation( $thing ) {
1642
- return $this->get_evaluation_results_method() == $thing;
1643
- }*/
1644
-
1645
- /**
1646
- * Get number of lessons user has completed
1647
- *
1648
- * @param $user_id
1649
- * @param bool $force
1650
- *
1651
- * @return int|mixed|null|void
1652
- * @editor tungnx
1653
- * @modify 4.1.4.1 - comment - not use
1654
- */
1655
- /*public function get_completed_lessons( $user_id, $force = false ) {
1656
- $key = $user_id . '-' . $this->get_id();
1657
-
1658
- $completed_lessons = LP_Cache::get_completed_lessons( false, array() );
1659
-
1660
- if ( ! array_key_exists( $key, $completed_lessons ) || $force ) {
1661
- global $wpdb;
1662
-
1663
- $course_lessons = $this->get_items( LP_LESSON_CPT );
1664
-
1665
- if ( ! $course_lessons ) {
1666
- return 0;
1667
- }
1668
-
1669
- $query = $wpdb->prepare(
1670
- "
1671
- SELECT count(ul.item_id)
1672
- FROM {$wpdb->prefix}learnpress_user_items ul
1673
- INNER JOIN {$wpdb->posts} l ON l.ID = ul.item_id
1674
- WHERE ul.user_id = %d
1675
- AND status = %s
1676
- AND ul.ref_id = %d
1677
- AND ul.item_id IN(" . join( ',', $course_lessons ) . ')
1678
- ',
1679
- $user_id,
1680
- 'completed',
1681
- $this->get_id()
1682
- );
1683
-
1684
- $completed_lessons[ $key ] = $wpdb->get_var( $query );
1685
-
1686
- LP_Cache::set_completed_lessons( $key, $completed_lessons[ $key ] );
1687
- }
1688
-
1689
- return apply_filters(
1690
- 'learn_press_user_completed_lessons',
1691
- $completed_lessons[ $key ],
1692
- $this->get_id(),
1693
- $user_id
1694
- );
1695
- }*/
1696
-
1697
-
1698
- /**
1699
- * Get number of lessons user has completed
1700
- *
1701
- * @param $user_id
1702
- * @param bool $force
1703
- * @param string $type
1704
- *
1705
- * @return int|bool
1706
- * @editor tungnx
1707
- * @modify 4.1.4.1 - comment - not use
1708
- */
1709
- /*public function get_completed_items( $user_id = 0, $force = false, $type = '' ) {
1710
- if ( ! $user_id ) {
1711
- $user_id = get_current_user_id();
1712
- }
1713
-
1714
- $user = learn_press_get_user( $user_id );
1715
- $items = $user ? $user->get_completed_items( $this->get_id() ) : false;
1716
-
1717
- return apply_filters( 'learn-press/user-completed-items', $items, $user_id, $this->get_id() );
1718
- }*/
1719
-
1720
- /**
1721
- * @param int $user_id
1722
- * @param bool $force
1723
- *
1724
- * @return mixed
1725
- * @editor tungnx
1726
- * @modify 4.1.4.1 - comment - not use
1727
- */
1728
- /*public function count_completed_items( $user_id = 0, $force = false, $type = '' ) {
1729
- $items = $this->get_completed_items( $user_id, $force, $type );
1730
- $count = 0;
1731
-
1732
- if ( $items ) {
1733
- $count = sizeof( $items );
1734
- }
1735
-
1736
- return apply_filters( 'learn_press_count_user_completed_items', $count, $this->get_id(), $user_id );
1737
- }*/
1738
-
1739
- /**
1740
- * Count all items in a course.
1741
- *
1742
- * @param string|array $type - Optional. Filter item by it's post-type, e.g: lp_lesson
1743
- * @param bool $include_preview - Optional. False to exclude if item is preview
1744
- *
1745
- * @return int
1746
- * @editor tungnx
1747
- * @modify 4.1.4.1 - comment - not use
1748
- */
1749
- /*public function count_items( $type = '', $include_preview = true ) {
1750
- global $wpdb;
1751
-
1752
- $item_types = learn_press_get_course_item_types();
1753
- $item_type_format = array_fill( 0, sizeof( $item_types ), '%s' );
1754
-
1755
- // $query =$wpdb->prepare("
1756
- // SELECT it.ID
1757
- // FROM {$wpdb->posts} c
1758
- // INNER JOIN {$wpdb->learnpress_sections} s ON s.section_course_id = c.ID
1759
- // INNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id
1760
- // INNER JOIN {$wpdb->posts} it ON it.ID = si.item_id
1761
- // WHERE c.ID = %d
1762
- // AND it.post_type IN (".join(',', $item_type_format).")
1763
- // ", );
1764
-
1765
- if ( $type === '' && $include_preview === true ) {
1766
- $count_items = $this->get_meta( 'count_items' );
1767
-
1768
- if ( false === $count_items ) {
1769
- $items = $this->get_item_ids();
1770
- $count_items = sizeof( $items );
1771
- $this->update_meta( 'count_items', $count_items );
1772
- }
1773
- } else {
1774
- $key = md5(
1775
- serialize(
1776
- array(
1777
- 'course' => $this->get_id(),
1778
- 'type' => $type,
1779
- 'preview' => $include_preview,
1780
- )
1781
- )
1782
- );
1783
-
1784
- $count_items = LP_Object_Cache::get( $key, 'learn-press/count-items' );
1785
- if ( false === $count_items ) {
1786
- $count_items = 0;
1787
- $items = $this->get_items( $type, $include_preview );
1788
-
1789
- if ( $items ) {
1790
- $count_items = sizeof( $items );
1791
- }
1792
-
1793
- LP_Object_Cache::set( $key, $count_items, 'learn-press/count-items' );
1794
- }
1795
- }
1796
-
1797
- return apply_filters( 'learn-press/count-items', $count_items, $type, $include_preview, $this->get_id() );
1798
- }*/
1799
-
1800
- /**
1801
- * Count all items are 'Preview' in a course.
1802
- *
1803
- * @return int
1804
- * @editor tungnx
1805
- * @deprecated 4.1.4.1 - comment - not use
1806
- */
1807
- /*public function count_preview_items() {
1808
- $count_preview = $this->get_preview_items();
1809
-
1810
- if ( false === $count_preview ) {
1811
- $count_preview = 0;
1812
- $items = $this->get_items();
1813
-
1814
- if ( $items ) {
1815
- $count_all = sizeof( $items );
1816
- $count_no_preview = 0;
1817
- $no_preview_items = $this->get_items( '', false );
1818
-
1819
- if ( $no_preview_items ) {
1820
- $count_no_preview = sizeof( $no_preview_items );
1821
- }
1822
-
1823
- $count_preview = $count_all - $count_no_preview;
1824
- }
1825
- } else {
1826
- $count_preview = sizeof( $count_preview );
1827
- }
1828
-
1829
- return apply_filters( 'learn-press/count-preview-items', $count_preview, $this->get_id() );
1830
- }*/
1831
-
1832
  public function get_preview_items() {
1833
  return LP_Object_Cache::get( 'course-' . $this->get_id(), 'learn-press/course-preview-items' );
1834
  }
@@ -1854,92 +1277,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
1854
  $this->_set_data( 'final_quiz', $id );
1855
  }
1856
 
1857
- /**
1858
- * Return TRUE if option to block course's items after course is exceeded turn on.
1859
- *
1860
- * @return bool
1861
- * @editor tungnx
1862
- * @deprecated 4.1.4.1
1863
- */
1864
- /*public function is_block_item_content() {
1865
- return $this->get_data( 'block_lesson_content' ) === 'yes';
1866
- }*/
1867
-
1868
- /**
1869
- * Calculate results of course by final quiz
1870
- *
1871
- * @param int $user_id
1872
- * @param boolean $force
1873
- *
1874
- * @return mixed|null
1875
- * @editor tungnx
1876
- * @deprecated 4.1.4.1 - comment - not use
1877
- */
1878
- /*public function _evaluate_course_by_quiz( $user_id, $force = false ) {
1879
- $user = learn_press_get_user( $user_id );
1880
- $user_course = $user->get_course_data( $this->get_id() );
1881
-
1882
- return $user_course ? $user_course->get_results( '' ) : 0;
1883
- }*/
1884
-
1885
- /**
1886
- * @editor tungnx
1887
- * @deprecated 4.1.4.1 - comment - not use
1888
- */
1889
- /*public function evaluate_quiz( $quiz_id, $user_id, $force = false ) {
1890
- $user = learn_press_get_user( $user_id );
1891
- $results = $user->get_quiz_results( $quiz_id, $this->get_id() );
1892
-
1893
- if ( ! $results ) {
1894
- $result = 0;
1895
- } else {
1896
- if ( $user->get_quiz_graduation(
1897
- $quiz_id,
1898
- $this->get_id()
1899
- ) == 'passed' && ! empty( $results->mark_percent ) ) {
1900
- $result = absint( $results->mark_percent );
1901
- } else {
1902
- $result = 0;
1903
- }
1904
- }
1905
-
1906
- return $result;
1907
- }*/
1908
-
1909
-
1910
- /**
1911
- * Calculate results of course by avg of all quizzes
1912
- *
1913
- * @param int $user_id
1914
- * @param boolean $force
1915
- *
1916
- * @return mixed
1917
- * @editor tungnx
1918
- * @modify 4.1.3 - comment - not use
1919
- */
1920
- /*public function _evaluate_course_by_quizzes( $user_id, $force = false ) {
1921
- $quizzes = $this->get_items( LP_QUIZ_CPT );
1922
- $result = 0;
1923
-
1924
- if ( $quizzes ) {
1925
- $count = 0;
1926
-
1927
- foreach ( $quizzes as $quiz ) {
1928
- if ( ! $this->enable_evaluate_item( $quiz->ID, $user_id ) ) {
1929
- continue;
1930
- }
1931
- $result += $this->evaluate_quiz( $quiz->ID, $user_id, $force );
1932
- $count ++;
1933
- }
1934
-
1935
- if ( $count ) {
1936
- $result = round( $result / $count );
1937
- }
1938
- }
1939
-
1940
- return apply_filters( 'learn_press_evaluation_course_quizzes', $result, $this->get_id(), $user_id );
1941
- }*/
1942
-
1943
  /**
1944
  * Get course duration in seconds
1945
  *
@@ -1985,55 +1322,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
1985
  return $html;
1986
  }
1987
 
1988
- /**
1989
- * Get expired time of this course if user has enrolled
1990
- *
1991
- * @param int $user_id
1992
- * @param mixed
1993
- *
1994
- * @return mixed
1995
- * @editor tungnx
1996
- * @deprecated 4.1.4.1
1997
- */
1998
- /*public function get_user_expired_time( $user_id = 0, $args = array() ) {
1999
- if ( ! $user_id ) {
2000
- $user_id = get_current_user_id();
2001
- }
2002
-
2003
- $duration = $this->get_duration();
2004
- $user = learn_press_get_user( $user_id );
2005
- $course_info = $user->get_course_info( $this->get_id() );
2006
- $start_time = array_key_exists( 'start_time', $args ) ? $args['start_time'] : ( is_array( $course_info ) && array_key_exists( 'start', $course_info ) ? intval( strtotime( $course_info['start'] ) ) : 0 );
2007
-
2008
- if ( $duration == 0 ) {
2009
- $expired = false;
2010
- } else {
2011
- $expired = $start_time + $duration;
2012
- }
2013
-
2014
- return apply_filters( 'learn_press_user_course_expired_time', $expired, $user_id, $this->get_id() );
2015
- }*/
2016
-
2017
- /**
2018
- * Checks if this course has expired
2019
- *
2020
- * @param int $user_id
2021
- * @param mixed
2022
- *
2023
- * @return mixed
2024
- */
2025
- /*public function is_expired( $user_id = 0, $args = array() ) {
2026
- settype( $args, 'array' );
2027
-
2028
- if ( ! $user_id ) {
2029
- $user_id = get_current_user_id();
2030
- }
2031
-
2032
- $expired = $this->get_user_expired_time( $user_id, $args );
2033
-
2034
- return apply_filters( 'learn_press_user_course_expired', $expired !== false ? ( $expired - current_time( 'timestamp' ) ) : false );
2035
- }*/
2036
-
2037
  /**
2038
  * Output params for single course page
2039
  *
@@ -2058,16 +1346,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
2058
  return apply_filters( 'learn-press/course-external-link-text', _x( 'More Info', 'External Link button text', 'learnpress' ), $this->get_id() );
2059
  }
2060
 
2061
- /**
2062
- * @return int
2063
- * @deprecated 4.0.0
2064
- */
2065
- public function get_retake_count() {
2066
- _deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );
2067
-
2068
- return absint( $this->get_data( 'retake_count' ) );
2069
- }
2070
-
2071
  /**
2072
  * Get main author of course.
2073
  *
@@ -2105,50 +1383,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
2105
  return apply_filters( 'learn-press/course-tags', get_the_term_list( $this->get_id(), 'course_tag', __( 'Tags: ', 'learnpress' ), ' ', '' ) );
2106
  }
2107
 
2108
- /**
2109
- * Get sections of course.
2110
- *
2111
- * @param string $return - Optional.
2112
- * @param int $section_id - Optional.
2113
- *
2114
- * @return array|bool|LP_Course_Section[]|LP_Course_Section
2115
- * @version 4.0.0
2116
- */
2117
- public function get_sections( $return = 'object', $section_id = 0 ) {
2118
- $this->load_curriculum();
2119
- $sections = LP_Course_Utils::get_cached_db_sections( $this->get_id() );
2120
-
2121
- if ( false === $sections ) {
2122
- return false;
2123
- }
2124
-
2125
- if ( $return == 'object' && $sections ) {
2126
- $position = 0;
2127
- $object_sections = array();
2128
-
2129
- foreach ( $sections as $k => $section_data ) {
2130
- $sid = $section_data->section_id;
2131
- $section = LP_Course_Utils::get_cached_section( $sid );
2132
-
2133
- if ( false === $section ) {
2134
- $section = new LP_Course_Section( $section_data );
2135
- $section->set_position( ++ $position );
2136
-
2137
- LP_Course_Utils::set_cached_section( $sid, $section );
2138
- }
2139
-
2140
- $object_sections[ $sid ] = $section;
2141
- }
2142
- $sections = $object_sections;
2143
- }
2144
-
2145
- if ( $section_id ) {
2146
- $sections = ! empty( $sections[ $section_id ] ) ? $sections[ $section_id ] : false;
2147
- }
2148
-
2149
- return apply_filters( 'learn-press/course-sections', $sections, $this->get_id(), $return, $section_id );
2150
- }
2151
-
2152
  /**
2153
  * Get extra info of course.
2154
  * Target Audience, Key Features, Requirements, etc...
@@ -2186,41 +1420,6 @@ if ( ! function_exists( 'LP_Abstract_Course' ) ) {
2186
  return apply_filters( 'learn-press/course-faqs', $faqs, $this->get_id() );
2187
  }
2188
 
2189
- /**
2190
- * Get evaluation results method of a course.
2191
- *
2192
- * @return string
2193
- * @since 3.x.x
2194
- * @editor tungnx
2195
- * @modify 4.1.4.1 - comment - not use
2196
- */
2197
- /*public function get_evaluation_results_method() {
2198
- if ( empty( $this->_data['evaluation_results'] ) ) {
2199
- $all_methods = learn_press_course_evaluation_methods( 'keys' );
2200
- $method = get_post_meta( $this->get_id(), '_lp_course_result', true );
2201
-
2202
- if ( ! in_array( $method, $all_methods ) ) {
2203
- $method = key( $all_methods );
2204
- }
2205
-
2206
- switch ( $method ) {
2207
- case 'evaluate_quiz':
2208
- if ( $quiz_method = get_post_meta( $this->get_id(), '_lp_course_result_quiz', true ) ) {
2209
- $method = $quiz_method;
2210
- }
2211
- }
2212
-
2213
- $this->_data['evaluation_results'] = $method;
2214
- }
2215
-
2216
- return apply_filters(
2217
- 'learn-press/course-evaluation-results-method',
2218
- $this->_data['evaluation_results'],
2219
- $this->get_id(),
2220
- $this
2221
- );
2222
- }*/
2223
-
2224
  /**
2225
  * Get course is set featured
2226
  *
22
  */
23
  public $course_type = null;
24
 
 
 
 
 
 
 
 
25
  /**
26
  * @var LP_Course_CURD|null
27
  */
199
 
200
  /**
201
  * Load course curriculum.
202
+ *
203
+ * @depecated 4.1.6.9
204
  */
205
  public function load_curriculum() {
206
+ _deprecated_function( __FUNCTION__, '4.1.6.9' );
207
+ /*$item_ids = array();
208
  $item_types = array();
209
  $item_by_types = array();
210
  $section_items = array();
238
 
239
  foreach ( $section_items as $section_id => $its ) {
240
  LP_Course_Utils::set_section_items( $section_id, $its );
241
+ }*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
242
  }
243
 
244
  /**
378
  }
379
 
380
  /**
381
+ * @depecated 4.1.6.9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382
  */
383
+ /*public function get_item_types( $group = false ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
384
  $cache_key = $group ? 'course-item-group-types' : 'course-item-types';
385
  $items = LP_Object_Cache::get( 'course-' . $this->get_id(), "learn-press/{$cache_key}" );
386
  $items = false;
417
  }
418
 
419
  return apply_filters( "learn-press/{$cache_key}", $items, $this->get_id() );
420
+ }*/
421
 
422
  /**
423
+ * Get all item's ids in a course.
424
+ *
425
+ * @param int $section_id
426
  *
427
  * @return array
428
+ * @version 4.0.1
429
+ * @modify 4.1.6.9 tungnx
430
  */
431
+ public function get_item_ids( int $section_id = 0 ): array {
432
  $item_ids = array();
 
433
 
434
+ $sections_items = $this->get_full_sections_and_items_course();
435
+ foreach ( $sections_items as $section_items ) {
436
+ foreach ( $section_items->items as $item ) {
437
+ if ( $section_id ) {
438
+ if ( $section_id == $section_items->id ) {
439
+ $item_ids[] = $item->id;
440
+ }
441
+
442
+ continue;
443
+ }
444
+
445
+ $item_ids[] = $item->id;
446
+ }
447
  }
448
 
449
  return apply_filters( 'learn-press/course-item-ids', $item_ids, $this->get_id() );
453
  * Get item is viewing in single course.
454
  *
455
  * @return LP_Course_Item
456
+ * @depecated 4.1.6.9
457
  */
458
  public function get_viewing_item() {
459
+ _deprecated_function( __FUNCTION__, '4.1.6.9' );
460
+ //return apply_filters( 'learn-press/single-course-viewing-item', $this->_viewing_item, $this->get_id() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
461
  }
462
 
463
  /**
595
  );
596
  }
597
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
598
  /**
599
  * Check if a course is Free
600
  *
778
  return $this->get_regular_price_html();
779
  }
780
 
 
 
 
 
 
 
 
 
 
 
 
 
781
  /**
782
  * @param bool $item_id
783
  *
1016
  * @return LP_Lesson|LP_Quiz|boolean
1017
  */
1018
  public function get_item( $item_id ) {
1019
+ $item = LP_Course_Item::get_item( $item_id );
1020
+ if ( $item instanceof LP_Course_Item ) {
1021
+ $item->set_course( $this->get_id() );
 
 
 
 
 
1022
  }
1023
 
1024
  return apply_filters( 'learn-press/course-item', $item, $item_id, $this->get_id() );
1047
  );
1048
  }
1049
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1050
  /**
1051
  * Get item's link
1052
  *
1105
  * @param LP_Course_Item|LP_User_Item|int $item
1106
  *
1107
  * @return mixed
1108
+ * @depecated 4.1.6.9
1109
  */
1110
+ /*public function get_item_position( $item ) {
1111
  $items = $this->get_items();
1112
 
1113
  if ( ! $items ) {
1120
  ) ? $item->get_id() : absint( $item );
1121
 
1122
  return array_search( $item_id, $items );
1123
+ }*/
1124
 
1125
  /**
1126
  * @return bool|mixed
1252
 
1253
  }
1254
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1255
  public function get_preview_items() {
1256
  return LP_Object_Cache::get( 'course-' . $this->get_id(), 'learn-press/course-preview-items' );
1257
  }
1277
  $this->_set_data( 'final_quiz', $id );
1278
  }
1279
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1280
  /**
1281
  * Get course duration in seconds
1282
  *
1322
  return $html;
1323
  }
1324
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1325
  /**
1326
  * Output params for single course page
1327
  *
1346
  return apply_filters( 'learn-press/course-external-link-text', _x( 'More Info', 'External Link button text', 'learnpress' ), $this->get_id() );
1347
  }
1348
 
 
 
 
 
 
 
 
 
 
 
1349
  /**
1350
  * Get main author of course.
1351
  *
1383
  return apply_filters( 'learn-press/course-tags', get_the_term_list( $this->get_id(), 'course_tag', __( 'Tags: ', 'learnpress' ), ' ', '' ) );
1384
  }
1385
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1386
  /**
1387
  * Get extra info of course.
1388
  * Target Audience, Key Features, Requirements, etc...
1420
  return apply_filters( 'learn-press/course-faqs', $faqs, $this->get_id() );
1421
  }
1422
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1423
  /**
1424
  * Get course is set featured
1425
  *
inc/course/class-lp-course-item-quiz.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  class LP_Course_Item_Quiz extends LP_Course_Item {
3
  public $name;
4
- function __construct($name) {
5
  $this->name = $name;
6
  }
7
  }
1
  <?php
2
  class LP_Course_Item_Quiz extends LP_Course_Item {
3
  public $name;
4
+ function __construct( $name ) {
5
  $this->name = $name;
6
  }
7
  }
inc/course/class-lp-course-item.php CHANGED
@@ -381,7 +381,7 @@ if ( ! class_exists( 'LP_Course_Item' ) ) {
381
  * @Todo: tungnx - review - rewrite - set cache - check where call this function
382
  * @editor tungnx
383
  * @modify 4.1.3 - change cache
384
- * @version 4.0.1
385
  * @since 3.x.x
386
  */
387
  public static function get_item( $item_id = 0, $course_id = 0 ) {
@@ -393,13 +393,13 @@ if ( ! class_exists( 'LP_Course_Item' ) ) {
393
  $item = false;
394
 
395
  if ( false === $item ) {
396
- $item = get_post( $item_id );
397
 
398
- if ( ! $item ) {
399
  return false;
400
  }
401
 
402
- $item_type = $item->post_type;
403
 
404
  if ( learn_press_is_support_course_item_type( $item_type ) ) {
405
  $type = str_replace( 'lp_', '', $item_type );
@@ -429,14 +429,15 @@ if ( ! class_exists( 'LP_Course_Item' ) ) {
429
  $item = $class;
430
  }
431
  }
432
- }
433
 
434
- if ( $course_id ) {
435
- if ( $item instanceof LP_Course_Item ) {
436
- $item->set_course( $course_id );
437
- }
438
  }
439
 
 
 
 
 
 
440
  // $lp_course_cache->set_cache( $key_cache, $item );
441
  }
442
  }
381
  * @Todo: tungnx - review - rewrite - set cache - check where call this function
382
  * @editor tungnx
383
  * @modify 4.1.3 - change cache
384
+ * @version 4.0.2
385
  * @since 3.x.x
386
  */
387
  public static function get_item( $item_id = 0, $course_id = 0 ) {
393
  $item = false;
394
 
395
  if ( false === $item ) {
396
+ $item_post = get_post( $item_id );
397
 
398
+ if ( ! $item_post ) {
399
  return false;
400
  }
401
 
402
+ $item_type = $item_post->post_type;
403
 
404
  if ( learn_press_is_support_course_item_type( $item_type ) ) {
405
  $type = str_replace( 'lp_', '', $item_type );
429
  $item = $class;
430
  }
431
  }
 
432
 
433
+ break;
 
 
 
434
  }
435
 
436
+ // Todo: don't know why when set course here, theme ivy still null course
437
+ /*if ( $item instanceof LP_Course_Item ) {
438
+ $item->set_course( $course_id );
439
+ }*/
440
+
441
  // $lp_course_cache->set_cache( $key_cache, $item );
442
  }
443
  }
inc/course/class-lp-course-section.php CHANGED
@@ -6,18 +6,20 @@
6
  * @since 3.0.0
7
  */
8
  class LP_Course_Section extends LP_Abstract_Object_Data {
9
-
10
  /**
11
  * Store section data
12
  *
13
  * @var null
14
  */
15
  protected $data = null;
16
-
17
  /**
18
  * @var int
19
  */
20
  protected $course_id = 0;
 
 
 
 
21
 
22
  /**
23
  * @var LP_Section_CURD
@@ -59,44 +61,40 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
59
  $this->_data[ $k ] = $v;
60
  }
61
 
 
 
 
 
 
 
62
  $this->_curd = new LP_Section_CURD( 0 );
63
  $this->set_id( $this->_data['id'] );
64
  // Load section items
65
- $this->_load_items();
66
  }
67
 
68
  /**
69
  * Load items from course curriculum to it section
70
- *
71
- * @return bool
72
  */
73
- protected function _load_items() {
74
  if ( ! $this->get_id() ) {
75
  return false;
76
  }
77
 
 
 
 
78
  // All items
79
- $items = LP_Object_Cache::get( 'section-' . $this->get_id(), 'learn-press/section-items' );
80
- if ( false === $items ) {
81
- $items = $this->_curd->read_items( $this->get_id() );
82
- LP_Object_Cache::set( 'section-' . $this->get_id(), $items, 'learn-press/section-items' );
83
- }
84
 
85
- // LP_Helper_CURD::cache_posts( $items );
 
86
 
87
- foreach ( $items as $item ) {
88
- $item_class = $this->_get_item( $item );
89
-
90
- if ( $item_class ) {
91
- if ( $item_class instanceof LP_Course_Item ) {
92
- $item_class->set_course( $this->get_course_id() );
93
- $item_class->set_section( $this );
94
- $this->items[ $item ] = $item_class;
95
- }
96
  }
97
  }
98
-
99
- return true;
100
  }
101
 
102
  /**
@@ -105,8 +103,9 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
105
  * @param array $item
106
  *
107
  * @return bool|LP_Course_Item
 
108
  */
109
- protected function _get_item( $item ) {
110
  if ( ! is_numeric( $item ) ) {
111
  $item_id = $item->item_id;
112
  } else {
@@ -114,7 +113,7 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
114
  }
115
 
116
  return LP_Course_Item::get_item( $item_id );
117
- }
118
 
119
  /**
120
  * Get data to array.
@@ -189,7 +188,6 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
189
  * @return array
190
  */
191
  public function get_items( $type = '', $preview = true ) {
192
-
193
  /**
194
  * @var LP_Course_Item[] $items
195
  */
@@ -207,7 +205,6 @@ class LP_Course_Section extends LP_Abstract_Object_Data {
207
  }
208
 
209
  foreach ( $items as $item ) {
210
-
211
  if ( ! $preview ) {
212
  if ( $item->is_preview() ) {
213
 
6
  * @since 3.0.0
7
  */
8
  class LP_Course_Section extends LP_Abstract_Object_Data {
 
9
  /**
10
  * Store section data
11
  *
12
  * @var null
13
  */
14
  protected $data = null;
 
15
  /**
16
  * @var int
17
  */
18
  protected $course_id = 0;
19
+ /**
20
+ * @var int
21
+ */
22
+ protected $course = 0;
23
 
24
  /**
25
  * @var LP_Section_CURD
61
  $this->_data[ $k ] = $v;
62
  }
63
 
64
+ $this->course = learn_press_get_course( $this->course_id );
65
+
66
+ if ( ! $this->course ) {
67
+ return;
68
+ }
69
+
70
  $this->_curd = new LP_Section_CURD( 0 );
71
  $this->set_id( $this->_data['id'] );
72
  // Load section items
73
+ $this->load_items();
74
  }
75
 
76
  /**
77
  * Load items from course curriculum to it section
 
 
78
  */
79
+ protected function load_items() {
80
  if ( ! $this->get_id() ) {
81
  return false;
82
  }
83
 
84
+ $course = $this->course;
85
+ $section_id = $this->get_id();
86
+
87
  // All items
88
+ $items = $course->get_item_ids( $section_id );
 
 
 
 
89
 
90
+ foreach ( $items as $item_id ) {
91
+ $item_class = $course->get_item( $item_id );
92
 
93
+ if ( $item_class instanceof LP_Course_Item ) {
94
+ $item_class->set_section( $this );
95
+ $this->items[ $item_id ] = $item_class;
 
 
 
 
 
 
96
  }
97
  }
 
 
98
  }
99
 
100
  /**
103
  * @param array $item
104
  *
105
  * @return bool|LP_Course_Item
106
+ * @depecated 4.1.6.9
107
  */
108
+ /*protected function get_item( $item ) {
109
  if ( ! is_numeric( $item ) ) {
110
  $item_id = $item->item_id;
111
  } else {
113
  }
114
 
115
  return LP_Course_Item::get_item( $item_id );
116
+ }*/
117
 
118
  /**
119
  * Get data to array.
188
  * @return array
189
  */
190
  public function get_items( $type = '', $preview = true ) {
 
191
  /**
192
  * @var LP_Course_Item[] $items
193
  */
205
  }
206
 
207
  foreach ( $items as $item ) {
 
208
  if ( ! $preview ) {
209
  if ( $item->is_preview() ) {
210
 
inc/course/class-lp-course-utils.php CHANGED
@@ -1,6 +1,8 @@
1
  <?php
2
  /**
3
  * Class LP_Course_Utils
 
 
4
  */
5
  class LP_Course_Utils {
6
 
1
  <?php
2
  /**
3
  * Class LP_Course_Utils
4
+ *
5
+ * @depecated 4.1.6.9
6
  */
7
  class LP_Course_Utils {
8
 
inc/course/class-lp-course.php CHANGED
@@ -39,31 +39,6 @@ if ( ! class_exists( 'LP_Course' ) ) {
39
  return $data;
40
  }*/
41
 
42
- /**
43
- * Set item is viewing in single course.
44
- *
45
- * @param LP_Course_Item $item
46
- *
47
- * @return int|LP_Course_Item
48
- */
49
- public function set_viewing_item( $item ) {
50
- if ( $this->_viewing_item && $this->_viewing_item->get_id() == $item->get_id() ) {
51
- return 0;
52
- }
53
-
54
- $user = learn_press_get_current_user();
55
- if ( $user instanceof LP_User_Guest ) {
56
- return 0;
57
- }
58
-
59
- $this->_viewing_item = $item;
60
- $item->set_course( $this );
61
-
62
- $user->maybe_update_item( $item->get_id(), $this->get_id() );
63
-
64
- return $item;
65
- }
66
-
67
  /**
68
  * Get default course meta.
69
  *
@@ -297,6 +272,8 @@ if ( ! class_exists( 'LP_Course' ) ) {
297
  } else {
298
  $first_item_id = $extra_info->first_item_id;
299
  }
 
 
300
  }
301
  } catch ( Throwable $e ) {
302
  $first_item_id = 0;
@@ -383,9 +360,11 @@ if ( ! class_exists( 'LP_Course' ) ) {
383
  * @return int
384
  */
385
  public function count_items( string $type = '', bool $include_preview = true ): int {
 
 
386
  // Get cache
387
  $lp_course_cache = LP_Course_Cache::instance();
388
- $key_cache = $this->get_id() . '/total_items';
389
  $total_items = $lp_course_cache->get_cache( $key_cache );
390
  $count_items = 0;
391
 
@@ -393,7 +372,7 @@ if ( ! class_exists( 'LP_Course' ) ) {
393
  $extra_info = $this->get_info_extra_for_fast_query();
394
 
395
  if ( ! $extra_info->total_items ) {
396
- $total_items = LP_Course_DB::getInstance()->get_total_items( $this->get_id() );
397
  $extra_info->total_items = $total_items;
398
 
399
  // Save post meta
@@ -401,17 +380,21 @@ if ( ! class_exists( 'LP_Course' ) ) {
401
  } else {
402
  $total_items = $extra_info->total_items;
403
  }
 
 
404
  }
405
 
406
  if ( ! empty( $total_items ) ) {
407
  if ( ! empty( $type ) ) {
408
- $count_items = $total_items->{$type};
 
 
409
  } else {
410
  $count_items = $total_items->count_items;
411
  }
412
  }
413
 
414
- return apply_filters( 'learn-press/course/count-items', intval( $count_items ), $this->get_id() );
415
  }
416
 
417
  /**
@@ -435,7 +418,7 @@ if ( ! class_exists( 'LP_Course' ) ) {
435
 
436
  $filter = new LP_Section_Filter();
437
  $filter->section_ids = $section_ids;
438
- $filter->author_id_course = $this->get_id();
439
 
440
  // Delete section
441
  $lp_section_db->delete_section( $filter );
@@ -568,7 +551,7 @@ if ( ! class_exists( 'LP_Course' ) ) {
568
 
569
  /**
570
  * Save key cache to array to clear
571
- * @see LP_Background_Single_Course::save_post()
572
  */
573
  LP_Courses_Cache::instance()->save_cache_keys( $key_cache );
574
  LP_Courses_Cache::instance()->save_cache_keys( $key_cache_total_rows );
@@ -581,20 +564,278 @@ if ( ! class_exists( 'LP_Course' ) ) {
581
  }
582
 
583
  /**
584
- * Get course_ids
585
  *
586
- * @param array $courses Array object [{ ID: 1, post_title = '' }]
587
- * @param string $key
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
588
  *
589
  * @return array
 
 
 
590
  */
591
- public static function get_course_ids( array $courses, string $key = 'ID' ): array {
592
- $course_ids = array();
593
- foreach ( $courses as $course ) {
594
- $course_ids[] = $course->{$key};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
595
  }
596
 
597
- return $course_ids;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
598
  }
599
  }
600
  }
39
  return $data;
40
  }*/
41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  /**
43
  * Get default course meta.
44
  *
272
  } else {
273
  $first_item_id = $extra_info->first_item_id;
274
  }
275
+
276
+ $lp_course_cache->set_cache( $key_cache, $first_item_id );
277
  }
278
  } catch ( Throwable $e ) {
279
  $first_item_id = 0;
360
  * @return int
361
  */
362
  public function count_items( string $type = '', bool $include_preview = true ): int {
363
+ $course_id = $this->get_id();
364
+
365
  // Get cache
366
  $lp_course_cache = LP_Course_Cache::instance();
367
+ $key_cache = "$course_id/total_items";
368
  $total_items = $lp_course_cache->get_cache( $key_cache );
369
  $count_items = 0;
370
 
372
  $extra_info = $this->get_info_extra_for_fast_query();
373
 
374
  if ( ! $extra_info->total_items ) {
375
+ $total_items = LP_Course_DB::getInstance()->get_total_items( $course_id );
376
  $extra_info->total_items = $total_items;
377
 
378
  // Save post meta
380
  } else {
381
  $total_items = $extra_info->total_items;
382
  }
383
+
384
+ $lp_course_cache->set_cache( $key_cache, $total_items );
385
  }
386
 
387
  if ( ! empty( $total_items ) ) {
388
  if ( ! empty( $type ) ) {
389
+ if ( isset( $total_items->{$type} ) ) {
390
+ $count_items = $total_items->{$type};
391
+ }
392
  } else {
393
  $count_items = $total_items->count_items;
394
  }
395
  }
396
 
397
+ return apply_filters( 'learn-press/course/count-items', intval( $count_items ), $course_id );
398
  }
399
 
400
  /**
418
 
419
  $filter = new LP_Section_Filter();
420
  $filter->section_ids = $section_ids;
421
+ $filter->author_id_course = $this->get_author( 'id' );
422
 
423
  // Delete section
424
  $lp_section_db->delete_section( $filter );
551
 
552
  /**
553
  * Save key cache to array to clear
554
+ * @see LP_Background_Single_Course::save_post() - clear cache when save post
555
  */
556
  LP_Courses_Cache::instance()->save_cache_keys( $key_cache );
557
  LP_Courses_Cache::instance()->save_cache_keys( $key_cache_total_rows );
564
  }
565
 
566
  /**
567
+ * Get full sections, items of course via Cache, extra info (if it has)
568
  *
569
+ * @return array
570
+ * @since 4.1.6.9
571
+ * @version 1.0.0
572
+ * @author tungnx
573
+ */
574
+ public function get_full_sections_and_items_course(): array {
575
+ $sections_items = [];
576
+ $course_id = $this->get_id();
577
+
578
+ try {
579
+ // Get cache
580
+ $lp_course_cache = LP_Course_Cache::instance();
581
+ $key_cache = "$course_id/sections_items";
582
+ $sections_items = $lp_course_cache->get_cache( $key_cache );
583
+
584
+ if ( ! $sections_items ) {
585
+ $extra_info = $this->get_info_extra_for_fast_query();
586
+
587
+ if ( empty( $extra_info->sections_items ) ) {
588
+ $sections_items = $this->get_sections_and_items_course_from_db_and_sort();
589
+ $extra_info->sections_items = $sections_items;
590
+
591
+ // Save post meta
592
+ $this->set_info_extra_for_fast_query( $extra_info );
593
+ } else {
594
+ $sections_items = $extra_info->sections_items;
595
+ }
596
+
597
+ $lp_course_cache->set_cache( $key_cache, $sections_items );
598
+ }
599
+ } catch ( Throwable $e ) {
600
+ if ( LP_Debug::is_debug() ) {
601
+ error_log( $e->getMessage() );
602
+ }
603
+ }
604
+
605
+ return $sections_items;
606
+ }
607
+
608
+ /**
609
+ * Get all sections and items from database, then handle sort
610
+ * Only call when data change or not set
611
  *
612
  * @return array
613
+ * @since 4.1.6.9
614
+ * @version 1.0.0
615
+ * @author tungnx
616
  */
617
+ public function get_sections_and_items_course_from_db_and_sort(): array {
618
+ $sections_items = [];
619
+ $course_id = $this->get_id();
620
+ $lp_course_db = LP_Course_DB::getInstance();
621
+ $lp_course_cache = LP_Course_Cache::instance();
622
+ $key_cache = "$course_id/sections_items";
623
+
624
+ try {
625
+ $sections_results = $lp_course_db->get_sections( $course_id );
626
+ $sections_items_results = $lp_course_db->get_full_sections_and_items_course( $course_id );
627
+ $count_items = count( $sections_items_results );
628
+ $index_items_last = $count_items - 1;
629
+ $section_current = 0;
630
+
631
+ foreach ( $sections_items_results as $index => $sections_item ) {
632
+ $section_new = $sections_item->section_id;
633
+ $section_order = $sections_item->section_order;
634
+ $item = new stdClass();
635
+ $item->id = $sections_item->item_id;
636
+ $item->order = $sections_item->item_order;
637
+ $item->type = $sections_item->item_type;
638
+
639
+ if ( $section_new != $section_current ) {
640
+ $sections_items[ $section_new ] = new stdClass();
641
+ $sections_items[ $section_new ]->id = $section_new;
642
+ $sections_items[ $section_new ]->order = $section_order;
643
+ $sections_items[ $section_new ]->title = $sections_item->section_name;
644
+ $sections_items[ $section_new ]->description = $sections_item->section_description;
645
+ $sections_items[ $section_new ]->items = [];
646
+
647
+ // Sort item by item_order
648
+ if ( $section_current != 0 ) {
649
+ usort(
650
+ $sections_items[ $section_current ]->items,
651
+ function ( $item1, $item2 ) {
652
+ return $item1->order - $item2->order;
653
+ }
654
+ );
655
+ }
656
+
657
+ $section_current = $section_new;
658
+ }
659
+
660
+ $sections_items[ $section_new ]->items[ $item->id ] = $item;
661
+
662
+ if ( $index_items_last === $index ) {
663
+ usort(
664
+ $sections_items[ $section_current ]->items,
665
+ function ( $item1, $item2 ) {
666
+ return $item1->order - $item2->order;
667
+ }
668
+ );
669
+ }
670
+ }
671
+
672
+ // Check case if section empty items
673
+ foreach ( $sections_results as $section ) {
674
+ $section_id = $section->section_id;
675
+ if ( isset( $sections_items[ $section_id ] ) ) {
676
+ continue;
677
+ }
678
+
679
+ $section_obj = new stdClass();
680
+ $section_obj->id = $section_id;
681
+ $section_obj->order = $section->section_order;
682
+ $section_obj->title = $section->section_name;
683
+ $section_obj->description = $section->section_description;
684
+ $section_obj->items = [];
685
+ $sections_items[ $section_id ] = $section_obj;
686
+ }
687
+
688
+ // Sort section by section_order
689
+ usort(
690
+ $sections_items,
691
+ function ( $section1, $section2 ) {
692
+ return $section1->order - $section2->order;
693
+ }
694
+ );
695
+
696
+ $lp_course_cache->set_cache( $key_cache, $sections_items );
697
+ } catch ( Throwable $e ) {
698
+ if ( LP_Debug::is_debug() ) {
699
+ error_log( $e->getMessage() );
700
+ }
701
+ }
702
+
703
+ return $sections_items;
704
+ }
705
+
706
+ /**
707
+ * Get sections of course.
708
+ *
709
+ * @param string $return - Optional.
710
+ * @param int $section_id - Optional.
711
+ *
712
+ * @return array|bool|LP_Course_Section[]|LP_Course_Section
713
+ * @version 4.0.0
714
+ */
715
+ public function get_sections( $return = 'object', $section_id = 0 ) {
716
+ // $this->load_curriculum();
717
+ // $sections = LP_Course_Utils::get_cached_db_sections( $this->get_id() );
718
+
719
+ $sections_items = $this->get_full_sections_and_items_course();
720
+
721
+ /*if ( false === $sections ) {
722
+ return false;
723
+ }*/
724
+
725
+ //$position = 0;
726
+ $sections = array();
727
+ foreach ( $sections_items as $k => $section_items ) {
728
+ $position = $k + 1;
729
+ $section_items_tmp = [
730
+ 'section_id' => $section_items->id,
731
+ 'section_name' => $section_items->title,
732
+ 'section_course_id' => $this->get_id(),
733
+ 'section_order' => $section_items->order,
734
+ 'section_description' => $section_items->description,
735
+ 'items' => $section_items->items,
736
+ ];
737
+ $sid = $section_items->id;
738
+ $section = new LP_Course_Section( $section_items_tmp );
739
+ $section->set_position( $position );
740
+ $sections[ $sid ] = $section;
741
+ }
742
+
743
+ if ( $section_id ) {
744
+ $sections = $sections[ $section_id ] ?? [];
745
+ }
746
+
747
+ return apply_filters( 'learn-press/course-sections', $sections, $this->get_id(), $return, $section_id );
748
+ }
749
+
750
+ /**
751
+ * Get raw data curriculum.
752
+ *
753
+ * @return array
754
+ * @since 3.0.0
755
+ * @editor tungnx
756
+ * @version 1.0.1
757
+ */
758
+ public function get_curriculum_raw(): array {
759
+ $sections_data = array();
760
+
761
+ $sections_items = $this->get_full_sections_and_items_course();
762
+ foreach ( $sections_items as $section_items ) {
763
+ $section_items_arr = (array) $section_items;
764
+ $section_items_arr['course_id'] = $this->get_id();
765
+ $section_items_arr['items'] = [];
766
+
767
+ foreach ( $section_items->items as $item ) {
768
+ $itemObject = $this->get_item( $item->id );
769
+
770
+ if ( ! $itemObject instanceof LP_Course_Item ) {
771
+ continue;
772
+ }
773
+
774
+ $item_arr = (array) $item;
775
+ $item_arr['title'] = $itemObject->get_title();
776
+ $item_arr['preview'] = $itemObject->is_preview();
777
+ $section_items_arr['items'][] = $item_arr;
778
+ }
779
+
780
+ $sections_data[] = $section_items_arr;
781
  }
782
 
783
+ return $sections_data;
784
+ }
785
+
786
+ /**
787
+ * Get all curriculum of this course.
788
+ *
789
+ * @param int $section_id
790
+ * @param bool $force
791
+ *
792
+ * @return bool|LP_Course_Section[]
793
+ */
794
+ public function get_curriculum( $section_id = 0, $force = false ) {
795
+ return $this->get_sections( 'object', $section_id );
796
+ }
797
+
798
+ /**
799
+ * Return list of item's ids in course's curriculum.
800
+ *
801
+ * @param string|array $type
802
+ *
803
+ * @return array
804
+ * @since 3.0.0
805
+ * @version 3.0.2
806
+ */
807
+ public function get_items( $type = '' ) {
808
+ //$this->load();
809
+
810
+ $sections_items = $this->get_full_sections_and_items_course();
811
+
812
+ $items = array();
813
+
814
+ foreach ( $sections_items as $section_items ) {
815
+ foreach ( $section_items->items as $item ) {
816
+ if ( ! empty( $type ) ) {
817
+ if ( $type === $item->type ) {
818
+ $items[] = $item->id;
819
+ }
820
+ } else {
821
+ $items[] = $item->id;
822
+ }
823
+ }
824
+ }
825
+
826
+ return $items;
827
+ }
828
+
829
+ /**
830
+ * Get all items in a course.
831
+ *
832
+ * @param string $type . Type of items, eg: lp_lesson, lp_quiz...
833
+ *
834
+ * @return array
835
+ * @deprecated
836
+ */
837
+ public function get_curriculum_items( $type = '' ) {
838
+ return $this->get_items( $type );
839
  }
840
  }
841
  }
inc/course/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/course/lp-course-functions.php CHANGED
@@ -52,11 +52,11 @@ function learn_press_get_course( $the_course = 0 ) {
52
  *
53
  * @return string
54
  * @since 3.0.0
55
- *
56
  */
57
- function learn_press_create_course_action_nonce( $action, $course_id = 0, $user_id = 0 ) {
58
  return LP_Nonce_Helper::create_course( $action, $course_id, $user_id );
59
- }
60
 
61
  /**
62
  * Verify nonce for course action.
@@ -68,11 +68,11 @@ function learn_press_create_course_action_nonce( $action, $course_id = 0, $user_
68
  *
69
  * @return bool
70
  * @since 3.0.0
71
- *
72
  */
73
- function learn_press_verify_course_action_nonce( $nonce, $action, $course_id = 0, $user_id = 0 ) {
74
  return LP_Nonce_Helper::verify_course( $nonce, $action, $course_id, $user_id );
75
- }
76
 
77
  /**
78
  * Get type of items are supported in course curriculum (post types).
@@ -215,14 +215,15 @@ function learn_press_item_meta_format( $item, $nonce = '' ) {
215
  }
216
 
217
  // return false to hide post format
218
- if ( $format = apply_filters( 'learn_press_course_item_format', $format, $item ) ) {
 
219
  printf(
220
  '<label for="post-format-0" class="post-format-icon post-format-%s" title="%s"></label>',
221
  $format,
222
  ucfirst( $format )
223
  );
224
  } else {
225
- echo $nonce;
226
  }
227
  }
228
  }
@@ -654,9 +655,10 @@ add_filter( 'get_comment_link', 'learn_press_item_comment_link', 100, 4 );
654
  * @param string $status
655
  *
656
  * @since 3.0.10
 
657
  *
658
  */
659
- function learn_press_force_refresh_course( $comment_id, $status ) {
660
 
661
  if ( empty( $_POST['comment-post-item-course'] ) ) {
662
  return;
@@ -668,7 +670,7 @@ function learn_press_force_refresh_course( $comment_id, $status ) {
668
  $curd->load( $course );
669
  }
670
 
671
- add_action( 'comment_post', 'learn_press_force_refresh_course', 1000, 2 );
672
 
673
  /**
674
  * @editor tungnx | comment code
@@ -698,7 +700,10 @@ add_action( 'comment_post', 'learn_press_force_refresh_course', 1000, 2 );
698
  }
699
  }*/
700
 
701
- if ( ! function_exists( 'learn_press_get_nav_course_item_url' ) ) {
 
 
 
702
  function learn_press_get_nav_course_item_url( $course_id = null, $item_id = null, $content_only = false ) {
703
 
704
  $course = learn_press_get_course( $course_id );
@@ -735,7 +740,7 @@ if ( ! function_exists( 'learn_press_get_nav_course_item_url' ) ) {
735
 
736
  return $return;
737
  }
738
- }
739
 
740
  if ( ! function_exists( 'learn_press_edit_item_link' ) ) {
741
  /**
@@ -764,12 +769,15 @@ if ( ! function_exists( 'learn_press_edit_item_link' ) ) {
764
  }
765
  /**
766
  * Get course id of an item by id
 
 
767
  */
768
 
769
  if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {
770
 
771
  function learn_press_get_item_course_id( $post_id, $post_type ) {
772
- global $wpdb;
 
773
 
774
  // If the post is a course
775
  if ( LP_COURSE_CPT == learn_press_get_post_type( $post_id ) ) {
@@ -801,12 +809,12 @@ if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {
801
  if ( false === $course_id ) {
802
  $query = $wpdb->prepare(
803
  "
804
- SELECT section.section_course_id
805
- FROM {$wpdb->learnpress_sections} AS section
806
- INNER JOIN {$wpdb->learnpress_section_items} AS item
807
- ON item.section_id = section.section_id
808
- WHERE item.item_id = %d
809
- LIMIT 1
810
  ",
811
  $post_id
812
  );
@@ -828,7 +836,7 @@ if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {
828
 
829
  }
830
 
831
- return $course_id;
832
  }
833
  }
834
 
@@ -949,50 +957,14 @@ if ( ! function_exists( 'learn_press_course_item_type_link' ) ) {
949
  //add_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 4 );
950
 
951
  /**
952
- * Get course of the item is assigned to.
953
- *
954
- * @param int $item_id
955
  *
956
- * @return int
957
- * @since 3.2.1
958
  *
959
- * @editor tungnx | comment code
960
- * @deprecated 3.2.7.5
961
  */
962
- /*function learn_press_get_item_course( $item_id ) {
963
- global $wpdb;
964
- $query = $wpdb->prepare( "
965
- SELECT section_course_id
966
- FROM {$wpdb->learnpress_sections} s
967
- INNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id
968
- WHERE si.item_id = %d
969
- ", $item_id );
970
-
971
- return (int) $wpdb->get_var( $query );
972
- }*/
973
-
974
-
975
- /*add_filter( 'template_include', 'learn_press_prepare_archive_courses' );
976
- function learn_press_prepare_archive_courses( $template ) {
977
- global $wp_query;
978
- $query = ! empty( LP()->wp_query ) ? LP()->wp_query : $wp_query;
979
- if ( ! $query || ! $query->is_main_query() ) {
980
- return $template;
981
- }
982
- if ( ! empty( $query->posts ) ) {
983
- $ids = array();
984
- foreach ( $query->posts as $_post ) {
985
- $ids[] = $_post->ID;
986
- $_post = sanitize_post( $_post, 'raw' );
987
- wp_cache_add( $_post->ID, $_post, 'posts' );
988
- }
989
- }
990
-
991
- return $template;
992
- }*/
993
-
994
- function learn_press_course_grade_html( $grade, $echo = true ) {
995
- $html = '';
996
  switch ( $grade ) {
997
  case 'passed':
998
  $html = __( 'Passed', 'learnpress' );
@@ -1007,14 +979,12 @@ function learn_press_course_grade_html( $grade, $echo = true ) {
1007
  $html = $grade;
1008
  break;
1009
  }
1010
- // @deprecated
1011
- $html = apply_filters( 'learn_press_course_grade_html', $html, $grade );
1012
 
1013
  // @since 3.0.0
1014
  $html = apply_filters( 'learn-press/course/grade-html', $html, $grade );
1015
 
1016
  if ( $echo ) {
1017
- echo $html;
1018
  }
1019
 
1020
  return $html;
52
  *
53
  * @return string
54
  * @since 3.0.0
55
+ * @depecated 4.1.6.9
56
  */
57
+ /*function learn_press_create_course_action_nonce( $action, $course_id = 0, $user_id = 0 ) {
58
  return LP_Nonce_Helper::create_course( $action, $course_id, $user_id );
59
+ }*/
60
 
61
  /**
62
  * Verify nonce for course action.
68
  *
69
  * @return bool
70
  * @since 3.0.0
71
+ * @depecated 4.1.6.9
72
  */
73
+ /*function learn_press_verify_course_action_nonce( $nonce, $action, $course_id = 0, $user_id = 0 ) {
74
  return LP_Nonce_Helper::verify_course( $nonce, $action, $course_id, $user_id );
75
+ }*/
76
 
77
  /**
78
  * Get type of items are supported in course curriculum (post types).
215
  }
216
 
217
  // return false to hide post format
218
+ $format = apply_filters( 'learn_press_course_item_format', $format, $item );
219
+ if ( $format ) {
220
  printf(
221
  '<label for="post-format-0" class="post-format-icon post-format-%s" title="%s"></label>',
222
  $format,
223
  ucfirst( $format )
224
  );
225
  } else {
226
+ echo esc_html( $nonce );
227
  }
228
  }
229
  }
655
  * @param string $status
656
  *
657
  * @since 3.0.10
658
+ * @depecated 4.1.6.9
659
  *
660
  */
661
+ /*function learn_press_force_refresh_course( $comment_id, $status ) {
662
 
663
  if ( empty( $_POST['comment-post-item-course'] ) ) {
664
  return;
670
  $curd->load( $course );
671
  }
672
 
673
+ add_action( 'comment_post', 'learn_press_force_refresh_course', 1000, 2 );*/
674
 
675
  /**
676
  * @editor tungnx | comment code
700
  }
701
  }*/
702
 
703
+ /**
704
+ * @depecated 4.1.6.9
705
+ */
706
+ /*if ( ! function_exists( 'learn_press_get_nav_course_item_url' ) ) {
707
  function learn_press_get_nav_course_item_url( $course_id = null, $item_id = null, $content_only = false ) {
708
 
709
  $course = learn_press_get_course( $course_id );
740
 
741
  return $return;
742
  }
743
+ }*/
744
 
745
  if ( ! function_exists( 'learn_press_edit_item_link' ) ) {
746
  /**
769
  }
770
  /**
771
  * Get course id of an item by id
772
+ *
773
+ * @depecated 4.1.6.9
774
  */
775
 
776
  if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {
777
 
778
  function learn_press_get_item_course_id( $post_id, $post_type ) {
779
+ _deprecated_function( __FUNCTION__, '4.1.6.9' );
780
+ /*global $wpdb;
781
 
782
  // If the post is a course
783
  if ( LP_COURSE_CPT == learn_press_get_post_type( $post_id ) ) {
809
  if ( false === $course_id ) {
810
  $query = $wpdb->prepare(
811
  "
812
+ SELECT section.section_course_id
813
+ FROM {$wpdb->learnpress_sections} AS section
814
+ INNER JOIN {$wpdb->learnpress_section_items} AS item
815
+ ON item.section_id = section.section_id
816
+ WHERE item.item_id = %d
817
+ LIMIT 1
818
  ",
819
  $post_id
820
  );
836
 
837
  }
838
 
839
+ return $course_id;*/
840
  }
841
  }
842
 
957
  //add_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 4 );
958
 
959
  /**
960
+ * Get grade course type can translate
 
 
961
  *
962
+ * @param string $grade
963
+ * @param bool $echo
964
  *
965
+ * @return mixed|void
 
966
  */
967
+ function learn_press_course_grade_html( string $grade = '', bool $echo = true ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
968
  switch ( $grade ) {
969
  case 'passed':
970
  $html = __( 'Passed', 'learnpress' );
979
  $html = $grade;
980
  break;
981
  }
 
 
982
 
983
  // @since 3.0.0
984
  $html = apply_filters( 'learn-press/course/grade-html', $html, $grade );
985
 
986
  if ( $echo ) {
987
+ echo esc_html( $html );
988
  }
989
 
990
  return $html;
inc/curds/class-lp-course-curd.php CHANGED
@@ -127,7 +127,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
127
  * @return mixed|WP_Error
128
  * @since 3.0.0
129
  */
130
- public function duplicate( &$course_id, $args = array() ) {
131
 
132
  if ( ! $course_id ) {
133
  return new WP_Error( __( '<p>Op! ID not found</p>', 'learnpress' ) );
@@ -214,6 +214,8 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
214
  }
215
  }
216
 
 
 
217
  return $new_course_id;
218
  }
219
  }
@@ -221,6 +223,111 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
221
  return false;
222
  }
223
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
  /**
225
  * Load course data
226
  *
@@ -229,7 +336,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
229
  * @return mixed
230
  */
231
  public function load( &$course ) {
232
- $this->read_course_curriculum( $course->get_id() );
233
 
234
  return $course;
235
  }
@@ -242,15 +349,9 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
242
  * @param bool $publish_only
243
  *
244
  * @return array
 
245
  */
246
- public function read_course_items( $course_id, $publish_only = true, $section_ids = array() ) {
247
- // Tungnx: Comment because make not work with WPML.
248
- /*static $results = null;
249
-
250
- if ( ! is_null( $results ) ) {
251
- return $results;
252
- }*/
253
-
254
  global $wpdb;
255
  $where = '';
256
 
@@ -298,7 +399,28 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
298
  $results = $wpdb->get_results( $query );
299
 
300
  return $results;
301
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
302
 
303
  /**
304
  * Get all courses that contains an item by item id.
@@ -331,7 +453,10 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
331
  return $wpdb->get_col( $query );
332
  }
333
 
334
- public static function update_items_format( $item ) {
 
 
 
335
 
336
  if ( empty( $item['args']['course_id'] ) ) {
337
  return false;
@@ -386,7 +511,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
386
  }
387
 
388
  return false;
389
- }
390
 
391
  /**
392
  * Read curriculum of a course from db into cache.
@@ -395,7 +520,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
395
  *
396
  * @return array|mixed
397
  */
398
- public function read_course_curriculum( $course_id ) {
399
 
400
  if ( learn_press_get_post_type( $course_id ) != LP_COURSE_CPT ) {
401
  return false;
@@ -405,12 +530,12 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
405
  return false;
406
  }
407
 
408
- if ( $section_ids = $this->get_course_sections( $course_id, 'ids' ) ) {
409
  return $this->read_course_items( $course_id );
410
  }
411
 
412
  return false;
413
- }
414
 
415
  /**
416
  * Get sections of course
@@ -422,14 +547,14 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
422
  * @version 4.0.0
423
  *
424
  */
425
- public function get_course_sections( $course_id, $return = '' ) {
426
  // if ( false === ( $sections = LP_Object_Cache::get( $course_id, 'learn-press/course-sections' ) ) ) {
427
  $sections = $this->read_course_sections( $course_id );
428
  // }
429
 
430
  // return $return === 'ids' ? LP_Object_Cache::get( $course_id, 'learn-press/course-sections-ids' ) : $sections;
431
  return $return === 'ids' ? LP_Course_Utils::get_cached_db_sections( $course_id, 'ids' ) : $sections;
432
- }
433
 
434
  /**
435
  * Retrieve total sections of a course.
@@ -499,8 +624,9 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
499
  *
500
  * @return mixed|array
501
  * @version 4.0.0
 
502
  */
503
- public function read_course_sections( $course_id ) {
504
  global $wpdb;
505
 
506
  settype( $course_id, 'array' );
@@ -536,7 +662,7 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
536
  }
537
 
538
  return $first_course_sections;
539
- }
540
 
541
  /**
542
  * Remove lesson, quiz from course's curriculum.
@@ -791,231 +917,5 @@ if ( ! class_exists( 'LP_Course_CURD' ) ) {
791
 
792
  return $wpdb->get_col( $query );
793
  }
794
-
795
- /**
796
- * Get popular courses.
797
- *
798
- * @param array $args
799
- *
800
- * @return array
801
- * @author tungnx
802
- * @version 1.0.0
803
- * @depecated 4.1.6.4
804
- */
805
- /*public function get_popular_courses( array $args = array() ): array {
806
- $lp_db = LP_Course_DB::getInstance();
807
-
808
- $filter = new LP_Course_Filter();
809
- $filter->limit = $args['limit'];
810
-
811
- return $lp_db->get_popular_courses( $filter );
812
- }*/
813
-
814
- /**
815
- * Get popular courses.
816
- *
817
- * @param array $args
818
- *
819
- * @return array
820
- * @editor tungnx
821
- * @modify 4.1.4 - comment - not use
822
- */
823
- /*public function get_popular_courses_bk( $args = array() ) {
824
- global $wpdb;
825
-
826
- $limit = ! empty( $args['limit'] ) ? $args['limit'] : - 1;
827
- $order = ! empty( $args['order'] ) ? $args['order'] : 'DESC';
828
-
829
- if ( $limit <= 0 ) {
830
- $limit = 0;
831
- }
832
-
833
- $query = apply_filters(
834
- 'learn-press/course-curd/query-popular-courses',
835
- $wpdb->prepare(
836
- "
837
- SELECT DISTINCT p.ID, COUNT(*) AS number_enrolled
838
- FROM {$wpdb->prefix}learnpress_user_items ui
839
- INNER JOIN {$wpdb->posts} p ON p.ID = ui.item_id
840
- WHERE ui.item_type = %s
841
- AND ( ui.status = %s OR ui.status = %s )
842
- AND p.post_status = %s
843
- ORDER BY number_enrolled {$order}
844
- LIMIT %d
845
- ",
846
- LP_COURSE_CPT,
847
- 'enrolled',
848
- 'finished',
849
- 'publish',
850
- $limit
851
- )
852
- );
853
-
854
- return $wpdb->get_col( $query );
855
- }*/
856
-
857
- /**
858
- * @param int|array $course_id
859
- * @param string|array $statuses
860
- *
861
- * @return int
862
- * @editor tungnx
863
- * @modify 4.1.4 - comment - not use
864
- */
865
- /*public function count_by_orders( $course_id, $statuses = 'completed' ) {
866
- return $this->count_by_orders2( $course_id, $statuses );
867
- global $wpdb;
868
-
869
- settype( $statuses, 'array' );
870
- $statuses_with_prefix = array();
871
-
872
- foreach ( $statuses as $k => $v ) {
873
- if ( ! preg_match( '/^lp-/', $v ) ) {
874
- $statuses_with_prefix[ $k ] = 'lp-' . $v;
875
- }
876
- }
877
- $course_ids = $course_id;
878
- settype( $course_ids, 'array' );
879
- $fetch_ids = array();
880
-
881
- foreach ( $course_ids as $course_id ) {
882
-
883
- if ( LP_COURSE_CPT !== get_post_type( $course_id ) ) {
884
- continue;
885
- }
886
-
887
- if ( false !== ( $count = LP_Object_Cache::get(
888
- 'course-' . $course_id,
889
- 'learn-press/course-orders'
890
- ) ) ) {
891
- continue;
892
- } else {
893
- LP_Object_Cache::set( 'course-' . $course_id, 0, 'learn-press/course-orders' );
894
- }
895
-
896
- $fetch_ids[] = $course_id;
897
- }
898
-
899
- if ( $fetch_ids ) {
900
- $in_clause = join( ',', array_fill( 0, sizeof( $statuses_with_prefix ), '%s' ) );
901
- $in_courses_clause = join( ',', array_fill( 0, sizeof( $fetch_ids ), '%d' ) );
902
- $query_args = array_merge(
903
- array(
904
- '_course_id',
905
- LP_ORDER_CPT,
906
- ),
907
- $statuses_with_prefix,
908
- $fetch_ids
909
- );
910
-
911
- $query = $wpdb->prepare(
912
- "
913
- SELECT oim.meta_value cid, COUNT(oim.meta_id) `count`
914
- FROM {$wpdb->learnpress_order_itemmeta} oim
915
- INNER JOIN {$wpdb->learnpress_order_items} oi ON oi.order_item_id = oim.learnpress_order_item_id
916
- AND oim.meta_key = %s
917
- INNER JOIN {$wpdb->posts} o ON o.ID = oi.order_id
918
- WHERE o.post_type = %s
919
- AND o.post_status IN ($in_clause)
920
- AND oim.meta_value IN ($in_courses_clause)
921
- GROUP BY oim.meta_value
922
- ",
923
- $query_args
924
- );
925
-
926
- if ( $rows = $wpdb->get_results( $query ) ) {
927
- foreach ( $rows as $row ) {
928
- if ( empty( $row->cid ) ) {
929
- continue;
930
- }
931
- LP_Object_Cache::set(
932
- 'course-' . $row->cid,
933
- intval( $row->count ),
934
- 'learn-press/course-orders'
935
- );
936
- }
937
- }
938
- }
939
-
940
- $course_id = reset( $course_ids );
941
-
942
- return LP_Object_Cache::get( 'course-' . $course_id, 'learn-press/course-orders' );
943
- }*/
944
-
945
- /**
946
- * @param int|array $course_id
947
- * @param string|array $statuses
948
- *
949
- * @return int
950
- * @editor tungnx
951
- * @modify 4.1.4 - comment - not use
952
- */
953
- /*public function count_by_orders2( $course_id, $statuses = 'completed' ) {
954
- global $wpdb;
955
-
956
- settype( $statuses, 'array' );
957
- $statuses_with_prefix = array();
958
-
959
- foreach ( $statuses as $k => $v ) {
960
- if ( ! preg_match( '/^lp-/', $v ) ) {
961
- $statuses_with_prefix[ $k ] = 'lp-' . $v;
962
- }
963
- }
964
- $course_ids = $course_id;
965
- settype( $course_ids, 'array' );
966
- $fetch_ids = array();
967
- $all_statuses = learn_press_get_order_statuses( false, true );
968
-
969
- foreach ( $course_ids as $course_id ) {
970
-
971
- if ( LP_COURSE_CPT !== get_post_type( $course_id ) ) {
972
- continue;
973
- }
974
-
975
- if ( ! metadata_exists( 'post', $course_id, 'order-' . $all_statuses[0] ) ) {
976
- $fetch_ids[] = $course_id;
977
- }
978
- }
979
-
980
- if ( $fetch_ids ) {
981
- $this->update_course_orders( $fetch_ids );
982
- }
983
-
984
- $course_id = reset( $course_ids );
985
- $count = 0;
986
- foreach ( $statuses as $status ) {
987
- $orders = get_post_meta( $course_id, 'order-' . $status, true );
988
- if ( $orders ) {
989
- $count += sizeof( $orders );
990
- }
991
- }
992
-
993
- return $count;
994
- }*/
995
-
996
- /**
997
- * @param int|array $course_id
998
- *
999
- * @return int
1000
- * @deprecated
1001
- * @editor tungnx
1002
- * @modify 4.1.4 - comment - not use
1003
- */
1004
- /*public function count_enrolled_users_by_orders( $course_id ) {
1005
- _deprecated_function( __FUNCTION__, '4.1.4' );
1006
- $completed = get_post_meta( $course_id, 'order-completed', true );
1007
- $processing = get_post_meta( $course_id, 'order-processing', true );
1008
-
1009
- return absint( $completed ) + absint( $processing );
1010
-
1011
- $statuses = array( 'completed', 'processing' );
1012
- $count = $this->count_by_orders( $course_id, $statuses );
1013
-
1014
- return $count;
1015
- }*/
1016
-
1017
- /*public function update_course_orders( $courses ) {
1018
- LP_Repair_Database::instance()->sync_course_orders();
1019
- }*/
1020
  }
1021
  }
127
  * @return mixed|WP_Error
128
  * @since 3.0.0
129
  */
130
+ public function duplicate_bk( &$course_id, $args = array() ) {
131
 
132
  if ( ! $course_id ) {
133
  return new WP_Error( __( '<p>Op! ID not found</p>', 'learnpress' ) );
214
  }
215
  }
216
 
217
+ do_action( 'learn-press/after-duplicate', $course_id, $new_course_id, $args );
218
+
219
  return $new_course_id;
220
  }
221
  }
223
  return false;
224
  }
225
 
226
+ /**
227
+ * Duplicate course.
228
+ *
229
+ * @param int $course_id
230
+ * @param array $args
231
+ *
232
+ * @return int|WP_Error
233
+ * @since 3.0.0
234
+ * @version 1.0.2
235
+ */
236
+ public function duplicate( &$course_id, $args = array() ) {
237
+ $course_id_new = 0;
238
+
239
+ try {
240
+ if ( ! current_user_can( 'edit_posts' ) ) {
241
+ throw new Exception( 'Sorry! You don\'t have permission to duplicate this course' );
242
+ }
243
+
244
+ $course_origin = learn_press_get_course( $course_id );
245
+ if ( ! $course_origin ) {
246
+ throw new Exception( 'Course is invalid' );
247
+ }
248
+
249
+ $course_id_new = learn_press_duplicate_post( $course_id, $args );
250
+
251
+ if ( is_wp_error( $course_id_new ) ) {
252
+ return $course_id_new;
253
+ }
254
+
255
+ $this->duplicate_sections_and_items( $course_id_new, $course_origin );
256
+
257
+ // Call save course duplicate
258
+ //$course_post = get_post( $course_id_new );
259
+ LP_Course_Post_Type::instance()->save( $course_id_new );
260
+
261
+ do_action( 'learn-press/after-duplicate', $course_id, $course_id_new, $args );
262
+ } catch ( Throwable $e ) {
263
+ $course_id_new = new WP_Error( $e->getMessage() );
264
+ }
265
+
266
+ return $course_id_new;
267
+ }
268
+
269
+ /**
270
+ * Duplicate sections and items of course
271
+ * @param int $course_id_new
272
+ * @param LP_Course $course_origin
273
+ */
274
+ public function duplicate_sections_and_items( $course_id_new, $course_origin ) {
275
+ // curriculum course
276
+ $curriculum = $course_origin->get_curriculum_raw();
277
+
278
+ // quiz curd
279
+ $quiz_curd = new LP_Quiz_CURD();
280
+
281
+ if ( is_array( $curriculum ) ) {
282
+ // new course section curd
283
+ $new_course_section_curd = new LP_Section_CURD( $course_id_new );
284
+ foreach ( $curriculum as $section ) {
285
+ $data = array(
286
+ 'section_name' => $section['title'],
287
+ 'section_course_id' => $course_id_new,
288
+ 'section_order' => $section['order'],
289
+ 'section_description' => $section['description'],
290
+ );
291
+
292
+ // clone sections to new course
293
+ $new_section = $new_course_section_curd->create( $data );
294
+
295
+ // get section items of original course
296
+ $items = $section['items'];
297
+
298
+ $new_items = array();
299
+
300
+ // duplicate items
301
+ if ( ! empty( $items ) ) {
302
+ foreach ( $items as $key => $item ) {
303
+ // duplicate quiz
304
+ if ( $item['type'] == LP_QUIZ_CPT ) {
305
+ $new_item_id = $quiz_curd->duplicate(
306
+ $item['id'],
307
+ array( 'post_status' => 'publish' )
308
+ );
309
+ } else {
310
+ // clone lesson
311
+ $new_item_id = learn_press_duplicate_post(
312
+ $item['id'],
313
+ array( 'post_status' => 'publish' )
314
+ );
315
+ }
316
+
317
+ // get new items data to add to section
318
+ $new_items[ $key ] = array(
319
+ 'id' => $new_item_id,
320
+ 'type' => $item['type'],
321
+ );
322
+ }
323
+
324
+ // add new clone items to section
325
+ $new_course_section_curd->add_items_section( $new_section['section_id'], $new_items );
326
+ }
327
+ }
328
+ }
329
+ }
330
+
331
  /**
332
  * Load course data
333
  *
336
  * @return mixed
337
  */
338
  public function load( &$course ) {
339
+ // $this->read_course_curriculum( $course->get_id() );
340
 
341
  return $course;
342
  }
349
  * @param bool $publish_only
350
  *
351
  * @return array
352
+ * @depecated 4.1.6.9
353
  */
354
+ /*public function read_course_items( $course_id, $publish_only = true, $section_ids = array() ) {
 
 
 
 
 
 
 
355
  global $wpdb;
356
  $where = '';
357
 
399
  $results = $wpdb->get_results( $query );
400
 
401
  return $results;
402
+
403
+ //////////////////////////////////////////// Code new - tungnx
404
+
405
+ $items = [];
406
+
407
+ $course = learn_press_get_course( $course_id );
408
+ if ( ! $course ) {
409
+ return $items;
410
+ }
411
+
412
+ $sections_items = $course->get_full_sections_and_items_course();
413
+ foreach ( $sections_items as $section_items ) {
414
+ $section_id = $section_items->id;
415
+
416
+ foreach ( $section_items->items as $item ) {
417
+ $item->section_id = $section_id;
418
+ $items[] = $item;
419
+ }
420
+ }
421
+
422
+ return $items;
423
+ }*/
424
 
425
  /**
426
  * Get all courses that contains an item by item id.
453
  return $wpdb->get_col( $query );
454
  }
455
 
456
+ /**
457
+ * @depecated 4.1.6.9
458
+ */
459
+ /*public static function update_items_format( $item ) {
460
 
461
  if ( empty( $item['args']['course_id'] ) ) {
462
  return false;
511
  }
512
 
513
  return false;
514
+ }*/
515
 
516
  /**
517
  * Read curriculum of a course from db into cache.
520
  *
521
  * @return array|mixed
522
  */
523
+ /*public function read_course_curriculum( $course_id ) {
524
 
525
  if ( learn_press_get_post_type( $course_id ) != LP_COURSE_CPT ) {
526
  return false;
530
  return false;
531
  }
532
 
533
+ if ( $this->get_course_sections( $course_id, 'ids' ) ) {
534
  return $this->read_course_items( $course_id );
535
  }
536
 
537
  return false;
538
+ }*/
539
 
540
  /**
541
  * Get sections of course
547
  * @version 4.0.0
548
  *
549
  */
550
+ /*public function get_course_sections( $course_id, $return = '' ) {
551
  // if ( false === ( $sections = LP_Object_Cache::get( $course_id, 'learn-press/course-sections' ) ) ) {
552
  $sections = $this->read_course_sections( $course_id );
553
  // }
554
 
555
  // return $return === 'ids' ? LP_Object_Cache::get( $course_id, 'learn-press/course-sections-ids' ) : $sections;
556
  return $return === 'ids' ? LP_Course_Utils::get_cached_db_sections( $course_id, 'ids' ) : $sections;
557
+ }*/
558
 
559
  /**
560
  * Retrieve total sections of a course.
624
  *
625
  * @return mixed|array
626
  * @version 4.0.0
627
+ * @depecated 4.1.6.9
628
  */
629
+ /*public function read_course_sections( $course_id ) {
630
  global $wpdb;
631
 
632
  settype( $course_id, 'array' );
662
  }
663
 
664
  return $first_course_sections;
665
+ }*/
666
 
667
  /**
668
  * Remove lesson, quiz from course's curriculum.
917
 
918
  return $wpdb->get_col( $query );
919
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
920
  }
921
  }
inc/curds/class-lp-helper-curd.php CHANGED
@@ -84,11 +84,14 @@ class LP_Helper_CURD {
84
  }
85
 
86
  $format = array_fill( 0, sizeof( $post_ids ), '%d' );
87
- $query = $wpdb->prepare( "
 
88
  SELECT *
89
  FROM {$wpdb->posts}
90
- WHERE ID IN(" . join( ',', $format ) . ")
91
- ", $post_ids );
 
 
92
 
93
  if ( false === ( $post_types = LP_Object_Cache::get( 'post-types', 'learn-press' ) ) ) {
94
  $post_types = array();
84
  }
85
 
86
  $format = array_fill( 0, sizeof( $post_ids ), '%d' );
87
+ $query = $wpdb->prepare(
88
+ "
89
  SELECT *
90
  FROM {$wpdb->posts}
91
+ WHERE ID IN(" . join( ',', $format ) . ')
92
+ ',
93
+ $post_ids
94
+ );
95
 
96
  if ( false === ( $post_types = LP_Object_Cache::get( 'post-types', 'learn-press' ) ) ) {
97
  $post_types = array();
inc/curds/class-lp-lesson-curd.php CHANGED
@@ -81,9 +81,6 @@ if ( ! class_exists( 'LP_Lesson_CURD' ) ) {
81
  // course curd
82
  $curd = new LP_Course_CURD();
83
 
84
- // allow hook
85
- do_action( 'learn-press/before-delete-lesson', $lesson_id );
86
-
87
  // remove lesson from course items
88
  $curd->remove_item( $lesson_id );
89
  }
@@ -108,8 +105,9 @@ if ( ! class_exists( 'LP_Lesson_CURD' ) ) {
108
  return new WP_Error( __( '<p>Op! The lesson does not exist</p>', 'learnpress' ) );
109
  }
110
 
 
111
  // ensure that user can create lesson
112
- if ( ! current_user_can( 'edit_posts' ) ) {
113
  return new WP_Error( __( '<p>Sorry! You don\'t have permission to duplicate this lesson</p>', 'learnpress' ) );
114
  }
115
 
@@ -119,6 +117,7 @@ if ( ! class_exists( 'LP_Lesson_CURD' ) ) {
119
  if ( ! $new_lesson_id || is_wp_error( $new_lesson_id ) ) {
120
  return new WP_Error( __( '<p>Sorry! Failed to duplicate lesson!</p>', 'learnpress' ) );
121
  } else {
 
122
  return $new_lesson_id;
123
  }
124
  }
81
  // course curd
82
  $curd = new LP_Course_CURD();
83
 
 
 
 
84
  // remove lesson from course items
85
  $curd->remove_item( $lesson_id );
86
  }
105
  return new WP_Error( __( '<p>Op! The lesson does not exist</p>', 'learnpress' ) );
106
  }
107
 
108
+ $user_id = $args['meta_input']['_lp_user'] ?? get_current_user_id();
109
  // ensure that user can create lesson
110
+ if ( ! user_can( $user_id, 'edit_posts' ) ) {
111
  return new WP_Error( __( '<p>Sorry! You don\'t have permission to duplicate this lesson</p>', 'learnpress' ) );
112
  }
113
 
117
  if ( ! $new_lesson_id || is_wp_error( $new_lesson_id ) ) {
118
  return new WP_Error( __( '<p>Sorry! Failed to duplicate lesson!</p>', 'learnpress' ) );
119
  } else {
120
+ do_action( 'learn-press/after-duplicate', $lesson_id, $new_lesson_id, $args );
121
  return $new_lesson_id;
122
  }
123
  }
inc/curds/class-lp-question-curd.php CHANGED
@@ -183,6 +183,8 @@ if ( ! class_exists( 'LP_Question_CURD' ) ) {
183
  // duplicate answer
184
  $this->duplicate_answer( $question_id, $new_question_id );
185
 
 
 
186
  return $new_question_id;
187
  }
188
  }
183
  // duplicate answer
184
  $this->duplicate_answer( $question_id, $new_question_id );
185
 
186
+ do_action( 'learn-press/after-duplicate', $question_id, $new_question_id, $args );
187
+
188
  return $new_question_id;
189
  }
190
  }
inc/curds/class-lp-quiz-curd.php CHANGED
@@ -193,6 +193,8 @@ if ( ! function_exists( 'LP_Quiz_CURD' ) ) {
193
  }
194
  }
195
 
 
 
196
  return $new_quiz_id;
197
  }
198
 
193
  }
194
  }
195
 
196
+ do_action( 'learn-press/after-duplicate', $quiz_id, $new_quiz_id, $args );
197
+
198
  return $new_quiz_id;
199
  }
200
 
inc/curds/class-lp-section-curd.php CHANGED
@@ -33,28 +33,30 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
33
  * @since 3.0.0
34
  */
35
  public function create( &$args ) {
36
-
37
  global $wpdb;
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
- $section = $this->parse( $args );
40
- $section = stripslashes_deep( $section );
41
- $section['section_order'] = $this->get_last_number_order( $section['section_course_id'] ) + 1;
42
- $insert_data = array(
43
- 'section_course_id' => $this->course_id,
44
- 'section_name' => $section['section_name'],
45
- 'section_order' => $section['section_order'],
46
- 'section_description' => $section['section_description'],
47
- );
48
-
49
- $wpdb->insert(
50
- $wpdb->learnpress_sections,
51
- $insert_data,
52
- array( '%d', '%s', '%d', '%s' )
53
- );
54
- $section['section_id'] = $wpdb->insert_id;
55
-
56
- // allow hook
57
- do_action( 'learn-press/after-create-section', $this->course_id, $section );
58
 
59
  return $section;
60
  }
@@ -226,6 +228,7 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
226
  * @param int $section_id
227
  *
228
  * @return array
 
229
  */
230
  public function read_items( $section_id ) {
231
  global $wpdb;
@@ -248,37 +251,37 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
248
  return $wpdb->get_col( $query );
249
  }
250
 
251
- /**
252
- * @param $course_id
253
- *
254
- * @return int
255
- */
256
- private function get_last_number_order( $course_id ) {
257
- global $wpdb;
258
-
259
- $query = $wpdb->prepare( "SELECT MAX(s.section_order) FROM {$wpdb->prefix}learnpress_sections AS s WHERE s.section_course_id = %d", $course_id );
260
- $result = intval( $wpdb->get_var( $query ) );
261
-
262
- return ( $result > 0 ) ? $result : 1;
263
- }
264
-
265
  /**
266
  * Update sort sections.
267
  *
268
- * @param $sections string[]
269
  *
270
  * @return array
271
- * @version 4.0.0
272
  */
273
- public function sort_sections( $sections ) {
274
  global $wpdb;
275
 
276
- $current_sections = LP_Course_Utils::get_cached_db_sections( $this->course_id );
277
- $new_sections = array();
 
 
278
 
279
  $orders = array();
280
 
281
- foreach ( $sections as $index => $section_id ) {
 
 
 
 
 
 
 
 
 
 
 
 
282
  $order = $index + 1;
283
 
284
  $orders[ $section_id ] = $order;
@@ -296,9 +299,9 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
296
  }
297
 
298
  $this->get_section_items( $section_id );
299
- }
300
 
301
- LP_Course_Utils::set_cache_db_sections( $this->course_id, $new_sections );
302
 
303
  return $orders;
304
  }
@@ -328,7 +331,7 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
328
  }
329
  }
330
 
331
- LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $return, 'learn-press/course-section-items' );
332
 
333
  return $return;
334
  }
@@ -455,7 +458,7 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
455
  // $order ++;
456
  }
457
 
458
- LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $all_items, 'learn-press/course-section-items' );
459
 
460
  return $result;
461
  }
@@ -502,9 +505,11 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
502
  *
503
  * @return bool
504
  * @version 4.0.0
 
505
  */
506
  public function update_final_item() {
507
- $sections = LP_Course_Utils::get_cached_db_sections( $this->course_id );
 
508
 
509
  if ( ! $sections ) {
510
  return false;
@@ -542,7 +547,7 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
542
  }
543
  }
544
 
545
- return true;
546
 
547
  }
548
 
@@ -630,8 +635,6 @@ class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
630
  }
631
  }
632
 
633
- LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $items, 'learn-press/course-section-items' );
634
-
635
  return $items;
636
  }
637
 
33
  * @since 3.0.0
34
  */
35
  public function create( &$args ) {
 
36
  global $wpdb;
37
+ $section = [];
38
+
39
+ try {
40
+ $section = $this->parse( $args );
41
+ $section = stripslashes_deep( $section );
42
+ $last_section_order_number = LP_Section_DB::getInstance()->get_last_number_order( $section['section_course_id'] );
43
+ $section['section_order'] = $last_section_order_number + 1;
44
+ $insert_data = array(
45
+ 'section_course_id' => $this->course_id,
46
+ 'section_name' => $section['section_name'],
47
+ 'section_order' => $section['section_order'],
48
+ 'section_description' => $section['section_description'],
49
+ );
50
 
51
+ $wpdb->insert(
52
+ $wpdb->learnpress_sections,
53
+ $insert_data,
54
+ array( '%d', '%s', '%d', '%s' )
55
+ );
56
+ $section['section_id'] = $wpdb->insert_id;
57
+ } catch ( Throwable $e ) {
58
+ error_log( $e->getMessage() );
59
+ }
 
 
 
 
 
 
 
 
 
 
60
 
61
  return $section;
62
  }
228
  * @param int $section_id
229
  *
230
  * @return array
231
+ * @depecated 4.1.6.9 Remove when release Addon Frontend Editor 4.0.1
232
  */
233
  public function read_items( $section_id ) {
234
  global $wpdb;
251
  return $wpdb->get_col( $query );
252
  }
253
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  /**
255
  * Update sort sections.
256
  *
257
+ * @param string[] $sections_new_order
258
  *
259
  * @return array
260
+ * @version 4.0.1
261
  */
262
+ public function update_sections_order( $sections_new_order ) {
263
  global $wpdb;
264
 
265
+ //$current_sections = LP_Course_Utils::get_cached_db_sections( $this->course_id );
266
+ //$new_sections = array();
267
+ //$course = learn_press_get_course( $this->course_id );
268
+ //$sections_items = $course->get_full_sections_and_items_course();
269
 
270
  $orders = array();
271
 
272
+ foreach ( $sections_new_order as $order_new => $section_id ) {
273
+ $order_new = $order_new + 1;
274
+
275
+ $wpdb->update(
276
+ $wpdb->learnpress_sections,
277
+ array( 'section_order' => $order_new ),
278
+ array( 'section_id' => $section_id )
279
+ );
280
+
281
+ // $this->get_section_items( $section_id );
282
+ }
283
+
284
+ /*foreach ( $sections as $index => $section_id ) {
285
  $order = $index + 1;
286
 
287
  $orders[ $section_id ] = $order;
299
  }
300
 
301
  $this->get_section_items( $section_id );
302
+ }*/
303
 
304
+ //LP_Course_Utils::set_cache_db_sections( $this->course_id, $new_sections );
305
 
306
  return $orders;
307
  }
331
  }
332
  }
333
 
334
+ // LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $return, 'learn-press/course-section-items' );
335
 
336
  return $return;
337
  }
458
  // $order ++;
459
  }
460
 
461
+ // LP_Object_Cache::set( 'course-' . $this->course_id . '-' . $section_id, $all_items, 'learn-press/course-section-items' );
462
 
463
  return $result;
464
  }
505
  *
506
  * @return bool
507
  * @version 4.0.0
508
+ * @depecated 4.1.6.9
509
  */
510
  public function update_final_item() {
511
+ _deprecated_function( __FUNCTION__, '4.1.6.9' );
512
+ /*$sections = LP_Course_Utils::get_cached_db_sections( $this->course_id );
513
 
514
  if ( ! $sections ) {
515
  return false;
547
  }
548
  }
549
 
550
+ return true;*/
551
 
552
  }
553
 
635
  }
636
  }
637
 
 
 
638
  return $items;
639
  }
640
 
inc/curds/class-lp-user-curd.php CHANGED
@@ -710,10 +710,6 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
710
  return $last_user_course;
711
  }
712
 
713
- public function get_course_access_level( $user_id, $course_id ) {
714
-
715
- }
716
-
717
  /**
718
  * Load user items by item_id of course item
719
  *
@@ -950,157 +946,158 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
950
  * @param int $course_id
951
  *
952
  * @return mixed
 
953
  */
954
- public function update_user_item( $user_id, $item_id, $item_data = array(), $course_id = 0 ) {
955
- global $wpdb;
956
-
957
- $user = learn_press_get_user( $user_id );
958
- if ( ! $user || ( $user->get_id() != $user_id ) ) {
959
- return false;
960
- }
961
-
962
- if ( array_key_exists( 'user_item_id', $item_data ) && empty( $item_data['user_item_id'] ) ) {
963
- $item = false;
964
- } else {
965
- if ( func_num_args() == 4 ) {
966
- // $item = $this->get_user_item( $user_id, $item_id, $course_id );
967
- $item = $this->read_course( $user_id, $course_id );
968
- } else {
969
- $item = $this->get_user_item( $user_id, $item_id );
970
- }
971
- }
972
-
973
- // Table fields
974
- $table_fields = array(
975
- 'user_id' => '%d',
976
- 'item_id' => '%d',
977
- 'ref_id' => '%d',
978
- 'start_time' => '%s',
979
- 'end_time' => '%s',
980
- 'item_type' => '%s',
981
- 'status' => '%s',
982
- 'ref_type' => '%s',
983
- 'parent_id' => '%d',
984
- );
985
-
986
- // Data and format
987
- $data = array();
988
- $data_format = array();
989
-
990
- // Update it later...
991
- $new_status = false;
992
- if ( array_key_exists( 'status', $item_data ) && $item_data['status'] != $item['status'] ) {
993
- $new_status = $item_data['status'];
994
- unset( $item_data['status'] );
995
- }
996
-
997
- // Build data and data format
998
- foreach ( $item_data as $field => $value ) {
999
- if ( ! empty( $table_fields[ $field ] ) ) {
1000
- $data[ $field ] = $value;
1001
- $data_format[ $field ] = $table_fields[ $field ];
1002
- }
1003
- }
1004
-
1005
- $data['user_id'] = $user_id;
1006
- $data['item_id'] = $item_id;
1007
-
1008
- if ( $course_id ) {
1009
- $data['ref_id'] = $course_id;
1010
- $data['ref_type'] = LP_COURSE_CPT;
1011
- } else {
1012
- $data['item_type'] = LP_COURSE_CPT;
1013
- }
1014
-
1015
- foreach ( $data as $k => $v ) {
1016
- $data_format[ $k ] = $table_fields[ $k ];
1017
- }
1018
-
1019
- $data_format = array_values( $data_format );
1020
-
1021
- if ( ! $item || empty( $item['user_item_id'] ) ) {
1022
- if ( $data['ref_type'] === LP_COURSE_CPT && empty( $data['parent_id'] ) ) {
1023
- return false;
1024
- }
1025
-
1026
- $wpdb->insert(
1027
- $wpdb->learnpress_user_items,
1028
- $data,
1029
- $data_format
1030
- );
1031
- $user_item_id = $wpdb->insert_id;
1032
- $item = $this->get_user_item_by_id( $user_item_id );
1033
- } else {
1034
- $user_item_id = $item['user_item_id'];
1035
- $wpdb->update(
1036
- $wpdb->learnpress_user_items,
1037
- $data,
1038
- array( 'user_item_id' => $user_item_id ),
1039
- $data_format,
1040
- array( '%d' )
1041
- );
1042
-
1043
- $item = array_merge( $item, $data );
1044
- }
1045
-
1046
- $is_course = ( ! $course_id ) && ( learn_press_get_post_type( $item['item_id'] ) === LP_COURSE_CPT );
1047
-
1048
- if ( $user_item_id ) {
1049
-
1050
- // Track last status if it is updated new status.
1051
- if ( $new_status !== false ) {
1052
- if ( $this->update_user_item_status( $user_item_id, $new_status ) ) {
1053
- $item['status'] = $new_status;
1054
- }
1055
- }
1056
-
1057
- if ( $is_course ) {
1058
- $course_id = $item['item_id'];
1059
- // Update cache to effect the change right way!
1060
- LP_Object_Cache::set( 'course-' . $user_id . '-' . $course_id, $item, 'learn-press/user-dcourses' );
1061
- } else {
1062
-
1063
- $user = learn_press_get_user( $user_id );
1064
- $user_course = $user->get_course_data( $course_id );
1065
-
1066
- $user_course->set_item( $item );
1067
-
1068
- // Update cache
1069
- $existed = false !== ( $items = LP_Object_Cache::get(
1070
- 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id,
1071
- 'learn-press/user-course-items'
1072
- ) );
1073
-
1074
- if ( false === $items || ! empty( $items[ $user_item_id ] ) ) {
1075
- if ( is_array( $items ) ) {
1076
- $items[ $user_item_id ] = $item;
1077
- } else {
1078
- $items = array( $user_item_id => $item );
1079
- }
1080
- } else {
1081
- $items = array( $user_item_id => $item ) + $items;
1082
- }
1083
-
1084
- LP_Object_Cache::set(
1085
- 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id,
1086
- $items,
1087
- 'learn-press/user-course-items'
1088
- );
1089
-
1090
- }
1091
-
1092
- wp_cache_delete( 'course-' . $user_id . '-' . $course_id, 'learn-press/user-item-object-courses' );
1093
-
1094
- /*
1095
- if ( $existed ) {
1096
- wp_cache_replace( 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id, $items, 'learn-press/user-course-items' );
1097
- } else {
1098
- wp_cache_add( 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id, $items, 'learn-press/user-course-items' );
1099
- }*/
1100
- }
1101
-
1102
- return $user_item_id;
1103
- }
1104
 
1105
  /**
1106
  * Get user item from user_items tables.
@@ -1160,22 +1157,29 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
1160
  * @param int $user_item_id
1161
  *
1162
  * @return bool|LP_User_Item_Course
 
1163
  */
1164
- public function get_user_item_course( $user_item_id ) {
1165
  if ( $item = $this->get_user_item_by_id( $user_item_id, LP_COURSE_CPT ) ) {
1166
  return new LP_User_Item_Course( $item );
1167
  }
1168
 
1169
  return false;
1170
- }
1171
 
1172
- public function get_user_item_meta( $user_item_id, $meta_key, $single = true ) {
 
 
 
1173
  return learn_press_get_user_item_meta( $user_item_id, $meta_key, $single );
1174
- }
1175
 
1176
- public function update_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev = '' ) {
 
 
 
1177
  return learn_press_update_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev );
1178
- }
1179
 
1180
  /**
1181
  * Update user item data by id.
@@ -1929,7 +1933,7 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
1929
  $select = 'SELECT * ';
1930
  $from = "FROM {$wpdb->learnpress_user_items} ui";
1931
  $join = '';
1932
- $where = 'WHERE 1=1 ';
1933
  $where .= $wpdb->prepare( 'AND user_id = %d ', $user_id );
1934
  $where .= $wpdb->prepare( 'AND item_type = %s ', LP_QUIZ_CPT );
1935
  $where .= $wpdb->prepare( 'AND status IN (%s, %s) ', LP_ITEM_COMPLETED, LP_ITEM_STARTED );
@@ -2002,7 +2006,8 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
2002
 
2003
  list( $select, $from, $join, $where, $having, $orderby ) = array_values( $query_parts );
2004
 
2005
- $sql = $wpdb->prepare("
 
2006
  SELECT * FROM (
2007
  SELECT *
2008
  FROM
@@ -2017,7 +2022,10 @@ class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {
2017
  ) AS G_User_Item
2018
  ORDER BY G_User_Item.user_item_id DESC
2019
  LIMIT %d, %d
2020
- ", $offset, $limit);
 
 
 
2021
 
2022
  $sql = "SELECT DISTINCT item_id, MAX(user_item_id) as user_item_id , user_id, item_type, start_time, end_time, status, graduation, parent_id
2023
  FROM $wpdb->learnpress_user_items
@@ -2027,7 +2035,6 @@ WHERE user_id = $user_id
2027
  GROUP BY item_id
2028
  ORDER BY MAX(user_item_id) DESC";
2029
 
2030
-
2031
  $items = $wpdb->get_results( $sql, ARRAY_A );
2032
 
2033
  if ( $items ) {
710
  return $last_user_course;
711
  }
712
 
 
 
 
 
713
  /**
714
  * Load user items by item_id of course item
715
  *
946
  * @param int $course_id
947
  *
948
  * @return mixed
949
+ * @depecated 4.1.6.9
950
  */
951
+ // public function update_user_item( $user_id, $item_id, $item_data = array(), $course_id = 0 ) {
952
+ // global $wpdb;
953
+ //
954
+ // $user = learn_press_get_user( $user_id );
955
+ // if ( ! $user || ( $user->get_id() != $user_id ) ) {
956
+ // return false;
957
+ // }
958
+ //
959
+ // if ( array_key_exists( 'user_item_id', $item_data ) && empty( $item_data['user_item_id'] ) ) {
960
+ // $item = false;
961
+ // } else {
962
+ // if ( func_num_args() == 4 ) {
963
+ // // $item = $this->get_user_item( $user_id, $item_id, $course_id );
964
+ // $item = $this->read_course( $user_id, $course_id );
965
+ // } else {
966
+ // $item = $this->get_user_item( $user_id, $item_id );
967
+ // }
968
+ // }
969
+ //
970
+ // // Table fields
971
+ // $table_fields = array(
972
+ // 'user_id' => '%d',
973
+ // 'item_id' => '%d',
974
+ // 'ref_id' => '%d',
975
+ // 'start_time' => '%s',
976
+ // 'end_time' => '%s',
977
+ // 'item_type' => '%s',
978
+ // 'status' => '%s',
979
+ // 'ref_type' => '%s',
980
+ // 'parent_id' => '%d',
981
+ // );
982
+ //
983
+ // // Data and format
984
+ // $data = array();
985
+ // $data_format = array();
986
+ //
987
+ // // Update it later...
988
+ // $new_status = false;
989
+ // if ( array_key_exists( 'status', $item_data ) && $item_data['status'] != $item['status'] ) {
990
+ // $new_status = $item_data['status'];
991
+ // unset( $item_data['status'] );
992
+ // }
993
+ //
994
+ // // Build data and data format
995
+ // foreach ( $item_data as $field => $value ) {
996
+ // if ( ! empty( $table_fields[ $field ] ) ) {
997
+ // $data[ $field ] = $value;
998
+ // $data_format[ $field ] = $table_fields[ $field ];
999
+ // }
1000
+ // }
1001
+ //
1002
+ // $data['user_id'] = $user_id;
1003
+ // $data['item_id'] = $item_id;
1004
+ //
1005
+ // if ( $course_id ) {
1006
+ // $data['ref_id'] = $course_id;
1007
+ // $data['ref_type'] = LP_COURSE_CPT;
1008
+ // } else {
1009
+ // $data['item_type'] = LP_COURSE_CPT;
1010
+ // }
1011
+ //
1012
+ // foreach ( $data as $k => $v ) {
1013
+ // $data_format[ $k ] = $table_fields[ $k ];
1014
+ // }
1015
+ //
1016
+ // $data_format = array_values( $data_format );
1017
+ //
1018
+ // if ( ! $item || empty( $item['user_item_id'] ) ) {
1019
+ // if ( $data['ref_type'] === LP_COURSE_CPT && empty( $data['parent_id'] ) ) {
1020
+ // return false;
1021
+ // }
1022
+ //
1023
+ // $wpdb->insert(
1024
+ // $wpdb->learnpress_user_items,
1025
+ // $data,
1026
+ // $data_format
1027
+ // );
1028
+ // $user_item_id = $wpdb->insert_id;
1029
+ // $item = $this->get_user_item_by_id( $user_item_id );
1030
+ // } else {
1031
+ // $user_item_id = $item['user_item_id'];
1032
+ // $wpdb->update(
1033
+ // $wpdb->learnpress_user_items,
1034
+ // $data,
1035
+ // array( 'user_item_id' => $user_item_id ),
1036
+ // $data_format,
1037
+ // array( '%d' )
1038
+ // );
1039
+ //
1040
+ // $item = array_merge( $item, $data );
1041
+ // }
1042
+ //
1043
+ // $is_course = ( ! $course_id ) && ( learn_press_get_post_type( $item['item_id'] ) === LP_COURSE_CPT );
1044
+ //
1045
+ // if ( $user_item_id ) {
1046
+ //
1047
+ // // Track last status if it is updated new status.
1048
+ // if ( $new_status !== false ) {
1049
+ // if ( $this->update_user_item_status( $user_item_id, $new_status ) ) {
1050
+ // $item['status'] = $new_status;
1051
+ // }
1052
+ // }
1053
+ //
1054
+ // if ( $is_course ) {
1055
+ // $course_id = $item['item_id'];
1056
+ // // Update cache to effect the change right way!
1057
+ // LP_Object_Cache::set( 'course-' . $user_id . '-' . $course_id, $item, 'learn-press/user-dcourses' );
1058
+ // } else {
1059
+ //
1060
+ // $user = learn_press_get_user( $user_id );
1061
+ // $user_course = $user->get_course_data( $course_id );
1062
+ //
1063
+ // $user_course->set_item( $item );
1064
+ //
1065
+ // // Update cache
1066
+ // $existed = false !== ( $items = LP_Object_Cache::get(
1067
+ // 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id,
1068
+ // 'learn-press/user-course-items'
1069
+ // ) );
1070
+ //
1071
+ // if ( false === $items || ! empty( $items[ $user_item_id ] ) ) {
1072
+ // if ( is_array( $items ) ) {
1073
+ // $items[ $user_item_id ] = $item;
1074
+ // } else {
1075
+ // $items = array( $user_item_id => $item );
1076
+ // }
1077
+ // } else {
1078
+ // $items = array( $user_item_id => $item ) + $items;
1079
+ // }
1080
+ //
1081
+ // LP_Object_Cache::set(
1082
+ // 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id,
1083
+ // $items,
1084
+ // 'learn-press/user-course-items'
1085
+ // );
1086
+ //
1087
+ // }
1088
+ //
1089
+ // wp_cache_delete( 'course-' . $user_id . '-' . $course_id, 'learn-press/user-item-object-courses' );
1090
+ //
1091
+ // /*
1092
+ // if ( $existed ) {
1093
+ // wp_cache_replace( 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id, $items, 'learn-press/user-course-items' );
1094
+ // } else {
1095
+ // wp_cache_add( 'course-item-' . $user_id . '-' . $course_id . '-' . $item_id, $items, 'learn-press/user-course-items' );
1096
+ // }*/
1097
+ // }
1098
+ //
1099
+ // return $user_item_id;
1100
+ // }
1101
 
1102
  /**
1103
  * Get user item from user_items tables.
1157
  * @param int $user_item_id
1158
  *
1159
  * @return bool|LP_User_Item_Course
1160
+ * @depecated 4.1.6.9
1161
  */
1162
+ /*public function get_user_item_course( $user_item_id ) {
1163
  if ( $item = $this->get_user_item_by_id( $user_item_id, LP_COURSE_CPT ) ) {
1164
  return new LP_User_Item_Course( $item );
1165
  }
1166
 
1167
  return false;
1168
+ }*/
1169
 
1170
+ /**
1171
+ * @depecated 4.1.6.9
1172
+ */
1173
+ /*public function get_user_item_meta( $user_item_id, $meta_key, $single = true ) {
1174
  return learn_press_get_user_item_meta( $user_item_id, $meta_key, $single );
1175
+ }*/
1176
 
1177
+ /**
1178
+ * @depecated 4.1.6.9
1179
+ */
1180
+ /*public function update_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev = '' ) {
1181
  return learn_press_update_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev );
1182
+ }*/
1183
 
1184
  /**
1185
  * Update user item data by id.
1933
  $select = 'SELECT * ';
1934
  $from = "FROM {$wpdb->learnpress_user_items} ui";
1935
  $join = '';
1936
+ $where = 'WHERE 1=1 ';
1937
  $where .= $wpdb->prepare( 'AND user_id = %d ', $user_id );
1938
  $where .= $wpdb->prepare( 'AND item_type = %s ', LP_QUIZ_CPT );
1939
  $where .= $wpdb->prepare( 'AND status IN (%s, %s) ', LP_ITEM_COMPLETED, LP_ITEM_STARTED );
2006
 
2007
  list( $select, $from, $join, $where, $having, $orderby ) = array_values( $query_parts );
2008
 
2009
+ $sql = $wpdb->prepare(
2010
+ "
2011
  SELECT * FROM (
2012
  SELECT *
2013
  FROM
2022
  ) AS G_User_Item
2023
  ORDER BY G_User_Item.user_item_id DESC
2024
  LIMIT %d, %d
2025
+ ",
2026
+ $offset,
2027
+ $limit
2028
+ );
2029
 
2030
  $sql = "SELECT DISTINCT item_id, MAX(user_item_id) as user_item_id , user_id, item_type, start_time, end_time, status, graduation, parent_id
2031
  FROM $wpdb->learnpress_user_items
2035
  GROUP BY item_id
2036
  ORDER BY MAX(user_item_id) DESC";
2037
 
 
2038
  $items = $wpdb->get_results( $sql, ARRAY_A );
2039
 
2040
  if ( $items ) {
inc/curds/class-lp-user-item-curd.php CHANGED
@@ -630,7 +630,7 @@ class LP_User_Item_CURD implements LP_Interface_CURD {
630
  foreach ( $get_item_ids as $item_id ) {
631
  $item = $course->get_item( $item_id );
632
 
633
- if ( ! $item ) {
634
  continue;
635
  }
636
 
630
  foreach ( $get_item_ids as $item_id ) {
631
  $item = $course->get_item( $item_id );
632
 
633
+ if ( ! $item instanceof LP_Course_Item ) {
634
  continue;
635
  }
636
 
inc/custom-post-types/abstract.php CHANGED
@@ -76,6 +76,8 @@ abstract class LP_Abstract_Post_Type {
76
  add_action( 'save_post', array( $this, '_do_save_post' ), 10, 2 );
77
  add_action( 'before_delete_post', array( $this, '_before_delete_post' ) );
78
  add_action( 'deleted_post', array( $this, '_deleted_post' ) );
 
 
79
 
80
  add_filter( 'manage_edit-' . $this->_post_type . '_sortable_columns', array( $this, 'sortable_columns' ) );
81
  add_filter( 'manage_' . $this->_post_type . '_posts_columns', array( $this, 'columns_head' ) );
@@ -109,7 +111,7 @@ abstract class LP_Abstract_Post_Type {
109
  // add_action( 'pre_get_posts', array( $this, 'update_default_meta' ) );
110
  add_action( 'admin_footer', array( $this, 'admin_footer_scripts' ) );
111
 
112
- add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
113
 
114
  $args = wp_parse_args(
115
  $args,
@@ -175,12 +177,13 @@ abstract class LP_Abstract_Post_Type {
175
  * @param WP_Post $post
176
  * @editor tungnx
177
  * @since modify 4.0.9
 
178
  */
179
  final function _do_save_post( int $post_id = 0, WP_Post $post = null ) {
180
  // Maybe remove
181
  $this->maybe_remove_assigned( $post );
182
 
183
- if ( ! $this->_check_post() ) {
184
  return;
185
  }
186
 
@@ -207,7 +210,7 @@ abstract class LP_Abstract_Post_Type {
207
  * @since modify 4.0.9
208
  */
209
  final function _before_delete_post( int $post_id ) {
210
- if ( ! $this->_check_post() ) {
211
  return;
212
  }
213
 
@@ -231,7 +234,7 @@ abstract class LP_Abstract_Post_Type {
231
  * @param int $post_id
232
  */
233
  final function _deleted_post( int $post_id ) {
234
- if ( ! $this->_check_post() ) {
235
  return;
236
  }
237
 
@@ -248,6 +251,97 @@ abstract class LP_Abstract_Post_Type {
248
  // Implement from child
249
  }
250
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  public function column_instructor( $post_id = 0 ) {
252
  global $post;
253
 
@@ -544,6 +638,41 @@ abstract class LP_Abstract_Post_Type {
544
  return true;
545
  }
546
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
547
  /**
548
  * Check is page list posts valid
549
  *
@@ -774,6 +903,9 @@ abstract class LP_Abstract_Post_Type {
774
  return $actions;
775
  }
776
 
 
 
 
777
  public function updated_messages( $messages ) {
778
  $post = get_post();
779
  $post_type = get_post_type( $post );
@@ -807,7 +939,8 @@ abstract class LP_Abstract_Post_Type {
807
  switch ( $this->_post_type ) {
808
  case LP_LESSON_CPT:
809
  case LP_QUIZ_CPT:
810
- $view_link = learn_press_get_item_course_id( $post->ID, $post->post_type ) ? $view_link : '';
 
811
  break;
812
  case LP_ORDER_CPT:
813
  $order = learn_press_get_order( $post->ID );
76
  add_action( 'save_post', array( $this, '_do_save_post' ), 10, 2 );
77
  add_action( 'before_delete_post', array( $this, '_before_delete_post' ) );
78
  add_action( 'deleted_post', array( $this, '_deleted_post' ) );
79
+ add_action( 'wp_trash_post', array( $this, '_before_trash_post' ) );
80
+ add_action( 'trashed_post', array( $this, '_trashed_post' ) );
81
 
82
  add_filter( 'manage_edit-' . $this->_post_type . '_sortable_columns', array( $this, 'sortable_columns' ) );
83
  add_filter( 'manage_' . $this->_post_type . '_posts_columns', array( $this, 'columns_head' ) );
111
  // add_action( 'pre_get_posts', array( $this, 'update_default_meta' ) );
112
  add_action( 'admin_footer', array( $this, 'admin_footer_scripts' ) );
113
 
114
+ //add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
115
 
116
  $args = wp_parse_args(
117
  $args,
177
  * @param WP_Post $post
178
  * @editor tungnx
179
  * @since modify 4.0.9
180
+ * @version 4.0.1
181
  */
182
  final function _do_save_post( int $post_id = 0, WP_Post $post = null ) {
183
  // Maybe remove
184
  $this->maybe_remove_assigned( $post );
185
 
186
+ if ( ! $this->check_post( $post_id ) ) {
187
  return;
188
  }
189
 
210
  * @since modify 4.0.9
211
  */
212
  final function _before_delete_post( int $post_id ) {
213
+ if ( ! $this->check_post( $post_id ) ) {
214
  return;
215
  }
216
 
234
  * @param int $post_id
235
  */
236
  final function _deleted_post( int $post_id ) {
237
+ if ( ! $this->check_post() ) {
238
  return;
239
  }
240
 
251
  // Implement from child
252
  }
253
 
254
+ protected $course_of_item_trashed = 0;
255
+ /**
256
+ * Hook before delete post
257
+ *
258
+ * @param int $post_id
259
+ *
260
+ * @author tungnx
261
+ * @since 4.1.6.9
262
+ * @version 1.0.0
263
+ */
264
+ final function _before_trash_post( int $post_id ) {
265
+ if ( ! $this->check_post() ) {
266
+ return;
267
+ }
268
+
269
+ $this->before_trash_post( $post_id );
270
+ }
271
+
272
+ /**
273
+ * Before trash post
274
+ *
275
+ * @param int $post_id
276
+ *
277
+ * @return void
278
+ * @author tungnx
279
+ * @since 4.1.6.9
280
+ * @version 1.0.0.0
281
+ */
282
+ public function before_trash_post( int $post_id ) {
283
+ // Implement from child
284
+ // Check is item type of course
285
+ $course_item_types = learn_press_get_course_item_types();
286
+ if ( ! in_array( get_post_type( $post_id ), $course_item_types ) ) {
287
+ return;
288
+ }
289
+
290
+ try {
291
+ // Set course id of item when item assign on course is trashed
292
+ $course_of_item = LP_Course_DB::getInstance()->get_course_by_item_id( $post_id );
293
+ if ( $course_of_item ) {
294
+ $this->course_of_item_trashed = $course_of_item;
295
+ }
296
+ } catch ( Throwable $e ) {
297
+ error_log( $e->getMessage() );
298
+ }
299
+ }
300
+
301
+ /**
302
+ * Hook Trashed post
303
+ *
304
+ * @param int $post_id
305
+ *
306
+ * @return void
307
+ * @author tungnx
308
+ * @since 4.1.6.9
309
+ * @version 1.0.0
310
+ */
311
+ final function _trashed_post( int $post_id ) {
312
+ if ( ! $this->check_post() ) {
313
+ return;
314
+ }
315
+
316
+ $this->trashed_post( $post_id );
317
+ }
318
+
319
+ /**
320
+ * Method handle Trashed post
321
+ *
322
+ * @param int $post_id
323
+ * @author tungnx
324
+ * @since 4.1.6.9
325
+ * @version 1.0.0
326
+ * @return void
327
+ */
328
+ public function trashed_post( int $post_id ) {
329
+ // Implement from child
330
+ // Check is item type of course
331
+ $course_item_types = learn_press_get_course_item_types();
332
+ if ( ! in_array( get_post_type( $post_id ), $course_item_types ) ) {
333
+ return;
334
+ }
335
+
336
+ if ( $this->course_of_item_trashed ) {
337
+ // Save course when item assign on course is trashed
338
+ $course_id = $this->course_of_item_trashed;
339
+ $course_post = get_post( $course_id );
340
+ LP_Course_Post_Type::instance()->save( $course_id, $course_post );
341
+ $this->course_of_item_trashed = 0;
342
+ }
343
+ }
344
+
345
  public function column_instructor( $post_id = 0 ) {
346
  global $post;
347
 
638
  return true;
639
  }
640
 
641
+ /**
642
+ * Check post is valid to handle
643
+ *
644
+ * @param int $post_id
645
+ *
646
+ * @return bool
647
+ * @since 4.1.6.9
648
+ * @version 1.0.0
649
+ */
650
+ public function check_post( int $post_id = 0 ):bool {
651
+ $can_save = true;
652
+
653
+ try {
654
+ $post = get_post( $post_id );
655
+
656
+ if ( ! $post ) {
657
+ throw new Exception( 'Post is invalid' );
658
+ }
659
+
660
+ if ( $this->_post_type !== $post->post_type ) {
661
+ throw new Exception( 'Post type is invalid' );
662
+ }
663
+
664
+ if ( ! current_user_can( ADMIN_ROLE ) ) {
665
+ if ( get_current_user_id() !== $post->post_author ) {
666
+ $can_save = apply_filters( 'lp/custom-post-type/can-save', false, $post );
667
+ }
668
+ }
669
+ } catch ( Throwable $e ) {
670
+
671
+ }
672
+
673
+ return $can_save;
674
+ }
675
+
676
  /**
677
  * Check is page list posts valid
678
  *
903
  return $actions;
904
  }
905
 
906
+ /**
907
+ * @depecated 4.1.6.9
908
+ */
909
  public function updated_messages( $messages ) {
910
  $post = get_post();
911
  $post_type = get_post_type( $post );
939
  switch ( $this->_post_type ) {
940
  case LP_LESSON_CPT:
941
  case LP_QUIZ_CPT:
942
+ //$view_link = learn_press_get_item_course_id( $post->ID, $post->post_type ) ? $view_link : '';
943
+ $view_link = LP_Course_DB::getInstance()->get_course_by_item_id( $post->ID ) ? $view_link : '';
944
  break;
945
  case LP_ORDER_CPT:
946
  $order = learn_press_get_order( $post->ID );
inc/custom-post-types/course.php CHANGED
@@ -575,7 +575,7 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
575
 
576
  switch ( $column ) {
577
  case 'thumbnail':
578
- echo $course->get_image( 'thumbnail' );
579
  break;
580
  case 'instructor':
581
  $this->column_instructor( $post->ID );
@@ -588,8 +588,6 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
588
  $html_items = array();
589
  $post_types = get_post_types( null, 'objects' );
590
 
591
- // $stats_objects = $curd->count_items( $post_id, 'edit' );
592
-
593
  foreach ( learn_press_get_course_item_types() as $item_type ) {
594
  $count_item = $course->count_items( $item_type );
595
 
@@ -603,28 +601,13 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
603
  $html_items[] = sprintf( _n( '<strong>%d</strong> ' . $singular_name, '<strong>%d</strong> ' . $plural_name, $count_item, 'learnpress' ), $count_item );
604
  }
605
 
606
- /*
607
- if ( $stats_objects ) {
608
- foreach ( $stats_objects as $type => $count ) {
609
- if ( ! $count || ! isset( $post_types[ $type ] ) ) {
610
- continue;
611
- }
612
-
613
- $post_type_object = $post_types[ $type ];
614
- $singular_name = strtolower( $post_type_object->labels->singular_name );
615
- $plural_name = strtolower( $post_type_object->label );
616
- $html_items[] = sprintf( _n( '<strong>%d</strong> ' . $singular_name, '<strong>%d</strong> ' . $plural_name, $count, 'learnpress' ), $count );
617
- }
618
- }*/
619
-
620
  $html_items = apply_filters( 'learn-press/course-count-items', $html_items );
621
 
622
  if ( $html_items ) {
623
  $output .= ' (' . implode( ', ', $html_items ) . ')';
624
  }
625
 
626
- echo $output;
627
-
628
  } else {
629
  esc_html_e( 'No content', 'learnpress' );
630
  }
@@ -632,13 +615,12 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
632
  break;
633
 
634
  case 'price':
635
- echo $course->get_course_price_html();
636
  break;
637
  case 'students':
638
  $count = $course->get_total_user_enrolled_or_purchased();
639
-
640
  echo '<span class="lp-label-counter' . ( ! $count ? ' disabled' : '' ) . '">' . ( $count ? $count : 0 ) . '</span>';
641
-
642
  }
643
  }
644
 
@@ -664,7 +646,7 @@ if ( ! class_exists( 'LP_Course_Post_Type' ) ) {
664
  * @editor tungnx
665
  * @see LP_Background_Single_Course::handle()
666
  */
667
- public function save( int $post_id, WP_Post $post ) {
668
  // Save in background.
669
  $bg = LP_Background_Single_Course::instance();
670
 
575
 
576
  switch ( $column ) {
577
  case 'thumbnail':
578
+ echo wp_kses_post( $course->get_image( 'thumbnail' ) );
579
  break;
580
  case 'instructor':
581
  $this->column_instructor( $post->ID );
588
  $html_items = array();
589
  $post_types = get_post_types( null, 'objects' );
590
 
 
 
591
  foreach ( learn_press_get_course_item_types() as $item_type ) {
592
  $count_item = $course->count_items( $item_type );
593
 
601
  $html_items[] = sprintf( _n( '<strong>%d</strong> ' . $singular_name, '<strong>%d</strong> ' . $plural_name, $count_item, 'learnpress' ), $count_item );
602
  }
603
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
604
  $html_items = apply_filters( 'learn-press/course-count-items', $html_items );
605
 
606
  if ( $html_items ) {
607
  $output .= ' (' . implode( ', ', $html_items ) . ')';
608
  }
609
 
610
+ echo wp_kses_post( $output );
 
611
  } else {
612
  esc_html_e( 'No content', 'learnpress' );
613
  }
615
  break;
616
 
617
  case 'price':
618
+ echo wp_kses_post( $course->get_course_price_html() );
619
  break;
620
  case 'students':
621
  $count = $course->get_total_user_enrolled_or_purchased();
 
622
  echo '<span class="lp-label-counter' . ( ! $count ? ' disabled' : '' ) . '">' . ( $count ? $count : 0 ) . '</span>';
623
+ break;
624
  }
625
  }
626
 
646
  * @editor tungnx
647
  * @see LP_Background_Single_Course::handle()
648
  */
649
+ public function save( int $post_id = 0, WP_Post $post = null ) {
650
  // Save in background.
651
  $bg = LP_Background_Single_Course::instance();
652
 
inc/custom-post-types/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/custom-post-types/lesson.php CHANGED
@@ -202,10 +202,10 @@ if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {
202
  *
203
  * @since 3.0.0
204
  */
205
- public function before_delete_lesson( $post_id = 0 ) {
206
  $curd = new LP_Lesson_CURD();
207
  $curd->delete( $post_id );
208
- }
209
 
210
  /**
211
  * Add columns to admin manage lesson page
@@ -334,8 +334,4 @@ if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {
334
  }
335
 
336
  $lesson_post_type = LP_Lesson_Post_Type::instance();
337
-
338
- // Todo: Nhamdv see to rewrite
339
- // $lesson_post_type
340
- // ->add_meta_box( 'lesson_assigned', esc_html__( 'Assigned', 'learnpress' ), 'lesson_assigned', 'side', 'high' );
341
  }
202
  *
203
  * @since 3.0.0
204
  */
205
+ /*public function before_delete( int $post_id = 0 ) {
206
  $curd = new LP_Lesson_CURD();
207
  $curd->delete( $post_id );
208
+ }*/
209
 
210
  /**
211
  * Add columns to admin manage lesson page
334
  }
335
 
336
  $lesson_post_type = LP_Lesson_Post_Type::instance();
 
 
 
 
337
  }
inc/custom-post-types/order.php CHANGED
@@ -340,6 +340,9 @@ if ( ! class_exists( 'LP_Order_Post_Type' ) ) {
340
 
341
  if ( $action == 'editpost' ) {
342
  $order = learn_press_get_order( $post_id );
 
 
 
343
 
344
  $created_via = $order->get_created_via();
345
  if ( empty( $created_via ) ) {
@@ -789,13 +792,13 @@ if ( ! class_exists( 'LP_Order_Post_Type' ) ) {
789
  }
790
  break;
791
  case 'order_total':
792
- echo $the_order->get_formatted_order_total();// learn_press_format_price( $the_order->order_total, learn_press_get_currency_symbol( $the_order->order_currency ) );
793
  $title = $the_order->get_payment_method_title();
794
 
795
  if ( $title ) {
796
  ?>
797
  <div class="payment-method-title">
798
- <?php echo $the_order->order_total == 0 ? $title : sprintf( __( 'Pay via <strong>%s</strong>', 'learnpress' ), apply_filters( 'learn-press/order-payment-method-title', $title, $the_order ), $the_order ); ?>
799
  </div>
800
  <?php
801
  }
340
 
341
  if ( $action == 'editpost' ) {
342
  $order = learn_press_get_order( $post_id );
343
+ if ( ! $order ) {
344
+ return;
345
+ }
346
 
347
  $created_via = $order->get_created_via();
348
  if ( empty( $created_via ) ) {
792
  }
793
  break;
794
  case 'order_total':
795
+ echo wp_kses_post( $the_order->get_formatted_order_total() );
796
  $title = $the_order->get_payment_method_title();
797
 
798
  if ( $title ) {
799
  ?>
800
  <div class="payment-method-title">
801
+ <?php echo wp_kses_post( $the_order->order_total == 0 ? $title : sprintf( __( 'Pay via <strong>%s</strong>', 'learnpress' ), apply_filters( 'learn-press/order-payment-method-title', $title, $the_order ), $the_order ) ); ?>
802
  </div>
803
  <?php
804
  }
inc/custom-post-types/question.php CHANGED
@@ -115,8 +115,8 @@ if ( ! class_exists( 'LP_Question_Post_Type' ) ) {
115
  }
116
 
117
  $question = LP_Question::get_question( $post->ID );
118
- $type = $question->get_type();
119
- $answers = ( $question->get_data( 'answer_options' ) ? array_values( $question->get_data( 'answer_options' ) ) : array() );
120
 
121
  if ( empty( $answers ) ) {
122
  $answers = array(
115
  }
116
 
117
  $question = LP_Question::get_question( $post->ID );
118
+ $type = $question->get_type();
119
+ $answers = ( $question->get_data( 'answer_options' ) ? array_values( $question->get_data( 'answer_options' ) ) : array() );
120
 
121
  if ( empty( $answers ) ) {
122
  $answers = array(
inc/custom-post-types/quiz.php CHANGED
@@ -315,7 +315,7 @@ if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {
315
  $duration_str = '--';
316
  }
317
 
318
- echo $duration_str;
319
  break;
320
  case 'preview':
321
  printf(
315
  $duration_str = '--';
316
  }
317
 
318
+ echo esc_html( $duration_str );
319
  break;
320
  case 'preview':
321
  printf(
inc/databases/class-lp-course-db.php CHANGED
@@ -31,21 +31,103 @@ class LP_Course_DB extends LP_Database {
31
  * @param int $item_id
32
  *
33
  * @return int
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  */
35
- public function learn_press_get_item_course( $item_id = 0 ) {
 
 
 
 
 
 
 
36
 
37
  $query = $this->wpdb->prepare(
38
- "
39
- SELECT section_course_id
40
- FROM {$this->tb_lp_sections} AS s
41
- INNER JOIN {$this->tb_lp_section_items} AS si
42
  ON si.section_id = s.section_id
43
- WHERE si.item_id = %d
44
- ORDER BY section_course_id DESC",
45
- $item_id
46
  );
47
 
48
- return (int) $this->wpdb->get_var( $query );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  }
50
 
51
  /**
31
  * @param int $item_id
32
  *
33
  * @return int
34
+ * @throws Exception
35
+ */
36
+ public function get_course_by_item_id( $item_id = 0 ): int {
37
+ // Get cache
38
+ $lp_course_cache = LP_Course_Cache::instance();
39
+ $key_cache = "$item_id/course_id_of_item_id";
40
+ $course_id = $lp_course_cache->get_cache( $key_cache );
41
+
42
+ if ( ! $course_id ) {
43
+ $query = $this->wpdb->prepare(
44
+ "
45
+ SELECT section_course_id
46
+ FROM {$this->tb_lp_sections} AS s
47
+ INNER JOIN {$this->tb_lp_section_items} AS si
48
+ ON si.section_id = s.section_id
49
+ WHERE si.item_id = %d",
50
+ $item_id
51
+ );
52
+
53
+ $course_id = (int) $this->wpdb->get_var( $query );
54
+
55
+ $this->check_execute_has_error();
56
+
57
+ // Set cache
58
+ $lp_course_cache->set_cache( $key_cache, $course_id );
59
+ }
60
+
61
+ return $course_id;
62
+ }
63
+
64
+ /**
65
+ * Get all item ids' course
66
+ *
67
+ * @param int $course_id
68
+ *
69
+ * @return array|object|stdClass[]|null
70
+ * @throws Exception
71
+ * @since 4.1.6.9
72
+ * @version 1.0.0
73
  */
74
+ public function get_full_sections_and_items_course( int $course_id = 0 ) {
75
+ $method_called_to = debug_backtrace()[1]['function'];
76
+
77
+ // Check accept call from function 'get_sections_and_items_course_from_db_and_sort'
78
+ if ( 'get_sections_and_items_course_from_db_and_sort' !== $method_called_to ) {
79
+ error_log( 'You can not call direct this function' );
80
+ return [];
81
+ }
82
 
83
  $query = $this->wpdb->prepare(
84
+ "SELECT *
85
+ FROM {$this->tb_lp_section_items} AS si
86
+ INNER JOIN {$this->tb_lp_sections} AS s
 
87
  ON si.section_id = s.section_id
88
+ WHERE section_course_id = %d
89
+ ORDER BY s.section_order",
90
+ $course_id
91
  );
92
 
93
+ $sections_items = $this->wpdb->get_results( $query );
94
+
95
+ $this->check_execute_has_error();
96
+
97
+ return $sections_items;
98
+ }
99
+
100
+ /**
101
+ * Get all sections' course
102
+ *
103
+ * @param int $course_id
104
+ *
105
+ * @return array|object|stdClass[]|null
106
+ * @throws Exception
107
+ * @since 4.1.6.9
108
+ * @version 1.0.0
109
+ */
110
+ public function get_sections( int $course_id = 0 ) {
111
+ $method_called_to = debug_backtrace()[1]['function'];
112
+
113
+ // Check accept call from function 'get_sections_and_items_course_from_db_and_sort'
114
+ if ( 'get_sections_and_items_course_from_db_and_sort' !== $method_called_to ) {
115
+ error_log( 'You can not call direct this function' );
116
+ return [];
117
+ }
118
+
119
+ $query = $this->wpdb->prepare(
120
+ "SELECT * FROM {$this->tb_lp_sections}
121
+ WHERE section_course_id = %d
122
+ ORDER BY section_order",
123
+ $course_id
124
+ );
125
+
126
+ $sections_items = $this->wpdb->get_results( $query, OBJECT_K );
127
+
128
+ $this->check_execute_has_error();
129
+
130
+ return $sections_items;
131
  }
132
 
133
  /**
inc/databases/class-lp-db.php CHANGED
@@ -683,6 +683,8 @@ class LP_Database {
683
  }
684
 
685
  /**
 
 
686
  * @param array $arr_object
687
  * @param string $key
688
  *
683
  }
684
 
685
  /**
686
+ * Get values of list object by key
687
+ *
688
  * @param array $arr_object
689
  * @param string $key
690
  *
inc/databases/class-lp-section-db.php CHANGED
@@ -307,7 +307,30 @@ class LP_Section_DB extends LP_Database {
307
 
308
  return false;
309
  }
310
- }
311
 
312
- LP_Section_DB::getInstance();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
313
 
307
 
308
  return false;
309
  }
 
310
 
311
+ /**
312
+ * Get last section order of course
313
+ *
314
+ * @param int $course_id
315
+ *
316
+ * @return int
317
+ * @throws Exception
318
+ * @since 4.1.6.9
319
+ * @version 1.0.0
320
+ */
321
+ public function get_last_number_order( int $course_id = 0 ): int {
322
+ $query = $this->wpdb->prepare(
323
+ "SELECT MAX(section_order)
324
+ FROM $this->tb_lp_sections
325
+ WHERE section_course_id = %d",
326
+ $course_id
327
+ );
328
+
329
+ $number_order = intval( $this->wpdb->get_var( $query ) );
330
+
331
+ $this->check_execute_has_error();
332
+
333
+ return $number_order;
334
+ }
335
+ }
336
 
inc/databases/class-lp-user-items-db.php CHANGED
@@ -28,6 +28,35 @@ class LP_User_Items_DB extends LP_Database {
28
  return self::$_instance;
29
  }
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  /**
32
  * Get items by user_item_id | this is id where item_id = course_id
33
  *
@@ -800,6 +829,51 @@ class LP_User_Items_DB extends LP_Database {
800
 
801
  return apply_filters( 'lp/user/course/query/filter/count-users-attend-courses-of-author', $filter );
802
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
803
  }
804
 
805
  LP_Course_DB::getInstance();
28
  return self::$_instance;
29
  }
30
 
31
+ /**
32
+ * Get users items
33
+ *
34
+ * @return array|null|int|string
35
+ * @throws Exception
36
+ * @since 4.1.6.9
37
+ * @version 1.0.0
38
+ */
39
+ public function get_user_items( LP_User_Items_Filter $filter, int &$total_rows = 0 ) {
40
+ $default_fields = $this->get_cols_of_table( $this->tb_lp_user_items );
41
+ $filter->fields = array_merge( $default_fields, $filter->fields );
42
+
43
+ if ( empty( $filter->collection ) ) {
44
+ $filter->collection = $this->tb_lp_user_items;
45
+ }
46
+
47
+ if ( empty( $filter->collection_alias ) ) {
48
+ $filter->collection_alias = 'ui';
49
+ }
50
+
51
+ if ( $filter->ref_id ) {
52
+ $filter->where[] = $this->wpdb->prepare( 'AND ui.ref_id = %d', $filter->ref_id );
53
+ }
54
+
55
+ $filter = apply_filters( 'lp/user_items/query/filter', $filter );
56
+
57
+ return $this->execute( $filter, $total_rows );
58
+ }
59
+
60
  /**
61
  * Get items by user_item_id | this is id where item_id = course_id
62
  *
829
 
830
  return apply_filters( 'lp/user/course/query/filter/count-users-attend-courses-of-author', $filter );
831
  }
832
+
833
+ /**
834
+ * Get list students attend
835
+ *
836
+ * @param LP_User_Items_Filter $filter
837
+ * @param int $total_rows
838
+ *
839
+ * @return array|int|string|null
840
+ * @since 4.1.6.9
841
+ * @throws Exception
842
+ */
843
+ public function get_students( LP_User_Items_Filter $filter, int &$total_rows = 0 ) {
844
+ $default_fields = $this->get_cols_of_table( $this->tb_users );
845
+ $filter->fields = array_merge( $default_fields, $filter->fields );
846
+ $filter->exclude_fields = [ 'user_pass', 'user_login', 'user_status', 'user_activation_key' ];
847
+ $filter->field_count = 'ID';
848
+
849
+ if ( empty( $filter->collection ) ) {
850
+ $filter->collection = $this->tb_users;
851
+ }
852
+
853
+ if ( empty( $filter->collection_alias ) ) {
854
+ $filter->collection_alias = 'u';
855
+ }
856
+
857
+ // Filter
858
+ $filter->join[] = "INNER JOIN $this->tb_lp_user_items AS ui ON u.ID = ui.user_id";
859
+ $filter->where[] = $this->wpdb->prepare( 'AND item_type =%s', LP_COURSE_CPT );
860
+
861
+ // Filter by user ids
862
+ if ( ! empty( $filter->user_ids ) ) {
863
+ $term_ids_format = LP_Helper::db_format_array( $filter->user_ids, '%d' );
864
+ $filter->where[] = $this->wpdb->prepare( 'AND r_term.term_taxonomy_id IN (' . $term_ids_format . ')', $filter->user_ids );
865
+ }
866
+
867
+ // Filter
868
+
869
+ $filter->group_by = 'ID';
870
+
871
+ // End filter
872
+
873
+ $filter = apply_filters( 'lp/course/query/students', $filter );
874
+
875
+ return $this->execute( $filter, $total_rows );
876
+ }
877
  }
878
 
879
  LP_Course_DB::getInstance();
inc/emails/class-lp-email.php CHANGED
@@ -470,7 +470,7 @@ if ( ! class_exists( 'LP_Email' ) ) {
470
  * @return bool
471
  */
472
  private function is_current() {
473
- return ! empty( $_REQUEST['section'] ) && $_REQUEST['section'] == $this->id;
474
  }
475
 
476
  /**
@@ -619,7 +619,8 @@ if ( ! class_exists( 'LP_Email' ) ) {
619
  public function get_content_plain(): string {
620
  $template = $this->get_template( 'template_plain' );
621
  $template_file = $this->template_base . $template;
622
- $content = $this->settings->get( 'email_content.plain', file_get_contents( $template_file ) );
 
623
  $content = stripslashes( $content );
624
 
625
  return $content;
@@ -1169,10 +1170,9 @@ if ( ! class_exists( 'LP_Email' ) ) {
1169
  ]
1170
  );
1171
  $header = ob_get_clean();
1172
- $header = wp_kses_post( $header );
1173
 
1174
  if ( $echo ) {
1175
- echo $header;
1176
  }
1177
 
1178
  return $header;
@@ -1190,10 +1190,9 @@ if ( ! class_exists( 'LP_Email' ) ) {
1190
  ob_start();
1191
  learn_press_get_template( 'emails/email-footer.php', array( 'footer_text' => $footer_text ) );
1192
  $footer = ob_get_clean();
1193
- $footer = wp_kses_post( $footer );
1194
 
1195
  if ( $echo ) {
1196
- echo $footer;
1197
  }
1198
 
1199
  return $footer;
470
  * @return bool
471
  */
472
  private function is_current() {
473
+ return ! empty( $_REQUEST['section'] ) && sanitize_text_field( $_REQUEST['section'] ) == $this->id;
474
  }
475
 
476
  /**
619
  public function get_content_plain(): string {
620
  $template = $this->get_template( 'template_plain' );
621
  $template_file = $this->template_base . $template;
622
+ $content_tmp = LP_WP_Filesystem::instance()->file_get_contents( $template_file );
623
+ $content = $this->settings->get( 'email_content.plain', $content_tmp );
624
  $content = stripslashes( $content );
625
 
626
  return $content;
1170
  ]
1171
  );
1172
  $header = ob_get_clean();
 
1173
 
1174
  if ( $echo ) {
1175
+ echo wp_kses_post( $header );
1176
  }
1177
 
1178
  return $header;
1190
  ob_start();
1191
  learn_press_get_template( 'emails/email-footer.php', array( 'footer_text' => $footer_text ) );
1192
  $footer = ob_get_clean();
 
1193
 
1194
  if ( $echo ) {
1195
+ echo wp_kses_post( $footer );
1196
  }
1197
 
1198
  return $footer;
inc/emails/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/external-plugin/elementor/widgets/list-courses.php CHANGED
@@ -191,7 +191,8 @@ class LP_Elementor_Widget_List_Courses extends LP_Elementor_Widget_Base {
191
  }
192
  ?>
193
  <div class="lp-archive-courses">
194
- <ul class="learn-press-courses" data-layout="<?php echo $settings['grid_list_type']; ?>" data-size="<?php echo absint( $settings['number_posts'] ); ?>">
 
195
  <?php
196
  global $post;
197
  foreach ( $courses as $course ) {
191
  }
192
  ?>
193
  <div class="lp-archive-courses">
194
+ <ul class="learn-press-courses" data-layout="<?php echo esc_attr( $settings['grid_list_type'] ); ?>"
195
+ data-size="<?php echo absint( $settings['number_posts'] ); ?>">
196
  <?php
197
  global $post;
198
  foreach ( $courses as $course ) {
inc/external-plugin/polylang/class-lp-polylang.php CHANGED
@@ -149,7 +149,7 @@ class LP_Polylang {
149
  * @return array
150
  */
151
  public function args_query_user_courses( array $args, WP_REST_Request $request ): array {
152
- $pll_current_lang = $request['pll-current-lang'] ?? '';
153
 
154
  if ( empty( $pll_current_lang ) ) {
155
  return $args;
149
  * @return array
150
  */
151
  public function args_query_user_courses( array $args, WP_REST_Request $request ): array {
152
+ $pll_current_lang = LP_Helper::sanitize_params_submitted( $request['pll-current-lang'] ?? '' );
153
 
154
  if ( empty( $pll_current_lang ) ) {
155
  return $args;
inc/filters/class-lp-user-items-filter.php CHANGED
@@ -24,10 +24,18 @@ if ( ! class_exists( 'LP_User_Items_Filter' ) ) {
24
  * @var int
25
  */
26
  public $user_id = 0;
 
 
 
 
27
  /**
28
  * @var int
29
  */
30
  public $item_id = 0;
 
 
 
 
31
  /**
32
  * @var string
33
  */
24
  * @var int
25
  */
26
  public $user_id = 0;
27
+ /**
28
+ * @var array int
29
+ */
30
+ public $user_ids = [];
31
  /**
32
  * @var int
33
  */
34
  public $item_id = 0;
35
+ /**
36
+ * @var array int
37
+ */
38
+ public $course_ids = [];
39
  /**
40
  * @var string
41
  */
inc/gateways/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/gateways/paypal/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/gateways/paypal/paypal-ipn/cert/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/gateways/paypal/paypal-ipn/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/gateways/paypal/paypal-ipn/ipn.php CHANGED
@@ -27,12 +27,12 @@ Here I am turning on PHP error logging to a file called "ipn_errors.log". Make
27
  sure your web server has permissions to write to that file. In a production
28
  environment it is better to have that log file outside of the web root.
29
  */
30
- ini_set('log_errors', true);
31
- ini_set('error_log', dirname(__FILE__).'/ipn_errors.log');
32
 
33
 
34
  // instantiate the IpnListener class
35
- include('ipnlistener.php');
36
  $listener = new IpnListener();
37
 
38
 
@@ -70,9 +70,9 @@ $verified = $listener->processIpn($my_post_data);
70
  try {
71
  $listener->requirePostMethod();
72
  $verified = $listener->processIpn();
73
- } catch (Exception $e) {
74
- error_log($e->getMessage());
75
- exit(0);
76
  }
77
 
78
 
@@ -80,7 +80,7 @@ try {
80
  The processIpn() method returned true if the IPN was "VERIFIED" and false if it
81
  was "INVALID".
82
  */
83
- if ($verified) {
84
  /*
85
  Once you have a verified IPN you need to do a few more checks on the POST
86
  fields--typically against data you stored in your database during when the
@@ -97,7 +97,7 @@ if ($verified) {
97
  example and just send an email using the getTextReport() method to get all
98
  of the details about the IPN.
99
  */
100
- mail('YOUR EMAIL ADDRESS', 'Verified IPN', $listener->getTextReport());
101
 
102
  } else {
103
  /*
@@ -105,7 +105,7 @@ if ($verified) {
105
  a good idea to have a developer or sys admin manually investigate any
106
  invalid IPN.
107
  */
108
- mail('YOUR EMAIL ADDRESS', 'Invalid IPN', $listener->getTextReport());
109
  }
110
 
111
- ?>
27
  sure your web server has permissions to write to that file. In a production
28
  environment it is better to have that log file outside of the web root.
29
  */
30
+ ini_set( 'log_errors', true );
31
+ ini_set( 'error_log', dirname( __FILE__ ) . '/ipn_errors.log' );
32
 
33
 
34
  // instantiate the IpnListener class
35
+ include( 'ipnlistener.php' );
36
  $listener = new IpnListener();
37
 
38
 
70
  try {
71
  $listener->requirePostMethod();
72
  $verified = $listener->processIpn();
73
+ } catch ( Exception $e ) {
74
+ error_log( $e->getMessage() );
75
+ exit( 0 );
76
  }
77
 
78
 
80
  The processIpn() method returned true if the IPN was "VERIFIED" and false if it
81
  was "INVALID".
82
  */
83
+ if ( $verified ) {
84
  /*
85
  Once you have a verified IPN you need to do a few more checks on the POST
86
  fields--typically against data you stored in your database during when the
97
  example and just send an email using the getTextReport() method to get all
98
  of the details about the IPN.
99
  */
100
+ mail( 'YOUR EMAIL ADDRESS', 'Verified IPN', $listener->getTextReport() );
101
 
102
  } else {
103
  /*
105
  a good idea to have a developer or sys admin manually investigate any
106
  invalid IPN.
107
  */
108
+ mail( 'YOUR EMAIL ADDRESS', 'Invalid IPN', $listener->getTextReport() );
109
  }
110
 
111
+
inc/gateways/paypal/paypal-ipn/ipnlistener.php CHANGED
@@ -64,10 +64,10 @@ class IpnListener {
64
  */
65
  public $timeout = 30;
66
 
67
- private $post_data = array();
68
- private $post_uri = '';
69
  private $response_status = '';
70
- private $response = '';
71
 
72
  const PAYPAL_HOST = 'www.paypal.com';
73
  const SANDBOX_HOST = 'www.sandbox.paypal.com';
@@ -96,8 +96,11 @@ class IpnListener {
96
 
97
  curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true );
98
  curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
99
- curl_setopt( $ch, CURLOPT_CAINFO,
100
- dirname( __FILE__ ) . "/cert/api_cert_chain.crt" );
 
 
 
101
  curl_setopt( $ch, CURLOPT_URL, $uri );
102
  curl_setopt( $ch, CURLOPT_POST, true );
103
  curl_setopt( $ch, CURLOPT_POSTFIELDS, $encoded_data );
@@ -149,10 +152,10 @@ class IpnListener {
149
  throw new Exception( "fsockopen error: [$errno] $errstr" );
150
  }
151
 
152
- $header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
153
- $header .= "Host: " . $this->getPaypalHost() . "\r\n";
154
  $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
155
- $header .= "Content-Length: " . strlen( $encoded_data ) . "\r\n";
156
  $header .= "Connection: Close\r\n\r\n";
157
 
158
  fputs( $fp, $header . $encoded_data . "\r\n\r\n" );
@@ -160,7 +163,7 @@ class IpnListener {
160
  while ( ! feof( $fp ) ) {
161
  if ( empty( $this->response ) ) {
162
  // extract HTTP status from first line
163
- $this->response .= $status = fgets( $fp, 1024 );
164
  $this->response_status = trim( substr( $status, 9, 4 ) );
165
  } else {
166
  $this->response .= fgets( $fp, 1024 );
@@ -279,9 +282,9 @@ class IpnListener {
279
  // use raw POST data
280
  if ( ! empty( $_POST ) ) {
281
  $this->post_data = $_POST;
282
- $encoded_data .= '&' . file_get_contents( 'php://input' );
283
  } else {
284
- throw new Exception( "No POST data found." );
285
  }
286
  } else {
287
  // use provided data array
@@ -299,15 +302,15 @@ class IpnListener {
299
  }
300
 
301
  if ( strpos( $this->response_status, '200' ) === false ) {
302
- throw new Exception( "Invalid response status: " . $this->response_status );
303
  }
304
 
305
- if ( strpos( $this->response, "VERIFIED" ) !== false ) {
306
  return true;
307
- } elseif ( strpos( $this->response, "INVALID" ) !== false ) {
308
  return false;
309
  } else {
310
- throw new Exception( "Unexpected response from PayPal." );
311
  }
312
  }
313
 
@@ -321,7 +324,7 @@ class IpnListener {
321
  // require POST requests
322
  if ( $_SERVER['REQUEST_METHOD'] && $_SERVER['REQUEST_METHOD'] != 'POST' ) {
323
  header( 'Allow: POST', true, 405 );
324
- throw new Exception( "Invalid HTTP request method." );
325
  }
326
  }
327
  }
64
  */
65
  public $timeout = 30;
66
 
67
+ private $post_data = array();
68
+ private $post_uri = '';
69
  private $response_status = '';
70
+ private $response = '';
71
 
72
  const PAYPAL_HOST = 'www.paypal.com';
73
  const SANDBOX_HOST = 'www.sandbox.paypal.com';
96
 
97
  curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, true );
98
  curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
99
+ curl_setopt(
100
+ $ch,
101
+ CURLOPT_CAINFO,
102
+ dirname( __FILE__ ) . '/cert/api_cert_chain.crt'
103
+ );
104
  curl_setopt( $ch, CURLOPT_URL, $uri );
105
  curl_setopt( $ch, CURLOPT_POST, true );
106
  curl_setopt( $ch, CURLOPT_POSTFIELDS, $encoded_data );
152
  throw new Exception( "fsockopen error: [$errno] $errstr" );
153
  }
154
 
155
+ $header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
156
+ $header .= 'Host: ' . $this->getPaypalHost() . "\r\n";
157
  $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
158
+ $header .= 'Content-Length: ' . strlen( $encoded_data ) . "\r\n";
159
  $header .= "Connection: Close\r\n\r\n";
160
 
161
  fputs( $fp, $header . $encoded_data . "\r\n\r\n" );
163
  while ( ! feof( $fp ) ) {
164
  if ( empty( $this->response ) ) {
165
  // extract HTTP status from first line
166
+ $this->response .= $status = fgets( $fp, 1024 );
167
  $this->response_status = trim( substr( $status, 9, 4 ) );
168
  } else {
169
  $this->response .= fgets( $fp, 1024 );
282
  // use raw POST data
283
  if ( ! empty( $_POST ) ) {
284
  $this->post_data = $_POST;
285
+ $encoded_data .= '&' . file_get_contents( 'php://input' );
286
  } else {
287
+ throw new Exception( 'No POST data found.' );
288
  }
289
  } else {
290
  // use provided data array
302
  }
303
 
304
  if ( strpos( $this->response_status, '200' ) === false ) {
305
+ throw new Exception( 'Invalid response status: ' . $this->response_status );
306
  }
307
 
308
+ if ( strpos( $this->response, 'VERIFIED' ) !== false ) {
309
  return true;
310
+ } elseif ( strpos( $this->response, 'INVALID' ) !== false ) {
311
  return false;
312
  } else {
313
+ throw new Exception( 'Unexpected response from PayPal.' );
314
  }
315
  }
316
 
324
  // require POST requests
325
  if ( $_SERVER['REQUEST_METHOD'] && $_SERVER['REQUEST_METHOD'] != 'POST' ) {
326
  header( 'Allow: POST', true, 405 );
327
+ throw new Exception( 'Invalid HTTP request method.' );
328
  }
329
  }
330
  }
inc/index.php CHANGED
@@ -1 +1 @@
1
- <?php // Silence is golden.
1
+ <?php // Silence is golden.
inc/jwt/includes/php-jwt/BeforeValidException.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  namespace Firebase\JWT;
3
 
4
- class BeforeValidException extends \UnexpectedValueException
5
- {
6
 
7
  }
1
  <?php
2
  namespace Firebase\JWT;
3
 
4
+ class BeforeValidException extends \UnexpectedValueException {
5
+
6
 
7
  }
inc/jwt/includes/php-jwt/ExpiredException.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  namespace Firebase\JWT;
3
 
4
- class ExpiredException extends \UnexpectedValueException
5
- {
6
 
7
  }
1
  <?php
2
  namespace Firebase\JWT;
3
 
4
+ class ExpiredException extends \UnexpectedValueException {
5
+
6
 
7
  }
inc/jwt/includes/php-jwt/JWT.php CHANGED
@@ -19,361 +19,354 @@ use \DateTime;
19
  * @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
20
  * @link https://github.com/firebase/php-jwt
21
  */
22
- class JWT
23
- {
24
 
25
- /**
26
- * When checking nbf, iat or expiration times,
27
- * we want to provide some extra leeway time to
28
- * account for clock skew.
29
- */
30
- public static $leeway = 0;
31
 
32
- /**
33
- * Allow the current timestamp to be specified.
34
- * Useful for fixing a value within unit testing.
35
- *
36
- * Will default to PHP time() value if null.
37
- */
38
- public static $timestamp = null;
39
 
40
- public static $supported_algs = array(
41
- 'HS256' => array('hash_hmac', 'SHA256'),
42
- 'HS512' => array('hash_hmac', 'SHA512'),
43
- 'HS384' => array('hash_hmac', 'SHA384'),
44
- 'RS256' => array('openssl', 'SHA256'),
45
- 'RS384' => array('openssl', 'SHA384'),
46
- 'RS512' => array('openssl', 'SHA512'),
47
- );
48
 
49
- /**
50
- * Decodes a JWT string into a PHP object.
51
- *
52
- * @param string $jwt The JWT
53
- * @param string|array $key The key, or map of keys.
54
- * If the algorithm used is asymmetric, this is the public key
55
- * @param array $allowed_algs List of supported verification algorithms
56
- * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
57
- *
58
- * @return object The JWT's payload as a PHP object
59
- *
60
- * @throws UnexpectedValueException Provided JWT was invalid
61
- * @throws SignatureInvalidException Provided JWT was invalid because the signature verification failed
62
- * @throws BeforeValidException Provided JWT is trying to be used before it's eligible as defined by 'nbf'
63
- * @throws BeforeValidException Provided JWT is trying to be used before it's been created as defined by 'iat'
64
- * @throws ExpiredException Provided JWT has since expired, as defined by the 'exp' claim
65
- *
66
- * @uses jsonDecode
67
- * @uses urlsafeB64Decode
68
- */
69
- public static function decode($jwt, $key, array $allowed_algs = array())
70
- {
71
- $timestamp = is_null(static::$timestamp) ? time() : static::$timestamp;
72
 
73
- if (empty($key)) {
74
- throw new InvalidArgumentException('Key may not be empty');
75
- }
76
- $tks = explode('.', $jwt);
77
- if (count($tks) != 3) {
78
- throw new UnexpectedValueException('Wrong number of segments');
79
- }
80
- list($headb64, $bodyb64, $cryptob64) = $tks;
81
- if (null === ($header = static::jsonDecode(static::urlsafeB64Decode($headb64)))) {
82
- throw new UnexpectedValueException('Invalid header encoding');
83
- }
84
- if (null === $payload = static::jsonDecode(static::urlsafeB64Decode($bodyb64))) {
85
- throw new UnexpectedValueException('Invalid claims encoding');
86
- }
87
- if (false === ($sig = static::urlsafeB64Decode($cryptob64))) {
88
- throw new UnexpectedValueException('Invalid signature encoding');
89
- }
90
- if (empty($header->alg)) {
91
- throw new UnexpectedValueException('Empty algorithm');
92
- }
93
- if (empty(static::$supported_algs[$header->alg])) {
94
- throw new UnexpectedValueException('Algorithm not supported');
95
- }
96
- if (!in_array($header->alg, $allowed_algs)) {
97
- throw new UnexpectedValueException('Algorithm not allowed');
98
- }
99
- if (is_array($key) || $key instanceof \ArrayAccess) {
100
- if (isset($header->kid)) {
101
- if (!isset($key[$header->kid])) {
102
- throw new UnexpectedValueException('"kid" invalid, unable to lookup correct key');
103
- }
104
- $key = $key[$header->kid];
105
- } else {
106
- throw new UnexpectedValueException('"kid" empty, unable to lookup correct key');
107
- }
108
- }
109
 
110
- // Check the signature
111
- if (!static::verify("$headb64.$bodyb64", $sig, $key, $header->alg)) {
112
- throw new SignatureInvalidException('Signature verification failed');
113
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
- // Check if the nbf if it is defined. This is the time that the
116
- // token can actually be used. If it's not yet that time, abort.
117
- if (isset($payload->nbf) && $payload->nbf > ($timestamp + static::$leeway)) {
118
- throw new BeforeValidException(
119
- 'Cannot handle token prior to ' . date(DateTime::ISO8601, $payload->nbf)
120
- );
121
- }
122
 
123
- // Check that this token has been created before 'now'. This prevents
124
- // using tokens that have been created for later use (and haven't
125
- // correctly used the nbf claim).
126
- if (isset($payload->iat) && $payload->iat > ($timestamp + static::$leeway)) {
127
- throw new BeforeValidException(
128
- 'Cannot handle token prior to ' . date(DateTime::ISO8601, $payload->iat)
129
- );
130
- }
131
 
132
- // Check if this token has expired.
133
- if (isset($payload->exp) && ($timestamp - static::$leeway) >= $payload->exp) {
134
- throw new ExpiredException('Expired token');
135
- }
 
 
 
 
136
 
137
- return $payload;
138
- }
 
 
139
 
140
- /**
141
- * Converts and signs a PHP object or array into a JWT string.
142
- *
143
- * @param object|array $payload PHP object or array
144
- * @param string $key The secret key.
145
- * If the algorithm used is asymmetric, this is the private key
146
- * @param string $alg The signing algorithm.
147
- * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
148
- * @param mixed $keyId
149
- * @param array $head An array with header elements to attach
150
- *
151
- * @return string A signed JWT
152
- *
153
- * @uses jsonEncode
154
- * @uses urlsafeB64Encode
155
- */
156
- public static function encode($payload, $key, $alg = 'HS256', $keyId = null, $head = null)
157
- {
158
- $header = array('typ' => 'JWT', 'alg' => $alg);
159
- if ($keyId !== null) {
160
- $header['kid'] = $keyId;
161
- }
162
- if ( isset($head) && is_array($head) ) {
163
- $header = array_merge($head, $header);
164
- }
165
- $segments = array();
166
- $segments[] = static::urlsafeB64Encode(static::jsonEncode($header));
167
- $segments[] = static::urlsafeB64Encode(static::jsonEncode($payload));
168
- $signing_input = implode('.', $segments);
169
 
170
- $signature = static::sign($signing_input, $key, $alg);
171
- $segments[] = static::urlsafeB64Encode($signature);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
 
173
- return implode('.', $segments);
174
- }
175
 
176
- /**
177
- * Sign a string with a given key and algorithm.
178
- *
179
- * @param string $msg The message to sign
180
- * @param string|resource $key The secret key
181
- * @param string $alg The signing algorithm.
182
- * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
183
- *
184
- * @return string An encrypted message
185
- *
186
- * @throws DomainException Unsupported algorithm was specified
187
- */
188
- public static function sign($msg, $key, $alg = 'HS256')
189
- {
190
- if (empty(static::$supported_algs[$alg])) {
191
- throw new DomainException('Algorithm not supported');
192
- }
193
- list($function, $algorithm) = static::$supported_algs[$alg];
194
- switch($function) {
195
- case 'hash_hmac':
196
- return hash_hmac($algorithm, $msg, $key, true);
197
- case 'openssl':
198
- $signature = '';
199
- $success = openssl_sign($msg, $signature, $key, $algorithm);
200
- if (!$success) {
201
- throw new DomainException("OpenSSL unable to sign data");
202
- } else {
203
- return $signature;
204
- }
205
- }
206
- }
207
 
208
- /**
209
- * Verify a signature with the message, key and method. Not all methods
210
- * are symmetric, so we must have a separate verify and sign method.
211
- *
212
- * @param string $msg The original message (header and body)
213
- * @param string $signature The original signature
214
- * @param string|resource $key For HS*, a string key works. for RS*, must be a resource of an openssl public key
215
- * @param string $alg The algorithm
216
- *
217
- * @return bool
218
- *
219
- * @throws DomainException Invalid Algorithm or OpenSSL failure
220
- */
221
- private static function verify($msg, $signature, $key, $alg)
222
- {
223
- if (empty(static::$supported_algs[$alg])) {
224
- throw new DomainException('Algorithm not supported');
225
- }
 
 
 
 
 
 
 
 
 
 
 
 
226
 
227
- list($function, $algorithm) = static::$supported_algs[$alg];
228
- switch($function) {
229
- case 'openssl':
230
- $success = openssl_verify($msg, $signature, $key, $algorithm);
231
- if ($success === 1) {
232
- return true;
233
- } elseif ($success === 0) {
234
- return false;
235
- }
236
- // returns 1 on success, 0 on failure, -1 on error.
237
- throw new DomainException(
238
- 'OpenSSL error: ' . openssl_error_string()
239
- );
240
- case 'hash_hmac':
241
- default:
242
- $hash = hash_hmac($algorithm, $msg, $key, true);
243
- if (function_exists('hash_equals')) {
244
- return hash_equals($signature, $hash);
245
- }
246
- $len = min(static::safeStrlen($signature), static::safeStrlen($hash));
247
 
248
- $status = 0;
249
- for ($i = 0; $i < $len; $i++) {
250
- $status |= (ord($signature[$i]) ^ ord($hash[$i]));
251
- }
252
- $status |= (static::safeStrlen($signature) ^ static::safeStrlen($hash));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
 
254
- return ($status === 0);
255
- }
256
- }
 
 
257
 
258
- /**
259
- * Decode a JSON string into a PHP object.
260
- *
261
- * @param string $input JSON string
262
- *
263
- * @return object Object representation of JSON string
264
- *
265
- * @throws DomainException Provided string was invalid JSON
266
- */
267
- public static function jsonDecode($input)
268
- {
269
- if (version_compare(PHP_VERSION, '5.4.0', '>=') && !(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) {
270
- /** In PHP >=5.4.0, json_decode() accepts an options parameter, that allows you
271
- * to specify that large ints (like Steam Transaction IDs) should be treated as
272
- * strings, rather than the PHP default behaviour of converting them to floats.
273
- */
274
- $obj = json_decode($input, false, 512, JSON_BIGINT_AS_STRING);
275
- } else {
276
- /** Not all servers will support that, however, so for older versions we must
277
- * manually detect large ints in the JSON string and quote them (thus converting
278
- *them to strings) before decoding, hence the preg_replace() call.
279
- */
280
- $max_int_length = strlen((string) PHP_INT_MAX) - 1;
281
- $json_without_bigints = preg_replace('/:\s*(-?\d{'.$max_int_length.',})/', ': "$1"', $input);
282
- $obj = json_decode($json_without_bigints);
283
- }
284
 
285
- if (function_exists('json_last_error') && $errno = json_last_error()) {
286
- static::handleJsonError($errno);
287
- } elseif ($obj === null && $input !== 'null') {
288
- throw new DomainException('Null result with non-null input');
289
- }
290
- return $obj;
291
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
 
293
- /**
294
- * Encode a PHP object into a JSON string.
295
- *
296
- * @param object|array $input A PHP object or array
297
- *
298
- * @return string JSON representation of the PHP object or array
299
- *
300
- * @throws DomainException Provided object could not be encoded to valid JSON
301
- */
302
- public static function jsonEncode($input)
303
- {
304
- $json = json_encode($input);
305
- if (function_exists('json_last_error') && $errno = json_last_error()) {
306
- static::handleJsonError($errno);
307
- } elseif ($json === 'null' && $input !== null) {
308
- throw new DomainException('Null result with non-null input');
309
- }
310
- return $json;
311
- }
312
 
313
- /**
314
- * Decode a string with URL-safe Base64.
315
- *
316
- * @param string $input A Base64 encoded string
317
- *
318
- * @return string A decoded string
319
- */
320
- public static function urlsafeB64Decode($input)
321
- {
322
- $remainder = strlen($input) % 4;
323
- if ($remainder) {
324
- $padlen = 4 - $remainder;
325
- $input .= str_repeat('=', $padlen);
326
- }
327
- return base64_decode(strtr($input, '-_', '+/'));
328
- }
 
 
329
 
330
- /**
331
- * Encode a string with URL-safe Base64.
332
- *
333
- * @param string $input The string you want encoded
334
- *
335
- * @return string The base64 encode of what you passed in
336
- */
337
- public static function urlsafeB64Encode($input)
338
- {
339
- return str_replace('=', '', strtr(base64_encode($input), '+/', '-_'));
340
- }
 
 
 
 
341
 
342
- /**
343
- * Helper method to create a JSON error.
344
- *
345
- * @param int $errno An error number from json_last_error()
346
- *
347
- * @return void
348
- */
349
- private static function handleJsonError($errno)
350
- {
351
- $messages = array(
352
- JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
353
- JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',
354
- JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',
355
- JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',
356
- JSON_ERROR_UTF8 => 'Malformed UTF-8 characters' //PHP >= 5.3.3
357
- );
358
- throw new DomainException(
359
- isset($messages[$errno])
360
- ? $messages[$errno]
361
- : 'Unknown JSON error: ' . $errno
362
- );
363
- }
364
 
365
- /**
366
- * Get the number of bytes in cryptographic strings.
367
- *
368
- * @param string
369
- *
370
- * @return int
371
- */
372
- private static function safeStrlen($str)
373
- {
374
- if (function_exists('mb_strlen')) {
375
- return mb_strlen($str, '8bit');
376
- }
377
- return strlen($str);
378
- }
19
  * @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
20
  * @link https://github.com/firebase/php-jwt
21
  */
22
+ class JWT {
 
23
 
 
 
 
 
 
 
24
 
25
+ /**
26
+ * When checking nbf, iat or expiration times,
27
+ * we want to provide some extra leeway time to
28
+ * account for clock skew.
29
+ */
30
+ public static $leeway = 0;
 
31
 
32
+ /**
33
+ * Allow the current timestamp to be specified.
34
+ * Useful for fixing a value within unit testing.
35
+ *
36
+ * Will default to PHP time() value if null.
37
+ */
38
+ public static $timestamp = null;
 
39
 
40
+ public static $supported_algs = array(
41
+ 'HS256' => array( 'hash_hmac', 'SHA256' ),
42
+ 'HS512' => array( 'hash_hmac', 'SHA512' ),
43
+ 'HS384' => array( 'hash_hmac', 'SHA384' ),
44
+ 'RS256' => array( 'openssl', 'SHA256' ),
45
+ 'RS384' => array( 'openssl', 'SHA384' ),
46
+ 'RS512' => array( 'openssl', 'SHA512' ),
47
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
+ /**
50
+ * Decodes a JWT string into a PHP object.
51
+ *
52
+ * @param string $jwt The JWT
53
+ * @param string|array $key The key, or map of keys.
54
+ * If the algorithm used is asymmetric, this is the public key
55
+ * @param array $allowed_algs List of supported verification algorithms
56
+ * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
57
+ *
58
+ * @return object The JWT's payload as a PHP object
59
+ *
60
+ * @throws UnexpectedValueException Provided JWT was invalid
61
+ * @throws SignatureInvalidException Provided JWT was invalid because the signature verification failed
62
+ * @throws BeforeValidException Provided JWT is trying to be used before it's eligible as defined by 'nbf'
63
+ * @throws BeforeValidException Provided JWT is trying to be used before it's been created as defined by 'iat'
64
+ * @throws ExpiredException Provided JWT has since expired, as defined by the 'exp' claim
65
+ *
66
+ * @uses jsonDecode
67
+ * @uses urlsafeB64Decode
68
+ */
69
+ public static function decode( $jwt, $key, array $allowed_algs = array() ) {
70
+ $timestamp = is_null( static::$timestamp ) ? time() : static::$timestamp;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
 
72
+ if ( empty( $key ) ) {
73
+ throw new InvalidArgumentException( 'Key may not be empty' );
74
+ }
75
+ $tks = explode( '.', $jwt );
76
+ if ( count( $tks ) != 3 ) {
77
+ throw new UnexpectedValueException( 'Wrong number of segments' );
78
+ }
79
+ list($headb64, $bodyb64, $cryptob64) = $tks;
80
+ if ( null === ( $header = static::jsonDecode( static::urlsafeB64Decode( $headb64 ) ) ) ) {
81
+ throw new UnexpectedValueException( 'Invalid header encoding' );
82
+ }
83
+ if ( null === $payload = static::jsonDecode( static::urlsafeB64Decode( $bodyb64 ) ) ) {
84
+ throw new UnexpectedValueException( 'Invalid claims encoding' );
85
+ }
86
+ if ( false === ( $sig = static::urlsafeB64Decode( $cryptob64 ) ) ) {
87
+ throw new UnexpectedValueException( 'Invalid signature encoding' );
88
+ }
89
+ if ( empty( $header->alg ) ) {
90
+ throw new UnexpectedValueException( 'Empty algorithm' );
91
+ }
92
+ if ( empty( static::$supported_algs[ $header->alg ] ) ) {
93
+ throw new UnexpectedValueException( 'Algorithm not supported' );
94
+ }
95
+ if ( ! in_array( $header->alg, $allowed_algs ) ) {
96
+ throw new UnexpectedValueException( 'Algorithm not allowed' );
97
+ }
98
+ if ( is_array( $key ) || $key instanceof \ArrayAccess ) {
99
+ if ( isset( $header->kid ) ) {
100
+ if ( ! isset( $key[ $header->kid ] ) ) {
101
+ throw new UnexpectedValueException( '"kid" invalid, unable to lookup correct key' );
102
+ }
103
+ $key = $key[ $header->kid ];
104
+ } else {
105
+ throw new UnexpectedValueException( '"kid" empty, unable to lookup correct key' );
106
+ }
107
+ }
108
 
109
+ // Check the signature
110
+ if ( ! static::verify( "$headb64.$bodyb64", $sig, $key, $header->alg ) ) {
111
+ throw new SignatureInvalidException( 'Signature verification failed' );
112
+ }
 
 
 
113
 
114
+ // Check if the nbf if it is defined. This is the time that the
115
+ // token can actually be used. If it's not yet that time, abort.
116
+ if ( isset( $payload->nbf ) && $payload->nbf > ( $timestamp + static::$leeway ) ) {
117
+ throw new BeforeValidException(
118
+ 'Cannot handle token prior to ' . date( DateTime::ISO8601, $payload->nbf )
119
+ );
120
+ }
 
121
 
122
+ // Check that this token has been created before 'now'. This prevents
123
+ // using tokens that have been created for later use (and haven't
124
+ // correctly used the nbf claim).
125
+ if ( isset( $payload->iat ) && $payload->iat > ( $timestamp + static::$leeway ) ) {
126
+ throw new BeforeValidException(
127
+ 'Cannot handle token prior to ' . date( DateTime::ISO8601, $payload->iat )
128
+ );
129
+ }
130
 
131
+ // Check if this token has expired.
132
+ if ( isset( $payload->exp ) && ( $timestamp - static::$leeway ) >= $payload->exp ) {
133
+ throw new ExpiredException( 'Expired token' );
134
+ }
135
 
136
+ return $payload;
137
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
139
+ /**
140
+ * Converts and signs a PHP object or array into a JWT string.
141
+ *
142
+ * @param object|array $payload PHP object or array
143
+ * @param string $key The secret key.
144
+ * If the algorithm used is asymmetric, this is the private key
145
+ * @param string $alg The signing algorithm.
146
+ * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
147
+ * @param mixed $keyId
148
+ * @param array $head An array with header elements to attach
149
+ *
150
+ * @return string A signed JWT
151
+ *
152
+ * @uses jsonEncode
153
+ * @uses urlsafeB64Encode
154
+ */
155
+ public static function encode( $payload, $key, $alg = 'HS256', $keyId = null, $head = null ) {
156
+ $header = array(
157
+ 'typ' => 'JWT',
158
+ 'alg' => $alg,
159
+ );
160
+ if ( $keyId !== null ) {
161
+ $header['kid'] = $keyId;
162
+ }
163
+ if ( isset( $head ) && is_array( $head ) ) {
164
+ $header = array_merge( $head, $header );
165
+ }
166
+ $segments = array();
167
+ $segments[] = static::urlsafeB64Encode( static::jsonEncode( $header ) );
168
+ $segments[] = static::urlsafeB64Encode( static::jsonEncode( $payload ) );
169
+ $signing_input = implode( '.', $segments );
170
 
171
+ $signature = static::sign( $signing_input, $key, $alg );
172
+ $segments[] = static::urlsafeB64Encode( $signature );
173
 
174
+ return implode( '.', $segments );
175
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
177
+ /**
178
+ * Sign a string with a given key and algorithm.
179
+ *
180
+ * @param string $msg The message to sign
181
+ * @param string|resource $key The secret key
182
+ * @param string $alg The signing algorithm.
183
+ * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'
184
+ *
185
+ * @return string An encrypted message
186
+ *
187
+ * @throws DomainException Unsupported algorithm was specified
188
+ */
189
+ public static function sign( $msg, $key, $alg = 'HS256' ) {
190
+ if ( empty( static::$supported_algs[ $alg ] ) ) {
191
+ throw new DomainException( 'Algorithm not supported' );
192
+ }
193
+ list($function, $algorithm) = static::$supported_algs[ $alg ];
194
+ switch ( $function ) {
195
+ case 'hash_hmac':
196
+ return hash_hmac( $algorithm, $msg, $key, true );
197
+ case 'openssl':
198
+ $signature = '';
199
+ $success = openssl_sign( $msg, $signature, $key, $algorithm );
200
+ if ( ! $success ) {
201
+ throw new DomainException( 'OpenSSL unable to sign data' );
202
+ } else {
203
+ return $signature;
204
+ }
205
+ }
206
+ }
207
 
208
+ /**
209
+ * Verify a signature with the message, key and method. Not all methods
210
+ * are symmetric, so we must have a separate verify and sign method.
211
+ *
212
+ * @param string $msg The original message (header and body)
213
+ * @param string $signature The original signature
214
+ * @param string|resource $key For HS*, a string key works. for RS*, must be a resource of an openssl public key
215
+ * @param string $alg The algorithm
216
+ *
217
+ * @return bool
218
+ *
219
+ * @throws DomainException Invalid Algorithm or OpenSSL failure
220
+ */
221
+ private static function verify( $msg, $signature, $key, $alg ) {
222
+ if ( empty( static::$supported_algs[ $alg ] ) ) {
223
+ throw new DomainException( 'Algorithm not supported' );
224
+ }
 
 
 
225
 
226
+ list($function, $algorithm) = static::$supported_algs[ $alg ];
227
+ switch ( $function ) {
228
+ case 'openssl':
229
+ $success = openssl_verify( $msg, $signature, $key, $algorithm );
230
+ if ( $success === 1 ) {
231
+ return true;
232
+ } elseif ( $success === 0 ) {
233
+ return false;
234
+ }
235
+ // returns 1 on success, 0 on failure, -1 on error.
236
+ throw new DomainException(
237
+ 'OpenSSL error: ' . openssl_error_string()
238
+ );
239
+ case 'hash_hmac':
240
+ default:
241
+ $hash = hash_hmac( $algorithm, $msg, $key, true );
242
+ if ( function_exists( 'hash_equals' ) ) {
243
+ return hash_equals( $signature, $hash );
244
+ }
245
+ $len = min( static::safeStrlen( $signature ), static::safeStrlen( $hash ) );
246
 
247
+ $status = 0;
248
+ for ( $i = 0; $i < $len; $i++ ) {
249
+ $status |= ( ord( $signature[ $i ] ) ^ ord( $hash[ $i ] ) );
250
+ }
251
+ $status |= ( static::safeStrlen( $signature ) ^ static::safeStrlen( $hash ) );
252
 
253
+ return ( $status === 0 );
254
+ }
255
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
 
257
+ /**
258
+ * Decode a JSON string into a PHP object.
259
+ *
260
+ * @param string $input JSON string
261
+ *
262
+ * @return object Object representation of JSON string
263
+ *
264
+ * @throws DomainException Provided string was invalid JSON
265
+ */
266
+ public static function jsonDecode( $input ) {
267
+ if ( version_compare( PHP_VERSION, '5.4.0', '>=' ) && ! ( defined( 'JSON_C_VERSION' ) && PHP_INT_SIZE > 4 ) ) {
268
+ /** In PHP >=5.4.0, json_decode() accepts an options parameter, that allows you
269
+ * to specify that large ints (like Steam Transaction IDs) should be treated as
270
+ * strings, rather than the PHP default behaviour of converting them to floats.
271
+ */
272
+ $obj = json_decode( $input, false, 512, JSON_BIGINT_AS_STRING );
273
+ } else {
274
+ /** Not all servers will support that, however, so for older versions we must
275
+ * manually detect large ints in the JSON string and quote them (thus converting
276
+ *them to strings) before decoding, hence the preg_replace() call.
277
+ */
278
+ $max_int_length = strlen( (string) PHP_INT_MAX ) - 1;
279
+ $json_without_bigints = preg_replace( '/:\s*(-?\d{' . $max_int_length . ',})/', ': "$1"', $input );
280
+ $obj = json_decode( $json_without_bigints );
281
+ }
282
 
283
+ if ( function_exists( 'json_last_error' ) && $errno = json_last_error() ) {
284
+ static::handleJsonError( $errno );
285
+ } elseif ( $obj === null && $input !== 'null' ) {
286
+ throw new DomainException( 'Null result with non-null input' );
287
+ }
288
+ return $obj;
289
+ }
 
 
 
 
 
 
 
 
 
 
 
 
290
 
291
+ /**
292
+ * Encode a PHP object into a JSON string.
293
+ *
294
+ * @param object|array $input A PHP object or array
295
+ *
296
+ * @return string JSON representation of the PHP object or array
297
+ *
298
+ * @throws DomainException Provided object could not be encoded to valid JSON
299
+ */
300
+ public static function jsonEncode( $input ) {
301
+ $json = json_encode( $input );
302
+ if ( function_exists( 'json_last_error' ) && $errno = json_last_error() ) {
303
+ static::handleJsonError( $errno );
304
+ } elseif ( $json === 'null' && $input !== null ) {
305
+ throw new DomainException( 'Null result with non-null input' );
306
+ }
307
+ return $json;
308
+ }
309
 
310
+ /**
311
+ * Decode a string with URL-safe Base64.
312
+ *
313
+ * @param string $input A Base64 encoded string
314
+ *
315
+ * @return string A decoded string
316
+ */
317
+ public static function urlsafeB64Decode( $input ) {
318
+ $remainder = strlen( $input ) % 4;
319
+ if ( $remainder ) {
320
+ $padlen = 4 - $remainder;
321
+ $input .= str_repeat( '=', $padlen );
322
+ }
323
+ return base64_decode( strtr( $input, '-_', '+/' ) );
324
+ }
325
 
326
+ /**
327
+ * Encode a string with URL-safe Base64.
328
+ *
329
+ * @param string $input The string you want encoded
330
+ *
331
+ * @return string The base64 encode of what you passed in
332
+ */
333
+ public static function urlsafeB64Encode( $input ) {
334
+ return str_replace( '=', '', strtr( base64_encode( $input ), '+/', '-_' ) );
335
+ }
 
 
 
 
 
 
 
 
 
 
 
 
336
 
337
+ /**
338
+ * He