{"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\">&#8211;<\/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\">&#8211;<\/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 &#8211; &#8211; \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 v28.1 - 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 &#8211; &#8211; \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 &#8211; &#8211; \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}]}}