{"id":824,"date":"2025-06-20T19:57:49","date_gmt":"2025-06-20T14:27:49","guid":{"rendered":"https:\/\/hbtech.co.in\/hi\/?page_id=824"},"modified":"2026-05-22T18:22:45","modified_gmt":"2026-05-22T12:52:45","slug":"scam-number-checker-deepseek","status":"publish","type":"page","link":"https:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/","title":{"rendered":"All-in-One GPA \/ CGPA \/ Percentage Converter"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>All-in-One GPA\/CGPA\/Percentage Converter<\/title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        :root {\n            --primary-orange: #FF8C42;\n            --primary-orange-light: #FFB366;\n            --primary-orange-dark: #E67E2F;\n            --text-dark: #1a1a1a;\n            --text-light: #666666;\n            --bg-light: #f8f9fa;\n            --bg-white: #ffffff;\n            --border-color: #e0e0e0;\n            --success-color: #4CAF50;\n            --error-color: #f44336;\n            --warning-color: #FFA500;\n            --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.08);\n            --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.1);\n            --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n        }\n\n        @media (prefers-color-scheme: dark) {\n            :root {\n                --text-dark: #f0f0f0;\n                --text-light: #b0b0b0;\n                --bg-light: #1e1e1e;\n                --bg-white: #2d2d2d;\n                --border-color: #404040;\n            }\n        }\n\n        html, body {\n            width: 100%;\n            height: 100%;\n        }\n\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n            background: transparent;\n            color: var(--text-dark);\n            padding: 20px;\n            margin: 0;\n            overflow-x: hidden;\n            min-height: 100vh;\n        }\n\n        .gpa-converter-wrapper {\n            max-width: 700px;\n            margin: 0 auto;\n            background: var(--bg-white);\n            border-radius: 16px;\n            box-shadow: var(--shadow-md);\n            padding: 32px 24px;\n            transition: var(--transition);\n            width: 100%;\n        }\n\n        .converter-header {\n            margin-bottom: 28px;\n            text-align: center;\n        }\n\n        .converter-title {\n            font-size: 28px;\n            font-weight: 700;\n            color: var(--text-dark);\n            margin-bottom: 8px;\n            letter-spacing: -0.5px;\n        }\n\n        .converter-subtitle {\n            font-size: 13px;\n            color: var(--text-light);\n            font-weight: 500;\n            letter-spacing: 0.5px;\n            text-transform: uppercase;\n        }\n\n        .tab-selector {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));\n            gap: 8px;\n            margin-bottom: 24px;\n            padding-bottom: 16px;\n            border-bottom: 2px solid var(--border-color);\n            overflow-x: auto;\n            padding-right: 10px;\n            scroll-behavior: smooth;\n        }\n\n        .tab-selector::-webkit-scrollbar {\n            height: 4px;\n        }\n\n        .tab-selector::-webkit-scrollbar-track {\n            background: transparent;\n        }\n\n        .tab-selector::-webkit-scrollbar-thumb {\n            background: var(--primary-orange);\n            border-radius: 2px;\n        }\n\n        .tab-btn {\n            padding: 10px 14px;\n            background: var(--bg-light);\n            border: 2px solid var(--border-color);\n            border-radius: 8px;\n            font-size: 11px;\n            font-weight: 600;\n            color: var(--text-light);\n            cursor: pointer;\n            transition: var(--transition);\n            text-align: center;\n            white-space: nowrap;\n            flex-shrink: 0;\n            font-family: inherit;\n        }\n\n        .tab-btn:hover {\n            border-color: var(--primary-orange);\n            color: var(--primary-orange);\n            background: rgba(255, 140, 66, 0.05);\n        }\n\n        .tab-btn.active {\n            background: var(--primary-orange);\n            border-color: var(--primary-orange);\n            color: white;\n            transform: translateY(-2px);\n            box-shadow: 0 4px 12px rgba(255, 140, 66, 0.3);\n        }\n\n        .form-group {\n            margin-bottom: 22px;\n        }\n\n        .form-label {\n            display: block;\n            font-size: 13px;\n            font-weight: 600;\n            color: var(--text-dark);\n            margin-bottom: 8px;\n            letter-spacing: 0.3px;\n            text-transform: uppercase;\n        }\n\n        .form-control {\n            width: 100%;\n            padding: 12px 14px;\n            background: var(--bg-light);\n            border: 2px solid var(--border-color);\n            border-radius: 8px;\n            font-size: 14px;\n            color: var(--text-dark);\n            transition: var(--transition);\n            font-family: inherit;\n            appearance: none;\n            -webkit-appearance: none;\n            -moz-appearance: none;\n        }\n\n        .form-control:focus {\n            outline: none;\n            border-color: var(--primary-orange);\n            background: var(--bg-white);\n            box-shadow: 0 0 0 3px rgba(255, 140, 66, 0.15);\n        }\n\n        .form-control:focus-visible {\n            outline: none;\n        }\n\n        .form-control::placeholder {\n            color: var(--text-light);\n        }\n\n        .form-control:disabled {\n            opacity: 0.6;\n            cursor: not-allowed;\n        }\n\n        select.form-control {\n            background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23FF8C42' d='M1 4l5 4 5-4'\/%3E%3C\/svg%3E\");\n            background-repeat: no-repeat;\n            background-position: right 12px center;\n            padding-right: 36px;\n        }\n\n        .form-row {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 14px;\n        }\n\n        .form-row.full {\n            grid-template-columns: 1fr;\n        }\n\n        .result-section {\n            background: linear-gradient(135deg, rgba(255, 140, 66, 0.1) 0%, rgba(255, 179, 102, 0.05) 100%);\n            border: 2px solid var(--primary-orange);\n            border-radius: 12px;\n            padding: 24px;\n            margin-bottom: 22px;\n            text-align: center;\n            min-height: 160px;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n        }\n\n        .result-label {\n            font-size: 12px;\n            font-weight: 700;\n            color: var(--text-light);\n            text-transform: uppercase;\n            margin-bottom: 10px;\n            letter-spacing: 1px;\n        }\n\n        .result-value {\n            font-size: 52px;\n            font-weight: 700;\n            color: var(--primary-orange);\n            letter-spacing: -1px;\n            word-break: break-word;\n            animation: slideIn 0.4s ease-out;\n            min-height: 62px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-family: 'Courier New', monospace;\n        }\n\n        @keyframes slideIn {\n            from {\n                opacity: 0;\n                transform: translateY(10px);\n            }\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        .progress-bar {\n            width: 100%;\n            height: 8px;\n            background: rgba(0, 0, 0, 0.08);\n            border-radius: 4px;\n            margin-top: 16px;\n            overflow: hidden;\n            box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05);\n        }\n\n        .progress-fill {\n            height: 100%;\n            background: linear-gradient(90deg, var(--primary-orange) 0%, var(--primary-orange-light) 100%);\n            border-radius: 4px;\n            transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n            min-width: 0;\n            box-shadow: 0 0 10px rgba(255, 140, 66, 0.3);\n        }\n\n        .formula-display {\n            font-size: 12px;\n            color: var(--text-light);\n            margin-top: 12px;\n            font-family: 'Courier New', 'Courier', monospace;\n            padding: 10px 12px;\n            background: rgba(0, 0, 0, 0.04);\n            border-radius: 6px;\n            word-break: break-all;\n            max-height: 50px;\n            overflow-y: auto;\n            line-height: 1.5;\n        }\n\n        .formula-display::-webkit-scrollbar {\n            width: 4px;\n        }\n\n        .formula-display::-webkit-scrollbar-thumb {\n            background: var(--primary-orange);\n            border-radius: 2px;\n        }\n\n        .button-group {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 14px;\n            margin-bottom: 14px;\n        }\n\n        .btn {\n            padding: 13px 18px;\n            border: none;\n            border-radius: 8px;\n            font-size: 13px;\n            font-weight: 600;\n            cursor: pointer;\n            transition: var(--transition);\n            text-transform: uppercase;\n            letter-spacing: 0.5px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            gap: 8px;\n            font-family: inherit;\n            user-select: none;\n        }\n\n        .btn:active {\n            transform: translateY(1px);\n        }\n\n        .btn-primary {\n            background: linear-gradient(135deg, var(--primary-orange) 0%, var(--primary-orange-dark) 100%);\n            color: white;\n            box-shadow: 0 4px 12px rgba(255, 140, 66, 0.3);\n        }\n\n        .btn-primary:hover:not(:disabled) {\n            transform: translateY(-2px);\n            box-shadow: 0 6px 18px rgba(255, 140, 66, 0.4);\n        }\n\n        .btn-secondary {\n            background: var(--bg-light);\n            color: var(--text-dark);\n            border: 2px solid var(--border-color);\n        }\n\n        .btn-secondary:hover:not(:disabled) {\n            border-color: var(--primary-orange);\n            color: var(--primary-orange);\n            background: rgba(255, 140, 66, 0.05);\n        }\n\n        .btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n        }\n\n        .notification {\n            position: fixed;\n            top: 20px;\n            right: 20px;\n            padding: 14px 18px;\n            background: var(--text-dark);\n            color: white;\n            border-radius: 8px;\n            font-size: 13px;\n            z-index: 10000;\n            animation: slideInRight 0.3s ease-out;\n            max-width: 320px;\n            box-shadow: var(--shadow-md);\n            word-wrap: break-word;\n            border-left: 4px solid var(--primary-orange);\n        }\n\n        @keyframes slideInRight {\n            from {\n                opacity: 0;\n                transform: translateX(400px);\n            }\n            to {\n                opacity: 1;\n                transform: translateX(0);\n            }\n        }\n\n        .notification.success {\n            background: var(--success-color);\n            border-left-color: #2e7d32;\n        }\n\n        .notification.error {\n            background: var(--error-color);\n            border-left-color: #c62828;\n        }\n\n        .notification.warning {\n            background: var(--warning-color);\n            border-left-color: #e65100;\n        }\n\n        .notification.info {\n            background: #1976d2;\n            border-left-color: #0d47a1;\n        }\n\n        .helper-text {\n            font-size: 12px;\n            color: var(--text-light);\n            margin-top: 6px;\n            line-height: 1.5;\n        }\n\n        .validation-message {\n            font-size: 12px;\n            margin-top: 8px;\n            padding: 10px 12px;\n            border-radius: 6px;\n            display: none;\n            animation: slideIn 0.3s ease-out;\n            border-left: 3px solid;\n        }\n\n        .validation-message.error {\n            color: #c62828;\n            background: rgba(244, 67, 54, 0.1);\n            border-left-color: var(--error-color);\n            display: block;\n        }\n\n        .validation-message.success {\n            color: #2e7d32;\n            background: rgba(76, 175, 80, 0.1);\n            border-left-color: var(--success-color);\n            display: block;\n        }\n\n        .validation-message.warning {\n            color: #e65100;\n            background: rgba(255, 165, 0, 0.1);\n            border-left-color: var(--warning-color);\n            display: block;\n        }\n\n        .swap-btn {\n            width: 48px;\n            height: 48px;\n            background: var(--bg-light);\n            border: 2px solid var(--border-color);\n            border-radius: 8px;\n            cursor: pointer;\n            display: none;\n            align-items: center;\n            justify-content: center;\n            transition: var(--transition);\n            margin: 0 auto 18px;\n            font-size: 20px;\n            font-weight: bold;\n            color: var(--primary-orange);\n            padding: 0;\n            font-family: inherit;\n        }\n\n        .swap-btn:hover:not(:disabled) {\n            border-color: var(--primary-orange);\n            background: rgba(255, 140, 66, 0.1);\n            transform: rotate(180deg);\n        }\n\n        .swap-btn:active {\n            transform: rotate(180deg) translateY(1px);\n        }\n\n        .swap-btn.visible {\n            display: flex;\n        }\n\n        .info-box {\n            background: rgba(255, 165, 0, 0.08);\n            border-left: 3px solid var(--primary-orange);\n            padding: 12px 14px;\n            margin-top: 14px;\n            border-radius: 6px;\n            font-size: 12px;\n            color: var(--text-light);\n            line-height: 1.5;\n        }\n\n        .formula-helper {\n            background: rgba(25, 118, 210, 0.08);\n            border-left: 3px solid #1976d2;\n            padding: 10px 12px;\n            margin-top: 8px;\n            border-radius: 6px;\n            font-size: 11px;\n            color: var(--text-light);\n            font-family: monospace;\n        }\n\n        .loading-spinner {\n            display: inline-block;\n            width: 12px;\n            height: 12px;\n            border: 2px solid rgba(255, 140, 66, 0.2);\n            border-top-color: var(--primary-orange);\n            border-radius: 50%;\n            animation: spin 0.8s linear infinite;\n        }\n\n        @keyframes spin {\n            to { transform: rotate(360deg); }\n        }\n\n        @media (max-width: 600px) {\n            .gpa-converter-wrapper {\n                padding: 22px 16px;\n            }\n\n            .converter-title {\n                font-size: 24px;\n            }\n\n            .result-value {\n                font-size: 40px;\n                min-height: 50px;\n            }\n\n            .tab-selector {\n                grid-template-columns: repeat(2, 1fr);\n                gap: 6px;\n            }\n\n            .tab-btn {\n                font-size: 10px;\n                padding: 9px 10px;\n            }\n\n            .form-row {\n                grid-template-columns: 1fr;\n                gap: 12px;\n            }\n\n            .button-group {\n                grid-template-columns: 1fr;\n                gap: 10px;\n            }\n\n            .notification {\n                left: 10px;\n                right: 10px;\n                max-width: none;\n                top: auto;\n                bottom: 20px;\n            }\n\n            .result-section {\n                padding: 18px;\n                min-height: 140px;\n            }\n        }\n\n        @media (max-width: 400px) {\n            .converter-title {\n                font-size: 20px;\n            }\n\n            .tab-selector {\n                grid-template-columns: 1fr;\n            }\n\n            .result-value {\n                font-size: 32px;\n            }\n\n            .gpa-converter-wrapper {\n                padding: 16px 12px;\n            }\n        }\n\n        input[type=\"number\"]::-webkit-outer-spin-button,\n        input[type=\"number\"]::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input[type=\"number\"] {\n            -moz-appearance: textfield;\n        }\n\n        optgroup {\n            font-weight: 600;\n            color: var(--text-dark);\n            background: var(--bg-light);\n        }\n\n        option {\n            color: var(--text-dark);\n            background: var(--bg-white);\n            padding: 8px;\n        }\n\n        .grade-description {\n            font-size: 11px;\n            color: var(--text-light);\n            margin-top: 4px;\n            font-style: italic;\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"gpa-converter-wrapper\">\n        <div class=\"converter-header\">\n            <div class=\"converter-title\">GPA\/CGPA Converter<\/div>\n            <div class=\"converter-subtitle\">Advanced Multi-System Converter<\/div>\n        <\/div>\n\n        <div class=\"tab-selector\" id=\"tabSelector\" role=\"tablist\"><\/div>\n\n        <form id=\"converterForm\" onsubmit=\"return false;\" novalidate>\n            <div class=\"form-group\">\n                <label class=\"form-label\" for=\"systemSelect\">System\/University<\/label>\n                <select id=\"systemSelect\" class=\"form-control\">\n                    <optgroup label=\"Indian Systems\">\n                        <option value=\"cbse\">CBSE \/ Most Universities<\/option>\n                        <option value=\"iit\">IITs \/ NIT<\/option>\n                        <option value=\"universal10\">Universal 10-Point Scale<\/option>\n                        <option value=\"anna\">Anna University<\/option>\n                        <option value=\"vtu\">VTU System<\/option>\n                        <option value=\"delhi\">Delhi University<\/option>\n                        <option value=\"mumbai\">Mumbai University<\/option>\n                        <option value=\"aktu\">AKTU<\/option>\n                        <option value=\"ignou\">IGNOU<\/option>\n                    <\/optgroup>\n                    <optgroup label=\"International Systems\">\n                        <option value=\"gpa4\">International 4.0 GPA<\/option>\n                        <option value=\"gpa5\">International 5.0 GPA<\/option>\n                        <option value=\"ects\">ECTS (European)<\/option>\n                        <option value=\"uk\">UK Honours Classification<\/option>\n                        <option value=\"canada\">Canadian GPA<\/option>\n                        <option value=\"australia\">Australian GPA<\/option>\n                    <\/optgroup>\n                    <optgroup label=\"Advanced\">\n                        <option value=\"custom\">Custom Formula<\/option>\n                    <\/optgroup>\n                <\/select>\n                <div class=\"helper-text\">Select your institution or grading system<\/div>\n            <\/div>\n\n            <div id=\"inputSection\"><\/div>\n\n            <button type=\"button\" class=\"swap-btn\" id=\"swapBtn\" title=\"Swap conversion direction\" onclick=\"swapConversion()\" aria-label=\"Swap conversion\">\u21c5<\/button>\n\n            <div class=\"result-section\">\n                <div class=\"result-label\">Result<\/div>\n                <div class=\"result-value\" id=\"resultValue\" role=\"status\" aria-live=\"polite\">\u2013<\/div>\n                <div class=\"progress-bar\">\n                    <div class=\"progress-fill\" id=\"progressFill\" style=\"width: 0%\"><\/div>\n                <\/div>\n                <div class=\"formula-display\" id=\"formulaDisplay\" title=\"Current conversion formula\">\u2013<\/div>\n            <\/div>\n\n            <div id=\"validationMessage\" class=\"validation-message\" role=\"alert\" aria-live=\"assertive\"><\/div>\n\n            <div class=\"button-group\">\n                <button type=\"button\" class=\"btn btn-primary\" id=\"copyBtn\" onclick=\"copyResult()\" aria-label=\"Copy result to clipboard\">\n                    \ud83d\udccb Copy\n                <\/button>\n                <button type=\"button\" class=\"btn btn-secondary\" id=\"resetBtn\" onclick=\"resetForm()\" aria-label=\"Reset all fields\">\n                    \ud83d\udd04 Reset\n                <\/button>\n            <\/div>\n\n            <div class=\"info-box\" id=\"infoBox\"><\/div>\n        <\/form>\n    <\/div>\n\n    <script>\n        \/\/ ============================================================================\n        \/\/ CORE DATA & CONFIGURATION\n        \/\/ ============================================================================\n        \n        const CONVERSION_SYSTEMS = {\n            cbse: {\n                name: 'CBSE \/ Most Indian Universities',\n                formula: (val) => round(val * 9.5, 2),\n                inverse: (val) => round(val \/ 9.5, 2),\n                inputLabel: 'CGPA (0-10)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 10,\n                decimals: 2,\n                formulaText: 'Percentage = CGPA \u00d7 9.5'\n            },\n            iit: {\n                name: 'IITs \/ National Institute of Technology',\n                formula: (val) => round((val * 10) - 7.5, 2),\n                inverse: (val) => round((val + 7.5) \/ 10, 2),\n                inputLabel: 'CGPA (0-10)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 10,\n                decimals: 2,\n                formulaText: 'Percentage = (CGPA \u00d7 10) - 7.5'\n            },\n            universal10: {\n                name: 'Universal 10-Point Scale',\n                formula: (val) => round(val * 10, 2),\n                inverse: (val) => round(val \/ 10, 2),\n                inputLabel: 'CGPA (0-10)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 10,\n                decimals: 2,\n                formulaText: 'Percentage = CGPA \u00d7 10'\n            },\n            anna: {\n                name: 'Anna University',\n                formula: (val) => round(val * 10, 2),\n                inverse: (val) => round(val \/ 10, 2),\n                inputLabel: 'CGPA (0-10)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 10,\n                decimals: 2,\n                formulaText: 'Percentage = CGPA \u00d7 10'\n            },\n            vtu: {\n                name: 'VTU (Visvesvaraya Technological University)',\n                formula: (val) => round(val * 9.5, 2),\n                inverse: (val) => round(val \/ 9.5, 2),\n                inputLabel: 'CGPA (0-10)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 10,\n                decimals: 2,\n                formulaText: 'Percentage = CGPA \u00d7 9.5'\n            },\n            delhi: {\n                name: 'Delhi University',\n                formula: (val) => round(val * 9.5, 2),\n                inverse: (val) => round(val \/ 9.5, 2),\n                inputLabel: 'CGPA (0-10)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 10,\n                decimals: 2,\n                formulaText: 'Percentage = CGPA \u00d7 9.5'\n            },\n            mumbai: {\n                name: 'Mumbai University',\n                formula: (val) => round(val * 10, 2),\n                inverse: (val) => round(val \/ 10, 2),\n                inputLabel: 'CGPA (0-10)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 10,\n                decimals: 2,\n                formulaText: 'Percentage = CGPA \u00d7 10'\n            },\n            aktu: {\n                name: 'Dr. A.P.J. Abdul Kalam Technical University',\n                formula: (val) => round(val * 9.5, 2),\n                inverse: (val) => round(val \/ 9.5, 2),\n                inputLabel: 'CGPA (0-10)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 10,\n                decimals: 2,\n                formulaText: 'Percentage = CGPA \u00d7 9.5'\n            },\n            ignou: {\n                name: 'Indira Gandhi National Open University',\n                formula: (val) => round(val * 10, 2),\n                inverse: (val) => round(val \/ 10, 2),\n                inputLabel: 'CGPA (0-10)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 10,\n                decimals: 2,\n                formulaText: 'Percentage = CGPA \u00d7 10'\n            },\n            gpa4: {\n                name: 'International 4.0 GPA Scale',\n                formula: (val) => round((val \/ 4) * 100, 2),\n                inverse: (val) => round((val \/ 100) * 4, 2),\n                inputLabel: 'GPA (0-4.0)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 4,\n                decimals: 2,\n                formulaText: 'Percentage = (GPA \u00f7 4) \u00d7 100'\n            },\n            gpa5: {\n                name: 'International 5.0 GPA Scale',\n                formula: (val) => round((val \/ 5) * 100, 2),\n                inverse: (val) => round((val \/ 100) * 5, 2),\n                inputLabel: 'GPA (0-5.0)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 5,\n                decimals: 2,\n                formulaText: 'Percentage = (GPA \u00f7 5) \u00d7 100'\n            },\n            ects: {\n                name: 'ECTS - European Credit Transfer System',\n                formula: (val) => {\n                    if (val >= 90) return 'A (Excellent)';\n                    if (val >= 80) return 'B (Very Good)';\n                    if (val >= 70) return 'C (Good)';\n                    if (val >= 60) return 'D (Satisfactory)';\n                    if (val >= 50) return 'E (Sufficient)';\n                    return 'F (Fail)';\n                },\n                inverse: (val) => 75,\n                inputLabel: 'Percentage (%)',\n                outputLabel: 'ECTS Grade',\n                min: 0,\n                max: 100,\n                decimals: 0,\n                isGrade: true,\n                formulaText: 'ECTS: 90+=A, 80+=B, 70+=C, 60+=D, 50+=E, <50=F'\n            },\n            uk: {\n                name: 'UK Honours Classification',\n                formula: (val) => {\n                    if (val >= 70) return 'First Class Honours';\n                    if (val >= 60) return 'Upper Second Class';\n                    if (val >= 50) return 'Lower Second Class';\n                    if (val >= 40) return 'Third Class';\n                    return 'Fail';\n                },\n                inverse: (val) => 65,\n                inputLabel: 'Percentage (%)',\n                outputLabel: 'Classification',\n                min: 0,\n                max: 100,\n                decimals: 0,\n                isGrade: true,\n                formulaText: 'UK: 70+=1st, 60+=2:1, 50+=2:2, 40+=3rd, <40=Fail'\n            },\n            canada: {\n                name: 'Canadian GPA System',\n                formula: (val) => round((val \/ 4) * 100, 2),\n                inverse: (val) => round((val \/ 100) * 4, 2),\n                inputLabel: 'GPA (0-4.0)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 4,\n                decimals: 2,\n                formulaText: 'Percentage = (GPA \u00f7 4) \u00d7 100'\n            },\n            australia: {\n                name: 'Australian GPA System',\n                formula: (val) => round((val \/ 7) * 100, 2),\n                inverse: (val) => round((val \/ 100) * 7, 2),\n                inputLabel: 'GPA (0-7.0)',\n                outputLabel: 'Percentage (%)',\n                min: 0,\n                max: 7,\n                decimals: 2,\n                formulaText: 'Percentage = (GPA \u00f7 7) \u00d7 100'\n            }\n        };\n\n        const CONVERSION_TYPES = [\n            { id: 'cgpa2percent', label: 'CGPA \u2192 %', from: 'cgpa', to: 'percent' },\n            { id: 'percent2cgpa', label: '% \u2192 CGPA', from: 'percent', to: 'cgpa' },\n            { id: 'gpa2percent', label: 'GPA \u2192 %', from: 'gpa', to: 'percent' },\n            { id: 'percent2gpa', label: '% \u2192 GPA', from: 'percent', to: 'gpa' },\n            { id: 'gpa2cgpa', label: 'GPA \u21c4 CGPA', from: 'gpa', to: 'cgpa' },\n            { id: 'cgpa2gpa', label: 'CGPA \u21c4 GPA', from: 'cgpa', to: 'gpa' },\n            { id: 'grade2percent', label: 'Grade \u2192 %', from: 'grade', to: 'percent' },\n            { id: 'percent2grade', label: '% \u2192 Grade', from: 'percent', to: 'grade' },\n            { id: 'gpa_scale', label: 'GPA Scale', from: 'gpa', to: 'gpa' },\n            { id: 'intl_gpa', label: 'Intl GPA', from: 'gpa', to: 'gpa' }\n        ];\n\n        const GRADE_MAPPING = {\n            'O': { percent: 90, gpa4: 4.0, gpa5: 5.0, description: 'Outstanding' },\n            'A+': { percent: 85, gpa4: 4.0, gpa5: 4.5, description: 'Excellent' },\n            'A': { percent: 80, gpa4: 3.8, gpa5: 4.2, description: 'Very Good' },\n            'B+': { percent: 75, gpa4: 3.5, gpa5: 3.8, description: 'Good' },\n            'B': { percent: 70, gpa4: 3.0, gpa5: 3.5, description: 'Satisfactory' },\n            'C+': { percent: 65, gpa4: 2.7, gpa5: 3.0, description: 'Acceptable' },\n            'C': { percent: 60, gpa4: 2.5, gpa5: 2.5, description: 'Average' },\n            'D': { percent: 50, gpa4: 2.0, gpa5: 2.0, description: 'Pass' },\n            'F': { percent: 0, gpa4: 0, gpa5: 0, description: 'Fail' }\n        };\n\n        \/\/ ============================================================================\n        \/\/ UTILITY FUNCTIONS\n        \/\/ ============================================================================\n\n        function round(num, decimals) {\n            if (typeof num !== 'number' || !isFinite(num)) return 0;\n            const factor = Math.pow(10, decimals);\n            return Math.round(num * factor) \/ factor;\n        }\n\n        function isValidNumber(val) {\n            const num = parseFloat(val);\n            return !isNaN(num) && isFinite(num);\n        }\n\n        function getElement(id) {\n            return document.getElementById(id) || null;\n        }\n\n        function setElementText(id, text) {\n            const el = getElement(id);\n            if (el) el.textContent = String(text);\n        }\n\n        function getElementValue(id) {\n            const el = getElement(id);\n            return el ? el.value : '';\n        }\n\n        function setElementValue(id, value) {\n            const el = getElement(id);\n            if (el) el.value = String(value);\n        }\n\n        \/\/ ============================================================================\n        \/\/ STATE MANAGEMENT\n        \/\/ ============================================================================\n\n        let appState = {\n            currentConversion: 'cgpa2percent',\n            currentSystem: 'cbse',\n            lastInputValue: '',\n            lastSwappedValue: ''\n        };\n\n        function loadState() {\n            try {\n                const saved = localStorage.getItem('gpaConverterState');\n                if (saved) {\n                    const parsed = JSON.parse(saved);\n                    if (parsed.currentSystem && CONVERSION_SYSTEMS[parsed.currentSystem]) {\n                        appState.currentSystem = parsed.currentSystem;\n                    }\n                    if (parsed.currentConversion && CONVERSION_TYPES.find(c => c.id === parsed.currentConversion)) {\n                        appState.currentConversion = parsed.currentConversion;\n                    }\n                }\n            } catch (error) {\n                console.error('Load state error:', error);\n            }\n        }\n\n        function saveState() {\n            try {\n                localStorage.setItem('gpaConverterState', JSON.stringify(appState));\n            } catch (error) {\n                console.error('Save state error:', error);\n            }\n        }\n\n        \/\/ ============================================================================\n        \/\/ INITIALIZATION\n        \/\/ ============================================================================\n\n        function initialize() {\n            try {\n                loadState();\n                renderTabs();\n                renderSystemSelect();\n                renderInputSection();\n                setupEventListeners();\n                updateInfoBox();\n                updateSwapButtonVisibility();\n                handleConversion();\n            } catch (error) {\n                console.error('Initialization error:', error);\n                showNotification('Initialization error. Please refresh.', 'error');\n            }\n        }\n\n        \/\/ ============================================================================\n        \/\/ RENDERING FUNCTIONS\n        \/\/ ============================================================================\n\n        function renderTabs() {\n            const container = getElement('tabSelector');\n            if (!container) return;\n\n            container.innerHTML = '';\n            container.setAttribute('role', 'tablist');\n\n            CONVERSION_TYPES.forEach((conv, index) => {\n                const btn = document.createElement('button');\n                btn.type = 'button';\n                btn.className = `tab-btn ${conv.id === appState.currentConversion ? 'active' : ''}`;\n                btn.textContent = conv.label;\n                btn.onclick = (e) => {\n                    e.preventDefault();\n                    switchConversion(conv.id);\n                };\n                btn.setAttribute('role', 'tab');\n                btn.setAttribute('aria-selected', conv.id === appState.currentConversion ? 'true' : 'false');\n                btn.setAttribute('tabindex', conv.id === appState.currentConversion ? '0' : '-1');\n                container.appendChild(btn);\n            });\n        }\n\n        function renderSystemSelect() {\n            const select = getElement('systemSelect');\n            if (!select) return;\n\n            select.value = appState.currentSystem;\n            select.onchange = (e) => {\n                appState.currentSystem = e.target.value;\n                saveState();\n                renderInputSection();\n                updateInfoBox();\n                handleConversion();\n            };\n        }\n\n        function renderInputSection() {\n            const section = getElement('inputSection');\n            if (!section) return;\n\n            const convType = CONVERSION_TYPES.find(c => c.id === appState.currentConversion);\n            section.innerHTML = '';\n\n            if (appState.currentConversion === 'gpa_scale') {\n                section.innerHTML = `\n                    <div class=\"form-row\">\n                        <div class=\"form-group\">\n                            <label class=\"form-label\" for=\"fromScale\">From Scale<\/label>\n                            <select id=\"fromScale\" class=\"form-control\" onchange=\"handleConversion()\">\n                                <option value=\"4\">4.0 Scale<\/option>\n                                <option value=\"5\">5.0 Scale<\/option>\n                                <option value=\"7\">7.0 Scale<\/option>\n                                <option value=\"10\">10.0 Scale<\/option>\n                            <\/select>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\" for=\"toScale\">To Scale<\/label>\n                            <select id=\"toScale\" class=\"form-control\" onchange=\"handleConversion()\">\n                                <option value=\"4\">4.0 Scale<\/option>\n                                <option value=\"5\" selected>5.0 Scale<\/option>\n                                <option value=\"7\">7.0 Scale<\/option>\n                                <option value=\"10\">10.0 Scale<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/div>\n                    <div class=\"form-group\">\n                        <label class=\"form-label\" for=\"mainInput\">GPA Value<\/label>\n                        <input type=\"number\" id=\"mainInput\" class=\"form-control\" placeholder=\"Enter GPA value\" step=\"0.01\" min=\"0\" oninput=\"handleConversion()\" autofocus>\n                        <div class=\"helper-text\">Enter the GPA in the source scale<\/div>\n                    <\/div>\n                `;\n            } else if (appState.currentConversion === 'intl_gpa') {\n                section.innerHTML = `\n                    <div class=\"form-row\">\n                        <div class=\"form-group\">\n                            <label class=\"form-label\" for=\"fromSystem\">From System<\/label>\n                            <select id=\"fromSystem\" class=\"form-control\" onchange=\"handleConversion()\">\n                                <option value=\"gpa4\">4.0 GPA<\/option>\n                                <option value=\"gpa5\" selected>5.0 GPA<\/option>\n                                <option value=\"ects\">ECTS<\/option>\n                                <option value=\"uk\">UK Classification<\/option>\n                            <\/select>\n                        <\/div>\n                        <div class=\"form-group\">\n                            <label class=\"form-label\" for=\"toSystem\">To System<\/label>\n                            <select id=\"toSystem\" class=\"form-control\" onchange=\"handleConversion()\">\n                                <option value=\"gpa4\" selected>4.0 GPA<\/option>\n                                <option value=\"gpa5\">5.0 GPA<\/option>\n                                <option value=\"ects\">ECTS<\/option>\n                                <option value=\"uk\">UK Classification<\/option>\n                            <\/select>\n                        <\/div>\n                    <\/div>\n                    <div class=\"form-group\">\n                        <label class=\"form-label\" for=\"mainInput\">Value<\/label>\n                        <input type=\"number\" id=\"mainInput\" class=\"form-control\" placeholder=\"Enter value\" step=\"0.01\" min=\"0\" oninput=\"handleConversion()\" autofocus>\n                        <div class=\"helper-text\">Convert between international grading systems<\/div>\n                    <\/div>\n                `;\n            } else if (appState.currentSystem === 'custom') {\n                section.innerHTML = `\n                    <div class=\"form-group\">\n                        <label class=\"form-label\" for=\"customFormula\">Formula\/Multiplier<\/label>\n                        <input type=\"text\" id=\"customFormula\" class=\"form-control\" placeholder=\"e.g., 9.5 or x*10-5\" oninput=\"handleConversion()\" value=\"9.5\">\n                        <div class=\"helper-text\">Use 'x' as variable. Examples: 9.5, x*10-5, x\/4*100<\/div>\n                        <div class=\"formula-helper\">Valid operators: + - * \/ ( ) ^ <br>Example: x*10-5 or (x\/4)*100<\/div>\n                    <\/div>\n                    <div class=\"form-group\">\n                        <label class=\"form-label\" for=\"mainInput\">${convType?.from === 'cgpa' ? 'CGPA' : 'Input Value'}<\/label>\n                        <input type=\"number\" id=\"mainInput\" class=\"form-control\" placeholder=\"Enter value\" step=\"0.01\" min=\"0\" oninput=\"handleConversion()\" autofocus>\n                        <div class=\"helper-text\">Enter your value to convert<\/div>\n                    <\/div>\n                `;\n            } else if (convType?.from === 'grade' || convType?.to === 'grade') {\n                const grades = Object.keys(GRADE_MAPPING);\n                let gradeOptions = '<option value=\"\">Select a grade<\/option>';\n                grades.forEach(g => {\n                    const mapping = GRADE_MAPPING[g];\n                    gradeOptions += `<option value=\"${g}\">${g} - ${mapping.description} (${mapping.percent}%)<\/option>`;\n                });\n\n                section.innerHTML = `\n                    <div class=\"form-group\">\n                        <label class=\"form-label\" for=\"mainInput\">Select Grade<\/label>\n                        <select id=\"mainInput\" class=\"form-control\" onchange=\"handleConversion()\">\n                            ${gradeOptions}\n                        <\/select>\n                        <div class=\"helper-text\">Select your academic grade<\/div>\n                    <\/div>\n                `;\n            } else {\n                const system = CONVERSION_SYSTEMS[appState.currentSystem];\n                let inputLabel = 'Value';\n                \n                if (convType?.from === 'cgpa') {\n                    inputLabel = `CGPA (0-${system?.max || 10})`;\n                } else if (convType?.from === 'gpa') {\n                    inputLabel = `GPA (0-${system?.max || 4})`;\n                } else if (convType?.from === 'percent') {\n                    inputLabel = 'Percentage (0-100)';\n                }\n\n                section.innerHTML = `\n                    <div class=\"form-group\">\n                        <label class=\"form-label\" for=\"mainInput\">${inputLabel}<\/label>\n                        <input type=\"number\" id=\"mainInput\" class=\"form-control\" placeholder=\"Enter value\" step=\"0.01\" min=\"0\" oninput=\"handleConversion()\" autofocus>\n                        <div class=\"helper-text\">Enter your ${convType?.from === 'cgpa' ? 'CGPA' : convType?.from === 'gpa' ? 'GPA' : 'percentage'}<\/div>\n                    <\/div>\n                `;\n            }\n\n            setTimeout(() => {\n                const input = getElement('mainInput');\n                if (input) input.focus();\n            }, 50);\n        }\n\n        function updateInfoBox() {\n            const infoBox = getElement('infoBox');\n            if (!infoBox) return;\n\n            const system = CONVERSION_SYSTEMS[appState.currentSystem];\n            if (system) {\n                if (!system.isGrade) {\n                    infoBox.textContent = `\u2139\ufe0f ${system.name} \u2022 Scale: 0 to ${system.max} \u2022 Decimals: ${system.decimals}`;\n                } else {\n                    infoBox.textContent = `\u2139\ufe0f ${system.name}`;\n                }\n            }\n        }\n\n        function updateSwapButtonVisibility() {\n            const btn = getElement('swapBtn');\n            if (!btn) return;\n\n            const swappable = ['gpa2cgpa', 'cgpa2gpa', 'gpa2percent', 'percent2gpa', 'cgpa2percent', 'percent2cgpa'];\n            \n            if (swappable.includes(appState.currentConversion)) {\n                btn.classList.add('visible');\n            } else {\n                btn.classList.remove('visible');\n            }\n        }\n\n        \/\/ ============================================================================\n        \/\/ CONVERSION LOGIC\n        \/\/ ============================================================================\n\n        function switchConversion(convId) {\n            appState.currentConversion = convId;\n            saveState();\n            renderTabs();\n            renderInputSection();\n            updateSwapButtonVisibility();\n            updateInfoBox();\n            handleConversion();\n        }\n\n        function getInputValue() {\n            const input = getElement('mainInput');\n            return input ? input.value.trim() : '';\n        }\n\n        function validateInput(value, convType) {\n            if (!value) {\n                return { valid: false, message: '' };\n            }\n\n            \/\/ Grade validation\n            if (convType?.from === 'grade' || convType?.to === 'grade') {\n                if (convType?.from === 'grade' && !GRADE_MAPPING[value]) {\n                    return { valid: false, message: 'Please select a valid grade' };\n                }\n                return { valid: true };\n            }\n\n            if (!isValidNumber(value)) {\n                return { valid: false, message: 'Please enter a valid number' };\n            }\n\n            const num = parseFloat(value);\n\n            if (num < 0) {\n                return { valid: false, message: 'Value cannot be negative' };\n            }\n\n            \/\/ Check against system limits\n            const system = CONVERSION_SYSTEMS[appState.currentSystem];\n            const convTypeData = CONVERSION_TYPES.find(c => c.id === appState.currentConversion);\n\n            if (system && convTypeData) {\n                if (convTypeData.from === 'cgpa' && num > system.max) {\n                    return { valid: false, message: `CGPA cannot exceed ${system.max}` };\n                }\n                if (convTypeData.from === 'percent' && num > 100) {\n                    return { valid: false, message: 'Percentage cannot exceed 100' };\n                }\n                if (convTypeData.from === 'gpa' && !['gpa_scale', 'intl_gpa'].includes(appState.currentConversion)) {\n                    if (num > system.max) {\n                        return { valid: false, message: `GPA cannot exceed ${system.max}` };\n                    }\n                }\n            }\n\n            return { valid: true };\n        }\n\n        function calculateConversion(value) {\n            try {\n                const convType = CONVERSION_TYPES.find(c => c.id === appState.currentConversion);\n                if (!convType) return null;\n\n                \/\/ GPA Scale Converter\n                if (appState.currentConversion === 'gpa_scale') {\n                    const fromScale = parseFloat(getElementValue('fromScale') || 4);\n                    const toScale = parseFloat(getElementValue('toScale') || 5);\n                    const val = parseFloat(value);\n\n                    if (!isFinite(val) || !isFinite(fromScale) || !isFinite(toScale)) return null;\n                    return round((val \/ fromScale) * toScale, 2);\n                }\n\n                \/\/ International GPA Converter\n                if (appState.currentConversion === 'intl_gpa') {\n                    const fromSystemId = getElementValue('fromSystem') || 'gpa5';\n                    const toSystemId = getElementValue('toSystem') || 'gpa4';\n                    const val = parseFloat(value);\n\n                    if (!isFinite(val)) return null;\n                    if (fromSystemId === toSystemId) return val;\n\n                    const systemFrom = CONVERSION_SYSTEMS[fromSystemId];\n                    const systemTo = CONVERSION_SYSTEMS[toSystemId];\n\n                    if (!systemFrom || !systemTo) return null;\n\n                    const toPercent = systemFrom.formula(val);\n                    if (typeof toPercent !== 'number') return null;\n\n                    const result = systemTo.inverse(toPercent);\n                    return result;\n                }\n\n                \/\/ Custom Formula\n                if (appState.currentSystem === 'custom') {\n                    const formula = getElementValue('customFormula') || '9.5';\n                    const val = parseFloat(value);\n\n                    if (!isFinite(val)) return null;\n\n                    try {\n                        const expr = formula.replace(\/x\/g, `(${val})`).replace(\/\\^\/g, '**');\n                        const result = Function('\"use strict\"; return (' + expr + ')')();\n                        if (typeof result === 'number' && isFinite(result)) {\n                            return round(result, 2);\n                        }\n                        return null;\n                    } catch (e) {\n                        return null;\n                    }\n                }\n\n                \/\/ Grade Conversion\n                if (convType.from === 'grade') {\n                    const gradeData = GRADE_MAPPING[value];\n                    if (!gradeData) return null;\n\n                    if (convType.to === 'percent') return gradeData.percent;\n                    if (convType.to === 'gpa') return gradeData.gpa4;\n                    return null;\n                }\n\n                if (convType.to === 'grade') {\n                    const percent = parseFloat(value);\n                    if (!isFinite(percent)) return null;\n\n                    let grade = 'F';\n                    if (percent >= 90) grade = 'O';\n                    else if (percent >= 85) grade = 'A+';\n                    else if (percent >= 80) grade = 'A';\n                    else if (percent >= 75) grade = 'B+';\n                    else if (percent >= 70) grade = 'B';\n                    else if (percent >= 65) grade = 'C+';\n                    else if (percent >= 60) grade = 'C';\n                    else if (percent >= 50) grade = 'D';\n\n                    return grade;\n                }\n\n                \/\/ Standard System Conversion\n                const system = CONVERSION_SYSTEMS[appState.currentSystem];\n                if (!system) return null;\n\n                const val = parseFloat(value);\n                if (!isFinite(val)) return null;\n\n                if (convType.from === 'cgpa' && convType.to === 'percent') {\n                    const result = system.formula(val);\n                    return typeof result === 'number' ? result : null;\n                } else if (convType.from === 'percent' && convType.to === 'cgpa') {\n                    return system.inverse(val);\n                } else if (convType.from === 'gpa' && convType.to === 'percent') {\n                    return system.formula(val);\n                } else if (convType.from === 'percent' && convType.to === 'gpa') {\n                    return system.inverse(val);\n                } else if ((convType.from === 'gpa' && convType.to === 'cgpa') || \n                           (convType.from === 'cgpa' && convType.to === 'gpa')) {\n                    return val;\n                }\n\n                return null;\n            } catch (error) {\n                console.error('Calculation error:', error);\n                return null;\n            }\n        }\n\n        function getFormulaText() {\n            try {\n                const system = CONVERSION_SYSTEMS[appState.currentSystem];\n                if (!system) return 'Formula';\n\n                if (appState.currentConversion === 'gpa_scale') {\n                    const fromScale = getElementValue('fromScale') || 4;\n                    const toScale = getElementValue('toScale') || 5;\n                    return `(x \u00f7 ${fromScale}) \u00d7 ${toScale}`;\n                }\n\n                if (appState.currentSystem === 'custom') {\n                    return getElementValue('customFormula') || 'Formula...';\n                }\n\n                return system.formulaText || system.name;\n            } catch (error) {\n                console.error('Formula text error:', error);\n                return 'Formula';\n            }\n        }\n\n        function handleConversion() {\n            try {\n                const input = getInputValue();\n                const convType = CONVERSION_TYPES.find(c => c.id === appState.currentConversion);\n                const validation = validateInput(input, convType);\n\n                const resultEl = getElement('resultValue');\n                const msgEl = getElement('validationMessage');\n                const progressEl = getElement('progressFill');\n                const formulaEl = getElement('formulaDisplay');\n\n                if (!resultEl || !msgEl || !progressEl || !formulaEl) return;\n\n                msgEl.className = 'validation-message';\n                msgEl.textContent = '';\n\n                if (!input) {\n                    resultEl.textContent = '-';\n                    progressEl.style.width = '0%';\n                    formulaEl.textContent = getFormulaText();\n                    return;\n                }\n\n                if (!validation.valid) {\n                    msgEl.className = 'validation-message error';\n                    msgEl.textContent = validation.message;\n                    resultEl.textContent = '-';\n                    progressEl.style.width = '0%';\n                    return;\n                }\n\n                const result = calculateConversion(input);\n\n                if (result === null || (typeof result === 'number' && !isFinite(result))) {\n                    msgEl.className = 'validation-message error';\n                    msgEl.textContent = 'Invalid calculation. Check your input or formula.';\n                    resultEl.textContent = '-';\n                    progressEl.style.width = '0%';\n                    return;\n                }\n\n                const system = CONVERSION_SYSTEMS[appState.currentSystem];\n                const decimals = system?.decimals || 2;\n                const displayResult = typeof result === 'number' ? result.toFixed(decimals) : String(result);\n\n                resultEl.textContent = displayResult;\n\n                \/\/ Update progress bar\n                let progressPercent = 0;\n                if (convType?.to === 'percent') {\n                    progressPercent = Math.min(Math.max(parseFloat(result) || 0, 0), 100);\n                } else if (convType?.to === 'cgpa' || convType?.to === 'gpa') {\n                    const maxVal = system?.max || 10;\n                    progressPercent = Math.min(Math.max((parseFloat(result) \/ maxVal) * 100, 0), 100);\n                } else if (convType?.to === 'grade') {\n                    progressPercent = 100;\n                }\n\n                progressEl.style.width = progressPercent + '%';\n                formulaEl.textContent = getFormulaText();\n\n                msgEl.className = 'validation-message success';\n                msgEl.textContent = '\u2713 Calculation complete';\n\n                appState.lastInputValue = input;\n            } catch (error) {\n                console.error('Conversion error:', error);\n                const msgEl = getElement('validationMessage');\n                if (msgEl) {\n                    msgEl.className = 'validation-message error';\n                    msgEl.textContent = 'Error during conversion';\n                }\n            }\n        }\n\n        \/\/ ============================================================================\n        \/\/ USER ACTIONS\n        \/\/ ============================================================================\n\n        function copyResult() {\n            try {\n                const result = getElement('resultValue')?.textContent || '';\n\n                if (result === '-') {\n                    showNotification('No result to copy', 'warning');\n                    return;\n                }\n\n                if (navigator.clipboard && navigator.clipboard.writeText) {\n                    navigator.clipboard.writeText(result)\n                        .then(() => showNotification(`Copied: ${result}`, 'success'))\n                        .catch(() => fallbackCopy(result));\n                } else {\n                    fallbackCopy(result);\n                }\n            } catch (error) {\n                console.error('Copy error:', error);\n                showNotification('Failed to copy', 'error');\n            }\n        }\n\n        function fallbackCopy(text) {\n            try {\n                const textarea = document.createElement('textarea');\n                textarea.value = text;\n                textarea.style.position = 'fixed';\n                textarea.style.opacity = '0';\n                textarea.style.pointerEvents = 'none';\n                document.body.appendChild(textarea);\n                textarea.select();\n                document.execCommand('copy');\n                document.body.removeChild(textarea);\n                showNotification(`Copied: ${text}`, 'success');\n            } catch (error) {\n                showNotification('Copy failed', 'error');\n            }\n        }\n\n        function resetForm() {\n            try {\n                const input = getElement('mainInput');\n                if (input) {\n                    input.value = '';\n                    input.type === 'select-one' ? (input.selectedIndex = 0) : null;\n                }\n\n                const customFormula = getElement('customFormula');\n                if (customFormula) customFormula.value = '9.5';\n\n                setElementText('resultValue', '-');\n                getElement('progressFill').style.width = '0%';\n                getElement('validationMessage').textContent = '';\n\n                if (input) input.focus();\n                showNotification('Form reset', 'success');\n            } catch (error) {\n                console.error('Reset error:', error);\n                showNotification('Reset error', 'error');\n            }\n        }\n\n        function swapConversion() {\n            try {\n                const swapMap = {\n                    'cgpa2percent': 'percent2cgpa',\n                    'percent2cgpa': 'cgpa2percent',\n                    'gpa2percent': 'percent2gpa',\n                    'percent2gpa': 'gpa2percent',\n                    'gpa2cgpa': 'cgpa2gpa',\n                    'cgpa2gpa': 'gpa2cgpa'\n                };\n\n                const newConv = swapMap[appState.currentConversion];\n                if (!newConv) return;\n\n                const result = getElement('resultValue')?.textContent || '';\n                appState.lastSwappedValue = result;\n\n                switchConversion(newConv);\n\n                if (result && result !== '-') {\n                    setTimeout(() => {\n                        try {\n                            const input = getElement('mainInput');\n                            if (input) {\n                                input.value = result;\n                                input.focus();\n                                handleConversion();\n                            }\n                        } catch (error) {\n                            console.error('Swap input error:', error);\n                        }\n                    }, 100);\n                }\n            } catch (error) {\n                console.error('Swap error:', error);\n                showNotification('Swap failed', 'error');\n            }\n        }\n\n        function showNotification(message, type = 'info') {\n            try {\n                const notification = document.createElement('div');\n                notification.className = `notification ${type}`;\n                notification.textContent = message;\n                notification.setAttribute('role', 'alert');\n                notification.setAttribute('aria-live', 'assertive');\n                document.body.appendChild(notification);\n\n                setTimeout(() => {\n                    notification.style.opacity = '0';\n                    setTimeout(() => {\n                        try {\n                            if (document.body.contains(notification)) {\n                                document.body.removeChild(notification);\n                            }\n                        } catch (e) {}\n                    }, 300);\n                }, 3000);\n            } catch (error) {\n                console.error('Notification error:', error);\n            }\n        }\n\n        function setupEventListeners() {\n            try {\n                document.addEventListener('keypress', (e) => {\n                    if (e.key === 'Enter' && document.activeElement.id === 'mainInput') {\n                        handleConversion();\n                    }\n                });\n\n                document.addEventListener('keydown', (e) => {\n                    if (e.key === 'Escape') {\n                        const input = getElement('mainInput');\n                        if (input) input.value = '';\n                        handleConversion();\n                    }\n                });\n            } catch (error) {\n                console.error('Event listener setup error:', error);\n            }\n        }\n\n        \/\/ ============================================================================\n        \/\/ APPLICATION STARTUP\n        \/\/ ============================================================================\n\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initialize);\n        } else {\n            initialize();\n        }\n\n        window.addEventListener('error', (event) => {\n            console.error('Global error:', event.error);\n        });\n\n        window.addEventListener('unhandledrejection', (event) => {\n            console.error('Unhandled rejection:', event.reason);\n        });\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>All-in-One GPA\/CGPA\/Percentage Converter GPA\/CGPA Converter Advanced Multi-System Converter System\/University CBSE \/ Most UniversitiesIITs \/ NITUniversal 10-Point ScaleAnna UniversityVTU SystemDelhi UniversityMumbai UniversityAKTUIGNOU International 4.0 GPAInternational 5.0 GPAECTS (European)UK Honours ClassificationCanadian GPAAustralian GPA Custom Formula Select your institution or grading system \u21c5 Result \u2013 \u2013 \ud83d\udccb Copy \ud83d\udd04 Reset<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-824","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>All-in-One GPA \/ CGPA \/ Percentage Converter - HB Tech Hindi<\/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:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"All-in-One GPA \/ CGPA \/ Percentage Converter - HB Tech Hindi\" \/>\n<meta property=\"og:description\" content=\"All-in-One GPA\/CGPA\/Percentage Converter GPA\/CGPA Converter Advanced Multi-System Converter System\/University CBSE \/ Most UniversitiesIITs \/ NITUniversal 10-Point ScaleAnna UniversityVTU SystemDelhi UniversityMumbai UniversityAKTUIGNOU International 4.0 GPAInternational 5.0 GPAECTS (European)UK Honours ClassificationCanadian GPAAustralian GPA Custom Formula Select your institution or grading system \u21c5 Result \u2013 \u2013 \ud83d\udccb Copy \ud83d\udd04 Reset\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/\" \/>\n<meta property=\"og:site_name\" content=\"HB Tech Hindi\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-22T12:52:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hbtech.co.in\/hi\/wp-content\/uploads\/2025\/03\/HB-Tech-Logo-512-x-512-px.png\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/scam-number-checker-deepseek\\\/\",\"url\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/scam-number-checker-deepseek\\\/\",\"name\":\"All-in-One GPA \\\/ CGPA \\\/ Percentage Converter - HB Tech Hindi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/#website\"},\"datePublished\":\"2025-06-20T14:27:49+00:00\",\"dateModified\":\"2026-05-22T12:52:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/scam-number-checker-deepseek\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/scam-number-checker-deepseek\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/scam-number-checker-deepseek\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"All-in-One GPA \\\/ CGPA \\\/ Percentage Converter\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/#website\",\"url\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/\",\"name\":\"HB Tech\",\"description\":\"HB Tech: The Power Behind Progress\",\"publisher\":{\"@id\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/#organization\",\"name\":\"HB Tech Hindi\",\"url\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/HB-Tech-Logo-512-x-512-px.png\",\"contentUrl\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/HB-Tech-Logo-512-x-512-px.png\",\"width\":512,\"height\":512,\"caption\":\"HB Tech Hindi\"},\"image\":{\"@id\":\"https:\\\/\\\/hbtech.co.in\\\/hi\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"All-in-One GPA \/ CGPA \/ Percentage Converter - HB Tech Hindi","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:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/","og_locale":"en_US","og_type":"article","og_title":"All-in-One GPA \/ CGPA \/ Percentage Converter - HB Tech Hindi","og_description":"All-in-One GPA\/CGPA\/Percentage Converter GPA\/CGPA Converter Advanced Multi-System Converter System\/University CBSE \/ Most UniversitiesIITs \/ NITUniversal 10-Point ScaleAnna UniversityVTU SystemDelhi UniversityMumbai UniversityAKTUIGNOU International 4.0 GPAInternational 5.0 GPAECTS (European)UK Honours ClassificationCanadian GPAAustralian GPA Custom Formula Select your institution or grading system \u21c5 Result \u2013 \u2013 \ud83d\udccb Copy \ud83d\udd04 Reset","og_url":"https:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/","og_site_name":"HB Tech Hindi","article_modified_time":"2026-05-22T12:52:45+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/hbtech.co.in\/hi\/wp-content\/uploads\/2025\/03\/HB-Tech-Logo-512-x-512-px.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/","url":"https:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/","name":"All-in-One GPA \/ CGPA \/ Percentage Converter - HB Tech Hindi","isPartOf":{"@id":"https:\/\/hbtech.co.in\/hi\/#website"},"datePublished":"2025-06-20T14:27:49+00:00","dateModified":"2026-05-22T12:52:45+00:00","breadcrumb":{"@id":"https:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/hbtech.co.in\/hi\/scam-number-checker-deepseek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/hbtech.co.in\/hi\/"},{"@type":"ListItem","position":2,"name":"All-in-One GPA \/ CGPA \/ Percentage Converter"}]},{"@type":"WebSite","@id":"https:\/\/hbtech.co.in\/hi\/#website","url":"https:\/\/hbtech.co.in\/hi\/","name":"HB Tech","description":"HB Tech: The Power Behind Progress","publisher":{"@id":"https:\/\/hbtech.co.in\/hi\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hbtech.co.in\/hi\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/hbtech.co.in\/hi\/#organization","name":"HB Tech Hindi","url":"https:\/\/hbtech.co.in\/hi\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/hbtech.co.in\/hi\/#\/schema\/logo\/image\/","url":"https:\/\/hbtech.co.in\/hi\/wp-content\/uploads\/2025\/03\/HB-Tech-Logo-512-x-512-px.png","contentUrl":"https:\/\/hbtech.co.in\/hi\/wp-content\/uploads\/2025\/03\/HB-Tech-Logo-512-x-512-px.png","width":512,"height":512,"caption":"HB Tech Hindi"},"image":{"@id":"https:\/\/hbtech.co.in\/hi\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/hbtech.co.in\/hi\/wp-json\/wp\/v2\/pages\/824","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hbtech.co.in\/hi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hbtech.co.in\/hi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hbtech.co.in\/hi\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hbtech.co.in\/hi\/wp-json\/wp\/v2\/comments?post=824"}],"version-history":[{"count":10,"href":"https:\/\/hbtech.co.in\/hi\/wp-json\/wp\/v2\/pages\/824\/revisions"}],"predecessor-version":[{"id":1067,"href":"https:\/\/hbtech.co.in\/hi\/wp-json\/wp\/v2\/pages\/824\/revisions\/1067"}],"wp:attachment":[{"href":"https:\/\/hbtech.co.in\/hi\/wp-json\/wp\/v2\/media?parent=824"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}