{"id":15575,"date":"2023-02-02T07:34:13","date_gmt":"2023-02-02T12:34:13","guid":{"rendered":"https:\/\/stagingps.paradisosolutions.com\/blog\/?p=15575"},"modified":"2026-04-08T01:52:23","modified_gmt":"2026-04-08T06:52:23","slug":"best-self-hosted-lms-in-2023","status":"publish","type":"post","link":"https:\/\/stagingps.paradisosolutions.com\/blog\/best-self-hosted-lms-in-2023\/","title":{"rendered":"10 Best Self Hosted Learning Management Systems in 2023"},"content":{"rendered":"<p>[vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text]<\/p>\n<h2>What is Self Hosted LMS?<\/h2>\n<p>A self-hosted LMS (Learning Management System) is a computer programme that is set up and used on a server that belongs to the company or individual using it. With this kind of LMS, businesses may completely control how their e-learning resources and content are managed, customised, and used. When using a <a href=\"https:\/\/www.paradisosolutions.com\/self-hosted-lms\">self-hosted LMS in 2023,<\/a> the company is in charge of providing the system&#8217;s hardware, software, and technical support. This can involve activities like server upkeep, database administration, and software upgrades. In exchange, the company gains total control over the information, security, and functionality of their LMS, which they may tailor to suit their own requirements. [\/vc_column_text][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text]<\/p>\n<h2>The following are some Benefits of adopting a self-hosted LMS in 2023:<\/h2>\n<ul>\n<li>\n<h3>Organizations who desire to manage their own e-learning resources and material have various advantages when using a self-hosted LMS (Learning Management System).<\/h3>\n<\/li>\n<li>\n<h3>Total command over the security and privacy of data.<\/h3>\n<\/li>\n<li>\n<h3>Access to the source code for additional development and modification Options for branding, functionality, and content customisation.<\/h3>\n<\/li>\n<li>\n<h3>Ability to interface with other organisational systems and tools.<\/h3>\n<\/li>\n<li>\n<h3>No ongoing subscription costs or dependency on outside providers.<\/h3>\n<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.paradisosolutions.com\/self-hosted-lms\">Self-hosted LMS in 2023<\/a>, however, also has obligations and obstacles, including the requirement for technical know-how, server and network infrastructure, as well as continuing maintenance and support. Before making a choice, organisations should consider the advantages and drawbacks of a self-hosted LMS in light of their unique requirements and available resources. [\/vc_column_text][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text]<\/p>\n<h2>3 Tips For Choosing The Best Self-Hosted LMS in 2023 For Your Business<\/h2>\n<p>There are still a few things to think about if you have chosen to convert to a <a href=\"https:\/\/www.paradisosolutions.com\/self-hosted-lms\">self-hosted LMS<\/a> solution. Here are some suggestions to assist you in making a wiser (and safer) decision.<\/p>\n<h3>1. Try Before you Buy<\/h3>\n<p>An investment would be an LMS that allows self-hosting. You must conduct research and test drive your top options because of this. Check to see if the features and user interface are both worthwhile investments. Additionally, you can check to determine if the customer assistance is up to par. Does the LMS, for instance, have a vibrant user forum? Can you immediately reach the tech support staff to seek assistance with a problem? There are no restrictions on the free trials and demos that many <a href=\"https:\/\/www.paradisosolutions.com\/lms-vendor\/\">LMS providers<\/a> offer. Prior to making your purchase, make sure to establish a list of questions during the trial period and discuss them with the LMS seller. After you&#8217;ve signed on the dotted line, you don&#8217;t want to have a severe case of buyer&#8217;s remorse.<\/p>\n<h3>2. Make The Selection Process A Team Effort<\/h3>\n<p>The decision-making process for the <a href=\"https:\/\/www.paradisosolutions.com\/self-hosted-lms\">self hosted LMS<\/a> should involve every member of your team. especially those who plan to regularly create and set up online training resources using the technology. Invite them to evaluate the system and offer suggestions. Find out how they felt about the features in general and whether they thought they were beneficial. They may already have a few excellent picks of their own, so you may also ask for recommendations.<\/p>\n<h3>3. Set A Realistic Budget<\/h3>\n<p>It is true that a self-hosted LMS makes budgeting simpler. But you must make sure you include all costs, not simply the deposit. Consider the future upgrades, continuing maintenance, and content creation expenses you&#8217;ll incur. This will enable you to determine the cost of ownership as accurately as possible and prevent you from incurring long-term debt. To be able to sum everything up and select the best LMS for the money, ask the <a href=\"https:\/\/www.paradisosolutions.com\/lms-vendor\/\">LMS vendor<\/a> for a full estimate. [\/vc_column_text][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text]<\/p>\n<h2>5 Best Self Hosted Learning Management Systems in 2023<\/h2>\n<p>The finest <a href=\"https:\/\/www.paradisosolutions.com\/self-hosted-lms\">open-source self-hosted LMS<\/a>, as of my knowledge limit in 2023, is debatable and depends on the particular demands and specifications of each firm. However, the following are a few well-liked and highly rated open-source self-hosted LMS options:<\/p>\n<ul>\n<li>\n<h3>Paradiso LMS<\/h3>\n<\/li>\n<li>\n<h3>Moodle<\/h3>\n<\/li>\n<li>\n<h3>Chamilo<\/h3>\n<\/li>\n<li>\n<h3>Totara Learn<\/h3>\n<\/li>\n<li>\n<h3>Dokeos<\/h3>\n<\/li>\n<\/ul>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text]<\/p>\n<h2>1. Paradiso LMS<\/h2>\n<p>The reason <a href=\"https:\/\/www.paradisosolutions.com\/\">Paradiso LMS<\/a> is among the best self hosted LMS, at the top of the list of online learning platforms is that it provides a wide range of unique e-learning services to businesses all over the world. Our clients include well-known universities and major corporations. We develop cutting-edge, custom e-learning systems with your end users, or learners, in mind. Our solutions are built on a solid foundation of science and technology.<\/p>\n<p>Being the <a href=\"https:\/\/www.paradisosolutions.com\/self-hosted-lms\">best Self LMS in 2023<\/a>, our platform is highly strong and has many features and connectors, creating a comprehensive eLearning solution that meets the needs of institutions and enterprises.<\/p>\n<p><strong>Address-<\/strong><\/p>\n<p><strong>2810 N Church St PMB 73030,<\/strong><\/p>\n<p><strong>Wilmington, Delaware 19802,<\/strong><\/p>\n<p><strong>United States<\/strong><\/p>\n<p><strong>+1 800 513 5902<\/strong><\/p>\n<h2>2. Moodle<\/h2>\n<p>Moodle is an self hosted LMS that has been in use by schools, universities, and companies all around the world since 2002. It has many features, including tools for managing and <a href=\"https:\/\/www.paradisosolutions.com\/sell-courses-online\">creating courses<\/a>, <a href=\"https:\/\/www.paradisosolutions.com\/lms-gamification\">gamification<\/a>, assessments, and collaboration. The open-source self hosted LMS, Moodle, which is utilized by hundreds of millions of students worldwide, is at the centre of our ecosystem. Moodle LMS, which was created in collaboration with the community, is enhanced by Moodle Workplace, Moodle Apps, and a network of Certified Service Providers who offer expertise in hosting, customization, support, and training.<\/p>\n<p>Address-<\/p>\n<p>West Perth,<\/p>\n<p>Western Austrailia.<\/p>\n<h2>3. Chamilo<\/h2>\n<p>Chamilo is a free, self hosted and <a href=\"https:\/\/www.paradisosolutions.com\/blog\/top-8-open-source-learning-management-system\/\">open-source LMS<\/a> that offers robust features, including course management, assessment tools, and reporting. It has a clean and intuitive interface that makes it easy to create and manage online courses. The Chamilo Association is an international non-profit association which aims at promoting, improving and protecting the freedom (free software character) of the e-learning software Chamilo. Managed by a intercontinental voluntary board of directors, it coordinates the efforts of the different actors around the Chamilo software projects in order to maximize efficiency and the benefits to the public community.<\/p>\n<p>Address-<\/p>\n<p>Lugo, Galicia.<\/p>\n<h2>4. Totara Learn<\/h2>\n<p>Totara is rapidly transforming the learning technology software market. Totara\u2019s products are highly flexible and bring powerful freedoms to all organizations with formal and informal learning needs, both within the workplace and the extended enterprise. Totara Learn is an enterprise-level LMS that can be heavily customised and is based on the Moodle framework. Performance management, compliance reporting, and a flexible foundation for custom development are among its advantages.<\/p>\n<p>Address-<\/p>\n<p>Brighton, England.<\/p>\n<h2>5. Dokeos<\/h2>\n<p>Dokeos LMS provides Self hosted Learning Management Systems for high-consequence industries such as pharmaceutical, healthcare, manufacturing, financial services and training centers. Our ability to customize our services to our clients needs made our success. Dokeos is a free and <a href=\"https:\/\/www.paradisosolutions.com\/self-hosted-lms\">Self hosted LMS in 2023<\/a> that provides a variety of capabilities for creating and managing courses, conducting assessments, and producing reports. With a variety of plugins and themes available to increase its capabilities, it is made to be flexible and adaptable.<\/p>\n<p>Address-<\/p>\n<p>Paris, Paris.<\/p>\n<p>[\/vc_column_text][vc_column_text]<\/p>\n<h2>Maximizing User Experience: Integrating Paradiso AI into Your Self-Hosted LMS in 2023.<\/h2>\n<p>In order to improve the user experience, <a href=\"https:\/\/www.paradiso.ai\/text-to-speech-converter\/\">Paradiso AI<\/a>, a platform that offers conversational AI services, can be integrated into a self-hosted learning management system (LMS). The integration would enable the LMS to provide automatic content generation and interactions with users in natural language. This could include functions like responding to frequently asked questions, directing users throughout the platform, making tailored course recommendations, and more. Setting up the required infrastructure and APIs to link the LMS with the Paradiso AI platform would be part of the integration process. [\/vc_column_text][vc_empty_space height=&#8221;20px&#8221;][vc_column_text]    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n            line-height: 1.6;\n            color: #1f2937;\n            background: #f9fafb;\n        }\n\n        html {\n            scroll-behavior: smooth;\n        }\n\n        .loader-container {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            min-height: 100vh;\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n        }\n\n        .loader {\n            border: 4px solid rgba(255, 255, 255, 0.3);\n            border-top: 4px solid #ffffff;\n            border-radius: 50%;\n            width: 48px;\n            height: 48px;\n            animation: spin 1s linear infinite;\n        }\n\n        @keyframes spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n\n        .error-container {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            min-height: 100vh;\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n        }\n\n        .error-box {\n            background: #fef2f2;\n            border: 1px solid #fecaca;\n            border-radius: 8px;\n            padding: 24px;\n            text-align: center;\n            color: #991b1b;\n        }\n\n        .hero {\n            display: none;\n        }\n\n        .container {\n            margin-bottom:-35px;\n            max-width: 1280px;\n            \/*margin: 0 auto;*\/\n            \/*padding:25px 16px;*\/\n            background: #f9fafb;\n            \/*min-height: 100vh;*\/\n        }\n\n        .pricing-grid {\n            display: none;\n        }\n\n        .calculator {\n            background: white;\n            border-radius: 24px;\n            overflow: hidden;\n            box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n            margin-bottom: 64px;\n            max-width: 1250px;\n        }\n\n        .calculator-header {\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n            padding: 40px 48px;\n            color: white;\n            text-align: left;\n        }\n\n        .calculator-header h2 {\n            font-size: 2rem;\n            font-weight: 700;\n            margin-bottom: 8px;\n            letter-spacing: -0.025em;\n        }\n\n        .calculator-subtitle {\n            font-size: 1rem;\n            color: rgba(255, 255, 255, 0.9);\n            font-weight: 400;\n        }\n\n        .calculator-controls {\n            padding: 48px;\n            display: flex;\n            justify-content: space-between;\n            align-items: flex-end;\n            gap: 48px;\n            background: #fafbfc;\n        }\n\n        .form-group {\n            flex: 1;\n            min-width: 250px;\n        }\n\n        .form-group label {\n            display: block;\n            font-size: 1rem;\n            font-weight: 600;\n            color: #374151;\n            margin-bottom: 12px;\n        }\n\n        .form-input, .form-select {\n            width: 100%;\n            padding: 16px 20px;\n            border: 2px solid #e1e5e9;\n            border-radius: 12px;\n            font-size: 1.125rem;\n            font-weight: 600;\n            color: #1f2937;\n            transition: all 0.3s ease;\n            background: white;\n            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n        }\n\n        .form-input:focus, .form-select:focus {\n            outline: none;\n            border-color: #00b8fa;\n            box-shadow: 0 0 0 4px rgba(0, 184, 250, 0.1), 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n            transform: translateY(-1px);\n        }\n\n        \/* Billing Cycle Toggle Styles *\/\n        .billing-toggle-container {\n            display: flex;\n            align-items: center;\n            background: #f8fafc;\n            border: 2px solid #e1e5e9;\n            border-radius: 50px;\n            padding: 4px;\n            position: relative;\n            width: fit-content;\n            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n        }\n\n        .billing-toggle-option {\n            position: relative;\n            padding: 12px 24px;\n            border-radius: 40px;\n            font-size: 1rem;\n            font-weight: 600;\n            cursor: pointer;\n            transition: all 0.3s ease;\n            z-index: 2;\n            min-width: 90px;\n            text-align: center;\n            color: #64748b;\n        }\n\n        .billing-toggle-option.active {\n            color: #ffffff;\n        }\n\n        .billing-toggle-slider {\n            position: absolute;\n            top: 4px;\n            left: 4px;\n            bottom: 4px;\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n            border-radius: 40px;\n            transition: all 0.3s ease;\n            z-index: 1;\n            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n        }\n\n        .billing-toggle-save {\n            margin-left: 16px;\n            padding: 8px 16px;\n            background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n            color: white;\n            border-radius: 24px;\n            font-size: 0.875rem;\n            font-weight: 600;\n            transition: opacity 0.3s ease;\n            box-shadow: 0 2px 4px rgba(16, 185, 129, 0.3);\n        }\n\n        .billing-toggle-save.faded {\n            opacity: 0.4;\n        }\n\n        .billing-cycle-wrapper {\n            display: flex;\n            align-items: center;\n            justify-content: flex-start;\n            gap: 12px;\n        }\n\n        .calculator-results {\n            padding: 0 48px 48px;\n            display: flex;\n            gap: 32px;\n            width: 100%;\n        }\n\n        @media (max-width: 1024px) {\n            .calculator-controls {\n                flex-direction: column;\n                gap: 32px;\n                align-items: stretch;\n            }\n            \n            .billing-cycle-wrapper {\n                justify-content: center;\n            }\n        }\n\n        @media (max-width: 768px) {\n            .calculator {\n                margin: 0 16px 48px;\n                border-radius: 20px;\n            }\n            \n            .calculator-header {\n                padding: 32px 24px;\n                text-align: center;\n            }\n            \n            .calculator-header h2 {\n                font-size: 1.75rem;\n            }\n            \n            .calculator-controls {\n                padding: 32px 24px;\n            }\n            \n            .calculator-results {\n                flex-direction: column;\n                padding: 0 24px 32px;\n                gap: 24px;\n            }\n            \n            .result-card {\n                padding: 24px;\n            }\n            \n            .result-price-value {\n                font-size: 2rem;\n            }\n        }\n\n        .result-card {\n            background: white;\n            border: 2px solid #e1e5e9;\n            border-radius: 20px;\n            padding: 32px;\n            transition: all 0.3s ease;\n            flex: 1;\n            min-width: 0;\n            max-width: none;\n            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n            position: relative;\n            overflow: hidden;\n        }\n\n        .result-card:hover {\n            border-color: #00b8fa;\n            box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n            transform: translateY(-2px);\n        }\n\n        .result-card.selected-plan {\n            border-color: #00b8fa;\n            box-shadow: 0 20px 25px -5px rgba(0, 184, 250, 0.2), 0 10px 10px -5px rgba(0, 184, 250, 0.1);\n        }\n\n        .result-card h3 {\n            font-size: 1.5rem;\n            font-weight: 700;\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n            background-clip: text;\n            margin-bottom: 20px;\n        }\n\n        .result-price {\n        justify-content: center;\n            display: flex;\n            align-items: baseline;\n            margin-bottom: 8px;\n        }\n\n        .result-price-currency {\n            font-size: 1.5rem;\n            font-weight: 600;\n            color: #64748b;\n            margin-right: 2px;\n        }\n\n        .result-price-value {\n            font-size: 3rem;\n            font-weight: 800;\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n            background-clip: text;\n            line-height: 1;\n        }\n\n        .result-price-period {\n            margin-left: 8px;\n            color: #64748b;\n            font-size: 1.125rem;\n            font-weight: 500;\n        }\n\n        .result-yearly-total {\n            font-size: 1.3rem;\n            color: #00b8fa;\n            font-weight: 600;\n            margin-top: 4px;\n            margin-bottom: 8px;\n            display: none !important;\n        }\n\n        .billing-note {\n            font-size: 0.875rem;\n            color: #64748b;\n            font-weight: 500;\n            margin-top: 4px;\n            margin-bottom: 16px;\n        }\n\n        .result-breakdown {\n            background: #f8fafc;\n            border-radius: 12px;\n            padding: 20px;\n            border: 1px solid #e1e5e9;\n        }\n\n        .breakdown-label {\n            font-size: 0.875rem;\n            font-weight: 700;\n            text-transform: uppercase;\n            letter-spacing: 0.1em;\n            color: #64748b;\n            margin-bottom: 12px;\n        }\n\n        .breakdown-text {\n            font-size: 1rem;\n            color: #374151;\n            margin-bottom: 16px;\n            padding-bottom: 16px;\n            border-bottom: 1px solid #e1e5e9;\n            font-weight: 500;\n        }\n\n        .breakdown-per-user {\n            font-size: 1rem;\n            font-weight: 600;\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n            background-clip: text;\n        }\n\n        .calculator-note {\n            margin: 24px auto;\n            padding: 16px;\n            background: rgba(0, 184, 250, 0.1);\n            border-radius: 8px;\n            text-align: center;\n            font-size: 0.875rem;\n            color: #00b8fa;\n            max-width: 1280px;\n        }\n\n        .calculator-note a {\n            color: #00b8fa;\n            font-weight: 700;\n            text-decoration: underline;\n        }\n\n        .section-title {\n            text-align: center;\n            font-size: 1.875rem;\n            font-weight: 700;\n            color: #1f2937;\n            margin-bottom: 32px;\n        }\n\n        .section-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 32px;\n            flex-wrap: wrap;\n            gap: 16px;\n        }\n\n        .header-buttons {\n            display: flex;\n            gap: 12px;\n            align-items: center;\n        }\n\n        .contact-sales-btn {\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n            color: white;\n            padding: 14px 28px;\n            border-radius: 8px;\n            font-weight: 600;\n            text-decoration: none;\n            display: inline-block;\n            transition: all 0.3s;\n            border: none;\n            cursor: pointer;\n            font-size: 1rem;\n            line-height: 1.2;\n        }\n\n        .contact-sales-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 4px 12px rgba(0, 184, 250, 0.3);\n        }\n\n        .calculator-cta-btn {\n            background: white;\n            color: #00b8fa;\n            padding: 14px 28px;\n            border-radius: 8px;\n            font-weight: 600;\n            text-decoration: none;\n            display: inline-block;\n            transition: all 0.3s;\n            border: 2px solid #00b8fa;\n            cursor: pointer;\n            font-size: 1rem;\n            line-height: 1.2;\n        }\n\n        .calculator-cta-btn:hover {\n            background: rgba(0, 184, 250, 0.1);\n            transform: translateY(-2px);\n        }\n\n        .tier-cta-btn {\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n            color: white;\n            padding: 10px 20px;\n            border-radius: 6px;\n            font-weight: 600;\n            font-size: 0.875rem;\n            text-decoration: none;\n            display: inline-block;\n            transition: all 0.3s;\n            border: none;\n            cursor: pointer;\n        }\n\n        .tier-cta-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 4px 12px rgba(0, 184, 250, 0.3);\n        }\n\n        .tier-header-cell {\n            text-align: center;\n        }\n\n        .tier-header-content {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 8px;\n        }\n\n        .comparison-table-container {\n            background: white;\n            border: 1px solid #e5e7eb;\n            border-radius: 12px;\n            overflow: hidden;\n            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n            overflow-x: auto;\n        }\n\n        .comparison-table {\n            width: 100%;\n            border-collapse: collapse;\n            table-layout: fixed;\n        }\n\n        .comparison-table th,\n        .comparison-table td {\n            padding: 16px 24px;\n            text-align: left;\n        }\n\n        .comparison-table thead {\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n        }\n\n        .comparison-table thead th {\n            color: white;\n            font-size: 0.875rem;\n            font-weight: 700;\n            text-transform: uppercase;\n            letter-spacing: 0.05em;\n            border-left: 1px solid rgba(255, 255, 255, 0.2);\n        }\n\n        .comparison-table thead th:first-child {\n            border-left: none;\n        }\n\n        .category-header {\n            background: linear-gradient(to right, rgba(0, 184, 250, 0.1), rgba(0, 212, 137, 0.1));\n            font-size: 0.875rem;\n            font-weight: 700;\n            text-transform: uppercase;\n            letter-spacing: 0.05em;\n            color: #00b8fa;\n            cursor: pointer;\n            user-select: none;\n            transition: background 0.2s;\n        }\n\n        .category-header:hover {\n            background: linear-gradient(to right, rgba(0, 184, 250, 0.15), rgba(0, 212, 137, 0.15));\n        }\n\n        .category-header td {\n            position: relative;\n        }\n\n        .category-toggle {\n            margin-right: 8px;\n            display: inline-block;\n            transition: transform 0.3s;\n        }\n\n        .category-collapsed .category-toggle {\n            transform: rotate(-90deg);\n        }\n\n        .category-features {\n            display: table-row-group;\n        }\n\n        .category-features.hidden {\n            display: none;\n        }\n\n        .feature-row {\n            border-bottom: 1px solid #f3f4f6;\n            transition: background-color 0.2s;\n        }\n\n        .feature-row:hover {\n            background-color: rgba(0, 184, 250, 0.05);\n        }\n\n        .feature-row:nth-child(even) {\n            background-color: rgba(249, 250, 251, 0.3);\n        }\n\n        .feature-name {\n            font-size: 0.875rem;\n            font-weight: 500;\n            color: #1f2937;\n        }\n\n        .feature-value {\n            border-left: 1px solid #e5e7eb;\n            text-align: center;\n            font-size: 0.875rem;\n            color: #1f2937;\n        }\n\n        .check-icon {\n            color: #16a34a;\n            font-size: 1.25rem;\n        }\n\n        .x-icon {\n            color: #d1d5db;\n            font-size: 1.25rem;\n        }\n\n        .footer-note {\n            margin-top: 64px;\n            padding: 32px;\n            text-align: center;\n            color: #6b7280;\n            font-size: 0.875rem;\n            border-top: 1px solid #e5e7eb;\n        }\n\n        .footer-note a {\n            color: #00b8fa;\n            text-decoration: none;\n            font-weight: 600;\n        }\n\n        .footer-note a:hover {\n            text-decoration: underline;\n        }\n\n        .hidden {\n            display: none;\n        }\n\n        \/* Get Started Button *\/\n        .get-started-btn {\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n            color: white;\n            padding: 16px 32px;\n            border-radius: 8px;\n            font-weight: 700;\n            font-size: 1.1rem;\n            text-decoration: none;\n            display: block;\n            transition: all 0.3s;\n            border: none;\n            cursor: pointer;\n            margin: 32px auto;\n            text-align: center;\n            min-width: 200px;\n            box-shadow: 0 4px 15px rgba(0, 184, 250, 0.3);\n        }\n\n        .get-started-btn:hover {\n            transform: translateY(-3px);\n            box-shadow: 0 8px 25px rgba(0, 184, 250, 0.4);\n        }\n\n        .get-started-btn:disabled {\n            opacity: 0.6;\n            cursor: not-allowed;\n            transform: none;\n        }\n\n        .loading-spinner {\n            border: 2px solid transparent;\n            border-top: 2px solid #ffffff;\n            border-radius: 50%;\n            width: 16px;\n            height: 16px;\n            animation: spin 1s linear infinite;\n            display: inline-block;\n            margin-right: 8px;\n        }\n\n        @keyframes spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n\n        \/* Success Popup Modal *\/\n        .success-modal-overlay {\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.5);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            z-index: 2000;\n            opacity: 0;\n            visibility: hidden;\n            transition: all 0.3s ease;\n        }\n\n        .success-modal-overlay.show {\n            opacity: 1;\n            visibility: visible;\n        }\n\n        .success-modal {\n            background: white;\n            border-radius: 16px;\n            padding: 0;\n            width: 90%;\n            max-width: 500px;\n            text-align: center;\n            box-shadow: 0 20px 60px rgba(0, 184, 250, 0.3);\n            transform: scale(0.7) translateY(50px);\n            transition: all 0.3s ease;\n            overflow: hidden;\n        }\n\n        .success-modal-overlay.show .success-modal {\n            transform: scale(1) translateY(0);\n        }\n\n        .success-modal-header {\n            background: linear-gradient(135deg, #10b981 0%, #00d489 100%);\n            color: white;\n            padding: 32px 24px;\n            position: relative;\n        }\n\n        .success-icon {\n            width: 80px;\n            height: 80px;\n            background: rgba(255, 255, 255, 0.2);\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin: 0 auto 16px;\n            font-size: 40px;\n            animation: successBounce 0.6s ease 0.3s both;\n        }\n\n        @keyframes successBounce {\n            0% { transform: scale(0); }\n            50% { transform: scale(1.2); }\n            100% { transform: scale(1); }\n        }\n\n        .success-modal h2 {\n            margin: 0 0 8px 0;\n            font-size: 1.5rem;\n            font-weight: 700;\n        }\n\n        .success-modal-subtitle {\n            margin: 0;\n            opacity: 0.9;\n            font-size: 1rem;\n        }\n\n        .success-modal-body {\n            padding: 32px 24px 24px;\n        }\n\n        .success-details {\n            background: #f8fffe;\n            border: 1px solid #d1fae5;\n            border-radius: 12px;\n            padding: 20px;\n            margin-bottom: 24px;\n            text-align: left;\n        }\n\n        .success-detail-item {\n            display: flex;\n            justify-content: space-between;\n            margin-bottom: 8px;\n            font-size: 0.9rem;\n        }\n\n        .success-detail-item:last-child {\n            margin-bottom: 0;\n        }\n\n        .success-detail-label {\n            color: #6b7280;\n            font-weight: 500;\n        }\n\n        .success-detail-value {\n            color: #374151;\n            font-weight: 600;\n        }\n\n        .success-next-steps {\n            background: #fef3f2;\n            border: 1px solid #fecaca;\n            border-radius: 8px;\n            padding: 16px;\n            margin-bottom: 24px;\n        }\n\n        .success-next-steps h4 {\n            margin: 0 0 8px 0;\n            color: #dc2626;\n            font-size: 0.9rem;\n            font-weight: 600;\n        }\n\n        .success-next-steps p {\n            margin: 0;\n            color: #7f1d1d;\n            font-size: 0.85rem;\n            line-height: 1.4;\n        }\n\n        .success-modal-actions {\n            display: flex;\n            gap: 12px;\n            justify-content: center;\n        }\n\n        .success-btn {\n            background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n            color: white;\n            padding: 12px 24px;\n            border-radius: 8px;\n            font-weight: 600;\n            font-size: 0.9rem;\n            border: none;\n            cursor: pointer;\n            transition: all 0.3s;\n            text-decoration: none;\n        }\n\n        .success-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 4px 15px rgba(0, 184, 250, 0.3);\n        }\n\n        .success-btn-secondary {\n            background: #f3f4f6;\n            color: #374151;\n            padding: 12px 24px;\n            border-radius: 8px;\n            font-weight: 600;\n            font-size: 0.9rem;\n            border: none;\n            cursor: pointer;\n            transition: all 0.3s;\n        }\n\n        .success-btn-secondary:hover {\n            background: #e5e7eb;\n        }\n        #app {\n            display: none;\n        }\n        .pricing-sec-border {\n            position: relative;\n            padding: 5px;\n            background: linear-gradient(90deg, #1565c0, #1e88e5, #039be5, #00acc1, #00bfa5, #00acc1, #039be5, #1e88e5, #1565c0);\n            background-size: 400% 100%;\n            animation: gradientShimmer 8s \n            linear infinite;\n            border-radius: 20px;\n            box-shadow: 0 10px 40px rgb(21 101 192 \/ .3), 0 0 60px rgb(0 188 212 \/ .25), 0 5px 15px rgb(0 191 165 \/ .2);\n            margin: 20px 0px 30px 0px;\n        }\n        p.bestlms_para_16 {\n            font-size: 18px;\n            font-weight: 500;\n            line-height: 25px;\n        }\n        \n        .bracket-section {\n            position: relative;\n            height: 1rem;\n            margin: auto;\n            width: 79%;\n        }\n\n        \/* FIXED: Bracket exactly under 0\u201350 area *\/\n        .bracket-svg {\n            position: absolute;\n            left: 0;\n            width: 10%;\n            height: 25px;\n            top: 0;\n        }\n\n        .free-label {\n            position: absolute;\n            left: 0;\n            width: 10%;\n            top: 20px;\n            display: flex;\n            justify-content: center;\n        }\n        .free-badge {\n            padding: 0.25rem 0.5rem;\n            \/*background-color: #facc15;*\/\n            border-radius: 4px;\n            font-size: 12px;\n            font-weight: 600;\n        }\n        @media screen and (max-width:768px) {\n            .free-label, .bracket-section {\n                display: none !important;\n            }\n        }\n\t\t \/* Range Slider Container *\/\n        .slider-wrapper {\n            position: relative;\n            width: 100%;\n            padding: 1rem 0 0rem;\n        }\n\n        \/* Scale marks above slider *\/\n        .scale-container {\n            position: relative;\n            width: 79%;\n            height: 1.5rem;\n            margin: 5px auto 0px;\n            border-bottom: 0px solid #00d5a8;\n        }\n\n        .tick-major {\n            position: absolute;\n            width: 2px;\n            height: 1rem;\n            background: #00d5a8;\n            bottom: 0;\n        }\n\n        .tick-minor {\n            position: absolute;\n            width: 0px;\n            height: 0rem;\n            background: #1f2937;\n            bottom: 0;\n        }\n\n        .tick-label {\n            position: absolute;\n            bottom: 100%;\n            left: 50%;\n            transform: translateX(-50%);\n            font-size: 0.75rem;\n            color: #1f2937;\n            padding-bottom: 0.25rem;\n            font-weight: 500;\n        }\n\/* General styling (unchanged except range labels updated) *\/\n.month_price_hide { display: none; }\n.pricingcal_main_sec {\n    padding: 10px 0px 0px !important;\n    background-image: unset !important;\n    background-position: center;\n    background-size: 100% 100%;\n    background-repeat: no-repeat;\n    text-align: center;\n    max-width: 60%;\n    border-radius: 20px;\n    margin: 0px auto;\n}\n.pricingcal_pricingsec {\n    \/*border: 1px solid #000000;*\/\n    border-radius: 15px;\n    margin: 0px;\n    padding: 20px;\n    background-color: #ffffff;\n}\n.pricingcal_h3_34 {\n    font-weight: 600;\n    font-size: 28px;\n    line-height: 35px;\n    color: #000000;\n}\n\/* Slider Styling *\/\ninput[type=range] {\n    -webkit-appearance: none;\n    width: 80%;\n    margin-bottom: 10px;\n}\ninput[type=range]:focus { outline: none; }\ninput[type=range]::-webkit-slider-runnable-track {\n    width: 100%;\n    height: 10px;\n    cursor: pointer;\n    background: #00D5A8;\n    border-radius: 25px;\n    transition: background 0.1s ease;\n}\ninput[type=range]::-webkit-slider-thumb {\n    border: 10px solid #00D5A8;\n    height: 30px;\n    width: 30px;\n    border-radius: 20px;\n    background: #00D5A8;\n    cursor: pointer;\n    -webkit-appearance: none;\n    margin-top: -10px;\n    transition: border 0.1s ease;\n    box-shadow: 0px 11px 27px -12px rgba(145, 94, 31, 1);\n}\n\n\tinput[type=range]::-moz-range-track {\n\t  width: 100%;\n\t  height: 3px;\n\t  \/*border-top: 1px solid #b99400;*\/\n\t  \/*border-bottom: 2px solid #ffd631;*\/\n\t  cursor: pointer;\n\t  animate: 0.2s;\n\t  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n\t  background: #007aff;\n\t  border-radius: 25px;\n\t  \/*border: 0px solid #000101;*\/\n\t  transition: background 0.1s;\n\t}\n\t\n\tinput[type=range]::-moz-range-thumb {\n\t  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n\t  border: 3px solid #007aff;\n\t  height: 30px;\n\t  width: 30px;\n\t  border-radius: 30px;\n\t  background: #00D5A8;\n\t  cursor: pointer;\n\t  -webkit-appearance: none;\n\t  margin-top: 0px;\n\t  transition: border 0.1s ease;\n\t}\n\t\n\tinput[type=range]::-ms-track {\n\t  width: 100%;\n\t  height: 3px;\n\t  \/*border-top: 1px solid #b99400;*\/\n\t  \/*border-bottom: 2px solid #ffd631;*\/\n\t  cursor: pointer;\n\t  animate: 0.2s;\n\t  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n\t  background: #007aff;\n\t  border-radius: 25px;\n\t  \/*border: 0px solid #000101;*\/\n\t  transition: background 0.2s ease;\n\t}\n\t\n\tinput[type=range]::-ms-fill-lower {\n\t  background: #ac51b5;\n\t  border: 0px solid #000101;\n\t  border-radius: 50px;\n\t  box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;\n\t}\n\t\n\tinput[type=range]::-ms-fill-upper {\n\t  background: #ac51b5;\n\t  border: 0px solid #000101;\n\t  border-radius: 50px;\n\t  box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;\n\t}\n\t\n\tinput[type=range]::-ms-thumb {\n\t  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n\t  border: 3px solid #007aff;\n\t  height: 30px;\n\t  width: 30px;\n\t  border-radius: 30px;\n\t  background: #fff;\n\t  cursor: pointer;\n\t  -webkit-appearance: none;\n\t  margin-top: -14px;\n\t  transition: border 0.1s;\n\t}\n\t\n\tinput[type=range]:focus::-ms-fill-lower {\n\t  background: #ac51b5;\n\t}\n\t\n\tinput[type=range]:focus::-ms-fill-upper {\n\t  background: #ac51b5;\n\t}\n\t\n\tinput[type=range]:hover::-webkit-slider-runnable-track {\n\t  background: #00D5A8;\n\t}\n\t\n\tinput[type=range]:hover::-webkit-slider-thumb {\n\t  \/*background: #fff;*\/\n\t  border-color: #00D5A8;\n\t  -webkit-box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n\t  -moz-box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n\t  box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n\t}\n\t\n\tinput[type=range]:active::-webkit-slider-runnable-track {\n\t  background: #00D5A8;\n\t}\n\t\n\tinput[type=range]:active::-webkit-slider-thumb {\n\t  \/*background: #fff;*\/\n\t  border-color: #00D5A8;\n\t  -webkit-box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n\t  -moz-box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n\t  box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n\t}\n\t\n\tinput[type=range]:hover::-moz-range-track {\n\t  background: #e52e5e;\n\t}\n\t\n\tinput[type=range]:hover::-moz-range-thumb {\n\t  background: #fff;\n\t  border-color: #e52e5e;\n\t}\n\t\n\tinput[type=range]:active::-moz-range-track {\n\t  background: #e52e5e;\n\t}\n\t\n\tinput[type=range]:active::-moz-range-thumb {\n\t  background: #fff;\n\t  border-color: #e52e5e;\n\t}\n\t\n\t\n\ta.webwatchnowbtn1 {\n\t\tbackground-color: #00b7ff;\n\t\tfont-family: 'poppins', sans-serif !important;\n\t\tfont-size: 18px;\n\t\tline-height: 24px;\n\t\tfont-weight: 500;\n\t\tfont-style: normal;\n\t\tmax-width: 200px;\n\t\tletter-spacing: 0px;\n\t\/*    padding: 12px 24px 7px 24px;*\/\n\t\tcolor: #ffffff !important;\n\t\tborder-radius: 5px;\n\t\tborder-color: #00b7ff;\n\t\tbackground-image: linear-gradient(90deg,#00b7ff,#00d488);\n\t\tbackground-image: unset !important;\n\t\ttext-transform: uppercase;\n\t\ttext-decoration: none;\n\t\tcursor: pointer;\n\t\toutline: 0;\n\t\ttext-align: center;\n\t\tdisplay: block;\n\t\tmargin: auto;\n\t\ttransition: transform .2s;\n\t}\n\ta.webwatchnowbtn11, a.enterprice_btn {\n\t\tbackground-image: linear-gradient(90deg,#00b7ff,#00d488);\n\t\tfont-family: 'poppins', sans-serif !important;\n\t\tfont-size: 16px;\n\t\tline-height: 24px;\n\t\tfont-weight: 500;\n\t\tfont-style: normal;\n\t\tmax-width: 200px;\n\t\tletter-spacing: 0px;\n\t\tpadding: 12px 24px;\n\t\tcolor: #ffffff !important;\n\t\tborder-radius: 5px;\n\t\tborder-color: #00b7ff;\n\t\ttext-transform: capitalize;\n\t\ttext-decoration: none;\n\t\tcursor: pointer;\n\t\toutline: 0;\n\t\ttext-align: center;\n\t\tdisplay: block;\n\t\tmargin: auto;\n\t\ttransition: transform .2s;\n\t}\n\ta.webwatchnowbtn11:hover, a.enterprice_btn:hover {\n\t\tbackground-image: linear-gradient(90deg, #00d488, #00b7ff);\n\t\tcolor: #ffffff !important;\n\t\t-webkit-box-shadow: 1px 1px 10px #333;\n\t\t-moz-box-shadow: 1px 1px 10px #333;\n\t\tbox-shadow: 1px 1px 10px #333;\n\t\t-ms-transform: scale(1.1);\n\t\t-webkit-transform: scale(1.1);\n\t\ttransform: scale(1.1);\n\t}\n\ta.webwatchnowbtn1:hover {\n\t\tbackground-image: linear-gradient(90deg, #00b7ff, #00d488) !important;\n\t\t-ms-transform: scale(1.1);\n\t\t-webkit-transform: scale(1.1);\n\t\ttransform: scale(1.1);\n\t}\n    .book_demo_btn a.webwatchnowbtn11 {\n        margin-top: -22px !important;\n        margin-bottom: 0px !important;\n        \/* padding-top: 0px !important; *\/\n    }\n\tspan.pricingcal_span_1 {\n\t\tmargin: 0 5px 0 0;\n\t}\n\tspan.pricingcal_span_2 {\n\t\tmargin: 0 0 0 5px;\n\t}\n\t@media only screen and (max-width: 1023px){\n\t\t.pricingcal_main_sec {\n\t\t\tmax-width: 100%;\n\t\t}\n\t\t.pricingcal_pricingsec {\n\t\t\tmargin: 20px 0px 40px;\n\t\t}\n\t}\n\t@media only screen and (max-width: 700px){\n\t.pricingcal_main_sec {\n\t\tpadding: 20px;\n\t\tmax-width: 100%;\n\t}\n\tspan.item-type.item-type-active {\n\t\tpadding: 12px;\n\t\tfont-size: 12px;\n\t\twidth: 140px;\n\t}\n\ta.webwatchnowbtn11, a.enterprice_btn {\n\t\tfont-size: 14px;\n\t}\n\t}\n\t@media only screen and (max-width: 420px){\n\tinput[type=range] {\n\t\twidth: 100%;\n\t}\n\t}\n\tdiv.pum-container {\n\t\tborder-radius: 15px !important;\n\t\tpadding: 20px;\n\t}\n\t.pum-container button.pum-close.popmake-close {\n\t\t    background-color: #e24c4b !important;\n    color: #ffffff !important;\n    font-size: 16px !important;\n    font-weight: 700;\n    width: 30px;\n    right: 5px !important;\n    top: 5px !important;\n    left: auto !important;\n    border-radius: 30px;\n    line-height: 16px;\n\t}\n\n.ps_form_design-div {\n    padding: 20px;\n    \/* background: #fff; *\/\n    border-radius: 10px;\n    position: relative;\n    max-width: 600px;\n    width: 100%;\n    max-height: 90vh;\n    top: 20px;\n    overflow-y: auto;\n    box-sizing: border-box;\n}\n\n.pum-container {\n  max-width: 600px;\n  margin: 40px auto;\n  background: #ffffff;\n  padding: 30px;\n  box-shadow: 0 5px 20px rgba(0,0,0,0.3);\n}\n\n.pum-close.popmake-close {\n  position: absolute;\n  right: 10px;\n  top: 10px;\n  background: #e24c4b;\n  color: white;\n  font-size: 20px;\n  border: none;\n  border-radius: 50%;\n  cursor: pointer;\n}\n.range-labels span { margin: 0 10px; font-weight: bold; }\n\/* Popup *\/\n.popup {\n  display: none;\n  position: fixed;\n  top: 0; left: 0; right: 0; bottom: 0;\n  background: rgba(0,0,0,0.5);\n  justify-content: center;\n  align-items: center;\n  z-index: 9999;\n}\n.popup-content { position: relative; max-width: 500px; width: 90%; }\n.popup .close {\n  position: absolute;\n  top: 15px; right: 10px;\n  font-size: 24px;\n  cursor: pointer;\n    font-size: 24px;\n    background: #00b0fc;\n    color: #fff;\n    padding: 3px 12px 4px !important;\n    border-radius: 50%;\n    line-height: 30px !important;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);\n}\n.range-labels span:nth-child(2) {\n\tleft: calc(24% - 18px) !important;\n}\n\n.range-labels span:nth-child(3) {\n\tleft: calc(45% - 18px) !important;\n}\n\n.range-labels span:nth-child(4) {\n\tleft: calc(70% - 18px) !important;\n}\n\n.range-labels span:nth-child(5) {\n\tleft: calc(90% - 19px) !important;\n}\n.popup {\n  display: none;\n  position: fixed;\n  top: 0; left: 0; right: 0; bottom: 0;\n  background: rgba(0,0,0,0.5);\n  justify-content: center;\n  align-items: center;\n  z-index: 9999;\n}\n\n.popup-content {\n  \/*background: #fff;\n  padding: 20px;\n  border-radius: 10px;*\/\n  position: relative;\n  max-width: 500px;\n  width: 90%;\n}\n\n.popup .close {\n  position: absolute;\n  top: 15px; right: 10px;\n  font-size: 24px;\n  cursor: pointer;\n}\ntextarea.wpcf7-form-control.wpcf7-textarea {\n    font-weight: 700 !important;\n    opacity: 1;\n    font-family: 'poppins' !important;\n    padding-left: 5px;\n    border-radius: 0px !important;\n    margin-bottom: 10px;\n    background: #ffffff00;\n    font-weight: 500 !important;\n    color: #1E1E1E !important;\n    border-bottom: 2px solid transparent !important;\n    -moz-border-image: -moz-linear-gradient(left, #00B282 0%, #11987300 100%);\n    -webkit-border-image: -webkit-linear-gradient(left, #00B282 50%, #11987300 100%) !important;\n    border-image: linear-gradient(to right, #00B282 0%, #11987300 100%) !important;\n    border-image-slice: 1 !important;\n    box-sizing: border-box !important;\n    border-width: 0px 0px 3px 0px !important;\n}\n\n\/* pricing calculator css by rupesh on 3 May 2024 Start *\/\n#hiigreetings{\n    color : #00d5a8;\n}\n.month_price_btn.month_price.book_demo_btn {\n    padding-top: 21px;\n    display: none !important;\n}\n.pricingcal_main_sec {\n    padding: 25px;\n     background-image: url(\/wp-content\/uploads\/2024\/02\/pricing-cal-sec-bg.png); \n     background-position: center; \n     background-size: 100% 100%; \n     background-repeat: no-repeat; \n    text-align: center;\n    max-width: 100%;\n    background-color: #ffffff00;\n    border-radius: 10px;\n}\n.pricingcal_pricingsec {\n    \/*border: 1px solid #000000;*\/\n    border-radius: 15px;\n    margin: 0px;\n    padding: 20px;\n}\nspan.item-type.item-type-active {\n    background-color: #e7f7f6;\n    color: #000;\n    border-radius: 20px;\n    padding: 5px 15px;\n    position: absolute;\n    top: -40px;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    box-shadow: 0px 5px 10px 5px #74747447;\n}\n.pricingcal_h3_34{\n    font-weight: 600;\n    font-size: 28px;\n    line-height: 35px;\n    color: #000000;\n}\n\n\n\/*SLIDER RANGE*\/\n\ninput[type=range] {\n  -webkit-appearance: none;\n  \/*margin: 0 auto;*\/\n  margin-bottom: 10px;\n  width: 80%;\n}\n\ninput[type=range]:focus {\n  outline: none;\n}\n\ninput[type=range]::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 10px;\n  \/*border-top: 1px solid #b99400;*\/\n  \/*border-bottom: 2px solid #ffd631;*\/\n  cursor: pointer;\n  \/*animate: 0.2s;*\/\n  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n  background: #00D5A8;\n  border-radius: 25px;\n  \/*border: 0px solid #000101;*\/\n  transition: background 0.1s ease;\n}\n\ninput[type=range]::-webkit-slider-thumb {\n  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n  border: 10px solid #00D5A8;\n  height: 20px;\n  width: 20px;\n  border-radius: 20px;\n  background: #00D5A8;\n  cursor: pointer;\n  -webkit-appearance: none;\n  margin-top: -5px;\n  transition: border 0.1s ease;\n  -webkit-box-shadow: 0px 11px 27px -12px rgba(145, 94, 31, 1);\n  -moz-box-shadow: 0px 11px 27px -12px rgba(145, 94, 31, 1);\n  box-shadow: 0px 11px 27px -12px rgba(145, 94, 31, 1);\n}\n\n\n\/*input[type=range]:focus::-webkit-slider-runnable-track {\n  background: #ff0;\n}*\/\n\ninput[type=range]::-moz-range-track {\n  width: 100%;\n  height: 3px;\n  \/*border-top: 1px solid #b99400;*\/\n  \/*border-bottom: 2px solid #ffd631;*\/\n  cursor: pointer;\n  animate: 0.2s;\n  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n  background: #007aff;\n  border-radius: 25px;\n  \/*border: 0px solid #000101;*\/\n  transition: background 0.1s;\n}\n\ninput[type=range]::-moz-range-thumb {\n  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n  border: 3px solid #007aff;\n  height: 30px;\n  width: 30px;\n  border-radius: 30px;\n  background: #00D5A8;\n  cursor: pointer;\n  -webkit-appearance: none;\n  margin-top: 0px;\n  transition: border 0.1s ease;\n}\n\ninput[type=range]::-ms-track {\n  width: 100%;\n  height: 3px;\n  \/*border-top: 1px solid #b99400;*\/\n  \/*border-bottom: 2px solid #ffd631;*\/\n  cursor: pointer;\n  animate: 0.2s;\n  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n  background: #007aff;\n  border-radius: 25px;\n  \/*border: 0px solid #000101;*\/\n  transition: background 0.2s ease;\n}\n\ninput[type=range]::-ms-fill-lower {\n  background: #ac51b5;\n  border: 0px solid #000101;\n  border-radius: 50px;\n  box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;\n}\n\ninput[type=range]::-ms-fill-upper {\n  background: #ac51b5;\n  border: 0px solid #000101;\n  border-radius: 50px;\n  box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;\n}\n\ninput[type=range]::-ms-thumb {\n  \/*box-shadow: 0px 0px 0px #000000, 0px 0px 0px #0d0d0d;*\/\n  border: 3px solid #007aff;\n  height: 30px;\n  width: 30px;\n  border-radius: 30px;\n  background: #fff;\n  cursor: pointer;\n  -webkit-appearance: none;\n  margin-top: -14px;\n  transition: border 0.1s;\n}\n\ninput[type=range]:focus::-ms-fill-lower {\n  background: #ac51b5;\n}\n\ninput[type=range]:focus::-ms-fill-upper {\n  background: #ac51b5;\n}\n\ninput[type=range]:hover::-webkit-slider-runnable-track {\n  background: #00D5A8;\n}\n\ninput[type=range]:hover::-webkit-slider-thumb {\n  \/*background: #fff;*\/\n  border-color: #00D5A8;\n  -webkit-box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n  -moz-box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n  box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n}\n\ninput[type=range]:active::-webkit-slider-runnable-track {\n  background: #00D5A8;\n}\n\ninput[type=range]:active::-webkit-slider-thumb {\n  \/*background: #fff;*\/\n  border-color: #00D5A8;\n  -webkit-box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n  -moz-box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n  box-shadow: 0px 6px 27px -12px rgba(145, 94, 31, 1);\n}\n\ninput[type=range]:hover::-moz-range-track {\n  background: #e52e5e;\n}\n\ninput[type=range]:hover::-moz-range-thumb {\n  background: #fff;\n  border-color: #e52e5e;\n}\n\ninput[type=range]:active::-moz-range-track {\n  background: #e52e5e;\n}\n\ninput[type=range]:active::-moz-range-thumb {\n  background: #fff;\n  border-color: #e52e5e;\n}\n\na.webwatchnowbtn11, a.enterprice_btn {\n    background-image: linear-gradient(90deg,#00b7ff,#00d488);\n    font-family: \"poppins\", sans-serif !important;\n    font-size: 16px;\n    line-height: 24px;\n    font-weight: 500;\n    font-style: normal;\n    max-width: 200px;\n    letter-spacing: 0px;\n    padding: 12px 24px;\n    color: #ffffff !important;\n    border-radius: 5px;\n    border-color: #00b7ff;\n    text-transform: capitalize;\n    text-decoration: none;\n    cursor: pointer;\n    outline: 0;\n    text-align: center;\n    display: block;\n    margin: auto;\n}\na.webwatchnowbtn11:hover, a.enterprice_btn:hover {\n    background-image: linear-gradient(90deg,#ffffff,#ffffff);\n    color: #000000 !important;\n   -webkit-box-shadow: inset 1px 1px 10px #333;\n   -moz-box-shadow: inset 1px 1px 10px #333;\n   box-shadow: inset 1px 1px 10px #333;\n}\n\nspan.pricingcal_span_1 {\n    margin: 0 5px 0 0;\n}\nspan.pricingcal_span_2 {\n    margin: 0 0 0 5px;\n}\n@media only screen and (max-width: 700px){\n.pricingcal_main_sec {\n    padding: 20px;\n}\nspan.item-type.item-type-active {\n    padding: 12px;\n    font-size: 12px;\n    width: 140px;\n}\na.webwatchnowbtn11, a.enterprice_btn {\n    font-size: 14px;\n}\n}\n@media only screen and (max-width: 420px){\ninput[type=range] {\n    width: 100%;\n}\n}\n.month_price_hide {\n  display: none;\n}\n.upcomingwebnrsubcolumn1.upcomingwebnrsubcolumn121 {\n    width: 50%;\n    padding: 15px;\n    background-color: #fff;\n    border-radius: 10px;\n}\n.upcomingwebnrsubcolumn1.upcomingwebnrsubcolumn111 {\n    width: 50%;\n}\n@media only screen and (max-width: 990px){\n.upcomingwebnrsubcolumn1.upcomingwebnrsubcolumn121,\n.upcomingwebnrsubcolumn1.upcomingwebnrsubcolumn111 {\n    width: 100%;\n}\n}\n\n\/* amelia section *\/\n\n.am-section.am-spinner {\n    position: relative; \/* Ensure proper positioning of the pseudo-element *\/\n}\n.am-section.am-spinner::before {\n    content: \"\";\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: 100%;\n    height: 100%;\n    background-image: url(https:\/\/www.paradisosolutions.com\/wp-content\/uploads\/2024\/03\/amelia-booking-calendar-img.png);\n    background-size: 100% 100%;\n    background-position: 50% 50%;\n    opacity: 0.2;\n    transform: translate(0%, 0%);\n}\n.amelia_section_bg_img::before {\n    content: \"\";\n    position: absolute;\n    top: 10px;\n    right: 0;\n    width: 100%;\n    height: 100%;\n    background-image: url(https:\/\/www.paradisosolutions.com\/wp-content\/uploads\/2024\/03\/amelia-booking-calendar-img.png);\n    background-size: 100% 100%;\n    background-position: 50% 50%;\n    opacity: 0.2;\n    transform: translate(0%, 0%);\n}\n.amelia_section_bg_img {\n    height: 300px !important;\n    position: relative;\n}\n@media screen and (max-width:768px) {\n.lms_cost_calculator_heading, .nftrmainrowwithcol3 {\n\tdisplay: none;\n}\n}\nh3.bestlms_h3_20.month_price_text strong {\n\tpadding: 10px;\n\tbox-shadow: 0px 5px 10px 5px #74747447;\n\tborder-radius: 30px;\n}\n.range-labels {\n\tposition: relative;\n\twidth: 80%;\n\tz-index: 2;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tmargin: 0 auto 25px;\n}\n\n.range-labels span {\n\tfont-size: 0.75em;\n\tposition: relative;\n\t\/*padding-top: 15px;*\/\n\tcolor: gray\n}\n\n.range-labels span:first-child:before {\n\tbackground-color: #09F\n}\n\n.range-labels span:last-child:before {\n\tbackground-color: gray\n}\n\n.range-labels span:first-child {\n\ttransform: translateX(-48%);\n}\n\n.range-labels span:last-child {\n\ttransform: translateX(48%)\n}\n\n.range-labels {\n\tpadding-left: 6px !important;\n\tpadding-right: 0px !important\n}\n\n.range-labels span {\n\twidth: 37px;\n\toverflow: hidden;\n\ttext-align: center;\n\tword-wrap: normal;\n\tposition: relative;\n\tcolor: #8993A4 !important;\n\tfont-size: 14px;\n\tline-height: 22px;\n\ttext-align: center !important\n}\n\n.range-labels span:after {\n\tposition: absolute;\n\ttop: -2px;\n\tbackground: #fff;\n\tright: 0;\n\twidth: 19px;\n\tpadding-left: 2px;\n\tpadding-top: 2px\n}\n\n.range-labels span:nth-child(1) {\n\twidth: 25px\n}\n\n.range-labels span:nth-child(6) {\n\twidth: 44px\n}\n\n.range-labels span {\n\tposition: absolute\n}\n\n.range-labels span:nth-child(2) {\n\tleft: calc(20% - 18px);\n}\n\n.range-labels span:nth-child(3) {\n\tleft: calc(40% - 18px)\n}\n\n.range-labels span:nth-child(4) {\n\tleft: calc(60% - 18px)\n}\n\n.range-labels span:nth-child(5) {\n\tleft: calc(80% - 19px)\n}\n\n.range-labels span:nth-child(6) {\n\tright: 17px\n}\n\n.hide-bg-img {\n    display: none !important;\n}\n\/* pricing calculator css by rupesh on 3 May 2024 end *\/\n.upcomingwebnrmainrow1 {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: center;\n  align-content: center;\n  flex-direction: row;\n  \/*background: #EEF3FF 0% 0% no-repeat padding-box;*\/\n  padding: 10px 30px;\n  \/* width: 100%; *\/\n  margin: 0px 15px;\n  border-radius: 4px;\n}\n\n@media screen and (max-width:450px) {\n.upcomingwebnrmainrow1 {\n    padding: 0px;\n    margin: 0px;\n}\n.pricingcal_main_sec {\n        padding: 20px 10px;\n}\nh3.pricingcal_h3_34 {\n    font-size: 18px;\n    line-height: 20px;\n}\np.bestlms_para_16 {\n    font-size: 15px;\n    line-height: 20px;\n}\n.range-labels {\n    display: none;\n}\ndiv#pricing-calculator {\n    margin: 0px;\n    padding: 10px;\n}\n}\n.gdpr {\n    display: none !important;\n}\n\/* Popup Styles *\/\n.popup {\n    display: none;\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background: rgba(0, 0, 0, 0.7);\n    justify-content: center;\n    align-items: center;\n    z-index: 9999;\n    backdrop-filter: blur(5px);\n}\n\n.popup-content {\n    position: relative;\n    max-width: 600px;\n    width: 90%;\n    background: #ffffff;\n    border-radius: 16px;\n    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n    animation: modalFadeIn 0.3s ease;\n}\n\n@keyframes modalFadeIn {\n    from {\n        opacity: 0;\n        transform: scale(0.9) translateY(-20px);\n    }\n    to {\n        opacity: 1;\n        transform: scale(1) translateY(0);\n    }\n}\n\n.ps_form_design-div {\n    padding: 30px;\n    border-radius: 16px;\n    position: relative;\n    max-height: 85vh;\n    overflow-y: auto;\n    box-sizing: border-box;\n}\n\n\/* Custom Scrollbar *\/\n.ps_form_design-div::-webkit-scrollbar {\n    width: 8px;\n}\n\n.ps_form_design-div::-webkit-scrollbar-track {\n    background: #f1f1f1;\n    border-radius: 10px;\n}\n\n.ps_form_design-div::-webkit-scrollbar-thumb {\n    background: #00b8fa;\n    border-radius: 10px;\n}\n\n.ps_form_design-div::-webkit-scrollbar-thumb:hover {\n    background: #00d489;\n}\n\n\/* Close Button *\/\n.popup .close {\n    position: absolute;\n    top: 15px;\n    right: 20px;\n    font-size: 28px;\n    font-weight: bold;\n    cursor: pointer;\n    color: #666;\n    width: 32px;\n    height: 32px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 50%;\n    transition: all 0.3s ease;\n    z-index: 10;\n    background: #f5f5f5;\n}\n\n.popup .close:hover {\n    background: #00b8fa;\n    color: #ffffff;\n    transform: rotate(90deg);\n}\n\n\/* Form Styling *\/\n.ps_form_design {\n    margin-top: 10px;\n}\n\n.ps_form_design .wpcf7-form {\n    display: flex;\n    flex-direction: column;\n    gap: 15px;\n}\n\n.ps_form_design input,\n.ps_form_design textarea,\n.ps_form_design select {\n    width: 100%;\n    padding: 12px 16px;\n    border: 2px solid #e1e5e9;\n    border-radius: 8px;\n    font-size: 15px;\n    transition: all 0.3s ease;\n    font-family: inherit;\n}\n\n.ps_form_design input:focus,\n.ps_form_design textarea:focus,\n.ps_form_design select:focus {\n    outline: none;\n    border-color: #00b8fa;\n    box-shadow: 0 0 0 3px rgba(0, 184, 250, 0.1);\n}\n\n.ps_form_design textarea {\n    min-height: 100px;\n    resize: vertical;\n}\n\n.ps_form_design .wpcf7-submit {\n    background: linear-gradient(133deg, #00b8fa 27%, #00d489 70%);\n    color: white;\n    padding: 14px 28px;\n    border: none;\n    border-radius: 8px;\n    font-size: 16px;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    width: auto;\n    min-width: 150px;\n}\n\n.ps_form_design .wpcf7-submit:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 5px 15px rgba(0, 184, 250, 0.3);\n}\n\n.ps_form_design .wpcf7-submit:active {\n    transform: translateY(0);\n}\n\n\/* Form Labels *\/\n.ps_form_design label {\n    font-weight: 600;\n    color: #374151;\n    margin-bottom: 5px;\n    display: block;\n}\n\n\/* Form Groups *\/\n.ps_form_design .wpcf7-form-control-wrap {\n    display: block;\n    margin-bottom: 15px;\n}\n\n\/* Responsive Design *\/\n@media (max-width: 768px) {\n    .ps_form_design-div {\n        padding: 20px;\n    }\n    \n    .popup .close {\n        top: 10px;\n        right: 15px;\n        width: 28px;\n        height: 28px;\n        font-size: 24px;\n    }\n    \n    .ps_form_design .wpcf7-submit {\n        width: 100%;\n    }\n}\n\n@media (max-width: 480px) {\n    .ps_form_design-div {\n        padding: 15px;\n    }\n    \n    .popup-content {\n        width: 95%;\n    }\n}\n\n\/* Success\/Error Messages *\/\n.wpcf7-response-output {\n    margin: 20px 0 0;\n    padding: 12px;\n    border-radius: 8px;\n    font-size: 14px;\n}\n\n.wpcf7-validation-errors {\n    background: #fee2e2;\n    border: 1px solid #fecaca;\n    color: #991b1b;\n}\n\n.wpcf7-mail-sent-ok {\n    background: #d1fae5;\n    border: 1px solid #a7f3d0;\n    color: #065f46;\n}\n\n\/* Spinner Animation *\/\n.wpcf7-spinner {\n    display: inline-block;\n    width: 20px;\n    height: 20px;\n    border: 2px solid rgba(0, 0, 0, 0.1);\n    border-top-color: #00b8fa;\n    border-radius: 50%;\n    animation: spin 0.6s linear infinite;\n    margin-left: 10px;\n    vertical-align: middle;\n}\n\n@keyframes spin {\n    to { transform: rotate(360deg); }\n}\n    <\/style>\n\n    <div class=\"upcomingwebnrmainrow123\">\n    <div class=\"upcomingwebnrsubcolumn123\">\n        <div class=\"pricingcal_main_sec\">\n            <!--h3 class=\"pricingcal_h3_34\">Calculate Your LMS Cost<\/h3-->\n            <input type=\"hidden\" id=\"cf_num_users\" value=\"\">\n            <input type=\"hidden\" id=\"cf_total_price\" value=\"\">\n            <!--p class=\"bestlms_para_16\" style=\"max-width: 450px;margin: auto;\">\n                Simply select your monthly users, and we'll provide you with the most accurate LMS cost estimate.\n            <\/p-->\n            <div class=\"pricing-sec-border\">\n            <div class=\"pricingcal_pricingsec calender\" id=\"demo-iframe-wrapper\" style=\"margin-top: 0px; display: none;\">\n                <iframe loading=\"lazy\" \n                    src=\"https:\/\/www.paradisosolutions.com\/elearning\/appointmnet-iframe-forpricingcalculator\/\" \n                    width=\"100%\" \n                    height=\"400\" \n                    style=\"border: none;\" \n                    allowfullscreen>\n                <\/iframe>\n            <\/div>\n            <div class=\"pricingcal_pricingsec\">\n                <p class=\"bestlms_para_16\" style=\"margin: 0 0 10px 0;\">Select the number of User's per month<\/p>\n                <h3 class=\"bestlms_h3_20\" id=\"calc-count-section\" style=\"font-weight: 400;\">\n                    <strong><span id=\"calc-count\" class=\"calc-count\">100<\/span> Users<\/strong>\n                <\/h3>\n                <div id=\"slider-wrapper\" class=\"slider-wrapper\">\n                    <div class=\"scale-container\" id=\"scaleContainer\"><\/div>\n                    <!--div class=\"range-labels\" bis_skin_checked=\"1\">\n                        <span>50<\/span>\n                        <span>150<\/span>\n                        <span>250<\/span>\n                        <span>350<\/span>\n                        <span>500<\/span>\n                    <\/div-->\n\n                    <input class=\"calc-range m-top-20\" id=\"calcRange\" type=\"range\" min=\"0\" max=\"500\" step=\"50\" value=\"100\">\n                    <!-- Perfectly centered curly bracket under 0\u201350 -->\n            <div class=\"bracket-section\">\n                <svg class=\"bracket-svg\" viewBox=\"0 0 100 30\" preserveAspectRatio=\"none\">\n                <g transform=\"rotate(180,50,15)\">\n                    <path \n                        d=\"M 0 30\n                           Q 15 15 30 20\n                           Q 45 25 50 10\n                           Q 55 25 70 20\n                           Q 85 15 100 30\"\n                        stroke=\"#9ca3af\"\n                        fill=\"none\"\n                        stroke-width=\"2\"\n                    \/>\n                    <\/g>\n                <\/svg>\n\n                <!-- FREE label -->\n                <div class=\"free-label\">\n                    <span class=\"free-badge\">FREE<\/span>\n                <\/div>\n            <\/div>\n                <\/div>\n                <h3 class=\"bestlms_h3_20 month_price_hide month_price_text\" style=\"font-weight: 400; display: none;\">\n                    <strong>$ <span id=\"calc-total-price\" class=\"calc-total-price\">6000<\/span> \/ Month<\/strong><\/h3>\n                <div id=\"app\"><\/div>\n\n                <p class=\"month_price_btn\" id=\"openPopup\">\n                    <a class=\"webwatchnowbtn11 popmake-119486 pum-trigger\" style=\"cursor: pointer;\">Show Me Price<\/a>\n                <\/p>\n\n            <\/div>\n            <\/div>\n\n            <!--p class=\"bestlms_para_16\" id=\"hiigreetings\" style=\"font-size: 20px;\"><strong><\/strong><\/p>\n            <p class=\"bestlms_para_16\" style=\"font-size: 20px;\"><strong>Say Goodbye To Complicated Costs.<\/strong><\/p>\n            <p class=\"bestlms_para_16\" style=\"max-width: 370px; margin: auto;\">\n                Our user-based fees are here to simplify pricing for businesses and associations of all sizes.\n            <\/p-->\n        <\/div>\n    <\/div>\n<\/div>\n\n<!-- Popup for Contact Form -->\n<div id=\"customPopup\" class=\"popup\">\n    <div class=\"popup-content ps_form_design-div\">\n        <span id=\"closePopup\" class=\"close\">\u00d7<\/span>\n        <div class=\"ps_form_design\">[contact-form-7 id=\"0dc98c8\" title=\"Pricing Calculator\"]\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f21202-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"21202\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/blog\/wp-json\/wp\/v2\/posts\/15575#wpcf7-f21202-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"21202\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f21202-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/fieldset>\n<div class=\"reqcoucatform1 reqcoucatwebrform1\">\n\t<p class=\"reqcctitle5\">Pricing Calculator\n\t<\/p>\n\t<div class=\"row reqcoucatfrmfieldrow\">\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12 col-xl-12\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"firstname\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"First Name *\" value=\"\" type=\"text\" name=\"firstname\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"row reqcoucatfrmfieldrow\">\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12 col-xl-12\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"lastname\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Last Name *\" value=\"\" type=\"text\" name=\"lastname\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"row reqcoucatfrmfieldrow\">\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12 col-xl-12\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Email*\" value=\"\" type=\"email\" name=\"email\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"row reqcoucatfrmfieldrow\">\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12 col-xl-12\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"contact\"><input size=\"40\" maxlength=\"15\" minlength=\"7\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Contact Number*\" value=\"\" type=\"tel\" name=\"contact\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"ps_full accept\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"accept-this\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><input type=\"checkbox\" name=\"accept-this\" value=\"1\" checked=\"checked\" aria-invalid=\"false\" \/><\/span><\/span><\/span> I agree to <a href=\"\/terms-of-use\" class=\"tcpp\" target=\"_blank\">terms of use<\/a> and <a href=\"\/privacypolicy\" class=\"tcpp\" target=\"_blank\">privacy policy<\/a>\n\t\t<\/p>\n\t<\/div>\n\t<div  class=\"btn_submit mt-2\" style=\"text-align: center;color:#fff; mt-4\">\n\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Check Pricing\" \/>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"hidden-source hs-hiddenfields\" tabindex=\"-1\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"referer-page\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text referer-page\" aria-invalid=\"false\" value=\"https:\/\/stagingps.paradisosolutions.com\/blog\/https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/posts\/15575 &amp; Referer Old URL:\" type=\"text\" name=\"referer-page\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"hidden-source hs-hiddenfields\" tabindex=\"-1\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"contact-source-text\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"contact-source-text\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<input class=\"wpcf7-form-control wpcf7-hidden\" id=\"cf_num_users2\" value=\"\" type=\"hidden\" name=\"cf_num_users\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" id=\"cf_total_price2\" value=\"\" type=\"hidden\" name=\"cf_total_price\" \/>\n\t<div class=\"hidden-source hs-hiddenfields\" tabindex=\"-1\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"contact-form-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text hide\" aria-invalid=\"false\" value=\"Pricing Calculator\" type=\"text\" name=\"contact-form-name\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div><input\n                    class=\"apbct_special_field apbct_email_id__wp_contact_form_7\"\n                    name=\"apbct__email_id__wp_contact_form_7\"\n                    aria-label=\"apbct__label_id__wp_contact_form_7\"\n                    type=\"text\" size=\"30\" maxlength=\"200\" autocomplete=\"off\"\n                    value=\"\"\n                \/><p style=\"display: none !important;\" class=\"akismet-fields-container\" data-prefix=\"_wpcf7_ak_\"><label>&#916;<textarea name=\"_wpcf7_ak_hp_textarea\" cols=\"45\" rows=\"8\" maxlength=\"100\"><\/textarea><\/label><input type=\"hidden\" id=\"ak_js_1\" name=\"_wpcf7_ak_js\" value=\"212\"\/><script>document.getElementById( \"ak_js_1\" ).setAttribute( \"value\", ( new Date() ).getTime() );<\/script><\/p><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n    <\/div>\n<\/div>\n\n    <script>\n        \/\/ Configuration\n        const MIN = 0;\n        const MAX = 500;\n        const STEP = 50;\n        const BASE_PRICE = 0.5;\n\n        \/\/ Elements\n        const scaleContainer = document.getElementById('scaleContainer');\n\n        \/\/ Generate scale marks\n        function generateScale() {\n            \/\/ Major ticks every 50, minor ticks every 5\n            for (let i = MIN; i <= MAX; i += 5) {\n                const percentage = ((i - MIN) \/ (MAX - MIN)) * 100;\n                \n                const tickDiv = document.createElement('div');\n                \n                if (i % 50 === 0) {\n                    \/\/ Major tick with label\n                    tickDiv.className = 'tick-major';\n                    tickDiv.style.left = percentage + '%';\n                    \n                    const label = document.createElement('div');\n                    label.className = 'tick-label';\n                    label.textContent = i;\n                    tickDiv.appendChild(label);\n                } else {\n                    \/\/ Minor tick\n                    tickDiv.className = 'tick-minor';\n                    tickDiv.style.left = percentage + '%';\n                }\n                \n                scaleContainer.appendChild(tickDiv);\n            }\n        }\n\n        \/\/ Update range progress\n        function updateRangeProgress() {\n            const value = parseInt(calcRange.value);\n            const percentage = ((value - MIN) \/ (MAX - MIN)) * 100;\n            calcRange.style.setProperty('--range-progress', percentage + '%');\n        }\n        \/\/ Initialize\n        generateScale();\n    <\/script>\n\t<script>\n        \/\/ User authentication data\n        const authenticatedUser =  {\n            name: ' ',\n            email: 'kiranparadiso@gmail.com',\n            phone: '',\n            company: '',\n            isAuthenticated: true\n        } ;\n        const SUPABASE_URL = 'https:\/\/fahjptzcykpjsmpzfdav.supabase.co';\n        const SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImZhaGpwdHpjeWtwanNtcHpmZGF2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjA2NzY3NzgsImV4cCI6MjA3NjI1Mjc3OH0.lA-_vbtjks1Waw21XWJwI5Kg-tHTR39IGwo30U1252M';\n\n        let state = {\n            tiers: [],\n            features: [],\n            tierFeatures: {},\n            userSlabs: {},\n            loading: true,\n            error: null,\n            userCount: 100,\n            billingCycle: 'yearly'\n        };\n\n        async function fetchFromSupabase(table, params = {}) {\n            let url = `${SUPABASE_URL}\/rest\/v1\/${table}`;\n\n            if (params.select) {\n                url += `?select=${params.select}`;\n            }\n            if (params.order) {\n                url += (url.includes('?') ? '&' : '?') + `order=${params.order}`;\n            }\n\n            const response = await fetch(url, {\n                headers: {\n                    'apikey': SUPABASE_ANON_KEY,\n                    'Authorization': `Bearer ${SUPABASE_ANON_KEY}`\n                }\n            });\n\n            if (!response.ok) {\n                throw new Error(`Failed to fetch ${table}`);\n            }\n\n            return response.json();\n        }\n\n        async function loadPricingData() {\n            try {\n                const [tiers, features, tierFeaturesData, userSlabsData] = await Promise.all([\n                    fetchFromSupabase('pricing_tiers', { select: '*', order: 'display_order' }),\n                    fetchFromSupabase('features', { select: '*', order: 'display_order' }),\n                    fetchFromSupabase('tier_features', { select: '*' }),\n                    fetchFromSupabase('user_slabs', { select: '*', order: 'min_users' })\n                ]);\n\n                state.tiers = tiers;\n                state.features = features;\n\n                const tfMap = {};\n                tierFeaturesData.forEach(tf => {\n                    if (!tfMap[tf.tier_id]) tfMap[tf.tier_id] = {};\n                    tfMap[tf.tier_id][tf.feature_id] = tf.value;\n                });\n                state.tierFeatures = tfMap;\n\n                const slabMap = {};\n                userSlabsData.forEach(slab => {\n                    if (!slabMap[slab.tier_id]) slabMap[slab.tier_id] = [];\n                    slabMap[slab.tier_id].push(slab);\n                });\n                state.userSlabs = slabMap;\n\n                state.loading = false;\n                render();\n            } catch (err) {\n                state.error = err.message;\n                state.loading = false;\n                render();\n            }\n        }\n\n        function calculatePrice(planType = null) {\n            const plan = planType || state.selectedPlan;\n            let pricePerUserMonthly = 0;\n            let pricePerUserYearly = 0;\n            \n            \/\/ Standard pricing structure\n            if (plan === 'standard') {\n                if (state.userCount >= 51 && state.userCount <= 100) {\n                    pricePerUserMonthly = 1.50;\n                } else if (state.userCount >= 101 && state.userCount <= 150) {\n                    pricePerUserMonthly = 1.40;\n                } else if (state.userCount >= 151 && state.userCount <= 200) {\n                    pricePerUserMonthly = 1.33;\n                } else if (state.userCount >= 201 && state.userCount <= 300) {\n                    pricePerUserMonthly = 1.26;\n                } else if (state.userCount >= 301 && state.userCount <= 400) {\n                    pricePerUserMonthly = 1.19;\n                } else if (state.userCount >= 401 && state.userCount <= 500) {\n                    pricePerUserMonthly = 1.13;\n                } else {\n                    return null; \/\/ Outside supported range\n                }\n                pricePerUserYearly = pricePerUserMonthly * 12;\n            }\n            \/\/ Premium pricing structure\n            else if (plan === 'premium') {\n                if (state.userCount >= 51 && state.userCount <= 100) {\n                    pricePerUserMonthly = 2.35;\n                    pricePerUserYearly = 28.20;\n                } else if (state.userCount >= 101 && state.userCount <= 150) {\n                    pricePerUserMonthly = 2.11;\n                    pricePerUserYearly = 25.32;\n                } else if (state.userCount >= 151 && state.userCount <= 200) {\n                    pricePerUserMonthly = 1.89;\n                    pricePerUserYearly = 22.68;\n                } else if (state.userCount >= 201 && state.userCount <= 300) {\n                    pricePerUserMonthly = 1.70;\n                    pricePerUserYearly = 20.40;\n                } else if (state.userCount >= 301 && state.userCount <= 400) {\n                    pricePerUserMonthly = 1.53;\n                    pricePerUserYearly = 18.36;\n                } else if (state.userCount >= 401 && state.userCount <= 500) {\n                    pricePerUserMonthly = 1.37;\n                    pricePerUserYearly = 16.44;\n                } else {\n                    return null; \/\/ Outside supported range\n                }\n            }\n\n            \/\/ Calculate total price based on billing cycle\n            let pricePerUser, totalPrice;\n            \n            if (state.billingCycle === 'monthly') {\n                pricePerUser = pricePerUserMonthly;\n                totalPrice = state.userCount * pricePerUser;\n            } else {\n                \/\/ Apply 20% discount for yearly billing\n                const discountedYearlyPrice = pricePerUserYearly * 0.8; \/\/ 20% discount\n                pricePerUser = discountedYearlyPrice;\n                totalPrice = state.userCount * pricePerUser;\n            }\n\n            return {\n                totalPrice: totalPrice.toFixed(2),\n                pricePerUser: pricePerUser.toFixed(2),\n                pricePerUserMonthly: pricePerUserMonthly.toFixed(2),\n                pricePerUserYearly: pricePerUserYearly.toFixed(2),\n                discountedYearlyPrice: state.billingCycle === 'yearly' ? pricePerUser.toFixed(2) : null,\n                breakdown: state.billingCycle === 'monthly' \n                    ? `${state.userCount} users \u00d7 $${pricePerUserMonthly.toFixed(2)}\/user per month`\n                    : `${state.userCount} users \u00d7 $${pricePerUser.toFixed(2)}\/user per year (20% discount applied)`,\n                planType: plan\n            };\n        }\n\n        function updateCalculatorResults() {\n            const calculatorResults = document.getElementById('calculatorResults');\n            if (!calculatorResults) return;\n            \n            const standardCalc = calculatePrice('standard');\n            const premiumCalc = calculatePrice('premium');\n            \n            \/*if (!standardCalc || !premiumCalc) {\n                calculatorResults.innerHTML = `\n                    <div class=\"result-card\">\n                        <h3>Pricing Free Available<\/h3>\n                        <p>Pricing Free available for ${state.userCount} users. Please enter a number between 51-500 users.<\/p>\n                    <\/div>\n                `;\n                return;\n            }*\/\n           \/\/ Handle user count validation messages\n            if (state.userCount < 51) {\n                calculatorResults.innerHTML = `\n                    <div class=\"result-card\">\n                        <h3>Free Plan Available<\/h3>\n                        <p>Your selected user count (${state.userCount}) falls under the free plan (1\u201350 users).<\/p>\n                    <\/div>\n                `;\n                return;\n            }\n\n            if (state.userCount > 500) {\n                calculatorResults.innerHTML = `\n                    <div class=\"result-card\">\n                        <h3>Customized Pricing<\/h3>\n                        <p>For teams over ${state.userCount} users, we'll design a solution built specifically for your needs, complete with dedicated support.<\/p>\n                        <a class=\"enterprice_btn\" href=\"https:\/\/www.paradisosolutions.com\/elearning\/appointment\/\" target=\"_blank\" style=\"cursor: pointer;\">Book a Demo<\/a>\n                    <\/div>\n                `;\n                return;\n            }\n            \n            calculatorResults.innerHTML = `\n                <div class=\"result-card\">\n                    <h3>Growth Plan<\/h3>\n                    <div class=\"result-price\">\n                        <span class=\"result-price-currency\">Starts at $<\/span>\n                        <span class=\"result-price-value\">${state.billingCycle === 'yearly' ? (standardCalc.totalPrice \/ 12).toFixed(2) : parseFloat(standardCalc.totalPrice).toFixed(2)}<\/span>\n                        <span class=\"result-price-period\">\/month<\/span>\n                    <\/div>\n                    <div class=\"result-yearly-total\">$${state.billingCycle === 'yearly' ? (standardCalc.totalPrice\/1).toFixed(2) : (standardCalc.totalPrice * 12).toFixed(2)}\/yr<\/div>\n                    ${state.billingCycle === 'yearly' ? '<div class=\"billing-note\">Billed yearly<\/div>' : '<div class=\"billing-note\">Billed monthly<\/div>'}\n                <\/div>\n                <div class=\"result-card\">\n                    <h3>Enterprise LMS<\/h3>\n                    <div>\n                        <a class=\"enterprice_btn ps-popup-book-a-demo\" style=\"cursor: pointer;\">Contact sales<\/a>\n                    <\/div>\n                <\/div>\n            `;\n        }\n\n        function updateBillingToggle() {\n            const options = document.querySelectorAll('.billing-toggle-option');\n            const slider = document.getElementById('billingSlider');\n            const saveLabel = document.querySelector('.billing-toggle-save');\n            \n            \/\/ Remove active class from all options\n            options.forEach(option => option.classList.remove('active'));\n            \n            \/\/ Add active class to current option and update slider position\n            \/*if (state.billingCycle === 'monthly') {\n                options[0].classList.add('active');\n                slider.style.left = '6px';\n                slider.style.width = options[0].offsetWidth + 'px';\n                saveLabel.classList.add('faded');\n            } else {\n                options[1].classList.add('active');\n                slider.style.left = (options[0].offsetWidth + 6) + 'px';\n                slider.style.width = options[1].offsetWidth + 'px';\n                saveLabel.classList.remove('faded');\n            }*\/\n            if (state.billingCycle === 'monthly') {\n                options[0].classList.add('active');\n                slider.style.left = '6px';\n                slider.style.width = options[0].offsetWidth + 'px';\n                saveLabel.classList.add('faded');\n            } else if (state.billingCycle === 'yearly') {\n                options[1].classList.add('active');\n\n                \/\/ \ud83d\udc47 Fixed position and width for yearly option\n                slider.style.left = '115px';\n                slider.style.width = '95px';\n\n                saveLabel.classList.remove('faded');\n            } else {\n                \/\/ Optional fallback (in case of invalid state)\n                slider.style.left = '6px';\n                slider.style.width = options[0].offsetWidth + 'px';\n                saveLabel.classList.add('faded');\n            }\n        }\n\n        function renderFeatureValue(value) {\n            const lowerValue = value.toLowerCase();\n            if (lowerValue === 'no') {\n                return '<span class=\"x-icon\">\u2715<\/span>';\n            }\n            if (lowerValue === 'yes') {\n                return '<span class=\"check-icon\">\u2713<\/span>';\n            }\n            return value;\n        }\n\n        function render() {\n            const app = document.getElementById('app');\n\n            if (state.loading) {\n                app.innerHTML = `\n                    <div class=\"loader-container\">\n                        <div class=\"loader\"><\/div>\n                    <\/div>\n                `;\n                return;\n            }\n\n            if (state.error) {\n                app.innerHTML = `\n                    <div class=\"error-container\">\n                        <div class=\"error-box\">\n                            <p>Error loading pricing data: ${state.error}<\/p>\n                        <\/div>\n                    <\/div>\n                `;\n                return;\n            }\n\n            const categories = [...new Set(state.features.map(f => f.category))];\n\n            app.innerHTML = `\n                <div class=\"container\">\n                    <div id=\"calculator\" class=\"calculator\" style=\"margin-top: -38px;\">\n                        <!--div class=\"calculator-header\">\n                            <h2>Custom Pricing Calculator<\/h2>\n                            <p class=\"calculator-subtitle\">Calculate your exact pricing based on number of users<\/p>\n                        <\/div-->\n                        <div class=\"calculator-controls\">\n                            <div class=\"form-group\">\n                                <label>Number of Users<\/label>\n                                <input type=\"number\" class=\"form-input\" id=\"userCount\" min=\"51\" max=\"500\" value=\"${state.userCount}\">\n                            <\/div>\n                            <div class=\"form-group\">\n                                <label>Billing Cycle<\/label>\n                                <div class=\"billing-cycle-wrapper\">\n                                    <div class=\"billing-toggle-container\" id=\"billingToggle\">\n                                        <div class=\"billing-toggle-option ${state.billingCycle === 'monthly' ? 'active' : ''}\" data-value=\"monthly\">Monthly<\/div>\n                                        <div class=\"billing-toggle-option ${state.billingCycle === 'yearly' ? 'active' : ''}\" data-value=\"yearly\">Yearly<\/div>\n                                        <div class=\"billing-toggle-slider\" style=\"left: 115px !important; width: 95px !important;\" id=\"billingSlider\"><\/div>\n                                    <\/div>\n                                    <div class=\"billing-toggle-save\">Save 20%<\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                        <div class=\"calculator-results\" id=\"calculatorResults\">\n                            ${(() => {\n                                const standardCalc = calculatePrice('standard');\n                                const premiumCalc = calculatePrice('premium');\n                                \n                                if (!standardCalc || !premiumCalc) {\n                                    return `\n                                        <div class=\"result-card\">\n                                            <h3>Pricing Free Available<\/h3>\n                                            <p>Pricing Free available for ${state.userCount} users. Please enter a number between 51-500 users.<\/p>\n                                        <\/div>\n                                    `;\n                                }\n                                \n                                return `\n                                    <div class=\"result-card\">\n                                        <h3>Growth Plan<\/h3>\n                                        <div class=\"result-price\">\n                                            <span class=\"result-price-currency\">Starts at $<\/span>\n                                            <span class=\"result-price-value\">${state.billingCycle === 'yearly' ? Math.round(standardCalc.totalPrice \/ 12) : standardCalc.totalPrice}<\/span>\n                                            <span class=\"result-price-period\">\/month<\/span>\n                                        <\/div>\n                                        <div class=\"result-yearly-total\">$${state.billingCycle === 'yearly' ? standardCalc.totalPrice : Math.round(standardCalc.totalPrice * 12 * 0.8)}\/yr<\/div>\n                                        ${state.billingCycle === 'yearly' ? '<div class=\"billing-note\">Billed yearly<\/div>' : ''}\n                                    <\/div>\n                                    <div class=\"result-card\">\n                                        <h3>Enterprise LMS<\/h3>\n                                        <div>\n                                            <a class=\"enterprice_btn ps-popup-book-a-demo\" href=\"#\" style=\"cursor: pointer;\">Contact sales<\/a>\n                                        <\/div>\n                                    <\/div>\n                                `;\n                            })()}\n                        <\/div>\n                    <\/div>\n                <\/div>\n            `;\n\n            document.getElementById('userCount').addEventListener('input', (e) => {\n                state.userCount = Number(e.target.value);\n                updateCalculatorResults();\n            });\n\n            \/\/ Billing cycle toggle event listeners\n            document.querySelectorAll('.billing-toggle-option').forEach(option => {\n                option.addEventListener('click', (e) => {\n                    const value = e.target.getAttribute('data-value');\n                    if (value !== state.billingCycle) {\n                        state.billingCycle = value;\n                        updateBillingToggle();\n                        updateCalculatorResults();\n                    }\n                });\n            });\n            \n            \/\/ Initialize billing toggle\n            updateBillingToggle();\n        }\n\n        function toggleCategory(categoryId, headerElement) {\n            const categoryBody = document.getElementById(categoryId);\n            const isHidden = categoryBody.classList.contains('hidden');\n\n            if (isHidden) {\n                categoryBody.classList.remove('hidden');\n                headerElement.classList.remove('category-collapsed');\n            } else {\n                categoryBody.classList.add('hidden');\n                headerElement.classList.add('category-collapsed');\n            }\n        }\n\n        loadPricingData();\n    <\/script>\n\n    <script>\n        \/\/ Direct inquiry submission without modal\n        async function submitInquiryDirectly() {\n\n            const submitBtn = document.querySelector('.get-started-btn');\n            const originalText = submitBtn.innerHTML;\n            \n            \/\/ Check if user is authenticated\n            if (!authenticatedUser.isAuthenticated) {\n                alert('Please log in to request a quote.');\n                window.location.href = '\/login';\n                return;\n            }\n            \n            \/\/ Show loading state\n            submitBtn.disabled = true;\n            submitBtn.innerHTML = '<span class=\"loading-spinner\"><\/span>Sending Request...';\n            \n            \/\/ Get calculated prices\n            const standardCalc = calculatePrice('standard');\n            const premiumCalc = calculatePrice('premium');\n            \n            \/\/ Prepare form data with authenticated user information\n            const formData = new FormData();\n            formData.append('name', authenticatedUser.name || 'Not provided');\n            formData.append('email', authenticatedUser.email || 'Not provided');\n            formData.append('phone', authenticatedUser.phone || 'Not provided');\n            formData.append('company', authenticatedUser.company || 'Not provided');\n            formData.append('userCount', state.userCount);\n            formData.append('planType', standardCalc && premiumCalc ? 'Standard & Premium options' : 'Custom');\n            formData.append('billingCycle', state.billingCycle);\n            formData.append('message', `User requested quote through LMS pricing calculator. User details automatically populated from account.`);\n            \n            if (standardCalc && premiumCalc) {\n                formData.append('calculatedPrice', `${standardCalc.totalPrice} - ${premiumCalc.totalPrice}`);\n                formData.append('pricePerUser', `${standardCalc.pricePerUser} - ${premiumCalc.pricePerUser}`);\n            }\n\n            try {\n                const response = await fetch('\/lms-plan-inquiry', {\n                    method: 'POST',\n                    body: formData,\n                    headers: {\n                        'X-CSRF-TOKEN': document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content'),\n                        'X-Requested-With': 'XMLHttpRequest'\n                    }\n                });\n\n                const result = await response.json();\n\n                if (result.success) {\n                    \/\/ Show success message\n                    submitBtn.innerHTML = '\u2713 Quote Request Sent!';\n                    submitBtn.style.background = '#10b981';\n                    \n                    \/\/ Show success modal with details\n                    showSuccessModal();\n                    \n                    setTimeout(() => {\n                        submitBtn.disabled = false;\n                        submitBtn.innerHTML = originalText;\n                        submitBtn.style.background = '';\n                    }, 3000);\n                } else {\n                    throw new Error(result.message || 'An error occurred. Please try again.');\n                }\n            } catch (error) {\n                alert('Error sending request: ' + error.message);\n                submitBtn.disabled = false;\n                submitBtn.innerHTML = originalText;\n            }\n        }\n\n        \/\/ Success modal functions\n        function showSuccessModal() {\n            const modal = document.getElementById('successModal');\n            \n            \/\/ Show the modal\n            modal.classList.add('show');\n            document.body.style.overflow = 'hidden';\n        }\n\n        function closeSuccessModal() {\n            const modal = document.getElementById('successModal');\n            modal.classList.remove('show');\n            document.body.style.overflow = 'auto';\n        }\n\n        \/\/ Close modal when clicking outside\n        document.getElementById('successModal').addEventListener('click', function(e) {\n            if (e.target === this) {\n                closeSuccessModal();\n            }\n        });\n\n        \/\/ Close modal with Escape key\n        document.addEventListener('keydown', function(e) {\n            if (e.key === 'Escape' && document.getElementById('successModal').classList.contains('show')) {\n                closeSuccessModal();\n            }\n        });\n\n        \/\/get the domain of parent window and open a page\n        \n        function openParentDomainPage() {\n            try {\n                const parentDomain = window.opener.location.origin;\n                window.open(parentDomain + '\/local\/trial\/buy_plan.php','_blank');\n            } catch (error) {\n                console.error('Unable to access parent domain:', error);\n            }\n        }\n\n\n    <\/script>\n\n\t<script>\n\t\/\/ Wait for the DOM content to be loaded\n\tdocument.addEventListener(\"DOMContentLoaded\", function() {\n\t\t\/\/ Select the elements with the relevant classes\n\t\tvar bookingCatalog = document.querySelector(\"#amelia-app-booking0\");\n\t\tvar spinnerSection = document.querySelector(\".am-spinner\");\n\t\tvar bgImageSection = document.querySelector(\".amelia_section_bg_img\");\n\t\n\t\t\/\/ Check if either bookingCatalog or spinnerSection is present\n\t\tif (bookingCatalog || spinnerSection) {\n\t\t\t\/\/ Apply display none to bgImageSection\n\t\t\tbgImageSection.style.display = \"none\";\n\t\t}\n\t});\t\n\t<\/script>\n\t\n\t<!--script>\n\tdocument.addEventListener(\"DOMContentLoaded\", function() {\n\t  const rangeInput = document.querySelector(\".calc-range\");\n      const rangenumbers = document.querySelector(\".range-labels\");\n      const usersparaheading = document.querySelector(\".bestlms_para_16\");\n      const usersheading = document.querySelector(\".bestlms_h3_20\");\n      const priceOutput = document.getElementById(\"calc-total-price\");\n      const hiigreetings = document.getElementById(\"hiigreetings\");\n\t  const numUsersOutput = document.getElementById(\"calc-count\");\n      const numUsersOutputSec = document.getElementById(\"calc-count-section\");\n      const hidescaleContainer = document.getElementById(\"scaleContainer\");\n      const hidesliderwrapper = document.getElementById(\"slider-wrapper\");\n\n\n\t  const defaultValue = 100;\n\t\n      const cfNumUsers = document.getElementById(\"cf_num_users\");\n      const cfTotalPrice = document.getElementById(\"cf_total_price\");\n\n\t  rangeInput.value = defaultValue;\n\t  const pricePerUser = calculatePricePerUser(defaultValue);\n\t  const totalPrice = defaultValue * pricePerUser;\n\t\n\t  priceOutput.textContent = totalPrice.toFixed(2);\n\t  numUsersOutput.textContent = defaultValue;\n\t\n\t  rangeInput.addEventListener(\"input\", function() {\n\t\tconst value = parseInt(rangeInput.value);\n\t\tconst pricePerUser = calculatePricePerUser(value);\n\t\tconst totalPrice = value * pricePerUser;\n\t\tpriceOutput.textContent = totalPrice.toFixed(2);\n\t\tnumUsersOutput.textContent = value;\n        const checkInterval = setInterval(() => {\n        const setappuserscount = document.getElementById(\"userCount\");\n        \/\/ Make sure the element exists first\n        if (setappuserscount) {\n            const value2 = setappuserscount.value;\n\n            \/\/ Check if it has a non-empty value\n            if (value2 !== null && value2 !== \"\") {\n            setappuserscount.value = value;\n            setappuserscount.dispatchEvent(new Event('input', { bubbles: true }));\n            const activeBillingOption = document.querySelector('.billing-toggle-option.active');\n            if (activeBillingOption) {\n            activeBillingOption.dispatchEvent(new Event('click', { bubbles: true }));\n            }\n\n            \/\/ \u2705 Force update the UI slider\n            if (typeof updateBillingToggle === 'function') {\n            updateBillingToggle();\n            }\n            clearInterval(checkInterval); \/\/ \u2705 stop checking\n            }\n        }\n        }, 1000); \/\/ check every 1 second\n        document.getElementById(\"cf_num_users\").value = numUsersOutput.textContent;\n        document.getElementById(\"cf_total_price\").value = priceOutput.textContent;\n        console.log(\"hiddenvalue \"+document.getElementById(\"cf_num_users\").value +\" Output \"+numUsersOutput.textContent);\n\t  });\n\ndocument.addEventListener('wpcf7submit', function (event) {\n    console.log(\"called cf7 submit\");\n    const appdivcontainer = document.getElementById(\"app\");\n    appdivcontainer.style.display = \"block\";\n    rangeInput.style.display = \"none\";\n    rangenumbers.style.display = \"none\";\n    numUsersOutputSec.style.display = \"none\";\n    hidesliderwrapper.style.display = \"none\";\n    hidescaleContainer.style.display = \"none\";\n    const form = event.target;\n    const firstName = form.querySelector('input[name=\"firstname\"]')?.value || '';\n\n    hiigreetings.textContent = \"Hi \" + firstName + \",\";\n    hiigreetings.style.color = \"#00d5a8 !important\";\n    hiigreetings.style.fontSize = \"20px !important\";\n    hiigreetings.style.fontWeight = \"bold !important\";\n    setTimeout(function () {\n        console.log(\"called cf7 timeout\");\n\n        const userVal = numUsersOutput.textContent;\n        const priceVal = priceOutput.textContent;\n\n        cfNumUsers.value = userVal;\n        cfNumUsers.setAttribute(\"value\", userVal);\n\n        cfTotalPrice.value = priceVal;\n        cfTotalPrice.setAttribute(\"value\", priceVal);\n\n        console.log(\"Updated before submit:\", userVal, priceVal);\n\n            \/\/ Check if price is populated and then show button\n            if (priceVal) {\n\n                const priceH3 = document.querySelector(\".bestlms_h3_20.month_price_text\");\n\n                if (priceH3 && !document.querySelector(\".month_price_btn.book_demo_btn\")) {\n                    const btnWrapper = document.createElement(\"p\");\n                    btnWrapper.className = \"month_price_btn month_price book_demo_btn\";\n                    \n                    const btn = document.createElement(\"a\");\n                    btn.className = \"webwatchnowbtn11\";\n                    btn.style.cursor = \"pointer\";\n                    btn.textContent = \"Book a Demo\";\n\n                    \/\/ Add click alert\n                    btn.addEventListener(\"click\", function () {\n                        const iframeWrapper = document.getElementById(\"demo-iframe-wrapper\");\n                        const pricingSec = document.getElementById(\"pricing-calculator\");\n                        if (iframeWrapper) {\n                            iframeWrapper.style.display = \"block\";\n                        }\n                        if (pricingSec) {\n                          pricingSec.style.display = \"none\";\n                        }\n                    });\n\n                    btnWrapper.appendChild(btn);\n\n                    \/\/ Insert after the <h3> element\n                    priceH3.insertAdjacentElement(\"afterend\", btnWrapper);\n                }\n            }\n\/\/ Hide the popup after form submission\n        const popup = document.getElementById(\"customPopup\");\n        if (popup) {\n            popup.style.display = \"none\";\n        }\n    }, 100);\n}, false);\n\n\t\n\t  function calculatePricePerUser(users) {\n\t\tif (users <= 101) {\n\t\t  return 6.00;\n\t\t} else if (users <= 150) {\n\t\t  return 4.90;\n\t\t} else if (users <= 250) {\n\t\t  return 3.90;\n\t\t} else if (users <= 500) {\n\t\t  return 3.10;\n\t\t} else if (users <= 1000) {\n\t\t  return 2.45;\n\t\t} else if (users <= 2000) {\n\t\t  return 1.80;\n\t\t} else {\n\t\t  \/\/ Add more conditions for additional price tiers if needed\n\t\t  return 1.20; \/\/ Default price\n\t\t}\n\t  }\n\t});\n\t<\/script>\n\t<script type=\"text\/javascript\">\n      \/\/ Get the current page URL\n      var currentUrl = window.location.href;\n\n      \/\/ Base URL of the iframe\n      var iframeBaseUrl = \"https:\/\/www.paradisosolutions.com\/elearning\/appointment-for-iframe\/?iframe\";\n\n      \/\/ Construct the full iframe URL with the current page URL as a query parameter\n      var iframeUrl = iframeBaseUrl + \"&referalpage=\" + encodeURIComponent(currentUrl);\n\n      \/\/ Set the iframes src attribute to the constructed URL\n      document.getElementById(\"appointmentIframe\").src = iframeUrl;\n\n      \/\/ Function to reload the iframe when triggered from within the iframe\n      function reloadIframe() {\n        var iframe = window.parent.document.getElementById(\"appointmentIframe\");\n        iframe.src = iframe.src; \/\/ Reload iframe by setting its src attribute to its current value\n      }\n\n      \/\/ Event listener for messages from the iframe\n      window.addEventListener(\"message\", function(event) {\n        if (event.data === \"reloadIframe\") {\n          reloadIframe(); \/\/ Reload the iframe if the message is \"reloadIframe\"\n        }\n      });\n\n    <\/script-->\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n  const rangeInput = document.querySelector(\".calc-range\");\n  const rangenumbers = document.querySelector(\".range-labels\");\n  const usersparaheading = document.querySelector(\".bestlms_para_16\");\n  const usersheading = document.querySelector(\".bestlms_h3_20\");\n  const priceOutput = document.getElementById(\"calc-total-price\");\n  const hiigreetings = document.getElementById(\"hiigreetings\");\n  const numUsersOutput = document.getElementById(\"calc-count\");\n  const numUsersOutputSec = document.getElementById(\"calc-count-section\");\n  const hidescaleContainer = document.getElementById(\"scaleContainer\");\n  const hidesliderwrapper = document.getElementById(\"slider-wrapper\");\n  const defaultValue = 100;\n  const monthPrice = document.querySelector('.bestlms_h3_20.month_price_text');\n\n  const cfNumUsers = document.getElementById(\"cf_num_users\");\n  const cfTotalPrice = document.getElementById(\"cf_total_price\");\n\n  \/\/ Default setup\n  rangeInput.value = defaultValue;\n  const pricePerUser = calculatePricePerUser(defaultValue);\n  const totalPrice = defaultValue * pricePerUser;\n  priceOutput.textContent = totalPrice.toFixed(2);\n  numUsersOutput.textContent = defaultValue;\n\n  \/\/ Range input listener\n  rangeInput.addEventListener(\"input\", function() {\n    const value = parseInt(rangeInput.value);\n    const pricePerUser = calculatePricePerUser(value);\n    const totalPrice = value * pricePerUser;\n    priceOutput.textContent = totalPrice.toFixed(2);\n    numUsersOutput.textContent = value;\n\n    const checkInterval = setInterval(() => {\n      const setappuserscount = document.getElementById(\"userCount\");\n      if (setappuserscount) {\n        const value2 = setappuserscount.value;\n        if (value2 !== null && value2 !== \"\") {\n          setappuserscount.value = value;\n          setappuserscount.dispatchEvent(new Event('input', { bubbles: true }));\n          const activeBillingOption = document.querySelector('.billing-toggle-option.active');\n          if (activeBillingOption) {\n            activeBillingOption.dispatchEvent(new Event('click', { bubbles: true }));\n          }\n          if (typeof updateBillingToggle === 'function') {\n            updateBillingToggle();\n          }\n          clearInterval(checkInterval);\n        }\n      }\n    }, 1000);\n\n    document.getElementById(\"cf_num_users\").value = numUsersOutput.textContent;\n    document.getElementById(\"cf_total_price\").value = priceOutput.textContent;\n    console.log(\"hiddenvalue \" + document.getElementById(\"cf_num_users\").value + \" Output \" + numUsersOutput.textContent);\n  });\n\n  \/\/ Contact Form 7 Submit Event\n  \/\/document.addEventListener('wpcf7submit', function(event) {\n  document.addEventListener('wpcf7mailsent', function(event) {\n    console.log(\"called cf7 submit\");\n\n    const appdivcontainer = document.getElementById(\"app\");\n    if (appdivcontainer) appdivcontainer.style.display = \"block\";\n\n    \/\/ \u2705 Hide these sections after CF7 submission\n    if (hidesliderwrapper) hidesliderwrapper.style.display = \"none\";\n    if (numUsersOutputSec) numUsersOutputSec.style.display = \"none\";\n    if (hidescaleContainer) hidescaleContainer.style.display = \"none\";\nvar priceText = document.querySelector('.bestlms_h3_20.month_price_text');\n  if (priceText) {\n    priceText.style.display = 'none';\n  }\n    const form = event.target;\n    const firstName = form.querySelector('input[name=\"firstname\"]')?.value || '';\n\n    if (hiigreetings) {\n      hiigreetings.textContent = \"Hi \" + firstName + \",\";\n      hiigreetings.style.color = \"#00d5a8\";\n      hiigreetings.style.fontSize = \"20px\";\n      hiigreetings.style.fontWeight = \"bold\";\n    }\n\n    setTimeout(function() {\n      console.log(\"called cf7 timeout\");\n      const userVal = numUsersOutput.textContent;\n      const priceVal = priceOutput.textContent;\n\n      cfNumUsers.value = userVal;\n      cfNumUsers.setAttribute(\"value\", userVal);\n      cfTotalPrice.value = priceVal;\n      cfTotalPrice.setAttribute(\"value\", priceVal);\n\n      console.log(\"Updated before submit:\", userVal, priceVal);\n\n      \/\/ Show price & \"Book Demo\" button\n      if (priceVal) {\n        const priceH3 = document.querySelector(\".bestlms_h3_20.month_price_text\");\n        if (priceH3) {\n          priceH3.style.display = \"none\";\n          if (!document.querySelector(\".month_price_btn.book_demo_btn\")) {\n            const btnWrapper = document.createElement(\"p\");\n            btnWrapper.className = \"month_price_btn month_price book_demo_btn\";\n            const btn = document.createElement(\"a\");\n            btn.className = \"webwatchnowbtn11\";\n            btn.style.cursor = \"pointer\";\n            btn.textContent = \"Book a Demo\";\n            btn.addEventListener(\"click\", function() {\n              const iframeWrapper = document.getElementById(\"demo-iframe-wrapper\");\n              const pricingSec = document.getElementById(\"pricing-calculator\");\n              if (iframeWrapper) iframeWrapper.style.display = \"block\";\n              if (pricingSec) pricingSec.style.display = \"none\";\n            });\n            btnWrapper.appendChild(btn);\n            priceH3.insertAdjacentElement(\"afterend\", btnWrapper);\n          }\n        }\n      }\n\n      \/\/ Hide popup if any\n      const popup = document.getElementById(\"customPopup\");\n      if (popup) popup.style.display = \"none\";\n    }, 100);\n  }, false);\n\n  \/\/ Price calculation function\n  function calculatePricePerUser(users) {\n    if (users <= 101) {\n      return 6.00;\n    } else if (users <= 150) {\n      return 4.90;\n    } else if (users <= 250) {\n      return 3.90;\n    } else if (users <= 500) {\n      return 3.10;\n    } else if (users <= 1000) {\n      return 2.45;\n    } else if (users <= 2000) {\n      return 1.80;\n    } else {\n      return 1.20;\n    }\n  }\n});\n<\/script>\n\n<script type=\"text\/javascript\">\n  \/\/ Get the current page URL\n  var currentUrl = window.location.href;\n\n  \/\/ Base URL of the iframe\n  var iframeBaseUrl = \"https:\/\/www.paradisosolutions.com\/elearning\/appointment-for-iframe\/?iframe\";\n\n  \/\/ Construct the full iframe URL with the current page URL as a query parameter\n  var iframeUrl = iframeBaseUrl + \"&referalpage=\" + encodeURIComponent(currentUrl);\n\n  \/\/ Set the iframe src attribute (only if it exists)\n  if (document.getElementById(\"appointmentIframe\")) {\n    document.getElementById(\"appointmentIframe\").src = iframeUrl;\n  }\n\n  \/\/ Function to reload the iframe when triggered from within the iframe\n  function reloadIframe() {\n    var iframe = window.parent.document.getElementById(\"appointmentIframe\");\n    if (iframe) iframe.src = iframe.src; \/\/ Reload iframe by setting its src attribute to its current value\n  }\n\n  \/\/ Event listener for messages from the iframe\n  window.addEventListener(\"message\", function(event) {\n    if (event.data === \"reloadIframe\") {\n      reloadIframe();\n    }\n  });\n<\/script>\n\n    <!-- End of Provided HTML -->\n\n    <!-- Your existing JavaScript code -->\n    <script type=\"text\/javascript\">\n       \/\/ Function to reload the iframe when triggered from within the iframe\n       function reloadIframe() {\n           var iframe = document.getElementById(\"appointmentIframe\");\n           iframe.src = iframe.src; \/\/ Reload iframe by setting its src attribute to its current value\n       }\n\n       \/\/ Add onclick event handler to the button with the class \"redirect-link\"\n       document.addEventListener(\"DOMContentLoaded\", function() {\n           var button = document.querySelector(\".redirect-link\");\n           button.onclick = function() {\n               \/\/ Call the reloadIframe function when the button is clicked\n               reloadIframe();\n           };\n       });\n    <\/script>\n    \n    <script>\n  const openBtn = document.getElementById('openPopup');\n  const closeBtn = document.getElementById('closePopup');\n  const popup = document.getElementById('customPopup');\n\n  openBtn.addEventListener('click', () => {\n    popup.style.display = 'flex';\n  });\n\n  closeBtn.addEventListener('click', () => {\n    popup.style.display = 'none';\n  });\n\n  \/\/ Optional: Close popup on outside click\n  window.addEventListener('click', (e) => {\n    if (e.target === popup) {\n      popup.style.display = 'none';\n    }\n  });\ndocument.querySelector('.webwatchnowbtn11').addEventListener('click', function () {\n    setTimeout(() => {\n        const popup = document.querySelector('#openPopup');\n\n        \/\/ Source fields outside the popup\n        const sourceTotalPrice = document.querySelector('#cf_total_price');\n        const sourceNumUsers = document.querySelector('#cf_num_users');\n\n        \/\/ Target fields inside the popup\n        const targetTotalPrice = popup?.querySelector('#cf_total_price2');\n        const targetNumUsers = popup?.querySelector('#cf_num_users2');\n\n        if (popup && sourceTotalPrice && targetTotalPrice && sourceNumUsers && targetNumUsers) {\n            targetTotalPrice.value = sourceTotalPrice.value;\n            targetNumUsers.value = sourceNumUsers.value;\n        } else {\n            console.warn('\u274c Some fields were not found for copying.');\n        }\n    }, 500); \/\/ You can increase delay if needed\n});\n\n<\/script>\n\n<script>\njQuery(document).on('click', '.wpcf7-submit', function () {\n    document.addEventListener('wpcf7mailsent', function (event) {\n        console.log(event);\n        if ('21202' == event.detail.contactFormId) {\n            jQuery(\".month_price_hide\").removeClass(\"month_price_hide\");\n            \/\/jQuery(\".month_price_btn\").addClass(\"month_price_hide\");\n            jQuery(\"#customPopup\").css('display', 'none');\n        }\n    }, { once: true });\n});\n\n\/\/-------\n\/\/ document.addEventListener('wpcf7mailsent', function (event) {\n\/\/     console.log(\"Actual ID:\", event.detail.contactFormId);\n\/\/ });\n<\/script>\n<script>\n\/*document.addEventListener('wpcf7mailsent', function(event) {\n    \/\/ Make sure this is the correct form ID (change 4176 if needed)\n    if (event.detail.contactFormId == 4176) {\n        const buttonWrapper = document.querySelector('.month_price_btn');\n        const button = buttonWrapper.querySelector('a.webwatchnowbtn11');\n\n        if (button) {\n            \/\/ 1. Change text\n            button.textContent = \"Book A Demo\";\n\n            \/\/ 2. Remove unwanted classes\n            button.classList.remove('popmake-119486', 'pum-trigger');\n\n            \/\/ 3. Add new classes to the wrapper\n            buttonWrapper.classList.add('month_price', 'book_demo_btn');\n buttonWrapper.removeAttribute('id');\n            \/\/ 4. Add click event to show calendar section\n            button.addEventListener('click', function() {\n                const calendarSec = document.querySelector('.pricingcal_pricingsec.calender');\n                if (calendarSec) {\n                    calendarSec.style.display = 'block';\n                }\n            });\n        }\n    }\n}, false);\n*\/\ndocument.addEventListener('DOMContentLoaded', function() {\n    const popup = document.getElementById('customPopup');\n\n    document.addEventListener('click', function(e) {\n        const btnWrapper = e.target.closest('.month_price_btn');\n        if (!btnWrapper) return;\n\n        const button = btnWrapper.querySelector('a');\n        if (!button) return;\n\n        \/\/ When user clicks \"Book A Demo\"\n        if (button.textContent.trim() === \"Book A Demo\") {\n            const calendarSection = document.querySelector('.pricingcal_pricingsec.calender');\n            const pricingSection = document.querySelector('.pricingcal_pricingsec:not(.calender)');\n\n            \/\/ Show iframe section\n            if (calendarSection) calendarSection.style.display = 'block';\n\n            \/\/ Hide main pricing section\n            if (pricingSection) pricingSection.style.display = 'none';\n\n            \/\/ Hide popup if it's open\n            if (popup) popup.style.display = 'none';\n        } else {\n            \/\/ Otherwise, open popup\n            if (popup) popup.style.display = 'flex';\n        }\n    });\n\n    \/\/ After CF7 form submission\n    document.addEventListener('wpcf7mailsent', function(event) {\n        const buttonWrapper = document.querySelector('.month_price_btn#openPopup');\n        if (!buttonWrapper) return;\n\n        const button = buttonWrapper.querySelector('a');\n\n        \/\/ Remove popup trigger classes\n        button.classList.remove(...Array.from(button.classList).filter(cls => cls.startsWith('popmake') || cls === 'pum-trigger'));\n\n        \/\/ Change button text\n        button.textContent = \"Book A Demo\";\n\n        \/\/ Remove old ID\n        buttonWrapper.removeAttribute('id');\n\n        \/\/ Add new classes\n        buttonWrapper.classList.add('month_price', 'book_demo_btn');\n    });\n});\n<\/script>\n    [\/vc_column_text][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_row_inner row_type=&#8221;row&#8221; type=&#8221;full_width&#8221; text_align=&#8221;left&#8221; css_animation=&#8221;&#8221; el_class=&#8221;bg_blog_cta_style_1&#8243; css=&#8221;.vc_custom_1675340337766{background-image: url(https:\/\/stagingps.paradisosolutions.com\/blog\/wp-content\/uploads\/2022\/10\/cta-background.png?id=14643) !important;}&#8221;][vc_column_inner][vc_column_text]<\/p>\n<p class=\"blog_cta_white_text1\">Adapting self-hosted LMS in 2023, reduces expenses and eliminates reliance on a third-party provider, protecting data privacy.<\/p>\n<p>[\/vc_column_text]\n\n\t<a href=\"https:\/\/www.paradisosolutions.com\/elearning\/appointment\/\" target=\"_blank\"  class=\"qode-btn qode-btn-medium qode-btn-solid  blog_cta_black_btn1 qode-btn-default-hover\"  >\n\t    <span class=\"qode-btn-text\">Request FREE DEMO<\/span>\t<\/a>\n\n[\/vc_column_inner][\/vc_row_inner][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text] [\/vc_column_text][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text] [\/vc_column_text][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text] [\/vc_column_text][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text]<\/p>\n<p>[\/vc_column_text][\/vc_column][\/vc_row][vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text]<\/p>\n<h2>Conclusion<\/h2>\n<p>In conclusion, Each organization&#8217;s unique goals and criteria will determine which self-hosted LMS is best. However, well-known self-hosted LMS choices like <a href=\"https:\/\/www.paradisosolutions.com\/\">Paradiso LMS<\/a>, Moodle, Chamilo, Totara Learn, and Dokeos offer a variety of tools for creating and managing courses, conducting assessments, and producing reports. Before selecting a <a href=\"https:\/\/www.paradisosolutions.com\/self-hosted-lms\">self-hosted LMS in 2023<\/a>, organisations should carefully assess their requirements and take into account elements like ease of use, customization possibilities, support, and documentation. Additionally, companies should be aware that self-hosted LMS solutions demand a considerable time and resource commitment during setup and maintenance, so they need either have the requisite skills on staff or be ready to hire external support. [\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>[vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text] What is Self Hosted LMS? A self-hosted LMS&#8230;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1231,"featured_media":15602,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[500],"tags":[],"class_list":["post-15575","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-corporate"],"contentshake_article_id":"","yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>10 Best Self Hosted Learning Management Systems in 2023 - Paradiso eLearning Blog<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"10 Best Self Hosted Learning Management Systems in 2023 - Paradiso eLearning Blog\" \/>\n<meta property=\"og:description\" content=\"[vc_row row_type=&#8221;row&#8221; use_row_as_full_screen_section=&#8221;no&#8221; type=&#8221;full_width&#8221; angled_section=&#8221;no&#8221; text_align=&#8221;left&#8221; background_image_as_pattern=&#8221;without_pattern&#8221; css_animation=&#8221;&#8221;][vc_column][vc_column_text] What is Self Hosted LMS? A self-hosted LMS...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/stagingps.paradisosolutions.com\/blog\/best-self-hosted-lms-in-2023\/\" \/>\n<meta property=\"og:site_name\" content=\"Paradiso eLearning Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-02T12:34:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-08T06:52:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-content\/uploads\/2023\/02\/Web-1920-\u2013-190.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1366\" \/>\n\t<meta property=\"og:image:height\" content=\"387\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"7 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/#website\",\"url\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/\",\"name\":\"Paradiso eLearning Blog\",\"description\":\"The e-learning solution you need is that we can offer you.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/best-self-hosted-lms-in-2023\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-content\/uploads\/2023\/02\/Web-1920-\\u2013-190.png\",\"width\":1366,\"height\":387,\"caption\":\"Self Hosted LMS\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/best-self-hosted-lms-in-2023\/#webpage\",\"url\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/best-self-hosted-lms-in-2023\/\",\"name\":\"10 Best Self Hosted Learning Management Systems in 2023 - Paradiso eLearning Blog\",\"isPartOf\":{\"@id\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/best-self-hosted-lms-in-2023\/#primaryimage\"},\"datePublished\":\"2023-02-02T12:34:13+00:00\",\"dateModified\":\"2026-04-08T06:52:23+00:00\",\"author\":{\"@id\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/#\/schema\/person\/05644f262d42d127b66a0d0c3ea39cfd\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/stagingps.paradisosolutions.com\/blog\/best-self-hosted-lms-in-2023\/\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/#\/schema\/person\/05644f262d42d127b66a0d0c3ea39cfd\",\"name\":\"Priyanka Sharma\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/stagingps.paradisosolutions.com\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d4146d868baab2184a67ed57e0965cbd?s=96&d=mm&r=g\",\"caption\":\"Priyanka Sharma\"},\"description\":\"Priyanka Sharma is a dedicated Learning &amp; Development (L&amp;D) expert and professional writer with expertise in instructional design, eLearning development, and corporate training. Currently working as an Instructional Designer at Paradiso Solutions, she specializes in creating engaging digital learning experiences using advanced LMS platforms, instructional strategies, and AI-powered learning tools.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/priyanka-sharma-168299255\/\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","amp_validity":null,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/posts\/15575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/users\/1231"}],"replies":[{"embeddable":true,"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=15575"}],"version-history":[{"count":2,"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/posts\/15575\/revisions"}],"predecessor-version":[{"id":21201,"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/posts\/15575\/revisions\/21201"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/media\/15602"}],"wp:attachment":[{"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=15575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=15575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stagingps.paradisosolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=15575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}