{"id":12392,"date":"2026-04-20T07:11:42","date_gmt":"2026-04-20T07:11:42","guid":{"rendered":""},"modified":"2026-04-21T19:58:31","modified_gmt":"2026-04-21T19:58:31","slug":"csp-upgrade-selector","status":"publish","type":"lessons","link":"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/","title":{"rendered":"CSP Upgrade Selector"},"content":{"rendered":"\n<p>Welcome to the CSP Upgrade Selector! Simply scroll or search for a license to understand its upgrade options. <br><br>The tool is only provided for guidance purposes, and we recommend you always double check the options at point of purchase.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <link rel=\"icon\" href=\"https:\/\/i0.wp.com\/www.licensingschool.co.uk\/wp-content\/uploads\/2021\/05\/cropped-LS-Site-Icon-1.png?w=64&#038;ssl=1\" type=\"image\/png\">\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>CSP Upgrades Checker<\/title>\n    <style>\n        \/* All styles are now scoped to the #csp-upgrades-tool ID to prevent conflicts when embedded *\/\n        #csp-upgrades-tool {\n            --primary-color: #36B44A;\n            --secondary-color: #9ACA3C;\n            --medium-gray: #e2e8f0;\n            --dark-gray: #1e293b;\n            --text-gray: #475569;\n            --white: #ffffff;\n            --zebra-gray: #f9fafb;\n            --shadow-color: rgba(30, 41, 59, 0.08);\n            --bullet-color: #97C93F;\n\n            font-family: \"Segoe UI\", -apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif;\n            background-color: transparent;\n            color: var(--dark-gray);\n            margin: 0;\n            padding: 0;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n        }\n\n        #csp-upgrades-tool .container {\n            width: 100%;\n            max-width: 1200px;\n            background-color: transparent; \n            box-shadow: none; \n            display: flex;\n            flex-direction: column;\n            padding: 30px;\n            box-sizing: border-box;\n            margin-bottom: 30px;\n        }\n\n        #csp-upgrades-tool .controls {\n            display: flex;\n            flex-direction: column;\n            margin-bottom: 30px;\n        }\n\n        #csp-upgrades-tool .search-wrapper {\n            position: relative;\n            width: 100%;\n            display: flex;\n            border-radius: 30px;\n            border: 1px solid var(--medium-gray);\n            overflow: hidden;\n            transition: all 0.3s ease;\n        }\n\n        #csp-upgrades-tool .search-wrapper:focus-within {\n            box-shadow: 0 0 0 4px rgba(54, 180, 74, 0.15);\n            border-color: var(--primary-color);\n        }\n\n        #csp-upgrades-tool #searchInput {\n            width: 100%;\n            padding: 18px 24px;\n            border: none;\n            font-size: 1.4em; \/* Increased font size *\/\n            box-sizing: border-box;\n            background-color: var(--white);\n            color: var(--dark-gray);\n            flex-grow: 1;\n            border-radius: 0;\n            box-shadow: none;\n        }\n\n        #csp-upgrades-tool #searchInput::placeholder {\n            color: #94a3b8;\n            font-style: italic;\n            font-weight: 400; \/* Made placeholder text less weighty *\/\n        }\n\n        #csp-upgrades-tool #searchInput:focus {\n            outline: none;\n        }\n\n        #csp-upgrades-tool #clearSearchBtn {\n            display: none;\n            background-color: #fee2e2; \n            color: #dc2626; \n            border: none;\n            border-left: 1px solid #fecaca; \n            font-size: 1.8em; \n            font-weight: 500; \n            line-height: 1;\n            cursor: pointer;\n            padding: 0 22px;\n            transition: all 0.2s ease;\n            align-items: center;\n            justify-content: center;\n        }\n\n        #csp-upgrades-tool #clearSearchBtn:hover {\n            background-color: #fecaca; \n            color: #b91c1c;\n        }\n\n        #csp-upgrades-tool .table-wrapper {\n            overflow: hidden; \/* This clips the inner table to the wrapper's border-radius *\/\n            border-radius: 10px;\n            border: 1px solid var(--medium-gray);\n            box-shadow: 0 2px 10px rgba(0,0,0,0.02);\n            \/* Added to ensure background doesn't bleed *\/\n            background-color: var(--white); \n        }\n\n        #csp-upgrades-tool table {\n            width: 100%;\n            \/* Changed to separate to fix WebKit border-radius clipping bug *\/\n            border-collapse: separate; \n            border-spacing: 0;\n            background-color: var(--white);\n            margin: 0;\n        }\n\n        #csp-upgrades-tool th, #csp-upgrades-tool td {\n            padding: 16px 20px;\n            text-align: left;\n            border-bottom: 1px solid var(--medium-gray);\n            line-height: 1.4;\n        }\n        \n        #csp-upgrades-tool tr:last-child td,\n        #csp-upgrades-tool tr.last-visible-row td {\n            border-bottom: none !important;\n        }\n\n        #csp-upgrades-tool th {\n            background-color: var(--secondary-color);\n            color: white;\n            font-weight: 600;\n            font-size: 1.05em;\n            position: sticky;\n            top: 0;\n            z-index: 1;\n            letter-spacing: 0.5px;\n        }\n\n        #csp-upgrades-tool td {\n            height: 1px;\n            \/* Added transition directly to td for smoother background\/shadow animation *\/\n            transition: background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n        }\n\n        #csp-upgrades-tool td:first-child {\n            vertical-align: top;\n            font-size: 1.1em; \/* Increased font size *\/\n            font-weight: 600;\n            color: var(--dark-gray);\n            width: 40%;\n            border-right: 1px solid var(--medium-gray);\n        }\n\n        #csp-upgrades-tool .upgrade-list-wrapper {\n            display: flex;\n            flex-direction: column;\n            justify-content: space-between;\n            height: 100%;\n            min-height: 100%;\n        }\n\n        #csp-upgrades-tool td ul {\n            margin: 0;\n            padding-left: 20px;\n            color: var(--text-gray);\n            flex-grow: 1;\n        }\n\n        #csp-upgrades-tool td ul li {\n            margin-bottom: 8px;\n        }\n\n        #csp-upgrades-tool td ul li::marker {\n            color: var(--bullet-color);\n            font-size: 1.1em;\n        }\n\n        #csp-upgrades-tool td ul li:last-child {\n            margin-bottom: 0;\n        }\n\n        #csp-upgrades-tool tr.even-row td {\n            background-color: var(--zebra-gray);\n        }\n        \n        \/* New non-clipping hover animation using background color and inset shadow *\/\n        #csp-upgrades-tool tr:hover:not(.no-results-row) td {\n            background-color: #f4fbf5; \/* Soft primary color tint *\/\n        }\n        \n        #csp-upgrades-tool tr:hover:not(.no-results-row) td:first-child {\n            box-shadow: inset 5px 0 0 var(--primary-color);\n        }\n\n        #csp-upgrades-tool .no-results-row td {\n            text-align: center;\n            font-style: italic;\n            color: #888;\n            padding: 40px;\n            background-color: var(--white) !important;\n            border-right: none !important;\n            border-bottom: none !important;\n        }\n\n        #csp-upgrades-tool mark.highlight {\n            background-color: #fef08a;\n            color: inherit;\n            padding: 0;\n            border-radius: 2px;\n            box-decoration-break: clone;\n            -webkit-box-decoration-break: clone;\n        }\n    <\/style>\n<\/head>\n<body>\n\n<div id=\"csp-upgrades-tool\">\n\n    <div class=\"container\">\n        <div class=\"controls\">\n            <div class=\"search-wrapper\">\n                <input type=\"text\" id=\"searchInput\" autocomplete=\"off\">\n                <button id=\"clearSearchBtn\">&times;<\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"table-wrapper\">\n            <table id=\"upgradesTable\">\n                <thead>\n                    <tr>\n                        <th>Current license<\/th>\n                        <th>Eligible upgrade option(s)<\/th>\n                    <\/tr>\n                <\/thead>\n                <tbody><\/tbody>\n            <\/table>\n        <\/div>\n    <\/div>\n\n    <script>\n        let debounceTimer;\n\n        function escapeHtml(unsafe) {\n            return (unsafe || '').toString()\n                 .replace(\/&\/g, \"&amp;\")\n                 .replace(\/<\/g, \"&lt;\")\n                 .replace(\/>\/g, \"&gt;\")\n                 .replace(\/\"\/g, \"&quot;\")\n                 .replace(\/'\/g, \"&#039;\");\n        }\n\n        function initTypingEffect() {\n            const searchInput = document.getElementById('searchInput');\n            const targetText = \"Search the current license to show valid upgrades... \";\n            let i = 0;\n            searchInput.placeholder = \"\";\n\n            function typeWriter() {\n                if (i < targetText.length) {\n                    searchInput.placeholder += targetText.charAt(i);\n                    i++;\n                    setTimeout(typeWriter, 50);\n                }\n            }\n            setTimeout(typeWriter, 300);\n        }\n\n        function formatLicenseNames(text) {\n            if (!text) return text;\n            return text\n                .replace(\/Apps for Enterprise\/gi, \"Apps for Enterprise\")\n                .replace(\/Apps for Business\/gi, \"Apps for Business\")\n                .replace(\/\\(no Teams\\)\/gi, \"(no Teams)\");\n        }\n\n        function getSortScore(name) {\n            let baseScore = 9999;\n            const n = name.toUpperCase();\n            const isNoTeams = n.includes(\"(no Teams)\") ? 0 : 10;\n\n            if (n.includes(\"BUSINESS\")) {\n                if (n.includes(\"APPS FOR BUSINESS\")) baseScore = 100;\n                else if (n.includes(\"BUSINESS BASIC\")) baseScore = 110;\n                else if (n.includes(\"BUSINESS STANDARD\")) baseScore = 120;\n                else if (n.includes(\"BUSINESS PREMIUM\")) baseScore = 130;\n                else baseScore = 190;\n            }\n            else if (n.includes(\"OFFICE 365 E\")) {\n                if (n.includes(\"E1\")) baseScore = 210;\n                else if (n.includes(\"E3\")) baseScore = 230;\n                else if (n.includes(\"E5\")) baseScore = 250;\n                else baseScore = 290;\n            }\n            else if (n.includes(\"OFFICE 365 F\")) {\n                if (n.includes(\"F1\")) baseScore = 310;\n                else if (n.includes(\"F3\")) baseScore = 330;\n                else baseScore = 390;\n            }\n            else if (n.includes(\"MICROSOFT 365 F\")) {\n                if (n.includes(\"F1\")) baseScore = 410;\n                else if (n.includes(\"F3\")) baseScore = 430;\n                else baseScore = 490;\n            }\n            else if (n.includes(\"MICROSOFT 365 E\") || n.includes(\"APPS FOR ENTERPRISE\")) {\n                if (n.includes(\"APPS FOR ENTERPRISE\")) baseScore = 500;\n                else if (n.includes(\"E3\")) baseScore = 530;\n                else if (n.includes(\"E5\")) baseScore = 550;\n                else baseScore = 590;\n            }\n\n            return baseScore + isNoTeams;\n        }\n\n        document.addEventListener('DOMContentLoaded', function() {\n            initTypingEffect();\n            loadTableData();\n\n            const searchInput = document.getElementById('searchInput');\n            const clearSearchBtn = document.getElementById('clearSearchBtn');\n            const toolContainer = document.getElementById('csp-upgrades-tool');\n\n            searchInput.focus({ preventScroll: true });\n\n            toolContainer.addEventListener('click', (e) => {\n                const selection = window.getSelection().toString();\n                if (!selection && e.target.id !== 'clearSearchBtn' && e.target.tagName !== 'INPUT') {\n                    searchInput.focus({ preventScroll: true });\n                }\n            });\n\n            searchInput.addEventListener('input', () => {\n                clearSearchBtn.style.display = searchInput.value ? 'flex' : 'none';\n                clearTimeout(debounceTimer);\n                debounceTimer = setTimeout(applyFilters, 300);\n            });\n\n            clearSearchBtn.addEventListener('click', (e) => {\n                e.stopPropagation();\n                searchInput.value = '';\n                clearSearchBtn.style.display = 'none';\n                applyFilters();\n                searchInput.focus({ preventScroll: true });\n            });\n        });\n\n        function loadTableData() {\n            const rawText = document.getElementById('rawdata').textContent.trim();\n            const tableBody = document.getElementById('upgradesTable').getElementsByTagName('tbody')[0];\n            tableBody.innerHTML = '';\n\n            if (!rawText) return;\n\n            const rows = rawText.split('\\n');\n            const groupedData = {};\n\n            rows.forEach(row => {\n                if (!row.trim()) return;\n\n                const columns = row.split('\\t');\n                const keyStr = columns[0] ? columns[0].trim() : \"\";\n                const valStr = columns.length > 1 ? columns[1].replace(\/\u2022\/g, '').trim() : \"\";\n                const key = keyStr !== \"\" ? keyStr : \"XXX\";\n                const value = valStr !== \"\" ? valStr : \"XXX\";\n\n                if (key === \"XXX\" && value === \"XXX\") return;\n\n                const keyContainsEST = key.toUpperCase().includes('EXTENDED SERVICE TERM');\n                const valueContainsEST = value.toUpperCase().includes('EXTENDED SERVICE TERM');\n\n                if (keyContainsEST || valueContainsEST) return;\n\n                const keyIs3Year = key.toLowerCase().includes('3 year');\n                const valueIs3Year = value.toLowerCase().includes('3 year');\n\n                if (keyIs3Year && !valueIs3Year) return;\n\n                if (!groupedData[key]) {\n                    groupedData[key] = [];\n                }\n                groupedData[key].push(value);\n            });\n\n            for (const key in groupedData) {\n                if (groupedData[key].length > 0) {\n                    groupedData[key].sort((a, b) => {\n                        const scoreA = getSortScore(a);\n                        const scoreB = getSortScore(b);\n                        if (scoreA !== scoreB) {\n                            return scoreA - scoreB;\n                        }\n                        return a.localeCompare(b);\n                    });\n\n                    const newRow = tableBody.insertRow();\n                    const td1 = newRow.insertCell(0);\n                    td1.className = 'license-cell';\n                    const formattedKey = formatLicenseNames(key);\n                    td1.dataset.original = formattedKey;\n                    td1.textContent = formattedKey;\n\n                    const td2 = newRow.insertCell(1);\n                    const listItems = groupedData[key].map(item => {\n                        const formattedItem = formatLicenseNames(item);\n                        const safeAttr = escapeHtml(formattedItem);\n                        return `<li class=\"upgrade-item\" data-original=\"${safeAttr}\">${escapeHtml(formattedItem)}<\/li>`;\n                    }).join('');\n\n                    td2.innerHTML = `<div class=\"upgrade-list-wrapper\"><ul>${listItems}<\/ul><\/div>`;\n                }\n            }\n\n            const noResultsRow = tableBody.insertRow();\n            noResultsRow.classList.add('no-results-row');\n            noResultsRow.style.display = 'none';\n            const cell = noResultsRow.insertCell(0);\n            cell.colSpan = 2;\n            cell.textContent = 'No matching licenses found. Please adjust your search.';\n\n            applyFilters();\n        }\n\n        function highlightText(text, terms) {\n            if (!text) return \"\";\n            if (!terms || terms.length === 0) return escapeHtml(text);\n            \n            const sortedTerms = [...terms].sort((a, b) => b.length - a.length);\n            const escapedTerms = sortedTerms.map(t => t.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&'));\n            const regex = new RegExp(`(${escapedTerms.join('|')})`, 'gi');\n            \n            const parts = text.split(regex);\n            let result = '';\n            for (let i = 0; i < parts.length; i++) {\n                if (i % 2 === 0) {\n                    result += escapeHtml(parts[i]);\n                } else {\n                    result += `<mark class=\"highlight\">${escapeHtml(parts[i])}<\/mark>`;\n                }\n            }\n            return result;\n        }\n\n        function applyFilters() {\n             \/\/ New search logic: remove brackets and handle abbreviations\n            const searchInputVal = document.getElementById('searchInput').value.toUpperCase().replace(\/[()]\/g, '');\n            const searchTerms = searchInputVal.split(' ').filter(term => term.trim() !== '');\n\n            const activeTable = document.getElementById('upgradesTable');\n            const dataRows = activeTable.querySelectorAll('tbody tr:not(.no-results-row)');\n            const noResultsRow = activeTable.querySelector('.no-results-row');\n            let visibleRowCount = 0;\n\n            dataRows.forEach(row => {\n                const licenseCell = row.querySelector('.license-cell');\n                const licenseText = licenseCell.dataset.original;\n                \n                \/\/ New logic to create a more searchable string\n                let searchableText = licenseText.toUpperCase().replace(\/[()]\/g, '');\n\n                if (searchableText.includes(\"MICROSOFT 365\")) {\n                    searchableText += \" M365\";\n                }\n                if (searchableText.includes(\"OFFICE 365\")) {\n                    searchableText += \" O365\";\n                }\n                if (searchableText.includes(\"ENTERPRISE MOBILITY + SECURITY\") || searchableText.includes(\"ENTERPRISE MOBILITY AND SECURITY\")) {\n                    searchableText += \" EMS\";\n                }\n\n                const searchMatch = searchTerms.every(term => searchableText.includes(term));\n\n                if (searchMatch || searchTerms.length === 0) {\n                    row.style.display = \"\";\n                    visibleRowCount++;\n                    \n                    licenseCell.innerHTML = highlightText(licenseText, searchTerms);\n                    \n                    const upgradeItems = row.querySelectorAll('.upgrade-item');\n                    upgradeItems.forEach(li => {\n                        li.textContent = li.dataset.original;\n                    });\n                } else {\n                    row.style.display = \"none\";\n                }\n            });\n            \n            let visibleCounter = 0;\n            let lastVisibleRow = null;\n\n            dataRows.forEach(row => {\n                row.classList.remove('even-row', 'last-visible-row');\n                if (row.style.display !== 'none') {\n                    if (visibleCounter % 2 !== 0) {\n                        row.classList.add('even-row');\n                    }\n                    lastVisibleRow = row;\n                    visibleCounter++;\n                }\n            });\n\n            \/\/ Apply specific class to the last visible row to fix \"bottom lip\" styling issues\n            if (lastVisibleRow) {\n                lastVisibleRow.classList.add('last-visible-row');\n            }\n            \n            if (noResultsRow) {\n                noResultsRow.style.display = visibleRowCount === 0 ? \"\" : \"none\";\n            }\n        }\n    <\/script>\n\n    <!-- Paste Data inside this script tag below. Keep it in TSV format (Column1 [tab] Column2). -->\n    <script id=\"rawdata\" type=\"text\/plain\">\n\n\n\n\nEnterprise Mobility + Security E3\tEnterprise Mobility + Security E5\nEnterprise Mobility + Security E3\tMicrosoft 365 E3 (no Teams)\nEnterprise Mobility + Security E3\tMicrosoft 365 E3\nEnterprise Mobility + Security E5\tMicrosoft 365 E5\nEnterprise Mobility + Security E5\tMicrosoft 365 E5 (no Teams)\nExchange Online (Plan 1)\tMicrosoft 365 Business Premium\nExchange Online (Plan 1)\tMicrosoft 365 Business Basic\nExchange Online (Plan 1)\tMicrosoft 365 Business Standard\nExchange Online (Plan 1)\tExchange Online (Plan 2)\nExchange Online (Plan 1)\tMicrosoft 365 Business Basic (no Teams)\nExchange Online (Plan 1)\tMicrosoft 365 E3\nExchange Online (Plan 1)\tMicrosoft 365 E5\nExchange Online (Plan 1)\tMicrosoft 365 E5 (no Teams)\nExchange Online (Plan 1)\tMicrosoft 365 E3 - Unattended License\nExchange Online (Plan 1)\tMicrosoft 365 E3 (no Teams)\nExchange Online (Plan 1)\tOffice 365 E1\nExchange Online (Plan 1)\tOffice 365 E3 (no Teams)\nExchange Online (Plan 1)\tOffice 365 E5\nExchange Online (Plan 1)\tOffice 365 E5 (no Teams)\nExchange Online (Plan 1)\tOffice 365 E3\nExchange Online (Plan 1)\tOffice 365 E5 without Audio Conferencing\nExchange Online (Plan 1)\tOffice 365 E1 (no Teams)\nExchange Online (Plan 2)\tMicrosoft 365 Business Premium\nExchange Online (Plan 2)\tMicrosoft 365 E5 (no Teams)\nExchange Online (Plan 2)\tMicrosoft 365 E5\nExchange Online (Plan 2)\tMicrosoft 365 E3 (no Teams)\nExchange Online (Plan 2)\tOffice 365 E3\nExchange Online (Plan 2)\tOffice 365 E3 (no Teams)\nExchange Online (Plan 2)\tMicrosoft 365 E3\nExchange Online (Plan 2)\tOffice 365 E5 (no Teams)\nExchange Online (Plan 2)\tOffice 365 E5\nExchange Online (Plan 2)\tMicrosoft 365 E3 - Unattended License\nExchange Online (Plan 2)\tOffice 365 E5 without Audio Conferencing\nMicrosoft 365 Apps for business\tMicrosoft 365 Apps for enterprise\nMicrosoft 365 Apps for business\tMicrosoft 365 Business Premium (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 Apps for business\tMicrosoft 365 Business Premium (no Teams)\nMicrosoft 365 Apps for business\tMicrosoft 365 Business Premium and Microsoft 365 Copilot Business\nMicrosoft 365 Apps for business\tMicrosoft 365 Business Standard\nMicrosoft 365 Apps for business\tMicrosoft 365 Business Premium\nMicrosoft 365 Apps for business\tMicrosoft 365 Business Standard (no Teams)\nMicrosoft 365 Apps for business\tMicrosoft 365 Business Standard (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 Apps for business\tMicrosoft 365 Business Standard and Microsoft 365 Copilot Business\nMicrosoft 365 Apps for business\tMicrosoft 365 E5\nMicrosoft 365 Apps for business\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 Apps for business\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 Apps for business\tMicrosoft 365 E3\nMicrosoft 365 Apps for business\tMicrosoft 365 E3 - Unattended License\nMicrosoft 365 Apps for business\tOffice 365 E1\nMicrosoft 365 Apps for business\tOffice 365 E5\nMicrosoft 365 Apps for business\tOffice 365 E3 (no Teams)\nMicrosoft 365 Apps for enterprise\tMicrosoft 365 E5\nMicrosoft 365 Apps for enterprise\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 Apps for enterprise\tOffice 365 E3\nMicrosoft 365 Apps for enterprise\tMicrosoft 365 E3 - Unattended License\nMicrosoft 365 Apps for enterprise\tMicrosoft 365 E3\nMicrosoft 365 Apps for enterprise\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 Apps for enterprise\tOffice 365 E5 (no Teams)\nMicrosoft 365 Apps for enterprise\tOffice 365 E3 (no Teams)\nMicrosoft 365 Apps for enterprise\tOffice 365 E5\nMicrosoft 365 Apps for enterprise\tOffice 365 E5 without Audio Conferencing\nMicrosoft 365 Business Basic\tMicrosoft 365 Business Basic and Microsoft 365 Copilot Business\nMicrosoft 365 Business Basic\tMicrosoft 365 Business Premium (no Teams)\nMicrosoft 365 Business Basic\tMicrosoft 365 Business Premium\nMicrosoft 365 Business Basic\tMicrosoft 365 Business Premium and Microsoft 365 Copilot Business\nMicrosoft 365 Business Basic\tMicrosoft 365 Business Standard (no Teams)\nMicrosoft 365 Business Basic\tMicrosoft 365 Business Standard\nMicrosoft 365 Business Basic\tMicrosoft 365 Business Standard and Microsoft 365 Copilot Business\nMicrosoft 365 Business Basic\tMicrosoft 365 E3\nMicrosoft 365 Business Basic\tMicrosoft 365 E3 - 3 year\nMicrosoft 365 Business Basic\tMicrosoft 365 E3 (no Teams) - 3 year\nMicrosoft 365 Business Basic\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 Business Basic\tMicrosoft 365 E3 - Unattended License\nMicrosoft 365 Business Basic\tMicrosoft 365 E5 - 3 year\nMicrosoft 365 Business Basic\tMicrosoft 365 E5\nMicrosoft 365 Business Basic\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 Business Basic\tMicrosoft 365 E5 (No Teams) - 3 year\nMicrosoft 365 Business Basic\tOffice 365 E3\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 Business Premium (no Teams)\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 Business Basic (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 Business Premium (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 Business Standard\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 Business Premium\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 Business Basic\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 Business Standard (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 Business Standard (no Teams)\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 E5 (no Teams) - 3 year\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 E3 (no Teams) - 3 year\nMicrosoft 365 Business Basic (no Teams)\tOffice 365 E3 (no Teams)\nMicrosoft 365 Business Basic (no Teams)\tOffice 365 E5 (no Teams)\nMicrosoft 365 Business Basic (no Teams)\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 Business Basic (no Teams)\tOffice 365 E1 (no Teams)\nMicrosoft 365 Business Premium\tMicrosoft 365 Business Premium and Microsoft 365 Copilot Business\nMicrosoft 365 Business Premium\tMicrosoft 365 E3\nMicrosoft 365 Business Premium\tMicrosoft 365 E3 - Unattended License\nMicrosoft 365 Business Premium\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 Business Premium\tMicrosoft 365 E5\nMicrosoft 365 Business Premium\tMicrosoft 365 E3 - 3 year\nMicrosoft 365 Business Premium\tMicrosoft 365 E3 (no Teams) - 3 year\nMicrosoft 365 Business Premium\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 Business Premium\tMicrosoft Defender Suite - 3 year\nMicrosoft 365 Business Premium\tMicrosoft 365 E5 - 3 year\nMicrosoft 365 Business Premium\tMicrosoft 365 E5 (no Teams) - 3 year\nMicrosoft 365 Business Premium (no Teams)\tMicrosoft 365 Business Premium\nMicrosoft 365 Business Premium (no Teams)\tMicrosoft 365 Business Premium (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 Business Premium (no Teams)\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 Business Premium (no Teams)\tMicrosoft 365 E5 (no Teams) - 3 year\nMicrosoft 365 Business Premium (no Teams)\tMicrosoft Defender Suite - 3 year\nMicrosoft 365 Business Premium (no Teams)\tMicrosoft 365 E3 (no Teams) - 3 year\nMicrosoft 365 Business Premium (no Teams)\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 Business Standard\tMicrosoft 365 Business Standard and Microsoft 365 Copilot Business\nMicrosoft 365 Business Standard\tMicrosoft 365 Business Premium and Microsoft 365 Copilot Business\nMicrosoft 365 Business Standard\tMicrosoft 365 Business Premium (no Teams)\nMicrosoft 365 Business Standard\tMicrosoft 365 Business Premium\nMicrosoft 365 Business Standard\tMicrosoft 365 E3 - 3 year\nMicrosoft 365 Business Standard\tMicrosoft 365 E5\nMicrosoft 365 Business Standard\tMicrosoft 365 E3\nMicrosoft 365 Business Standard\tMicrosoft 365 E3 - Unattended License\nMicrosoft 365 Business Standard\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 Business Standard\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 Business Standard\tMicrosoft 365 E5 - 3 year\nMicrosoft 365 Business Standard\tOffice 365 E3\nMicrosoft 365 Business Standard\tMicrosoft 365 E3 (no Teams) - 3 year\nMicrosoft 365 Business Standard\tOffice 365 E5\nMicrosoft 365 Business Standard\tMicrosoft 365 E5 (no Teams) - 3 year\nMicrosoft 365 Business Standard\tOffice 365 E5 (no Teams)\nMicrosoft 365 Business Standard\tOffice 365 E5 without Audio Conferencing\nMicrosoft 365 Business Standard (no Teams)\tMicrosoft 365 Business Premium (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 Business Standard (no Teams)\tMicrosoft 365 Business Standard (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 Business Standard (no Teams)\tMicrosoft 365 Business Premium (no Teams)\nMicrosoft 365 Business Standard (no Teams)\tMicrosoft 365 Business Standard\nMicrosoft 365 Business Standard (no Teams)\tMicrosoft 365 Business Premium\nMicrosoft 365 Business Standard (no Teams)\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 Business Standard (no Teams)\tMicrosoft 365 E5 (no Teams) - 3 year\nMicrosoft 365 Business Standard (no Teams)\tOffice 365 E3 (no Teams)\nMicrosoft 365 Business Standard (no Teams)\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 Business Standard (no Teams)\tOffice 365 E5 (no Teams)\nMicrosoft 365 Business Standard (no Teams)\tMicrosoft 365 E3 (no Teams) - 3 year\nMicrosoft 365 E3\tMicrosoft 365 E5\nMicrosoft 365 E3\tMicrosoft 365 E5 (no Teams) - 3 year\nMicrosoft 365 E3\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 E3\tMicrosoft 365 E5 - 3 year\nMicrosoft 365 E3\tMicrosoft 365 E3 - 3 year\nMicrosoft 365 E3\tMicrosoft 365 E3 - Unattended License\nMicrosoft 365 E3\tMicrosoft Defender Suite - 3 year\nMicrosoft 365 E3\tMicrosoft Purview Suite - 3 year\nMicrosoft 365 E3 (no Teams)\tMicrosoft 365 E5\nMicrosoft 365 E3 (no Teams)\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 E3 (no Teams)\tMicrosoft 365 E5 (no Teams) - 3 year\nMicrosoft 365 E3 (no Teams)\tMicrosoft Defender Suite - 3 year\nMicrosoft 365 E3 (no Teams)\tMicrosoft 365 E3 (no Teams) - Unattended License\nMicrosoft 365 E3 (no Teams)\tMicrosoft 365 E3\nMicrosoft 365 E3 (no Teams)\tMicrosoft Purview Suite - 3 year\nMicrosoft 365 E3 (no Teams)\tMicrosoft 365 E3 (no Teams) - 3 year\nMicrosoft 365 E5\tMicrosoft 365 E5 - 3 year\nMicrosoft 365 E5 (no Teams)\tMicrosoft 365 E5\nMicrosoft 365 E5 (no Teams)\tMicrosoft 365 E5 (no Teams) - 3 year\nMicrosoft 365 F1\tMicrosoft 365 Business Basic\nMicrosoft 365 F1\tMicrosoft 365 Business Premium and Microsoft 365 Copilot Business\nMicrosoft 365 F1\tMicrosoft 365 Business Basic and Microsoft 365 Copilot Business\nMicrosoft 365 F1\tMicrosoft 365 Business Premium (no Teams)\nMicrosoft 365 F1\tMicrosoft 365 Business Premium\nMicrosoft 365 F1\tMicrosoft 365 Business Standard (no Teams)\nMicrosoft 365 F1\tMicrosoft 365 Business Basic (no Teams)\nMicrosoft 365 F1\tMicrosoft 365 Business Standard and Microsoft 365 Copilot Business\nMicrosoft 365 F1\tMicrosoft 365 Business Standard\nMicrosoft 365 F1\tMicrosoft 365 E5\nMicrosoft 365 F1\tMicrosoft 365 E3\nMicrosoft 365 F1\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 F1\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 F1\tMicrosoft 365 F3 (no Teams)\nMicrosoft 365 F1\tMicrosoft 365 F3\nMicrosoft 365 F1\tOffice 365 E3 (no Teams)\nMicrosoft 365 F1\tOffice 365 E3\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 Business Basic (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 Business Basic (no Teams)\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 Business Premium (no Teams)\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 Business Premium\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 Business Standard\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 Business Basic\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 Business Premium (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 Business Standard (no Teams)\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 Business Standard (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 F1\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 F3 (no Teams)\nMicrosoft 365 F1 (no Teams)\tOffice 365 E5 (no Teams)\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 F1 (no Teams)\tMicrosoft 365 F3\nMicrosoft 365 F1 (no Teams)\tOffice 365 E1 (no Teams)\nMicrosoft 365 F1 (no Teams)\tOffice 365 E3 (no Teams)\nMicrosoft 365 F3\tMicrosoft 365 Business Premium (no Teams)\nMicrosoft 365 F3\tMicrosoft 365 Business Premium and Microsoft 365 Copilot Business\nMicrosoft 365 F3\tMicrosoft 365 Business Standard\nMicrosoft 365 F3\tMicrosoft 365 Business Premium\nMicrosoft 365 F3\tMicrosoft 365 Business Standard and Microsoft 365 Copilot Business\nMicrosoft 365 F3\tMicrosoft 365 Business Standard (no Teams)\nMicrosoft 365 F3\tMicrosoft 365 E3\nMicrosoft 365 F3\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 F3\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 F3\tMicrosoft 365 E5\nMicrosoft 365 F3\tMicrosoft 365 E3 - Unattended License\nMicrosoft 365 F3\tOffice 365 E3\nMicrosoft 365 F3\tOffice 365 E1\nMicrosoft 365 F3\tOffice 365 E5\nMicrosoft 365 F3\tOffice 365 E5 (no Teams)\nMicrosoft 365 F3\tOffice 365 E3 (no Teams)\nMicrosoft 365 F3\tOffice 365 E1 (no Teams)\nMicrosoft 365 F3 (no Teams)\tMicrosoft 365 Business Premium\nMicrosoft 365 F3 (no Teams)\tMicrosoft 365 Business Premium (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 F3 (no Teams)\tMicrosoft 365 Business Premium (no Teams)\nMicrosoft 365 F3 (no Teams)\tMicrosoft 365 Business Standard (No Teams) and Microsoft 365 Copilot Business\nMicrosoft 365 F3 (no Teams)\tMicrosoft 365 Business Standard\nMicrosoft 365 F3 (no Teams)\tMicrosoft 365 Business Standard (no Teams)\nMicrosoft 365 F3 (no Teams)\tOffice 365 E5 (no Teams)\nMicrosoft 365 F3 (no Teams)\tMicrosoft 365 E5 (no Teams)\nMicrosoft 365 F3 (no Teams)\tMicrosoft 365 E3 (no Teams)\nMicrosoft 365 F3 (no Teams)\tOffice 365 E3 (no Teams)\nMicrosoft 365 F3 (no Teams)\tMicrosoft 365 F3\nMicrosoft 365 F3 (no Teams)\tOffice 365 E1 (no Teams)\nMicrosoft Defender for Endpoint P1\tMicrosoft Defender for Endpoint P2\nMicrosoft Defender for Endpoint P2\tMicrosoft Defender Suite\nMicrosoft Defender for Identity\tMicrosoft Defender Suite\nMicrosoft Defender for Office 365 (Plan 1)\tMicrosoft Defender for Office 365 (Plan 2)\nMicrosoft Defender for Office 365 (Plan 1)\tMicrosoft Defender Suite\nMicrosoft Defender for Office 365 (Plan 2)\tMicrosoft Defender Suite\nMicrosoft Entra ID Plan 1\tEnterprise Mobility + Security E5\nMicrosoft Entra ID P1\tMicrosoft 365 E5 (no Teams)\nMicrosoft Entra ID P1\tMicrosoft 365 E3 (no Teams)\nMicrosoft Entra ID P1\tMicrosoft Entra ID Plan 2\nMicrosoft Intune Plan 1\tEnterprise Mobility + Security E5\nMicrosoft Intune Plan 1\tMicrosoft 365 E5 (no Teams)\nMicrosoft Intune Plan 1\tMicrosoft 365 E3 (no Teams)\nMicrosoft Intune Plan 2\tMicrosoft Intune Suite\nMicrosoft Teams Enterprise\tMicrosoft Teams Enterprise - 3 year\nMicrosoft Teams Enterprise\tMicrosoft 365 F3\nMicrosoft Teams Essentials\tMicrosoft 365 Business Standard\nMicrosoft Teams Essentials\tMicrosoft 365 Business Basic\nOffice 365 E1\tMicrosoft 365 Business Premium and Microsoft 365 Copilot Business\nOffice 365 E1\tMicrosoft 365 Business Standard and Microsoft 365 Copilot Business\nOffice 365 E1\tMicrosoft 365 E3 (no Teams)\nOffice 365 E1\tMicrosoft 365 E5\nOffice 365 E1\tMicrosoft 365 E3 - 3 year\nOffice 365 E1\tMicrosoft 365 E3\nOffice 365 E1\tMicrosoft 365 E3 - Unattended License\nOffice 365 E1\tMicrosoft 365 E3 (no Teams) - 3 year\nOffice 365 E1\tMicrosoft 365 E5 - 3 year\nOffice 365 E1\tMicrosoft 365 E5 (no Teams) - 3 year\nOffice 365 E1\tMicrosoft 365 E5 (no Teams)\nOffice 365 E1\tOffice 365 E5\nOffice 365 E1\tOffice 365 E3\nOffice 365 E1\tOffice 365 E3 (no Teams)\nOffice 365 E1\tOffice 365 E5 (no Teams)\nOffice 365 E1\tOffice 365 E5 without Audio Conferencing\nOffice 365 E1 (no Teams)\tMicrosoft 365 Business Premium (No Teams) and Microsoft 365 Copilot Business\nOffice 365 E1 (no Teams)\tMicrosoft 365 Business Standard (No Teams) and Microsoft 365 Copilot Business\nOffice 365 E1 (no Teams)\tMicrosoft 365 E5\nOffice 365 E1 (no Teams)\tMicrosoft 365 E3\nOffice 365 E1 (no Teams)\tMicrosoft 365 E3 (no Teams) - 3 year\nOffice 365 E1 (no Teams)\tMicrosoft 365 E3 (no Teams)\nOffice 365 E1 (no Teams)\tMicrosoft 365 E5 (no Teams)\nOffice 365 E1 (no Teams)\tMicrosoft 365 E5 (no Teams) - 3 year\nOffice 365 E1 (no Teams)\tOffice 365 E5\nOffice 365 E1 (no Teams)\tOffice 365 E5 (no Teams)\nOffice 365 E1 (no Teams)\tOffice 365 E3 (no Teams)\nOffice 365 E1 (no Teams)\tOffice 365 E5 without Audio Conferencing\nOffice 365 E1 (no Teams)\tOffice 365 E1\nOffice 365 E1 (no Teams)\tOffice 365 E3\nOffice 365 E3\tMicrosoft 365 E5\nOffice 365 E3\tMicrosoft 365 E3 - Unattended License\nOffice 365 E3\tMicrosoft 365 E3 - 3 year\nOffice 365 E3\tMicrosoft 365 E3 (no Teams)\nOffice 365 E3\tMicrosoft 365 E3\nOffice 365 E3\tMicrosoft 365 E3 (no Teams) - 3 year\nOffice 365 E3\tOffice 365 E5\nOffice 365 E3\tMicrosoft 365 E5 (no Teams)\nOffice 365 E3\tOffice 365 E5 (no Teams)\nOffice 365 E3\tMicrosoft 365 E5 (no Teams) - 3 year\nOffice 365 E3\tMicrosoft 365 E5 - 3 year\nOffice 365 E3\tOffice 365 E5 without Audio Conferencing\nOffice 365 E3 (no Teams)\tMicrosoft 365 E5 (no Teams) - 3 year\nOffice 365 E3 (no Teams)\tMicrosoft 365 E5 (no Teams)\nOffice 365 E3 (no Teams)\tMicrosoft 365 E3\nOffice 365 E3 (no Teams)\tMicrosoft 365 E5\nOffice 365 E3 (no Teams)\tMicrosoft 365 E3 (no Teams)\nOffice 365 E3 (no Teams)\tMicrosoft 365 E3 (no Teams) - 3 year\nOffice 365 E3 (no Teams)\tOffice 365 E5\nOffice 365 E3 (no Teams)\tOffice 365 E3\nOffice 365 E3 (no Teams)\tOffice 365 E5 (no Teams)\nOffice 365 E3 (no Teams)\tOffice 365 E5 without Audio Conferencing\nOffice 365 E5\tMicrosoft 365 E5 - 3 year\nOffice 365 E5\tMicrosoft 365 E5\nOffice 365 E5\tMicrosoft 365 E5 (no Teams)\nOffice 365 E5\tMicrosoft 365 E5 (no Teams) - 3 year\nOffice 365 E5\tOffice 365 E5 without Audio Conferencing\nOffice 365 E5 (no Teams)\tOffice 365 E5\nOffice 365 E5 (no Teams)\tMicrosoft 365 E5\nOffice 365 E5 (no Teams)\tMicrosoft 365 E5 (no Teams)\nOffice 365 E5 (no Teams)\tMicrosoft 365 E5 (no Teams) - 3 year\nOffice 365 F3\tMicrosoft 365 Business Basic (no Teams)\nOffice 365 F3\tMicrosoft 365 Business Premium (no Teams)\nOffice 365 F3\tMicrosoft 365 Business Premium\nOffice 365 F3\tMicrosoft 365 Business Basic\nOffice 365 F3\tMicrosoft 365 Business Standard\nOffice 365 F3\tMicrosoft 365 Business Standard (no Teams)\nOffice 365 F3\tMicrosoft 365 E5\nOffice 365 F3\tMicrosoft 365 E3\nOffice 365 F3\tMicrosoft 365 F3\nOffice 365 F3\tMicrosoft 365 E5 (no Teams)\nOffice 365 F3\tMicrosoft 365 E3 (no Teams)\nOffice 365 F3\tMicrosoft 365 F3 (no Teams)\nOffice 365 F3\tOffice 365 E5\nOffice 365 F3\tOffice 365 E3\nOffice 365 F3\tOffice 365 E1\nOffice 365 F3\tOffice 365 E3 (no Teams)\nOffice 365 F3\tOffice 365 E5 (no Teams)\nOffice 365 F3 (no Teams)\tMicrosoft 365 Business Premium\nOffice 365 F3 (no Teams)\tMicrosoft 365 Business Premium (no Teams)\nOffice 365 F3 (no Teams)\tMicrosoft 365 Business Basic\nOffice 365 F3 (no Teams)\tMicrosoft 365 Business Standard\nOffice 365 F3 (no Teams)\tMicrosoft 365 Business Standard (no Teams)\nOffice 365 F3 (no Teams)\tMicrosoft 365 Business Basic (no Teams)\nOffice 365 F3 (no Teams)\tMicrosoft 365 E5 (no Teams)\nOffice 365 F3 (no Teams)\tOffice 365 E3 (no Teams)\nOffice 365 F3 (no Teams)\tMicrosoft 365 F3 (no Teams)\nOffice 365 F3 (no Teams)\tMicrosoft 365 F3\nOffice 365 F3 (no Teams)\tOffice 365 F3\nOffice 365 F3 (no Teams)\tOffice 365 E1 (no Teams)\nOffice 365 F3 (no Teams)\tMicrosoft 365 E3 (no Teams)\nOffice 365 F3 (no Teams)\tOffice 365 E5 (no Teams)\nPlanner and Project Plan 3\tPlanner and Project Plan 5\nPlanner Plan 1\tPlanner and Project Plan 5\nPlanner Plan 1\tPlanner and Project Plan 3\nVisio Plan 1\tVisio Plan 2\nWindows 10\/11 Enterprise E3\tWindows 10\/11 Enterprise E5\nWindows 10\/11 Enterprise E3\tWindows 10\/11 Enterprise E3 VDA\nWindows 10\/11 Enterprise E3\tMicrosoft 365 E5 - 3 year\nWindows 10\/11 Enterprise E3\tMicrosoft 365 E5 (no Teams)\nWindows 10\/11 Enterprise E3\tMicrosoft 365 E5\nWindows 10\/11 Enterprise E3 VDA\tWindows 10\/11 Enterprise E5\nWindows 10\/11 Enterprise E3 VDA\tMicrosoft 365 E5 (no Teams)\nWindows 10\/11 Enterprise E3 VDA\tMicrosoft 365 E5\nWindows 10\/11 Enterprise E3 VDA\tMicrosoft 365 E5 - 3 year\nWindows 10\/11 Enterprise E5\tMicrosoft 365 E5 (no Teams)\nWindows 10\/11 Enterprise E5\tMicrosoft 365 E5\nWindows 10\/11 Enterprise E5\tMicrosoft 365 E5 - 3 year\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    <\/script>\n<\/div>\n\n<\/body>\n<\/html>\n\n\n\n<!-- LicenseVerse Brute Force Scroll-to-Top Widget -->\n<style>\n\/* Scoped to #lsv-scroll-top-widget *\/\n#lsv-scroll-top-widget {\n    --lsv-theme-color: #97C93F;\n    --lsv-theme-hover: #87b535;\n    --lsv-theme-active: #76a02f;\n}\n\n#lsv-scroll-top-widget .lsv-scroll-top-btn {\n    position: fixed !important;\n    bottom: 30px !important;\n    right: 30px !important;\n    background-color: var(--lsv-theme-color);\n    color: #ffffff;\n    border: none;\n    border-radius: 28px;\n    padding: 12px 22px 12px 16px;\n    font-family: \"Segoe UI\", system-ui, -apple-system, sans-serif;\n    font-size: 14px;\n    font-weight: 700;\n    letter-spacing: 0.5px;\n    cursor: pointer;\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    z-index: 99999 !important;\n    \n    opacity: 0;\n    visibility: hidden;\n    transform: translateY(15px);\n    transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);\n    \n    touch-action: manipulation;\n    -webkit-tap-highlight-color: transparent;\n}\n\n#lsv-scroll-top-widget .lsv-scroll-top-btn.show {\n    opacity: 1;\n    visibility: visible;\n    transform: translateY(0);\n}\n\n#lsv-scroll-top-widget .lsv-scroll-top-btn:hover {\n    background-color: var(--lsv-theme-hover);\n    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.25);\n    transform: translateY(-2px);\n}\n\n\/* Active state for immediate feedback *\/\n#lsv-scroll-top-widget .lsv-scroll-top-btn:active {\n    background-color: var(--lsv-theme-active);\n    transform: scale(0.95);\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n    transition: transform 0.05s ease;\n}\n\n#lsv-scroll-top-widget .lsv-scroll-top-btn svg {\n    width: 22px;\n    height: 22px;\n    flex-shrink: 0;\n}\n\n\/* Mobile responsiveness *\/\n@media (max-width: 768px) {\n    #lsv-scroll-top-widget .lsv-scroll-top-btn {\n        bottom: 20px !important;\n        right: 20px !important;\n        padding: 10px 18px 10px 14px;\n        font-size: 13px;\n    }\n    #lsv-scroll-top-widget .lsv-scroll-top-btn svg {\n        width: 20px;\n        height: 20px;\n    }\n}\n\n\/* Print: hide the button *\/\n@media print {\n    #lsv-scroll-top-widget { display: none !important; }\n}\n\n\/* Smooth scroll fallback for CSS-based scrolling *\/\nhtml, body {\n    scroll-behavior: smooth;\n}\n\n\/* Respect user preference for reduced motion *\/\n@media (prefers-reduced-motion: reduce) {\n    html, body {\n        scroll-behavior: auto;\n    }\n}\n<\/style>\n\n<div id=\"lsv-scroll-top-widget\">\n    <button class=\"lsv-scroll-top-btn\" id=\"lsv-scroll-top-btn\" aria-label=\"Scroll to top\" aria-hidden=\"true\">\n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"3\" stroke=\"currentColor\" aria-hidden=\"true\">\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 15.75l7.5-7.5 7.5 7.5\" \/>\n        <\/svg>\n        <span>TOP<\/span>\n    <\/button>\n<\/div>\n\n<script>\n(function() {\n    'use strict';\n    \n    const CONFIG = {\n        showAfterScroll: 300,\n        throttleDelay: 50,\n        pressIntervals: [0, 500, 1000] \n    };\n\n    const widget = document.getElementById('lsv-scroll-top-widget');\n    const btn = document.getElementById('lsv-scroll-top-btn');\n    \n    if (!widget || !btn) return;\n\n    let lastScrollTime = 0;\n    let scrollTimers = [];\n    \n    \/\/ The Scroll Command\n    function executeScrollCommand() {\n        const currentScroll = window.scrollY || window.pageYOffset || document.documentElement.scrollTop || 0;\n        if (currentScroll === 0) return;\n\n        const prefersReducedMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n        try {\n            window.scrollTo({ \n                top: 0, \n                behavior: prefersReducedMotion ? 'auto' : 'smooth' \n            });\n        } catch (e) {\n            window.scrollTo(0, 0);\n        }\n    }\n\n    \/\/ Advanced deep search for custom widgets, Shadow DOMs, and Iframes\n    function focusFirstTextBoxDeep() {\n        \n        \/\/ Recursive function to gather ALL inputs on the page, no matter where they are hidden\n        function getFocusableElements(root, elements = []) {\n            try {\n                \/\/ 1. Normal inputs, textareas, and custom content-editable fields\n                const selector = 'input:not([type=\"hidden\"]):not([type=\"button\"]):not([type=\"submit\"]):not([type=\"reset\"]):not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"file\"]):not([type=\"range\"]):not([type=\"color\"]):not([type=\"image\"]), textarea, [contenteditable=\"true\"]';\n                root.querySelectorAll(selector).forEach(el => elements.push(el));\n\n                \/\/ 2. Penetrate Shadow DOMs (Web Components)\n                root.querySelectorAll('*').forEach(node => {\n                    if (node.shadowRoot) {\n                        getFocusableElements(node.shadowRoot, elements);\n                    }\n                });\n\n                \/\/ 3. Penetrate Same-Origin Iframes\n                root.querySelectorAll('iframe').forEach(iframe => {\n                    try {\n                        const iframeDoc = iframe.contentDocument || iframe.contentWindow.document;\n                        if (iframeDoc) getFocusableElements(iframeDoc, elements);\n                    } catch (e) { \n                        \/\/ Cross-origin iframe restricted, ignore silently \n                    }\n                });\n            } catch(err) {}\n            \n            return elements;\n        }\n\n        const allBoxes = getFocusableElements(document);\n        \n        \/\/ Filter out ones that are invisible, 0px in size, or disabled\n        const validBoxes = allBoxes.filter(el => {\n            if (el.disabled || el.readOnly) return false;\n            const rect = el.getBoundingClientRect();\n            if (rect.width === 0 || rect.height === 0) return false;\n            const style = window.getComputedStyle(el);\n            if (style.visibility === 'hidden' || style.display === 'none' || style.opacity === '0') return false;\n            return true;\n        });\n\n        \/\/ Sort them by their actual vertical Y position on the screen\n        validBoxes.sort((a, b) => {\n            const yA = a.getBoundingClientRect().top + (window.scrollY || window.pageYOffset);\n            const yB = b.getBoundingClientRect().top + (window.scrollY || window.pageYOffset);\n            return yA - yB;\n        });\n\n        \/\/ Focus the top-most valid input\n        if (validBoxes.length > 0) {\n            const target = validBoxes[0];\n            try { \n                target.focus({ preventScroll: true }); \n            } catch (e) { \n                target.focus(); \n            }\n        }\n    }\n\n    \/\/ Emulate rapid presses and handle the advanced focus targeting\n    function bruteForceScroll() {\n        scrollTimers.forEach(timer => clearTimeout(timer));\n        scrollTimers = [];\n\n        \/\/ Focus immediately upon press\n        focusFirstTextBoxDeep();\n\n        CONFIG.pressIntervals.forEach((delay, index) => {\n            const timer = setTimeout(() => {\n                if (index === 0) {\n                    setTimeout(executeScrollCommand, 16);\n                } else {\n                    executeScrollCommand();\n                }\n            }, delay);\n            scrollTimers.push(timer);\n        });\n\n        \/\/ Focus one last time AFTER the final scroll interval finishes (1200ms)\n        \/\/ This ensures custom widgets that reload\/animate on scroll don't lose the cursor\n        const finalFocusTimer = setTimeout(focusFirstTextBoxDeep, 1200);\n        scrollTimers.push(finalFocusTimer);\n    }\n\n    \/\/ Throttled scroll handler\n    function onScroll() {\n        const now = Date.now();\n        if (now - lastScrollTime < CONFIG.throttleDelay) return;\n        lastScrollTime = now;\n\n        const scrollY = window.scrollY || window.pageYOffset || document.documentElement.scrollTop || 0;\n        \n        if (scrollY > CONFIG.showAfterScroll) {\n            btn.classList.add('show');\n            btn.setAttribute('aria-hidden', 'false');\n        } else {\n            btn.classList.remove('show');\n            btn.setAttribute('aria-hidden', 'true');\n        }\n    }\n\n    \/\/ Event Listeners\n    btn.addEventListener('click', function(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        bruteForceScroll();\n    });\n\n    btn.addEventListener('keydown', function(e) {\n        if (e.key === 'Enter' || e.key === ' ') {\n            e.preventDefault();\n            e.stopPropagation();\n            bruteForceScroll();\n        }\n    });\n\n    btn.addEventListener('touchstart', function(e) {\n        e.preventDefault();\n    }, { passive: false });\n\n    btn.addEventListener('touchend', function(e) {\n        e.preventDefault();\n        bruteForceScroll();\n    });\n\n    if (window.addEventListener) {\n        window.addEventListener('scroll', onScroll, { passive: true });\n        onScroll();\n    }\n\n    if (window.addEventListener) {\n        window.addEventListener('beforeunload', function() {\n            scrollTimers.forEach(timer => clearTimeout(timer));\n            window.removeEventListener('scroll', onScroll);\n        });\n    }\n})();\n<\/script>\n","protected":false},"featured_media":0,"parent":8244,"menu_order":1,"template":"custom-single.php","lesson_category":[56],"class_list":["post-12392","lessons","type-lessons","status-publish","hentry","lesson_category-online-services","entry","no-media"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>CSP Upgrade Selector - LicenseVerse<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CSP Upgrade Selector - LicenseVerse\" \/>\n<meta property=\"og:description\" content=\"Welcome to the CSP Upgrade Selector! Simply scroll or search for a license to understand its upgrade options. The tool&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/\" \/>\n<meta property=\"og:site_name\" content=\"LicenseVerse\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-21T19:58:31+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/\",\"url\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/\",\"name\":\"CSP Upgrade Selector - LicenseVerse\",\"isPartOf\":{\"@id\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/#website\"},\"datePublished\":\"2026-04-20T07:11:42+00:00\",\"dateModified\":\"2026-04-21T19:58:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OFFICE 365\/MICROSOFT 365 TOOLS\",\"item\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"CSP Upgrade Selector\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/#website\",\"url\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/\",\"name\":\"LicenseVerse\",\"description\":\"Microsoft Licensing Explained\",\"publisher\":{\"@id\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/#organization\",\"name\":\"LicenseVerse\",\"url\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-content\/uploads\/sites\/4\/2023\/10\/Licensing-Verse_101023-01.png\",\"contentUrl\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-content\/uploads\/sites\/4\/2023\/10\/Licensing-Verse_101023-01.png\",\"width\":906,\"height\":394,\"caption\":\"LicenseVerse\"},\"image\":{\"@id\":\"https:\/\/www.licensingschool.co.uk\/licenseverse\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CSP Upgrade Selector - LicenseVerse","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/","og_locale":"en_GB","og_type":"article","og_title":"CSP Upgrade Selector - LicenseVerse","og_description":"Welcome to the CSP Upgrade Selector! Simply scroll or search for a license to understand its upgrade options. The tool&hellip;","og_url":"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/","og_site_name":"LicenseVerse","article_modified_time":"2026-04-21T19:58:31+00:00","twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/","url":"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/","name":"CSP Upgrade Selector - LicenseVerse","isPartOf":{"@id":"https:\/\/www.licensingschool.co.uk\/licenseverse\/#website"},"datePublished":"2026-04-20T07:11:42+00:00","dateModified":"2026-04-21T19:58:31+00:00","breadcrumb":{"@id":"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/csp-upgrade-selector\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.licensingschool.co.uk\/licenseverse\/"},{"@type":"ListItem","position":2,"name":"OFFICE 365\/MICROSOFT 365 TOOLS","item":"https:\/\/www.licensingschool.co.uk\/licenseverse\/office-365-microsoft-365-plan-picker\/"},{"@type":"ListItem","position":3,"name":"CSP Upgrade Selector"}]},{"@type":"WebSite","@id":"https:\/\/www.licensingschool.co.uk\/licenseverse\/#website","url":"https:\/\/www.licensingschool.co.uk\/licenseverse\/","name":"LicenseVerse","description":"Microsoft Licensing Explained","publisher":{"@id":"https:\/\/www.licensingschool.co.uk\/licenseverse\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.licensingschool.co.uk\/licenseverse\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/www.licensingschool.co.uk\/licenseverse\/#organization","name":"LicenseVerse","url":"https:\/\/www.licensingschool.co.uk\/licenseverse\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.licensingschool.co.uk\/licenseverse\/#\/schema\/logo\/image\/","url":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-content\/uploads\/sites\/4\/2023\/10\/Licensing-Verse_101023-01.png","contentUrl":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-content\/uploads\/sites\/4\/2023\/10\/Licensing-Verse_101023-01.png","width":906,"height":394,"caption":"LicenseVerse"},"image":{"@id":"https:\/\/www.licensingschool.co.uk\/licenseverse\/#\/schema\/logo\/image\/"}}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-json\/wp\/v2\/lessons\/12392","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-json\/wp\/v2\/lessons"}],"about":[{"href":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-json\/wp\/v2\/types\/lessons"}],"version-history":[{"count":3,"href":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-json\/wp\/v2\/lessons\/12392\/revisions"}],"predecessor-version":[{"id":12531,"href":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-json\/wp\/v2\/lessons\/12392\/revisions\/12531"}],"up":[{"embeddable":true,"href":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-json\/wp\/v2\/lessons\/8244"}],"wp:attachment":[{"href":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-json\/wp\/v2\/media?parent=12392"}],"wp:term":[{"taxonomy":"lesson_category","embeddable":true,"href":"https:\/\/www.licensingschool.co.uk\/licenseverse\/wp-json\/wp\/v2\/lesson_category?post=12392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}